ตัวอย่างคำสั่ง 15 tar สำหรับ Sysadmin และ Developers

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 แสดงไฟล์ที่เพิ่งเพิ่มใหม่สองไฟล์อีกครั้ง

  วิธีล้างคิว Spotify ของคุณ

ลบไฟล์ออกจากเอกสารเก่า

การลบไฟล์เฉพาะออกจากไฟล์เก็บถาวร 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 หรือเครื่องมืออื่นๆ

  วิธีเปิดใช้งานการรับรองความถูกต้องด้วยสองปัจจัยสำหรับ LinkedIn

แยก 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

  วิธีการทำงานร่วมกันบน Microsoft Whiteboard

ดูขนาดเนื้อหา 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 เพื่อดูรายละเอียดเพิ่มเติม

เรื่องล่าสุด

x