Linux で絶対に避けるべき 8 つのタイプミス

公開: 2023-01-15
「おっと!」とラベル付けされたキーボード キーの拡大図
Redpixel.pl/Shutterstock
「Enter」を押す前に、コマンドを正しく入力したことを再確認してください。 Linux では、タイプミスが破壊的な影響を与える可能性があります。 タブ補完を使用して、できるだけ多くのコマンド ライン エントリを自動入力します。 長くて複雑なコマンドのエイリアスも素晴らしいアイデアです。

Linux コマンド ラインは、強力な機能を提供します。 問題は、その力を正しく使用できるかどうかがタイピングの正確さにかかっていることです。 絶対に作りたくない 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コマンドは、ユーザーのグループを一覧表示します。

 グループ

groups コマンドを使用してユーザーのグループを一覧表示する

ユーザーdaveを新しいグループに追加します。 -a (追加) は、ユーザーが属する既存のグループのリストに新しいグループを追加します。 -G (グループ) オプションは、グループを識別します。

 sudo usermod -a -G vboxusers dave 

usermod コマンドを使用して、新しいグループにユーザーを追加する

ユーザーがログインおよびログアウトすると、新しいグループが表示されます。

 グループ

このユーザーが所属するグループのリストに表示される vboxusers グループ

彼は現在、「vboxusers」グループに所属しています。 ただし、 -a (追加) オプションの使用を忘れると、ユーザーの既存のグループがすべて削除されます。 彼らが所属する唯一のグループは、新しいグループです。

これは間違ったコマンドです:

 sudo usermod -G vboxusers dave 

-a append オプションを使用せずにユーザーをグループに追加する

次にログインすると、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 

grep を使用して、lsblk コマンドの出力で「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=f​​datasync status=progress 

dd コマンドで USB メモリスティックにイメージを書き込む

パスワードの入力を求められた後、 ddが動作を開始します。 「よろしいですか?」はありません。 警告または撤回の機会。 書き込みはすぐに開始されます。

イメージを USB メモリスティックに書き込むときの dd 進行状況表示

ただし、ドライブ識別子に間違った文字を入力し、それが既存のハード ドライブと一致する場合は、メモリ スティックではなくそのドライブを上書きします。

これは間違ったコマンドです:

 sudo dd bs=4M if=Downloads/distro-image.iso of=/dev/sda conv=f​​datasync status=progress 

イメージを誤ってメイン ハード ドライブに書き込むと、エラー メッセージが表示されて終了する

ddに「/dev/sd a 」を使用するように指示したので、使用しました。 書き込みアクションははるかに高速ですが、警告で終了します。 Linux インストールを破棄しました。

「Enter」を押す前に、ドライブ識別子を確認して再確認してください。

関連: Linux で ISO ファイルを USB ドライブに書き込む方法

3. mkfs で間違ったドライブ識別子を使用する

mkfsツールなど、コマンド ラインの一部としてドライブ識別子を使用するコマンドは他にもあります。 これらは、パーティションにファイル システムを作成してドライブをフォーマットします。

このコンピューターには、25GB ドライブと 10GB ドライブがあります。

grep を介してパイプ処理された lsblk の出力で、コンピューターのハード ドライブが表示されている

10GB ドライブの最初のパーティションに Ext4 ファイル システムを作成する場合は、これらのコマンドを使用します。

 sudo umount /dev/sdb1
 須藤 mkfs.ext4 /dev/sdb1 

USB メモリ スティックに ext4 ファイル システムを作成する

しかし、ドライブ識別子に「b」ではなく「a」を使用すると、25GB ドライブのパーティションの 1 つが消去され、コンピューターが起動できなくなります。

これは間違ったコマンドです:

 sudo umount /dev/sda1
 須藤 mkfs.ext4 /dev/sda1 

コンピュータのメイン ドライブを誤ってフォーマットする

その小さな文字にはパンチが詰まっているので、正しいドライブを打っていることを確認してください。

関連: Linux で mkfs コマンドを使用する方法

4. crontab ファイルを削除しない

cronデーモンは、あらかじめ決められた時間にタスクを実行します。 crontabファイルから構成を取得します。 root を含む各ユーザーは、 crontabファイルを持つことができます。 crontabを編集するには、次のコマンドを使用します。

 crontab -e 

crontab ファイルを編集するコマンド: crontab -e

crontabファイルがエディターで開かれます。 変更を行ったり、新しいコマンドを追加したりできます。

エディターで開かれた crontab ファイル

ただし、コマンドのタイプを間違えて「e」ではなく「r」を押すと、 crontabファイルが削除されます (delete と同様)。

これは間違ったコマンドです:

 crontab -r 

crontab ファイルを削除するコマンド: crontab -r

次にcrontab -eコマンドを使用すると、デフォルトの空のファイルが表示されます。

ほとんどのキーボードでは「e」と「r」が隣り合っているため、これは間違いやすいです。 複雑なcrontabファイルを再構築するのは楽しくありません。

関連: cron ジョブとは何ですか? また、どのように使用しますか?

5. 繰り返される歴史

キーストロークを減らして時間を節約しようとしている場合は、 historyコマンドを使用すると便利です。 長いコマンドを履歴から引き出すことができれば、速度と精度が向上します。 履歴から適切なコマンドを選択する限り。

historyコマンドは、以前のコマンドをターミナル ウィンドウに一覧表示します。 番号が付けられています。 コマンドを再利用するには、その番号の前に感嘆符「 ! 」を入力し、「Enter」キーを押します。

 歴史

Git リポジトリのクローンを作成し、それをめちゃくちゃにして削除したとします。 もう一度複製する必要があります。 ターミナル ウィンドウをスクロールすると、 git cloneコマンドがすぐに見つかります。 次のように入力して、再実行できます。

 !60

しかし、画面をちらりと見ただけで番号を読み間違えた場合は、次の番号を誤って選択する可能性があります。

 !61

これにより、リスト内の次のコマンドrm *が実行されます。 これにより、現在のディレクトリ内のすべてのファイルが削除されます。

! 」を使用することもできます。 」 感嘆符とテキストの文字列。 最初に一致したコマンドが実行されます。 思い描いていたものかどうかを確認できるように表示されるのではなく、すぐに実行されます。

「restart.sh」というスクリプトがあるシナリオを想像してください。 このスクリプトは、作成中のソフトウェアの一連の構成ファイルをデフォルトに設定します。 定期的に、開発とテストを行うときに、スレートを完全に消去する必要があるため、スクリプトを呼び出します。

このコマンドは、履歴内のコマンドを見つけて照合し、実行するのに十分なはずです。

ただし、スクリプトを最後に使用してからrebootコマンドを使用した場合は、 rebootコマンドが検出され、すぐに実行されます。

rm * コマンドが間違って実行されている

シングルユーザーのホーム コンピューターでは、これはおそらく単なる煩わしさです。 共有サーバーでは、他の多くの人にとっても迷惑です。

関連: Linux で history コマンドを使用する方法

6. 宇宙の災厄

ファイル名とディレクトリ パスにスペースがあると、問題が発生する可能性があります。 そのため、常にエスケープまたは引用符で囲む必要があります。

Linux でファイル名のスペースを処理する方法
関連Linux でファイル名のスペースを処理する方法

タブ補完を使用すると、スペースの問題を回避できます。 ファイル名またはディレクトリ パスを入力するときに「Tab」キーを押すと、シェルは可能な限り多くのパスまたはファイル名を自動補完します。 必要なファイルと同じ名前の一部を共有する他のファイルを区別するために文字を入力する必要がある場合がありますが、「Tab」キーをもう一度押すと、ファイル名の残りの部分が完成します。

これにより、キーストロークが節約され、入力ミスによるスペースの侵入が防止され、問題が発生しないように正当なスペースが正しくエスケープされます。

「geocoder」と「bin」という 2 つのディレクトリを含む「Development」ディレクトリがあるとします。 「geocoder」ディレクトリ内には「bin」ディレクトリもあります。

「geocoder/bin」ディレクトリ内のファイルを削除してディレクトリを削除するには、このコマンドを使用します。

 rm -r ジオコーダ/ビン

geocoder/bin ディレクトリの削除

このように、「geocoder/」の後に誤ってスペースを追加したとします。

これは間違ったコマンドです:

 rm -r ジオコーダ/ビン

geocoder および bin ディレクトリを誤って削除する

ブーム。 「開発」ディレクトリは空になりました。 「Development/geocoder」、「Development/geocoder/bin」、および「Development/bin」ディレクトリはすべて完全に削除されました。

タブ補完はあなたの友達です。

関連:タブ補完を使用して、任意のオペレーティング システムでコマンドをより速く入力する

7. >> の代わりに > を使う

リダイレクトは、プロセスの出力をファイルに送信します。 大なり記号「 > 」を使用して、プロセスからの出力をキャプチャします。 ファイルが存在する場合は、最初に空にされます。

メモリリークを調査しているとしましょう。 「memlog.sh」というスクリプトがあります。 1 秒に 1 回メモリ統計を表示します。 後で分析するために、これを「memory.txt」というファイルにリダイレクトします。

 memlog.sh > メモリ.txt
 ヘッドメモリー.txt 

memlog.sh スクリプトからの出力のキャプチャと表示

翌日、調査を続行したいので、スクリプトを再起動します。 今回は、新しいデータがファイルに追加されるように、 2 つの大なり記号「 >> 」を使用する必要があります。

 memlog.sh >> メモリ.txt 

既存のファイルの最後に新しいデータを追加する

大なり記号「>」を 1 つ使用すると、ファイルが最初に空になるため、昨日のデータが失われます。

関連: Linux の stdin、stdout、および stderr とは何ですか?

8. 間違った方向へのリダイレクト

リダイレクトでは、ファイルの内容をプログラムへの入力として使用できます。

sqlite3にインポートしたい「placenames.sql」というファイルがあります。 スキーマ ファイルには、データベース テーブルを再作成する方法が記述されています。 また、データベースに保存するデータも保持します。 1.3GB で 1100 万行を超える大きなファイルです。

 ls -hl placenames.sql
 トイレの場所名.sql 

ls と wc でファイルのサイズを確認する

このコマンドで「places.sqlite3」という新しいデータベースを作成できます。

 sqlite3 場所.sqlite3 < 場所名.sql 

ファイルから sqlite3 へのスキーマのインポート

多くの場合、リダイレクトするときは「>」文字を使用します。 習慣から「>」を入力しないように集中する必要があります。 その場合、 sqlite3が生成する出力はすべてスキーマ ファイルに書き込まれ、消去されます。

これは間違ったコマンドです:

 sqlite3 場所.sqlite3 > 場所名.sql 

sqlite3 から誤ってスキーマ ファイルにリダイレクトする

スキーマ ファイルが破壊され、 sqlite3シェルからのウェルカム メッセージによって上書きされました。

 猫の場所名.sql 

sqlite3 ウェルカム メッセージを含む上書きされたスキーマ ファイル

さようなら、1.3GBのデータ。

コマンドラインのタイプミスを避ける方法

この種の間違いを避けるために採用できる良い習慣があります。

可能な限りタブ補完を使用してください。 ディレクトリ パスとファイル名に含まれるスペースの問題を回避できます。

ときどき使用する必要がある長くて複雑なコマンドには、覚えやすい短いエイリアスを独自に作成します。 そうすれば、間違ったオプションやパラメーターを使用して混乱することはありません。

Linux ターミナルで入力を減らして作業を高速化する方法
関連Linux ターミナルで入力を減らして作業を高速化する方法

自分の文章を校正するのは非常に難しいことで知られていますが、それはコマンド ラインで行う必要があることです。 実際に何があるかを読んでください。 ちらっと見て、タイプしようとしていたことが書かれていると思わないでください。 それは本当に何を言っていますか? それが本当にやろうとしていることだからです。

関連: Linuxで絶対に実行してはいけない8つの致命的なコマンド