使用 if 命令获取文件夹的所有者

使用 if 命令获取文件夹的所有者

我希望能够防止人们在我的脚本中意外删除系统的关键文件,有谁知道如何使用该语句来查找文件夹的所有者?

答案1

find . -prune -user "$(id -u)"

.如果当前目录归您所有,则将打印。

你可以这样做:

find . -prune -user "$(id -u)" -exec some command \;

或者:

if [ -n "$(find . -prune -user "$(id -u)")" ]; then
  some command
fi

some command仅当当前目录归您所有时才运行。

test大多数aka实现(包括、、、和shell[中的内置之一)也具有(大写 O):zshbashkshdashyashbosh-O

if [ -O . ]; then
  some command
fi

shellzsh还具有Uglob 限定符来选择您拥有的文件。因此,find可以采用与此类似的方法:

if ()(($#)) .(NU); then
  some command
fi

要检索当前目录所有者的 id,POSIXly,您可以执行以下操作:

ownerid=$(LC_ALL=C ls -lnd . | awk '{print $3}')

或者,使用zshstat内置:

stat -LH stat . && ownerid=$stat[uid]

或者使用 GNU find

ownerid=$(find . -prune -printf %U)

或者使用 GNU stat

ownerid=$(stat -c %u .)

或者,对于 BSD stat

ownerid=$(stat -f %u .)

获得该信息后$ownerid,您可以将其与您可以使用的 shell 进程的有效用户 ID 进行比较"$(id -u)"。一般来说,使用用户 ID 比使用用户名更好,因为帐户数据库中每个用户 ID 可以有多个用户名(这样就无需查询用户数据库)。

答案2

等等,什么?为了防止人们删除关键的系统文件,不要让他们以 root 身份登录,也不要让你的脚本设置为 setuid。

如果您试图帮助人们管理不属于他们的文件,请了解组权限并使用合适的设置。 (我不能说更多,因为我不知道你在做什么。)

如果确实需要根权限(例如,让普通用户管理系统日志),请使用“白名单”方法:您的脚本应该只管理符合特定条件的文件。否则,谁知道你会忘记保护什么重要资源?

相关内容