Linux常用命令
1.查看监听中的(占用)端口
netstat命令
netstat命令可提供网络连接相关的信息。想要查看所有监听中的TCP或UDP端口,包含使用端口和套接字状态的服务,可使用如下命令
sudo netstat -tunlp
命令中的选项参数有如下含义
-
-t -显示TCP端口。
-
-u -显示UDP端口。
-
-n -显示数字地址而不是解析主机。
-
-l -仅显示监听端口。
-
-p -显示监听进程的PID和名称。仅当以root用户或 sudo 用户身份运行命令时,才会显示此信息。
将会输出如下信息:
对于我们,比较重要的几个列是:
- Proto - 套接字使用的协议
- Local Address - 进程所监听的IP地址及端口号
- PID/Program name - PID和进程名称
也可以使用grep命令对查询结果做一些筛选。例如,查看哪个进程使用TCP协议监听端口22,可执行如下命令
sudo netstat -tnlp | grep :22
从输出内容可以看出来,22端口被SSH服务所占用
如果没有输出内容,则表示没有进程在监听相关端口
netstat虽然已过时,被ss和ip命令所取代。但很多发行版中仍可以用该命令,而且比较常用的一个命令。
ss
ss
是新版netstat,它缺少netstat的部分功能,但它能够显示更多关于TCP的信息,而且比netstat更快。命令选项都差不多,想要使用ss命令获取监听中的端口,可使用如下命令:
sudo ss -tunlp
输出内容跟netstat差不多
lsof
lsof
是一个强大的命令行工具,可提供进程打开的文件信息。
在Linux中一切皆为文件,可以将套接字视为写入网络的文件。
通过lsof
命令获取监听端口列表
sudo lsof -nP -iTCP -sTCP:LISTEN
使用的命令选项有如下含义
- -n -不要将端口号转换为端口名称。
- -p -不解析主机名,显示数字地址。
- -iTCP -sTCP:LISTEN - 仅显示TCP状态为LISTEN的网络文件。
想要查看特定端口的进程监听信息,例如想查看端口3306,可使用如下命令:
sudo lsof -nP -iTCP:3306 -sTCP:LISTEN
输入内容可以看出端口3306被mysql所占用
2.查进程
ps命令查找与进程相关的PID号: ps a 显示现行终端机下的所有程序,包括其他用户的程序。 ps -A 显示所有程序。 ps c 列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示。 ps -e 此参数的效果和指定"A"参数相同。 ps e 列出程序时,显示每个程序所使用的环境变量。 ps f 用ASCII字符显示树状结构,表达程序间的相互关系。 ps -H 显示树状结构,表示程序间的相互关系。 ps -N 显示所有的程序,除了执行ps指令终端机下的程序之外。 ps s 采用程序信号的格式显示程序状况。 ps S 列出程序时,包括已中断的子程序资料。 ps -t<终端机编号> 指定终端机编号,并列出属于该终端机的程序的状况。 ps u 以用户为主的格式来显示程序状况。 ps x 显示所有程序,不以终端机来区分。 最常用的方法是ps aux,然后再通过管道使用grep命令过滤查找特定的进程,然后再对特定的进程进行操作。 ps aux | grep program_filter_word,ps -ef |grep tomcat ps -ef|grep java|grep -v grep 显示出所有的java进程,去处掉当前的grep进程。
3.杀进程
使用kill命令结束进程:kill xxx 常用:kill -9 324 Linux下还提供了一个killall命令,可以直接使用进程的名字而不是进程标识号,例如:# killall -9 NAME
4.查看某个进程内存占用情况
cat /proc/pid/status
ps -aux | grep pid
top -p pid 查看程序的情况
PID:进程的ID
USER:进程所有者
PR:进程的优先级别,越小越优先被执行
NInice:值
VIRT:进程占用的虚拟内存
RES:进程占用的物理内存
SHR:进程使用的共享内存
S:进程的状态。S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值为负数
%CPU:进程占用CPU的使用率
%MEM:进程使用的物理内存和总内存的百分比
TIME+:该进程启动后占用的总的CPU时间,即占用CPU使用时间的累加值。
COMMAND:进程启动命令名称
VIRT:
1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据,以及malloc、new分配的堆空间和分配的栈空间等;
2、假如进程新申请10MB的内存,但实际只使用了1MB,那么它会增长10MB,而不是实际的1MB使用量。
3、VIRT = SWAP + RES
RES:
1、进程当前使用的内存大小,包括使用中的malloc、new分配的堆空间和分配的栈空间,但不包括swap out量;
2、包含其他进程的共享;
3、如果申请10MB的内存,实际使用1MB,它只增长1MB,与VIRT相反;
4、关于库占用内存的情况,它只统计加载的库文件所占内存大小。
5、RES = CODE + DATA
SHR:
1、除了自身进程的共享内存,也包括其他进程的共享内存;
2、虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小;
3、计算某个进程所占的物理内存大小公式:RES – SHR;
4、swap out后,它将会降下来。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了