文件与目录 / 命令文档
SCP 命令
概述
Linux系统安全文件传输的艺术
SCP 命令定义与含义
SCP (Secure Copy Protocol) 是基于 SSH 协议的安全文件传输命令,用于在本地主机和远程主机之间,或者两个远程主机之间安全地复制文件和目录。
核心特点:
安全加密 基于SSH协议,所有数据传输都经过加密
高效传输 支持压缩传输,减少网络带宽占用
精确控制 保持文件权限、时间戳等属性
基本语法结构
scp [选项] [源文件路径] [目标路径] # 基本格式 scp [options] source destination # 远程到本地 scp user@remote_host:/path/to/file /local/path/ # 本地到远程 scp /local/file user@remote_host:/remote/path/ # 远程到远程 scp user1@host1:/path/file user2@host2:/path/
常用选项参数:
-r 递归复制目录 -p 保持文件属性 -v 显示详细过程
-P port 指定端口 -C 启用压缩 -q 静默模式
1⃣ 本地到远程传输
# 传输单个文件 scp /Users/youngsu/Test/test.txt root@81.70.158.162:/root/ # 传输整个目录 scp -r /home/user/projects/ root@server.com:/var/www/ # 保持文件权限和时间戳 scp -p /home/user/script.sh admin@10.0.0.5:/usr/local/bin/
2⃣ 远程到本地传输
# 下载单个文件 scp root@81.70.158.162:/root/newfile.txt /Users/youngsu/Test/ # 下载目录(递归) scp -r user@192.168.1.50:/etc/nginx/ ./nginx-backup/ # 使用通配符下载多个文件 scp user@server:/var/backup/*.sql ./database-backups/
3⃣ 高级选项使用
# 指定端口传输 scp -P 2222 file.txt user@host:/path/ # 启用压缩(适合大文件) scp -C large_file.zip user@server:/tmp/ # 静默模式 + 保持属性 scp -pq /etc/hosts root@backup-server:/etc/hosts.backup # 限制带宽(1000 KB/s) scp -l 1000 big_file.tar.gz user@server:/uploads/
常见运维使用场景
服务器间数据同步
在生产环境中同步配置文件、应用代码或数据文件
# 同步应用配置 scp -r /etc/nginx/ backup-server:/backup/nginx-$(date +%Y%m%d)/ # 同步数据库备份 scp /var/backup/mysql/*.sql db-backup-server:/mysql-backups/
应用部署
将本地开发的应用部署到生产服务器
# 部署应用包
scp -C app-v2.1.tar.gz deploy@prod-server:/opt/applications/
# 批量部署到多台服务器
for server in web1 web2 web3; do
scp -r ./dist/ deploy@$server:/var/www/app/
done日志收集与备份
从多台服务器收集日志文件进行分析
# 收集应用日志
scp web-server:/var/log/app/*.log ./logs/$(date +%Y%m%d)/
# 定时备份重要配置
scp -p prod-server:/etc/{hosts,fstab,crontab} ./config-backup/快速运维脚本分发
将运维脚本快速分发到目标服务器执行
# 分发监控脚本 scp monitor.sh ops@target-server:/tmp/ && ssh ops@target-server "chmod +x /tmp/monitor.sh && /tmp/monitor.sh" # 分发批量操作脚本 scp batch-update.sh root@server:/root/ && ssh root@server "bash /root/batch-update.sh"
实用技巧与最佳实践 免密码登录配置 使用SSH密钥认证,避免每次输入密码,提高自动化脚本效率 # 生成SSH密钥对 ssh-keygen -t rsa -b 4096 # 复制公钥到目标服务器 ssh-copy-id user@remote-server 大文件传输优化 对于大文件传输,使用压缩和恢复传输功能 # 启用压缩传输大文件 scp -C large-database.sql user@server:/backups/ # 使用rsync替代scp处理断点续传 rsync -avz --progress file.iso user@server:/downloads/ 批量操作技巧 结合shell脚本实现批量文件传输 # 批量传输到多台服务器 servers="web1 web2 web3" for server in $servers; do echo "Uploading to $server..." scp -r ./app/ deploy@$server:/opt/ done 安全注意事项 定期更新SSH密钥 使用非标准端口提高安全性 限制用户权限,遵循最小权限原则 监控文件传输日志