Linux 系统编程命令

发布时间:2023年12月27日

1. 硬盘和存储相关指令

1.1 df

df命令作用是列出文件系统的整体磁盘空间使用情况。可以用来查看磁盘已被使用多少空间和还剩余多少空间

// 命令参数:

df -a:--all,显示所有的文件系统,包括虚拟文件系统。 
df -B:--block-size,指定单位大小。比如1k,1m等。 
df -h:--human-readable,以人们易读的GB、MB、KB等格式显示。 
df -H:--si,和-h参数一样,但是不是以1024,而是1000,即1k=1000,而不是1k=1024df -i:--inodes,不用硬盘容量,而是以inode的数量来显示。 
df -k:以KB的容量显示各文件系统,相当于--block-size=1k。 
df -m:以KB的容量显示各文件系统,相当于--block-size=1m。 
df -l:--local,只显示本地文件系统。 
df --no-sync:在统计使用信息之前不调用sync命令(默认)df -sync:在统计使用信息之前调用sync命令。 
df -P:--portability,使用POSIX格式显示。 
df -t:--type=TYPE,只显示指定类型的文件系统。 
df -T:--print-type,显示文件系统类型。 
df -x:--exclude-type=TYPE,不显示指定类型的文件系统。 
df --help:显示帮助信息。 
df --version:显示版本信息。

1.2 free

free命令可以显示Linux系统中空闲的、已用的物理内存及swap内存,及被内核使用的buffer。在Linux系统监控的工具中,free命令是最经常使用的命令之一

// 命令参数:

free -b:以Byte为单位显示内存使用情况。 
free -k:以KB为单位显示内存使用情况。 
free -m:以MB为单位显示内存使用情况。
free -g:以GB为单位显示内存使用情况。 
free -o:不显示缓冲区调节列。 
free -s:<间隔秒数>持续观察内存使用状况。 
free -t:显示内存总和列。 
free -V:显示版本信息。

2. 进程和线程状态相关命令

2.1 ps

Linux中的ps命令是Process Status的缩写。ps命令用来列出系统中当前运行的那些进程。ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信息,就可以使用top命令。要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程,而 ps 命令就是最基本同时也是非常强大的进程查看命令。使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等。总之大部分信息都是可以通过执行该命令得到的。

// 命令参数:

ps -a:显示同一终端下的所有程序
ps -A:显示所有进程
ps -c:显示进程的真实名称
ps -N:反向选择
ps -e:显示环境变量
ps -f:显示程序间的关系
ps -H:显示树状结构
ps -r:显示当前终端的进程
ps -T:显示当前终端的所有程序
ps -u:指定用户的所有进程
ps -au:显示较详细的资讯
ps -aux:显示所有包含其他使用者的进程 (PID, CPU, MEM等等)
ps -ajx:显示所有包含其他使用者的进程 (PPID, PID, PGID等等)

2.2 kill

使用kill命令结束进程:kill xxx

kill -9 324

2.3 ipcs

多进程间通信常用的技术手段包括共享内存、消息队列、信号量等等,Linux系统下自带的ipcs命令是一个极好的工具,可以帮助我们查看当前系统下以上三项的使用情况,从而利于定位多进程通信中出现的通信问题

// 命令参数:

ipcs -a:是默认的输出信息 打印出当前系统中所有的进程间通信方式的信息
ipcs -m:打印出使用共享内存进行进程间通信的信息
ipcs -q:打印出使用消息队列进行进程间通信的信息
ipcs -s:打印出使用信号进行进程间通信的信息
ipcs -p:输出ipc方式的进程ID
ipcs -c:输出ipc各种方式的在该系统下的限制条件信息
ipcs -u:输出当前系统下ipc各种方式的状态信息(共享内存,消息队列,信号)

2.4 ipcrm

// 命令参数:

ipcrm -M shmkey:移除用shmkey创建的共享内存段
ipcrm -m shmid:移除用shmid标识的共享内存段
ipcrm -Q msgkey:移除用msqkey创建的消息队列
ipcrm -q msqid:移除用msqid标识的消息队列
ipcrm -S semkey:移除用semkey创建的信号
ipcrm -s semid:移除用semid标识的信号

2.3 pstree/ps -lf/ps -elf

// 命令参数:

pstree:以树结构显示进程
ps -ef f | grep proftpd:找到proftp现在有多少个进程/线程

3. 网络状态相关命令

3.1 netstat

Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等

// 命令参数:

netstat -a:(all)显示所有选项,默认不显示LISTEN相关
netstat -t:(tcp)仅显示tcp相关选项
netstat -u:(udp)仅显示udp相关选项
netstat -n:拒绝显示别名,能显示数字的全部转化成数字。
netstat -l:仅列出有在 Listen (监听) 的服務状态
netstat -p:显示建立相关链接的程序名
netstat -r:显示路由信息,路由表
netstat -e:显示扩展信息,例如uid等
netstat -s:按各个协议进行统计
netstat -c:每隔一个固定时间,执行该netstat命令。

// 提示:LISTEN和LISTENING的状态只有用-a或者-l才能看到
// 统计状态信息
netstat -ant | awk 'NR>=3 {++State[$6]} END 
{for (key in State) print key,State[key]}'
// 统计每个IP的连接数
netstat -n | awk '/^tcp/ {print $5}' | awk -F: 
'{print $1}' | sort | uniq -c| sort -rn
// 查看端口(80)使用情况
netstat -ntulp |grep 80
// 查看一台服务器上面哪些服务及端口
netstat  -lanp
// 查看一个服务有几个端口。比如要查看mysqld
ps -ef |grep mysqld
// 查看某一端口的连接数量,比如3306端口
netstat -pnt |grep :3306 |wc
// 查看某一端口的连接客户端IP 比如3306端口
netstat -anp |grep 3306

3.2 iptables

iptables命令用于创建数据过滤与NAT规则,在iptables命令中设置数据过滤或处理数据包的策略叫做规则,将多个规则合成一个链

(1)iptables的控制类型

ACCEPT:允许通过。
LOG:记录日志信息,然后传给下一条规则继续匹配。
REJECT:拒绝通过,必要时给出提示。
DROP:直接丢弃,不给出任何回应。

(2)iptables的规则链

// 规则链依据处理数据包的位置不同而进行分类:

PREROUTING:在进行路由选择前处理数据包。
INPUT:处理入站的数据包。
OUTPUT:处理出站的数据包。
FORWARD:处理转发的数据包。
POSTROUTING:在进行路由选择后处理数据包。

// 规则链的先后顺序:
入站顺序:PREROUTING--->INPUT
出站顺序:OUTPUT--->POSTROUTING
转发顺序:PREROUTING--->FORWARD--->POSTROUTING
// 参数解析:

-A:添加一条INPUT的规则。
-p:指定是什么协议我们常用的tcp协议,当然也有udp 。
--dport:就是目标端口当数据从外部进入服务器为目标端口。
--sport:数据从服务器出去则为数据源端口使用。
--state:指定tcp状态。
-j:就是指定是ACCEPT接收或者DROP不接收。
-s:就是来源的意思。

(3)iptables的常用命令

// 开启某一端口
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT

// 关闭某一端口
sudo iptables -A INPUT -p tcp --dport 8080 -j DROP
sudo iptables -A OUTPUT -p tcp --dport 8080 -j DROP

// 仅允许来自于10.0.0.0/24网段的用户连接本机的ssh服务
sudo iptables -I INPUT -s 10.0.0.0/24 -p tcp --dport 22 
-j ACCEPT

// 禁止某个IP访问
 sudo iptables -A INPUT -p tcp -s 192.168.1.2 -j DROP

// 删除INPUT链编号为×的规则。
sudo iptables -D INPUT 2

// 过滤无效的数据包
iptables -A OUTPUT -p tcp --sport 22 -m state --state 
ESTABLISHED -j ACCEPT

3. tcpdump 和 wireshark

(1)tcpdump简介

tcpdump是一个抓包工具,允许用户拦截和显示发送或收到网络连接到该计算机的数据包。

(2)tcpdump参数说明

tcpdump  [ -AbdDefhHIJKlLnNOpqStuUvxX# ] [ -B buffer_size ] 
         [ -c count ] [ -C file_size ] 
         [ -E spi@ipaddr algo:secret,... ] 
         [ -F file ] [ -G rotate_seconds ] [ -i interface ] 
         [ --immediate-mode ] [ -j tstamp_type ] [ -m module ] 
         [ -M secret ] [ --number ] [ --print ] [ -Q in|out|inout ] 
         [ -r file ] [ -s snaplen ] [ -T type ] [ --version ] 
         [ -V file ] [ -w file ] [ -W filecount ] [ -y datalinktype ] 
         [ -z postrotate-command ] [ -Z user ] 
         [ --time-stamp-precision=tstamp_precision ] 
         [ expression ] 

以一个例子作为说明】:

sudo tcpdump -i lo -t -s 0 -n -vv -c 10 port 8080 and host xxx.xxx.xxx.xxx -w tcpdump.cap
  • -i:指定接口,比如lo(回环接口,如果要抓取本机的网络数据包,就使用该接口)、eth0、lan0等,使用ifconfig可以查看。
  • -t:不输出时间戳。
  • -s:指定所捕获包的长度,默认是68B,若为0则是整个包。
  • -n:显示地址而不是hostname。
  • -vv:让输出更详细些。
  • -c:指定捕获包的数量。
  • port:指定端口。
  • host:主机地址。
  • -w:将数据包保存到文件中。

4. 性能监测相关命令

4.1 top

top命令提供正在运行的系统的实时动态视图,它检查每个进程的内存使用情况【技巧:运行 top 时,按「1」打开 CPU 列表,按「shift+p」以 CPU 排序】

// top状态说明:

PID:进程ID,进程的唯一标识符
USER:进程所有者的实际用户名。
PR:进程的调度优先级。这个字段的一些值是'rt'。这意味这这些进程运行在实时态。
NI:进程的nice值(优先级)。越小的值意味着越高的优先级。负值表示高优先级,正值表示低优先级
VIRT:进程使用的虚拟内存。进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES:驻留内存大小。驻留内存是任务使用的非交换物理内存大小。进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR:SHR是进程使用的共享内存。共享内存大小,单位kb
S:这个是进程的状态。它有以下不同的值:
	D - 不可中断的睡眠态。
	R – 运行态
	S – 睡眠态
	T – 被跟踪或已停止
	Z – 僵尸态
%CPU:自从上一次更新时到现在任务所使用的CPU时间百分比。
%MEM:进程使用的可用物理内存百分比。
TIME+:任务启动后到现在所使用的全部CPU时间,精确到百分之一秒。
COMMAND:运行进程所使用的命令。进程名称(命令名/命令行)
// 常用命令说明:

shift +  
L:擦除并且重写屏幕
K:终止一个进程。系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什么样的信号。一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽。
i:忽略闲置和僵死进程。这是一个开关式命令。
q:退出程序
r:重新安排一个进程的优先级别。系统提示用户输入需要改变的进程PID以及需要设置的进程优先级值。输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先权。默认值是10。
S:切换到累计模式。
s:改变两次刷新之间的延迟时间。系统将提示用户输入新的时间,单位为s。如果有小数,就换算成m s。输入0值则系统将不断刷新,默认值是5 s。需要注意的是如果设置太小的时间,很可能会引起不断刷新,从而根本来不及看清显示的情况,而且系统负载也会大大增加。
f或者F:从当前显示中添加或者删除项目。
o或者O:改变显示项目的顺序
l:切换显示平均负载和启动时间信息。
m:切换显示内存信息。
t:切换显示进程和CPU状态信息。
c:切换显示命令名称和完整命令行。
M:根据驻留内存大小进行排序。
P:根据CPU使用百分比大小进行排序。
T:根据时间/累计时间进行排序。

4.2 strace

Linux 操作系统有很多用来跟踪程序行为的工具,内核态的函数调用跟踪用「strace」,用户态的函数调用跟踪用「ltrace」:

strace -cp <pid>

4.3 perf

perf是一款Linux性能分析工具。Linux性能计数器是一个新的基于内核的子系统,它提供一个性能分析框架,比如硬件(CPU、PMU(Performance Monitoring Unit))功能和软件(软件计数器、tracepoint)功能。

通过perf,应用程序可以利用PMU、tracepoint和内核中的计数器来进行性能统计。它不但可以分析制定应用程序的性能问题(per thread),也可以用来分析内核的性能问题,当然也可以同事分析应用程序和内核,从而全面理解应用程序中的性能瓶颈。

5. 内存管理相关命令

5.1 valgrind

valgrind是一个内存分析工具,利用内核提供的服务完成各种特定的内存调试任务

valgrind可以检测以下内存问题:

  • 未释放内存的使用;
  • 对释放后内存的读/写;
  • 对已分配内存块尾部的读/写;
  • 内存泄露;
  • 不匹配的使用malloc/new/new[] 和 free/delete/delete[];
  • 重复释放内存。
文章来源:https://blog.csdn.net/weixin_46645965/article/details/135218596
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。