linux shell

关注公众号 jb51net

关闭
首页 > 脚本专栏 > linux shell > linux系统常用命令

Linux系统管理常用命令介绍

作者:SevenCoder

find命令的功能是根据给定的路径和条件查找相关文件或目录,其参数灵活方便,且支持正则表达式,结合管道符后能够实现更加复杂的功能,是Linux系统运维人员必须掌握的命令之一,这篇文章主要介绍了Linux系统管理常用命令介绍,需要的朋友可以参考下

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

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

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

语法格式

find [路径] [匹配条件] [动作]

参数说明 :

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

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

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

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

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

在这些参数中,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 . -type f -perm 644 -exec ls -l {} \;

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

find / -type f -size 0 -exec ls -l {} \;

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

find /path/to/search -name "pattern" -exec rm {} \;

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

rpm命令 - RPM软件包管理器

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

语法格式

rpm 参数 软件包名

常用参数

实例

安装软件

# rpm -hvi dejagnu-1.4.2-10.noarch.rpm 
警告:dejagnu-1.4.2-10.noarch.rpm: V3 DSA 签名:NOKEY, key ID db42a60e
准备...           
########################################### [100%]

显示软件安装信息

# rpm -qi dejagnu-1.4.2-10.noarch.rpm
【第1次更新 教程、类似命令关联】

ps命令 - 显示进程状态

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

语法格式:

ps [options] [--help]

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

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME CMD

实例

查找指定进程格式:

ps -ef | grep 进程关键字

例如显示 php 的进程:

# ps -ef | grep php
root       794     1  0  2020 ?        00:00:52 php-fpm: master process (/etc/php/7.3/fpm/php-fpm.conf)
www-data   951   794  0  2020 ?        00:24:15 php-fpm: pool www
www-data   953   794  0  2020 ?        00:24:14 php-fpm: pool www
www-data   954   794  0  2020 ?        00:24:29 php-fpm: pool www
...

显示进程信息:

# ps -A 
PID TTY     TIME CMD
  1 ?    00:00:02 init
  2 ?    00:00:00 kthreadd
  3 ?    00:00:00 migration/0
  4 ?    00:00:00 ksoftirqd/0
  5 ?    00:00:00 watchdog/0
  6 ?    00:00:00 events/0
  7 ?    00:00:00 cpuset
  8 ?    00:00:00 khelper
  9 ?    00:00:00 netns
  10 ?    00:00:00 async/mgr
  11 ?    00:00:00 pm
  12 ?    00:00:00 sync_supers
  13 ?    00:00:00 bdi-default
  14 ?    00:00:00 kintegrityd/0
  15 ?    00:00:02 kblockd/0
  16 ?    00:00:00 kacpid
  17 ?    00:00:00 kacpi_notify
  18 ?    00:00:00 kacpi_hotplug
  19 ?    00:00:27 ata/0
……省略部分结果
30749 pts/0  00:00:15 gedit
30886 ?    00:01:10 qtcreator.bin
30894 ?    00:00:00 qtcreator.bin 
31160 ?    00:00:00 dhclient
31211 ?    00:00:00 aptd
31302 ?    00:00:00 sshd
31374 pts/2  00:00:00 bash
31396 pts/2  00:00:00 ps

显示指定用户信息

# ps -u root //显示root进程用户信息
 PID TTY     TIME CMD
  1 ?    00:00:02 init
  2 ?    00:00:00 kthreadd
  3 ?    00:00:00 migration/0
  4 ?    00:00:00 ksoftirqd/0
  5 ?    00:00:00 watchdog/0
  6 ?    00:00:00 events/0
  7 ?    00:00:00 cpuset
  8 ?    00:00:00 khelper
  9 ?    00:00:00 netns
  10 ?    00:00:00 async/mgr
  11 ?    00:00:00 pm
  12 ?    00:00:00 sync_supers
  13 ?    00:00:00 bdi-default
  14 ?    00:00:00 kintegrityd/0
  15 ?    00:00:02 kblockd/0
  16 ?    00:00:00 kacpid
……省略部分结果
30487 ?    00:00:06 gnome-terminal
30488 ?    00:00:00 gnome-pty-helpe
30489 pts/0  00:00:00 bash
30670 ?    00:00:00 debconf-communi 
30749 pts/0  00:00:15 gedit
30886 ?    00:01:10 qtcreator.bin
30894 ?    00:00:00 qtcreator.bin 
31160 ?    00:00:00 dhclient
31211 ?    00:00:00 aptd
31302 ?    00:00:00 sshd
31374 pts/2  00:00:00 bash
31397 pts/2  00:00:00 ps

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

# ps -ef //显示所有命令,连带命令行
UID    PID PPID C STIME TTY     TIME CMD
root     1   0 0 10:22 ?    00:00:02 /sbin/init
root     2   0 0 10:22 ?    00:00:00 [kthreadd]
root     3   2 0 10:22 ?    00:00:00 [migration/0]
root     4   2 0 10:22 ?    00:00:00 [ksoftirqd/0]
root     5   2 0 10:22 ?    00:00:00 [watchdog/0]
root     6   2 0 10:22 ?    /usr/lib/NetworkManager
……省略部分结果
root   31302 2095 0 17:42 ?    00:00:00 sshd: root@pts/2 
root   31374 31302 0 17:42 pts/2  00:00:00 -bash
root   31400   1 0 17:46 ?    00:00:00 /usr/bin/python /usr/sbin/aptd
root   31407 31374 0 17:48 pts/2  00:00:00 ps -ef

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

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

语法格式

uname [-amnrsv][--help][--version]

常用参数:

实例

显示系统信息:

uname -a
Linux iZbp19byk2t6khuqj437q6Z 4.11.0-14-generic #20~16.04.1-Ubuntu SMP Wed Aug 9 09:06:22 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

显示计算机类型:

uname -m
x86_64

显示计算机名:

uname -n
runoob-linux

显示操作系统发行编号:

uname -r
4.11.0-14-generic

显示操作系统名称:

uname -s
Linux

显示系统版本与时间:

uname -v
#20~16.04.1-Ubuntu SMP Wed Aug 9 09:06:22 UTC 2017

kill命令 - 杀死进程

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

语法格式

kill [options] <PID>

常用参数:

实例

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

kill PID

其中 PID 是进程的 ID。

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

kill -s SIGNAL PID

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

kill -9 PID

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

kill -9 -PID

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

最常用的信号是:

如:

终止 PID 为 1234 的进程:

kill 1234

强制终止 PID 为 1234 的进程:

kill -9 1234

向 PID 为 1234 的进程发送 SIGSTOP:

kill -s SIGSTOP 1234

显示信号

# kill -l
1) SIGHUP     2) SIGINT     3) SIGQUIT     4) SIGILL     5) SIGTRAP
6) SIGABRT     7) SIGBUS     8) SIGFPE     9) SIGKILL    10) SIGUSR1
11) SIGSEGV    12) SIGUSR2    13) SIGPIPE    14) SIGALRM    15) SIGTERM
16) SIGSTKFLT    17) SIGCHLD    18) SIGCONT    19) SIGSTOP    20) SIGTSTP
21) SIGTTIN    22) SIGTTOU    23) SIGURG    24) SIGXCPU    25) SIGXFSZ
26) SIGVTALRM    27) SIGPROF    28) SIGWINCH    29) SIGIO    30) SIGPWR
31) SIGSYS    34) SIGRTMIN    35) SIGRTMIN+1    36) SIGRTMIN+2    37) SIGRTMIN+3
38) SIGRTMIN+4    39) SIGRTMIN+5    40) SIGRTMIN+6    41) SIGRTMIN+7    42) SIGRTMIN+8
43) SIGRTMIN+9    44) SIGRTMIN+10    45) SIGRTMIN+11    46) SIGRTMIN+12    47) SIGRTMIN+13
48) SIGRTMIN+14    49) SIGRTMIN+15    50) SIGRTMAX-14    51) SIGRTMAX-13    52) SIGRTMAX-12
53) SIGRTMAX-11    54) SIGRTMAX-10    55) SIGRTMAX-9    56) SIGRTMAX-8    57) SIGRTMAX-7
58) SIGRTMAX-6    59) SIGRTMAX-5    60) SIGRTMAX-4    61) SIGRTMAX-3    62) SIGRTMAX-2
63) SIGRTMAX-1    64) SIGRTMAX

杀死指定用户所有进程:

kill -9 $(ps -ef | grep hnlinux) //方法一 过滤出hnlinux用户进程 
kill -u hnlinux //方法二

注意事项:

top命令 - 实时监控

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

语法格式

top [-] [d delay] [q] [c] [S] [s] [i] [n] [b]

参数说明

显示信息

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

总体系统信息

系统负载load average的含义

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" 可以显示帮助信息等。

实例

显示进程信息

top

显示完整命令

top -c

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

top -b

以累积模式显示程序信息

top -S

设置信息更新次数

top -n 2
//表示更新两次后终止更新显示

设置信息更新时间

top -d 3
//表示更新周期为3秒

显示指定的进程信息

top -p 139
//显示进程号为139的进程信息,CPU、内存占用率等

显示更新十次后退出

top -n 10

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

top -s

netstat命令 - 显示网络状态

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

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

语法格式

netstat 参数

常用参数:

实例

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

highlighter-

netstat -a

显示当前用户UDP连接状况

highlighter-

netstat -nu

显示UDP端口号的使用情况

highlighter- Markdown

# netstat -apu
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address        Foreign Address       State    PID/Program name  
udp    0   0 *:32768           *:*                   -          
udp    0   0 *:nfs            *:*                   -          
udp    0   0 *:641            *:*                   3006/rpc.statd   
udp    0   0 192.168.0.3:netbios-ns   *:*                   3537/nmbd      
udp    0   0 *:netbios-ns        *:*                   3537/nmbd      
udp    0   0 192.168.0.3:netbios-dgm   *:*                   3537/nmbd      
udp    0   0 *:netbios-dgm        *:*                   3537/nmbd      
udp    0   0 *:tftp           *:*                   3346/xinetd     
udp    0   0 *:999            *:*                   3366/rpc.rquotad  
udp    0   0 *:sunrpc          *:*                   2986/portmap    
udp    0   0 *:ipp            *:*                   6938/cupsd     
udp    0   0 *:1022           *:*                   3392/rpc.mountd   
udp    0   0 *:638            *:*                   3006/rpc.statd

显示网卡列表

highlighter- Markdown

# netstat -i
Kernel Interface table
Iface    MTU Met  RX-OK RX-ERR RX-DRP RX-OVR  TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0    1500  0  181864   0   0   0  141278   0   0   0 BMRU
lo    16436  0   3362   0   0   0   3362   0   0   0 LRU

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

# netstat -r 
Kernel IP routing table 
Destination Gateway Genmask Flags MSS Window irtt Iface 
default _gateway 0.0.0.0 UG 0 0 0 eth0 
192.168.10.0 0.0.0.0 255.255.240.0 U 0 0 0 eth0

显示组播组的关系

highlighter- SQL

# netstat -g
IPv6/IPv4 Group Memberships
Interface    RefCnt Group
--------------- ------ ---------------------
lo       1   ALL-SYSTEMS.MCAST.NET
eth0      1   ALL-SYSTEMS.MCAST.NET
lo       1   ff02::1
eth0      1   ff02::1:ff0a:b0c
eth0      1   ff02::1

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

highlighter- SQL

$ netstat -tnl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 127.0.1.1:53            0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN     
tcp6       0      0 ::1:631                 :::*                    LISTEN

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

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

highlighter- SQL

$ sudo netstat -nlpt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.1.1:53            0.0.0.0:*               LISTEN      1144/dnsmasq    
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      661/cupsd  tcp6       0      0 ::1:631                 :::*                    LISTEN      661/c

如果想找出特定端口(例如端口 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也可以正常运行,只是效率会变得稍慢。

语法格式

ss [option]

常用参数:

实例

只显示监听的套接字

ss -lnt

不解析主机名

ss -nt

打印进程名和进程号

ss -ltp

仅显示IPv4 或 IPv6 连接

ss -tl -f inet 或 ss -tl6

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

ss -t4 state time-wait

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

stablished 
yn-sent 
yn-recv 
in-wait-1 
in-wait-2 
ime-wait 
losed 
lose-wait 
ast-ack 
closing 
all – All of the above states 
connected – All the states except for listen and closed 
synchronized – All the connected states except for syn-sent 
bucket – Show states, which are maintained as minisockets, i.e. time-wait and syn-recv. 
big – Opposite to bucket state.

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

ss -at '( dport = :ssh or sport = :ssh )'

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

ss -nt '( dst :443 or dst :80 )'

对地址和端口过滤

ss -nt dst 103.245.222.184:80

仅过滤端口

ss -nt dport = :80

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

ss -nt dport \< :100

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

sudo ss -nt sport gt :1024

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

sudo ss -nt state connected dport = :80

显示TCP连接

[root@localhost ~]# ss -t -a
State       Recv-Q Send-Q                            Local Address:Port                                Peer Address:Port   
LISTEN      0      0                                             *:3306                                           *:*       
LISTEN      0      0                                             *:http                                           *:*       
LISTEN      0      0                                             *:ssh                                            *:*       
LISTEN      0      0                                     127.0.0.1:smtp                                           *:*       
ESTAB       0      0                                112.124.15.130:42071                              42.156.166.25:http    
ESTAB       0      0                                112.124.15.130:ssh                              121.229.196.235:33398

显示 Sockets 摘要

[root@localhost ~]# ss -s
Total: 172 (kernel 189)
TCP:   10 (estab 2, closed 4, orphaned 0, synrecv 0, timewait 0/0), ports 5
Transport Total     ip        IPv6
*         189       -         -        
RAW       0         0         0        
UDP       5         5         0        
TCP       6         6         0        
INET      11        11        0        
FRAG      0         0         0

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

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

[root@localhost ~]# ss -l
Recv-Q Send-Q                                 Local Address:Port                                     Peer Address:Port   
0      0                                                  *:3306                                                *:*       
0      0                                                  *:http                                                *:*       
0      0                                                  *:ssh                                                 *:*       
0      0                                          127.0.0.1:smtp                                                *:*

查看进程使用的socket

[root@localhost ~]# ss -pl
Recv-Q Send-Q                                          Local Address:Port                                              Peer Address:Port   
0      0                                                           *:3306                                                         *:*        users:(("mysqld",1718,10))
0      0                                                           *:http                                                         *:*        users:(("nginx",13312,5),("nginx",13333,5))
0      0                                                           *:ssh                                                          *:*        users:(("sshd",1379,3))
0      0                                                   127.0.0.1:smtp                                                         *:*        us

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

[root@localhost ~]# ss -pl | grep 3306
0      0                            *:3306                          *:*        users:(("mysqld",1718,10))

显示所有UDP Sockets 或 ss -aA udp

[root@localhost ~]# ss -u -a
State       Recv-Q Send-Q                                     Local Address:Port                                         Peer Address:Port   
UNCONN      0      0                                                      *:syslog                                                  *:*       
UNCONN      0      0                                         112.124.15.130:ntp                                                     *:*       
UNCONN      0      0                                            10.160.7.81:ntp                                                     *:*       
UNCONN      0      0                                              127.0.0.1:ntp                                                     *:*       
UNCONN      0      0                                                      *:ntp

到此这篇关于Linux系统管理常用命令介绍的文章就介绍到这了,更多相关linux系统常用命令内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文