Cуперкомпьютеры: администрирование - Жуматий Сергей Анатольевич 6 стр.


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

Эви Немет, Гарт Снайдер, Трент Хейн, Бэн Уэйли

Unix и Linux: руководство системного администратора

Это классический учебник по Unix и Linux. В нём нередко случаются отсылки к таким древним системам, как VAX и PDP-11, тем не менее он отлично отражает суть работы UNIX и остаётся актуальным по сей день.

Томас Лимончелли, Кристина Хоган, Страта Чейлап

Системное и сетевое администрирование. Практическое руководство

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

Брайан Керниган, Роб Пайк

Unix – Программное окружение

Эта книга в большей степени посвящена программированию как в оболочке bash, так и с помощью иных инструментов. Даже если вам не приходится регулярно этим заниматься, настоятельно советую прочесть эту книгу, так как она откроет вам те принципы, по которым строится работа в UNIX, вам станут более понятны многие процессы, происходящие внутри ОС.

Томас Лимончелли

Тайм-менеджмент для системных администраторов

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

Эта глава не претендует на статус учебника по UNIX, но мы постарались собрать в ней все основные понятия, знание которых в дальнейшем вам обязательно потребуется. На сегодняшний день на суперкомпьютерах в подавляющем большинстве случаев используется UNIX-подобная операционная система. Мы говорим UNIX-подобная, так как легендарная ОС UNIX в чистом виде сейчас не развивается и практически не используется.

Краткая историческая справка. После разделения компании AT&T, которая и разработала эту ОС, товарный знак UNIX и права на оригинальный исходный код неоднократно меняли владельцев, в частности, длительное время они принадлежали компании Novell. В 1993 г. Novell передала права на товарный знак и на сертификацию программного обеспечения на соответствие этому знаку консорциуму X/Open, который затем объединился с Open Software Foundation и сейчас называется «The Open Group». Этот консорциум занимается разработкой открытых стандартов для ОС, таких как POSIX (сейчас он переименован в Single UNIX Specification).

Согласно положению «The Open Group», название «UNIX» могут носить только системы, прошедшие сертификацию на соответствие Single UNIX Specification. В настоящее время несколько ОС прошли разные версии этой сертификации, например Solaris, AIX.

Даже те ОС, которые не проходили сертификации UNIX (например Linux), стараются соответствовать этим стандартам. Именно поэтому архитектура приложений на этих ОС очень похожа, а перенос приложения с одной ОС на другую прост, особенно если при написании программы использовались только стандартные библиотеки и функции. Именно эти качества и огромная популярность UNIX в прошлом, а также отлично зарекомендовавшие себя её наследники – Solaris, OpenBSD, FreeBSD, AIX и, конечно же, Linux – обеспечили UNIX-подобным ОС лидерство на серверах всего мира.

Вычислительные кластеры и суперкомпьютеры не исключение. Здесь стандартом de facto является Linux. Именно на эту операционную систему мы и будем ориентироваться. Несмотря на то что существует немало установок на других операционных системах, таких как Windows, FreeBSD, Solaris и других, в данной книге мы не будем останавливаться на их особенностях в классе HPC.

Процессы

Основное понятие в любой ОС – процесс. Это нечто типа контейнера (реально – описания в таблицах ОС), содержащего уникальный идентификатор (

PID

running

sleeping

uninterruptable sleep

stopped

Z

zombie

Например, если запустить на компьютере с 2 ядрами 10 программ расчёта числа пи, то одновременно смогут считаться только 2, но ОС будет с большой частотой (например 100 раз в секунду) приостанавливать выполнение активного процесса, помещать его в очередь и отправлять на выполнение следующий процесс из очереди (очень грубо, но суть именно такая). Для процесса это выглядит как будто он монопольно владеет процессором, просто скорость этого процессора раз в 5 ниже, чем могла бы.

Среднее число процессов в очереди обозначается как «уровень загрузки» – Load Average. Если он больше числа ядер, то обычно это значит, что не всем задачам «достаётся» процессор, и они работают медленнее. Надо учесть что в очередь включаются и процессы в состоянии D, то есть высокий LA могут вызвать процессы, которые, например, много читают с диска или пишут (и постоянно ждут в вызове read или write). То есть высокий LA – это сигнал, что потенциально что-то не так, но хорошо бы проверить.

В состояние

stopped

D

Состояние

zombie

wait

zombie

Родительский процесс (

PPID

PID

init

wait

Посмотреть список процессов и их состояние можно с помощью команды

ps



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

Бывает удобно отслеживать активность процессов в реальном времени. Тут помогут команды

top

htop

Можно переключать режимы отображения и сортировки. Для

top

h

+

 

+ 

1

k

r

u

q

У

htop

Мы уже не раз упомянули сигналы – это простой способ общения процессов, любой процесс может послать другому сигнал, если он принадлежит тому же пользователю (пользователь

root

Для большинства сигналов есть стандартные значения и действия, ниже – самые часто используемые:


Таблица 3: некоторые сигналы в Linux


Действия «по умолчанию» процесс может изменять (кроме сигнала KILL). Их можно обработать или игнорировать. При корректном завершении память процесса может быть записана в т. н. core-файл для того, чтобы после можно было исследовать причину ошибки отладчиком. Будет ли создан core-файл, определяется настройками ОС и лимитами (см. главу о квотах).

Послать сигнал из командной строки можно командой

kill

kill -9 1234

kill -STOP 2345

kill -l

pkill

pkill -u vasya -TERM

TERM

vasya

Выше мы говорили о том, что процессы, желающие выполняться, ставятся в очередь. В ней они выполняются не всегда подряд, у каждого есть приоритет и влияющий на него параметр

nice



Здесь мы меняем вежливость с 0 до 15 (приоритет понижается) или до -10 (приоритет повышается).

Кроме очереди на ресурсы процессора есть очередь к ресурсам жёстких дисков, несколько процессов могут одновременно читать-писать, и их запросы будут конкурировать. В этой очереди тоже есть приоритет, им управляет команда

ionice

idle

best effort

real time

idle,



Понятие процесса – основное в любой ОС. Не следует путать процессы и нити, важно знать, что такое реальная и виртуальная память процесса, как работают разделяемые библиотеки (shared objects, so) и динамический линкер (ld.so). Изучите документацию на эту тему в дистрибутиве своей ОС или в обширной документации в Интернете.

Права

Unix-подобные ОС изначально проектировались как многопользовательские системы, а значит, нужно защитить данные и процессы пользователей от нежелательных посягательств других пользователей. Чуть выше мы уже упомянули права процесса и отметили, что, например, нельзя послать сигнал процессу другого пользователя (если нет особых прав на это). Подобный принцип применяется и для разделения прав на прочие объекты в ОС.

Базовый механизм разделения прав в UNIX-подобных системах основан на понятиях UID, или User ID (идентификатор пользователя) и GID, или Group ID (идентификатор группы, которой принадлежит пользователь). UID и GID – числа, но обычно с ними связывают текстовые имена. Каждый процесс имеет «реальные» UID и GID (ruid/rgid), которые не меняются со временем, а также список дополнительных групп, в которые он входит. Кроме реальных, процесс имеет «эффективные» UID и GID (euid/egid), которые определяют его текущие возможности (т. е. именно по ним определяются его права), а также «сохранённые» UID и GID (suid/sgid) – в них копируются эффективные UID/GID при смене UID/GID. Смена UID/GID может происходить, если у процесса есть такое разрешение (capability) или его EUID либо SUID равен 0.

Пользователь с UID = 0 обычно имеет текстовое имя '

root

Чаще всего, наверное, приходится сталкиваться с правами на файловой системе. Здесь каждый объект (файл, ссылка, каталог, устройство, сокет, канал, далее будем для краткости писать «файл») имеет владельца и группу, а также связанные с ними права – чтение, запись и исполнение. Часто для их записи используют восьмеричную запись или формат команды

ls

750

ls rwxr-x–

rwx / 7

r-x / 5

-– / 0

Проверка прав производится в таком порядке – если владелец файла совпадает с EUID, берутся права владельца. Иначе, если группа или одна из дополнительных групп совпадают с группой файла, то берутся права группы, и в противном случае – права «остальные».

Для каталога право на «исполнение» означает возможность войти в каталог. При этом посмотреть список файлов в нём не гарантируется – для этого нужно право на чтение. Право на запись означает возможность создавать и удалять файлы в каталоге. Сменить права на файл (или другой объект) может только его владелец. Если нужно сменить права для группы, то владелец должен в неё входить. Ну и конечно, суперпользователь может менять любые права, а также владельца и группу любого файла.

Как уже было сказано, право записи в каталог позволяет создавать и удалять в нём файлы. В том числе чужие. Чтобы обеспечить комфорт работы с общими каталогами, например

/tmp

sticky

root

Раз уж мы коснулись файловой системы, то стоит отметить ещё два флага –

suid

sgid

suid

sgid

passwd

sgid

suid

Как уже упоминалось выше, посмотреть права можно командой

ls

-

d

l

s

r/-

w/-

x/-

-

sticky

t

x

s

x

+

Менять права на файл можно командой

chmod

chown

chgrp



В символьном виде для

chmod

u/g/o/a

+

-

r/w/x

chmod go+rx myfile

myfile

Описанная выше система покрывает множество потребностей, но не все. В попытках улучшить её были созданы различные расширения, реализованные в файловых системах Linux. Одно из них – расширенные атрибуты файлов. Они включены по умолчанию, и их можно смотреть и изменять командами

lsattr

chattr


Таблица 4: некоторые расширенные атрибуты


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

Другое расширение, как правило требующее активации на файловой системе, – ACL (Access Control List), списки контроля доступа. Посмотреть и изменить их можно командами

getfacl

setfacl

vasya

test.txt



Здесь ключ '

-m

--set

setfacl

-x

u:vasya;rw

vasya,

vasya



Как видим, правило осталось, но права на запись ограничены маской.

Ещё одно полезное свойство acl – наследование правил. На каталог можно установить acl «по умолчанию», они могут не совпадать с acl на сам каталог, и они будут автоматически применяться ко всем создаваемым файлам и каталогам.

Советуем подробнее прочесть о правах в Linux и опциях вышеупомянутых команд, тут мы их коснулись совсем немного.

Понятие сервиса, ключевые сервисы

Выше мы уже не раз использовали термины «сервис», «демон», «служба». Все они обозначают одно и то же: процесс или группу процессов, которые работают постоянно или автоматически запускаются по запросу. Их задача – обслуживать определённые запросы от пользователей, других процессов, других компьютеров в сети. Например, web-сервер

apache

Некоторые сервисы запускаются через «супердемон»

inetd

xinetd

inetd/xinetd

inetd/xinetd

xinetd

Чтобы узнать, работает ли конкретный сервис, можно проверить, запущен ли соответствующий процесс (за исключением сервисов, запускаемых через

inetd/xinetd

netstat -lpn

Основные (но не все) сервисы для кластера:


Таблица 5: некоторые стандартные сервисы и их порты


Более полный список можно найти в файле

/etc/services

inetd/xinetd

tftp, echo, ftp

Справка

В системе UNIX несколько тысяч команд, однако в обычной работе пользователю достаточно хорошо знать несколько десятков команд. В этом пособии мы кратко рассмотрим небольшой набор наиболее употребительных команд. В первую очередь потребуются команды для работы с каталогами и файлами. Как и ранее, в квадратных скобках будем указывать необязательные параметры.

Самая главная команда, которая вам потребуется, –

man

man

man имя_команды


Таблица 6: разделы справки man


Так как в разных разделах могут быть страницы с одинаковыми именами, то иногда надо явно указать номер раздела. Например, по команде

man crontab

crontab

crontab

man 5 crontab

man -k слово

man man

Кроме

man,

info

man

info

man

Соглашения об именах файлов

В именах файлов и каталогов можно использовать любые символы, кроме '/' и '

\0


Таблица 7: спецсимволы shell


UNIX не запрещает использовать эти символы в именах файлов, но необходимо экранировать их специальное назначение символом '\' или заключать их в одинарные кавычки

'…'

Соглашения о расширениях

Расширение файла – часть имени после последней точки; например, файл '

text.cc

.cc


Таблица 8: распространённые расширения файлов


Важно понимать, что расширение файла не имеет принципиального значения для ОС и большинства программ. Поменяв расширение файла на '

.exe

.sh

do_it_now

chmod a+x do_it_now

Имена, начинающиеся с точки (.), часто присваиваются служебным файлам и каталогам. Эти файлы и каталоги обычно игнорируются программами и файловыми менеджерами по умолчанию. Например, команда

ls

'-a'

Многие команды допускают в качестве аргумента использование списков имён файлов. Эти списки удобно формировать с помощью шаблонов shell. Рассмотрим их ниже.

Шаблоны

Стандартная оболочка (shell) в UNIX – очень мощный инструмент и кроме запуска команд имеет массу возможностей, упрощающих работу в консоли. Самое простое средство – шаблоны имён файлов. Например, написав команду '

ls *.c

Важно понимать, что '

*.c

1.c

2.с

ls 1.c 2.c

ls *.c


Таблица 9: шаблоны в shell


Все шаблоны, кроме '

{}

{}

Например, '

ls *.{cxx,h,la}

ls *.cxx *.h *.la

cp config{,.bak}

cp config config.bak

Если задан шаблон символами '

*

[]

ls *.abc

ls *.abc

Чтобы отменить действие спецсимвола, достаточно поставить перед ним обратную косую черту '\' или заключить весь аргумент в одинарные кавычки. Например, если мы хотим удалить файл с именем «

--rf *.?

rm – –rf\ \*.\?

или

rm – '–rf *.?'

Обратите внимание на первый аргумент '

--

-f

rm -f

-f

rm

rm – -f

Команды для работы с деревом каталогов

pwd

cd [ dirname ]

Примеры перемещения по дереву каталогов:

сd /export/home/user1

cd /

cd prog/cc

cd ../gosha/bin

cd

Специальные имена каталогов:

. (точка) – текущий каталог;

.. (две точки) – родительский каталог по отношению к текущему.

В bash или zsh можно использовать спецсимволы, которые shell преобразует в имена каталогов:

~

~name

– (тире) – возврат в предыдущий каталог (опция встроенной команды cd).

Команды для работы с каталогами

mkdir [опции] имя_каталога …

Опции:

-m mode

-p

rmdir имя_каталога …

ls [опции/имена]

имена 

Наиболее часто используются опции:

-a 

-l 

-t

-R

Команды для работы с файлами

touch [опции] имя_файла

rm [опции] имя_файла … —

опции

-i

-f

-r

Примеры:



Для задания списка файлов можно использовать шаблоны, но пользоваться ими следует крайне осторожно. Команда

rm test* 

test

rm test *

mv [опции] источник назначение

Опции:

-i 

-f 

Команда mv выполняет множество функций в зависимости от типа аргументов.

1) Переименовывает файлы и каталоги, если оба аргумента являются либо файлами, либо каталогами:

mv file1 file2 

file1

file2

mv dir1 dir2 

dir2

dir1

dir2

dir2

dir1

2) Перемещает файл или каталог в другой каталог с тем же именем или другим:

mv file1 dir2

file1

dir2

mv file1 dir2/file2

file1

dir2

file2.

Если источником является список файлов, а назначением – каталог, то можно использовать шаблоны:

mv file* ../dir2

Назад Дальше