41
Занятие 4. Shell

Занятие 4. Shell

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: Занятие 4. Shell

Занятие 4.Shell

Page 2: Занятие 4. Shell

Что такое Shell?

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

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

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

среды

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

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

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

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

имен файлов

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

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

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

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

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

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

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

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

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

Shell

Ядро

ОС

Аппаратура

Shell

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

Page 3: Занятие 4. Shell

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

$ more fra <Tab>

$ more frankenstein <Return>

……..

$ more abc <Tab>

$ more abcdef <Tab>

1)abcdefXlmnop

2)abcdefYlmnop

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

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

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

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

$ cd tree/dog.breads/retriiver

Page 5: Занятие 4. Shell

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

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

Page 6: Занятие 4. Shell

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

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

Синтаксис:env

Пример:$ envНОМЕ=/home/gerryEDITOR=viTERM=70092…PATH=/usr/bin:/usr/contrib/bin:/usr/local/bin:\/home/gerry/bin

Page 7: Занятие 4. Shell

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

Среда пользователя содержит следующую информацию:

•Маршрутное имя начального каталога пользователя

•Куда посылать электронную почту пользователя

•Часовой пояс, в котором работает пользователь

•Где shell будет искать команды

Page 8: Занятие 4. Shell

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

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

TERM, COLUMNS и LINES Описывают параметры используемого терминала

HOME Маршрутное имя начального каталога

PATH Путь поиска команд

LOGNAME Входное имя пользователя, задаваемое при входе в систему

Некоторые из этих переменных устанавливаются для каждого пользователя самой системой, другие устанавливаются явно в /etc/profile или .profile.

Page 9: Занятие 4. Shell

Установка переменных shell'a

•Переменная shell'a имеет имя, которому ставится в соответствие некоторое значение.

•Значение переменной может быть изменено.• Некоторые переменные shell'a определяются в процессе входа пользователя в систему.

•Пользователь может определить новые переменные shell'a.

Синтаксис:

name=value

Пример:

$ PATH=/usr/bin/Xll:/usr/bin

Page 10: Занятие 4. Shell

Что происходит при входе в систему?1. getty

•выводит содержимое файла /etc/issue

•выдает приглашение login:

•запускает процесс login

2. login

•определяет допустимость введенного имени пользователя и пароля

•помещает пользователя в начальный каталог

•запускает shell пользователя

3. shell

•выполняет /etc/ profile или /etc/csh.login

•выполняет . profile или . login, находящиеся в пользовательском каталоге

•выполняет .bashrc если файл создан пользователем и его имя присвоено переменной ENV в файле .profile

•запускает пользовательский shell

Page 11: Занятие 4. Shell

Внутренние команды shell и команды UNIX

Внутренние команды встроены в shell:

set, while, if, for

Команды UNIX находятся в /usr/bin:

cdlsmorefile

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

Page 12: Занятие 4. Shell

Поиск команд - команда 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 :

Page 13: Занятие 4. Shell

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

Опции

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

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

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

Page 14: Занятие 4. Shell

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

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

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

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

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

Page 15: Занятие 4. 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

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

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

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

Page 16: Занятие 4. Shell

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

Page 17: Занятие 4. Shell

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

Синтаксис:

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

Пример:

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

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

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

$ PS1=hi_there$ Изменение переменной среды

Page 18: Занятие 4. Shell

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

Синтаксис:

$переменная Указывает 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>

Page 19: Занятие 4. Shell

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

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

$ file=this

$ file1=that

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

sh: fileand: parameter not set

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

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

Page 20: Занятие 4. Shell

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

Page 21: Занятие 4. Shell

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

Синтаксис:

$(команда) Указывает 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

Page 22: Занятие 4. Shell

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

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

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

Page 23: Занятие 4. 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

Page 24: Занятие 4. Shell

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

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

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

Page 25: Занятие 4. 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

Page 26: Занятие 4. Shell

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

Синтаксис: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.

Page 27: Занятие 4. Shell

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

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

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

Page 28: Занятие 4. Shell

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

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

Выдает:

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

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

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

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

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

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

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

Page 29: Занятие 4. 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

Page 30: Занятие 4. Shell

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

Пример:$ 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

Page 31: Занятие 4. Shell

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

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

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

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

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

Page 32: Занятие 4. Shell

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

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

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

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

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

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

Page 33: Занятие 4. Shell

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

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

Page 34: Занятие 4. 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 ? Результат: ?

Page 35: Занятие 4. Shell

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

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

$ 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

Page 36: Занятие 4. Shell

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

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

Примеры

$ 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

Page 37: Занятие 4. Shell

Использование кавычек:введение

• Ряд символов имеет «специальный» смысл для shell`а:

- пробел

- возврат каретки

- $

- #

- *

- <>

• «Закавычивание» позволяет отменить особый смысл специальных символов.

Page 38: Занятие 4. Shell

Символы закавычивания

Обратный слэш \

Одиночные кавычки ‘

Двойные кавычки “

Page 39: Занятие 4. 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

Page 40: Занятие 4. Shell

«Закавычивание»: символ ‘

‘ Отменяет специальный смысл всех символов, заключенных между одиночными кавычками

Пример:$ 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

Page 41: Занятие 4. Shell

«Закавычивание»: символ “

“ Отменяет специальный смысл всех символов, заключенных между двойными кавычками, за исключением \, $, {имя переменной}, $(команда)

и “

Пример:$ 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, \, ‘, “