ls -l
파일의 논리적 크기를 얻는 데 사용할 수 있지만 파일의 물리적 크기를 얻는 방법이 있습니까?
답변1
ls -l
프로그램이 파일을 처음부터 끝까지 읽는 경우 읽을 바이트 수인 파일의 겉보기 크기를 제공합니다. du
파일의 "디스크상의" 크기를 알려줍니다.
기본적으로 du
파일 크기는 디스크 블록 단위로 제공되지만 이를 사용하여 -h
사람이 읽을 수 있는 단위를 얻을 수 있습니다. 또한 du
시스템의 설명서를 참조하십시오.
du
GNU coreutil (아마도 Linux) 의 경우 -b
getbytes를 사용하면 이 --apparent-size
옵션을 의미합니다. 이는 디스크에서 사용된 실제 바이트 수를 가져오는 데 사용하려는 방법이 아닙니다. 대신 --block-size=1
또는 를 사용하세요 -B 1
.
GNU를 사용하면 파일로 ls
도 ls -s --block-size=1
이 작업을 수행할 수 있습니다. 그러면 du -B 1
파일과 동일한 번호가 부여됩니다 .
예:
$ ls -l file
-rw-r--r-- 1 myself wheel 536870912 Apr 8 11:44 file
$ ls -lh file
-rw-r--r-- 1 myself wheel 512M Apr 8 11:44 file
$ du -h file
24K file
$ du -B 1 file
24576 file
$ ls -s --block-size=1 file
24576 file
이는 이 파일이 512MB 파일이고 디스크에서 약 24KB의 공간을 차지한다는 것을 의미합니다. 이것은부족한파일(대부분의 0은 실제로 디스크에 기록되지 않지만 파일에서 논리적 "구멍"으로 표시됩니다). 가상 머신의 디스크 이미지나 스왑 파일 등과 같이 미리 할당된 대용량 파일을 처리할 때 스파스 파일이 일반적입니다. 희소 파일을 만드는 것은 빠르지만, 0으로 채우는 것은 느리고 불필요합니다.
fallocate
Linux 시스템의 설명서도 참조하세요.
답변2
바이트 단위로 얻는 파일 크기는 다음과 같습니다.
actualsize=$(du -b "${file}" | cut -f 1)