du와 wc의 차이
du와 wc
파일 크기를 알고 싶을 때 사용하는 명령으로du와 wc가 있습니다.이런 차이는 무엇입니까?
Ubuntu 18.04LTE에서 GNU Coreutils의 Du와 wc를 통해 확인한다.
du는 4096바이트 단위로 반올림...꼭 그렇지는 않다
du는 보통 4096바이트 단위로 조정된 크기를 되돌려줍니다.
$ echo -n 12345 > xxx
$ du xxx
4 xxx
$ du --block-size=1 xxx
4096 xxx
실현을 확인한 후 fstat(2)에서 얻은stat구조에서 stat.st_blocks * 512
의 값을 되돌려줍니다.위의 예는 st입니다.Blocks는 8의 배수다.coreutils/src/du.c
duinfo_set (&dui,
(apparent_size
? MAX (0, sb->st_size)
: (uintmax_t) ST_NBLOCKS (*sb) * ST_NBLOCKSIZE), /* HERE */
(time_type == time_mtime ? get_stat_mtime (sb)
: time_type == time_atime ? get_stat_atime (sb)
: get_stat_ctime (sb)));
gnulib/lib/stat-size.h # define ST_NBLOCKS(statbuf) ((statbuf).st_blocks)
/* ... */
# define ST_NBLOCKSIZE 512
다른 한편, 추가-b
옵션은 4096바이트 단위로 잘라낸 치수가 아니라 실제 파일 내용을 되돌려주는 치수입니다.$ echo -n 12345 > xxx
$ du -b xxx
5 xxx
따라서du의 출력은 항상 4096바이트 단위로 전환되지 않는다.실현이 확인되면 이 상황에서
stat.st_size
의 값을 되돌려줍니다.coreutils/src/du.c
duinfo_set (&dui,
(apparent_size
? MAX (0, sb->st_size) /* HERE */
: (uintmax_t) ST_NBLOCKS (*sb) * ST_NBLOCKSIZE),
(time_type == time_mtime ? get_stat_mtime (sb)
: time_type == time_atime ? get_stat_atime (sb)
: get_stat_ctime (sb)));
wc read。。。꼭 그렇지는 않다
wc를 선택적으로 실행하지 않으면 대상의 파일을 읽고 lines,words,bytes를 출력합니다.
$ echo -n 12345 > xxx
$ wc xxx
0 1 5 xxx
$ strace wc xxx 2>&1 >/dev/null
...
openat(AT_FDCWD, "xxx", O_RDONLY) = 3
fadvise64(3, 0, 0, POSIX_FADV_SEQUENTIAL) = 0
read(3, "12345", 16384) = 5
read(3, "", 16384) = 0
...
words,lines를 얻기 위해서는 파일의 내용을 읽어야 합니다.한편,
wc -c
에서bytes만 획득한 경우read를 하지 않고 사이즈를 되돌려주는 동작.$ wc -c xxx
5 xxx
$ strace wc -c xxx 2>&1 >/dev/null
...
openat(AT_FDCWD, "xxx", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0664, st_size=5, ...}) = 0
...
fstat(2)에서stat구조를 가져오고 stat.st_size
의 값을 되돌려줍니다.du 파일을 열지 않음
wc는 파일을 열어 크기를 얻지만 du는 파일을 열지 않고 fstatat(2)를 통해 크기를 얻습니다.
따라서 두라면 접근 허가를 읽지 않은 파일의 크기도 얻을 수 있지만 wc라면 오류가 발생할 수 있습니다.
$ echo -n 12345 > xxx
$ chmod -r xxx
$ ls -l xxx
--w--w---- 1 vagrant vagrant 5 Mar 21 22:13 xxx
$ du -b xxx
5 xxx
$ wc -c xxx
wc: xxx: Permission denied
총결산
Reference
이 문제에 관하여(du와 wc의 차이), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/yoichi/articles/difference-between-du-and-wc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)