おさらい
前回まで学習したことはこちらです。
-
環境構築
→https://qiita.com/imagatasaki/items/4c510cacc6f17556c3b9 -
コマンドラインの操作方
-
基本的なコマンド①
→https://qiita.com/imagatasaki/items/37a7c12bce015d6bdc4a -
基本的なコマンド②(ファイル操作)
→https://qiita.com/imagatasaki/items/7abc96b0afea475077a2
→https://qiita.com/imagatasaki/items/6ccf0e1cd44ebe1d3e9b -
パーミッション
-
スーパーユーザー
→https://qiita.com/imagatasaki/items/39e081d9c10c1448e0c7 -
Vim
→https://qiita.com/imagatasaki/items/f4302837756102d0d430
今日学ぶこと
- 標準入出力
- リダイレクト
- パイプライン
標準入出力
標準入出力とは、標準入力、標準出力、標準エラー出力の3つ
コマンドは標準入力からデータを受け取り、標準出力に結果を出力する。
エラー発生時は標準エラー出力に出力する。
入出力が何であるか、というところはコマンド自体は把握していない。
よって利用者が指定する必要がある。
リダイレクト
リダイレクトは標準出力を切り替えることを指す。
主にコマンドの出力先を端末からファイルに変更することが多い。
標準出力をファイルに変更する
$ pwd > test.txt
$ cat test.txt
/home/imagata
「>」を使用することにより右側に書いたファイルに標準出力をつなぐことができる。
本来pwdコマンドのみであれば、/home/imagataがすぐに端末に表示されるが、
この場合はtest.txtに出力されている。
出力先のファイル名がもし存在しない場合は新たに作成される。
この「>」は既存のファイルに対し上書きを行うが、「>>」を使用する場合は末尾に追加される。
$ pwd >> test.txt
$ cat test.txt
/home/imagata
/home/imagata
### 標準エラー出力のリダイレクト
「2>」という記号を用いることで標準エラー出力のリダイレクトが可能となる。
まずは通常通り(?)エラーを発生させてみる。
$ cat test2.txt
cat: test2.txt No such file or directory
test2.txtというファイル、ディレクトリは存在しない、というメッセージが表示されている。
もしこれをerror.txtというファイルにリダイレクトさせる場合は
$ cat test2.txt 2> error.txt
$ cat error.txt
cat: test2.txt No such file or directory
こちらについても「2>>」という記号を用いることで末尾に追加が可能。
今回例は省略。
/dev/null
リダイレクトとセットで使用すると便利なファイルに/dev/nullがある。
特殊なファイルで以下の特徴を持つ
- 入力に指定するとデータを返さない
- 出力に指定すると書き込まれたデータを破棄する
エラーにだけ注目したい場合、エラーを無視したい場合に使用されがち、ということなので、もう少し具体的にいうと
"エラーに注意したいが、他のメッセージが出てきてしまうと情報が多くて確認しづらい時"等に使えると思う。
$ cat test.txt > /dev/null
$ cat /dev/null
上記を実行しても何も表示されないことが確認できた。
パイプライン
パイプラインとはコマンドの標準出力に別のコマンドの標準出力をつなぐ機能のこと。パイプとも呼ばれる。
「|」を使って複数のコマンドを繋ぐ。
これを用いることで比較的複雑な操作を行う場合でも一行のコマンドラインで処理を書くことができる。
CLIの強みともいえる。
例:lsコマンドの標準出力をcatコマンドの標準出力につないで行番号付きで表示する。
$ ls / |v cat -n
1 bin
2 boot
3 dev
4 etc
5 home
6 lib
7 lib64
8 medeia
9 mnt
10 opt
11 proc
12 root
13 run
14 sbin
15 srv
16 sys
17 tmp
18 usr
19 var
本来lsコマンドのみでは行番号は得られないが表示されていることが確認できた。
おつかれまでした
本日の学習のなかで/dev/nullやパイプラインがいかに作業を行う上で効率化につながるかはよく理解ができました。
しかし、咄嗟に使えるようになるためにはまだまだ実践的な学習が必要です。
Linuxで遊ぶ中で「このコマンドとこのコマンドをつなげられるのでは?」という閃きが発生し次第試してゆくことで上達すると考えます。それにCLIの強みを知ることができたのも今日の大きな収穫です。
プログラミングで文字列や記号の羅列に慣れているとはいえ、肌感が良いかといえばそうではない。
ただ、なぜそのように行うべきか、が今回の学習したことそのものより重要だと感じました。