我有两个Linux用户(不是root),例如user1和user2的登录名和密码。
如何使用一个单独的shell脚本(一个单独的脚本启动,不需要手动切换用户)将文件从/home/user1/folder1复制到/home/user2/folder2。
我认为我必须使用sudo命令,但没有找到具体的方法。
cp -r /home/user1/folder1/ /home/user2/folder2
-p
(即cp -pr
),它将保留文件的属性(模式、所有权、时间戳)。-r
是必需的,以便复制隐藏文件。有关更多信息,请参见如何使用cp复制包括隐藏文件和隐藏目录及其内容?。sudo cp -a /home/user1/folder1 /home/user2/folder2
sudo chown -R user2:user2 /home/user2/folder2
cp -a 档案
chown -R 递归操作
复制文件,然后授权给user2以访问它们。
拷贝所有文件,包括隐藏文件和子目录,不需要事先存在/home/user2/folder2目录。
(shopt -s dotglob; cp -a /home/user1/folder1/* /home/user2/folder2/)
将所有文件(包括以句点开头的文件)使用标准cp
命令复制。 /folder2/
应该存在,否则结果可能很糟糕。
通常使用像tar
这样的打包工具也会有帮助:
cd /home/user1/folder1
tar cf - . | (cd /home/user2/folder2; tar xf -)
cp /u1/f1/* /u2/f2
,只有/u1/f1/x
存在,将导致一个名为/u2/f2
的文件(!),其中包含来自/u1/f1/x
的字节。 - Alfe我认为你需要使用这个命令
sudo -u username /path1/file1 /path2/file2
这个命令允许你将特定用户的内容从任意文件路径复制出来。
PS:为了能够从中复制文件,父目录至少需要有可列出的权限。
首先,如果您在用户终端,请使用以下命令切换到 root 用户:
sudo -i
找到您的文件后,使用以下命令进行复制:
cp 文件名 /home/user
如果文件在其他目录中,请使用以下命令:
cp 目录/文件名 /home/user
请确保替换为您的用户名
要检查文件移动情况,返回到用户身份,请使用以下命令:
su user
仅仅是为了补充fedorqui 'SO stop harming'的回答。
当我尝试将服务器的默认管理员用户从stage_user
更改为prod_user
时,在Ubuntu 20.04机器上遇到了同样的挑战:
首先,我使用以下命令创建了一个prod_user
:
sudo adduser prod_user
prod_user
添加到sudo组中:sudo adduser prod_user sudo
stage_user
的home
目录中复制了所有需要的目录到prod_user
中:sudo cp -r /home/stage_user/folder1/ /home/prod_user/
stage_user
更改为prod_user
,以避免权限问题:sudo chown prod_user:prod_user /home/prod_user/folder1
就这些。
希望这可以帮到你
这个问题涉及跨用户的权限。
我认为默认情况下,家目录权限允许所有人列出和更改另一个用户的家目录: 例如,drwxr-xr-x 因此,在之前的答案中,人们没有意识到你可能遇到的问题。
在像我在 Web 主机上设置的更严格的设置中,非所有者用户无法执行任何操作。 例如,drwx ------ 即使您使用 su / sudo 并成为其他用户,您仍然只能同时成为一个用户,因此当您将文件复制回来时,仍然存在不足权限的问题。
所以。 。 。 使用 scp,把它当作网络环境处理就行了。顺便说一句,这个问题已经在这里得到回答(https://superuser.com/questions/353565/how-do-i-copy-a-file-folder-from-another-users-home-directory-in-linux),我只是因为这个在我的搜索结果中排名第一而选择回复。
-r
就是它的解决方法。 - fedorqui/home/user2/folder2/folder1/…
。 - Alfecp /home/user1/folder1 /home/user2/
,然后将/home/user2/folder1
重命名为/home/user2/folder2
(仅在两者之前都不存在的情况下才有效)。 - Alfe