web-dev-qa-db-ja.com

Linux bashのチルダの意味(ホームディレクトリではない)

まず、~/がホームディレクトリであることを知っています。 ~または~/にCDを送信すると、ホームディレクトリに移動します。

ただし、cd ~Xは特別な場所に連れて行ってくれます。Xは何でもあるようです。

Bashで「cd ~」を押してタブを押すと、~Xおよび~mailおよび~postgresなどの~sshオプションが表示されます。それらのフォルダーに移動してpwdを実行すると、これらのフォルダーがホームディレクトリにないことがわかります。彼らはいたるところにいます。

それらはエイリアスではありません。確認しました。それらはenv.変数ではないか、$が必要です。

これらのリンクの設定とは何ですか。また、これらのリンクの設定場所はどこで確認できますか?

100
jbu

これは、「 チルダ展開 」というBash機能です。これは、OSではなくシェルの機能です。たとえば、cshではさまざまな動作が発生します。

情報の出所に関する質問に答えるには、ホームディレクトリは変数$HOME(そこに何を格納しても)から取得しますが、他のユーザーのホームは getpwent() を使用してリアルタイムに取得されます。この関数は通常 NSS ;によって制御されます。そのため、デフォルト値は/etc/passwdから引き出されますが、NIS、LDAP、SQLデータベースなど、必要なソースを使用して情報を取得するように構成できます。

チルダの展開は、ホームディレクトリの検索以上のものです。概要は次のとおりです。

~              $HOME
~fred          (freds home dir)

~+             $PWD   (same effect as ./)
~-             $OLDPWD (your previous directory)
~1             `dirs +1`
~2             `dirs +2`
~-1            `dirs -1`

dirsおよび~1~-1などは、pushdおよびpopdと組み合わせて使用​​されます。

67
tylerl

これらは、ユーザーのホームディレクトリです。たとえば、cd ~(your username)を試してください。

33
Ana Betts

それらは/etc/passwdのユーザーのホームディレクトリですか? postgres、sendmail、Apacheなどのサービスは、通常のユーザーと同様にホームディレクトリを持つシステムユーザーを作成します。

16
Sean Bright

これらはユーザーです。/etc/passwdを確認してください

cd〜ユーザー名

そのユーザーのホームディレクトリに移動します

13
Joakim Elofsson

私のマシンでは、物事をセットアップする方法のために、次のことを行います:

cd ~             # /work1/jleffler
cd ~jleffler     # /u/jleffler

最初は、環境変数$HOMEの値に注意を払います。 $HOMEを意図的にNFSマウントファイルシステムではなくローカルファイルシステムに設定しました。 2番目はパスワードファイルから読み取り(おおよそ、NISは少し複雑になります)、パスワードファイルが私のホームディレクトリが/u/jlefflerであり、そのディレクトリに変更していることを発見します。

迷惑なのは、ほとんどのソフトウェアが上記のように動作することです(シェルのPOSIX仕様ではこの動作が必要です)。パスワードファイルからの情報を現在の$ HOMEの値として扱うソフトウェアを使用しています(使用することに関してあまり選択肢がありません)。これは間違っています。

これを質問に適用します-他の人が指摘したように、「cd ~x」はユーザー「x」のホームディレクトリに移動し、より一般的には、チルダ展開が行われるたびに、~xはユーザー「x」のホームディレクトリを意味します(そしてユーザー「x」が存在しない場合はエラーが発生します)。


それに言及する価値があるかもしれません:

cd ~-       # Change to previous directory ($OLDPWD)
cd ~+       # Change to current directory ($PWD)

~+」の使用法をすぐに見つけることはできません。ただし、現在のディレクトリへのパスでシンボリックリンクを移動するという奇妙なことをしない限りです。

次のこともできます。

cd -

これは、~-と同じことを意味します。

9
5
TheBonsai

autofsを使用している場合、展開は実際には/etc/auto.home(または同様のディストリビューション)から行われている可能性があります。たとえば、私の/etc/auto.masterは次のようになります。

/home2 auto.home --timeout 60

および/etc/auto.homeは次のようになります。

mgalgs -rw,noquota,intr space:/space/mgalgs
1
mgalgs

OpenDirectory/ActiveDirectory/LDAPユーザーがホームディレクトリに「自動マウント」されている可能性があります。

* nixでは、~はホームディレクトリに解決されます。同様に、~Xは 'user X'に解決されます。

ディレクトリの自動マウントと同様に、OpenDirectory/ActiveDirectory/LDAPは、大規模/企業環境でユーザーディレクトリを自動マウントするために使用されます。これらのユーザーは、実際のユーザーでも、さまざまな機能を提供するために作成されたマシンアカウントでもかまいません。

入力した場合 ~Tab マシン上のユーザーのリストが表示されます。

0
JS.