Основы использования командной строки

Перенаправление ввода-вывода.

Мы уже говорили, что программа когда запускается, то ей сразу передаётся три файловых дескрипотра --- стандартный ввод (0), стандартный вывод (1) и стандартный поток ошибок (2). Открытием этих файлов занимается ОС, прграмма запущенная уже получает их открытыми. Её дело --- читать из 0, выводить 1 и ошибаться в 2. Не её дело открывать их и закрывать. Это очень удобно, потому что по умолчанию все три потока ассоциируются с терминалом. Нпример, прграмма cat довольно бессмысленна сама по себе --- читает из stdin и выводит в stdout. Но если программа, которая её запускает, подсунет ей другие дескрипторы, то оно так и будет, средствами шелла это делается при помощи <, > и >>. В первом случае перенаправление на стандартного потока ввода, во втором и третьем --- стандартного потока вывода в файл.

Для перенаправления stderr надо использовать 2> filename. При этом в последнем примере (запуск script) ничего на экран не попало, всё ушло в файлы.

Ещё более интересным и мнгообещающим является перенаправление stdout однй программы на stdin другой. При этом происходит такая штука: создаётся безымянный pipe, который в ФС отсутствует, но позволяет передавать данные между процессами.

Команда cal выводит календарь на месяц, раскрашивая сегодняшний день, поскольку она определяет, что stdout --- терминал. cal | cat организует перенаправление при помощи безымянного канала, при этом cal определяет, что stdout не терминал и ничего не раскрашивает.

Программа wc выводит количество символов-слов-переводов строк. cal | wc

Можно делать длинные конфейеры: cal | tac | tac , cal | head -2 | tail -1

Эта штука, перенаправление, очень эффективна, и почти любой сценарий этим пользуется.

Всякие способы работы с шеллом.

Шелл --- штука триединая. Тот интерпретатор, с которым мы работаем, выполняет три функции:

Что касается второй: мы немного поработали с фалами, обратите внимание, что у нас есть механизм передачи информации от одного прцесса другому. Если мы говоорим, что шелл --- ЯП, то очевидно, что есть переменные. Мы може присвоить переменной значение. Обратите внимание на две вещи: переменные все строковые. Почему --- потому что вычислительные задачи лучше решать на языке, пригодном для выч, и использовать подобные написанные программы, интегрируя их с другими шеллом. Имя переменной инициализируется в первом присваивании, значение переменной --- $имя. Это в общем показало нам шелл как некий извращённый языка программирования, если бы не одна особенность.

Текущий каталог вхдоит в окружение процесса, то есть любой процесс в системе имеет в своём контексте тот каталог, который является текущим. На самом деле, в этот контекст входит не только текущий каталог. В окружение входят дескрипторы всех открытых фойлв, идентификатор пользователя, идентификатор группы, и куча других переменных. Но у них какое-то значимое содержимое, каждая что-то значит. Более того, при форке процесса наследуется окружение. Важно, что переменная HOME была определена при логине и все процессы пользователя получ её в наследие. Кроме этго, есть много других переменных --- пользователь, имя шелла... Очень важная переменная PATH содержит список каталогов, в кторых шелл ищет исполнимые файлы, если данное имя команды не является встроенным. В отличие от доса, текущий каталог не используется при поиске программы.

Подстановки.

Чтобы дать пример того, насколько мощным интегратором является шелл, рассмотрим ещё одну вещь. Обратите внимание на то, каким образом переменной присваивается значение с пробелом. Закавычивание для параметра с пробелами сохраняет его в том виде, в котором он написан внутри каывчек. Если без кавычек, то будет иначе.

...

Генерация списк файлов по шаблону. Что это такое? Когда вы хотите совершить групповую операцию над файлами, то для задания групп используются специальные символы: * --- любе кол-во символов, ? --- один символ, в квадратных скобках диапзон [abc] --- несколько символов, [a-z] --- диапазон, [^a-z] --- исключение диапазона, то есть, символы, не входящие в диапазон.

Например, echo F*. Кто превратил F* в список файлов? Шелл. Когда шелл видит спецсимвол, то он применяет шаблон к именам файлов. Какие вещи не стоит забывать при использовании FNG: этим занимается шелл, и прграмма ничего об этом не знает. Второе --- файлы с точки не включаются в FNG по умолчанию. При этом .* включит файлы . и .., что не всегда хорошо. Общего решения для этого нет, но в частных случаях можно попробовать исключения (.[^.]* ..?*)


Сведения о ресурсах

Готовность (%)

Продолжительность (ак. ч.)

Подготовка (календ. ч.)

Полный текст (раб. д.)

Предварительные знания

Level

Maintainer

Start date

End date

15

1

1

1

1

MaximByshevskiKonopko, Allena, VsevolodKrishchenko


CategoryLectures CategoryPspo CategoryMpgu CategoryUneex