Linux 如何继承父目录';的所有者和组或当前帐户用户
在终点站,我知道我可以Linux 如何继承父目录';的所有者和组或当前帐户用户,linux,git,terminal,chown,Linux,Git,Terminal,Chown,在终点站,我知道我可以 chown whatever:whatever .* 我要做的是动态地将username和group设置为当前域所有者,而不是root。有没有一个简单的方法可以做到这一点 一些背景:我正在使用Git作为根目录推送到我的服务器,然后签出到public\uHTML。这将使所有新文件和目录归root:root所有。我想在hooks/post-receive中添加一行,将所有者更改为域用户而不是根用户,但如果不需要,我不想显式指定域用户。这将递归地将所有文件和目录设置为当前目录
chown whatever:whatever .*
我要做的是动态地将username和group设置为当前域所有者,而不是root。有没有一个简单的方法可以做到这一点
一些背景:我正在使用Git作为根目录推送到我的服务器,然后签出到public\uHTML。这将使所有新文件和目录归root:root所有。我想在hooks/post-receive中添加一行,将所有者更改为域用户而不是根用户,但如果不需要,我不想显式指定域用户。这将递归地将所有文件和目录设置为当前目录的所有者/组
#!/bin/ksh
OWNER=`ls -ld ./ | cut --delimiter=" " --fields="3"`
GROUP=`ls -ld ./ | cut --delimiter=" " --fields="4"`
chown -R $OWNER:$GROUP *
测试该命令,确保它与您的Linux风格兼容
#!/bin/ksh
OWNER=`ls -ld ./ | cut --delimiter=" " --fields="3"`
GROUP=`ls -ld ./ | cut --delimiter=" " --fields="4"`
echo $OWNER:$GROUP
这将递归地将所有文件和目录设置为当前目录的所有者/组
#!/bin/ksh
OWNER=`ls -ld ./ | cut --delimiter=" " --fields="3"`
GROUP=`ls -ld ./ | cut --delimiter=" " --fields="4"`
chown -R $OWNER:$GROUP *
测试该命令,确保它与您的Linux风格兼容
#!/bin/ksh
OWNER=`ls -ld ./ | cut --delimiter=" " --fields="3"`
GROUP=`ls -ld ./ | cut --delimiter=" " --fields="4"`
echo $OWNER:$GROUP
我能想到的最简单的是
chown -R `stat . -c %u:%g` *
您也可以在这里使用
$(…)
而不是反勾号。我能想到的简单方法是
chown -R `stat . -c %u:%g` *
您也可以在此处使用
$(…)
而不是反勾号。可能不完全是您想要做的,但这是搜索中出现的第一个关于将文件/文件夹设置为父/母所有者的线程。我通过“参考”开关实现了这一点。因此,请位于子目录中,然后运行:
chown * -Rv --reference=/PATH/TO/PARENT
这会将子目录的所有内容设置为您想要的任何引用文件,在我的情况下,我使用的是父目录。可能不完全是您想要做的,但这是在搜索中将文件/文件夹设置为父目录所有者时出现的第一个线程。我通过“参考”开关实现了这一点。因此,请位于子目录中,然后运行:
#!/bin/ksh
OWNER=`ls -ld ./ | cut --delimiter=" " --fields="3"`
GROUP=`ls -ld ./ | cut --delimiter=" " --fields="4"`
chown -R $OWNER:$GROUP *
chown * -Rv --reference=/PATH/TO/PARENT
这会将子目录的所有内容设置为您想要的任何引用文件,在我的情况下,我使用的是父目录。那么“域用户”是父目录的所有者吗?在这种情况下,可以在directy上设置SUID和SGID位。顺便说一句,Git不知道用户ID,所以您不需要以root身份推送。请小心使用“*”。你可能会改变一些你不想做的事情……默认情况下,域用户是/home/user(我正在推到一个whm服务器),该目录中的每个目录都归他们所有。当我使用git推送时,我是以root身份ssh的。这就是我假设我签出的文件归root:rootSo所有的原因“域用户”是父目录的所有者?在这种情况下,可以在directy上设置SUID和SGID位。顺便说一句,Git不知道用户ID,所以您不需要以root身份推送。请小心使用“*”。你可能会改变一些你不想做的事情……默认情况下,域用户是/home/user(我正在推到一个whm服务器),该目录中的每个目录都归他们所有。当我使用git推送时,我是以root身份ssh的。这就是我假设我签出的文件归root所有的原因:rootThis看起来不错,谢谢!当我下一次在我的电脑上时将进行测试。与其在这么多文本处理中跳舞,不如使用好的旧
stat
stat
似乎是更好、更准确的方法。这看起来很合适,谢谢!当我下一次在我的电脑上时将进行测试。与其在如此多的文本处理中跳舞,不如使用好的旧stat
stat
似乎是更好、更准确的方法。很好!我想知道是否有办法从终端获取域/帐户用户(对不起,我不知道如何引用此用户,但我指的是/home/user),我想知道是否可以在该用户从post receive中运行git checkout命令来阻止owner:group首先出错?@user844621,你做错了,请阅读。@user844621,要回答第一条注释,请查看id
命令以及$UID
和$GID
环境变量。谢谢id'为我提供了当前用户,我在ssh中的身份是。假设我以root用户的身份使用ssh,但随后导航到/home/anotheruser/public\html是否还有另一个变量可以给我“anotheruser”?很好!我想知道是否有办法从终端获取域/帐户用户(对不起,我不知道如何引用此用户,但我指的是/home/user),我想知道是否可以在该用户从post receive中运行git checkout命令来阻止owner:group首先出错?@user844621,你做错了,请阅读。@user844621,要回答第一条注释,请查看id
命令以及$UID
和$GID
环境变量。谢谢id'为我提供了当前用户,我在ssh中的身份是。假设我已经以root用户身份使用ssh,但随后导航到/home/anotheruser/public\html是否还有另一个变量会给我“anotheruser”?
#!/bin/ksh
OWNER=`ls -ld ./ | cut --delimiter=" " --fields="3"`
GROUP=`ls -ld ./ | cut --delimiter=" " --fields="4"`
chown -R $OWNER:$GROUP *