在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 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其次是输出重定向操作符和要创建的文件名来实现。

[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

现在就这些,我也正在研究另一个有趣的文章,至此敬请关注!!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值