美國留學(xué)選擇什么專業(yè)好?留學(xué)美國熱門專業(yè)推薦
2019-06-26
更新時間:2024-06-07 05:27作者:小樂
原文:Codelog日記(微信公眾號ID:codelogs),歡迎分享,轉(zhuǎn)載請保留出處。
簡介如果你是一個后端程序員,我想你一定見過后綴為*.tar.gz、*.zip、*.jar的文件。這些都是壓縮文件。這些文件是如何生成的?主要區(qū)別是什么?本文將帶您了解這些文件和配套的操作命令,以及它們的常用場景。
tar 和gzip Linux 上最常見的壓縮文件是*.tar.gz。各種開源軟件經(jīng)常以這種格式發(fā)布源代碼或程序,所以作為后端開發(fā)人員,有必要了解它。
首先可以發(fā)現(xiàn)這個文件有兩個后綴,分別是.tar和.gz。這個名字是有原因的,因?yàn)樗闹谱鬟^程分為兩部分,如下:
使用tar將目錄打包成單個.tar文件# 將applogs目錄打包成applogs.tar文件# 其中-c表示打包,-f指定打包文件名$ tar -cf applogs.tar applogs/# 可以找到即打包文件的大小與目錄占用的大小相似,因?yàn)閠ar只是將目錄中的文件組合成單個文件,并且默認(rèn)不壓縮$ du -sh applogs/applogs.tar177M applogs/175M applogs.tar 使用gzip將.tar文件壓縮成.gz文件# 使用gzip壓縮會生成applogs.tar.gz文件$ gzip -k applogs.tar# 可以發(fā)現(xiàn)壓縮后文件大小明顯變小$ du -sh applogs.tar applogs.tar.gz175M applogs.tar8.8M applogs.tar.gz 這是*.tar.gz文件的制作過程。事實(shí)上,使用tar 命令可以將這兩步簡化為一步,如下:
# 打包壓縮,其中-z表示打包然后使用gzip壓縮$ tar -czf applogs.tar.gz applogs/# 解壓到當(dāng)前目錄$ tar -xzf applogs.tar.gz -C ./壓縮日志文件In另外,由于日志文件的內(nèi)容一般具有較高的重復(fù)率,這導(dǎo)致Linux經(jīng)常對后端系統(tǒng)產(chǎn)生的歷史日志文件進(jìn)行壓縮和存儲,這樣可以顯著減少磁盤空間的使用。
基于這種情況,Linux上誕生了很多查看壓縮日志文件的命令,如zcat、zgrep、zless等,如下:
# 自動解壓文件并輸出文件內(nèi)容$ zcat applogs.tar.gz # 自動解壓文件并在其中搜索。用法類似于grep $ zgrep -a 'error' applogs.tar.gz 這比先愚蠢地解壓要好。文件中,在文件內(nèi)搜索效率更高。
tar與其他壓縮算法另外,除了gzip之外,tar還可以與其他壓縮算法配合使用,例如bzip2、xz等,如下:
-j, --bzip2 通過bzip2 過濾存檔-J, --xz 通過xz 過濾存檔--lzip 通過lzip 過濾存檔--lzma 通過xz 過濾存檔--lzop 通過lzop 過濾存檔-z, - -gzip, --gunzip, --ungzip 通過gzip 過濾存檔--zstd 通過zstd 過濾存檔-Z, --compress, --uncompress 通過compresszip 過濾存檔,jarzip 也是常見的壓縮文件格式。后綴為*.zip。與上面的tar和gzip不同,zip集成了打包和壓縮兩個過程。 Linux下對應(yīng)的操作命令是zip和unzip,如下:
# 創(chuàng)建zip壓縮文件$ zip -r applogs.zip applogs/# 查看zip壓縮文件中有哪些文件$ unzip -l applogs.zipArchive: applogs.zip Length Date Time Name--------- --- - ------ ----- ---- 0 2022-09-17 12:58 applogs/99166 2022-09-16 18:20 applogs/demo.2022-09-16.0.log 13177092 2022-09-17 13:37 applogs /demo.2022-09-17.0.log 948 2022-08-09 15:08 applogs/demo.log.----------------203039002140 files#解壓zip文件, -d 指定解壓目錄$ unzip applogs.zip -d ./與gzip類似,zip也自帶了一些方便特定場景的命令工具,如zipinfo、zipgrep等,如下:
# zipinfo 查看zip 文件包含哪些文件$ zipinfo applogs.zipArchive: applogs.zipZip 文件大?。?9573195 字節(jié),條目數(shù): 140drwxrwxrwx 3.0 unx 0 bx stor 22-Sep-17 12:58 applogs/-rwxrwxrwx 3. 0 unx 99166 tx defN 22-九月16 18:20 applogs/demo.2022-09-16.0.log-rwxrwxrwx 3.0 unx 13177092 tx defN 22-Sep-17 13:37 applogs/demo.2022-09-17.0.log-rwxrwxrwx 3.0 unx 9 48 t x defN 8 月22 日- 09 15:08 applogs /demo.log.140 個文件,未壓縮203039002 字節(jié),壓縮9546235 字節(jié): 95.3%# zipgrep 自動解壓縮文件并在其中搜索。用法類似grep $ zipgrep 'error' applogs.zip 查看jar文件目前大多數(shù)Java項(xiàng)目都是基于spingboot的。眾所周知,spingboot會將項(xiàng)目打包成單個jar文件進(jìn)行部署,但實(shí)際上,jar文件本質(zhì)上是zip格式。與zip文件相比,它只多了一個META-INF/MANIFEST.MF文件。如下:
$ unzip -p app.jar META-INF/MANIFEST.MFManifest-Version: 1.0Spring-Boot-Classpath-Index: BOOT-INF/classpath.idxImplementation-Version: 0.0.1-SNAPSHOTSpring-Boot-Layers-Index: BOOT-INF/層。 idxStart-Class: com.example.demo.DemoApplicationSpring-Boot-Classes: BOOT-INF/classes/Spring-Boot-Lib: BOOT-INF/lib/Build-Jdk-Spec: 1.8Spring-Boot-Version: 2.4.0Created-By: Maven Jar P lugin 3.2.0Main-Class: org.springframework.boot.loader.JarLauncher 如上所示,MANIFEST.MF文件指定了jar包的Main-Class,這樣當(dāng)執(zhí)行java -jar app.jar時,java就會知道是哪個類來查找main.方法,而spingboot打包的jar無非就是把啟動類替換成自己的。
很多時候,我們需要確認(rèn)jar文件的內(nèi)容。比如我想在app.jar中查看spingboot內(nèi)嵌的tomcat的線程池配置大小,可以這樣查看:
$ zipgrep 'max-thread' app.jar BOOT-INF/classes/application.yml: max-threads: 500 這個比jdk自帶的jar命令方便多了。如果你是一名Java開發(fā)的學(xué)生,這個命令應(yīng)該成為你的開發(fā)工具箱中的其中之一。
總結(jié)ok,壓縮文件和命令都介紹得差不多了,我們簡單總結(jié)一下:
tar、gzip:用于打包或解壓縮*.tar.gz 文件的命令。盡管它們是兩個命令,但它們幾乎總是一起使用。 zip、unzip:用于打包或解壓縮*.zip 文件的命令。值得注意的是,它們還可以處理*.jar文件,并且在搜索場景中,使用zipgrep更方便。 less命令實(shí)際上可以直接打開這些壓縮文件。甚至可以打開png、pdf等廣義的壓縮文件!
另外,Linux平臺上其實(shí)還有一些其他的壓縮命令,比如bzip2、xz、7z、rar等,我就不一一介紹了。如果有興趣可以查看Linux man文檔。