Linux 操作系统命令完全指南:从基础到高级应用
目录
1. Linux 命令基础概念
1.1 Linux 命令概述
Linux 命令是用户与 Linux 操作系统内核交互的工具和接口。通过命令行界面(CLI),用户可以执行文件操作、系统配置、程序运行等各种任务。
命令行的作用
- 直接控制系统资源:无需图形界面开销,直接调用系统功能
- 自动化和脚本编写:可以组合命令创建复杂的自动化流程
- 远程管理:通过 SSH 等工具远程管理服务器
- 精确控制:提供比图形界面更细粒度的操作控制
- 高效批量处理:一次性处理大量文件和任务
命令提示符结构
[user@hostname directory]$
user:当前登录用户名hostname:主机名directory:当前工作目录(~表示家目录)$:普通用户提示符(#表示 root 用户)
1.2 命令语法规则
基本命令结构
command [options] [arguments]
- command:命令名称
- options:选项(以
-或--开头),修改命令行为 - arguments:参数,命令操作的对象
选项格式
# 短选项(单字母,单个短横线)
ls -l -a -h
ls -lah # 可以合并
# 长选项(完整单词,两个短横线)
ls --all --human-readable
参数类型
# 文件路径
cp file.txt /home/user/
# 目录路径
cd /var/log
# 多个参数
cp file1.txt file2.txt /backup/
# 通配符
ls *.txt
rm -rf temp_*
特殊字符
| 字符 | 含义 | 示例 |
|---|---|---|
* | 匹配任意字符 | *.txt 匹配所有 txt 文件 |
? | 匹配单个字符 | file?.txt 匹配 file1.txt, fileA.txt |
[] | 匹配字符范围 | file[1-3].txt |
{} | 匹配多个模式 | file{1,2,3}.txt |
~ | 家目录 | ~/Documents |
. | 当前目录 | ./script.sh |
.. | 上级目录 | ../parent |
1.3 帮助系统使用
man 命令(手册页)
# 查看命令手册
man ls
man cp
# 搜索手册页
man -k keyword
man -f command
# 手册页导航
# 空格键:下一页
# b 键:上一页
# /keyword:搜索
# q:退出
手册章节:
- 用户命令
- 系统调用
- 库函数
- 特殊文件
- 文件格式
- 游戏
- 杂项
- 系统管理命令
help 命令
# 查看内置命令帮助
help cd
help export
# 查看简要帮助
command --help
ls --help
info 命令
# 查看 GNU info 文档
info ls
info bash
# info 导航
# n:下一节点
# p:上一节点
# u:上移一级
# q:退出
1.4 Shell 基础概念
Shell 类型
# 查看当前 shell
echo $SHELL
# 查看可用 shells
cat /etc/shells
# 常见 shell 类型
# - bash:默认 shell,功能强大
# - zsh:扩展功能多,oh-my-zsh
# - fish:用户友好,自动建议
# - sh:POSIX 标准 shell
环境变量
# 查看所有环境变量
env
printenv
# 查看特定变量
echo $PATH
echo $HOME
# 设置变量
MY_VAR="hello"
export MY_VAR
# 永久设置(添加到 ~/.bashrc 或 ~/.bash_profile)
echo 'export MY_VAR="hello"' >> ~/.bashrc
source ~/.bashrc
常用环境变量:
| 变量 | 含义 | 示例 |
|---|---|---|
PATH | 命令搜索路径 | /usr/bin:/bin:/usr/local/bin |
HOME | 用户家目录 | /home/username |
USER | 当前用户名 | root |
PWD | 当前工作目录 | /var/log |
SHELL | 当前 shell | /bin/bash |
LANG | 语言环境 | en_US.UTF-8 |
路径概念
# 绝对路径(从根目录开始)
cd /home/user/documents
# 相对路径(从当前目录开始)
cd ./projects
cd ../parent
# 特殊路径
cd ~ # 家目录
cd - # 上一个目录
cd .. # 上级目录
2. 文件管理命令
2.1 文件浏览命令
ls - 列出目录内容
功能:显示目录中的文件和子目录列表
语法:
ls [选项] [文件或目录]
常用参数:
| 参数 | 说明 | 示例 |
|---|---|---|
-l | 长格式显示(权限、所有者、大小、时间) | ls -l |
-a | 显示所有文件(包括隐藏文件) | ls -a |
-h | 人类可读的文件大小(K、M、G) | ls -lh |
-t | 按修改时间排序 | ls -lt |
-r | 反向排序 | ls -lr |
-S | 按文件大小排序 | ls -lS |
-R | 递归显示子目录 | ls -R |
-d | 只显示目录本身 | ls -ld /tmp |
-i | 显示 inode 号 | ls -li |
示例:
# 长格式显示
$ ls -l
total 12
drwxr-xr-x 2 user user 4096 Jan 15 10:30 Documents
-rw-r--r-- 1 user user 256 Jan 15 09:20 file.txt
lrwxrwxrwx 1 user user 12 Jan 15 11:00 link -> /path/to/target
# 显示人类可读大小
$ ls -lh
total 12K
-rw-r--r-- 1 user user 1.5M Jan 15 10:30 largefile.zip
-rw-r--r-- 1 user user 256 Jan 15 09:20 file.txt
# 按时间排序显示最近修改的文件
$ ls -lt
total 12
-rw-r--r-- 1 user user 256 Jan 15 10:30 recent.txt
-rw-r--r-- 1 user user 128 Jan 14 15:20 old.txt
pwd - 显示当前工作目录
功能:显示当前所在的完整路径
语法:
pwd [选项]
常用参数:
-L:显示逻辑路径(跟随符号链接)-P:显示物理路径(不跟随符号链接)
示例:
$ pwd
/home/user/documents/projects
$ cd /var/log
$ pwd
/var/log
cd - 切换目录
功能:改变当前工作目录
语法:
cd [目录]
示例:
# 切换到绝对路径
cd /home/user/documents
# 切换到相对路径
cd projects/subdir
# 切换到上级目录
cd ..
# 切换到上上级目录
cd ../..
# 切换到家目录
cd
cd ~
cd $HOME
# 切换到上一个目录
cd -
# 特殊技巧
cd ~username # 切换到其他用户家目录
cd /usr/local/../ # 切换到 /usr
file - 确定文件类型
功能:通过文件内容判断文件类型
语法:
file [选项] [文件...]
常用参数:
-b:不显示文件名-i:显示 MIME 类型-z:检查压缩文件内容
示例:
$ file script.sh
script.sh: Bourne-Again shell script, ASCII text executable
$ file image.jpg
image.jpg: JPEG image data, JFIF standard 1.01
$ file archive.zip
archive.zip: Zip archive data, at least v2.0 to extract
$ file -i document.pdf
document.pdf: application/pdf; charset=binary
2.2 文件操作命令
cp - 复制文件或目录
功能:将文件或目录从一个位置复制到另一个位置
语法:
cp [选项] 源文件 目标文件
cp [选项] 源文件... 目标目录
常用参数:
| 参数 | 说明 | 示例 |
|---|---|---|
-r | 递归复制目录 | cp -r dir1 dir2 |
-p | 保留文件属性(时间、权限等) | cp -p file1 file2 |
-i | 交互式(覆盖前询问) | cp -i file1 file2 |
-v | 显示详细过程 | cp -v file1 file2 |
-n | 不覆盖已存在的文件 | cp -n file1 file2 |
-u | 只复制更新的文件 | cp -u file1 file2 |
-a | 归档模式(-dR --preserve=all) | cp -a dir1 dir2 |
-f | 强制复制 | cp -f file1 file2 |
示例:
# 复制文件
$ cp file.txt backup.txt
# 复制文件到指定目录
$ cp file.txt /backup/
# 递归复制目录
$ cp -r project/ backup/
# 保留属性复制
$ cp -p important.doc /backup/
$ ls -l important.doc /backup/important.doc
-rw-r--r-- 1 user user 1024 Jan 15 10:30 important.doc
-rw-r--r-- 1 user user 1024 Jan 15 10:30 /backup/important.doc
# 带进度的复制(使用 rsync 更好)
$ cp -v file1.txt file2.txt /backup/
'file1.txt' -> '/backup/file1.txt'
'file2.txt' -> '/backup/file2.txt'
# 复制多个文件到目录
$ cp *.txt /backup/
mv - 移动或重命名文件
功能:移动文件到另一个位置,或重命名文件
语法:
mv [选项] 源文件 目标文件
mv [选项] 源文件... 目标目录
常用参数:
| 参数 | 说明 | 示例 |
|---|---|---|
-i | 交互式(覆盖前询问) | mv -i file1 file2 |
-v | 显示详细过程 | mv -v file1 file2 |
-n | 不覆盖已存在的文件 | mv -n file1 file2 |
-u | 只移动更新的文件 | mv -u file1 file2 |
-f | 强制移动 | mv -f file1 file2 |
-b | 覆盖前备份 | mv -b file1 file2 |
示例:
# 重命名文件
$ mv oldname.txt newname.txt
# 移动文件到另一个目录
$ mv file.txt /home/user/documents/
# 移动并重命名
$ mv file.txt /backup/backup_file.txt
# 移动多个文件到目录
$ mv *.log /var/log/archive/
# 交互式移动(覆盖前询问)
$ mv -i important.txt /backup/
mv: overwrite '/backup/important.txt'? y
# 显示移动过程
$ mv -v file1.txt file2.txt /backup/
'file1.txt' -> '/backup/file1.txt'
'file2.txt' -> '/backup/file2.txt'
# 移动目录
$ mv project/ /backup/
rm - 删除文件或目录
功能:删除文件或目录
语法:
rm [选项] 文件...
常用参数:
| 参数 | 说明 | 示例 |
|---|---|---|
-r | 递归删除目录 | rm -r dir/ |
-f | 强制删除,不提示 | rm -f file |
-i | 交互式删除 | rm -i file |
-v | 显示详细过程 | rm -v file |
-d | 删除空目录 | rm -d emptydir |
示例:
# 删除文件
$ rm file.txt
# 删除多个文件
$ rm file1.txt file2.txt file3.txt
# 删除所有 txt 文件
$ rm *.txt
# 递归删除目录及其内容
$ rm -r project/
# 强制删除(危险!)
$ rm -rf temp/
# 交互式删除
$ rm -i important.txt
rm: remove regular file 'important.txt'? y
# 显示删除过程
$ rm -v file1.txt file2.txt
removed 'file1.txt'
removed 'file2.txt'
# ⚠️ 安全警告
# 永远不要随意运行:rm -rf /
# 删除前务必确认路径正确
# 建议先使用 ls 确认要删除的文件
mkdir - 创建目录
功能:创建新的目录
语法:
mkdir [选项] 目录...
常用参数:
| 参数 | 说明 | 示例 |
|---|---|---|
-p | 递归创建目录(包括父目录) | mkdir -p a/b/c |
-v | 显示创建过程 | mkdir -v dir |
-m | 设置权限模式 | mkdir -m 755 dir |
示例:
# 创建单个目录
$ mkdir projects
# 创建多个目录
$ mkdir dir1 dir2 dir3
# 递归创建嵌套目录
$ mkdir -p /home/user/projects/python/src
$ tree /home/user/projects
/home/user/projects/
└── python
└── src
# 设置权限创建
$ mkdir -m 700 private
$ ls -ld private
drwx------ 2 user user 4096 Jan 15 10:30 private
# 显示创建过程
$ mkdir -v newdir
mkdir: created directory 'newdir'
rmdir - 删除空目录
功能:删除空目录(目录必须为空)
语法:
rmdir [选项] 目录...
常用参数:
-p:递归删除目录及其空父目录-v:显示删除过程
示例:
# 删除空目录
$ rmdir emptydir
# 删除多个空目录
$ rmdir dir1 dir2 dir3
# 递归删除(如果父目录也变空)
$ rmdir -p a/b/c
# 如果 c 为空,删除 c;如果 b 因此变空,删除 b;依此类推
# ⚠️ 注意:rmdir 只能删除空目录
# 要删除非空目录,使用 rm -r
2.3 文件查看命令
cat - 连接文件和打印
功能:显示文件内容、连接多个文件
语法:
cat [选项] [文件...]
常用参数:
| 参数 | 说明 | 示例 |
|---|---|---|
-n | 显示行号 | cat -n file |
-b | 只显示非空行的行号 | cat -b file |
-E | 显示行尾的$符号 | cat -E file |
-T | 显示制表符为^I | cat -T file |
-s | 压缩空行 | cat -s file |
示例:
# 查看文件内容
$ cat file.txt
Hello World
This is a test file.
# 显示行号
$ cat -n file.txt
1 Hello World
2 This is a test file.
# 查看多个文件
$ cat file1.txt file2.txt
# 创建文件(Ctrl+D 结束)
$ cat > newfile.txt
Line 1
Line 2
^D
# 追加内容到文件
$ cat >> file.txt
New line
^D
# 显示不可见字符
$ cat -A file.txt
Hello World$
Tab^Ihere$
less - 分页查看文件
功能:分页显示文件内容,支持向前和向后浏览
语法:
less [选项] [文件...]
常用参数:
-N:显示行号-S:不折叠长行-R:显示原始颜色(用于带颜色的日志)-F:内容少于一屏时自动退出-G:不突出显示搜索模式
less 导航命令:
| 按键 | 功能 |
|---|---|
空格 | 下一页 |
b | 上一页 |
d | 半页下 |
u | 半页上 |
g | 跳到开头 |
G | 跳到结尾 |
/pattern | 向下搜索 |
?pattern | 向上搜索 |
n | 下一个匹配 |
N | 上一个匹配 |
q | 退出 |
示例:
# 查看大文件
$ less largefile.log
# 显示行号
$ less -N /var/log/syslog
# 查看带颜色的日志
$ less -R application.log
# 搜索内容
$ less /var/log/auth.log
# 然后输入 /Failed 搜索包含 Failed 的行
more - 分页查看(功能较少)
功能:基本的分页显示文件内容
语法:
more [选项] 文件
示例:
$ more largefile.txt
# 空格:下一页
# Enter:下一行
# q:退出
# /pattern:搜索
# ⚠️ 注意:more 功能有限,建议使用 less
head - 查看文件开头
功能:显示文件的开头部分
语法:
head [选项] [文件...]
常用参数:
-n <行数>:显示指定行数-c <字节>:显示指定字节数-q:不显示文件名(多文件时)-v:显示文件名(多文件时)
示例:
# 显示前 10 行(默认)
$ head file.txt
# 显示前 20 行
$ head -n 20 file.txt
$ head -20 file.txt
# 显示前 100 字节
$ head -c 100 file.txt
# 显示多个文件的前几行
$ head -n 5 file1.txt file2.txt
==> file1.txt <==
Line 1
Line 2
Line 3
Line 4
Line 5
==> file2.txt <==
Line 1
Line 2
Line 3
Line 4
Line 5
tail - 查看文件结尾
功能:显示文件的末尾部分,特别适合查看日志
语法:
tail [选项] [文件...]
常用参数:
| 参数 | 说明 | 示例 |
|---|---|---|
-n <行数> | 显示指定行数 | tail -n 20 file |
-f | 持续跟踪文件变化 | tail -f log |
-F | 跟踪文件(即使被轮转) | tail -F log |
-c <字节> | 显示指定字节数 | tail -c 100 file |
-q | 不显示文件名 | tail -q file |
示例:
# 显示最后 10 行(默认)
$ tail file.txt
# 显示最后 50 行
$ tail -n 50 file.txt
$ tail -50 file.txt
# 实时跟踪日志文件
$ tail -f /var/log/syslog
Jan 15 10:30:01 server CRON[1234]: (root) CMD (command)
Jan 15 10:31:01 server CRON[1235]: (root) CMD (command)
# 按 Ctrl+C 退出
# 跟踪日志轮转的文件
$ tail -F /var/log/application.log
# 即使文件被重命名或删除重建,仍会继续跟踪
# 显示最后 100 行并跟踪
$ tail -n 100 -f /var/log/nginx/access.log
2.4 文件查找命令
find - 强大的文件查找
功能:在目录树中搜索文件,支持多种条件
语法:
find [路径] [表达式]
常用选项:
按名称查找:
# 按文件名查找
find /home -name "file.txt"
find . -name "*.log"
find /var -iname "Config" # 不区分大小写
# 按正则表达式
find . -regex ".*\.\(txt\|log\)"
按类型查找:
# 文件类型:f-文件,d-目录,l-链接
find /home -type f
find . -type d
find /var -type l
按大小查找:
# 大小单位:c-字节,k-KB,M-MB,G-GB
find /var -size +100M # 大于 100MB
find . -size -1M # 小于 1MB
find /home -size 50M # 等于 50MB
按时间查找:
# 按修改时间(天)
find /var -mtime -7 # 7 天内修改过
find . -mtime +30 # 30 天前修改过
# 按访问时间(天)
find /home -atime -1
# 按状态改变时间(天)
find /etc -ctime -1
# 按分钟查找
find . -mmin -60 # 60 分钟内修改过
按权限查找:
find /home -perm 755
find . -perm -u+x # 用户可执行
find /var -perm /o=w # 其他人可写
执行操作:
# 删除找到的文件
find /tmp -name "*.tmp" -delete
# 执行命令
find . -name "*.log" -exec rm {} \;
find . -type f -exec chmod 644 {} \;
# 使用 + 批量处理
find . -name "*.txt" -exec cat {} +
# 重定向到文件
find . -name "*.conf" > files.txt
综合示例:
# 查找 /var/log 下 7 天内修改过的.log 文件
$ find /var/log -name "*.log" -mtime -7
# 查找大于 100MB 的文件
$ find / -type f -size +100M
# 查找并删除 30 天前的临时文件
$ find /tmp -name "*.tmp" -mtime +30 -delete
# 查找所有可执行文件
$ find /home/user -type f -perm -u+x
# 查找空目录
$ find /home -type d -empty
# 查找并统计文件数量
$ find . -type f | wc -l
1250
locate - 快速文件定位
功能:使用数据库快速查找文件
语法:
locate [选项] 模式
常用参数:
-i:不区分大小写-n <数量>:限制结果数量-r:使用正则表达式
示例:
# 查找文件
$ locate nginx.conf
/etc/nginx/nginx.conf
/usr/share/nginx/nginx.conf
# 不区分大小写
$ locate -i READme
/home/user/README
/home/user/project/readme.md
# 限制结果数量
$ locate -n 10 php.ini
# 更新数据库(需要 root)
$ sudo updatedb
which - 查找命令位置
功能:在 PATH 中查找命令的完整路径
语法:
which [选项] 命令...
示例:
# 查找命令位置
$ which ls
/bin/ls
$ which python
/usr/bin/python
# 查找多个命令
$ which python java gcc
/usr/bin/python
# 如果命令不存在
$ which nonexistent
# 无输出,返回退出码 1
whereis - 查找命令相关文件
功能:查找命令的二进制文件、源码和手册页
语法:
whereis [选项] 命令...
常用参数:
-b:只查找二进制文件-m:只查找手册页-s:只查找源码
示例:
# 查找所有相关文件
$ whereis ls
ls: /bin/ls /usr/share/man/man1/ls.1.gz
$ whereis python
python: /usr/bin/python /usr/lib/python3.8 /etc/python3.8 /usr/bin/python3.8 /usr/share/python /usr/share/man/man1/python.1.gz
# 只查找二进制文件
$ whereis -b gcc
gcc: /usr/bin/gcc
# 只查找手册页
$ whereis -m ls
ls: /usr/share/man/man1/ls.1.gz
2.5 文件权限命令
chmod - 改变文件权限
功能:修改文件或目录的访问权限
语法:
chmod [选项] 模式 文件...
权限表示法:
八进制表示法:
- 4 = 读(r)
- 2 = 写(w)
- 1 = 执行(x)
# 常见权限组合
755 = rwxr-xr-x # 所有者全权限,其他人读执行
700 = rwx------ # 只有所有者有权限
644 = rw-r--r-- # 所有者读写,其他人只读
600 = rw------- # 只有所有者读写
符号表示法:
- u = 所有者(user)
- g = 组(group)
- o = 其他人(other)
- a = 所有人(all)
-
- = 添加权限
-
- = 移除权限
- = = 设置权限
示例:
# 八进制方式
$ chmod 755 script.sh
$ chmod 644 file.txt
$ chmod 700 private.key
# 符号方式
$ chmod +x script.sh # 添加执行权限
$ chmod u+w file.txt # 所有者添加写权限
$ chmod go-w file.txt # 组和其他人移除写权限
$ chmod a+r file.txt # 所有人添加读权限
$ chmod u=rwx,go=rx dir # 设置特定权限
# 递归修改目录权限
$ chmod -R 755 /var/www/
$ chmod -R u+w,go-w /home/user/
# 查看权限变化
$ ls -l script.sh
-rw-r--r-- 1 user user 1024 Jan 15 10:30 script.sh
$ chmod +x script.sh
$ ls -l script.sh
-rwxr-xr-x 1 user user 1024 Jan 15 10:30 script.sh
chown - 改变文件所有者
功能:修改文件或目录的所有者和组
语法:
chown [选项] [所有者][:组] 文件...
常用参数:
-R:递归修改-v:显示详细过程-h:修改符号链接本身
示例:
# 改变所有者
$ sudo chown user file.txt
# 改变所有者和组
$ sudo chown user:group file.txt
$ sudo chown user:www-data /var/www/html
# 只改变组
$ sudo chown :group file.txt
$ sudo chgrp group file.txt # 等价
# 递归修改目录
$ sudo chown -R user:group /var/www/
# 显示过程
$ sudo chown -v user:group file.txt
ownership of 'file.txt' retained as user:group
chgrp - 改变文件所属组
功能:修改文件或目录的所属组
语法:
chgrp [选项] 组 文件...
示例:
# 改变组
$ sudo chgrp developers project/
# 递归改变
$ sudo chgrp -R www-data /var/www/html/
# 等价于
$ sudo chown :www-data /var/www/html/
umask - 设置默认权限掩码
功能:设置创建新文件时的默认权限掩码
语法:
umask [模式]
示例:
# 查看当前 umask
$ umask
0022
# 设置 umask
$ umask 022
$ umask 002 # 更宽松,组和其他人有写权限
# 永久设置(添加到 ~/.bashrc)
echo "umask 022" >> ~/.bashrc
# umask 计算
# 文件默认 666 - umask = 实际权限
# 目录默认 777 - umask = 实际权限
# umask 022: 文件 644, 目录 755
2.6 链接命令
ln - 创建链接
功能:创建硬链接或符号链接(软链接)
语法:
ln [选项] 目标 链接
ln [选项] 目标... 目录
常用参数:
| 参数 | 说明 | 示例 |
|---|---|---|
-s | 创建符号链接(软链接) | ln -s target link |
-f | 强制覆盖已存在的链接 | ln -sf target link |
-v | 显示详细过程 | ln -v target link |
-n | 将符号链接视为普通文件 | ln -vsn target link |
硬链接 vs 软链接:
| 特性 | 硬链接 | 软链接 |
|---|---|---|
| 跨文件系统 | 不支持 | 支持 |
| 链接到目录 | 不支持 | 支持 |
| 原文件删除 | 仍可用 | 失效 |
| inode | 相同 | 不同 |
| 大小 | 与原文件相同 | 链接路径长度 |
示例:
# 创建硬链接
$ ln file.txt hardlink.txt
$ ls -li file.txt hardlink.txt
123456 -rw-r--r-- 2 user user 1024 Jan 15 10:30 file.txt
123456 -rw-r--r-- 2 user user 1024 Jan 15 10:30 hardlink.txt
# inode 号相同(123456),链接数为 2
# 创建符号链接
$ ln -s /path/to/target symlink.txt
$ ls -l symlink.txt
lrwxrwxrwx 1 user user 15 Jan 15 10:30 symlink.txt -> /path/to/target
# 创建相对路径的符号链接
$ ln -s ../target/file.txt link.txt
# 强制创建(覆盖已存在的链接)
$ ln -sf new_target existing_link
# 显示创建过程
$ ln -sv target link
'link' -> 'target'
# 查看链接指向
$ readlink symlink.txt
/path/to/target
# 删除链接(不影响原文件)
$ rm symlink.txt
$ rm hardlink.txt # 只减少链接数,不删除文件
3. 系统管理命令
3.1 系统信息命令
uname - 显示系统信息
功能:显示操作系统相关信息
语法:
uname [选项]
常用参数:
| 参数 | 说明 | 示例 |
|---|---|---|
-a | 显示所有信息 | uname -a |
-s | 操作系统名称 | uname -s |
-r | 内核版本 | uname -r |
-v | 内核详细版本 | uname -v |
-m | 硬件架构 | uname -m |
-n | 主机名 | uname -n |
-p | 处理器类型 | uname -p |
示例:
# 显示所有信息
$ uname -a
Linux server 5.4.0-42-generic #46-Ubuntu SMP Fri Jul 10 00:24:02 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
# 单独查看
$ uname -s
Linux
$ uname -r
5.4.0-42-generic
$ uname -m
x86_64
$ uname -n
server
hostname - 显示或设置主机名
功能:显示或临时设置系统主机名
语法:
hostname [选项] [新主机名]
常用参数:
-I:显示所有 IP 地址-i:显示主机 IP 地址-d:显示域名-f:显示完整域名
示例:
# 显示当前主机名
$ hostname
server01
# 显示 IP 地址
$ hostname -I
192.168.1.100 10.0.0.1
$ hostname -i
192.168.1.100
# 显示域名
$ hostname -d
example.com
# 显示完整域名
$ hostname -f
server01.example.com
# 临时设置主机名(重启失效)
$ sudo hostname newserver
$ hostname
newserver
# 永久设置(需要修改配置文件)
$ sudo hostnamectl set-hostname newserver
uptime - 显示系统运行时间
功能:显示系统运行时间、用户数和负载平均值
语法:
uptime [选项]
示例:
$ uptime
10:30:45 up 15 days, 3:22, 2 users, load average: 0.52, 0.48, 0.43
# 输出说明:
# 10:30:45 - 当前时间
# up 15 days, 3:22 - 运行时间
# 2 users - 登录用户数
# load average: 0.52, 0.48, 0.43 - 1 分钟、5 分钟、15 分钟平均负载
top - 实时显示进程状态
功能:动态实时显示系统中进程的状态
语法:
top [选项]
交互命令:
| 按键 | 功能 |
|---|---|
P | 按 CPU 使用率排序 |
M | 按内存使用率排序 |
N | 按 PID 排序 |
T | 按时间排序 |
k | 终止进程 |
r | 调整进程优先级 |
q | 退出 |
h | 帮助 |
示例:
# 启动 top
$ top
# 输出示例:
top - 10:30:45 up 15 days, 3:22, 2 users, load average: 0.52, 0.48, 0.43
Tasks: 125 total, 1 running, 124 sleeping, 0 stopped, 0 zombie
%Cpu(s): 5.2 us, 2.1 sy, 0.0 ni, 92.5 id, 0.2 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 7962.3 total, 1234.5 free, 2345.6 used, 4382.2 buff/cache
MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 5123.4 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1234 root 20 0 234567 45678 12345 R 5.2 0.6 1:23.45 nginx
5678 www-data 20 0 123456 23456 8765 S 2.1 0.3 0:45.67 php-fpm
htop - 增强的进程查看工具
功能:top 的增强版本,更友好的界面
语法:
htop [选项]
示例:
# 启动 htop
$ htop
# 指定用户
$ htop -u username
# 指定进程
$ htop -p 1234,5678
# ⚠️ 注意:需要先安装
# Debian/Ubuntu: sudo apt install htop
# RHEL/CentOS: sudo yum install htop
3.2 磁盘管理命令
df - 显示磁盘空间使用情况
功能:显示文件系统的磁盘空间使用情况
语法:
df [选项] [文件或目录...]
常用参数:
| 参数 | 说明 | 示例 |
|---|---|---|
-h | 人类可读格式(K、M、G) | df -h |
-T | 显示文件系统类型 | df -T |
-i | 显示 inode 使用情况 | df -i |
-a | 显示所有文件系统 | df -a |
-k | 以 KB 为单位 | df -k |
示例:
# 显示磁盘使用情况
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 50G 25G 23G 53% /
/dev/sda2 100G 50G 45G 53% /home
tmpfs 3.9G 0 3.9G 0% /dev/shm
# 显示特定目录
$ df -h /home
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 100G 50G 45G 53% /home
# 显示文件系统类型
$ df -Th
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda1 ext4 50G 25G 23G 53% /
/dev/sda2 ext4 100G 50G 45G 53% /home
# 显示 inode 使用情况
$ df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 3276800 123456 3153344 4% /
du - 显示目录或文件大小
功能:显示目录或文件的磁盘使用情况
语法:
du [选项] [文件或目录...]
常用参数:
| 参数 | 说明 | 示例 |
|---|---|---|
-h | 人类可读格式 | du -h |
-s | 只显示总计 | du -sh dir |
-a | 显示所有文件 | du -ah |
-c | 显示总计 | du -ch |
-d <深度> | 限制深度 | du -hd 1 |
--max-depth=<N> | 限制深度 | du -h --max-depth=1 |
示例:
# 显示目录大小
$ du -sh /var/log
156M /var/log
# 显示子目录大小(深度 1)
$ du -h --max-depth=1 /home/user
4.0K /home/user/bin
12M /home/user/documents
256M /home/user/downloads
272M total
# 显示所有文件和目录
$ du -ah /home/user
4.0K /home/user/bin
1.2M /home/user/documents/file1.pdf
10M /home/user/documents/file2.pdf
12M /home/user/documents
256M /home/user/downloads/file.zip
272M /home/user
# 显示前 10 大目录
$ du -h --max-depth=1 / | sort -hr | head -10
mount - 挂载文件系统
功能:挂载文件系统到指定挂载点
语法:
mount [选项] [设备] [挂载点]
常用参数:
-t:指定文件系统类型-o:指定挂载选项-a:挂载 /etc/fstab 中的所有文件系统-l:列出已挂载的文件系统
示例:
# 显示已挂载的文件系统
$ mount | column -t
/dev/sda1 on / type ext4 (rw,relatime,errors=remount-ro)
/dev/sda2 on /home type ext4 (rw,relatime)
tmpfs on /tmp type tmpfs (rw,nosuid,nodev)
# 挂载设备
$ sudo mount /dev/sdb1 /mnt/data
# 指定文件系统类型
$ sudo mount -t nfs server:/export /mnt/nfs
# 指定挂载选项
$ sudo mount -o ro,nosuid /dev/sdb1 /mnt/data
# ro: 只读
# nosuid: 忽略 setuid 位
# noexec: 禁止执行
# 挂载 ISO 镜像
$ sudo mount -o loop image.iso /mnt/iso
# 重新挂载为读写
$ sudo mount -o remount,rw /mnt/data
# 挂载所有 fstab 中的文件系统
$ sudo mount -a
# 卸载
$ sudo umount /mnt/data
$ sudo umount /dev/sdb1
fdisk - 磁盘分区工具
功能:查看和管理磁盘分区表
语法:
fdisk [选项] [设备]
交互命令:
| 命令 | 功能 |
|---|---|
p | 打印分区表 |
n | 新建分区 |
d | 删除分区 |
w | 写入并退出 |
q | 退出不保存 |
m | 帮助 |
示例:
# 查看磁盘分区
$ sudo fdisk -l
Disk /dev/sda: 500 GiB, 536870912000 bytes, 1048576000 sectors
Disk model: VBOX HARDDISK
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 12345678-1234-1234-1234-123456789012
Device Start End Sectors Size Type
/dev/sda1 2048 1050623 1048576 512M EFI System
/dev/sda2 1050624 1048575967 1047525344 500G Linux filesystem
# 交互式分区
$ sudo fdisk /dev/sdb
# 然后输入命令:
# p - 查看分区
# n - 新建分区
# w - 保存退出
3.3 内存管理命令
free - 显示内存使用情况
功能:显示系统内存使用情况
语法:
free [选项]
常用参数:
| 参数 | 说明 | 示例 |
|---|---|---|
-h | 人类可读格式 | free -h |
-m | 以 MB 为单位 | free -m |
-g | 以 GB 为单位 | free -g |
-s <秒> | 持续监控 | free -s 2 |
-t | 显示总计行 | free -t |
示例:
$ free -h
total used free shared buff/cache available
Mem: 7.7G 2.3G 1.2G 156M 4.2G 5.1G
Swap: 2.0G 0B 2.0G
# 输出说明:
# total - 总内存
# used - 已使用
# free - 空闲
# shared - 共享内存(tmpfs)
# buff/cache- 缓冲区/缓存
# available - 应用程序可用内存
# 持续监控
$ free -h -s 2
# 每 2 秒刷新一次
vmstat - 虚拟内存统计
功能:显示虚拟内存、进程、CPU 活动等统计信息
语法:
vmstat [选项] [延迟] [次数]
常用参数:
-s:显示内存统计-d:显示磁盘统计-p:显示分区统计
示例:
# 显示一次统计
$ vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 123456 78901 234567 0 0 12 34 123 456 15 5 78 2 0
# 每 2 秒刷新一次,共 5 次
$ vmstat 2 5
# 显示内存统计
$ vmstat -s
7962304 K total memory
2345678 K used memory
123456 K active memory
234567 K inactive memory
1234567 K free memory
456789 K buffer memory
4567890 K swap cache
2097152 K total swap
0 K used swap
2097152 K free swap
3.4 用户管理命令
useradd - 创建用户
功能:创建新的系统用户
语法:
useradd [选项] 用户名
常用参数:
| 参数 | 说明 | 示例 |
|---|---|---|
-m | 创建家目录 | useradd -m user |
-d | 指定家目录 | useradd -d /home/user |
-s | 指定 shell | useradd -s /bin/bash |
-g | 指定主组 | useradd -g group |
-G | 指定附加组 | useradd -G sudo,www-data |
-c | 添加注释 | useradd -c "Full Name" |
-e | 账户过期日期 | useradd -e 2024-12-31 |
示例:
# 创建用户(自动创建家目录)
$ sudo useradd -m newuser
# 创建用户并指定 shell
$ sudo useradd -m -s /bin/bash newuser
# 创建用户并添加到组
$ sudo useradd -m -G sudo,developers newuser
# 创建用户并设置注释
$ sudo useradd -m -c "John Doe" jdoe
# 创建系统用户(无家目录)
$ sudo useradd -r -s /sbin/nologin appuser
# 查看用户信息
$ id newuser
uid=1001(newuser) gid=1001(newuser) groups=1001(newuser),27(sudo),1002(developers)
usermod - 修改用户
功能:修改用户账户信息
语法:
usermod [选项] 用户名
常用参数:
| 参数 | 说明 | 示例 |
|---|---|---|
-aG | 添加到附加组 | usermod -aG group user |
-g | 修改主组 | usermod -g group user |
-s | 修改 shell | usermod -s /bin/bash |
-d | 修改家目录 | usermod -d /new/home |
-l | 修改登录名 | usermod -l newname oldname |
-L | 锁定账户 | usermod -L user |
-U | 解锁账户 | usermod -U user |
示例:
# 添加用户到组(保留原有组)
$ sudo usermod -aG sudo username
$ sudo usermod -aG docker,www-data username
# 修改用户 shell
$ sudo usermod -s /bin/zsh username
# 锁定用户账户
$ sudo usermod -L username
# 解锁用户账户
$ sudo usermod -U username
# 修改用户家目录
$ sudo usermod -d /new/home -m username
# -m 选项会移动原家目录内容
userdel - 删除用户
功能:删除系统用户
语法:
userdel [选项] 用户名
常用参数:
-r:删除用户家目录和邮件池-f:强制删除
示例:
# 删除用户(保留家目录)
$ sudo userdel username
# 删除用户及其家目录
$ sudo userdel -r username
# 强制删除
$ sudo userdel -f username
passwd - 修改用户密码
功能:修改用户密码
语法:
passwd [选项] [用户名]
常用参数:
| 参数 | 说明 | 示例 |
|---|---|---|
-d | 删除密码 | passwd -d user |
-l | 锁定账户 | passwd -l user |
-u | 解锁账户 | passwd -u user |
-e | 强制过期 | passwd -e user |
-S | 显示状态 | passwd -S user |
示例:
# 修改当前用户密码
$ passwd
Changing password for current user.
Current password:
New password:
Retype new password:
# 修改其他用户密码(需要 root)
$ sudo passwd username
New password:
Retype new password:
# 锁定用户
$ sudo passwd -l username
passwd: password changed.
# 解锁用户
$ sudo passwd -u username
# 查看密码状态
$ sudo passwd -S username
username P 01/15/2024 0 99999 7 -1
# 状态:P-可用,L-锁定,NP-无密码
su - 切换用户
功能:切换到其他用户身份
语法:
su [选项] [用户名]
常用参数:
-:模拟完整登录(加载环境变量)-c:执行命令后退出
示例:
# 切换到 root
$ su -
Password:
# 切换到其他用户
$ su - username
Password:
# 执行命令后退出
$ su - username -c "whoami"
username
# 不加载环境变量
$ su username
sudo - 以其他用户身份执行命令
功能:以超级用户或其他用户身份执行命令
语法:
sudo [选项] 命令
常用参数:
| 参数 | 说明 | 示例 |
|---|---|---|
-u | 指定用户 | sudo -u user cmd |
-i | 模拟初始登录 | sudo -i |
-s | 启动 shell | sudo -s |
-v | 延长超时 | sudo -v |
-k | 重置超时 | sudo -k |
-l | 列出权限 | sudo -l |
示例:
# 以 root 身份执行命令
$ sudo apt update
[sudo] password for user:
# 启动 root shell
$ sudo -i
# 或
$ sudo -s
# 以其他用户身份执行
$ sudo -u www-data whoami
www-data
# 查看 sudo 权限
$ sudo -l
Matching Defaults entries for user on server:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin
User user may run the following commands on server:
(ALL : ALL) ALL
# 配置 sudo(使用 visudo)
$ sudo visudo
# 添加:
# username ALL=(ALL) ALL
# %sudo ALL=(ALL) ALL
3.5 服务管理命令
systemctl - 控制系统和服务管理器
功能:管理系统和服务(systemd)
语法:
systemctl [选项] 命令 [服务名]
常用命令:
服务管理:
# 启动服务
$ sudo systemctl start nginx
# 停止服务
$ sudo systemctl stop nginx
# 重启服务
$ sudo systemctl restart nginx
# 重载配置
$ sudo systemctl reload nginx
# 查看状态
$ systemctl status nginx
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2024-01-15 10:30:00 UTC; 1 day ago
# 启用开机自启
$ sudo systemctl enable nginx
# 禁用开机自启
$ sudo systemctl disable nginx
# 查看是否启用
$ systemctl is-enabled nginx
enabled
查看所有服务:
# 列出所有服务
$ systemctl list-units --type=service
# 列出已加载的服务
$ systemctl list-units --type=service --state=running
# 列出失败的服务
$ systemctl --failed
# 查看所有单元
$ systemctl list-unit-files
其他操作:
# 重新加载 systemd 配置
$ sudo systemctl daemon-reload
# 查看依赖
$ systemctl list-dependencies nginx
# 查看日志
$ journalctl -u nginx
$ journalctl -u nginx -f # 跟踪
service - 运行 System V init 脚本
功能:管理系统服务(旧版 init 系统)
语法:
service [服务名] [命令]
示例:
# 启动服务
$ sudo service nginx start
# 停止服务
$ sudo service nginx stop
# 重启服务
$ sudo service nginx restart
# 查看状态
$ sudo service nginx status
# ⚠️ 注意:较新系统建议使用 systemctl
3.6 软件包管理命令
apt - Debian/Ubuntu 包管理器
功能:高级包管理工具
语法:
apt [选项] 命令
常用命令:
# 更新软件包列表
$ sudo apt update
# 升级已安装的软件包
$ sudo apt upgrade
# 升级系统(处理依赖变化)
$ sudo apt dist-upgrade
# 安装软件包
$ sudo apt install nginx
$ sudo apt install nginx php mysql-server
# 删除软件包
$ sudo apt remove nginx
$ sudo apt purge nginx # 删除配置文件
# 搜索软件包
$ apt search nginx
# 显示软件包信息
$ apt show nginx
# 列出已安装的软件包
$ apt list --installed
# 列出可升级的软件包
$ apt list --upgradable
# 清理下载的软件包
$ sudo apt clean
$ sudo apt autoremove # 删除不需要的依赖
# 查看软件包依赖
$ apt depends nginx
# 查看哪个包提供文件
$ apt-file search filename
yum - RHEL/CentOS 包管理器
功能:Yellowdog Updater Modified
语法:
yum [选项] 命令
常用命令:
# 更新所有软件包
$ sudo yum update
# 安装软件包
$ sudo yum install nginx
# 删除软件包
$ sudo yum remove nginx
# 搜索软件包
$ yum search nginx
# 显示软件包信息
$ yum info nginx
# 列出已安装的软件包
$ yum list installed
# 清理缓存
$ sudo yum clean all
# 查看历史
$ yum history
dnf - Fedora 包管理器
功能:yum 的下一代版本
语法:
dnf [选项] 命令
示例:
# 更新系统
$ sudo dnf update
# 安装软件包
$ sudo dnf install nginx
# 删除软件包
$ sudo dnf remove nginx
# 搜索软件包
$ dnf search nginx
# 显示信息
$ dnf info nginx
# 清理缓存
$ sudo dnf clean all
dpkg - Debian 包工具
功能:底层 Debian 包管理
语法:
dpkg [选项] 命令
常用命令:
# 安装 .deb 包
$ sudo dpkg -i package.deb
# 删除包
$ sudo dpkg -r package
# 列出已安装的包
$ dpkg -l
# 查询包信息
$ dpkg -s package
# 列出包内容
$ dpkg -L package
# 查找文件属于哪个包
$ dpkg -S /path/to/file
rpm - Red Hat 包管理器
功能:Red Hat Package Manager
语法:
rpm [选项] 命令
常用命令:
# 安装 .rpm 包
$ sudo rpm -ivh package.rpm
# 升级包
$ sudo rpm -Uvh package.rpm
# 删除包
$ sudo rpm -e package
# 列出已安装的包
$ rpm -qa
# 查询包信息
$ rpm -qi package
# 列出包文件
$ rpm -ql package
# 查找文件属于哪个包
$ rpm -qf /path/to/file
# 验证包
$ rpm -V package
4. 进程管理命令
4.1 进程查看命令
ps - 显示进程状态
功能:显示当前进程快照
语法:
ps [选项]
常用选项:
BSD 风格:
# 显示所有进程
$ ps aux
# 输出字段说明:
# USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
# root 1 0.0 0.1 169436 11832 ? Ss 10:30 0:01 /sbin/init
# USER - 用户名
# PID - 进程 ID
# %CPU - CPU 使用率
# %MEM - 内存使用率
# VSZ - 虚拟内存大小
# RSS - 常驻内存大小
# TTY - 终端
# STAT - 状态
# START - 启动时间
# TIME - CPU 时间
# COMMAND - 命令
System V 风格:
# 显示所有进程
$ ps -ef
# 输出字段:
# UID PID PPID C STIME TTY TIME CMD
# root 1 0 0 10:30 ? 00:00:01 /sbin/init
# UID - 用户 ID
# PID - 进程 ID
# PPID - 父进程 ID
# C - CPU 使用率
# STIME - 启动时间
# TTY - 终端
# TIME - CPU 时间
# CMD - 命令
其他选项:
# 按用户显示
$ ps -u username
# 按 PID 显示
$ ps -p 1234,5678
# 按进程名显示
$ ps -C nginx
# 显示进程树
$ ps ajx
# 显示环境变量
$ ps e
# 显示完整命令
$ ps -ww
pgrep - 按名称查找进程
功能:根据名称和其他属性查找进程
语法:
pgrep [选项] 模式
常用参数:
| 参数 | 说明 | 示例 |
|---|---|---|
-l | 显示进程名 | pgrep -l nginx |
-a | 显示完整命令 | pgrep -a nginx |
-u | 按用户查找 | pgrep -u username |
-f | 匹配完整命令 | pgrep -f pattern |
-P | 按父进程查找 | pgrep -P 1 |
示例:
# 查找 nginx 进程
$ pgrep nginx
1234
5678
# 显示进程名
$ pgrep -l nginx
1234 nginx
5678 nginx
# 显示完整命令
$ pgrep -a nginx
1234 nginx: master process /usr/sbin/nginx
5678 nginx: worker process
# 查找特定用户的进程
$ pgrep -u www-data
# 匹配完整命令行
$ pgrep -f "python.*app.py"
pidof - 查找进程 ID
功能:查找运行中程序的 PID
语法:
pidof [选项] 程序名
示例:
# 查找 nginx 的 PID
$ pidof nginx
5678 1234
# 只返回一个 PID
$ pidof -s nginx
5678
# 跳过特定 PID
$ pidof -o 1234 nginx
5678
4.2 进程控制命令
kill - 终止进程
功能:向进程发送信号
语法:
kill [选项] [信号] PID...
常用信号:
| 信号 | 编号 | 说明 |
|---|---|---|
SIGHUP | 1 | 挂起,重新加载配置 |
SIGINT | 2 | 中断(Ctrl+C) |
SIGQUIT | 3 | 退出 |
SIGKILL | 9 | 强制终止 |
SIGTERM | 15 | 终止(默认) |
SIGSTOP | 19 | 停止 |
SIGCONT | 18 | 继续 |
SIGUSR1 | 10 | 用户定义 1 |
SIGUSR2 | 12 | 用户定义 2 |
示例:
# 终止进程(发送 SIGTERM)
$ kill 1234
# 强制终止
$ kill -9 1234
$ kill -KILL 1234
# 重新加载配置
$ kill -HUP 1234
$ kill -1 1234
# 优雅终止
$ kill -TERM 1234
$ kill -15 1234
# 停止进程
$ kill -STOP 1234
# 继续进程
$ kill -CONT 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
...
killall - 按名称终止进程
功能:按进程名终止进程
语法:
killall [选项] 进程名
常用参数:
-i:交互式确认-e:精确匹配-I:忽略大小写-u:按用户-s:指定信号
示例:
# 终止所有 nginx 进程
$ sudo killall nginx
# 交互式终止
$ sudo killall -i python
# 忽略大小写
$ sudo killall -I NGINX
# 发送特定信号
$ sudo killall -HUP nginx
# 只终止特定用户的进程
$ sudo killall -u www-data php-fpm
pkill - 按模式终止进程
功能:根据模式查找并终止进程
语法:
pkill [选项] 模式
常用参数:
-f:匹配完整命令-u:按用户-I:忽略大小写-signal:指定信号
示例:
# 终止匹配进程
$ pkill firefox
# 匹配完整命令
$ pkill -f "python app.py"
# 忽略大小写
$ pkill -I FIREFOX
# 发送特定信号
$ pkill -HUP nginx
# 按用户终止
$ pkill -u username
nice - 以调整优先级运行程序
功能:以指定的优先级启动进程
语法:
nice [选项] 命令
常用参数:
-n <值>:指定优先级(-20 到 19)
示例:
# 以默认优先级运行
$ nice -n 0 long-running-task
# 以高优先级运行(需要 root)
$ sudo nice -n -10 important-task
# 以低优先级运行
$ nice -n 19 backup-task
# 优先级范围:-20(最高)到 19(最低)
# 普通用户只能降低优先级(增加 nice 值)
renice - 调整运行中进程的优先级
功能:修改已运行进程的优先级
语法:
renice [选项] 优先级 [[-p] PID...]
示例:
# 调整进程优先级
$ sudo renice -n 10 -p 1234
1234 (old priority 0) (new priority 10)
# 调整多个进程
$ sudo renice -n 5 -p 1234 -p 5678
# 调整用户所有进程
$ sudo renice -n 10 -u username
# 调整组所有进程
$ sudo renice -n 10 -g groupname
# 查看当前优先级
$ ps -o pid,nice,command
PID NI COMMAND
1234 0 nginx
5678 10 backup
4.3 后台作业管理
后台运行(&)
功能:在后台运行命令
示例:
# 在后台运行命令
$ long-task &
[1] 12345
# 运行多个后台任务
$ task1 & task2 & task3 &
# 查看所有后台作业
$ jobs
[1] Running long-task &
[2] Running task2 &
[3] Running task3 &
jobs - 显示作业状态
功能:显示 shell 作业状态
语法:
jobs [选项]
常用参数:
-l:显示 PID-r:只显示运行中的-s:只显示停止的
示例:
# 查看作业
$ jobs
[1] Running vim &
[2]- Stopped cat
[3]+ Running tail -f log &
# 显示 PID
$ jobs -l
[1] 12345 Running vim &
fg - 将作业移到前台
功能:将后台作业移到前台
语法:
fg [作业号]
示例:
# 将作业 1 移到前台
$ fg %1
# 移到前台(默认最近作业)
$ fg
# 输出:
vim
# 现在 vim 在前台运行
bg - 将作业移到后台
功能:将停止的作业移到后台继续运行
语法:
bg [作业号]
示例:
# 前台按 Ctrl+Z 停止作业
$ cat
^Z
[1]+ Stopped cat
# 在后台继续运行
$ bg %1
[1]+ cat &
# 查看
$ jobs
[1]+ Running cat &
nohup - 忽略挂起信号运行
功能:运行命令忽略 SIGHUP 信号(退出终端后继续运行)
语法:
nohup 命令 [参数]
示例:
# 运行命令,输出到 nohup.out
$ nohup long-task &
nohup: ignoring input and appending output to 'nohup.out'
# 指定输出文件
$ nohup long-task > output.log 2>&1 &
# 查看输出
$ tail -f nohup.out
# 查看进程
$ ps aux | grep long-task
4.4 系统资源监控
iotop - I/O 监控工具
功能:显示每个进程的 I/O 使用情况
语法:
iotop [选项]
示例:
# 启动 iotop
$ sudo iotop
# 只显示 I/O 进程
$ sudo iotop -o
# 批量模式
$ sudo iotop -b -n 5
# ⚠️ 需要 root 权限和 Python 支持
nethogs - 网络带宽监控
功能:按进程显示网络带宽使用
语法:
nethogs [选项] [设备]
示例:
# 监控所有设备
$ sudo nethogs
# 监控特定设备
$ sudo nethogs eth0
# ⚠️ 需要先安装
5. 网络操作命令
5.1 网络配置命令
ip - 显示和操作路由、网络设备、接口和隧道
功能:现代网络配置工具(替代 ifconfig)
语法:
ip [选项] 对象 [命令]
常用命令:
显示 IP 地址:
# 显示所有接口
$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 08:00:27:12:34:56 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.100/24 brd 192.168.1.255 scope global dynamic eth0
valid_lft 86399sec preferred_lft 86399sec
# 简短显示
$ ip -br addr
lo UNKNOWN 127.0.0.1/8 ::1/128
eth0 UP 192.168.1.100/24
显示路由:
# 显示路由表
$ ip route
default via 192.168.1.1 dev eth0 proto dhcp src 192.168.1.100 metric 100
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100
# 显示统计
$ ip -s route
显示邻居:
# 显示 ARP 缓存
$ ip neigh
192.168.1.1 dev eth0 lladdr 00:11:22:33:44:55 REACHABLE
192.168.1.50 dev eth0 lladdr aa:bb:cc:dd:ee:ff STALE
配置接口:
# 启用/禁用接口
$ sudo ip link set eth0 up
$ sudo ip link set eth0 down
# 添加 IP 地址
$ sudo ip addr add 192.168.1.100/24 dev eth0
# 删除 IP 地址
$ sudo ip addr del 192.168.1.100/24 dev eth0
# 添加路由
$ sudo ip route add 10.0.0.0/8 via 192.168.1.1
# 删除路由
$ sudo ip route del 10.0.0.0/8
# 添加默认网关
$ sudo ip route add default via 192.168.1.1
ifconfig - 配置网络接口(已废弃)
功能:旧版网络配置工具
语法:
ifconfig [接口] [选项]
示例:
# 显示所有接口
$ ifconfig -a
# 显示特定接口
$ ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.100 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::a00:27ff:fe12:3456 prefixlen 64 scopeid 0x20<link>
ether 08:00:27:12:34:56 txqueuelen 1000 (Ethernet)
# ⚠️ 注意:已废弃,建议使用 ip 命令
route - 显示和操作 IP 路由表
功能:查看和操作路由表
语法:
route [选项]
示例:
# 显示路由表
$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 100 0 0 eth0
192.168.1.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
# ⚠️ 注意:已废弃,建议使用 ip route
netstat - 显示网络连接、路由表等
功能:显示网络统计信息
语法:
netstat [选项]
常用选项:
# 显示所有连接
$ netstat -a
# 显示 TCP 连接
$ netstat -at
# 显示 UDP 连接
$ netstat -au
# 显示监听端口
$ netstat -l
# 显示数字格式
$ netstat -n
# 显示进程
$ netstat -p
# 显示统计
$ netstat -s
# 组合使用
$ netstat -tlnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1234/sshd
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 5678/nginx
# ⚠️ 注意:已废弃,建议使用 ss 命令
ss - 显示 socket 统计
功能:netstat 的现代替代品
语法:
ss [选项]
常用选项:
| 参数 | 说明 | 示例 |
|---|---|---|
-t | TCP 连接 | ss -t |
-u | UDP 连接 | ss -u |
-l | 监听端口 | ss -l |
-n | 数字格式 | ss -n |
-p | 显示进程 | ss -p |
-a | 所有连接 | ss -a |
-s | 统计信息 | ss -s |
示例:
# 显示所有 TCP 连接
$ ss -t
# 显示监听端口
$ ss -tln
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 511 0.0.0.0:80 0.0.0.0:*
# 显示进程
$ ss -tlnp
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1234,fd=3))
# 显示特定端口
$ ss -tlnp | grep :80
# 显示统计
$ ss -s
Total: 1234 (kernel 4567)
TCP: 567 (estab 234, closed 123, orphaned 0, synrecv 0, timewait 0)
5.2 网络测试命令
ping - 测试网络连接
功能:发送 ICMP ECHO_REQUEST 到网络主机
语法:
ping [选项] 主机
常用参数:
| 参数 | 说明 | 示例 |
|---|---|---|
-c <次数> | 发送次数 | ping -c 4 host |
-i <秒> | 间隔时间 | ping -i 0.5 host |
-s <大小> | 包大小 | ping -s 1000 host |
-W <秒> | 超时时间 | ping -W 2 host |
-f | 洪水模式 | ping -f host |
示例:
# ping 主机
$ ping google.com
PING google.com (142.250.185.46) 56(84) bytes of data.
64 bytes from lga25s71-in-f14.1e100.net (142.250.185.46): icmp_seq=1 ttl=116 time=12.3 ms
64 bytes from lga25s71-in-f14.1e100.net (142.250.185.46): icmp_seq=2 ttl=116 time=11.8 ms
# 发送 4 次后停止
$ ping -c 4 google.com
PING google.com (142.250.185.46) 56(84) bytes of data.
64 bytes from lga25s71-in-f14.1e100.net (142.250.185.46): icmp_seq=1 ttl=116 time=12.1 ms
64 bytes from lga25s71-in-f14.1e100.net (142.250.185.46): icmp_seq=2 ttl=116 time=11.9 ms
64 bytes from lga25s71-in-f14.1e100.net (142.250.185.46): icmp_seq=3 ttl=116 time=12.0 ms
64 bytes from lga25s71-in-f14.1e100.net (142.250.185.46): icmp_seq=4 ttl=116 time=12.2 ms
--- google.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 11.876/12.051/12.234/0.123 ms
traceroute - 跟踪数据包路径
功能:显示数据包到网络主机的路径
语法:
traceroute [选项] 主机
常用参数:
-I:使用 ICMP-T:使用 TCP-U:使用 UDP-m <TTL>:最大跳数-q <数量>:每跳查询数
示例:
# 跟踪到主机的路径
$ traceroute google.com
traceroute to google.com (142.250.185.46), 30 hops max, 60 byte packets
1 192.168.1.1 (192.168.1.1) 2.345 ms 2.123 ms 2.234 ms
2 10.0.0.1 (10.0.0.1) 10.234 ms 10.123 ms 10.345 ms
3 72.14.215.85 (72.14.215.85) 15.234 ms 15.123 ms 15.345 ms
...
# 使用 ICMP
$ traceroute -I google.com
# 限制跳数
$ traceroute -m 15 google.com
mtr - 网络诊断工具
功能:结合 ping 和 traceroute 功能
语法:
mtr [选项] 主机
示例:
# 交互模式
$ mtr google.com
# 报告模式
$ mtr -r google.com
Start: 2024-01-15T10:30:00+0000
HOST: server Loss% Snt Last Avg Best Wrst StDev
1.|-- 192.168.1.1 0.0% 10 2.3 2.1 1.8 2.5 0.2
2.|-- 10.0.0.1 0.0% 10 10.2 10.1 9.8 10.5 0.2
3.|-- 72.14.215.85 0.0% 10 15.2 15.1 14.8 15.5 0.2
# 发送指定包数
$ mtr -c 10 google.com
nslookup - 查询 DNS
功能:查询 DNS 获取域名信息
语法:
nslookup [选项] [域名] [服务器]
示例:
# 查询域名
$ nslookup google.com
Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
Name: google.com
Address: 142.250.185.46
Name: google.com
Address: 2607:f8b0:4004:800::200e
# 查询特定记录类型
$ nslookup -type=MX google.com
$ nslookup -type=NS google.com
$ nslookup -type=TXT google.com
# 指定 DNS 服务器
$ nslookup google.com 8.8.8.8
dig - DNS 查询工具
功能:强大的 DNS 查询工具
语法:
dig [选项] [域名] [类型]
常用类型:
A:IPv4 地址AAAA:IPv6 地址MX:邮件交换NS:名称服务器TXT:文本记录CNAME:别名
示例:
# 查询 A 记录
$ dig google.com
# 查询 MX 记录
$ dig google.com MX
# 查询 NS 记录
$ dig google.com NS
# 简短输出
$ dig +short google.com
142.250.185.46
# 查询特定 DNS 服务器
$ dig @8.8.8.8 google.com
# 反向查询
$ dig -x 8.8.8.8
# 批量查询
$ dig -f domains.txt
5.3 网络传输命令
curl - 数据传输工具
功能:使用各种协议传输数据
语法:
curl [选项] URL
常用参数:
| 参数 | 说明 | 示例 |
|---|---|---|
-O | 保存为原文件名 | curl -O url |
-o | 保存为指定文件名 | curl -o file url |
-L | 跟随重定向 | curl -L url |
-I | 只显示头部 | curl -I url |
-X | 指定请求方法 | curl -X POST |
-H | 添加头部 | curl -H "Header" |
-d | POST 数据 | curl -d "data" |
-u | 用户认证 | curl -u user:pass |
-k | 忽略证书验证 | curl -k url |
-v | 详细模式 | curl -v url |
示例:
# 下载文件
$ curl -O https://example.com/file.zip
# 下载并重命名
$ curl -o myfile.zip https://example.com/file.zip
# 跟随重定向
$ curl -L https://example.com
# 查看响应头
$ curl -I https://example.com
HTTP/1.1 200 OK
Date: Mon, 15 Jan 2024 10:30:00 GMT
Content-Type: text/html
Content-Length: 1234
# GET 请求
$ curl https://api.example.com/users
# POST 请求
$ curl -X POST -d "name=value" https://api.example.com/users
# 发送 JSON
$ curl -X POST -H "Content-Type: application/json" \
-d '{"name":"John","age":30}' \
https://api.example.com/users
# 带认证的请求
$ curl -u username:password https://api.example.com/users
# 使用 Bearer Token
$ curl -H "Authorization: Bearer token123" https://api.example.com/users
# 上传文件
$ curl -X POST -F "file=@localfile.txt" https://example.com/upload
# 测试 API
$ curl -v https://api.example.com/users
wget - 网络下载工具
功能:从网络下载文件
语法:
wget [选项] URL
常用参数:
| 参数 | 说明 | 示例 |
|---|---|---|
-O | 保存为指定文件名 | wget -O file url |
-c | 断点续传 | wget -c url |
-r | 递归下载 | wget -r url |
-l | 递归深度 | wget -r -l 2 url |
-p | 下载所有资源 | wget -p url |
-q | 安静模式 | wget -q url |
-b | 后台下载 | wget -b url |
示例:
# 下载文件
$ wget https://example.com/file.zip
# 下载并重命名
$ wget -O myfile.zip https://example.com/file.zip
# 断点续传
$ wget -c https://example.com/largefile.zip
# 递归下载整个网站
$ wget -r https://example.com
# 限制深度
$ wget -r -l 2 https://example.com
# 下载页面所有资源
$ wget -p https://example.com/page.html
# 后台下载
$ wget -b https://example.com/largefile.zip
Continuing in background, pid 12345.
Output will be written to 'wget-log'.
# 限速下载
$ wget --limit-rate=100k https://example.com/file.zip
scp - 安全复制
功能:通过 SSH 安全复制文件
语法:
scp [选项] 源文件 目标文件
常用参数:
-r:递归复制目录-P:指定端口-p:保留文件属性-C:压缩传输-i:指定密钥
示例:
# 本地复制到远程
$ scp file.txt user@remote:/path/to/destination
$ scp file.txt user@192.168.1.100:/home/user/
# 远程复制到本地
$ scp user@remote:/path/to/file.txt /local/path/
# 复制目录
$ scp -r directory/ user@remote:/path/
# 指定端口
$ scp -P 2222 file.txt user@remote:/path/
# 使用密钥
$ scp -i ~/.ssh/id_rsa file.txt user@remote:/path/
# 保留属性
$ scp -p file.txt user@remote:/path/
# 压缩传输
$ scp -C largefile.tar.gz user@remote:/path/
rsync - 远程同步工具
功能:快速增量文件同步工具
语法:
rsync [选项] 源 目标
常用参数:
| 参数 | 说明 | 示例 |
|---|---|---|
-a | 归档模式 | rsync -a src dst |
-v | 详细模式 | rsync -v src dst |
-z | 压缩传输 | rsync -z src dst |
-P | 显示进度 | rsync -P src dst |
-e | 指定 shell | rsync -e ssh |
--delete | 删除目标多余文件 | rsync --delete |
--exclude | 排除文件 | rsync --exclude |
示例:
# 本地同步
$ rsync -av source/ destination/
# 远程同步(拉取)
$ rsync -avz user@remote:/remote/path /local/path
# 远程同步(推送)
$ rsync -avz /local/path user@remote:/remote/path
# 使用 SSH
$ rsync -avz -e ssh source/ user@remote:/destination/
# 显示进度
$ rsync -avzP source/ user@remote:/destination/
# 删除目标多余文件
$ rsync -av --delete source/ destination/
# 排除文件
$ rsync -av --exclude '*.log' --exclude 'tmp/' source/ destination/
# 带宽限制
$ rsync -avz --bwlimit=1000 source/ destination/
# 干运行(测试)
$ rsync -avn source/ destination/
5.4 端口和连接命令
lsof - 列出打开的文件
功能:列出打开的文件和进程
语法:
lsof [选项]
网络相关:
# 列出所有网络连接
$ lsof -i
# 列出 TCP 连接
$ lsof -i tcp
# 列出 UDP 连接
$ lsof -i udp
# 列出特定端口
$ lsof -i :80
$ lsof -i :443
# 列出监听端口
$ lsof -i -sTCP:LISTEN
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 1234 root 6u IPv4 12345 0t0 TCP *:http (LISTEN)
nginx 1234 root 7u IPv4 12346 0t0 TCP *:https (LISTEN)
# 查看进程打开的文件
$ lsof -p 1234
# 查看用户打开的文件
$ lsof -u username
# 查看特定文件
$ lsof /var/log/syslog
nc - 网络工具
功能:读写网络连接(netcat)
语法:
nc [选项] 主机 端口
常用参数:
-l:监听模式-p:指定端口-z:扫描模式-v:详细模式-w:超时时间
示例:
# 连接到远程主机
$ nc example.com 80
# 监听端口
$ nc -l -p 1234
# 端口扫描
$ nc -zv example.com 20-80
# 文件传输(接收端)
$ nc -l -p 1234 > received_file
# 文件传输(发送端)
$ nc example.com 1234 < file.txt
# 聊天服务器
# 服务器端:nc -l -p 1234
# 客户端:nc server_ip 1234
# 测试端口连通性
$ nc -zv 192.168.1.1 22
Connection to 192.168.1.1 22 port [tcp/ssh] succeeded!
5.5 防火墙命令
iptables - IPv4 数据包过滤
功能:配置 IPv4 防火墙规则
语法:
iptables [选项] 链 规则
基本链:
INPUT:入站流量OUTPUT:出站流量FORWARD:转发流量
常用操作:
# 查看规则
$ sudo iptables -L
$ sudo iptables -L -n -v
# 查看特定链
$ sudo iptables -L INPUT
# 添加规则
$ sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
$ sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# 插入规则
$ sudo iptables -I INPUT 1 -p tcp --dport 443 -j ACCEPT
# 删除规则
$ sudo iptables -D INPUT 1
# 清空链
$ sudo iptables -F INPUT
# 设置默认策略
$ sudo iptables -P INPUT DROP
$ sudo iptables -P FORWARD DROP
$ sudo iptables -P OUTPUT ACCEPT
# 保存规则(Debian/Ubuntu)
$ sudo iptables-save > /etc/iptables/rules.v4
# 保存规则(RHEL/CentOS)
$ sudo service iptables save
常用规则示例:
# 允许 SSH
$ sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 允许 HTTP/HTTPS
$ sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
$ sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# 允许已建立的连接
$ sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 允许本地回环
$ sudo iptables -A INPUT -i lo -j ACCEPT
# 阻止特定 IP
$ sudo iptables -A INPUT -s 192.168.1.100 -j DROP
# 阻止端口扫描
$ sudo iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
firewalld - 动态防火墙管理
功能:动态防火墙管理器
语法:
firewall-cmd [选项]
常用命令:
# 查看状态
$ sudo firewall-cmd --state
# 查看区域
$ sudo firewall-cmd --get-active-zones
# 查看服务
$ sudo firewall-cmd --list-services
# 添加服务
$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https
# 添加端口
$ sudo firewall-cmd --permanent --add-port=8080/tcp
# 移除服务
$ sudo firewall-cmd --permanent --remove-service=http
# 重新加载
$ sudo firewall-cmd --reload
# 查看帮助
$ sudo firewall-cmd --help
ufw - 简单防火墙
功能:Uncomplicated Firewall
语法:
ufw [选项] 命令
常用命令:
# 启用防火墙
$ sudo ufw enable
# 禁用防火墙
$ sudo ufw disable
# 查看状态
$ sudo ufw status
$ sudo ufw status verbose
# 允许服务
$ sudo ufw allow ssh
$ sudo ufw allow http
$ sudo ufw allow https
# 允许端口
$ sudo ufw allow 22
$ sudo ufw allow 80/tcp
# 允许 IP 范围
$ sudo ufw allow from 192.168.1.0/24
# 拒绝访问
$ sudo ufw deny 8080
# 删除规则
$ sudo ufw delete allow 22
# 重置
$ sudo ufw reset
6. 文本处理命令
6.1 文本搜索命令
grep - 文本搜索工具
功能:使用正则表达式搜索文本
语法:
grep [选项] 模式 [文件...]
常用参数:
| 参数 | 说明 | 示例 |
|---|---|---|
-i | 忽略大小写 | grep -i pattern |
-v | 反向匹配 | grep -v pattern |
-r | 递归搜索 | grep -r pattern |
-n | 显示行号 | grep -n pattern |
-c | 计数 | grep -c pattern |
-l | 只显示文件名 | grep -l pattern |
-A <N> | 显示后 N 行 | grep -A 2 pattern |
-B <N> | 显示前 N 行 | grep -B 2 pattern |
-C <N> | 显示前后 N 行 | grep -C 2 pattern |
-E | 扩展正则 | grep -E pattern |
示例:
# 基本搜索
$ grep "error" /var/log/syslog
# 忽略大小写
$ grep -i "error" /var/log/syslog
# 递归搜索目录
$ grep -r "TODO" /home/user/projects
# 显示行号
$ grep -n "function" script.js
# 统计匹配行数
$ grep -c "error" /var/log/syslog
15
# 只显示文件名
$ grep -r "import" *.py
# 显示匹配行及前后 2 行
$ grep -C 2 "error" /var/log/syslog
# 反向匹配(不包含 pattern 的行)
$ grep -v "^#" config.txt
# 使用扩展正则
$ grep -E "error|warning|critical" /var/log/syslog
$ egrep "error|warning" /var/log/syslog
# 正则表达式示例
$ grep "^root" /etc/passwd # 以 root 开头
$ grep "bash$" /etc/passwd # 以 bash 结尾
$ grep "^[0-9]" file.txt # 以数字开头
$ grep -E "^[a-z]{3,5}$" file.txt # 3-5 个小写字母
6.2 文本编辑命令
sed - 流编辑器
功能:对文本进行过滤和转换
语法:
sed [选项] '脚本' [文件...]
常用操作:
替换:
# 替换每行第一个匹配
$ sed 's/old/new/' file.txt
# 替换所有匹配
$ sed 's/old/new/g' file.txt
# 替换特定行
$ sed '1,10s/old/new/g' file.txt
# 直接修改文件
$ sed -i 's/old/new/g' file.txt
# 备份后修改
$ sed -i.bak 's/old/new/g' file.txt
删除:
# 删除空行
$ sed '/^$/d' file.txt
# 删除特定行
$ sed '3d' file.txt # 删除第 3 行
$ sed '1,5d' file.txt # 删除 1-5 行
$ sed '/pattern/d' file.txt # 删除匹配行
插入和追加:
# 在行前插入
$ sed '3i\New line' file.txt
# 在行后追加
$ sed '3a\New line' file.txt
打印:
# 打印特定行
$ sed -n '5p' file.txt
$ sed -n '5,10p' file.txt
$ sed -n '/pattern/p' file.txt
综合示例:
# 替换配置文件中的值
$ sed -i 's/PORT=8080/PORT=3000/' config.env
# 删除注释行和空行
$ sed '/^#/d; /^$/d' config.txt
# 提取特定列
$ sed 's/:.*//' /etc/passwd # 提取用户名
# 多文件处理
$ sed -i 's/old/new/g' *.txt
awk - 文本分析和处理
功能:强大的文本处理和数据提取工具
语法:
awk [选项] '模式 {动作}' [文件...]
内置变量:
| 变量 | 说明 |
|---|---|
$0 | 整行 |
$1, $2... | 第 1、2…列 |
NF | 字段数 |
NR | 行号 |
FS | 输入分隔符 |
OFS | 输出分隔符 |
示例:
# 打印第一列
$ awk '{print $1}' file.txt
# 打印特定列
$ awk -F: '{print $1, $3}' /etc/passwd
root 0
daemon 1
# 条件过滤
$ awk -F: '$3 > 1000 {print $1}' /etc/passwd
# 计算总和
$ awk '{sum+=$1} END {print sum}' numbers.txt
# 统计行数
$ awk 'END {print NR}' file.txt
# 格式化输出
$ awk -F: '{printf "%-20s %5d\n", $1, $3}' /etc/passwd
# 多文件处理
$ awk '{print FILENAME, $0}' file1.txt file2.txt
# 复杂示例:统计日志中各状态码数量
$ awk '{count[$9]++} END {for (code in count) print code, count[code]}' access.log
6.3 文本排序和去重
sort - 排序文本
功能:对文本行进行排序
语法:
sort [选项] [文件...]
常用参数:
| 参数 | 说明 | 示例 |
|---|---|---|
-n | 数字排序 | sort -n |
-r | 反向排序 | sort -r |
-h | 人类可读数字 | sort -h |
-k | 指定列 | sort -k 2 |
-t | 指定分隔符 | sort -t: |
-u | 去重排序 | sort -u |
-f | 忽略大小写 | sort -f |
示例:
# 基本排序
$ sort file.txt
# 数字排序
$ sort -n numbers.txt
1
2
10
100
# 反向排序
$ sort -r file.txt
# 按列排序
$ sort -t: -k 3 /etc/passwd # 按 UID 排序
# 人类可读大小排序
$ du -h | sort -h
# 去重排序
$ sort -u file.txt
# 多列排序
$ sort -t: -k 3,3n -k 1,1 /etc/passwd
uniq - 报告或忽略重复行
功能:过滤相邻的重复行
语法:
uniq [选项]
常用参数:
-c:显示每行出现次数-d:只显示重复行-u:只显示唯一行-i:忽略大小写
示例:
# 去重(需要先排序)
$ sort file.txt | uniq
# 统计出现次数
$ sort file.txt | uniq -c
5 apple
3 banana
7 orange
# 只显示重复行
$ sort file.txt | uniq -d
# 只显示唯一行
$ sort file.txt | uniq -u
cut - 删除文本列
功能:按列提取文本
语法:
cut [选项] [文件...]
常用参数:
-f:选择字段-d:指定分隔符-c:选择字符
示例:
# 提取第一列
$ cut -d: -f 1 /etc/passwd
root
daemon
# 提取多列
$ cut -d: -f 1,3 /etc/passwd
root:0
daemon:1
# 提取字符
$ cut -c 1-5 file.txt
# 提取范围
$ cut -d: -f 1-3 /etc/passwd
paste - 合并文本行
功能:合并文件的对应行
语法:
paste [选项] 文件...
常用参数:
-d:指定分隔符-s:串行合并
示例:
# 合并两个文件
$ paste file1.txt file2.txt
# 指定分隔符
$ paste -d: file1.txt file2.txt
# 串行合并
$ paste -s file.txt
6.4 文本比较命令
diff - 比较文件差异
功能:逐行比较文件差异
语法:
diff [选项] 文件 1 文件 2
常用参数:
| 参数 | 说明 | 示例 |
|---|---|---|
-r | 递归比较目录 | diff -r dir1 dir2 |
-q | 只显示是否不同 | diff -q f1 f2 |
-u | 统一格式 | diff -u f1 f2 |
-c | 上下文格式 | diff -c f1 f2 |
-y | 并排显示 | diff -y f1 f2 |
-i | 忽略大小写 | diff -i f1 f2 |
示例:
# 比较两个文件
$ diff file1.txt file2.txt
2c2
< old line
---
> new line
# 统一格式
$ diff -u file1.txt file2.txt
--- file1.txt 2024-01-15 10:30:00
+++ file2.txt 2024-01-15 10:31:00
@@ -1,5 +1,5 @@
line 1
-old line
+new line
line 3
# 递归比较目录
$ diff -r dir1/ dir2/
# 并排显示
$ diff -y file1.txt file2.txt
line 1 line 1
old line | new line
line 3 line 3
cmp - 逐字节比较文件
功能:逐字节比较文件
语法:
cmp [选项] 文件 1 文件 2
示例:
# 比较文件
$ cmp file1.bin file2.bin
file1.bin file2.bin differ: byte 10, line 1
# 安静模式(只返回退出码)
$ cmp -s file1.bin file2.bin
if [ $? -eq 0 ]; then
echo "Files are identical"
fi
comm - 比较排序文件
功能:比较两个已排序文件的共同行和不同行
语法:
comm [选项] 文件 1 文件 2
示例:
# 比较两个文件
$ comm file1.txt file2.txt
# 输出三列:
# 第 1 列:只在 file1 中的行
# 第 2 列:只在 file2 中的行
# 第 3 列:两个文件都有的行
# 只显示共同行
$ comm -12 file1.txt file2.txt
# 只显示 file1 独有的
$ comm -23 file1.txt file2.txt
# 只显示 file2 独有的
$ comm -13 file1.txt file2.txt
6.5 字符处理命令
wc - 统计字数
功能:统计行数、字数、字节数
语法:
wc [选项] [文件...]
常用参数:
-l:行数-w:字数-c:字节数-m:字符数-L:最长行长度
示例:
# 统计所有
$ wc file.txt
10 50 300 file.txt
# 10 行,50 字,300 字节
# 只统计行数
$ wc -l file.txt
10 file.txt
# 统计多个文件
$ wc -l *.txt
# 管道输入
$ cat file.txt | wc -l
10
tr - 转换或删除字符
功能:转换或删除字符
语法:
tr [选项] 集合 1 [集合 2]
示例:
# 小写转大写
$ echo "hello" | tr 'a-z' 'A-Z'
HELLO
# 删除字符
$ echo "hello" | tr -d 'l'
heo
# 压缩重复字符
$ echo "aaabbbccc" | tr -s 'a-z'
abc
# 替换换行为空格
$ cat file.txt | tr '\n' ' '
# 生成密码
$ tr -dc 'a-zA-Z0-9' < /dev/urandom | head -c 16
split - 分割文件
功能:将大文件分割成小文件
语法:
split [选项] [输入文件] [输出前缀]
常用参数:
-b:按字节分割-l:按行分割-d:使用数字后缀
示例:
# 按大小分割
$ split -b 10M largefile.tar.gz part_
# 按行数分割
$ split -l 1000 largefile.txt part_
# 使用数字后缀
$ split -d -l 1000 file.txt part_
# 分割后合并
$ cat part_* > originalfile
join - 连接文件的共同字段
功能:基于共同字段连接两个文件
语法:
join [选项] 文件 1 文件 2
示例:
# 连接两个文件
$ join file1.txt file2.txt
# 指定字段
$ join -1 2 -2 1 file1.txt file2.txt
# 指定分隔符
$ join -t: file1.txt file2.txt
7. 压缩与归档命令
7.1 tar - 归档工具
功能:创建或提取归档文件
语法:
tar [选项] [归档文件] [文件...]
常用选项:
| 选项 | 说明 | 记忆 |
|---|---|---|
-c | 创建归档 | create |
-x | 提取归档 | extract |
-t | 列出内容 | table |
-f | 指定文件 | file |
-v | 详细模式 | verbose |
-z | gzip 压缩 | - |
-j | bzip2 压缩 | - |
-J | xz 压缩 | - |
-C | 指定目录 | change |
示例:
# 创建归档
$ tar -cvf archive.tar file1.txt file2.txt
file1.txt
file2.txt
# 创建目录归档
$ tar -cvf backup.tar /home/user/
# gzip 压缩
$ tar -czvf archive.tar.gz /home/user/
# bzip2 压缩
$ tar -cjvf archive.tar.bz2 /home/user/
# xz 压缩
$ tar -cJvf archive.tar.xz /home/user/
# 查看归档内容
$ tar -tvf archive.tar.gz
# 提取归档
$ tar -xvf archive.tar
# 提取到指定目录
$ tar -xvf archive.tar -C /path/to/extract
# 提取特定文件
$ tar -xvf archive.tar file1.txt
# 提取 gzip 压缩
$ tar -xzvf archive.tar.gz
# 提取 bzip2 压缩
$ tar -xjvf archive.tar.bz2
# 排除文件
$ tar -czvf backup.tar.gz --exclude='*.log' --exclude='tmp/' /home/user/
7.2 gzip - 压缩工具
功能:GNU 压缩工具
语法:
gzip [选项] 文件...
常用参数:
-d:解压缩-k:保留原文件-r:递归压缩-9:最大压缩-1:最快压缩
示例:
# 压缩文件
$ gzip file.txt
# 生成 file.txt.gz
# 保留原文件
$ gzip -k file.txt
# 解压缩
$ gzip -d file.txt.gz
$ gunzip file.txt.gz
# 递归压缩
$ gzip -r directory/
# 查看压缩信息
$ gzip -l file.txt.gz
7.3 bzip2 - 压缩工具
功能:Burrows-Wheeler 压缩工具
语法:
bzip2 [选项] 文件...
示例:
# 压缩文件
$ bzip2 file.txt
# 生成 file.txt.bz2
# 保留原文件
$ bzip2 -k file.txt
# 解压缩
$ bzip2 -d file.txt.bz2
$ bunzip2 file.txt.bz2
# 测试完整性
$ bzip2 -t file.txt.bz2
7.4 xz - 压缩工具
功能:高压缩比工具
语法:
xz [选项] 文件...
示例:
# 压缩文件
$ xz file.txt
# 生成 file.txt.xz
# 保留原文件
$ xz -k file.txt
# 解压缩
$ xz -d file.txt.xz
$ unxz file.txt.xz
# 最大压缩
$ xz -9 file.txt
7.5 zip/unzip - 压缩工具
功能:ZIP 格式压缩工具
语法:
zip [选项] 压缩包 文件...
unzip [选项] 压缩包
示例:
# 压缩文件
$ zip archive.zip file1.txt file2.txt
# 压缩目录
$ zip -r archive.zip directory/
# 排除文件
$ zip -r archive.zip directory/ -x "*.log" -x "tmp/*"
# 解压文件
$ unzip archive.zip
# 解压到指定目录
$ unzip archive.zip -d /path/to/extract
# 查看内容
$ unzip -l archive.zip
# 解压特定文件
$ unzip archive.zip file1.txt
8. 高级技巧与最佳实践
8.1 管道(|)的高级应用
功能:将一个命令的输出作为另一个命令的输入
示例:
# 基本管道
$ ls -l | grep ".txt"
# 多个管道组合
$ ps aux | grep nginx | grep -v grep | awk '{print $2}'
# 查找最大的 10 个文件
$ find /home -type f -exec du -h {} + | sort -hr | head -10
# 统计代码行数
$ find . -name "*.py" -exec cat {} + | wc -l
# 实时监控日志中的错误
$ tail -f /var/log/syslog | grep --line-buffered "error"
# 提取 IP 地址并排序
$ cat access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -10
8.2 重定向技巧
标准流:
0:标准输入(stdin)1:标准输出(stdout)2:标准错误(stderr)
示例:
# 重定向输出
$ command > output.txt
$ command >> output.txt # 追加
# 重定向输入
$ command < input.txt
# 合并标准输出和错误
$ command > output.txt 2>&1
$ command &> output.txt # Bash 4+
# 丢弃输出
$ command > /dev/null 2>&1
$ command &> /dev/null
# 只丢弃错误
$ command 2>/dev/null
# 只保留错误
$ command >/dev/null 2>&1
$ command 2>&1 1>/dev/null
# Here 文档
$ cat << EOF > file.txt
Line 1
Line 2
EOF
# Here 字符串
$ grep "pattern" <<< "search in this string"
8.3 命令组合
示例:
# 顺序执行(不管成功与否)
$ command1; command2
# 成功则执行(&&)
$ command1 && command2
$ mkdir -p /path/to/dir && cd /path/to/dir
# 失败则执行(||)
$ command1 || command2
$ cd /backup || exit 1
# 组合使用
$ mkdir backup && cp -r data backup || echo "Backup failed"
# 条件执行
$ test -f file.txt && cat file.txt || echo "File not found"
8.4 命令替换
示例:
# 命令替换
$ current_date=$(date +%Y-%m-%d)
$ current_date=`date +%Y-%m-%d` # 旧语法
# 在命令中使用
$ echo "Today is $(date)"
$ backup_file="backup_$(date +%Y%m%d).tar.gz"
$ tar -czf "$backup_file" /data/
# 嵌套使用
$ echo "Files: $(ls -1 | wc -l)"
8.5 别名和函数
别名:
# 创建别名
$ alias ll='ls -alF'
$ alias la='ls -A'
$ alias rm='rm -i'
$ alias ..='cd ..'
$ alias update='sudo apt update && sudo apt upgrade -y'
# 查看别名
$ alias
# 删除别名
$ unalias rm
# 永久保存(添加到 ~/.bashrc)
$ echo "alias ll='ls -alF'" >> ~/.bashrc
$ source ~/.bashrc
函数:
# 简单函数
$ mkcd() { mkdir -p "$1" && cd "$1"; }
# 带参数的函数
$ extract() {
if [ -f "$1" ]; then
case "$1" in
*.tar.gz) tar -xzvf "$1" ;;
*.tar.bz2) tar -xjvf "$1" ;;
*.zip) unzip "$1" ;;
*) echo "Unsupported format" ;;
esac
else
echo "File not found"
fi
}
# 查看函数
$ declare -f
# 永久保存(添加到 ~/.bashrc)
8.6 历史命令
示例:
# 查看历史
$ history
$ history 20
# 执行历史命令
$ !123 # 执行第 123 条
$ !! # 执行上一条
$ !ls # 执行最近一条 ls 命令
$ !?pattern # 执行包含 pattern 的最近命令
# 搜索历史
# Ctrl+R 然后输入搜索内容
# 重复执行并替换
$ ^old^new # 将上一条命令的 old 替换为 new
# 使用历史扩展
$ !ls:p # 打印但不执行
$ !ls:* # 所有参数
# 清除历史
$ history -c
$ history -d 123 # 删除特定条目
8.7 脚本编写最佳实践
示例脚本:
#!/bin/bash
# 脚本名称:backup.sh
# 功能:数据备份脚本
# 用法:./backup.sh [目标目录]
set -e # 遇到错误立即退出
set -u # 使用未定义变量时报错
set -o pipefail # 管道中任一命令失败则整个管道失败
# 变量定义
SOURCE_DIR="/data"
DEST_DIR="${1:-/backup}"
DATE=$(date +%Y%m%d_%H%M%S)
LOG_FILE="/var/log/backup.log"
# 函数定义
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*" | tee -a "$LOG_FILE"
}
check_root() {
if [ "$EUID" -ne 0 ]; then
log "Error: Must run as root"
exit 1
fi
}
# 主逻辑
main() {
check_root
log "Starting backup..."
log "Source: $SOURCE_DIR"
log "Destination: $DEST_DIR"
# 创建备份目录
mkdir -p "$DEST_DIR"
# 执行备份
tar -czf "$DEST_DIR/backup_$DATE.tar.gz" \
--exclude='*.log' \
--exclude='tmp/' \
"$SOURCE_DIR"
# 验证备份
if [ -f "$DEST_DIR/backup_$DATE.tar.gz" ]; then
log "Backup completed successfully"
log "Backup file: $DEST_DIR/backup_$DATE.tar.gz"
else
log "Error: Backup failed"
exit 1
fi
# 清理 7 天前的备份
find "$DEST_DIR" -name "backup_*.tar.gz" -mtime +7 -delete
log "Old backups cleaned"
}
# 执行主函数
main "$@"
8.8 性能优化建议
# 使用 find 而不是 ls 处理大量文件
$ find . -name "*.txt" -delete # 比 ls | xargs rm 快
# 使用 xargs 批量处理
$ find . -name "*.log" | xargs -n 100 rm # 每 100 个执行一次
# 使用 -print0 和 xargs -0 处理特殊字符
$ find . -name "*.txt" -print0 | xargs -0 rm
# 并行处理
$ find . -name "*.log" | parallel rm
# 避免不必要的子 shell
$ (cat file1; cat file2) > combined # 慢
$ cat file1 file2 > combined # 快
8.9 安全注意事项
# ⚠️ 危险操作警告
# 永远不要:
rm -rf /
rm -rf /*
:(){ :|:& };: # fork 炸弹
# 谨慎操作:
chmod -R 777 / # 开放所有权限
chown -R root:root / # 改变所有文件所有者
dd if=/dev/zero of=/dev/sda # 清空磁盘
# 安全实践:
# 1. 执行 rm -rf 前先用 ls 确认
# 2. 使用 -i 选项进行交互式删除
# 3. 重要操作前先备份
# 4. 不要随意运行不明脚本
# 5. 限制 sudo 使用
# 6. 定期更新系统
# 7. 配置防火墙
# 8. 监控日志文件
9. 附录
9.1 常用命令速查表
文件操作
| 命令 | 功能 | 常用参数 |
|---|---|---|
ls | 列出文件 | -l, -a, -h |
cd | 切换目录 | - |
cp | 复制 | -r, -p, -i |
mv | 移动/重命名 | -i, -v |
rm | 删除 | -r, -f, -i |
mkdir | 创建目录 | -p, -v |
chmod | 修改权限 | - |
chown | 修改所有者 | -R |
文本处理
| 命令 | 功能 | 常用参数 |
|---|---|---|
cat | 显示文件 | -n, -E |
less | 分页查看 | -N, -R |
grep | 搜索 | -i, -r, -v |
sed | 流编辑 | -i, s/// |
awk | 文本分析 | -F |
sort | 排序 | -n, -r, -u |
uniq | 去重 | -c, -d |
系统管理
| 命令 | 功能 | 常用参数 |
|---|---|---|
ps | 进程状态 | aux, -ef |
top | 实时监控 | - |
kill | 终止进程 | -9, -15 |
df | 磁盘空间 | -h, -T |
du | 目录大小 | -sh, --max-depth |
free | 内存使用 | -h, -m |
网络
| 命令 | 功能 | 常用参数 |
|---|---|---|
ip | 网络配置 | addr, route |
ss | socket 统计 | -tlnp |
ping | 测试连接 | -c |
curl | 传输数据 | -O, -L, -X |
ssh | 远程登录 | -p, -i |
scp | 安全复制 | -r, -P |
9.2 命令分类索引
按功能分类
文件管理:ls, cd, pwd, cp, mv, rm, mkdir, rmdir, cat, less, more, head, tail, find, locate, chmod, chown, ln
系统管理:uname, hostname, uptime, top, htop, df, du, mount, umount, free, vmstat, useradd, usermod, passwd, sudo, systemctl
进程管理:ps, pgrep, pidof, kill, killall, pkill, nice, renice, jobs, fg, bg, nohup
网络操作:ip, ifconfig, route, netstat, ss, ping, traceroute, curl, wget, ssh, scp, rsync, iptables
文本处理:cat, grep, sed, awk, sort, uniq, cut, paste, diff, cmp, wc, tr
压缩归档:tar, gzip, gunzip, bzip2, xz, zip, unzip
帮助系统:man, help, info, whatis, apropos
9.3 总结与最佳实践清单
日常使用最佳实践
文件管理:
- 使用
ls -lh查看文件 - 删除前先用
ls确认 - 重要文件定期备份
- 使用版本控制管理配置
系统管理:
- 定期更新系统
- 监控系统资源使用
- 清理日志和临时文件
- 配置自动备份
安全实践:
- 不使用 root 日常操作
- 配置 SSH 密钥认证
- 启用防火墙
- 定期审查权限
- 监控安全日志
性能优化:
- 使用合适的工具处理大数据
- 避免在循环中调用外部命令
- 使用管道组合简单命令
- 定期清理无用文件
脚本编写:
- 添加 shebang 和注释
- 使用
set -euo pipefail - 验证输入参数
- 处理错误情况
- 记录日志
文档版本:1.0.0
最后更新:2026-01
适用系统:Linux (所有发行版)
目标读者:系统管理员、开发人员

2400

被折叠的 条评论
为什么被折叠?



