1. Linux基础指令与常见误区概述
作为一个在Linux环境下摸爬滚打多年的老运维,我见过太多新手因为基础指令使用不当而踩坑。Linux命令行就像一把瑞士军刀,用好了事半功倍,用错了可能引发系统灾难。今天我就来系统梳理那些最常用却又最容易用错的Linux基础指令,分享一些只有踩过坑才知道的实战经验。
很多人觉得"cd、ls这些命令太简单了",但正是这些基础指令藏着最多的使用陷阱。比如用rm -rf删除文件时少打一个空格,或者误用chmod 777开放全部权限,都可能造成无法挽回的后果。本文将覆盖文件操作、权限管理、进程控制等核心指令组,重点解析那些文档上不会写的注意事项和常见误区。
2. 文件与目录操作指令详解
2.1 目录导航与查看
cd命令看似简单,但有几个高级用法值得掌握:
cd - # 快速返回上一个工作目录 cd ~ # 无论当前在哪,直接回到用户主目录 cd ../.. # 向上跳转多级目录ls命令的常见误区:
ls -l # 很多人不知道这个显示结果各列的含义 # 第一列:文件类型与权限 # 第二列:硬链接数 # 第三列:所有者 # 第四列:所属组 # 第五列:文件大小 # 第六列:最后修改时间 # 第七列:文件名 ls -a # 显示隐藏文件(以.开头的文件) ls -h # 人性化显示文件大小(自动转换KB/MB)重要提示:在脚本中避免直接使用
ls解析文件名,因为可能包含空格或特殊字符导致解析错误。应该使用for file in *这样的循环结构。
2.2 文件操作指令
cp命令的坑:
cp file1 file2 dir/ # 正确:将多个文件复制到目录 cp -r dir1 dir2 # 递归复制目录 cp -a src dst # 保留所有属性复制(归档模式)mv命令的注意事项:
- 跨文件系统移动大文件时实际上是"复制+删除"操作
- 重命名文件时如果目标已存在会直接覆盖(无警告)
rm命令的危险操作:
rm -rf * # 删除当前目录所有内容(包括隐藏文件) rm -rf .* # 危险!会删除上级目录内容(因为..表示上级目录)血泪教训:永远不要在rm命令中使用变量,如
rm -rf $DIR/*,如果$DIR为空就会变成rm -rf /*。建议先echo查看实际执行的命令。
3. 权限与用户管理指令
3.1 权限管理
chmod的数值表示法:
chmod 755 file # 7=rwx(所有者) 5=r-x(组) 5=r-x(其他用户)常见错误权限设置:
- 777权限(任何人都可修改) - 应该尽量限制
- 可执行脚本没有x权限 - 导致无法执行
- 目录没有x权限 - 导致无法cd进入
chown的正确用法:
chown user:group file # 同时修改所有者和组 chown -R user:group dir # 递归修改目录下所有文件3.2 用户与组管理
useraddvsadduser:
useradd是底层工具,需要手动设置密码等adduser是交互式高级工具(推荐新手使用)
passwd的注意事项:
- 普通用户只能修改自己的密码
- root用户可以修改任何用户密码
- 空密码账户是安全风险(使用
passwd -d移除密码要特别小心)
4. 进程与系统管理指令
4.1 进程查看与控制
ps命令的实用组合:
ps aux # 查看所有运行中的进程 ps -ef # 完整格式列表 ps -o pid,ppid,cmd,%mem,%cpu # 自定义输出列kill的正确使用方式:
kill -9 PID # 强制终止(可能造成数据损坏) kill -15 PID # 优雅终止(推荐首选) killall -u username # 终止某用户的所有进程4.2 系统监控指令
top命令的实用技巧:
- 按M按内存排序
- 按P按CPU排序
- 按1显示所有CPU核心详情
- 按W保存当前配置
free查看内存:
free -h # 人性化显示 free -s 5 # 每5秒刷新一次df和du的区别:
df -h # 查看文件系统磁盘空间使用情况 du -sh * # 查看当前目录各文件/目录大小5. 文本处理三剑客
5.1 grep文本搜索
常见用法:
grep "pattern" file # 基本搜索 grep -r "pattern" dir/ # 递归搜索目录 grep -i "pattern" file # 忽略大小写 grep -v "pattern" file # 反向匹配(显示不包含的行)5.2 sed流编辑器
基础示例:
sed 's/old/new/g' file # 全局替换 sed -i.bak 's/old/new/g' file # 直接修改文件(保留备份) sed '/pattern/d' file # 删除匹配行5.3 awk文本处理
典型用例:
awk '{print $1}' file # 打印第一列 awk -F: '{print $1}' /etc/passwd # 以:为分隔符 awk '$3 > 100 {print $0}' file # 条件筛选6. 网络相关指令
6.1 网络配置与测试
ifconfigvsip:
ifconfig # 传统工具(有些新系统已不预装) ip addr show # 现代替代方案ping和traceroute:
ping -c 4 example.com # 指定发送4个包 traceroute example.com # 显示路由路径6.2 网络连接查看
netstat的替代方案:
ss -tulnp # 查看监听端口 ss -at # 查看所有TCP连接curl的实用技巧:
curl -I example.com # 只显示HTTP头 curl -o file.txt http://example.com # 下载文件 curl -X POST -d "data" http://example.com # 发送POST请求7. 压缩与归档指令
7.1 常见压缩工具
tar的典型用法:
tar -czvf archive.tar.gz dir/ # 创建gzip压缩包 tar -xzvf archive.tar.gz # 解压gzip包 tar -cjvf archive.tar.bz2 dir/ # 创建bzip2压缩包zip和unzip:
zip -r archive.zip dir/ # 递归压缩 unzip -l archive.zip # 查看压缩包内容7.2 压缩效率比较
不同压缩算法的特点:
- gzip (.gz) - 速度快,压缩率一般
- bzip2 (.bz2) - 速度慢,压缩率高
- xz (.xz) - 速度最慢,压缩率最高
8. 系统信息查询指令
8.1 硬件信息
lscpu查看CPU信息:
lscpu # 显示CPU架构、核心数等详细信息lsblk查看块设备:
lsblk # 树形显示磁盘和分区 lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT # 自定义输出列8.2 系统版本信息
uname的常用选项:
uname -a # 显示所有系统信息 uname -r # 只显示内核版本lsb_release查看发行版信息:
lsb_release -a # 显示详细发行版信息9. 定时任务管理
9.1 crontab使用指南
基本格式:
* * * * * command | | | | | | | | | +----- 星期几 (0 - 6) (周日=0) | | | +------- 月份 (1 - 12) | | +--------- 日 (1 - 31) | +----------- 小时 (0 - 23) +------------- 分钟 (0 - 59)实用示例:
crontab -e # 编辑当前用户的crontab crontab -l # 列出当前用户的crontab * * * * * /path/to/script.sh >> /var/log/script.log 2>&1 # 记录输出和错误9.2 systemd定时器
现代替代方案:
systemctl list-timers # 查看所有定时器 systemctl status mytimer.timer # 查看特定定时器状态10. 环境变量与Shell配置
10.1 环境变量管理
查看和设置:
echo $PATH # 查看PATH变量 export MY_VAR="value" # 设置临时环境变量持久化配置:
- 用户级:~/.bashrc 或 ~/.bash_profile
- 系统级:/etc/environment 或 /etc/profile.d/
10.2 Shell配置技巧
常用别名:
alias ll='ls -alF' alias grep='grep --color=auto' alias ..='cd ..'历史命令优化:
export HISTSIZE=10000 # 增加��史记录数量 export HISTTIMEFORMAT='%F %T ' # 为历史记录添加时间戳11. 常见误区与解决方案
11.1 文件操作陷阱
- 通配符扩展问题:
rm *.txt # 如果当前目录没有.txt文件,可能会变成rm *解决方案:
shopt -s nullglob # 设置无匹配时返回空 或者先使用ls *.txt确认 2. **文件名包含空格**: ```bash for file in *; do [ -f "$file" ] && echo "Processing: $file" done11.2 权限管理误区
- 滥用sudo:
- 不应该习惯性在所有命令前加sudo
- 应该先用普通用户权限尝试执行
- chmod 777的滥用:
- 应该精确设置所需的最小权限
- 目录通常755,文件通常644
11.3 管道与重定向问题
- 覆盖 vs 追加:
echo "new" > file # 覆盖 echo "new" >> file # 追加- 错误输出处理:
command 2> error.log # 将stderr重定向到文件 command > output.log 2>&1 # 合并stdout和stderr12. 实用技巧与经验分享
12.1 命令行生产力技巧
- 快速导航:
cd !$ # 使用上条命令的最后一个参数 Alt+. # 插入上条命令的最后一个参数- 命令历史搜索:
Ctrl+r # 反向搜索历史命令 history | grep "keyword" # 搜索历史命令12.2 脚本编写建议
- 安全第一:
set -euo pipefail # 推荐脚本开头加上这些选项 # -e: 命令失败时立即退出 # -u: 使用未定义变量时报错 # -o pipefail: 管道中任一命令失败则整个管道失败- 参数检查:
if [ $# -lt 1 ]; then echo "Usage: $0 <parameter>" exit 1 fi12.3 系统维护经验
- 磁盘空间监控:
# 查找大文件 find / -type f -size +100M -exec ls -lh {} \; # 查找最近修改的文件 find / -mtime -7 -type f- 日志分析:
# 查看最近错误日志 grep -i error /var/log/syslog | tail -20 # 统计HTTP状态码 awk '{print $9}' access.log | sort | uniq -c13. 学习资源推荐
13.1 内置帮助系统
- man手册:
man ls # 查看ls命令手册 man -k keyword # 搜索相关手册页- tldr项目:
tldr tar # 查看tar命令的简化示例13.2 在线资源
- 官方文档:
- 各发行版的官方文档(如Ubuntu、CentOS)
- GNU核心工具文档
- 社区资源:
- Stack Overflow的linux标签
- Unix & Linux Stack Exchange
- 交互式学习:
- Linux命令行模拟器
- OverTheWire Bandit游戏
14. 终端多路复用器
14.1 tmux基础
启动与基本命令:
tmux # 启动新会话 tmux new -s session_name # 命名会话 Ctrl+b d # 分离会话 tmux attach -t session_name # 重新连接会话窗口管理:
Ctrl+b c # 创建新窗口 Ctrl+b n # 下一个窗口 Ctrl+b p # 上一个窗口 Ctrl+b , # 重命名当前窗口14.2 screen替代方案
基本用法:
screen # 启动新会话 screen -S session_name # 命名会话 Ctrl+a d # 分离会话 screen -r session_name # 重新连接会话15. 软件包管理
15.1 apt/dpkg (Debian/Ubuntu)
常用命令:
apt update # 更新软件包列表 apt upgrade # 升级所有可升级软件包 apt install package # 安装软件包 apt remove package # 移除软件包(保留配置) apt purge package # 完全移除软件包15.2 yum/dnf (RHEL/CentOS)
常用命令:
dnf update # 更新所有软件包 dnf install package # 安装软件包 dnf remove package # 移除软件包 dnf search keyword # 搜索软件包15.3 源码编译安装
典型流程:
./configure make sudo make install注意:源码安装的软件通常不会被包管理器管理,卸载时需要手动删除或使用
make uninstall(如果支持)
16. 系统服务管理
16.1 systemd基础
常用命令:
systemctl start service # 启动服务 systemctl stop service # 停止服务 systemctl restart service # 重启服务 systemctl status service # 查看服务状态 systemctl enable service # 设置开机启动16.2 日志查看
journalctl用法:
journalctl -u service # 查看特定服务的日志 journalctl -f # 实时跟踪日志 journalctl --since "2023-01-01" --until "2023-01-02" # 时间范围查询17. 性能分析与优化
17.1 CPU性能分析
top和htop:
htop # 增强版top(需要安装)vmstat系统监控:
vmstat 1 # 每秒刷新一次系统状态17.2 内存分析
free的深入解读:
free -m # 以MB为单位显示smem内存报告:
smem -u # 按用户显示内存使用 smem -p # 以百分比显示18. 安全加固建议
18.1 基础安全措施
- SSH加固:
# 修改/etc/ssh/sshd_config PermitRootLogin no PasswordAuthentication no # 仅允许密钥登录- 防火墙配置:
ufw enable # Ubuntu启用防火墙 ufw allow 22/tcp # 允许SSH18.2 安全审计
lynis系统审计:
lynis audit system # 全面的系统安全审计chkrootkit检查:
chkrootkit # 检查rootkit感染迹象19. 备份与恢复策略
19.1 文件级备份
rsync实用示例:
rsync -avz /source/ user@remote:/backup/ # 同步到远程 rsync -av --delete /source/ /backup/ # 镜像备份(删除目标多余文件)19.2 系统级备份
dd命令备份磁盘:
dd if=/dev/sda of=/backup/sda.img bs=4M # 创建磁盘镜像警告:dd命令非常危险,操作前务必确认输入输出设备
20. 容器与虚拟化基础
20.1 Docker快速入门
基本命令:
docker ps # 查看运行中的容器 docker images # 查看本地镜像 docker run -it ubuntu bash # 启动交互式容器20.2 LXC/LXD容器
基本操作:
lxc launch ubuntu:22.04 mycontainer # 创建容器 lxc exec mycontainer -- bash # 进入容器