"-L" 플래그가 포함된 "du" 명령의 동작

"-L" 플래그가 포함된 "du" 명령의 동작

명령줄 옵션과 함께 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

그리고 심볼릭 링크는 역참조되지 않습니다. 내가 뭐 놓친 거 없니?

답변1

기본적으로 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둘 다 심볼릭 링크를 따르고 대상 파일을 여러 번 계산할 수 있습니다.

관련 정보