В этой главе мы узнали, как команды могут быть связаны друг с другом, и как вывод одной команды может быть использован в качестве ввода для другой.
Перенаправление ввода/вывода — обычная задача на машинах UNIX и Linux. Этот мощный механизм позволяет гибко использовать блоки, из которых сделан UNIX.
Наиболее часто используемыми перенаправлениями являются > и |. См. Приложение C, "Особенности Shell" для обзора команд перенаправления и других конструкций shell.
Команда | Значение |
date | Отображает дату и время |
set | Настройка опций оболочки |
sort | Сортирует строки текста |
uniq | Удаляет повторяющиеся строки из отсортированного файла |
Упражнения
Эти упражнения представляют дополнительные примеры того, как объединять команды. Основная цель - попытаться использовать клавишу Enter как можно меньше.
Все упражнения выполняются под обычным пользовательским ID, так что появляются некоторые ошибки. Когда вы их видите, не забывайте прочитать man-страницы!
- Используйте команду cut на вывод длинного списка каталога, чтобы отобразить только права доступа к файлам. Затем отправьте в конвейере этот вывод на sort и uniq, чтобы отфильтровать все повторяющиеся строки. Потом с помощью wc посчитайте различные типы разрешений в этом каталоге.
- Отправьте вывод date в файл. Добавьте выход ls в этот же файл. Отправьте этот файл на ваш локальный почтовый ящик (не указывайте ничего вроде «@домен», достаточно просто имени пользователя). В случае успеха при использовании Bash вы увидите новое почтовое уведомление.
- Отобразите список устройств в /dev, которые в настоящее время используются вашим UID. Организуйте конвейер через less, чтобы посмотреть их должным образом.
- Выполните следующие команды под непривилегированным пользователем.
Определите стандартный ввод, вывод и ошибку для каждой команды.
Теперь проверьте ваши результаты выдачи команд снова, теперь перенаправляя стандартный вывод в файл /var/tmp/output и стандартную ошибку в файл /var/tmp/error.
- cat nonexistentfile
- file /sbin/ifconfig
- grep root /etc/passwd /etc/nofiles > grepresults
- /etc/init.d/sshd start > /var/tmp/output
- /etc/init.d/crond start > /var/tmp/output 2>&1
- Как много процессов у вас сейчас работает?
- Сколько скрытых файлов в вашем домашнем каталоге?
- Используйте locate, чтобы найти документацию по ядру.
- Узнайте, какой файл содержит следующую запись:
root:x:0:0:root:/root:/bin/bashА эту:
system: root
- Посмотрите, что произойдет после выполнения этой команды:
- Какие команды вы бы использовали, чтобы проверить, какие сценарии в /etc/init.d запускают данный процесс?