Занятие 4. Shell

Preview:

DESCRIPTION

Занятие 4. Shell. Что такое Shell ?. Интерпретируемый язык программирования. Выполнение команд. Средства настройки среды. Shell. Ядро ОС. Подстановка команд. Аппаратура. Назначение переменных. Конвейеры. Shell. Подстановка переменных. Перенаправление ввода/вывода. - PowerPoint PPT Presentation

Citation preview

Занятие 4.Shell

Что такое Shell?

Выполнениекоманд

Выполнениекоманд Средства настройки

средыСредства настройки

среды

НазначениепеременныхНазначениепеременных

Подстановка переменных

Подстановка переменных

Генерацияимен файловГенерация

имен файлов

Интерпретируемыйязык

программирования

Интерпретируемыйязык

программирования

Подстановкакоманд

Подстановкакоманд

КонвейерыКонвейеры

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

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

Shell

Ядро

ОС

Аппаратура

Shell

Пользователи

Автоматическое завершение имен файлов

$ more fra <Tab>

$ more frankenstein <Return>

……..

$ more abc <Tab>

$ more abcdef <Tab>

1)abcdefXlmnop

2)abcdefYlmnop

$ more abcdefзатем X или Y, после чего нажмите <Tab>. Соответствующее имя файла будет автоматически завершено shell'ом

Автоматическое завершение имен файлов(2)

$ cd tr <Tab> do <Tab> r <Tab>

$ cd tree/dog.breads/retriiver

Буферирование команд

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

Среда пользователя

•Среда пользователя описывает сеанс работы с системой для программ, которые он запускает.

Синтаксис:env

Пример:$ envНОМЕ=/home/gerryEDITOR=viTERM=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:

cdlsmorefile

Система находит команды UNIX, используя переменную PATH.

Поиск команд - команда whereis

Синтаксис:

whereis [-b|-m|-s] команда Просматривает список каталогов для поиска

указанной команды

Примеры:

$ whereis if

if :$$ whereis lsls: /sbin/ls /usr/bin/ls /usr/share/man/man1.Z/ls.1$$ whereis cdcd: /usr/bin/cd /usr/share/man/man1.Z/cd.1$$ whereis holdyourhorsesholdyourhorses :

Поиск команд - команда whereis(2)

Опции

-b поиск только по двоичным кодам

-m поиск по описаниям команды

-s поиск по исходным текстам

Shell-подстановки

•Подстановка переменных

•Подстановка команд

•Тильда-подстановка

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

Shell: хранение переменных

color=bluecount=3

dir_name=/home/user3/tree

PS1=$PATH=/usr/bin:/usr/contrib/bin

HOME=/home/user3TERM=70094a

SHELL=/usr/bin/sh

/usr/bin/sh

Локальные переменные

Программный код

Переменные среды

Shell: вывод на экран всех переменных, содержащихся в данный момент в среде

$ envMANPATH=/usr/share/man:/usr/contrib/man:/usr/local/manPATH=/usr/bin:/usr/ccs/bin:/usr/contrib/bin:/usr/local/binLOGNAME=user3ERASE=^HSHELL=/usr/bin/shHOME=/home/user3TERM=hptermPWD=/home/user3TZ=PST8PDTEDITOR=/usr/bin/vi

Shell: установка значений переменных

Синтаксис:

переменная=значение

Пример:

$ color=lavender Установка локальной переменной

$ count=3 Установка локальной переменной

$ dir_name=tree/car.models/ford Установка локальной переменной

$ PS1=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/user3:.

$echo $HOME

/home/user3

$ file_name=$HOME/file1

$ more $file_name

<contents of /home/user3/file1>

Использование фигурных скобок ({})

•Пусть есть две переменные с именами file и file1. Этим переменным могут быть присвоены значения с помощью следующих операторов:

$ file=this

$ file1=that

$ echo $fileand$file1 ищет переменные fileand и file1

sh: fileand: parameter not set

$ echo ${file}and$filel thisandthat ищет переменные file и file1

Фигурные скобки могут использоваться для выделения имени переменной из окружающего текста.

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

Подстановка команд

Синтаксис:

$(команда) Указывает shell’у выполнить подстановку команды

Пример:$pwd/home/user2$curdir=$(pwd)$echo $curdir/home/user2$cd /tmp$pwd/tmp$cd $curdir$pwd/home/user2$curdir2=`pwd`$echo $curdir/home/user2

Тильда-подстановкиЕсли слово начинается со знака "тильда" (~), то для этого слова формируется расширение. Следует заметить, тильда — подстановка выполняется только если знак (~) указывается в начале слова, а в случае /~home/users тильда—подстановка не осуществляется.Тильда—подстановки выполняются в соответствии со следующими правилами:

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

Символ ~ может быть помещен в псевдоним команды.

Тильда-подстановки -пример

$ echo $HOME /home/user3 $ echo ~ /home/user3$ echo $PWD/home/user3/tree$ ls ~+/poodle/home/user3/tree/poodle$ echo $OLDPWD /home/user3/mail $ ls ~-/home/user3/mail/from.mike /home/user3/mail/from.jim$ echo ~tricia/file1/home/tricia/file1

Вывод значений переменных

env Вывод значений переменной среды. Это команда системы UNIX из каталога /usr/bin/envset Вывод на экран всех определенных к данному

времени переменных (локальных и переменных среды), а также их значений. Это команда shell. unset Удаление значения переменной. Это команда shell.

Вывод значений переменных-пример

$ echo $HOME/home/user3

$ envHOME=/home/user3PATH=/usr/bin:/usr/contrib/bin:/usr/local/binSHELL=/usr/bin/sh

$ setHOME=/home/user3PATH=/usr/bin:/usr/contrib/bin:/usr/local/binSHELL=/usr/bin/shcolor=lavendercount=3dir_name=/home/user3/tree

$ unset dir_name

Экспортирование локальных переменных в среду

Синтаксис:export [переменная[=значение]]

Экспортирование переменной в среду

Пример:$ color=lavender$ export color$ export count=3$ exportexport PATH=/usr/bin:/usr/ccs/bin:/usr/contrib/bin:/usr/local/binexport color=lavenderexport count=3

Это встроенная команда shell.

Передача переменных в приложение

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

Существует один путь передачи данных порожденным процессам - через среду.

Наблюдение за процессами

ps [-f] выводит на экран информацию о выполняемых (или ожидающих) процессах в системе

Выдает:

UID идентификатор владельца процесса

PID идентификатор процесса

PPID идентификатор родителя процесса

STIME начальное время процесса

TTY идентификатор терминала, с которого запущен процесс TIME совокупное время выполнения процесса

COMMAND команда,соответствующая данному процессу

exec команда замещение текущего процесса (это встроенная команда shell).

Наблюдение за процессами

$ ps -fUID PID PPID С STIME TTY TIME COMMAND

user3 4702 1 1 08:46:40 ttyp4 0:00 -sh

user3 4895 4702 18 09:55:10 ttyp4 0:00 ps -f

$ ksh

$ ps -fUID PID PPID C STIME TTY TIME COMMAND

user3 4702 1 0 08:46:40 ttyp4 0:00 -sh

user3 4896 4702 1 09:57:20 ttyp4 0:00 ksh

user3 4898 4896 18 09:57:26 ttyp4 0:00 ps -f

$ exec ps -fUID PID PPID C STIME TTY TIME COMMAND

user3 4702 1 0 08:46:40 ttyp4 0:00 -sh

user3 4897 4702 18 09:57:26 ttyp4 0:00 ps -f

Порожденные процессы и среда•Порожденные процессы не могут изменить среду родительских процессов.

Пример:$ export color=lavender $ ksh (создание порожденного процесса shell)$ ps -fUID PID PPID С STIME TTY TIME COMMANDuser3 4702 1 0 08:46:40 ttyp4 0:00 -shuser3 4896 4702 1 09:57:20 ttyp4 0:00 kshuser3 4898 4896 18 09:57:26 ttyp4 0:00 ps -f$ echo $colorlavender$ color=red$ echo $colorred$ exit (выход из порожденного процесса shell)$ ps -f (возвра г в родительский процесс)UID PID PPID С STIME TTY TIME COMMANDuser3 4702 1 0 08:46:40 ttyp4 0:00 -shuser3 4895 4702 1 09:58:20 ttyp4 0:00 ps -f$ echo $color lavender

Генерация имен файлов (расширение имен файлов):введение

• Символы генерации имен файлов интерпретируются shell`ом

• Shell будет генерировать имена файлов, удовлетворяющие заданному шаблону

• Генерация имен файлов осуществляется перед выполнением команды

• Команда будет оперировать со сгенерированными именами файлов

Символы генерации имен файлов

? Соответствует любому одному символу за исключением лидирующей точки

[ ] Определяет группу символов

- Определяет группу символов, принадлежащих заданному диапазону

! Отвергает заданную группу символов

* Соответствует произвольному числу символов, в том числе и нулевому, исключая лидирующую точку

Генерация имен файлов и файлы с точкой

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

Генерация имен файлов:символ ?

? Соответствует любому одному символу за исключением лидирующей точкиПримеры

$ ls -a

…. .zz abc abcd abcdef abcz bbabb cyz zzayy

$ echo ??? Результат: abc cyz

$ echo abc? Результат: abcd abcz

$ echo ??a?? Результат: bbabb zzayy

$ echo .?? Результат: .zz

$ echo ? Результат: ?

Генерация имен файлов:символы [ ]

[ ] Определяет группу символов, из которой может подойти лишь одинПримеры

$ ls -a

…. .zz 1G 2G 7G 15G Ant Cat Dog abc abcdef ba cyz

$ echo [abc]?? Результат: abc cyz

$ echo [1-9][A-Z] Результат: 1G 2G 7G

$ echo [!A-Z]?? Результат: 15G abc cyz

Генерация имен файлов:символ *

* Соответствует произвольному числу символов, в том числе и нулевому, исключая лидирующую точку

Примеры

$ ls -a

…. .profile ab.dat abcd.dat abcde abcde.dat

$ echo * Результат: ab.dat abcd.dat abcde 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

user3 - your current directory is /home/user3/tree

$ echo “they’re all here, \\, ‘, \” “

they’re all here, \, ‘, “

Recommended