我可以访问一个网络服务器(一个通用的廉价 PHP 主机),其中有一堆我想要备份的较小文件。我可以使用 FTP 访问,但速度很慢。我可以使用 复制文件scp
,但必须先手动压缩,因为-C
参数在发送之前压缩每个文件,而不是所有文件。理想情况下,我只想rsync
像平常一样使用。服务器管理员告诉我他们不会安装它。是否可以在不访问apt
或sudo
作为便携式二进制文件的情况下安装它?
我在 Ubuntu 上找到了 rsync 二进制文件https://download.samba.org/pub/rsync/binaries/ubuntu-20.04-x86_64/(通过https://rsync.samba.org/download.html)。设置后chmod +x
,我收到此错误:
[user@server]$ ./rsync
./rsync: error while loading shared libraries: libxxhash.so.0: cannot open shared object file: No such file or directory
有没有一种巧妙的方法可以一次性获取丢失的库文件?
服务器似乎正在运行 Red Hat:
[user@server]$ cat /proc/version
Linux version 3.10.0-962.3.2.lve1.5.49.el7.x86_64 ([email protected]) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) ) #1 SMP Thu Mar 4 05:39:46 EST 2021
我没有看到rsync
该发行版的预编译版本。在这里做什么?由于缺少库(很可能),我无法在服务器上编译内容。
依赖关系
berndbausch 在评论中询问 的结果ldd rsync
,该结果应该显示所需的库:
linux-vdso.so.1 => (0x00007ffe589a3000)
libacl.so.1 => /lib64/libacl.so.1 (0x00007f6a681a5000)
libz.so.1 => /lib64/libz.so.1 (0x00007f6a67f8f000)
libpopt.so.0 => /lib64/libpopt.so.0 (0x00007f6a67d85000)
liblz4.so.1 => /lib64/liblz4.so.1 (0x00007f6a67b76000)
libzstd.so.1 => /lib64/libzstd.so.1 (0x00007f6a6789d000)
libxxhash.so.0 => not found
libcrypto.so.1.1 => not found
libc.so.6 => /lib64/libc.so.6 (0x00007f6a674cf000)
libattr.so.1 => /lib64/libattr.so.1 (0x00007f6a672ca000)
/lib64/ld-linux-x86-64.so.2 (0x00007f6a683ae000)
所以看起来只有 2 个缺失。
Rsync
从本地机器到服务器
有人在现已删除的评论中建议尝试通过 ssh 从本地 rsync 到服务器,而不是相反。这是行不通的。它会给像这样的错误:
rsync -zarvh [email protected]:/var/www/html/release /var/www/html/release
bash: rsync: command not found
答案1
将 rsync 和所需的缺失库解压到例如$HOME/rsync
rsync
这样运行:
cd $HOME/rsync
LD_LIBRARY_PATH=. ./rsync
# or
export LD_LIBRARY_PATH=$HOME/rsync
$HOME/rsync/rsync
在哪里可以找到这些缺失的库可供下载?
- 运行
rsync
,你会看到缺少的库。 - 对于每个人运行以下命令:
dnf whatprovides '*/library.so'
- 从任何镜像下载所需的 RPM
- 使用eg
rpm2cpio
和thencpio -idv -F file.cpio
来提取RPM。
最后,您可以在另一台 PC 上静态编译 rsync 并将生成的文件复制回您的服务器。