本文最后更新于 192 天前 ,文中信息可能已经过时。如有问题请在评论区留言。

每个命令独占一行,一个注释下面两行命令即代表这两个命令为同一作用。

查看系统相关信息

bash
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# 显示机器的处理器架构
uname -m

# 显示正在使用的内核版本
uname -r

# 显示 CPU info 信息
cat /proc/cpuinfo

# 显示中断
cat /proc/interrupts

# 显示哪些 swap 被使用
cat /proc/swaps

# 显示内存使用
cat /proc/meminfo

# 显示内核版本
cat /proc/version

# 显示网络适配器及统计
cat /proc/net/dev

# 显示已加载的文件系统
cat /proc/mounts

# 显示系统日期
date

# 显示系统运行时间
uptime

关机、注销、重启

bash
1
2
3
4
5
6
7
8
9
# 关机
shutdown -h now

# 注销
logout

# 重启
shutdown -r now
reboot

文件和目录

bash
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# 进行 `/home` 目录
cd /home

# 返回上一级目录
cd ..

# 返回上两级目录
cd ../..

# 进入个人的主目录
cd
cd ~

# 进入 user1 的主目录
cd ~user1

# 返回上次所在目录
cd -

# 显示当前工作目录
pwd

# 查看目录中的文件
ls

# 查看目录中文件并标记每个项目的类型
ls -F

# 递归显示子目录结构
ls -R

# 查看文件和目录的详细信息
ls -l

# 显示隐藏文件
ls -a

# 显示目录和链接信息
ls -ld

# 显示包含数字的文件名和目录名
ls *[0-9]*

# 创建目录 `dir1`
mkdir dir1

# 同时创建目录 `dir1` 和 `dir2`
mkdir dir1 dir2

# 创建层级目录 (目录树)
mkdir -p /tmp/dir1/dir2

# 删除文件 `file1`
rm -f file1

# 删除目录 `dir1`
rmdir dir1

# 递归地强制删除 `dir1` 目录 (包括其下所有的文件和子目录)
rm -rf dir1

# 同时递归地强制删除 `dir1` 和 `dir2` 两个目录
rm -rf dir1 dir2

# 重命名/移动 一个目录
mv dir1 newdir

# 复制一个文件
cp file1 file2

# 复制一个目录下的所有文件到当前工作目录
cp dir/* .

# 复制一个目录到当前工作目录
cp -a /tmp/dir1 .

# 复制一个目录
cp -a dir2 dir2

# 创建一个指向文件或目录的软链接
ln -s file1 lnk1

# 创建一个指向文件或目录的物理链接
ln file1 lnk1

# 修改一个文件或目录的时间戳 (格式为: YYMMDDhhmm)
touch -t 2403081030 file1

文件搜索

bash
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 从 `/` 目录搜索名为 file1 的文件和目录
find / -name file1

# 搜索属于用户 `user1` 的文件和目录
find / -user user1

# 在目录 `/home/user1` 中搜索带有 `.bin` 结尾的文件
find /home/user1 -name \*.bin

# 搜索在过去 100 天内未被使用过的执行文件
find /usr/bin -type f -atime +100

# 搜索在 10 天内被创建或修改过的文件
find /usr/bin -type f -mtime -10

# 搜索以 `.rpm` 结尾的文件并定义其权限
find / -name \*.rpm -exec chmod 755 '{}' \;

# 搜索以 `.rpm` 结尾的文件, 忽略光驱等可移动设备
find / -xdev -name \*.rpm

# 显示一个二进制文件、原码或 man 的位置
whereis halt

# 显示一个二进制文件或可执行文件的完整路径
which halt

# 寻找以 `.ps` 结尾的文件 (先执行 updatedb 命令)
locate \*.ps

磁盘空间

bash
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 显示已挂载的分区列表
df -h

# 以尺寸大小排列文件和目录
ls -lSr | more

# 估算目录 `dir1` 已经使用的磁盘空间
du -sh dir1

# 以容量大小为依据依次显示文件和目录的大小
du -sk * | sort -rn

用户和群组

bash
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 创建新用户组 `docker`
groupadd docker

# 删除用户组 `docker`
groupdel docker

# 重命名用户组 `docker` 为 `docker0`
groupmod -n docker0 docker

# 创建新用户 `user1`
useradd user1

# 删除用户 `user1`
userdel user1

# 创建一个属于 `docker` 用户组的用户 (-c 为用户全名, -d 指定 home 目录, -s 指定登录 shell 为 /bin/bash)
useradd -c "Custom user1" -g docker -d /home/user1 -s /bin/bash user

# 修改用户属性
usermode -c "User FTP" -g system -d /ftp/user1 -s /bin/nologin user1

# 修改口令
passwd

# 修改 `user1` 的口令 (只允许 root 执行)
passwd user1

# 设置用户口令失效期限
chage -E 2025-12-31 user1

文件权限

使用 + 设置权限,使用 - 用于取消

bash
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# 显示权限
ls -lh

# 改变文件 `file1` 的所有人
chown user1 file1

# 改变文件 `file1` 的群组
chgrp group1 file1

# 改变文件 `file1` 的所有人和群组
chown user1:group1 file1

# 改变目录 `dir1` 的所有人属性并同时改变目录下所有文件的属性
chown -R user1 dir1

# 设置目录 `dir1` 的所有人(u)、群组(g) 以及其他人(o) 以读(r)、写(w)和执行(x)的权限
chmod ugo+rwx dir1

# 删除群组(g) 与其他人(o) 对目录的读(r)、写(w)、执行权限(x)
chmod go-rwx dir1

# 为所有者、所属组和其他用户添加 `file1` 的执行权限
chmod +x /tmp/file1

# 为所有者、所属组和其他用户删除 `file1` 的执行权限
chmod -x /tmp/file1

# 为所有者添加 `file1` 的执行权限
chmod u+x /tmp/file1

# 为所属组添加 `file1` 的执行权限
chmod g+x /tmp/file1

# 为其他用户添加 `file1` 的执行权限
chmod o+x /tmp/file1

# 为所有者、所属组添加 `file1` 的执行权限
chmod ug+x

# 为所有者、所属组和其他用户添加 `file1` 的写、执行权限, 取消读权限
chmod =wx /tmp/file1

# 为所有者、所属组添加 `file1` 的写、执行权限, 取消读权限
chmod ug=wx /tmp/file1

文件特殊属性

使用 + 设置权限,使用 - 用于取消

bash
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 只允许以追加方式读写文件
chattr +a file1

# 允许这个文件能被内核自动压缩/解压
chattr +c file1

# 在进行文件系统备份时, dump 程序将忽略该文件
chattr +d file1

# 设置成不可变的文件,不能被删除、修改、重命名或链接
chattr +i file1

# 允许一个文件被安全地删除
chattr +s file1

# 一旦应用程序对这个文件执行了写操作, 使系统立刻把修改结果写道磁盘
chattr +S file1

# 若文件被删除, 系统会允许在以后恢复这个被删除的文件
chattr +u file1

# 显示特殊属性
lsattr

打包和压缩

tar

bash
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 创建 `archive.tar` 压缩文件, 其中包含了 `file1`
tar -cvf archive.tar file1

# 创建 `archive.tar` 压缩文件, 其中包含了 `file1`、`file2`、`dir1`
tar -cvf archive.tar file1 file2 dir1

# 显示压缩包 `archive.rar` 中的内容
tar -tf archive.tar

# 解压 `archive.tar`
tar -xvf archive.tar

# 解压 `archive.tar` 到 `/tmp` 目录下
tar -xvf archive.tar -C /tmp

# 创建 bzip2 格式的压缩包
tar -cvfj archive.tar.bz2 dir1

# 解压 bzip2 格式的压缩包
tar -xcvfj archive.tar.bz2

# 创建 gzip 格式的压缩包
tar -cvfz archive.tar.gz

# 解压 gzip 格式的压缩包
tar -xvfz archive.tar.gz

zip

bash
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 创建 zip 格式的压缩包, 包含 file1
zip archive.zip file1

# 创建 zip 格式压缩包, 同时包含 file1、file2、dir1
zip -r archive.zip file1 file2 dir1

# 解压 zip 格式压缩包
unzip archive.zip

# 压缩 `file1` 文件 (bzip2 格式)
bzip2 file1

# 解压 bzip2 格式文件
bunzip2 file1.bz2

# 压缩 `file1` 文件 (gzip 格式)
gzip file1

# 最大程度压缩
gzip -9 file1

# 解压 gzip 格式文件
gunzip file1.gz

查看文件内容

bash
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# 从第一个字节开始正向查看文件内容
cat file1

# 从最后一个字节反向查看文件内容
tac file1

# 查看长文件内容
more file1

# 查看文件的前两行
head -2 file1

# 查看文件的最后两行
tail -2 file1

# 实时查看文件内容
tail -f /var/log/info.log

文本处理

bash
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# 在文件中查找关键字 `Aug`
grep Aug /var/log/info.log

# 在文件中查找以 `Aug` 开头的单词
grep ^Aug /var/log/info.log

# 在文件中查找所有包含数字的行
grep [0-9] /var/log/info.log

# 在目录 `/var/log` 及随后的目录中搜索字符串 `Aug`
grep Aug -R /var/log/*

# 将文本中的 `str1` 替换成 `str2`
sed 's/str1/str2/g' test.txt

# 删除文件中的空白行
sed '/^$/d' test.txt

# 删除文件中所有注释和空白行
sed '/ *#/d; /^$/d' test.txt

# 从文件中排除第一行
sed -e '1d' test.txt

# 查看只包含 `str1` 的行
sed -n '/str1/p'

# 删除每一行最后的空白字符
sed -e 's/ *$//' test.txt

# 从文件中删除词汇 `str1` 并保留剩余全部
sed -e 's/str1//g' test.txt

# 查看第 1 行到第 5 行内容
sed -n '1,5p;5q' test.txt

# 用单个 0 替换多个 0
sed -e 's/00*/0g' test.txt

# 标示文件的行数
cat -n file1

# 删除 file.txt 文件中的所有偶数行
cat file.txt | awk 'NR%2==1'

# 查看合并两个文件的内容
paste file1 file2

# 合并两个文件的内容, 中间用 `+` 区分
paste -d '+' file1 file2

# 排序两个文件的内容
sort file1 file2

# 取出两个文件的并集 (重复的行只保留一份)
sort file1 file2 | uniq

# 删除交集, 留下其他行
sort file1 file2 | uniq -u

# 取出两个文件的交集 (只保留两个文件都有的内容)
sort file1 file2 | uniq -d

# 比较两个文件的内容, 只删除 `file1` 所包含的内容
comm -1 file1 file2

# 比较两个文件的内容, 只删除 `file2` 所包含的内容
comm -2 file1 file2

# 比较两个文件的内容, 只删除两个文件共有的内容
comm -3 file1 file2

字符设置和文件格式转换

bash
1
2
3
4
5
# 将文件由 MSDOS 转为 UNIX
dos2unix filedos.txt fileunix.txt

# 将文件由 UNIX 转为 MSDOS
unix2dos fileunix.txt filedos.txt

软件包管理

RPM

RedHat Package Manager (RedHat 软件包管理工具)。主要应用于 RedHat 系列包括 Fedora 等发行版的 Linux 系统上(redhat、centos、fedora等)

bash
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
# 安装 rpm 包
rpm -ivh package.rpm

# 安装 rpm 包, 忽略依赖关系警告
rpm -ivh --nodeeps package.rpm

# 更新 rpm 包但不改变其配置文件
rpm -U package.rpm

# 更新已经安装的 rpm 包
rpm -F package.rpm

# 删除 rpm 包
rpm -e package.rpm

# 显示系统中所有已经安装的 rpm 包
rpm -qa

# 显示所有名称中包含 `httpd` 的 rpm 包
rpm -qa | grep httpd

YUM

bash
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# 安装 rpm 包
yum install <package>

# 更新 rpm 包
yum update <package>

# 卸载 rpm 包
yum remove <package>

# 升级所有已安装的 rpm 包
yum upgrade

# 列出所有安装的 rpm 包
yum list

# 清理 YUM 缓存
yum clean <all|packages|headers|metadata|dbcache|plugins|expire-cache> 

DEB

Debian Packager。主要应用于 Debian 系列包括 Ubuntu 等发型版本(debian、ubuntu 等)

bash
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 安装指定的 DEB 软件包
dpkg -i <package.deb>

# 卸载指定的软件包
dpkg -r <package>

# 完全移除指定的软件包 (包括配置文件)
dpkg -P <package>

# 列出所有已安装的软件包
dpkg -l

# 重新配置已安装的软件包
dpkg-reconfigure <package>

APT

Advanced Package Tool

bash
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 安装指定的软件包及其依赖
apt-get install <package>

# 卸载指定的软件包
apt-get remove <package>

# 完全移除指定的软件包 (包括配置文件)
apt-get purge <package>

# 更新软件包索引列表
apt-get update

# 升级所有已安装的软件包
apt-get upgrade

# 清理旧版本的软件包
apt-get autoclean

# 自动删除不再需要的软件包
apt-get autoremove

# 清理缓存
apt-get clean