Linux查看⽇志常⽤命令
Linux下查看⽇志⽤到的常⽤命令
杀僵⼫进程部分程序员,肯定喜欢下⾯命令:
  ps -ef | grep java (先查java进程ID)
  kill -9 PID(⽣产环境谨慎使⽤)
kill、killall、pkill命令的区别
  kill:通过pid来杀死进程
  killall (killall [参数] [进程名]):Linux系统中的killall命令⽤于杀死指定名字的进程(kill processes by name)。我们可以使⽤kill命令杀死指定进程PID的进程,如果要到我们需要杀死的进程,我们还需要在之前使⽤ps等命令再配合grep来查进程,⽽killall把这两个过程合⼆为⼀,是⼀个很好⽤的命令。
  pkill:pkill 和killall 应⽤⽅法差不多,也是直接杀死运⾏中的程式;如果你想杀掉单个进程,请⽤kill 来杀掉。例⼦: pkill -9 firefox
1.查看⽇志常⽤命令
tail:
-n 是显⽰⾏号;相当于nl命令;例⼦如下:
tail -100f test.log 实时监控100⾏⽇志
tail -n 10 test.log 查询⽇志尾部最后10⾏的⽇志;
tail -n +10 test.log 查询10⾏之后的所有⽇志;
head:
跟tail是相反的,tail是看后多少⾏⽇志;例⼦如下:
head -n 10 test.log 查询⽇志⽂件中的头10⾏⽇志;
head -n -10 test.log 查询⽇志⽂件除了最后10⾏的其他所有⽇志;
cat:
tac是倒序查看,是cat单词反写;例⼦如下:
cat -n test.log |grep "debug" 查询关键字的⽇志
2.应⽤场景⼀:按⾏号查看---过滤出关键字附近的⽇志
1)cat -n test.log |grep "debug" 得到关键⽇志的⾏号
2)通常查出错误⽇志 cat error.log | grep 'nick' , 这时候我们还有个需求就是输出当前这个⽇志的前后⼏⾏:
    cat error.log | grep -B 5 'nick' 显⽰nick及前5⾏
    cat error.log | grep -A 5 'nick' 显⽰nick及后5⾏
    cat error.log | grep -C 5 'nick' 显⽰file⽂件⾥匹配nick字串那⾏以及上下5⾏
    cat error.log | grep -n -B10 -A10 5 'nick' 显⽰file⽂件⾥匹配nick字串前后10⾏
3.应⽤场景⼆:选取⽇志中特定范围进⾏分析
1)cat -n test.log |tail -n +1000|head -n 20 从第1000⾏开始,显⽰20⾏
tail -n +1000表⽰查询1000⾏之后的⽇志
head -n 20 则表⽰在前⾯的查询结果⾥再查前20条记录
2)cat catalina.out | head -n 1400| tail -n +1350 显⽰1350⾏到1400⾏(实现原理都差不多,就是通过语法糖)
 (1)按⽇期截取:⼀般在⽇志系统中都会记录打印⽇志的时间,通常我们⾮常需要查指定时间端的⽇志:
  sed -n '/2014-12-17 16:17:20/,/2014-12-17 16:17:36/p' test.log
  特别说明:该命令中的两个⽇期值必须是⽇志⽂件中包含的值,否则该命令⽆效.;先 grep '2014-12-17 16:17:20' test.log 来确定⽇志中是否有该时间点
 (2)按⾏数截取
    sed -n ‘10000,20000p’ test.log
  sed -i '/关键词/d' catalina.out 删除包含关键词的⾏
4.应⽤场景三:⽇志内容特别多,打印在屏幕上不⽅便查看
(1)使⽤more和less命令,
如: cat -n test.log |grep "debug" |more 这样就分页打印了,通过点击空格键翻页
(2)使⽤ & 将其保存到⽂件中,到时可以拉下这个⽂件分析
如:cat -n test.log |grep "debug" &
1. 使⽤管道进⾏and or条件处理
  and 使⽤管道实现例如: grep -n '⽇志排查' test.log | grep '⽇志'
  or ⽤-E 例如:grep -n -E '⽇志排查|hello' test.log 满⾜两个关键字的都可以出来
5.如何看查占⽤cpu最多的进程?
⽅法⼀
核⼼指令:ps
实际命令:
ps H -eo pid,pcpu | sort -nk2 | tail
执⾏效果如下:
[work@test01 ~]$ ps H -eo pid,pcpu | sort -nk2 | tail
31396 0.6
31396 0.6
31396 0.6
31396 0.6
31396 0.6
31396 0.6
31396 0.6
31396 0.6
30904 1.0
30914 1.0
结果:
瞧见了吧,最耗cpu的pid=30914。
画外⾳:实际上是31396。
**⽅法⼆
**
核⼼指令:top
实际命令:
  top
  Shift + t
  top 命令类似于 Windows 的任务管理器,能够显⽰ Linux 系统中运⾏的进程的动态实时视图。
  默认情况下,top 输出结果是按 CPU 占⽤进⾏排序,每 5s 更新⼀次结果。我们可以使⽤top-b|head-50显⽰排前 50 的占⽤ CPU 最⾼的进程( Linux 中如何出 CPU 占⽤⾼的
进程
)。
上⾯的命令解释如下:
-b:批次档模式
head -50:显⽰输出结果的前 50 个
PID:进程的 ID
USER:进程的归属者
PR:进程的等级
NI:进程的 NICE 值
VIRT:进程使⽤的虚拟内存
RES:进程使⽤的物理内存
SHR:进程使⽤的共享内存
S:这个值表⽰进程的状态: S = 睡眠,R = 运⾏,Z = 僵⼫进程
%CPU:进程占⽤的 CPU ⽐例
%MEM:进程使⽤的 RAM ⽐例
TIME+:进程运⾏了多长时间
COMMAND:进程名字
如果想看进程的完整信息,可以加 -c 参数,如top-b-c|head-50
6.使⽤ ps
  ps 就是进程状态的缩写,可以显⽰当前运⾏进程的详细信息,如⽤户名、⽤户 ID、CPU 使⽤率、内存使⽤、进程启动⽇期时间、命令名等等。
  使⽤ps-eo pid,ppid,%mem,%cpu,cmd--sort=-%cpu|head可以显⽰占⽤ CPU 较⾼的进程信息(注意--sort=-%cpu)。如下:
# ps -eo pid,ppid,%mem,%cpu,cmd --sort=-%cpu | head
PID PPID %MEM %CPU CMD
18527 1714 4.2 40.3 /usr/lib/firefox/firefox -contentproc -childID 18 -isForBrowser -prefsLen 10002 -prefMapSize 213431 -parentBuildID 20191031132559 -greomni /usr/lib/firefox/omni.ja -appomni /usr/lib/firefox/browser/omni.ja -appdir /usr/lib/firefo 1714 1152 5.6 8.0 /usr/lib/firefox/firefox --new-window
18324 1714 4.9 6.3 /usr/lib/firefox/firefox -contentproc -childID 16 -isForBrowser -prefsLen 10002 -prefMapSize 213431 -parentBuildID 20191031132559 -greomni /usr/lib/firefox/omni.ja -appomni /usr/lib/firefox/browser/omni.ja -appdir /usr/lib/firefox 3286 1714 2.0 5.1 /usr/lib/firefox/firefox -content
proc -childID 14 -isForBrowser -prefsLen 8078 -prefMapSize 213431 -parentBuildID 20191031132559 -greomni /usr/lib/firefox/omni.ja -appomni /usr/lib/firefox/browser/omni.ja -appdir /usr/lib/firefox/br 1783 1714 3.0 4.5 /usr/lib/firefox/firefox -contentproc -childID 1 -isForBrowser -prefsLen 1 -prefMapSize 213431 -parentBuildID 20191031132559 -greomni /usr/lib/firefox/omni.ja -appomni /usr/lib/firefox/browser/omni.ja -appdir /usr/lib/firefox/browse 1227 1152 2.3 2.5 /usr/bin/gnome-shell
1170 1168 3.5 2.2 /usr/lib/Xorg vt2 -displayfd 3 -auth /run/user/1000/gdm/Xauthority -nolisten tcp -background none -noreset -keeptty -verbose 3
16865 1714 2.5 2.1 /usr/lib/firefox/firefox -contentproc -childID 15 -isForBrowser -prefsLen 10002 -prefMapSize 213431 -parentBuildID 20191031132559 -greomni /usr/lib/firefox/omni.ja -appomni /usr/lib/firefox/browser/omni.ja -appdir /usr/lib/firefox 2179 1714 2.7 1.8 /usr/lib/firefox/firefox -contentproc -childID 6 -isForBrowser -prefsLen 7821 -prefMapSize 213431 -parentBuildID 20191031132559 -greomni /usr/lib/firefox/omni.ja -appomni /usr/lib/firefox/browser/omni.ja -appdir /usr/lib/firefox/bro 上命令的解释如下:
-e:选择所有进程
-
o:⾃定义输出格式
–sort=-%cpu:基于 CPU 使⽤率对输出结果排序
head:显⽰结果的前 10 ⾏
PID:进程的 ID
PPID:⽗进程的 ID
%MEM:进程使⽤的 RAM ⽐例
%CPU:进程占⽤的 CPU ⽐例
Command:进程名字
如果想看命令名字⽽不是命令的绝对路径,可以:
7.到了最耗CPU的进程ID,对应的服务名是什么呢?
⽅法⼀
核⼼指令:ps
实际命令:
  ps aux | fgrep pid
执⾏效果如下:
[work@test01 ~]$ ps aux | fgrep 30914
work 30914 1.0 0.8 309568 71668 ? Sl Feb02 124:44 ./router2 –f
结果:
瞧见了吧,进程是./router2
画外⾳: grep 和fgrep的区别?
两者都是搜索⼯具,但功能上有区别。
  1,⾸先,grep⽀持的是标准正则表达式。
  2,fgrep,不⽀持正则表达式,只⽤于匹配固定字符串。
所以后者要⽐前者速度快,当然同时后者的搜索功能要弱于前者。
⽅法⼆
直接查proc即可。
实际命令:
ll /proc/pid
执⾏效果如下:
[work@test01 ~]$ ll /proc/30914
lrwxrwxrwx 1 work work 0 Feb 10 13:27 cwd -> /home/work/im-env/router2
lrwxrwxrwx 1 work work 0 Feb 10 13:27 exe -> /home/work/im-env/router2/router2
画外⾳:这个好,全路径都出来了。
8.如何查看某个端⼝的连接情况?
⽅法⼀
核⼼指令:netstat
实际命令:
  netstat -lap | fgrep port
执⾏效果如下:
[work@test01 ~]$ netstat -lap | fgrep 22022
tcp 0 0 29:22022 *: ** LISTEN 31396/imui*
tcp 0 0 29:22022 29:46642 ESTABLISHED 31396/imui
tcp 0 0 29:22022 29:46640 ESTABLISHED 31396/imui
linux查看当前路径命令
⽅法⼆
核⼼指令:lsof
实际命令:
  lsof -i :port
执⾏效果如下:
[work@test01 ~]$ /usr/sbin/lsof -i :22022
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
router 30904 work 50u IPv4 69065770 TCP 29:46638->29:22022 (ESTABLISHED) router 30904 work 51u IPv4 69065772 TCP 29:46639->29:22022 (ESTABLISHED) router 30904 work 52u IPv4 69065774 TCP 29:46640->29:22022 (ESTABLISHED) 9.归档压缩⽂件导出指定内容到⽂件
命令: zcat 压缩⽂件 |grep '关键词' >
注:>> 为追加;> 为重定向,会覆盖原先的内容
10.查关键字及其前后的信息
根据关键字查看⽇志
cat hrun.log | grep "新增⽤户"
根据关键字查看后10⾏⽇志
cat hrun.log | grep "新增⽤户" -A 10
根据关键字查看前10⾏⽇志
cat hrun.log | grep "新增⽤户" -B 10
根据关键字查看前后10⾏⽇志,并显⽰出⾏号
cat -n hrun.log | grep "新增⽤户" -C 10
查看⽇志前 50 ⾏
cat hrun.log | head -n 50
查看⽇志后 50 ⾏,并显⽰出⾏号
cat -n hrun.log | tail -n 50
说明:
-A 表⽰关键字之后,After
-B 表⽰关键字之前,Before
-C 表⽰关键字前后,Context
nohup命令:如果你正在运⾏⼀个进程,⽽且你觉得在退出帐户时或者关闭客户端该进程还不会结束,那么可以使⽤nohup命令。该命令可以在你退出帐户/关闭终端之后继续运⾏相应的进程。在缺省情况下该作业的所有输出都被重定向到⼀个名为nohup.out的⽂件中。
nohup command > myout.file 2>&1 &
在上⾯的例⼦中,0 – stdin (standard input),1 – stdout (standard output),2 – stderr (standard error) ;
2>&1是将标准错误(2)重定向到标准输出(&1),标准输出(&1)再被重定向输⼊到myout.file⽂件中。
  & :指在后台运⾏
  nohup : nohup运⾏命令可以使命令永久的执⾏下去,和⽤户终端没有关系,例如我们断开SSH连接都不会影响他的运⾏,注意了nohup没有后台运⾏的意思;&才是后台运⾏,
  &是指在后台运⾏,但当⽤户退出(挂起)的时候,命令⾃动也跟着退出
  nohup可以使⽤Ctrl+C结束掉,⽽&使⽤Ctrl+C则结束不掉,nohup不受终端关闭,⽤户退出影响,⽽&则受终端关闭,⽤户退出影响
结合起来⽤就是
nohup COMMAND &
12.Linux PATH环境变量及作⽤
  在讲解 PATH 环境变量之前,⾸先介绍⼀下 which 命令,它⽤于查某个命令所在的绝对路径。例如:
[root@localhost ~]# which rm
/bin/rm
[root@localhost ~]# which rmdir
/bin/rmdir
[root@localhost ~]# which ls
alias ls='ls --color=auto'
/bin/ls
注意,ls 是⼀个相对特殊的命令,它使⽤ alias 命令做了别名,也就是说,我们常⽤的 ls 实际上执⾏的是 ls --color=auto。
通过使⽤ which 命令,可以查各个外部命令(和 Shell 内置命令相对)所在的绝对路径。学到这⾥,读者是否有这样⼀个疑问,为什么前⾯在使⽤ rm、rmdir、ls 等命令时,⽆论当前位于哪个⽬录,都可以直接使⽤,⽽⽆需指明命令的执⾏⽂件所在的位置(绝对路径)呢?其实,这是 PATH 环境变量在起作⽤。
⾸先,执⾏如下命令:
[root@localhost ~]# echo $PATH
/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/root/bin
这⾥的 echo 命令⽤来输出 PATH 环境变量的值(这⾥的 $ 是 PATH 的前缀符号),PATH 环境变量的内容是由⼀堆⽬录组成的,各⽬录之间⽤冒号“:”隔开。当执⾏某个命令时,Linux 会依照 PATH 中包含的⽬录依次搜寻该命令的可执⾏⽂件,⼀旦到,即正常执⾏;反之,则提⽰⽆法到该命令。
如果在 PATH 包含的⽬录中,有多个⽬录都包含某命令的可执⾏⽂件,那么会执⾏先搜索到的可执⾏⽂件。
从执⾏结果中可以看到,/bin ⽬录已经包含在 PATH 环境变量中,因此在使⽤类似 rm、rmdir、ls等命令时,即便直接使⽤其命令名,Linux 也可以到该命令。
为了印证以上观点,下⾯举个反例,如果我们将 ls 命令移动到 /root ⽬录下,由于 PATH 环境变量中没有包含此⽬录,所有当直接使⽤ ls 命令名执⾏时,Linux 将⽆法到此命令的可执⾏⽂件,并提⽰ No such file or directory,⽰例命令如下:
[root@localhost ~]# mv /bin/ls /root
[root@localhost ~]# ls
bash: /bin/ls: No such file or directory
此时,如果仍想使⽤ ls 命令,有 2 种⽅法,⼀种是直接将 /root 添加到 PATH 环境变量中,例如:
[root@localhost ~]# PATH=$PATH:/root
[root@localhost ~]# echo $PATH
/usr/local/sbin:/usr/sbin:/usr/local/bin:/usr/bin:/bin:/root/bin:/root
[root@localhost ~]# ls
Desktop    Downloads    Music    post-install    Public    Videos
Documents  ls          Templates
注意,这种⽅式只是临时有效,⼀旦退出下次再登陆的时候,$PATH 就恢复成了默认值。
另⼀种⽅法是以绝对路径的⽅式使⽤此命令,例如:
[root@localhost ~]# /root/ls
Desktop    Downloads    Music    post-install    Public    Videos
Documents  ls          Templates
为了不影响系统的正常使⽤,强烈建议⼤家将移动后的 ls ⽂件还原,命令如下:
[root@localhost ~]# mv /root/ls /bin

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。