Редактирование: UNИX, весна 2008, 05 лекция (от 12 марта)

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

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

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

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

Текущая версия Ваш текст
Строка 1: Строка 1:
'''Диктофонная запись:''' http://esyr.org/lections/audio/uneex_2008_summer/uneex_08_03_12.ogg
'''Диктофонная запись:''' http://esyr.org/lections/audio/uneex_2008_summer/uneex_08_03_12.ogg
-
Лектор открыл новый класс мышей, есть такая китайская фирма а4. Они стоят рублей 100-200-300, у них никаких закидонов, они сами собой определяются, дёшево и сердито.
+
Лектор открыл новый класс мышеё, есть такая китайская фирма а4. Они стоят рублей 100-200-300, у них никаких закидонов, они сами собой определяются, дёшево и сердито.
-
У нас в позапрошлый раз про перенаправление ввода-вывода. Лектору пришло в голову, что больщую часть курса можно найти в мане по шеллу, но не все маны по шеллу одинаково банальны. Мы так бодро взялись за то, что умеет шелл, и в конце лектор начал рассказывать, что умеет зыш или баш. Здесь разумно вспомнить дерево разнообразных шеллов на предмет того, чтобы в них ориентироваться, и поговорить о явлении под названием башизм. Вспоминая первое сборище, лектор патлся набросать концепцию упр.компьютеров с ком. строки. Шелл это интегратор, есть много инструментов, которые работают с системой, есть два пространства имён, ФС и тест в них, а мы же, когда говорим про управление, должны вообразить клей или конструктор, всякии винтики-шпунтики-резиновые-колекчки, с помощью которых собираются решения. Главное свойство, которое мы требуем от шелла --- быть конструктором.
+
У нас в позапрошлый раз про перенаправление ввода-вывода. Лектору пришло в голову, что больщую часть курса можно найти в мане по шеллу, но не все маны по шеллу одинаково банальны. Мы так бодро взялись за то, что умеет шелл, и в конце лектор начал рассказывать, что умеет зыш или баш. Здесь разумно вспомнить дерево разнообразных шеллов на предмет того, чтобы в них ориентироваться, и поговорить о явлении опд названием башизм. Вспоминая первое сборище, лектор патлся набросать концепцию упр.компьютеров с ком. строки. Шелл это интегратор, есть много инструментов, которые работают с системой, есть два пространства имён, ФС и тест в них, а мы же, когда говорим про упралвение, должны вообразить клей или конструктор, всякии винтики-шпунтики-резиновые-колекчки, с помощью которых собираются решения. Главное свойство, которое мы требуем от шелла --- быть конструктором.
-
Мы возвращаемся к функциям оболочки. Такую оболочку быстро изобрели, собственно sh, автор Стивен Борн, это была довольна простая штука, и целью создания такого довольно простого, БСД-лайк шелла, была оболочка. Две другие задачи практически не рассматривались. Поскольку доволно скоро выяснилось, что эти три составляющие --- важная вещь, было изобретён альтернативный шелл, csh, у которого был синтаксис, другой, похожий на язык С, дабы не умножать сущности сверх необходимости. Но поскольку С был предназначен для других целей, трудно придумать области, где они были одинаково хороши, и он не был похож на язык С, люди путались, синтаксис у него был странненьким, но даже в области программирования цыш был лучше ш, в области редактирования тоже.
+
Мы возвращаемся к функциям оболочки. Такую оболочку быстро изобрели, собственно sh, астор Дэвид(?) Борн, это была довольна простая штука, и целью создания такого довольнео простого, БСД-лайк шелла, была оболочка. Две другие задачи практически не рассматривались. Поскольку доволнь скоро выяснилось, что эти три составляющие --- важная вещь, было изобретён альтернативный шелл, csh, у которого был синтаксис, другой, похожий на язык С, дабы не умножать сущности сверх необходимости. Но поскольку С был предназначен для других целей, трудно придумать области, где они были одинаково хороши, и он не был похож на язык С, люди путались, синтаксис у него был странненьким, но даже в области программирования цыш был лучше ш, в области редактирования тоже.
-
Довольно долго эта парочка существовала в таком виде, но и тогда стало ясно, что программировать лучше на шелле, а не на с-шелле. В недрах коммерческих юниксов разрабтывался ksh, который сейчас pdksh (public domain ksh), он продолжал sh, в него включены были многие функции, которые есть в sh, была лучше редактирование, скриптование, но он долгое время был несвободный, поэтому нужно было что-то предпринимать. В то же врем появился bash --- Bourne Again SHell, это была уже весьма продвинутая программа, написанная с помощью библиотеки readline. Там феерически был доработан интерфейс ком. строки, язык программирования, глубоко были доработаны средства интеграции. Параллельно с этим вышла ветка tcsh, которая перекрывала баш по всем статьям, кроме одного, синтаксис там был с-шелльный, и лет десять назад считалось, что работать надо в tcsh, программировать в шелле. Ну и zsh, самый продвинутый. Где-то в это время случилось знаменательное событие --- свойства sh были стандартизованы в POSIX. В каком-то классич представлении ни одна из этих программ не совместима с POSIX, наиболее похожи bash и zsh в режиме POSIX, но есть ещё два проекта --- sh в FreeBSD, что же касаемо дистрибутивов Linux, dash/ash, это программы, которые считаются в достаточной степени совместимы с POSIX, чтобы на них программировать. Есть одно отличие такая нудность в трактовке посиха.
+
Довольно долго эта парочка существовала в таком виде, но и тогда стало ясно, что программировать лучше на шелле, а не на с-шелле. В недрах коммерческих юниксов разрабтывался ksh, который сейчас pdksh (public domain ksh), он продолжал sh, в него включены были многие функции, которые есть в sh, была лучше редактирование, скриптование, но он долгое время был несвободный, поэтому нужно было что-то принимаьб. В то же врем появился bash? Bourne Again SHell, это была уже весьма продвинутая программа, написанная с помощью библиотеки readline. Там феерически был доработан интерфейс ком. строки, язык программировани, глубоко были доработаны средства интеграции. Параллельно с этим вышла ветка tcsh, которая перекрывала баш по всем статьям, кроме одного, синтаксис там был с-шелльный, и лет десять назад считалось, что работатьнадо в tcsh, программировать в шелле. Ну и zsh, самый продвинутый. Где-то в это время случилось знаменательнос собития --- свойства sh были стандартизованы в POSIX. В каком-то классич представлении ни одна из этих программ не совместима с POSIX, наиболее похожи bash и zsh в режиме POSIX, но есть ещё два проекта --- sh в FreeBSD, что же касаемо дистрибутивов Linux, dash/ash, это программы, которые считаются в достаточной степени совместимы с POSIX, чтобы на них программировать. Есть одно отличие такая нудность в трактовке посиха.
Обратите внимание, что всё это идёт в развитии. Все эти программные продукты пишутся, развиваются. Тот факт, что существует стандарт, не мешает пользоваться нестандартными фичами, кроме того, удобство командной строки в стандарте не прописано. Тем не менее, если писать, то писать наиболее близко к стандарту, чтобы понимали все. Что же касается Линукса, то вероятность наличия там баша близится к 100 процентам, и есть такое явления, под названием башизм, когда пишут на баше. Среди крутых это считается моветоном. Ещё одним моветоном, даже большим, сччитается работа с терминалом, считая, что это линукс терминал, то есть, жёстко забитый еск-последоватекльности в скрипте для линух-терминалов.
Обратите внимание, что всё это идёт в развитии. Все эти программные продукты пишутся, развиваются. Тот факт, что существует стандарт, не мешает пользоваться нестандартными фичами, кроме того, удобство командной строки в стандарте не прописано. Тем не менее, если писать, то писать наиболее близко к стандарту, чтобы понимали все. Что же касается Линукса, то вероятность наличия там баша близится к 100 процентам, и есть такое явления, под названием башизм, когда пишут на баше. Среди крутых это считается моветоном. Ещё одним моветоном, даже большим, сччитается работа с терминалом, считая, что это линукс терминал, то есть, жёстко забитый еск-последоватекльности в скрипте для линух-терминалов.
Строка 17: Строка 17:
Сейчас продолжим тему интеграции. Сейчас разговариваем о том, что шелл явл. оболочкой, которая интегрирует другие утилиты. В прошлый раз говорили про перенаправление, что в юнихе существует класс объектов под названием канал, и перенаправление --- открытие канала, и одной программе в качестве стандартного вывода предл. одна сторона канала, другой в качестве стдин --- другая сторона. Мы поговарили про перенаправление ввода/вывода. Почему лектор настаивает на том, что этностися к части интегр.: есть много команд, которые занимаются обработкой и генер. текста, и надо это организовывать, и это перенапр. есть способ огр.
Сейчас продолжим тему интеграции. Сейчас разговариваем о том, что шелл явл. оболочкой, которая интегрирует другие утилиты. В прошлый раз говорили про перенаправление, что в юнихе существует класс объектов под названием канал, и перенаправление --- открытие канала, и одной программе в качестве стандартного вывода предл. одна сторона канала, другой в качестве стдин --- другая сторона. Мы поговарили про перенаправление ввода/вывода. Почему лектор настаивает на том, что этностися к части интегр.: есть много команд, которые занимаются обработкой и генер. текста, и надо это организовывать, и это перенапр. есть способ огр.
-
Продолжит лектор с темы окружение. Когда говорят про юнуксовые тексты, то там есть термин окружение. Что входит в понятие окружение:
+
Продолжит лектор с темы окружение. Когда гооворят про юнуксовые тексты, то там есть термин окружение. Что входит в понятие окружение:
* Дескрипторы открытых файлов
* Дескрипторы открытых файлов
* Переменные окружения
* Переменные окружения
* ID Группы процессов, PID, UID, ... --- идентификаторы
* ID Группы процессов, PID, UID, ... --- идентификаторы
-
Дело втом, что при порождении нового процесса в юниксе исп. два сис. вызова, форк и экзек, и оба вызова сохраняют окружение процесса. Это самое окружение --- эффективное средство упр. самим процессом. Какие способы модиф. поведения: параметры командной строки, конфиг-файлы, ... что делать программам среднего размера? с одной стороны, параметров конфигурации много, с другой --- конфиг излишен. Те модификаторы, которые хотите исправить, надо хранить в переменных. Переменные --- очень простая штука, у них есть имя, есть значение, строковые. Некоторые переменные окружения (практически все) являются управляющими. Например, PATH --- в нём хранится список каталогов, в которых лежат исполняемые файлы. Разумеется, очень удобно, что эта переменная окр. наследуется. Другой пример --- TTY, указывает то устройство, которое устройство вывода. Или EDITOR --- путь к редактору.... Их там довольно много, если сказать set, то можно увидить много переменных и не только Есть переменные, можно просто сказать var = QQ, и если её добавить в окружение командой export, то она помещается в окружение, которое наследуется.
+
Дело втом, что при порождении нового процесса в юниксе исп. два сис. вызова, форк и эхек, и оба вызова сохраняют окружение процесса. Это самое окружение --- эффективное средство упр. самим процессом. Какие способы модиф. поведения: параметры командной строки, конфиг-файлы, ... что делать программам среднего размера? с одной стороны, параметров конфигурации много, с другой --- конфиг излишен. Те модификаторы, которые хотите исправить, надо хранить в переменных. Переменные --- очень простая штука, у них есть имя, есть значение, строковые. Некоторые переменные окружения (практически все) являются управляющими. Например, PATH --- в нём хранится список каталогов, в которых лежат исполняемые файлы. Разумеется, очень удобно, что эта переменная окр. наследуется. Другой пример --- TTY, указывает то устройство, которое устройство вывода. Или EDITOR --- путь к редактору.... Их там довольно много, если сказать set, то можно увидить много переменных и не только Есть переменные, можно просто сказать var = QQ, и если её добавить в окружение командой export, то она помещается в окружение, которе наслдуется.
-
Ради чего затеян сегодняшний разговор: ради понятия подстановки. В скриптовых языках программирования часто, для того, чтобы обеспечить более лёгкий синт. разбор, переменные предваряются долларом: echo $Var. Оно же взятие значения (подстановка значения) переменной. Это краткая форма, более полная: ${Var}. Но, помимо того, что такая подстановка значения происходит, с этим значением можно много чего поделать. Первое: подстановка через двоеточие ${v:[-=?+]word} первое --- если переменная пустая, то подставится word, второе --- то же самое, что с минусом, только переменной ещё присвоится значение, вопросительный знак --- если не определена, то произойдёт ошибка, и выведится текст, последнее --- если переменная есть, то будет использовать word. Это первый тип подстановок, который позволяет поплясать относительно определённости.
+
Ради чего затеян сегодняшний разговор: ради понятия подстановки. В скриптовых языках программирования часто, для того, чтобы обеспечить более лёгкий синт. разбор, переменные предваряются долларом: echo $Var. Оно же взятие значения (подстановка значения) переменной. Это краткая форма, более олная: ${Var}. Но, помимо того, что такая подстановка значения происходит, с этим значением можно много чего поделать. Первое: подстановка через двоеточие ${v:[-=?+]word} первое --- если переменная пустая, то подставится word, второе --- то же самое, что с минусом, только переменной ещё присвоится значение, вопросительный знак --- если не определена, то произойдёт ошибка, и выведится текст, последнее --- если переменная есть, то будет использовать wordю Это первый тип подстановок, который позволяет поплясать относительно определённости.
Второй класс --- преобразование содержимого прееменной. ${#v} --- длина строки, содерж. символ. Ещё --- отрезание префикса и суффикса ${v%суффикс} --- отрезает минимальное, соотв. шаблону. {v%%суффикс} --- ототризание максимального суффикса. #, ## --- префиксы.
Второй класс --- преобразование содержимого прееменной. ${#v} --- длина строки, содерж. символ. Ещё --- отрезание префикса и суффикса ${v%суффикс} --- отрезает минимальное, соотв. шаблону. {v%%суффикс} --- ототризание максимального суффикса. #, ## --- префиксы.
Может быть не все знают, что это всё встроено в стандарт, а самое нужное и частое --- замено одного символа на другое нету.
Может быть не все знают, что это всё встроено в стандарт, а самое нужное и частое --- замено одного символа на другое нету.
-
Это всё к чему: подстановка знач. перем. подвергается некоей обработке. Более серьёзная обработка не предусмотрена. В баше/зыше предусмотрено большое количество флагов, и там чего только нельзя сделать: отрезать кусок опр. длины, превратить число из незвестно скольки цифр, в число фикс. длины. В зыше этому посвящено неск. страниц. Единственное, что непонятно --- зачем это нужно, если в перле оно не работает.
+
Это всё к чему: подстановка знач. перем. подвергается некоей обработке. Более серьёзная обработка не предусмотрена. В баше/зыше предусмотрено большое количество флагов, и там чего только нельзя сделать: отрезать кусок опр. длины, превратить число из незвестно скольки цифр, в число фикс. длины. В зыше этому посвящено неск. страниц. Единственное, что непонятно --- зачем это нужно, если в перле оно не рабьотает.
Каким образом сделать что-то развесистое, пользуясь стандартом, этот способ тоже называется substitutuion: $(команда)', `команда`, тут выполняется команда и результат подставляется вместо. В ЯП этого не увидите, эта команда нацелена на интеграцию. Фактически, если надо преобразовать строку, то вызвать команду, например, sed или tr. Например: New = $(echo "$v" | tr '[A-Z]' '*'). (рассказ про экранирование)
Каким образом сделать что-то развесистое, пользуясь стандартом, этот способ тоже называется substitutuion: $(команда)', `команда`, тут выполняется команда и результат подставляется вместо. В ЯП этого не увидите, эта команда нацелена на интеграцию. Фактически, если надо преобразовать строку, то вызвать команду, например, sed или tr. Например: New = $(echo "$v" | tr '[A-Z]' '*'). (рассказ про экранирование)
-
Обратите внимание на такуб простую штуку: у нас есть перенапр. ввода-вывода покомандное, и мы активно его исп., но чтобы превратить поток текста, который проходит через трубопровод, ничего дополнительно делать не надо. Опять-таки, в зыше может стоять какой-то флажок, который сделает что-то извратное. Это не стандрат, но это бывает удобно.
+
Обратите внимание на такуб простую шгтуку: у нас есть перенапр. ввода-вывода покомандное, и мы активно его исп., но чтобы превратить поток текста, который проходит через трубопровод, ничего дополнительно делать не надо. Опять-таки, в зыше может стоять какой-то флажок, который сделает что-то извратное. Это не стандрат, но это бывает удобно.
-
Ещё подстановкой называется арифметические подстановки. Не все знают, что арифм. подст. входят в посих. В частности, $((строка)), где вычисляются целочисленные выражения. Короче говоря, результат такой подстановки --- вычисленное выражение, содерж. в строке. Особенности новых шеллов, коотрые могут позволить сделать следующее: $((A+B)) --- так в стандарте делать нельзя, надо $(($A + $B)).
+
Ещё подстановкой называется арифметические подстановки. Не все знают, что арифм. подст. входят в посих. В частности, $((строка)), где вычисляются целочисленные выражения. Короче гоовря результат такой подстановки --- вычисленное выражение, содерж. в строке. Особенности новых шеллов, коотрые могут позволить сделать следующее: $((A+B)) --- так в стандарте делать нельзя, надо $(($A + $B)).
Есть две вещи, называемые подстановками.
Есть две вещи, называемые подстановками.
Строка 41: Строка 41:
Докончим про шаблоны. Там ещё две вещи: в каком порядке применяются подстановки, и шаблоны.
Докончим про шаблоны. Там ещё две вещи: в каком порядке применяются подстановки, и шаблоны.
-
Шаблоны. Ничего сложного нет, есть волшебный символ *, которые заменяется на все символы. Что такое шаблон: шаблон --- группа спец. символов, которые могут соотв. цепочкам символов. Эта группа символов исп. для того, чтобы сопост. с имеющ. шаблонов. Цепочка может подходить, или не подходить. Поставление шаблонов может быть разное, чаще всего используются регэкспы. В шелле используется более простой синтаксис. Шаблон, соотв. звёздочке, соотв. любой цепочке символов. Одиночный шаблон вопр. знак соотв. одному символу. Диапазон [символ1символ2символ3-символ4] соотв. одному символу из этого множества. С этим надо быть максимально осторожным, потому что порядок символов зависит от локали. Есть ещё [^...] --- символ не из диапазона. Шаблон, сост неспец. символу, соотв ему. Если встречается составной шаблон ...
+
Шаблоны. Ничего сложного нет, есть волшебный символ *, которые заменяется на все символы. Что такое шаблон: шаблон --- группа спец. символов, которые могут соотв. цепочкам спец. символов. Эта группа символов исп. для того, чтобы сопост. с имеющ. шаблонов. Цепочка может подходить, или не подходить. Поставление шаблонов может быть разное, чаще всего используются регэкспы. В шелле используется более простой синтаксис. Шаблон, соотв. звёздочке, соотв. любой цепочке символов. Одиночеый шаблон вопр. знак соотв. одному символу. Диапазон [символ1символ2символ3-символ4] соотв. одному символу из этого монжества. С этим надо быть максимально осторожным, потому что порядок символов зависит от локали. Есть ещё [^...] --- символ не из диапазона. Шаблон, сост неспец. символу, соотв ему. Если встречается составной шаблон ...
-
Шаблоны активно исп. шеллом для filename generation. В ком. стр. можно указывать вместо имени файла шаблон. Дело в том, что ... шелл попытается составить список файлов и превратит шаблон в список файлов. Если написать echo a*, то echo на вход подастся список файлов на букву a. fng происходит перед тем, как передаются параметры. С этим связан тот факт, что rm * не знает, что ей сказали звёздочку, она считает, что ей дали список файлов. Если шаблоны не экранировать, то они будут преобразованы. В FNG не входит слеш и файлы, начинающиеся с точки. Можно вообще отключить FNG.
+
Шаблоны активно исп. шеллом для filename generation. В ком. стр. можно указывать вместо имени файла шаблон. Дело в том, что ... шелл попытается составить список файлов и превратит шаблон в список файлов. Если написать echo a*, то echo на вход подастся список файлов на букву a. fng происходит перед тем, как передаются параметры. С этим связан тот факт, что rm * не знает, что ей сказали звёздочку, она считает, что ей дали список файлов. Если шаблони не экранировать, то они будут преобразованы. В FNG не входит слеш и файлы, начинающиеся с точки. Можно вообще отключить FNG.
Ещё одно: что будет, если ни одного файла на а не начинается. Первая линия поведения: выдать ошибку. Вторая --- не преобразовывать. По стандарту --- ошибка.
Ещё одно: что будет, если ни одного файла на а не начинается. Первая линия поведения: выдать ошибку. Вторая --- не преобразовывать. По стандарту --- ошибка.
-
Что-то лектор не рассказал про модиф. окружение. Если внутренний шелл поправил, то обратно не пробивается. В след. раз что-нибудь другое.
+
Что-то лектор не рассказал про модиф. окружение. Если внутренний шелл попроавил, то обратно не пробивается. В след раз что-нибудь другое.
{{UNИX, весна 2008}}
{{UNИX, весна 2008}}
-
<!-- Вроде бы вычитал опечатки. ManMachine. -->
+
{{Lection-stub}}

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

Шаблоны, использованные на этой странице:

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