在Linux中,head、tail、cat對文件管理的有效性

這兒有幾個命令和程序用於查看文件內容在Linux上。

工作中使用文件是艱鉅的任務之一,大多數的計算機用戶無論是新手、普通用戶、高級用戶、開發人員或者管理員等等。工作中使用文件能有效和高效都是一門技術!


今天,這篇文章我們就將討論最受歡迎的命令:head、tail、cat。

我們大多數已經用到過這些命令了,但是,當我們使用它們的時候卻很少使它們很有效。


 1.head命令

這個head命令能夠查看所給任何文件的頭十行,基本的語法是:

head [options] [file(s)]


例如,下面這個命令將顯示'/etc/passwd'文件的頭十行.

[root@taoteng ~]# head /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


如果給定多個文件的話,head命令將會分開顯示每個文件的頭十行,例如,下面的命令將會分開顯示每個文件的前十行:

 

[root@taoteng ~]# 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$KRjRBRefgWtx8eNP$xWrfedJsYdhyt0FnA1P4VHe8neGza4SLpHeXlk7Ys3G.EAzeCL4PqVe61FHDDLeY6B1Yg.je1HEHY3ri43Sx90:16120:0:99999:7:::

bin:*:15240:0:99999:7:::

daemon:*:15240:0:99999:7:::

adm:*:15240:0:99999:7:::

lp:*:15240:0:99999:7:::

sync:*:15240:0:99999:7:::

shutdown:*:15240:0:99999:7:::

halt:*:15240:0:99999:7:::

mail:*:15240:0:99999:7:::

uucp:*:15240:0:99999:7:::


如果希望檢索比默認十行多/少呢,則可使用"-n"參數,以及告知一個整數來檢索行數,例如,下面的命令將顯示"/var/log/yum.log"文件的前5行:

 

[root@taoteng ~]# head -n5 /var/log/yum.log

Feb 20 08:55:36 Installed: lftp-4.0.9-1.el6.i686

Feb 20 19:57:01 Installed: hesiod-3.1.0-19.el6.i686

Feb 20 19:57:07 Installed: procmail-3.22-25.1.el6.i686

Feb 20 19:59:22 Installed: sendmail-8.14.4-8.el6.i686

Feb 20 22:21:37 Installed: mailcap-2.1.31-2.el6.noarch


事實上,可以不必加入"-n"參數,僅用連字符和指定一個整數(不能有空格)就能得到相同的結果和上面命令:

 

[root@taoteng ~]# head -5 /var/log/yum.log  

Feb 20 08:55:36 Installed: lftp-4.0.9-1.el6.i686

Feb 20 19:57:01 Installed: hesiod-3.1.0-19.el6.i686

Feb 20 19:57:07 Installed: procmail-3.22-25.1.el6.i686

Feb 20 19:59:22 Installed: sendmail-8.14.4-8.el6.i686

Feb 20 22:21:37 Installed: mailcap-2.1.31-2.el6.noarch


這個head也能夠顯示任何想要的字節數通過使用“-c”參數,例如,下面命令將顯示前45個字節:

 

[root@taoteng ~]# head -c45 /var/log/yum.log  

Feb 20 08:55:36 Installed: lftp-4.0.9-1.el6.i


2.tail 命令

這個tail命令允許你去顯示一個文檔的最後十行。同上面的命令很相似,tail也支持"-n"參數和"-c"參數:

基本的語法是:

# tail [options] [filename]


例如,下面的命令將顯示文件"anaconda.log"的後十行:

   

[root@taoteng ~]# tail /var/log/a

anaconda.ifcfg.log    anaconda.storage.log  anaconda.yum.log

anaconda.log          anaconda.syslog       audit/

anaconda.program.log  anaconda.xlog        

[root@taoteng ~]# tail /var/log/anaconda.log

08:49:23,479 DEBUG   : writeksconfig is a direct step

08:49:23,481 INFO    : Writing autokickstart file

08:49:25,295 INFO    : leaving (1) step writeksconfig

08:49:25,296 INFO    : moving (1) to step setfilecon

08:49:25,296 DEBUG   : setfilecon is a direct step

08:49:25,297 INFO    : setting SELinux contexts for anaconda created files

08:49:56,254 INFO    : leaving (1) step setfilecon

08:49:56,255 INFO    : moving (1) to step copylogs

08:49:56,256 DEBUG   : copylogs is a direct step

08:49:56,256 INFO    : Copying anaconda logs


如果提供多個文件,tail也將會分開顯示每個文件的後十行:

   

[root@taoteng ~]# tail /var/log/anaconda.log /var/log/anaconda.syslog

==> /var/log/anaconda.log <==

08:49:23,479 DEBUG   : writeksconfig is a direct step

08:49:23,481 INFO    : Writing autokickstart file

08:49:25,295 INFO    : leaving (1) step writeksconfig

08:49:25,296 INFO    : moving (1) to step setfilecon

08:49:25,296 DEBUG   : setfilecon is a direct step

08:49:25,297 INFO    : setting SELinux contexts for anaconda created files

08:49:56,254 INFO    : leaving (1) step setfilecon

08:49:56,255 INFO    : moving (1) to step copylogs

08:49:56,256 DEBUG   : copylogs is a direct step

08:49:56,256 INFO    : Copying anaconda logs


==> /var/log/anaconda.syslog <==

00:06:20,507 INFO kernel:EXT4-fs (sda5): mounted filesystem with ordered data mode. Opts:

00:06:20,510 DEBUG kernel:SELinux: initialized (dev sda5, type ext4), uses xattr

00:06:21,062 INFO kernel:EXT4-fs (sda3): mounted filesystem with ordered data mode. Opts:

00:06:21,062 DEBUG kernel:SELinux: initialized (dev sda3, type ext4), uses xattr

00:06:21,429 INFO kernel:EXT4-fs (sda2): mounted filesystem with ordered data mode. Opts:

00:06:21,429 DEBUG kernel:SELinux: initialized (dev sda2, type ext4), uses xattr

00:41:20,368 DEBUG kernel:SELinux: 2048 avtab hash slots, 225596 rules.

00:41:20,530 DEBUG kernel:SELinux: 2048 avtab hash slots, 225596 rules.

00:41:21,620 DEBUG kernel:SELinux:  9 users, 12 roles, 3576 types, 179 bools, 1 sens, 1024 cats

00:41:21,620 DEBUG kernel:SELinux:  81 classes, 225596 rules


相應的,你也可以打印文件的後幾行使用"-n"參數:

[root@taoteng ~]# tail -5 /var/log/anaconda.log

08:49:25,297 INFO    : setting SELinux contexts for anaconda created files

08:49:56,254 INFO    : leaving (1) step setfilecon

08:49:56,255 INFO    : moving (1) to step copylogs

08:49:56,256 DEBUG   : copylogs is a direct step

08:49:56,256 INFO    : Copying anaconda logs


你也可以使用"-c"參數顯示文件的後N個字節:

   

[root@taoteng ~]# tail -c50 /var/log/anaconda.log

step

08:49:56,256 INFO    : Copying anaconda logs


3.cat 命令

這個"cat"命令是使用最廣泛、最通用的工具。它拷貝標準輸入到標準輸出,這個命令也支持滾屏如果文本文檔不在當前屏幕。


cat的基本的語法是:

# cat [options] [filename] [-] [filename]

cat使用最頻繁是查看一個文件的內容,所有這一切都要求打開一個文件去讀是cat之後加空格和文件名


[root@taoteng ~]# cat /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

operator:x:11:0:operator:/root:/sbin/nologin

games:x:12:100:games:/usr/games:/sbin/nologin

gopher:x:13:30:gopher:/var/gopher:/sbin/nologin

ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

...


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其次是輸出重定向操作符和要創建的文件名來實現。

[root@taoteng ~]# cat > test.cat

This is a test file cat command

Create a folder test


我們也可以對cat自定義end表示,下面就是它的實現:

[root@taoteng ~]# cat > test.cat.end << end

> This is a test file cat command

> I am Avishek

> Here i am writing this post

> end


[root@taoteng ~]# cat test.cat.end

I am Avishek

Here i am writing this post


永遠不要低估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"也是Linux下面的一個命令,說任何事情不如展現它的功能更好。


創建一個有關所有月份的文件"month",每個月份都佔用一行:

[root@taoteng ~]# cat month

January

February

March

April

May

June

July

August

September

October

November

December

對比更明顯:

[root@taoteng ~]# cat month && tac month

January

February

March

April

May

June

July

August

September

October

November

December

December

November

October

September

August

July

June

May

April

March

February

January


想了解更多cat命令的用法,請點擊:13 cat Command Usage

現在就這些,我也正在研究另一個有趣的文章,至此敬請關注!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章