리눅스에서 파일의 물리적 크기를 얻는 방법?


12

ls -l파일의 논리적 크기를 얻는 데 사용할 수 있지만 파일의 물리적 크기를 얻는 방법이 있습니까?


"물리적"크기의 의미를 정의하십시오.
Jörg W Mittag

답변:


28

ls -l파일의 명백한 크기를 제공합니다. 이것은 파일이 처음부터 끝까지 읽은 경우 프로그램이 읽을 바이트 수입니다. du"디스크상의"파일의 크기를 알려줍니다.

기본적 du으로 디스크 블록 수로 파일 크기를 제공하지만 -h사람이 읽을 수있는 단위를 대신 사용할 수 있습니다 . du시스템 설명서를 참조하십시오 .

GNU coreutil 's du(아마 Linux -b에있을 수 있음 ) 를 사용하면 바이트를 얻는 것이 --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

이는 파일 크기가 디스크에서 약 24KB 인 512MB 파일임을 의미합니다. 그것은이다 스파 스 파일 (실제로는 파일의 논리적 "구멍"으로 디스크에 기록하지만, 표현하지 않는 대부분 제로). 가상 시스템이나 스왑 파일 등의 디스크 이미지와 같이 미리 할당 된 대용량 파일을 작업 할 때는 스파 스 파일이 일반적입니다. 스파 스 파일을 생성하는 것은 빠르며 0으로 채우는 속도는 느리고 불필요합니다.

fallocateLinux 시스템 의 설명서를 참조하십시오 .


어떤 경우에이 차이가 중요합니까? 실용적인 예를 만들 수 있습니까? 미리 감사드립니다.
D' Arcy Nader

1
@ D' ArcyNader 업데이트 된 답변보기
Kusalananda

내가 오해 일 경우 정정 해줘,하지만 첫 문장은 다른 방법으로 주위입니다 나타납니다 stackoverflow.com/a/31437673/3701431는 du , 실제로 읽을 수있는 데이터의 양을 보여줄 것 동안 ls쇼 디스크 섹터가 할당되어있는 정도.
Sergiy Kolodyazhnyy

2
@SergiyKolodyazhnyy (늦게 대답해서 죄송합니다) 아니요, du실제로 파일에서 사용중인 디스크의 양을 보여줍니다. 반면에 표시된 겉보기 크기 (논리적 크기) ls는 프로그램이 읽을 수있는 바이트 수입니다. 파일이 희소 한 경우 일부 읽기 바이트는 0이지만 디스크에서가 아니라 파일을 읽는 프로그램으로 계속 전달됩니다.
Kusalananda

이것은 정말 좋은 대답이었습니다.
Lizardx

3

다음과 같이 파일 크기를 바이트 단위로 얻습니다.

actualsize=$(du -b "${file}" | cut -f 1)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.