質問

私はややソフトリンクは、UNIXでどのように機能するかを混乱しています。例を参照してください。

% cd /usr/local/
% ls -la
total 6
drwxr-xr-x   2 root     root         512 Jan 19 15:03 .
drwxr-xr-x  41 root     sys         1024 Jan 20 16:24 ..
lrwxrwxrwx   1 root     root          38 Jan 19 15:03 java -> /otherDir/java/jdk1.6.0_17 **<- this is a soft link**

% cd java **<- move to the softlink**

% pwd
/usr/local/java **<- the current location, say LOCATION_A**

% cd /otherDir/java/jdk1.6.0_17/ **<-move to the location of the softlink**

% pwd
/otherDir/java/jdk1.6.0_17 **<- the new current location, say LOCATION_B**

LOCATION_AがLOCATION_Bであっても、彼らは異なるパスを持っていることを、この問題はありませんか?

ファイルの実際の場所を提供します(PWD以外)コマンドは、(ユーザーがそこに行くだけではなく、どのように)あります。

PWDは、ユーザのCDだけの和であるように、

これは、私には思えます。 NOT現在の場所。

役に立ちましたか?

解決

この振る舞いは目的でこれが好き。 /a/b/c/d..してからCDへのあなたのCDなら、あなたは現実的に/a/b/cであることを期待しています。あなたがcで終わるだろうと、あなた(または任意のプログラム)がないだろう持っていると思い行動して、/f/g/hにあなたを取ること - /f/gはシンボリックリンクであることを起こる場合(ただし、ソフト・リンクUNIXの用語でまたはシンボリックリンク)それはそこに着いた方法を理解します。

他のヒント

pwd -Pを試してみてください。それは「PWD以外」ではないのですが、それは、少なくとものFedora 12 YMMVに私のbash 4.0.35上のトリックを、行います。

更新:移植のようですので、でも、shで動作します。

あなたは真のディレクトリ名を取得するには、現在の作業ディレクトリにREADLINK使用することができます:

readlink `pwd`
私はあなたの例を理解していれば、

通常、pwdは、最後の行で/usr/local/javaを返す必要があります。しかし、いくつかのシェルは、試行が現在の作業ディレクトリにシンボリックリンクを扱うより「知的」であることをのビルドでpwdコマンドを持っています。

/bin/pwdを試してみてください、あなたは他の結果を得るのですか?

のrealpath に何を行います欲しいます。

絶対にすべての状況下で、あなたのパスを取得することはできません。これはビット奇数であるが、この(chroot環境とのsetuidプラス)の変化は、時にはプロセスをロックダウンするために使用される。

$ mkdir -p /tmp/a/b
$ cd /tmp/a/b
$ rmdir /tmp/a/b
$ chmod 0 /tmp/a
$ rmdir /tmp/a
$ ls ..
ls: cannot open directory ..: Permission denied
$ ls -al
total 0
$ pwd -P
pwd: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top