SEワンタンの独学備忘録

IT関連の独学した内容や資格試験に対する取り組みの備忘録

【LPIC101】 テキスト処理コマンド-その① LPICで学ぶLinux⑫


この辺のコマンドもLinuxの操作を行うには必須レベルのものが多いので、オプションの使い方を確認する感じになります。

パイプとリダイレクト

テキスト処理コマンドでは基本的な使い方として複数のコマンドを組み合わせることも多いので、コマンドを組み合わせる際に使用されるパイプリダイレクトについて触れておきます。

パイプ

Linuxのパイプではコマンドやプログラムの出力結果を別のコマンドなどに入力を渡すことができる。
もう少し正確に言うとコマンドの標準出力を次のコマンドの標準入力に渡す。

パイプは記号としては「|」で記述する。

・コマンド例

以下の例ではpsコマンドで出力したプロセス情報の行数をカウントしています。

[wantan@localhost ~]$ ps -aux | wc -l
107

単にコマンドをつなぐというよりも、あくまで標準出力を標準入力に渡していると理解していると様々な使い方での理解が進みやすいです。

teeコマンド

teeコマンドは標準入力を標準出力とファイルに分岐させ出力されるコマンドです。

f:id:wantanBlog:20200731190359p:plain

・コマンド例

[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  731 18:05 test.txt
-rw-rw-r--. 1 wantan wantan 64884  731 19:06 top.log
drwxrwxr-x. 6 wantan wantan   188  731 18:04 work

画面の出力とファイルも出力されていることが確認できます。

また、オプションとして「-a」を付与することによってファイルへの出力を追記にすることができます。

[wantan@localhost ~]$ top | tee -a top.log
リダイレクト

Linuxでは通常コマンドの標準出力はディスプレイに出力されます。
標準出力を次のコマンドの標準入力にするのは、パイプを使用しましたが、出力先をファイルなどに指定するにはリダイレクトを使用します。

リダイレクトにはいくつか種類があり以下のような使い方をします。

書式 内容
[コマンド] > [ファイル] 標準出力をファイルに出力
[コマンド] >> [ファイル] 標準出力をファイルに追記
[コマンド] < [ファイル] ファイルの内容を標準入力へ出力
[コマンド] 2> [ファイル] 標準エラー出力をファイルに出力
[コマンド] 2>> [ファイル] 標準エラー出力をファイルに追記
[コマンド] > [ファイル] 2>&1 標準出力とエラーをファイルに出力
[コマンド] >> [ファイル] 2>&1 標準出力とエラーをファイルに追記
[コマンド] << [終了文字] 終了文字が現れるまで標準入力に出力
[コマンド] <<< [文字列] 指定文字列をコマンドの標準入力に出力

■終了文字を指定する

あまり使う機会がなかったので確認。

[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