私のスクリプトにUSER
変数があり、HOME
その変数に基づいてUSER
彼のパスを見たいです。どうすればいいですか?
答え1
/etc/passwd
ローカルファイル(LDAPなど)に保存されているかどうかに関係なく、ユーザー情報を見つけることができるユーティリティがあります。それは知られていますgetent
。
ここからユーザー情報を取得するには、次のコマンドを実行すると、getent passwd $USER
次のメッセージが返されます。
[jenny@sameen ~]$ getent passwd jenny
jenny:*:1001:1001:Jenny Dybedahl:/home/jenny:/usr/local/bin/bash
これで、cutを使ってホームディレクトリを簡単に削除できます。
[jenny@sameen ~]$ getent passwd jenny | cut -d: -f6
/home/jenny
答え2
これを使用して、eval
誰かのホームディレクトリを取得できます。
eval echo "~$USER"
少なくともローカルユーザーにとっては確実に機能します。 LDAPなどのリモートユーザーが使用されているかどうかはわかりませんeval
。
答え3
一般的な場所ですが、/home/$USER
必ずしも普遍的なわけではありません。この情報を取得できる最終的な場所はファイルです/etc/passwd
。
ファイルは誰でも読むことができるので、誰でもそのコンテンツにアクセスできます。
$USERがファイルに存在する場合、最後のエントリはユーザーのホームディレクトリです。
これにより、項目が選択され、ホームディレクトリが印刷されます。
awk -v FS=':' -v user="$USER" '($1==user) {print $6}' "/etc/passwd"
より複雑な(リモート)システムでは、getentはNSS(Name Service Exchange)システムからユーザー情報を取得する一般的なコマンドです。
コマンド
getent passwd "$USER" | cut -d : -f 6
可能であれば、同等の情報が提供されます。
答え4
rootとしてログインしている場合、パスワードを知っているか、パスワードがUSER
ない場合は、次のオプションがあります。USER
su -c 'echo ~' ${USER}
標準su
動作でUSER
定義されていないか空の場合は、su
コマンドをrootとして実行しようとします。
値がUSER
有効なユーザー名ではない場合、対応するエラーが発生しますsu: user <user> does not exist
。
ここにはすでに良い答えがたくさんありますが、まだ誰かに役立つかもしれません。