Linux 基础命令入门到精通
📚 目录
1️⃣ 环境准备
1.1 查看系统信息
# 系统版本uname -rcat /etc/os-release # CentOS/RHELcat /etc/issue # Debian/Ubuntu# 硬件架构uname -m # x86_64, aarch64 (Apple Silicon)# CPU 信息lscpugrep ^model name* /proc/cpuinfo
1.2 磁盘空间查看
df -h # 查看各分区使用率df -i # 查看 inode 使用情况# 磁盘详情(带 S.M.A.R.T.)sudo smartctl -a /dev/sda# 剩余空间监控脚本watch -n 60 'df -h'
2️⃣ 文件和目录操作
2.1 基础文件命令
| | |
ls | | ls -lh |
cd | | cd ~ |
pwd | | pwd -P |
mkdir | | mkdir -p a/b/c |
touch | | touch file.txt |
cp | | cp -r src/ dst/ |
mv | | mv old new |
rm | | rm -rf dir/ |
2.2 目录操作技巧
# 创建多级目录mkdir -p ~/projects/{web,api}/{src,test}# 查看目录大小(递归)du -sh /var/log/*# 查找大文件find / -type f -size +500M -execls -lh {} \;# 清理临时文件find /tmp -type f -mtime +7 -delete# 隐藏文件操作ls -a # 显示所有(含 . 开头)touch .gitignore .env
2.3 文件内容查看
# 快速预览cat file.txt # 全部内容head file.txt # 前 N 行tail -f file.log # 实时监控日志# 分页查看less file.txt # 支持搜索(/关键词)more file.txt # 较旧,少用# 模糊查找关键词grep -ri "error" . # 递归搜索 error 关键字
2.4 文件压缩
# 创建压缩包tar -czvf archive.tar.gz dir/ # gzip (默认)tar -cjvf archive.tar.bz2 dir/ # bzip2 (压缩率更高)tar -cJvf archive.tar.xz dir/ # xz (最慢但压缩比最高)# 解压tar -xzf archive.tar.gztar -tjf archive.tar.bz2 # 预览内容# zip/unzipzip -r archive.zip file1.txt file2.txtunzip archive.zip# gzip(原地压缩)gzip file.log # 变成 file.log.gzgunzip file.log.gz # 还原zcat file.log.gz # 查看压缩文件内容
3️⃣ 文本处理
3.1 grep - 高级搜索
# 基础用法grep "pattern" file.txtgrep -i "pattern" *.log# 忽略大小写# 排除匹配grep -v "pattern" file.txt # 反向匹配# 正则表达式grep -E "pattern1|pattern2" file # 多条件 ORgrep "^error:" log.txt # 行首 error:# 统计匹配行数grep -c "error" /var/log/sysloggrep "$ERR" logs/* | wc -l # 管道计数# Perl 模式(更强大)grep -P "[0-9]{4}" file.txt # Perl 正则
3.2 sed - 流编辑器
# 替换操作sed 's/old/new/' file.txt # 仅输出不修改sed -i 's/old/new/g' file.txt # 原地替换(-i)# 多行处理sed '/ERROR/{n;N;s/\(.*\).*\(\d+\)/\2/' file} # 跨行替换# 行号操作sed '3,5d' file.txt # 删除 3-5 行sed '4i new line' file.txt # 第 4 行前插入# 流控制(避免输出)sed '/pattern/q' file # 匹配即停止处理
3.3 awk - 文本分析器
# 提取第 2 列awk '{print $2}' file.txt# 过滤特定条件awk '$1 > 80 {print $0}' /proc/netstat# 统计每列之和awk '{sum += $4} END {print sum}' file.txt# 格式化输出(表格)column -t < file.txt# 多文件处理awk 'NR==FNR{a[$1]=$2;next} ($1 in a){print a[$1]}' file1 file2
3.4 sort & uniq
# 排序sort file.txt # 默认数字/字典序sort -rn file.txt # 逆序(降序)sort -k2 -n file.txt # 按第 2 列数字排序sort -t',' -k3 file.csv # 自定义分隔符# 去重uniq file.txt # 仅删除连续重复sort | uniq -c | sort -rn # 统计并排序出现次数# 组合处理(日志分析)cat access.log.*/var/log/access.log | grep -E 'GET|POST' | sort | uniq -c > hits.txt
3.5 wc & cut
wc -l file.txt # 行数wc -c file.txt # 字节数wc -w file.txt # 单词数# cut(按列切分)cut -d',' -f1,2,3 file.csv # CSV 第 1-3 列cut -f1,3 /etc/passwd # 默认空格分隔# paste(多文件合并)paste file1.txt file2.txt # 逐行横向拼接
3.6 xargs & tr
# xargs(批量处理)ls *.log | xargs -I{} gzip {} # 批量压缩find . -name "*.jpg" -print0 | xargs -0 rm# 安全删除(空名文件)# 管道组合find . -type f -name "*.txt" | xargs tail -5# tr(翻译/删除字符)tr'[:upper:]''[:lower:]' < input.txt # 转小写tr -cd'a-z0-9' < file.txt # 只保留字母数字
4️⃣ 进程管理
4.1 基础命令
| | |
ps | | ps aux |
top | | top -b -n 1 |
htop | | htop |
kill | | kill 12345 |
pkill | | pkill nginx |
killall | | killall python |
4.2 高级查看技巧
# ps 详细视图ps -ef # 传统格式ps aux --sort=-%mem # 按内存降序ps -eo pid,comm,%mem,%cpu,args --sort=-%mem > top_procs.txt# 查看父进程关系树pstree -p PID # 指定进程tree -p PID # 同效# 查找进程(多种方式)pidof nginx # 找 PIDpgrep -a "python"# 找含 python 的所有进程lsof | grep sshd # 看谁连接了服务# 监控网络端口占用ss -tlnp # 监听 TCP 端口netstat -tulnp # ss 的旧版
4.3 杀进程(按顺序)
#!/bin/bash# kill_with_priority.sh — 优雅关闭脚本processes=("nginx""mysql""redis")for proc in"${processes[@]}"; do p=$(pgrep -x $proc) || continueecho"[INFO] Killing $proc (PID: $p)"kill -15 $p# SIGTERM (温和)sleep 2if ! pgrep -x $proc; thenecho"[OK] $proc stopped"elseecho"[WARN] Force killing $proc..."kill -9 $p# SIGKILL (强制)fidone# 批量杀进程(谨慎!)pkill -9 node # 慎用!
4.4 前台命令后台化
# 单例程序sleep 100 & # 后台运行# 重定向输出/错误nohup long_task.sh > out.log 2>&1 &# screen(会话管理)screen -S mysession # 新建会话screen -ls# 列出screen -r mysession # 恢复screen -X quit # 退出# tmux(替代方案)tmux new-session -d "sleep 100"# 后台tmux attach-session -t default # 连接
5️⃣ 网络管理
5.1 基础命令
| | |
ping | | ping -c 4 www.example.com |
curl | | curl https://api.example.com |
wget | | wget url -O file.zip |
ss | | ss -tlnp |
traceroute | | traceroute example.com |
5.2 curl 高级用法
# GET 请求(含 JSON)curl https://api.github.com/usercurl -X GET https://api.example.com/users?id=1# POST + 表单curl -X POST -d "user=bob&pass=secret" http://example.com/login# POST + JSON Bodycurl -X POST \ -H "Content-Type: application/json" \ -d '{"name":"Alice","age":30}' \ https://api.example.com/users# HTTP 认证(Token)curl -H "Authorization: Bearer YOUR_TOKEN" https://example.com# HTTPS 调试(自签名证书警告)curl -k https://self-signed-ssl.example.com# 分块下载大文件wget --progress=bar:force -O /dev/null url# POST + 多部分表单(multipart/form-data)curl -X POST \ -F "file=@image.jpg" \ -F "caption=Hello!" \ https://upload.example.com
5.3 下载与断点续传
# wget 基础wget urlwget url -O file.zip # 指定文件名wget url -c # 断点续传# 镜像服务器wget url --mirror # 完整站点的镜像(慎用!)# aria2(更快、支持多线程)aria2c -x 16 "https://example.com/big.iso" \ -d /tmp -s 16 # 16 线程# yt-dlp(下载视频)yt-dlp "url"# 需安装# 浏览器自动化工具puppeteer # Node.jsplaywright # 跨语言
5.4 DNS & hosts 管理
# 测试域名解析nslookup www.example.com # BIND9dig @8.8.8.8 www.example.com # Google DNShost www.example.com # host工具# 查看/修改 hostscat /etc/hostssudo nano /etc/hosts # 添加自定义映射
6️⃣ 系统监控
6.1 实时监控工具
| | |
top | | top -b -n 1 head -20 |
htop | | htop |
vmstat | | vmstat 1 |
iostat | | iostat -x 1 |
sar | | sar -u 5 |
6.2 CPU & 内存分析
# top 查看前 N 大进程top -b -n 1 | head -20# free + awk(格式化)free -h | awk '/^Mem:/{printf "内存使用:%s%%\n", $3/$2*100}'# vmstat 解读vmstat 1 # 每秒刷新vmstat 5 # 每 5 秒
6.3 磁盘 IO & 网络监控
# iostat(IO 使用率)iostat -x 2 # 每 2 秒,输出 %util, await 等指标iostat -e # 事件统计# netstat(网络连接)netstat -s | grep "receive"# 接收错误netstat -an | grep ESTABLISHED # 活跃连接# ss(推荐替代 netstat)ss -tuna # 所有 TCP/UDP 套接字ss -s # 协议统计
7️⃣ 权限管理
7.1 chmod / chown
# chmod(权限变更)chmod +x file # 添加执行权限chmod 644 file # rw-r--r-- (owner rw, others r)chmod a+x *.sh # 所有用户可执行chmod 700 dir/ # 仅 owner 完全访问# chown(所有权变更)chown user:group file # root 权限chgrp group dir# 改组
7.2 umask & setuid
# umask(默认创建掩码)umask# 查看当前 (022/077)touchtest; ls -l # 验证生成文件权限 (rw-r--r--)# setuid/setgid/sticky(位操作)chmod u+s file # owner 设置 UIDchmod g+s dir# group 写时创建同组文件# sticky bit (目录保护)chmod 1777 /tmp # 仅 owner 可删自文件
7.3 ACL(访问控制列表)
# ACL 基础getfacl file # 查看完整 ACLsetfacl -m u:user:rx file # 给 user 加权限setfacl -x u:user file # 删除 user 的 ACL# 目录共享场景mkdir /mnt/backup; setfacl -R -m g:group1:rwX /mnt/backup
8️⃣ 包管理(Debian/RHEL)
8.1 apt (Debian/Ubuntu)
# 基础操作apt update # 更新索引apt upgrade # 系统升级apt install nginx # 安装apt remove nginx # 卸载(不清除配置)apt autoremove # 清理无用依赖# 来源管理apt-cache search redis # 搜索包apt-cache show redis # 详情apt list --upgradable # 可升级软件包列表# 虚拟环境apt install python3-venv venv \ && cd /home/ubuntu && \ python3 -m venv myenv \ && source myenv/bin/activate
8.2 yum/dnf (RHEL/CentOS/Fedora)
# 基础操作yum list # 列出所有包yum search mysql # 搜索yum install nginx # 安装yum remove nginx # 卸载yum clean all && yum makecache # 清理缓存# EPEL 扩展源yum localinstall epel-release # 启用 EPELyum install python39 # EPEL 中才有
8.3 pacman (Arch) / apk (Alpine)
# pacman (Arch Linux)pacman -Syu # 同步更新pacman -S nginx # 安装pacman -Rs nginx # 卸载(不删配置)# apk (Alpine Linux)apk update && apk add nginx
9️⃣ 高级技巧
9.1 环境变量管理
# 查看/设置环境变量env# 查看所有变量echo$PATH# 当前 PATHexport VAR=value # 导出给子进程unset VAR # 删除变量# bashrc / profile(持久化)vim ~/.bashrc # 编辑用户配置. ~/.bashrc # 立即生效(source)
9.2 管道与重定向
# > >> & (标准流)cmd1 > file # 覆盖输出cmd2 >> file # 追加cmd3 & # 后台任务cmd4 2>&1 # 重定向错误到 stdout# | && (管道/逻辑)ps aux | grep nginx # 管道筛选cat file.txt && echo ok # 前一项成功才执行
9.3 find + xargs + while(批量处理)
#!/bin/bash# find_large_logs.sh — 清理 7 天前的日志find /var/log -name "*.log" -mtime +7 -print0 | \ xargs -0 rm -f# while(逐文件处理)find . -type f \( -name "*.csv" -o -name "*.json" \) | \while IFS= read -r file; doecho"处理 $file"done
9.4 常用技巧速查
| |
| find . -type f -empty |
| |
| |
| : > bigfile.txt |
| exec 3>&1 >&/dev/null; exec 1>&3 |
🔟 实战场景
场景 1:Web 服务器日志分析
# 统计请求来源 TOP20cat access.log | awk '{print $9}' | sort -u | \head -20 | whileread domain; doecho"Top request: $(echo "$domain" | cut -d'.' -f1)"done# 错误日志提取(匹配 HTTP 4xx/5xx)grep -E 'HTTP/1\.[01]" [45]' access.log > errors.log# Nginx 实时监控(tail + awk)tail -f access.log | grep -v "GET /" | grep -i 'error'
场景 2:批量备份脚本
#!/bin/bash# backup.sh — 自动备份网站目录BACKUP_DIR="/backup_$(date +%Y%m%d)"mkdir -p $BACKUP_DIRtar -czf $BACKUP_DIR/www.tar.gz /var/www/htmlecho"✅ 备份成功:$BACKUP_DIR" >> /backup.log# 循环清理旧备份(只留最近 7 天)find /backup -name "backup_*.tar.gz" -mtime +7 -delete
场景 3:健康检查脚本
#!/bin/bash# healthcheck.sh — Web 服务存活检测for url in http://localhost:80/health http://127.0.0.1:3000/api/v1; doif curl -sf "$url"; thenecho"✅ $url 正常"elseecho"❌ $url 已崩溃(自动重启)" systemctl restart apache2 nginxfidone
📋 常用快捷键(bash/zsh)
📚 进一步学习资源
- • Linux man 手册 — 官方文档,最全命令说明
- • 《鸟哥的 Linux 私房菜》— 中文经典教材
💡 提示:Linux 命令虽多,但核心思想是 管道 (|)、重定向 (>|>)、脚本化 (bash)。掌握这三板斧,再复杂的问题也能拆解解决!
祝学习愉快!👋