bash에서 dd 명령의 이상한 복합 목록


0

방금 다음 bash 구성을 가로 질러 실행했습니다. 이것은 복합 목록이라고 하며이 세 가지 고양이 명령이 서브 쉘 환경에서 실행된다는 것을 이해합니다. 단계별 설명으로 정말 감사하겠습니다.

이진 이미지 생성 스크립트의 일부이므로 내가하는 일을 알고 있으며, 얻지 못하는 것은 그것이 어떻게 도착하는지입니다.

export DD="dd status=noxfer bs=1k iflag=fullblock"
(
    cat $DIR/file1 /dev/zero | $DD count=128
    cat $DIR/file2 /dev/zero | $DD count=128
    cat $DIR/file3 /dev/zero
) | $DD of=$OUT_FILE count=$SIZE

거기에 일부 배쉬 전문가가 나를 도울 수 있습니까?

감사

bash  dd 

답변:


1

세 파일을 모두 패딩으로 하나로 연결하려고하는 것 같습니다. 첫 번째 고양이는 파일과 / dev / zero를 128 바이트로 채 웁니다. 두 번째와 동일하며, 세 번째는 직접 / cat / zero와 직접 연결됩니다. 그런 다음 파이프는 세 가지 출력을 모두 가져와 $ SIZE 크기의 파일로 저장합니다. 이렇게하면 128 바이트 블록에 file1이 있고 다른 128 바이트 블록에 file2가있는 나머지 하나의 파일이 만들어진 다음 file3이 나머지를 채 웁니다.


이것은 또한 이것에 대한 나의 독서 일 것입니다. 하지만 당신은 ;-) 나보다 더 빨리했다

128KB로 채워집니다. bs = 1k 매개 변수를 참고하십시오.
Eric

예, 당신 말이 맞아요 다른 옵션은 내가 구체적으로 찾았 기 때문에 내 마음에 있었지만, 나는 항상 그 옵션을 사용했기 때문에 미끄러졌습니다.
lsd

0

명령 catcon cat 은 인수로 지정된 모든 파일을 열거합니다.
그래서:

cat $DIR/file1 /dev/zero

다음 명령을 읽을 때까지 file10으로 연결 /dev/zero합니다. 파이프에서 다음 명령 |$DD count=128입니다. 즉, 128 1k blocks(변수 정의에서 bs = 1k 참고)을 읽고 stdout에 씁니다.

한마디로 : file1최대 128k까지 0으로 읽고 채 웁니다.

다음 명령 줄은 매우 비슷합니다.

file2최대 128k의 0으로 읽고 채 웁니다.

그리고 마지막 줄은 file3(패딩없이)를 읽습니다 .

그런 다음 (괄호 안에) 연결된 스트림이 모두 최대 kbyte 까지 dd기록됩니다 .$OUT_FILE$SIZE

한마디로 :

read all from file1 and pad with zeros up to 128k.
read all from file2 and pad with zeros up to 128k.
read all from file3.

그때:

Write all that was read to `$OUT_FILE` up to `$SIZE` kBytes.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.