Различия между версиями 3 и 4
Версия 3 от 2008-07-23 00:06:39
Размер: 10118
Редактор: MaximByshevskiKonopko
Комментарий:
Версия 4 от 2008-07-24 19:31:15
Размер: 10287
Редактор: MaximByshevskiKonopko
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 5: Строка 5:
Мы уже говорили, что программа когда запускается, то ей сразу передаётся три файловых дескрипотра --- стандартный ввод (0), стандартный вывод (1) и стандартный поток ошибок (2). Открытием этих файлов занимается ОС, прграмма запущенная уже получает их открытыми. Её дело --- читать из 0, выводить 1 и ошибаться в 2. Не её дело открывать их и закрывать. Эт очень удобно, потому что по умолчанию все три потока ассоциируются с терминалом. Нпример, прграмма cat довольно бессмысленна сама по себе --- читает из stdin и выводит в stdout. Но если программа, которая её запускает, подсунет ей другие дескрипторы, то оно так и будет, средствами шелла это делается при помощи <, > и >>. В первом случае перенаправление на стандартного потока ввода, во втором и третьем --- стандартного потока вывода в файл. Мы уже говорили, что программа когда запускается, то ей сразу передаётся три файловых дескрипотра --- стандартный ввод (0), стандартный вывод (1) и стандартный поток ошибок (2). Открытием этих файлов занимается ОС, прграмма запущенная уже получает их открытыми. Её дело --- читать из 0, выводить 1 и ошибаться в 2. Не её дело открывать их и закрывать. Это очень удобно, потому что по умолчанию все три потока ассоциируются с терминалом. Нпример, прграмма cat довольно бессмысленна сама по себе --- читает из stdin и выводит в stdout. Но если программа, которая её запускает, подсунет ей другие дескрипторы, то оно так и будет, средствами шелла это делается при помощи <, > и >>. В первом случае перенаправление на стандартного потока ввода, во втором и третьем --- стандартного потока вывода в файл.
Строка 9: Строка 9:
Ещё более инт. и мнгообещ. является перенапр. stdout однй программы на stdin другой. При этм порисх. такая штука: сздаётся безымянный pipe, который в ФС отсутствует, но позв. передавать данные между родственными процессами. Ещё более интересным и мнгообещающим является перенаправление stdout однй программы на stdin другой. При этом происходит такая штука: создаётся безымянный pipe, который в ФС отсутствует, но позволяет передавать данные между процессами.
Строка 11: Строка 11:
Команда cal выводит календарь на месяц, раскрашивая сегодняшний день, поск. она заметила, что stdout --- терминал. cal | cat орг перенаправление при помощи безымянного канала, при этом cal заметила, чт stdout не терминал и ничего раскрашивать не стала. cal | tac перевернула строки. Команда cal выводит календарь на месяц, раскрашивая сегодняшний день, поскольку она определяет, что stdout --- терминал. cal | cat организует перенаправление при помощи безымянного канала, при этом cal определяет, что stdout не терминал и ничего не раскрашивает.
Строка 17: Строка 17:
Эта штука, перенапр, чень эффективна, и пчти любй сценрий этим пользуется. Эта штука, перенаправление, очень эффективна, и почти любой сценарий этим пользуется.
Строка 19: Строка 19:
Всякие способы рабты с шеллом. Всякие способы работы с шеллом.
Строка 21: Строка 21:
Шелл --- штука триединая. Тот интерпретатор, с кторым мы работаем, выполн три функции:
 * Удобство работы с командной строкой. Нпример, истрия и tab. Интерп. к. с. предн. для орг. интерфейса.
 * Это оболочка или интеграт
р. Основное в конц. прогр. окр --- утилиты, которые обесп. командный инт. к ядру. Утилиты сами по семе решают одну очень неб. здачу по дбыче или преобр. текстововой инф (напр ls добывает, sort преобразует). При этом тот факт, чт о эти утилиты можно как-то друг к другу приклепать и сделать так, чтбы они работали совместно, то есть бесп. постр. реш. польз. задачи таким путём --- это обесп. именно шеллом. Пдобное удобство манип. и интегр. утилит предст тлько шелл, поск. это явл. его осн. задачей.
 * Непоср. постр. решения, язык программирования. Это полноц. высокоур язык, объектами которого явл. объекты системы.
Шелл --- штука триединая. Тот интерпретатор, с которым мы работаем, выполняет три функции:
 * Удобство работы с командной строкой. Например, истроия и tab completion. То есть, интерфейс взаимодействия с пользователем.
 * Это оболочка или инте
гратор. Основное в конц. прогр. окр --- утилиты, которые обесп. командный инт. к ядру. Утилиты сами по семе решают одну очень неб. здачу по дбыче или преобр. текстововой инф (напр ls добывает, sort преобразует). При этом тот факт, чт о эти утилиты можно как-то друг к другу приклепать и сделать так, чтбы они работали совместно, то есть бесп. постр. реш. польз. задачи таким путём --- это обесп. именно шеллом. Пдобное удобство манип. и интегр. утилит предст тлько шелл, поск. это явл. его осн. задачей.
 * Непосредственное построение решения, язык программирования. Это полноценный высокоуровневый язык, объектами которого являются объекты файловой системы.
Строка 26: Строка 26:
Чт касается второй: мы немного пораб. с фалами, обр. внимание, что у нас есть мех. перед. инф. от одного прцесса другому. Если мы гвоорим, что шелл --- ЯП, то очевидно, чт есть переменные. Мы може присв. переменной значение. бр. внимание на две вещи: переменные все строковые. Почему --- потому что выч. задачу лучше решать на языке, пригодном для выч, и исп. подобные написанные программы. Имя переменной исп. в пер. присв, значение переменной --- $имя. Это в общем показало нам шелл как некий извр. языка прьгр, если бы не одна подробнсть --- лектор говорил о том, что тек. каталог вхдоит в окр процесса, то есть любй процесс в линуксе имеет в своём описании тот каталог, который явл. текущим. на самом деле, в это описание входит не тлько текущий кталог. В окр. входят дескр. всех фойлв, идент. польз., идент. группы, в кр. входит куча всего и входит куча переменных. Но у них какое-то значимое содержимое, кждая что-то значит. Более того, при насл. процесса наследуется и окружение. Важно, что переменная HOME была определена при логине и все процессы пльз. получ её в насл., и все процессы могут польз. $HOME для получ. домшней папки. Кроме этго, есть много других переменных --- пользователь, имя шелла... Очень важная перем. PATH, сост. из списка каталогов, в кторых шелл ищет программу, если она не явл. встроенной. В тличие от доса, текущий каталог е исп. при поиске программы. Что касается второй: мы немного поработали с фалами, обр. внимание, что у нас есть мех. перед. инф. от одного прцесса другому. Если мы гвоорим, что шелл --- ЯП, то очевидно, чт есть переменные. Мы може присв. переменной значение. бр. внимание на две вещи: переменные все строковые. Почему --- потому что выч. задачу лучше решать на языке, пригодном для выч, и исп. подобные написанные программы. Имя переменной исп. в пер. присв, значение переменной --- $имя. Это в общем показало нам шелл как некий извр. языка прьгр, если бы не одна подробнсть --- лектор говорил о том, что тек. каталог вхдоит в окр процесса, то есть любй процесс в линуксе имеет в своём описании тот каталог, который явл. текущим. на самом деле, в это описание входит не тлько текущий кталог. В окр. входят дескр. всех фойлв, идент. польз., идент. группы, в кр. входит куча всего и входит куча переменных. Но у них какое-то значимое содержимое, кждая что-то значит. Более того, при насл. процесса наследуется и окружение. Важно, что переменная HOME была определена при логине и все процессы пльз. получ её в насл., и все процессы могут польз. $HOME для получ. домшней папки. Кроме этго, есть много других переменных --- пользователь, имя шелла... Очень важная перем. PATH, сост. из списка каталогов, в кторых шелл ищет программу, если она не явл. встроенной. В тличие от доса, текущий каталог е исп. при поиске программы.
Строка 45: Строка 45:
|| 2 || 1 || 1 || 1 || || 1 || MaximByshevskiKonopko, [[Allena]], VsevolodKrishchenko || || || || 11 || 1 || 1 || 1 || || 1 || MaximByshevskiKonopko, [[Allena]], VsevolodKrishchenko || || ||

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

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

Мы уже говорили, что программа когда запускается, то ей сразу передаётся три файловых дескрипотра --- стандартный ввод (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

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

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

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

  • Удобство работы с командной строкой. Например, истроия и tab completion. То есть, интерфейс взаимодействия с пользователем.
  • Это оболочка или интегратор. Основное в конц. прогр. окр --- утилиты, которые обесп. командный инт. к ядру. Утилиты сами по семе решают одну очень неб. здачу по дбыче или преобр. текстововой инф (напр ls добывает, sort преобразует). При этом тот факт, чт о эти утилиты можно как-то друг к другу приклепать и сделать так, чтбы они работали совместно, то есть бесп. постр. реш. польз. задачи таким путём --- это обесп. именно шеллом. Пдобное удобство манип. и интегр. утилит предст тлько шелл, поск. это явл. его осн. задачей.
  • Непосредственное построение решения, язык программирования. Это полноценный высокоуровневый язык, объектами которого являются объекты файловой системы.

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

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

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

...

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

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


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

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

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

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

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

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

Level

Maintainer

Start date

End date

11

1

1

1

1

MaximByshevskiKonopko, Allena, VsevolodKrishchenko


CategoryLectures CategoryPspo CategoryMpgu CategoryUneex

PspoClasses/080717/04ConsoleBasics (последним исправлял пользователь eSyr 2012-05-27 15:01:26)