我有以下代码,我只是想在/etc/passwd
文件中打印用户主目录的权限。我还试图只获取那些具有组和世界写权限的目录。
我能够获得主目录的详细信息,但是只能打印所有在主目录中递归存在的目录。我只需要打印主目录的值,而不必递归地进行。
for homdir in $(cat /etc/passwd | awk 'BEGIN{FS=":"}{print $6}'); do find $homdir -perm -o+w; done > /tmp/writeperimissions
我希望输出仅将目录的组和世界可写权限打印到/tmp/writeperimissions
中(而不是递归地打印)。
答案 0 :(得分:1)
使用-maxdepth 0
仅匹配项目本身。因此:
while IFS=: read _ _ _ _ _ home _; do
[[ -d $home ]] || continue # skip directories that do not actually exist
find "$home" -maxdepth 0 -perm -o+w
done </etc/passwd | tee /tmp/world-writable-homedirs
向read
传递多个参数时,它将拆分为IFS
中的字符的字段(在本例中为:
),并将每个字段分配给一个由此命名的变量。然后,在这种情况下,我们将前五个字段分配给名为_
的变量,并将第六个字段分配给名为home
的变量。
不将-r
传递给read
会告诉它将\:
视为文字:
,因此您可以让用户在其易于理解的名称或GECOS字段中使用冒号在不放弃分析的情况下;实际上,这使得基于read
的解析比awk
更为准确。