Введение в UNIX. Лекции

Автор работы: Пользователь скрыл имя, 29 Декабря 2011 в 20:20, курс лекций

Краткое описание

Способы организации файловой системы, списки команд и т.д. ОС Unix

Вложенные файлы: 1 файл

практика.doc

— 387.00 Кб (Скачать файл)

Найдите номер процесса свего шелла и  отправьте ему сигнал SIGHUP.

Введение  в Unix 
Лабораторный практикум

3. Процессы

(продолжение)

Войдите в систему в  среде X-Windows. Запустите  окно терминала

3.4. Подсистема управления заданиями

Подсистема управления заданиями (jobs) предназначена для  интерактивной работы пользователя с шеллом. Если шелл поддерживает эту  систему (/usr/bin/jsh, /usr/local/bin/bash), то пользователь получает дополнительные возможности манипулировать запущенными процессами: перемещать их с переднего плана (foreground, интерактивное исполнение) в фоновый режим (background) и обратно, приостанавливать и возобновлять работу процессов. Каждая команда или конвейер, вводимые пользователем с терминала, называются заданиями (job). В терминах процессов задание представляет собой группу процессов. Каждое задание существует в одном из следующих состояний: интерактивное (foreground), фоновое (background) или приостановленное (stopped). Эти термины определяются следующим образом:

  1. интерактивное задание выполняется и имеет доступ к управляющему терминалу для чтения и записи;
  2. фоновое задание выполняется без доступа к управляющему терминалу, то есть при попытке осуществить запись или чтение с терминала, все процессы группы получат сигнал SIGTTOU или SIGTTIN и будут приостановлены;
  3. приостановленное задание - это задание, находящееся в подвешенном состоянии в результате получения сигнала SIGSTOP, SIGTTIN или SIGTTOU; процессы присотановленного задания не выполняются, пока не будут переведены в интерактивное или фоновое состояние.

Каждое задание, запускаемое шеллом, получает целый  положительный номер, который далее  отслеживается шеллом и используется как идентификатор конкретного  задания. Если вы запускаете некоторый  процесс (конвейер) в фоновом режиме, то шелл выводит идентификатор запущенного процесса (группы процессов) и номер задания.

Вдобавок к  этому shell отслеживает состояния "текущего" и "предыдущего" заданий. Текущим  заданием является задание, запущенное в фоновом режиме или приостановленное из интерактивного состояния последним. Предыдущим заданием является последнее нетекущее задание. Текущее задание помечается в списке заданий плюсом, предыдущее - минусом.

Синтакис указания идентификатора задания имеет вид 

%jobid

где идентификатор  jobid может быть указан в одном из следующих форматов:

+ текущее задание 
- предыдущее  задание 
?string задание, командная  строка которого содержит уникальную строку string.
n задание номер n
pref задание, в котором  pref является уникальным префиксом имени команды (например, если команда find / запущена в фоновом режиме, на это задание можно сослаться как %find); pref не может содержать пустых символов, если они не взяты в кавычки.

При включенной подсистеме управления заданиями в целях манипуляции заданиями в пользовательскую среду добавляются следующие команды:

%bg % [jobid]

    Восстанавливает выполнение приостановленного задания, переводя его в фоновый режим. Если идентификатор задания %jobid опущен, то команда относится к текущему заданию.

%fg % [jobid]

    Восстанавливает выполнение приостановленного задания, переводя его в интерактивный  режим; также переводит задание, выполняющееся в фоновом режиме в интерактивный. Если идентификатор  задания %jobid опущен, то команда относится к текущему заданию.

%jobs [-l] % [jobid]

    Выводит список заданий, приостановленных или выполняющихся  в фоновом режиме. Если указан %jobid, собщает о конкретном задании. С ключом -l (буква "эль") выводит идентификаторы процессов.

%kill [ -СИГНАЛ ] %jobid

    Версия команды kill для заданий. Команда посылает процессам указаного задания  указанный сигнал, по умолчанию - SIGTERM.

Нажатие комбинации <Ctrl>-Z приостанавливает текущее интерактивное задание.

Запустите указанный  ниже процесс, подождите одну-две секунды и введите <Ctrl>-Z.

%vi &

<Ctrl>-Z

%ls -l out

%jobs

%jobs -l

%ls -l out

Cоздайте еще  один процесс, также переведя его в приоcтановленное состояние.

%vi &

<Ctrl>-Z

%jobs

%jobs -l

%bg %2

%jobs

Почему задание 2 не запустилось в фоновом режиме, а осталось остановленным?

%fg %2

...

<Ctrl>-Z

%jobs

  (запустим первое задание в фоне)

%bg %1

%ls -l out

%ls -l out

  (файл растет - задание выполняется)

   (чтобы приостановить задание 1, надо сначала перевести его в интерактивный режим)

%fg

<Ctrl>-Z

%jobs

%ls -l out

%ls -l out

  (файл не растет)

%kill %?vi

%jobs

%kill %1

%jobs

%rm out

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

Наличие или  отсутствие пользователя в системе  определяется записью в файле  /etc/passwd. Каждая запись представляет собой строку, состоящую из семи полей, разделенных двоеточиями.

%more /etc/passwd

Поля, слева направо, имеют следующие значения:

  1. USER - имя пользователя.
  2. PASSWORD - в старых версиях Unix в этом поле хранился зашифрованный пароль пользователя; в современных версиях поле содержит "x", а зашифрованный пароль хранится в файле /etc/shadow, который доступен для чтения только суперпользователю.
  3. UID - идентификатор пользователя - целое положительное число, 0 зарезервирован для суперпользователя.
  4. GID - идентификатор группы, в которую входит пользователь.
  5. GECOS - произвольный текстовый комментарий (как правило, имя и фамилия пользователя).
  6. HOME - домашний каталог пользователя.
  7. SHELL - шелл - программа, запускаемая для обслуживания сеанса работы пользователя в системе. Для обычных пользователей это - командный интерпретатор.

Если пользователь должен быть членом более одной группы, то для внесения его в другие группы, следует указать имя пользователя в соответствующей строке файла /etc/group.

%more /etc/group

Группа, которая  указана для пользователя в файле  /etc/passwd называется первичной группой этого пользователя, остальные группы, в которые он внесен согласно файлу /etc/group, - вторичными. Первчичная группа отличается от вторичных только в следующем:

  • Когда пользователь создает файл (и у каталога не установлен бит SGID), то группой-владельцем нового файла будет первичная группа пользователя (владельцем файла будет он сам).

Файл /etc/group таким образом выполняет две функции: во-первых, он определяет имена и идентификаторы групп; во-вторых, указывает участие пользователей во вторичных для них группах.

Чтобы определить, в каких группах вы участвуете, надо подать команду 

%groups

После входа  пользователя в систему, текущим  каталогом для него становится его домашний каталог (указанный в поле HOME в файле /etc/passwd). Перед выводом приглашения командной строки шелл sh выполняет команды, записанный в файле .profile (начинается с точки), находящемся в домашнем каталоге пользователя (bash выполняет файл .bashrc). В этом файле как правило устанавливаются переменные окружения (в первую очередь - переменная PATH) и какие-либо параметры сессии.

%more .profile

Обратите внимание на наличие текущего каталога (".") в списке PATH. Обратите внимание на команду export, которая помечает переменную как "экспортируемую", т.е. перменная будет передаваеться в окуржение дочерних процессов, запускаемых вашим шеллом; иначе она будет видна только внутри процесса шелла.

Рекомендуемое значение переменной PATH:

PATH=/usr/bin:/usr/sbin:/usr/ccs/bin:/usr/ucb:/usr/local/bin:/usr/openwin/bin:.

Изменить переменную PATH "на ходу", добавив в нее  еще один путь (в каталог prog, где  находится программа hello) можно следующим образом:

%hello

%PATH=$PATH:./prog

%export PATH

%echo $PATH

%hello

(Знак доллара  перед именем переменной означает  подстановку значения этой переменной  в командную строку.)

Часто требуется  также изменить значение переменной MANPATH, указывающей, где находятся  документы справочника man. Если эта переменная не установлена, то man ищет документы в /usr/man, однако программное обеспечение, устанавливаемое в /usr/local, как правило помещает свою документацию в /usr/local/man. Кроме того, язык perl располагает документацию по своим библиотекам внутри /usr/local/lib/perl*. Таким образом, переменная MANPATH, устанавливаемая в .profile, может иметь вид

MANPATH=/usr/man:/usr/local/man:/usr/local/lib/perl5/5.00503/man

export MANPATH

Для корректной работы клавиши <Backspace> (ASCII код 8 или Ctrl-H) может понадобиться установить соответствующий параметр терминала, задающий символ, используемый для стирания предыдущего символа:

stty erase '^H'

Узнать, какие  пользователи работают в настоящий  момент в системе и чем занимаются, можно с помощью команд

%who

%w

Отправить пользователю почтовое сообщение можно командой mail имя_пользователя. Текст сообщения команда mail берет со своего стандартного ввода.

Отправьте почту  сами себе

%mail ваше_имя_пользователя

Subject: hello, me! 

Hi, myself!

.

(Признак конца сообщения - строка состоящая из одной точки)

Просмотр почты:

%mail

Команды режима просмотра:

      d - удалить последнее просмотренное сообщение,

      q - выход,

      <Enter> - просмотреть следующее сообщение.

Гораздо более  удобным и популярным почтовым клиентом для Unix является программа pine. Она имеет встроенную и хорошо написанную справочную систему (на аглийском языке). Программа pine написана в Вашингтонском университете и распространяется свободно (ftp://ftp.cac.washington.edu/pine/).

Если компьютер  подключен к Интернет и на нем  работает транспортный почтовый агент (как правило, это программа  sendmail), то с помощью программы mail (и, конечно, pine) можно отправлять почту в Интернет. Программа mail очень хорошо подходит для отправки коротких текстовых сообщений.

Информация о работе Введение в UNIX. Лекции