作为在Linux系统管理领域摸爬滚打多年的老运维,我始终认为命令行操作是工程师的立身之本。与图形界面相比,命令行不仅效率更高,更重要的是它能让你真正理解系统运作的底层逻辑。记得刚入行时,我的导师说过:"不会命令行操作的Linux用户,就像不会游泳的水手。"
为什么命令行如此重要? 当服务器出现故障时,你可能只有SSH连接这个唯一通道;当系统资源紧张时,GUI界面往往第一个崩溃;当你需要批量操作上百台机器时,只有命令行能通过脚本实现自动化。根据2023年Stack Overflow开发者调查,87%的专业运维人员每天使用命令行超过4小时。
学习Linux命令的典型路径应该是:
重要提示:不要试图一次性记住所有命令参数,掌握核心用法后,随时通过
--help或man查询才是正确姿势。我习惯把常用命令整理成cheatsheet贴在显示器边框上。
cd命令的隐藏技巧:
cd - 快速返回上一个目录cd ~ 回到用户主目录pushd/popd 实现目录栈管理(适合需要频繁切换目录的场景)ls命令的进阶用法:
bash复制ls -lh # 人类可读的文件大小显示
ls -t # 按修改时间排序
ls -R # 递归列出子目录
ls --color=auto # 彩色显示文件类型
cp/mv/rm三剑客的注意事项:
cp -a保留所有文件属性(权限、时间戳等)mv命令在跨文件系统移动时实际是"复制+删除"操作rm -rf是著名的"删库跑路"命令,建议设置别名:bash复制alias rm='rm -i' # 删除前确认
文件查找的三种武器:
bash复制find /path -name "*.log" -mtime +7 # 按名称和时间查找
locate keyword # 快速搜索(需先updatedb)
whereis python # 查找二进制文件位置
基础用法:
bash复制grep "error" /var/log/syslog # 基本搜索
grep -i "warning" file.txt # 忽略大小写
grep -v "success" data.log # 反向匹配
高级技巧:
bash复制grep -E "error|warning" logfile # 正则表达式
grep -A3 -B2 "exception" trace.log # 显示匹配前后内容
zgrep "timeout" /var/log/*.gz # 直接搜索压缩文件
典型场景示例:
bash复制# 统计Nginx日志中各IP访问次数
awk '{print $1}' access.log | sort | uniq -c | sort -nr
# 提取特定列并计算平均值
awk '{sum+=$3} END {print sum/NR}' data.txt
常用模式:
bash复制sed 's/foo/bar/g' file.txt # 全局替换
sed -i.bak '1d' config.ini # 删除首行并备份原文件
sed -n '10,20p' document.txt # 打印特定行范围
top的交互命令:
M 按内存排序P 按CPU排序1 显示所有CPU核心Shift + V 树状显示进程htop的增强功能(需安装):
df/du磁盘分析:
bash复制df -hT # 显示文件系统类型和可用空间
du -sh * # 查看当前目录各文件大小
du -x --max-depth=1 / # 分析根目录空间占用
后台作业控制:
bash复制python script.py & # 后台运行
jobs # 查看后台作业
fg %1 # 调回前台
信号发送实践:
bash复制kill -9 PID # 强制终止(SIGKILL)
kill -HUP PID # 优雅重启(如Nginx)
pkill -f "pattern" # 按名称终止进程
ping的高级用法:
bash复制ping -c 5 -i 0.2 example.com # 指定次数和间隔
ping6 IPv6_address # IPv6测试
traceroute的替代方案:
bash复制mtr example.com # 实时路由跟踪(需安装)
tracepath example.com # 不需要root权限
netstat的现代替代:
bash复制ss -tulnp # 查看监听端口
ss -s # 统计摘要
tcpdump抓包实例:
bash复制tcpdump -i eth0 port 80 -w capture.pcap # 抓取HTTP流量
tcpdump -nnvvXSs 0 'tcp[tcpflags] & (tcp-syn) != 0' # 只抓SYN包
权限数字表示法:
code复制rwx r-x r-x => 755
rw- r-- r-- => 644
特殊权限标志:
chmod +t dir 设置粘滞位(/tmp目录常用)chmod u+s file 设置SUID(如passwd命令)关键命令:
bash复制useradd -m -s /bin/bash newuser # 创建用户
passwd username # 修改密码
usermod -aG sudo username # 添加sudo权限
groupadd developers # 创建组
Debian系(APT):
bash复制apt update && apt upgrade
apt install package
apt remove --purge package
apt-cache search keyword
RHEL系(YUM/DNF):
bash复制yum makecache
yum install package
yum remove package
yum search keyword
通用流程:
bash复制tar zxvf source.tar.gz
cd source
./configure --prefix=/usr/local
make -j$(nproc)
sudo make install
ldconfig # 更新库缓存
tmux基础操作:
bash复制tmux new -s session_name # 新建会话
Ctrl+b d # 分离会话
tmux attach -t session_name # 重新连接
screen的替代方案:
bash复制byobu # 增强版screen(Ubuntu默认)
history增强配置:
bash复制export HISTSIZE=10000
export HISTFILESIZE=20000
export HISTTIMEFORMAT="%F %T " # 添加时间戳
shopt -s histappend # 追加而不是覆盖
实用别名示例:
bash复制alias ll='ls -alF'
alias grep='grep --color=auto'
alias df='df -h'
alias du='du -h'
自定义函数:
bash复制# 快速创建并进入目录
mkcd() { mkdir -p "$1" && cd "$1"; }
# 查找文件内容
ftext() { grep -rnw '.' -e "$1"; }
关键日志文件位置:
/var/log/syslog (Ubuntu)/var/log/messages (RHEL)/var/log/nginx/error.log (Nginx)/var/log/auth.log (认证日志)日志轮转机制:
bash复制logrotate -vf /etc/logrotate.conf # 手动执行轮转
救援模式常用命令:
bash复制journalctl -xb # 查看启动日志
systemctl --failed # 检查失败服务
fsck /dev/sda1 # 文件系统检查
/etc/ssh/sshd_config关键参数:
code复制PermitRootLogin no
PasswordAuthentication no
AllowUsers yourusername
Port 2222 # 修改默认端口
UFW基本用法:
bash复制ufw allow 22/tcp
ufw enable
ufw status numbered
firewalld示例:
bash复制firewall-cmd --permanent --add-service=http
firewall-cmd --reload
交换空间管理:
bash复制swapon --show # 查看交换分区
dd if=/dev/zero of=/swapfile bs=1M count=4096 # 创建交换文件
mkswap /swapfile && swapon /swapfile
OOM Killer调优:
bash复制echo 'vm.overcommit_memory = 2' >> /etc/sysctl.conf
sysctl -p
iotop实时监控:
bash复制iotop -oPa # 只显示实际IO活动
vmstat分析:
bash复制vmstat 1 5 # 每秒采样,共5次
好的脚本应包含:
bash复制#!/bin/bash
set -euo pipefail # 严格模式
# 注释说明脚本用途
备份脚本框架:
bash复制#!/bin/bash
BACKUP_DIR="/backups"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
tar czf "${BACKUP_DIR}/backup_${TIMESTAMP}.tar.gz" /path/to/data
find "${BACKUP_DIR}" -type f -mtime +30 -delete # 清理旧备份
监控脚本模板:
bash复制#!/bin/bash
THRESHOLD=90
CURRENT=$(df -h / | awk 'NR==2 {print $5}' | tr -d '%')
[ "$CURRENT" -gt "$THRESHOLD" ] && \
echo "Warning: Disk usage ${CURRENT}%" | mail -s "Disk Alert" admin@example.com
常用命令:
bash复制docker ps -a # 查看容器
docker images # 查看镜像
docker exec -it container_name bash # 进入容器
docker logs -f container_name # 跟踪日志
与Docker命令兼容:
bash复制podman run -d -p 8080:80 nginx
podman generate systemd --name container_name > /etc/systemd/system/container.service
EC2实例管理:
bash复制aws ec2 describe-instances --query 'Reservations[*].Instances[*].[InstanceId,State.Name,PublicIpAddress]' --output table
aws ec2 start-instances --instance-ids i-1234567890abcdef0
AWS实例元数据:
bash复制curl http://169.254.169.254/latest/meta-data/
示例配置:
bash复制export PS1='\[\e[32m\]\u@\h \[\e[33m\]\w \[\e[36m\]\$ \[\e[0m\]'
dircolors配置:
bash复制eval $(dircolors ~/.dircolors)
常用别名:
bash复制alias gs='git status'
alias gc='git commit -m'
alias gl='git log --oneline --graph --decorate'
__git_ps1提示:
bash复制source /usr/share/git-core/contrib/completion/git-prompt.sh
PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ '
Windows互操作:
bash复制explorer.exe . # 打开资源管理器
notepad.exe file.txt # 用记事本打开
命令对比:
bash复制# Linux # MacOS
ip addr ifconfig
apt brew
systemctl launchctl
关键命令:
bash复制lscpu
cat /proc/cpuinfo
free -h
dmidecode -t memory
PCI/USB设备:
bash复制lspci -nnk
lsusb -tv
chronyd示例:
bash复制chronyc sources -v
timedatectl set-ntp true
交互式设置:
bash复制dpkg-reconfigure tzdata # Debian
timedatectl list-timezones | grep -i new
column命令妙用:
bash复制printf "NAME AGE GENDER\nAlice 25 F\nBob 30 M" | column -t
jq基础用法:
bash复制curl -s http://example.com/api | jq '.data[].name'
echo '{"user":"admin"}' | jq -r '.user' # 原始输出
常用操作:
bash复制systemctl list-unit-files --type=service
systemctl edit --full service_name # 自定义服务
journalctl -u nginx -f # 跟踪服务日志
关键命令:
bash复制systemd-analyze critical-chain
systemd-analyze blame # 启动耗时分析
推荐做法:
bash复制echo 'export PATH="$PATH:/custom/path"' >> ~/.bashrc
source ~/.bashrc
安全建议:
bash复制# 使用专用配置文件
echo 'DB_PASSWORD="secret"' >> ~/.app_env
chmod 600 ~/.app_env
根据场景选择:
bash复制# 最快压缩
tar cf - dir/ | pigz > archive.tar.gz
# 最高压缩比
tar cf - dir/ | xz -9 > archive.tar.xz
大文件处理:
bash复制tar czvf - big_dir/ | split -b 2G - big_dir.tar.gz.
# 合并解压
cat big_dir.tar.gz.* | tar xzvf -
端口转发:
bash复制ssh -L 3306:localhost:3306 user@remote # 本地访问远程MySQL
ssh -D 1080 user@remote # SOCKS代理
多因素认证:
bash复制ssh-keygen -t ed25519 -f ~/.ssh/work_key
ssh-copy-id -i ~/.ssh/work_key.pub user@host
录制与回放:
bash复制asciinema rec demo.cast
asciinema play demo.cast
script命令:
bash复制script -t 2> timing.log -a output.session
# 操作结束后
exit
常用组合:
Ctrl + A/E 跳到行首/行尾Ctrl + U/K 删除到行首/行尾Ctrl + W 删除前一个单词Ctrl + R 反向搜索历史会话管理:
Ctrl + D 发送EOF(可能退出会话)Ctrl + Z 挂起进程bg/fg 后台/前台切换SCP基础:
bash复制scp file.txt user@remote:/path/
scp -r dir/ user@remote:/path/
Rsync优势:
bash复制rsync -avz --progress src/ user@remote:dst/
rsync -avz --delete src/ user@remote:dst/ # 保持同步
mbuffer加速:
bash复制tar cf - big_dir/ | mbuffer -m 1G | ssh user@remote "tar xf -"
dd命令示例:
bash复制dd if=/dev/sda of=/backup/sda.img bs=4M conv=noerror,sync
rsnapshot配置:
bash复制rsnapshot daily
rsnapshot weekly
调试API:
bash复制curl -v -H "Content-Type: application/json" -d '{"key":"value"}' http://api.example.com
镜像网站:
bash复制wget --mirror --convert-links --adjust-extension --page-requisites --no-parent http://example.com
bash复制# 需要安装相关包
bastet # 俄罗斯方块
ninvaders # 太空侵略者
cowsay创意:
bash复制fortune | cowsay -f dragon
bash复制sysbench cpu --cpu-max-prime=20000 run
bash复制fio --name=randread --ioengine=libaio --rw=randread --bs=4k --numjobs=4 --size=1G --runtime=60 --time_based --group_reporting
关键命令:
bash复制uname -a
cat /proc/version
dmesg | grep -i error
查看与修改:
bash复制cat /proc/cmdline
grubby --update-kernel=ALL --args="console=ttyS0"
bash复制python -m venv myenv
source myenv/bin/activate
podman示例:
bash复制podman run --rm -it fedora bash
bash复制tail -f /var/log/nginx/access.log | grep -v "ELB-HealthChecker"
lnav工具:
bash复制lnav /var/log/syslog
lynis示例:
bash复制lynis audit system
tiger工具:
bash复制tiger -e
valgrind基础:
bash复制valgrind --leak-check=yes ./myprogram
ipcs命令:
bash复制ipcs -m # 查看共享内存段
创建使用:
bash复制mkfifo mypipe
cat mypipe & echo "hello" > mypipe
ipcs相关:
bash复制ipcs -s # 查看信号量
bash复制strace -f -o trace.log ./program
strace -e open,read ls # 只跟踪特定调用
库调用跟踪:
bash复制ltrace -f -o lib.log ./program
bash复制lsmod
modinfo ext4
modprobe -r module_name # 移除模块
bash复制sysctl -a | grep tcp
echo "net.ipv4.tcp_fin_timeout = 30" >> /etc/sysctl.conf
bash复制ulimit -c unlimited
echo "/tmp/core.%e.%p" > /proc/sys/kernel/core_pattern
基本流程:
bash复制gdb -c /tmp/core.python.1234
bt full # 查看完整堆栈
Debian示例:
bash复制debootstrap --variant=minbase stable ./mychroot
scratch镜像:
dockerfile复制FROM scratch
COPY hello /
CMD ["/hello"]
lm-sensors:
bash复制sensors-detect
sensors
bash复制smartctl -a /dev/sda
bash复制systemctl hibernate
systemctl suspend
powertop:
bash复制powertop --auto-tune
bash复制virsh list --all
virt-viewer myvm
virt-install:
bash复制virt-install --name=myvm --ram=2048 --vcpus=2 --disk size=10 --cdrom /path/to/iso
bash复制mount -o remount,ro /
GRUB操作:
e编辑启动项linux行末尾添加singleCtrl+X启动bash复制tmux split-window -h # 水平分割
tmux split-window -v # 垂直分割
bash复制tmux new -s shared
tmux attach -t shared # 多人连接
bash复制gpg -c secret.txt # 对称加密
gpg -e -r user@domain file # 非对称加密
bash复制pass init "user@domain"
pass insert work/server1
bash复制rename 's/\.jpeg$/\.jpg/' *.jpeg
bash复制mmv '*.old' '#1.new'
bash复制cryptsetup luksFormat /dev/sdb1
cryptsetup open /dev/sdb1 secure_disk
bash复制cryptsetup -v luksFormat /dev/sda2
cryptsetup -v luksOpen /dev/sda2 cryptswap
bash复制man -k keyword # 搜索手册页
info coreutils # GNU info文档
最后分享一个我用了十年的技巧:在~/.bashrc中添加export HISTIGNORE="&:ls:[bf]g:exit"可以过滤掉简单命令对历史记录的污染,让history命令的输出更加干净有用。