15 tar Command Examples for Sysadmin and Developers

เผยแพร่แล้ว: 2021-09-21

tar เป็นหนึ่งในรูปแบบการเก็บถาวรไฟล์ยอดนิยมที่มีอยู่ในระบบที่ใช้ 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 คำสั่งเพื่อดูรายละเอียดเพิ่มเติม