ウェブサイト検索

Linux で head、tail、cat コマンドを使用してファイルを効果的に管理する


ファイルの内容を表示するためにLinux によって提供されるコマンドとプログラムがいくつかあります。ファイルの操作は、初心者、一般ユーザー、上級ユーザー、開発者、管理者など、ほとんどのコンピュータ ユーザーが実行する気の遠くなる作業の 1 つです。ファイルを効果的かつ効率的に操作することは芸術です。

今日、この記事では、と呼ばれる最も一般的なコマンドについて説明します。これらのコマンドはほとんどの人がすでに知っています。しかし、必要なときにそれを実行できる人はほとんどいません。

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 コマンドを使用すると、テキスト ファイルの最後の 10 行を表示できます。上記の head コマンドと同様に、tail コマンドも「n」行数と「n」文字数のオプションをサポートしています。

tail コマンドの基本的な構文は次のとおりです。

tail [options] [filenames]

たとえば、次のコマンドは、「access.log」というファイルの最後の 10 行を出力します。

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 は以下に示すように各ファイルの最後の 10 行を出力します。

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 ' > 4
cat 1 2 3 4 > 5
cat 5 

Hi Tecmint-Team 
Keep connected 
Share your thought 
connect us [email 

ファイルの作成にも使用できます。これは、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

さて、猫の反対は何でしょうか?そう、「タック」です。 「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 にご注目ください。コメントセクションに貴重なフィードバックをお寄せください。