2009-06-15 15 views
86

まず、~/がホームディレクトリであることがわかりました。 ~または~/にCDを送るとホームディレクトリに移動します。Linuxでのチルダの意味bash(ホームディレクトリではない)

しかし、cd ~Xは私を特別な場所に連れて行きます。ここではXは何かのようです。 bashで

、私は「cd ~」をヒットし、タブをヒットした場合は、それが~mail~postgres~sshなどの可能性~Xオプションの束を示しています。これらのフォルダに移動してpwdを実行すると、これらのフォルダがホームディレクトリにないことがわかります。彼らはどこにでもいる。

エイリアスではありません。私はチェックした。 変数はenv.ではありません。そうでない場合は、$が必要です。

これらのリンクは何を設定していますか、どこにこれらのリンクが設定されていますか?

+0

〜Xはリテラル "〜X"を返しますが、〜は$ HOMEを返し、〜+は$ PWDを返します。シェル変数をフェッチする以外に特別なものではありません。すなわち、それらは値を記憶せず、またはそれらを検索するためのコマンドを実行しない。それらはすでに定義されています。あなたは〜〜を試みましたか?私はそれを使用することは考えられませんが、シェル変数$ OLDPWDを返します – SDsolar

答えて

16

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

+2

実際に〜usernameは指定されたユーザのホームディレクトリです –

33

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

+1

これらはシンボリックリンクではなく、サービスアカウントにはホームディレクトリがありません/ homeの下で –

+0

私の場合は最高の答え。また、私の場合は、ホームディレクトリではなくルートディレクトリ/フォルダでした。 – William

13

ものであり、ユーザーは、

が移動しますあなたの/ etc/passwdファイル

CD〜ユーザー名をチェックしているので、私は物事設定した方法の私のマシン上で

+0

FTW。 Upvote。これをクリアするためのTNX。私は、どれくらいのサイクルが、おそらくサブシェルさえあればいいのだろうか。あなたのシステムに小規模のISPのような3Kユーザーがいる場合は、想像してみてください。 Yikes。 – SDsolar

9

ホームディレクトリのユーザー、

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

最初は、環境変数$HOMEの値に注意します。私は意図的に私の$HOMEをNFSマウントされたファイルシステムの代わりにローカルファイルシステムに設定しました。 2番目はパスワードファイル(約NISは少し複雑です)から読み込み、パスワードファイルに自分のホームディレクトリが/u/jlefflerであり、そのディレクトリに変更があることを確認します。

ほとんどのソフトウェアは上記のように動作します(シェルのPOSIX仕様ではこの動作が必要です)。私は、パスワード・ファイルの情報を$ HOMEの現在の値として扱うソフトウェアを使用します(それを使用する方法はあまりありません)。これは間違っています。 cd ~xは、ユーザー 'x'のホームディレクトリに移動します。より一般的には、チルダ展開が行われるたびに、~xは、ユーザー 'x'のホームディレクトリを意味します。これは、「cd ~x」が、 (ユーザー 'x'が存在しない場合はエラーです)。


それはそれを言及する価値があるかもしれない:

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

あなたが現在に至るパスにシンボリックリンクを移動するといくつかの奇妙なものを行う場合を除き、私はすぐに、「~+」の使用を見つけることができませんディレクトリ。

また、行うことができます。

cd - 

~-と同じことを言います。 bashで

+1

'cd〜+'について:あなたが現在存在しているディレクトリがまだ存在していないかどうかを確認するために、潜在的にそれを使用することができます。 – professorsloth

56

それは "tilde expansion" と呼ばれる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~-1pushdpopdと組み合わせて使用​​されています。ここでは要約です。

+0

注:[タグ:fish]は、なぜ~~ +がついたプレーンチルダ(〜) – Chinggis6

+0

以外はサポートしていませんか?むしろ役に立たないようです。 – cregox

+1

〜+はおおよそ同じです。しかし、./fileのようなものを使うためには、ファイルシステムに行き、どこで調べる必要があります。それは数サイクルかかる。 〜+を使用すると、ファイルシステムを走査するときにすでに定義されているシェル変数$ PWDの内容を単に返すだけで作業を保存できます。 – SDsolar

1

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

/home2 auto.home --timeout 60 

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

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

それはあなたのホームディレクトリに "自動マウント" OpenDirectory/ActiveDirectoryを/ LDAPユーザーを見ていることが可能です。

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

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

あなたはタブを入力した場合、あなたのマシン上のユーザーのリストが表示されます。

関連する問題