Linux 講座 / ターミナルとシェルの始め方 - コマンドの構造とヘルプの読み方

Linuxでコマンドを使用するには、ターミナルを開き、シェルにコマンドを入力します。ターミナルは入力と出力を表示するウィンドウであり、シェルは入力内容を解釈してコマンドを実行するプログラムです。この講座では、コマンドの基本構造を読み、結果とエラーを区別し、知らないコマンドの使い方を自分で調べる方法を習得します。

コマンドを入力するLinuxがまだない場合は、仮想マシンのインストールと基本設定から準備してください。以下のコマンドはゲストのターミナルで入力します。

ターミナルとシェルはどう違うのですか?

画面に見えるターミナルアプリは、文字を入力し実行結果を確認するインターフェースです。シェルはその中でコマンドを読み解釈します。シェルは内部機能を直接処理するか、必要なプログラムを実行した後、結果をターミナルに表示します。したがって、ターミナルウィンドウの見た目が異なっても、同じシェルを使用すれば基本的なコマンドの書き方は似ています。

この文章の例はBash(Bourne Again Shell)を基準にしています。UbuntuとRocky Linuxの両方でBashを使用できますが、実際に実行中のシェルやインストールされているコマンドは環境によって異なる場合があります。リモートサーバーにはグラフィックターミナルアプリがない場合もありますが、シェルコマンドを使用する原理は同じです。

ターミナルを開き、入力位置を確認する

グラフィック環境では、アプリ一覧で「ターミナル」を検索して開いてください。メニュー名や実行方法はデスクトップ環境によって異なります。ターミナルを開くと、通常ユーザー名や現在のパスの後にカーソルが点滅します。これが プロンプト であり、シェルが入力を待っていることを意味します。

プロンプトの $ または # は環境によって表示される場合がありますが、コマンドの一部ではありません。この記事のコードブロックにはコピーするコマンドのみを記載しました。管理者権限が必要な作業については、プロンプトの形に依存せずに sudo が必要かどうか別途説明します。

次のコマンドを入力して Enter を押してみてください。

printf '%s\n' hello

コマンドが実行されると、以下のように hello が出力され、再びプロンプトが表示されます。

hello

printf は指定した形式で文字列を出力します。上記コマンドの %s は文字列を、\n は改行を意味します。実際の画面のプロンプト文言は例と異なっても正常です。

コマンドの三部分の読み方

多くのコマンドは コマンド + オプション + 引数 という形で入力します。コマンドは何をするか、オプションはどうするか、引数は何を対象にするかを指定します。ただし、すべてのコマンドにオプションや引数が必要なわけではありません。

ls -l /etc
部分 例 意味
コマンド ls 一覧を表示します。
オプション -l 詳細な形式で表示します。
引数 /etc 表示するディレクトリを指定します。

空白はこの3つの部分を分ける役割をします。マニュアルのls [オプション] [ファイル...]のような表記で、角括弧は「省略可能」を意味する説明記号であり、そのまま入力する文字ではありません。...は複数の対象を指定できることを意味します。正確な表記はコマンドごとに異なるため、該当するヘルプを確認してください。

空白が含まれる文字列を1つの引数として渡すには、引用符で囲みます。以下の2つのコマンドの違いを確認してください。

printf '%s\n' hello world

printf '%s\n' 'hello world'

最初のものはhelloとworldを別々の引数として受け取り、2行を出力します。2つ目は全体を1つの引数として受け取り、1行を出力します。

hello

world

hello world

引用符内でもシェルの展開ルールは種類によって異なります。今は「空白を含む値を1つにまとめる」という基本的な用途だけを習得し、変数やシェル展開については後で扱います。

入力、出力とエラーの扱い

コマンドを入力してEnterを押すとシェルが実行します。画面に表示される文字は正常な結果である場合もあれば、誤ったオプションや存在しないファイルを知らせるエラーである場合もあります。出力がないからといって必ずしも失敗したわけではありません。コマンドの目的とエラーメッセージを合わせて読む必要があります。

長い出力はターミナルをスクロールして確認できます。以前のコマンドを再入力したい場合は、上向き矢印キーでコマンド履歴を呼び出せます。履歴にはパスワードやトークンのような秘密情報をコマンド引数として入力しないほうが良いです。

実行中のコマンドを中断する場合は通常Ctrl+Cを押します。ターミナルでは、これは一般的な「コピー」ショートカットとは異なり、現在実行中のコマンドに中断シグナルを送る動作です。シェルを終了するにはexitを入力できます。Ctrl+Dも空入力行では終了に使えますが、入力待ちのプログラム内では別の意味で動作することがあります。

知らないコマンドの使い方を調べる

オプションを推測して実行する前にヘルプを確認してください。外部プログラムとシェル組み込みコマンドでは、ヘルプの探し方が異なる場合があります。

方法 いつ使うのか?
コマンド --help そのプログラムがサポートしているときにオプションを素早く確認します。すべてのコマンドがサポートしているわけではありません。
man コマンド インストールされているマニュアルページで使用形式やオプションを詳しく読みます。
help コマンド Bashの組み込みコマンドについての説明を見ます。
type コマンド Bashがその名前を組み込みコマンド、エイリアス、関数、外部プログラムのどれとして解釈するかを確認します。

例えば ls --helpでオプションを簡単に確認し、man lsで詳細な説明を読むことができます。man 画面では/ の後に検索語を入力して探し、q で終了します。マニュアルがインストールされていない環境では、ページがないというメッセージが出ることがあります。

ls --help

man ls

cdはBash組み込みコマンドの例です。まずtype cdで種類を確認し、help cdで使い方を読んでみてください。type の文言はシェルや表示言語によって異なる場合があります。

type cd

help cd

manコマンドの説明、helpコマンドの説明、typeコマンドの説明で、それぞれのツールの使用例をさらに見ることができます。

実際に試す短い実習

  1. type printfを入力して、現在のBashがprintfをどのように解釈するか確認します。
  2. help printfを入力して、フォーマット文字列と引数に関する説明を探します。
  3. printf '%s\n' 'Linux practice'を実行し、画面にLinux practiceが1行で表示されるか確認します。
type printf

help printf

printf '%s\n' 'Linux practice'

最後のコマンドの出力例は以下の通りです。最初の2つのコマンドは、使用しているBashのバージョンや表示言語によって文言が異なる場合があります。

Linux practice

command not foundが表示されたら、まずコマンドの綴りを確認してください。invalid optionのようにオプションに関するエラーが出た場合は、ヘルプでサポートの有無と使用方法を確認します。権限エラーが出るからといってすべてのコマンドにsudoを付けないでください。まずどのファイルや作業に権限が必要か確認する方が安全です。

公式ドキュメント

この文章のシェルの説明と組み込みコマンドは、GNU Bashリファレンスマニュアルの基本機能およびBash組み込みコマンドのドキュメントを参照しました。マニュアルの表記と使用法は、man(1)マニュアルで確認できます。