Linux が提供する複数のコマンドやプログラムを利用して、ファイルの内容を表示できます。ファイル操作は、コンピュータユーザーにとって初心者、普通のユーザー、上級ユーザー、開発者、管理者など多くの人にとって大変な作業の一つです。ファイルの効果的かつ効率的な操作は、芸術のようなものです。

今日は、この記事で、head、tail、cat という最も人気のあるコマンドについて話し合います。ほとんどの人がこれらのコマンドを知っていますが、必要な時に実際に使う人はほんの少数です。
1. head コマンド
head コマンドは、指定されたファイルの最初の 10 行を読み込みます。head コマンドの基本的な構文は次のとおりです:
head [options] [file(s)]
たとえば、次のコマンドは、ファイル名が「/etc/passwd」のファイルの最初の 10 行を表示します。
# head /etc/passwd root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh sys:x:3:3:sys:/dev:/bin/sh sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/bin/sh man:x:6:12:man:/var/cache/man:/bin/sh lp:x:7:7:lp:/var/spool/lpd:/bin/sh mail:x:8:8:mail:/var/mail:/bin/sh news:x:9:9:news:/var/spool/news:/bin/sh
複数のファイルが指定された場合、head はそれぞれのファイルの最初の 10 行を別々に表示します。たとえば、次のコマンドはそれぞれのファイルの 10 行を表示します。
# head /etc/passwd /etc/shadow ==> /etc/passwd <== root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin ==> /etc/shadow <== root:$6$85e1:15740:0:99999:7::: bin:*:15513:0:99999:7::: daemon:*:15513:0:99999:7::: adm:*:15513:0:99999:7::: lp:*:15513:0:99999:7::: sync:*:15513:0:99999:7::: shutdown:*:15513:0:99999:7::: halt:*:15513:0:99999:7::: mail:*:15513:0:99999:7::: uucp:*:15513:0:99999:7:::
デフォルトの 10 行よりも多くの行を取得したい場合は、「-n」オプションを使用して取得する行数を指定します。たとえば、次のコマンドは、ファイル「/var/log/yum.log」から最初の 5 行を表示します。
# head -n5 /var/log/yum.log Jan 10 00:06:49 Updated: openssl-1.0.1e-16.el6_5.4.i686 Jan 10 00:06:56 Updated: openssl-devel-1.0.1e-16.el6_5.4.i686 Jan 10 00:11:42 Installed: perl-Net-SSLeay-1.35-9.el6.i686 Jan 13 22:13:31 Installed: python-configobj-4.6.0-3.el6.noarch Jan 13 22:13:36 Installed: terminator-0.95-3.el6.rf.noarch
実際、”n” オプションを使用する必要はありません。単にハイフンを入力し、スペースなしで整数を指定すれば、前述のコマンドと同じ結果が得られます。
# head -5 /var/log/yum.log Jan 10 00:06:49 Updated: openssl-1.0.1e-16.el6_5.4.i686 Jan 10 00:06:56 Updated: openssl-devel-1.0.1e-16.el6_5.4.i686 Jan 10 00:11:42 Installed: perl-Net-SSLeay-1.35-9.el6.i686 Jan 13 22:13:31 Installed: python-configobj-4.6.0-3.el6.noarch Jan 13 22:13:36 Installed: terminator-0.95-3.el6.rf.noarch
headコマンドは、指定されたバイト数を表示する際に、表示するバイト数に続いて ‘-c‘ オプションを使用することもできます。例えば、次のコマンドは指定されたファイルの最初の 45 バイトを表示します。
# head -c45 /var/log/yum.log Jan 10 00:06:49 Updated: openssl-1.0.1e-16.el
2. tailコマンド
tailコマンドを使用すると、任意のテキストファイルの最後の十行を表示することができます。前述のheadコマンドと同様に、tailコマンドも ‘n‘ 行数と ‘n‘ 文字数のオプションをサポートしています。
tailコマンドの基本的な構文は以下のとおりです。
# tail [options] [filenames]
例えば、次のコマンドは ‘access.log’ というファイルの最後の十行を表示します。
# tail access.log 1390288226.042 0 172.16.18.71 TCP_DENIED/407 1771 GET http://download.newnext.me/spark.bin? - NONE/- text/html 1390288226.198 0 172.16.16.55 TCP_DENIED/407 1753 CONNECT ent-shasta-rrs.symantec.com:443 - NONE/- text/html 1390288226.210 1182 172.16.20.44 TCP_MISS/200 70872 GET http://mahavat.gov.in/Mahavat/index.jsp pg DIRECT/61.16.223.197 text/html 1390288226.284 70 172.16.20.44 TCP_MISS/304 269 GET http://mahavat.gov.in/Mahavat/i/i-19.gif pg DIRECT/61.16.223.197 - 1390288226.362 570 172.16.176.139 TCP_MISS/200 694 GET http://p4-gayr4vyqxh7oa-3ekrqzjikvrczq44-if-v6exp3-v4.metric.gstatic.com/v6exp3/redir.html pg 1390288226.402 0 172.16.16.55 TCP_DENIED/407 1753 CONNECT ent-shasta-rrs.symantec.com:443 - NONE/- text/html 1390288226.437 145 172.16.18.53 TCP_DENIED/407 1723 OPTIONS http://172.16.25.252/ - NONE/- text/html 1390288226.445 0 172.16.18.53 TCP_DENIED/407 1723 OPTIONS http://172.16.25.252/ - NONE/- text/html 1390288226.605 0 172.16.16.55 TCP_DENIED/407 1753 CONNECT ent-shasta-rrs.symantec.com:443 - NONE/- text/html 1390288226.808 0 172.16.16.55 TCP_DENIED/407 1753 CONNECT ent-shasta-rrs.symantec.com:443 - NONE/- text/html
複数のファイルが指定された場合、tailは下記のように各ファイルの最後の十行を表示します。
# tail access.log error.log ==> access.log <== 1390288226.042 0 172.16.18.71 TCP_DENIED/407 1771 GET http://download.newnext.me/spark.bin? - NONE/- text/html 1390288226.198 0 172.16.16.55 TCP_DENIED/407 1753 CONNECT ent-shasta-rrs.symantec.com:443 - NONE/- text/html 1390288226.210 1182 172.16.20.44 TCP_MISS/200 70872 GET http://mahavat.gov.in/Mahavat/index.jsp pg DIRECT/61.16.223.197 text/html 1390288226.284 70 172.16.20.44 TCP_MISS/304 269 GET http://mahavat.gov.in/Mahavat/i/i-19.gif pg DIRECT/61.16.223.197 - 1390288226.362 570 172.16.176.139 TCP_MISS/200 694 GET http://p4-gayr4vyqxh7oa-3ekrqzjikvrczq44-if-v6exp3-v4.metric.gstatic.com/v6exp3/redir.html pg 1390288226.402 0 172.16.16.55 TCP_DENIED/407 1753 CONNECT ent-shasta-rrs.symantec.com:443 - NONE/- text/html 1390288226.437 145 172.16.18.53 TCP_DENIED/407 1723 OPTIONS http://172.16.25.252/ - NONE/- text/html 1390288226.445 0 172.16.18.53 TCP_DENIED/407 1723 OPTIONS http://172.16.25.252/ - NONE/- text/html 1390288226.605 0 172.16.16.55 TCP_DENIED/407 1753 CONNECT ent-shasta-rrs.symantec.com:443 - NONE/- text/html 1390288226.808 0 172.16.16.55 TCP_DENIED/407 1753 CONNECT ent-shasta-rrs.symantec.com:443 - NONE/- text/html ==> error_log <== [Sun Mar 30 03:16:03 2014] [notice] Digest: generating secret for digest authentication ... [Sun Mar 30 03:16:03 2014] [notice] Digest: done [Sun Mar 30 03:16:03 2014] [notice] Apache/2.2.15 (Unix) DAV/2 PHP/5.3.3 mod_ssl/2.2.15 OpenSSL/1.0.0-fips configured -- resuming normal operations
同様に、下記のように ‘-n‘ オプションを使用して最後の数行を表示することもできます。
# tail -5 access.log 1390288226.402 0 172.16.16.55 TCP_DENIED/407 1753 CONNECT ent-shasta-rrs.symantec.com:443 - NONE/- text/html 1390288226.437 145 172.16.18.53 TCP_DENIED/407 1723 OPTIONS http://172.16.25.252/ - NONE/- text/html 1390288226.445 0 172.16.18.53 TCP_DENIED/407 1723 OPTIONS http://172.16.25.252/ - NONE/- text/html 1390288226.605 0 172.16.16.55 TCP_DENIED/407 1753 CONNECT ent-shasta-rrs.symantec.com:443 - NONE/- text/html 1390288226.808 0 172.16.16.55 TCP_DENIED/407 1753 CONNECT ent-shasta-rrs.symantec.com:443 - NONE/- text/html
‘-c’ 引数を使用して文字数を表示することもできます。
# tail -c5 access.log ymantec.com:443 - NONE/- text/html
3. catコマンド
‘cat‘ コマンドは最も広く使用される汎用ツールです。標準入力を標準出力にコピーします。テキストファイルが現在の画面に収まらない場合、スクロールをサポートします。
catコマンドの基本構文は以下のとおりです。
# cat [options] [filenames] [-] [filenames]
catの最も一般的な使用法は、ファイルの内容を読み取ることです。ファイルを読み取るには、cat とスペース、およびファイル名を入力するだけです。
# cat /etc/passwd root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh sys:x:3:3:sys:/dev:/bin/sh sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/bin/sh man:x:6:12:man:/var/cache/man:/bin/sh lp:x:7:7:lp:/var/spool/lpd:/bin/sh …
catコマンドは、複数のファイルを連結するためにも使用されます。
# echo 'Hi Tecmint-Team' > 1 # echo 'Keep connected' > 2 # echo 'Share your thought' > 3 # echo 'connect us [email protected]' > 4
# cat 1 2 3 4 > 5
# cat 5 Hi Tecmint-Team Keep connected Share your thought connect us [email protected]
ファイルの作成にも使用できます。これは、出力リダイレクト演算子と作成するファイル名に続いてcatを実行することで実現されます。
# cat > tecmint.txt Tecmint is the only website fully dedicated to Linux.
‘cat’コマンドのためのカスタムエンドメーカーを持つことができます。ここでそれが実装されています。
# cat > test.txt << end I am Avishek Here i am writing this post Hope your are enjoying end
# cat test.txt I am Avishek Here i am writing this post Hope your are enjoying
‘cat’コマンドのパワーを過小評価しないでください。ファイルのコピーに役立ちます。
# cat avi.txt I am a Programmer by birth and Admin by profession
# cat avi.txt > avi1.txt
# cat avi1.txt I am a Programmer by birth and Admin by profession
さて、‘cat’の逆は何でしょうか? そうです、‘tac‘です。‘tac‘はLinuxのコマンドです。‘tac’の例を示す方が、話すよりも良いでしょう。
1行に1つの単語が表示されるように、すべての月の名前を含むテキストファイルを作成してください。
# cat month January February March April May June July August September October November December
# tac month December November October September August July June May April March February January
catコマンドの使用例については、13 catコマンドの使用法を参照してください。
これで全てです。次回の興味深い記事に戻ります。それまでお楽しみに。そして、Tecmintに接続し続けてください。コメントセクションでの貴重なフィードバックをお忘れなく。
Source:
https://www.tecmint.com/view-contents-of-file-in-linux/