Чи сповільнює використання команд -v (багатослівний)?


34

У цьому запитанні: Як видалити всі файли та підкаталоги в каталозі БЕЗ видалення каталогу в bash? запитується, як видалити весь файл у папці, а не саму папку.

Matt ВІДМІННО Відповідь сек включає використання прапора -v до команди «погонного».

rm -rfv dontDeleteMe && mkdir dontDeleteMe

Команда, яку я залишив, була вище. Звичайно, корисно, але чи прапор -v у 'rm' та / або загалом уповільнює завдання, виконані за допомогою командного рядка?

У мене є папка з .txt-файлами (близько 100 000 з них), яку я декілька разів створив, видалив і відтворив для себе. Іноді з rm, інколи у файловому браузері, і я відчуваю, що ще повільніше використовувати команду rm, як показано вище. Чи має прапор -v щось із цим?

Відповіді:


37

Так, прапор -v уповільнює команду.

Більшість, якби не всі програмні засоби (або команди) перевіряли, чи надається прапор, а потім виконували б купу коду, пов'язаного з прапором. У випадку прапора -v вони, ймовірно, виконують купу команд виводу (як-от echoабо printf), які вони, швидше, пропустили б без прапора.

Це означає більше циклів інструкцій для процесора і, таким чином, більше часу на виконання.

Краще, якщо ви не використовуєте прапор -v, якщо ви не збираєтеся читати / потребувати повідомлень.

З іншого боку, CLI був / повинен бути швидшим, ніж GUI, припускаючи, що ви не включаєте час, необхідний для введення команд та натискання Enterклавіші.

З цього блогу суперпользователя цей образ дуже добре пояснює повільність

введіть тут опис зображення

Для конкретної команди, про яку йдеться, результати команди часу є

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

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

це було зроблено з каталогу, що містить 100000 порожніх файлів


9
Я б не говорив про "команди ехо". Більшість програм не є скриптовими сценаріями, тому вони не викликають луна. Проблема полягає в тому, що вони пишуть у stdout (або stderr ), іншими словами, вони виконують операції вводу / виводу, для яких потрібен час (введення / виведення коштує дорого), а також потрібні системні виклики (що означає більше контекстних комутаторів і, отже, більше пропустіть кеш і т.д.).
Бакуріу

23
Основна проблема з написанням в stdout - власне рендеринг цього вмісту; якщо ви перенаправляєте stdout у файл, або /dev/nullпродуктивність майже не заважає відображенню тексту на емуляторі терміналу.
Якоб Кралл

Як видно з графіку, різниця у часі незначна, якщо ви говорите про час відгуку з точки зору людини. Таким чином, якщо ви турбуєтесь про ефективність для людини, яка переглядає команду, це не має значення. Це актуально лише для величезної кількості файлів або для багатьох повторних запусків, де дорогоцінний час на комп'ютері дорогоцінно (наприклад, зайнятий веб-сервер або стародавній комп'ютер).
Падді Ландау

Найбільший вплив і, мабуть, єдиний випадок, коли це дійсно має значення, - це коли ви запускаєте команду на віддаленій машині через SSH. Докладний журнал може легко генерувати десятки мегабайт трафіку, який потрібно було б передати від хоста до вашої консолі. Одного разу я відчув прискорення в порядку 10 разів після видалення надмірної реєстрації консолі зі сценарію, який я запускав через SSH.
Сергій

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 мс між окремими запусками кожної команди може бути викликана великою кількістю факторів. Також не зрозуміло, якщо ви пропустили -vвихід або каталог був порожнім.

Не кажучи вже про уповільнення не від зайвих виконаних інструкцій, а від процесу запису до файлу чи терміналу. time' pretty much redirects the output to / dev / null '.
Коул Джонсон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.