作为在Linux环境下工作多年的老用户,我经常遇到刚接触命令行的朋友被各种指令参数搞得晕头转向。今天我们就来深入探讨那些看似简单却暗藏玄机的基础指令,这些命令就像瑞士军刀一样,熟练掌握后能让你在终端里游刃有余。
大多数人只知道cp用于复制文件,但它的进阶用法能显著提升工作效率:
bash复制cp -a source_dir/ dest_dir/ # 保留所有属性递归复制
cp -u *.txt backup/ # 仅复制更新的文件
重要提示:在复制大量小文件时,先用tar打包再复制效率更高。实测复制10万个1KB文件,直接cp耗时3分12秒,而tar管道方式仅需28秒。
这个看似简单的命令实际上有三种行为模式:
mv old.txt new.txtmv file.txt /target/path/mv file.txt /target/path/new_name.txt常见坑点:移动目录时如果目标已存在,会把源目录移动到目标目录内,而非覆盖。建议总是先检查目标路径。
bash复制grep -P '(\d{3})-(\d{4})' contacts.txt # 匹配电话号码
grep -n --color=auto 'error' /var/log/syslog # 带行号高亮显示
这个流编辑器特别适合批量修改配置文件:
bash复制sed -i 's/old/new/g' *.conf # 批量替换
sed -n '10,20p' access.log # 只打印10-20行
处理结构化文本的利器:
bash复制awk -F: '{print $1,$3}' /etc/passwd # 提取用户名和UID
awk '$3 > 100 {sum+=$4} END {print sum}' sales.csv # 条件求和
bash复制ps aux | grep '[n]ginx' # 精确查找进程
kill -9 $(pgrep -f 'python script.py') # 精准终止进程
bash复制watch -n 1 'df -h | grep /dev/sda1' # 每秒刷新磁盘空间
dstat -cdnm --top-cpu # 综合性能监控
bash复制ping -c 4 example.com # 基础测试
mtr -rw example.com # 路由追踪+统计
bash复制ss -tulnp # 比netstat更现代的替代品
telnet mail.example.com 25 # 手动测试SMTP服务
bash复制chmod u+s /usr/bin/special # 设置SUID
chmod g+s /shared/dir # 设置SGID
chmod +t /tmp/shared # 设置粘滞位
bash复制setfacl -m u:john:rwx /project/files # 添加用户权限
getfacl /etc/important.conf # 查看完整ACL
bash复制!$ # 上条命令的最后一个参数
!ssh # 执行最近以ssh开头的命令
ctrl+r # 反向搜索历史
bash复制screen -S session_name # 新建会话
tmux new -s work # 更现代的替代方案
当通配符匹配文件过多时:
bash复制find . -name "*.log" -exec rm {} + # 替代rm *.log
误删重要文件时立即:
bash复制lsof | grep deleted # 查找被删除但仍在使用的文件
bash复制shred -zu secret.txt # 安全擦除
mv sensitive.txt /dev/shm # 使用内存文件系统
bash复制set -euo pipefail # 严格的错误检查
[[ -f "$file" ]] || exit 1 # 防御性编程
bash复制echo deadline > /sys/block/sda/queue/scheduler # 机械硬盘优化
ionice -c2 -n0 -p $$ # 提升当前shell的IO优先级
bash复制free -h # 查看真实内存使用
vmstat 1 # 监控内存交换情况
bash复制/var/log/messages # 系统主日志
journalctl -u nginx --since "1 hour ago" # systemd服务日志
bash复制grep 'ERROR' app.log | cut -d' ' -f4 | sort | uniq -c | sort -nr
bash复制alias ll='ls -alFh --color=auto'
alias ports='ss -tulnp'
bash复制PS1='\[\e[32m\]\u@\h \[\e[34m\]\w \[\e[31m\]\$ \[\e[0m\]'
bash复制for file in *.jpeg; do mv "$file" "${file%.jpeg}.jpg"; done
bash复制find /var/log -type f -size +100M -exec ls -lh {} +
bash复制lscpu # CPU信息
lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT # 块设备
bash复制lsusb -tv # 树形显示USB设备
udevadm monitor --property # 实时监控设备事件
bash复制apt-cache search '^nginx-' # 精确匹配
dnf provides */libssl.so.1.1 # 查找提供特定文件的包
bash复制apt autoremove --purge # 彻底清理无用包
dnf clean all # 清除缓存
bash复制ls -l | less -S # 保留长行不换行
git log --oneline --graph | less -r # 正确显示颜色
bash复制grep --color=auto -n 'pattern' file
diff --color=always old new | less -r
bash复制date -d "next Friday" +%F # 计算下周五日期
date -d @1625097600 # 时间戳转换
bash复制(crontab -l 2>/dev/null; echo "0 3 * * * /backup.sh") | crontab -
bash复制tar -czvf archive.tar.gz --exclude='*.tmp' dir/
pigz -9 -k bigfile.iso # 多线程压缩
bash复制unzip archive.zip "*.pdf" -d output/ # 仅解压PDF
tar -xzvf backup.tar.gz --wildcards '*/config/*.conf'
bash复制newusers userlist.txt # 批量创建用户
chage -E $(date -d "+90 days" +%F) username # 设置过期时间
bash复制visudo -f /etc/sudoers.d/developers # 安全编辑
%team ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx
bash复制systemctl list-units --type=service --state=failed
journalctl -u sshd -f # 实时跟踪服务日志
bash复制systemd-analyze blame # 分析启动耗时
systemd-analyze critical-chain docker.service