Скачать презентацию Занятие 4 Shell Что такое Shell Интерпретируемый Скачать презентацию Занятие 4 Shell Что такое Shell Интерпретируемый

9c1273fbafb721d81c073a8eaa371b0d.ppt

  • Количество слайдов: 41

Занятие 4. Shell Занятие 4. Shell

Что такое Shell? Интерпретируемый язык программирования Подстановка команд Конвейеры Выполнение команд Средства настройки среды Что такое Shell? Интерпретируемый язык программирования Подстановка команд Конвейеры Выполнение команд Средства настройки среды Ядро Аппаратура Shell Назначение переменных ОС Shell Перенаправление ввода/вывода Генерация имен файлов Подстановка переменных Пользователи

Автоматическое завершение имен файлов $ more fra <Tab> $ more frankenstein <Return> ……. . Автоматическое завершение имен файлов $ more fra $ more frankenstein ……. . $ more abc $ more abcdef 1)abcdef. Xlmnop 2)abcdef. Ylmnop $ more abcdef затем X или Y, после чего нажмите . Соответствующее имя файла будет автоматически завершено shell'ом

Автоматическое завершение имен файлов(2) $ cd tr <Tab> do <Tab> r <Tab> $ cd Автоматическое завершение имен файлов(2) $ cd tr do r $ cd tree/dog. breads/retriiver

Буферирование команд • Shell сохраняет команды, которые вводит пользователь в файле предыстории $HOME/. bash_history Буферирование команд • Shell сохраняет команды, которые вводит пользователь в файле предыстории $HOME/. bash_history • Команда history выводит на экран последние командs • Ранее введенные команды можно вызвать повторно, отредактировать и запустить вновь (клавишами вверх вниз)

Среда пользователя • Среда пользователя описывает сеанс работы с системой для программ, которые он Среда пользователя • Среда пользователя описывает сеанс работы с системой для программ, которые он запускает. Синтаксис: env Пример: $ env НОМЕ=/home/gerry EDITOR=vi TERM=70092 … PATH=/usr/bin: /usr/contrib/bin: /usr/local/bin: /home/gerry/bin

Среда пользователя(2) Среда пользователя содержит следующую информацию: • Маршрутное имя начального каталога пользователя • Среда пользователя(2) Среда пользователя содержит следующую информацию: • Маршрутное имя начального каталога пользователя • Куда посылать электронную почту пользователя • Часовой пояс, в котором работает пользователь • Где shell будет искать команды

Среда пользователя(3) Перечень наиболее общих переменных среды и их смысловое содержание TERM, COLUMNS и Среда пользователя(3) Перечень наиболее общих переменных среды и их смысловое содержание TERM, COLUMNS и LINES используемого Описывают параметры терминала HOME каталога Маршрутное имя начального PATH Путь поиска команд LOGNAME задаваемое Входное имя пользователя, при входе в систему Некоторые из этих переменных устанавливаются для каждого пользователя самой системой, другие устанавливаются явно в /etc/profile или. profile.

Установка переменных shell'a • Переменная shell'a имеет имя, которому ставится в соответствие некоторое значение. Установка переменных shell'a • Переменная shell'a имеет имя, которому ставится в соответствие некоторое значение. • Значение переменной может быть изменено. • Некоторые переменные shell'a определяются в процессе входа пользователя в систему. • Пользователь может определить новые переменные shell'a. Синтаксис: name=value Пример: $ PATH=/usr/bin/Xll: /usr/bin

Что происходит при входе в систему? 1. getty • выводит содержимое файла /etc/issue • Что происходит при входе в систему? 1. getty • выводит содержимое файла /etc/issue • выдает приглашение login: • запускает процесс login 2. login • определяет допустимость введенного имени пользователя и пароля • помещает пользователя в начальный каталог • запускает shell пользователя 3. shell • выполняет /etc/ profile или /etc/csh. login • выполняет. profile или. login, находящиеся в пользовательском каталоге • выполняет. bashrc если файл создан пользователем и его имя присвоено переменной ENV в файле. profile • запускает пользовательский shell

Внутренние команды shell и UNIX команды Внутренние команды встроены в shell: set, while, if, Внутренние команды shell и UNIX команды Внутренние команды встроены в shell: set, while, if, for Команды UNIX находятся в /usr/bin: cd ls more file Система находит команды UNIX, используя переменную PATH.

Поиск команд - команда whereis Синтаксис: whereis [-b|-m|-s] команда Просматривает список каталогов для поиска Поиск команд - команда whereis Синтаксис: whereis [-b|-m|-s] команда Просматривает список каталогов для поиска указанной команды Примеры: $ whereis if if : $ $ whereis ls ls: /sbin/ls /usr/share/man 1. Z/ls. 1 $ $ whereis cd cd: /usr/bin/cd /usr/share/man 1. Z/cd. 1 $ $ whereis holdyourhorses :

Поиск команд - команда whereis(2) Опции -b поиск только по двоичным кодам -m поиск Поиск команд - команда whereis(2) Опции -b поиск только по двоичным кодам -m поиск по описаниям команды -s поиск по исходным текстам

Shell-подстановки • Подстановка переменных • Подстановка команд • Тильда-подстановка Подстановки используются для увеличения скорости Shell-подстановки • Подстановка переменных • Подстановка команд • Тильда-подстановка Подстановки используются для увеличения скорости ввода и выполнения командных строк.

Shell: хранение переменных Локальные переменные color=blue count=3 dir_name=/home/user 3/tree Программный код /usr/bin/sh Переменные среды Shell: хранение переменных Локальные переменные color=blue count=3 dir_name=/home/user 3/tree Программный код /usr/bin/sh Переменные среды PS 1=$ PATH=/usr/bin: /usr/contrib/bin HOME=/home/user 3 TERM=70094 a SHELL=/usr/bin/sh

Shell: вывод на экран всех переменных, содержащихся в данный момент в среде $ env Shell: вывод на экран всех переменных, содержащихся в данный момент в среде $ env MANPATH=/usr/share/man: /usr/contrib/man: /usr/local/man PATH=/usr/bin: /usr/ccs/bin: /usr/contrib/bin: /usr/local/bin LOGNAME=user 3 ERASE=^H SHELL=/usr/bin/sh HOME=/home/user 3 TERM=hpterm PWD=/home/user 3 TZ=PST 8 PDT EDITOR=/usr/bin/vi

Shell: установка значений переменных Синтаксис: переменная=значение Пример: $ color=lavender переменной $ count=3 переменной Установка Shell: установка значений переменных Синтаксис: переменная=значение Пример: $ color=lavender переменной $ count=3 переменной Установка локальной $ dir_name=tree/car. models/ford переменной Установка локальной $ PS 1=hi_there$ среды Изменение переменной

Подстановка переменных Синтаксис: $переменная подстановку Указывает shell’у выполнить переменной Пример: $ echo PATH$ /usr/bin: Подстановка переменных Синтаксис: $переменная подстановку Указывает shell’у выполнить переменной Пример: $ echo PATH$ /usr/bin: /usr/contrib/bin: /usr/local/bin $PATH=$PATH: $HOME: . $ echo PATH$ /usr/bin: /usr/contrib/bin: /usr/local/bin: /home/user 3: . $echo $HOME /home/user 3 $ file_name=$HOME/file 1 $ more $file_name

Использование фигурных скобок ({}) • Пусть есть две переменные с именами file 1. Этим Использование фигурных скобок ({}) • Пусть есть две переменные с именами file 1. Этим переменным могут быть присвоены значения с помощью следующих операторов: $ file=this $ file 1=that $ echo $fileand$file 1 ищет переменные fileand и file 1 sh: fileand: parameter not set $ echo ${file}and$filel thisandthat ищет переменные file и file 1 Фигурные скобки могут использоваться для выделения имени переменной из окружающего текста.

Подстановка переменных(2) $ dir_name=tree/car. models/ford $ echo $dir_name tree/car. models/ford $ ls -F $dir_name Подстановка переменных(2) $ dir_name=tree/car. models/ford $ echo $dir_name tree/car. models/ford $ ls -F $dir_name sedan/ sports/ $ my_ls="ls -a. FC" $ $my_ls. / file. 1 tree/. . / file. 2 $ $my_ls $dir_name. /. . / sedan/ sports/ $ cd /tmp $ dir_name=/home/user 2/tree/dog. breeds/retriever $ $my_ls $dir_name. /. . / golden labrador mixed Использование абсолютного маршрутного имени в качестве значения переменной, которая представляет собой имя файла или каталога, позволяет пользователю вне зависимости от местонахождения в файловой системе, получать доступ к файлу или каталогу

Подстановка команд Синтаксис: $(команда) Пример: $pwd /home/user 2 $curdir=$(pwd) $echo $curdir /home/user 2 $cd Подстановка команд Синтаксис: $(команда) Пример: $pwd /home/user 2 $curdir=$(pwd) $echo $curdir /home/user 2 $cd /tmp $pwd /tmp $cd $curdir $pwd /home/user 2 $curdir 2=`pwd` $echo $curdir /home/user 2 Указывает shell’у выполнить подстановку команды

Тильда-подстановки Если слово начинается со знака Тильда-подстановки Если слово начинается со знака "тильда" (~), то для этого слова формируется расширение. Следует заметить, тильда — подстановка выполняется только если знак (~) указывается в начале слова, а в случае /~home/users тильда—подстановка не осуществляется. Тильда—подстановки выполняются в соответствии со следующими правилами: • Отдельный знак (~) или предшествующий знаку (/) заменяется на значение переменной HOME. • Тильда с последующим знаком +, заменяется на значение переменной PWD. Переменная PWD устанавливается командой cd при переходе в новый текущий каталог. • Тильда с последующим знаком —, заменяется на значение переменной OLDPWD. Переменная OLDPWD устанавливается командой cd для предыдущего рабочего каталога • Если за знаком тильда следуют несколько символов, а затем символ /, то shell пытается установить не являются ли эти символы именем пользователя в системе. Если это так, то последовательность символов заменяется маршрутным именем начального каталога пользователя. Символ ~ может быть помещен в псевдоним команды.

Тильда-подстановки -пример $ echo $HOME /home/user 3 $ echo ~ /home/user 3 $ echo Тильда-подстановки -пример $ echo $HOME /home/user 3 $ echo ~ /home/user 3 $ echo $PWD /home/user 3/tree $ ls ~+/poodle /home/user 3/tree/poodle $ echo $OLDPWD /home/user 3/mail $ ls ~/home/user 3/mail/from. mike /home/user 3/mail/from. jim $ echo ~tricia/file 1 /home/tricia/file 1

Вывод значений переменных env Вывод значений переменной среды. Это системы UNIX из каталога set Вывод значений переменных env Вывод значений переменной среды. Это системы UNIX из каталога set Вывод на экран всех определенных к данному времени переменных (локальных и среды), а также их значений. Это команда /usr/bin/env переменных команда shell. unset shell. Удаление значения переменной. Это команда

Вывод значений переменных-пример $ echo $HOME /home/user 3 $ env HOME=/home/user 3 PATH=/usr/bin: /usr/contrib/bin: Вывод значений переменных-пример $ echo $HOME /home/user 3 $ env HOME=/home/user 3 PATH=/usr/bin: /usr/contrib/bin: /usr/local/bin SHELL=/usr/bin/sh $ set HOME=/home/user 3 PATH=/usr/bin: /usr/contrib/bin: /usr/local/bin SHELL=/usr/bin/sh color=lavender count=3 dir_name=/home/user 3/tree $ unset dir_name

Экспортирование локальных переменных в среду Синтаксис: export [переменная[=значение]] Экспортирование переменной в среду Пример: $ Экспортирование локальных переменных в среду Синтаксис: export [переменная[=значение]] Экспортирование переменной в среду Пример: $ color=lavender $ export color $ export count=3 $ export PATH=/usr/bin: /usr/ccs/bin: /usr/contrib/bin: /usr/local/bin export color=lavender export count=3 Это встроенная команда shell.

Передача переменных в приложение Процесс - выполняющаяся программа. При вводе пользователем имени приложения (или Передача переменных в приложение Процесс - выполняющаяся программа. При вводе пользователем имени приложения (или команды) в ответ на приглашение shell, создается порожденный процесс, который исполняется по шагам: 1. fork - порождает параллельный процесс, который дублирует shell-процесс пользователя, включая код программы и области локальных данных и данных среды. 2. exec - заменяет кодовый сегмент и область локальных данных порожденного процесса на программный код и область локальных данных требуемого приложения. , затем выполняет процесс затребованного приложения, возвращает управление родительскому процессу. Существует один путь передачи данных порожденным процессам - через среду.

Наблюдение за процессами ps [-f] выводит на экран информацию о выполняемых (или ожидающих) процессах Наблюдение за процессами ps [-f] выводит на экран информацию о выполняемых (или ожидающих) процессах в системе Выдает: UID идентификатор владельца процесса PID идентификатор процесса PPID идентификатор родителя процесса STIME начальное время процесса TTY идентификатор терминала, с которого запущен процесс TIME совокупное время выполнения процесса COMMAND команда, соответствующая данному процессу exec команда замещение текущего процесса (это встроенная команда shell).

Наблюдение за процессами $ ps -f UID PPID user 3 4702 1 user 3 Наблюдение за процессами $ ps -f UID PPID user 3 4702 1 user 3 4895 4702 С 1 18 STIME TTY TIME COMMAND 08: 46: 40 ttyp 4 0: 00 -sh 09: 55: 10 ttyp 4 0: 00 ps -f C 0 1 18 STIME TTY TIME COMMAND 08: 46: 40 ttyp 4 0: 00 -sh 09: 57: 20 ttyp 4 0: 00 ksh 09: 57: 26 ttyp 4 0: 00 ps -f C 0 18 STIME TTY TIME COMMAND 08: 46: 40 ttyp 4 0: 00 -sh 09: 57: 26 ttyp 4 0: 00 ps -f $ ksh $ ps -f UID PID user 3 4702 user 3 4896 user 3 4898 PPID 1 4702 4896 $ exec ps -f UID PID user 3 4702 user 3 4897 PPID 1 4702

Порожденные процессы и среда • Порожденные процессы не могут изменить среду родительских процессов. Пример: Порожденные процессы и среда • Порожденные процессы не могут изменить среду родительских процессов. Пример: $ export color=lavender $ ksh (создание порожденного процесса $ ps -f UID PPID С STIME TTY user 3 4702 1 0 08: 46: 40 ttyp 4 user 3 4896 4702 1 09: 57: 20 ttyp 4 user 3 4898 4896 18 09: 57: 26 ttyp 4 $ echo $color lavender $ color=red $ echo $color red $ exit (выход из порожденного процесса shell) $ ps -f (возвра г в родительский процесс) UID PPID С STIME TTY user 3 4702 1 0 08: 46: 40 ttyp 4 user 3 4895 4702 1 09: 58: 20 ttyp 4 $ echo $color lavender shell) TIME 0: 00 COMMAND -sh ksh ps -f TIME 0: 00 COMMAND -sh ps -f

Генерация имен файлов (расширение имен файлов): введение • Символы генерации имен файлов интерпретируются shell`ом Генерация имен файлов (расширение имен файлов): введение • Символы генерации имен файлов интерпретируются shell`ом • Shell будет генерировать имена удовлетворяющие заданному шаблону • Генерация имен файлов выполнением команды осуществляется файлов, перед • Команда будет оперировать со сгенерированными именами файлов

Символы генерации имен файлов ? Соответствует любому одному символу за исключением лидирующей точки [] Символы генерации имен файлов ? Соответствует любому одному символу за исключением лидирующей точки [] Определяет группу символов, принадлежащих заданному диапазону Отвергает заданную группу символов ! * Соответствует произвольному числу символов, в том числе и нулевому, исключая лидирующую точку

Генерация имен файлов и файлы с точкой • Символы генерации имен файлов никогда не Генерация имен файлов и файлы с точкой • Символы генерации имен файлов никогда не породят имя файла, начинающееся с точки • В файлах, чьи имена начинаются с точки, она должна быть всегда указана явно

Генерация имен файлов: символ ? ? за Соответствует любому одному символу исключением лидирующей точки Генерация имен файлов: символ ? ? за Соответствует любому одному символу исключением лидирующей точки Примеры $ ls -a …. . zz abcdef abcz bbabb cyz zzayy $ echo ? ? ? Результат: abc cyz $ echo abc? Результат: abcd abcz $ echo ? ? a? ? Результат: bbabb zzayy $ echo. ? ? Результат: . zz $ echo ? Результат: ?

Генерация имен файлов: символы [ ] [] которой Определяет группу символов, из может подойти Генерация имен файлов: символы [ ] [] которой Определяет группу символов, из может подойти лишь один Примеры $ ls -a …. . zz 1 G 2 G 7 G 15 G Ant Cat Dog abcdef ba cyz $ echo [abc]? ? Результат: abc cyz $ echo [1 -9][A-Z] Результат: 1 G 2 G 7 G $ echo [!A-Z]? ? Результат: 15 G abc cyz

Генерация имен файлов: символ * * Соответствует произвольному числу символов, в том числе и Генерация имен файлов: символ * * Соответствует произвольному числу символов, в том числе и нулевому, исключая лидирующую точку Примеры $ ls -a …. . profile ab. dat abcde. dat $ echo * Результат: ab. dat abcde. dat $ echo. * Результат: . profile $ echo *. dat Результат: abcd. dat abcde. dat $ echo *e Результат: abcde

Использование кавычек: введение • Ряд символов имеет «специальный» смысл для shell`а: - пробел - Использование кавычек: введение • Ряд символов имеет «специальный» смысл для shell`а: - пробел - возврат каретки -$ -# -* - <> • «Закавычивание» позволяет отменить особый смысл специальных символов.

Символы закавычивания Обратный слэш  ‘ Одиночные кавычки Двойные кавычки “ Символы закавычивания Обратный слэш ‘ Одиночные кавычки Двойные кавычки “

 «Закавычивание» : символ   Отменяет специальный смысл непосредственно следующего за ним символа «Закавычивание» : символ Отменяет специальный смысл непосредственно следующего за ним символа Пример: $ echo the $ text the $text $ color=red white and blue $ echo the value of $color is $color the value of $color is red white and blue $ echo one two >three four one two three four

 «Закавычивание» : символ ‘ ‘ Отменяет специальный смысл всех символов, заключенных между одиночными «Закавычивание» : символ ‘ ‘ Отменяет специальный смысл всех символов, заключенных между одиночными кавычками Пример: $ color=‘red white and blue’ $ echo ‘the value of $color is $color’ the value of $color is $color $ echo ‘the value of $color is’ $color the value of $color is red white and blue

 «Закавычивание» : символ “ “ Отменяет специальный смысл всех символов, заключенных между двойными «Закавычивание» : символ “ “ Отменяет специальный смысл всех символов, заключенных между двойными кавычками, за исключением , $, {имя переменной}, $(команда) и “ Пример: $ color=“red white and blue” $ echo “the value of $color is $color” the value of $color is red white and blue $ cur_dir=“$LOGNAME - your current directory is $(pwd)” $ echo $cur_dir user 3 - your current directory is /home/user 3/tree $ echo “they’re all here, \, ‘, ” “ they’re all here, , ‘, “