1. Linux系统基础回顾:从终端操作开始
第一次接触Linux终端的新手总会觉得那闪烁的光标充满神秘感。记得我刚开始学习时,面对黑底白字的界面,连最基本的目录切换都要反复查阅手册。如今十几年过去,这些基础命令早已成为肌肉记忆,但正是这些看似简单的操作构成了Linux使用的基石。
当前目录查看的pwd命令(Print Working Directory)是每个会话的起点。这个命令会返回从根目录开始的完整路径,比如/home/user/documents。很多人不知道的是,在符号链接目录中使用pwd -P可以显示物理路径而非链接路径,这在排查软链接问题时特别有用。
文件列表查看的ls命令可能是使用频率最高的指令。除了常见的-l(长格式显示)和-a(显示隐藏文件)参数外,-h(人类可读的文件大小)和--time-style=long-iso(标准化时间格式)能极大提升可读性。我习惯的别名配置是alias ll='ls -lh --time-style=long-iso --color=auto',这个组合提供了最清晰的文件信息展示。
目录切换的cd命令有个小技巧:使用cd -可以在最近访问的两个目录间快速切换,这在需要反复跳转的场景下能节省大量时间。而cd ~会直接回到用户主目录,比输入完整路径方便得多。
注意:在脚本中使用
cd时要特别注意相对路径的问题。建议总是使用绝对路径,或者先通过pushd保存当前目录,操作完成后用popd返回。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 文件操作核心命令详解
2.1 文件创建与查看
创建空文件的touch命令实际上是为修改文件时间戳而设计的。当文件不存在时,它会自动创建新文件。我经常用它来快速创建测试文件:touch test{1..10}.txt会一次性创建10个测试文件。
查看文件内容的cat命令适合小文件快速预览。对于大文件,less才是更好的选择,它支持上下翻页和搜索。有个不为人知的技巧:在less中按v键会直接用默认编辑器打开当前文件,编辑保存后会自动返回less界面。
2.2 文件复制与移动
cp命令的-i(交互模式)和-u(仅更新较新文件)参数能避免很多意外覆盖。在复制大量小文件时,使用rsync会比cp更高效,因为它能显示进度且支持断点续传。
mv命令除了移动文件外,还是Linux下重命名文件的唯一方式。在移动大量文件时,可以先使用echo mv * /target/预览将要执行的操作,确认无误后再去掉echo执行。
2.3 文件权限管理
chmod的数字表示法(如755)比符号表示法(u+rwx)更精确。我总结的常用权限组合:
- 755:可执行程序/目录的标准权限
- 644:配置文件的典型权限
- 600:敏感数据文件的最低权限
chown命令在修改文件属主时,可以使用user:group的格式同时修改用户和组。在递归修改目录权限时,记得先处理目录本身(chmod 755),再处理内部文件(find /path -type f -exec chmod 644 {} +)。
3. 文本处理三剑客:grep、sed、awk
3.1 grep模式搜索
grep的-v(反向匹配)和-C 3(显示匹配行前后各3行)参数在日志分析中特别实用。我常用的组合是grep -i error /var/log/syslog | grep -v connection_refused,这样可以过滤出真正的错误信息而排除已知无害的警告。
Perl正则表达式模式(-P)支持更强大的匹配语法。例如grep -P '\d{3}-\d{4}'可以匹配电话号码格式。在较新的GNU grep中,-o只输出匹配部分,-m 10限制最多显示10个匹配结果,这对处理大文件很有帮助。
3.2 sed流编辑器
sed的s/old/new/替换是最常用的功能。添加g标志进行全局替换,i标志忽略大小写。我经常用sed -i.bak 's/old/new/g' file在修改前自动创建备份文件。
更复杂的操作如删除空行sed '/^$/d',或在特定行后插入内容sed '/pattern/a new line'。处理Windows换行符转Unix格式可以用sed 's/\r$//' dosfile > unixfile。
3.3 awk数据处理
awk的字段处理能力无与伦比。打印特定列awk '{print $2,$5}'只是基础用法。统计日志中每个错误码出现的次数可以用:
bash复制awk '{count[$9]++} END {for(code in count) print code,count[code]}' access.log
处理CSV文件时,设置-F,指定分隔符。计算列平均值awk '{sum+=$3} END {print sum/NR}'展示了awk的数学计算能力。我常用的BEGIN块可以预处理,如设置输出格式:
bash复制awk 'BEGIN {FS=":"; OFS="\t"} {print $1,$3,$6}' /etc/passwd
4. 系统监控与进程管理
4.1 资源监控工具
top命令的交互模式有很多隐藏功能:按M按内存排序,P按CPU排序,c显示完整命令。htop提供了更友好的界面,支持鼠标操作和树状视图。
free -h以易读格式显示内存使用,-w参数分开显示缓冲区和缓存。df -h查看磁盘空间时,添加-T显示文件系统类型,-x tmpfs排除临时文件系统。
4.2 进程管理命令
ps aux的经典组合中,a显示所有用户进程,u显示详细用户信息,x包括无终端控制的进程。更现代的ps -ef格式在脚本中更可靠。
kill发送信号时,-9(SIGKILL)是最后手段。应该先尝试-15(SIGTERM)让进程优雅退出。查看信号列表用kill -l。批量杀死所有匹配进程:
bash复制kill $(pgrep -f "pattern")
4.3 后台任务控制
&将命令放到后台运行,jobs查看后台任务。fg %1将任务1带回前台。nohup配合&可以创建持久后台任务,但更好的方式是使用screen或tmux。
nice调整进程优先级(-20最高,19最低),renice修改运行中进程的优先级。对于长时间运行的CPU密集型任务,我通常设为nice -n 10 command以避免影响系统响应。
5. 网络工具与系统服务
5.1 网络诊断命令
ping的-c 4限制发送包数,-i 0.2设置间隔秒数。traceroute(或tracepath)显示路由路径,-n禁用DNS查询加速显示。
netstat -tulnp显示所有监听端口和对应程序,-s显示统计信息。ss是更现代的替代品,速度更快,如ss -tlnp。
5.2 防火墙与端口管理
iptables -L -n -v查看详细规则,-t nat显示NAT表。Ubuntu系统上的ufw简化了配置:ufw allow 22/tcp开放SSH端口。
lsof -i :80查找使用80端口的进程,-u username显示指定用户的打开文件。这个命令在解决"Address already in use"问题时不可或缺。
5.3 系统服务管理
systemctl的统一接口管理所有服务:start/stop/restart控制状态,enable/disable设置开机启动,status查看详情。journalctl -u service -f实时查看服务日志。
对于老的SysVinit系统,service命令仍然可用,如service apache2 restart。查看启动项用chkconfig --list或sysv-rc-conf。
6. Shell脚本编程要点
6.1 变量与参数处理
变量赋值var=value注意等号两边不能有空格。引用变量时总是用双引号防止单词分割,如echo "$PATH"。特殊参数:
$0脚本名$1第一个参数$#参数个数$@所有参数(保持独立)$?上条命令的退出码
默认值设置${var:-default},错误检查${var:?error message}。数组操作arr=(a b c),${arr[@]}展开所有元素。
6.2 流程控制结构
if语句的测试用[ ]或[[ ]](后者支持更多操作符):
bash复制if [[ -f "$file" && -r "$file" ]]; then
process "$file"
fi
case语句处理多分支:
bash复制case "$OS" in
Linux) echo "GNU/Linux" ;;
Darwin) echo "macOS" ;;
*) echo "Other: $OS" ;;
esac
循环结构中,for遍历列表或范围:
bash复制for i in {1..10}; do
echo "Run $i"
done
while read逐行处理输入:
bash复制while IFS= read -r line; do
parse "$line"
done < input.txt
6.3 函数与错误处理
函数定义和调用:
bash复制log() {
echo "[$(date)] $*" >> "$LOG"
}
log "Starting process"
错误处理使用trap和set -e:
bash复制trap 'cleanup; exit 1' ERR
set -euo pipefail
7. 实用技巧与高级主题
7.1 命令行效率工具
history配合!123执行历史命令,!$引用上条命令的参数。设置HISTTIMEFORMAT="%F %T "给历史记录添加时间戳。
alias创建常用命令的快捷方式,如:
bash复制alias update='sudo apt update && sudo apt upgrade'
alias ports='netstat -tulnp'
tar的常用组合:
- 创建:
tar czvf archive.tar.gz dir/ - 解压:
tar xzvf archive.tar.gz - 查看:
tar tzvf archive.tar.gz
7.2 软件包管理
Debian系的apt命令:
bash复制sudo apt update # 更新软件列表
sudo apt install package
sudo apt remove --purge package
sudo apt autoremove # 清理无用依赖
RHEL系的yum/dnf命令:
bash复制sudo yum makecache
sudo yum install package
sudo yum history undo last # 回滚上次安装
7.3 安全加固实践
SSH安全设置/etc/ssh/sshd_config:
code复制PermitRootLogin no
PasswordAuthentication no
AllowUsers myuser
定期更新系统:
bash复制sudo apt update && sudo apt upgrade -y
sudo apt autoremove
配置防火墙规则:
bash复制sudo ufw default deny incoming
sudo ufw allow 22/tcp
sudo ufw enable
