linux歸檔是一個聚集眾多檔案並將它們組合為一個大檔案的過程,它通常作為系統備份的一部分,而且通常也用於將舊資料從某個系統移到某些長期存儲設備的情況;tar指令可以為linux的檔案和目錄建立檔案。
本教學操作環境:linux5.9.8系統、Dell G3電腦。
linux歸檔是什麼意思?
歸檔是與壓縮作業配合使用的常用檔案管理任務。歸檔是一個聚集眾多檔案並將它們組合為一個大檔案的過程,它通常作為系統備份的一部分,而且通常也用於將舊資料從某個系統移到某些長期儲存裝置的情況下。
tar指令可以為linux的檔案和目錄建立檔案。利用tar,可以為某一特定文件建立檔案(備份檔案),也可以在檔案中改變文件,或在檔案中加入新的文件。 tar最初被用來在磁帶上建立檔案,現在,使用者可以在任何裝置上建立檔案。利用tar命令,可以把一大堆的文件和目錄全部打包成一個文件,這對於備份文件或將幾個文件組合成為一個文件以便於網絡傳輸是非常有用的。
Linux tar指令
tar指令是linux上將 多個檔案打包程一個檔案包。方便傳輸,也可以用於檔案備份。我們也可以用tar來解壓縮歸檔檔。
tar指令壓縮格式
tar指令支援的壓縮格式,一般我們在使用tar指令的時候會同時對檔案壓縮,以降低空間使用率。通常我們會採用以下命名規範來約定我們使用了哪一種壓縮方式。
.tar 預設模式,不會壓縮,只是將所有檔案放到一個套件裡。
.tar.gz 常用模式,採用gzip演算法壓縮。壓縮率一般,壓縮時間中等。
.tar.bz2 不常用。採用bz2演算法壓縮。壓縮率稍差,壓縮時間較短。
.tar.xz 不常用,採用xz演算法壓縮。壓縮率較好,壓縮時間較長。
tar概要簡介
tar語法介紹
tar 一般支援以下兩種語法格式,第二種是舊的方式。
tar OPTION... [NAME]... tar LETTER... [ARGUMENT]... [OPTION]... [NAME]...
tar的主要參數,我們稱之為【操作類型】:例如,c創建,x解壓縮。其他的參數我們稱為【附加選項】,用來改變我們操作的進展方式例如檔案名字,待歸檔的目標檔案。
主要參數 【操作類型】一定要放在最前面。
兩種語法格式中的[NAME]都是指明我們要待歸檔的檔案名字,[NAME]可以是檔案或目錄,或是多個檔案或目錄。 [NAME]一定要指定明確,而且在我們執行tar指令之前一定是要已經存在與檔案系統上。
tar的其他知識介紹
tar "將相對路徑的檔案名稱解釋為相對目錄。如果我們指定了絕對路徑, tar會將首個/去掉來進行打包。這麼做的目的是為了防止解壓縮的時候替換掉系統目錄。除非我們故意指定【--absolute-names】選項。
如果我們指定的是一個目錄的話,tar會遞歸指定目錄下所有的子目錄和檔案來進行歸檔,例如我們指定/,意思是整個檔案系統都將要被歸檔。
在使用shell通配符的時候區別檔案名稱和待歸檔成員是非常重要的。原因在於,shell只會對存在的檔案使用通配符, tar自己也會對歸檔成員使用通配,所以我們必須保證通配符只針對tar起作用,而不是shell.通常我們可以使用反斜杠\在"*"或“?”或放在單引號中,這樣舊可以了
#通常我們都會把支隊的文件放在命令列上,實際上我們也可以通過讀文件的方式來指定歸檔後來的檔名。'--files-from=FILE-OF-NAMES' ('-T FILE-OF-NAMES')
如果我們不指定歸檔後的檔名,那麼追加,刪除,等操作指令不會做任何操作。create會輸出一個診斷訊息,並阻止tar操作。其他的操作選項會對整個archive目錄操作
除了正常成功退出,tar會因為很多原因失敗。有的情況是可以恢復的,例如當tar命令不是正常組織書寫時,錯誤會推遲到直到文件處理完會報告出來。.有的錯誤可能不是故意的,但是還是有危險,那麼接下來,tar會立即退出。
然而所有非正常的退出,不論是立即的還是推遲的,都會有錯誤輸出,並且會有診斷訊息。
可能的tar程式退出碼有:0(正常退出),1(有檔案變更了),2(嚴重錯誤,不可恢復的錯誤)
tar選項風格
三種選項風格
標準tar指令一共支援8種操作模式讓我們去完成多元任務。每次使用tar指令我們只能選擇一種操作模式。根據實際情況,我們可能會希望指定tar操作模式的運作。例如我們可能修改outputs的輸出格式。或者我們想要文件格式需要我們去特殊指定操作順序。
tar選項是我們指定tar操作模式後附加的選項。根據tar的操作模式,我們可以指定一個或多個選項。不同的選項有不同的作用,通常情況下,選項會修改該操作模式具體內容。例如修改歸檔格式,歸檔檔名,或使用者互動等級。
有些選項對所有操作模式都會有效,有些選項只對特定的操作模式有效。我們會經常使用一些固定的選項。其他的可能很少用到,或基本上不會用到。
選項是大小寫敏感的,例如-T和-t是不同的,T要求一個參數名字來指明檔案名稱或檔案清單。 t則不需要參數 ,是--list的另一種書寫方式。
tar選項通常支援3 不同的風格: 長命名型(--),短命名型(-),舊命名方式(沒有-)。操作模式或選項都可以使用任一風格。 3中不同的風格是在不同的時期發展出來嘚。
有些選項是需要一個參數的,在哪裡放置參數,通常的時候需要根據我們使用哪種風格。這些差異可能是微妙的,但是卻很重要。選項放置在錯誤的位置,可能會導致覆蓋一些重要的文件。我們必須要注意到這些不同點。而且只使用我們所了解的選項,直到我們對其他的選項也了解了。那些需要接收參數的選項,他們可能會有最長或短的形式,而沒有舊風格的對應選項。使用這些需要指定參數的選項的規則是非常嚴謹的。
例如--file選項需要接收一個歸檔檔案名稱作為參數。如果我們不指定歸檔檔名,tar會使用一個預設的但另我們困惑名字,建議我們一定要指定一個具體的歸檔檔名字。
長命名選項風格
tar所有的參數選項都至少有一個長命名型的參數。長命名參數選項比短命名和舊參數名字類型顯示更清晰的。有的時候長名字選項會有不同的名字但是卻是相同的作用,例如--compare和--dif是同一個意思。另外長命名方式,也可以使用唯一的縮寫,例如--create可以用--cre來代替。因為沒有其他的選項以--cre開頭。
tar 長命名選項更明顯的和容易記憶,而且他們的名字也容易辨認。例如 tar --create --verbose --blocking-factor=20 --file=/dev/rmt0,全部使用的是長命名型參數,可以顯而易見的看出每個參數的意義。
長命名選項必須接收參數的話,要立即在該選項後面書寫, 有兩種方式去指定必須的參數,一種是使用空格,另一種是使用=符號。例如--file選項我們可以使用--file archive.tar 或--file=archive.tar兩種方式來制定參數。
對應地,如果選項可以接收也可以不接收參數的話。這種情況下如果要接收參數,則必須使用=符號來指定。例如 --backup 可選接收參數。如果要指定的話,必須使用'--backup=BACKUP-TYPE'.
短命名選項風格
大多數的選項也有對應的短命名選項,短命名選項使用-符號,並且緊跟著一個字母。例如 -t(對應長命名選項--list),這些形式在功能上是完全相同的,可以互換。
相對於長命名選項,短命名方式一個明顯的優點就是書寫很方便。
短命名選項如果需要在選項後面立即接收參數的話,通常以空格來實現。也可以省略空格,立即接著選項書寫,例如指定歸檔名字我們可以使用-f archive.tar(有空格) -farchive.tar(省略空格),--file=archive.tar. -f ARCHIVE-NAME和- -file=ARCHIVE-NAME都表示這個選項指定了歸檔檔名。
有可選參數的短命名選項,如果要指定參數的時候,需要參數緊跟短選項名字,不能使用任何空格。
短命名選項可以放在一起書寫,但不是要求的。當短選項以集合成片出現時,僅在選項開始使用一個-,例如tar -cvf,同時只有最後一個選項允許接收必須參數。 (將許多選項集中在一起,最後一個選項有一個參數,這是一種相當不透明的寫法。)
當選項分開使用時,每個選項的參數需要緊跟著該選項。 tar -c -v -b 20 -f /dev/rmt0。如果參數沒有調整好,可能會導致檔案被覆蓋。
當我們重新調整選項時,要注意同時移動屬於該選項的參數。
舊選項樣式
像短命名选项一样,旧选项风格也只有一个字母。但是,旧风格选项必须将所有选项放在一起,不得有空格将他们分开,或者-连接他们。在tar命令和空格之后,比较紧跟这些字母选项的集合。旧选项不能在任意地方出现。旧选项风格的选项和短命名风格的选项含义是一样的。例如 在旧选项风格中,选项 t 和 短命名选项-t 已经长命名选项--list有一样的作用。 tar cv 命令中,选项v是c选项的额外附加内容。
在旧选项风格中,但选项需要参数的时候,这些选项要一起提供,所有的选项按选项书写顺序提供。例如 tar -c -v -b 20 -f /dev/rmt0 要写成 tar cvbf 20 /dev/rmt0这里20是b选项的参数 /dev/rmnt0是f的参数。
我们可以看出,旧风格选项,匹配选项字母和对应的参数是很困难的,而且很容易令人困惑。短命名方式逗比旧命名方式要好很多。如果要调整选项的字母,必须要同时准确地调整对应的参数位置。
旧选项风格有的时候甚至可以震惊一个熟悉的用户。
tar cfz archive.tar.gz file 这个例子中 archive.tar.gz 被认为是f的参数,z是压缩选项。
tar -cfz archive.tar.gz file 这个例子中 z会被认为是f的选项值,尽管不是我们想的。
旧选项风格是为了向下兼容而保留的。而且很多用户已经习惯了这种方式。
第二个例子我们有几种方式来修改。
tar -czf archive.tar.gz file tar -cf archive.tar.gz -z file tar cf archive.tar.gz -z file
通常tar命令的第一个选项一般都会当做包含操作模式和选项来对待处理,尽管没有用-开始。因此 tar c与tar -c一样,都是和--create一样来创建归档。
混合选项风格
三种选项风格可以同时出现在一条tar 命令中,但是旧选项必须在tar命令后 第一个出现,现代风格的选项必须在旧选项集合输入之后出现,这个是必须遵守的原则,否则可能我们输入的命令跟我们预想的结果根本不一样。可能会造成严重的错误或灾难。
tar选项
操作模式
'--concatenate' '--catenate' '-A' 将其他归档文件放在当前归档文件末尾
'--append' ' -r' 追加文件到归档文件
'--compare' '--diff' '-d' 将归档文件和文件系统上的文件进行对比
'--create' '-c' 创建一个归档文件
'--delete' 从归档文件中删除一些文件。(不能在tape上操作)
'--extract' '--get' '-x' 提取归档文件到当前文件系统
'--list' '-t' 显示归档文件的组成文件列表
'--update' '-u' 更新归档文件中的某个文件,只有在该文件有更新时。或者不存在与归档文件。
通用选项
-C, --directory=DIR 改变工作目录。
-f, --file=ARCHIVE 指定归档文件名
-j, --bzip2 使用bzip2压缩方式过滤
-J, --xz 使用xz压缩方式过滤
-p, --preserve-permissions 解压时保留文件的权限。
-v, --verbose 详细的列出处理的文件
-z, --gzip 使用gzip压缩方式过滤
提取时覆盖选项
--remove-files 提取归档后删除归档文件
-k --keep-old-files 执行的时候不覆盖已经存在的文件,会输出错误
--keep-newer-files 执行的时候不覆盖比archive里文件新的文件
--keep-directory-symlink 不把已经存在的连接替换成目录
--no-overwrite-dir 保存已经存在的目录的原信息
--overwrite 覆盖已经存在的文件
--overwrite-dir 覆盖已经存在的目录
--recursive-unlink 在提取目录文件前清除该目录结构
--skip-old-files 不替换已经存在的文件。静默方式跳过
-U, --unlink-first 在提取之前先删除所有文件
-W, --verify 校验
处理文件的属性
--atime-preserve[=METHOD] 保存文件atime到归档文件
--delay-directory-restore 直到解压完才改变目录的时间戳属性
--group=NAME 强制修改文件所属组
--mode=CHANGES 强制连接模式修改
--mtime=DATE-OR-FILE 修改文件的mtime
-m, --touch 不提取文件的 mtime
--no-delay-directory-restore 取消delay-directory-restore
--no-same-owner extract files as yourself (default for ordinary users)
--no-same-permissions apply the user's umask when extracting permissions from the archive (default for ordinary users)
--numeric-owner 使用number来表示owner和group
--owner=NAME 修改归档的文件的owner
-p, --preserve-permissions, --same-permissions 保留檔案的屬性
--preserve 保留檔案的屬性same as both -p and -s
-- same-owner 保留檔案的屬性
-s, --preserve-order, --same-order 保留檔案的屬性
##本機目錄檔案的選擇
--add-file=FILE 最加檔案到歸檔中如果一個檔案名字以-開始--backup[=CONTROL] 刪除之前先備份#-C, --directory=DIR 修改工作目錄到指定目錄--exclude=PATTERN 排除一些檔案--exclude-backups 排除掉備份和鎖定檔案--exclude-caches 排除掉cache(CACHEDIR.TAG)的目錄其他文件,除了tagfile--exclude-caches-all 排除掉包括CACHEDIR.TAG的目錄 #--exclude-caches-under 排除掉所有有tagfile的目錄的其他文件,但是有目錄--exclude-tag=FILE 排除掉指定含義某文件的目錄,除了該文件exclude contents of directories containing FILE, except for FILE itself--exclude-tag-all=FILE exclude directories containing FILE 排除掉有某檔案的整個目錄--exclude -tag-under=FILE 排除掉有某文件的目錄裡的所有內容--exclude-vcs 排除掉vcs版本控制的目錄-h, --dereference 保存軟連,將目標檔案也歸檔起來follow symlinks; archive and dump the files they point to--hard-dereference 保存硬軟連,將目標檔案也歸檔起來-K, --starting-file=MEMBER-NAME 以目錄中某個檔案開始歸檔,前面的檔案不歸檔--newer-mtime=DATE 當內容修改時,比較文件的日期和時間-P, --absolute-names 以絕對路徑來打包。提取時會覆寫原始檔案--recursion--suffix=STRING 刪除之前先備份,以設定的前綴來覆寫-X, --exclude-from=FILE 排除掉指定文件裡的約定的文件推薦學習:《
Linux影片教學》
以上是linux歸檔是什麼意思的詳細內容。更多資訊請關注PHP中文網其他相關文章!