Linuxのコマンドの勉強をしていると、よく見かける記号がいくつかあることに気づきました。例えば、|(パイプ)や >(リダイレクト)は、Webアプリケーション開発で使用するコマンドによく出てきます。
しかし、コマンドは覚えていても、その記号がどういうときに使われるもので、どのような意味を持っているのかに注目したことはありませんでした。正直、ひとつひとつの記号の意味を調べることは後回しにしていました。
ただ、日常的に使う可能性のある記号はある程度知っておきたいと思い、今回まとめてみました。技術書を読んで知らない記号に出会っても、怖い思いをしないように(?)先に覚えてしまいましょう。
記号の使い方ガイド1. ディレクトリを操作するときによく使う記号ディレクトリ(パス)を表す記号
記号意味~ (チルダ)ホームディレクトリ- (ハイフン)直前にいたディレクトリ.(ドット)カレントディレクトリ..(ドットドット)ひとつ上のディレクトリ~ (チルダ)ホームディレクトリチルダはシェルがホームディレクトリに展開する特殊な文字
$ cd ~$ pwd/home/username- (ハイフン)直前にいたディレクトリただし、cdやpushdコマンドに限定されます。
$ cd /var/log$ cd /etc$ cd -/var/log$ pwd/var/log. (ドット)カレントディレクトリこれらはシェルやコマンドに関係なく、常に現在のディレクトリを指します。
$ pwd/home/username$ ls .Desktop Documents Downloads Music Pictures Videos. (ドットドット)ひとつ上のディレクトリこれらはシェルやコマンドに関係なく、常に現在のディレクトリと一つ上のディレクトリを指します。
$ pwd/home/username/projects/myproject$ cd ..$ pwd/home/username/projects2. ファイル名を検索したいときによく使う記号ワイルドカードワイルドカードとは、シェルの機能で複数の文字に合致する特殊文字のことを指します。ワイルドカードを使うと、一定のパターンにそったファイル名やディレクトリ名を指定できます。
記号意味例∗0文字以上の任意の文字列*.txt?任意の1文字をあらわすhello?.txt[ ]角カッコ内の任意の文字。ハイフンで範囲を指定できる[0-9][a-zA-Z][^]否定を表す。その後ろの文字の並び以外を指定する[^0-9]∗(アスタリスク)0文字以上の任意の文字列に一致します
$ ls *.txtfile1.txt file2.txt document.txt?(クエスチョンマーク)任意の1文字に一致します
$ ls hello?.txthello1.txt helloA.txt[ ](角カッコ)角カッコ内の任意の1文字に一致します。範囲を指定する場合はハイフンを使用します。
$ ls file[1-3].txtfile1.txt file2.txt file3.txt[^ ](キャレットと角カッコ)角カッコ内の文字を除外します。キャレット(^)は否定を表します。
$ ls [^a-z]*123.txt Hello.txt3. ファイル名を一度に指定したいときに使う記号ブレース展開ブレース展開は、シェルで複数のパターンを簡単に指定するための機能です。ブレース展開を使用すると、特定の文字列の組み合わせを一度に生成することができます。コマンドの入力を簡単にすることができます。
{ }(波カッコ)記号意味実例{a,b}カンマで区切られた複数のパターンを展開echo {a,b} -> a b{1..3}数値の範囲を展開echo {1..3} -> 1 2 3{a..c}文字の範囲を展開echo {a..c} -> a b c{a,b}{1,2}組み合わせて展開echo {a,b}{1,2} -> a1 a2 b1 b2実例ファイルの一括作成
$ touch file{1..3}.txt$ lsfile1.txt file2.txt file3.txt複数のディレクトリを一括作成
$ mkdir -p project/{src,bin,lib}$ ls projectbin lib src複数のファイルパスの一括操作
$ cp ~/Documents/{file1.txt,file2.txt} ~/Backup/注意点ブレース展開は、実在するファイルとは無関係に文字列を展開します。ワイルドカードとは異なります。
4. Webサーバーを操作するときによく使う記号リダイレクトとパイプ
記号意味>標準出力をファイルに上書き>>標準出力をファイルに追記する(リダイレクト)標準出力をファイルにリダイレクトします。その結果、コマンドの出力結果をファイルに保存することができます。デフォルトでは、標準出力はターミナルに表示されますが、リダイレクトを使うことで出力先を変更できます。ファイルが存在しない場合、新しいファイルが作成されます。
[コマンド] > [ファイルパス]
使用場面ls -l コマンドの出力を directory_list.txt ファイルに保存します。後でディレクトリの内容を確認したい場合に便利です。
$ ls -l > directory_list.txt使用場面pip freezeをリダイレクト(>)でファイルに出力し、pip install -r requirements.txtコマンドを実行することで、そのファイル(requirements.txt)を使って元の環境と同じバージョンのパッケージを別環境に一括でインストールできます。
$ pip freeze > requirements.txt>>(追記リダイレクト)標準出力をファイルにリダイレクトする記号です。既存のファイルにデータを追加したい場合は、>> を使います。これにより、既存の内容を保持したまま新しいデータをファイルに追加できます。[コマンド] >> [ファイルパス]
$ ./deploy.sh >> deploy.log 2>> error.log使用場面デプロイスクリプトの出力を deploy.log に追記し、エラー出力を error.log に追記します。