113

まず、それ~/がホーム ディレクトリであることはわかっています。CD を使用すると、~または~/ホーム ディレクトリに移動します。

しかし、cd ~X私を特別な場所に連れて行ってくれますX

bash では、" " を押してタブを押すと、 andや などの可能なオプションがcd ~たくさん表示されます。これらのフォルダーに移動して実行すると、これらのフォルダーがホーム ディレクトリにないことがわかります。彼らはいたるところにいます。~X~mail~postgres~sshpwd

それらはエイリアスではありません。私はチェックしました。それらはenv.変数ではありません$

これらのリンクを設定しているのは何ですか? また、これらが設定されている場所はどこにありますか?

4

8 に答える 8

81

「チルダ展開」と呼ばれる Bash の機能です。これはOSではなくシェルの機能です。たとえば、csh では異なる動作が得られます。

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

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

~              $HOME
~fred          (freds home dir)

~+             $PWD       (your current working directory)
~-             $OLDPWD    (your previous directory)
~1             `dirs +1`
~2             `dirs +2`
~-1            `dirs -1`

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

追加するために編集:

Sean Brightがコメントで指摘したように、ホーム ディレクトリに関するベースライン チルダの動作は、POSIX 準拠のシェルの標準動作として体系化されています。さらに、この動作を実装するためにwordexp() C API 関数が指定されています。ただし、明らかに、注意して使用してください。

于 2009-11-02T08:41:14.887 に答える
36

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

于 2009-06-15T22:01:16.680 に答える
17

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

于 2009-06-15T22:00:23.593 に答える
15

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

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

于 2009-06-15T22:02:04.337 に答える
9

私のマシンでは、セットアップ方法のために、次のことを行っています。

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

1 つ目は、環境変数の値に注意を払います$HOME。NFS マウントのファイル システムではなく、意図的に$HOMEローカル ファイル システムに設定しました。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 -

と同じ意味~-です。

于 2009-06-15T22:37:54.860 に答える
5

Bash でのチルダ展開:

http://bash-hackers.org/wiki/doku.php/syntax/expansion/tilde

于 2009-06-15T23:03:40.727 に答える
1

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

/home2 auto.home --timeout 60

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

mgalgs -rw,noquota,intr space:/space/mgalgs
于 2014-11-21T18:43:23.073 に答える
0

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

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

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

入力~Tabすると、マシン上のユーザーのリストが表示されます。

于 2016-04-27T18:06:13.470 に答える