ind命令的功能是根据给定的路径和条件查找相关文件或目录,其参数灵活方便,且支持正则表达式,结合管道符后能够实现更加复杂的功能,是Linux系统运维人员必须掌握的命令之一。
find命令通常进行的是从根目录(/)开始的全盘搜索,有别于whereis、which、locate等有条件或部分文件的搜索。对于服务器负载较高的情况,建议不要在高峰时期使用find命令的模糊搜索,这会相对消耗较多的系统资源。
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 参数的说明:
查找当前目录下名为 file.txt 的文件:
find . -name file.txt
将当前目录及其子目录下所有文件后缀为 .c 的文件列出来:
find . -name "*.c"
将当前目录及其子目录中的所有文件列出:
find . -type f
查找 /home 目录下大于 1MB 的文件:
find /home -size +1M
查找 /var/log 目录下在 7 天前修改过的文件:
find /var/log -mtime +7
查找过去 7 天内被访问的文件:
find /path/to/search -atime -7
在当前目录下查找最近 20 天内状态发生改变的文件和目录:
find . -ctime 20
将当前目录及其子目录下所有 20 天前及更早更新过的文件列出:
find . -ctime +20
查找 /var/log 目录中更改时间在 7 日以前的普通文件,并在删除之前询问它们:
find /var/log -type f -mtime +7 -ok rm {} \;
查找当前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件:
find . -name file.txt
0
查找系统中所有文件长度为 0 的普通文件,并列出它们的完整路径:
find . -name file.txt
1
找并执行操作(例如删除):
find . -name file.txt
2
这个例子中,-exec 选项允许你执行一个命令,{} 将会被匹配到的文件名替代,; 表示命令结束。
rpm命令来自英文词组redhat package manager的缩写,中文译为“红帽软件包管理器”,其功能是在Linux系统下对软件包进行安装、卸载、查询、验证、升级等工作,常见的主流系统(如RHEL、CentOS、Fedora等)都采用这种软件包管理器,推荐用固定搭配“rpm-ivh 软件包名”安装软件,而卸载软件则用固定搭配“rpm -evh 软件包名”,简单好记又好用。
find . -name file.txt
3
常用参数
安装软件
find . -name file.txt
4
显示软件安装信息
find . -name file.txt
5
ps命令来自英文单词process的缩写,中文译为“进程”,其功能是显示当前系统的进程状态。使用ps命令可以查看到进程的所有信息,例如进程的号码、发起者、系统资源(处理器与内存)使用占比、运行状态等。ps命令可帮助我们及时发现哪些进程出现“僵死”或“不可中断”等异常情况。 ps命令经常会与kill命令搭配使用,以中断和删除不必要的服务进程,避免服务器的资源浪费。
find . -name file.txt
6
ps 的参数非常多, 在此仅列出几个常用的参数并大略介绍含义
-A:列出所有的进程
-w :显示加宽可以显示较多的资讯
-au :显示较详细的资讯
-aux :显示所有包含其他使用者的进程,用标准格式输出。
-ef:与aux一样,但是是用bsd的格式输出
au(x) :输出格式 :
find . -name file.txt
7
查找指定进程格式:
find . -name file.txt
8
例如显示 PHP 的进程:
find . -name file.txt
9
显示进程信息:
find . -name "*.c"
0
显示指定用户信息
find . -name "*.c"
1
显示所有进程信息,连同命令行
find . -name "*.c"
2
uname命令来自英文词组UNIX name的缩写,其功能是查看系统主机名、内核及硬件架构等信息。如果不加任何参数,默认仅显示系统内核名称(相当于-s参数)的作用。
find . -name "*.c"
3
常用参数:
显示系统信息:
find . -name "*.c"
4
显示计算机类型:
find . -name "*.c"
5
显示计算机名:
find . -name "*.c"
6
显示操作系统发行编号:
find . -name "*.c"
7
显示操作系统名称:
find . -name "*.c"
8
显示系统版本与时间:
find . -name "*.c"
9
kill命令的功能是杀死(结束)进程。Linux系统中如需结束某个进程,既可以使用如service或systemctl这样的管理命令来结束服务,也可以使用kill命令直接结束进程信息。 如使用kill命令后进程并没有结束,则可以使用信号9进行强制杀死动作。
find . -type f
0
常用参数:
-l
:列出所有可用的信号。-<signal>
:发送特定的信号给目标进程,如 -9
表示发送 KILL 信号,即强制终止进程。终止进程:默认情况下,kill命令发送SIGTERM(信号15),这可以请求进程终止。如果进程没有捕获这个信号,它将被终止。
find . -type f
1
其中 PID 是进程的 ID。
发送指定信号:通过 -s 选项可以发送指定的信号。
find . -type f
2
例如,发送 SIGKILL(信号9)将立即结束进程,不能被忽略或捕获。
find . -type f
3
杀死进程组:使用 -9 选项可以杀死整个进程组。
find . -type f
4
使用 kill -l 命令列出所有可用信号。
最常用的信号是:
SIGKILL
(信号9):立即结束进程,不能被捕获或忽略。SIGTERM
(信号15):正常结束进程,可以被捕获或忽略。SIGSTOP
(信号19):暂停进程,不能被捕获、忽略或结束。SIGCONT
(信号18):继续执行被暂停的进程。SIGINT
(信号2):通常是Ctrl+C产生的信号,可以被进程捕获或忽略。如:
终止 PID 为 1234 的进程:
find . -type f
5
强制终止 PID 为 1234 的进程:
find . -type f
6
向 PID 为 1234 的进程发送 SIGSTOP:
find . -type f
7
显示信号
find . -type f
8
杀死指定用户所有进程:
find . -type f
9
注意事项:
kill
命令时,需要具有相应的权限,否则可能无法终止进程。Linux top 是一个在 Linux 和其他类 Unix 系统上常用的实时系统监控工具。它提供了一个动态的、交互式的实时视图,显示系统的整体性能信息以及正在运行的进程的相关信息。。
find /home -size +1M
0
参数说明:
-d <秒数>
:指定 top 命令的刷新时间间隔,单位为秒。-n <次数>
:指定 top 命令运行的次数后自动退出。-p <进程ID>
:仅显示指定进程ID的信息。-u <用户名>
:仅显示指定用户名的进程信息。-H
:在进程信息中显示线程详细信息。-i
:不显示闲置(idle)或无用的进程。-b
:以批处理(batch)模式运行,直接将结果输出到文件。-c
:显示完整的命令行而不截断。-S
:累计显示进程的 CPU 使用时间。top 命令的一些常用功能和显示信息:
第一行信息:
第二行信息:
第三行信息:
第四行信息:
第五行信息:
load average显示的是最近1分钟、5分钟和15分钟的系统平均负载。系统平均负载被定义为在特定时间间隔内运行队列中(在CPU上运行或者等待运行多少进程)的平均进程数。load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。
如果一个进程满足以下条件则其就会位于运行队列中:
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 才认为系统性能是健康的。
在 top 运行时可以使用一些按键命令进行操作如按下 "k" 可以终止一个进程,按下 "h" 可以显示帮助信息等。
显示进程信息
find /home -size +1M
1
显示完整命令
find /home -size +1M
2
以批处理模式显示程序信息
find /home -size +1M
3
以累积模式显示程序信息
find /home -size +1M
4
设置信息更新次数
find /home -size +1M
5
设置信息更新时间
find /home -size +1M
6
显示指定的进程信息
find /home -size +1M
7
显示更新十次后退出
find /home -size +1M
8
使用者将不能利用交谈式指令来对行程下命令
find /home -size +1M
9
netstat命令来自英文词组network statistics的缩写,其功能是显示各种网络相关信息,例如网络连接状态、路由表信息、接口状态、NAT、多播成员等。
netstat命令不仅应用于Linux系统,而且Windows XP、Windows 7、Windows 10及Windows 11均已默认支持,并且可用参数也相同。
find /var/log -mtime +7
0
常用参数:
系统网络状态中的所有连接信息:
find /var/log -mtime +7
1
显示当前用户UDP连接状况
find /var/log -mtime +7
2
显示UDP端口号的使用情况
find /var/log -mtime +7
3
显示网卡列表
find /var/log -mtime +7
4
显示网络路由表状态信息:
find /var/log -mtime +7
5
显示组播组的关系
find /var/log -mtime +7
6
只列出监听中的连接:任何网络服务的后台进程都会打开一个端口,用于监听接入的请求。这些正在监听的套接字也和连接的套接字一样,也能被 netstat 列出来。使用 -l 选项列出正在监听的套接字。
find /var/log -mtime +7
7
获取进程名、进程号以及用户 ID:
使用 -p 选项查看进程信息。但使用 -p 选项时,netstat 必须运行在 root 权限之下,不然它就不能得到运行在 root 权限下的进程名,而很多服务包括 http 和 ftp 都运行在 root 权限之下。
find /var/log -mtime +7
8
如果想找出特定端口(例如端口 21)的进程名称,则添加:| grep -w ':21'
ss命令用来显示处于活动状态的套接字信息。ss命令可以用来获取socket统计信息,它可以显示和 netstat 类似的内容。但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。
当服务器的socket连接数量变得非常大时,无论是使用netstat命令还是直接 cat /proc/net/tcp,执行速度都会很慢。
ss快的秘诀在于,它利用到了TCP协议栈中tcp_diag。tcp_diag是一个用于分析统计的模块,可以获得Linux 内核中第一手的信息,这就确保了ss的快捷高效。当然,如果你的系统中没有tcp_diag,ss也可以正常运行,只是效率会变得稍慢。
find /var/log -mtime +7
9
常用参数:
只显示监听的套接字
find /path/to/search -atime -7
0
不解析主机名
find /path/to/search -atime -7
1
打印进程名和进程号
find /path/to/search -atime -7
2
仅显示IPv4 或 IPv6 连接
find /path/to/search -atime -7
3
列出处在 time-wait 状态的 IPv4 套接字
find /path/to/search -atime -7
4
注意: 状态可以是以下任意一种
find /path/to/search -atime -7
5
显示所有源端口或目的端口为 ssh 的套接字
find /path/to/search -atime -7
6
显示目的端口是443或80的套接字
find /path/to/search -atime -7
7
对地址和端口过滤
find /path/to/search -atime -7
8
仅过滤端口
find /path/to/search -atime -7
9
显示对方端口号小于100的套接字
find . -ctime 20
0
显示端口号大于1024的套接字
find . -ctime 20
1
显示对方端口是 80的套接字
find . -ctime 20
2
显示TCP连接
find . -ctime 20
3
显示 Sockets 摘要
find . -ctime 20
4
列出当前的established, closed, orphaned and waiting TCP sockets
列出所有打开的网络连接端口
find . -ctime 20
5
查看进程使用的socket
find . -ctime 20
6
找出打开套接字/端口应用程序
find . -ctime 20
7
显示所有UDP Sockets 或 ss -aA udp
find . -ctime 20
8