使用相同的权限将文件从一台服务器复制到另一台服务器

使用相同的权限将文件从一台服务器复制到另一台服务器

我正在迁移到新服务器,我需要移动一些网站,但我需要对新服务器具有与旧服务器相同的读/写权限。

我不需要保持组和所有者 ID 相同,但是如果我必须浏览旧服务器上的所有文件并检查文件夹和文件的读/写权限,而不是在新服务器上设置,那将会非常困难。

我的想法是将文件复制到新服务器并解压,但这会以某种方式将所有权限重置为默认值,即文件权限为 644,文件夹权限为 755。我能以某种方式传输与旧服务器上相同的权限的文件和文件夹吗?

答案1

只需使用rsync

rsync -avz /path/to/files newserver:/path_to_files 

/path/to/files这将递归地将旧服务器上的所有文件复制到/path_to_files新服务器上,并保留权限和所有者信息。有关更多信息,请参阅man rsync

答案2

之前rsync有一个值得了解的技巧。有时你会发现自己处于没有 rsync 的系统上。

诀窍是制作文件的 tar 文件,将文件复制到新服务器,然后提取 tar 文件以-p保留文件权限。

“但是等一下!”你问道。“那个临时文件可能很大!比我的可用空间还大!”别担心。你可以用管道连接这两个tar文件,而且你不需要临时文件,也不需要磁盘空间!要指定 stdin 或 stdout,请指定文件名-(连字符)。

综合起来:

cd $SRCDIR
tar -c -v -f - . | ssh $DEST_HOST "mkdir -p $DESTDIR && cd $DESTDIR && tar -x -p -f -"

例如:

cd /home/user12
tar -c -v -f - . | ssh other.example.com "mkdir -p $DESTDIR && cd /home/user12 && tar -x -p -v f -"

类似于(分号) &&;但它的意思是“仅当此命令成功时才执行下一个命令”。

请记住,如果您还想复制文件所有者:组,则必须以 root 身份执行此操作。您的普通用户帐户通常不能复制chown文件,因此 tar 也不能。即使ssh要要求输入密码,该命令也会起作用,因为ssh它足够聪明,在登录完成之前不会连接管道。

注意:tar将更新除根目录之外的所有文件的权限,因为它没有创建它。您使用 来创建它mkdir -p。如果您使用 tar 而不是“。”来捕获目录,则可以解决此问题。以下是最后一个示例的重复,它将更新“user12”的权限:

cd /home
tar -c -v -f - user12 | ssh other.example.com "mkdir -p /home && cd /home && tar -x -p -v f -"

看到不同?

答案3

如果您有 linux/unix,您可以使用tar它有效地存储文件权限、所有权和软链接。

cd /var
tar zcf allmycircuits.tgz www

答案4

我的想法是将文件复制到新服务器并解压,但这会以某种方式将所有权限重置为默认值,文件权限为 644,文件夹权限为 755。

您是否遇到过权限设置为 644/755 的情况,或者您只是害怕这种情况?如果是前者:您做了什么?

顺便说一句:如果发生这样的问题:可以只替换访问权限:

getfacl --recursive . > acl.txt
# and then on the other system or at the other path
setfacl --restore=acl.txt

您知道如何更正 UID/GID 吗?

相关内容