Việc sử dụng -v (verbose) có làm chậm các lệnh không?


34

Trong câu hỏi này: Làm thế nào để xóa tất cả các tệp và thư mục con trong một thư mục MÀ KHÔNG xóa thư mục trong bash? người ta hỏi làm thế nào để xóa tất cả các tập tin trong một thư mục, và không phải chính thư mục đó.

Câu trả lời xuất sắc của Matt bao gồm việc sử dụng cờ -v cho lệnh 'rm'.

rm -rfv dontDeleteMe && mkdir dontDeleteMe

Lệnh tôi để lại là một ở trên. Chắc chắn thực sự hữu ích, nhưng cờ -v trong 'rm' và / hoặc nói chung làm chậm các tác vụ được thực hiện thông qua dòng lệnh?

Tôi có một thư mục chứa các tệp .txt (khoảng 100.000 trong số chúng) mà tôi đã tạo, xóa và tạo lại cho chính mình một vài lần bây giờ. Đôi khi với rm, một số lần trong filebrowser và tôi có cảm giác nó còn chậm hơn khi sử dụng lệnh rm như hiển thị ở trên. Cờ -v có liên quan gì không?

Câu trả lời:


37

Có, cờ -v làm chậm lệnh.

Hầu hết, nếu không phải tất cả các phần mềm (hoặc lệnh) sẽ kiểm tra xem một cờ có được cung cấp hay không, và sau đó thực thi một loạt mã liên quan đến cờ. Trong trường hợp cờ -v, họ có thể sẽ thực thi một loạt các lệnh đầu ra (như echohoặc printf), mà họ muốn bỏ qua mà không có cờ.

Điều này có nghĩa là nhiều chu kỳ lệnh hơn cho bộ xử lý và do đó thời gian thực hiện nhiều hơn.

Sẽ tốt hơn nếu bạn không sử dụng cờ -v nếu bạn không đọc / cần tin nhắn.

Mặt khác, CLI sẽ / nên nhanh hơn GUI, giả sử rằng bạn không bao gồm thời gian cần thiết để nhập lệnh và nhấn Enterphím.

Từ blog của superuser , hình ảnh này giải thích rất chậm

nhập mô tả hình ảnh ở đây

Đối với lệnh cụ thể trong câu hỏi, kết quả của lệnh thời gian là

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

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

điều này đã được thực hiện với thư mục chứa 100000 tệp trống


9
Tôi sẽ không nói về "lệnh echo". Hầu hết các chương trình không có bash script để chúng không gọi echo. Vấn đề là họ đang viết lên stdout (hoặc stderr ), nói cách khác, họ đang thực hiện các thao tác I / O, đòi hỏi thời gian (I / O tốn kém) và họ cũng yêu cầu các cuộc gọi hệ thống (có nghĩa là nhiều chuyển đổi ngữ cảnh hơn và do đó nhớ thêm bộ nhớ cache, vv).
Bakuriu

23
Vấn đề chính với việc viết ra thiết bị xuất chuẩn là kết xuất thực tế của nội dung đó; nếu bạn chuyển hướng thiết bị xuất chuẩn đến một tệp, hoặc /dev/null, hiệu suất gần như không bị cản trở như hiển thị văn bản trên trình giả lập thiết bị đầu cuối.
Jacob Krall

Như bạn có thể thấy từ biểu đồ, sự khác biệt về thời gian là không đáng kể nếu bạn đang nói về thời gian phản hồi theo quan điểm của con người. Vì vậy, nếu bạn lo lắng về hiệu quả cho một người xem lệnh, điều đó không liên quan. Nó chỉ liên quan đến số lượng lớn tệp hoặc cho nhiều lần chạy lặp lại trong đó thời gian máy tính là quý giá (ví dụ: máy chủ web bận hoặc máy tính cổ).
Paddy Landau

Tác động lớn nhất và có lẽ là trường hợp duy nhất thực sự quan trọng, là khi bạn chạy lệnh trên một máy từ xa thông qua SSH. Ghi nhật ký chi tiết có thể dễ dàng tạo ra hàng chục megabyte lưu lượng truy cập phải được truyền từ máy chủ đến bảng điều khiển của bạn. Tôi đã từng trải qua một lần tăng tốc theo thứ tự 10 lần sau khi xóa đăng nhập bảng điều khiển quá mức khỏi tập lệnh mà tôi đã chạy qua SSH.
Sergey

5

Tại sao không tìm ra chính mình: sử dụng thời gian.

$ 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
Điều này không thực sự trả lời câu hỏi. Sự khác biệt 1 ms giữa các lần chạy duy nhất của mỗi lệnh có thể được gây ra bởi rất nhiều yếu tố. Cũng không rõ nếu bạn bỏ qua -vđầu ra hoặc thư mục trống.

Không đề cập đến việc làm chậm không phải từ các hướng dẫn được thực hiện bổ sung, mà là từ quá trình ghi nó vào một tệp hoặc thiết bị đầu cuối. time' pretty much redirects the output to / dev / null '.
Cole Johnson
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.