Linux系统中重要的命令

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/daaikuaichuan/article/details/83549293

一、硬盘和内存相关指令

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:显示版本信息。

在这里插入图片描述

2、top

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

  top最好的地方之一就是发现可能已经失控的服务的进程ID号(PID)。有了这些PID,你可以对有问题的任务进行故障排除(或 kill)。

在这里插入图片描述

// 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:根据时间/累计时间进行排序。

3、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:显示版本信息。

在这里插入图片描述

total:总计物理内存的大小。
used:已使用多大。
free:可用有多少。
Shared:多个进程共享的内存总额。
Buffers/cached:磁盘缓存的大小。

第三行(-/+ buffers/cached):
	-buffers/cache 的内存数:95 (等于第1行的 used - buffers - cached)。
	+buffers/cache 的内存数: 32 (等于第1行的 free + buffers + cached)。
	// -buffers/cache反映的是被程序实实在在吃掉的内存,
	// +buffers/cache反映的是可以挪用的内存总数。

第四行是交换分区SWAP的,也就是我们通常所说的虚拟内存。

  所以,我们通过free命令查看机器空闲内存时,会发现free的值很小。这主要是因为,在linux中有这么一种思想,内存不用白不用,因此它尽可能的cache和buffer一些数据,提高文件读取的性能,以方便下次使用。但实际上这些内存,如果需要的话,也是可以立刻拿来使用的。
  所以从应用程序的角度来说,可用内存 = 系统free + buffers + cached

二、进程和线程状态相关命令

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、kill

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

kill -9 324

3、ipcs

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

// 命令参数:

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

在这里插入图片描述

4、ipcrm

  移除一个消息对象、或者共享内存段、或者一个信号集,同时会将与ipc对象相关链的数据也一起移除。当然,只有超级管理员,或者ipc对象的创建者才有这项权利。

// 命令参数:

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

5、pstree/ps -lf/ps -elf

// 命令参数:

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

在这里插入图片描述

三、网络状态相关命令

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

2、iptables

  防火墙,其实说白了讲,就是用于实现 Linux 下访问控制的功能的,它分为硬件的或者软件的防火墙两种。无论是在哪个网络中,防火墙工作的地方一定是在网络的边缘。而我们的任务就是需要去定义到底防火墙如何工作,这就是防火墙的策略,规则,以达到让它对出入网络的IP、数据进行检测。防火墙就是一道建立在电脑和网络之间的“墙”,它工作在计算机和它连接的网络中间,安装了防火墙的计算机流入流出的所有网络通信均要经过此防火墙。凡是能有效阻止网络非法连接的方式,都算防火墙

  防火墙策略一般分为两种,一种叫“通”策略,一种叫“堵”策略,通策略,默认门是关着的,必须要定义谁能进。堵策略则是,大门是洞开的,但是你必须有身份认证,否则不能进。所以我们要定义,让进来的进来,让出去的出去,所以通,是要全通,而堵,则是要选择。

防火墙最主要实现的作用有以下四项】:

  • 包过滤:通过包过滤,防火墙可以实现阻挡攻击,禁止外部/内部访问某些站点,限制每个 IP 的流量和连接数;

  • 包的透明转发:用户对服务器的访问的请求与服务器反馈给用户的信息,都需要经过防火墙的转发,因此,很多防火墙具备网关的能力;、

  • 阻挡外部攻击:如果用户发送的信息是防火墙设置所不允许的,防火墙会立即将其阻断,避免其进入防火墙之后的服务器中;

  • 记录攻击:防火墙可以将攻击行为都记录下来。

  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

  tcpdump采用命令行方式对接口的数据包进行筛选抓取,其丰富特性表现在灵活的表达式上。

tcpdump [ -DenNqvX ] [ -c count ] [ -F file ] [ -i interface ] [ -r file ]
        [ -s snaplen ] [ -w file ] [ expression ]

抓包选项:
-c:指定要抓取的包数量。注意,是最终要获取这么多个包。例如,指定"-c 10"将获取10个包,但可能已经处理了100个包,只不过只有10个包是满足条件的包。
-i interface:指定tcpdump需要监听的接口。若未指定该选项,将从系统接口列表中搜寻编号最小的已配置好的接口(不包括loopback接口,要抓取loopback接口使用tcpdump -i lo),
            :一旦找到第一个符合条件的接口,搜寻马上结束。可以使用'any'关键字表示所有网络接口。
-n:对地址以数字方式显式,否则显式为主机名,也就是说-n选项不做主机名解析。
-nn:除了-n的作用外,还把端口显示为数值,否则显示端口服务名。
-N:不打印出host的域名部分。例如tcpdump将会打印'nic'而不是'nic.ddn.mil'。
-P:指定要抓取的包是流入还是流出的包。可以给定的值为"in"、"out"和"inout",默认为"inout"。
-s len:设置tcpdump的数据包抓取长度为len,如果不设置默认将会是65535字节。对于要抓取的数据包较大时,长度设置不够可能会产生包截断,若出现包截断,
      :输出行中会出现"[|proto]"的标志(proto实际会显示为协议名)。但是抓取len越长,包的处理时间越长,并且会减少tcpdump可缓存的数据包的数量,
      :从而会导致数据包的丢失,所以在能抓取我们想要的包的前提下,抓取长度越小越好。

输出选项:
-e:输出的每行中都将包括数据链路层头部信息,例如源MAC和目标MAC。
-q:快速打印输出。即打印很少的协议相关信息,从而输出行都比较简短。
-X:输出包的头部数据,会以16进制和ASCII两种方式同时输出。
-XX:输出包的头部数据,会以16进制和ASCII两种方式同时输出,更详细。
-v:当分析和打印的时候,产生详细的输出。
-vv:产生比-v更详细的输出。
-vvv:产生比-vv更详细的输出。

其他功能性选项:
-D:列出可用于抓包的接口。将会列出接口的数值编号和接口名,它们都可以用于"-i"后。
-F:从文件中读取抓包的表达式。若使用该选项,则命令行中给定的其他表达式都将失效。
-w:将抓包数据输出到文件中而不是标准输出。可以同时配合"-G time"选项使得输出文件每time秒就自动切换到另一个文件。可通过"-r"选项载入这些文件以进行分析和打印。
-r:从给定的数据包文件中读取数据。使用"-"表示从标准输入中读取。

tcpdump常用的选项:

// 抓取通过第一个网卡的数据包,并将信息打印在屏幕上实时显示出来
tcpdump

// 抓取通过eth0网卡的数据包,信息实时打印在屏幕上。-i表示指定哪个网卡接口,
// 后面跟网卡名字,比如eth0或者lo
tcpdump -i eth0  

// 抓取该网卡和该IP地址会话的数据包,实时打印在屏幕上,host后面跟IP地址或者域名,
// 比如也可以写成host www.baidu.com
tcpdump -i eth0 host <addr>

// 抓取所有该网卡和该IP之间,收到的数据,src表示服务器收到的数据,
// 如果该参数缺省,默认抓取所有数据
tcpdump -i eth0 src host <addr>

// 抓取所有该网卡和该IP之间,收到的数据,dst表示服务器发出去的数据,如果该参数缺省,默认抓取所有数据
tcpdump -i eth0 dst host <addr>

// 查看8080端口号的会话数据包,port表示端口号,后面比如跟8080。-n表示不对具体ip地址做域名解析,直接显示会话两边的具体ip地址
tcpdump -n -i eth0 port 8080 and host <addr> tcp

// 将抓包结果保存下来,最后的路径,为绝对路径,如果只有文件名,
// 保存在当前文件夹下,pcap格式可被wireshark打开
tcpdump -c 10 -nn -i eth0 tcp dst port 8080 and host <addr> -w /home/eric/MyTest.pcap

四、性能监测相关命令

1、strace

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

strace -cp <pid>

通过「c」选项用来汇总各个操作的总耗时,运行后的结果大概如下图所示:
在这里插入图片描述
很明显,我们能看到 CPU 主要被 select 操作消耗了,还可以单独跟踪一下 select :

strace -T -e select -p <pid>

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/daaikuaichuan/article/details/83549293