# Linux常用基础工具

# Mosh 基础使用指南

Mosh（Mobile Shell）是一个比传统 SSH 更强大的远程终端工具，特别适合移动和不稳定网络环境下的使用。

## 一、Mosh 简介

Mosh 的主要优势：

- 在网络切换或中断时保持连接
- 输入即时响应（无延迟显示）
- 预测性本地回显
- 更安全的连接方式

## 二、安装 Mosh

### 1. Linux 系统安装

```bash
# Ubuntu/Debian
sudo apt-get install mosh

# CentOS/RHEL
sudo yum install mosh

# Fedora
sudo dnf install mosh

```

### 2. macOS 安装

```bash
brew install mosh

```

### 3. Windows 使用

Windows 用户需要：

1. 安装 WSL 或 Cygwin
2. 在其中安装 mosh
3. 使用支持 mosh 的终端如 Windows Terminal

## 三、基本使用方法

### 1. 简单连接

```bash
mosh username@remote_host

```

### 2. 指定端口

```bash
mosh --ssh="ssh -p 2222" username@remote_host

```

### 3. 使用特定 SSH 密钥

```bash
mosh --ssh="ssh -i ~/.ssh/id_rsa" username@remote_host

```

## 四、常用参数

<table id="bkmrk-%E5%8F%82%E6%95%B0-%E8%AF%B4%E6%98%8E--p-port-%E6%8C%87%E5%AE%9A-udp"><thead><tr><th>参数</th><th>说明</th></tr></thead><tbody><tr><td>`-p PORT`</td><td>指定 UDP 端口范围（如 60000:61000）</td></tr><tr><td>`--predict=never`</td><td>禁用预测性回显</td></tr><tr><td>`--predict=always`</td><td>总是使用预测性回显</td></tr><tr><td>`--predict=adaptive`</td><td>自适应预测（默认）</td></tr><tr><td>`--ssh="COMMAND"`</td><td>指定 SSH 连接命令</td></tr><tr><td>`-a`</td><td>强制使用本地 IP 地址</td></tr><tr><td>`-n`</td><td>不初始化 SSH 会话（用于调试）</td></tr></tbody></table>

## 五、高级用法

### 1. 通过跳板机连接

```bash
mosh --ssh="ssh -J jump_user@jump_host" user@target_host

```

### 2. 保持连接的后台会话

```bash
# 使用 tmux 或 screen 配合 mosh
mosh user@host -- tmux new -A -s session_name

```

### 3. 指定服务器上的 mosh-server 路径

```bash
mosh --server="/usr/local/bin/mosh-server" user@host

```

## 六、Mosh 与 SSH 的区别

1. **协议差异**：
    
    
    - SSH 使用 TCP
    - Mosh 使用 UDP（默认端口 60000-61000）
2. **连接恢复**：
    
    
    - SSH 断连后需要重新连接
    - Mosh 在网络恢复后自动重连
3. **输入响应**：
    
    
    - SSH 有输入延迟
    - Mosh 提供即时本地回显

## 七、防火墙配置

Mosh 需要 UDP 端口开放：

```bash
# 开放 UDP 60000-61000 端口
sudo ufw allow 60000:61000/udp

```

## 八、常见问题解决

### 1. 连接失败

```bash
# 确保服务器安装了 mosh
ssh user@host "which mosh-server"

# 检查 UDP 端口是否开放
telnet host 60000

```

### 2. 解决乱码问题

```bash
# 指定 UTF-8 编码
mosh --ssh="ssh -o SendEnv=LC_*" user@host

```

### 3. 提高连接速度

```bash
# 使用压缩
mosh --ssh="ssh -C" user@host

```

## 九、退出 Mosh 会话

退出方式与 SSH 相同：

1. 输入 `exit` 或 `logout`
2. 或者按 `Ctrl-D`

## 十、Mosh 客户端选项

查看所有选项：

```bash
mosh --help

```

Mosh 是替代 SSH 的优秀工具，特别适合网络不稳定环境下的远程工作。虽然配置略复杂，但提供的稳定性和用户体验提升值得投入时间学习。

# Supervisor 在 Rocky Linux 上的安装与使用指南

Supervisor 是一个用 Python 编写的进程控制系统，允许用户监控和控制类 UNIX 系统上的多个进程。下面是在 Rocky Linux 上安装和配置 Supervisor 的完整指南。

## 一、安装 Supervisor

### 1. 安装 EPEL 仓库（如果尚未安装）

```bash
sudo dnf install epel-release
sudo dnf update

```

### 2. 安装 Supervisor

```bash
sudo dnf install supervisor

```

### 3. 启动并设置开机自启

```bash
sudo systemctl enable supervisord
sudo systemctl start supervisord

```

### 4. 验证安装

```bash
sudo supervisorctl status

```

## 二、基本配置

### 1. 主配置文件位置

主配置文件位于 `/etc/supervisord.conf`

### 2. 包含自定义配置

默认配置会包含 `/etc/supervisord.d/` 目录下的所有 `.ini` 文件：

```ini
[include]
files = /etc/supervisord.d/*.ini

```

## 三、配置管理进程

### 1. 创建自定义进程配置

在 `/etc/supervisord.d/` 中创建新的配置文件，例如 `myapp.ini`：

```ini
[program:myapp]
command=/usr/bin/python3 /path/to/your/app.py
directory=/path/to/your/app
user=yourusername
autostart=true
autorestart=true
startretries=3
stderr_logfile=/var/log/myapp.err.log
stdout_logfile=/var/log/myapp.out.log
environment=PYTHONPATH="/path/to/your/app"

```

### 2. 常用配置选项

<table id="bkmrk-%E9%80%89%E9%A1%B9-%E8%AF%B4%E6%98%8E-command-%E8%A6%81%E6%89%A7%E8%A1%8C%E7%9A%84%E5%91%BD%E4%BB%A4"><thead><tr><th>选项</th><th>说明</th></tr></thead><tbody><tr><td>`command`</td><td>要执行的命令</td></tr><tr><td>`directory`</td><td>运行命令前切换到的目录</td></tr><tr><td>`user`</td><td>运行进程的用户</td></tr><tr><td>`autostart`</td><td>是否随 Supervisor 启动而自动启动</td></tr><tr><td>`autorestart`</td><td>是否自动重启 (true/false/unexpected)</td></tr><tr><td>`startretries`</td><td>启动失败后的重试次数</td></tr><tr><td>`stderr_logfile`</td><td>标准错误日志文件</td></tr><tr><td>`stdout_logfile`</td><td>标准输出日志文件</td></tr><tr><td>`environment`</td><td>设置环境变量</td></tr></tbody></table>

## 四、Supervisor 命令使用

### 1. 重新加载配置

```bash
sudo supervisorctl reread
sudo supervisorctl update

```

### 2. 管理进程

```bash
# 启动进程
sudo supervisorctl start myapp

# 停止进程
sudo supervisorctl stop myapp

# 重启进程
sudo supervisorctl restart myapp

# 查看所有进程状态
sudo supervisorctl status

# 查看特定进程状态
sudo supervisorctl status myapp

```

### 3. 查看日志

```bash
# 查看主日志
sudo tail -f /var/log/supervisor/supervisord.log

# 查看应用日志
sudo tail -f /var/log/myapp.out.log

```

## 五、Web 界面（可选）

### 1. 启用 Web 界面

编辑 `/etc/supervisord.conf`，取消注释或添加以下内容：

```ini
[inet_http_server]
port=*:9001
username=admin
password=yourpassword

```

### 2. 重启 Supervisor

```bash
sudo systemctl restart supervisord

```

### 3. 访问 Web 界面

通过浏览器访问 `http://your-server-ip:9001`

## 六、高级配置

### 1. 进程组管理

```ini
[group:mygroup]
programs=myapp1,myapp2
priority=999

```

### 2. 事件监听

```ini
[eventlistener:memmon]
command=memmon -p myapp=200MB
events=TICK_60

```

### 3. 日志轮转

安装 `logrotate` 并创建 `/etc/logrotate.d/supervisor`：

```
/var/log/supervisor/*.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    create 0640 root root
    postrotate
        /usr/bin/supervisorctl pid > /dev/null && /usr/bin/supervisorctl reopen_logs
    endscript
}

```

## 七、故障排除

### 1. 常见问题解决

- **配置更改不生效**：
    
    ```bash
    sudo supervisorctl reread
    sudo supervisorctl update
    
    ```
- **进程无法启动**： 检查 `/var/log/supervisor/supervisord.log` 和应用的错误日志
- **权限问题**： 确保配置中指定的用户有执行命令和写入日志的权限

### 2. 日志位置

- 主日志：`/var/log/supervisor/supervisord.log`
- 子进程日志：在各自配置中指定的位置

## 八、安全注意事项

1. 不要以 root 用户运行应用程序
2. Web 界面应设置强密码
3. 考虑限制 Web 界面的访问 IP
4. 定期检查日志文件
5. 保持 Supervisor 更新到最新版本

通过以上步骤，您可以在 Rocky Linux 上成功安装和配置 Supervisor，实现对关键进程的有效管理和监控。

# Rsyncd 在 Rocky Linux 上的安装与使用指南

Rsyncd 是 rsync 的守护进程模式，允许将 rsync 作为服务运行，实现持续的文件同步服务。以下是在 Rocky Linux 8/9 上安装和配置 rsyncd 的完整指南。

## 一、安装 rsyncd

### 1. 安装 rsync 软件包

```bash
sudo dnf install rsync

```

### 2. 检查版本确认安装成功

```bash
rsync --version

```

## 二、配置 rsyncd 服务

### 1. 创建主配置文件

```bash
sudo vi /etc/rsyncd.conf

```

### 2. 基本配置示例

```ini
# 全局配置
uid = nobody
gid = nobody
use chroot = yes
max connections = 4
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
timeout = 300

# 模块配置
[backup]
    path = /data/backup
    comment = Backup Directory
    read only = no
    list = yes
    auth users = rsyncuser
    secrets file = /etc/rsyncd.secrets
    hosts allow = 192.168.1.0/24

```

### 3. 创建认证文件

```bash
sudo vi /etc/rsyncd.secrets

```

内容格式：

```
用户名:密码

```

例如：

```
rsyncuser:mypassword123

```

设置文件权限：

```bash
sudo chmod 600 /etc/rsyncd.secrets
sudo chown root:root /etc/rsyncd.secrets

```

### 4. 创建共享目录

```bash
sudo mkdir -p /data/backup
sudo chown nobody:nobody /data/backup

```

## 三、启动和管理 rsyncd 服务

### 1. 启用并启动服务

```bash
sudo systemctl enable rsyncd
sudo systemctl start rsyncd

```

### 2. 检查服务状态

```bash
sudo systemctl status rsyncd

```

### 3. 防火墙配置

```bash
# 开放873端口
sudo firewall-cmd --add-port=873/tcp --permanent
sudo firewall-cmd --reload

```

### 4. SELinux 配置（如启用）

```bash
sudo setsebool -P rsync_full_access=1

```

## 四、客户端连接使用

### 1. 从客户端同步到服务器（推送）

```bash
rsync -avz /local/path/ rsyncuser@server::backup

```

### 2. 从服务器同步到客户端（拉取）

```bash
rsync -avz rsyncuser@server::backup /local/path/

```

### 3. 使用密码文件（避免交互输入）

创建客户端密码文件 `~/rsync.pass`：

```
mypassword123

```

设置权限：

```bash
chmod 600 ~/rsync.pass

```

使用密码文件同步：

```bash
rsync -avz --password-file=~/rsync.pass /local/path/ rsyncuser@server::backup

```

## 五、高级配置选项

### 1. 模块配置参数

<table id="bkmrk-%E5%8F%82%E6%95%B0-%E8%AF%B4%E6%98%8E-path-%E6%A8%A1%E5%9D%97%E5%AF%B9%E5%BA%94%E7%9A%84%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F"><thead><tr><th>参数</th><th>说明</th></tr></thead><tbody><tr><td>`path`</td><td>模块对应的文件系统路径</td></tr><tr><td>`comment`</td><td>模块描述信息</td></tr><tr><td>`read only`</td><td>是否只读 (yes/no)</td></tr><tr><td>`list`</td><td>是否允许列出模块内容 (yes/no)</td></tr><tr><td>`auth users`</td><td>允许访问的用户名（逗号分隔）</td></tr><tr><td>`secrets file`</td><td>认证文件路径</td></tr><tr><td>`hosts allow`</td><td>允许访问的客户端IP</td></tr><tr><td>`hosts deny`</td><td>拒绝访问的客户端IP</td></tr><tr><td>`exclude`</td><td>排除的文件/目录</td></tr><tr><td>`include`</td><td>包含的文件/目录</td></tr></tbody></table>

### 2. 日志轮转配置

创建 `/etc/logrotate.d/rsyncd`：

```
/var/log/rsyncd.log {
    missingok
    notifempty
    sharedscripts
    delaycompress
    postrotate
        /bin/kill -HUP `cat /var/run/rsyncd.pid 2>/dev/null` 2>/dev/null || true
    endscript
}

```

## 六、安全最佳实践

1. **使用非默认端口**：
    
    ```ini
    port = 8873
    
    ```
    
    并相应调整防火墙规则
2. **限制访问IP**：
    
    ```ini
    hosts allow = 192.168.1.100, 10.0.0.0/24
    
    ```
3. **使用SSH隧道**（更安全）：
    
    ```bash
    rsync -avz -e "ssh -p 22" /local/path/ user@server:/remote/path/
    
    ```
4. **定期更换密码**
5. **监控日志文件**：
    
    ```bash
    sudo tail -f /var/log/rsyncd.log
    
    ```

## 七、故障排除

1. **连接被拒绝**：
    
    
    - 检查服务是否运行：`systemctl status rsyncd`
    - 检查防火墙设置
    - 验证端口是否监听：`ss -tulnp | grep rsync`
2. **认证失败**：
    
    
    - 检查 `/etc/rsyncd.secrets` 文件权限
    - 确认用户名密码正确
    - 检查SELinux状态
3. **权限问题**：
    
    
    - 确认共享目录权限
    - 检查uid/gid设置

通过以上配置，您可以在Rocky Linux上建立稳定安全的rsync文件同步服务。根据实际需求调整配置参数，并定期检查日志和维护系统安全。

# SSH 使用指南

## 什么是 SSH

SSH (Secure Shell) 是一种加密的网络协议，用于安全地远程登录和管理系统。它替代了不安全的 Telnet 和 rlogin 等协议。

## 基本用法

### 1. 连接到远程服务器

```bash
ssh username@hostname

```

示例：

```bash
ssh user@example.com

```

### 2. 指定端口连接（默认22）

```bash
ssh -p port_number username@hostname

```

示例：

```bash
ssh -p 2222 user@example.com

```

## 密钥认证

### 1. 生成 SSH 密钥对

```bash
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

```

- `-t` 指定密钥类型 (rsa, ed25519 等)
- `-b` 指定密钥长度
- `-C` 添加注释

### 2. 将公钥复制到远程服务器

```bash
ssh-copy-id username@hostname

```

或手动复制 `~/.ssh/id_rsa.pub` 内容到远程服务器的 `~/.ssh/authorized_keys` 文件中

## 配置文件

编辑 `~/.ssh/config` 可以简化连接：

```
Host myserver
    HostName example.com
    User username
    Port 2222
    IdentityFile ~/.ssh/id_rsa

```

配置后只需使用：

```bash
ssh myserver

```

## 常用选项

<table id="bkmrk-%E9%80%89%E9%A1%B9-%E8%AF%B4%E6%98%8E--v-%E8%AF%A6%E7%BB%86%E6%A8%A1%E5%BC%8F-%28%E5%8F%AF%E5%8F%A0%E5%8A%A0--"><thead><tr><th>选项</th><th>说明</th></tr></thead><tbody><tr><td>`-v`</td><td>详细模式 (可叠加 -vv, -vvv)</td></tr><tr><td>`-X`</td><td>启用 X11 转发</td></tr><tr><td>`-L`</td><td>本地端口转发</td></tr><tr><td>`-R`</td><td>远程端口转发</td></tr><tr><td>`-D`</td><td>动态端口转发 (SOCKS 代理)</td></tr><tr><td>`-N`</td><td>不执行远程命令</td></tr><tr><td>`-f`</td><td>后台运行</td></tr></tbody></table>

## 端口转发示例

### 1. 本地端口转发

```bash
ssh -L local_port:remote_host:remote_port username@hostname

```

### 2. 远程端口转发

```bash
ssh -R remote_port:local_host:local_port username@hostname

```

## 文件传输

### 1. 使用 scp 复制文件

从本地到远程：

```bash
scp local_file username@hostname:remote_path

```

从远程到本地：

```bash
scp username@hostname:remote_file local_path

```

### 2. 使用 sftp 交互式传输

```bash
sftp username@hostname

```

## 安全建议

1. 禁用 root 登录 (`PermitRootLogin no` in `/etc/ssh/sshd_config`)
2. 使用密钥认证而非密码
3. 更改默认 SSH 端口
4. 限制可登录用户 (`AllowUsers` in sshd\_config)
5. 使用 fail2ban 防止暴力破解

## 故障排查

1. 检查服务状态：

```bash
systemctl status sshd

```

2. 检查日志：

```bash
journalctl -u sshd

```

3. 测试连接：

```bash
ssh -v username@hostname

```

# cURL 常用操作指南

cURL (`Client URL`) 是一个强大的命令行工具，用于传输数据，支持多种协议（HTTP/HTTPS/FTP/SFTP等）。它广泛用于 API 测试、文件传输和网络调试。

---

## **1. 基本请求**

### **GET 请求**

```bash
curl https://example.com

```

- **获取网页内容**
- **带参数**： ```bash
    curl "https://example.com/api?param1=value1&param2=value2"
    
    ```

### **POST 请求**

```bash
curl -X POST https://example.com/api \
     -d "key1=value1&key2=value2"

```

- **发送 JSON 数据**： ```bash
    curl -X POST https://example.com/api \
         -H "Content-Type: application/json" \
         -d '{"key1":"value1", "key2":"value2"}'
    
    ```

---

## **2. 请求头设置**

### **添加自定义 Header**

```bash
curl -H "Authorization: Bearer token123" \
     -H "User-Agent: MyApp/1.0" \
     https://example.com/api

```

- **查看服务器返回的 Headers**： ```bash
    curl -I https://example.com  # 只显示 Headers
    
    ```

---

## **3. 文件上传 &amp; 下载**

### **上传文件**

```bash
curl -X POST https://example.com/upload \
     -F "file=@/path/to/file.txt" \
     -F "name=myfile"

```

- `-F` 用于 `multipart/form-data` 上传

### **下载文件**

```bash
curl -O https://example.com/file.zip  # 保存为原文件名
curl -o custom_name.zip https://example.com/file.zip  # 自定义文件名

```

---

## **4. 认证 &amp; Cookies**

### **Basic Auth**

```bash
curl -u username:password https://example.com

```

- **或只输入用户名，交互式输入密码**： ```bash
    curl -u username https://example.com
    
    ```

### **Cookie 管理**

```bash
curl --cookie "name=value" https://example.com

```

- **保存 Cookie 到文件**： ```bash
    curl -c cookies.txt https://example.com/login
    
    ```
- **使用 Cookie 文件**： ```bash
    curl -b cookies.txt https://example.com/dashboard
    
    ```

---

## **5. 调试 &amp; 高级选项**

### **显示详细请求信息**

```bash
curl -v https://example.com  # 显示请求 & 响应 Headers
curl --trace-ascii debug.txt https://example.com  # 输出调试信息到文件

```

### **跟随重定向**

```bash
curl -L https://example.com  # 自动跳转

```

### **限速下载**

```bash
curl --limit-rate 100K -O https://example.com/largefile.zip

```

- `100K` = 100KB/s，可设置 `M` (MB/s) 或 `G` (GB/s)

---

## **6. 代理设置**

### **HTTP/HTTPS 代理**

```bash
curl -x http://proxy-server:8080 https://example.com

```

- **带认证的代理**： ```bash
    curl -x http://user:pass@proxy-server:8080 https://example.com
    
    ```

### **SOCKS5 代理**

```bash
curl --socks5 127.0.0.1:1080 https://example.com

```

---

## **7. 保存响应到变量（Bash）**

```bash
response=$(curl -s https://example.com/api)
echo "$response"

```

- `-s` 静默模式（不显示进度）

---

## **8. 常用组合命令**

### **检查 API 返回状态码**

```bash
curl -s -o /dev/null -w "%{http_code}" https://example.com/api

```

- `-o /dev/null` 丢弃响应体
- `-w "%{http_code}"` 只显示 HTTP 状态码

### **测试 API 响应时间**

```bash
curl -w "DNS: %{time_namelookup} | Connect: %{time_connect} | Total: %{time_total}\n" \
     -o /dev/null -s https://example.com

```

---

## **总结**

<table id="bkmrk-%E7%94%A8%E9%80%94-%E5%91%BD%E4%BB%A4%E7%A4%BA%E4%BE%8B-get-%E8%AF%B7%E6%B1%82-curl-"><thead><tr><th>用途</th><th>命令示例</th></tr></thead><tbody><tr><td>**GET 请求**</td><td>`curl https://example.com`</td></tr><tr><td>**POST 请求**</td><td>`curl -X POST -d "data" https://example.com/api`</td></tr><tr><td>**JSON 请求**</td><td>`curl -H "Content-Type: application/json" -d '{"key":"value"}'`</td></tr><tr><td>**下载文件**</td><td>`curl -O https://example.com/file.zip`</td></tr><tr><td>**上传文件**</td><td>`curl -F "file=@localfile.txt" https://example.com/upload`</td></tr><tr><td>**认证**</td><td>`curl -u user:pass https://example.com`</td></tr><tr><td>**代理**</td><td>`curl -x http://proxy:8080 https://example.com`</td></tr><tr><td>**调试**</td><td>`curl -v https://example.com`</td></tr></tbody></table>

cURL 功能非常强大，适用于自动化脚本、API 测试和网络调试。更多选项可查看 `man curl` 或 `curl --help`。