常用运维命令
概述
以下是程序员同学,特别是运维同学,经常会使用到的命令。以下使用 <xxx>
作为占位符,这是你在运行命令时应该根据实际情况替换的部分,而不是照抄!本文会持续更新其他的运维命令,欢迎收藏。
如果有不正确的地方,欢迎大家使用页面最下方的反馈按钮给作者反馈。
查看某个进程占用的内存
# 根据名称查找进程,这里以查找 nginx 为例
ps aufx|grep nginx
# 查看某个进程的内存使用情况
top -p <pid>
# 查看某个进程的状态,其中 VmRSS 表示物理内存使用量,单位 K
cat /proc/<pid>/status
查看进程打开的文件数
# 方法一
lsof -p <pid> | wc -l
# 方法二
ls -l /proc/<pid>/fd|wc -l
根据名称获取进程 pid
以下以查找 nginx 进程为例,以下四种方式都可以。
# 以查找 nginx 进程为例:
ps aufx|grep nginx|grep -v grep|awk '{print $2}'
# [] 防止匹配到awk自身进程
ps aufx|awk '/[n]ginx/{print $2}'
# 以查找 nginx 进程为例:
pgrep -f nginx
# 以查找 nginx 进程为例:
pidof nginx
根据进程名杀死进程
ps aufx|grep "<procname>"|grep -v grep|awk '{print $2}'|xargs kill -9
# 或者
ps aufx|awk '/[p]rocname/{print $2}'|xargs kill -9
来个例子,例如要杀死 tomcat 进程:
ps aufx|grep "tomcat"|grep -v grep|awk '{print $2}'|xargs kill -9
# 或者
ps aufx|awk '/[t]omcat/{print $2}'|xargs kill -9
注:kill -9
会强制杀死进程,温和一点的方式是去掉 -9
。我们建议不要加 -9
,毕竟营销号上天天有标题 “总监说下次再使用 xx,就直接滚蛋”。
查看端口占用
lsof -i:<port_number>
lsof -i:12345
# 先看进程id
netstat -anop|grep <port>
# 然后按c看到进程运行的命令
top -p <pid>
另一种方法:
#t=tcp,n=numeric,u=udp,l=listening,p=program
netstat -tunlp|grep <pid>
查看进程 pid/ppid/pgid/sid/comm/tty 等
tty表示控制终端。
ps -o pid,ppid,pgid,sid,tty,comm
根据 pid 找到可执行文件的位置
On Linux, the symlink /proc/
readlink -f /proc/<pid>/exe
可以先使用 grep 命令找到进程 pid,然后再使用上面的命令找到可执行文件的位置。
找进程的工作目录
pwdx <pid>
cd /proc/<pid>
ls -lh cwd
# 甚至可以看到exe
ls -lh exe
为什么进程挂了
dmesg | grep -i kill
grep /var/log/kern.log* -ie kill
The exact log file varies dependingon distribution and configuration, but if you do ls
-ldrat /var/log/*
it will show the most recently edited logfiles at the bottom. The files messages,dmesg and daemon are all likely sources of information.
为什么 root 也删除不了文件
可能是文件被锁定了。
# 查看属性
lsattr /path/to/file
# 解锁
chattr -i /path/to/file
查看文件夹下各个文件的大小
# 先cd到目标文件夹下
du -sh *|sort -h
查看某个文件夹的大小
# 先cd到目标文件夹下
du -sh
以其他用户的身份运行命令
# 就是su 加 -c
su - someotheruser -c "ls -lh"
查找目录下的 sparse file
find /path/to/search -type f -printf "%S\t%p\n" | gawk '$1 < 1.0 {print}'
查找被删除但是空间未释放的文件
# without lsof
find /proc/*/fd -ls | grep '(deleted)'
# with lsof, +L1 means 'list files that have fewer than 1 link'
lsof -a +L1 <mountpoint>
# or
lsof +L1
# If it was already deleted, on Linux, you can still truncate it by doing:
: > "/proc/<pid>/fd/<fd>"
查总线程数
# 注意大写的L
ps -eLf|wc -l
# 查特定用户的线程数,也就是nproc
ps -Lfu <username>|wc -l
查看进程树
pstree -ahlps <pid>
可以先使用 ps 命令找到进程id,假设找到 tail 进程的 pid 为 9112,那么接下来就是使用 pstree 展示 tail 的进程树:
stree -ahlps 9112
在 ubuntu 系统输出结构如下:
systemd,1 splash
└─systemd,4052 --user
└─gnome-terminal-,4814
└─zsh,8822
└─tail,9112 -f /tmp/hello
统计 nginx access.log ip 访问次数
cat /path/to/access.log | awk '{print $1}' |sort|uniq -c|sort -rn
假设 nginx 日志的路径为 /usr/local/nginx/logs/access.log,想统计每个 ip 的访问次数并根据访问次数倒序排列,可以执行:
cat /usr/local/nginx/logs/access.log | awk '{print $1}' |sort|uniq -c|sort -rn
# 如果只想统计出前十名
cat /usr/local/nginx/logs/access.log | awk '{print $1}' |sort|uniq -c|sort -rn|head -10
统计的输出结果类似下面这样,每一行的第一个数字是访问次数,紧接着是访问者的 ip。
228 8.134.81.19
78 52.167.144.125
57 109.237.97.180
52 117.140.247.59
...
温馨提示:反馈需要登录