Bash의 이상한 dd 명령 복합 목록

Bash의 이상한 dd 명령 복합 목록

방금 다음 bash 구성을 발견했습니다. 이것이 복합 목록이라고 불리며 세 개의 cat 명령이 하위 쉘 환경에서 실행된다는 것을 알고 있습니다. 내가 이해하지 못하는 것은 파이프가 거기에 설치되는 방식과 더 일반적으로 작동하는 방식입니다. 단계별 설명 정말 감사드립니다.

이는 바이너리 이미지 생성 스크립트의 일부이므로 이미 무엇을 하는지는 알고 있지만 어떻게 거기까지 가는지는 모르겠습니다.

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 전문가가 있나요?

감사해요

답변1

패딩을 사용하여 세 파일을 모두 하나로 연결하려는 것 같습니다. 첫 번째 고양이는 파일에 /dev/zero를 추가하여 128KB로 채웁니다. 두 번째 것과 동일하며, 세 번째도 직접적으로 분류됩니다(또한 /dev/zero를 사용하여). 그런 다음 파이프라인은 세 가지 출력 모두를 가져와 $SIZE 크기의 파일에 저장합니다. 그러면 file1이 128KB 블록에 있고, file2가 또 다른 128KB 블록에 있고, file3이 나머지 부분을 패딩으로 채우는 파일이 생성됩니다.

답변2

명령 cat제어고양이인수로 제공된 모든 파일을 생성합니다.
그래서:

cat $DIR/file1 /dev/zero

다음 명령이 읽을 의향이 있을 때까지 처음부터 file10으로 연결합니다 . /dev/zero파이프의 다음 명령 |은 입니다 $DD count=128. 이는 128 1k blocks(변수 정의에서 bs=1k 참고)을 읽고 stdout에 기록한다는 의미입니다.

즉, 최대 file1128k를 읽고 0으로 채웁니다.

다음 명령줄은 매우 유사합니다.

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

마지막 행은 읽기 전용입니다 file3(패딩 없음).

그런 다음 연결된 모든 스트림(괄호 안)이 반환되어 최대 킬로바이트 까지 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.

관련 정보