linux查看管道⽂件,linux查看⽂件和管道命令
cat、tail、head、tee。这些命令的语法基本上相同的:命令名 [选项] [⽂件],⽽且您可以在管道中使⽤这些命令。这些命令的功能都是根据特定的条件选择⽂件内容进⾏打印。
cat ⼯具会将⽂件的全部内容打印到标准输出。这是最常⽤的命令之⼀。例如,您可以使⽤:
# cat /var/log/mail/info 将邮件程序守护程序⽇志的内容打印到标准输出。cat 命令有⼀个⾮常有⽤的选项(-n),该选项将允许您打印⾏号。某些⽂件,如守护程序⽇志⽂件(如果相应的守护程序运⾏了的话)可能⾮常⼤,在屏幕上打印全部内容可能没什么必要。您经常只是需要看看⼀个⽂件的某⼏⾏。您可以使⽤ tail 命令完成这⼀功能。默认情况下,下⾯的命令将会打印 /var/log/mail/info ⽂件的最后⼗⾏:
# tail /var/log/mail/info 您可以使⽤ -n 选项显⽰⽂件的最后 N ⾏。例如,要显⽰最后两⾏,您应该执⾏:
# tail -n2 /var/log/mail/info
⽽ head 命令与 tail ⼗分相似,只是打印⽂件的头⼏⾏。默认情况下,下⾯的命令将会打印 /var/log/mail/info ⽂件的头⼗⾏:
# head /var/log/mail/info
一扫而空
和 tail ⼀样,您也可以使⽤ -n 选项指定要打印的⾏数。例如,要打印前两⾏,您应该执⾏:
# head -n2 /var/log/mail/info
您还可以组合使⽤这⼏条命令。例如,如果您想要只显⽰第九⾏和第⼗⾏,您可以先使⽤ head 命令选择⽂件的前⼗⾏,然后再将结果通过管道送到 tail 命令。
# head /var/log/mail/info | tail -n2
竖线后⾯的部分将选择最后两⾏,然后将其打印到屏幕。同样地,您也可以选择只打印⽂件的倒数第 20 ⾏:
# tail -n20 /var/log/mail/info |head -n1
在本例中,我们让 tail 选择了⽂件的最后 20 ⾏,然后将结果通过管道传送给 head。然后 head 命令将会从得到的数据中取出第⼀⾏打印到屏幕上。
现在我们假定您想要将上例中的结果在屏幕上显⽰的同时还保存到⽂件 。tee ⼯具可以帮到我们。其语法是:
tee [选项] [⽂件]
现在,我们可以将上⼀命令做如下更改:
# tail -n20 /var/log/mail/info |head -n1| 再来举⼀个例⼦。我们想要选择最后 20 ⾏,将其保存到 ,但是只在屏幕上显⽰这 20 ⾏中的第⼀⾏。那么,我们应该输⼊:
阪上走丸
# tail -n20 /var/log/mail/info | |head -n1 tee 命令有⼀个⾮常有⽤的选项(-a),它允许您将数据追加到已有⽂件。
让我们再回过头来看看 tail 命令。像⽇志这样的⽂件应该是在不断变化的,因为与其相关的守护程序每时每刻都在记录着它所执⾏的动作和发⽣的事件。所以,如果您想要交互地观看⽇志⽂件,您可以使⽤ -f 选项:
# tail -f /var/log/mail/info 在本例中,/var/log/mail/info ⽂件的所有更改都会⽴即打印到屏幕上。当您想要知道您系统的⼯作原理时,使⽤带 -f 选项的 tail 命令将⾮常有⽤。例如,通过查看 /var/log/messages ⽇志⽂件,您可以时刻跟踪系统信息和各种守护程序。
在下⼀节中,我们将会看到如何将 grep ⽤作过滤器,以便从来⾃其它服务的信息中拆出 Postfix 信息。
grep: 定位⽂件中的字符串
班旗不管是命令的名字还是缩写(“General Regular Expression Parr”)都显得⾮常古怪,但该命令的作⽤和⽤法却很简单:grep 将在⼀个或多个⽂件中查找给定的模式。其语法为:
grep [选项] [⼀个或多个⽂件]
如果列出了多个⽂件,将会在每⼀⾏结果的开头附加相应的⽂件名。使⽤ -h 选项可以不显⽰这些⽂件名;使⽤ -l 选项可以只列出⽂件名。模式是⼀个正则表达式,尽管在⼤多数情况下只是⼀个简单的单词。下⾯列出了最常⽤的⼏个选项:
-i:进⾏不区分⼤⼩写的搜索;
-v:反转搜索。显⽰不与模式匹配的⾏;
-n:显⽰找到⾏的⾏号;
-w:让 grep 在进⾏模式匹配时匹配整个单词。
让我们回到对邮件守护程序⽇志⽂件的分析中。我们想要在 /var/log/mail/info 中找到包含“postfix”模式的所有⾏。我们就需要输出这个命令:
优先英文# grep postfix /var/log/mail/info
全面整顿打一地名
grep 命令可⽤于管道。这样,下⾯的命令与上⾯的例⼦所得到的结果相同:
# cat /var/log/mail/info | grep postfix 如果我们想要找到不与“postfix”模式匹配的所有⾏,我们就应该使⽤ -v 选项:
# grep -v postfix /var/log/mail/info
现在,我们假定想要查找关于成功发出的邮件的全部信息。这样,我们需要找到邮件守护程序(包含“postfix”模式)在⽇志⽂件中添加的⾏,⽽且这些⾏还必须包含成功发送的信息(“status=nt”):
# grep postfix /var/log/mail/info |grep status=nt
我们在本例中使⽤了两次 grep。这种⽅法虽然可以达到我们的⽬的,但显得有点⿇烦。我们可以使⽤ fgrep ⼯具达到相同的效果。⾸先,我们需要创建⼀个包含需要匹配的模式的⽂件。这样的⽂件可以⽤这种⽅式来创建(我们使⽤ 来作为⽂件名):
我的救世主# echo -e 'status=nt\npostfix' >./ 然后,我们将会⽤ ⽂件中的模式列表作为参数调⽤ fgrep ⼯具,⽽不是“两次调⽤”grep:
# fgrep -f ./ /var/log/mail/info ⽂件 ./ 可以包含您喜欢的任意多个模式。每个模
式都必须独占⼀⾏。例如,要选择已经成功发送给 的邮件的有关信息,只需将此电⼦邮件地址添加到 ./ ⽂件,试试这条命令:
# echo''>>./
显然,您可以将 grep 与 tail 或者 head 组合起来使⽤。如果我们想要查找上上次发送给 的邮件,只需输⼊:
# fgrep -f ./ /var/log/mail/info | tail -n2 | head -n1
在 Linux 中,管道连接着⼀个命令的标准输出和另⼀个命令的标准输⼊。我们应该知道我们有的时候会⽤到类似于“>”,“
⽽管道是进程中类似于重定位⽤法的⼀种进程之间的通信过程.让我们考虑⼀下⾮常常见的 ls 命令。 ls 有许多可⽤的选项,但是如果⽬录的内容卷动速度快得你⽆法查看时该怎么办呢? ⽐如/etc⽬录的⽂件就不是⼀屏可以显⽰完的
当然ls可能有适当的参数来完成我们需要的功能-------分屏显⽰.但是,如果我们使⽤管道命令的话更⽅便也更直观。使⽤以下命令来查看 /etc ⽬录的内容:
ls -al /etc 怎样才能在输出卷过屏幕之前仔细查看它们呢?
把输出⽤管道导⼊到⼀个叫做 less 的程序⼯具。 less 是⼀个分页显⽰⽂件的⼯具⼯具,它允许你⼀页⼀页(或⼀个屏幕⼀个屏幕)地查看信息。使⽤竖线( | )来把输出⽤管道导⼊到命令中。
ls -al /var/html/ | less 现在,你就可以⼀个屏幕⼀个屏幕地查看 /etc ⽬录的内容了。要向前移动⼀个屏幕,按 [Space] 键;要向后移动⼀个屏幕,按 键;要退出,按 [q] 键。使⽤ less 命令时,你还可以使⽤箭头键来前后移动。要使⽤ less 来搜索⽂本⽂件的输出,按[/] ,然后键⼊你想在⽂件内搜索的内容。
譬如:/grep
管道还可以⽤来只打印⼀个⽂件中的某些⾏。
键⼊:grep php test.php | lpr
这将会打印 test.php ⽂件中提到“php”这个词的每⼀⾏.
不仅要查看/lib⽬录下⾯有哪些⽂件,还希望⽤⼀个⽂件来纪录刚才ls的命令显⽰的所有结果,⽤两个管道符号:“>” 和“>>”,也就是⼤于符号啦。
ls /var/html/ & 还有⼀个管道符号是由两个⼤于号组成的“>>”,它和刚才“>”的区别在于⼀个⼤于
符号的管道是⽤来创建⼀个新的⽂件 ,如果已经有了同名的⽂件就复盖掉以前的内容;⽽两个⼤于符号的管道是⽤来在已经存在的⽂件后⾯追加新的内容,如果没有这个⽂件就创建它。
乒乓球削球
现在我们看看⼀共有多少⾏,是不是1000多⾏啊?我们运⾏
ls /var/html/ >> 其实这两个管道符号很容易记忆,向左边的箭头意思就是把前⾯命令的内容输⼊到后⾯的⽂件中去,刚才那个“|”管道符号是⽤来把前⾯命令的输出结果当作后⾯⼀个命令的输⼊数据。下⾯我们看⼀个和刚才“>>”刚刚相反的管道符号“<
cat >> test.php << "EOF" > a
> b
> c
温柔似水> EOF
运⾏第⼀⾏以后,意思就是把我们接下来的输⼊内容保存到test.php⽂件⾥⾯,当我们输⼊“EOF”的时候结束。“<”是系统⾃动产⽣的提⽰符号。第四⾏输⼊“EOF”系统就保存刚才输⼊的a b c三⾏到⼀个叫做test.php的⽂件⾥⾯去。现在我们cat test.php 已经有输⼊的内容。