bash 中奇怪的 dd 命令複合列表

bash 中奇怪的 dd 命令複合列表

我剛剛遇到了以下bash 構造,我知道這稱為複合列表,並且這三個cat 命令是在子shell 環境中執行的,我不明白的是管道如何安裝在那裡,更一般地說,它是如何工作的。我真的很感激一步一步的解釋。

它是二進位影像生成腳本的一部分,所以我已經知道它的作用,但我不知道它是如何到達那裡的:

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,填滿到 128 KB。與第二個相同,第三個直接被 cat'ed(也與 /dev/zero 一起)。然後管道獲取所有三個的輸出並保存到大小為 $SIZE 的檔案中。這將建立一個文件,其中 file1 在 128 KB 區塊中,然後 file2 在另一個 128 KB 區塊中,然後 file3 用填充填充其餘部分。

答案2

命令cat控制產生作為參數給出的所有文件。
所以:

cat $DIR/file1 /dev/zero

從開始到以下命令願意讀取file1為止與零連接。/dev/zero下一個命令(在管道中|)是$DD count=128,這意味著 128 1k blocks(注意變數定義中的 bs=1k)將被讀取並寫入到 stdout。

簡而言之:讀取file1並用零填充最多 128k。

下一個命令列非常相似:

讀取file2並用零填充最多 128k。

最後一行只讀取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.

相關內容