Всегда полезно выполнять любые действия, которые уменьшают количество считываемых или записываемых байтов. Это может быть важно для процедур, чье основное время тратится на передачу данных между несколькими процессами, а не на создание большого числа коротких процессов. Некоторые фильтры сокращают выводной поток, другие же, как правило, увеличивают его. Например, второй из при водимых примеров работает быстрее, т.к. ввод для sort будет значительно меньше.
sort file | grep pattern
grep pattern file | sort
Просмотр каталогов может занимать довольно много времени, особенно в приложениях, использующих сложные структуры каталогов и длинные имена путей. Применение команды cd может вам позволить сократить длинные имена путей и тем самым уменьшить количество каталогов при поиске. В качестве упражнения проверьте следующие две команды:
ls -l /usr/bin* >/dev/null
cd /usr/bin; ls -l * >/dev/null
Вторая команда выполняется быстрее, т.к. ей требуется прос мотр меньшего количество каталогов.
Переменная PATH предоставляет удобный механизм для организации процедур. Однако применять ее нужно с разумной осторожностью, иначе может произойти значительное увеличение дополнительных затрат системных ресурсов.
Процесс нахождения команды заключается в чтении содержимого каждого каталога, включенной в переменную PATH, до тех пор пока не будет найдена нужная команда. В качестве примера рассмотрим, как вызывается nroff (предположим, что команда находится в каталоге /usr/bin), когда переменной PATH присвоено значение ":/bin:/ usr/bin". Последовательность просмотра каталогов следующая:
.
/
/bin
/
/usr
/usr/bin
В нашем примере было просмотрено 6 каталогов. Если же переменной PATH присвоен длинный список путей, то количество просматриваемых каталогов может значительно возрасти.
Бездумное присвоение переменной PATH значений приводит к большим затратам времени на ненужный просмотр каталогов. Ниже приводятся четыре примера значений переменной PATH в порядке от самого плохого варианта до наилучшего:
:/usr/john/bin:/usr/localbin:/bin:/usr/bin
:/bin:/usr/john/bin:/usr/localbin:/usr/bin
:/bin:/usr/bin:/usr/john/bin:/usr/localbin
/bin::/usr/bin:/usr/john/bin:/usr/localbin
Первый вариант следует исключить. Остальные варианты приемлемы и выбор среди них определяется составом команд, содержащихся в каталогах /bin и /usr/bin.
Процедуру, которая вызывает много коротких команд, часто можно ускорить, если внутри процедуры установить переменную PATH так, чтобы просматривалось только необходимое число каталогов в оптимальном порядке.