이 Linux 명령의 의미를 이해하는 데 문제가 있습니다.
du -sk * | sort -rn | head
du가 디스크 사용량을 표시하는 데 사용된다는 것을 알고 있지만 나머지 명령을 이해하는 데 어려움을 겪고 있습니다. 누군가 여기서 정확히 무슨 일이 일어나고 있는지 설명해 줄 수 있습니까? 복잡한 Linux 명령을 자세히 연구하는 데 유용한 리소스를 제안해 주실 수 있나요?
답변1
a | b | c
을 실행 a
하고 동시에 별도의 프로세스에서 실행됩니다. 여기서 한 명령의 표준 출력은 다음 명령의 표준 입력으로 파이프됩니다.b
c
이것은 .a
쉘에 의해 현재 디렉토리에 있는 숨기지 않은 파일의 이름으로 확장됩니다(숨겨지지 않은 파일이 없으면 명령이 오류와 함께 중단되거나 쉘에 의해 리터럴로 확장됩니다).du -sk *
*
*
여기서 파일 이름이 로 시작하면 -
해당 파일은 옵션으로 간주되므로 du
올바른 구문은 다음과 같습니다. du -sk -- *
즉, --
그 이후의 파일은 옵션으로 간주되지 않습니다.
-k
디스크 사용량을 킬로바이트 단위로 가져옵니다(1024바이트, du
표준 구현에서 기본값은 512바이트). -s
파일당 디스크 사용량 요약입니다(해당 유형의 경우).목차, 모든 하위 디렉토리에 대한 세부 정보를 제공하지는 않습니다).
따라서 현재 디렉터리에서 숨겨지지 않은 모든 파일의 디스크 사용량(디렉터리 유형에 대해 누적)을 인쇄하고 같은 줄에 킬로바이트 수를 표시한 다음 파일 이름을 표시합니다(그러나 파일 이름은 더 많은 파일로 구성될 수 있습니다). 한 줄 이상).
많은 du
구현에서 일부 매개변수가 동일한 파일(하드 링크)을 참조하거나 동일한 파일이 여러 디렉토리에서 발견되는 경우 첫 번째 디스크 사용량만 출력에서 고려됩니다.
sort -rn
sort
예철사입력 번호가 n
반대 r
이므로 모든 파일 이름에 개행 문자가 포함되어 있지 않다고 가정하여 파일/디렉토리를 가장 큰 것부터 가장 작은 것까지(디스크 사용량에 따라) 정렬합니다.
head
(의 약어 head -n 10
)는 출력의 처음 10줄을 제외한 모든 줄을 버립니다 sort
.
이러한 유틸리티의 GNU 구현에 대한 보다 정확한 버전은 다음과 같습니다.
du -skl0 ./* | sort -zk1,1rn | head -z | tr '\0' '\n'
모든 하드 링크를 강제 -l
로 고려합니다. -0
/ -z
출력/프로세스 레코드는 NUL로 구분되므로 개행 문자가 포함된 파일 이름에 더 잘 작동합니다. 접두사는 개행 문자가 포함된 파일 이름의 ./
경우 출력에서 각 파일 이름이 시작되는 위치를 나타낼 수 있습니다. -
)으로 시작하는 파일 이름 관련 문제 방지 ; 관계(동일한 디스크 사용량을 가진 두 파일)가 어휘 역순으로 관계를 정렬하지 않을 때 동작을 변경하는 sort -k1,1rn
대신 사용하십시오.sort -rn
1 GNU의 경우 du
기본값은 킬로바이트이지만 , , , 등의 환경 변수로 재정의될 수 있습니다 POSIXLY_CORRECT
.DU_BLOCK_SIZE
BLOCK_SIZE
BLOCKSIZE
답변2
한 명령의 출력을 다음 명령의 입력으로 사용할 수 있는 파이프 구조를 사용합니다.
du -sk * |sort -rn|head
명령 3개 시작
du -sk *
du
하위 디렉터리를 포함하여 디스크 사용량 명령 출력을 킬로바이트( ) 단위로 실행하고 입력으로 전송된 -k
소계( )만 출력합니다.-s
sort -rn
각 행 키를 숫자로 처리하여 역순(내림차순)으로 정렬하고 출력을 다음 명령으로 보냅니다.
head
기본적으로 처음 10줄만 출력됩니다.