一、系统与文件基础指令
| 指令 | 说明 | 常用示例 |
|---|---|---|
ls | 列出目录内容 | ls -la (显示隐藏文件和详情) |
cd | 切换目录 | cd ~ (回到家目录) |
pwd | 显示当前路径 | pwd |
cp | 复制文件/目录 | cp -r dir1 dir2 (递归复制目录) |
mv | 移动或重命名 | mv old.txt new.txt |
rm | 删除文件/目录 | rm -rf dir/ (慎用,强制递归删除) |
mkdir | 创建目录 | mkdir -p path/to/dir (递归创建) |
touch | 创建空文件或更新时间戳 | touch file.txt |
cat | 查看文件内容 | cat file.txt |
less / more | 分页查看 | less large.log |
head / tail | 查看开头/结尾 | tail -f app.log (实时追踪日志) |
grep | 文本搜索 | grep -r "error" /var/log/ |
find | 查找文件 | find / -name "*.conf" |
chmod | 修改权限 | chmod 755 script.sh |
chown | 修改所有者 | chown user:group file |
df | 磁盘空间 | df -h (人类可读格式) |
du | 目录大小 | du -sh /var/log |
ps | 查看进程 | ps aux |
top / htop | 动态进程监控 | htop (需安装) |
kill / killall | 终止进程 | kill -9 PID |
tar | 打包压缩 | tar -czvf backup.tar.gz dir/ |
wget / curl | 下载文件 | curl -O http://example.com/file |
systemctl | 服务管理 | systemctl restart nginx |
journalctl | 查看系统日志 | journalctl -u nginx -f |
二、Screen — 终端会话管理
Screen 可以让你在 SSH 断开后保持程序继续运行,或在单个终端中管理多个会话窗口。
基础操作
| 指令 | 说明 |
|---|---|
screen -S name | 创建名为 name 的新会话 |
screen -ls | 列出所有会话 |
screen -r name | 恢复(detached)的会话 |
screen -d name | 远程分离(detach)某个会话 |
screen -d -r name | 强制分离并恢复会话 |
screen -X -S name quit | 强制关闭某个会话 |
会话内快捷键(先按 Ctrl+A,再按以下键)
| 快捷键 | 说明 |
|---|---|
Ctrl+A 然后 D | 分离当前会话(后台运行,不中断程序) |
Ctrl+A 然后 C | 在当前会话中创建新窗口 |
Ctrl+A 然后 N | 切换到下一个窗口 |
Ctrl+A 然后 P | 切换到上一个窗口 |
Ctrl+A 然后 K | 关闭当前窗口(需确认) |
Ctrl+A 然后 ? | 显示所有快捷键帮助 |
Ctrl+A 然后 [ | 进入复制/滚动模式(按 Esc 退出) |
实用示例
# 1. 创建一个后台运行任务
screen -S myjob
python train.py # 在 screen 中运行长时间任务
Ctrl+A, D # 分离会话,任务在后台继续运行
# 2. 稍后恢复查看进度
screen -r myjob
# 3. 开机自动启动 screen 会话(可写入 crontab @reboot)
@reboot screen -dmS server bash -c 'cd /app && ./start.sh'
三、Rsync — 高效文件同步
Rsync 是 Linux 下最强大的文件同步工具,支持增量传输、压缩、排除规则等。
基础语法
rsync [选项] 源 目标
常用选项
| 选项 | 说明 |
|---|---|
-a | 归档模式(保留权限、时间戳、符号链接等,相当于 -rlptgoD) |
-v | 详细输出 |
-z | 传输时压缩 |
-P | 显示进度,且支持断点续传(等于 --partial --progress) |
--delete | 删除目标端有但源端没有的文件(保持严格一致) |
--exclude | 排除特定文件/目录 |
-e | 指定远程 shell(如 ssh) |
-n / --dry-run | 模拟运行,不实际执行,先查看会做什么 |
--progress | 显示传输进度 |
本地同步示例
# 基本同步(源目录内容复制到目标)
rsync -av /source/dir/ /backup/dir/
# 注意:末尾的斜杠很重要!
# /source/dir/ → 同步目录下的内容到目标
# /source/dir → 同步整个目录到目标下(会创建 dir 子目录)
# 增量备份,删除目标端多余文件(镜像同步)
rsync -av --delete /source/dir/ /backup/dir/
# 排除特定文件
rsync -av --exclude='*.log' --exclude='temp/' /source/ /backup/
# 从文件读取排除规则
rsync -av --exclude-from='exclude.txt' /source/ /backup/
远程同步示例
# 推:本地 → 远程
rsync -avz -e ssh /local/path/ user@remote_host:/remote/path/
# 拉:远程 → 本地
rsync -avz -e ssh user@remote_host:/remote/path/ /local/path/
# 使用非默认 SSH 端口
rsync -avz -e "ssh -p 2222" /local/ user@host:/remote/
# 显示进度 + 断点续传(大文件传输推荐)
rsync -avzP /large-file.iso user@host:/remote/
重要提示
- 先用
--dry-run测试:rsync -avn --delete /src/ /dest/ --delete很危险,确保方向正确,否则会误删数据- 适合定期备份,可配合
cron使用
四、SSH 密钥设置
SSH 密钥登录比密码更安全、更方便,免去每次输入密码的麻烦。
1. 生成密钥对
# 生成 ED25519 密钥(推荐,更安全、更短)
ssh-keygen -t ed25519 -C "your_email@example.com"
# 或生成 RSA 密钥(兼容旧系统)
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
执行后会提示:
- 保存路径:默认
~/.ssh/id_ed25519(直接回车) - 密码短语(passphrase):建议设置(也可留空实现无密码登录)
2. 将公钥复制到远程服务器
# 方法一:使用 ssh-copy-id(推荐,自动配置)
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@remote_host
# 方法二:手动复制(如果 ssh-copy-id 不可用)
cat ~/.ssh/id_ed25519.pub | ssh user@remote_host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
3. 配置 SSH 客户端(可选但推荐)
编辑 ~/.ssh/config:
Host myserver
HostName 192.168.1.100
User admin
Port 2222
IdentityFile ~/.ssh/id_ed25519
ServerAliveInterval 60
ServerAliveCountMax 3
之后可直接:ssh myserver
4. 服务器端安全加固(/etc/ssh/sshd_config)
# 编辑配置文件
sudo nano /etc/ssh/sshd_config
# 修改以下配置
PermitRootLogin no # 禁止 root 登录
PasswordAuthentication no # 禁用密码登录(仅密钥)
PubkeyAuthentication yes # 启用密钥认证
# 重启 SSH 服务
sudo systemctl restart sshd # Debian/Ubuntu
sudo systemctl restart sshd # CentOS/RHEL (或 ssh)
⚠️ 警告:禁用密码登录前,务必确认密钥能正常登录,否则会被锁在服务器外!
五、SSH 传输文件
| 方式 | 适用场景 | 指令 |
|---|---|---|
scp | 简单单文件/目录传输 | scp file.txt user@host:/path/ |
rsync | 大文件、增量同步、断点续传 | rsync -avzP file user@host:/path/ |
sftp | 交互式文件管理 | sftp user@host |
SCP 详细用法
# 本地 → 远程
scp file.txt user@remote:/home/user/
scp -r /local/dir/ user@remote:/remote/dir/ # 递归复制目录
scp -P 2222 file.txt user@remote:/path/ # 指定端口(注意是大写 P)
# 远程 → 本地
scp user@remote:/remote/file.txt /local/path/
scp -r user@remote:/remote/dir/ /local/path/
# 远程 → 远程(通过本地中转)
scp user1@host1:/file.txt user2@host2:/path/
SFTP 交互式用法
sftp user@remote_host
# 进入后常用命令:
sftp> ls # 列出远程目录
sftp> lls # 列出本地目录
sftp> cd /remote/path # 切换远程目录
sftp> lcd /local/path # 切换本地目录
sftp> get remote.txt # 下载文件
sftp> get -r remote_dir/ # 下载目录
sftp> put local.txt # 上传文件
sftp> put -r local_dir/ # 上传目录
sftp> bye / exit / quit # 退出
六、快速对照表
| 需求 | 推荐工具 | 原因 |
|---|---|---|
| 后台运行程序防断连 | screen / tmux | 会话持久化 |
| 大文件/目录同步 | rsync | 增量、压缩、断点续传 |
| 简单单文件复制 | scp | 语法简单直接 |
| 交互式文件管理 | sftp | 类似 FTP 的操作体验 |
| 免密码登录服务器 | SSH 密钥 | 安全且自动化友好 |