ls -l 다음의 첫 번째 줄에서 "전체"는 무엇입니까? [닫은]


131

이란 무엇입니까 total의 출력은 ls -l?

    $ ls -l /etc
    total 3344
    -rw-r--r--   1 root root   15276 Oct  5  2004 a2ps.cfg
    -rw-r--r--   1 root root    2562 Oct  5  2004 a2ps-site.cfg
    drwxr-xr-x   4 root root    4096 Feb  2  2007 acpi
    -rw-r--r--   1 root root      48 Feb  8  2008 adjtime
    drwxr-xr-x   4 root root    4096 Feb  2  2007 alchemist

답변:


94

해당 ls플랫폼 의 설명서 에서 해당 라인의 정의를 찾을 수 있습니다 . 들어 coreutils ls(리눅스 시스템의 많은에있는 하나), 정보를 통해 찾을 수 있습니다 info coreutils ls:

나열된 각 디렉토리에 대해`total BLOCKS '줄이있는 파일을 앞에 두십시오. 여기서 BLOCKS는 해당 디렉토리의 모든 파일에 대한 총 디스크 할당입니다.


14
재미있게도, man ls내 시스템에서 그 라인을 언급하지는 않지만 말합니다 info coreutils ls. 어떻게되어 제공 man lsinfo coreutils ls같은 명령에 대한 다른 정보를? 왜 ls한 번만 문서화 되지 않습니까? 동일한 명령에 대해 서로 다른 두 개의 문서가 있으면 실패로 설정된 것처럼 보입니다.
HelloGoodbye

1
infocoreutils 관련 문서는 종종 맨 페이지보다 자세한 내용입니다. 그렇기 때문에 각 매뉴얼 페이지 끝에 자세한 내용은 정보 섹션을 참조하는 메모가 있습니다.
Mat

7
아 나는 그것을 실행 info ls하여와 동일한 출력을 제공합니다 info coreutils ls. 논쟁 coreutils은 무엇을 하는가?
HelloGoodbye

46

공식 : 숫자 는 무엇입니까 ?

total int = 각 파일에 대한 (physical_blocks_in_use) * physical_block_size / ls_block_size)의 합 .

어디:

  • ls_block_size임의의 환경 변수 자유롭게 수정할 수있다 (일반적으로 512 또는 1024 바이트) --block-size=<int>의 플래그 ls1, POSIXLY_CORRECT=1GNU 환경 변수, 또는 (512 바이트 단위에 도착) -k1KB 단위를 강제 플래그.
  • physical_block_size내부 블록 인터페이스의 OS 종속 값으로 기본 하드웨어에 연결되거나 연결되지 않을 수 있습니다. 이 값은 일반적으로 512b 또는 1k이지만 OS에 전적으로 의존합니다. 또는 의 %B값을 통해 공개 할 수 있습니다 . 이 값은 (거의 항상) 최신 저장 장치 의 물리적 블록 수와 관련이 없습니다 .statfstat

왜 그렇게 혼란 스러운가?

이 수치는 물리적 또는 의미있는 지표와 상당히 분리되어 있습니다. 많은 주니어 프로그래머들은 파일 홀 이나 하드 / 심볼 링크에 대한 경험이 없었습니다 . 또한이 특정 주제에 대한 문서는 사실상 존재하지 않습니다.

"블록 크기" 라는 용어의 불일치와 모호함은 수많은 다른 측정이 쉽게 혼동되고 디스크 액세스를 중심으로 비교적 깊은 추상화 수준으로 인해 발생했습니다.

상충되는 정보의 예 : du(또는 ls -s) vsstat

du *프로젝트 폴더에서 실행 하면 다음이 생성됩니다. (참고 : ls -s동일한 결과를 반환합니다.)

dactyl:~/p% du *
2       check.cc
2       check.h
1       DONE
3       Makefile
3       memory.cc
5       memory.h
26      p2
4       p2.cc
2       stack.cc
14      stack.h

합계 : 2 + 2 + 1 + 3 + 3 + 5 + 26 + 4 + 2 + 14 = 62 블록

그러나 하나가 실행되면 stat다른 값 세트가 나타납니다. stat동일한 디렉토리에서 실행 하면 다음이 발생합니다.

dactyl:~/p% stat * --printf="%b\t(%B)\t%n: %s bytes\n"
3       (512)   check.cc: 221 bytes
3       (512)   check.h: 221 bytes
1       (512)   DONE: 0 bytes
5       (512)   Makefile: 980 bytes
6       (512)   memory.cc: 2069 bytes
10      (512)   memory.h: 4219 bytes
51      (512)   p2: 24884 bytes
8       (512)   p2.cc: 2586 bytes
3       (512)   stack.cc: 334 bytes
28      (512)   stack.h: 13028 bytes

합계 : 3 + 3 + 1 + 5 + 6 + 10 + 51 + 8 + 3 + 28 = 118 블록

참고 :stat * --printf="%b\t(%B)\t%n: %s bytes\n" > 명령을 사용하여 위에 표시된 대로 블록 수, 블록 크기, 파일 이름 및 바이트 크기를 순서대로 출력 할 수 있습니다 .

테이크 아웃에는 두 가지 중요한 사항이 있습니다.

  • stat리포트 모두 physical_blocks_in_usephysical_block_size상기 화학식에서 사용. 이는 OS 인터페이스를 기반으로 한 값입니다.
  • du물리적 디스크 사용률의 상당히 정확한 추정치 로 일반적으로 수용되는 것을 제공합니다 .

참고로, ls -l위의 디렉토리 는 다음 과 같습니다.

dactyl:~/p% ls -l
**total 59**
-rw-r--r--. 1 dhs217 grad   221 Oct 16  2013 check.cc
-rw-r--r--. 1 dhs217 grad   221 Oct 16  2013 check.h
-rw-r--r--. 1 dhs217 grad     0 Oct 16  2013 DONE
-rw-r--r--. 1 dhs217 grad   980 Oct 16  2013 Makefile
-rw-r--r--. 1 dhs217 grad  2069 Oct 16  2013 memory.cc
-rw-r--r--. 1 dhs217 grad  4219 Oct 16  2013 memory.h
-rwxr-xr-x. 1 dhs217 grad 24884 Oct 18  2013 p2
-rw-r--r--. 1 dhs217 grad  2586 Oct 16  2013 p2.cc
-rw-r--r--. 1 dhs217 grad   334 Oct 16  2013 stack.cc
-rw-r--r--. 1 dhs217 grad 13028 Oct 16  2013 stack.h

26

나열된 파일이 사용하는 간접 블록을 포함한 총 파일 시스템 블록 수입니다. ls -s동일한 파일에서 실행 하고보고 된 숫자를 합하면 같은 숫자를 얻게됩니다.


이것은 단순히 사실이 아닙니다. 예 : /bin/ls -s-> total 15 2 filename 3 filename2 3 filename3 3 filename4 2 filename5 2 filename6 2 filename8 2 filename9
Don Scott

3
나는 당신이 어떤 시스템 모르겠지만, 나를 위해, 그것은 이다 사실. 예 : gist.github.com/rfjakob/200f6001bf91cf801891
Jakob

@Jakob 전체 답변을 게시하고, 살펴보고, 그것이 해결되는지 알려주세요.
Don Scott

이것은 Windows 용 Git bash에서는 사실이 아닙니다.
thdoan

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.