学科の1年生に贈る、Ubuntu・bashの便利技

学生の「コマンド実行の裏技を教えてほしい」をもとに、便利なキー操作やコマンド実行法を思いつくまま挙げてみました。
1
takehikom @takehikom

「*」は0文字以上で任意の文字列を意味する。ちょうど1文字を指定するには「?」を使う

2015-10-09 23:52:03
takehikom @takehikom

例えばls 2015100?.txtを実行したとき、カレントディレクトリに20151001.txtや20151009.txtがあったら情報を表示してくれる

2015-10-09 23:52:18
takehikom @takehikom

ちょうど何文字かだったら、?をその数だけ書く。例えばls 2015????.txt

2015-10-09 23:52:27
takehikom @takehikom

なお、ここまでのワイルドカード指定や、デフォルトのlsコマンドでは、「.」から始まるファイル(ドットファイル)を除外している

2015-10-09 23:52:38
takehikom @takehikom

ドットファイルだけを表示させるには、ls .*とする。ドットファイルも通常のファイルも同時に見たい場合には、ls -aを実行する

2015-10-09 23:52:48
takehikom @takehikom

ここまでlsコマンドの引数にワイルドカードを書いてきたけど、該当するものがディレクトリのとき、表示が分かりにくい

2015-10-09 23:53:15
takehikom @takehikom

ファイル(ディレクトリを含む)があるかを知るには、lsに替えてechoというコマンドを使用し、ワイルドカード指定をして、実行するといい

2015-10-09 23:53:25
takehikom @takehikom

先ほど使ったけど、1回のコマンド実行(Enterを押すこと)で連続して複数のコマンドを実行させたいときは、コマンドを「;」でつなぐ。記号はセミコロン。コロンと間違えないように

2015-10-09 23:53:35
takehikom @takehikom

「;」に替えて「&&」とすると、その左のコマンドが正常終了したときに限り、右のコマンドを実行する

2015-10-09 23:53:45
takehikom @takehikom

「;」に替えて「||」とすると、その左のコマンドが異常終了したときに限り、右のコマンドを実行する

2015-10-09 23:53:55
takehikom @takehikom

例えば、hello.cというCのソースファイルがあるとき、cc hello.c -o hello && ./helloを実行すれば、コンパイルと実行を連続してやってくれる。コンパイルエラーがあれば、./helloは実行しない

2015-10-09 23:54:09
takehikom @takehikom

「||」はふだん使わないので、ちょっと苦しい例になるけど、which geditt || echo 'そんなコマンドはない'を実行すれば、「そんなコマンドはない」と出る(はず)

2015-10-09 23:54:22
takehikom @takehikom

which gedit || echo 'そんなコマンドはない'を実行したら、何も表示されずにプロンプトが出る(はず)

2015-10-09 23:54:35
takehikom @takehikom

で、思い出した。コマンド中に"を2つ書いて実行したら、実際のコマンド実行では引用符が取り除かれ、その中が1つの文字列になる

2015-10-09 23:54:48
takehikom @takehikom

'を2つ書くのでもいい。ただし、効果が違うこともある

2015-10-09 23:54:57
takehikom @takehikom

例えばecho abcecho "abc"echo 'abc'は同じ

2015-10-09 23:55:06
takehikom @takehikom

echo $HOMEecho "$HOME"は同じでecho '$HOME'は違う

2015-10-09 23:55:17
takehikom @takehikom

echo *は、echo "*"echo '*'と違う

2015-10-09 23:55:25
takehikom @takehikom

echo !!echo "!!"echo '!!'の違いは自習課題ということで

2015-10-09 23:55:35
takehikom @takehikom

引用符は、空白文字を含むファイルを作ってしまったとき、シェルでそれを指定するのに便利。mv "空白を 含む ファイル名.txt" space-removed.txtのように

2015-10-09 23:55:55
takehikom @takehikom

上のコマンドは、mv 空白を\ 含む\ ファイル名.txt space-removed.txtでも同じだけど、入力ミスしやすいのでおすすめしない

2015-10-09 23:56:10
takehikom @takehikom

ああまた思い出した。ファイル名はTabキー補完できる

2015-10-09 23:56:20
takehikom @takehikom

ls、そしてスペースを打ってから、Tabキーを2回押すと、ファイル名一覧が表示されるはず(カレントディレクトリにファイルが0~1個の場合を除く)

2015-10-09 23:56:31
takehikom @takehikom

先頭何文字か打ち込んでから、またTabを押すと、候補が絞られる。うまく使えば、少ない入力回数で、ファイル名を指定できる

2015-10-09 23:56:58
takehikom @takehikom

Tabキーは、キーボード上ではEsc(エスケープ)キーの1つ手前にある。Ctrl+Iで代用可

2015-10-09 23:57:22