小易说IT 小易说IT

实用 Linux / Unix 命令行技巧

适用于 macOS、Linux、WSL,bash/zsh 通用,避开冷门魔法,优先提效、排错、安全

一、基础操作小技巧

1. !! 重复上一条命令(sudo 救场神器)

apt update
# 提示权限不足,直接输入
sudo !!
# 等价 sudo apt update
  • !$:取上一条命令最后一个参数

mkdir /tmp/test
cd !$
# cd /tmp/test
  • !123:执行 history 里编号 123 的命令;!grep:执行最近一条以 grep 开头的命令

2. 快速编辑命令(不用方向键来回跳)

快捷键(bash/zsh)

  • Ctrl + A:跳到行首

  • Ctrl + E:跳到行尾

  • Ctrl + U:删除光标前面整行

  • Ctrl + K:删除光标后面内容

  • Ctrl + W:删除光标前一个单词(按空格切分)

  • Ctrl + R反向搜索历史命令,输入关键词,回车直接执行,非常常用

3. 不覆盖文件,追加输出 >>> 是覆盖

echo "新增一行" >> log.txt   # 追加
echo "覆盖内容" > log.txt    # 清空后写入,小心!
# 只输出错误信息到文件
command 2> err.log
# 标准输出+错误都写入同一个日志
command > all.log 2>&1

二、查找 & 过滤(最常用)

4. grep 进阶

grep -i "error" app.log       # -i 忽略大小写
grep -n "warn" app.log        # -n 显示行号
grep -v "debug" app.log       # -v 反向匹配,排除debug行
grep -A5 -B2 "Exception" app.log # 匹配行,附带后5行、前2行
grep -r "password" ./src      # -r 递归搜索目录下所有文件

5. find 查找文件(生产神器)

# 查找当前目录下大于100M的文件
find . -type f -size +100M
# 查找7天前修改的日志并删除(谨慎!先去掉 -delete 预览)
find ./logs -name "*.log" -mtime +7 -delete
# 查找文件内容含关键词(组合grep)
find . -name "*.java" -exec grep "TODO" {} \;

-exec {} \;:对找到的每个文件执行命令;{} 代表文件名占位符

6. 管道 | + 分页

ps aux | grep java     # 查看java进程
dmesg | less           # less分页查看,空格翻页,q退出,/关键词搜索

less 快捷键:/xxx 向下搜;?xxx向上搜;n下一条匹配;q退出

三、进程、端口、系统状态

7. 查看端口占用

# Linux
ss -tulnp | grep 8080
# 旧版 netstat(很多系统默认没装)
netstat -tulnp | grep 8080
# macOS / BSD
lsof -i :8080

8. 快速杀进程

pkill -f "java"    # 按命令字符串匹配杀进程
# 先查PID再杀
ps aux | grep xxx
kill -15 1234      # 优雅终止(优先)
kill -9 1234       # 强制杀死,尽量少用,容易丢数据

9. 后台运行任务(nohup / &)

# 后台跑,脱离终端,日志输出到nohup.out
nohup ./app.sh &
# 查看后台任务
jobs
# 将后台任务切回前台 fg;bg 放到后台继续跑
fg %1

注意:单纯 & 会随终端关闭而终止,需要 nohup 或者 screen/tmux 长时间托管

四、文件操作

10. 统计行数、单词、大小 wc

wc -l app.log    # 统计行数
wc -c app.log    # 字节数

11. tar 打包解压(记住这一套,不用反复查)

# 压缩:把 dir/ 打包成 archive.tar.gz
tar -zcvf archive.tar.gz dir/
# 解压 tar.gz
tar -zxvf archive.tar.gz
# 参数记忆:z(gzip) c(create) v(verbose显示) f(文件名);x=extract解压

12. 批量重命名(rename)

# Linux:把所有 .txt 改成 .md
rename 's/\.txt$/.md/' *.txt

五、省时小技巧

13. 用 ;&& 串联命令

# ; 不管前面成功失败,都会执行后面
mkdir test ; cd test
# && 前面命令成功,才执行后面(推荐)
apt update && apt install nginx
# || 前面失败,才执行后面
ping 1.1.1.1 || echo "不通"

14. 临时别名 alias,永久写到~/.bashrc/ ~/.zshrc

alias ll='ls -alh'
alias gs='git status'
# 查看所有别名
alias

15. 快速查看命令耗时

time curl baidu.com

六、安全避坑(非常重要)

  1. rm -rf 不要直接写 rm -rf /,千万不要变量拼接没校验;批量删除建议先 ls 预览

  2. 管道 | 组合复杂命令,先分段执行验证

  3. 生产尽量少用 kill -9,优先 kill 优雅关闭

  4. 写脚本时,set -e 遇到错误自动退出;set -u 禁止未定义变量

七、tmux(远程服务器必学,终端会话永不掉线)

简单入门:

tmux new -s work   # 创建会话 work
tmux ls            # 查看会话列表
tmux attach -t work # 重新接入会话
# tmux内快捷键:Ctrl+b 松开,再按 d 后台挂起;Ctrl+b % 垂直分屏;Ctrl+b " 水平分屏

本文原创作者:易君召,详见:https://www.yijunzhao.cc/about,转载请注明出处。

原文链接 https://www.yijunzhao.cc/archives/practical-linux-unix-command-line-tips

欢迎访问 https://www.yijunzhao.cc/

https://www.yijunzhao.cc/