溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

linux cpio有哪些操作模式

發(fā)布時間:2023-02-09 14:08:51 來源:億速云 閱讀:118 作者:iii 欄目:建站服務(wù)器

今天小編給大家分享一下linux cpio有哪些操作模式的相關(guān)知識點,內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

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

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

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

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

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

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

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

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

[root@initroot ~]# cpio -ovcB > [file|device] #備份
[root@initroot ~]# cpio -ivcdu < [file|device] #還原
[root@initroot ~]# cpio -ivct < [file|device] #察看

copy-out模式(備份)用到的選項與參數(shù):

  • -o :將數(shù)據(jù)copy輸出到文件或設(shè)備上

  • -B :讓預(yù)設(shè)的Blocks可以增加至5120bytes ,預(yù)設(shè)是512bytes!這樣的好處是可以讓大文件的儲存速度加快(請參考 i-nodes 的觀念)

copy-in模式(還原)用到的選項與參數(shù):

  • -i :將數(shù)據(jù)自文件或設(shè)備copy出來系統(tǒng)當(dāng)中

  • -d :自動建立目錄!使用cpio所備份的數(shù)據(jù)內(nèi)容不見得會在同一層目錄中,因此我們必須要讓cpio在還原時可以建立新目錄,此時就得要-d選項的幫助!

  • -u :自動的將較新的文件覆蓋較舊的文件!

  • -t :需配合-i選項,可用在"察看"以 cpio 建立的文件或設(shè)備的內(nèi)容

通用的選項與參數(shù):

  • -v :讓儲存的過程中文件名可以在屏幕上顯示

  • -c :一種較新的portable format方式儲存

cpio從標(biāo)準(zhǔn)輸入讀入數(shù)據(jù),將處理過的數(shù)據(jù)輸出到標(biāo)準(zhǔn)輸出,所以cpio需要配合管道和重定向符號使用。

找出/boot目錄下的所有文件,備份到/tmp/boot.cpio歸檔包文件中:

[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 > /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,通過重定向符號>將歸檔數(shù)據(jù)輸出到/tmp/boot.cpio文件! 上面find的參數(shù)boot為相對路徑,而不是絕對路徑,cpio不會對路徑做特殊處理,給的什么數(shù)據(jù)它就接收什么數(shù)據(jù)。 所以如果這里用絕對路徑的話,那么find命令的輸出也是也是絕對路徑,cpio接收的也是絕對路徑, 那么當(dāng)從歸檔文件中復(fù)制文件的時候,因為是絕對路徑,那么復(fù)制出來的文件就一定會覆蓋掉原本/boot目中的文件! 這是非常危險的!所以再用find命令配合cpio打包文件的時候,一定要用相對路徑。

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

[root@initroot ~]# cd ~
[root@initroot ~]# cpio -idvc < /tmp/boot.cpio
[root@initroot ~]# ls -al /root/boot

可以看出/root/boot與/boot的內(nèi)容一模一樣!

cpio可以將系統(tǒng)的數(shù)據(jù)完整的備份到磁帶機上:

[root@initroot ~]# find / | cpio -ocvB > /dev/st0

從磁帶機中還原數(shù)據(jù):

[root@initroot ~]# cpio -idvc < /dev/st0

cpio可以備份任何的文件, 包括/dev下的設(shè)備文件!是非常重要的命令!

cpio必需要配合其他的程序,例如find來建立文件名,所以cpio與管線命令及數(shù)據(jù)流重導(dǎo)向有非常密切的關(guān)系!

事實上/boot目錄下的/boot/initramfs-xxx或者/boot/initrd.img-xxx-generic文件也是一個cpio歸檔包文件。

我們可以將該文件解開到/tmp/initramfs目錄下看看這個歸檔包中都有哪些文件:

[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 < /boot/initrd.img-4.15.0-65-generic
.
kernel
kernel/x86
kernel/x86/microcode
kernel/x86/microcode/AuthenticAMD.bin
56 blocks

注意這里將-c選項去掉,如果加上-c選項的話,cpio會出現(xiàn)如下提示:

cpio: premature end of file

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

以上就是“l(fā)inux cpio有哪些操作模式”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學(xué)習(xí)更多的知識,請關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI