Вы находитесь на странице: 1из 20

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

бы на начальном уровне и желающих освоить новую Юникс-подобную систему.


AIX: Отличия ОС AIX — версии Unix для компьютеров IBM, указаны дополнительно и
выделены таким образом.

1. Юникс – многопользовательская система


Компьютер под управлением ОС Юникс позволяет работать в системе одновременно многим
пользователям, и каждому из них запускать много задач. Для входа в систему в ответ на
приглашение
имя_хоста login:
Password:

нужно ввести имя пользователя, и подтвердить его паролем. Пользователь, точнее бюджет
пользователя (account), должны быть созданы заранее администратором. Это имя видимо
всем и к нему привязаны почтовый адрес, домашний каталог и прочая персональная
информация. Пароль, напротив, не должен знать никто, кроме самого пользователя. Он
является ключом к вашему бюджету в этой системе, иногда и во всей сети. Пароль меняется с
помощью команды
приглашение $ passwd

Пароль нужно продумать заранее. Он должен быть как минимум из 6 символов, из смеси
строчных, заглавных букв, цифр и прочих закавычек и значков. Правильно настроенная
система не позволит установить ни слабый пароль, ни похожий на имя пользователя.
Помните, что ваш пароль не должен знать никто, даже сисадмин, а украденный пароль
является самым первым шагом к компьютерным преступлениям.
Если вы успешно вошли в систему и получили приглашение командного процессора, или
shell'а, то теперь можете задавать команды и выполнять программы. После выполнения
любой программы вы снова возвратитесь в тот же самый shell, и так много-много раз, пока
не пожелаете закончить сеанс работы и выйти из системы. Для выхода нужно набрать
команду logout или exit, а проще всего Ctrl-D
Шелл выполняет команды, вводимые пользователем, и выдаёт результат. Если происходит
ошибка при вызове или выполнении программы, вместо результата выдаётся сообщение об
ошибке. Эти 3 потока называются соответственно Std IN, Std OUT, Std ERR, или потоки
с номерами 0, 1, 2. Обычно стандартный ввод принимается с клавиатуры, а стандартный
вывод и ошибки направляются на экран. Указанные потоки можно или по отдельности, или
вместе легко перенаправить либо в файл, либо на вход следующей программы (конвейер,
pipe), либо и в файл и в конвейер.
По умолчанию же ввод, вывод и ошибки привязаны соответственно к клавиатуре, экрану и
экрану. Исторически все это называется tty, или консоль, терминал. Вообще говоря,
терминалом может быть всё, что угодно, начиная с телетайпа (tty=tELEtyPE), или любая
программа, эмулирующая терминал.
На типичном компьютере IBM PC с обычной клавиатурой вы можете переключаться между
виртуальными консолями с помощью комбинации клавиш Alt-F1...Alt-F12. В каждой из этих
консолей, при настроенной программе getty, вы можете войти в систему и получить shell.
Команды, позволяющие посмотреть персональную информацию и пообщаться с другими
пользователями, следующие:
• id – имя пользователя и группы, к которым он принадлежит. для системы важны
только числовые id
• echo $TERM – тип терминала
• set – посмотреть или установить программное окружение
• tty – номер устройства консоли
• stty – детальные настройки терминала
• w – все пользователи и что они делают
• who – список пользователей и их терминалы
• finger – персональная информация о пользователях
• mail – чтение и отправка почтовых сообщений
• write – вывод на экран отдельному пользователю
• talk – двустороннее общение, разговор
Последние 2 программы работают только если пользователь не заблокировал вывод на свой
терминал. Запретить или разрешить вывод на экран можно командой mesg. Если вы получили
сообщение наподобие "write: user_name has messages disabled", всегда можно
отправить письмо и договориться о сеансе разговора.
Программы w, who, write работают только в пределах одного хоста (Юникс системы).
Программы finger, mail, talk могут обращаться к любому хосту в интернет, но только
если в этой системе настроены соответствующие сервисы.
AIX: БД пользователей IBM включает сотни тысяч пользователей, основана на LDAP и
RBAC (Role Based ACcounting) и использует дополнительные команды. Например,
посмотреть полный список атрибутов пользователя можно с помощью lsuser
Кроме средств общения и совместной работы пользователей, многопользовательская система
предусматривает и защиту юзеров и их информации друг от друга. Защита пользователей и
всей системы осуществляется с помощью объединения пользователей в группы и
предоставления определенных прав этим группам или отдельным пользователям.
Каждый файл и каждый каталог в системе принадлежит одному пользователю и одной
группе. Если пользователь, обращающийся к данному объекту, не является владельцем и не
входит в группу-владельца объекта, то права доступа определяются как "все остальные". Для
каждой из этих трех групп - сам пользователь, группа-владелец и все остальные, в свою
очередь, определены 3 типа доступа. Объект (файл, каталог, устройство) может быть
доступен для чтения, для записи и/или для исполнения. Посмотрите, как выглядят права
доступа и владельцы файлов (каталогов) на примере /home/ :
... $ ls -l /home
-rw-r--r-- 1 root root 0 Мар 23 12:43 README
drwxr-xr-x 3 root root 4096 Окт 9 21:15 ftp
drwxr-xr-x 36 ophil staff 4096 Мар 23 09:50 ophil
drwxr-sr-x 9 proba users 4096 Мар 21 13:36 proba
lrwxrwxrwx 1 root root 11 Окт 9 21:14 www -> ftp/pub/doc

Для изменения прав доступа к своим файлам и каталогам используются следующие


программы:
• chmod – изменение прав доступа к объекту
• chgrp – изменить владельца-группу, только если вы входите в группу
• umask – права доступа (числовое дополнение) ко вновь создаваемым файлам и
каталогам
• ls – просмотр содержимого каталога, много опций
• stat – полная информация об объекте в файловой системе
AIX: Последняя команда почему-то переименована в istat
В Юниксе есть особый пользователь, root, или пользователь с id=0, для которого не
действуют никакие вышеупомянутые ограничения. Если вы постоянно работаете под root'ом,
ваша система постепенно превратится в однопользовательскую персональную. Вы не будете
чувствовать ограничений, мешающим работе обычных юзеров. С другой стороны, если к
какому-то файлу доступ предоставлен по ошибке и нарушает защищенность системы, вы
этого тоже не заметите. Первая заповедь сисадмина – не работай из-под root'а !
Если файл является исполняемым, т.е. установлен бит исполнения, x в правах доступа, и у
вас есть право его выполнить, то вы можете использовать этот файл как имя программы. Все
команды, задаваемые в командной строке или вызываемые из других программ, являются
такими исполняемыми файлами либо непосредственно встроены в shell.
Запущенный таким образом на выполнение файл образует в памяти компьютера
исполняемый процесс. Этот процесс наследует от запустившего его пользователя права и
среду выполнения (environment). Кроме работы в нескольких консолях, можно также в
каждой из них запускать несколько задач (процессов). Для запуска задач и управления ими
используются следующие команды:
• & – в конце команды, запустить программу как фоновый процесс. Иногда полезно
заранее перенаправить вывод в файл.
• jobs – посмотреть список задач
• set – задать или показать все глобальные переменные и опции shell'a
• env – задать или показать глобальные переменные новому процессу
• fg – перевести процесс из фона в активный
• sleep – ждать указанное время
• Ctrl-Z – приостановить выполнение задачи
• kill – послать сигнал процессу, завершить процесс
• nohup – продолжать работу задачи после завершения сеанса юзера
• ps – посмотреть список процессов в системе
• at – запуск задачи в указанное время
• cron – запуск задач по расписанию
Подробнее о возможностях этих и других программ можно узнать из интерактивной помощи,
доступной при работе в системе Юникс. В первую очередь обратитесь к команде apropos с
каким либо словом, относящимся к вашей проблеме, например:
... $ apropos unix

Эта команда выдаёт список всех разделов руководства, содержащих в заголовке указанное
слово. Чтобы получить краткое описание всех имеющихся программ и руководств,
попробуйте вот это:
... $ apropos .|less

Первым словом в выводе apropos является название страницы руководства (manual),


подробно описывающим команду и все ее параметры. Т.н. страница руководства может быть
размером с хорошую книжку, но название раздел принадлежит цифре в скобках, следующей
за именем страницы. Чтобы посмотреть список и назначение разделов руководства,
воспользуйтесь командой
... $ man man

Еще одним обширным источником документации по установленным программам является


команда info. Эта программа предоставляет некоторые возможности гипертекста: см. info
info. Просто help выдаёт краткую справку по shell. Help имя_команды даст
пояснение по встроеным в shell командам и управляющим конструкциям. Полезные
сведения можно отыскать в документах серии HOWTO.
В бесчисленных мегабайтах документации, доступной он-лайн или в Сети, легко
заблудиться. Для самого общего представления знайте, что всю документацию можно
условно разбить на 3 уровня подробности и надежности.
Первый уровень предлагают статьи в стиле HOWTO и отдельные главы из технических книг.
Они описывают конкретную программу или проблему и предлагают рецепты для ее решения.
В качестве первого шага для ознакомления с какой-то темой такие документы могут быть
весьма полезны, часть из них переведена на русский язык. С другой стороны, книги и
популярные статьи неизбежно носят общий характер и отстают по времени от самых
последних версий.
Второй уровень представляет собой техническая документация, содержащаяся в страницах
руководства, info-учебниках, в разных документах, включенных в состав пакета и
находящихся обычно в каталоге /usr/doc/имя_пакета За качеством этих документов следят
авторы и сопроводители пакета, как правило, в них точно описаны все возможности
программ.
Наконец, для доступных в исходных кодах программ, безусловно полную и актуальную
информацию можно извлечь из исходников программ, комментариев, сопутствующих
документов и примеров. Наличие исходного кода дает возможность не только изучать
программу, но при желании развивать ее дальше.
Не бойтесь экспериментировать и учитесь задавать вопросы компьютеру. Только сама
система знает ответы на все связанные с ней вопросы. Для пытливого пользователя самым
лучшим, живым учебником является его компьютер .
2. Файловая система, стандарты
В системе Юникс есть еще одно весьма важное отличие от персональных систем. Структура
каталогов в файловой системе довольно строго регламентирована, большинство файлов
общего пользования обычно имеют вполне определенное место в дереве каталогов. Это
дерево растет корнем кверху и имеет приблизительно такую структуру:
• корень дерева каталогов
• bin - исполняемые файлы, минимум для старта системы
• boot - образы ядра, загрузчики
• dev - устройства, отображение физ. уст-в в ядро
• etc - файлы конфигурации, настройки
• home + - домашние (персональные) каталоги пользователей
• ftp - файловый архив для анонимного ftp
• ophil - пользователь
• proba - пользователь
• www - корневой для HTTP сервера
• lib + - основные разделяемые библиотеки, libc
• modules - загружаемые модули ядра
• security - pam-библиотечные модули
• lost+found - каталог для потеряных кластеров ext2fs
• mnt - точки монтирования дополнительных фс(файловых систем)
• AIX: opt - каталог для продуктов IBM
• proc - псевдо-фс, интерфейс к данным в ядре
• root - домашний каталог пользователя 0 --- root'а
• sbin - исполняемые файлы для root'а, минимальный набор
• tmp - только для временных файлов, постоянно чистится
• usr + - основной каталог для системных файлов
• X11R6 - поддерево каталогов системы Xwindows
• bin - основной каталог для исполняемых файлов
• doc - подробная документация, копирайты для каждой програмы
• games - игры
• include - заголовки (header) для программ на языке C
• info - он-лайновые книги в формате info
• lib - разделяемые библиотеки
• local - специфические местные каталоги
• man - он-лайновые руководства, помощь
• sbin - основной каталог исполняемых файлов для root'а
• share - общий разделяемый между программами
• src - исходные коды ядра
• var + - часто изменяемые, временные системные файлы
• backups - запасные копии
• cache - сохраненные данные программ
• lib - дополнительные файлы отдельных программ
• local - локальные файлы, частично копирует иерархию /usr
• lock - файлы блокировки
• log - журналы, диагностика, системные сообщения
• mail - входящая почта пользователей
• quota - ограничения (квоты) на дисковое пространство
• run - PID запущенных задач
• spool - очереди, списки, временные файлы
• state - состояние, сообщения отдельных программ
• tmp - доп. каталог временных файлов
Это только основные каталоги. Обычно каталоги lib, include, а также подражающая им
иерархия X11R6, разбиваются на дополнительные каталоги, отражающие названия программ
или сервисов. Приблизительно так выглядит смонтированная файловая система.
Два особых каталога в корневой файловой системе: /dev/ и /proc/. Их особенность в том, что
они содержат не обычные каталоги, а псевдо-файлы, обеспечивающие интерфейс к
устройствам и структурам данных в ядре, интерфейс, напоминающий работу с обычными
файлами. Например:
... $ dd < /dev/dvd > /tmp/dvd-image.iso

копирует поблочно, в обход файловой системы, образ диска в файл.


... $ cat /proc/meminfo

Эта команда покажет всю информацию о памяти, используемой ядром памяти в данный
момент. Используя этот простой способ – структура данных ядра как псевдо-файл, можно
также изменять настройки ядра в процессе работы. Например, для включения форварда на
компьютере-шлюзе нужно сделать:
... # echo "1" > /proc/sys/net/ipv4/ip_forward

Мы уже упоминали некоторые атрибуты файлов и способы их просмотра с помощью


программ ls или stat. Одной из характеристик файла является количество ссылок к
содержимому файла, т.е. к множеству хранимых на диске блоков, к которому мы обращаемся
под именем этого файла. У обычного (regular) файла может быть несколько совершенно
равноправных имен, адресующих одно и то же множество блоков. Эти имена называются
жесткими (hard) ссылками, а дополнительные имена создаются с помощью команды ln. Эта
же команда позволяет создавать другой тип ссылок - символические (symbolic) ссылки.
Символические ссылки обладают большей гибкостью, могут указывать на любой тип файла,
на любом устройстве, в любой файловой системе.
Раз уж мы упомянули о разных типах файлов, то нужно сказать и о программке под именем
file, знающей обо всех известных типах файлов и умеющей также определять тип его
содержимого.
Семейство операционных систем под зарегистрированным торговым знаком Unix(TM),
объединяет гораздо больше, чем следование правилам при размещении системных файлов и
утилит. Вскоре после отпочкования коммерческих версий Юникс от первоначального
варианта фирмы ATT, стали делаться попытки обеспечить переносимость программ их одной
ОС в другие. Наиболее важным стандартом, соблюдаемым всеми вариантами Юникс и
другими ОС, стал набор стандартов POSIX.
AIX: Стандарной файловой системой для AIX является jfs (Jornalling File System). Также на
IBM-серверах используется продвинутая система управления логическими томами — LVM.
AIX: Как для AIX, так и для глобального доступа к дисковому пространству используется
сервис GSA (Global Storage Architecture). На IBM серверах домашние каталоги пользователей
как правило размещаются на NFS разделах GSA -
http://pokgsa.ibm.com/projects/g/gsa/overview/
3. Работа с файлами и текстом
Для перемещения по дереву каталогов используются команда cd имя_каталога. К
каталогу, как и к любому объекту файловой системы, можно указывать полный путь, начиная
от корня, например, /etc/skel, так и относительный, начиная с текущего каталога, без
слэша в начале пути. Существуют также специальные обозначения для каталогов:
• ~ - домашний каталог пользователя, синоним $HOME
• . - текущий каталог
• .. - родительский каталог для текущего, выше на один уровень

Ещё один способ перемещения по каталогам существует в bash. Это команды pushd,
popd, dirs. Первая из них помещает каталог в стек, вторая удаляет, а третья показывает
содержимое стека. Если сохранить в стеке несколько часто используемых каталогов, то
между ними можно будет перемещаться с помощью команды pushd +N или -N. Параметр
N выполняет вращение стека в по кругу, вправо (-) или влево (+), не меняя списка каталогов.
Особенно удобно это делать, если создать для pushd совсем короткий и легконабираемый
синоним (alias), например:
… $ alias pp='pushd'
Более подробно об этих и других «микрохаках» можно прочитать здесь -
http://gomelug.agava.ru/articles/micro-hacks.html
Напомню ещё раз — любая команда в Unix является исполняемым файлом, хранимым в
файловой системе и имеющий соответсвующий атрибут, либо, как только что показанные
команды cd, pushd, popd и dirs, встроенными в командный процессор. Для
исполняемых файлов первого типа есть одна особенность — глобальная переменная $PATH.
Она содержит список каталогов которые shell просматривает при вызове команд. Вот
пример этой переменной:
~$ echo $PATH
~/aix-bin:~/bin:/usr/WebSphere/AppServer/java/bin:/bin:/sbin:/usr/
bin:/etc:/usr/local/bin:/usr/sbin:/usr/ucb:/usr/bin/X11:/opt/freew
are/bin
Как видите, этот список, по соображениям безопасности, не содержит текущий каталог, точку
(.). Поэтому, если вы хотите запустить на исполнение свой собственный скрипт
my_script.sh, то это придётся делать либо указав полный путь к текущему каталогу, либо
вот таким способом:
… $ ./my_script.sh
Часто используемые скрипты удобно помещать в ~/bin — ваш личный каталог, и добавить
его в $PATH.
Каталоги создаются с помощью команды mkdir, удаляются командой rmdir или rm.
Посмотреть содержимое каталога можно командой ls. Часто для просмотра содержимого
каталога создают дополнительные синонимы для ls:
… $ alias ll='/bin/ls -la'
… $ alias dir='/bin/ls -balF'
Для работы с файлами используются следующие команды:
• cp – копировать файл(ы)
• mv – переместить ---''---
• rm – удалить ---''---
• vi – простейший визуальный редактор
• vim – современный мощный ---''---
• tar – архиватор
• zip – упаковщик, архиватор
• gzip – более распространённый в Unix упаковщик
• scp – копирование файлов с использованием защищённого протокола SSH
• ftp – клиент протокола FTP

AIX: Как уже сказано выше, на многих IBM-серверах используются смонтированные по NFS
разделы GSA. Через собственный домашний каталог, расположенный в разделе GSA, можно
копировать файлы между разными компьютерами с помощью простой команды cp, не
прибегая к более сложной scp. Если же разрешить всем смотреть содержимое домашнего
каталога и ещё один вложенный, см. пример минимальных прав доступа ниже, то через
домашний каталог можно также раздавать файлы.
… $ pwd
/gsa/pokgsa/home/o/p/ophil
… $ ll -d ../ophil/
drwxr-sr-x 21 ophil ophil 2048 Jun 27 03:07 ../ophil//
… $ ll -d tmp
drwxr-sr-x 2 ophil ophil 4096 Jul 26 08:02 tmp/
… $ ll tmp
-rw-r--r-- 1 ophil ophil 0 Jul 26 08:02 world_readable_file

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


• file – показать тип файла
• less – пейджер, удобный с массой возможностей просмотр текстовых файлов
• more – пейджер, простейшая версия
• cat – показать содержимое файла (ов)
• cut – удалить части каждой строки
• head – показать начало файла
• tail -- ---''--- конец ---''---
• strings – найти текстовые строки в нетекстовом файле

Несколько тонкостей в перечисленных командах.


cat, несмотря на свою простоту, незаменим если надо увидеть невидимые символы,
например, завершения строк или табуляции — опции -E и -T соответственно.
Команда cut позволяет вырезать из текста, из каждой строки, вертикальные полосы, причём
использовать как позицию символа в строке, так и номер поля, если строка разбита
разделителями. Пример первого, диапазоны символов из строк:
… $ ll -d pa*
drwxr-xr-x 2 root root 4096 июня 3 09:20 pam.d/
-rw-r--r-- 1 root root 2171 дек. 20 2012 passwd
… $ ll -d pa*|cut -c 23-28,47-
4096 pam.d/
2171 passwd
В этом примере из вывода ls удалили всё кроме длины файла и его имени.
Во втором примере покажем как извлечь из /etc/passwd отдельные поля:
… $ tail -n 2 passwd
joomla:x:1003:33:joomla admin,,,:/home/joomla:/bin/bash
nobody:x:65534:65534:nobody:/var/tmp:/bin/sh
… $ tail -n 2 passwd|cut -d: -f 1,5,7
joomla:joomla admin,,,:/bin/bash
nobody:nobody:/bin/sh
Более мощные средства такого «вертикального редактирования» текста можно найти в
потоковом редакторе sed и в языках программирования awk, perl и некоторых других,
доступных или легко добавляемых в любую систему Unix. Они позволяют делать выборку
или замену фрагментов строк, используя т. н. «регулярные выражения», в просторечии
«регэкспы».
Следующая полезная группа команд для работы с текстовыми файлами:
• grep – поиск фрагмента текста, базовые регулярные выражения
• egrep – ---''--- , расширенные регулярные выражения
• pcregrep – ---''--- , perl-совместимые регулярные выражения
• sort – сортировать текстовый файл
• uniq – подсчитать или показать уникальные строки в отсортированном файле
• wc – подсчёт строк, слов, символов в файле

Более подробно о регулярных выражениях рассказано в следующей главе 4.


Небольшой пример, как можно использовать перечисленные утилиты для анализа логов.
Файл логов приложения содержит строки типа:
… $ head -n 3 system.log
2013-07-26 00:01:41 ERROR ListManager.java.deleteOldestRuns:1072: Param isn't initialized
2013-07-26 00:09:35 ERROR ControllerBase.java.process:129: 5000
java.lang.NullPointerException

Следующие команды последовательно выбирают строки с сообщением ERROR, затем вырезают


первые 15 символов — время с точностью до 10 минут, затем подсчитывают количество
совпадающих строк и выводят статистику ошибок за последний час.
… $ grep ERROR system.log|cut -c 1-15|uniq -c|tail -n 6
32 2013-07-26 03:1
30 2013-07-26 03:2
34 2013-07-26 03:3
36 2013-07-26 03:4
30 2013-07-26 03:5
2 2013-07-26 04:0
В данном примере файл уже был отсортирован по первым символам — времени, но обычно
команде uniq подают вывод предварительно отсортированный командой sort.
Почти все перечисленные утилиты могут обрабатывать сразу много файлов, имена которых
передаются как параметры. Поэтому всю мощь текстовых утилит позволяют раскрыть две
важные команды : find и xargs. Первая из них позволяет произвести поиск по всему
дереву каталогов по многим параметрам и их комбинациям, например:
• имени файла, -name, -iname, с использованием символов расширителей шелла ?*[]
или полноценные регекспы с опциями -regex, -iregex и -regextype
• пути к файлу или исключение части дерева подкаталогов, возможны метасимволы
шелла, опции -path, -prune
• времени изменения, опции -mmin, -mtime, -amin, -atime, -cmin, -ctime,
-newer и других. Время можно задавать точно, а также старше либо новее
указанного времени.
• типа файлов, опции -type, -xtype
• размера, опции -size, -empty
• владельца файла, опции -user, -group, -uid, -gid, -nouser, -nogroup
• атрибуты доступа к файлу, опции -perm, -readable, -executable
• прочие: -lname, -links, -inum ...
Перечисленные проверки для find являются логическими выражениями, которые можно
объединять в более сложные выражения с использованием операторов ! (-not), -a
(-and), -o (-or). Оператор -and можно не указывать, он применяется по умолчанию к
всем проверкам указанным в команде, например:
… $ find -mtime -20 -size +100k|xargs -r ls -l
-rw-r--r-- 1 ophil staff 354453 июля 25 14:31 ./quantal-pks
найдёт файлы обновлённые в течении прошедших 20 суток _И_ размером более 100
килобайт.
Далее, с найденными файлами можно сразу выполнять несколько операций: -exec,
-delete, -ls, -ok, -printf и другие. Пример поиска и выполнения команды:
… $ find -name \*.txt -exec gzip -v {} \;
Но подобная конструкция далеко не оптимальна. Проблема в том, что каждый вызов -exec
gzip запускает новый процесс с соответсвующими накладными расходами. Многие
команды, gzip в частности, принимают в качестве параметров список файлов. Поэтому
более эффективно и грамотно сделать то же самое с использованием программы xargs. Вот
как можно выполнить то же самое действие более грамотно:
… $ find -name \*.txt|xargs gzip -v
Команда xargs всего лишь передаёт следующей за ней команде свой стандартный ввод как
список параметров, но её иногда называют самой недооцененной утилитой Unix.
Действительно, xargs вовсе не привязана жёстко к поиску файлов find, она так же
успешно выполнит любую команду с любым подготовленным списком, в том числе и
сохранённым в файле. Вот пример как можно найти и затем сбросить все запущенные
процессы java:
… $ ps -el|grep [j]ava
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
242001 A 1306 6225968 1 5 60 20 ac092c510 342016 * - 1060:55 java
242001 A 0 6422556 1 0 60 20 da045a400 53940 * - 9:48 java
$ ps -el|grep [j]ava|cut -c 19-25|xargs kill -9

AIX: к сожалению, команда find в AIX безнадёжно стара и не понимает большинства из


перечисленных опций. Если нет возможности добавить в систему современную версию, как
вариант, если позволяет политика безопасности, разместить её в домашнем каталоге и
настроить $PATH.
4. Базовые, расширенные и perl-совместимые regex
Если вы только начинаете знакомство с регулярными выражениями, стоит изучать только
последние из перечисленных выше. Во-первых, они включают возможности более ранних,
во-вторых, добавлены новые возможности, в-третьих, именно pcre (perl compatible regular
expressions) реализованы в современных языках программирования. Пожалуй, ещё один
довод — перловые регвыры проще изучать благодаря подробнейшей онлайновой
документации (см. man perlre) и многочисленным учебникам.

Большинство символов в регулярном выражении представляют сами себя за исключением


специальных символов [ ] \ / ^ $ . | ? * + ( ) { }, которые могут быть предварены
символом \ (обратная косая черта) («экранированы», «защищены») для представления их
самих в качестве символов текста.

Ниже приведена таблица специальных символов для базовых (BRE)и расширенных (ERE)
регулярных выражений и их краткое описание.

метасимвол описание
. . (точка) означает один любой символ, но в некоторых реализациях
исключая символ новой строки.
[ ] набор символов в квадратных скобках [ ] именуется символьным классом
и позволяет указать интерпретатору регулярных выражений, что на данном
месте в строке может стоять один из перечисленных символов.

[^ ] отрицание набора символов, т. е. любые символы КРОМЕ указанных


^ начало строки
$ конец строки
BRE: \( \) отмечает подвыражение (строку), на которое можно сослаться как на \n
ERE: ( )
\n вместо этой конструкции вставляется найденная ранее — см. выше —
строка. Возможно до 9 подобных ссылок (backreferences)
пронумерованных от \1 до \9
? соответствует 0 или 1 повторений предыдущего символа
* соответствует 0 или более повторений предыдущего символа
+ соответствует 1 или более повторений предыдущего символа
BRE: \{m,n\} квантификатор - обобщение перечисленных выше конструкций, сколько
ERE: {m,n} раз может встречаться предшествующее ему выражение:
{m,n} - от m до n включительно
{m,} - не менее m
{,n} - не более n
{n} - ровно n

Для удобства некоторые символьные классы обозначены специальными метасимволами:


Символ Эквивалент Соответствие
\d [0-9] Цифровой символ.
\D [^0-9] Нецифровой символ.
\s [ \f\n\r\t\v] Пробельный символ.
\S [^ \f\n\r\t\v] Непробельный символ.
\w [[:word:]] Буквенный или цифровой символ или знак
подчеркивания.
\W [^[:word:]] Любой символ, кроме буквенного или цифрового
символа или знака подчеркивания.
\b Граница слова
\B Не граница слова

Более подробно о наборах символов. Например, конструкция [0123456789] соответствует


любой десятичной цифре. Она может быть сокращена до [0-9], т.е. внутри квадратных скобок
можно указывать диапазон символов. Если использовать отрицание набора символов, также
можно указывать диапазон, т. е. [^0-9] будет соответствовать любому символу кроме
десятичной цифры. Если надо включить сами эти символы — дефис (-) или шляпку (^) - в
набор символов, это делается так: [-^] - шляпка не должна стоять первой, а дефис должен
быть либо первым в списке, либо последним. При указании диапазона используется порядок
символов в текущей локали. Например, для локали LC_ALL=ru_RU.KOI8 строчные буквы
описываются диапазоном [ю-ъ].
Есть ещё несколько предопределённых классов символов: [:alnum:], [:alpha:], [:cntrl:], [:digit:],
[:graph:], [:lower:], [:print:], [:punct:], [:space:], [:upper:], and [:xdigit:]. Их названия вполне
красноречивы, например, [:alnum:] определяет все буквы и цифры в текущей локали.
Расширенные регэкспы (ERE), как видно из таблицы, не требуют экранирования бэкслэшем \
скобок: вместо \( \) используют ( ), а вместо \{ \} - { }. Не работает конструкция
backreference - \n, но добавлена возможность логического ИЛИ для искомых выражений,
например, команда
… $ egrep 'lib(purple|meantime)'
найдёт как строки 'libpurple', так и 'libmeantime', если они есть в сканируемом тексте.
Стандартизованные в POSIX и реализованные в GLIBC обладают одним нехорошим
свойством — жадностью (англ. greedy). В контексте регулярных выражений это означает, что
если конструкция встречается в строке несколько раз, будет выбрана подстрока
максимальной длины. Например, часто ожидают, что выражение (<.*>) найдёт в тексте
теги HTML. Однако, если в тексте есть более одного HTML-тега, то этому выражению будет
соответствовать целиком строка, содержащая множество тегов.
Возможность управлять этим свойством (greediness) появилась в языке perl. К
перечисленным выше в таблице метасимволам квантификации, имеющим в perl тот же
смысл, добавились новые:
*? Match 0 or more times, not greedily
+? Match 1 or more times, not greedily
?? Match 0 or 1 time, not greedily
{n}? Match exactly n times, not greedily (redundant)
{n,}? Match at least n times, not greedily
{n,m}? Match at least n but not more than m times, not greedily
Не жадные (not greedy ) квантификаторы ещё называют «ленивыми». Общей проблемой как
жадных, так и ленивых выражений являются точки возврата для перебора вариантов
выражения. Точки ставятся после каждой итерации квантификатора. Если интерпретатор не
нашёл соответствия после квантификатора, то он начинает возвращаться по всем
установленным точкам, пересчитывая оттуда выражение по-другому. Регулярные выражения
в perl дают возможность управлять также этим возвратом (backtracking), определяя ещё один
тип квантификаторов — ревнивый (possessive). В отличие от обычной (жадной)
квантификации, ревнивая квантификация не только старается найти максимально длинный
вариант, но ещё и не позволяет алгоритму возвращаться к предыдущим шагам поиска для
того, чтобы найти возможные соответствия для оставшейся части регулярного выражения.
Использование квантификаторов увеличивает скорость поиска, особенно в тех случаях, когда
строка не соответствует регулярному выражению. Кроме того, ревнивые квантификаторы
могут быть использованы для исключения нежелательных совпадений.

Жадный Ревнивый
* *+
? ?+
+ ++
{n,} {n,}+

Пример Соответствие
ab(xa)*+a abxaabxaa; но не abxaabxaa, так как буква a уже занята

В perl постепенно появилось ещё много дополнительных возможностей по сравнению с BRE


и ERE, а также по отношению к более ранним версиям языка perl. Остановимся, однако, на
уже перечисленных, т. к. существует масса прекрасных учебников и онлайн документации
именно по регулярным выражениям в perl. Прежде всего, это поставляемый вместе с
интерпретатором набор perl-doc, по нашей теме конкретно мануалы (man 1) :

perlrequick perl regular expressions quick start


perlre perl regular expressions, the rest of the story
perlrebackslash perl regular expression backslash sequences
perlrecharclass perl regular expression character classes
perlreref perl regular expressions quick reference

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


сканера grep. Эта утилита понимает только BRE, но она всегда присутствует вместе с egrep,
которая реализует ERE. Можно также задавать простейшие выражения при поиске контекста
в пейджере, программе просмотра текстовых файлов. Например, программа less, позволяет
задавать искомый текст при помощи BRE и подсвечивает найденный фрагмент.
Очень удобным средством для отладки и визуализации регэкспов является perl. Например,
подробно показана отладка RE в статье http://gomelug.agava.ru/articles/copysite.html:
perl -wne 'print "$1\n" if m#href=/(\w+/\d+)/page1.html#' page*.html
В данном примере важен ключ -n : не печатать каждую обрабатываемую строку, но печатать
только найденный контекст.
5. Возможности shell
Командный процессор shell незримо сопровождает нас с первой секунды, как только мы
прошли процедуру регистрации в системе. Shell обладает возможностями настоящего языка
программирования, а также является гибко настраиваемой удобной оболочкой для
интерактивной работы, для связывания воедино многочисленных программ и утилит.
Рассмотрим вначале, как можно настроить свой shell по собственному вкусу. По
умолчанию вашим shell, скорее всего, будет командный процессор bash. При
инициализации bash вызываются и последовательно выполняются несколько файлов:
• /etc/profile – общесистемный файл, для всех пользователей
• ~/.bash_profile – при входе в систему, т.н. login-shell
• ~/.bash_login – то же самое
• ~/.profile – то же самое
• ~/.bashrc – в остальных случаях
Чтобы не запутаться, помещайте все свои настройки в последний файл, а затем вызывайте
его из ~/.bash_profile . При необходимости, просто добавьте или переопределите команды,
выполняемые исключительно при входе в систему. При выходе из login-shell исполняется
файл ~/.bash_logout .
Большую часть команд в типичном стартовом скрипте (profile) занимает определение
переменных окружения, т.н. environment . Эти переменные затем передаются в каждый
вызываемый процесс и сопровождают пользователя до его выхода из системы. Использовать
эти переменные очень просто:
... $ HELLO="привет всем от $USER'а";export HELLO
... $ echo $HELLO|mail proba -s "$HELLO"

Список переменных, однако, может быть большим, имена многих из них стандартизованы.
Список всех переменных shell можно посмотреть с помощью команды set без
параметров. Команда env, или printenv, выдаст список поменьше, доступных только в
вызываемых процессах.
Воспользуемся глобальными переменными, чтобы настроить т.н. locale, определяющие
язык и другие локальные для страны обозначения: время, дата, денежная единица,
форматный вывод чисел. Например, в общесистемном файле /etc/profile могут быть
определены такие переменные:
LANG=ru_RU.UTF-8
LANGUAGE=ru_RU.UTF-8
LC_ALL=ru_RU.UTF-8
export LANG LANGUAGE LC_ALL

Допустим, вы захотели показывать даты и десятичные числа в международном стандарте


POSIX. Поэтому для собственного окружения, например в файле ~/.bashrc , переопределим
глобальную переменную LC_ALL и зададим новые:
LC_ALL="ru_RU.UTF-8"
LC_NUMERIC=POSIX
LC_TIME=POSIX
export LC_NUMERIC LC_TIME

Все переменные, задающие локальную для страны информацию, имеют префикс LC_. Для
просмотра текущих или всех доступных настроек используется команда locale. Вся
связанная с locale информация хранится в каталоге /usr/share/locale/.
Для комфортной работы из командной строки обязательно нужно знать о следующих
возможностях shell: история командш (history), завершение ввода имени команды или
файла, создание псевдонимов (alias). Перемещение по списку выполненных команд
выполняется стрелками вверх/вниз, а завершение ввода (completion) клавишей Tab. Если вы
обнаружили, что часто набираете какую-то команду, можно создать для этой команды
короткий alias, например:
... $ alias ll='/bin/ls -lF --color'

Можно также вставить определение alias'ов в файл ~/.bashrc


Посмотреть список встроенных в bash команд и версию вашего shell можно просто
набрав help. Таких команд довольно много, включая и конструкции для написания сложных
программ. Все они детально описаны в имеющейся странице руководства man, общим
размером около 90 обычных страниц. Кратко прокомментирую главы из man bash.
• OPTIONS – список опций при вызове процессора
• ARGUMENTS – оставшиеся после опций параметры
• INVOCATION – порядок просмотра файлов инициализации
• DEFINITIONS – определения, ипользуемые дальше в руководстве
• RESERVED WORDS – зарезервированые слова, используемые в языковых
конструкциях, при написании скриптов
• SHELL GRAMMAR – описание синтаксиса и семантики команд
• Simple Commands – определение простой команды
• Pipelines – определение конвейера команд
• Lists – определение списка команд
• Compound Commands – определение составной команды, составление команд,
управляющие конструкции
• COMMENTS – комментарии в программах
• QUOTING – экранирование и интерпретация специальных символов
• PARAMETERS – определение и типы параметров
• Positional Parameters – позиционные параметры, числа в соответствии с
позицией при вызове
• Special Parameters – специальные параметры: $*, $@, $#, $?, $- ...
• Shell Variables – список глобальных переменных, встроенных в shell
• Arrays – массивы
• EXPANSION – ключевое понятие --- интерпретация полученной командной строки,
подстановка значений спецсимолов, сравнение с шаблонами. Всего 7 типов
расширения (интерпретации) параметров и их порядок.
• Brace Expansion – раскрытие фигурных скобок, генерация списков
• Tilde Expansion – подстановка домашнего каталога вместо ~
• Parameter Expansion – интерпретация и подстановка параметров
• Command Substitution – подстановка результата выполнения команды как новой
команды
• Arithmetic Expansion – выполнение арифметических операций
• Process Substitution – перенаправление ввода-вывода для именованных
конвейеров, если поддерживаются системой
• Word Splitting – разбиение строки параметров на слова
• Pathname Expansion – интерпретация спец. символов * ? ( [ подстановка путей и
имен, соответствующих шаблону, использование шаблонов, классы символов
• Quote Removal – удаление кавычек и символа экранирования "{ }"
• REDIRECTION – перенаправления ввода вывода
• Redirecting Input – перенаправление ввода [n]<имя_файла
• Redirecting Output – перенаправление вывода [n]>имя_файла
• Appending Redirected Output – перенаправление вывода и добавление к файлу
• Redirecting Standard Output and Standard Error – объединение стандартного
вывода и сообщений об ошибках
• Here Documents – способ помещения ввода непосредственно в скрипт
• Duplicating File Descriptors – создание дополнительных потоков
• Opening File Descriptors for Reading and Writing – открытие файла
• ALIASES – создание псевдонимов команд
• FUNCTIONS – определение функций
• ARITHMETIC EVALUATION – использование арифметики в выражениях
• CONDITIONAL EXPRESSIONS – условные выражения, проверки файлов и строк
• SIMPLE COMMAND EXPANSION – подготовка команды к исполнению
• COMMAND EXECUTION – порядок выполнения команды
• COMMAND EXECUTION ENVIRONMENT – наследование переменных окружения
• ENVIRONMENT – описание переменных окружения
• EXIT STATUS – статус, возвращаемый результат выполнения команды
• SIGNALS – сигналы и их обработка
• JOB CONTROL – фоновые процессы и управлении ими
• PROMPTING – настройка приглашения
• READLINE – возможности редактирования и ввода в командной строке
• HISTORY – история команд
• HISTORY EXPANSION – вызов предыдущих команд
• SHELL BUILTIN COMMANDS – список и параметры всех встроеных команд
• RESTRICTED SHELL – ограниченный shell, только в заданном каталоге
Как мы видим, руководство по bash предоставляет исчерпывающую информацию по всем
командам. Первым шагом к освоению shell должно стать умение читать программы на
этом языке, коих в системе довольно много. Для полноценного использования необходимо
также знакомство с обязательными в каждой Юникс системе наборами программ под
названием textutils и findutils, а также с утилитами: сканером grep, потоковым редактором
sed, языком запросов awk и некоторыми другими жемчужинами из классического наследия.
Для этих многочисленных инструментов shell выполняет роль связующего звена,
соединяющего воедино отдельные программы.
AIX: Bash не является шеллом по умолчанию и может быть установлен дополнительно.
Стандарным шеллом для AIX является ksh (Korn Shell). Корн шелл не имеет всех
возможностей bash'a, особенно огорчают отсутствие автозаполнений и истории команд.
6. Компьютер в сети
Известное утверждение "сеть – это компьютер" как нельзя лучше подходит к системе Юникс.
Если для персональной системы разграничение прав пользователей, существующее в
многопользовательских ОС, может показаться излишним, то при подключении компьютера к
сети подобная защита оказывается жизненно необходимой. Сетевая технология с
коммутацией пакетов под общим названием TCP/IP реализована во многих современных
операционных системах и является основой глобальной сети Internet. Исторически и идейно
эта технология возникла и развивалась именно в системах Юникс. Первые версии Юникс
распространялись в исходниках, систему развивали и дорабатывали сотни исследователей.
Точно также создавались и развивались сервисы будущей глобальной Сети.
Если ваш компьютер совершенно отрезан от сети – нет ни модема, ни сетевой карты, то и
тогда есть специальный интерфейс lo (local loopback), позволяющий работать всем сетевым
программам. Чтобы действительно соединить компьютеры между собой и пересылать между
ними информацию, необходимо физически связать компьютеры с помощью модема или
сетевой карты, а также включить поддержку устройства связи в ядро. Для подключения
сетевого интерфейса используется программа ifconfig. При запуске без параметров эта
команда покажет текущее состояние сетевых устройств:
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:3856 Metric:1
RX packets:578 errors:0 dropped:0 overruns:0 frame:0
TX packets:578 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0

Реальному интерфейсу будет соответствовать устройство ppp0 или sl0 для модема, eth0, eth1
и т.д. для сетевых карт.
AIX: сетевые интерфейсы называются en0, en1, ...
Базовым понятием технологии TCP/IP является IP-адресация. Каждый IP-пакет,
путешествующий в и-нете, обязательно имеет в заголовке адрес отправителя и адрес
получателя. IP-адрес представляет собой 32-разрядное двоичное число, обычно обозначаемое
четырьмя десятичными числами от 1 до 255, разделенными точками, в примере выше –
127.0.0.1
IP-адреса являются весьма ограниченным ресурсом и не могут назначаться произвольно. Для
правильной маршрутизации пакетов диапазоны IP-адресов разбиваются на сети и подсети с
помощью маски – также 32-разрядного числа, содержащего в левой части двоичные
единички, а в правой части некоторое количество двоичных нулей. Свое название – маска
сети - это число получило потому, что при наложении на IP-адрес единички покажут номер
сети, а остальная часть адреса будет номером хоста (компьютера) в этой сети.
Прохождение пакета по лабиринту хостов к месту назначения определяется таблицей
маршрутов, ведущейся на каждом хосте. Эта таблица может быть простейшей, состоящей из
одного единственного адреса, задающего маршрут по умолчанию. На узловых хостах
глобальной сети, соединяющих между собой много сетей, эта таблица может быть очень
большой, динамически изменяющейся с помощью специальных протоколов маршрутизации.
Посмотреть и изменить таблицу маршрутов можно с помощью команды route. А изучать
маршрут между двумя хостами или топологию сети удобно при помощи утилит tracepath
или traceroute. Для локальных сетей выделены 4 специальных диапазона адресов,
которые можно свободно назначать хостам внутри своей сети, но пакеты от них не должны
выходить за пределы локальной сети. Пакеты с такими локальными адресами правильно
настроеный маршрутизатор должен сразу уничтожать.
Двоичные и десятичные IP-адреса удобны для компьютеров, но человеку привычнее слова и
имена. Для преобразования адресов в имена и наоборот существует сервис DNS. В
простейшем случае можно вести список хостов в таблице /etc/hosts. Но уже для небольшой
сети необходимо настроить настоящий DNS-сервер. Одной из старейших и самых
распространенных программ для этого сервиса является bind. Порядок поиска по разным
доменам (сетям) и адрес DNS-сервера задается в файле /etc/resolv.conf
Имена доменов, в связи со стремительным ростом популярности Интернет, стали выгодным
товаром. Часто имя домена регистрируют впрок, на всякий случай, или чтобы выгодно
перепродать. Процедуру регистрации домена можно пройти на специальных
уполномоченных на это серверах, а посмотреть принадлежность домена можно с помощью
программы whois.
IP-адресация и еще несколько протоколов нижнего уровня являются базой для следующего
уровня – TCP (Transmission Control Protocol). Вместе они образуют т.н. стек протоколов
TCP/IP. На этом уровне появляется новое понятие – порт TCP. В файле /etc/services номерам
портов приписываются названия сервисов, обслуживающих эти порты. И сами номера, и
названия сервисов, и их назначение и применение регламентированы особыми документами
– RFC (Request For Comments). Работа этих сервисов, точнее, реализующих их программ, как
раз и создает то богатство возможностей, сделавших Интернет такой модной темой для
далеких от компьютеров людей.
Но нас интересует именно техническая сторона, так что первым делом мы познакомимся с
программой nmap. Эта программа, наряду с прочим, позволяет просканировать порты хоста
и обнаружить работающие сервисы. Обнаружив открытый (ожидающий запросы) порт,
можно попытаться открыть сессию (соединение) через этот порт. Самым простым
инструментом для работы с портом является программа telnet. Она позволяет работать в
shell, если он у вас есть, либо вести диалог с работающим сервисом. Для защиты
передаваемой информации можно использовать программу ssh, обеспечивающую
шифрование данных.
Конечно, для работы с тем или иным сервисом удобнее использовать специально созданные
для этого клиенты. Например, для передачи файлов по протоколу FTP, существуют несколько
клиентов: ftp, lftp, ncftp. Упомянутая в первой части программа mail отравки и чтения
почты пример использования почтового сервиса – SMTP. Клиентские программы для работы
с почтой составляют класс программ MUA (Mail User Agent): mutt, pine. К ним же можно
отнести и особую программу procmail, предоставляющую возможность
запрограммировать обработку приходящей почты.
Еще один сервис и соответствующий класс клиентов предоставляют возможность отправлять
сообщения не персонально получателям, а публиковать их для всех желающих в т.н. группах
новостей, или news'ах, а соответствующий протокол называется NNTP. Этот сервис
подразумевает включение хоста во всемирную сеть подобных серверов и рассылку между
ними каждого нового сообщения. Типичными клиентами для чтения news'ов являются nn,
slrn, emacs с соответствующими надстройками.
Важным моментом при обмене сообщениями является защита содержимого ваших писем и
подтверждение подлинности отправителя. Эту сложную задачу позволяет решить система
несимметричного шифрования с открытым ключом. Первой программой этого класса стала
скандально известная программа PGP, опубликованная в Интернет Филиппом Циммерманом.
Сейчас становится новым открытым стандартом OpenPGP (RFC2440) и реализующий
незапатентованные его части проект GnuPG (GNU Privacy Guard). При настройке клиентских
программ почты и новостей для совместной работы с gpg можно создать надежно
защищенную систему коммуникаций, доступную ранее только при использовании закрытых
хорошо охраняемых каналов .
7. Полезные ссылки
Подробная справка по AIX
http://www.tablespace.net/quicksheet/aix-quickstart.html
IBM Developers site, AIX and Unix section
http://www.ibm.com/developerworks/aix/
Advanced Bash-Scripting Guide
http://www.tldp.org/LDP/abs/html/