내 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
잘 작동했습니다.