この辺のコマンドもLinuxの操作を行うには必須レベルのものが多いので、オプションの使い方を確認する感じになります。
パイプとリダイレクト
テキスト処理コマンドでは基本的な使い方として複数のコマンドを組み合わせることも多いので、コマンドを組み合わせる際に使用されるパイプとリダイレクトについて触れておきます。
パイプ
Linuxのパイプではコマンドやプログラムの出力結果を別のコマンドなどに入力を渡すことができる。
もう少し正確に言うとコマンドの標準出力を次のコマンドの標準入力に渡す。
パイプは記号としては「|」で記述する。
・コマンド例
以下の例ではpsコマンドで出力したプロセス情報の行数をカウントしています。
[wantan@localhost ~]$ ps -aux | wc -l 107
単にコマンドをつなぐというよりも、あくまで標準出力を標準入力に渡していると理解していると様々な使い方での理解が進みやすいです。
teeコマンド
teeコマンドは標準入力を標準出力とファイルに分岐させ出力されるコマンドです。
・コマンド例
[wantan@localhost ~]$ top | tee top.log
・出力結果
top - 19:04:58 up 1:21, 1 user, load average: 0.00, 0.01, 0.05 Tasks: 104 total, 2 running, 102 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.3 us, 0.3 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 995684 total, 655768 free, 195264 used, 144652 buff/cache KiB Swap: 2097148 total, 2097148 free, 0 used. 652816 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1565 root 20 0 0 0 0 S 0.3 0.0 0:00.30 kworker/0:2 1606 wantan 20 0 161992 2192 1548 R 0.3 0.2 0:00.01 top 1 root 20 0 128044 6672 4152 S 0.0 0.7 0:01.25 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 4 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:+ 5 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kworker/u2+ 6 root 20 0 0 0 0 S 0.0 0.0 0:00.05 ksoftirqd/0 <・・省略・・>
[wantan@localhost ~]$ ll 合計 64 -rw-rw-r--. 1 wantan wantan 0 7月 31 18:05 test.txt -rw-rw-r--. 1 wantan wantan 64884 7月 31 19:06 top.log drwxrwxr-x. 6 wantan wantan 188 7月 31 18:04 work
画面の出力とファイルも出力されていることが確認できます。
また、オプションとして「-a」を付与することによってファイルへの出力を追記にすることができます。
[wantan@localhost ~]$ top | tee -a top.log
リダイレクト
Linuxでは通常コマンドの標準出力はディスプレイに出力されます。
標準出力を次のコマンドの標準入力にするのは、パイプを使用しましたが、出力先をファイルなどに指定するにはリダイレクトを使用します。
リダイレクトにはいくつか種類があり以下のような使い方をします。
書式 | 内容 |
---|---|
|
標準出力をファイルに出力 |
|
標準出力をファイルに追記 |
|
ファイルの内容を標準入力へ出力 |
|
標準エラー出力をファイルに出力 |
|
標準エラー出力をファイルに追記 |
|
標準出力とエラーをファイルに出力 |
|
標準出力とエラーをファイルに追記 |
|
終了文字が現れるまで標準入力に出力 |
|
指定文字列をコマンドの標準入力に出力 |
■終了文字を指定する
あまり使う機会がなかったので確認。
[wantan@localhost ~]$ cat << end > wantan > select > world end > end wantan select world end [wantan@localhost ~]$
「<<」は終了文字を認識するので、そこまで入力された文字列をコマンドの標準入力に送ります。
完全に一致した行を終了文字として認識するため、終了文字と同じ文字列が存在しても部分的に入力された場合は終了文字としては認識されません。
■標準入力に文字列を指定する
[wantan@localhost ~]$ cat <<< test test
こちらは一行で直接文字列を指定する。
catコマンド
ファイルの内容を表示するコマンド。
正確にはファイルの内容を標準出力に出力している。
cat top.log
オプション
試験的にはオプションは行番号を出力する「-n」ぐらいを抑えておけばよいでしょう。
オプション | 内容 |
---|---|
-n | 出力結果に行番号を表示 |
-b | 出力結果に行番号を表示(空行は飛ばす) |
■行番号をつけて出力
[wantan@localhost ~]$ cat -n test.txt 1 test 2 3 hello 4 ABCD 5
■行番号をつけて出力(空行を飛ばす)
[wantan@localhost ~]$ cat -b test.txt 1 test 2 hello 3 ABCD
nlコマンド
nlコマンドは行番号を付与してファイルを表示するコマンドです。
但しそのまま実行した場合、空行の番号付与は飛ばすという特徴があります。
[wantan@localhost ~]$ nl test.txt 1 test 2 hello 3 ABCD
オプション
オプション | 内容 |
---|---|
-b | 指定した形式で行番号を付与 |
オプションの形式指定は以下の通りになります。
形式 | 内容 |
---|---|
a | すべての行 |
t | 空行以外の行 |
n | 行番号を付与しない |
試験的にはcatコマンドの行番号表示オプションとの関係を把握しておくべきです。
■行番号をつけて出力
「cat -n」と同様の結果になる。
[wantan@localhost ~]$ nl -b a test.txt 1 test 2 3 hello 4 ABCD 5
■行番号をつけて出力(空行を飛ばす)
「cat -b」と同様、また「nl」コマンドをそのまま実行した場合と同じになる。
[wantan@localhost ~]$ nl -b t test.txt 1 test 2 hello 3 ABCD
「cat」コマンドはあくまでファイル内容を実態のまま出力するコマンドなので、行番号を付与する基本オプションである「-n」で実態のまま空行も飛ばさず行番号を付与する。という考え方でいいと思う。
headコマンド
headコマンドはファイルの先頭部を表示するコマンドです。
デフォルトでは先頭10行が表示されます。
[wantan@localhost ~]$ head testfile.txt 01行目 02 03 04 05 06 07 08 09 10
オプション
オプション | 内容 |
---|---|
-n [行数] | 先頭から指定行数を表示する |
-[行数] | 先頭から指定行数を表示する |
-c [行数] | 出力するバイト数を指定する |
「-n」のオプションは他のコマンドにもある数値指定のものなので、比較的覚えやすい。
■表示行数を指定する
オプションでも紹介したように2種の方法を覚えておくのは必須でしょう。
[wantan@localhost ~]$ head -n 7 testfile.txt 01行目 02 03 04 05 06 07
[wantan@localhost ~]$ head -7 testfile.txt 01行目 02 03 04 05 06 07
■バイト数指定表示
[wantan@localhost ~]$ head -c 20 testfile.txt 01行目 02 03 04 05
tailコマンド
tailコマンドはheadコマンドに対してファイルの末尾を表示するコマンド。
こちらもデフォルトでは10行表示になる。
[wantan@localhost ~]$ tail testfile.txt 11 12 13 14 15 16 17 29
オプション
基本的にはheadコマンドと同じ要領。
「-f」オプションは重要ですが、有名かつ実践的なコマンドなので普段からLinuxを使用していれば自然と覚えているレベル。
オプション | 内容 |
---|---|
-n [行数] | 末尾から指定行数を表示する |
-[行数] | 末尾から指定行数を表示する |
-c [行数] | 出力するバイト数を指定する |
-f | ファイルの末尾に追加された行を表示する |
odコマンド
バイナリファイルを8進数や16進数で表示するコマンド。
あまり使ったことがないけど、試験的には普通にでる模様。
オプション指定なしだと8進数表示が行われる。
[wantan@localhost ~]$ od /etc/localtime 0000000 055124 063151 000062 000000 000000 000000 000000 000000 0000020 000000 000000 000000 001400 000000 001400 000000 000000 0000040 000000 004000 000000 001400 000000 004000 037327 070002 0000060 166727 170131 174330 070372 146731 170073 003733 170000 <・・省略・・>
オプション
オプションを使用して出力フォーマットの指定方法が2種類ある。
オプション | 内容 |
---|---|
-t [出力タイプ] | 出力フォーマットを指定 |
-c | ASCⅡ文字で出力 |
-o | 8進数で出力 |
-x | 16進数で出力 |
出力タイプ | 内容 |
---|---|
-c | ASCⅡ文字 |
-o | 8進数 |
-x | 16進数 |
■ASCⅡ文字で出力する
[wantan@localhost ~]$ od -c /etc/localtime 0000000 T Z i f 2 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 0000020 \0 \0 \0 \0 \0 \0 \0 003 \0 \0 \0 003 \0 \0 \0 \0 0000040 \0 \0 \0 \b \0 \0 \0 003 \0 \0 \0 \b 327 > 002 p 0000060 327 355 Y 360 330 370 372 p 331 315 ; 360 333 \a \0 360 <・・省略・・>
■8進数で出力する
8で「o」なのは多分オクトの「o」。
根拠はありません。
[wantan@localhost ~]$ od -o /etc/localtime 0000000 055124 063151 000062 000000 000000 000000 000000 000000 0000020 000000 000000 000000 001400 000000 001400 000000 000000 0000040 000000 004000 000000 001400 000000 004000 037327 070002 0000060 166727 170131 174330 070372 146731 170073 003733 170000
■16進数で出力する
「x」はsixのx??
[wantan@localhost ~]$ od -x /etc/localtime 0000000 5a54 6669 0032 0000 0000 0000 0000 0000 0000020 0000 0000 0000 0300 0000 0300 0000 0000 0000040 0000 0800 0000 0300 0000 0800 3ed7 7002
ーーーーーーーーーーーーーーーー
・前回(第十一回)
www.wantanblog.com
・次回(第十三回)
www.wantanblog.com