วิธีตรวจสอบความคืบหน้าของคำสั่ง Linux (ด้วย pv และความคืบหน้า)

เผยแพร่แล้ว: 2022-01-29
พร้อมท์เทอร์มินัล Linux บนแล็ปท็อป
Fatmawati Achmad Zaenuri/Shutterstock.com

แทนที่จะใช้ Flying blind ให้ใช้คำสั่ง Linux pv และ progress เพื่อติดตามความคืบหน้าของคำสั่ง ยูทิลิตีเหล่านี้จะให้แถบความคืบหน้าสำหรับคำสั่งที่ปกติไม่มี คุณจะเห็นเวลาโดยประมาณจนกว่าจะเสร็จสิ้นด้วย

หากคุณอยู่ในเที่ยวบินระยะไกลบนเครื่องบินที่ไม่มีหน้าจอวิดีโอที่พนักพิง มันไม่ง่ายเลยที่จะรู้ว่าการเดินทางของคุณไปได้ไกลแค่ไหน คุณรู้เมื่อคุณออกเดินทาง คุณรู้ว่าเที่ยวบินนี้จะใช้เวลานานแค่ไหน แต่คุณจะทราบได้อย่างไรว่าคุณมาถูกทาง ตรงเวลา หรือช้ากว่ากำหนด หากคุณไม่ต้องการชมภาพยนตร์บนเครื่องบิน คุณสามารถเปลี่ยนหน้าจอวิดีโอเพื่อแสดงแผนที่พร้อมตำแหน่งเครื่องบินของคุณได้ คุณยังได้รับสถิติบางอย่าง เช่น เวลาที่คาดว่าจะมาถึง (ETA) ซึ่งดีมาก

การเริ่มคำสั่งจากหน้าต่างเทอร์มินัลบางครั้งอาจรู้สึกเหมือนเป็นเที่ยวบินระยะไกลโดยไม่มีหน้าจอวิดีโอ คุณไม่มีอะไรจะบ่งบอกได้เลยว่าทุกอย่างเรียบร้อยดีหรือกระบวนการหยุดทำงาน หรือใกล้จะเสร็จสมบูรณ์แค่ไหน เคอร์เซอร์กะพริบไม่ได้ให้ข้อมูลมากนัก

คำสั่ง pv และ progress จะให้สถิติและผลตอบรับเล็กน้อย คุณสามารถดูได้ว่ากระบวนการนี้ใกล้จะเสร็จสมบูรณ์เพียงใด นั่นหมายความว่าคุณจะได้รับ ETA สำหรับกระบวนการที่ทำงานอยู่ เมื่อเทียบกับการจ้องที่เคอร์เซอร์ ที่ชนะมือลง

กำลังติดตั้ง pv

คุณต้องติดตั้ง pv

ในการติดตั้ง pv บน Ubuntu ให้ใช้คำสั่งนี้:

 sudo apt-get ติดตั้ง pv 

ในการติดตั้ง pv บน Fedora ให้ใช้คำสั่งนี้:

 sudo dnf ติดตั้ง pv 

ในการติดตั้ง pv บน Manjaro ให้ใช้คำสั่งนี้:

 sudo pacman -Syu pv 

ใช้ pv

pv ย่อมาจาก pipe viewer การวางท่อจะต้องเกี่ยวข้องกับคำสั่งที่ไหนสักแห่ง ต่อไปนี้คือตัวอย่างที่เรากำลังไพพ์อิมเมจ ISO ผ่าน zip เพื่อสร้างไฟล์ zip ที่บีบอัดของ ISO

โฆษณา

เพื่อให้คำสั่งช้าลงพอที่จะจับภาพหน้าจอได้ ไฟล์บางไฟล์ในตัวอย่างที่ใช้ในบทความนี้จึงถูกจัดเก็บไว้ใน USB ภายนอกที่เก่าและช้าที่เรียกว่า SILVERXHD

 pv /media/dave/SILVERXHD/gparted-live-1.0.0-1-amd64.iso | pv /media/dave/SILVERXHD/gparted-live-1.0.0-1-amd64.iso zip > gparted.zip 

ข้อมูล pv ให้เราเห็นได้ในบรรทัดล่างสุดของหน้าจอ

จากซ้ายไปขวา ข้อมูลที่แสดงคือ:

  • ข้อมูลที่ถ่ายโอนไปแล้ว
  • เวลาผ่านไปแสนไกล
  • อัตราการถ่ายโอนข้อมูล (ทรูพุต)
  • แถบความคืบหน้าและเปอร์เซ็นต์ที่เสร็จสมบูรณ์
  • เวลาที่เหลือโดยประมาณก่อนเสร็จสิ้น (ETA)

การคัดลอกไฟล์ด้วย pv

ในการคัดลอกไฟล์ที่มีเอาต์พุตจาก pv ให้ใช้คำสั่งนี้:

 pv /media/dave/SILVERXHD/gparted-live-1.0.0-1-amd64.iso > gparted.iso 

เราได้รับรายงานความคืบหน้าเมื่อมีการคัดลอกไฟล์

การคัดลอกไฟล์ด้วย pv ในหน้าต่างเทอร์มินัล te

การคัดลอกไฟล์หลายไฟล์ด้วย pv

ในการคัดลอกไฟล์และโฟลเดอร์หลายไฟล์ด้วย pv เราต้องใช้เคล็ดลับเล็กน้อย เราใช้ tar เพื่อย้ายไฟล์ให้เรา

 tar -c help-files/ | pv | tar -x -C เอกสาร/ 

โฆษณา

ส่วน tar -c help-files/ ของคำสั่งสั่งให้ tar สร้าง ( -c ) ไฟล์เก็บถาวรของไฟล์ในโฟลเดอร์ help-files นี้ถูกส่งผ่าน pv เพื่อให้เราได้รับการแสดงความคืบหน้า จากนั้นจะถูกส่งกลับไปยัง tar สำหรับส่วนสุดท้ายของคำสั่ง ไฟล์เก็บถาวรถูกแตก ( -x ) และไดเร็กทอรีถูกเปลี่ยน ( -C ) เป็น Documents ก่อนการแตกไฟล์

ดังนั้น ไฟล์และโฟลเดอร์ที่อยู่ในไฟล์วิธีใช้จะถูกคัดลอกไปยังโฟลเดอร์เอกสาร โดยมีการแสดงความคืบหน้า

ผลลัพธ์จะแตกต่างกันเล็กน้อยในครั้งนี้

เราไม่ได้รับ ETA แถบความคืบหน้าจะแสดงตัวบ่งชี้ที่เคลื่อนไหว แสดงว่ากระบวนการทำงานอยู่ แต่ไม่ขยายจากซ้ายไปขวาเหมือนแถบแสดงความคืบหน้าแบบเดิม pv ถูกจำกัดให้แสดงข้อมูลที่สามารถดึงออกมาจากกระบวนการที่กำลังวางท่อได้

ใช้ pv และ tar เพื่อสร้างไฟล์เก็บถาวร

การคัดลอกไฟล์ด้วย pv และ tar ไม่ได้ทำให้เราเหลือไฟล์เก็บถาวร ไฟล์เก็บถาวร "เสมือน" ถูกสร้างขึ้นโดย tar ซึ่งถูกป้อนกลับเข้าสู่ tar เพื่อแยกไฟล์ ถ้าเป้าหมายของเราคือคัดลอกไฟล์ นั่นก็สำเร็จ แต่ถ้าเราต้องการสร้างไฟล์เก็บถาวรล่ะ

เรายังคงสามารถใช้ tar เพื่อสร้างไฟล์เก็บถาวรและรับรายงานความคืบหน้าจาก pv ตัวเลือกที่ใช้กับ tar คือ -c (สร้างไฟล์เก็บถาวร), -z (บีบอัดด้วย gzip) และ -f (ชื่อไฟล์ของไฟล์เก็บถาวร)

โปรดทราบว่าเรากำลังใช้ - เป็นชื่อไฟล์ ซึ่งทำให้ tar ใช้ stdout และเขียนเอาต์พุตไปยังหน้าต่างเทอร์มินัล เราไม่เห็นผลลัพธ์นั้นเพราะส่งผ่าน pv

โฆษณา

ชื่อจริงของไฟล์เก็บถาวรจะเป็นชื่อไฟล์ที่เราไพพ์เอาท์พุตจาก pv เข้าไป ในกรณีนี้คือ “help-files.tgz”

 tar -czf - ./help-files/ | pv > help-files.tgz 

เราได้รับตัวบ่งชี้ความคืบหน้าเหมือนเดิมและไฟล์เก็บถาวรถูกสร้างขึ้นสำหรับเรา

ที่เกี่ยวข้อง: วิธีบีบอัดและแตกไฟล์โดยใช้คำสั่ง tar บน Linux

ตัวเลือกการแสดง pv

มีตัวเลือกมากมายที่คุณสามารถใช้กับ pv เพื่อเปลี่ยนรายละเอียดของรายงานได้

หากคุณใช้ตัวเลือกเหล่านี้ ตัวเลือกอื่นๆ ทั้งหมดจะถูกปิด ดังนั้น หากคุณต้องการใช้ตัวเลือกการแสดงผลสามแบบ คุณต้องระบุสามตัวเลือกนั้น

การใช้ pv โดยไม่มีตัวเลือกจะเหมือนกับการใช้ตัวเลือก -pterb

  • -p : แสดง เปอร์เซ็นต์ ที่สมบูรณ์ นี่คือแถบความคืบหน้าและเปอร์เซ็นต์ที่เสร็จสมบูรณ์
  • -t : แสดง เวลา ที่ผ่านไป
  • -e : แสดง ETA
  • -r : แสดง อัตรา การถ่ายโอนข้อมูล
  • -b : แสดงจำนวน ไบต์ (ข้อมูลที่ถ่ายโอนไปแล้ว)
  • -n : แสดงเปอร์เซ็นต์เป็น จำนวนเต็ม ซึ่งจะพิมพ์เปอร์เซ็นต์ที่เสร็จสมบูรณ์เป็นตัวเลขจำนวนเต็ม โดยมีการอัปเดตใหม่แต่ละรายการในบรรทัดใหม่

ทำซ้ำคำสั่งสุดท้ายและส่งตัวเลือก -p (เปอร์เซ็นต์ที่เสร็จสมบูรณ์) ไปที่ pv

 tar -czf - ./help-files/ | pv - p > help-files.tgz 

โฆษณา

การดำเนินการนี้จะปิดตัวเลือกการแสดงผลอื่นๆ ทั้งหมด pv ระบุเปอร์เซ็นต์ที่เสร็จสมบูรณ์เท่านั้น

เนื่องจาก pv ไม่ได้รับเปอร์เซ็นต์ที่เสร็จสมบูรณ์จาก tar แถบความคืบหน้าจึงถูกแทนที่ด้วยตัวบ่งชี้ที่เคลื่อนที่ ไม่มีตัวเลขเป็นเปอร์เซ็นต์

ใช้ pv กับ wc

เราสามารถใช้ pv เพื่อไพพ์ไฟล์ข้อความ (หรือไฟล์) ลงใน wc wc จะนับการขึ้นบรรทัดใหม่ อักขระ และคำ และ pv จะให้รายงานความคืบหน้าแก่เรา

ที่นี่เรากำลังไพพ์ไฟล์ ".page" ทั้งหมดในไดเร็กทอรี help-files ลงใน wc

เมื่อ wc เสร็จสิ้น เราจะเห็นจำนวนการขึ้นบรรทัดใหม่ (บรรทัด) อักขระและคำจากไฟล์ ".page" ทั้งหมดในโฟลเดอร์ help-files

การติดตั้งคำสั่งความคืบหน้า

คำสั่ง progress ให้ข้อมูลที่เป็นประโยชน์ประเภทเดียวกับ pv แต่ใช้งานได้กับชุดคำสั่ง Linux เฉพาะ

ในการติดตั้ง progress ใน Ubuntu ให้ใช้คำสั่งนี้:

 sudo apt-get ความคืบหน้าในการติดตั้ง 

ในการติดตั้ง progress ใน Fedora ให้ใช้คำสั่งนี้:

 sudo dnf ความคืบหน้าในการติดตั้ง 

sudo dnf ติดตั้งความคืบหน้าในเทอร์มินัล widow

ในการติดตั้ง progress ใน Manjaro ให้ใช้คำสั่งนี้:

 sudo pacman -Syu ก้าวหน้า 

ความคืบหน้าของคำสั่งใช้งานได้กับ

การพิมพ์ progress ในหน้าต่างเทอร์มินัล progress กด Enter จะแสดงรายการคำสั่งที่ใช้งานได้

 ความคืบหน้า 

ใช้ความคืบหน้ากับท่อ

มีสองเทคนิคที่เราสามารถใช้เพื่อตรวจสอบคำสั่งที่มี progress อย่างแรกเลยคือการใช้ท่อ

คำสั่ง tar อยู่ในรายการคำสั่งที่รองรับซึ่ง progress สามารถตรวจสอบได้ ลองใช้ tar กัน

ตัวเลือกที่เราจะใช้คือตัวเลือกมาตรฐาน -c (สร้างไฟล์เก็บถาวร), -z (บีบอัดด้วย gzip) และ -f (ชื่อไฟล์) เราจะสร้างไฟล์บีบอัดของทุกอย่างในโฟลเดอร์ help-files และไฟล์เก็บถาวรจะมีชื่อว่า “help.tgz”

เรากำลังนำสิ่งนั้นไปสู่ progress และใช้ตัวเลือก -m (จอภาพ) ดังนั้น progress จะรายงานกระบวนการต่อไปจนกว่าจะเสร็จสิ้น

 tar -czf help.tgz ./help-files/ | ความคืบหน้า -m 

หน้าต่างเทอร์มินัลจะแสดงความคืบหน้าของคำสั่ง tar เมื่อสร้างไฟล์เก็บถาวร

โฆษณา

เนื่องจากแต่ละไฟล์ได้รับการประมวลผล จะมีการแสดงรายการพร้อมข้อมูลต่อไปนี้:

  • รหัสกระบวนการ
  • ชื่อกระบวนการ
  • เปอร์เซ็นต์ที่เสร็จสมบูรณ์
  • ข้อมูลที่ประมวลผลและขนาดรวมของไฟล์
  • อัตราข้อมูล (ปริมาณงาน)
  • เวลาที่เหลือโดยประมาณ (ETA)

คุณอาจแปลกใจที่เห็นชุดข้อมูลที่สองปรากฏขึ้น ชุดข้อมูลแรกนี้มีไว้สำหรับ tar อันที่สองสำหรับ gzip tar เรียก gzip เพื่อทำการบีบอัด เนื่องจาก gzip อยู่ในรายการคำสั่งที่รองรับ จึงรายงาน progress

การใช้ความคืบหน้าในโหมดการตรวจสอบอย่างต่อเนื่อง

คุณสามารถใช้ progress ในโหมดการตรวจสอบต่อเนื่องแบบเรียลไทม์โดยใช้ตัวเลือก -M (จอภาพ)

พิมพ์คำสั่งต่อไปนี้ในหน้าต่างเทอร์มินัล:

 ความคืบหน้า -M 

progress จะรายงานว่าไม่มีคำสั่งให้ตรวจสอบ แต่คุณจะไม่กลับไปที่บรรทัดคำสั่ง progress จะรอจนกว่าคำสั่งที่สามารถตรวจสอบได้เริ่มทำงาน จากนั้นจะเริ่มรายงานโดยอัตโนมัติ

ในหน้าต่างเทอร์มินัลอื่น พิมพ์คำสั่งที่อยู่ในรายการคำสั่งที่ความคืบหน้าสามารถตรวจสอบได้

เราจะใช้ cat คำสั่งที่หมดเร็วเกินไปจะไม่ลงทะเบียนกับ progress ดังนั้นเราจะแสดงรายการเนื้อหาของไฟล์ข้อความที่ยาวมาก

 คำแมว.หน้า 

โฆษณา

ในหน้าต่างเทอร์มินัลที่มี progress คุณจะเห็นสถิติสำหรับคำสั่ง cat ขณะดำเนินการและทำงานจนเสร็จสิ้น

เมื่อ cat เสร็จสิ้นรายการ progress ของไฟล์จะกลับสู่สถานะรอ

แต่ละครั้งที่คำสั่งใดคำสั่งหนึ่งที่สามารถรายงานได้ทำงานขนาดใหญ่ progress จะตรวจสอบและรายงานโดยอัตโนมัติ

ที่ค่อนข้างเรียบร้อย

เสร็จสมบูรณ์ 100%

เลิกสงสัยว่าคำสั่งที่ใช้เวลานานทำงานอย่างไร และพักสมองจากการพิจารณาเคอร์เซอร์ของคุณด้วย pv และ progress

ที่เกี่ยวข้อง: แล็ปท็อป Linux ที่ดีที่สุดสำหรับนักพัฒนาและผู้ที่ชื่นชอบ