从事运维工作十年来,我整理过不下20个版本的Linux命令手册。今天分享的这份清单不同于网上那些简单罗列,而是基于真实服务器管理场景提炼出的高频实用命令,每个命令都经过生产环境验证。这份指南特别适合:
为什么需要掌握这些命令?在最近一次服务器宕机事件中,我仅用3条命令就定位到是磁盘inode耗尽导致的问题。这就是Linux命令的价值——它们是你与系统对话的直接工具。
pwd命令看似简单,但在复杂的Docker容器环境中,它能帮你确认当前工作目录的绝对路径。我习惯配合ls -lht使用,这个组合能显示:
bash复制# 经典组合示例
pwd && ls -lht | head -5 # 显示当前路径并列出最近修改的5个文件
经验:在查找大文件时,
du -sh * | sort -rh | head -10比单纯用ls更准确,因为它统计的是实际磁盘占用而非文件大小。
cp命令的-a参数保留所有属性这个大家都知道,但很多人不知道rsync -avz在跨服务器复制时更可靠。有次迁移千万级小文件,用scp导致权限丢失,而rsync完美解决了问题。
bash复制# 安全复制模板
rsync -avz --progress /source/path user@remote:/dest/path
文件查找我推荐find配合-exec参数。上周排查日志时,这个命令帮我快速清理了7天前的临时文件:
bash复制find /var/log -name "*.tmp" -mtime +7 -exec rm -f {} \;
top命令的交互模式很多人只会用q退出。其实按这些键更有用:
但生产环境我更推荐htop,它的可视化界面能直观显示:
netstat -tulnp曾经是我的最爱,直到发现ss -ltnp速度更快。比较测试显示,在万级连接状态下:
磁盘IO瓶颈排查离不开iotop和iostat -x 1。去年某次数据库卡顿,就是通过iostat发现await值超过200ms,最终定位到是RAID卡电池故障。
grep -P '正则'支持Perl语法,比基础正则强大得多。分析nginx日志时,这个命令帮我快速统计不同HTTP状态码:
bash复制grep -P '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}' access.log | awk '{print $9}' | sort | uniq -c
处理CSV文件时,这个awk单行命令比Python脚本还快:
bash复制awk -F, 'NR>1 {sum+=$3} END {print "总销售额:" sum}' sales.csv
日志时间范围过滤是高频需求,分享我的时间过滤模板:
bash复制awk '$4">="[01/May/2023:00:00:00" && $4<="[01/May/2023:23:59:59"' error.log
sudo -l可以查看自己被授权的命令,但很多人不知道sudo -v能刷新认证时间戳。在写自动化脚本时,这个技巧可以避免多次输入密码。
chmod的数字模式大家都会,但特殊权限更值得关注:
bash复制chmod 1777 /shared_tmp # 设置粘滞位共享目录
kill -9是最后的手段,应该先尝试:
我曾用这个命令序列优雅重启Java应用:
bash复制pkill -f "java -jar app.jar"
nohup java -jar app.jar > log.out 2>&1 &
systemctl的这些参数最实用:
这个命令序列能解决80%的网络问题:
bash复制ping -c4 example.com # 检测基础连通性
traceroute example.com # 追踪路由路径
curl -v http://example.com # 检查HTTP交互细节
mtr -rw example.com # 持续路由质量监测
通过跳板机访问内网数据库的经典方案:
bash复制ssh -L 63306:db.internal:3306 jump_user@bastion
watch -n1 'command' 可以实时刷新命令输出。我常用它来监控:
watch -n1 'df -h'watch -n1 'free -m'watch -n1 'ss -s'tmux的会话管理比screen更强大。我的常用配置:
bash复制tmux new -s work # 新建会话
Ctrl+b d # 分离会话
tmux a -t work # 重新接入
统计当前目录下各类型文件数量的实用命令:
bash复制find . -type f | awk -F. '{print $NF}' | sort | uniq -c | sort -nr
快速创建测试文件的技巧:
bash复制dd if=/dev/zero of=testfile bs=1M count=1024 # 生成1GB文件
在~/.bashrc中添加这些配置:
bash复制export HISTSIZE=10000 # 内存中保存的历史数量
export HISTFILESIZE=20000 # 历史文件记录数量
export HISTTIMEFORMAT="%F %T " # 添加时间戳
我的常用alias配置:
bash复制alias ll='ls -alFh'
alias grep='grep --color=auto'
alias df='df -h'
alias du='du -h'
排查容器问题的黄金命令:
bash复制docker stats --no-stream # 实时资源监控
docker inspect --format='{{.NetworkSettings.IPAddress}}' container # 获取IP
docker logs --tail 100 -f app # 跟踪日志
这些命令每天都会用到:
bash复制kubectl get pods -o wide # 查看Pod分布
kubectl describe pod mypod # 查看详细事件
kubectl logs --previous pod # 查看崩溃前的日志
pmap -x <PID>可以显示进程的内存映射,配合valgrind使用效果更好。有次发现某进程RSS持续增长,最终用这个组合定位到是未释放的堆内存。
perf top可以直接看到函数级CPU占用。某次性能调优中,它帮我们发现一个加密函数消耗了40%的CPU资源。
lastb查看失败登录尝试,配合fail2ban使用效果更佳。我曾用这个命令发现某IP在尝试暴力破解SSH。
md5sum和sha256sum是基础,但aide更适合持续监控系统文件变更。配置示例:
bash复制aide --init
mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db
aide --check
快速查看EC2实例状态:
bash复制aws ec2 describe-instances --query 'Reservations[*].Instances[*].[InstanceId,State.Name,PrivateIpAddress]' --output table
通过CLI管理OSS的典型操作:
bash复制ossutil ls oss://mybucket
ossutil cp localfile oss://mybucket/path
不进入交互模式执行SQL:
bash复制mysql -uuser -p -e "SHOW PROCESSLIST" dbname
内存分析关键命令:
bash复制redis-cli --bigkeys # 查找大key
redis-cli --memkeys # 内存使用模式
redis-cli --latency # 延迟测试
撤销上一次提交但保留更改:
bash复制git reset --soft HEAD~1
查找引入bug的提交:
bash复制git bisect start
git bisect bad
git bisect good v1.0
快速统计代码变更量:
bash复制svn log -v -r {2023-01-01}:{2023-12-31} | grep "^ A" | wc -l
lshw -short给出硬件概览,dmidecode获取详细信息。服务器验收时这个组合必不可少。
lspci -tv显示设备树,lspci -vv查看详细信息。排查网卡问题时特别有用。
典型nginx日志轮转配置:
bash复制/var/log/nginx/*.log {
daily
missingok
rotate 30
compress
delaycompress
notifempty
create 640 nginx adm
sharedscripts
postrotate
/bin/kill -USR1 $(cat /run/nginx.pid 2>/dev/null) 2>/dev/null || true
endscript
}
高效压缩日志的并行处理命令:
bash复制find /var/log -name "*.log" -mtime +30 | xargs -P4 pigz -9
生产环境推荐使用chrony替代ntpd:
bash复制systemctl enable chronyd
chronyc sources -v
chronyc tracking
多服务器时区统一脚本:
bash复制timedatectl set-timezone Asia/Shanghai
hwclock --systohc
使用rsync实现增量备份:
bash复制rsync -avz --delete --backup --backup-dir=/backup/incr/$(date +%Y%m%d) /data /backup/base
MySQL热备份命令:
bash复制mysqldump --single-transaction --master-data=2 -uuser -p dbname > backup.sql
创建命名会话并运行任务:
bash复制byobu new-session -s monitor "top"
byobu new-window -n logs "tail -f /var/log/syslog"
byobu attach -t monitor
我的常用工作区布局脚本:
bash复制#!/bin/bash
tmux new-session -d -s dev
tmux new-window -t dev:1 -n 'code'
tmux new-window -t dev:2 -n 'logs'
tmux attach -t dev
忘记root密码时的解决方案:
init=/bin/bashpasswdext4文件系统修复流程:
bash复制umount /dev/sda1
fsck -y /dev/sda1
mount -a
/etc/sysctl.conf关键配置:
bash复制net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
vm.swappiness = 10
解决"Too many open files"问题:
bash复制ulimit -n 65535
echo "* soft nofile 65535" >> /etc/security/limits.conf
查看软件包依赖关系:
bash复制dnf repoquery --requires httpd
清理无用包:
bash复制apt-get autoremove
apt-get clean
创建多个用户并设置密码:
bash复制for user in user1 user2 user3; do
useradd $user
echo "$user:Password123" | chpasswd
done
/etc/sudoers示例配置:
bash复制%developers ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx
扩展逻辑卷标准流程:
bash复制lvextend -L +10G /dev/vg01/lv01
resize2fs /dev/vg01/lv01
使用cryptsetup加密磁盘:
bash复制cryptsetup luksFormat /dev/sdb1
cryptsetup open /dev/sdb1 secure_disk
mkfs.ext4 /dev/mapper/secure_disk
防止cron任务重复执行的技巧:
bash复制* * * * * /usr/bin/flock -n /tmp/myjob.lock /path/to/script.sh
使用at命令安排一次性任务:
bash复制echo "/path/to/backup.sh" | at 02:00 tomorrow
安全添加PATH变量的方法:
bash复制export PATH=$PATH:/new/path
通过环境变量管理多版本Java:
bash复制export JAVA_HOME=$(update-alternatives --list java | head -1 | sed 's#/bin/java##')
处理SIGTERM的脚本示例:
bash复制trap "cleanup" TERM INT
cleanup() {
echo "收到终止信号,正在清理..."
exit 0
}
追踪系统调用:
bash复制strace -ff -o trace.log command
分析启动时间:
bash复制systemd-analyze blame
systemd-analyze critical-chain
查看服务依赖关系:
bash复制systemctl list-dependencies nginx.service
查看容器网络配置:
bash复制docker network inspect bridge
调试Pod网络连通性:
bash复制kubectl run -it --rm --image=alpine testpod -- sh
使用lynis进行审计:
bash复制lynis audit system
/etc/ssh/sshd_config推荐配置:
bash复制PermitRootLogin no
PasswordAuthentication no
AllowUsers adminuser
转发日志到远程服务器:
bash复制*.* @192.168.1.100:514
按时间过滤系统日志:
bash复制journalctl --since "2023-01-01" --until "2023-01-02"
释放pagecache:
bash复制sync; echo 1 > /proc/sys/vm/drop_caches
调整OOM killer策略:
bash复制echo -17 > /proc/[PID]/oom_adj
录制终端会话:
bash复制script -t 2> timing.log -a session.log
使用scriptreplay回放:
bash复制scriptreplay timing.log session.log
批量转换文件编码:
bash复制find . -name "*.txt" -exec iconv -f GBK -t UTF-8 {} -o {}.utf8 \;
修复乱码文件名:
bash复制convmv -f GBK -t UTF-8 --notest *
使用sosreport收集信息:
bash复制sosreport --batch
获取CPU和内存详情:
bash复制lscpu
cat /proc/meminfo
使用pigz并行压缩:
bash复制tar -cvf - /data | pigz -9 > data.tar.gz
大文件分卷处理:
bash复制tar cvzf - bigfile | split -b 2G - bigfile.tar.gz.
使用sftp批量传输:
bash复制sftp user@host <<EOF
put localfile remotepath
get remotefile localpath
EOF
rsync断点续传示例:
bash复制rsync -P --rsh=ssh /bigfile user@host:/path
使用dd克隆磁盘:
bash复制dd if=/dev/sda of=/dev/sdb bs=64K conv=noerror,sync
使用tar迁移系统:
bash复制(cd / && tar -cvpzf - --exclude=/backup.tgz --exclude=/proc --exclude=/mnt --exclude=/sys --exclude=/dev / ) > backup.tgz
查看虚拟机状态:
bash复制virsh list --all
克隆KVM虚拟机:
bash复制virt-clone --original vm1 --name vm2 --file /var/lib/libvirt/images/vm2.qcow2
设置休眠到磁盘:
bash复制pm-hibernate
查看CPU频率:
bash复制cpupower frequency-info
扫描附近设备:
bash复制bluetoothctl scan on
配对蓝牙耳机:
bash复制bluetoothctl pair 00:11:22:33:44:55
bluetoothctl connect 00:11:22:33:44:55
使用pactl控制音量:
bash复制pactl set-sink-volume 0 +5%
列出音频设备:
bash复制pactl list short sinks
添加网络打印机:
bash复制lpadmin -p PrinterName -v socket://192.168.1.100 -m everywhere
查看打印任务:
bash复制lpstat -o
生成本地化文件:
bash复制locale-gen zh_CN.UTF-8
交互式时区设置:
bash复制dpkg-reconfigure tzdata
查看已加载模块:
bash复制lsmod
修改模块参数:
bash复制echo "options usb-storage delay_use=60" > /etc/modprobe.d/usb-storage.conf
统计错误出现频率:
bash复制grep -o "ERROR" /var/log/syslog | wc -l
多文件联合监控:
bash复制multitail /var/log/nginx/access.log /var/log/nginx/error.log
使用tar增量备份:
bash复制tar -g /backup/snapshot -czf /backup/incr-$(date +%Y%m%d).tar.gz /data
备份重要配置文件:
bash复制rsync -av /etc /backup/etc-$(date +%Y%m%d)
使用GNU parallel加速:
bash复制find . -name "*.log" | parallel -j4 gzip {}
测量命令执行时间:
bash复制time (find / -name "*.conf" 2>/dev/null)
仅安装安全更新:
bash复制apt-get upgrade --only-upgrade-security
保留旧内核的升级:
bash复制apt-get install linux-image-new --keep-old-kernels
导出共享目录:
bash复制echo "/share 192.168.1.0/24(rw,sync,no_root_squash)" >> /etc/exports
exportfs -a
发现iSCSI目标:
bash复制iscsiadm -m discovery -t st -p 192.168.1.100
添加Zabbix自定义监控:
bash复制UserParameter=mysql.connections,mysqladmin status | awk '{print $4}'
设置CPU告警规则:
bash复制echo "CPU: `uptime | awk '{print $10}' | cut -d. -f1`" > /var/log/cpu_alert.log
保存iptables规则:
bash复制iptables-save > /etc/iptables.rules
开放特定端口:
bash复制firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --reload
使用OpenVAS扫描:
bash复制omp -u admin -w password --xml="<create_task><name>Scan</name><target><hosts>192.168.1.1</hosts></target></create_task>"
使用rkhunter检查:
bash复制rkhunter --check --sk
执行ad-hoc命令:
bash复制ansible all -m ping
通过Ansible运行脚本:
bash复制ansible webservers -m script -a "/path/to/update.sh"
使用fio测试随机写:
bash复制fio --name=randwrite --ioengine=libaio --rw=randwrite --bs=4k --numjobs=4 --size=1G --runtime=60 --time_based --end_fsync=1
iperf3服务器端:
bash复制iperf3 -s
使用cgroups限制CPU:
bash复制cgcreate -g cpu:/limited
echo 50000 > /sys/fs/cgroup/cpu/limited/cpu.cfs_quota_us
限制用户进程数:
bash复制echo "username hard nproc 100" >> /etc/security/limits.conf
使用gdb分析core dump:
bash复制gdb -c core.file /path/to/binary
使用strace跟踪进程:
bash复制strace -p PID -o trace.log
推荐替代方案:
bat替代catexa替代lsfd替代findripgrep替代grep通过源码安装:
bash复制wget https://github.com/sharkdp/bat/releases/download/v0.18.0/bat-v0.18.0-x86_64-unknown-linux-gnu.tar.gz
tar xvf bat*.tar.gz
sudo cp bat*/bat /usr/local/bin