3563 字
18 分钟
Linux 常用命令速查手册

文件与目录操作#

Terminal window
# 列出文件
ls # 列出当前目录
ls -la # 详细信息 + 隐藏文件
ls -lh # 人类可读的文件大小
ls -lt # 按修改时间排序(最新在前)
ls -lS # 按文件大小排序(最大在前)
# 切换目录
cd /var/log # 进入指定路径
cd ~ # 回到家目录
cd - # 回到上一次的目录
cd .. # 回到上一级目录
# 查看当前路径
pwd
# 创建目录
mkdir mydir # 创建单个目录
mkdir -p a/b/c # 递归创建多层目录
# 创建文件
touch file.txt # 创建空文件(或更新时间戳)
# 复制
cp file.txt backup.txt # 复制文件
cp -r dir1/ dir2/ # 递归复制目录
cp -i file.txt dest/ # 覆盖前提示确认
# 移动/重命名
mv old.txt new.txt # 重命名
mv file.txt /tmp/ # 移动文件
mv -i file.txt dest/ # 覆盖前提示
# 删除
rm file.txt # 删除文件
rm -r dir/ # 递归删除目录
rm -rf dir/ # 强制递归删除(危险!)
rm -i file.txt # 删除前确认
# 链接
ln -s /path/to/target link_name # 创建软链接(符号链接)
ln /path/to/target link_name # 创建硬链接
readlink -f link_name # 查看软链接指向的真实路径
# 查找文件
find . -name "*.log" # 按名称查找
find / -size +100M # 查找大于 100MB 的文件
find . -mtime -7 # 查找 7 天内修改的文件
find . -type f -name "*.tmp" -delete # 查找并删除
find . -type d -empty # 查找空目录
# locate(需要先 updatedb)
locate nginx.conf # 快速定位文件路径
# which / whereis
which python3 # 查找可执行文件路径
whereis nginx # 查找二进制、源码、手册路径

文件内容查看#

Terminal window
# 查看完整内容
cat file.txt # 输出文件全部内容
cat -n file.txt # 带行号输出
# 分页查看
less file.txt # 分页浏览(推荐,支持上下翻页)
more file.txt # 简单分页
# 查看头部/尾部
head -20 file.txt # 查看前 20 行
tail -20 file.txt # 查看后 20 行
tail -f /var/log/syslog # 实时追踪文件末尾(看日志)
tail -f -n 100 app.log # 先显示最后 100 行再持续追踪
# 统计
wc -l file.txt # 行数
wc -w file.txt # 单词数
wc -c file.txt # 字节数
# 文件类型
file document.pdf # 检测文件类型

文件权限与所有权#

Terminal window
# 查看权限
ls -l file.txt
# -rw-r--r-- 1 user group 1024 May 15 10:00 file.txt
# │├─┤├─┤├─┤
# │ │ │ └─ 其他用户权限
# │ │ └──── 组权限
# │ └──────── 所有者权限
# └────────── 文件类型(- 普通文件, d 目录, l 链接)
# 修改权限
chmod 755 script.sh # rwxr-xr-x
chmod 644 file.txt # rw-r--r--
chmod +x script.sh # 添加执行权限
chmod -w file.txt # 去除写权限
chmod -R 755 dir/ # 递归修改目录权限
# 权限数字对照:r=4, w=2, x=1
# 755 = rwx(7) r-x(5) r-x(5)
# 644 = rw-(6) r--(4) r--(4)
# 修改所有者
chown user file.txt # 修改文件所有者
chown user:group file.txt # 同时修改所有者和组
chown -R user:group dir/ # 递归修改
# 修改所属组
chgrp group file.txt
# 特殊权限
chmod u+s file # SUID:以文件所有者身份执行
chmod g+s dir/ # SGID:新文件继承目录的组
chmod +t dir/ # Sticky Bit:只有所有者能删除自己的文件

文本处理#

grep — 文本搜索#

Terminal window
grep "error" log.txt # 搜索包含 error 的行
grep -i "error" log.txt # 忽略大小写
grep -r "TODO" src/ # 递归搜索目录
grep -n "pattern" file.txt # 显示行号
grep -c "error" log.txt # 统计匹配行数
grep -v "debug" log.txt # 反向过滤(排除 debug)
grep -l "error" *.log # 只列出包含匹配的文件名
grep -A 3 "error" log.txt # 显示匹配行及后 3 行
grep -B 2 "error" log.txt # 显示匹配行及前 2 行
grep -E "err|warn" log.txt # 扩展正则(等同 egrep)

sed — 流编辑器#

Terminal window
sed 's/old/new/' file.txt # 替换每行第一个匹配
sed 's/old/new/g' file.txt # 替换所有匹配
sed -i 's/old/new/g' file.txt # 原地修改文件
sed -i.bak 's/old/new/g' file # 原地修改,保留备份
sed -n '10,20p' file.txt # 打印第 10-20 行
sed '5d' file.txt # 删除第 5 行
sed '/^#/d' file.txt # 删除所有注释行
sed '/^$/d' file.txt # 删除空行

awk — 文本分析#

Terminal window
awk '{print $1}' file.txt # 打印第一列
awk '{print $1, $3}' file.txt # 打印第一和第三列
awk -F: '{print $1}' /etc/passwd # 以 : 为分隔符
awk '$3 > 100' file.txt # 第三列大于 100 的行
awk '{sum+=$1} END {print sum}' file.txt # 求第一列的和
awk 'NR>=10 && NR<=20' file.txt # 打印 10-20 行
awk '{print NR, $0}' file.txt # 带行号输出

其他文本工具#

Terminal window
# 排序
sort file.txt # 默认字典序排序
sort -n file.txt # 数字排序
sort -r file.txt # 逆序
sort -k2 file.txt # 按第二列排序
sort -u file.txt # 排序并去重
# 去重
uniq file.txt # 去除连续重复行(通常配合 sort 使用)
sort file.txt | uniq -c # 统计重复次数
# 裁剪列
cut -d: -f1 /etc/passwd # 按 : 分割取第一列
cut -c1-10 file.txt # 取每行前 10 个字符
# 字符替换/删除
tr 'a-z' 'A-Z' < file.txt # 小写转大写
tr -d '\r' < win.txt > unix.txt # 删除回车符(Windows → Unix)
tr -s ' ' < file.txt # 压缩连续空格
# 列合并
paste file1.txt file2.txt # 按行并列合并两个文件
# diff 比较
diff file1.txt file2.txt # 比较两个文件差异
diff -u file1.txt file2.txt # unified 格式(类似 git diff)

管道与重定向#

Terminal window
# 重定向
echo "hello" > file.txt # 覆盖写入
echo "world" >> file.txt # 追加写入
command 2> error.log # 标准错误重定向
command > out.log 2>&1 # stdout 和 stderr 都写入同一文件
command &> all.log # 同上(Bash 简写)
command > /dev/null 2>&1 # 丢弃所有输出
# 管道
cat log.txt | grep "error" | wc -l # 统计错误行数
ps aux | grep nginx # 查找 nginx 进程
history | grep "docker" # 搜索历史命令
# xargs — 将 stdin 转为命令参数
find . -name "*.log" | xargs rm # 删除所有 .log 文件
find . -name "*.js" | xargs grep "TODO" # 在所有 .js 文件中搜索
echo "file1 file2" | xargs -n1 cat # 每次传一个参数
# tee — 同时输出到终端和文件
command | tee output.log # 输出到终端同时写入文件
command | tee -a output.log # 追加模式

进程管理#

Terminal window
# 查看进程
ps aux # 查看所有进程
ps aux | grep nginx # 过滤特定进程
ps -ef --forest # 树形显示进程关系
pgrep -a nginx # 按名称查找进程
# 实时监控
top # 实时进程监控
htop # 更友好的版本(需安装)
# 杀死进程
kill PID # 发送 SIGTERM(优雅终止)
kill -9 PID # 发送 SIGKILL(强制终止)
killall nginx # 按名称杀死所有匹配进程
pkill -f "python app.py" # 按命令行模式杀死进程
# 后台任务
command & # 后台执行命令
nohup command & # 后台执行,终端关闭后继续
jobs # 查看当前 Shell 后台任务
fg %1 # 将后台任务 1 调到前台
bg %1 # 将暂停的任务 1 放到后台继续执行
Ctrl+Z # 暂停前台任务
# 优先级
nice -n 10 command # 以较低优先级运行
renice -n 5 -p PID # 修改运行中进程优先级

系统信息#

Terminal window
# 系统基本信息
uname -a # 内核版本等完整信息
cat /etc/os-release # 发行版信息
hostname # 主机名
uptime # 运行时间和负载
date # 当前日期时间
cal # 日历
# 硬件信息
lscpu # CPU 信息
free -h # 内存使用情况
lsblk # 块设备列表
lspci # PCI 设备
lsusb # USB 设备
# 系统负载
top # 实时负载
vmstat 1 5 # 每秒采样,共 5 次
iostat # IO 统计

磁盘与存储#

Terminal window
# 磁盘使用
df -h # 各分区使用情况
du -sh dir/ # 目录总大小
du -sh * # 当前目录下各项大小
du -h --max-depth=1 # 只显示一层深度
# 磁盘操作
mount /dev/sdb1 /mnt # 挂载分区
umount /mnt # 卸载
fdisk -l # 查看磁盘分区表
blkid # 查看分区 UUID
# 查找大文件
find / -type f -size +500M -exec ls -lh {} \;
du -ah . | sort -rh | head -20 # 当前目录最大的 20 个文件/目录

压缩与解压#

Terminal window
# tar(打包 + 压缩)
tar -czf archive.tar.gz dir/ # 打包并 gzip 压缩
tar -cjf archive.tar.bz2 dir/ # 打包并 bzip2 压缩
tar -xzf archive.tar.gz # 解压 gzip
tar -xjf archive.tar.bz2 # 解压 bzip2
tar -xzf archive.tar.gz -C /dest/ # 解压到指定目录
tar -tf archive.tar.gz # 查看压缩包内容(不解压)
# zip / unzip
zip -r archive.zip dir/ # 压缩目录
zip archive.zip file1 file2 # 压缩多个文件
unzip archive.zip # 解压
unzip archive.zip -d /dest/ # 解压到指定目录
unzip -l archive.zip # 查看内容(不解压)
# gzip / gunzip
gzip file.txt # 压缩(原文件被替换为 file.txt.gz)
gunzip file.txt.gz # 解压
gzip -k file.txt # 压缩并保留原文件
# xz
xz file.txt # xz 压缩
unxz file.txt.xz # 解压

网络相关#

Terminal window
# 网络信息
ip addr # 查看 IP 地址(推荐)
ip link # 查看网卡状态
ip route # 查看路由表
ifconfig # 查看 IP(旧命令)
ss -tlnp # 查看监听端口(替代 netstat)
netstat -tlnp # 查看监听端口(旧命令)
# 连接测试
ping google.com # 测试连通性
ping -c 4 google.com # 只发 4 个包
traceroute google.com # 追踪路由路径
mtr google.com # 更好的 traceroute(实时)
# DNS
nslookup example.com # DNS 查询
dig example.com # 详细 DNS 查询
dig +short example.com # 只返回 IP
host example.com # 简单 DNS 查询
# 下载与传输
curl -O https://example.com/file.zip # 下载文件
curl -o name.zip https://url/file.zip # 下载并重命名
curl -I https://example.com # 只看响应头
wget https://example.com/file.zip # 下载文件
wget -c https://url/big-file.zip # 断点续传
# 远程操作
ssh user@host # SSH 登录
ssh -p 2222 user@host # 指定端口
scp file.txt user@host:/path/ # 复制文件到远程
scp user@host:/path/file.txt . # 从远程复制文件
scp -r dir/ user@host:/path/ # 递归复制目录
rsync -avz dir/ user@host:/dest/ # 增量同步(推荐)
rsync -avz --delete src/ dest/ # 同步并删除目标多余文件
# 端口测试
nc -zv host 80 # 测试端口是否开放
telnet host 80 # 连接测试

用户与用户组管理#

Terminal window
# 查看用户信息
whoami # 当前用户名
id # 当前用户 UID/GID
id username # 指定用户的信息
who # 当前登录的用户
last # 登录历史
# 用户管理
useradd -m -s /bin/bash newuser # 创建用户(带家目录和 Shell)
userdel -r username # 删除用户及家目录
usermod -aG docker username # 将用户添加到 docker 组
passwd username # 修改密码
# 用户组管理
groupadd devteam # 创建组
groupdel devteam # 删除组
groups username # 查看用户所属组
# 切换用户
su - username # 切换用户(加载环境)
sudo command # 以 root 权限执行
sudo -i # 切换到 root Shell
sudo -u user command # 以指定用户身份执行

服务管理(systemd)#

Terminal window
# 服务状态
systemctl status nginx # 查看服务状态
systemctl is-active nginx # 是否正在运行
systemctl is-enabled nginx # 是否开机自启
# 启停服务
systemctl start nginx # 启动
systemctl stop nginx # 停止
systemctl restart nginx # 重启
systemctl reload nginx # 重新加载配置(不中断服务)
# 开机自启
systemctl enable nginx # 设置开机自启
systemctl disable nginx # 取消开机自启
systemctl enable --now nginx # 启动 + 设置开机自启
# 查看所有服务
systemctl list-units --type=service # 已加载的服务
systemctl list-units --type=service --all # 所有服务(含未激活)
# 查看日志
journalctl -u nginx # 查看指定服务日志
journalctl -u nginx -f # 实时追踪
journalctl -u nginx --since "1 hour ago" # 最近一小时
journalctl -xe # 最近的错误日志

定时任务(cron)#

Terminal window
# 编辑当前用户的 crontab
crontab -e
# 查看当前 crontab
crontab -l
# 删除当前 crontab
crontab -r
# cron 格式
# 分 时 日 月 周 命令
# * * * * * command
#
# 示例:
# 每天凌晨 2 点执行备份
# 0 2 * * * /home/user/backup.sh
#
# 每 5 分钟执行一次
# */5 * * * * /path/to/script.sh
#
# 每周一到周五上午 9 点
# 0 9 * * 1-5 /path/to/script.sh
#
# 每月 1 号零点
# 0 0 1 * * /path/to/script.sh
# systemd timer(现代替代方案)
systemctl list-timers # 查看所有定时器

环境变量与 Shell#

Terminal window
# 查看环境变量
env # 所有环境变量
echo $PATH # 查看 PATH
echo $HOME # 家目录
printenv USER # 查看指定变量
# 设置环境变量
export MY_VAR="hello" # 当前 Shell 会话有效
# 永久生效:写入 ~/.bashrc 或 ~/.zshrc
echo 'export MY_VAR="hello"' >> ~/.bashrc
source ~/.bashrc # 立即加载
# PATH 操作
export PATH="$PATH:/new/path" # 追加路径
export PATH="/new/path:$PATH" # 前置路径(优先查找)
# Shell 历史
history # 查看命令历史
history | grep "docker" # 搜索历史命令
!! # 执行上一条命令
!42 # 执行历史中第 42 条命令
Ctrl+R # 反向搜索历史
# 别名
alias ll='ls -la' # 设置别名
alias gs='git status'
unalias ll # 删除别名
# 永久别名:写入 ~/.bashrc 或 ~/.zshrc

常用场景#

场景一:查找并杀死占用某端口的进程#

Terminal window
ss -tlnp | grep :8080 # 查看谁占用了 8080 端口
# 或者
lsof -i :8080 # 需安装 lsof
kill -9 $(lsof -t -i :8080) # 杀死占用 8080 的进程

场景二:批量重命名文件#

Terminal window
# 将所有 .txt 重命名为 .md
for f in *.txt; do mv "$f" "${f%.txt}.md"; done
# 使用 rename 命令(Perl 版本)
rename 's/\.txt$/.md/' *.txt

场景三:实时监控日志中的错误#

Terminal window
tail -f /var/log/app.log | grep --line-buffered "ERROR"

场景四:查找最近修改的文件#

Terminal window
find . -type f -mmin -30 # 30 分钟内修改的文件
find . -type f -mtime -1 # 24 小时内修改的文件

场景五:批量替换文件内容#

Terminal window
# 在所有 .py 文件中将 old_func 替换为 new_func
find . -name "*.py" -exec sed -i 's/old_func/new_func/g' {} +
# 使用 grep + sed(先确认再替换)
grep -rl "old_func" --include="*.py" . | xargs sed -i 's/old_func/new_func/g'

场景六:快速创建大量测试文件#

Terminal window
# 创建 file01.txt 到 file10.txt
for i in $(seq -w 1 10); do touch "file${i}.txt"; done
# 使用花括号展开
touch file{01..10}.txt

场景七:比较两个目录的差异#

Terminal window
diff -rq dir1/ dir2/ # 递归比较,只报告不同的文件

场景八:监控系统资源#

Terminal window
# 每 2 秒刷新内存使用
watch -n 2 free -h
# 每 5 秒查看磁盘 IO
watch -n 5 iostat

快捷键速查#

快捷键功能
Ctrl+C终止当前命令
Ctrl+Z暂停当前命令(用 fg 恢复)
Ctrl+D退出当前 Shell
Ctrl+L清屏(等同 clear
Ctrl+A光标移到行首
Ctrl+E光标移到行末
Ctrl+W删除光标前一个单词
Ctrl+U删除光标到行首
Ctrl+K删除光标到行末
Ctrl+R反向搜索历史命令
Tab自动补全
Tab Tab显示所有补全选项
Linux 常用命令速查手册
https://blog.syomega.top/posts/linux-common-commands/
作者
酱w
发布于
2026-05-15
许可协议
CC BY-NC-SA 4.0