「ls $PWD」と「ls」。別のファイルをインポートしています。キャッシュがおかしいですか?

「ls $PWD」と「ls」。別のファイルをインポートしています。キャッシュがおかしいですか?

私のLinux Mintコンピュータには奇妙な問題があります(ソリッドステートドライブがある場合はソリッドステートドライブを使用)。どういうわけか機械は(複数の場合)その他「ls」の代わりに「ls $ PWD」を使用すると、同じファイルの内容が異なります。または単に「ls」です。これは、現在の作業ディレクトリにファイルを書き込み、別のディレクトリから別の内容をコピーできることを意味します。

これは$ PWD設定エラーではないため、ディレクトリ名を手動で入力できます。

非常に注意深く確認してみましたが、行き来します。これにより、本番スクリプトとコードを生成してテストするのが難しくなります。

adam@RADIUM:/home/adam/cd2/adam_dev/rsim ==> ls .
ClearPrice.cme Makefile.win data gfiles rsim5.tmp src zlib
ClearPrice.src ReadMe.txt err include rsimdone.txt tools
Makefile build g2f out scripts vs2013
adam@RADIUM:/home/adam/cd2/adam_dev/rsim ==>
adam@RADIUM:/home/adam/cd2/adam_dev/rsim ==> echo $PWD
/home/adam/cd2/adam_dev/rsim
adam@RADIUM:/home/adam/cd2/adam_dev/rsim ==> ls $PWD
ClearPrice.cmd Makefile.win err include scripts vs2013
ClearPrice.src ReadMe.txt g2f out src zlib Makefile build
gfiles rsimdone.txt tools
adam@RADIUM:/home/adam/cd2/adam_dev/rsim ==>

答え1

現在のディレクトリ内で現在のディレクトリの名前を変更または移動すると、これが発生する可能性があります。

たとえば、

$ mkdir /tmp/X
$ cd /tmp/X
$ mkdir Y Z
$ cd Y
$ touch a b c d e f
$ mv ../Y ../A
$ mv ../Z ../Y
$ echo $PWD
/tmp/X/Y
$ ls
a  b  c  d  e  f
$ ls $PWD
$ 

ディレクトリのinode番号を見ると、違いがわかります。

$ ls -ldi . $PWD
26871815 drwxr-xr-x 2 sweh sweh 4096 Jul 12 17:27 ./
26872035 drwxr-xr-x 2 sweh sweh 4096 Jul 12 17:27 /tmp/X/Y/

/bin/pwd他の値が返されるため、これを検出することもできます。

$ /bin/pwd
/tmp/X/A
$ echo $PWD
/tmp/X/Y

基本的に$PWDシェルがある場所考えるあなたがいる場所が必ずしも実際にある場所ではありません :-)

答え2

これはキャッシュではありません。

UNIXに似たオペレーティングシステムでは、ファイル名、ファイル自体、およびその内容が区別されることを理解する必要があります。たとえば、ファイルはにあるかもしれませんが、/home/adam/myfileこれはデフォルトのファイルシステムの「inode」にマップされます。ハードリンクは同じinodeの別の名前です。 inodeは他の場所の一部のデータにマップされるため、cat myfile現在のディレクトリにmyfileに関連付けられているinodeが何であるかを尋ねて、そのinode(通常はディスク上にある)を見つけて、そのinodeがマップされたデータを見つける必要があります。

ディレクトリの場合も同様です。ただし、内容がファイル名とinodeのマッピングで構成される点で、通常のファイルとは異なります。

したがって、作業ディレクトリをに変更すると、/home/adam/cd2/adam_dev/rsimその名前の物理ディレクトリノードを見つけるためにルックアップが実行されます。一定時間が経過すると、他のプロセスがディレクトリを別のパスに移動するか(UNIXでの移動は通常名前の変更に似ています)、他の理由でディレクトリが親ディレクトリから切断されます(つまり、親ディレクトリノードのファイルリストから削除されます) )。 ;名前は、/home/adam/cd2/adam_dev/rsim同じディレクトリノードにマップされなくなったり、どのアイテムにもマップされなくなる可能性があります。そのディレクトリノードは、ファイルシステムの他のどこかにまだ存在し、それを実行すると表示されるものですls ..実際には、各ディレクトリに独自のハードリンクがあるのと同じです。これは実際にはファイルシステムに存在するものです。「現在のディレクトリ」を意味する構文)。

答え3

ls -d $PWD/*コマンドをbashスクリプトに入れると正常に動作します。

macOSで

touch /usr/local/bin/lll
chmod 755 /usr/local/bin/lll

code /usr/local/bin/lll
#!/bin/bash
ls -d $PWD/*

文書を保存

次に、新しい端末ウィンドウを開きます。

コマンドを使用しましたが、うまくいきlllました。

関連情報