Редактирование: UNИX, весна 2008, 03 лекция (от 27 февраля)

Материал из eSyr's wiki.

Перейти к: навигация, поиск

Внимание: Вы не представились системе. Ваш IP-адрес будет записан в историю изменений этой страницы.

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.

Текущая версия Ваш текст
Строка 7: Строка 7:
Это то, что вы вводите в командной строке. Если вы говрите ls -s a*, то ls --- операция, -s, a* --- параметры, причём a* раскрывается в несколько параметров.
Это то, что вы вводите в командной строке. Если вы говрите ls -s a*, то ls --- операция, -s, a* --- параметры, причём a* раскрывается в несколько параметров.
-
Операции могут быть двух видов: команда самого шелла, для команды никакой новый процесс запускать не надо. Второй вид --- программа. Что касается параметров, они отже двух видов: объекты и ключи. В приведённом примере параметр-объект --- file, параметр-ключ --- -s. Между ними будут разделители. Командная строка читается как предложения, предложения состоят из слов, слово --- посл. символов, не явл. разделителем. У этой команды два параметр. В чём разница? Что касается параметров-объектов, то это такие ..., это просто некие объекты для нашей программы. Для ls --- имена файлов, для которых надо выводит информацию Для echo --- объекты --- строки, которые надо вывести. Параметр-объект именует объект, с которым будет работать программа. Ключ имеет несколько наукообразное название --- модификатор выполнения. ls выводит информацию о файлах, и если ключей нет, то выводит только имена. Ключ -s указывает, что нужно выводить некоторую дополнительную информацию --- размер файла в блоках.
+
Операции могут быть двух видов: команда самого шелла, для команды никакой новый процесс запускать не надо. Второй вид --- программа. Что касается параметров, они отже двух видов: объекты и ключи. В приведённом примере параметр-объект --- file, параметр-ключ --- -s. Между ними будут разделители. Командная строка читается как предложения, предложения состоят из слов, слово --- посл. символов, не явл. разделителем. У этой команды два параметр. В чём разница? Что касается параметров-объектов, то это такие ..., это просто некие объекты для нашей программы. Для ls --- имена файлов, для которых надо выводит информацию Для echo --- объекты --- строки, которые надо вывести. Параметр-объект именует объект, с которым будет работать программа. Ключ имеет умное название модификатор выполнения. ls выводит инф. о файлах, если ключей нет, то выводит только имена. Ключ -s выводит дополнительную информацию --- размер файлов в блоках.
-
Традиционно договорились, что ключи в unix начинаются на минус. Ключи бывают двух видов, во-первых, однобуквенные. Чем хороши однобуквенные ключи? Если использовать принцип аббревиативности (ключ начинается на ту же букву, что и слово, которое он символизирует), то их достаточно просто запомнить и достаточно легко вписать в командную строку. Клчюей у ls много. Кроме того, можно склеить несколько ключей, указав их с одним минусом: -saF. Но принцип аббревиативности тяжело соблюдать, т.к. букв много и они часто бывают заняты, в итоге ключи уже плохо запоминаются. Поэтому ещё есть полнословные ключи, т.н. gnu-style. Такой ключ предваряется двумя минусами, дальше идет целое слово или даже несколько слов. Писать всё это безобразие руки отвалятся, но понятно, что если написано –-long, то понятно, о чёми речь, а если -l, то не сразу. В силу того, что есть удобные библиотеки для разбора командной строки, большинство программ имеет и такие, и сякие ключи. Обычно, весь набор ключей представлен в полнословном варианте и некоторое подмножество --- однобуквенными эквивалентами.
+
Традиционно считается, что ключи в unix начинаются на минус. Ключи бывают двух видов: однобуквенные. Чем хороши однобукв. ключи? Если исп. принцип аббревиативности (ключ начинается на ту же букву, которую ключ символизирует), то их достаточно просто запомнить и достаточно легко вписать в командную строку. Клчюей у ls много. Кроме того, можно делать несколько ключей за одним минусом: -saF. Но принцип аббревиативности тяжело соблюдать, и если он не соблюдается, то оно плохо запоминается. Поэтому ещё есть полнословные ключи, gnu-style. Они предваряются двумя минусами и за ними идут слова. Писать всё это безобразие руки отвалятся, но понятно, что если написано –long, то понятно, о чёми речь, а если -l, то не сразу. В силу того, что есть большое количество библиотек для разбора командной строки, имеют и такие, и сяки ключи. Но большинство это не значит все, и есть программы, которые не работают с полнословными ключами. Итак, когда мы выводим команду, она является некоей операцией, остальное будут параметрами, ключи бывают тоже двух видов. Лектор надеется в ближайшее время делать страничку, посвящённую лекциям, и там он сошлётся на учебник, где есть больше. Этот вопрос пока закрыли.
-
. Итак, когда мы выводим команду, она является некоей операцией, остальное будут параметрами, ключи бывают тоже двух видов. Лектор надеется в ближайшее время делать страничку, посвящённую лекциям, и там он сошлётся на учебник, где есть больше. Этот вопрос пока закрыли.
+
-
Лектор хочет рассмотреть. тему, связанную с перенаправлением ввода-вывода. Просто здесь, по нормальному плану, надо бросить всё и рассказать про то, как ман читать. Но сегодня всё-таки про терминалы.
+
Лектор хочет рассм. тему, связанну с перенаправленим ввода-вывода. Просто здесь, по нормальному плану, надо бросить всё и рассказать про то, как ман читать. Но сегодня всё-таки про терминалы.
-
Дело в том, что некоторые символы в командной строке интерпретируются самим шеллом и не являются командой в командной строке. На самом деле шелл разделяет символы на три класса: разделители, неспециальные символы, специальные символы. Один символ лектор уже упомянул, это символ *. Чтобы немного докончить тему с процессами и терминалами, рассмотрим несколько символов, которые управляют перенаправлением ввода-вывода.
+
Дело в том, что некоторые символы в командной строке интерпретируются самим шеллом и не явл. командой в командной строке. На самом деле шелл разделяет символы на три класса: разделители, неспециальные символы, специальные символы. Один символ лектор уже упомянул, это символ *. Чтобы немного докончить тему с процессами и терминалами, рассм. неск. символов, которые правляют перенапр. ввода-вывода.
Когда ОС запускает опр. программу, у этой программы сразу доступно три потока данных, одно на ввод и два на вывод. Есть стандартный ввод, stdin, поток данных номер 0; стандартный вывод? stdout --- поток данных 1; stderr --- 2. С ними можно работать как с файлами. Поскольку манипуляция с потоками данных есть наиболее ффективный способ организации работы программ, то шелл должен это уметь. Любая программа имеет три потока данных. Для тех, кто это проходил, не секрет, что три этих дескриптора прото налседуются, поскольку там случилса fork, потом exec. Но, слава богк, когда программа выполняется в активном режиме, всё происходит не так: делается форк, получается два шелла, отличающиеся только результатом форка. Потомок запускает программу, в это время поток-папа выполняет wait(), и ждёт завершения. Это не вполне похоже на то, как мы могли бы себе представить. Можно было бы подумать, что есть специальный вызов «запустить программу», но это было бы неудобно.
Когда ОС запускает опр. программу, у этой программы сразу доступно три потока данных, одно на ввод и два на вывод. Есть стандартный ввод, stdin, поток данных номер 0; стандартный вывод? stdout --- поток данных 1; stderr --- 2. С ними можно работать как с файлами. Поскольку манипуляция с потоками данных есть наиболее ффективный способ организации работы программ, то шелл должен это уметь. Любая программа имеет три потока данных. Для тех, кто это проходил, не секрет, что три этих дескриптора прото налседуются, поскольку там случилса fork, потом exec. Но, слава богк, когда программа выполняется в активном режиме, всё происходит не так: делается форк, получается два шелла, отличающиеся только результатом форка. Потомок запускает программу, в это время поток-папа выполняет wait(), и ждёт завершения. Это не вполне похоже на то, как мы могли бы себе представить. Можно было бы подумать, что есть специальный вызов «запустить программу», но это было бы неудобно.

Пожалуйста, обратите внимание, что все ваши добавления могут быть отредактированы или удалены другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. eSyr's_wiki:Авторское право).
НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!

Личные инструменты
Разделы