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后,它将会降下来。

 

posted @   ImreW  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示