/usr/tomcat6/logs
に接続されているディレクトリがあります/var/log/tomcat6
。
ディレクトリを次に変更し、相対パス名を使用してファイルにアクセス/usr/tomcat6/logs
しようとすると、ls
../conf/Catalina/localhost
そのファイルやディレクトリはありません。エラーが発生しました。しかし、cd ../conf/Catalina/localhost
動作します。
以下を参照してください。
[root@fedora ~]# ll /usr/tomcat*
lrwxrwxrwx. 1 root root 21 Jun 17 15:00 /usr/tomcat6 -> apache-tomcat-6.0.32/
lrwxrwxrwx. 1 root root 21 Jun 17 13:03 /usr/tomcat7 -> apache-tomcat-7.0.16/
[root@fedora ~]# cd /usr/tomcat6
[root@fedora tomcat6]# ll logs
lrwxrwxrwx. 1 root root 16 Jun 17 14:51 logs -> /var/log/tomcat6
[root@fedora tomcat6]# cd logs
[root@fedora logs]# cd ../conf/Catalina/localhost
[root@fedora localhost]# pwd
/usr/tomcat6/conf/Catalina/localhost
[root@fedora localhost]# cd /usr/tomcat6/logs
[root@fedora logs]# ll ../conf/Catalina/localhost
ls: cannot access ../conf/Catalina/localhost: No such file or directory
どうすればこれが起こりますか?これはシンボリックリンクのバグですか、それとも特別な動作ですか?
答え1
これは組み込み関数の特別なbash
動作ですcd
。ファイル関連の動作は自然な現象です。シンボリックリンクをクリックすると、宛先への実際のパスを入力し、元のパス情報が失われます。ただし、そのパスを使用またはbash
移動するzsh
と、シェルは元のパスを記憶し、cd
後続の関連コマンドcd
で使用します。ただし、bash
ファイル名などが必要かどうかは実際にはわからないため、相対ファイル名参照にはありません。
cd
の記事を見ると、「論理的」(元のパスを記憶)または「物理的」(ファイルシステムのアイデアを使用)パスを使用するかどうかを示すオプションがあることがbash
わかります。-L
-P
常に「論理」動作が必要な場合は、--bind
シンボリックリンクの代わりにマウント(LinuxではSolarisおよび他のオペレーティングシステムでは「ループバック」または別の名前で呼び出す)を使用する必要があります。