本文最后更新于 2023-09-19,文章内容可能已经过时。

第 5 章 常用基本命令(重要)

Shell 可以看作是一个命令解释器,为我们提供了交互式的文本控制台界面。我们可以通过终端控制台来输入命令,由 shell 进行解释并最终交给内核执行。 本章就将分类介绍常用的基本 shell 命令。

5.1 帮助命令

5.1.1 man(manual手册) 获得帮助信息

1)基本语法

man [命令或配置文件] (功能描述:获得帮助信息)

2)显示说明

17

5.1.2 help 获得 shell 内置命令的帮助信息

一部分基础功能的系统命令是直接内嵌在 shell 中的,系统加载启动之后会随着 shell一起加载,常驻系统内存中。这部分命令被称为“内置(built-in)命令”,如cd,exit;相应的其它命令被称为“外部命令”。

1)基本语法

help 命令(功能描述:获得 shell 内置命令的帮助信息)

想要获得外部命令的参数说明版,man内嵌了一个方法,即通过: xxx(命令名称+空格)–help 查询

5.1.3 常用快捷键

快捷键 作用
Ctrl + s 作用是暂停终端的输出,如果您想恢复已暂停的输出,则需要按下Ctrl + Q
Ctrl + c 停止进程
ctrl + l 清屏 彻底清屏 : reset
tab 补全/提示
上下 查看执行过的命令

可以使用 type + 想要查看类型的命令,查看当前查看命令是内置命令还是外置命令。

reset命令将完全刷新终端屏幕,之前的终端输入操作信息将都会被清空。

这样虽然比较清爽,但整个命令过程速度有点慢,使用较少。

reset命令在终端控制错乱时非常有用。如果屏幕字符显示卡住了,此时就需要用reset命令了。

5.2 文件目录类

5.2.1 pwd 显示当前工作目录的绝对路径

pwd: print working directory 打印工作目录

1)基本语法

pwd (功能描述:显示当前工作目录的绝对路径)

pwd -P 显示软连接实际路径

5.2.2 ls 列出目录的内容

ls:list 列出目录内容

1)基本语法

ls [选项] [目录或是文件]

2)选项说明

选项 功能
-a 全部的文件,连同 . 开头的隐藏文件也显示
-l 长数据串联列出,可以把权限和文件类型等信息一并输出
-h 人性化输出 如文件以 kb 大小显示 默认字节

每行列出的信息依次是: 文件类型与权限 链接数 文件属主 文件属组 文件大小用byte 来表示 建立或最近修改的时间 名字

5.2.3 cd 切换目录

cd:Change Directory 切换路径

1)基本语法

cd [参数]

2)参数说明

参数 功能
cd 绝对路径 切换路径
cd 相对路径 切换路径
cd ~ 或 dd 回到自己的家目录
cd - 回到上一次目录
cd … 返回上一层级
cd -P 跳转实际物理路径 并非快捷路径

5.2.4 mkdir 创建一个新的目录

mkdir:Make directory 建立目录

1)基本语法

mkdir [选项] 要创建的目录

2)选项说明

选项 作用
-P 递归创建多层父级【如果不存在】

5.2.5 rmdir 删除一个空的目录

rmdir:Remove directory 移除目录

1)基本语法

rmdir 要删除的空目录

5.2.6 touch 创建空文件

1)基本语法

touch 文件名称 这里的文件如果不人为指定后缀,默认是文本文件,和vim文件不同的是,touch可以创建空文件。vim如果创建文件不书写内容,不会创建空文件,如果保存并退出就行。

5.2.7 cp 复制文件或目录

1)基本语法

cp [选项] source dest

(功能描述:复制 source 文件到 dest

2)选项说明

选项 作用
-r 递归复制子目录

5.2.8 rm 删除文件或目录

1)基本语法

rm [选项] deleteFile

(功能描述:递归删除目录中所有内容)

2)选项说明

选项 作用
-r 递归删除子目录
-f 强制执行,无需同意
-v 显示详细过程

5.2.9 mv 移动文件与目录或重命名

1)基本语法

(1)mv oldNameFile newNameFile

(功能描述:重命名)

(2)mv /temp/movefile /targetFolder

(功能描述:移动文件)

5.2.10 cat 查看文件内容 (concatenate and print files)

查看文件内容,从第一行开始显示。

1)基本语法

cat [选项] 要查看的文件

2)选项说明

选项 作用
-n 显示所有行的行号,包括空行

5.2.11 more 文件内容分屏查看器

more 指令是一个基于 VI 编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件的内容。more 指令中内置了若干快捷键,详见操作说明。

1)基本语法

more 要查看的文件

2)操作说明

操作 作用
space 【空格】 向下翻一页
Enter 向下翻一行
q 退出
ctrl + f 向下翻一屏
ctrl + b 向上翻一屏
= 输出当前行行号
:f 输出文件名和当前行行号

5.2.12 less 分屏显示文件内容

less 指令用来分屏查看文件内容,它的功能与 more 指令类似,但是比 more 指令更加强大,支持各种显示终端。less 指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示需要加载内容,对于显示大型文件具有较高的效率。

1)基本语法

less 要查看的文件

2)操作说明

操作 作用
space 【空格】 向下翻一页
[pagedown] 向下翻一页
[pageup] 向上翻一页
/字符串 向下搜索. n: 下一个,N: 上一个
?字符串 向上搜索. n: 下一个,N: 上一个
q 退出

5.2.13 echo

echo 输出内容到控制台

1)基本语法

echo [选项] [输出内容]

选项:

-e: (escape character)支持反斜线控制的字符转换

控制字符 作用
\\ 输出\本身
\n 换行符
\t 制表符

5.2.14 head 显示文件头部内容

默认前十行

想指定行数字如5行:

head -n 5

5.2.15 tail 输出文件尾部内容

默认后十行

想指定行数字如5行:

tail -n 5

想要监视文件变化【末尾】

参数 -f : 举例

tail -f test.txt

若复写,可以复写,检测的控制台会报错。此时如果使用vim进行修改,追踪不会更新,因为文件在硬盘文件其实在底层是以一个带有index的结点进行记录的,就是inode,我们可以使用 ls -i 查看当前文件的索引号。而追踪的命令其实是根据index进行追踪,使用vim进行更改,会发现index变了。自然追踪也出现了问题。vim本质是先写到.swp文件里面,然后进行替换索引的,所以索引号发生了变化。

按 ctrl + s:可以暂停显示追踪(但其实还是后台记录了更新)

按 ctrl + q:可以继续显示追踪

按 ctrl + c:可以退出进程

5.2.16 > 输出重定向和 >> 追加

1)基本语法

(1)ls -l > 文件

功能描述:列表的内容写入文件 a.txt 中(覆盖写)

(2)ls -al >> 文件

功能描述:列表的内容写入文件 a.txt 中(追加)

(3)cat 文件1 > 文件2

功能描述:列表的内容写入 文件2 中(覆盖写)

(4)echo “xxxxxx” >> 文件

功能描述:列表的内容写入文件中(追加写)

5.2.17 ln 软链接

使用链接,文件类型是l,正常文件是 -,而文件夹是d

18

不加 -s 相当于硬链接,删除链接文件对目标文件在磁盘的存储无影响。软连接就是一个文件指向,软链接类似于链表的一个节点,硬链接类似于一个指针。

加上 -s 相当于软链接,新建一个新的inode,指向目标结点,记录标记文件的地址。

一个文件当所有的硬链接数为0,此时没有能指向物理磁盘的文件,才会真正删除,在此之前哪怕删除源文件,还可以通过未删除的硬链接访问到这个文件。

新建一个目录后,目录本身是指向自身inode的一个硬链接,新建的目录内也有一个叫“.”的硬链接指向新建的目录,所以新建目录的硬链接数目是2

5.2.18 history 查看已经执行过历史命令

**history [数字] :**显示指定数目的行数

![数字] :重复执行指定行数的命令

history -c:清除所有历史

5.3 时间日期类

5.3.1 date 显示当前时间

加号是需要打出来的,不是连接符号

date +%s : 把当前日期以时间戳形式显示

5.3.2 date 显示非当前时间

显示前一天

date -d '1 day ago'

显示明天

date -d '-1 day ago'

5.3.3 date 设置系统时间

date -s 字符串时间

5.3.4 cal 查看日历

cal [选项] 不加选项显示本年,加了填对应年份

5.4 用户管理命令

5.4.1 useradd 添加新用户

添加一个新用户

useradd 用户名

添加新用户到一个已知组

useradd -g 组名 用户名

-M 不为用户设置家目录,一般用于创建系统用户

-d [/home/xxx (用户名)] 新建用户但是给它的家目录改名,用户名不变。而如果使用有root权限的用户修改家目录的名称,本质上登录会显示找不到自己的家目录,然后跳转到home目录,并没有达到改变该用户的家目录的效果

5.4.2 passwd 设置用户密码

1)基本语法

passwd 用户名

(功能描述:设置用户密码)

5.4.3 id 查看用户是否存在

1)基本语法

id 用户名

5.4.4 cat /etc/passwd 查看创建了哪些用户

5.4.5 su 切换用户

其实这里su切换用户是嵌套会话,我们可以通过exit退出,返回之前的用户,不需要再su切换回去。

su = switch user

切换用户只能获取执行权限,获取不了环境变量

su 用户名

切换用户只能获取执行权限,获取环境变量

su - 用户名

5.4.6 userdel 删除用户

删除用户但是保留家目录

userdel 用户名

删除用户不保留家目录,同时会把这个用户相关的文件都删除

userdel -r 用户名

5.4.7 who 查看登录用户信息

显示自身用户名称

whoami

同时显示登录时间

who am i

5.4.8 sudo 设置普通用户具有 root 权限

sudo的英文全称是super user do,即以超级用户(root 用户)的方式执行命令。

想要增加 sudo 用户,可以 修改 /etc/sudoers 文件,在已有用户下面添加相同格式的配置

root ALL=(ALL) ALL
fanxy ALL=(ALL) ALL

如果配置使用 sudo 不需要输密码

root ALL=(ALL) ALL
fanxy ALL=(ALL) NOPASSWD:ALL

5.4.9 usermod 修改用户

1)基本语法

usermod -g 用户组 用户名

必须给定存在的组,默认组 id 1

5.5 用户组管理命令

每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同 Linux 系统对用户组的规定有所不同, 如Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。

用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对 /etc/group 文件的更新。

5.5.1 groupadd 新增组

groupadd 组名

5.5.2 groupdel 删除组

groupdel 组名

5.5.3 groupmod 修改组

groupmod -n 新组名 老组名

5.5.4 cat /etc/group 查看创建了哪些组

5.6 文件权限类

5.6.1 文件属性

Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。

为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。在Linux中我们可以使用ll或者ls -l命令来显示一个文件的属性以及文件所属的用户和组。

c字符文件,b块文件,l链接文件。

rwx 对于文件和文件夹的不同含义

  1. 文件:

    r:文件可读。

    w:文件可写,可修改,但不代表科删除,删除一个文件需要对文件所在目录的写权限

    x:文件可执行

  2. 文件夹:

    r:文件夹可以读取 : ls

    w:文件夹可以修改,即目录内可以 新建,删除,重命名内部的文件或文件夹

    x:文件夹可被进入

22

新建一个目录后,目录本身是指向自身inode的一个硬链接,新建的目录内也有一个叫“.”的硬链接指向新建的目录,所以新建目录的硬链接数目是2

5.6.2 chmod 改变权限

23

5.6.3 chown 改变所有者

改变文件或用户的所有者 【括号只代表占位符属性,不需要打】

chown [选项] [最终用户] [文件或目录]
选项 作用
-R 递归进行【子目录】

5.6.4 chgrp 改变所属组

改变文件或目录的所属组 【括号只代表占位符属性,不需要打】

chown [最终用户组] [文件或目录]

5.7 搜索查找类

5.7.1 find 查找文件或者目录

递归的从指定目录进行搜索,把满足条件的文件显示在终端【括号只代表占位符属性,不需要打】

find [搜索范围] [选项]
选项 作用
-name 按文件名查询
-user 按所属用户查询
-size 按文件大小查询:单位为:【b 块 512子节】【c 子节】【w 词 2子节】【k 千子节】【M 兆字节】【G 吉子节】

5.7.2 locate 快速定位文件路径

最好每次查询之前要更新一下!

locate指令利用事先建立的系统中所有文件名称及路径的locate数据库实现快速定位给定的文件。Locate指令无需遍历整个文件系统,查询速度较快。为了保证查询结果的准确度,管理员必须定期更新locate时刻。

更新方法

updatedb

类似的也可以通过

which命令 + 命令查别名和位置

where is 命令 可以查位置

5.7.3 grep 过滤查找及 “|” 管道符

“|” 管道符,代表上一个命令的输出结果传递给下一个命令

选项 效果
-i 忽略大小写
-m 最大匹配个数
-n 显示匹配行以及行号

5.8 压缩和解压类

5.8.1 gzip/gunzip 压缩

1)功能描述:压缩文件,只能将文件压缩为*.gz文件

gzip 文件 

2)经验技巧

  1. 只能压缩文件不能压缩目录
  2. 不保留原来的文件
  3. 同时多个文件会产生多个压缩包

5.8.2 zip/unzip 压缩

1)基本语法

压缩(功能描述:压缩文件和目录的命令)

zip [选项] XXX.zip 
选项 效果
-r 忽略大小写

解压缩

unzip [选项] XXX.zip
选项 效果
-d 指定解压后的存放目录

5.8.3 tar 打包【重要】

一般就是

压缩:

tar -zcvf xxxx xxxx xxxx xxxx

解压【指定目录,可以不指定,去除 -C 后面的】:

tar -zxvf -C /xxx/xxx/

打包目录,压缩后的格式 .tar.gz

tar [选项] XXX.tar.gz 将要打包进去的内容
选项 效果
-z 调用gzip,-z打包同时压缩
-x 解包 .tar 文件
-c 产生 .tar 打包文件
-v 显示详细信息
-f 指定压缩后的文件名
-C 指定解压目录

5.9 磁盘查看和分区类

5.9.1 du 查看文件和目录占用的磁盘空间

disk(磁盘) 一般都不会打具体文件,我们使用ls的衍生命令,或者ll就可以了。

而直接使用,或者使用 -a(显示的更多),显示的太冗余,我们只关心具体占用,就用-s(只显示总和)。但是这么操作显示又太少,就用最后的 : du --max-depth=n(这里填1效果很好),可以选择显示层级

25

5.9.2 df 查看磁盘空间使用情况

df : disk free 磁盘空余

选项 作用
-h 以人类易读的 GBytes KBytes 等显示

free -h :通过命令 free,可以查看当前内存占用情况

5.9.3 lsblk 查看设备挂载情况

lsblk 查看设备挂载情况

选项 作用
-f 查看详细挂载信息,显示文件系统信息

26

MAJ:MIN : 显示设备的主要和次要设备号,MAJ(major number)表示不同的设备类型,MIN(minor number)表示同一个设备的的不同分区。

RM : 显示设备是否可移动。请注意,在此示例中,设备sr0的RM值等于1,表示它是可移动的。

SIZE : 提供有关设容量的信息。

RO : 显示设备是否为只读。在这种情况下,所有设备的RO均为RO = 0,表示它们不是只读的。

TYPE : 显示块设备是磁盘还是磁盘中的分区(部分)的信息。在此示例中,sda和sdb是磁盘,而sr0是只读存储器(rom)。

MOUNTPOINT : 显示设备的挂载点。

sr0其实指的是光驱。硬盘以前有IDE硬盘,但是现在已经不常用了,而常用的是SATA硬盘,还有SCSI小型计算机接口硬盘,服务器一般用的这个。像vda,就是虚拟硬盘。

5.9.4 mount/umount 挂载/卸载

对于Linux用户来讲,不论有几个分区,分别分给哪一个目录使用,它总归就是一个根目录、一个独立且唯一的文件结构。

Linux中每个分区都是用来组成整个文件系统的一部分,它在用一种叫做“挂载”的处理方法,它整个文件系统中包含了一整套的文件和目录,并将一个分区和一个目录联系起来,要载入的那个分区将使它的存储空间在这个目录下获得。

这部分 CSDN 部分我有详细笔记,日后如果有需要单独记录

5.9.5 fdisk 分区

1)基本语法

fdisk -l (功能描述:查看磁盘分区详情)

fdisk 硬盘设备名 (功能描述:对新增硬盘进行分区操作)

这部分 CSDN 部分我有详细笔记,日后如果有需要单独记录

5.10 进程管理类

进程是正在执行的一个程序或命令,每一个进程都是一个运行的实体,都有自己的地址空间,并占用一定的系统资源

5.10.1 ps 查看当前系统进程状态

这种加 - 的选项,就是 类unix格式,而不加的是 类bsd格式

a的意思重在所有用户,x重在所有进程,二者结合用就是所有用户的所有进程

加了 a 或者是下面的 -e 会把和用户无关的也展示,如果仅仅是当前用户的,可以省略。什么都不加只会显示和当前终端相关的进程。

ps = process status 进程状态

1. 基本用法

查看系统所有进程

ps aux | grep xxx

查看系统所有进程,可以查看父子进程的关系

ps -ef | grep xxx
选项 作用
a 列出待用终端所有用户进程
x 列出当前用户所有进程,包括没用终端的进程
u 面向用户友好显示风格
-e 列出所有进程
-u 列出某个用户关联的所有进程
-f 显示完整格式的进程列表

2. 详细信息说明

ps aux 说明

信息 解释
USER 所属用户
PID 进程的 ID 号
%CPU CPU占比 越高越耗费资源
%MEM 内存占比 越高越耗费资源
VSZ 该进程占用虚拟内存的大小 单位 KB
RSS 该进程占用实际内存的大小 单位 KB
TTY 该进程在哪个终端运行 CentOS 来说: tty1 是图形化端。tty2~tty6 是本地字符界面终端。 pts/0-255 是虚拟终端
STAT 进程状态。【R:运行状态】【S:睡眠状态】【T:暂停状态】【Z:僵尸状态】【s:包含子进程】【l:多线程】【+:前台显示】
START 进程启动时间
TIME 进程占用 CPU 时间,不是系统时间
COMMAND 产生这个进程的命令和参数

ps -ef 说明

信息 解释
UID 用户的 ID 号
PID 进程的 ID 号
PPID 父进程的 ID 号
C CPU 用于计算执行优先级的因子,数值越大,表明进程是 CPU密集型计算 ,执行优先度会降低;越小证明是 IO密集型计算 ,执行优先度会高
TTY 该进程在哪个终端运行 CentOS 来说: tty1 是图形化端。tty2~tty6 是本地字符界面终端。 pts/0-255 是虚拟终端
STAT 进程状态。【R:运行状态】【S:睡眠状态】【T:暂停状态】【Z:僵尸状态】【s:包含子进程】【l:多线程】【+:前台显示】
TIME 进程占用 CPU 时间,不是系统时间
CMD 产生这个进程的命令和参数

如果想查看进程的 CPU占用率和内存占用率,可以使用 aux

如果想查看 进程的父进程ID 可以使用 ef

5.10.2 kill 终止进程

可以通过 kill -l 查看各种kill信号代表的含义

kill [选项]进程号(功能描述:通过进程号杀死进程)

killall 进程名称 (功能描述:通过进程名称杀死进程,也支持通配符,这在系统因负载过大而变得很慢时很有用)

选项 解释
-9 强迫停止 杀死进程

5.10.3 pstree 查看进程树

pstree [选项]

选项 解释
-p 显示进程的PID
-u 显示所属用户

5.10.4 top 实时监控系统进程状态

top [选项]

选项 解释
-d 秒数 指定每多少秒刷新一次,默认 3秒
-i 不显示闲置和僵尸进程。只要刷新时段内用过CPU的进程,都会显示,但这些进程可能在刷新时点又睡了
-p 通过指定监控进程 ID 来只监控一个指定 ID 的进程状态

操作按钮

操作 作用
P 以 CPU使用率 进行排序
M 以 内存使用率 进行排序
N 以 PID 进行排序
q 退出

查询字段解释

第一行:任务队列信息

内容 说明
00:16:30 系统时间
up 5 day, 10:10 系统运行时间
2 users 目前系统登录两个用户
load average: 0.32,0.35,0.24 系统在之前 1 分钟,5 分钟,15 分钟的平均负载。一般认为小于 1 时,负载较小。如果大于 1 ,系统已经超出负载

第二行:进程信息

内容 说明
Tasks: 114 total 系统进程数目
1 running 正在运行的进程数
116 sleeping 睡眠的进程数
0 stopped 正在停止的进程数目
0 zombie 僵尸进程数目

27

第三行: CPU 信息

内容 说明
%Cpu(s) 2.2 us 用户模式占用的 CPU 百分比
2.3 sy 系统模式占用的 CPU 百分比
0.0 ni 改变过优先级的用户进程占用 CPU 百分比
95.2 id 空闲 CPU 的 CPU 百分比
0.3 wa 等待输入/输出的进程的占用 CPU 百分比
0.0 hi 硬中断请求服务占用 CPU 百分比
0.0 si 软中断请求服务占用 CPU 百分比
0.0 st st【Steal time】虚拟时间百分比,就是当拥有虚拟机的时候,虚拟 CPU 等待实际 CPU 的时间百分比

第四行:行为物理内存信息

内容 说明
KiB Mem : 3782696 total 物理内存的总量 单位 KB

剩下的字面意思能看懂。分别为 空闲,使用中,缓存。

第五行:交换分区(swap)信息

同第四行的格式。

5.10.5 netstat 显示网络状态和端口占用信息

基本用法

查看指定进程网络信息

netstat -anp | grep 端口号

查看网络端口号占用情况

netstat -nlp | grep 端口号
选项 解释
-a 显示所有正在监听【listen】和未监听的套接字【socket】
-n 拒绝显示别名 能显示数字尽量显示数字
-l 仅列出正在监听的服务状态
-p 表示显示哪个进程在调用

5.11 crontab 系统定时任务

5.11.1 crontab 服务管理

Ubuntucron ,没有d

重启 crond 服务

systemctl restart crond

5.11.2 crontab 定时任务设置

基本语法

crontab [选项]
选项 解释
-e 编辑 crontab 定时任务
-l 查询 crontab 定时任务
-r 删除当前用户所有的 crontab 任务

进入 crontab 编辑界面,会打开 vim 编辑页面

* * * * * 执行的任务

含义如下

项目 含义 范围
第 1 个 * 一小时的第几分钟 0-59
第 2 个 * 一天的第几个小时 0-23
第 3 个 * 一个月中的第几天 1-31
第 4 个 * 一年当中的第几月 1-12
第 5 个 * 一周当中的星期几 0-7 0和7都代表周日

特殊符号

符号 含义
* 任何时间。 比如第一项设置 * 代表:一小时中每分钟都执行一次命令
, 代表不连续的时间。 如"0 8,12,16 * * * 命令" 表示每天的 8点0分,12点0分,16点0分都执行一次命令
- 代表连续的时间范围。 比如 “0 5 * * 1-6 命令” 表示,每周一到周六的凌晨 5点0分执行命令
*/n 代表每隔多久执行一次命令。 比如 “*/10 * * * *” 表示,每隔 10 分钟执行一次命令

一些案例

符号 含义
45 22 * * * 每天 22 点 45 分执行
0 5 1,15 * * 每个月 1号和15号 的凌晨 5点0分执行
40 4 * * 1-5 每周一到周五 的凌晨 4点40分执行
0 0 1,15 * 1 每个月 1号和15号 每周一的 0点0分都会执行。注意:星期几和几号不要同时出现,都代表天,可读性差