在 Linux 中,有多种方式可以用来传输文件。这里列出几种常见的方法:
SSH 文件传输(Secure Copy, scp)
scp
命令是一个基于 SSH 协议的文件拷贝工具。它可以用于主机之间的文件复制。
使用示例:
将本地文件发送到远程服务器:
scp /local/path/to/file user@remotehost:/remote/path/to/directory/
从远程服务器获取文件:
scp user@remotehost:/remote/path/to/file /local/path/to/directory/
SFTP(SSH File Transfer Protocol)
SFTP 是一个通过 SSH 进行文件传输的协议。你可以使用 sftp
命令或者图形界面工具如 FileZilla 来进行文件传输。
使用示例:
使用命令行:
sftp user@remotehost
登录后,你可以使用
put
和get
命令来上传或下载文件。
FTP(File Transfer Protocol)
FTP 是一个较旧的文件传输协议,不过仍然被广泛支持。它不如 SFTP 安全,但在某些情况下可能有用。
rsync
rsync
是一个用于同步文件和目录的工具,常用于备份或在多个系统之间复制大量数据。
使用示例:
同步本地目录到远程服务器:
rsync -avz --progress /local/path/ user@remotehost:/remote/path/
其他方法
- NFS (Network File System): 用于共享目录,适用于局域网内。
- Samba/CIFS: 提供类似 Windows 文件共享的功能。
- WebDAV: 通过 HTTP 或 HTTPS 访问文件系统。
- 云存储服务: 如 Dropbox、Google Drive 等,虽然不是直接的 Linux 工具,但可以通过客户端或 API 与 Linux 系统集成来传输文件。
详细 rsync
rsync
是一个非常强大的命令行工具,用于文件的备份和同步。它最初设计是为了远程文件复制,但现在也被广泛用于在本地系统上进行文件同步。rsync
的强大之处在于其效率:它只传输两份文件之间的差异部分,而不是整个文件。
rsync 基本语法:
rsync [选项] 源 目标
常用选项:
-v
(verbose):详细模式输出,显示同步过程中的详细信息。-a
(archive):归档模式,等同于 -rlptgoD ,即递归复制所有文件,并保持文件属性不变。-r
(recursive):递归处理,将目录内的文件与子目录一并处理。-R
:保留原始文件名的路径,主要用于处理符号链接。-z
:启用压缩,可以对传输的数据进行压缩,适用于带宽较小的情况。-u
(update):仅当源文件比目标文件新或目标文件不存在时才复制文件。-t
:保留符号链接,将源文件中的符号链接在目标文件中也创建为符号链接。-p
:保留源文件的权限模式。-g
:保留组ID。-o
:保留文件所有者。-l
:对符号链接进行特殊处理,直接复制链接而不是链接指向的文件。-D
:等同于 --devices --specials,用于保留块设备和字符设备等特殊文件。-H
:保留硬链接,对于源文件中的硬链接,同样在目标文件中创建硬链接。-E
或--preserve-extended-attributes
:保留扩展属性。-A
或--acls
:保留访问控制列表(ACL)。-X
或--xattrs
:保留扩展属性。-P
:等同于-p -r
。-S
:按大小排序,而非按字母顺序。-i
:在发生更改时列出文件,在未指定 -v 时使用此选项会抑制其他输出。-c
:检查文件是否不同,根据校验和而不是文件时间戳。-n
(dry-run):执行一个预演,显示将会做什么,但不做实际操作。-W
:模拟FTP的镜像模式。-e
:指定远程shell程序,如 ssh。-L
:复制符号链接指向的目标文件。--delete
:删除目标目录中多余的文件以实现与源目录一致。--delete-excluded
:即使被排除规则匹配,也要删除目标端多余的文件。--delete-after
:在传输结束后删除多余的文件。--progress
:显示进度条。--bwlimit
:限制传输带宽。--timeout
:设置超时秒数。--compress-level=NUM
:指定压缩级别。
示例用法:
本地文件复制:
rsync -avzh /path/to/source /path/to/destination
远程文件复制:
rsync -avzhe ssh user@remote:/path/to/source /local/path/
排除某些文件或目录:
rsync -avz --exclude 'file.txt' --exclude '/folder/' /path/to/source /path/to/destination
同步两个目录:
rsync -avz --delete /path/to/source /path/to/destination
这些只是 rsync
的一部分功能和选项。要了解更多细节,可以查看 man rsync
或在线文档。
仅同步增量
rsync -avzu --progress /from/path user@ip:/path/to