簡體   English   中英

Linux-列出具有特定目錄的用戶

[英]Linux - List users which have specific directory

我正在嘗試創建一個腳本,該腳本將列出該用戶的名稱,只有該特定用戶在其文件夾中具有特定且可用的目錄時。

#!/bin/bash
for i in `cat /etc/passwd | cut -d : -f5\,6 | cut -d : -f2`
do
        cd $i
        if [ -d public_html ]
        then
                echo `cat /etc/passwd | cut -d : -f5,6 | cut -d : -f1`
        fi
done

首先,我獲得了具有主文件夾的所有用戶名的列表。 然后,對於每個用戶,我進入他的目錄。如果在他的目錄中找到public_html目錄,則回顯該用戶。

當我在終端中運行此命令時,將列出所有用戶:

cat /etc/passwd | cut -d : -f5,6 | cut -d : -f1

但是,我需要以某種方式從整個列表中獲取用戶i。

有人能這么善解人意地解釋我做錯了什么,要注意什么嗎?

您得到錯誤的結果,因為您正在檢查文件(使用-f )。 嘗試使用-d
使用cat and cut也不是bash,在大多數情況下可以很容易地用script代替。

我會做這樣的事情:
while IFS=: read -r user pass uid gid desc homedir shell; do [ -d "$homedir"/public_html ] && echo "$user"; done < /etc/passwd

我們將字段分隔符( IFS )設置為:因為/etc/passwd使用的是),我們讀取其中的文件並設置要使用的變量。 然后對每一行進行測試,如果測試成功( && ),我們將回顯結果。

引號並不是必需的,因為我們知道文件的格式,但是是很好的做法。

如果用戶的主目錄以標准方式設置:

cd /home
for pubdir in */public_html/ ; do
    echo "${pubdir%%/*}"
done

我做了貧民窟的風格...

#!/bin/bash
counter=0
for i in `cat /etc/passwd | cut -d : -f6`
do
        if [ -r $i ]
        then
                cd $i
                if [ -d public_html ]
                then
                        counter2=2
                        for j in `cat /etc/passwd | cut -d : -f5`
                        do
                                counter2=$(($counter2 + 1))
                                if [ $counter -eq $counter2 ]
                                then
                                        echo $j
                                fi
                        done
                fi
                counter=$(($counter + 1))
        fi
done
#!/bin/bash
getent passwd | awk -F: '{printf "%s\t%s\n",$1, $6}'| while read -r user home
do
  if [ -d ${home}/public_html ] ; then
    echo ${user}
  fi
done

無論使用/ etc / passwd還是ldap,這都應該起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM