`-L` 플래그를 사용한`du` 명령의 동작


11

커맨드 라인 옵션 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여기에서 영리하게 재생하고 싶은 것처럼 보이지만 df -a -L bar foo출력 을 실행 하면 매우 잘못됩니다 (16K를 계산하여 foo를 비워 둡니다).
guido

답변:


18

기본적 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함께, 그것은 모두 심볼릭 링크를 따라, 또한 번 이상 대상 파일 (들)을 계산하실 수 있습니다.


감사합니다. 작동합니다. 그러나 나는 약간의 추가 설명을하고 싶습니다. 남자 페이지에서, 나는 읽고 -l않습니다 count sizes many times if hard linked, 그러나 여기에서 나는 심볼릭 링크와 함께 일하고 있어요. 또한, -l나는 모두를 사용하는 경우 동안 혼자 문제가 해결되지 -l-L제대로 크기를 계산합니다.
Zagorax

@Zagorax 그래, 매뉴얼 페이지는 어떻게 -l그리고 어떻게 -L상호 작용 하는지 불분명하다 . 설명에 댓글이 너무 길어서 답변을 업데이트했습니다.
David Baggerman
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.