Linux中提供了多種命令和程序用於瀏覽文件。無論對於新手、普通用戶、高級用戶、開發人員還是管理員來說,與諸多文件打交道都是一項艱巨的任務。而如何做到高效更稱得上是一門藝術。
今天就讓我們來探討幾個最常使用的命令head、tail和cat,多數人對他們都有所了解,但這其中絕大部分人在真正使用的時候恐怕就不知所措了。
1. head
head命令用於獲取一個文件的前10行內容。其基本的語法格式如下:
1
|
head
[options] [
file
(s)]
|
如下面的命令會打印出“/etc/passwd”的前10行內容:
1
2
3
4
5
6
7
8
9
10
11
12
|
# 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行內容。如:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
# 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行內容:
1
2
3
4
5
6
7
|
# 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”都是不需要的。只需使用一個連字符外加一個整數即可達到同樣的效果,注意他們之間不含空格。
1
2
3
4
5
6
7
|
# 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字節內容:
1
2
3
|
# head -c45 /var/log/yum.log
Jan 10 00:06:49 Updated: openssl-1.0.1e-16.el
|
2. tail
tail命令用於獲取一個文本文件的后10行內容。該命令和head很相似,同樣支持傳入“n”選項來指定行數。
語法格式:
1
|
# tail [options] [filenames]
|
下面的命令將返回“access.log”的后10行內容。
1
2
3
4
5
6
7
8
9
10
11
12
|
# 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行內容。
1
2
3
4
5
6
|
# 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”來獲取最后n行數的內容。
1
2
3
4
5
6
|
# 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”來指定返回的字節數。
1
2
3
|
# tail -c5 access.log
ymantec.com:443 - NONE
/-
text
/html
|
3. cat
cat是使用最為廣泛而通用的工具。它將標准輸入拷貝至標准輸出。在文本文件超出了屏幕范圍時,該命令還支持滾動。
語法格式:
1
|
# cat [options] [filenames] [-] [filenames]
|
那最常使用的方法要數讀取一個文件的所有內容。你要做的就是輸入“cat”外帶一個空格並在其后跟上文件名即可。
1
2
3
4
5
6
7
8
9
10
11
|
# 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命令還用來串聯多個文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
# echo 'Hi Tecmint-Team' > 1
# echo 'Keep connected' > 2
# echo 'Share your thought' > 3
# echo 'connect us tecmint.com@gmail.com' > 4
# cat 1 2 3 4 > 5
# cat 5
Hi Tecmint-Team
Keep connected
Share your thought
connect us tecmint.com@gmail.com
|
也可用於創建新文件。可以在cat命令后外加一個輸出重定向操作符和新文件的文件名即可。
1
2
3
|
# cat > tecmint.txt
Tecmint is the only website fully dedicated to Linux.
|
我們可以定制cat命令的結束符。默認的行為如下:
1
2
3
4
5
6
|
# cat > test.txt << end
I am Avishek
Here i am writing this post
Hope your are enjoying
end
|
1
2
3
4
5
|
# cat test.txt
I am Avishek
Here i am writing this post
Hope your are enjoying
|
可別低估cat的力量,他還可以用來復制文件!
1
2
3
|
# cat avi.txt
I am a Programmer by birth and Admin by profession
|
1
2
3
4
|
# cat avi.txt > avi1.txt
# cat avi1.txt
I am a Programmer by birth and Admin by profession
|
那與cat相對的命令是什么呢?它是tac。tac也是Linux中的一個命令。讓我們用一個例子來展示tac,我想這比什么都強!
我們首先用cat命令來創建一個month文件並在其中輸入各月份的單詞,每個單詞占一行。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
# cat month
January
February
March
April
May
June
July
August
September
October
November
December
|
然后來看看tac的效果如何。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
# tac month
December
November
October
September
August
July
June
May
April
March
February
January
|
是不是很有趣呢。以上就是今天的全部內容。
____________________________
推薦閱讀: