Linux で絶対に避けるべき 8 つのタイプミス
公開: 2023-01-15Linux コマンド ラインは、強力な機能を提供します。 問題は、その力を正しく使用できるかどうかがタイピングの正確さにかかっていることです。 絶対に作りたくない 8 つのタイプミスを次に示します。
Linux コマンドライン
1. -aを忘れないで
2. dd で間違ったドライブ識別子を使用する
3. mkfs で間違ったドライブ識別子を使用する
4. crontab ファイルを削除しない
5. 繰り返される歴史
6. 宇宙の災厄
7. >> の代わりに > を使う
8. 間違った方向へのリダイレクト
コマンドラインのタイプミスを避ける方法
Linux コマンドライン
Linux のコマンド ラインは大きな力への入り口ですが、その力があなたに背を向けるには、タイプミスが 1 つあれば十分です。 絶対に実行してはいけないコマンドについて聞いたことがあるでしょう。 ここで話しているのは、実際に実行したいコマンドですが、1 つ間違えると大惨事になる可能性があるコマンドです。
「Enter」を押すと、入力したすべてがシェルによって処理されます。 エイリアスと変数が展開されます。 コマンド、オプション、およびパラメーターが識別されます。 これを解析と呼びます。 次のステップでは、解析された入力を、指示を実行するコマンドに渡します。
コマンドの入力を間違えると、構文エラーとしてトラップされる可能性があります。 しかし、間違いによって別の有効なコマンド ラインが作成された場合は、それが実行されます。
単純なタイプミスは本当に破壊的です。 破壊のレベルは、コマンドとミスによって異なります。 時間を失う可能性があります。 ファイルを失う可能性があります。 ファイル システム全体が失われる可能性があります。
関連: Bash シェルとは何ですか? Linux にとってなぜ Bash シェルが重要なのですか?
1. -aを忘れないで
たとえば、特定のソフトウェアを使用できるようにするために、グループに誰かを追加する必要がある場合があります。 たとえば、VirtualBox では、ユーザーが「vboxusers」グループに属している必要があります。 usermod
でそれを行うことができます。
groups
コマンドは、ユーザーのグループを一覧表示します。
グループ
ユーザーdave
を新しいグループに追加します。 -a
(追加) は、ユーザーが属する既存のグループのリストに新しいグループを追加します。 -G
(グループ) オプションは、グループを識別します。
sudo usermod -a -G vboxusers dave
ユーザーがログインおよびログアウトすると、新しいグループが表示されます。
グループ
彼は現在、「vboxusers」グループに所属しています。 ただし、 -a
(追加) オプションの使用を忘れると、ユーザーの既存のグループがすべて削除されます。 彼らが所属する唯一のグループは、新しいグループです。
これは間違ったコマンドです:
sudo usermod -G vboxusers dave
次にログインすると、1 つのグループにしか属していないことがわかります。
グループ
構成済みのユーザーが 1 人しかいない場合、そのユーザーに対してこれを行うと、深刻な問題が発生します。 1 つは、ユーザーが「sudo」グループのメンバーではないため、 sudo
を使用して修正を開始できないことです。
関連: Linux でユーザーをグループ (または 2 番目のグループ) に追加する
2. dd で間違ったドライブ識別子を使用する
dd
コマンドは、データのブロックをファイル システムに書き込みます。 多くの場合、ISO イメージを USB メモリスティックに書き込むために使用されます。
ストレージ デバイスの Linux 命名スキームでは、識別に 1 文字を使用します。 最初のハード ドライブは「/dev/sda」、2 番目は「/dev/sdb」、3 番目は「/dev/sdc」というように名前が付けられます。 パーティションは番号で識別されます。 最初のハード ドライブの最初のパーティションは「/dev/sda1」、2 番目は「/dev/sda2」などです。
イメージを USB メモリ スティックに書き込む場合、USB メモリ スティックのドライブ識別子を知る必要があります。 grep
を介してlsblk
をパイプし、「sd」を含むエントリを探して、それを見つけます。
lsblk | grep sd
ハードドライブ「/dev/sda」は、3 つのパーティションを持つ 32GB ドライブであることがわかります。 パーティションの 1 つは「/boot」パーティションで、パーティション「/dev/sda3」はファイル システムのルートである「/」にマウントされます。
ハード ドライブ「/dev/sdb」は 7.5GB ドライブとして報告されます。 「/media/dave/Pink」にマウントされています。 明らかに、ドライブ「/dev/sda」はこのコンピューターのメインのハード ドライブであり、「/dev/sdb」は USB メモリ スティックです。
「~/Downloads」ディレクトリにある ISO ファイルを USB メモリ スティックに書き込むコマンドは次のとおりです。
sudo dd bs=4M if=Downloads/distro-image.iso of=/dev/sdb conv=fdatasync status=progress
パスワードの入力を求められた後、 dd
が動作を開始します。 「よろしいですか?」はありません。 警告または撤回の機会。 書き込みはすぐに開始されます。
ただし、ドライブ識別子に間違った文字を入力し、それが既存のハード ドライブと一致する場合は、メモリ スティックではなくそのドライブを上書きします。
これは間違ったコマンドです:
sudo dd bs=4M if=Downloads/distro-image.iso of=/dev/sda conv=fdatasync status=progress
dd
に「/dev/sd a 」を使用するように指示したので、使用しました。 書き込みアクションははるかに高速ですが、警告で終了します。 Linux インストールを破棄しました。
「Enter」を押す前に、ドライブ識別子を確認して再確認してください。
関連: Linux で ISO ファイルを USB ドライブに書き込む方法
3. mkfs で間違ったドライブ識別子を使用する
mkfs
ツールなど、コマンド ラインの一部としてドライブ識別子を使用するコマンドは他にもあります。 これらは、パーティションにファイル システムを作成してドライブをフォーマットします。
このコンピューターには、25GB ドライブと 10GB ドライブがあります。
10GB ドライブの最初のパーティションに Ext4 ファイル システムを作成する場合は、これらのコマンドを使用します。
sudo umount /dev/sdb1
須藤 mkfs.ext4 /dev/sdb1
しかし、ドライブ識別子に「b」ではなく「a」を使用すると、25GB ドライブのパーティションの 1 つが消去され、コンピューターが起動できなくなります。
これは間違ったコマンドです:
sudo umount /dev/sda1
須藤 mkfs.ext4 /dev/sda1
その小さな文字にはパンチが詰まっているので、正しいドライブを打っていることを確認してください。
関連: Linux で mkfs コマンドを使用する方法
4. crontab ファイルを削除しない
cron
デーモンは、あらかじめ決められた時間にタスクを実行します。 crontab
ファイルから構成を取得します。 root を含む各ユーザーは、 crontab
ファイルを持つことができます。 crontab
を編集するには、次のコマンドを使用します。
crontab -e
crontab
ファイルがエディターで開かれます。 変更を行ったり、新しいコマンドを追加したりできます。
ただし、コマンドのタイプを間違えて「e」ではなく「r」を押すと、 crontab
ファイルが削除されます (delete と同様)。
これは間違ったコマンドです:
crontab -r
次にcrontab -e
コマンドを使用すると、デフォルトの空のファイルが表示されます。
ほとんどのキーボードでは「e」と「r」が隣り合っているため、これは間違いやすいです。 複雑なcrontab
ファイルを再構築するのは楽しくありません。
関連: cron ジョブとは何ですか? また、どのように使用しますか?
5. 繰り返される歴史
キーストロークを減らして時間を節約しようとしている場合は、 history
コマンドを使用すると便利です。 長いコマンドを履歴から引き出すことができれば、速度と精度が向上します。 履歴から適切なコマンドを選択する限り。
history
コマンドは、以前のコマンドをターミナル ウィンドウに一覧表示します。 番号が付けられています。 コマンドを再利用するには、その番号の前に感嘆符「 !
」を入力し、「Enter」キーを押します。
歴史
Git リポジトリのクローンを作成し、それをめちゃくちゃにして削除したとします。 もう一度複製する必要があります。 ターミナル ウィンドウをスクロールすると、 git clone
コマンドがすぐに見つかります。 次のように入力して、再実行できます。
!60
しかし、画面をちらりと見ただけで番号を読み間違えた場合は、次の番号を誤って選択する可能性があります。
!61
これにより、リスト内の次のコマンドrm *
が実行されます。 これにより、現在のディレクトリ内のすべてのファイルが削除されます。
「 !
」を使用することもできます。 」 感嘆符とテキストの文字列。 最初に一致したコマンドが実行されます。 思い描いていたものかどうかを確認できるように表示されるのではなく、すぐに実行されます。
「restart.sh」というスクリプトがあるシナリオを想像してください。 このスクリプトは、作成中のソフトウェアの一連の構成ファイルをデフォルトに設定します。 定期的に、開発とテストを行うときに、スレートを完全に消去する必要があるため、スクリプトを呼び出します。
このコマンドは、履歴内のコマンドを見つけて照合し、実行するのに十分なはずです。
再
ただし、スクリプトを最後に使用してからreboot
コマンドを使用した場合は、 reboot
コマンドが検出され、すぐに実行されます。
シングルユーザーのホーム コンピューターでは、これはおそらく単なる煩わしさです。 共有サーバーでは、他の多くの人にとっても迷惑です。
関連: Linux で history コマンドを使用する方法
6. 宇宙の災厄
ファイル名とディレクトリ パスにスペースがあると、問題が発生する可能性があります。 そのため、常にエスケープまたは引用符で囲む必要があります。
タブ補完を使用すると、スペースの問題を回避できます。 ファイル名またはディレクトリ パスを入力するときに「Tab」キーを押すと、シェルは可能な限り多くのパスまたはファイル名を自動補完します。 必要なファイルと同じ名前の一部を共有する他のファイルを区別するために文字を入力する必要がある場合がありますが、「Tab」キーをもう一度押すと、ファイル名の残りの部分が完成します。
これにより、キーストロークが節約され、入力ミスによるスペースの侵入が防止され、問題が発生しないように正当なスペースが正しくエスケープされます。
「geocoder」と「bin」という 2 つのディレクトリを含む「Development」ディレクトリがあるとします。 「geocoder」ディレクトリ内には「bin」ディレクトリもあります。
「geocoder/bin」ディレクトリ内のファイルを削除してディレクトリを削除するには、このコマンドを使用します。
rm -r ジオコーダ/ビン
このように、「geocoder/」の後に誤ってスペースを追加したとします。
これは間違ったコマンドです:
rm -r ジオコーダ/ビン
ブーム。 「開発」ディレクトリは空になりました。 「Development/geocoder」、「Development/geocoder/bin」、および「Development/bin」ディレクトリはすべて完全に削除されました。
タブ補完はあなたの友達です。
関連:タブ補完を使用して、任意のオペレーティング システムでコマンドをより速く入力する
7. >> の代わりに > を使う
リダイレクトは、プロセスの出力をファイルに送信します。 大なり記号「 >
」を使用して、プロセスからの出力をキャプチャします。 ファイルが存在する場合は、最初に空にされます。
メモリリークを調査しているとしましょう。 「memlog.sh」というスクリプトがあります。 1 秒に 1 回メモリ統計を表示します。 後で分析するために、これを「memory.txt」というファイルにリダイレクトします。
memlog.sh > メモリ.txt
ヘッドメモリー.txt
翌日、調査を続行したいので、スクリプトを再起動します。 今回は、新しいデータがファイルに追加されるように、 2 つの大なり記号「 >>
」を使用する必要があります。
memlog.sh >> メモリ.txt
大なり記号「>」を 1 つ使用すると、ファイルが最初に空になるため、昨日のデータが失われます。
関連: Linux の stdin、stdout、および stderr とは何ですか?
8. 間違った方向へのリダイレクト
リダイレクトでは、ファイルの内容をプログラムへの入力として使用できます。
sqlite3
にインポートしたい「placenames.sql」というファイルがあります。 スキーマ ファイルには、データベース テーブルを再作成する方法が記述されています。 また、データベースに保存するデータも保持します。 1.3GB で 1100 万行を超える大きなファイルです。
ls -hl placenames.sql
トイレの場所名.sql
このコマンドで「places.sqlite3」という新しいデータベースを作成できます。
sqlite3 場所.sqlite3 < 場所名.sql
多くの場合、リダイレクトするときは「>」文字を使用します。 習慣から「>」を入力しないように集中する必要があります。 その場合、 sqlite3
が生成する出力はすべてスキーマ ファイルに書き込まれ、消去されます。
これは間違ったコマンドです:
sqlite3 場所.sqlite3 > 場所名.sql
スキーマ ファイルが破壊され、 sqlite3
シェルからのウェルカム メッセージによって上書きされました。
猫の場所名.sql
さようなら、1.3GBのデータ。
コマンドラインのタイプミスを避ける方法
この種の間違いを避けるために採用できる良い習慣があります。
可能な限りタブ補完を使用してください。 ディレクトリ パスとファイル名に含まれるスペースの問題を回避できます。
ときどき使用する必要がある長くて複雑なコマンドには、覚えやすい短いエイリアスを独自に作成します。 そうすれば、間違ったオプションやパラメーターを使用して混乱することはありません。
自分の文章を校正するのは非常に難しいことで知られていますが、それはコマンド ラインで行う必要があることです。 実際に何があるかを読んでください。 ちらっと見て、タイプしようとしていたことが書かれていると思わないでください。 それは本当に何を言っていますか? それが本当にやろうとしていることだからです。
関連: Linuxで絶対に実行してはいけない8つの致命的なコマンド