나는 최근에 내 디렉토리에서 일부 특정 디렉토리를 꺼내서 /home
다른 경로( )에 마운트된 외장 하드 드라이브에 배치했습니다 /mnt
.
내 홈 디렉터리에서 원활하게 액세스할 수 있도록 일부 이전 디렉터리에 대한 심볼릭 링크를 만들었습니다(예: 디렉터리를 로 이동했습니다 ~/media/music
) /mnt/media/music
.
이제 cd
이러한 심볼릭 링크 중 하나가 포함된 디렉터리로 이동한 다음(예: /mnt/media/music
into 에 대한 심볼릭 링크를 생성함 ~/media/
) 명령을 실행하면 ls
외장 하드 드라이브가 회전하기 시작하고 ls
일부 데이터가 나타날 때까지 의 출력이 차단됩니다. )가 디스크에서 읽혀지는지 알 수 없습니다(회전 때문에 그런 것 같습니다).
왜 그런 일이 일어났는지 알고 싶습니다. 심볼릭 링크를 표시하기 위해 외부 하드 드라이브에서 아무것도 로드할 필요가 없는 것 같습니다( cd
심볼릭 링크에 연결하는 것은 ls
또 다른 문제이지만 여기서 말하는 것은 아닙니다). 그렇다면 왜 이런 일이 발생합니까?
미리 감사드립니다
답변1
--group-directories-first
ls
심볼릭 링크가 디렉터리나 파일을 가리키는지 확인 해야 합니다 .
이를 위해서는 외부 하드 드라이브인 대상 파일 시스템에 대한 액세스가 필요합니다.
그렇기 때문에 ls
사용하는데 오랜 시간이 걸립니다.
@Kusalananda는 매우 유효한 질문을 했습니다. 색상 지정에 동일한 액세스가 필요하지 않습니다. 아니요. 색상 지정(제 경우에는 ls
현재 기본 dircolor를 사용하는 8.32)이 대상 유형을 확인하지 않습니다. 내가 이것을 확인하는 방법은 실행하는 것입니다
cd /tmp
mkdir dir
cd dir
touch testthing
ln -s /doesnotexist deadlink
strace -o /tmp/withlink ls --color
rm deadlink
strace -o /tmp/withoutlink ls --color
그런 다음 diff /tmp/withlink /tmp/withoutlink
. getdents64
이미 "이것은 심볼릭 링크입니까?"가 포함된 디렉토리 목록을 반환하는 임의 메모리 주소를 제외하고 모든 것이 동일합니다. 정보. 대상(또는 해당 유형)의 존재 여부는 확인되지 않습니다.