Linux命令命名由来详解
了解Unix/Linux命令的名称来源,帮助记忆和理解
1. 文件操作命令
ls - 列出目录内容
这条命令的意思是:"列出当前目录下有哪些文件或文件夹。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
ls |
list | 列出目录内容 |
常用命令示例:
# 基本用法:列出当前目录文件
ls
# 列出所有文件(包括隐藏文件,隐藏文件以 . 开头)
ls -a
# 详细列表模式:显示权限、大小、修改时间
ls -l
# 显示文件大小(人类可读格式,如 KB、MB)
ls -lh
# 按文件大小排序(最大的在前面)
ls -lS
# 按修改时间排序(最新的在前面)
ls -lt
# 显示目录信息而不是目录内容
ls -ld /etc
# 递归列出所有子目录
ls -R
适用场景: 查看文件夹里有什么文件,是最常用的命令之一。
cd - 切换目录
这条命令的意思是:"从当前位置跳转到另一个目录。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
cd |
change directory | 切换当前工作目录 |
常用命令示例:
# 进入根目录
cd /
# 进入用户主目录(家目录)
cd ~
# 或直接
cd
# 进入上一级目录
cd ..
# 进入上两级目录
cd ../..
# 返回刚才所在的目录
cd -
# 进入指定目录
cd /etc/sysconfig
# 使用环境变量快速进入常用目录
cd $ORACLE_HOME
适用场景: 进入某个目录继续操作,比如 cd /etc 进入配置目录。
cp - 复制文件
这条命令的意思是:"把一个文件复制一份,产生一个新文件。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
cp |
copy | 复制文件或目录 |
常用命令示例:
# 复制文件
cp source.txt dest.txt
# 复制到指定目录
cp source.txt /backup/
# 复制目录(-r 递归复制整个目录)
cp -r /source_dir /backup/
# 复制时保留文件属性(时间戳、权限等)
cp -p config.conf config.conf.bak
# 复制时显示详细信息
cp -v source.txt /backup/
# 强制覆盖已存在的文件(不提示)
cp -f old.txt new.txt
# 如果目标文件已存在则不覆盖(安全模式)
cp -n source.txt dest.txt
# 复制多个文件到目录
cp file1.txt file2.txt /backup/
# 创建硬链接而不是复制(不占用额外空间)
cp -l source.txt hardlink.txt
# 创建软链接而不是复制
cp -s source.txt symlink.txt
适用场景: 备份文件、制作副本。比如 cp config.conf config.conf.bak。
mv - 移动/重命名
这条命令的意思是:"把文件从一处搬到另一处,或者给文件改个名字。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
mv |
move | 移动或重命名文件 |
常用命令示例:
# 重命名文件
mv oldname.txt newname.txt
# 移动文件到指定目录
mv file.txt /home/user/documents/
# 移动多个文件到目录
mv file1.txt file2.txt /backup/
# 移动并重命名(相当于改了个位置)
mv /old/path/oldname.txt /new/path/newname.txt
# 移动目录
mv /old_dir /new_dir
# 移动时显示详细信息
mv -v source.txt /destination/
# 强制移动(覆盖已存在的文件不提示)
mv -f source.txt /destination/
# 移动前先备份
mv -b source.txt /destination/
适用场景: 整理文件时移动位置,或者修改文件名。
rm - 删除文件
这条命令的意思是:"永久删除一个文件(谨慎使用,无法回收)。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
rm |
remove | 删除文件或目录 |
常用命令示例:
# 删除单个文件(会提示确认)
rm file.txt
# 强制删除文件(不提示)
rm -f file.txt
# 删除目录及目录下所有内容(递归删除)
rm -r /backup_dir
# 删除空目录
rmdir /empty_dir
# 删除文件并显示详细信息
rm -v file.txt
# 删除前先确认(交互模式)
rm -i file.txt
# 删除所有 .log 文件
rm *.log
# 删除以 - 开头的文件(避免被当成选项)
rm -- -file.txt
# 安全删除(多次覆写,防止恢复)
shred -u file.txt
适用场景: 清理不需要的文件。注意:删除后很难恢复。
mkdir - 创建目录
这条命令的意思是:"在当前位置新建一个文件夹。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
mkdir |
make directory | 创建新目录 |
常用命令示例:
# 在当前目录创建目录
mkdir myproject
# 创建多级目录(如果父目录不存在则自动创建)
mkdir -p /home/user/project/src
# 创建目录并设置权限
mkdir -m 755 secure_dir
# 创建目录并显示详细信息
mkdir -v newproject
# 批量创建多个目录
mkdir -p project/{src,dist,test}
适用场景: 新建项目文件夹、整理文件结构时使用。
rmdir - 删除空目录
这条命令的意思是:"删除一个空目录(目录里有文件则无法删除)。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
rmdir |
remove directory | 删除空目录 |
常用命令示例:
# 删除空目录
rmdir empty_dir
# 删除多个空目录
rmdir dir1 dir2 dir3
# 删除目录及父目录(如果删除后父目录也空了)
rmdir -p /home/user/project/backup
# 显示删除详情
rmdir -v myproject
适用场景: 删除确认是空的文件夹(不如 rm -r 常用)。
cat - 查看文件内容
这条命令的意思是:"把整个文件的内容显示在屏幕上。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
cat |
concatenate | 连接并显示文件内容 |
常用命令示例:
# 查看文件全部内容
cat file.txt
# 查看文件并显示行号
cat -n file.txt
# 合并多个文件输出
cat file1.txt file2.txt > combined.txt
# 追加内容到文件
cat >> file.txt << EOF
这是新追加的内容
EOF
# 创建文件并写入内容
cat > newfile.txt << EOF
第一行内容
第二行内容
EOF
# 查看隐藏字符(^M 等)
cat -A file.txt
# 显示 $ 符号表示行尾(查看行结束符)
cat -e file.txt
# 显示 Tab 字符
cat -T file.txt
适用场景: 查看小型文本文件内容,或将多个文件合并输出。
touch - 创建空文件/更新时间戳
这条命令的意思是:"创建一个空白文件,或者更新已有文件的"最后修改时间"。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
touch |
触摸/更新 | 创建空文件或更新文件时间戳 |
常用命令示例:
# 创建空文件
touch newfile.txt
# 批量创建多个空文件
touch file1.txt file2.txt file3.txt
# 更新文件访问和修改时间(如果文件不存在则创建)
touch existingfile.txt
# 只更新修改时间,不改变访问时间
touch -m oldfile.txt
# 设置为指定时间戳(格式:YYYYMMDDHHMM)
touch -t 202512251200 oldfile.txt
# 使用文件的时间戳作为参照
touch -r reference.txt target.txt
# 创建带日期的备份文件
touch backup_$(date +%Y%m%d).txt
适用场景: 快速创建占位文件,或更新文件时间戳避免被清理脚本删除。
ln - 创建链接
这条命令的意思是:"给某个文件创建一个快捷方式(链接),访问链接就像访问原文件一样。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
ln |
link | 创建硬链接 |
ln -s |
symbolic link | 创建软链接(快捷方式) |
常用命令示例:
# 创建软链接(快捷方式)
ln -s /path/to/original link_name
# 创建软链接到目录
ln -s /usr/local/mysql mysql
# 创建硬链接(两个文件内容完全相同,删除原文件不影响)
ln /path/to/original hardlink
# 创建软链接并显示详细信息
ln -sv /source/file mylink
# 覆盖已存在的链接(先删除再创建)
ln -sf /new/path original_link
# 查看链接指向的目标
readlink link_name
# 查看所有软链接
find /path -type l -ls
硬链接 vs 软链接区别:
| 特性 | 硬链接 | 软链接 |
|---|---|---|
| 跨文件系统 | 不能 | 可以 |
| 目录 | 不能链接目录 | 可以链接目录 |
| 原文件删除 | 仍然可用 | 失效(断链) |
| 占用空间 | 不占额外空间 | 只占链接本身大小 |
| 性能 | 稍快 | 稍慢 |
适用场景: 软链接用于创建快捷方式,硬链接用于备份(不占用额外空间)。
chmod - 修改文件权限
这条命令的意思是:"改变文件的访问权限,决定谁可以读、写、执行这个文件。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
chmod |
change mode | 修改文件权限 |
r/w/x |
read/write/execute | 读/写/执行权限 |
权限表示法:
| 数字 | 权限 | 说明 |
|---|---|---|
| 4 | r | 读 |
| 2 | w | 写 |
| 1 | x | 执行 |
| 0 | - | 无权限 |
常用命令示例:
# 数字方式设置权限(755 = rwxr-xr-x)
chmod 755 script.sh
# 字母方式添加权限
chmod +x script.sh # 添加执行权限
chmod -x script.sh # 移除执行权限
chmod u+x script.sh # 仅所有者添加执行权限
chmod g+x script.sh # 仅用户组添加执行权限
chmod o+x script.sh # 仅其他人添加执行权限
# 字母方式设置权限
chmod u=rwx, g=rx, o=r file.txt # 等同于 754
# 递归修改目录权限
chmod -R 755 /home/user
# 移除所有权限
chmod 000 file.txt
# 查看权限
ls -l file.txt
# 常用权限组合
chmod 644 file.txt # rw-r--r--(文件)
chmod 755 script.sh # rwxr-xr-x(脚本)
chmod 600 private.txt # rw-------(私密文件)
chmod 777 public.txt # rwxrwxrwx(不推荐)
适用场景: 调整脚本可执行权限(如 chmod +x script.sh),或修改文件访问控制。
chown - 修改文件所有者
这条命令的意思是:"把文件的主人从一个人改成另一个人。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
chown |
change owner | 修改文件所有者 |
chgrp |
change group | 修改文件所属组 |
常用命令示例:
# 修改文件所有者
chown user file.txt
# 修改文件所有者和用户组
chown user:group file.txt
# 修改目录所有者(递归)
chown -R user:group /home/user
# 只修改用户组
chgrp group file.txt
chown :group file.txt
# 修改目录内容的所有者(不改变目录本身)
chown -hR user:group /var/www
# 修改符号链接的属主(不跟随链接)
chown -h user link.txt
# 查看文件所有者
ls -l file.txt
stat file.txt
适用场景: 网站文件需要由 www-data 用户运行,却用 root 创建时,用此命令更改归属。
2. 文本处理命令
grep - 文本搜索过滤
这条命令的意思是:"从大量文本中,把包含指定关键字的行挑出来显示。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
grep |
g/re/p | 源自ed编辑器的"全局正则表达式打印"命令 |
常用命令示例:
# 基本搜索(显示包含 keyword 的行)
grep "error" log.txt
# 忽略大小写
grep -i "error" log.txt
# 显示行号
grep -n "error" log.txt
# 显示不包含 keyword 的行(反向匹配)
grep -v "error" log.txt
# 显示包含 keyword 的行并显示后面3行(context)
grep -A 3 "error" log.txt
# 显示包含 keyword 的行并显示前面3行
grep -B 3 "error" log.txt
# 显示包含 keyword 的行并显示前后各2行
grep -C 2 "error" log.txt
# 使用正则表达式
grep "^error" log.txt # 以 error 开头
grep "error$" log.txt # 以 error 结尾
grep "er.*or" log.txt # 包含 er...or
# 递归搜索目录
grep -r "keyword" /var/log/
# 只显示文件名,不显示行(快速定位文件)
grep -l "error" *.log
# 统计匹配行数
grep -c "error" log.txt
# 显示匹配次数
grep -o "error" log.txt | wc -l
# 搜索多个关键字(OR 关系)
grep -E "error|warning" log.txt
# 搜索多个关键字(AND 关系,同时满足)
grep "error" log.txt | grep "timeout"
# 排除某个目录搜索
grep -r "keyword" /path --exclude-dir="node_modules"
适用场景: 在日志文件中搜索错误信息、在配置文件中查找某个选项。
sed - 流式文本编辑器
这条命令的意思是:"以流水线方式逐行处理文本,把匹配到的内容自动替换成别的。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
sed |
Stream Editor | 流式文本编辑器 |
常用命令示例:
# 替换所有匹配的字符串(-i 直接修改文件)
sed 's/old/new/g' file.txt
# 替换第 N 行
sed '5s/old/new/' file.txt
# 替换指定行(如第3行)
sed -i '3s/old/new/' file.txt
# 删除包含 keyword 的行
sed '/keyword/d' file.txt
# 删除第1行
sed '1d' file.txt
# 删除空行
sed '/^$/d' file.txt
# 在第3行后插入新行
sed -i '3a\新插入的内容' file.txt
# 在包含 keyword 的行前插入
sed '/keyword/i\插入的内容' file.txt
# 显示第5-10行
sed -n '5,10p' file.txt
# 替换多个字符串
sed -e 's/old1/new1/g' -e 's/old2/new2/g' file.txt
# 使用正则表达式替换
sed 's/[0-9]+/NUM/g' file.txt
# 直接写入新文件
sed 's/old/new/g' file.txt > newfile.txt
# 备份原文件再修改
sed -i.bak 's/old/new/g' file.txt
适用场景: 批量替换文件中的某个字符串,如 sed 's/old/new/g' file.txt。
awk - 文本报告生成器
这条命令的意思是:"强大的文本分析工具,能按格式提取、统计、生成报告。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
awk |
Aho, Weinberger, Kernighan | 三位创始人姓氏首字母组合 |
常用命令示例:
# 打印第一列和第三列
awk '{print $1, $3}' file.txt
# 按分隔符分割(默认空格)
awk -F: '{print $1}' /etc/passwd
# 使用其他分隔符
awk -F, '{print $2}' csvfile.csv
# 打印行号和第一列
awk '{print NR, $1}' file.txt
# 条件筛选(打印第一列大于 100 的行)
awk '$1 > 100 {print $0}' file.txt
# 统计总和(计算第一列的总和)
awk '{sum+=$1} END {print sum}' file.txt
# 统计平均值
awk '{sum+=$1} END {print sum/NR}' file.txt
# 统计行数
awk 'END {print NR}' file.txt
# 格式化输出
awk '{printf "%-10s %5d\n", $1, $2}' file.txt
# 显示包含 keyword 的行
awk '/keyword/ {print $0}' file.txt
# 多重条件
awk 'NR>1 && $3>100 {print $1, $3}' file.txt
# 自定义变量
awk -v var=100 '{print $1 * var}' file.txt
# BEGIN 和 END 块
awk 'BEGIN {print "开始处理"} {sum+=$1} END {print "总和:", sum}' file.txt
# 替换功能
awk '{gsub(/old/, "new"); print}' file.txt
适用场景: 提取特定列、计算总和、格式化输出,比如统计日志中每个IP的访问次数。
vi/vim - 文本编辑器
这条命令的意思是:"在终端里打开一个全屏文本编辑器,用来编写代码或配置文件。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
vi |
visual | 视觉模式编辑器,源自ex编辑器 |
vim |
Vi IMproved | vi的增强版 |
常用命令示例:
# 打开文件
vim file.txt
# 命令行模式(按 Esc 进入):
# 移动光标
h 左 l 右 j 下 k 上
w 跳到下一个单词开头
b 跳到上一个单词开头
0 跳到行首 $ 跳到行尾
gg 跳到文件开头 G 跳到文件结尾
:N 跳到第 N 行
# 编辑模式(按 i 进入):
i 在光标前插入
a 在光标后插入
o 在当前行后插入新行
O 在当前行前插入新行
# 删除
x 删除光标处字符
dd 删除整行
D 删除光标后整行
# 复制粘贴
yy 复制整行
p 粘贴到光标后
P 粘贴到光标前
# 撤销重做
u 撤销
Ctrl+r 重做
# 搜索
/keyword 搜索
n 下一个匹配
N 上一个匹配
# 替换
:s/old/new/ 替换当前行第一个
:s/old/new/g 替换当前行所有
:%s/old/new/g 替换文件中所有
# 保存退出
:w 保存
:wq 保存并退出
:x 保存并退出
:q! 不保存强制退出
ZZ 保存并退出(等价于 :wq)
# 其他
:set number 显示行号
:set nonumber 隐藏行号
:sp file.txt 水平分屏
:vsp file.txt 垂直分屏
适用场景: 编辑服务器配置文件、写代码。vim 比 vi 功能更强,是首选。
nano - 简单文本编辑器
这条命令的意思是:"一个比 vim 更简单的终端编辑器,适合新手使用。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
nano |
昵称 | 创始人用一个朋友的名字命名 |
| 全称 | Nano's Not ANOther | 递归缩写,模仿 GNU 的风格 |
常用命令示例:
# 打开文件编辑
nano file.txt
# 打开文件并跳转到指定行
nano +10 file.txt
# 打开文件并开启行号显示
nano -l file.txt
# 打开文件禁用自动换行
nano -w file.txt
# 多行编辑(先 Ctrl+Shift+6 选择区块)
# 常用快捷键:
# Ctrl+O 保存
# Ctrl+X 退出
# Ctrl+W 搜索
# Ctrl+K 剪切整行
# Ctrl+U 粘贴
# Ctrl+\\ 替换
# Ctrl+T 调用拼写检查
适用场景: 快速编辑小型文本文件,界面简洁直观。
less - 分页查看文件
这条命令的意思是:"像翻书一样逐页查看文件内容,可以上下滚动。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
less |
less is more | 名字来自谚语"少即是多",是more命令的升级版 |
常用命令示例:
# 基本用法
less file.txt
# 显示行号
less -N file.txt
# 搜索时高亮显示
less -S file.txt
# 实时监控日志(-F 类似于 tail -f)
less +F log.txt
# 搜索(按 / 后输入关键字)
/keyword 向下搜索
?keyword 向上搜索
n 下一个匹配
N 上一个匹配
# 翻页
Page Up / Page Down 上/下翻页
空格键 / b 向下/向上翻页
g 跳到文件开头
G 跳到文件结尾
q 退出
# 多个文件切换
less file1.txt file2.txt
:n 下一个文件
:p 上一个文件
适用场景: 查看大型日志文件,使用上下箭头或 Page Up/Down 翻页,按 q 退出。
more - 分页查看文件(只支持下翻)
这条命令的意思是:"逐页显示文件内容,按空格键继续看下一页。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
more |
more | 提示"更多内容" |
常用命令示例:
# 基本用法
more file.txt
# 显示前 10 行(默认)
more -10 file.txt
# 从第 5 行开始显示
more +5 file.txt
# 翻页
空格键 下一页
回车键 下一行
b 上一页(如果支持)
q 退出
# 配合管道使用
ls -la | more
适用场景: 简单查看文件,less 出现后用得少了(less 支持上翻)。
head - 查看文件开头
这条命令的意思是:"只看文件的开头几行。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
head |
头 | 文件的开头部分 |
常用命令示例:
# 显示前 10 行(默认)
head file.txt
# 显示前 20 行
head -n 20 file.txt
head -20 file.txt
# 显示前 100 字节
head -c 100 file.txt
# 显示前 N 行
head -n 5 file.txt
# 显示多个文件
head file1.txt file2.txt
# 配合管道使用
cat file.txt | head -20
# 排除前 N 行,显示其余
tail -n +11 file.txt
适用场景: 查看日志最新几条、确认文件格式是否正确。
tail - 查看文件结尾
这条命令的意思是:"持续监控文件的最后几行(新追加的内容会实时显示)。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
tail |
尾 | 文件的结尾部分 |
tail -f |
follow | 实时跟踪文件更新 |
常用命令示例:
# 显示最后 10 行(默认)
tail file.txt
# 显示最后 20 行
tail -n 20 file.txt
tail -20 file.txt
# 实时监控文件更新(Ctrl+C 退出)
tail -f /var/log/syslog
tail -f /var/log/nginx/access.log
# 监控多个文件
tail -f /var/log/syslog /var/log/nginx/error.log
# 显示最后 N 行并继续跟踪
tail -n 50 -f log.txt
# 显示从第 10 行开始到最后的内容
tail -n +10 file.txt
# 显示最后 100 字节
tail -c 100 file.txt
# 配合管道使用
grep "error" log.txt | tail -5
适用场景: 监控日志文件实时输出,如 tail -f /var/log/syslog。
wc - 统计文件行数/字数/字符数
这条命令的意思是:"统计文件有多少行、多少单词、多少字符。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
wc |
word count | 单词统计 |
常用命令示例:
# 统计行数
wc -l file.txt
# 统计单词数
wc -w file.txt
# 统计字符数
wc -c file.txt
# 显示文件完整统计(行数 单词数 字符数 文件名)
wc file.txt
# 统计多个文件
wc -l file1.txt file2.txt
# 配合管道统计
grep "error" log.txt | wc -l # 统计错误行数
cat file.txt | wc -l # 管道方式统计
find . -name "*.py" | wc -l # 统计 Python 文件数量
适用场景: 统计代码行数、日志行数,配合管道使用如 grep error log.txt | wc -l。
cut - 剪切文本列
这条命令的意思是:"从每行文本中切出指定的列。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
cut |
剪切 | 从文本中提取特定字段 |
常用命令示例:
# 提取第一列(默认以 Tab 分隔)
cut -f1 file.txt
# 以冒号为分隔符,提取第一列
cut -d: -f1 /etc/passwd
# 提取多列
cut -d: -f1,3 /etc/passwd # 第一和第三列
cut -d: -f1-5 /etc/passwd # 第一到第五列
# 提取指定字节
cut -b 1-10 file.txt # 第 1-10 字节
cut -b 1,3,5 file.txt # 第 1,3,5 字节
# 提取指定字符
cut -c 1-10 file.txt # 第 1-10 个字符
# 配合管道使用
cat /etc/passwd | cut -d: -f1
# 显示除了某列之外的所有列
cut -d: -f2 --complement /etc/passwd
适用场景: 提取 CSV 文件的某一列,如 cut -d: -f1 /etc/passwd 提取用户名。
sort - 文本排序
这条命令的意思是:"把文件内容按字母顺序或数字大小排列。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
sort |
排序 | 对文本行进行排序 |
常用命令示例:
# 基本排序(按字母顺序)
sort file.txt
# 按数字排序
sort -n numbers.txt
# 降序排序
sort -r file.txt
sort -rn numbers.txt
# 按指定列排序(以冒号分隔,第三列)
sort -t: -k3 file.txt
# 按数字大小排序第2列
sort -k2n file.txt
# 去除重复行
sort -u file.txt
# 随机排序
shuf file.txt
# 查看排序后显示唯一值(类似 uniq)
sort file.txt | uniq
# 检查文件是否已排序
sort -c file.txt
# 忽略开头空白字符
sort -b file.txt
# 合并已排序的文件
sort -m file1.txt file2.txt
# 配合管道
cat file.txt | sort | uniq
适用场景: 整理数据、配合 uniq 统计唯一值。
uniq - 去重/显示相邻重复行
这条命令的意思是:"删除相邻的重复行,或者只显示重复出现的行。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
uniq |
unique | 唯一的、独特的 |
常用命令示例:
# 基本去重(删除相邻重复行)
uniq file.txt
# 统计每行出现次数
uniq -c file.txt
# 只显示重复的行
uniq -d file.txt
# 只显示出现一次的行
uniq -u file.txt
# 忽略开头 N 个字符的比较
uniq -s 3 file.txt
# 忽略开头 N 个字段的比较
uniq -f 2 file.txt
# 配合排序使用(推荐,先排序再去重)
sort file.txt | uniq
# 统计唯一值数量
sort file.txt | uniq | wc -l
# 显示重复行及其出现次数
sort file.txt | uniq -c | sort -rn
适用场景: 统计日志中每个IP出现了多少次:grep error log | cut -d' ' -f1 | sort | uniq -c。
diff - 比较文件差异
这条命令的意思是:"逐行对比两个文件,找出哪里不一样。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
diff |
difference | 差异 |
常用命令示例:
# 比较两个文件
diff file1.txt file2.txt
# 并排格式显示
diff -y file1.txt file2.txt
# 显示差异统计
diff --stat file1.txt file2.txt
# 忽略空白差异
diff -w file1.txt file2.txt
# 忽略大小写
diff -i file1.txt file2.txt
# 统一格式输出(适合打补丁)
diff -u file1.txt file2.txt
# 生成补丁文件
diff -u old.txt new.txt > patch.diff
# 递归比较目录
diff -r dir1 dir2
# 只显示文件名(不显示具体差异)
diff -q dir1 dir2
# 忽略某些文件
diff -r dir1 dir2 --exclude="*.log"
适用场景: 对比配置文件修改前后的区别,或代码版本间的差异。
patch - 应用补丁
这条命令的意思是:"根据补丁文件,把旧文件更新成新版本。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
patch |
补丁 | 像缝补衣服一样给程序打补丁 |
常用命令示例:
# 从补丁文件更新(标准用法)
patch -p1 < patch.diff
# 备份原文件再更新
patch -backup -p1 < patch.diff
# 只检查是否会成功(不实际修改)
patch -dry-run -p1 < patch.diff
# 回滚补丁(撤销修改)
patch -R < patch.diff
# 指定要打补丁的文件
patch file.txt < file.patch
# 忽略空白差异
patch -l < patch.diff
# 设置补丁层级(用于处理路径差异)
patch -p2 < patch.diff
适用场景: 开源项目发布代码更新时,用 patch 文件批量应用修改。
3. 系统信息命令
ps - 查看进程状态
这条命令的意思是:"给系统当前所有运行的程序拍一张快照,显示有哪些进程在运行。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
ps |
Process Status | 进程状态 |
ps aux |
a=all, u=user format, x=without tty | 显示所有进程详细信息 |
ps -ef |
e=all processes, f=full format | 显示所有进程(标准格式),显示完整命令行 |
补充说明:
| 写法 | 风格 | 说明 |
|---|---|---|
ps aux |
BSD 风格 | Unix/Linux 通用,a 显示所有终端进程,u 用户格式,x 显示无终端进程 |
ps -ef |
POSIX 风格 | 更符合 POSIX 标准,e 显示所有进程(every),f 完整格式(full format) |
常用命令示例:
# 显示所有进程(最常用)
ps aux
# 显示所有进程(BSD 风格)
ps -ef
# 显示所有进程并格式化输出
ps -eo pid,user,command
# 查找特定进程
ps aux | grep nginx
# 显示进程树
pstree
# 显示进程树(显示 PID)
pstree -p
# 查看某个用户的进程
ps -u username
# 按 CPU 使用率排序
ps aux --sort=-%cpu
# 按内存使用率排序
ps aux --sort=-%mem
# 显示前 10 个最占资源的进程
ps aux --sort=-%cpu | head -11
适用场景: 排查哪个进程占用了太多资源,或查找某个程序的进程ID。
top - 实时监控系统资源
这条命令的意思是:"实时显示系统资源占用情况,按CPU/内存使用量排序,最占资源的在最上面。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
top |
Table of Processes | 进程列表(顶部是最重要的进程) |
常用命令示例:
# 基本用法
top
# 按 CPU 使用率排序(默认)
top -o %CPU
# 按内存使用排序
top -o %MEM
# 显示特定用户进程
top -u username
# 显示所有 CPU 核心
top -1
# 设置更新间隔(秒)
top -d 5
# 显示进程完整命令行
top -c
# 显示线程
top -H
# 只显示前 20 个进程
top -b -n 1 | head -21
# 批处理模式(用于脚本)
top -b -n 1 > top_output.txt
# 交互快捷键:
# q 退出
# P 按 CPU 排序
# M 按内存排序
# N 按 PID 排序
# T 按时间排序
# k 杀死进程
# r 调整优先级
# 空格 立即刷新
适用场景: 实时监控服务器负载、内存使用、找出占用资源最高的进程。
htop - 增强版top
这条命令的意思是:"比 top 更好用的进程监控工具,支持彩色显示、鼠标操作和进程树视图。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
htop |
hierarchical top | 分层显示进程,更直观 |
常用命令示例:
# 基本用法
htop
# 显示特定用户进程
htop -u username
# 显示特定进程
htop -p PID1,PID2
# 按树形结构显示
htop -t
# 设置刷新间隔
htop -d 10
# 显示所有 CPU 核心
htop -1
# 交互操作:
# F1 帮助
# F2 设置
# F3 搜索
# F4 过滤
# F5 树形视图
# F6 排序
# F9 杀死进程
# F10 退出
# 空格 选择进程
# u 过滤用户
适用场景: 需要更友好地查看进程、交互式操作时使用(需要额外安装)。
pgrep - 按模式查找进程
这条命令的意思是:"用关键字搜索进程,直接返回进程ID。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
pgrep |
pattern grep | 按模式匹配进程名 |
常用命令示例:
# 查找 nginx 进程
pgrep nginx
# 查找并显示进程名
pgrep -l nginx
# 查找指定用户的进程
pgrep -u username nginx
# 显示完整信息
pgrep -a nginx
# 查找多个模式
pgrep -f "nginx|apache"
# 显示进程数
pgrep -c nginx
# 查找最匹配的进程(精确匹配进程名)
pgrep -x nginx
适用场景: 快速查找某个程序的进程ID,如 pgrep nginx。
pkill - 按模式终止进程
这条命令的意思是:"用关键字匹配进程名,直接把这些进程全部杀掉。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
pkill |
pattern kill | 按模式匹配并杀死进程 |
常用命令示例:
# 杀死所有 nginx 进程(正常终止)
pkill nginx
# 强制杀死
pkill -9 nginx
pkill -SIGKILL nginx
# 杀死匹配命令行的进程
pkill -f "python script.py"
# 杀死特定用户的进程
pkill -u username nginx
# 杀死多个进程
pkill nginx php-fpm
# 发送其他信号
pkill -SIGTERM nginx # 正常终止
pkill -SIGSTOP nginx # 暂停(可恢复)
pkill -SIGCONT nginx # 继续运行
适用场景: 一键杀掉所有同名进程,如 pkill -f python。
kill - 终止指定进程
这条命令的意思是:"向某个进程发送信号,要求它停止运行(默认是正常终止)。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
kill |
杀死 | 向进程发送终止信号 |
kill -9 |
强制杀死 | 强行终止(信号9,不可拦截) |
常用命令示例:
# 正常终止进程(信号15,默认)
kill 1234
# 强制杀死进程(信号9,无法拦截)
kill -9 1234
# 发送其他信号
kill -SIGTERM 1234 # 正常终止(默认)
kill -SIGKILL 1234 # 强制杀死
kill -SIGSTOP 1234 # 暂停进程
kill -SIGCONT 1234 # 继续运行
kill -SIGHUP 1234 # 挂起(常用于重载配置)
# 查看可用的信号
kill -l
# 杀死进程树
kill -9 -PID
# 配合其他命令使用
ps aux | grep nginx | awk '{print $2}' | xargs kill
常用信号说明:
| 信号 | 编号 | 说明 |
|---|---|---|
| SIGTERM | 15 | 正常终止(默认) |
| SIGKILL | 9 | 强制杀死 |
| SIGHUP | 1 | 挂起/重载配置 |
| SIGSTOP | 19 | 暂停 |
| SIGCONT | 18 | 继续 |
适用场景: 停止卡死的进程,配合 ps 或 pgrep 先找到进程ID。
df - 查看磁盘剩余空间
这条命令的意思是:"查看硬盘还有多少空间可以用。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
df |
disk free | 磁盘空闲空间 |
常用命令示例:
# 基本用法
df
# 人类可读格式(KB/MB/GB)
df -h
# 显示所有文件系统
df -a
# 显示inode信息
df -i
# 显示指定类型文件系统
df -t ext4
df -x tmpfs
# 只显示本地文件系统
df -l
# 显示特定目录所在磁盘
df /home
# 显示磁盘使用百分比
df -h --output=source,size,used,avail,pcent,target
# 设置输出列
df -h --output=source,pcent
适用场景: 服务器磁盘快满了?用 df -h 查看各分区使用情况。
du - 查看目录占用空间
这条命令的意思是:"查看当前目录(或指定目录)里所有文件加起来占用了多少空间。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
du |
disk usage | 磁盘使用量 |
常用命令示例:
# 基本用法
du
# 显示目录总大小
du -sh /path/to/dir
# 显示子目录大小
du -h --max-depth=1 /path/to/dir
# 显示所有文件大小
du -ah /path/to/dir
# 显示总大小(最后一行)
du -sh /path/to/dir
# 按大小排序显示
du -sh /path/to/dir/* | sort -h
# 显示指定类型文件大小
du -sh --block-size=1M /path
# 只显示大小超过 100M 的目录
du -h --threshold=100M /path
# 排除某些目录
du -sh --exclude="*.log" /path
# 显示磁盘使用统计
du -c /path
# 设置深度
du -h --max-depth=2 /path
适用场景: 找出哪个文件夹最大,如 du -sh * | sort -h。
free - 查看内存使用情况
这条命令的意思是:"查看系统内存还剩多少可用。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
free |
空闲 | 显示内存使用与空闲情况 |
常用命令示例:
# 基本用法(字节为单位)
free
# 人类可读格式
free -h
# 显示内存和交换分区
free -h -w
# 显示详细统计
free -s 1 # 每秒刷新一次
free -s 1 -c 5 # 每秒刷新,共5次
# 显示总计行
free -t
# 显示特定单位
free -b # 字节
free -k # KB(默认)
free -m # MB
free -g # GB
# 显示内存、交换分区、缓存
free -hw
适用场景: 内存是否不足,用 free -h 查看更易读。
uptime - 查看系统运行时间
这条命令的意思是:"显示系统已经连续运行了多久,以及当前有多少人在用。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
uptime |
运行时间 | 系统运行时长 |
常用命令示例:
# 基本用法
uptime
# 显示更详细信息
uptime -p # 格式化的运行时间
uptime -s # 系统启动时间
# 格式化输出
uptime -V
适用场景: 确认服务器是否被人重启过,或做巡检记录。
whoami - 显示当前用户名
这条命令的意思是:"显示你现在是以哪个用户身份登录的。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
whoami |
Who am I? | 我是谁 |
常用命令示例:
# 基本用法
whoami
# 配合其他命令使用
sudo -u $(whoami) some_command
适用场景: 切换用户后确认当前身份,或在脚本中获取执行用户。
hostname - 查看/设置主机名
这条命令的意思是:"查看或修改这台电脑在网络中的名字。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
hostname |
主机名 | 显示或设置主机名称 |
常用命令示例:
# 查看主机名
hostname
# 临时修改主机名(重启后失效)
sudo hostname new-server-name
# 永久修改主机名(需要重启或修改配置文件)
hostnamectl set-hostname new-server-name
# 查看主机名详细信息
hostnamectl
# 修改主机名并设置持久化
hostnamectl set-hostname server01 --static
适用场景: 确认服务器身份(多台服务器时避免搞混)。
uname - 显示系统信息
这条命令的意思是:"打印这台机器的系统信息,比如是什么操作系统、什么内核版本。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
uname |
unix name | Unix系统名称信息 |
常用命令示例:
# 显示全部信息
uname -a
# 显示内核名称
uname -s
# 显示内核版本
uname -r
# 显示硬件名称
uname -m
# 显示网络节点主机名
uname -n
# 显示操作系统名称
uname -o
# 显示处理器类型
uname -p
适用场景: 确认操作系统版本,uname -a 显示全部信息。
man - 查看命令手册
这条命令的意思是:"翻开某条命令的使用说明书。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
man |
manual | 使用手册 |
常用命令示例:
# 查看命令手册
man ls
# 查看配置文件的手册
man crontab
# 搜索包含关键字的手册
man -k keyword
# 查看某章节的手册
man 5 passwd # 第5章节(配置文件)
# 显示手册章节列表
man -w
# 查看命令在哪个章节
whatis ls
man 手册章节说明:
| 章节 | 内容 |
|---|---|
| 1 | 可执行命令 |
| 2 | 系统调用 |
| 3 | 库函数 |
| 4 | 设备文件 |
| 5 | 配置文件格式 |
| 6 | 游戏 |
| 7 | 杂项 |
| 8 | 系统管理命令 |
适用场景: 学习新命令的详细用法,如 man ls。
info - 查看详细信息
这条命令的意思是:"比 man 更详细的命令文档。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
info |
information | 详细信息 |
常用命令示例:
# 查看命令详细信息
info ls
# 查看导航帮助
info
# 搜索关键字
info --apropos keyword
适用场景: man 看完还不懂时,试试 info。
whatis - 一句话说明命令
这条命令的意思是:"用一句话告诉你这条命令是干什么的。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
whatis |
这是什么 | 命令的简短说明 |
常用命令示例:
# 基本用法
whatis ls
# 多个命令
whatis ls grep sed
# 配合管道
echo "ls grep sed" | xargs whatis
适用场景: 快速查命令用途,如 whatis tar。
apropos - 搜索相关命令
这条命令的意思是:"输入一个关键词,找出所有跟这个词相关的手册条目。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
apropos |
关于 | 在手册中搜索关键词(来自法语) |
常用命令示例:
# 搜索相关命令
apropos network
# 搜索配置文件相关
apropos "config"
# 使用正则表达式
apropos -e "copy"
适用场景: 不知道要用什么命令时,输入想做的事,如 apropos network。
4. 网络命令
ping - 测试网络连接
这条命令的意思是:"向目标地址发送一个小数据包,测试网络是否通。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
ping |
Packet InterNet Groper | 检测网络连通性(模拟声纳"ping"声) |
常用命令示例:
# 基本用法
ping 8.8.8.8
# ping 域名
ping google.com
# 指定次数后停止
ping -c 4 8.8.8.8
# 指定时间间隔(秒)
ping -i 2 8.8.8.8
# 指定数据包大小
ping -s 1000 8.8.8.8
# 快速ping(不等待响应)
ping -f 8.8.8.8
# 显示详细统计信息
ping -q 8.8.8.8
# 设置TTL
ping -t 64 8.8.8.8
适用场景: 确认某台服务器是否能连上,如 ping 8.8.8.8。
curl - 命令行下载工具
这条命令的意思是:"从URL获取数据,能发送请求、下载文件、测试API。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
curl |
Client URL | 客户端URL工具 |
常用命令示例:
# 下载网页内容
curl https://example.com
# 保存到文件
curl -o output.html https://example.com
# 下载文件(使用远程文件名)
curl -O https://example.com/file.zip
# 显示响应头
curl -I https://example.com
# 显示完整响应(包括头)
curl -i https://example.com
# 发送 POST 请求
curl -X POST -d "name=value" https://api.example.com
# 发送 JSON 数据
curl -X POST -H "Content-Type: application/json" \
-d '{"key":"value"}' https://api.example.com
# 设置请求头
curl -H "Authorization: Bearer token" https://api.example.com
# 跟随重定向
curl -L https://example.com
# 显示下载进度
curl -# -O https://example.com/file.zip
# 超时设置
curl --max-time 10 https://example.com
# 忽略 SSL 证书错误
curl -k https://example.com
# 静默模式
curl -s https://example.com
# 配合管道使用
curl -s https://api.example.com | jq
适用场景: 测试API接口、下载文件,如 curl https://api.example.com。
wget - 递归下载工具
这条命令的意思是:"把网页或文件下载到本地,支持断点续传。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
wget |
World Wide Web get | 从网络获取文件 |
常用命令示例:
# 下载文件
wget https://example.com/file.zip
# 下载并保存为指定名字
wget -O output.zip https://example.com/file.zip
# 后台下载
wget -b https://example.com/file.zip
# 断点续传
wget -c https://example.com/largefile.zip
# 递归下载整站
wget -r -np https://example.com/
# 限制下载深度
wget -r -l 2 https://example.com/
# 下载多个文件
wget -i filelist.txt
# 显示下载进度
wget --show-progress https://example.com/file.zip
# 设置重试次数
wget --tries=3 https://example.com/file.zip
# 设置用户名密码
wget --user=username --password=pass https://example.com/file.zip
适用场景: 下载大文件、整站下载,如 wget -r https://example.com。
ssh - 加密远程登录
这条命令的意思是:"通过加密通道远程连接到另一台Linux服务器。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
ssh |
Secure Shell | 加密远程登录协议 |
常用命令示例:
# 基本连接
ssh user@192.168.1.100
# 指定端口
ssh -p 2222 user@192.168.1.100
# 使用密钥登录
ssh -i ~/.ssh/mykey.pem user@192.168.1.100
# 执行单个命令
ssh user@192.168.1.100 "ls -la"
# 远程执行命令并获取结果
ssh user@192.168.1.100 "df -h" > local_output.txt
# 跳板机(通过一台服务器连接另一台)
ssh -J jump_user@jump_server user@target_server
# 显示详细连接信息
ssh -v user@192.168.1.100
# 压缩数据传输
ssh -C user@192.168.1.100
# 保持连接(防止超时)
ssh -o ServerAliveInterval=60 user@192.168.1.100
# X11 转发(图形界面)
ssh -X user@192.168.1.100
适用场景: 远程管理服务器,如 ssh user@192.168.1.100。
scp - 加密文件传输
这条命令的意思是:"通过SSH通道把文件安全地复制到远程服务器(或从远程拉回来)。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
scp |
Secure Copy | 基于SSH的安全复制 |
常用命令示例:
# 上传文件到远程服务器
scp file.txt user@192.168.1.100:/remote/path/
# 从远程服务器下载文件
scp user@192.168.1.100:/remote/path/file.txt ./
# 指定端口
scp -P 2222 file.txt user@192.168.1.100:/path/
# 使用密钥文件
scp -i ~/.ssh/mykey.pem file.txt user@192.168.1.100:/path/
# 递归复制整个目录
scp -r /local/dir user@192.168.1.100:/remote/path/
# 多个文件一起传
scp file1.txt file2.txt user@192.168.1.100:/path/
# 保持文件属性
scp -p file.txt user@192.168.1.100:/path/
# 显示详细信息
scp -v file.txt user@192.168.1.100:/path/
# 限速传输(KB/s)
scp -l 1000 file.txt user@192.168.1.100:/path/
适用场景: 本地和服务器之间安全传输文件,如 scp file.txt user@host:/path/。
sftp - 安全文件传输
这条命令的意思是:"类似FTP但走SSH加密通道,可以交互式上传下载文件。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
sftp |
SSH File Transfer Protocol | 安全文件传输协议 |
常用命令示例:
# 连接远程服务器
sftp user@192.168.1.100
# 指定端口
sftp -P 2222 user@192.168.1.100
# 使用密钥连接
sftp -i ~/.ssh/mykey.pem user@192.168.1.100
# 交互命令:
# get remote.txt 下载文件
# put local.txt 上传文件
# ls 列出远程目录
# cd /path 切换远程目录
# lcd /path 切换本地目录
# pwd 显示远程当前目录
# lpwd 显示本地当前目录
# rm file.txt 删除远程文件
# mkdir dirname 创建远程目录
# exit 退出
# 批量下载
sftp user@192.168.1.100 << EOF
get file1.txt
get file2.txt
bye
EOF
适用场景: 需要交互式操作文件时,比 scp 更适合目录同步。
telnet - 远程登录(明文)
这条命令的意思是:"远程连接到服务器,但通信不加密(已被SSH取代)。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
telnet |
TELecommunication NETwork | 电信网络协议 |
常用命令示例:
# 连接远程服务器(明文通信,不推荐)
telnet 192.168.1.100
# 连接指定端口(测试端口是否开放)
telnet 192.168.1.100 22
telnet mail.example.com 25
# 退出 telnet
quit
# 或按 Ctrl+]
适用场景: 仅用于测试端口是否开放,如 telnet 192.168.1.100 22。
netstat - 查看网络状态
这条命令的意思是:"显示系统的网络连接状态,包括正在监听的端口和已建立的连接。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
netstat |
network statistics | 网络统计信息 |
常用命令示例:
# 显示所有连接
netstat -a
# 显示 TCP 连接
netstat -t
# 显示 UDP 连接
netstat -u
# 显示监听中的端口
netstat -l
# 显示进程信息
netstat -p
# 以数字形式显示(IP和端口)
netstat -n
# 组合使用
netstat -tlnp # TCP 监听端口
netstat -tunp # 所有 TCP/UDP 连接
netstat -an | grep 3306 # 检查 MySQL 端口
# 显示路由表
netstat -r
# 显示网络接口统计
netstat -i
# 显示核心路由信息
netstat -rn
适用场景: 查看服务是否在监听端口,如 netstat -tlnp | grep 80。
ifconfig - 查看/配置网卡
这条命令的意思是:"查看或修改网络接口(网卡)的IP地址和配置。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
ifconfig |
interface configuration | 网络接口配置 |
常用命令示例:
# 查看所有网卡信息
ifconfig
# 查看特定网卡
ifconfig eth0
# 启动网卡
ifconfig eth0 up
# 禁用网卡
ifconfig eth0 down
# 设置 IP 地址
ifconfig eth0 192.168.1.100
# 设置 IP 和子网掩码
ifconfig eth0 192.168.1.100 netmask 255.255.255.0
# 设置广播地址
ifconfig eth0 broadcast 192.168.1.255
# 配置多个 IP
ifconfig eth0:0 192.168.1.101
# 显示网卡状态
ifconfig -a
适用场景: 快速查看IP、启用/禁用网卡(新版Linux推荐用 ip 命令)。
ip - 现代网络配置
这条命令的意思是:"新一代网络配置工具,功能比 ifconfig 更强大。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
ip |
Internet Protocol | 网络协议配置 |
常用命令示例:
# 查看 IP 地址
ip addr show
ip a
# 查看特定网卡
ip addr show eth0
# 添加 IP 地址
ip addr add 192.168.1.100/24 dev eth0
# 删除 IP 地址
ip addr del 192.168.1.100/24 dev eth0
# 启用网卡
ip link set eth0 up
# 禁用网卡
ip link set eth0 down
# 查看路由表
ip route show
ip r
# 添加默认路由
ip route add default via 192.168.1.1
# 删除路由
ip route del default
# 查看 ARP 表
ip neigh show
# 添加 ARP 条目
ip neigh add 192.168.1.100 lladdr aa:bb:cc:dd:ee:ff dev eth0
# 查看网络统计
ip -s link
适用场景: 查看IP、添加删除路由、管理网卡(现代Linux发行版推荐使用)。
traceroute - 追踪路由
这条命令的意思是:"显示你的数据包到达目标服务器经过的每一跳(每一个路由节点)。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
traceroute |
trace route | 追踪路由路径 |
常用命令示例:
# 基本用法
traceroute google.com
# 指定最大跳数
traceroute -m 20 google.com
# 指定超时时间
traceroute -w 3 google.com
# 使用 ICMP 协议
traceroute -I google.com
# 显示 IP 地址(不解析主机名)
traceroute -n google.com
# 绕过路由表(直接发送)
traceroute -r google.com
# Windows 用法(Windows 默认命令是 tracert)
tracert google.com
适用场景: 网络延迟高时排查问题,看数据包在哪一站卡住了。
nslookup - 查询DNS
这条命令的意思是:"查询域名对应的IP地址(DNS解析)。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
nslookup |
name server lookup | 域名服务器查询 |
常用命令示例:
# 基本查询
nslookup google.com
# 查询特定 DNS 服务器
nslookup google.com 8.8.8.8
# 查询 MX 记录
nslookup -type=mx google.com
# 查询 CNAME 记录
nslookup -type=cname www.google.com
# 交互模式
nslookup
> server 8.8.8.8
> google.com
> exit
适用场景: 确认域名是否解析正确,如 nslookup example.com。
dig - 详细DNS查询
这条命令的意思是:"比 nslookup 更详细的DNS查询工具,能查看完整的DNS记录。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
dig |
Domain Information Groper | 域名信息探针 |
常用命令示例:
# 基本查询
dig google.com
# 只显示简答部分
dig +short google.com
# 查询 A 记录
dig A google.com
# 查询 MX 记录
dig MX google.com
# 查询 NS 记录
dig NS google.com
# 查询 TXT 记录
dig TXT google.com
# 指定 DNS 服务器
dig @8.8.8.8 google.com
# 显示完整查询过程
dig +trace google.com
# 查询 SOA 记录
dig SOA google.com
# 反向查询
dig -x 142.250.185.78
# 显示查询统计
dig +stats google.com
适用场景: 查询域名的A记录、MX记录等详细DNS信息。
nc/netcat - 网络瑞士军刀
这条命令的意思是:"网络界的瑞士军刀,能建立TCP/UDP连接、传输文件、扫描端口。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
nc / netcat |
network cat | 网络工具箱 |
常用命令示例:
# 测试端口连通性
nc -zv 192.168.1.100 22
# 扫描端口范围
nc -zv 192.168.1.100 20-30
# 开启监听模式
nc -l 8080
# 简单的聊天服务器
nc -l -p 8080
# 传送文件(接收端先开监听)
nc -l -p 8080 > received_file.txt
# 发送端
nc 192.168.1.100 8080 < file_to_send.txt
# 反向 shell
nc -e /bin/bash 192.168.1.100 8080
# 创建后门
nc -l -p 8080 -e /bin/bash
# 设置超时
nc -w 3 192.168.1.100 8080
# UDP 模式
nc -u 192.168.1.100 8080
适用场景: 快速测试端口连通性、在两台机器间传文件。
5. 压缩归档命令
tar - 打包文件
这条命令的意思是:"把多个文件或文件夹打包成一个大文件(归档),可以加上压缩。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
tar |
tape archive | 磁带归档(虽已不用磁带,名字保留) |
常用命令示例:
# 创建归档(-c 创建,-v 显示过程,-f 指定文件名)
tar -cvf archive.tar /path/to/dir
# 创建 gzip 压缩归档
tar -czvf archive.tar.gz /path/to/dir
# 创建 bzip2 压缩归档
tar -cjvf archive.tar.bz2 /path/to/dir
# 创建 xz 压缩归档
tar -cJvf archive.tar.xz /path/to/dir
# 解压归档
tar -xvf archive.tar
tar -xzvf archive.tar.gz
tar -xjvf archive.tar.bz2
# 解压到指定目录
tar -xzvf archive.tar.gz -C /target/dir
# 查看归档内容(不解压)
tar -tvf archive.tar
# 解压特定文件
tar -xzvf archive.tar.gz file1.txt
# 追加文件到归档
tar -rvf archive.tar newfile.txt
# 排除某些文件
tar -czvf archive.tar.gz /path --exclude="*.log"
# 只打包某几个目录
tar -czvf backup.tar.gz /home/user/documents /home/user/photos
适用场景: 备份文件夹、分发代码包,如 tar -czvf backup.tar.gz /path/。
gzip/gunzip - gzip压缩解压
这条命令的意思是:"压缩文件使其变小,或解压被压缩的文件。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
gzip |
GNU zip | GNU项目开发的压缩工具 |
gunzip |
GNU unzip | 解压gzip文件 |
常用命令示例:
# 压缩文件(会删除原文件)
gzip file.txt
# 压缩并显示压缩比
gzip -v file.txt
# 解压文件(会删除压缩包)
gunzip file.txt.gz
# 解压到指定文件
gunzip -c file.txt.gz > newfile.txt
# 压缩保留原文件
gzip -c file.txt > file.txt.gz
# 压缩级别(1-9,9 压缩率最高)
gzip -9 file.txt
gzip -1 file.txt
# 递归压缩目录下所有文件
gzip -r /path/to/dir
# 显示压缩文件信息
gzip -l file.txt.gz
# 测试压缩文件完整性
gzip -t file.txt.gz
适用场景: 压缩日志文件节省空间,如 gzip log.txt。
zip/unzip - zip压缩解压
这条命令的意思是:"创建或解压Windows常用的zip格式压缩包。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
zip |
压缩 | 创建zip压缩包 |
unzip |
解压 | 解压zip压缩包 |
常用命令示例:
# 创建 zip 压缩包
zip archive.zip file1.txt file2.txt
# 压缩目录
zip -r archive.zip /path/to/dir
# 压缩并排除某些文件
zip -r archive.zip /path --exclude "*.log"
# 设置压缩级别(1-9)
zip -9 archive.zip file.txt
# 更新/追加文件
zip -u archive.zip newfile.txt
# 删除压缩包中的文件
zip -d archive.zip oldfile.txt
# 查看压缩包内容
unzip -l archive.zip
# 解压到指定目录
unzip archive.zip -d /target/dir
# 解压到当前目录
unzip archive.zip
# 解压特定文件
unzip archive.zip file1.txt
# 测试压缩包完整性
unzip -t archive.zip
# 覆盖已有文件(不提示)
unzip -o archive.zip
# 密码保护解压
unzip -P password archive.zip
适用场景: Windows和Linux之间传输文件时用zip格式更通用。
bzip2 - 高压缩比压缩
这条命令的意思是:"比gzip压缩率更高的压缩工具。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
bzip2 |
Burrows-Wheeler transform + zip2 | 使用BW变换算法 |
常用命令示例:
# 压缩文件
bzip2 file.txt
# 解压文件
bunzip2 file.txt.bz2
# 压缩保留原文件
bzip2 -k file.txt
# 显示压缩详情
bzip2 -v file.txt
# 解压到指定文件
bunzip2 -c file.txt.bz2 > newfile.txt
# 测试压缩包
bzip2 -t file.txt.bz2
适用场景: 需要更小压缩包时(压缩慢但压缩率高)。
xz - 最高压缩比
这条命令的意思是:"压缩率最高的压缩工具,但速度较慢。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
xz |
算法名 | 使用LZMA算法 |
常用命令示例:
# 压缩文件
xz file.txt
# 解压文件
xz -d file.txt.xz
unxz file.txt.xz
# 压缩保留原文件
xz -k file.txt
# 设置压缩级别(0-9)
xz -9 file.txt
# 解压到指定文件
xz -dc file.txt.xz > newfile.txt
# 递归压缩
xz -r /path/to/dir
# 查看压缩包信息
xz -l file.txt.xz
# 测试压缩包
xz -t file.txt.xz
适用场景: 需要极致压缩时(如发布软件包),比bzip2和gzip都小。
6. 用户和权限命令
useradd/usermod/userdel - 用户管理
这条命令的意思是:"添加新用户 / 修改已有用户 / 删除用户。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
useradd |
user add | 创建新用户 |
usermod |
user modify | 修改用户属性 |
userdel |
user delete | 删除用户 |
常用命令示例:
# 创建新用户
useradd newuser
# 创建用户并指定家目录
useradd -m newuser
# 创建用户并指定 shell
useradd -s /bin/bash newuser
# 创建用户并指定用户组
useradd -g groupname newuser
# 创建用户并指定 UID
useradd -u 1500 newuser
# 修改用户 shell
usermod -s /bin/zsh username
# 修改用户组
usermod -g groupname username
# 添加用户到附加组
usermod -aG sudo,www-data username
# 修改用户家目录
usermod -d /new/home -m username
# 锁定用户(禁止登录)
usermod -L username
# 解锁用户
usermod -U username
# 删除用户(保留家目录)
userdel username
# 删除用户并删除家目录
userdel -r username
适用场景: 添加系统用户、修改用户组、删除离职员工账号。
groupadd/groupmod/groupdel - 用户组管理
这条命令的意思是:"添加新用户组 / 修改组 / 删除组。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
groupadd |
group add | 创建新用户组 |
groupmod |
group modify | 修改组属性 |
groupdel |
group delete | 删除用户组 |
常用命令示例:
# 创建新用户组
groupadd developers
# 创建系统用户组(低 UID)
groupadd -r systemgroup
# 修改组名
groupmod -n newname oldname
# 修改 GID
groupmod -g 1500 groupname
# 删除用户组
groupdel groupname
# 查看用户所属组
groups username
# 查看所有组
cat /etc/group
适用场景: 按部门或项目创建用户组,方便统一管理权限。
passwd - 修改密码
这条命令的意思是:"设置或更改用户密码。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
passwd |
password | 密码 |
常用命令示例:
# 修改当前用户密码
passwd
# 修改指定用户密码(root)
passwd username
# 锁定用户密码(禁止登录)
passwd -l username
# 解锁用户密码
passwd -u username
# 删除用户密码(无密码登录)
passwd -d username
# 查看密码状态
passwd -S username
# 设置密码过期时间
passwd -x 90 username # 90天后过期
passwd -n 7 username # 至少7天后才能改
passwd -w 10 username # 提前10天提醒
# 非交互式设置密码(脚本用)
echo "username:password" | chpasswd
echo "username:newpass" | chpasswd
适用场景: 用户自己改密码,或管理员重置用户密码。
su - 切换用户
这条命令的意思是:"切换到另一个用户身份(需要知道对方密码)。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
su |
switch user / substitute user | 切换/替代用户 |
常用命令示例:
# 切换到 root 用户
su
# 切换到指定用户
su username
# 切换到用户并加载其环境
su - username
# 以特定用户运行命令
su -c "command" username
# 切换到 root 并加载 root 环境
su -
适用场景: 需要用其他用户身份操作时,如 su - root 切换到root。
sudo - 以管理员身份执行
这条命令的意思是:"用管理员权限执行一条命令,但不需要知道root密码。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
sudo |
substitute user do | 以其他用户身份执行 |
常用命令示例:
# 以 root 权限执行
sudo systemctl restart nginx
# 以指定用户执行
sudo -u username command
# 查看当前用户 sudo 权限
sudo -l
# 以 root shell 切换
sudo -i
# 以 root 执行多条命令
sudo bash -c "command1 && command2"
# 显示 sudo 配置
sudo -ll
# 编辑文件(需要权限)
sudo -e /etc/hosts
# 或
sudoedit /etc/hosts
# 设置 sudo 免密码
sudo visudo
# 添加:username ALL=(ALL) NOPASSWD: ALL
适用场景: 普通用户需要临时root权限时,避免直接登录root。
visudo - 安全编辑sudo配置
这条命令的意思是:"用vi编辑器安全地修改sudoers配置文件(有语法检查)。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
visudo |
vi sudo | 安全编辑sudoers |
常用命令示例:
# 编辑 sudoers 文件
sudo visudo
# 添加用户 sudo 权限
username ALL=(ALL) ALL
# 添加用户组 sudo 权限
%groupname ALL=(ALL) ALL
# 设置免密码 sudo
username ALL=(ALL) NOPASSWD: ALL
# 设置特定命令 sudo 权限
username ALL=(ALL) /usr/bin/systemctl restart nginx
# 设置特定用户组免密码
%sudo ALL=(ALL) NOPASSWD: ALL
# Cmnd_Alias 示例
Cmnd_Alias NGINX = /usr/bin/systemctl restart nginx, /usr/bin/systemctl stop nginx
username ALL=(ALL) NGINX
适用场景: 配置哪些用户可以用sudo、可以用哪些命令。
7. 磁盘挂载命令
mount - 挂载文件系统
这条命令的意思是:"把一个分区或设备接入系统,让你能访问里面的文件。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
mount |
挂载 | 将文件系统连接到目录树 |
常用命令示例:
# 查看所有挂载
mount
# 挂载设备到目录
mount /dev/sdb1 /mnt/usb
# 以只读方式挂载
mount -r /dev/sdb1 /mnt/usb
# 以读写方式挂载
mount -w /dev/sdb1 /mnt/usb
# 指定文件系统类型
mount -t ext4 /dev/sdb1 /mnt/usb
mount -t ntfs-3g /dev/sdb1 /mnt/usb
# 重新挂载(修改挂载选项)
mount -o remount,rw /
# 绑定挂载
mount --bind /old/dir /new/dir
# 查看挂载状态
mount | grep /mnt
# 开机自动挂载(编辑 /etc/fstab)
# /dev/sdb1 /mnt/usb ext4 defaults 0 0
适用场景: 插入U盘后挂载到系统,如 mount /dev/sdb1 /mnt/usb。
umount - 卸载文件系统
这条命令的意思是:"把之前挂载的文件系统从目录树移除,安全弹出设备。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
umount |
unmount | 卸载(注意没有字母n) |
常用命令示例:
# 卸载设备
umount /mnt/usb
# 卸载设备(通过设备名)
umount /dev/sdb1
# 强制卸载(如果设备忙)
umount -f /mnt/usb
# 懒卸载(等使用完再卸载)
umount -l /mnt/usb
# 查看哪个进程在使用
lsof +f -- /mnt/usb
# 卸载并显示详细信息
umount -v /mnt/usb
适用场景: U盘拔掉前先卸载,防止数据丢失。
fdisk - 磁盘分区工具
这条命令的意思是:"创建、删除、修改磁盘分区。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
fdisk |
fixed/format disk | 磁盘分区管理 |
常用命令示例:
# 查看磁盘分区表
fdisk -l
# 查看指定磁盘分区
fdisk -l /dev/sdb
# 进入交互式分区
fdisk /dev/sdb
# 常用交互命令:
# p 打印分区表
# n 新建分区
# d 删除分区
# t 改变分区类型
# w 保存并退出
# q 不保存退出
# 非交互式创建分区
echo -e "n\np\n1\n\n\nw" | fdisk /dev/sdb
# 查看分区类型
fdisk -l /dev/sdb -t
适用场景: 给新硬盘分区、查看磁盘分区表。
mkfs - 创建文件系统
这条命令的意思是:"在磁盘分区上建立文件系统(格式化)。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
mkfs |
make file system | 创建文件系统 |
常用命令示例:
# 格式化为 ext4 文件系统
mkfs.ext4 /dev/sdb1
# 格式化为 ext3
mkfs.ext3 /dev/sdb1
# 格式化为 xfs
mkfs.xfs /dev/sdb1
# 格式化为 btrfs
mkfs.btrfs /dev/sdb1
# 格式化为 vfat(U 盘)
mkfs.vfat /dev/sdb1
# 快速格式化
mkfs.ext4 -F /dev/sdb1
# 设置卷标
mkfs.ext4 -L "MyDisk" /dev/sdb1
# 查看可用文件系统类型
ls /sbin/mkfs.*
适用场景: 新硬盘分区后需要格式化才能使用,如 mkfs.ext4 /dev/sdb1。
fsck - 检查修复文件系统
这条命令的意思是:"检查文件系统是否有错误并尝试修复。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
fsck |
file system check | 文件系统检查 |
常用命令示例:
# 检查文件系统
fsck /dev/sdb1
# 自动修复
fsck -a /dev/sdb1
# 交互式修复
fsck -r /dev/sdb1
# 强制检查
fsck -f /dev/sdb1
# 显示详细信息
fsck -V /dev/sdb1
# 检查所有文件系统
fsck -A
# 按顺序检查(避免并行)
fsck -As
# 只检查指定类型
fsck -t ext4 /dev/sdb1
# 检查前先卸载
umount /dev/sdb1
fsck /dev/sdb1
适用场景: 系统异常断电后检查修复文件系统。
8. 查找搜索命令
find - 强力文件搜索
这条命令的意思是:"从指定目录开始,按照各种条件(名字、时间、大小等)递归搜索文件。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
find |
查找 | 最强大的文件搜索工具 |
常用命令示例:
# 按文件名搜索
find / -name "*.conf"
find /home -name "*.txt"
# 不区分大小写
find / -iname "*.Conf"
# 按文件类型
find / -type f # 普通文件
find / -type d # 目录
find / -type l # 软链接
find / -type s # socket
# 按目录深度
find / -maxdepth 3 -name "*.conf"
# 按权限
find / -perm 777
# 按所有者
find / -user username
find / -group groupname
# 按大小
find / -size +100M # 大于 100M
find / -size -1G # 小于 1G
# 按修改时间
find / -mtime -7 # 7天内修改
find / -mtime 0 # 今天修改
find / -atime +30 # 30天前访问
# 按 inode 号
find / -inum 123456
# 组合条件
find / -name "*.log" -size +100M
find / -user alice -o -user bob # 或
# 排除目录
find / -path /proc -prune -o -name "*.conf"
# 执行命令
find / -name "*.tmp" -exec rm {} \;
find / -name "*.log" -delete
# 配合 xargs
find / -name "*.conf" | xargs grep "keyword"
# 显示详细信息
find / -name "*.conf" -ls
# 统计结果数量
find / -name "*.conf" | wc -l
适用场景: 不知道文件在哪时用 find / -name "*.conf" 全盘搜索。
locate - 快速文件定位
这条命令的意思是:"基于预先建立的索引数据库,快速查找文件(比find快很多)。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
locate |
定位 | 基于数据库的快速搜索 |
常用命令示例:
# 基本搜索
locate filename
# 不区分大小写
locate -i filename
# 显示数量限制
locate -n 10 filename
# 更新索引数据库
sudo updatedb
# 查看索引数据库路径
locate --statistics
# 搜索路径中包含关键字的文件
locate -l 5 "\/home\/.*\.conf"
# 配合管道
locate -i ".conf" | grep nginx
适用场景: 日常快速找文件(需先运行 updatedb 更新索引)。
which - 查找命令位置
这条命令的意思是:"找出某个命令的完整路径(这个命令到底是什么)。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
which |
哪个 | 查找命令的绝对路径 |
常用命令示例:
# 基本用法
which python
# 显示所有匹配结果
which -a python
# 显示命令类型
type python
# 查看多个命令
which python ruby perl
适用场景: 确认执行的是哪个版本,如 which python。
whereis - 查找命令全方位信息
这条命令的意思是:"找出命令的可执行文件、源码和手册页的位置。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
whereis |
在哪里 | 查找命令的多个相关信息 |
常用命令示例:
# 基本用法
whereis python
# 只搜索二进制
whereis -b python
# 只搜索源码
whereis -s python
# 只搜索手册
whereis -m python
# 查看返回结果
whereis -f python
适用场景: 比 which 提供更多信息,包括源码和手册位置。
type - 判断命令类型
这条命令的意思是:"判断一个名字是内置命令、外部程序还是别名。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
type |
类型 | 判断命令类型 |
常用命令示例:
# 基本用法
type ls
# 显示所有类型
type -a python
# 显示命令描述
type -t if
# 示例:
# type ls -> ls is /bin/ls
# type cd -> cd is a shell builtin
# type nginx -> nginx is /usr/sbin/nginx
# type ll -> ll is an alias for ls -l
适用场景: 判断某个命令是否被自定义为别名,如 type ls。
9. 管道和重定向
管道符 | - 流水线
这条命令的意思是:"把前一个命令的输出当作后一个命令的输入,像流水线一样处理数据。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
| |
pipe | 管道,把数据传递给下一个命令 |
适用场景: 组合多个命令,如 ps aux | grep nginx 查找nginx进程。
输出重定向 > / >>
这条命令的意思是:"把命令的输出保存到文件(>覆盖 / >>追加)。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
> |
重定向(覆盖) | 把输出写入文件,覆盖原内容 |
>> |
重定向(追加) | 把输出追加到文件末尾 |
适用场景: 保存命令输出到文件,如 echo "hello" > file.txt。
输入重定向 <
这条命令的意思是:"把文件内容作为命令的输入,而不是从键盘读取。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
< |
输入重定向 | 将文件内容作为输入 |
适用场景: 让命令从文件读取数据,如 wc -l < file.txt。
标准错误重定向 2>
这条命令的意思是:"把错误信息(stderr)重定向到文件,而 normal 输出(stdout)还在屏幕。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
2> |
错误重定向 | 把错误信息写进文件 |
适用场景: 只保存错误日志,如 grep error log.txt 2> error.log。
10. 进程和作业控制
jobs - 查看后台作业
这条命令的意思是:"显示当前终端会话里所有后台任务的列表。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
jobs |
作业 | 列出后台任务 |
适用场景: 查看有哪些任务在后台挂着,配合 fg 把任务拉到前台。
fg - 拉到前台
这条命令的意思是:"把后台暂停或运行的任务恢复到前台终端。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
fg |
foreground | 前台进程 |
适用场景: 后台任务需要交互时,如 fg %1 把1号任务拉到前台。
bg - 放到后台
这条命令的意思是:"把一个暂停的任务启动起来放到后台运行。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
bg |
background | 后台进程 |
适用场景: SSH连接中启动的长任务,先按 Ctrl+Z 暂停,再用 bg 后台运行。
nohup - 后台持续运行
这条命令的意思是:"让命令在你退出登录后依然继续运行(忽略挂断信号)。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
nohup |
no hangup | 不挂断 |
适用场景: 远程启动一个长期任务,关闭终端后任务不会停止。
nice - 调整进程优先级
这条命令的意思是:"以指定优先级启动程序,数值越低越"不占便宜",让系统更"照顾"其他进程。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
nice |
友好 | 以较低优先级运行程序 |
适用场景: 运行大型备份任务时设置低优先级,不影响正常服务。
11. 其他常用命令
echo - 显示文本
这条命令的意思是:"把指定的文字输出到屏幕上(回显)。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
echo |
回声 | 输出文本 |
常用命令示例:
# 基本输出
echo "Hello World"
# 输出变量
echo $PATH
echo $HOME
# 输出转义字符
echo "Line1\nLine2"
echo "Tab\tHere"
# 不换行输出
echo -n "No newline"
# 彩色输出
echo -e "\033[31mRed Text\033[0m"
# 禁用反斜杠转义
echo -E "Literal \n Text"
# 输出到文件
echo "content" > file.txt
# 追加到文件
echo "content" >> file.txt
# 显示当前日期
echo $(date)
适用场景: 打印变量、显示提示信息,如 echo $PATH。
printf - 格式化打印
这条命令的意思是:"按指定格式输出文本,比echo更灵活。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
printf |
print formatted | 格式化打印 |
常用命令示例:
# 基本用法
printf "Hello\n"
# 格式化输出
printf "%-10s %5d\n" "John" 25
printf "%.2f\n" 3.14159
# 转义字符
printf "Tab:\tNext\n"
printf "Unicode: ❤\n"
# 进制转换
printf "%d\n" 0xFF # 十六进制转十进制
printf "%x\n" 255 # 十进制转十六进制
# 保留小数
printf "%.3f\n" 3.1415926
# 输出到变量
result=$(printf "%s" "hello")
适用场景: 格式化输出,如 printf "%-10s %.2f\n" "hello" 3.14。
xargs - 转换命令行参数
这条命令的意思是:"把管道传来的数据转成命令行参数,一行一行喂给其他命令。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
xargs |
extend arguments | 扩展参数 |
常用命令示例:
# 配合管道使用
find . -name "*.txt" | xargs rm
# 批量重命名
ls *.txt | xargs -I {} mv {} {}.bak
# 指定分隔符
echo "a,b,c" | xargs -d, echo
# 显示命令不执行(测试)
find . -name "*.tmp" | xargs -p rm
# 指定并行数
find . -name "*.log" | xargs -P 4 gzip
# 限制每行参数个数
cat list.txt | xargs -n 2 echo
# 配合 grep 使用
cat file.txt | xargs grep "keyword"
# 读取 stdin
xargs -n 1 <<< "one two three"
适用场景: 批量删除文件,如 find . -name "*.tmp" | xargs rm。
alias - 设置命令别名
这条命令的意思是:"给长命令起一个短小好记的别名。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
alias |
别名 | 设置命令的别名 |
常用命令示例:
# 查看所有别名
alias
# 查看特定别名
alias ll
# 创建别名(临时,当前会话有效)
alias ll='ls -la'
alias gs='git status'
alias rm='rm -i' # 确认删除
# 创建永久别名(写入 ~/.bashrc)
echo "alias ll='ls -la'" >> ~/.bashrc
source ~/.bashrc
# 删除别名
unalias ll
# 删除所有别名
unalias -a
适用场景: 简化常用命令,如 alias ll='ls -la'。
export - 导出环境变量
这条命令的意思是:"把一个变量变成环境变量,让子进程也能看到这个变量。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
export |
导出 | 设置环境变量 |
常用命令示例:
# 导出变量
export MY_VAR="hello"
# 设置 PATH
export PATH=$PATH:/new/path
# 设置多个变量
export JAVA_HOME=/usr/java
export PATH=$JAVA_HOME/bin:$PATH
# 查看所有环境变量
export -p
# 查看特定变量
echo $PATH
# 永久生效(写入配置文件)
echo "export PATH=\$PATH:/new/path" >> ~/.bashrc
# 临时添加(只对当前命令有效)
PATH=/new/path command
适用场景: 设置环境变量让程序能找到,如 export JAVA_HOME=/usr/java。
env - 查看/设置环境变量
这条命令的意思是:"显示所有环境变量,或者用指定环境变量执行命令。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
env |
environment | 环境变量操作 |
常用命令示例:
# 查看所有环境变量
env
# 显示单个变量
env | grep PATH
# 以干净环境执行命令
env -i /path/to/command
# 设置变量执行命令
env VAR=value command
# 临时修改 PATH
env PATH=/new/path command
# 配合 xargs
env | xargs -n 1
适用场景: 查看当前所有环境变量,或在干净环境下执行命令。
history - 查看命令历史
这条命令的意思是:"列出你之前执行过的所有命令。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
history |
历史 | 显示命令历史记录 |
常用命令示例:
# 查看最近命令
history
# 显示最近 20 条
history 20
# 清空历史
history -c
# 删除特定行
history -d 100
# 追加新历史(防止覆盖)
history -a
# 搜索历史
history | grep "keyword"
# 快捷执行
!! # 执行上一条
!100 # 执行第 100 条
!-2 # 执行倒数第二条
^old^new # 替换上一条命令中的 old 为 new
适用场景: 查找之前执行过的命令,按 !n 重复执行第n条。
source - 执行脚本
这条命令的意思是:"读取并执行脚本文件中的命令(在当前shell中运行)。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
source |
读取执行 | 在当前shell执行脚本 |
常用命令示例:
# 执行脚本
source script.sh
# 简写形式(点号)
. script.sh
# 加载配置文件
source ~/.bashrc
适用场景: 让配置文件立即生效,如 source ~/.bashrc。
sleep - 暂停等待
这条命令的意思是:"让脚本暂停一段时间。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
sleep |
睡眠 | 等待指定时间 |
常用命令示例:
# 暂停 5 秒
sleep 5
# 暂停 1 分钟
sleep 1m
# 暂停 2 小时
sleep 2h
# 暂停 300 毫秒
sleep 0.3
# 脚本中使用
echo "Starting..."
sleep 5
echo "Done"
# 延时
sleep 10 && echo "Time's up!"
适用场景: 脚本中等待,如 sleep 5 等待5秒。
watch - 定期执行命令
这条命令的意思是:"每隔一段时间自动执行一条命令并显示结果。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
watch |
观察 | 定期重复执行命令 |
常用命令示例:
# 每秒显示磁盘使用
watch -n 1 df -h
# 每 2 秒显示内存使用
watch -n 2 free -h
# 高亮显示变化
watch -n 1 -d free -h
# 显示命令输出
watch -n 5 'df -h | grep sda'
# 退出 watch
Ctrl+C
适用场景: 实时监控,如 watch -n 1 df -h 每秒显示磁盘使用情况。
crontab - 定时任务
这条命令的意思是:"设置让系统定时执行某些命令(每天几点、每周几号等)。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
crontab |
cron table | 定时任务表 |
常用命令示例:
# 编辑 crontab
crontab -e
# 查看 crontab
crontab -l
# 删除 crontab
crontab -r
# 设置定时任务(每分钟执行)
* * * * * /path/to/command
# 每天凌晨 3 点执行
0 3 * * * /path/to/backup.sh
# 每周一早上 5 点执行
0 5 * * 1 /path/to/command
# 每月 1 号凌晨执行
0 0 1 * * /path/to/command
# 每 5 分钟执行
*/5 * * * * /path/to/command
# crontab 格式:
# 分(0-59) 时(0-23) 日(1-31) 月(1-12) 周(0-6) 命令
# 周 0 和 7 都是周日
crontab 时间格式:
┌───────────── 分钟 (0-59)
│ ┌───────────── 小时 (0-23)
│ │ ┌───────────── 日 (1-31)
│ │ │ ┌───────────── 月 (1-12)
│ │ │ │ ┌───────────── 周 (0-6, 0=周日)
│ │ │ │ │
* * * * * command
适用场景: 自动化运维,如每天凌晨备份数据库。
at - 一次性定时任务
这条命令的意思是:"设置在指定时间执行一次某条命令。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
at |
在...时候 | 一次性定时执行 |
常用命令示例:
# 查看 at 命令是否存在
which at
# 设置 5 分钟后执行
at now +5 minutes
at> echo "Hello" > /tmp/hello.txt
at> <Ctrl+D>
# 设置下午 4 点执行
at 4pm + 1 day
at> /path/to/command
at> <Ctrl+D>
# 设置具体时间执行
at 14:30 2026-05-10
at> /path/to/script.sh
at> <Ctrl+D>
# 查看待执行任务
atq
# 删除任务
atrm 1
适用场景: 临时需要某时某刻执行一次的任务(比cron简单)。
12. 高级命令
strace - 跟踪系统调用
这条命令的意思是:"追踪一个程序调用了哪些Linux内核函数(系统调用),用于调试。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
strace |
system call trace | 系统调用追踪 |
常用命令示例:
# 跟踪程序执行
strace ls
# 跟踪并显示时间
strace -t ls
# 跟踪并显示函数返回值
strace -s 100 ls
# 只显示特定系统调用
strace -e open,read,write ls
# 输出到文件
strace -o output.txt ls
# 跟踪子进程
strace -f ./my_program
# 统计系统调用次数
strace -c ls
# 显示进程 PID
strace -p 1234
适用场景: 程序莫名崩溃时,追踪它到底调用了什么系统函数。
ltrace - 跟踪库函数调用
这条命令的意思是:"追踪程序调用了哪些动态链接库的函数。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
ltrace |
library trace | 库函数追踪 |
常用命令示例:
# 跟踪库函数调用
ltrace ./program
# 显示函数调用时间
ltrace -t ./program
# 只显示特定函数
ltrace -e malloc,free ./program
# 输出到文件
ltrace -o output.txt ./program
# 统计函数调用次数
ltrace -c ./program
适用场景: 分析程序使用了哪些库函数。
gdb - 程序调试器
这条命令的意思是:"强大的程序调试工具,可以单步执行、查看变量值。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
gdb |
GNU Debugger | GNU调试器 |
常用命令示例:
# 启动调试
gdb ./program
# 设置断点
break main
break 10
# 运行程序
run
# 单步执行
next
step
# 查看变量
print variable_name
# 查看调用栈
backtrace
# 继续执行
continue
# 退出
quit
# 附加到运行中的进程
gdb -p PID
# 查看 core dump
gdb ./program core
适用场景: 调试程序崩溃、查看core dump。
perf - 性能分析工具
这条命令的意思是:"Linux内置的性能分析工具,查看CPU热点在哪里。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
perf |
performance | 性能分析 |
常用命令示例:
# 查看 CPU 热点
perf top
# 记录程序运行并生成报告
perf record -g ./program
perf report
# 统计函数调用
perf stat ./program
# 查看硬件事件
perf stat -e cycles,instructions ./program
# 查看实时事件
perf top -a
适用场景: 找出程序性能瓶颈。
13. 命令行工具的命名趣闻
git - 内容追踪系统
这条命令的意思是:"分布式版本控制系统,用于管理代码历史。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
git |
英国俚语 | 傻瓜、笨蛋(Linus自嘲命名) |
历史趣闻: Linus Torvalds觉得自己当时能写出这个项目是个混蛋,所以起了这个名字。
GNU - 自由软件组织
这条命令的意思是:"一个致力于自由软件运动的组织,开发了大量Linux基础工具。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
GNU |
GNU's Not Unix | 递归缩写 |
历史趣闻: 程序员喜欢用递归缩写来幽默表达,模仿了"No Unix"的风格。
apt - 包管理器
这条命令的意思是:"Debian/Ubuntu系统的软件包管理工具。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
apt |
Advanced Packaging Tool | 高级包装工具 |
适用场景: Ubuntu/Debian 安装、更新、卸载软件,如 apt install nginx。
yum - 包管理器
这条命令的意思是:"RedHat/CentOS系统的软件包管理工具。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
yum |
Yellowdog Updater Modified | 从Yellow Dog Linux移植而来 |
适用场景: CentOS/RHEL 安装RPM包,如 yum install nginx。
rpm - 包管理器
这条命令的意思是:"RedHat Package Manager,既可以指软件包格式,也可以指管理工具。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
rpm |
RPM Package Manager | 递归缩写 |
适用场景: 手动安装 RPM 包,如 rpm -ivh package.rpm。
dd - 数据转换复制
这条命令的意思是:"按固定大小块复制数据,常用于制作启动盘。"
详细拆解:
| 部分 | 含义 | 作用 |
|---|---|---|
dd |
dataset definition | 数据集定义(来源有争议) |
适用场景: 制作USB启动盘,如 dd if=ubuntu.iso of=/dev/sdb bs=4M。
14. 命令记忆技巧
面对一个陌生的命令,可以这样思考:
| 记忆技巧 | 示例 |
|---|---|
| 缩写直译 | ls = list = 列出 |
| 短语拆分 | grep = g/re/p = 全局正则打印 |
| 联想记忆 | chmod = change mode = 改权限 |
| 了解历史 | tar 虽不用磁带了但名字保留 |
提示:理解命令命名来源能帮助您更好地记忆命令,同时也能深入了解Unix/Linux的设计哲学。

浙公网安备 33010602011771号