欢迎光临
我们一直在努力

Linux系统文件传输,软件包管理

scp

scp 是 Linux 中用于在本地和远程主机之间安全复制文件的命令,其名称来源于 Secure Copy(安全复制)。它基于 SSH 协议,所有传输的数据都经过加密。


1. 基本语法

scp [选项] 源文件 目标路径

源或目标中如果包含 :,就表示远程主机。

# 本地 → 远程
scp 本地文件 用户名@远程IP:远程路径

# 远程 → 本地
scp 用户名@远程IP:远程文件 本地路径


2. 常用操作

① 本地文件复制到远程

scp file.txt zzw@10.1.8.10:/home/zzw/

② 远程文件复制到本地

scp zzw@10.1.8.10:/home/zzw/file.txt ./

③ 复制整个目录(必须加 -r)

scp -r my_folder/ zzw@10.1.8.10:/home/zzw/

④ 远程 → 远程(通过本地中转)

scp zzw@10.1.8.10:/home/zzw/file.txt zzw@10.1.8.20:/home/zzw/

⑤ 指定 SSH 端口(默认 22)

scp -P 2222 file.txt zzw@10.1.8.10:/home/zzw/

注意:scp 的端口选项是大写 -P,而 ssh 是小写 -p。


3. 常用选项

选项说明示例
-r 递归复制整个目录 scp -r folder/ user@host:/tmp/
-P 端口 指定 SSH 端口 scp -P 2222 file.txt user@host:/tmp/
-p 保留文件权限、时间戳 scp -p file.txt user@host:/tmp/
-C 传输时压缩 scp -C file.txt user@host:/tmp/
-i 私钥 指定私钥文件 scp -i ~/.ssh/id_rsa file.txt user@host:/tmp/
-l 带宽 限制带宽(Kbit/s) scp -l 800 file.txt user@host:/tmp/
-v 显示调试信息 scp -v file.txt user@host:/tmp/

4. 实战示例

① 上传网站文件到服务器

scp -r /var/www/html/ zzw@10.1.8.10:/var/www/

② 从服务器下载日志

scp zzw@10.1.8.10:/var/log/nginx/access.log ./

③ 使用密钥免密传输

scp -i ~/.ssh/id_rsa backup.tar.gz zzw@10.1.8.10:/backup/

④ 限制带宽,避免占满网络

scp -l 800 bigfile.iso zzw@10.1.8.10:/backup/

⑤ 配合 ~/.ssh/config 使用别名

如果你在 ~/.ssh/config 中配置了别名:

Host server
HostName 10.1.8.10
User zzw
Port 22

就可以直接用别名:

scp file.txt server:/home/zzw/


5. scp vs rsync

对比项scprsync
传输方式 全量传输 增量传输(只传变化部分)
速度 较慢(每次全传) 较快(断点续传、增量)
功能 简单复制 支持排除、删除、镜像、压缩
适用场景 少量文件、简单传输 大量文件、定期备份
命令示例 scp file.txt user@host:/tmp/ rsync -avz file.txt user@host:/tmp/

结论:临时传几个文件用 scp,定期备份或大量文件用 rsync。


6. scp vs sftp

对比项scpsftp
交互方式 非交互,一条命令完成 交互式,类似 FTP
适用场景 脚本、自动化 手动浏览、上传下载
命令示例 scp file.txt user@host:/tmp/ sftp user@host 后 put file.txt

7. 常见问题

问题原因解决
Permission denied 目标目录无写权限 检查目标目录权限,或用 sudo
No such file or directory 路径写错 确认远程路径存在
Connection refused SSH 服务未启动或端口不对 检查 sshd 状态和端口
Host key verification failed 主机密钥变更 删除 known_hosts 中对应行
传输速度慢 网络带宽限制 加 -C 压缩,或用 rsync

8. 一句话总结

scp = SSH + 文件复制:

  • 上传:scp 本地文件 user@host:远程路径
  • 下载:scp user@host:远程文件 本地路径
  • 目录:加 -r
  • 端口:加 -P(大写)
  • 密钥:加 -i

临时传文件用 scp,定期备份用 rsync。

rsync

1. 基本语法

rsync [选项] 源路径 目标路径

源或目标中如果包含 :,就表示远程主机。

# 本地同步
rsync 源目录/ 目标目录/

# 本地 → 远程
rsync 本地目录/ 用户名@远程IP:远程目录/

# 远程 → 本地
rsync 用户名@远程IP:远程目录/ 本地目录/


2. 核心选项(必记)

选项说明
-a 归档模式,保留权限、时间、所有者、符号链接等(最常用)
-v 显示详细过程
-z 传输时压缩,节省带宽
-h 人类可读格式(文件大小显示为 K/M/G)
-P 显示进度 + 支持断点续传(等于 –partial –progress)
–delete 删除目标中源没有的文件,保持完全一致
–exclude 排除指定文件或目录
-e ssh 通过 SSH 传输
-n 模拟运行(dry-run),不实际传输,用于测试

黄金组合:rsync -avhP,日常使用几乎离不开它。


3. 关键:源路径末尾的 /

这是 rsync 最容易踩的坑,必须理解:

源路径含义结果
/home/zzw/ 同步 zzw 目录里面的内容 目标下直接是文件
/home/zzw 同步 zzw 目录本身 目标下会创建 zzw 目录

示例:

# 目标下直接是文件
rsync -avh /home/zzw/ /backup/
# 结果:/backup/file1, /backup/file2

# 目标下会创建 zzw 目录
rsync -avh /home/zzw /backup/
# 结果:/backup/zzw/file1, /backup/zzw/file2


4. 常用操作

① 本地同步(保留属性)

rsync -avh /home/zzw/ /backup/zzw/

② 本地镜像(目标与源完全一致)

rsync -avh –delete /home/zzw/ /backup/zzw/

③ 远程同步(通过 SSH)

rsync -avhz -e ssh /home/zzw/ zzw@10.1.8.10:/backup/zzw/

④ 从远程拉取

rsync -avhz -e ssh zzw@10.1.8.10:/backup/zzw/ /home/zzw/

⑤ 排除文件

rsync -avh –exclude="*.log" –exclude="cache" /home/zzw/ /backup/zzw/

⑥ 显示进度,支持断点续传

rsync -avhP /home/zzw/ /backup/zzw/

⑦ 先模拟,确认无误再执行

rsync -avhn –delete /home/zzw/ /backup/zzw/


5. rsync 为什么快?

增量传输是核心。它对比源和目标,只传输:

  • 新增的文件
  • 修改过的文件
  • 文件中有变化的部分(使用 –delta 算法)

对比 cp:

操作cprsync
第一次同步 全量复制 全量复制
第二次同步(少量变化) 全量复制 只传变化部分
断点续传 ❌ 不支持 ✅ 支持
远程传输 ❌ 不支持 ✅ 支持

6. rsync vs scp

对比项scprsync
传输方式 全量 增量
速度 每次全传,慢 只传差异,快
断点续传 ❌ 不支持 ✅ 支持
排除文件 ❌ 不支持 ✅ 支持
删除同步 ❌ 不支持 ✅ 支持(–delete)
适用场景 少量文件、临时传输 大量文件、定期备份

7. 实战场景

① 网站目录备份到远程

rsync -avhz –delete -e ssh /var/www/html/ zzw@backup-server:/backup/www/

② 本地定期备份(配合 cron)

# 每天凌晨 2 点同步
0 2 * * * rsync -avh –delete /home/zzw/ /backup/zzw/

③ 排除日志和缓存

rsync -avh –exclude="*.log" –exclude=".cache" /home/zzw/ /backup/zzw/

④ 使用 ~/.ssh/config 别名

# ~/.ssh/config 中定义 server 别名后
rsync -avhz /home/zzw/ server:/backup/zzw/

⑤ 限速传输(避免占满带宽)

rsync -avh –bwlimit=1000 /home/zzw/ /backup/zzw/
# 限制为 1000 KB/s


8. 常见问题

问题原因解决
目标多了源没有的文件 没用 –delete 加 –delete
权限报错 目标目录无写权限 检查权限,或用 sudo
传输速度慢 没加 -z 或网络差 加 -z,或用 –bwlimit 限速
符号链接没保留 没用 -a 加 -a(-a 包含 -l)
误删文件 –delete 太危险 先用 -n 模拟,确认后再执行

9. 一句话总结

rsync = 增量同步 + 远程传输 + 备份神器:

  • 日常用:rsync -avhP 源/ 目标/
  • 镜像同步:加 –delete
  • 远程传输:加 -e ssh
  • 排除文件:加 –exclude
  • 先模拟:加 -n

记住源路径末尾的 / 决定“同步内容”还是“同步目录本身”。 定期备份首选 rsync,临时传文件用 scp

Linux 软件包管理

Linux 软件包管理是运维的核心技能之一,不同发行版使用不同的包管理工具。掌握它们,你就能在任意 Linux 系统上安装、更新、卸载软件。


一、两大主流包管理体系

体系代表发行版包格式管理工具
RPM 体系 CentOS、RHEL、Fedora、Rocky .rpm yum、dnf、rpm
DEB 体系 Ubuntu、Debian .deb apt、dpkg

核心区别:

  • RPM:Red Hat 系,包管理严格,依赖自动解决(yum/dnf)。
  • DEB:Debian 系,包管理灵活,依赖自动解决(apt)。

二、RPM 体系(CentOS/RHEL)

1. rpm — 底层包管理工具

rpm 直接操作 .rpm 包,不自动解决依赖。

# 安装
sudo rpm -ivh package.rpm

# 升级
sudo rpm -Uvh package.rpm

# 卸载
sudo rpm -e package_name

# 查询已安装的包
rpm -qa | grep nginx

# 查询包信息
rpm -qi nginx

# 查询包安装了哪些文件
rpm -ql nginx

# 查询某个文件属于哪个包
rpm -qf /usr/sbin/nginx

缺点:依赖需要手动解决,容易报错 Failed dependencies。


2. yum — 高层包管理工具(CentOS 7)

yum 自动从仓库下载并解决依赖。

# 安装
sudo yum install nginx

# 卸载
sudo yum remove nginx

# 更新
sudo yum update nginx
sudo yum update # 更新所有

# 搜索
yum search nginx

# 查看包信息
yum info nginx

# 列出已安装
yum list installed | grep nginx

# 清理缓存
sudo yum clean all

# 查看仓库
yum repolist


3. dnf — 新一代包管理工具(CentOS 8+ / Rocky)

dnf 是 yum 的升级版,命令基本兼容,但更快、更智能。

sudo dnf install nginx
sudo dnf remove nginx
sudo dnf update
dnf search nginx
dnf info nginx
dnf repolist

注意:CentOS 8+ 中 yum 是 dnf 的软链接,用哪个都一样。


4. yum/dnf 常用选项

选项说明
-y 自动确认,不询问
–nogpgcheck 跳过 GPG 校验(不推荐)
–enablerepo=仓库名 临时启用某个仓库
–disablerepo=仓库名 临时禁用某个仓库
–downloadonly 只下载不安装

示例:

sudo yum install -y nginx
sudo yum install –downloadonly –downloaddir=/tmp nginx


5. 仓库配置

位置: /etc/yum.repos.d/

示例:

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key

添加仓库:

# 方式一:手动创建 .repo 文件
sudo vim /etc/yum.repos.d/nginx.repo

# 方式二:用 yum-config-manager
sudo yum-config-manager –add-repo http://nginx.org/packages/centos/7/x86_64/


三、DEB 体系(Ubuntu/Debian)

1. dpkg — 底层包管理工具

# 安装
sudo dpkg -i package.deb

# 卸载
sudo dpkg -r package_name

# 查询已安装
dpkg -l | grep nginx

# 查询包安装了哪些文件
dpkg -L nginx

# 查询某个文件属于哪个包
dpkg -S /usr/sbin/nginx

缺点:同样不自动解决依赖。


2. apt — 高层包管理工具

# 更新软件源索引(必须先执行)
sudo apt update

# 安装
sudo apt install nginx

# 卸载(保留配置)
sudo apt remove nginx

# 卸载(删除配置)
sudo apt purge nginx

# 升级已安装的包
sudo apt upgrade

# 搜索
apt search nginx

# 查看包信息
apt show nginx

# 列出已安装
apt list –installed | grep nginx

# 清理无用包
sudo apt autoremove
sudo apt autoclean


3. 软件源配置

位置: /etc/apt/sources.list 和 /etc/apt/sources.list.d/

示例:

deb http://archive.ubuntu.com/ubuntu/ focal main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ focal-security main restricted universe multiverse

换国内源(阿里云):

sudo sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list
sudo apt update


四、两种体系对比

操作RPM 体系DEB 体系
更新索引 yum makecache apt update
安装 yum install 包名 apt install 包名
卸载 yum remove 包名 apt remove 包名
升级 yum update 包名 apt upgrade 包名
搜索 yum search 关键词 apt search 关键词
查看信息 yum info 包名 apt show 包名
列出已安装 yum list installed apt list –installed
清理缓存 yum clean all apt clean
仓库目录 /etc/yum.repos.d/ /etc/apt/sources.list.d/
本地包安装 rpm -ivh dpkg -i

五、源码编译安装

有些软件没有现成的包,需要从源码编译安装。

标准流程

# 1. 下载源码
wget https://example.com/software.tar.gz

# 2. 解压
tar -xzvf software.tar.gz
cd software/

# 3. 配置
./configure –prefix=/usr/local/software

# 4. 编译
make

# 5. 安装
sudo make install

依赖准备

# CentOS
sudo yum groupinstall "Development Tools"
sudo yum install gcc make autoconf

# Ubuntu
sudo apt install build-essential


六、二进制安装

有些软件提供预编译的二进制包,直接解压即可使用。

# 下载
wget https://example.com/software-linux-amd64.tar.gz

# 解压
tar -xzvf software-linux-amd64.tar.gz -C /usr/local/

# 创建软链接
sudo ln -sf /usr/local/software/bin/software /usr/local/bin/software

# 验证
software –version

示例:

  • Docker:二进制安装
  • Kubernetes:二进制安装
  • etcd:二进制安装

七、三种安装方式对比

方式优点缺点适用场景
包管理器 自动解决依赖,方便升级 版本可能较旧 日常软件安装
源码编译 可定制,版本最新 耗时,依赖需手动解决 需要特定版本或定制功能
二进制安装 快速,无需编译 不自动解决依赖 官方提供二进制的软件

八、实战场景

场景一:安装 Nginx

# CentOS
sudo yum install -y nginx
sudo systemctl start nginx
sudo systemctl enable nginx

# Ubuntu
sudo apt update
sudo apt install -y nginx
sudo systemctl start nginx

场景二:安装指定版本的软件

# CentOS:查看可用版本
yum list nginx –showduplicates

# 安装指定版本
sudo yum install nginx-1.20.1

# Ubuntu
sudo apt install nginx=1.18.0-0ubuntu1

场景三:本地 RPM 包安装

# 下载 rpm 包
wget https://example.com/package.rpm

# 安装(自动解决依赖)
sudo yum localinstall package.rpm

# 或
sudo rpm -ivh package.rpm

场景四:查找命令属于哪个包

# CentOS
yum provides /usr/sbin/nginx

# Ubuntu
apt-file search /usr/sbin/nginx


九、常见问题

问题原因解决
Failed dependencies 依赖未满足 用 yum/apt 自动解决,或手动安装依赖
Could not resolve host DNS 问题 检查 /etc/resolv.conf
GPG key retrieval failed GPG 密钥问题 导入密钥:rpm –import 密钥URL
No package available 仓库中没有该包 添加第三方仓库,或源码编译
Disk space full 磁盘满 df -h 检查,清理缓存
Transaction check error 包冲突 先卸载冲突的包,再安装

十、一句话总结

Linux 软件包管理 = 包管理器 + 仓库 + 依赖解决:

体系安装卸载搜索更新
RPM yum install yum remove yum search yum update
DEB apt install apt remove apt search apt upgrade

日常用包管理器,特殊需求用源码编译,官方二进制直接解压。

赞(0)
未经允许不得转载:171主机测评 » Linux系统文件传输,软件包管理
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址