15 tar Command Examples for Sysadmin and Developers
เผยแพร่แล้ว: 2021-09-21tar เป็นหนึ่งในรูปแบบการเก็บถาวรไฟล์ยอดนิยมที่มีอยู่ในระบบที่ใช้ Unix และ Linux
ชื่อนี้มาจาก T ape AR chive เนื่องจากได้รับการพัฒนาสำหรับการเขียนข้อมูลตามลำดับบนอุปกรณ์เทป บางครั้งก็เรียกว่า tarball
ตามค่าเริ่มต้น tar จะเก็บไฟล์ถาวรโดยไม่มีการบีบอัดแต่ใช้บางส่วน เราสามารถใช้เทคนิคการบีบอัดต่างๆ เพื่อให้ได้ผลลัพธ์ที่บีบอัด โดยปกติยูทิลิตี้ tar จะรวมอยู่ในลีนุกซ์ส่วนใหญ่โดยค่าเริ่มต้น และรูปแบบเองนั้นได้รับการสนับสนุนในระบบปฏิบัติการอื่น ๆ รวมถึง Windows และ macOS ผ่านเครื่องมือและยูทิลิตี้ต่างๆ
เราจะครอบคลุมตัวอย่างทั่วไปบางส่วนและการใช้งานคำสั่ง tar และแฟล็กที่รองรับในบทความนี้
มาเริ่มกันเลย…
สร้าง tar Archive
ในการสร้างไฟล์เก็บถาวรที่ไม่บีบอัดอย่างง่าย คำสั่งไวยากรณ์สำหรับคำสั่ง tar คือ:
$ tar cvf <tar-file-name> <files-to-archive> ในที่นี้ แฟล็ก c หมายถึง การสร้าง, v สำหรับเอาต์พุตแบบละเอียด และ f สำหรับการระบุชื่อไฟล์เก็บถาวร tar ตามธรรมเนียม ให้ระบุชื่อไฟล์ .tar มีนามสกุล . .tar ไฟล์ที่จะเก็บถาวรสามารถระบุได้ด้วยไวด์การ์ดหรือเป็นชื่อ/พาธไฟล์เดียวหรือหลายรายการ
ตัวอย่างเช่น ฉันมีสามไฟล์ในไดเร็กทอรีของฉัน:
$ ls -l total 12 -rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt -rw-r--r-- 1 abhisheknair abhisheknair 19 Sep 12 20:08 file2.txt -rw-r--r-- 1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt $ และฉันต้องการสร้าง tar ที่มีทั้งสามไฟล์ สามารถทำได้ดังนี้:
$ tar cvf archive.tar * file1.txt file2.txt file3.txt $ ls -l archive.tar -rw-r--r-- 1 abhisheknair abhisheknair 10240 Sep 12 20:15 archive.tar $ฉันสามารถระบุเฉพาะไฟล์ที่ต้องการเก็บถาวรได้เช่นกัน เช่น:
$ tar cvf archive1.tar file1.txt file2.txt file1.txt file2.txt $ ls -l archive1.tar -rw-r--r-- 1 abhisheknair abhisheknair 10240 Sep 12 20:15 archive1.tar $สร้างไฟล์บีบอัด (GZ)
tar ไม่เพียงแต่อนุญาตให้เก็บถาวรไฟล์เท่านั้น แต่ยังบีบอัดไฟล์ได้อีกด้วยเพื่อประหยัดพื้นที่ รูปแบบการบีบอัดที่เป็นที่นิยมรูปแบบหนึ่งคือ gunzip ซึ่งมักจะแสดงด้วยนามสกุล .gz หลัง .gz .tar หรือเป็น tgz เราสามารถใช้แฟ z เพื่อระบุว่าเราต้องการไฟล์ที่จะบีบอัดโดยใช้ gunzip นี่คือตัวอย่าง:
$ tar cvzf archive.tar.gz file* file1.txt file2.txt file3.txt $ ls -l archive.tar archive.tar.gz -rw-r--r-- 1 abhisheknair abhisheknair 10240 Sep 12 20:15 archive.tar -rw-r--r-- 1 abhisheknair abhisheknair 188 Sep 12 20:21 archive.tar.gz $ คุณสามารถสังเกตได้ว่าขนาดของไฟล์เก็บถาวรทั้งสองไฟล์มีความแตกต่างกันอย่างมาก แม้ว่าไฟล์ทั้งสองจะมีไฟล์สามไฟล์เหมือนกันก็ตาม นี่เป็นเพราะการใช้การบีบอัดโดยใช้แฟ z
สร้างไฟล์บีบอัด (BZ2)
tar รองรับรูปแบบการบีบอัดอื่น ๆ หลายรูปแบบ หนึ่งในนั้นคือ bz2 หรือ bzip2 ซึ่งแสดงด้วยนามสกุล tar.bz2 หรือบางครั้งเป็น tbz2 มันอาจทำให้ขนาดไฟล์เก็บถาวรเล็กลง แต่ในทางกลับกันก็ใช้ CPU มากกว่า ดังนั้นกระบวนการบีบอัด/ขยายขนาดอาจช้ากว่าไฟล์เก็บถาวร gz
ตัวอย่าง:
$ tar cvjf archive.tar.bz2 file* file1.txt file2.txt file3.txt $ ls -l archive.tar archive.tar.gz archive.tar.bz2 -rw-r--r-- 1 abhisheknair abhisheknair 10240 Sep 12 20:15 archive.tar -rw-r--r-- 1 abhisheknair abhisheknair 212 Sep 12 20:25 archive.tar.bz2 -rw-r--r-- 1 abhisheknair abhisheknair 188 Sep 12 20:21 archive.tar.gz $ file archive.tar* archive.tar: POSIX tar archive (GNU) archive.tar.bz2: bzip2 compressed data, block size = 900k archive.tar.gz: gzip compressed data, from Unix, original size modulo 2^32 10240 $Untar ไฟล์ทั้งหมด
ไฟล์ tar (ไม่ว่าจะบีบอัดหรือไม่บีบอัด) สามารถแตกได้โดยใช้ตัวเลือก x ตัวอย่างด้านล่างจะชี้แจงการใช้งาน:
$ tar xvf archive.tar file1.txt file2.txt file3.txt $ ls -l total 24 -rw-r--r-- 1 abhisheknair abhisheknair 10240 Sep 19 18:25 archive.tar -rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt -rw-r--r-- 1 abhisheknair abhisheknair 19 Sep 12 20:08 file2.txt -rw-r--r-- 1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt $ ใช้งานได้กับไฟล์บีบอัด gz เป็น:
$ tar xvf archive.tar.gz file1.txt file2.txt file3.txt $ ls -l total 16 -rw-r--r-- 1 abhisheknair abhisheknair 188 Sep 19 18:27 archive.tar.gz -rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt -rw-r--r-- 1 abhisheknair abhisheknair 19 Sep 12 20:08 file2.txt -rw-r--r-- 1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt $ หรือแม้กระทั่งสำหรับไฟล์บีบอัด bz2 เป็น:
$ tar xvf archive.tar.bz2 file1.txt file2.txt file3.txt $ ls -l total 16 -rw-r--r-- 1 abhisheknair abhisheknair 212 Sep 19 18:31 archive.tar.bz2 -rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt -rw-r--r-- 1 abhisheknair abhisheknair 19 Sep 12 20:08 file2.txt -rw-r--r-- 1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt $รายการ tar สารบัญ
ในการแสดงรายการเนื้อหาของไฟล์เก็บถาวร tar คุณสามารถใช้แฟล็ก t ดังที่แสดงด้านล่าง:
$ tar tvf archive.tar.bz2 -rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt -rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt -rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt $Untar เฉพาะไฟล์
สามารถแยกไฟล์ได้เพียงไฟล์เดียวจากไฟล์เก็บถาวร tar หรือ tar.gz หรือ tar.bz2 โดยระบุชื่อไฟล์เป็น:
$ tar xvf archive.tar.bz2 file1.txt file1.txt $ ls -l total 8 -rw-r--r-- 1 abhisheknair abhisheknair 212 Sep 19 18:31 archive.tar.bz2 -rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt $ในทำนองเดียวกัน คุณสามารถระบุชื่อไฟล์ได้หลายชื่อโดยคั่นด้วยช่องว่างเพื่อแยกไฟล์เข้าด้วยกันในครั้งเดียว
$ tar xvf archive.tar.bz2 file1.txt file3.txt file1.txt file3.txt $ ls -l total 12 -rw-r--r-- 1 abhisheknair abhisheknair 212 Sep 19 18:31 archive.tar.bz2 -rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt -rw-r--r-- 1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt $Untar โดยใช้ Wildcard
ในการแตกไฟล์อย่างน้อยหนึ่งไฟล์โดยใช้ wildcard PATTERN ให้ใช้ --wildcards flag:
$ tar xvf archive.tar.bz2 --wildcards "file*" file1.txt file2.txt file3.txt $ ls -l total 16 -rw-r--r-- 1 abhisheknair abhisheknair 212 Sep 19 18:31 archive.tar.bz2 -rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt -rw-r--r-- 1 abhisheknair abhisheknair 19 Sep 12 20:08 file2.txt -rw-r--r-- 1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt $เพิ่มไฟล์เพื่อเก็บ
ไฟล์ใหม่สามารถเพิ่ม/ต่อท้าย tarball ที่ไม่มีการบีบอัดที่มีอยู่ได้โดยใช้แฟ --append r หรือ --append มีชื่อไฟล์ใหม่หรือรูปแบบไวด์การ์ด (จำไว้ว่าสิ่งนี้ใช้ได้เฉพาะกับไฟล์ . .tar ไม่มีการบีบอัด และไม่ใช้กับ tar.gz หรือ tar.bz2 รูปแบบที่บีบอัด):

$ tar rvf archive.tar file-new* file-new.txt file-new2.txt $ tar tvf archive.tar -rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt -rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt -rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt -rw-r--r-- abhisheknair/abhisheknair 15 2021-09-19 18:59 file2.txt -rw-r--r-- abhisheknair/abhisheknair 10 2021-09-19 18:58 file4.txt -rw-r--r-- abhisheknair/abhisheknair 9 2021-09-19 19:10 file-new.txt -rw-r--r-- abhisheknair/abhisheknair 9 2021-09-19 19:10 file-new2.txt $ คุณสามารถสังเกตว่ารายการเนื้อหาของ archive.tar แสดงไฟล์ที่เพิ่มใหม่สองไฟล์อีกครั้ง
ลบไฟล์จากที่เก็บถาวร
การลบไฟล์เฉพาะออกจากไฟล์ tar สามารถทำได้โดยใช้ --delete flag ดังที่แสดงด้านล่าง (เปรียบเทียบรายการ tar ก่อนและหลังการลบไฟล์):
$ tar tvf archive.tar -rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt -rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt -rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt -rw-r--r-- abhisheknair/abhisheknair 15 2021-09-19 18:59 file2.txt -rw-r--r-- abhisheknair/abhisheknair 10 2021-09-19 18:58 file4.txt -rw-r--r-- abhisheknair/abhisheknair 9 2021-09-19 19:10 file-new.txt -rw-r--r-- abhisheknair/abhisheknair 9 2021-09-19 19:10 file-new2.txt $ tar --delete -f archive.tar file-new.txt file-new2.txt $ tar tvf archive.tar -rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt -rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt -rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt -rw-r--r-- abhisheknair/abhisheknair 15 2021-09-19 18:59 file2.txt -rw-r--r-- abhisheknair/abhisheknair 10 2021-09-19 18:58 file4.txt $วิธีนี้ใช้ได้กับ tarball ที่ไม่มีการบีบอัดเท่านั้น และจะล้มเหลวสำหรับรูปแบบไฟล์บีบอัด
สร้างด้วยการยืนยัน
ขณะสร้างไฟล์ tar ที่ไม่บีบอัด คุณสามารถตรวจสอบเนื้อหาของไฟล์เก็บถาวรได้โดยใช้แฟล็ก W เป็น:
$ tar cvfW archive.tar file*.txt file1.txt file2.txt file3.txt Verify file1.txt Verify file2.txt Verify file3.txt $ ไม่สามารถใช้ได้กับการตั้งค่าสถานะการบีบอัด แต่คุณสามารถบีบอัดไฟล์ tar สร้างขึ้นในภายหลังโดยใช้ gzip หรือเครื่องมืออื่นๆ
แยก tar ไปยังโฟลเดอร์
หากคุณต้องการแยกเนื้อหา tarball ของคุณไปยังโฟลเดอร์เฉพาะแทนที่จะเป็นไดเร็กทอรีปัจจุบัน ให้ใช้แฟ -C พร้อมพาธไดเร็กทอรีดังที่แสดงด้านล่าง:
$ tar xvf archive.tar -C new-directory/ file1.txt file2.txt file3.txt file2.txt file4.txt $ ls -l new-directory/ total 16 -rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt -rw-r--r-- 1 abhisheknair abhisheknair 15 Sep 19 18:59 file2.txt -rw-r--r-- 1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt -rw-r--r-- 1 abhisheknair abhisheknair 10 Sep 19 18:58 file4.txt $ใช้แฟล็กต่าง
คุณสามารถใช้ --diff หรือ d เพื่อค้นหาการเปลี่ยนแปลงระหว่างไฟล์ในไฟล์เก็บถาวร tar และไฟล์ในระบบไฟล์ นี่คือตัวอย่างที่เรียกใช้ diff หนึ่งครั้งเมื่อไฟล์ใน tar และภายนอกเหมือนกัน โพสต์อัปเดตไฟล์ มันถูกเรียกใช้อีกครั้งเพื่อแสดงความแตกต่างในผลลัพธ์
$ tar dvf archive.tar file4.txt file4.txt $ $ echo newline > file4.txt $ $ tar dvf archive.tar file4.txt file4.txt file4.txt: Mod time differs file4.txt: Size differs $ไม่รวมไฟล์
การยกเว้นไฟล์เฉพาะอาจเป็นข้อกำหนดในขณะที่สร้างไฟล์เก็บถาวร tar สามารถทำได้ด้วย --exclude แฟ --exclude ก
$ tar --exclude="dir/file2.txt" --exclude="dir/file-new*.txt" -cvzf archive.tar.gz dir/ dir/ dir/file1.txt dir/file3.txt $ ls -l dir total 24 -rw-r--r-- 1 abhisheknair abhisheknair 9 Sep 19 19:10 file-new.txt -rw-r--r-- 1 abhisheknair abhisheknair 9 Sep 19 19:10 file-new2.txt -rw-r--r-- 1 abhisheknair abhisheknair 5 Sep 19 19:20 file-new3.txt -rw-r--r-- 1 abhisheknair abhisheknair 5 Sep 19 19:27 file1.txt -rw-r--r-- 1 abhisheknair abhisheknair 6 Sep 19 19:27 file2.txt -rw-r--r-- 1 abhisheknair abhisheknair 8 Sep 19 19:27 file3.txt $ tar tvf archive.tar.gz drwxr-xr-x abhisheknair/abhisheknair 0 2021-09-19 19:30 dir/ -rw-r--r-- abhisheknair/abhisheknair 5 2021-09-19 19:27 dir/file1.txt -rw-r--r-- abhisheknair/abhisheknair 8 2021-09-19 19:27 dir/file3.txt $ ดังที่คุณสังเกตได้จากผลลัพธ์ข้างต้น เราสามารถระบุแฟล็ก --exclude หลายครั้งเพื่อระบุชื่อไฟล์หรือรูปแบบหลายรายการในเงื่อนไข AND โปรดทราบว่าจากหกไฟล์ใน dir ในตัวอย่างข้างต้น มีเพียงสองไฟล์เท่านั้นที่ตรงตามเงื่อนไขที่จะรวมไว้ใน archive.at.gz
ดู tar ขนาดเนื้อหา
เราสามารถรับขนาดของเนื้อหาของไฟล์ tar ที่บีบอัดโดยใช้คำสั่งด้านล่าง:
$ tar tvf archive.tar.gz -rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt -rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt -rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt $ tar -xzf archive.tar.gz --to-stdout|wc -c 56 $ ในทำนองเดียวกันสำหรับไฟล์เก็บถาวร bz2 :
$ tar tvf archive.tar.bz2 -rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt -rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt -rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt $ tar -xjf archive.tar.bz2 --to-stdout|wc -c 56 $รักษาสิทธิ์
ตามค่าเริ่มต้น คำสั่ง tar รักษาสิทธิ์ของไฟล์และไดเร็กทอรีที่กำลังเก็บถาวร แม้ว่าคุณจะสามารถระบุสิ่งเดียวกันได้อย่างชัดเจนโดยใช้แฟ --preserve-permissions -p หรือ --preserve-permissions ดังที่แสดงด้านล่าง:
$ tar cvpzf archive.tar.gz *.txt file1.txt file2.txt file3.txt $สรุป
tar เป็นยูทิลิตี้ที่มีประโยชน์บนระบบ Unix/Linux มาอย่างยาวนาน และใช้เป็นหลักในการเก็บถาวรและสำรองข้อมูล ยูทิลิตี้นี้ได้รับการพัฒนาโดยมีตัวเลือกมากมายเมื่อเวลาผ่านไป สามารถใช้สำหรับงานง่าย ๆ ไปจนถึงงานที่ซับซ้อนได้ เนื่องจากคุณทราบถึงคุณสมบัติที่มีให้ บทความนี้ครอบคลุมการดำเนินการพื้นฐานบางอย่างที่คุณสามารถทำได้ด้วยคำสั่ง tar และแสดงให้เห็นว่าคำสั่งนี้จะช่วยคุณได้อย่างไรในงานดูแลระบบประจำวันของคุณ
อ้างถึง man tar ของ man page หรือใช้ tar --help หรือ tar --usage คำสั่งเพื่อดูรายละเอียดเพิ่มเติม
