# Linux 常用命令指南

## 目录
- [文件与目录操作](#文件与目录操作)
- [文件查看与编辑](#文件查看与编辑)
- [文件搜索](#文件搜索)
- [权限管理](#权限管理)
- [进程管理](#进程管理)
- [系统信息](#系统信息)
- [网络操作](#网络操作)
- [压缩与解压](#压缩与解压)
- [文本处理](#文本处理)
- [磁盘管理](#磁盘管理)
- [用户管理](#用户管理)
- [服务管理](#服务管理)
- [常用快捷键](#常用快捷键)
- [组合命令](#组合命令)

---

## 文件与目录操作

### 目录操作
```bash
# 查看当前目录
pwd

# 切换目录
cd <目录路径>
cd ~              # 切换到用户主目录
cd -              # 切换到上一个目录
cd ..             # 切换到上级目录
cd /              # 切换到根目录

# 列出目录内容
ls                # 列出当前目录文件
ls -l             # 详细列表（长格式）
ls -a             # 显示隐藏文件
ls -la            # 详细列表包含隐藏文件
ls -lh            # 人类可读的文件大小
ls -lt            # 按时间排序
ls -ltr           # 按时间倒序
ls -R             # 递归列出子目录

# 创建目录
mkdir <目录名>                    # 创建单个目录
mkdir -p dir1/dir2/dir3          # 递归创建多级目录
mkdir dir1 dir2 dir3             # 创建多个目录

# 删除目录
rmdir <目录名>                   # 删除空目录
rm -r <目录名>                   # 递归删除目录
rm -rf <目录名>                  # 强制递归删除（危险！）
```

### 文件操作
```bash
# 创建文件
touch <文件名>                   # 创建空文件或更新文件时间戳
touch file1 file2 file3         # 创建多个文件

# 复制文件
cp <源文件> <目标文件>           # 复制文件
cp -r <源目录> <目标目录>        # 递归复制目录
cp -p <源文件> <目标文件>        # 保留文件属性
cp -a <源目录> <目标目录>        # 归档复制（保留所有属性）

# 移动/重命名文件
mv <源文件> <目标文件>           # 移动或重命名文件
mv <源目录> <目标目录>           # 移动目录

# 删除文件
rm <文件名>                      # 删除文件
rm -f <文件名>                   # 强制删除（不提示）
rm -i <文件名>                   # 交互式删除（提示确认）
rm -rf <目录>                    # 递归强制删除目录（危险！）
```

### 文件链接
```bash
# 创建硬链接
ln <源文件> <链接名>

# 创建软链接（符号链接）
ln -s <源文件> <链接名>
ln -s <源目录> <链接目录>
```

---

## 文件查看与编辑

### 查看文件内容
```bash
# 查看整个文件
cat <文件名>                     # 显示文件全部内容
cat -n <文件名>                  # 显示行号
cat file1 file2                  # 连接多个文件显示

# 分页查看
less <文件名>                    # 分页查看（可上下滚动）
more <文件名>                    # 分页查看（只能向下）

# 查看文件头部
head <文件名>                    # 显示前10行
head -n 20 <文件名>              # 显示前20行
head -c 100 <文件名>             # 显示前100字节

# 查看文件尾部
tail <文件名>                    # 显示后10行
tail -n 20 <文件名>              # 显示后20行
tail -f <文件名>                 # 实时跟踪文件变化（常用于日志）
tail -F <文件名>                 # 跟踪文件（文件被删除重建后继续跟踪）

# 查看文件类型
file <文件名>                    # 显示文件类型信息

# 统计文件信息
wc <文件名>                      # 统计行数、单词数、字节数
wc -l <文件名>                   # 只统计行数
wc -w <文件名>                   # 只统计单词数
wc -c <文件名>                   # 只统计字节数
```

### 文件编辑
```bash
# vi/vim 编辑器
vi <文件名>                      # 打开文件编辑
vim <文件名>                     # 打开文件编辑（增强版vi）

# nano 编辑器（简单易用）
nano <文件名>                    # 打开文件编辑

# 基本vim操作
# 进入编辑模式：按 i（插入）或 a（追加）
# 退出编辑模式：按 Esc
# 保存并退出：:wq 或 :x
# 不保存退出：:q!
# 保存不退出：:w
```

---

## 文件搜索

### find 命令
```bash
# 按名称搜索
find <目录> -name "<文件名>"              # 精确匹配
find <目录> -name "*.txt"                 # 通配符匹配
find <目录> -iname "*.txt"                # 忽略大小写

# 按类型搜索
find <目录> -type f                       # 只查找文件
find <目录> -type d                       # 只查找目录
find <目录> -type l                       # 只查找链接

# 按大小搜索
find <目录> -size +100M                   # 大于100MB的文件
find <目录> -size -10k                    # 小于10KB的文件
find <目录> -size 50M                     # 等于50MB的文件

# 按时间搜索
find <目录> -mtime -7                    # 7天内修改的文件
find <目录> -mtime +30                   # 30天前修改的文件
find <目录> -mmin -60                   # 60分钟内修改的文件

# 按权限搜索
find <目录> -perm 644                    # 权限为644的文件
find <目录> -perm -u+x                   # 用户有执行权限的文件

# 执行操作
find <目录> -name "*.log" -delete        # 删除找到的文件
find <目录> -name "*.txt" -exec rm {} \; # 对找到的文件执行命令
find <目录> -name "*.txt" -ok rm {} \;   # 交互式执行
```

### locate 命令（需要先建立索引）
```bash
locate <文件名>                  # 快速搜索文件（基于数据库）
updatedb                        # 更新locate数据库（需要root）
```

### grep 命令（文本搜索）
```bash
# 基本搜索
grep "关键字" <文件名>          # 在文件中搜索
grep -i "关键字" <文件名>       # 忽略大小写
grep -v "关键字" <文件名>       # 反向搜索（不匹配的行）
grep -n "关键字" <文件名>       # 显示行号
grep -c "关键字" <文件名>       # 统计匹配行数

# 递归搜索
grep -r "关键字" <目录>          # 递归搜索目录
grep -r -n "关键字" <目录>       # 递归搜索并显示行号

# 正则表达式
grep "^关键字" <文件名>         # 以关键字开头
grep "关键字$" <文件名>         # 以关键字结尾
grep -E "正则表达式" <文件名>    # 扩展正则表达式

# 上下文显示
grep -A 3 "关键字" <文件名>     # 显示匹配行及后3行
grep -B 3 "关键字" <文件名>     # 显示匹配行及前3行
grep -C 3 "关键字" <文件名>     # 显示匹配行及前后3行
```

### which/whereis 命令
```bash
which <命令>                     # 查找命令的完整路径
whereis <命令>                   # 查找命令、源码和手册页位置
```

---

## 权限管理

### 查看权限
```bash
ls -l <文件名>                   # 查看文件权限
stat <文件名>                    # 查看详细文件信息
```

### 修改权限（chmod）
```bash
# 数字方式
chmod 755 <文件名>               # rwxr-xr-x
chmod 644 <文件名>               # rw-r--r--
chmod 777 <文件名>               # rwxrwxrwx（所有权限）

# 符号方式
chmod u+x <文件名>              # 用户添加执行权限
chmod g-w <文件名>               # 组移除写权限
chmod o+r <文件名>               # 其他用户添加读权限
chmod a+x <文件名>              # 所有人添加执行权限
chmod u=rwx,g=rx,o=r <文件名>    # 分别设置权限

# 递归修改
chmod -R 755 <目录>              # 递归修改目录及子目录权限
```

### 修改所有者（chown）
```bash
chown <用户> <文件名>            # 修改文件所有者
chown <用户>:<组> <文件名>       # 修改所有者和组
chown -R <用户> <目录>           # 递归修改目录所有者
```

### 修改组（chgrp）
```bash
chgrp <组名> <文件名>            # 修改文件组
chgrp -R <组名> <目录>           # 递归修改目录组
```

### 特殊权限
```bash
# SUID（Set User ID）
chmod u+s <文件名>              # 执行时以文件所有者身份运行

# SGID（Set Group ID）
chmod g+s <文件名>              # 执行时以文件组身份运行

# Sticky Bit
chmod +t <目录>                 # 目录中只有所有者可以删除文件
```

---

## 进程管理

### 查看进程
```bash
# 基本查看
ps                              # 显示当前终端进程
ps aux                          # 显示所有进程详细信息
ps -ef                          # 显示所有进程（另一种格式）
ps aux | grep <进程名>          # 搜索特定进程

# 实时查看
top                             # 实时显示进程（类似任务管理器）
htop                            # 增强版top（需要安装）
top -p <PID>                    # 只显示指定进程

# 按资源排序
top -o %CPU                     # 按CPU使用率排序
top -o %MEM                     # 按内存使用率排序
```

### 进程控制
```bash
# 启动进程
<命令> &                        # 后台运行命令
nohup <命令> &                  # 后台运行，终端关闭后继续

# 终止进程
kill <PID>                      # 终止进程（发送SIGTERM信号）
kill -9 <PID>                   # 强制终止（发送SIGKILL信号）
killall <进程名>                # 终止所有同名进程
pkill <进程名>                  # 按名称终止进程

# 暂停/恢复进程
kill -STOP <PID>                # 暂停进程
kill -CONT <PID>                # 恢复进程

# 查看进程树
pstree                          # 显示进程树
pstree -p                       # 显示进程树和PID
```

### 作业控制
```bash
jobs                            # 查看后台作业
fg <作业号>                     # 将后台作业调到前台
bg <作业号>                     # 将暂停的作业放到后台运行
```

---

## 系统信息

### 系统版本
```bash
uname -a                        # 显示所有系统信息
uname -r                        # 显示内核版本
uname -m                        # 显示机器架构
cat /etc/os-release             # 显示发行版信息
lsb_release -a                  # 显示LSB信息（需要安装）
```

### CPU信息
```bash
cat /proc/cpuinfo               # 显示CPU详细信息
lscpu                           # 显示CPU架构信息
nproc                           # 显示CPU核心数
```

### 内存信息
```bash
free                            # 显示内存使用情况
free -h                         # 人类可读格式
free -m                         # 以MB为单位
cat /proc/meminfo               # 详细内存信息
```

### 磁盘信息
```bash
df                              # 显示磁盘使用情况
df -h                           # 人类可读格式
df -i                           # 显示inode使用情况
du <目录>                       # 显示目录占用空间
du -h <目录>                    # 人类可读格式
du -sh <目录>                   # 只显示总计
du -h --max-depth=1 <目录>      # 只显示一级子目录
```

### 系统负载
```bash
uptime                          # 显示系统运行时间和负载
w                               # 显示登录用户和负载
```

### 硬件信息
```bash
lspci                           # 显示PCI设备
lsusb                           # 显示USB设备
dmidecode                       # 显示硬件信息（需要root）
```

---

## 网络操作

### 网络配置
```bash
# 查看IP地址
ifconfig                        # 显示网络接口信息
ip addr                         # 显示IP地址（新命令）
ip addr show                    # 显示所有接口
hostname -I                     # 显示本机IP地址

# 配置网络
ifconfig <接口> <IP地址>        # 设置IP地址
ip addr add <IP地址>/<掩码> dev <接口>  # 添加IP地址

# 查看路由
route -n                        # 显示路由表
ip route                        # 显示路由表（新命令）
```

### 网络连接测试
```bash
ping <主机>                     # 测试网络连通性
ping -c 4 <主机>                # 发送4个包后停止
ping -i 2 <主机>                # 每2秒发送一次

# 端口测试
telnet <主机> <端口>            # 测试端口连通性
nc -zv <主机> <端口>            # 测试端口（netcat）
```

### 网络下载
```bash
wget <URL>                      # 下载文件
wget -c <URL>                   # 断点续传
wget -r <URL>                   # 递归下载
curl <URL>                      # 下载文件（支持更多协议）
curl -O <URL>                   # 保存文件
curl -L <URL>                   # 跟随重定向
```

### 网络统计
```bash
netstat -an                     # 显示所有网络连接
netstat -tuln                   # 显示监听端口
netstat -rn                     # 显示路由表
ss -an                          # 显示网络连接（新命令，更快）
ss -tuln                        # 显示监听端口
```

### 防火墙
```bash
# iptables（需要root）
iptables -L                     # 列出规则
iptables -A INPUT -p tcp --dport 80 -j ACCEPT  # 添加规则

# ufw（Ubuntu防火墙）
ufw status                      # 查看状态
ufw enable                      # 启用防火墙
ufw allow 80/tcp                # 允许端口
ufw deny 22/tcp                 # 拒绝端口
```

---

## 压缩与解压

### tar 命令
```bash
# 压缩
tar -czf <压缩包名>.tar.gz <目录>    # 创建gzip压缩包
tar -cjf <压缩包名>.tar.bz2 <目录>   # 创建bzip2压缩包
tar -cJf <压缩包名>.tar.xz <目录>    # 创建xz压缩包

# 解压
tar -xzf <压缩包名>.tar.gz          # 解压gzip压缩包
tar -xjf <压缩包名>.tar.bz2          # 解压bzip2压缩包
tar -xJf <压缩包名>.tar.xz           # 解压xz压缩包

# 查看压缩包内容
tar -tzf <压缩包名>.tar.gz           # 列出gzip压缩包内容
tar -tjf <压缩包名>.tar.bz2          # 列出bzip2压缩包内容

# 常用选项说明
# -c: 创建压缩包
# -x: 解压
# -z: gzip压缩
# -j: bzip2压缩
# -J: xz压缩
# -f: 指定文件名
# -v: 显示过程
# -C: 指定解压目录
```

### zip/unzip 命令
```bash
zip -r <压缩包名>.zip <目录>         # 压缩目录
zip <压缩包名>.zip <文件1> <文件2>   # 压缩文件
unzip <压缩包名>.zip                 # 解压
unzip -l <压缩包名>.zip              # 查看压缩包内容
unzip -d <目录> <压缩包名>.zip       # 解压到指定目录
```

### gzip/gunzip 命令
```bash
gzip <文件名>                        # 压缩文件（生成.gz文件）
gunzip <文件名>.gz                   # 解压.gz文件
gzip -d <文件名>.gz                  # 解压（另一种方式）
```

---

## 文本处理

### 文本过滤
```bash
# cut 命令（按列提取）
cut -d: -f1 /etc/passwd              # 以:为分隔符，提取第1列
cut -c1-10 <文件名>                  # 提取第1-10个字符

# sort 命令（排序）
sort <文件名>                        # 排序文件
sort -r <文件名>                     # 倒序排序
sort -n <文件名>                     # 按数字排序
sort -u <文件名>                     # 去重排序

# uniq 命令（去重）
uniq <文件名>                        # 去除相邻重复行
uniq -c <文件名>                     # 统计重复次数
uniq -d <文件名>                     # 只显示重复行
uniq -u <文件名>                     # 只显示不重复行

# 组合使用
sort <文件名> | uniq                # 排序后去重
```

### 文本替换
```bash
# sed 命令（流编辑器）
sed 's/旧文本/新文本/g' <文件名>     # 替换文本
sed -i 's/旧文本/新文本/g' <文件名>   # 直接修改文件
sed 's/旧文本/新文本/g' <文件名> > 新文件  # 保存到新文件
sed -n '10,20p' <文件名>             # 显示第10-20行
sed '10,20d' <文件名>                # 删除第10-20行

# tr 命令（字符转换）
tr 'a-z' 'A-Z' < <文件名>            # 小写转大写
tr -d '\n' < <文件名>                # 删除换行符
```

### awk 命令（文本处理工具）
```bash
awk '{print $1}' <文件名>            # 打印第1列
awk -F: '{print $1}' <文件名>        # 以:为分隔符，打印第1列
awk '/关键字/ {print}' <文件名>      # 打印包含关键字的行
awk '{sum+=$1} END {print sum}' <文件名>  # 计算第1列总和
```

---

## 磁盘管理

### 磁盘分区
```bash
fdisk -l                          # 列出所有分区（需要root）
lsblk                             # 以树形显示块设备
parted -l                         # 显示分区信息
```

### 挂载/卸载
```bash
mount                             # 显示已挂载的文件系统
mount <设备> <挂载点>             # 挂载设备
umount <挂载点>                   # 卸载设备
umount -l <挂载点>                # 强制卸载（lazy unmount）
```

### 文件系统检查
```bash
fsck <设备>                       # 检查文件系统（需要root）
fsck -y <设备>                    # 自动修复错误
```

---

## 用户管理

### 用户操作
```bash
whoami                            # 显示当前用户名
id                                # 显示用户ID和组ID
who                               # 显示登录用户
w                                 # 显示登录用户和活动

# 添加/删除用户（需要root）
useradd <用户名>                  # 添加用户
userdel <用户名>                   # 删除用户
passwd <用户名>                   # 修改用户密码
```

### 切换用户
```bash
su <用户名>                       # 切换用户
su - <用户名>                     # 切换用户并加载环境变量
sudo <命令>                       # 以root权限执行命令
sudo -u <用户> <命令>             # 以指定用户执行命令
```

### 组操作
```bash
groups                            # 显示当前用户所属组
groupadd <组名>                   # 添加组（需要root）
groupdel <组名>                   # 删除组（需要root）
usermod -aG <组名> <用户名>       # 将用户添加到组（需要root）
```

---

## 服务管理

### systemd 服务（现代Linux发行版）
```bash
systemctl status <服务名>          # 查看服务状态
systemctl start <服务名>          # 启动服务
systemctl stop <服务名>           # 停止服务
systemctl restart <服务名>        # 重启服务
systemctl reload <服务名>         # 重新加载配置
systemctl enable <服务名>         # 设置开机自启
systemctl disable <服务名>        # 取消开机自启
systemctl list-units              # 列出所有服务
systemctl list-unit-files         # 列出所有服务文件
```

### service 命令（传统方式）
```bash
service <服务名> status           # 查看服务状态
service <服务名> start            # 启动服务
service <服务名> stop             # 停止服务
service <服务名> restart          # 重启服务
```

---

## 常用快捷键

### 终端快捷键
```bash
Ctrl + C                         # 中断当前命令
Ctrl + D                         # 退出终端/结束输入
Ctrl + Z                         # 暂停进程（放入后台）
Ctrl + L                         # 清屏（等同于clear）
Ctrl + A                         # 移动到行首
Ctrl + E                         # 移动到行尾
Ctrl + U                         # 删除光标前所有内容
Ctrl + K                         # 删除光标后所有内容
Ctrl + W                         # 删除光标前一个单词
Ctrl + R                         # 搜索历史命令
Tab                              # 自动补全
```

### 历史命令
```bash
history                          # 显示命令历史
history | grep <关键字>          # 搜索历史命令
!!                               # 执行上一条命令
!<编号>                          # 执行历史中指定编号的命令
!<字符串>                        # 执行最近以字符串开头的命令
```

---

## 组合命令

### 管道操作
```bash
# 基本管道
命令1 | 命令2                    # 将命令1的输出作为命令2的输入

# 示例
ps aux | grep python             # 查找python进程
cat file.txt | grep "关键字"     # 在文件中搜索
ls -l | wc -l                    # 统计文件数量
```

### 重定向
```bash
命令 > 文件                      # 输出重定向到文件（覆盖）
命令 >> 文件                     # 输出追加到文件
命令 < 文件                      # 从文件读取输入
命令 2> 文件                     # 错误输出重定向
命令 > 文件 2>&1                 # 标准输出和错误都重定向
命令 > /dev/null 2>&1            # 丢弃所有输出
```

### 逻辑操作
```bash
命令1 && 命令2                   # 命令1成功才执行命令2
命令1 || 命令2                   # 命令1失败才执行命令2
命令1 ; 命令2                    # 顺序执行命令（无论成功失败）
```

### 常用组合示例
```bash
# 查找并删除
find . -name "*.log" -delete

# 统计文件行数
find . -name "*.txt" -exec wc -l {} \; | awk '{sum+=$1} END {print sum}'

# 查找大文件
find . -type f -size +100M -exec ls -lh {} \;

# 批量重命名
for file in *.txt; do mv "$file" "${file%.txt}.bak"; done

# 监控日志
tail -f /var/log/syslog | grep "ERROR"

# 压缩并删除原文件
tar -czf backup.tar.gz dir/ && rm -rf dir/

# 查找并替换
find . -name "*.txt" -exec sed -i 's/旧文本/新文本/g' {} \;
```

---

## 实用技巧

### 别名设置
```bash
# 临时设置
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'

# 永久设置（添加到 ~/.bashrc 或 ~/.bash_profile）
echo "alias ll='ls -alF'" >> ~/.bashrc
source ~/.bashrc                 # 重新加载配置
```

### 环境变量
```bash
echo $PATH                       # 显示PATH变量
export PATH=$PATH:/新路径        # 添加PATH
export VAR=value                 # 设置环境变量
env                              # 显示所有环境变量
```

### 后台运行
```bash
nohup <命令> &                   # 后台运行，忽略挂起信号
screen -S <会话名>               # 创建screen会话
screen -r <会话名>               # 恢复screen会话
tmux new -s <会话名>            # 创建tmux会话
tmux attach -t <会话名>         # 附加到tmux会话
```

---

## 常用命令速查表

| 功能 | 命令 |
|------|------|
| 查看当前目录 | `pwd` |
| 列出文件 | `ls -lah` |
| 切换目录 | `cd <目录>` |
| 创建目录 | `mkdir -p dir1/dir2` |
| 删除文件 | `rm -rf <文件/目录>` |
| 复制文件 | `cp -r <源> <目标>` |
| 移动文件 | `mv <源> <目标>` |
| 查看文件 | `cat/less/more <文件>` |
| 查看头部 | `head -n 20 <文件>` |
| 查看尾部 | `tail -f <文件>` |
| 搜索文件 | `find . -name "*.txt"` |
| 搜索文本 | `grep -r "关键字" <目录>` |
| 查看进程 | `ps aux \| grep <进程>` |
| 终止进程 | `kill -9 <PID>` |
| 查看内存 | `free -h` |
| 查看磁盘 | `df -h` |
| 查看网络 | `ifconfig` 或 `ip addr` |
| 测试网络 | `ping <主机>` |
| 压缩文件 | `tar -czf file.tar.gz dir/` |
| 解压文件 | `tar -xzf file.tar.gz` |
| 修改权限 | `chmod 755 <文件>` |
| 修改所有者 | `chown user:group <文件>` |
| 查看系统信息 | `uname -a` |
| 查看系统负载 | `uptime` |

---

## 注意事项

1. **权限问题**：很多系统管理命令需要root权限（使用`sudo`）
2. **路径问题**：注意绝对路径和相对路径的区别
3. **通配符**：`*` 匹配任意字符，`?` 匹配单个字符
4. **危险命令**：`rm -rf`、`dd`、`mkfs` 等命令要谨慎使用
5. **命令历史**：使用 `history` 查看，`Ctrl+R` 搜索
6. **帮助文档**：使用 `man <命令>` 或 `<命令> --help` 查看帮助

---

## 参考资源

- [Linux命令大全](https://www.runoob.com/linux/linux-command-manual.html)
- [GNU Coreutils文档](https://www.gnu.org/software/coreutils/manual/)
- [Linux man pages](https://man7.org/linux/man-pages/)

---

*最后更新：2024年*
