Linux 基础命令入门到精通
📚 目录
环境准备
文件和目录操作
文本处理
进程管理
网络管理
系统监控
权限管理
包管理
高级技巧
实战场景
1️⃣ 环境准备
1.1 查看系统信息
bash
复制代码
# 系统版本
uname -r
cat /etc/os-release # CentOS/RHEL
cat /etc/issue # Debian/Ubuntu
# 硬件架构
uname -m # x86_64, aarch64 (Apple Silicon)
# CPU 信息
lscpu
grep ^model name* /proc/cpuinfo
1.2 磁盘空间查看
bash
复制代码
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 ~ 或 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 目录操作技巧
bash
复制代码
# 创建多级目录
mkdir -p ~/projects/{web,api}/{src,test}
# 查看目录大小(递归)
du -sh /var/log/*
# 查找大文件
find / -type f -size +500M -exec ls -lh {} \;
# 清理临时文件
find /tmp -type f -mtime +7 -delete
# 隐藏文件操作
ls -a # 显示所有(含 . 开头)
touch .gitignore .env
2.3 文件内容查看
bash
复制代码
# 快速预览
cat file.txt # 全部内容
head file.txt # 前 N 行
tail -f file.log # 实时监控日志
# 分页查看
less file.txt # 支持搜索(/关键词)
more file.txt # 较旧,少用
# 模糊查找关键词
grep -ri "error" . # 递归搜索 error 关键字
2.4 文件压缩
bash
复制代码
# 创建压缩包
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.gz
tar -tjf archive.tar.bz2 # 预览内容
# zip/unzip
zip -r archive.zip file1.txt file2.txt
unzip archive.zip
# gzip(原地压缩)
gzip file.log # 变成 file.log.gz
gunzip file.log.gz # 还原
zcat file.log.gz # 查看压缩文件内容
3️⃣ 文本处理
3.1 grep - 高级搜索
bash
复制代码
# 基础用法
grep "pattern" file.txt
grep -i "pattern" *.log # 忽略大小写
# 排除匹配
grep -v "pattern" file.txt # 反向匹配
# 正则表达式
grep -E "pattern1|pattern2" file # 多条件 OR
grep "^error:" log.txt # 行首 error:
# 统计匹配行数
grep -c "error" /var/log/syslog
grep "$ERR" logs/* | wc -l # 管道计数
# Perl 模式(更强大)
grep -P "[0-9]{4}" file.txt # Perl 正则
3.2 sed - 流编辑器
bash
复制代码
# 替换操作
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 - 文本分析器
bash
复制代码
# 提取第 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
bash
复制代码
# 排序
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
bash
复制代码
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
bash
复制代码
# 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
增强版 top
htop (需安装)
kill
终止进程
kill 12345
pkill
按名称杀
pkill nginx
killall
全名杀
killall python
4.2 高级查看技巧
bash
复制代码
# 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 # 找 PID
pgrep -a "python" # 找含 python 的所有进程
lsof | grep sshd # 看谁连接了服务
# 监控网络端口占用
ss -tlnp # 监听 TCP 端口
netstat -tulnp # ss 的旧版
4.3 杀进程(按顺序)
bash
复制代码
#!/bin/bash
# kill_with_priority.sh --- 优雅关闭脚本
processes=("nginx" "mysql" "redis")
for proc in "${processes[@]}"; do
p=$(pgrep -x $proc) || continue
echo "[INFO] Killing $proc (PID: $p)"
kill -15 $p # SIGTERM (温和)
sleep 2
if ! pgrep -x $proc; then
echo "[OK] $proc stopped"
else
echo "[WARN] Force killing $proc..."
kill -9 $p # SIGKILL (强制)
fi
done
# 批量杀进程(谨慎!)
pkill -9 node # 慎用!
4.4 前台命令后台化
bash
复制代码
# 单例程序
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
HTTP 请求
curl https://api.example.com
wget
下载文件
wget url -O file.zip
ss/netstat
端口监听
ss -tlnp
traceroute
路由追踪
traceroute example.com
5.2 curl 高级用法
bash
复制代码
# GET 请求(含 JSON)
curl https://api.github.com/user
curl -X GET https://api.example.com/users?id=1
# POST + 表单
curl -X POST -d "user=bob&pass=secret" http://example.com/login
# POST + JSON Body
curl -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 下载与断点续传
bash
复制代码
# wget 基础
wget url
wget 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.js
playwright # 跨语言
5.4 DNS & hosts 管理
bash
复制代码
# 测试域名解析
nslookup www.example.com # BIND9
dig @8.8.8.8 www.example.com # Google DNS
host www.example.com # host工具
# 查看/修改 hosts
cat /etc/hosts
sudo nano /etc/hosts # 添加自定义映射
6️⃣ 系统监控
6.1 实时监控工具
命令
说明
示例
top
CPU/内存动态视图
top -b -n 1 head -20
htop
增强版 top
htop
vmstat
虚拟内存统计
vmstat 1 (每 1 秒)
iostat
IO 监控
iostat -x 1
sar
系统活动报告
sar -u 5
6.2 CPU & 内存分析
bash
复制代码
# 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 & 网络监控
bash
复制代码
# 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
bash
复制代码
# 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
bash
复制代码
# umask(默认创建掩码)
umask # 查看当前 (022/077)
touch test; ls -l # 验证生成文件权限 (rw-r--r--)
# setuid/setgid/sticky(位操作)
chmod u+s file # owner 设置 UID
chmod g+s dir # group 写时创建同组文件
# sticky bit (目录保护)
chmod 1777 /tmp # 仅 owner 可删自文件
7.3 ACL(访问控制列表)
bash
复制代码
# ACL 基础
getfacl file # 查看完整 ACL
setfacl -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)
bash
复制代码
# 基础操作
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)
bash
复制代码
# 基础操作
yum list # 列出所有包
yum search mysql # 搜索
yum install nginx # 安装
yum remove nginx # 卸载
yum clean all && yum makecache # 清理缓存
# EPEL 扩展源
yum localinstall epel-release # 启用 EPEL
yum install python39 # EPEL 中才有
8.3 pacman (Arch) / apk (Alpine)
bash
复制代码
# pacman (Arch Linux)
pacman -Syu # 同步更新
pacman -S nginx # 安装
pacman -Rs nginx # 卸载(不删配置)
# apk (Alpine Linux)
apk update && apk add nginx
9️⃣ 高级技巧
9.1 环境变量管理
bash
复制代码
# 查看/设置环境变量
env # 查看所有变量
echo $PATH # 当前 PATH
export VAR=value # 导出给子进程
unset VAR # 删除变量
# bashrc / profile(持久化)
vim ~/.bashrc # 编辑用户配置
. ~/.bashrc # 立即生效(source)
9.2 管道与重定向
bash
复制代码
# > >> & (标准流)
cmd1 > file # 覆盖输出
cmd2 >> file # 追加
cmd3 & # 后台任务
cmd4 2>&1 # 重定向错误到 stdout
# | && (管道/逻辑)
ps aux | grep nginx # 管道筛选
cat file.txt && echo ok # 前一项成功才执行
9.3 find + xargs + while(批量处理)
bash
复制代码
#!/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; do
echo "处理 $file"
done
9.4 常用技巧速查
技巧
命令示例
查找空文件
find . -type f -empty
统计目录大小
`du -sh /*
查看网络连接数
`netstat -an
清空大文件(保留 inode)
: > bigfile.txt
强制刷新文件描述表
exec 3>&1 >&/dev/null; exec 1>&3
🔟 实战场景
场景 1:Web 服务器日志分析
bash
复制代码
# 统计请求来源 TOP20
cat access.log | awk '{print $9}' | sort -u | \
head -20 | while read domain; do
echo "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:批量备份脚本
bash
复制代码
#!/bin/bash
# backup.sh --- 自动备份网站目录
BACKUP_DIR="/backup_$(date +%Y%m%d)"
mkdir -p $BACKUP_DIR
tar -czf $BACKUP_DIR/www.tar.gz /var/www/html
echo "✅ 备份成功:$BACKUP_DIR" >> /backup.log
# 循环清理旧备份(只留最近 7 天)
find /backup -name "backup_*.tar.gz" -mtime +7 -delete
场景 3:健康检查脚本
bash
复制代码
#!/bin/bash
# healthcheck.sh --- Web 服务存活检测
for url in http://localhost:80/health http://127.0.0.1:3000/api/v1; do
if curl -sf "$url"; then
echo "✅ $url 正常"
else
echo "❌ $url 已崩溃(自动重启)"
systemctl restart apache2 nginx
fi
done
📋 常用快捷键(bash/zsh)
快捷键
作用
Ctrl+C
中断当前命令
Ctrl+D
结束会话 / EOF
Ctrl+Z
挂起前台进程
Ctrl+L
清屏并重新排版(类似 clear + cat)
↑↓
历史记录浏览
Tab
自动补全路径/文件/命令
📚 进一步学习资源
💡 提示 :Linux 命令虽多,但核心思想是 管道 (|)、重定向 (>|>)、脚本化 (bash) 。掌握这三板斧,再复杂的问题也能拆解解决!
祝学习愉快!👋