การใช้คำสั่ง -v (verbose) ช้าลงหรือไม่?


34

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

คำตอบที่ยอดเยี่ยมของMattรวมถึงการใช้แฟล็ก -v กับคำสั่ง 'rm'

rm -rfv dontDeleteMe && mkdir dontDeleteMe

คำสั่งที่ฉันทิ้งไว้คือคำสั่งด้านบน มีประโยชน์จริง ๆ แน่นอน แต่แฟล็ก -v ใน 'rm' และ / หรือโดยทั่วไปชะลองานที่ทำผ่านบรรทัดคำสั่งหรือไม่

ฉันมีโฟลเดอร์ที่มี. txt-files (ประมาณ 100,000 ไฟล์) ที่ฉันได้สร้างลบและสร้างใหม่สำหรับตัวเองสองสามครั้งในขณะนี้ บางครั้งด้วย rm บางครั้งใน filebrowser และฉันรู้สึกว่ามันช้ากว่าที่จะใช้ rm-command ดังแสดงด้านบน แฟล็ก -v มีส่วนเกี่ยวข้องกับสิ่งนี้หรือไม่?

คำตอบ:


37

ใช่แฟล็ก -v ทำให้คำสั่งช้าลง

ส่วนใหญ่หากไม่ใช่ซอฟต์แวร์ทั้งหมด (หรือคำสั่ง) จะตรวจสอบว่ามีการตั้งค่าสถานะไว้หรือไม่จากนั้นจึงเรียกใช้งานรหัสที่เกี่ยวข้องกับการตั้งค่าสถานะ ในกรณีของแฟล็ก -v พวกเขาน่าจะรันคำสั่งเอาต์พุตจำนวนมาก (เช่นechoหรือprintf) ซึ่งพวกเขาค่อนข้างจะข้ามโดยไม่มีแฟล็ก

นี่หมายถึงวงจรการเรียนการสอนที่มากขึ้นสำหรับโปรเซสเซอร์และทำให้เวลาในการประมวลผลมากขึ้น

มันจะดีกว่าถ้าคุณไม่ใช้แฟล็ก -v หากคุณไม่ต้องการอ่าน / ต้องการข้อความ

บนมืออื่น ๆ , CLI จะ / ควรจะเร็วกว่า GUI สมมติว่าคุณไม่รวมถึงเวลาที่จำเป็นในการพิมพ์คำสั่งและการกดEnterคีย์

จากบล็อกของ superuserภาพนี้จะอธิบายความช้าได้เป็นอย่างดี

ป้อนคำอธิบายรูปภาพที่นี่

สำหรับคำสั่งเฉพาะที่เป็นปัญหาผลลัพธ์ของคำสั่ง time คือ

//with -v
real    0m8.753s
user    0m0.816s
sys     0m2.036s

//without -v
real    0m1.282s
user    0m0.124s
sys     0m1.092s

สิ่งนี้ทำกับไดเรกทอรีที่มีไฟล์ว่าง 100000 ไฟล์


9
ฉันจะไม่พูดถึง "คำสั่ง echo" โปรแกรมส่วนใหญ่ไม่ใช่สคริปต์ทุบตีดังนั้นจึงไม่เรียกใช้เสียงสะท้อน ปัญหาคือว่าพวกเขากำลังเขียนไปยัง stdout (หรือstderr ) ในคำอื่น ๆ พวกเขากำลังดำเนินการ I / O ซึ่งต้องใช้เวลา (I / O เป็นค่าใช้จ่าย) และพวกเขายังต้องเรียกระบบ (ซึ่งหมายถึงบริบทเพิ่มเติมสวิตช์และดังนั้น แคชยิ่งพลาดเป็นต้น)
Bakuriu

23
ปัญหาหลักในการเขียนไปยัง stdout คือการแสดงผลที่แท้จริงของเนื้อหานั้น หากคุณเปลี่ยนเส้นทาง stdout ไปยังไฟล์หรือ/dev/nullประสิทธิภาพการทำงานนั้นแทบจะไม่ถูกขัดขวางเหมือนการแสดงข้อความบนเทอร์มินัลอีมูเลเตอร์
Jacob Krall

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

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

5

ทำไมไม่ลองหาตัวเองดู: ใช้เวลา

$ time rm -rfv dontDeleteMe && mkdir dontDeleteMe
real    0m0.003s
user    0m0.001s
sys     0m0.002s

$ time rm -rf dontDeleteMe && mkdir dontDeleteMe
real    0m0.002s
user    0m0.001s
sys     0m0.001s

10
นี่ไม่ได้ตอบคำถามจริงๆ ความแตกต่างของ 1 ms ระหว่างการรันเดี่ยวของแต่ละคำสั่งอาจเกิดจากปัจจัยหลายอย่าง นอกจากนี้ยังไม่ชัดเจนถ้าคุณละเว้น-vผลลัพธ์หรือไดเรกทอรีว่างเปล่า

ไม่ต้องพูดถึงการชะลอตัวไม่ได้มาจากคำสั่งดำเนินการพิเศษ แต่จากกระบวนการเขียนลงในไฟล์หรือเทอร์มินัล time' pretty much redirects the output to / dev / null'
โคลจอห์นสัน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.