尝试将以下命令转换为原子单行命令……可能吗?
echo foo | sudo -u sun tee bar.private
chmod 600 bar.private
答案1
新创建的文件的权限由进程 umask 修改,其工作原理相反:位放在 umask 中将是清除在生成的权限中。因此,将 umask 设置为0077
,将使大多数实用程序创建具有权限的文件0600
。
默认情况下, sudo 从它启动的环境继承更严格的 umask,因此您可以执行以下操作:
echo foo | (umask 0077; sudo -u sun tee bar.private)
并且该文件将使用权限创建0600
。
实际上sudo
,它执行的是按位操作和环境中的 umask 以及中设置的 umask配置文件(umask
选项,默认为0022
)。因此,默认情况下,您不能使用tee
umask 运行0000
,它将改为0022
。但我们在这里把它变得更严格,这很有效。
当然,配置可能会将 umask 设置为其他值,甚至可能使用umask_override
,这可能会使其更宽松,此外可能还有一些 PAM 模块也可以对其进行修改。在这种情况下,您可以使用 sudo 运行一个设置 umask 的 shell,然后运行以下命令:
echo foo | sudo -u sun sh -c 'umask 077; tee bar.private'