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

배쉬 전문가가 저를 도와줄 수 있나요?

감사해요

답변1

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

답변2

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(패딩 없이) 그냥 읽습니다.

그런 다음 (괄호 안의) 연결된 스트림을 모두 최대 KB 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.

관련 정보