我希望能够防止人们在我的脚本中意外删除系统的关键文件,有谁知道如何使用该语句来查找文件夹的所有者?
答案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):zsh
bash
ksh
dash
yash
bosh
-O
if [ -O . ]; then
some command
fi
shellzsh
还具有U
glob 限定符来选择您拥有的文件。因此,find
可以采用与此类似的方法:
if ()(($#)) .(NU); then
some command
fi
要检索当前目录所有者的 id,POSIXly,您可以执行以下操作:
ownerid=$(LC_ALL=C ls -lnd . | awk '{print $3}')
或者,使用zsh
的stat
内置:
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。
如果您试图帮助人们管理不属于他们的文件,请了解组权限并使用合适的设置。 (我不能说更多,因为我不知道你在做什么。)
如果确实需要根权限(例如,让普通用户管理系统日志),请使用“白名单”方法:您的脚本应该只管理符合特定条件的文件。否则,谁知道你会忘记保护什么重要资源?