将 sudo 放在前面吗?

将 sudo 放在前面吗?

我有一个非常简单的任务:更改位于特定文件夹中的所有文件的权限:

find in_this_directory -type f -exec sudo chmod 0664 {} \;

虽然这种方法有效,但它要求sudo每次击球,这对我的系统产生了巨大的影响,因为日志控制记录所有 sudo 访问:

mycomp sudo[20047]: pam_unix(sudo:session): session closed for user root

如果有百万个文件,上面这一行就会出现一百万次in_this_directory

我可以

sudo find in_this_directory -type f -exec chmod 0664 {} \;

但是这个做了其他的事情,它会在第一次尝试时失败,因为要更改的文件没有0777并且不属于当前用户。

除了等待这些,还有什么更好的解决方案吗?须藤操作要结束了吗?

答案1

sudo find ... -exec chmod通常会实现相同的目的。 sudo 授予的权限是可继承的,因为它所做的只是让进程以不同的用户(通常是 UID 0)的身份运行,并且该权限始终是可继承的。

唯一会出现不同行为的情况是:a)普通用户没有权限进入某些子目录(在这种情况下sudo find仍会进入这些子目录),或者b)您使用的条件-readable取决于当前的 UID。

对于chmod所有其他接受多个文件名作为最后一个参数的命令,GNU find 支持+终止符,它将同时使用尽可能多的文件运行该命令:

find ... -exec chmod 0664 {} +

(对于不支持此扩展的操作系统,xargs可以做同样的事情,但处理带有空格的文件名有点困难 - 通常-print0xargs -d在这样的系统上也不起作用。)

相关内容