Bash の基礎

完了

Bash について最初に理解することは、Bash の構文です。 構文がわかったら、実行するすべての Bash コマンドにその構文を適用できます。

Bash コマンドの完全な構文は次のとおりです。

command [options] [arguments]

Bash では、最初に見つかった文字列がコマンドとして処理されます。 次の例では、Bash の ls ("list") コマンドを使って、現在の作業ディレクトリの内容を表示しています。

ls

Bash コマンドには、多くの場合、引数が伴います。 たとえば、ls コマンドにパス名を含めて、別のディレクトリの内容を一覧表示することができます。

ls /etc

ほとんどの Bash コマンドには、その動作を変更するためのオプションがあります。 オプションは "フラグ" とも呼ばれ、コマンドにより具体的な指示を与えます。 たとえば、名前がピリオドで始まるファイルとディレクトリは、ユーザーから隠されており、ls では表示されません。 ただし、ls コマンドに -a ("all") フラグを含めると、ターゲット ディレクトリ内のすべてのものを表示することができます。

ls -a /etc

簡潔にするため、フラグを組み合わせることもできます。 たとえば、Linux の /etc ディレクトリにあるすべてのファイルとディレクトリの表示を長い形式で指定すると ls -a -l /etc となりますが、代わりに次のように入力することもできます。

ls -al /etc

Bash は簡潔です。 1 つのコマンドを使用して、非常に多くの処理を実行できる場合があります (Bash のファンはそれを自慢しています)。

ヘルプを表示する

使用できる、または使用しなければならない、オプションと引数は、コマンドごとに異なります。 幸いにも、Bash のドキュメントはオペレーティング システムに組み込まれています。 コマンドを使いながらヘルプを見ることができます。 コマンドのオプションを確認するには、man ("manual": マニュアル) コマンドを使います。 たとえば、mkdir ("make directory": ディレクトリ作成) コマンドのすべてのオプションを表示するには、次のようにします。

man mkdir

Bash を学習するには man が最適です。 man を使うと、コマンドの動作方法を理解するために必要な情報を見つけることができます。

Bash と Linux のほとんどのコマンドでは、--help オプションがサポートされています。 これを使うと、コマンドの構文とオプションの説明が表示されます。 試してみるには、「mkdir --help」と入力してください。 次のような出力が表示されます。

Usage: mkdir [OPTION]... DIRECTORY...
Create the DIRECTORY(ies), if they do not already exist.
    
Mandatory arguments to long options are mandatory for short options too.
  -m, --mode=MODE   set file mode (as in chmod), not a=rwx - umask
  -p, --parents     no error if existing, make parent directories as needed
  -v, --verbose     print a message for each created directory
  -Z                   set SELinux security context of each created directory
                         to the default type
      --context[=CTX]  like -Z, or if CTX is specified then set the SELinux
                         or SMACK security context to CTX
      --help     display this help and exit
      --version  output version information and exit
    
GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
Report mkdir translation bugs to <http://translationproject.org/team/>
Full documentation at: <http://www.gnu.org/software/coreutils/mkdir>
or available locally via: info '(coreutils) mkdir invocation'

通常、この方法で表示されるヘルプは、man で得られるヘルプより簡潔になります。

ワイルドカードを使用する

ワイルドカードは、Bash コマンドで 1 つ以上の文字を表す記号です。 最もよく使用されるワイルドカードは、アスタリスクです。 それは 0 文字または文字のシーケンスを表します。 現在のディレクトリに含まれる数百の画像ファイルの中から、PNG ファイル (ファイル名の末尾が .png のもの) だけを表示したいものとします。 それらのファイルのみを一覧表示するコマンドは次のとおりです。

ls *.png

注意

他のオペレーティング システムとは異なり、Linux にはファイル名拡張子の正式な概念はありません。 これは、PNG ファイルが .png という拡張子を持たないという意味ではありません。 これは、Linux では、ファイル名が .png で終わっているという事実に特に意味がないことを意味します。

現在のディレクトリに JPEG ファイルも含まれているとします。 .jpg で終わるものもあれば、.jpeg で終わるものもあります。次は JPEG ファイルをすべて一覧表示する方法の 1 つです。

ls *.jpg *.jpeg

次に示すのは別の例です。

ls *.jp*g

* ワイルドカードは 0 個以上の文字に一致しますが、? ワイルドカードは 1 つの文字を表します。 現在のディレクトリに、0001.jpg0002.jpg という具合に 0009.jpg までの名前のファイルが含まれている場合、次のコマンドを使用するとそれらのすべてが一覧表示されます。

ls 000?.jpg

ワイルドカードを使って出力をフィルター処理するもう 1 つの方法は、角かっこを使って文字のグループを示すことです。 次のコマンドを実行すると、現在のディレクトリにある、名前にピリオドが含まれ、その直後に小文字の j または p が続くすべてのファイルが一覧表示されます。一覧には .jpg.jpeg.png ファイルはすべて含まれますが、.gif ファイルは含まれません。

ls *.[jp]*

Linux においては、ファイル名とそれを操作するコマンドでは、大文字と小文字が区別されます。 したがって、現在のディレクトリから、名前にピリオドが含まれ、その直後に大文字 "または" 小文字の J または P があるファイルを一覧表示するには、次のように入力します。

ls *.[jpJP]*

角かっこ内の式では、文字の範囲を表すことができます。 たとえば、次のコマンドでは、現在のディレクトリにある、名前の先頭が小文字であるすべてのファイルが一覧表示されます。

ls [a-z]*

これに対して、次のコマンドでは、現在のディレクトリ内の名前が大文字で始まるすべてのファイルが一覧表示されます。

ls [A-Z]*

そして、次のコマンドでは、現在のディレクトリ内にある、名前が小文字 "または" 大文字で始まるすべてのファイルの一覧が表示されます。

ls [a-zA-Z]*

以上のすべてを基にすると、次のコマンドではどうなるか予想できますか。

ls [0-9]*
ls *[0-9]*
ls *[0-9]

ワイルドカード文字のいずれかを通常の文字として使う必要がある場合は、その前に円記号を付けてリテラルに ("エスケープ") します。 したがって、何らかの理由でファイル名の一部としてアスタリスクが含まれている場合は (意図的に行ってはいけないことです)、次のようなコマンドを使用して検索できます。

$ ls *\**