커맨드 라인 옵션 du
과 함께 사용하면 커맨드에 이상한 동작이 나타났습니다 -L
.
Slackware 14 및 Coreutils 8.19를 사용하고 있습니다.
이상한 동작을 재현하려면 두 개의 폴더를 작성하십시오.
mkdir foo
mkdir bar
폴더 중 하나 안에 파일을 작성하십시오.
perl -e 'print "A"x10000' > foo/text
다른 폴더의 심볼릭 링크 :
ln -s ../foo/text bar/text
다음을 입력하면
du -h -L bar
당신은 얻을 것이다:
16k bar
심볼릭 링크가 역 참조 되었기 때문에. 그러나 다음을 입력하면
du -h -L *
당신은 얻을 것이다:
16K foo
4.0K bar
심볼릭 링크는 역 참조되지 않습니다. 뭔가 빠졌습니까?
답변
기본적 du
으로 여러 번 연결된 경우 각 파일을 한 번만 계산합니다. 실행 du -L bar
하면 파일이 한 번만 도달하기 때문에 파일을 계산합니다. 그러나 실행 du -L *
하면 처음 볼 때만 계산합니다. 예를 들면 다음과 같습니다.
$ du -L foo bar
16K foo
4.0K bar
$ du -L bar foo
16K bar
4.0K foo
인수 순서를 바꾸면 16K로보고되는 폴더가 변경됩니다.
매개 변수 du
를 전달하여 파일을 두 번 세 도록 강제 할 수 있습니다 -l
.
편집하다:
심볼릭 링크는 특별한 종류의 파일이므로 링크를 따라 가려면 추가 단계가 필요합니다. 옵션이 활성화 du
되어 있지 않으면 기호 링크를 따르지 않습니다 -L
.
반면에 하드 링크는 기본적으로 두 개 이상의 폴더에 존재하는 하나의 파일입니다. du
아마도 두 번 계산하지 않기 위해 inode 번호로 본 파일을 추적합니다. -l
이 동작을 비활성화합니다.
따라서 그냥로 -L
심볼릭 링크를 따르지만 대상 파일에 inode 번호가 있으면 이미 계산 된 것으로 간주되지 않습니다. 그냥 -l
이 중복 하드 링크를 계산하지만, 심볼릭 링크를 따르지 않습니다.
당신이 사용하는 경우 -l
와 -L
함께, 그것은 모두 심볼릭 링크를 따라, 또한 번 이상 대상 파일 (들)을 계산하실 수 있습니다.