Bash の基礎
Bash について最初に理解することは、Bash の構文です。 構文がわかったら、実行するすべての Bash コマンドにその構文を適用できます。
Bash コマンドの完全な構文は次のとおりです。
command [options] [arguments]
Bash では、最初に見つかった文字列がコマンドとして処理されます。 次の例では、Bash の ls
("list") コマンドを使って、現在の作業ディレクトリの内容を表示しています。
ls
多くの場合、Bash コマンドには引数があります。 たとえば、ls
コマンドにパス名を含めて、別のディレクトリの内容を一覧表示することができます。
ls /etc
ほとんどの Bash コマンドには、その動作を変更するためのオプションがあります。 オプションは フラグとも呼ばれ、コマンドにより具体的な指示を与えます。 たとえば、名前がピリオドで始まるファイルとディレクトリはユーザーから隠されており、ls
では表示されません。 ただし、-a
コマンドに ls
("all") フラグを含めると、ターゲット ディレクトリ内のすべてのものを表示することができます。
ls -a /etc
簡潔にするため、フラグを組み合わせることもできます。 たとえば、「 ls -a -l /etc
」と入力して Linux の /etc ディレクトリ内のすべてのファイルとディレクトリを長い形式で表示するのではなく、代わりに次のように入力できます。
ls -al /etc
Bash は簡潔です。 1 つのコマンドを使用して、非常に多くの処理を実行できる場合があります (Bash のファンはそれを自慢しています)。
ヘルプを表示する
使用できる、または使用しなければならない、オプションと引数は、コマンドごとに異なります。 幸いにも、Bash のドキュメントはオペレーティング システムに組み込まれています。 コマンドを使いながらヘルプを見ることができます。 コマンドのオプションを確認するには、man
("manual": マニュアル) コマンドを使います。 たとえば、mkdir
("make directory": ディレクトリ作成) コマンドのすべてのオプションを表示するには、次のようにします。
man mkdir
man
は Bash を学ぶのに最適です。
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.jpgや0002.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 *\**