3563 字
18 分钟
Linux 常用命令速查手册
文件与目录操作
# 列出文件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 / whereiswhich python3 # 查找可执行文件路径whereis nginx # 查找二进制、源码、手册路径文件内容查看
# 查看完整内容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 # 检测文件类型文件权限与所有权
# 查看权限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-xchmod 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 — 文本搜索
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 — 流编辑器
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 — 文本分析
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 # 带行号输出其他文本工具
# 排序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)管道与重定向
# 重定向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 # 追加模式进程管理
# 查看进程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 # 修改运行中进程优先级系统信息
# 系统基本信息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 统计磁盘与存储
# 磁盘使用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 个文件/目录压缩与解压
# tar(打包 + 压缩)tar -czf archive.tar.gz dir/ # 打包并 gzip 压缩tar -cjf archive.tar.bz2 dir/ # 打包并 bzip2 压缩tar -xzf archive.tar.gz # 解压 gziptar -xjf archive.tar.bz2 # 解压 bzip2tar -xzf archive.tar.gz -C /dest/ # 解压到指定目录tar -tf archive.tar.gz # 查看压缩包内容(不解压)
# zip / unzipzip -r archive.zip dir/ # 压缩目录zip archive.zip file1 file2 # 压缩多个文件unzip archive.zip # 解压unzip archive.zip -d /dest/ # 解压到指定目录unzip -l archive.zip # 查看内容(不解压)
# gzip / gunzipgzip file.txt # 压缩(原文件被替换为 file.txt.gz)gunzip file.txt.gz # 解压gzip -k file.txt # 压缩并保留原文件
# xzxz file.txt # xz 压缩unxz file.txt.xz # 解压网络相关
# 网络信息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(实时)
# DNSnslookup example.com # DNS 查询dig example.com # 详细 DNS 查询dig +short example.com # 只返回 IPhost 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 # 连接测试用户与用户组管理
# 查看用户信息whoami # 当前用户名id # 当前用户 UID/GIDid 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 Shellsudo -u user command # 以指定用户身份执行服务管理(systemd)
# 服务状态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)
# 编辑当前用户的 crontabcrontab -e
# 查看当前 crontabcrontab -l
# 删除当前 crontabcrontab -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
# 查看环境变量env # 所有环境变量echo $PATH # 查看 PATHecho $HOME # 家目录printenv USER # 查看指定变量
# 设置环境变量export MY_VAR="hello" # 当前 Shell 会话有效# 永久生效:写入 ~/.bashrc 或 ~/.zshrcecho 'export MY_VAR="hello"' >> ~/.bashrcsource ~/.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常用场景
场景一:查找并杀死占用某端口的进程
ss -tlnp | grep :8080 # 查看谁占用了 8080 端口# 或者lsof -i :8080 # 需安装 lsofkill -9 $(lsof -t -i :8080) # 杀死占用 8080 的进程场景二:批量重命名文件
# 将所有 .txt 重命名为 .mdfor f in *.txt; do mv "$f" "${f%.txt}.md"; done
# 使用 rename 命令(Perl 版本)rename 's/\.txt$/.md/' *.txt场景三:实时监控日志中的错误
tail -f /var/log/app.log | grep --line-buffered "ERROR"场景四:查找最近修改的文件
find . -type f -mmin -30 # 30 分钟内修改的文件find . -type f -mtime -1 # 24 小时内修改的文件场景五:批量替换文件内容
# 在所有 .py 文件中将 old_func 替换为 new_funcfind . -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'场景六:快速创建大量测试文件
# 创建 file01.txt 到 file10.txtfor i in $(seq -w 1 10); do touch "file${i}.txt"; done
# 使用花括号展开touch file{01..10}.txt场景七:比较两个目录的差异
diff -rq dir1/ dir2/ # 递归比较,只报告不同的文件场景八:监控系统资源
# 每 2 秒刷新内存使用watch -n 2 free -h
# 每 5 秒查看磁盘 IOwatch -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/