本文介绍一些常用的Linux命令,帮助开发人员高效工作和排除故障。
1. xargs
xargs命令通过接收输入并将其转换为另一个命令的参数,从而帮助构建和执行提供的命令。
这个命令重要且实用,开发人员可以使用这个命令将命令的输出作为参数传递给另一个命令。
例如,如果想从/etc目录中找到所有的“* .conf”文件,并将其分类到不同的组中,可以使用以下命令:
$ find /etc -name *.conf -type f -print | xargs file
/etc/dhcp/dhclient.conf: ASCII text
/etc/dracut.conf.d/ec2.conf: ASCII text
...
/etc/dbus-1/system.d/org.freedesktop.hostname1.conf: XML 1.0 document, ASCII text
...
/etc/dbus-1/session.conf: exported SGML document, ASCII text
...
还可以使用-i选项运行多个命令:
$ cat file.txt | xargs -i sh -c 'command {} | command2 {} && command3 {}'
或者甚至可以使用tar归档文件:
$ find /home/tony -name "*.jpg" -type f | xargs tar -cxvf images.tar.gz
2. nohup
首先,需要理解SIGHUP(终端挂起信号)是一种信号,当关闭控制终端时,它会终止Linux进程。如果意外关闭终端或失去与主机的连接,所有正在运行的进程将被自动终止。
使用nohup命令是阻止SIGHUP信号并允许进程在从终端注销后继续运行的一种方法。
例如,如果想在后台运行数据库导出操作,并将命令的操作输出记录到文件中,可以这样做:
$ nohup mysqldump -uroot -pxxxx —all-databases > ./alldatabases.sql &
还可以使用nohup同时在后台运行多个进程,使用以下命令:
nohup bash -c '[command1] && [command2]'
只需将command和command2替换为自己的命令,如果需要,还可以添加更多的命令,只需使用&&作为分隔符。
3. 查找内存/CPU使用率高的进程
如果安装了htop,可以使用它来替代下面的命令,会有更好的可视化效果。
可以使用以下命令按顺序查找高内存消耗的进程:
$ ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head -10
PID PPID CMD %MEM %CPU
1213 1 /usr/lib/systemd/systemd-jo 0.9 0.0
2332 1 /usr/sbin/rsyslogd -n 0.6 0.0
2417 2333 /usr/bin/ssm-agent-worker 0.5 0.0
2474 1 python3 /usr/bin/amazon-efs 0.5 0.1
2333 1 /usr/bin/amazon-ssm-agent 0.3 0.0
2477 1 /usr/bin/stunnel /var/run/e 0.2 0.0
9223 2392 sshd: txu [priv] 0.2 0.0
2392 1 /usr/sbin/sshd -D 0.2 0.0
9475 9256 sudo su - 0.1 0.0
类似地,可以使用以下命令按顺序查找高CPU消耗的进程:
$ ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head -10
PID PPID CMD %MEM %CPU
2474 1 python3 /usr/bin/amazon-efs 0.5 0.1
1 0 /usr/lib/systemd/systemd -- 0.1 0.0
2 0 [kthreadd] 0.0 0.0
3 2 [rcu_gp] 0.0 0.0
4 2 [rcu_par_gp] 0.0 0.0
6 2 [kworker/0:0H-ev] 0.0 0.0
8 2 [mm_percpu_wq] 0.0 0.0
9 2 [rcu_tasks_rude_] 0.0 0.0
10 2 [rcu_tasks_trace] 0.0 0.0
4. 查看多个日志文件
在日常工作中,查看日志文件的方式通常是使用tail命令在一个终端中查看一个日志文件,然后在另一个终端中查看另一个日志文件。但有时候这种方法有点麻烦。有一种工具叫做multitail可以在同一个终端上同时查看多个日志文件。
下面的命令将会在两列中显示两个日志文件:
$ multitail -s 2 /var/log/messages /var/log/cloud-init-output.log
要安装multitail:
$ wget ftp://ftp.is.co.za/mirror/ftp.rpmforge.net/redhat/el6/en/x86_64/dag/RPMS/multitail-5.2.9-1.el6.rf.x86_64.rpm
$ yum localinstall multitail-5.2.9-1.el6.rf.x86_64.rpm
5. 查看TCP连接状态
按组查看TCP连接:
$ netstat -nat | awk '{print $6}' | sort | uniq -c | sort -rn
6 LISTEN
4 ESTABLISHED
3 SYN_RECV
1 Foreign
1 established)
6. 最高请求数前10个IP
有时候用户请求的数量会突然增加。这时,可以检查请求源的IP状态。如果集中在几个IP上,可能存在攻击,可以使用防火墙来阻止。命令如下:
$ netstat -anlp | grep 80| grep tcp | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -nr | head -n10
1566 10.1.1.2
500 10.2.3.4
44 10.3.2.4
...
7. 最耗费文件句柄的前10个进程
有时候需要监控服务器上每个进程的打开文件数,下面的命令可以帮助找出前15个:
$ find /proc -maxdepth 1 -type d -name '[0-9]*' -exec bash -c "ls {}/fd/ | wc -l | tr '\n' ' '" \; -printf "fds (PID = %P) \n" | sort -rn | head -15
500 fds (PID = 2541)
366 fds (PID = 29563)
254 fds (PID = 1)
46 fds (PID = 2613)
44 fds (PID = 2253)
41 fds (PID = 30709)
38 fds (PID = 27695)
37 fds (PID = 29971)
...
它进入/proc目录中的每个PID文件夹,计算打开的文件数,然后按降序排序。
8. 查找最多连接数的IP
统计具有最多入站连接的IP地址:
$ ss -t | awk '(NR>1) {print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -rn | head -10
16 127.0.0.1
8 10.238.168.96
1 10.229.36.59
...