Skip to content

更多命令

Linux的系统管理命令

检测程序

跟踪运行在系统中的程序

探测进程

程序运行在系统之上的时候被称为进程

bash
ps
    PID TTY          TIME CMD
   2753 pts/0    00:00:00 bash
   4496 pts/0    00:00:00 ps

输出系统上所有程序的许多信息, 默认情况下没有那么多的信息, 控制台下属于当前用户的进程

显示了程序进程的ID, 运行的终端: TTY, 已经用的CPU时间

Linux中的GUN ps支持三种不同类型的命令分行参数

  • Unix风格 加单破折线
  • BSD风格 不加破折线
  • GUN风格 双破折线

Unix风格

原有的Unix系统上继承而来的

常用:

-ef: 显示所有的进程

bash
UID          PID    PPID  C STIME TTY          TIME CMD
root           1       0  0 12:22 ?        00:00:01 /sbin/init splash
  • UID:启动这些进程的用户。
  • PID:进程的进程ID。
  • PPID:父进程的进程号(如果该进程是由另一个进程启动的)。
  • C:进程生命周期中的CPU利用率。
  • STIME:进程启动时的系统时间。
  • TTY:进程启动时的终端设备。
  • TIME:运行进程需要的累计CPU时间。
  • CMD:启动的程序名称

-l: 获得更多

bash
F S   UID     PID    PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
0 S  1000    2753    2727  0  80   0 -  3713 do_wai pts/0    00:00:00 bash
  • F:内核分配给进程的系统标记。
  • S:进程的状态(O代表正在运行;S代表在休眠;R代表可运行,正等待运行;Z代表僵化,进程已结束但父进程已不存在;T代表停止)。
  • PRI:进程的优先级(越大的数字代表越低的优先级)。
  • NI:谦让度值用来参与决定优先级。
  • ADDR:进程的内存地址。
  • SZ:假如进程被换出,所需交换空间的大致大小。
  • WCHAN:进程休眠的内核函数的地址。

BSD风格

大部分的和Unix的是重合的, 但是在使用的时候会使用不同的格式输出

bash
$ ps l
F   UID     PID    PPID PRI  NI    VSZ   RSS WCHAN  STAT TTY        TIME COMMAND
4  1000    1088     988  20   0 165480  6104 do_pol Ssl+ tty2       0:00 /usr/libexec/gdm-wayland-sessi
  • VSZ:进程在内存中的大小,以千字节(KB)为单位。
  • RSS:进程在未换出时占用的物理内存。
  • STAT:代表当前进程状态的双字符状态码。可以比Unix的单字节码更加仔细的显示进程的状态,

第一字节和Unix的一样

  • O代表正在运行;
  • S代表在休眠;
  • R代表可运行,正等待运行;
  • Z代表僵化,进程已结束但父进程已不存在;
  • T代表停止

第二字节进一步说明进程的状态

  • <:该进程运行在高优先级上。
  • N:该进程运行在低优先级上。
  • L:该进程有页面锁定在内存中。
  • s:该进程是控制进程。
  • l:该进程是多线程的。
  • +:该进程运行在前台。

GUN长参数

bash
ps --forest
1981 ?        00:00:00 sshd 
3078 ?        00:00:00  \_ sshd 
3080 ?        00:00:00      \_ sshd 
3081 pts/0    00:00:00          \_ bash 
16676 pts/0    00:00:00              \_ ps

显示进程之间的层级关系

检测实时进程

ps检测的进程是瞬时的

bash
$ top
top - 17:21:22 up  4:58,  1 user,  load average: 0.00, 0.00, 0.00
任务: 295 total,   1 running, 294 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.3 us,  0.3 sy,  0.0 ni, 99.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   3889.2 total,    733.1 free,   1354.1 used,   1802.0 buff/cache
MiB Swap:    923.2 total,    923.2 free,      0.0 used.   2253.2 avail Mem 

 进程号 USER      PR  NI    VIRT    RES    SHR    %CPU  %MEM     TIME+ COMMAND                                                      
   1186 jiao      20   0 4194532 308732 131592 S   0.7   7.8   0:40.73 gnome-shell                                                  
   1490 jiao      20   0  290508  38508  29908 S   0.3   1.0   0:16.65 vmtoolsd                                                     
   2727 jiao      20   0  650708  70520  54540 S   0.3   1.8   0:07.45 gnome-terminal-                                              
      1 root      20   0  166048  12312   7668 S   0.0   0.3   0:01.80 systemd                                                      
      2 root      20   0       0      0      0 S   0.0   0.0   0:00.02 kthreadd

输出的第一部分显示的是系统的概况:第一行显示了当前时间、系统的运行时间、登录的用户数以及系统的平均负载, 平均负载有三个值, 一分钟, 五分钟, 十五分钟

第二行显示了进程概要信息——top命令的输出中将进程叫作任务(task):有多少进程处在运行、休眠、停止或是僵化状态(僵化状态是指进程完成了,但父进程没有响应)。

下一行显示了CPU的概要信息。top根据进程的属主(用户还是系统)和进程的状态(运行、空闲还是等待)将CPU利用率分成几类输出。

紧跟其后的两行说明了系统内存的状态。第一行说的是系统的物理内存:总共有多少内存,当前用了多少,还有多少空闲。后一行说的是同样的信息,不过是针对系统交换空间(如果分配了的话)的状态而言的。

最后一部分显示了当前运行中的进程的详细列表,有些列跟ps命令的输出类似。

  • PID:进程的ID。
  • USER:进程属主的名字。
  • PR:进程的优先级。
  • NI:进程的谦让度值。
  • VIRT:进程占用的虚拟内存总量。
  • RES:进程占用的物理内存总量。
  • SHR:进程和其他进程共享的内存总量。
  • S:进程的状态(D代表可中断的休眠状态,R代表在运行状态,S代表休眠状态,T代表跟踪状态或停止状态,Z代表僵化状态)。
  • %CPU:进程使用的CPU时间比例。
  • %MEM:进程使用的内存占可用内存的比例
  • TIME+:自进程启动到目前为止的CPU时间总量。
  • COMMAND:进程所对应的命令行名称,也就是启动的程序名。

结束进程

在Linux之中进程之间通过信号来通讯, 信号就是事先预定好的一个消息, 进程来进行处理, 大多数完善的程序都可以处理标准的Unix信号

信号名称描述
1HUP挂起
2INT中断
3QUIT结束运行
9KILL无条件终止
11SEGV段错误
15TERM尽可能终止
17STOP无条件停止运行, 但是不终止
18TSTP停止或暂停, 但在后台运行
19CONT在STOP和TSTP之后恢复运行

kill命令

可以通过进程ID给进程发送信号, 默认为TERM

要发送你必须是进程的属主或者root用户

-s: 支持其他信号

killall命令

支持通过进程名来结束, 也支持通配符

**注:**root用户使用通配符的时候要小心

检测磁盘空间

挂载存储媒体

Linux文件系统将所有的磁盘都并入一个虚拟目录下。在使用新的存储媒体之前,需要把它放到虚拟目录下。这项工作称为挂载

大多数的多支持自动挂载特定类型的可移动存储媒体

mount命令

默认情况下会输出当前挂载的设备

bash
jiao@jiao-virtual-machine:~/桌面/linux-shell/3$ mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)

提示信息:

  • 媒体的设备文件名
  • 媒体挂载到虚拟目录的挂载点
  • 文件系统类型
  • 已挂载媒体的访问状态

挂载命令

bash
mount -t type device directory

管理员权限

type: 格式化的文件系统类型

  • vfat:Windows长文件系统, 大部分的U盘和软盘
  • ntfs:Windows NT、XP、Vista以及Windows 7中广泛使用的高级文件系统。
  • iso9660:标准CD-ROM文件系统。

mount -t vfat /dev/sdb1 /media/disk: 把U盘/dev/sdb1挂载到/media/disk

常用命令

参数描述
-a挂载/etc/fstab文件中指定的所有文件系统
-f使mount命令模拟挂载设备,但并不真的挂载
-F和-a参数一起使用时,会同时挂载所有文件系统
-v详细模式,将会说明挂载设备的每一步
-I(大写的i)不启用任何/sbin/mount.filesystem下的文件系统帮助文件
-l(小写的L)给ext2、ext3或XFS文件系统自动添加文件系统标签
-n挂载设备,但不注册到/etc/mtab已挂载设备文件中
-p num进行加密挂载时,从文件描述符num中获得密码短语
-s忽略该文件系统不支持的挂载选项
-r将设备挂载为只读的
-w将设备挂载为可读写的(默认参数)
-L label将设备按指定的label挂载
-U uuid将设备按指定的uuid挂载
-O和-a参数一起使用,限制命令只作用到特定的一组文件系统上
-o给文件系统添加特定的选项

-o参数允许在挂载文件系统时添加一些以逗号分隔的额外选项。以下为常用的选项。

  • ro:以只读形式挂载。
  • rw:以读写形式挂载。
  • user:允许普通用户挂载文件系统。
  • check=none:挂载文件系统时不进行完整性校验。
  • loop:挂载一个文件。

umount

从Linux上删除一个设备, 不能直接从系统上移除, 应该先卸载

bash
umount [directory | device ]

umount命令支持通过设备文件或者是挂载点来指定要卸载的设备。如果有任何程序正在使用设备上的文件,系统就不会允许你卸载它

可以使用lsof命令查看谁在使用: lsof /path/to/device/node lsof /path/to/mount/point

df命令

检查设备还有多少磁盘空间

bash
jiao@jiao-virtual-machine:~/桌面/linux-shell/3$ df
文件系统          1K-块     已用    可用 已用% 挂载点
tmpfs            398260     2036  396224    1% /run
/dev/sda3      19946096 16341272 2566284   87% /
tmpfs           1991288        0 1991288    0% /dev/shm
tmpfs              5120        4    5116    1% /run/lock
  • 设备的设备文件位置;
  • 能容纳多少个1024字节大小的块;
  • 已用了多少个1024字节大小的块;
  • 还有多少个1024字节大小的块可用;
  • 已用空间所占的比例;
  • 设备挂载到了哪个挂载点上。

常用的参数

-h: 使用用户便于理解的方式显示

du命令

发现存储的空间快要使用完了, 可以使用du命令来查看某一个特定的目录, 默认情况下是当前目录

bash
jiao@jiao-virtual-machine:~/桌面/linux-shell$ du
4	./3/abb
20	./3
8	./1
32	.

左侧的是文件或者目录占用的目录的磁盘块数, 这个列表是从目录底层开始, 然后按文件, 子目录, 目录逐级向上

-c: 显示已经列出的文件的总大小

-h: 用户易读的格式输出

-s: 只显示每个输出参数总计

--max-depth=: 设置计算文件的层数

处理数据文件

排序数据

处理大量数据的时候, 使用sort, 按照默认的语言排序规则对文本文件进行排序

一般情况会把数字当做字符进行排序

-n: 把数字识别为数字而不是字符串

-M: 按照月份排序

单破折号双破折号描述
-b--ignore-leading-blanks排序时忽略起始的空白
-C--check=quiet不排序,如果数据无序也不要报告
-c--check不排序,但检查输入数据是不是已排序;未排序的话,报告
-d--dictionary-order仅考虑空白和字母,不考虑特殊字符
-f--ignore-case默认情况下,会将大写字母排在前面;这个参数会忽略大小写
-g--general-number-sort按通用数值来排序(跟-n不同,把值当浮点数来排序,支持科学计数法表示的值)
-i--ignore-nonprinting在排序时忽略不可打印字符
-k--key=POS1[,POS2]排序从POS1位置开始;如果指定了POS2的话,到POS2位置结束
-M--month-sort用三字符月份名按月份排序
-m--merge将两个已排序数据文件合并
-n--numeric-sort按字符串数值来排序(并不转换为浮点数)
-o--output=file将排序结果写出到指定的文件中
-R--random-sort 或-random-source=FILE按随机生成的散列表的键值排序
-r--reverse反序排序(升序变成降序)
-S--buffer-size=SIZE指定使用的内存大小
-s--stable禁用最后重排序比较
-T--temporary-directory=DIR指定一个位置来存储临时工作文件
-t--field-separator=SEP指定一个用来区分键位置的字符
-u--unique和-c参数一起使用时,检查严格排序;不和-c参数一起用时,仅输出第一例相似的两行
-z--zero-terminated用NULL字符作为行尾,而不是用换行符

-t 和 -k: 对字段进行分割然后排序

sort -t ':' -k 3 -n /etc/passwd

按照:进行分割, 对第三项进行排列

-r: 降序排列

du -sh * | sort -nr

认为大写字母大于小写字母

搜索数据

bash
grep [options] pattern [file]

在指定的文件中查找, 返回的是包含传入的字符串的行

-v: 反向输入

-n: 显示行号

-c: 输出有多少各行包括有

-e: 指定多个匹配grep -e t -e f file1

可以使用正则表达式

  • egrep支持POSIX扩展的正则表达式
  • fgrep支持将匹配模式指定为用换行符分隔的一列固定长度的字符串。这样就可以把这列字符串放到一个文件中,然后在fgrep命令中用其在一个大型文件中搜索字符串了

压缩数据

Linux集成了多种压缩工具

工具文件扩展名描述
bzip2.bz2采用Burrows-Wheeler块排序文本压缩算法和霍夫曼编码
compress.Z最初的Unix文件压缩工具,已经快没人用了
gzip.gzGNU压缩工具,用Lempel-Ziv编码
zip.zipWindows上PKZIP工具的Unix实现

compress文件压缩工具已经很少在Linux系统上看到了。如果下载了带.Z扩展名的文件,通常可以用第9章中介绍的软件包安装方法来安装compress包(在很多Linux发行版上叫作ncompress), 再用uncompress命令来解压文件

gzip是Linux上最流行的压缩工具

  • gzip: 压缩文件
  • gzcat:查看压缩过的文本文件
  • gunzip: 解压
bash
gzip 文件名

最文件进行压缩, 可以使用通配符批量操作, 但是只能处理单个文件

归档数据

最常用的归档工具是tar

bash
tar function [options] object1 object2 ...

function: 定义了tar命令应该做什么

功能长名称描述
-A--concatenate将一个已有tar归档文件追加到另一个已有tar归档文件
-c--create创建一个新的tar归档文件
-d--diff检查归档文件和文件系统的不同之处
-r--append从已有tar归档文件中删除
-t--list追加文件到已有tar归档文件末尾
-u--update列出已有tar归档文件的内容
-x--extract将tar归档文件中已有的同名文件新的文件追加到该tar归档文件中
--delete从已有tar归档文件中提取文件

命令选项;

选项描述
-C dir切换到指定目录
-f file输出结果到文件或设备file
-j将输出重定向给bzip2命令来压缩内容
-p保留所有文件权限
-v在处理文件时显示文件
-z将输出重定向给gzip命令来压缩内容

tar -cvf test.tar test/ test2/创建了名为test.tar的归档文件,含有test和test2目录内容

tar -tf test.tar列出tar文件test.tar的内容

tar -xvf test.tar通过这一命令从tar文件test.tar中提取内容

下载了开源软件之后,你会经常看到文件名以.tgz结尾。这些是gzip压缩过的tar文件可以用命令tar -zxvf filename.tgz来解压

xargs命令

会把管道输入的参数作为函数的参数来使用, kill和rm等命令不可以使用管道直接输入可以使用这个命令

-d: 设置分隔符

-p: 输出是否要立即执行的提示

-n: 每次传递的个数