このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

Linuxのトラブル時の操作

 Linuxのシェル操作中に、キーボード入力が受け付けられなくなったり、プロンプトが返ってこないなどの不具合に遭遇することがあります。初心者のうちはこのような事態に直面すると、「システムを壊してしまったのではないか」と不安になるかもしれませんが、多くの場合、単純な操作ミスが原因です。ここでは、シェル操作中に起こりうるトラブルとその対処方法について詳しく解説します。

キーボードからの操作を一切受け付けない場合

 突然、キーボードから文字を入力しても画面に一切表示されなくなることがあります。これは、画面への表示をロックする 「Ctrl + s」 を誤って押してしまったことが原因です。特に、「Ctrl + s」は一般的に「保存」のショートカットとして使われるため、誤操作しやすいキーです。

この場合、「Ctrl + q」 を押すことでロックを解除できます。

実践例:「Ctrl + s」を誤って押す。
user01@ubuntu:~$         # ここで「Ctrl + s」を誤って押してみます。
user01@ubuntu:~$ adfafag # ここで「Ctrl + q」を押します。溜まっていたキーボード入力が出力される。
画面表示のロックと解除のコマンド
コマンド説明
Ctrl + s画面への出力をロックする(フロー制御の停止)
Ctrl + q画面への出力のロックを解除する(フロー制御の再開)
画面表示のロックと解除のコマンド
注意点
  • 「Ctrl + s」でロック中でも、実際にはキーボード入力は受け付けられています。表示されないだけなので、慌てて不適切なキー入力をしないようにしましょう。
  • 画面に何も表示されなくなった場合は、まず落ち着いて 「Ctrl + q」 を入力してロックを解除してください。

コマンドが終了せずにプロンプトが戻ってこない場合

 Linuxの一部のコマンドは、明示的に終了操作をしない限り動作し続けるものがあります。このようなコマンドを実行すると、プロンプトが返ってこないため、自分で終了させる必要があります。

実行中のコマンドを強制的に終了させるには、「Ctrl + c」 を入力します。

実践例:pingコマンドの中断

以下のコマンドを実行します。

・「ping 127.0.0.1」コマンドを実行します。

実行結果(途中で「Ctrl + c」を入力して中断します)
user01@ubuntu:~$ ping 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.022 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.024 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.023 ms
64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.026 ms
64 bytes from 127.0.0.1: icmp_seq=5 ttl=64 time=0.024 ms
^C # ここで「Ctrl + c」を押します。
--- 127.0.0.1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4117ms
rtt min/avg/max/mdev = 0.022/0.023/0.026/0.001 ms
解説
  • pingコマンドはネットワークの疎通を確認するためのコマンドで、指定した相手にパケットを送り続けます。
  • デフォルトでは無限に実行し続けるため、途中で 「Ctrl + c」 を押して終了させます。
  • 出力にある ^C は、「Ctrl + c」を入力したことを示しています。
「Ctrl + c」 の使い方
  • コマンドの実行を途中で止めたいときや、プログラムが応答しない場合に使用します。
  • コマンドライン入力中に入力内容を破棄して、新しいコマンドラインに移りたいときにも使えます。

プロンプトが文字化けしている場合

 画像ファイルやバイナリファイルを誤ってシェル上で表示すると、制御不能な文字列が表示され、プロンプトが文字化けすることがあります。

このような場合は、画面を消去する 「Ctrl + l」 を試してみてください。

画面を消去するコマンド
コマンド説明
Ctrl + l画面をクリアし、カーソルを左上に移動する
clear画面をクリアし、カーソルを左上に移動する(コマンド)
プロンプトが文字化けしている場合
  • 「Ctrl + l」 は、表示されている内容をすべて消去し、画面をリセットします。
  • clear コマンドでも同様の効果があります。
注意点
  • 「Ctrl + l」を使用しても文字化けが解消されない場合や、カーソル位置が不適切な場合は、reset コマンドを使用してターミナルを初期化してください。
  • それでも問題が解決しない場合は、ターミナルエミュレータのメニューから端末のリセットを行うか、ログアウトして再度ログインしてください。
実践例:文字化けと画面のクリア

以下のコマンドを実行すると、画面が文字化けを起こします。

user01@ubuntu:~$ dd if=/dev/urandom of=binaryfile.bin bs=1K count=1
user01@ubuntu:~$ cat binaryfile.bin

下図のように表示されます。

解説
  • dd コマンドでランダムなバイナリデータを含むファイルを作成します。
  • cat コマンドでそのバイナリファイルを表示すると、制御不能な文字列が表示され、画面が乱れます。

 この状態で、「Ctrl + l」 を押して画面をクリアします。それでも改善しない場合は、reset コマンドを実行してください。

コマンドの解説

dd if=/dev/urandom of=binaryfile.bin bs=1K count=1

  • if=/dev/urandom: ランダムなバイナリデータを生成する。
  • of=binaryfile.bin: 出力ファイルとして binaryfile.bin を作成する。
  • bs=1K: 1KB(1024バイト)ごとにデータを読み書きする。
  • count=1: 1KBのサイズのブロックを1回作成する。

これでランダムなバイナリデータを含む binaryfile.bin が作成されます。

ファイルの削除

ここで、不要となったファイルを削除しておきます。

user01@ubuntu:~$ rm binaryfile.bin

まとめ

キーボード入力が受け付けられない場合
  • 原因: 「Ctrl + s」を押して画面出力をロックしている。
  • 対処法: 「Ctrl + q」を押してロックを解除する。
コマンドが終了せずプロンプトが戻らない場合
  • 原因: 永遠に実行し続けるコマンドを実行している。
  • 対処法: 「Ctrl + c」でコマンドを強制終了する。
プロンプトが文字化けしている場合
  • 原因: バイナリファイルを表示したことで制御文字が出力された。
  • 対処法: 「Ctrl + l」で画面をクリアする。改善しない場合は「reset」コマンドを使用する。

 トラブルが発生した際は、慌てずに原因を特定し、適切な対処法を試してみてください。多くの場合、簡単な操作で解決できます。