linux cpio三種操作模式是什么

cpio三種操作模式:1、copy-out模式,用于打包備份文件,會把文件復制到歸檔包中;2、copy-in模式,用于從歸檔包文件中恢復文件,可以從標準輸入讀入歸檔包,將歸檔包中的文件讀出或者列出歸檔包里的內容;3、copy-pass模式,用于把文件從一棵目錄樹復制到另一棵。

linux cpio三種操作模式是什么

本教程操作環境:linux7.3系統、Dell G3電腦。

linux中,cpio是一種數據備份與恢復工具,用于創建cpio檔案文件,從檔案文件中抽取文件,或者把文件從一個目錄復制到另外一個目錄。生成的檔案文件可以是一個磁盤文件,也可以寫入磁帶等數據流介質。cpio不僅能夠處理二進制與ASCII頭數據格式的cpio檔案文件,也能夠讀寫各種tar格式的檔案文件。為了保持兼容,如果不特別指定,cpio通常仍然創建二進制頭數據格式的檔案文件。

cpio類似tar命令,可以將文件復制打包到cpio或tar格式的歸檔包文件中,也可以從歸檔包文件中復制文件。 歸檔包文件可以是磁盤上的文件, 也可以是磁帶等設備文件。

從檔案文件中抽取文件時,cpio命令能夠自動識別讀取的是哪一種檔案文件,而且也能讀取在不同的系統中創建的具有不同字節順序的檔案文件。

cpio有三種操作模式,如下表所示:

cpio三種操作模式
cpio三種操作模式
操作模式 模式說明
copy-out模式 該模式用于打包備份文件。
? ? ? ? ? ? ? ?cpio把文件復制到歸檔包中。cpio要打包的文件名來自標準輸入,它從標準輸入獲得文件名列表,一行一個。 ? ? ? ? ? ? ? ?一般通過管道來將標準輸入重定向到另一個命令的輸出。最常見的方法是使用find命令生成文件名列表,然后通過管道傳送給cpio, ? ? ? ? ? ? ? ?這樣cpio就可以知道要備份的數據來自哪里。需要在find后面加上-depth選項, 減少因為進入沒有訪問權限的目錄而引起的麻煩。
? ? ? ? ? ? ? ?cpio默認把歸檔包文件寫到標準輸出,所以需要用重定向符號>或者>>將歸檔包數據輸出重定向到一個文件中。
copy-in模式 該模式用于從歸檔包文件中恢復文件。
? ? ? ? ? ? ? ?cpio它從標準輸入讀入歸檔包,將歸檔包中的文件讀出或者列出歸檔包里的內容。cpio將從歸檔包中讀出的數據寫到標準輸出。
copy-pass模式 cpio把文件從一棵目錄樹復制到另一棵, 它結合了 copy-in 和 copy-out 的操作, 但不使用歸檔包。 ? ? ? ? ? ? ? ?cpio從標準輸入讀取欲復制的文件名列表; 目標目錄作為非選項的命令行參數給出。

cpio支持下列的歸檔包格式: binary, old ASCII, new ASCII, crc, HPUX binary, HPUX old ASCII, old tar, 和 POSIX.1 tar。

cpio的某些選項只能用在對應的操作模式上,常用的命令選項格式如下所示:

[root@initroot?~]#?cpio?-ovcB?&gt;?[file|device]?#備份 [root@initroot?~]#?cpio?-ivcdu?<blockquote> <p><strong>copy-out模式(備份)用到的選項與參數:</strong></p> <ul style="list-style-type: disc;"> <li><p>-o :將數據copy輸出到文件或設備上</p></li> <li><p>-B :讓預設的Blocks可以增加至5120bytes ,預設是512bytes!這樣的好處是可以讓大文件的儲存速度加快(請參考 i-nodes 的觀念)</p></li> </ul> <p><strong>copy-in模式(還原)用到的選項與參數:</strong></p> <ul style="list-style-type: disc;"> <li><p>-i :將數據自文件或設備copy出來系統當中</p></li> <li><p>-d :自動建立目錄!使用cpio所備份的數據內容不見得會在同一層目錄中,因此我們必須要讓cpio在還原時可以建立新目錄,此時就得要-d選項的幫助!</p></li> <li><p>-u :自動的將較新的文件覆蓋較舊的文件!</p></li> <li><p>-t :需配合-i選項,可用在"察看"以 cpio 建立的文件或設備的內容</p></li> </ul> <p><strong>通用的選項與參數:</strong></p> <ul style="list-style-type: disc;"> <li><p>-v :讓儲存的過程中文件名可以在屏幕上顯示</p></li> <li><p>-c :一種較新的portable format方式儲存</p></li> </ul> </blockquote><p>cpio從標準輸入讀入數據,將處理過的數據輸出到標準輸出,所以cpio需要配合管道和重定向符號使用。</p><p>找出/boot目錄下的所有文件,備份到/tmp/boot.cpio歸檔包文件中:</p><pre class="brush:js;toolbar:false">[root@initroot?~]#?cd?/ [root@initroot?/]#?find?boot?-print boot boot/grub boot/grub/gfxblacklist.txt boot/grub/unicode.pf2 boot/grub/locale ...省略...

find命令可以找出boot目錄下所有的文件,包括文件與目錄!注意這里的boot為相對路徑,而不是絕對路徑!

[root@initroot?/]#?find?boot?|?cpio?-ocvB?&gt;?/tmp/boot.cpio  [root@initroot?/]#?ls?-lh?/tmp/boot.cpio -rw-r--r--?1?peter?peter?193M?Feb?10?15:59?/tmp/boot.cpio [root@initroot?~]#?file?/tmp/boot.cpio /tmp/boot.cpio:?ASCII?cpio?archive?(pre-SVR4?or?odc)

使用find boot找出文件名,通過管道線|將輸出傳給cpio,通過重定向符號>將歸檔數據輸出到/tmp/boot.cpio文件! 上面find的參數boot為相對路徑,而不是絕對路徑,cpio不會對路徑做特殊處理,給的什么數據它就接收什么數據。 所以如果這里用絕對路徑的話,那么find命令的輸出也是也是絕對路徑,cpio接收的也是絕對路徑, 那么當從歸檔文件中復制文件的時候,因為是絕對路徑,那么復制出來的文件就一定會覆蓋掉原本/boot目中的文件! 這是非常危險的!所以再用find命令配合cpio打包文件的時候,一定要用相對路徑。參考tar命令的-P選項!!

現在將歸檔包文件/tmp/boot.cpio解開到/root/目錄下:

[root@initroot?~]#?cd?~ [root@initroot?~]#?cpio?-idvc?<p>可以看出/root/boot與/boot的內容一模一樣!</p><p>cpio可以將系統的數據完整的備份到磁帶機上:</p><pre class="brush:js;toolbar:false">[root@initroot?~]#?find?/?|?cpio?-ocvB?&gt;?/dev/st0

從磁帶機中還原數據:

[root@initroot?~]#?cpio?-idvc?<p>cpio可以備份任何的文件, 包括/dev下的設備文件!是非常重要的命令!</p><p>cpio必需要配合其他的程序,例如find來建立文件名,所以cpio與管線命令及數據流重導向有非常密切的關系!</p><p>事實上/boot目錄下的/boot/initramfs-xxx或者/boot/initrd.img-xxx-Generic文件也是一個cpio歸檔包文件。</p><p>我們可以將該文件解開到/tmp/initramfs目錄下看看這個歸檔包中都有哪些文件:</p><pre class="brush:js;toolbar:false">[root@initroot?~]#?file?initrd.img-4.15.0-65-generic initrd.img-4.15.0-65-generic:?ASCII?cpio?archive?(SVR4?with?no?CRC) [root@initroot?~]#?mkdir?/tmp/initramfs [root@initroot?~]#?cd?/tmp/initramfs [root@initroot?initramfs]#?cpio?-idv?<p>注意這里將-c選項去掉,如果加上-c選項的話,cpio會出現如下提示:</p><pre class="brush:js;toolbar:false">cpio:?premature?end?of?file

將-c選項去掉就可以成功解壓歸檔包文件了!

相關推薦:《Linux視頻教程

以上就是

? 版權聲明
THE END
喜歡就支持一下吧
點贊13 分享