/のサブアイテムにあるホームディレクトリの数

/のサブアイテムにあるホームディレクトリの数

私は1つ以上のホームディレクトリを含む/サブディレクトリの数を数える必要があります。たとえば、john、emily、およびrickのホームディレクトリが/home/john、/home/emily、および/var/libにある場合、答えは2です。

CutとGrepを使ってパイプを使う必要があるようですが、どのように正確に使用するのかわかりません。

答え1

(export LC_ALL=C
getent passwd | cut -d: -f6 | sort -t/ -uk2,2 | grep -c ..)

ユーザーホームディレクトリの一意の2番目のコンポーネントの数を計算します。

  • LC_ALL=Cuniq通常、私たちが使用するときに必要です。sort -u
  • getent passwdアカウントデータベースをcsv(コロンで区切って)として返します(列挙可能であると仮定しますが、ネットワークデータベースの場合は必ずしもそうではありません)。
  • cut -d: -f6各レコードの6番目のフィールドを抽出する(デフォルトディレクトリ)
  • sort -t/ -uk2,22番目のディレクトリコンポーネントをソートし、一意のソートキーごと-uに1つのレコードのみを保持します。
  • grep -c ..除外する2つ以上の文字を含む行数を計算します/(またはgrep -cvx /:)

+ +単一の呼び出しでcut置き換え可能:sortgrepawk

getent passwd | awk -F: '{split($6, p, "/")}
                         p[2] != "" && !seen[p[2]]++ {n++}
                         END {print n}'

関連情報