9c1273fbafb721d81c073a8eaa371b0d.ppt
- Количество слайдов: 41
Занятие 4. Shell
Что такое Shell? Интерпретируемый язык программирования Подстановка команд Конвейеры Выполнение команд Средства настройки среды Ядро Аппаратура Shell Назначение переменных ОС Shell Перенаправление ввода/вывода Генерация имен файлов Подстановка переменных Пользователи
Автоматическое завершение имен файлов $ more fra
Автоматическое завершение имен файлов(2) $ cd tr
Буферирование команд • 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) Среда пользователя содержит следующую информацию: • Маршрутное имя начального каталога пользователя • Куда посылать электронную почту пользователя • Часовой пояс, в котором работает пользователь • Где shell будет искать команды
Среда пользователя(3) Перечень наиболее общих переменных среды и их смысловое содержание TERM, COLUMNS и LINES используемого Описывают параметры терминала HOME каталога Маршрутное имя начального PATH Путь поиска команд LOGNAME задаваемое Входное имя пользователя, при входе в систему Некоторые из этих переменных устанавливаются для каждого пользователя самой системой, другие устанавливаются явно в /etc/profile или. profile.
Установка переменных shell'a • Переменная shell'a имеет имя, которому ставится в соответствие некоторое значение. • Значение переменной может быть изменено. • Некоторые переменные shell'a определяются в процессе входа пользователя в систему. • Пользователь может определить новые переменные shell'a. Синтаксис: name=value Пример: $ PATH=/usr/bin/Xll: /usr/bin
Что происходит при входе в систему? 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, for Команды UNIX находятся в /usr/bin: cd ls more file Система находит команды UNIX, используя переменную PATH.
Поиск команд - команда 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 поиск по описаниям команды -s поиск по исходным текстам
Shell-подстановки • Подстановка переменных • Подстановка команд • Тильда-подстановка Подстановки используются для увеличения скорости ввода и выполнения командных строк.
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 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 переменной Установка локальной $ dir_name=tree/car. models/ford переменной Установка локальной $ PS 1=hi_there$ среды Изменение переменной
Подстановка переменных Синтаксис: $переменная подстановку Указывает 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=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 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 /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 $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 Вывод на экран всех определенных к данному времени переменных (локальных и среды), а также их значений. Это команда /usr/bin/env переменных команда shell. unset shell. Удаление значения переменной. Это команда
Вывод значений переменных-пример $ 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 [переменная[=значение]] Экспортирование переменной в среду Пример: $ 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] выводит на экран информацию о выполняемых (или ожидающих) процессах в системе Выдает: UID идентификатор владельца процесса PID идентификатор процесса PPID идентификатор родителя процесса STIME начальное время процесса TTY идентификатор терминала, с которого запущен процесс TIME совокупное время выполнения процесса COMMAND команда, соответствующая данному процессу exec команда замещение текущего процесса (это встроенная команда shell).
Наблюдение за процессами $ 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 будет генерировать имена удовлетворяющие заданному шаблону • Генерация имен файлов выполнением команды осуществляется файлов, перед • Команда будет оперировать со сгенерированными именами файлов
Символы генерации имен файлов ? Соответствует любому одному символу за исключением лидирующей точки [] Определяет группу символов, принадлежащих заданному диапазону Отвергает заданную группу символов ! * Соответствует произвольному числу символов, в том числе и нулевому, исключая лидирующую точку
Генерация имен файлов и файлы с точкой • Символы генерации имен файлов никогда не породят имя файла, начинающееся с точки • В файлах, чьи имена начинаются с точки, она должна быть всегда указана явно
Генерация имен файлов: символ ? ? за Соответствует любому одному символу исключением лидирующей точки Примеры $ 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`а: - пробел - возврат каретки -$ -# -* - <> • «Закавычивание» позволяет отменить особый смысл специальных символов.
Символы закавычивания Обратный слэш ‘ Одиночные кавычки Двойные кавычки “
«Закавычивание» : символ Отменяет специальный смысл непосредственно следующего за ним символа Пример: $ 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, , ‘, “


