上节内容,我们一起了解了 cp/mv/rm 三个命令的操作后,今天我们再来讲一下我们日常工作当中需要使用到的功能,就是查看日志文件或是配置文件的内容,
大家都知道,运维工作经常要做的就是做巡检,而巡检查看最多的就是各种日志文件。另外应用程序出错,查找原因也是要查看配置文件与日志文件。从中查找出问题所在。
在 liunx 中我们常用的命令就有
cat (concatenate)命令用于连接文件并打印到标准输出设备上。
主要用于查看比较少内容的文件或需要改写的文件,比如查看配置文件或清除日志文件内容。
实例1:查看网卡配置文件,查看完后,如果对它进行修改,使用 vi/vim命令,具体用法翻看之前的章节
[root@localhost network-scripts]# cat ifcfg-eth0 #查看网卡配置
DEVICE=eth0
TYPE=Ethernet
UUID=a5cd9ea3-81fb-4b91-bc0f-eff0aefb7d5b
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="System eth0"
HWADDR=::3E::0C:
PEERDNS=yes
PEERROUTES=yes
LAST_CONNECT=
[root@localhost network-scripts]# 实例2:用于修改文件或清除文件内容
cat -n dest_file > source_file #dest_file 文件内容加上行数,并写入 source_file
cat -b d1_file d2_file > d3_file #d1与d2文件加上行数,然后再附加到 d3文件
cat /dev/null > /home/che/test.txt #清空 test.txt 内容[root@localhost chenmz]# cat test.txt #查看 test文件内容
akljwrewerrwerwrsfdfsdf
sdfsdfsdfsfsdfsfsdf
rwewrwerwrwrwerwr
yutyutyututyu
iouiouiououiouioiuoiu
ljlkjkljkljljl
hkjkhjkhjkhjkhjk
ghgjghjgjghjgj
fghfgfhgfhfhfgh
[root@localhost chenmz]# cat -n test.txt > dest.txt #把 test文件的内容加上行数,并改名为 dest
[root@localhost chenmz]# cat dest.txt
1 akljwrewerrwerwrsfdfsdf
2 sdfsdfsdfsfsdfsfsdf
3 rwewrwerwrwrwerwr
4 yutyutyututyu
5 iouiouiououiouioiuoiu
6 ljlkjkljkljljl
7 hkjkhjkhjkhjkhjk
8 ghgjghjgjghjgj
9 fghfgfhgfhfhfgh
[root@localhost chenmz]# cat /dev/null > /home/chenmz/dest.txt #清空 dest内容
[root@localhost chenmz]# cat dest.txt #再使用cat,无内容可显示了。
[root@localhost chenmz]# less (less)随意浏览文件,支持翻页和搜索,支持向上翻页和向下翻页.
less [参数] 文件 常用参数:
-N 显示行数,便于查看位置
-m 显示内容百分比,便于了解内容多少
-e 当文件显示结束后,自动离开
实例,加上参数后可以很清楚自己查看的内容
[root@localhost chenmz]# less -emN ctp.log
:: [CTPQuartzScheduler_Worker-2] INFO: AutoChangePhaseJob: - 完成进行中项目的自动切换项目阶段定时任务,耗时:26MS
:: [CTPQuartzScheduler_Worker-4] WARN: ConfigManagerImpl: - load data is null from db, dataKey : cip_monitor^@log_period^@1
:: [CTPQuartzScheduler_Worker-4] WARN: ConfigManagerImpl: - load data is null from db, dataKey : cip_monitor^@meaasge_period^@1
:: [开始定时执行任务] INFO: InsertDataTask: - 定时器开始
:: [开始定时执行任务] INFO: OA: - *********** 付款申请单 开始 ***********
:: [开始定时执行任务] INFO: InsertDataTask: - 付款申请单 结束
:: [开始定时执行任务] INFO: OA: - *********** 供应商 开始 ***********
:: [开始定时执行任务] INFO: InsertDataTask: - 供应商档案 结束
:: [开始定时执行任务] INFO: OA: - *********** 付款结算单 开始 ***********
:: [开始定时执行任务] INFO: InsertDataTask: - 付款结算单 结束
:: [开始定时执行任务] INFO: OA: - *********** 凭证集成 开始 ***********
:: [开始定时执行任务] INFO: InsertDataTask: - 凭证集成 结束
:: [开始定时执行任务] INFO: OA: - *********** 请购单 开始 ***********
:: [开始定时执行任务] INFO: InsertDataTask: - 采购申请单 结束
:: [开始定时执行任务] INFO: InsertDataTask: - 定时器开始
:: [开始定时执行任务] INFO: OA: - *********** 付款申请单 开始 ***********
:: [开始定时执行任务] INFO: InsertDataTask: - 付款申请单 结束
:: [开始定时执行任务] INFO: OA: - *********** 供应商 开始 ***********
:: [开始定时执行任务] INFO: InsertDataTask: - 供应商档案 结束
ctp.log 0%
然后,在这里可以直接使用通用的操作符,对文件进行操作
/字符串:向下搜索"字符串"的功能
?字符串:向上搜索"字符串"的功能
n:重复前一个搜索(与 / 或 ? 有关)
N:反向重复前一个搜索(与 / 或 ? 有关)
b 向上翻一页
d 向后翻半页
h 显示帮助界面
Q 退出less 命令
u 向前滚动半页
y 向前滚动一行
空格键 滚动一页
回车键 滚动一行
[pagedown]: 向下翻动一页
[pageup]: 向上翻动一页
比如在这个界面下,使用/java 则会向下搜索带有 java 的内容,直接定位
java.net.UnknownHostException: restapi.amap.com: 域名解析暂时失败
at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method) ~[?:.0_212]
at java.net.InetAddress$2.lookupAllHostAddr(InetAddress.java:) ~[?:.0_212]
at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:) ~[?:.0_212]
at java.net.InetAddress.getAllByName0(InetAddress.java:) ~[?:.0_212]
at java.net.InetAddress.getAllByName(InetAddress.java:) ~[?:.0_212]
at java.net.InetAddress.getAllByName(InetAddress.java:) ~[?:.0_212]
at org.apache.http.impl.conn.SystemDefaultDnsResolver.resolve(SystemDefaultDnsResolver.java:) ~[httpclient.jar:]
at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:) ~[httpclient.jar :]
at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:) ~[httpclient.jar:4 .]
at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:) ~[httpclient.jar:]
at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:) ~[httpclient.jar:]
at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:) ~[httpclient.jar:]
at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:) ~[httpclient.jar:]
at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:) ~[httpclient.jar:]
at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:) ~[httpclient.jar:]
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:) ~[httpclient.jar:]
%more(more)以一页一页的形式显示,更方便使用者逐页阅读,更有搜索字符功能。
more 命令比 less 更好用,自带百分比功能,其它功能与 less 类似,这里就不再去做演示了,有兴趣的,自己去对比一下。有两个参数要重点说明一下
+num 从第 num 行开始显示。比如+(表示从第行开始显示)
-s 多个空行不显示(用于有些文件很多空行,可以压缩显示空间)
more + ctp.log
more -s ctp.logmore 显示界面也是有操作符可以使用的
Enter 向下n行,需要定义。默认为1行
Ctrl+F 向下滚动一屏
空格键 向下滚动一屏
Ctrl+B 返回上一屏
= 输出当前行的行号
:f 输出文件名和当前行的行号
V 调用vi编辑器
!命令 调用Shell,并执行命令
q 退出more
tail(tail)查看文件的内容,有一个常用的参数 -f 常用于查阅正在改变的日志文件。
最为常用的一个命令,也是我最喜欢使用的一个命令,因为它可以直接查看正在不断变化的文件,比如说正在不断变化的 log 文件(比如应用的 log 文件)
实例
tail 命令默认是显示最后行的数据,如果要显示更多,则需要加上参数-n 数字 使用
tail -n ctp #显示最后行的内容
tail -n - ctp #不显示前行,从第行起显示到结尾,等同 more + ctp结合这四个命令,几乎我们可以对查看 log 文件或是配置文件都是很方便的哦,你学会了么?
其中常用度高到底的顺序为 tail>cat>more>less
