tar เป็นหนึ่งในรูปแบบการเก็บถาวรไฟล์ยอดนิยมที่มีอยู่ในระบบที่ใช้ Unix และ Linux
ชื่อนี้ได้มาจาก Tape ARchive เนื่องจากได้รับการพัฒนาสำหรับการเขียนข้อมูลตามลำดับบนอุปกรณ์เทป บางครั้งก็เรียกว่าทาร์บอล
ตามค่าเริ่มต้น tar จะเก็บเฉพาะไฟล์ที่ไม่มีการบีบอัด แต่ใช้บางส่วน เราสามารถใช้เทคนิคการบีบอัดต่างๆ เพื่อให้ได้เอาต์พุตที่ถูกบีบอัด ยูทิลิตี้ tar มักจะรวมอยู่ในลีนุกซ์รุ่นดิสทริบิวชันส่วนใหญ่ตามค่าเริ่มต้น และตัวรูปแบบเองก็รองรับระบบปฏิบัติการอื่นๆ รวมถึง Windows และ macOS ผ่านเครื่องมือและยูทิลิตี้ต่างๆ
เราจะกล่าวถึงตัวอย่างทั่วไปบางส่วนและการใช้คำสั่ง tar และแฟล็กที่รองรับในบทความนี้
มาเริ่มกันเลย…
สร้างไฟล์เก็บถาวร tar
หากต้องการสร้างไฟล์เก็บถาวรที่ไม่บีบอัดอย่างง่าย ไวยากรณ์สำหรับคำสั่ง 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 หลัง .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 flag ดังที่แสดงด้านล่าง:
$ 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 $
เลิกทาร์โดยใช้สัญลักษณ์แทน
ในการแยกไฟล์อย่างน้อยหนึ่งไฟล์โดยใช้ wildcard PATTERN ให้ใช้ –wildcard 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 $
เพิ่มไฟล์เพื่อเก็บ
ไฟล์ใหม่สามารถเพิ่ม/ต่อท้ายกับ tarballs ที่ไม่มีการบีบอัดที่มีอยู่ได้โดยใช้แฟล็ก 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 $
สิ่งนี้ใช้ได้เฉพาะกับ tarballs ที่ไม่มีการบีบอัดและจะล้มเหลวสำหรับรูปแบบไฟล์เก็บถาวรที่บีบอัด
สร้างด้วยการตรวจสอบ
ขณะสร้างไฟล์ 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
คุณสามารถใช้ –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 flag
$ 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 จะรักษาสิทธิ์ของไฟล์และไดเร็กทอรีที่กำลังเก็บถาวร แม้ว่าคุณสามารถระบุสิ่งเดียวกันได้อย่างชัดเจนโดยใช้แฟล็ก -p หรือ –preserve-permissions ดังที่แสดงด้านล่าง:
$ tar cvpzf archive.tar.gz *.txt file1.txt file2.txt file3.txt $
สรุป 👨💻
tar เป็นโปรแกรมอรรถประโยชน์ที่มีประโยชน์บนระบบ Unix/Linux มาอย่างยาวนาน และถูกใช้เป็นหลักในงานเก็บถาวรและสำรองข้อมูล ยูทิลิตีได้รับการพัฒนาด้วยตัวเลือกมากมายเมื่อเวลาผ่านไป สามารถใช้กับงานง่ายๆ ไปจนถึงงานที่ซับซ้อนได้ โดยให้คุณทราบคุณสมบัติที่มีให้ บทความนี้ครอบคลุมการดำเนินการพื้นฐานบางส่วนที่คุณสามารถทำได้ด้วยคำสั่ง tar และแสดงให้เห็นว่าคำสั่งดังกล่าวสามารถช่วยคุณในงานการดูแลระบบประจำวันของคุณได้อย่างไร
อ้างถึง man page man tar หรือใช้คำสั่ง tar –help หรือ tar –usage เพื่อดูรายละเอียดเพิ่มเติม