1. 程式人生 > >cpio檔案系統的解壓和製作方法

cpio檔案系統的解壓和製作方法

cpio解壓方法:     1.  # gunzip  XXX.cpio.gz     2. cpio -idmv < XXX.cpio 製作cpio格式檔案系統的方法:     1. 執行gen_initramfs_list.sh指令碼:     # gen_initramfs_list.sh ./Filesystem/ >filelist       其中Filesystem資料夾是由上一步解壓出來的cpio檔案系統目錄     2. 執行gen_init_cpio產生cpio檔案:     #  gen_init_cpio filelist >rootfs.cpio
    3. 壓縮cpio生成cpio.gz檔案: #  gzip rootfs.cpio 所使用檔案說明: gen_initramfs_list.sh:用於產生filelist gen_init_cpio.c :工具gen_init_cpio的原始碼,編譯後可以用 gen_init_cpio:用於產生cpio格式檔案系統的可執行檔案 gen_initramfs_list.sh的原始碼:
[plain] view plain copy  print?在CODE上檢視程式碼片派生到我的程式碼片
  1. #!/bin/sh  
  2. # Copyright (C) Martin Schlemmer <
    [email protected]
    >  
  3. # Copyright (C) 2006 Sam Ravnborg <[email protected]>  
  4. #  
  5. # Released under the terms of the GNU GPL  
  6. #  
  7. # Generate a cpio packed initramfs. It uses gen_init_cpio to generate  
  8. # the cpio archive, and then compresses it.  
  9. # The script may also be used to generate the inputfile used for gen_init_cpio  
  10. # This script assumes that gen_init_cpio is located in usr/ directory  
  11. # error out on errors  
  12. set -e  
  13. usage() {  
  14. cat << EOF  
  15. Usage:  
  16. $0 [-o <file>] [-u <uid>] [-g <gid>] {-d | <cpio_source>} ...  
  17.     -o <file>      Create compressed initramfs file named <file> using  
  18.                gen_init_cpio and compressor depending on the extension  
  19.     -u <uid>       User ID to map to user ID 0 (root).  
  20.                <uid> is only meaningful if <cpio_source> is a  
  21.                directory.  "squash" forces all files to uid 0.  
  22.     -g <gid>       Group ID to map to group ID 0 (root).  
  23.                <gid> is only meaningful if <cpio_source> is a  
  24.                directory.  "squash" forces all files to gid 0.  
  25.     <cpio_source>  File list or directory for cpio archive.  
  26.                If <cpio_source> is a .cpio file it will be used  
  27.                as direct input to initramfs.  
  28.     -d             Output the default cpio list.  
  29. All options except -o and -l may be repeated and are interpreted  
  30. sequentially and immediately.  -u and -g states are preserved across  
  31. <cpio_source> options so an explicit "-u 0 -g 0" is required  
  32. to reset the root/group mapping.  
  33. EOF  
  34. }  
  35. # awk style field access  
  36. # $1 - field number; rest is argument string  
  37. field() {  
  38.     shift $1 ; echo $1  
  39. }  
  40. list_default_initramfs() {  
  41.     # echo usr/kinit/kinit  
  42.     :  
  43. }  
  44. default_initramfs() {  
  45.     cat <<-EOF >> ${output}  
  46.         # This is a very simple, default initramfs  
  47.         dir /dev 0755 0 0  
  48.         nod /dev/console 0600 0 0 c 5 1  
  49.         dir /root 0700 0 0  
  50.         # file /kinit usr/kinit/kinit 0755 0 0  
  51.         # slink /init kinit 0755 0 0  
  52.     EOF  
  53. }  
  54. filetype() {  
  55.     local argv1="$1"  
  56.     # symlink test must come before file test  
  57.     if [ -L "${argv1}" ]; then  
  58.         echo "slink"  
  59.     elif [ -f "${argv1}" ]; then  
  60.         echo "file"  
  61.     elif [ -d "${argv1}" ]; then  
  62.         echo "dir"  
  63.     elif [ -b "${argv1}" -o -c "${argv1}" ]; then  
  64.         echo "nod"  
  65.     elif [ -p "${argv1}" ]; then  
  66.         echo "pipe"  
  67.     elif [ -S "${argv1}" ]; then  
  68.         echo "sock"  
  69.     else  
  70.         echo "invalid"  
  71.     fi  
  72.     return 0  
  73. }  
  74. list_print_mtime() {  
  75.     :  
  76. }  
  77. print_mtime() {  
  78.     local my_mtime="0"  
  79.     if [ -e "$1" ]; then  
  80.         my_mtime=$(find "$1" -printf "%[email protected]\n" | sort -r | head -n 1)  
  81.     fi  
  82.     echo "# Last modified: ${my_mtime}" >> ${output}  
  83.     echo "" >> ${output}  
  84. }  
  85. list_parse() {  
  86.     [ ! -L "$1" ] && echo "$1 \\" || :  
  87. }  
  88. # for each file print a line in following format  
  89. # <filetype> <name> <path to file> <octal mode> <uid> <gid>  
  90. # for links, devices etc the format differs. See gen_init_cpio for details  
  91. parse() {  
  92.     local location="$1"  
  93.     local name="/${location#${srcdir}}"  
  94.     # change '//' into '/'  
  95.     name=$(echo "$name" | sed -e 's://*:/:g')  
  96.     local mode="$2"  
  97.     local uid="$3"  
  98.     local gid="$4"  
  99.     local ftype=$(filetype "${location}")  
  100.     # remap uid/gid to 0 if necessary  
  101.     [ "$root_uid" = "squash" ] && uid=0 || [ "$uid" -eq "$root_uid" ] && uid=0  
  102.     [ "$root_gid" = "squash" ] && gid=0 || [ "$gid" -eq "$root_gid" ] && gid=0  
  103.     local str="${mode} ${uid} ${gid}"  
  104.     [ "${ftype}" = "invalid" ] && return 0  
  105.     [ "${location}" = "${srcdir}" ] && return 0  
  106.     case "${ftype}" in  
  107.         "file")  
  108.             str="${ftype} ${name} ${location} ${str}"  
  109.             ;;  
  110.         "nod")  
  111.             local dev=`LC_ALL=C ls -l "${location}"`  
  112.             local maj=`field 5 ${dev}`  
  113.             local min=`field 6 ${dev}`  
  114.             maj=${maj%,}  
  115.             [ -b "${location}" ] && dev="b" || dev="c"  
  116.             str="${ftype} ${name} ${str} ${dev} ${maj} ${min}"  
  117.             ;;  
  118.         "slink")  
  119.             local target=`readlink "${location}"`  
  120.             str="${ftype} ${name} ${target} ${str}"  
  121.             ;;  
  122.         *)  
  123.             str="${ftype} ${name} ${str}"  
  124.             ;;  
  125.     esac  
  126.     echo "${str}" >> ${output}  
  127.     return 0  
  128. }  
  129. unknown_option() {  
  130.     printf "ERROR: unknown option \"$arg\"\n" >&2  
  131.     printf "If the filename validly begins with '-', " >&2  
  132.     printf "then it must be prefixed\n" >&2  
  133.     printf "by './' so that it won't be interpreted as an option." >&2  
  134.     printf "\n" >&2  
  135.     usage >&2  
  136.     exit 1  
  137. }  
  138. list_header() {  
  139.     :  
  140. }  
  141. header() {  
  142. 相關推薦

    cpio檔案系統製作方法

    cpio解壓方法:     1.  # gunzip  XXX.cpio.gz     2. cpio -idmv < XXX.cpio 製作cpio格式檔案系統的方法:     1. 執行gen_initramfs_list

    gz檔案壓縮

    Linux壓縮保留原始檔的方法:gzip –c filename > filename.gzLinux解壓縮保留原始檔的方法:gunzip –c filename.gz > filenamegunzip的用法 1.作用gunzip命令作用是解壓檔案,使用許可權是所有使用者。2.格式gunzip [

    Mac上zip,rar,tar檔案命令壓縮

    經常遇到在windowns上的壓縮檔案,在mac上解壓出現問題,特意總結了下在Terminal裡常用命令的方式解壓和壓縮檔案 1、zip壓縮檔案 zip命令的引數很多,可以利用"zip --help"

    Linux 檔案壓縮 —— gzip命令

    一、gzip 命令的用途 gzip 是在 Linux 系統中經常使用的一個對檔案進行壓縮和解壓縮的命令 減少檔案大小有兩個明顯的好處,一是可以減少儲存空間,二是通過網路傳輸檔案時,可以減少傳輸的時間

    linux下zip檔案、7z檔案壓縮

    linux下zip檔案的解壓命令:unzip;壓縮命令:zip。具體參考文章1。 linux下7z檔案的解壓命令:7za x;壓縮命令:7za a。具體參考文章2. 注意: 1、linux預設情況下沒有安裝7z檔案的解壓縮命令,需要安裝。 2、線上安裝命令為:sudo ap

    xz檔案壓縮

    建立或解壓tar.xz檔案的方法 習慣了 tar czvf 或 tar xzvf 的人可能碰到 tar.xz也會想用單一命令搞定解壓或壓縮。其實不行 tar裡面沒有徵對xz格式的引數比如 z是針對 gzip,j是針對 bzip2。

    centos7 tar.xz格式檔案方法

    現在很多找到的軟體都是tar.xz的格式的,xz 是一個使用 LZMA壓縮演算法的無損資料壓縮檔案格式。 和gzip與bzip2一樣,同樣支援多檔案壓縮,但是約定不能將多於一個的目標檔案壓縮排同一個檔案檔案。 相反,xz通常作為一種歸檔檔案自身的壓縮格式,例如使用tar或cpioUnix程式建立的歸檔。

    tar、tgz、gz檔案批量方法

    我是用for i in $(ls *.tgz);do tar xvf $i;done 批量解壓的tgz檔案的我是用for i in $(ls *.gz);do gzip -d $i;done批量解壓的gz檔案的。由於linux的tar命令不支援批量解壓,所以很多網友編寫了好多支援批量解壓的shell命令,收集

    Linux下tar.xz結尾的檔案方法

    今天嘗試編譯核心,下載到了一份tar.xz結尾的壓縮檔案,網上解決方法比較少,不過還是找到了,如下: $xz -d ***.tar.xz $tar -xvf  ***.tar       可以看到這個壓縮包也是打包後再壓縮,外面是xz壓縮方式,裡層是tar打包方式。

    記一次python3 大檔案操作

     先說下:所謂的大檔案並不是壓縮檔案有多大,幾十兆的檔案而是解壓後幾百兆。其中就遇到解壓不成功的情況.、讀小檔案時成功,大檔案時失敗等 def unzip_to_txt_plus(zipfilename): zfile = zipfile.ZipFile(zipf

    win10安裝mysql方法及遇見的問題(缺少MSVCR120.dll檔案、服務無法啟動)

    WIN10系統MYSQL的下載與安裝詳細教程第一步:下載MySQL具體過程如下: 1.選擇要下載的型別,64位還是32位:*點選download後就會到下圖的下載介面,這時最顯眼的是sign up,有些人會覺得需要先註冊賬號才能下載,點選圖中紅色的,直接免註冊下載。平時再下載

    不需要寫入映象的U盤安裝Ubuntu Server方法

    用這種方式無需先把下載好的ISO安裝映象檔案先解壓或寫入映象到U盤或硬碟。如果U盤已經是老毛桃WinPE最新版啟動選單(網管經常用它來直接恢復GHO來安裝Windows),還不需要破壞它,這個很棒。 實現這個的前提是因為老毛桃啟動選單支援直接讀取U盤/ISOS裡的所有ISO

    Centos7 zipunzip壓縮檔案

    1、安裝zip、unzip應用 yum install zip unzip 2、壓縮和解壓檔案 以下命令均在/home目錄下操作 cd /home #進入/home目錄 a、把/home目錄下面的mydata目錄壓縮為mydata.zip zip -

    Ubuntu安裝 .7z 壓縮檔案

    安裝方法:    sudo apt-get install p7zip解壓檔案:    7z x manager.7z -r -o /home/xx解釋如下:x 代表解壓縮檔案,並且是按原始目錄解壓(還有個引數 e 也是解壓縮檔案,但其會將所有檔案都解壓到根下,而不是自己原有

    linux下不同檔案字尾的壓縮檔案方法

    1、*.tar 用 tar –xvf 解壓 2、*.gz 用 gzip -d或者gunzip 解壓 3、*.tar.gz和*.tgz 用 tar –xzf 解壓 4、*.bz2 用 bzip2 -d或者用bunzip2 解壓 5、*.tar.bz2用tar

    DoNetZip類庫壓縮文件

    tel direct cep ima tor pre style div cat using Ionic.Zip; public class ZipHelper { public static void ZipSingleFile(string

    Linux 檔案系統的建立與掛載方法

    轉自:https://blog.csdn.net/gz153016/article/details/51655994 Linux的  檔案系統的建立與掛載方法 1 Linux 檔案系統的建立 Linux的  作業系統在安裝伺服器時,安裝程式已經建立了自己的檔案系統,但是在使

    tar.xz檔案如何

    XZ壓縮最新壓縮率之王 xz這個壓縮可能很多都很陌生,不過您可知道xz是絕大數Linux預設就帶的一個壓縮工具。 之前xz使用一直很少,所以幾乎沒有什麼提起。 我是在下載phpmyadmin的時候看到這種壓縮格式的,phpmyadmin壓縮包xz格式的居然比7z還要小,這引起我的

    Spring boot 配置檔案 (properties yml )

    從其他框架來看 我們都有自己的配置檔案, hibernate有hbm,mybatis 有properties, 同樣, Spring boot 也有全域性配置檔案。 Springboot使用一個全域性的配置檔案,而且配置檔案的名字是固定的。 有兩種 application.properties

    檔案檔案系統的壓縮打包

    在linux系統中,壓縮檔案的副檔名大多是 tar tar.gz tgz gz bz2等 .gz gzip 程式壓縮的檔案 .bz2 bzip2 程式壓縮的檔案 .tar tar程式打包的資料,並沒有壓縮過 .tar.gz tar程式打包檔案,其