# Linxu常用命令

# Swap常用操作

# Linux Swap 常用操作指南

Swap（交换空间）是Linux系统中用于内存扩展的磁盘空间，当物理内存(RAM)不足时，系统会将不活跃的内存页移动到Swap空间。

## 1. 查看当前Swap使用情况

```bash
free -h
# 或
swapon --show
# 或
cat /proc/swaps

```

## 2. 查看内存和Swap使用详情

```bash
top
# 然后按 M 按内存排序，按 P 按CPU排序
# 或者使用
htop

```

## 3. 创建Swap文件

```bash
# 创建一个4GB的Swap文件
sudo fallocate -l 4G /swapfile
# 或者使用dd命令（较慢但更可靠）
sudo dd if=/dev/zero of=/swapfile bs=1M count=4096

# 设置正确的权限
sudo chmod 600 /swapfile

# 格式化Swap文件
sudo mkswap /swapfile

# 启用Swap文件
sudo swapon /swapfile

```

## 4. 永久启用Swap文件

编辑 `/etc/fstab` 文件，添加以下行：

```bash
/swapfile none swap sw 0 0

```

## 5. 调整Swap使用倾向（swappiness）

swappiness值范围0-100，表示系统使用Swap的倾向程度（默认通常为60）

```bash
# 查看当前值
cat /proc/sys/vm/swappiness

# 临时修改（重启后失效）
sudo sysctl vm.swappiness=10

# 永久修改
echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

```

## 6. 调整缓存压力（vfs\_cache\_pressure）

```bash
# 查看当前值
cat /proc/sys/vm/vfs_cache_pressure

# 临时修改
sudo sysctl vm.vfs_cache_pressure=50

# 永久修改
echo "vm.vfs_cache_pressure=50" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

```

## 7. 禁用并删除Swap文件

```bash
# 禁用Swap
sudo swapoff /swapfile

# 删除Swap文件
sudo rm /swapfile

# 从/etc/fstab中删除相关行
sudo nano /etc/fstab

```

## 8. 调整Swap空间大小

```bash
# 首先禁用Swap
sudo swapoff /swapfile

# 重新创建Swap文件（如改为8GB）
sudo fallocate -l 8G /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

```

## 9. 使用分区作为Swap

```bash
# 创建Swap分区（假设为/dev/sdb1）
sudo mkswap /dev/sdb1
sudo swapon /dev/sdb1

# 添加到/etc/fstab
/dev/sdb1 none swap sw 0 0

```

## 10. 监控Swap使用

```bash
# 实时监控
watch -n 1 free -h

# 查看哪些进程在使用Swap
sudo smem -s swap -r
# 或
sudo swapon --show

```

## 最佳实践建议

1. 对于现代系统（RAM ≥ 4GB），可以设置较低的swappiness值（如10-30）
2. 对于SSD，可以考虑减少Swap使用以延长SSD寿命
3. Swap大小通常建议： 
    - RAM &lt; 2GB：Swap = 2倍RAM
    - 2GB ≤ RAM &lt; 8GB：Swap = 等于RAM
    - RAM ≥ 8GB：Swap = 0.5倍RAM或更少
4. 生产服务器建议使用独立Swap分区而非Swap文件

这些操作可以帮助你有效管理Linux系统中的Swap空间，优化系统性能。

# find 命令详解

`find` 是 Linux/Unix 系统中一个非常强大的文件搜索工具，可以根据多种条件查找文件和目录。

## 基本语法

```bash
find [路径] [选项] [操作]

```

## 常用选项

### 按名称查找

- `-name`：按文件名查找（区分大小写） ```bash
    find /home -name "*.txt"
    
    ```
- `-iname`：按文件名查找（不区分大小写） ```bash
    find /home -iname "*.TXT"
    
    ```

### 按类型查找

- `-type`：按文件类型查找 
    - `f`：普通文件
    - `d`：目录
    - `l`：符号链接
    
    ```bash
    find /var -type d
    
    ```

### 按时间查找

- `-mtime`：按修改时间查找（天数） ```bash
    find / -mtime -7  # 7天内修改过的文件
    find / -mtime +30 # 30天前修改过的文件
    
    ```
- `-mmin`：按修改时间查找（分钟） ```bash
    find / -mmin -60  # 60分钟内修改过的文件
    
    ```
- `-atime`：按访问时间查找
- `-ctime`：按状态变更时间查找

### 按大小查找

- `-size`：按文件大小查找 ```bash
    find / -size +1G    # 大于1GB的文件
    find / -size -100k  # 小于100KB的文件
    find / -size 50M    # 等于50MB的文件
    
    ```

### 按权限查找

- `-perm`：按权限查找 ```bash
    find / -perm 644      # 精确匹配644权限的文件
    find / -perm -644     # 至少包含644权限的文件
    find / -perm /u=r     # 用户有读权限的文件
    
    ```

### 按用户/组查找

- `-user`：按所有者查找 ```bash
    find / -user root
    
    ```
- `-group`：按所属组查找 ```bash
    find / -group www-data
    
    ```

## 执行操作

### 基本操作

- `-print`：打印结果（默认操作）
- `-ls`：以ls格式显示结果 ```bash
    find /tmp -type f -ls
    
    ```

### 删除文件

- `-delete`：删除找到的文件 ```bash
    find /tmp -name "*.tmp" -delete
    
    ```

### 执行命令

- `-exec`：对找到的文件执行命令 ```bash
    find . -name "*.bak" -exec rm {} \;
    find /var/log -name "*.log" -exec gzip {} \;
    
    ```

## 组合条件

- `-a` 或 `-and`：与（默认）
- `-o` 或 `-or`：或
- `!` 或 `-not`：非
- `()`：组合条件（需要转义）

```bash
find / \( -name "*.jpg" -o -name "*.png" \) -size +1M

```

## 实用示例

1. 查找并删除空文件：
    
    ```bash
    find /tmp -type f -empty -delete
    
    ```
2. 查找最近修改的PHP文件：
    
    ```bash
    find /var/www -name "*.php" -mtime -1
    
    ```
3. 查找所有可执行文件：
    
    ```bash
    find / -type f -perm /a=x
    
    ```
4. 查找并更改权限：
    
    ```bash
    find /home -type f -perm 777 -exec chmod 644 {} \;
    
    ```
5. 查找大文件并排序：
    
    ```bash
    find / -type f -size +100M -exec ls -lh {} + | sort -k5 -rh
    
    ```

`find` 命令功能非常强大，上述只是常用功能的介绍。可以通过 `man find` 查看完整手册。

# Linux进程管理

在 Linux 系统中，进程管理是系统运维和日常操作的重要部分。以下是常用的进程管理命令及其用途：

---

### **1. 查看进程**

- **`ps`**  
    查看当前进程的快照。
    
    ```bash
    ps aux       # 查看所有运行中的进程（BSD 格式）
    ps -ef       # 查看所有进程（标准格式）
    ps -u user   # 查看特定用户的进程
    ps -p {pid} -f
    
    ```
- **`top` / `htop`**  
    实时动态查看进程和系统资源占用（`htop` 是增强版，需安装）。
    
    ```bash
    top          # 交互式界面，按 `q` 退出
    htop         # 更友好的界面（支持鼠标操作）
    
    ```
- **`pstree`**  
    以树状结构显示进程关系。
    
    ```bash
    pstree -p    # 显示进程及其 PID
    
    ```

---

### **2. 终止进程**

- **`kill`**  
    通过进程 ID (PID) 终止进程。
    
    ```bash
    kill -9 PID          # 强制终止进程（SIGKILL）
    kill -15 PID         # 优雅终止进程（SIGTERM，默认）
    
    ```
- **`pkill`**  
    通过进程名终止进程。
    
    ```bash
    pkill -9 nginx       # 强制终止所有名为 "nginx" 的进程
    
    ```
- **`killall`**  
    终止所有匹配名称的进程。
    
    ```bash
    killall -9 python    # 强制终止所有名为 "python" 的进程
    
    ```

---

### **3. 进程优先级**

- **`nice`**  
    启动进程时指定优先级（范围：-20 最高优先级，19 最低）。
    
    ```bash
    nice -n 10 command   # 以较低优先级运行命令
    
    ```
- **`renice`**  
    修改已运行进程的优先级。
    
    ```bash
    renice -n 5 -p PID   # 修改指定 PID 的优先级为 5
    
    ```

---

### **4. 后台进程管理**

- **`&`**  
    将进程放到后台运行。
    
    ```bash
    command &    # 后台运行命令
    
    ```
- **`jobs`**  
    查看当前终端后台任务。
    
    ```bash
    jobs -l      # 显示后台任务及其 PID
    
    ```
- **`fg` / `bg`**  
    将任务切换到前台（`fg`）或继续后台运行（`bg`）。
    
    ```bash
    fg %1        # 将任务 1 切换到前台
    bg %2        # 将任务 2 继续在后台运行
    
    ```
- **`nohup`**  
    退出终端后仍保持进程运行。
    
    ```bash
    nohup command &      # 忽略 SIGHUP 信号，日志默认写入 nohup.out
    
    ```

---

### **5. 进程搜索**

- **`pgrep`**  
    根据名称查找进程 PID。 ```bash
    pgrep -u root nginx  # 查找 root 用户的 nginx 进程 PID
    
    ```

---

### **6. 监控工具**

- **`vmstat`**  
    查看系统资源使用情况（CPU、内存、IO 等）。
    
    ```bash
    vmstat 1      # 每秒刷新一次
    
    ```
- **`pidstat`**（需安装 `sysstat`）  
    监控进程的 CPU、内存等资源占用。
    
    ```bash
    pidstat -p PID 1   # 每秒监控指定 PID
    
    ```

---

### **7. 其他实用命令**

- **`lsof`**  
    列出被进程打开的文件。
    
    ```bash
    lsof -i :80       # 查看占用 80 端口的进程
    lsof -p PID       # 查看指定 PID 打开的文件
    
    ```
- **`strace`**  
    跟踪进程的系统调用。
    
    ```bash
    strace -p PID     # 跟踪进程的系统调用（调试用）
    
    ```

---

### **常见场景示例**

1. **终止失控的进程**
    
    ```bash
    ps aux | grep "bad_process"  # 查找 PID
    kill -9 PID
    
    ```
2. **后台运行并保存日志**
    
    ```bash
    nohup python script.py > output.log 2>&1 &
    
    ```
3. **监控高 CPU 进程**
    
    ```bash
    top -o %CPU          # 按 CPU 使用率排序
    
    ```

---

掌握这些命令后，你可以高效地管理 Linux 系统中的进程。如果需要更详细的信息，可以通过 `man 命令名`（如 `man ps`）查看手册。

在 Linux 中，查看和管理进程的详细信息是系统管理的重要任务。以下是 **查看进程详情** 的常用命令和技巧，涵盖进程的资源占用、打开文件、环境变量、运行状态等关键信息。

---

### **1. 查看进程基本信息**

#### **(1) `ps`（进程快照）**

查看进程的 **PID、CPU、内存、启动命令** 等基础信息：

```bash
ps aux | grep <进程名>     # 模糊匹配进程（常用）
ps -ef | grep <进程名>     # 标准格式查看
ps -p <PID> -o pid,ppid,cmd,%cpu,%mem,stat  # 查看指定进程的详细信息

```

- **关键字段说明**： 
    - `%CPU`：CPU 占用率
    - `%MEM`：内存占用率
    - `STAT`：进程状态（如 `S`=睡眠，`R`=运行，`Z`=僵尸进程）
    - `PPID`：父进程 ID

#### **(2) `top` / `htop`（实时监控）**

动态查看进程的 **资源占用排名**（CPU、内存等）：

```bash
top                          # 默认按 CPU 排序
top -p <PID>                 # 监控指定 PID
htop                         # 交互式增强版（支持鼠标操作）

```

- **交互操作**： 
    - 按 `P`：按 CPU 排序
    - 按 `M`：按内存排序
    - 按 `F1`：查看帮助

---

### **2. 查看进程的详细属性**

#### **(1) `/proc/<PID>` 目录**

Linux 将所有进程的详细信息映射到 `/proc/<PID>/` 目录下，可直接查看：

```bash
ls /proc/<PID>               # 查看进程的详细信息文件
cat /proc/<PID>/status       # 进程状态（名称、PID、内存等）
cat /proc/<PID>/cmdline      # 查看进程的完整启动命令
cat /proc/<PID>/environ      # 查看进程的环境变量

```

- **关键文件**： 
    - `status`：进程状态摘要
    - `statm`：内存使用情况
    - `io`：I/O 统计信息

#### **(2) `pmap`（内存映射）**

查看进程的 **内存占用分布**：

```bash
pmap -x <PID>                # 显示详细内存映射

```

---

### **3. 查看进程打开的文件和网络连接**

#### **(1) `lsof`（列出打开文件）**

查看进程打开的文件、目录、网络连接等：

```bash
lsof -p <PID>                # 查看指定进程打开的文件
lsof -i :80                  # 查看占用 80 端口的进程
lsof -u <用户名>             # 查看用户打开的文件

```

- **常用选项**： 
    - `-i`：网络连接
    - `-c <进程名>`：按进程名过滤

#### **(2) `netstat` / `ss`（网络连接）**

查看进程的 **网络连接状态**：

```bash
netstat -tulnp | grep <PID>  # 查看进程的网络连接（旧版）
ss -tulnp | grep <PID>       # 更快的替代方案（推荐）

```

---

### **4. 查看进程的线程和调用栈**

#### **(1) `pstree`（进程树）**

显示进程的 **父子关系** 和线程：

```bash
pstree -p <PID>              # 树状显示进程及线程

```

#### **(2) `strace`（系统调用跟踪）**

监控进程的 **系统调用**（调试用）：

```bash
strace -p <PID>              # 实时跟踪进程的系统调用
strace -e open,read <命令>   # 跟踪命令的特定系统调用

```

#### **(3) `gdb`（调试器附加）**

深入分析进程的运行状态（需谨慎使用）：

```bash
gdb -p <PID>                 # 附加到运行中的进程

```

---

### **5. 查看进程的资源限制**

#### **(1) `ulimit`**

查看当前 shell 的资源限制：

```bash
ulimit -a                    # 显示所有限制（如打开文件数、栈大小等）

```

#### **(2) `/proc/<PID>/limits`**

查看指定进程的资源限制：

```bash
cat /proc/<PID>/limits       # 显示进程的软/硬限制

```

---

### **6. 统计进程的资源使用**

#### **(1) `pidstat`（综合监控）**

监控进程的 **CPU、内存、IO** 等（需安装 `sysstat`）：

```bash
pidstat -p <PID> 1           # 每秒刷新一次统计信息
pidstat -d -p <PID>          # 监控磁盘 I/O

```

#### **(2) `ps -eo`（自定义输出）**

按需显示进程的特定字段：

```bash
ps -eo pid,ppid,cmd,%cpu,%mem --sort=-%mem | head  # 按内存排序

```

---

### **常见问题排查示例**

1. **进程卡死**
    
    ```bash
    top                        # 找到高 CPU/内存的 PID
    strace -p <PID>            # 检查系统调用是否阻塞
    kill -9 <PID>              # 强制终止
    
    ```
2. **内存泄漏**
    
    ```bash
    pmap -x <PID>              # 查看内存分布
    cat /proc/<PID>/status | grep VmRSS  # 检查实际内存占用
    
    ```
3. **端口冲突**
    
    ```bash
    lsof -i :8080              # 查看占用端口的进程
    
    ```

---

### **总结**

<table id="bkmrk-%E9%9C%80%E6%B1%82-%E5%91%BD%E4%BB%A4-%E6%9F%A5%E7%9C%8B%E8%BF%9B%E7%A8%8B%E5%9F%BA%E6%9C%AC%E4%BF%A1%E6%81%AF-ps-au"><thead><tr><th>**需求**</th><th>**命令**</th></tr></thead><tbody><tr><td>查看进程基本信息</td><td>`ps aux` / `top`</td></tr><tr><td>查看进程环境变量</td><td>`cat /proc/<PID>/environ`</td></tr><tr><td>查看打开的文件</td><td>`lsof -p <PID>`</td></tr><tr><td>监控资源占用</td><td>`pidstat` / `htop`</td></tr><tr><td>分析系统调用</td><td>`strace -p <PID>`</td></tr><tr><td>查看网络连接</td><td>`ss -tulnp` / `netstat`</td></tr></tbody></table>

通过组合这些命令，你可以全面掌握 Linux 进程的详细状态！