~ 후에OP의 코멘트/dev/stdout
, 버퍼링을 비활성화한 후에도 10KiB 청크를 제공하는 것으로 나타났지만 -
그렇지 않습니다. 왜 이런거야? man tar
Nor 에서는 이와 관련된 내용을 찾을 수 없습니다 man stdout
.
참고, /dev/stdout
가 00002800
, 아니 000000a1
. 널 바이트로 패딩한 것을 제외하면 출력이 정확합니다.
> mkdir -p /tmp/747613
> cd /tmp/747613
> echo 747613 > file.txt
> tar czf /tmp/archive_tgz .
> hd /tmp/archive_tgz
00000000 1f 8b 08 00 00 00 00 00 00 03 ed d1 41 0a c2 30 |............A..0|
00000010 10 85 e1 ac 3d 45 4e 90 66 9a 49 72 9e 2e 22 08 |....=EN.f.Ir..".|
00000020 ea a2 46 f0 f8 a6 8b a2 9b 76 21 04 11 ff 6f f3 |..F......v!...o.|
00000030 20 33 90 81 e7 06 d3 9d 6f 72 8e 4b 4a 8e fe 3d | 3......or.KJ..=|
00000040 57 46 54 43 6c 8f 69 6c 7b 22 da c6 36 f6 3f cd |WFTCl.il{"..6.?.|
00000050 98 fb ad 4e b3 b5 2d cb 7c 9d 2e 65 7b 6f 7f fe |...N..-.|..e{o..|
00000060 a3 dc 70 3c 9d 8b ab 8f da ef 8f a5 e0 94 74 a7 |..p<..........t.|
00000070 ff bc f6 2f 41 a5 f5 1f 64 14 63 7d bf 93 5e fe |.../A...d.c}..^.|
00000080 bc ff ac 39 49 38 7c fb 0c 00 00 00 00 00 00 00 |...9I8|.........|
00000090 00 00 00 00 00 00 1f 78 02 88 2a 27 ac 00 28 00 |.......x..*'..(.|
*
000000a1
> tar czf /dev/stdout . | hd
00000000 1f 8b 08 00 00 00 00 00 00 03 ed d1 41 0a c2 30 |............A..0|
00000010 10 85 e1 ac 3d 45 4e 90 66 9a 49 72 9e 2e 22 08 |....=EN.f.Ir..".|
00000020 ea a2 46 f0 f8 a6 8b a2 9b 76 21 04 11 ff 6f f3 |..F......v!...o.|
00000030 20 33 90 81 e7 06 d3 9d 6f 72 8e 4b 4a 8e fe 3d | 3......or.KJ..=|
00000040 57 46 54 43 6c 8f 69 6c 7b 22 da c6 36 f6 3f cd |WFTCl.il{"..6.?.|
00000050 98 fb ad 4e b3 b5 2d cb 7c 9d 2e 65 7b 6f 7f fe |...N..-.|..e{o..|
00000060 a3 dc 70 3c 9d 8b ab 8f da ef 8f a5 e0 94 74 a7 |..p<..........t.|
00000070 ff bc f6 2f 41 a5 f5 1f 64 14 63 7d bf 93 5e fe |.../A...d.c}..^.|
00000080 bc ff ac 39 49 38 7c fb 0c 00 00 00 00 00 00 00 |...9I8|.........|
00000090 00 00 00 00 00 00 1f 78 02 88 2a 27 ac 00 28 00 |.......x..*'..(.|
000000a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00002800
> # Even with buffering disabled
> stdbuf -i0 -o0 -e0 tar czf /dev/stdout . | stdbuf -i0 -o0 -e0 hd
00000000 1f 8b 08 00 00 00 00 00 00 03 ed d1 41 0a c2 30 |............A..0|
00000010 10 85 e1 ac 3d 45 4e 90 66 9a 49 72 9e 2e 22 08 |....=EN.f.Ir..".|
00000020 ea a2 46 f0 f8 a6 8b a2 9b 76 21 04 11 ff 6f f3 |..F......v!...o.|
00000030 20 33 90 81 e7 06 d3 9d 6f 72 8e 4b 4a 8e fe 3d | 3......or.KJ..=|
00000040 57 46 54 43 6c 8f 69 6c 7b 22 da c6 36 f6 3f cd |WFTCl.il{"..6.?.|
00000050 98 fb ad 4e b3 b5 2d cb 7c 9d 2e 65 7b 6f 7f fe |...N..-.|..e{o..|
00000060 a3 dc 70 3c 9d 8b ab 8f da ef 8f a5 e0 94 74 a7 |..p<..........t.|
00000070 ff bc f6 2f 41 a5 f5 1f 64 14 63 7d bf 93 5e fe |.../A...d.c}..^.|
00000080 bc ff ac 39 49 38 7c fb 0c 00 00 00 00 00 00 00 |...9I8|.........|
00000090 00 00 00 00 00 00 1f 78 02 88 2a 27 ac 00 28 00 |.......x..*'..(.|
000000a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00002800
> # Works fine (- means stdout)
> tar czf - . | hd
00000000 1f 8b 08 00 00 00 00 00 00 03 ed d1 41 0a c2 30 |............A..0|
00000010 10 85 e1 ac 3d 45 4e 90 66 9a 49 72 9e 2e 22 08 |....=EN.f.Ir..".|
00000020 ea a2 46 f0 f8 a6 8b a2 9b 76 21 04 11 ff 6f f3 |..F......v!...o.|
00000030 20 33 90 81 e7 06 d3 9d 6f 72 8e 4b 4a 8e fe 3d | 3......or.KJ..=|
00000040 57 46 54 43 6c 8f 69 6c 7b 22 da c6 36 f6 3f cd |WFTCl.il{"..6.?.|
00000050 98 fb ad 4e b3 b5 2d cb 7c 9d 2e 65 7b 6f 7f fe |...N..-.|..e{o..|
00000060 a3 dc 70 3c 9d 8b ab 8f da ef 8f a5 e0 94 74 a7 |..p<..........t.|
00000070 ff bc f6 2f 41 a5 f5 1f 64 14 63 7d bf 93 5e fe |.../A...d.c}..^.|
00000080 bc ff ac 39 49 38 7c fb 0c 00 00 00 00 00 00 00 |...9I8|.........|
00000090 00 00 00 00 00 00 1f 78 02 88 2a 27 ac 00 28 00 |.......x..*'..(.|
*
000000a1
답변1
행동의 차이는 다음과 같습니다 tar
. 글을 쓸 때 적용됩니다.차단 요인"는 기본적으로 10240바이트의 레코드(예: 16진수 2800)를 사용합니다. 이는 압축하는 경우에도 발생하므로 일부 타르볼은 gzip
추출할 때 오류 메시지를 발생시킵니다. 추출할 때 이 동작은 아카이브 끝에서 비활성화됩니다. 일반 파일 또는 표준 출력(설명서에는 다르게 나와 있지만).
/dev/stdout
쓰기 를 하면 tar
장치에 쓰는 것으로 간주되어 차단 요소가 적용됩니다. 차단 요소를 변경하여 이를 확인할 수 있습니다.
$ tar czfb /dev/stdout 1 . | hd
00000000 1f 8b 08 00 00 00 00 00 00 03 ed d1 31 0e 83 30 |............1..0|
00000010 0c 05 50 cf 9c 22 27 08 76 b0 e3 f3 74 48 25 24 |..P.."'.v...tH%$|
00000020 26 08 88 e3 03 43 55 c4 00 53 8a 2a fc 16 0f b6 |&....CU..S.*....|
00000030 e4 2f 7d 5f 43 71 b8 52 91 6d 92 0a ee e7 07 10 |./}_Cq.R.m......|
00000040 73 13 31 10 62 04 24 0c 2c e0 a4 7c 34 80 71 c8 |s.1.b.$.,..|4.q.|
00000050 af de 39 18 72 9a d2 c9 dd d5 fe 4f f9 fa dd 76 |..9.r......O...v|
00000060 c9 e7 39 97 fb b1 15 1c 99 4f fa d7 43 ff a4 21 |..9......O..C..!|
00000070 80 c3 72 91 be 1e de bf b2 46 6a aa bb 63 18 63 |..r......Fj..c.c|
00000080 8c f9 b1 05 02 0c 89 df 00 0a 00 00 00 00 00 00 |................|
00000090 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00000200