find命令 - 根据路径和条件搜索指定文件

find命令的功能是根据给定的路径和条件查找相关文件或目录,其参数灵活方便,且支持正则表达式,结合管道符后能够实现更加复杂的功能,是Linux系统运维人员必须掌握的命令之一。

find命令通常进行的是从根目录(/)开始的全盘搜索,有别于whereis、which、locate等有条件或部分文件的搜索。对于服务器负载较高的情况,建议不要在高峰时期使用find命令的模糊搜索,这会相对消耗较多的系统资源。

语法格式

参数说明 :

路径 是要查找的目录路径,可以是一个目录或文件名,也可以是多个路径,多个路径之间用空格分隔,如果未指定路径,则默认为当前目录。

expression 是可选参数,用于指定查找的条件,可以是文件名、文件类型、文件大小等等。

匹配条件 中可使用的选项有二三十个之多,以下列出最常用的部份:

  • -name pattern:按文件名查找,支持使用通配符 *?

  • -type type:按文件类型查找,可以是 f(普通文件)、d(目录)、l(符号链接)等。

  • -size [+-]size[cwbkMG]:按文件大小查找,支持使用 +- 表示大于或小于指定大小,单位可以是 c(字节)、w(字数)、b(块数)、k(KB)、M(MB)或 G(GB)。

  • -mtime days:按修改时间查找,支持使用 +- 表示在指定天数前或后,days 是一个整数表示天数。

  • -user username:按文件所有者查找。

  • -group groupname:按文件所属组查找。

动作: 可选的,用于对匹配到的文件执行操作,比如删除、复制等。

find 命令中用于时间的参数如下:

  • -amin n:查找在 n 分钟内被访问过的文件。

  • -atime n:查找在 n*24 小时内被访问过的文件。

  • -cmin n:查找在 n 分钟内状态发生变化的文件(例如权限)。

  • -ctime n:查找在 n*24 小时内状态发生变化的文件(例如权限)。

  • -mmin n:查找在 n 分钟内被修改过的文件。

  • -mtime n:查找在 n*24 小时内被修改过的文件。

在这些参数中,n 可以是一个正数、负数或零。正数表示在指定的时间内修改或访问过的文件,负数表示在指定的时间之前修改或访问过的文件,零表示在当前时间点上修改或访问过的文件。

正数应该表示时间之前,负数表示时间之内。

例如:-mtime 0 表示查找今天修改过的文件,-mtime -7 表示查找一周以前修改过的文件。

关于时间 n 参数的说明:

  • +n:查找比 n 天前更早的文件或目录。

  • -n:查找在 n 天内更改过属性的文件或目录。

  • n:查找在 n 天前(指定那一天)更改过属性的文件或目录。

实例

查找当前目录下名为 file.txt 的文件:

将当前目录及其子目录下所有文件后缀为 .c 的文件列出来:

将当前目录及其子目录中的所有文件列出:

查找 /home 目录下大于 1MB 的文件:

查找 /var/log 目录下在 7 天前修改过的文件:

查找过去 7 天内被访问的文件:

在当前目录下查找最近 20 天内状态发生改变的文件和目录:

将当前目录及其子目录下所有 20 天前及更早更新过的文件列出:

查找 /var/log 目录中更改时间在 7 日以前的普通文件,并在删除之前询问它们:

查找当前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件:

查找系统中所有文件长度为 0 的普通文件,并列出它们的完整路径:

找并执行操作(例如删除):

这个例子中,-exec 选项允许你执行一个命令,{} 将会被匹配到的文件名替代,; 表示命令结束。

rpm命令 - RPM软件包管理器

rpm命令来自英文词组redhat package manager的缩写,中文译为“红帽软件包管理器”,其功能是在Linux系统下对软件包进行安装、卸载、查询、验证、升级等工作,常见的主流系统(如RHEL、CentOS、Fedora等)都采用这种软件包管理器,推荐用固定搭配“rpm-ivh 软件包名”安装软件,而卸载软件则用固定搭配“rpm -evh 软件包名”,简单好记又好用。

语法格式

常用参数

  • -a :查询所有套件。

  • -b<完成阶段><套件档>+或-t <完成阶段><套件档>+ :设置包装套件的完成阶段,并指定套件档的文件名称。

  • -c :只列出组态配置文件,本参数需配合"-l"参数使用。

  • -d :只列出文本文件,本参数需配合"-l"参数使用。

  • -e<套件档>或–erase<套件档> :删除指定的套件。

  • -f<文件>+ :查询拥有指定文件的套件。

  • -h或–hash :套件安装时列出标记。

  • -i :显示套件的相关信息。

  • -i<套件档>或–install<套件档> :安装指定的套件档。

  • -l :显示套件的文件列表。

  • -p<套件档>+ :查询指定的RPM套件档。

  • -q :使用询问模式,当遇到任何问题时,rpm指令会先询问用户。

  • -R :显示套件的关联性信息。

  • -s :显示文件状态,本参数需配合"-l"参数使用。

  • -U<套件档>或–upgrade<套件档> :升级指定的套件档。

  • -v :显示指令执行过程。

  • -vv :详细显示指令执行过程,便于排错。

实例

安装软件

显示软件安装信息

ps命令 - 显示进程状态

ps命令来自英文单词process的缩写,中文译为“进程”,其功能是显示当前系统的进程状态。使用ps命令可以查看到进程的所有信息,例如进程的号码、发起者、系统资源(处理器与内存)使用占比、运行状态等。ps命令可帮助我们及时发现哪些进程出现“僵死”或“不可中断”等异常情‍况。 ps命令经常会与kill命令搭配使用,以中断和删除不必要的服务进程,避免服务器的资源浪费。

语法格式:

ps 的参数非常多, 在此仅列出几个常用的参数并大略介绍含义

-A:列出所有的进程

-w :显示加宽可以显示较多的资讯

-au :显示较详细的资讯

-aux :显示所有包含其他使用者的进程,用标准格式输出。

-ef:与aux一样,但是是用bsd的格式输出

au(x) :输出格式 :

  • USER: 进程拥有者

  • PID: pid,进程ID

  • %CPU: 占用的 CPU 使用率

  • %MEM: 占用的内存使用率

  • VSZ: 占用的虚拟内存大小,表示如果一个程序完全驻留在内存的话需要占用多少内存空间

  • RSS: 常驻集大小,指明了当前实际占用了多少内存

  • TTY: 终端的次要装置号码 (minor device number of tty)

  • STAT: 该行程的状态:

    • D: 无法中断的休眠状态 (通常 IO 的进程)

    • R: 正在执行中

    • S: 静止状态

    • T: 暂停执行

    • Z: 不存在但暂时无法消除

    • W: 没有足够的记忆体分页可分配

    • <: 高优先序的行程

    • N: 低优先序的行程

    • L: 有记忆体分页分配并锁在记忆体内 (实时系统或捱A I/O)

  • START: 进程开始时间

  • TIME: 执行的时间

  • COMMAND:所执行的指令

实例

查找指定进程格式:

例如显示 php 的进程:

显示进程信息:

显示指定用户信息

显示所有进程信息,连同命令行

uname命令 - 显示系统内核信息

uname命令来自英文词组UNIX name的缩写,其功能是查看系统主机名、内核及硬件架构等信息。如果不加任何参数,默认仅显示系统内核名称(相当于-s参数)的作用。

语法格式

常用参数:

  • -a 或–all 显示全部的信息,包括内核名称、主机名、操作系统版本、处理器类型和硬件架构等。。

  • -m 或–machine 显示处理器类型。

  • -n 或–nodename 显示主机名。

  • -r 或–release 显示内核版本号。

  • -s 或–sysname 显示操作系统名称。

  • -v 显示操作系统的版本。

  • –help 显示帮助。

  • –version 显示版本信息。

  • -p 显示处理器类型(与 -m 选项相同)。

实例

显示系统信息:

显示计算机类型:

显示计算机名:

显示操作系统发行编号:

显示操作系统名称:

显示系统版本与时间:

kill命令 - 杀死进程

kill命令的功能是杀死(结束)进程。Linux系统中如需结束某个进程,既可以使用如service或systemctl这样的管理命令来结束服务,也可以使用kill命令直接结束进程信息。 如使用kill命令后进程并没有结束,则可以使用信号9进行强制杀死动作。

语法格式

常用参数:

  • -l:列出所有可用的信号。

  • -&lt;signal&gt;:发送特定的信号给目标进程,如 -9 表示发送 KILL 信号,即强制终止进程。

实例

**终止进程:**默认情况下,kill命令发送SIGTERM(信号15),这可以请求进程终止。如果进程没有捕获这个信号,它将被终止。

其中 PID 是进程的 ID。

**发送指定信号:**通过 -s 选项可以发送指定的信号。

例如,发送 SIGKILL(信号9)将立即结束进程,不能被忽略或捕获。

**杀死进程组:**使用 -9 选项可以杀死整个进程组。

使用 kill -l 命令列出所有可用信号。

最常用的信号是:

  • SIGKILL(信号9):立即结束进程,不能被捕获或忽略。

  • SIGTERM(信号15):正常结束进程,可以被捕获或忽略。

  • SIGSTOP(信号19):暂停进程,不能被捕获、忽略或结束。

  • SIGCONT(信号18):继续执行被暂停的进程。

  • SIGINT(信号2):通常是Ctrl+C产生的信号,可以被进程捕获或忽略。

如:

终止 PID 为 1234 的进程:

强制终止 PID 为 1234 的进程:

向 PID 为 1234 的进程发送 SIGSTOP:

显示信号

杀死指定用户所有进程:

注意事项:

  • 在使用 kill 命令时,需要具有相应的权限,否则可能无法终止进程。

  • 某些进程可能需要发送多次信号才能终止,比如一些守护进程。

  • 强制杀死进程可能会导致数据丢失或其他副作用,因此应谨慎使用。

top命令 - 实时监控

Linux top 是一个在 Linux 和其他类 Unix 系统上常用的实时系统监控工具。它提供了一个动态的、交互式的实时视图,显示系统的整体性能信息以及正在运行的进程的相关信息。。

语法格式

参数说明

  • -d &lt;秒数&gt;:指定 top 命令的刷新时间间隔,单位为秒。

  • -n &lt;次数&gt;:指定 top 命令运行的次数后自动退出。

  • -p &lt;进程ID&gt;:仅显示指定进程ID的信息。

  • -u &lt;用户名&gt;:仅显示指定用户名的进程信息。

  • -H:在进程信息中显示线程详细信息。

  • -i:不显示闲置(idle)或无用的进程。

  • -b:以批处理(batch)模式运行,直接将结果输出到文件。

  • -c:显示完整的命令行而不截断。

  • -S:累计显示进程的 CPU 使用时间。

显示信息

top 命令的一些常用功能和显示信息:

总体系统信息

  • 第一行信息:

    • 当前时间:15:08:39

    • 系统远行时间:28天5时35分

    • 当前登陆用户数: 1

    • 系统负载,即任务队列的平均长度。 三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值

  • 第二行信息:

    • 进程总数:527

    • 正在运行的进程数:2

    • 睡眠的进程数:525

    • 停止的进程数:0

    • 僵尸进程数:0

  • 第三行信息:

    • us:用户空间占用CPU百分比

    • sy:内核空间占用CPU百分比

    • ni:用户进程空间内改变过优先级的进程占用CPU百分比

    • id:空闲CPU百分比

    • wa:等待输入输出的CPU时间百分比

    • hi:硬中断(Hardware IRQ)占用CPU的百分比

    • si:软中断(Software Interrupts)占用CPU的百分比

    • st:用于有虚拟cpu的情况,用来指示被虚拟机偷掉的cpu时间

  • 第四行信息:

    • 物理内存总量

    • 使用的物理内存总量

    • 空闲内存总量

    • 用作内核缓存的内存量

  • 第五行信息:

    • 交换区总量

    • 使用的交换区总量

    • 空闲交换区总量

    • 缓冲的交换区总量

系统负载load average的含义

load average显示的是最近1分钟、5分钟和15分钟的系统平均负载。系统平均负载被定义为在特定时间间隔内运行队列中(在CPU上运行或者等待运行多少进程)的平均进程数。load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。

如果一个进程满足以下条件则其就会位于运行队列中:

  • 它没有在等待I/O操作的结果

  • 它没有主动进入等待状态(也就是没有调用’wait’)

  • 没有被停止(例如:等待终止)

Update:在Linux中,进程分为三种状态,一种是阻塞的进程blocked process,一种是可运行的进程runnable process,另外就是正在运行的进程running process。当进程阻塞时,进程会等待I/O设备的数据或者系统调用。

进程可运行状态时,它处在一个运行队列run queue中,与其他可运行进程争夺CPU时间。 系统的load是指正在运行running one和准备好运行runnable one的进程的总数。比如现在系统有2个正在运行的进程,3个可运行进程,那么系统的load就是5。load average就是一定时间内的load数量。

一般来说只要每个CPU的当前活动进程数不大于3那么系统的性能就是良好的,如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了。假设系统有两个CPU,load average为8.13,那么其每个CPU的当前任务数为:8.13/2=4.065。这表示该系统的性能是可以接受的。

这个具体场景具体分析。也有很多地方认为每个CPU满载是1,1是理想状态,只有负载小等于1 才认为系统性能是健康的。

进程信息

  • PID:进程的标识符。

  • USER:运行进程的用户名。

  • PR(优先级):进程的优先级。

  • NI(Nice值):进程的优先级调整值。

  • VIRT(虚拟内存):进程使用的虚拟内存大小。

  • RES(常驻内存):进程实际使用的物理内存大小。

  • SHR(共享内存):进程共享的内存大小。

  • %CPU:进程占用 CPU 的使用率。

  • %MEM:进程占用内存的使用率。

  • TIME+:进程的累计 CPU 时间。

功能和交互操作

在 top 运行时可以使用一些按键命令进行操作如按下 “k” 可以终止一个进程,按下 “h” 可以显示帮助信息等。

  • 排序:可以按照 CPU 使用率、内存使用率、进程 ID 等对进程进行排序。

    • P:以CPU的使用资源排序显示

    • M:以内存的使用资源排序显示

    • N:以pid排序显示

    • ‘x’ 打开/关闭排序列的加亮效果,可以按”shift+>”或者”shift+<”左右改变排序序列

  • 刷新频率:可以设置 top 的刷新频率,以便动态查看系统信息。

  • 按键盘数字“1”可以监控每个逻辑CPU的状况

  • 按键盘字母“b" 打开关闭加亮效果,也可以按 ‘y’ 来打开或者关闭运行态进程的加亮效果

实例

显示进程信息

显示完整命令

以批处理模式显示程序信息

以累积模式显示程序信息

设置信息更新次数

设置信息更新时间

显示指定的进程信息

显示更新十次后退出

使用者将不能利用交谈式指令来对行程下命令

lscpu

查看详细的CPU架构信息

netstat命令 - 显示网络状态

netstat命令来自英文词组network statistics的缩写,其功能是显示各种网络相关信息,例如网络连接状态、路由表信息、接口状态、NAT、多播成员等。

netstat命令不仅应用于Linux系统,而且Windows XP、Windows 7、Windows 10及Windows 11均已默认支持,并且可用参数也相同。

语法格式

常用参数:

  • -a或–all :显示所有连线中的Socket。

  • -A<网络类型>或–<网络类型> :列出该网络类型连线中的相关地址。

  • -c或–continuous :持续列出网络状态。

  • -C或–cache :显示路由器配置的快取信息。

  • -e或–extend :显示网络其他相关信息。

  • -F或–fib :显示路由缓存。

  • -g或–groups :显示多重广播功能群组组员名单。

  • -i或–interfaces :显示网络界面信息表单。

  • -l或–listening :显示监控中的服务器的Socket。

  • -M或–masquerade :显示伪装的网络连线。

  • -n或–numeric :直接使用IP地址,而不通过域名服务器。

  • -N或–netlink或–symbolic :显示网络硬件外围设备的符号连接名称。

  • -o或–timers :显示计时器。

  • -p或–programs :显示正在使用Socket的程序识别码和程序名称。

  • -r或–route :显示Routing Table。

  • -s或–statistics :显示网络工作信息统计表。

  • -t或–tcp :显示TCP传输协议的连线状况。

  • -u或–udp :显示UDP传输协议的连线状况。

  • -v或–verbose :显示指令执行过程。

  • -V或–version :显示版本信息。

  • -w或–raw :显示RAW传输协议的连线状况。

  • -x或–unix :此参数的效果和指定"-A unix"参数相同。

  • –ip或–inet :此参数的效果和指定"-A inet"参数相同。

实例

系统网络状态中的所有连接信息:

显示当前用户UDP连接状况

显示UDP端口号的使用情况

显示网卡列表

显示网络路由表状态信息:

显示组播组的关系

只列出监听中的连接:任何网络服务的后台进程都会打开一个端口,用于监听接入的请求。这些正在监听的套接字也和连接的套接字一样,也能被 netstat 列出来。使用 -l 选项列出正在监听的套接字。

获取进程名、进程号以及用户 ID:

使用 -p 选项查看进程信息。但使用 -p 选项时,netstat 必须运行在 root 权限之下,不然它就不能得到运行在 root 权限下的进程名,而很多服务包括 http 和 ftp 都运行在 root 权限之下。

如果想找出特定端口(例如端口 21)的进程名称,则添加:| grep -w ':21'

ss命令 - 网络状态工具

ss命令用来显示处于活动状态的套接字信息。ss命令可以用来获取socket统计信息,它可以显示和 netstat 类似的内容。但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。

当服务器的socket连接数量变得非常大时,无论是使用netstat命令还是直接 cat /proc/net/tcp,执行速度都会很慢。

ss快的秘诀在于,它利用到了TCP协议栈中tcp_diag。tcp_diag是一个用于分析统计的模块,可以获得Linux 内核中第一手的信息,这就确保了ss的快捷高效。当然,如果你的系统中没有tcp_diag,ss也可以正常运行,只是效率会变得稍慢。

语法格式

常用参数:

  • -h:显示帮助信息;

  • -V:显示指令版本信息;

  • -n:不解析服务名称,以数字方式显示;

  • -a:显示所有的套接字;

  • -l:显示处于监听状态的套接字;

  • -o:显示计时器信息;

  • -m:显示套接字的内存使用情况;

  • -p:显示使用套接字的进程信息;

  • -i:显示内部的TCP信息;

  • -4:只显示ipv4的套接字;

  • -6:只显示ipv6的套接字;

  • -t:只显示tcp套接字;

  • -u:只显示udp套接字;

  • -d:只显示DCCP套接字;

  • -w:仅显示RAW套接字;

  • -x:仅显示UNIX域套接字。

实例

只显示监听的套接字

不解析主机名

打印进程名和进程号

仅显示IPv4 或 IPv6 连接

列出处在 time-wait 状态的 IPv4 套接字

注意: 状态可以是以下任意一种

显示所有源端口或目的端口为 ssh 的套接字

显示目的端口是443或80的套接字

对地址和端口过滤

仅过滤端口

显示对方端口号小于100的套接字

显示端口号大于1024的套接字

显示对方端口是 80的套接字

显示TCP连接

显示 Sockets 摘要

列出当前的established, closed, orphaned and waiting TCP sockets

列出所有打开的网络连接端口

查看进程使用的socket

找出打开套接字/端口应用程序

显示所有UDP Sockets 或 ss -aA udp

shell命令快捷键

删除:删除(具体可以说是剪切)的字符串可以 ctrl + y 进行粘贴

  • ctrl + u : 从光标处向前删除指令串

  • ctrl + k : 从光标处向后删除指令串

移动

  • ctrl + a : 光标移动到整个指令串的最前面

  • ctrl + e : 光标移动到整个指令串的最后面