Операционная система UNIX
Шрифт:
где
% или + | Текущее задание — самое последнее запущенное или вновь запущенное задание |
– | Предыдущее задание (по отношению к текущему) |
?строка | Задание, для которого строка присутствует в командной строке запуска |
n | Задание с номером n |
pref | Задание, на которое можно уникально указать префиксом pref , например, команда ls(1), запущенная в фоновом режиме, адресуется заданием %ls |
Система управления заданиями позволяет использовать следующие дополнительные команды:
bg [%jobid] | Продолжает выполнение остановленного задания в фоновом режиме. Без параметра относится к текущему заданию. |
fg [%jobid] | Продолжает выполнение остановленного задания в текущем режиме. Если задание jobid выполнялось в фоновом режиме, команда перемещает его в текущий режим. |
jobs [-p | -l] [%jobid ... ] | Выводит информацию об остановленных и фоновых заданиях с указанными номерами. Если последний
– l Вывести идентификатор группы процессов и рабочий каталог. – р Вывести только идентификатор группы процессов. |
kill [-signo] %jobid | Обеспечивает те же возможности, что и команда kill(1), но по отношению к заданиям. |
stop %jobid | Останавливает выполнения фонового задания. |
wait %jobid | Ожидает завершения выполнения задания jobid и возвращает его код возврата. |
Приведенный ниже пример иллюстрирует использование команд управления заданиями и не нуждается в комментариях:
Основные утилиты UNIX
В предыдущих разделах мы использовали некоторые утилиты UNIX. Ниже приводятся краткие характеристики утилит, выпавших из поля нашего зрения. Более подробно с различными утилитами можно познакомиться в электронном справочнике man(1).
Утилиты для работы с файлами
Поле [
cd [dir] | Изменяет текущий каталог. При задании без параметра — производит переход в домашний каталог пользователя. |
cmp [opt] file1 file2 | Утилита cmp(1) сравнивает два файла, указанных в качестве аргументов. Если файлы одинаковы, никакого сообщения не выводится. В противном случае выводятся данные о первом несоответствии между этими файлами (в данном примере первое различие найдено в 13-м символе 4-й строки): $ cat file1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 $ cat file2 1 2 3 4 5 6 diff1 7 8 9 10 11 12 13 14 15 diff2 $ cmp file1 file2 file1 file2 differ: char 13, line 4 |
diff [opt] file1 file2 | Утилита diff(1) также сравнивает два файла и выводит список изменений, которые необходимо внести в содержимое этих файлов для того, чтобы преобразовать первый файл во второй. По существу, вывод утилиты diff(1) представляет собой команды редактора ed(1), необходимые для преобразования file1 в file2 : $ diff file1 file2 3a4 > diff1 5c6, 7 < 11 12 13 14 15 ... > 11 12 13 14 15 diff2 |
cp [opt] file1 file2 cp [opt] file1 ... dir | Утилита cp(1) служит для копирования файлов. При этом создается не жесткая связь, а новый файл: $ cp file1 file2 $ ls -li file1 file2 261425 -rw-r--r-- 1 andy user 49 Dec 24 12:58 file1 261427 -rw-r--r-- 1 andy user 49 Dec 24 13:13 file2 |
mv [opt] file1 file2 mv [opt] file1 ... dir | Утилита mv(1) изменяет имя файла. Если последний параметр является каталогом, то число аргументов утилит cp(1) или mv(1) может превышать 2. В этом случае будет производиться копирование или перемещение указанных файлов в каталог. |
rm [opt] file1... rmdir dir1... | Утилиты удаления файлов и каталогов. При этом удаляются только записи имен файлов в соответствующих каталогах, фактическое содержимое файла (метаданные и дисковые данные) будет удалено, если число жестких связей для файла станет равным 0. |
ls [opt] [file1 file2 ...] | Без параметров утилита ls(1) выводит имена файлов текущего каталога. В качестве параметров можно задать имена каталогов, содержимое которых необходимо вывести, или имена файлов, информацию о которых нужно получить. Опции утилиты позволяют получить список различной информативности и формата. |
ln [opt] source target | Утилита ln(1) создает жесткую связь имени source с файлом, адресуемым именем target. При использовании опции -s будет создана символическая связь. |
mkdir [-m mode] [-p] dir1... | Создать каталог. |
pwd | Вывести имя текущего каталога. |
fgrep [opt] <подстрока> file1... | Утилиты поиска фрагментов текста в файлах. Могут использоваться в качестве фильтров в программных каналах. Для поиска подстроки в файлах можно использовать самую простую из утилит fgrep(1) (fast grep). Если подстрока поиска содержит пробелы или знаки табуляции, ее необходимо заключить в кавычки. Если подстрока уже содержит кавычки, их надо экранировать, поместив символ '\' непосредственно перед кавычками: $ fgrep "рассмотрим в разделе \"Создание процесса\"" chap* Если вы хотите сделать поиск нечувствительным к заглавным/строчным символам, используйте ключ – у. Для поиска строк, не содержащих указанную подстроку, используется ключ – v. |
grep [opt] <рег_выражение> file1... egrep [opt] <рег_выражение> file1... | Утилиты grep(1) и egrep(1) позволяют производить более сложный поиск, например, когда вы не уверены в написании искомого слова, или хотите найти слова, расположенные в определенных местах файла. В этом случае в качестве подстроки поиска указывается регулярное выражение ( рег_выражение ). Например, чтобы произвести поиск слова "центр" в американском (center) и британском (centre) написании, можно задать следующую команду: $ grep "cent[er]" file или $ grep "cent[er][er]" file [er] является регулярным выражением, соответствующим либо символу 'е' , либо 'r' . Регулярное выражение должно быть заключено в кавычки для предотвращения интерпретации специальных символов командным интерпретатором shell. |
cat [opt] file | Утилиты просмотра содержимого файла. Команда cat file выводит содержимое файла file на экран терминала. Если у вас есть подозрение, что файл не текстовый, т.е. содержит "непечатные" символы, лучше запустить cat(1) с ключом – v . В этом случае вывод таких символов (которые, кстати, могут нарушить настройки вашего терминала) будет подавлен. |
more [opt] file pg [opt] file | Если размер файла велик и его содержимое не помещается в терминальном окне, удобнее будет воспользоваться утилитами pg(1) и more(1), позволяющими выводить файл порциями. |
head [-n] file tail [opt] file | Посмотреть только начало (первые n строк) или конец (последние n строк) файла можно с помощью утилит head(1) и tail(1), соответственно. |
sort | Для
$ sort -d file >sorted file Вы можете указать номер слова строки, по которому необходимо произвести сортировку (точнее, номер поля записи; по умолчанию записью является строка, а поля разделены пробелами). Например, для сортировки строк файла file Андрей Май Борис Январь Владимир Март по месяцам, можно использовать команду $ sort -M +1 file в результате получим: Борис Январь Владимир Март Андрей Май Опция – M определяет сортировку по месяцам (не по алфавиту), опция +1 указывает, что сортировку необходимо проводить по второму полю каждой строки. |
cut | Позволяет отфильтровать указанные поля строк файла. Разделитель полей указывается опцией – d<sep> . Например, чтобы получить реальные имена пользователей системы (пятое поле файла паролей), можно использовать следующую команду: $ cat /etc/passwd | cut -f5 -d: ... WWW Administrator Yuri Korenev Serge Smirnoff W3 group Konstantin Fedorov Andrei Robachevsky Sergey Petrov |
wc file | Позволяет вывести число строк, слов и символов текста файла. |
find dir [opt] | Выполняет поиск файла в файловой системе UNIX, начиная с каталога dir . Например, для вывода полного имени исполняемого файла командного интерпретатора Bourne shell введите команду: $ find / -name sh -print 2>/dev/null /usr/bin/sh /usr/xpg4/bin/sh /sbin/sh С помощью опции – name указывается имя искомого файла, а с помощью опции – print — действие (вывести полное имя). С помощью find(1) можно производить поиск файлов по другим критериям, например, размеру, последнему времени модификации и т.д. Например, чтобы найти файлы с именем core (образ процесса, создаваемый при неудачном его завершении и используемый в целях отладки), последнее обращение к которым было, скажем, более месяца назад (скорее всего такие файлы не нужны пользователям и только "засоряют" файловую систему), можно задать команду: $ find / -name core -atime +30 -print /u/local/lib/zircon/lib/core /u/local/etc/httpd/data/zzmaps/core /home/amd/WORK/novosti/core /home/amd/WORK/access/core /home/guests/snell/core Если вы сторонник жесткого администрирования, то можно применить следующую команду: $ find / -name core -atime +30 -exec rm {} \; которая автоматически удалит все найденные файлы. |
chown user file ... | Изменяет владельца-пользователя указанных файлов. |
chgrp group file ... | Изменяет владельца-группу указанных файлов. |
chmod mode file ... | Изменяет права доступа и дополнительные атрибуты файлов. |
file file1 ... | Сканирует начало файла и пытается определить его тип. Если это текстовый файл (ASCII), file(1) пытается определить его синтаксис (текст, программа на С и т.д.). Если это бинарный файл, то классификация ведется по так называемому magic number, определения которого находятся в файле /etc/magic. $ file * nlc-2.2d.tar: tar archive report.doc: ascii text work: directory runme.c: с program text runme: ELF 32-bit MSB executable figure.gif: data |
Утилиты для управления процессами
nice -[[-]n] command | Утилита nice(1) применяется для запуска программы на выполнение с относительным приоритетом (nice number), отличным от принятого по умолчанию. Например, ввод команды: $ nice -10 big program приведет к запуску big program с большим значением nice. В UNIX чем больше значение nice number, тем меньший приоритет имеет процесс. Таким образом, при планировании выполнения процессов вероятность того, что ядро операционной системы выберет именно big_program для запуска, уменьшится. Как следствие, big_program станет выполняться дольше, но будет менее интенсивно потреблять процессорные ресурсы. Только администратор системы может повысить приоритет процесса (уменьшить значение nice number): $ nice - -10 job1 |
renice new_nice pid | Утилита renice(1) позволяет изменять приоритет процесса во время его выполнения. Например, команда $ renice 5 1836 устанавливает значение nice number процесса с идентификатором 1836 равным 5. Как и в случае команды nice(1), увеличить приоритет процесса может только администратор системы. |
ps | Утилита ps(1) выводит информацию о существующих процессах. При использовании различных опций она позволяет получить следующую информацию: |
F | статус процесса (системный процесс, блокировки в памяти и т.д.) |
S | состояние процесса (О — выполняется процессором, S — находится в состоянии сна, R — готов к выполнению, I — создается, Z — зомби) |
UID | идентификатор (имя) пользователя — владельца процесса |
PID | идентификатор процесса |
PPID | идентификатор родительского процесса |
PRI | текущий динамический приоритет процесса |
NI | значение nice number процесса |
TTY | управляющий терминал процесса ('?' — означает отсутствие управляющего терминала) |
TIME | суммарное время выполнения процесса процессором |
STIME | время создания процесса (может отличаться от времени запуска команды) |
COMMAND | имя команды, соответствующей процессу |
kill [signo] pid1, pid2... | Посылает процессам с идентификаторами pid1, pid2 и т.д. сигнал signo . Сигнал signo может быть указан как в числовой, так и в символьной форме. Команда kill -l выводит таблицу соответствия между символьными именами сигналов и их числовыми значениями: $ kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGIOT 7) SIGEMT 8) SIGFPE 9) SIGKILL 10) SIGBUS 11) SIGSEGV 12) SIGSYS 13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGUSR1 ... Таким образом, следующие две команды эквивалентны: $ kill -9 18793 $ kill -SIGKILL 18793 |
at [opt] время_запуска | Утилита at(1) считывает команды стандартного потока ввода и группирует их в задание at, которое будет выполнено в указанное пользователем время. Для выполнения задания будет запущен командный интерпретатор, в среде которого и будут исполнены команды. Например, следующая команда, позволит вам поздравить друга с днем рождения в назначенное время: $ at May 30 <<! cat birthday.txt | elm -s"C Днем Рождения!" [email protected] ! Вы можете добавить опцию -m, и после выполнения задания вам будет отправлено уведомление по электронной почте. |
Об администрировании UNIX
Достаточно открыть оглавление любого "Руководства системного администратора" для UNIX, чтобы оценить то многообразие задач и проблем, с которыми приходится сталкиваться при обслуживании системы:
Настройка жизненно важных для пользователей подсистем, таких как файловая система, система печати и сетевая поддержка. Каждая из них, в свою очередь, может быть разделена на десятки подзадач.
Регистрация пользователей. Каждый новый пользователь добавляет "забот" администратору системы, но какой же UNIX без пользователей!
Постоянный мониторинг системы и борьба с авариями. Причем, как правило, неполадки возникают в самый неподходящий момент и там, где их совсем не ждешь. Здесь от администратора потребуется хорошее знание не только операционной системы, но и аппаратуры, на которой она работает.
Настройка производительности системы.
Обучение, наставление, "ссоры" и "примирения" с пользователями операционной системы, которую вы обслуживаете.
В этой книге вы не найдете практического руководства по администрированию системы. Вместо этого в следующих главах мы попытаемся взглянуть на UNIX изнутри, понять как устроена эта система и как она работает. Может быть после этого вы посмотрите на руководства другими глазами, а администрирование системы не сведется к простому заучиванию команд.
В качестве компенсации за отсутствие практического руководства предлагаю вашему вниманию перевод материала, найденный мною на одном из WWW-серверов Internet, в котором приведена забавная классификация системных администраторов.
Можно выделить четыре типа системных администраторов UNIX:
Технический бандит. Обычно в прошлом системный программист, вынужденный заниматься системным администрированием. Пишет скрипты на смеси языков интерпретатора Bourne shell, sed, С, awk, perl и APL.