您的位置:首页 > 运维架构 > Linux

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

2014-04-26 15:41 375 查看
这儿有几个命令和程序用于查看文件内容在Linux上。工作中使用文件是艰巨的任务之一,大多数的计算机用户无论是新手、普通用户、高级用户、开发人员或者管理员等等。工作中使用文件能有效和高效都是一门技术!
今天,这篇文章我们就将讨论最受欢迎的命令:head、tail、cat。我们大多数已经用到过这些命令了,但是,当我们使用它们的时候却很少使它们很有效。

1.head命令这个head命令能够查看所给任何文件的头十行,基本的语法是:
head [options] [file(s)]

例如,下面这个命令将显示'/etc/passwd'文件的头十行. [root@taoteng ~]# head /etc/passwdroot:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinsync:x:5:0:sync:/sbin:/bin/syncshutdown:x:6:0:shutdown:/sbin:/sbin/shutdownhalt:x:7:0:halt:/sbin:/sbin/haltmail:x:8:12:mail:/var/spool/mail:/sbin/nologinuucp: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/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinsync:x:5:0:sync:/sbin:/bin/syncshutdown:x:6:0:shutdown:/sbin:/sbin/shutdownhalt:x:7:0:halt:/sbin:/sbin/haltmail:x:8:12:mail:/var/spool/mail:/sbin/nologinuucp: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.i686Feb 20 19:57:01 Installed: hesiod-3.1.0-19.el6.i686Feb 20 19:57:07 Installed: procmail-3.22-25.1.el6.i686Feb 20 19:59:22 Installed: sendmail-8.14.4-8.el6.i686Feb 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.i686Feb 20 19:57:01 Installed: hesiod-3.1.0-19.el6.i686Feb 20 19:57:07 Installed: procmail-3.22-25.1.el6.i686Feb 20 19:59:22 Installed: sendmail-8.14.4-8.el6.i686Feb 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/aanaconda.ifcfg.log anaconda.storage.log anaconda.yum.loganaconda.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 step08:49:23,481 INFO : Writing autokickstart file08:49:25,295 INFO : leaving (1) step writeksconfig08:49:25,296 INFO : moving (1) to step setfilecon08:49:25,296 DEBUG : setfilecon is a direct step08:49:25,297 INFO : setting SELinux contexts for anaconda created files08:49:56,254 INFO : leaving (1) step setfilecon08:49:56,255 INFO : moving (1) to step copylogs08:49:56,256 DEBUG : copylogs is a direct step08: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 step08:49:23,481 INFO : Writing autokickstart file08:49:25,295 INFO : leaving (1) step writeksconfig08:49:25,296 INFO : moving (1) to step setfilecon08:49:25,296 DEBUG : setfilecon is a direct step08:49:25,297 INFO : setting SELinux contexts for anaconda created files08:49:56,254 INFO : leaving (1) step setfilecon08:49:56,255 INFO : moving (1) to step copylogs08:49:56,256 DEBUG : copylogs is a direct step08: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 xattr00: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 xattr00: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 xattr00: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 cats00: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 files08:49:56,254 INFO : leaving (1) step setfilecon08:49:56,255 INFO : moving (1) to step copylogs08:49:56,256 DEBUG : copylogs is a direct step08:49:56,256 INFO : Copying anaconda logs

你也可以使用"-c"参数显示文件的后N个字节:
[root@taoteng ~]# tail -c50 /var/log/anaconda.log step08:49:56,256 INFO : Copying anaconda logs

3.cat 命令
这个"cat"命令是使用最广泛、最通用的工具。它拷贝标准输入到标准输出,这个命令也支持滚屏如果文本文档不在当前屏幕。

cat的基本的语法是: # cat [options] [filename] [-] [filename]cat使用最频繁是查看一个文件的内容,所有这一切都要求打开一个文件去读是cat之后加空格和文件名

[root@taoteng ~]# cat /etc/passwdroot:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinsync:x:5:0:sync:/sbin:/bin/syncshutdown:x:6:0:shutdown:/sbin:/sbin/shutdownhalt:x:7:0:halt:/sbin:/sbin/haltmail:x:8:12:mail:/var/spool/mail:/sbin/nologinuucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologinoperator:x:11:0:operator:/root:/sbin/nologingames:x:12:100:games:/usr/games:/sbin/nologingopher:x:13:30:gopher:/var/gopher:/sbin/nologinftp: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.catThis is a test file cat commandCreate 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 JanuaryFebruaryMarchAprilMayJuneJulyAugustSeptemberOctoberNovemberDecember对比更明显:
[root@taoteng ~]# cat month && tac month JanuaryFebruaryMarchAprilMayJuneJulyAugustSeptemberOctoberNovemberDecemberDecemberNovemberOctoberSeptemberAugustJulyJuneMayAprilMarchFebruaryJanuary

想了解更多cat命令的用法,请点击:13 cat Command Usage现在就这些,我也正在研究另一个有趣的文章,至此敬请关注!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: