Linux 系统编程命令
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=1024。
df -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[];
- 重复释放内存。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!