Linux -сборник рецептов

         

Защита отдельных пунктов меню GRUB


Задача

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



Создание заставки GRUB


Задача

Вам надоела стандартная заставка GRUB из вашего дистрибутива Linux и вы хотите заменить ее другим изображением, созданным вами.



Загрузка Linux с использованием LILO


Задача

Вы используете загрузчик LILO и хотите знать, как настроить его для загрузки системы Linux.



Альтернативная загрузка Linux с использованием LILO


Задача

Требуется установить несколько экземпляров Linux на одном компьютере с использованием загрузчика LILO.



Альтернативная загрузка Windows


Задача

Требуется организовать альтернативную загрузку Linux и Windows (или нескольких экземпляров каждой из систем).



Создание загрузочной дискеты LILO




Задача

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



Защита LILO паролем

Задача

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

возможности LILO по получению доступа root без пароля, что легко делается вводом команды

linux single

или

linux init=/bin/sh

в приглашении LILO.



Создание резервной копии MBR


Задача

Требуется создать резервную копию главной загрузочной записи. Но какая польза от резервной копии, если вы не знаете, как ее восстанавливать?



Автоматическое выключение компьютера


Задача

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



Благодарности


Я благодарна редактору O'Reilly Майклу Лукидесу (Michael Loukides). Его хороший вкус, зоркий глаз, терпение и неумолимая настойчивость существенно улучшили эту книгу.

Глупые компьютеры понимают все буквально и не прощают ошибок при вводе. Спасибо техническому рецензенту Дженн Весперман (Jenn Vespermann) и ее вниманию к мелочам!

Я бесконечно благодарна Аккане Пек (Akkana Peck), Дженн Весперманн, Полу Хайнлайну (Paul Неinlein) и Питеру Сэмюэльсону (Peter Samuelson), внесшим свой вклад в книгу. Сердечное спасибо всему сообществу Linuxchix, включая Дженн Весперманн (доброжелательный диктатор Linuxchix), Дэнсер Весперманн (Dancer Vespermann), Danamania, Колби (Colby), Evilpig, Элмут Беренс (Almut Behrens), гуру Mandrake Эндрю (Andrew), Hamster, Piglet, Вэл Хенсон (Val Hanson), Питера Энвина (Peter Anvin), Рика Роуза (Rik Rose), Девдаса Бхагата (Devdas Bhagat), Дэвида Норта (David North), Телзу Гвинн (Telsa Gwynne), Марию Блэкмор (Maria Blackmore), Мередид Лафф (Meredyd Luff), Кай Мактейн (Kai MacTane) и Эринн Кларк (Erinn Clark). Да здравствует Linuxchix!

Наверняка я забыла о ком-нибудь, кто терпеливо сносил мои бесконечные приставания. Напомните о себе, и я внесу изменения во втором издании.



Быстрое перемещение в Vim


Задача

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



Чем плохи двоичные драйверы


Некоторые производители оборудования ограничивают поддержку Linux двоичными драйверами. По возможности избегайте их. Двоичные драйверы откомпилированы для конкретной архитектуры и версии ядра. Программу так легко перекомпилировать, чтобы она правильно работала в вашей системе, что лишать такой возможности пользователей попросту глупо. Пакетные системы (такие, как Red Hat, SuSE и Debian) ограждают нас, конечных пользователей, от этих проблем, поскольку производители пакетов делают всю работу за нас; однако и им необходимы исходные тексты. Линус Торвальдс говорит:

«...Я разрешаю модули, содержащие только двоичные файлы, но хочу, чтобы люди знали: предполагается, что такие модули работают только в одной версии ядра, для которой они были откомпилированы. Если они работают в других версиях, это не более чем приятная неожиданность».



Дисковые квоты


Задача

Требуется ограничить объем дискового пространства, которое может быть занято пользователем. Во многих системах встречаются нарушители, забивающие свои диски коллекциями МРЗ-файлов и телесериалами.



Для кого написана эта книга

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

От читателя потребуется некоторый опыт работы в Linux. Быть знатоком не обязательно, но нужно по крайней мере уметь загружать систему и завершать ра-

Предисловие

боту с ней, запускать приложения, работать в WWW и ориентироваться в файловой системе. Читатель должен знать, как получить доступ к командной строке и использовать ее, и обладать навыками работы в графической среде. Он должен понимать, что Linux является полноценной многопользовательской системой и что в работе следует по возможности использовать непривилегированную учетную запись, переключаясь на привилегии root только в случае необходимости.

Предполагается, что читатель является администратором отдельного компьютера или локальной сети и может получить привилегии root в случае необходимости. Может быть, вы стремитесь в полной мере управлять работой своего Linux-компьютера, или создать свой собственный почтовый или веб-сервер, или создать небольшую сеть. А может, вы — системный администратор Windows, которому неожиданно потребовалось подключить Windows-клиентов к серверам Linux... или включить серверы Linux в существующую сеть... или интегрировать компьютеры с Linux и Windows в одной смешанной сети.

А может, вам вообще нет дела до Windows, и вы просто хотите освоить системное администрирование Linux.



Другая документация


В различных местах вашей системы также прячутся многочисленные файлы README, CHANGELOGS, RELEASE NOTES, COPYRIGHT, INSTALL, интегрированные справочные системы и документация в формате HTML. Да, в целом творится изрядная путаница. Не волнуйтесь, в этой главе вы научитесь быстро находить нужную информацию, а удобный сценарий Python облегчит процесс поиска.

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

Коммерческие дистрибутивы Linux — такие, как Red Hat, SuSE, Mandrake, Xandros и Linspire — содержат превосходные руководства пользователя. У каждого серьезного дистрибутива Linux имеется богатый выбор электронной документации. Полезную и справочную информацию также можно найти при помощи поисковых систем, в списках рассылки, конференциях Usenet и на всевозможных веб-сайтах, посвященных Linux.



Форматы и стандарты


Далее перечислены основные аппаратные стандарты. CD-R — записываемый компакт-диск; также встречается термин WORM (Write Once, Read Many). Диски CD-R универсальны и должны читаться в любом дисководе CD-ROM. CD-RW — перезаписываемый компакт-диск, или WMRM (Write Many, Read Many). Диски CD-RW читаются всеми современными дисководами. CD-ROM — Compact Disc Read-Only Memory. Коммерческие диски производятся штамповкой, а не записываются лазерным лучом, поэтому запись на них невозможна. Mount Rainier ReWrite — электроника, необходимая дисководу для поддержки UDF. DVD-Video — стандарт коммерческих видеодисков, воспроизводимый на всех устройствах DVD. DVD-R и DVD+R — формат WORM; воспроизводится всеми проигрывателями DVD. DVD-R существует в двух разных несовместимых типах дисков: DVD-R(A) и DVD-R(G). Диски А не могут использоваться в устройствах записи G, и наоборот. DVD-RAM — перезаписываемые диски, предназначенные для хранения данных. Теоретически один диск способен выдержать до 100 000 операций перезаписи. Диск также может использоваться для записи и воспроизведения фильмов на PC, но, скорее всего, обычный проигрыватель DVD не сможет прочитать диск в формате DVD-RAM. DVD-R/RW — формат, разработанный для записи фильмов и поддерживаемый DVD Forum (http://www.dvdforum.com). DVD+R/RW — конкурирующий стандарт, несовместимый с DVD-R/RW и поддерживаемый DVD+RW Alliance (http://www.dvdrw.com). Только DVD+R/RW поддерживает UDF.

Дисководы DVD нового поколения поддерживают все форматы. Автономные проигрыватели DVD все еще участвуют в войне стандартов между форматами DVD+ и DVD-.

Стандарты файловых систем CD и DVD. El Torito — спецификация формата загружаемого диска. UDF (Universal Disk Format) — стандарт файловой системы с инкрсментной записью пакетов. Позволяет переносить файлы прямо на диск, как на дискету 3,5". Предполагалось, что в ядре Linux 2.6 будет реализована полноценная поддержка UDF, но этого не произошло. ISO-9660 — старый стандарт с поддержкой имен файлов в формате 8.3 (из доисторической эпохи MS-DOS, когда имена файлов содержали до 8 символов и файл имел расширение из 3 символов).

Документация



="right">20 отличаются большей детализацией, в них присутствует учебный материал и подробные примеры.


См. также whereis(1), mandb(8).
Утилита grep существует в нескольких разновидностях; за подробностями обращайтесь к grep(1).




См. также info info, lpr(1), lp(1); глава 14; CUPS Software Users Manual (http://localhost:631/documentation.html).



Листинг 1.1 (продолжение)
"thanks", \ "notes", \ "features", \ "faq", \ "acknowledgement", \ "bugs", \ "problems" \ ]
def system out (cmdstr) : retlist = [] fp = os.popen(cmdstr) while 1: s = fp.readline() if not s : break retlist.append(s) fp.close() return retlist # main() for arg in sys.argv : #print string.split(arg, " \t./") files = system_out("locate " + arg + " | grep -w " + arg):
for path in files : #print path
# Особый случай для файлов, в пути которых присутствуют слова # "man", "doc" или "info": if (string.findtpath, "/man") >= 0) \ or (string.find(path. "/doc") >=* 0) \ or (string.find(path. "/info") >- 0) : print path. ) continue
# Проверить, совпадает ли с каким-либо именем в файле: base = os.path.basename(path) for nam in docfilenames : if base == "" : continue # Для поиска по части слова : # Поиск только по всему слову: # Make a regexp to search for nam as full-word only pat = "^" + nam + "$" if (re.compile(nam).search(base, 1)) : print path, base = "" continue См. также
locate(1), grep(1).


Установка и модификация





Снова длинная цепочка сообщений об ошибках, указывающих на новые неразрешенные зависимости. Загружаем новый архив, снова работа в саду. К тому моменту, когда все было установлено и нормально работало, помидоры вырастали до размеров дыни. Хорошо, что в те времена мы были такими умными, что могли бы обойтись и без компьютеров.
Почему возникали эти мучения с зависимостями? Потому что в Linux используются общие библиотеки, которые динамически подключаются на стадии выполнения. Многие программы, совершенно не связанные друг с другом, пользуются одними библиотеками; такая архитектура повышает скорость и эффективность системы. Программы расходуют меньше памяти и места на диске, становятся более компактными, что упрощает их распространение. Но по мере эволюции и усложнения системы Linux становилось все труднее справляться с построением системы по исходным текстам. Так программы стали оформляться в виде пакетов. В пакет входят откомпилированные библиотеки; сценарии, выполняемые до и после установки; файловые индексы; сценарии удаления и т. д. Каждый пакет знает все, что ему необходимо знать для разрешения своих зависимостей. Информация обо всех файлах, установленных из пакетов, хранится в системной базе данных пакетов.




Вывод списка конфигурационных файлов системной команды:
$ rpm -qcf /usr/bin/ssh /etc/ssh/ssh_config
Вывод списка всех установленных пакетов:
$ rpm -qa setup-2.5.27-1.1 tzdata-2003d-l bzip2-libs-l.0.2-10
Сохранение списка в файле с параллельным просмотром на экране:
$ rpm -qa | tee rpmlist.txt
Определение того, к какому пакету принадлежит тот или иной файл:
$ rpm -qf /usr/bin/tuxkart tuxkart-0.2.0-3
Запросы RPM не обрабатывают символические ссылки и сообщают, что файл «не принадлежит ни к одному пакету». Чтобы найти файл, на который указывает символическая ссылка, воспользуйтесь командой
$ namei -/tuxkart f: tuxkart l tuxkart -> /usr/games/tuxkart d / d usr d games - tuxkart
Вывод информации о пакете:
$ rpm -qi kdegames Name :kdegames Relocations/usr Version :3.1.4 Vendor:Red Hat. Inc. Release :2 Build date: Mon 13 Oct 2003 Install date:Tue Nov 5.2003 Build host: daffy.perf.redhat.com Group : Amusements/Games Source RPM:kdegames-3.1.4-2.src.rpm Size :16167441 License: GPL Signature :DSA/SHA1. Tue 28 Oct 2003 Key ID b446dO4f2a6fd2 Packager :Red Hat. Inc. <http://bugzilla.redhat.com/bugzi11a> Summary :K Desktop Environment - Games Description : Included with this package are: kenolaba, kasteroids. kblackbox, kmajongg. kmines. konquest, kpoker. kreversi, ksame. kshisen. ksokoban. ksmiletris. ksnake. ksirtet, katomic. kjumpingcube, ktuberling



Листинг 2.1 (продолжение)
Group: System Environment/Base License: None __eof__
found=0: orphan=0; echo " Scanning system libraries SNAME version $VER-$REL... " find $LIBS -type f \( -name '*.so.*' -o -name '*.so' \) | while read f do ((found++)) if ! rpm -qf $f >/dev/null 2>&1 then ((orphan++)) echo "Provides: $(basename $f)" >&9 fi echo -ne "Orphans found: $orphan/$found...\r" done echo '': echo ''
cat <<__eof__ >&9
%description This is a virtual RPM package. It contains no actual files. It uses the 'Provides' token from RPM 3.x and later to list many of the sharedlibraries that are part of the base operating system and associated subsets for this SOS environment.
%prep # nothing to do
%build # nothing to do
%install # nothing to do
%clean # nothing to do
%post # nothing to do
%files
__eof__
exec 9>&- rpmbuild -ba $TMPSPEC; rm $TMPSPEC См. также
rpm(8), rpmbuild(8); Maximum PRM (http://www.rpm.org/max-rpm/index.html).
2.10. Решение проблем установки RPM


См. также rpm(8); RPM.org (http://www.rpm.org/); Maximum PRM (http://www.rpm.org/maxrpm/index.html).



Найдите в распакованном архиве сценарий configure и запустите его встроенную команду:
# cd /usr/src/redhat/S0URCES/samba-3.0.0/source # ./configure --help 'configure' configure this package to adapt to many kinds of systems ... Optional Packages: with-PACKAGE[=ARG] use PACKAGE [ARG=yes] without-PACKAGE do not use PACKAGE with-fhs Use FHS-compliant paths with-privated=DIR Where to put smbpasswd ...
Настроив директиву %configure по своему усмотрению, сохраните и закройте файл.
Создатели пакетов не могут удовлетворить потребности всех пользователей. Настройка SRPM позволит легко обеспечить именно тот набор параметров конфигурации, который нужен в вашем конкретном случае.
В наше время настройка конфигурации SRPM чаще всего применяется для добавления или настройки поддержки аутентификации. Существует много разных внутренних модулей аутентификации (LDAP, MySQL, BerkeleyDB, PostgreSQL) и много разных аутентификационных протоколов. С точки зрения безопасности рекомендуется включать только те возможности, которые будут реально использоваться.
См. также rpmbuild(8), rpm(8); RPM.org (http://www.rpm.org/); Maximum PRM (http://www.rpm.org/max-rpm/index.html).



University of Southern California. USA ftp: //mirrors.use.edu/pub/linux/fedora/ http://mirrors.use.edu/pub/linux/fedora/
Теперь отредактируйте файл /etc/yum.conf, используя стандартные записи в качестве образца:
[base] name=Fedora Core $releasever - $basearch - Base baseurl=http://mirrors.kernel.org/fedora/core/$releasever/$basearch/os baseurl=http://mirrors.use.edu/pub/linux/fedora/$releasever/$basearch/os


Поиск конкретных пакетов:
# yum list installed | grep -i tux tuxracer i386 0.61-23 tuxracer i386 0.2.0-3
Вывод информации о пакете:
# yum info tuxracer
Отображение пакетов, для которых имеются обновления:
#yum list updates

Установка и сопровождение




Установка и сопровождение в системах на базе Debian


Кодовые обозначения выглядят симпатично, но не стоит использовать их в конфигурационных файлах. Нестабильной версии всегда будет соответствовать обозначение Sid, но Woody и Sarge не всегда будут связываться со стабильной и тестовой версиями — когда-нибудь текущая тестовая версия Sarge будет повышена до статуса стабильной, а текущая версия Woody уйдет на покой. При грамотном сопровождении система Debian постоянно обновляется без переустановки, поэтому не стоит нарушать ее работу использованием кодовых обозначений, которые со временем изменятся.

Далее перечислены кодовые названия версий. Все они позаимствованы из фильма «История игрушек»:

Buzz — Базз Световой Год, космонавт (1.1); Rex — тираннозавр Рекс (1.2); Во -Бо Пип (1.3.x); Hamm — Хэм, свинья-копилка (2.0); Slink — собака Слинки (2.1);

А теперь версии 3.x:

Woody — ковбой (стабильная версия); Sarge — командир армии зеленых солдатиков (тестовая версия); Sid — испорченный мальчишка, ломающий игрушки (нестабильная версия).


Wrote 1271 records.
Writing new source list Source List entries for this Disc are: deb cdrom:[Libranet GNU/Linux 2.8.1 CD2]/ archive/ Repeat this process for the rest of the CDs in your set.
Используйте ключ -d, чтобы добавить данные компакт-диска из другого дисковода:
# apt-cdrom -d /cdrom1 add
Идентификация диска:
$ apt-cdrom ident Using CD-ROM mount point /cdrom/ Mounting CD-ROM Identifying.. [Oeabc03dl0414e59dfal622326e20da7-2] Stored Label: 'Libranet GNU/Linux 2.8.1 CD21 $


Всегда начинайте с обновления списков пакетов:
# apt-get update
Следующая команда обновляет все установленные пакеты, но не удаляет пакеты для разрешения зависимостей:
# apt-get -u upgrade
Обновление всех установленных пакетов с удалением или установкой пакетов по мере необходимости для разрешения всех зависимостей:
# apt-get -u dist-upgrade
Флаг -u позволяет заранее просмотреть список всех изменений. Обновление может занять несколько часов, в зависимости от скорости подключения к Интернету и количества загружаемых пакетов.




См. также dpkg(8).



adduser adminmenu apache at base-config courier-imap courier-imap-ssl courier-pop courier-pop-ssl cron cupsys cupsys-driver-gimpprint diet-elements dict-foldoc dict gcide diet-jargon dict-vera dict-wn dictd gdm2... ... WARNING: The following essential packages will be removed This should NOT be done unless you know exactly what you are doing! login libpam-modules (due to login)
В данном случае исправление конфликтов зависимостей потребует едва ли не полной перестройки системы. Чаще проблемы ограничиваются несколькими пакетами. В этом случае начинайте удалять наименее важные из них, пока конфликты зависимостей не будут разрешены, а затем переустановите все пакеты, которые вам нужны.
Если apt-get -u dist-upgrage отображает какие-либо задержанные (held) пакеты, от них лучше избавиться. Пакеты удерживаются из-за конфликтов зависимостей, которые не удается разрешить apt. Попробуйте воспользоваться следующей командой для поиска и исправления конфликтов:
# apt-get -о Debug::pkgProblemResolver=yes dist-upgrade
Если исправить конфликты не удается, команда завершается с сообщением
0 upgraded. 0 newly installed, 0 to remove and 6 not upgraded.
Удаляйте held-пакеты один за одним, каждый раз запуская dist-upgrade, пока не останется ни одного задержанного пакета. Затем установите заново все необходимые пакеты. Не забудьте использовать ключ --dry-run, чтобы заранее знать обо всех последствиях:
# apt-get remove --dry-run libsdl-perl



Установка программ по исходным текстам


файлы, когда надобность в них отпадет. Некоторые авторы программ предусмотрительно включают режим make uninstall для «чистого» удаления программы, но многие этого не делают.


Некоторые серверы должны строиться по исходным текстам. Например, вебсервер Apache строится по исходным текстам для обеспечения полной настройки и оптимизации.
Что касается настольных систем, они слишком сложны и громоздки для самостоятельной компиляции. В таких случаях проще воспользоваться пакетными дистрибутивами Linux.
См. также info tar, make(1), bzip2(1).

Идентификация оборудования



Следующая команда выводит сводку всех устройств, подключенных к шине PCI:
$ /sbin/lspci 00:00.0 Host bridge: VIA Technologies. Inc. VT8363/8365 KT133/KM133] (rev 02) 00:01.0 PCI bridge: VIA Technologies. Inc. VT8363/8365 KT133/KM133 AGP] 00:06.0 Ethernet controller: Linksys Network Everywhere Fast Ethernet 10/100 model NC100 (rev 11)
Флаги -v или -vv используются для вывода более подробной информации:
$ /sbin/lspci -v 0000:01.00.0 VGA compatible controller: 3Dfx Interactive. Inc. Voodoo 3 (rev 01) (prog- if 00 [VGA]) Subsystem: 3dfx Interactive. Inc.: Unknown device 1252 Flags: 66MHz. fast devsel, IRQ 10 Memory at d4000000 (32-bit, non-prefetchable) [size=32M] ...
Если вы ищете драйверы, возьмите выходные данные lspci (например, VT8363/8365 или 3Dfx Interactive, Inc. Voodoo 3 (rev 01)) и проведите по ним поиск в Google.


См. также proc(5).



CPU: L2 Cache: 64K (64 bytes/line) Intel machine check reporting enabled on CPU#0. CPU: After generic, caps: 0183f9ff clc7f9ff 00000000 00000000 CPU: Common caps: 0183f9ff clc7f9ff 00000000 00000000 CPU: AMD Duron(tm) Processor stepping 01
Обратите внимание: при поиске возвращаются только те строки, в которых присутствует искомая подстрока. Часто дополнительная информация содержится в соседних строках и находится прямым просмотром файла:
Initializing CPU#0 Detected 801.446 MHz processor.

Редактирование текстовых файлов в JOE и Vim



JOE является «однорежимным» редактором; иначе говоря, ввод команд и редактирование текста осуществляются на одном экране. Vim работает в двух режимах: нормальном/командном режиме и режиме вставки/редактирования. В нормальном режиме все вводимые данные интерпретируются как команды. В режиме вставки все интерпретируется как обычный текст. Это приводит в недоумение некоторых новичков, которые впервые берутся за Vim — ведь в программе нет анимированного «помощника», который бы объяснил, что они должны переключаться между двумя режимами, и показал, как это делается. Vim — серьезный, мощный инструмент, но, как вы узнаете из этой главы, освоить его не так уж трудно.
СОВЕТ Существует прекрасная бесплатная программа обучения навыкам печати для Linux, которая называется Gtypist (http://www.gnu.org/software/gtypist/gtypist.html). Она обучает как раскладке Qwerty, так и раскладке Дворака и содержит учебные курсы на английском, чешском, русском, испанском, немецком, французском и норвежском языках. Как и большинство программ на базе ncurses, она лучше смотрится на текстовой консоли, чем в X.


Переключение между окнами осуществляется командами ^K P и ^K N. Иногда с поиском нужного окна возникают проблемы; команда ^K I переключает режимы показа всех окон/скрытия неактивных окон.
Пометка копируемых блоков текста производится командами ^K В и ^K K. Установите курсор в точке вставки и скопируйте текст клавишами ^K C.


^K Y - удаление блока текста; ^K . — перемещение блока вправо; ^K , — перемещение блока влево; ^K A — выравнивание текста по центру; ^K / — открытие окна командной строки для выполнения команды обработки текста. См. также joe(1); справочная система JOE.



Выберите нужный вариант
:help vimrc-exampie.vim
Если вы недавно работаете в Vim, для начала потренируйтесь с учебным курсом Vim. Следующие разделы посвящены настройке рабочей среды и управлению Vim.
См. также vimtutor(1); страница документации vim.org (http://www.vim.org/docs.php); страница vimdoc на сайте SourceForge (http://vimdoc.sourceforge.net/).



не встречающиеся в обычных текстах, позволяют создать столько привязок, сколько потребуется.
Полная информация о встроенных привязках Vim выводится командой :help map-which-keys. Также можно запросить у Vim справку по конкретной клавише или комбинации:
:help CTRL-V :help F5 :help /b
Помните, что названия клавиш CTRL и F5 должны записываться; не нажимайте их на клавиатуре.
См. также Справочная система vim (:help 2html.vim, :help key-mapping).



Существуют 52 закладки: a-z и A-Z. В командном режиме установите курсор в нужную позицию и введите команду
ma
Чтобы вернуться к маркеру, введите команду

(Обратите внимание: апостроф обратный, а не прямой!)
Маркеры нижнего регистра работают только в границах одного файла. Для перехода к другому файлу следует использовать маркеры верхнего регистра. Допустим, вы пометили позицию в файле configstuff.txt:
mA
Если теперь ввести команду `A в любом открытом файле или окне, Vim перейдет к отмеченной позиции configstuff.txt, открыв файл в случае необходимости. Маркеры верхнего регистра хранятся в файле ~/.viminfo, поэтому они восстанавливаются в следующем сеансе.
Нумерованные маркеры — удобная возможность Vim, которая не требует вмешательства с вашей стороны. В момент завершения работы Vim запоминает последнюю позицию курсора. При следующем запуске Vim можно вернуться к этой позиции командой
`0 См. также
Справочная система vim (:help mark-motions, :hetp viminfo).




Рисунок 6.2. Внесение изменений и сохранение сеанса


Compiled by Norbert Tretkowsky (nobse@debian.org) Big version with GTK2 GUI. Features included (+) or not (-): +arabic +autocmd +balloon_eval +browse ++builtin_terms +byte_offset +cindent +clientserver -hanguljinput +iconv +insert_expand +jumplist
system vimrc file : "$VIM/vimrc" user vimrc file : "$HOME/.vimrc" user exrc file : "$HOME/.exrc" system gvimrc file : "$VIM/gvimrc" user gvimrc file : "$HOME/.gvimrc" system menu file : "SVIMRUNTIME/menu.vim" fall-back for $VIM: "/usr/share/vim"
Compilation: gcc -c -I . -Iproto -DHAVE+CONFIG H -DFEAT_GUI_GTK -I/usr/include/gtk 2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 ... См. также
Справочная система vim (:help version).


Запуск и завершение работы Linux



В Red Hat следующим выполняется сценарий /etc/rc.d/rc.sysinit, а затем сценарии из каталога, соответствующего уровню выполнения (обычно /etc/rc3.d или /etc/rc5.d).
Процедура запуска в Slackware ближе к процедуре запуска BSD: в системе имеется один каталог /etc/rc.d, в котором находится сценарий init для каждого уровня выполнения. Впрочем, в ней также присутствуют некоторые аспекты SysV.
В системах Red Hat и Debian каталоги /etc/rc*.d содержат не стартовые сценарии, а символические ссылки на сценарии в /etc/init.d. Создание ссылок на основной каталог сценариев /etc/init.d предотвращает излишнее дублирование. Кроме того, имена ссылок определяют способ запуска служсб. Для примера возьмем запись
$ ls -go S20cupsys lrwxrwxrwx 1 16 Sep 9 17:51 S20cupsys -> ../init.d/cupsys
Префикс S20 означает, что служба cupsys должна запускаться с приоритетом 20. Чем ниже значение, тем выше приоритет. Запись K20cupsys означает, что служба должна быть «убита» (что поделаешь, мир Linux жесток). Этот простой механизм гарантирует, что службы запускаются и останавливаются так, как вам потребуется, и в правильном порядке.





См. также Update-rc.d(8); раздел 7.3; справочное руководство Debian (http://qref.sourceforge.net); раздел «Введение» настоящей главы.






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










допускаются. Рекомендуется использовать сильные пароли, то есть не выбирать в качестве пароля имена, слова из словаря, дни рождения или адреса. Пароли рекомендуется записывать и хранить в надежном месте. К сожалению, многие пользователи выбирают слабые, легко угадываемые пароли или хранят их в небезопасных местах (например, на записке, прикрепленной к монитору).
Пароли Linux не восстанавливаются. При потере пароля следует обратиться к суперпользователю для получения нового пароля.
См. также passwd(1), passwd(5).



Adding new group squid (109). Adding new user squid (109) with group squid Not creating home directory
Проверьте результат:
# cat /etc/passwd | grep squid squid:x:109:109::/home/squid:/bin/false
Хотя подстрока /home/squid присутствует, домашний каталог не создается.
А вот как то же самое делается в useradd:
# useradd -d /dev/nuil -g squid -s /bin/false squid



Листинг 8.1 (продолжение)
# имя_пользователя : имя фамилия # Чтобы в качестве разделителя использовалась запятая, замените # IFS=":$IFS" на IFS=",$IFS" while IFS=":$IFS" read username realname; do # Сначала удаляем пустые строки и комментарии case "Susername" in '' | \#*) continue ;; esac # Чтение /etc/passwd и /etc/group и вычисление # следующих свободных значений UID and GID. # Программа начинает с (id=1000}, измените для своей системы id=$({ getent passwd: getent group; } | cut -f3 -d: | sort -un | awk 'BEGIN { id=1000 } $1 == id { id++ } $1 > id { print id: exit }') # Добавление новых пользователей в /etc/group и /etc/passwd. # Создание домашних каталогов командой chmod 700 # Все параметры groupadd, useradd и chmod # можно изменить в соответствии со спецификой системы. groupadd -g $id Susername useradd -m -c "$realname" -g $username -u $id $username chmod 700 /home/$username # Назначение пароля. Для этой цели вызывается другой сценарий # mass_passwd. который может использоваться независимо. # Сценарий mass_passwd выводит имя пользователя, пароль # и идентификатор пользователя. $(dirname $0)/lmass_passwd -M $username done
Листинг 8.2. Программа mass_passwd
#!/bin/sh ## Каталог для сохранения файлов "username.passwd.txt" ## Если каталог не существует, он будет создан. text_file_dir=$HOME/mass_passwds log_file=mass_passwd.log ## Минимальный идентификатор для "обычных" пользователей min_uid=1000 ## Длина генерируемых паролей pass_len=8 ## Срок действия паролей (в днях) pass_expire=90 ###################################################################### ## При желании отредактируйте текст между двумя строками ----------. 8.17. Серийное добавление новых пользователей # Получение имени программы (скорее всего "mass_passwd") prog=${0##*/}
usage () { echo "usage: $prog [-v] [-n] username ..." echo " $prog [-v] [-n] [-g] groupname ..." echo " $prog [-v] [-n] [-a]" echo " -g change passwords of everyone ina group" echo " -a change everyone's password" echo " -v verbose" echo " -n don't do it, just simulate (implies -v)" exit 0 }
short_usage () { echo >&2 "usage: $prog [-v] [-g] [-a] name..." echo >&2 " $prog -h for help" exit 1 } # echo something, but only i f in verbose mode vecho () { test -n "$verbose" && echo "$@" } # Построение случайного пароля. # # Если программа pwgen доступна, используем ее -- она для этого # предназначена и хорошо работает. # # Если программа недоступна, читаем /dev/urandom и отфильтровываем все # символы, не являющиеся алфавитно-цифровыми, пока количество символов # не окажется достаточным для пароля. Символы в "tr -d" определяют # ASCII-коды (в восьмеричной записи) диапазонов удаляемых символов. # # Подобное использование /dev/urandom крайне неэффективно. # но это несущественно, randompass () { pwgen $pass_ len 1 2>&- || tr -d '[\000-\057][\072-\100][\133-\140][\173-\377]' < /dev/urandom | dd bs=$pass_len count=l 2>&- } # Функция интерпретирует режим (пользователи / группы / серийная замена) # и возвращает список имен пользователей get_users () { if [ -n "$all_mode" ]; then getent passwd | awk -F: '{if ($3 >= '$min_uid') (print $1}}' return fi if [ -z "$group_mode" ]; then echo "$@" return fi while [ -n "$1" ]; do
продолжение ==>


Листинг 8.2 {продолжение)
g_ent=$(getent group "$1" 2>&-) if [ -z "$g_ent" ]; then echo >&2 "warning: $1: group not found" continue fi members=${g_ent##*:} gid=${g_ent%:*} gid=${gid##*:} echo "$members" | tr '.' ' ' getent passwd | awk -F: '{if ($4 == '$gid') { print $1 } }' shift done } # Основной код group_mode=; verbose=; all_mode=; simulate=; eol=; while [ -z "$eol" ]; do case "$1" in -g) group_mode=1; shift ;; -v) verbose=1; shift ;; -a) all_mode=1; shift ;; -n) simulate=true; verbose=1; shift ;; -M) mass_out=1; shift ;; # we're called from mass_useradd -h | -? | --help) usage ;; --) eol=1; shift ;; -*) short_usage ;; *) eol=1 ;; esac done # Настройка безопасного окружения и каталога для текстовых файлов. # предназначенных для вывода на печать. PATH=/usr/sbin:/usr/bin:$PATH umask 077 mkdir -р $text_file_dir cd $text_file_dir
processed=0 for u in $(get_users "$@"); do vecho -n "generating password for $u..." pass=$(randompass) echo "$u:$pass" | eval $simulate chpasswd vecho -n "." eval $simulate chage -M $pass_expire -d 2003-01-01 $u vecho -n "."
rm -f $u.passwd.txt echo > $u.passwd.txt "\ ---------------------------------------------------------------------- Login name: $u Password: $pass Please log in and change your password: the system should prompt you to do this when you log in. You can change your 8.18. Серийная замена паролей password at any time with the 'passwd' command. Choose a strong password - everyday words, birthdays, names of people or animals, all these are too easy to guess. Also, DO NOT give your password to anyone, ever. The IT staff will never ask you for your password, and neither should anyone else. You will be held responsible for all activity done via your account. ----------------------------------------------------------------------" printf >> $log_file "$(date) %-12s %s\\n" $u $pass vecho "$pass" if [-n "$mass_out" ]; then uid=$(getent passwd $u | cut -f3 -d:) echo -e "$u\\t$pass\\t$uid" fi processed=$(expr $processed + 1) done
if [ $processed -gt 0 ]; then test -z "$mass_out" && echo >&2 "$processed password(s) reset - see $text_file_dir/$log_file" else echo >&2 "no users specified - see '$prog -h' for help" fi См. также
bash(1), pwgen(1); домашняя страница программы pwgen (http://sourceforge.net/proiects/pwgen/).



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

Операции с файлами и разделами



Те, кого действительно заинтересует эта тема, найдут дополнительную информацию в спецификации FHS.Вот лишь некоторые обстоятельства, которые должны учитывать пользователи Linux: каталоги /tmp и /var могут размещаться в отдельных разделах с целью повышения безопасности. Если вследствие каких-то сбоев начнется неконтролируемое заполнение этих каталогов, они будут изолированы от остальных компонентов системы; каталог /home может находиться в собственном разделе или на выделенном сервере для упрощения создания резервных копий и защиты данных при обновлении системы. В этом случае содержимое /home останется нетронутым даже после полного уничтожения и переустановки системы Linux; хранение всех конфигурационных файлов в /etc и /home упрощает создание резервных копий. Вы можете ограничиться архивацией только содержимого /etc и /home, а остальные компоненты восстановить с установочных дисков системы. Но это будет означать, что при восстановлении будут потеряны обновления программ —- учтите это обстоятельство при разработке чрезвычайных планов.


ReiserFS — система особенно хорошо подходит для систем с большим количеством мелких файлов (например, почтовых серверов, использующих формат maildir, или серверов новостей). ReiserFS обеспечивает высокоэффективное хранение файлов; остаточные биты файлов упаковываются в листовые узлы b-дерева, что предотвращает напрасное расходование дискового пространства. Система отлично масштабируется и так нее хорошо справляется с большими файлами. ReiserFS работает в любой архитектуре, поддерживаемой системой Linux.
JFS — вклад IBM в Большое Соревнование Файловых Систем Linux; система портирована из AIX и OS/2 Warp. Она поддерживает многопроцессорные системы, списки управления доступом (ACL) и даже — представьте! — динамическое изменение размеров. Просто перемонтируйте файловую систему JFS с новым размером, и ничего больше делать не придется (правда, таким образом можно только увеличить размер тома, но не уменьшить его).
XFS — разработка SGI, портированная из IRIX. XFS мыслит масштабно — заявлено, что она способна работать с файловыми системами объемами до 9 экзабайт. Ее сильной стороной является обработка очень больших файлов (скажем, гигантских баз данных). У XFS имеется одна превосходная функция, называемая отложенным распределением. Система откладывает запись на диск и выбор блока для записи, чтобы выбрать наибольшее возможное количество смежных блоков. Если в системе используется большое количество временных файлов с коротким сроком жизни, XFS может вообще никогда не выделить блоки под эти файлы. XFS обладает интегрированной поддержкой дисковых квот, ACL, архивации и восстановления. См. также
JFS (http://www-124.ibm.com/jfs/); XFS (http://oss.cgi.com/projects/xfs/); ReiserFS (http://www.namesys.com); Ext2/3 (http://e2fsprogs.sourceforge.net/ext2.html); File-system Hierarchy Standard (http://www.pathname.com/fhs/).







Учтите, что флаг + s устанавливает оба бита, setgid и setuid, что может создать угрозу для безопасности, если в этом каталоге хранятся исполняемые файлы или сценарии. Команда chmod 2775 устанавливает только бит setgid.
ВНИМАНИЕ Бит setuid пробивает большую брешь в системе безопасности. Не используйте его для исполняемых файлов. Программы, использующие его (например, /usr/bin/passwd), содержат внутренние меры защиты для предотвращения эскалации привилегий и других нарушений. Если в системе имеются сценарии, которые должны запускаться пользователями, создайте для этой цели специальную группу.
Установите статический бит (sticky bit), чтобы файл не мог быть удален никем, кроме владельца:
# chmod +t /общий_каталог
или
# chmod 3775 /общий_каталог
Комментарии
Все файлы, создаваемые в каталоге, принадлежат той же группе, что и сам каталог. Все файлы, скопированные в каталог, сохраняют принадлежность исходной группе. Чтобы разные пользователи могли работать с одним каталогом, они должны принадлежать к одной группе. Разрешения файлов, создаваемых в каталоге, определяются масками umask владельцев.
Каталог /tmp является классическим примером каталога, использующего статический бит:
# stat /tmp ... Access: (1777/drwxrwxrwt) Uid: ( 0/ root) Gid: ( 0/ root)
Каталог /tmp должен быть общедоступным для чтения и записи, но мы не хотим, чтобы пользователи или процессы удаляли чужие временные файлы. Задача решается при помощи статического бита.
Бит setuid позволяет пользователям выполнить команду с такими же разрешениями, как у владельца файла. Именно так рядовые пользователи могут изменять свои пароли, хотя запись в файл /etc/passwd разрешена только суперпользователю root:
$ stat /usr/bin/passwd File: '/usr/bin/passwd' Size: 26584 Blocks: 56 10 Block: 4096 regular file ... Access: (4755/-rwsr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)


Когда программа (например, текстовый редактор или компилятор) создает файл, она жестко кодируется на задание файловых разрешений 0666 или 0777. Если программа знает, что создаваемый файл является исполняемым, она устанавливает разрешения 0777. На практике чаще всего используется значение 0666; именно поэтому для сценариев приходится выполнять команду chmod +x. Как правило, ни 0666, ни 0777 не являются идеально подходящими, поэтому маска umask исключает ненужные биты. Например, с назначением маски umask 0002 обычным файлам будут назначаться разрешения 0664, а исполняемым — 0775.


9.11. Монтирование и демонтирование файловых систем на жестких дисках


# /sbin/fdisk -l Disk /dev/hda : 20. 5 GB. 20576747520 bytes 255 heads, 63 sectors/track, 2501 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/hdal * 1 893 7172991 7 HPFS/NTFS /dev/hda2 894 1033 1124550 с W95 FAT32 (LBA) /dev/hda3 1034 2501 11791710 f W95 Ext'd (LBA) /dev/hda5 2437 2501 522081 82 Linux swap /dev/hda6 1034 1670 5116639+ 83 Linux /dev/hda7 1671 2436 6152863+ 83 Linux ...
Команда df (Disk Free) покажет, какие разделы уже смонтированы и какие точки подключения при этом используются:
$ df Filesystem lK-blocks Used Available Use% Mounted on /dev/hda6 5116472 1494584 3621888 30% / /dev/hda7 6152668 4011652 2141016 66% /home
Команда df также может использоваться для отображения информации об одном смонтированном разделе. Ключ -h выводит числовые значения в более удобном формате:
$ df -h /dev/hdc6 Filesystem Size Used Avail Use% Mounted on /dev/hdc6 4.9G 1.4G 3.5G 29% /home
Раздел Windows NTFS /dev/hda1 монтируется так:
# mkdir -m 755 /win2k # mount -t ntfs -r /dev/hda1 /win2k
ВНИМАНИЕ Поддержка записи в NTFS находится на экспериментальной стадии. Разрешая ее, вы рискуете своими данными в разделе NTFS, поэтому в команде mount присутствует ключ -г. Для организации общего доступа к файлам NTFS используйте Samba.
Демонтирование тома осуществляется командой
# umount /win2k См. также
mount(8), The NTFS FAQ (http:/linux-ntfs.sourceforge.net/info/ntfs.html).


Units - cylinders of 256 * 512 = 131072 bytes Device Boot Start End Blocks Id System /dev/sda1 * 1 499 63586 6 FAT16

Заплатки настройка и обновление ядра




Рисунок 10.1 . Пользовательский интерфейс xconfig


системах и рабочих станциях небольшая избыточность не столь существенна и может быть даже удобной для внесения будущих изменений. См. также
Раздел «Введение» настоящей главы; электронная справка в программе настройки ядра; раздел 10.2.


См. также Раздел «Введение» настоящей главы; электронная справка в программе настройки ядра; раздел 10.2.




Как правило, в дистрибутивах Linux используется initrd, чтобы типовое ядро могло загружаться в большинстве систем без встраивания всех возможных драйверов. См. также
mkirritrd(8).

Запись CD и DVD


Rock Ridge —расширение ISO-9660 с поддержкой длинных имен и символических ссылок в стиле Unix. Сохраняет все атрибуты файла, в том числе владельца и разрешения. При чтении дисков в системе Windows файловые атрибуты Unix не отображаются. Joliet — расширение ISO-9660 компании Microsoft. Позволяет использовать в именах файлов символы Юникода, а также поддерживает длинные имена. Кроме того, создает усеченные имена файлов с целью совместимости с MSDOS (странные имена вида FILENA~1.TXT). Имена файлов содержат до 64 символов, могут включать пробелы и читаются на компьютерах с системой Windows 95 и выше, а также на компьютерах Macintosh с расширением Joliet Volume Access. На Mac не читаются имена файлов joliet длиной более 31 символа. Документация по стандартам CD: Yellow Book — физический формат компакт-дисков с данными; Orange Book — физический формат записываемых компакт-дисков с поддержкой многосеансовой записи; Red Book — стандарт CD Audio, описывающий физические свойства диска и кодировку оцифрованного звука.
Если вас интересуют технические подробности, перечисленные книги можно приобрести на сайте http://www.licensing.philips.com. Важные термины из области записи дисков: сеанс — сегмент диска, записанный за один раз и содержащий файлы данных или музыкальные дорожки. Диск может содержать несколько сеансов; дорожка — программная область компакт-диска делится на дорожки; каждая дорожка может содержать данные только одного диска. Диск (даже DVD) может содержать не более 99 дорожек; многосеансовая запись — позволяет постепенно добавлять файлы на диск (вместо того, чтобы записывать их все за один раз). Чтобы диск мог быть прочитан, его необходимо «закрыть», то есть зафиксировать, однако в этом случае добавить на него новые файлы уже не удастся; SAO (Session-At-Once) — один полный сеанс: вводная запись (lead-in), программа и выводная запись (lead-out) на диске CD-R или CD-RW, записанная одной непрерывной операцией; DAO (Disk-At-Once) — запись всего компакт-диска за один проход, или сеанс. Процесс записи должен завершиться без перебоев, и добавить к нему новые сеансы невозможно. Это самый надежный способ записи звуковых дорожек; ТАО (Track-At-Once) — возможность выполнения записи за несколько проходов. Максимальное количество дорожек на диске равно 99.
Дополнительная информация о DVD приведена в DVD FAQ.no адресу http://www.dvddemystified.com/dvdfaq.html. Дополнительная информация о CD приведена в CD Recordable FAQ по адресу http://www.cdrfaq.org. 11.2. Определение адресов SCSI для записывающих дисководов CD и DVD


# ls /test-iso # umount /test-iso # cdrecord - v eject dev=0,1,0 data.iso


mnt |-- finances '-- scripts
Допустим, вы хотите переместить эти два каталога в каталог /files/archive/june на компакт-диске. Прежде всего проследите за тем, чтобы каталог /files/archive/june присутствовал на жестком диске. Затем выполните команду:
$ mkisofs -r -J -v -о cdimg1.iso -graft-points \ files/archive/june/finances/=finances \ files/archive/june/scripts/=scripts
Как и в предыдущем случае, результат проверяется монтированием:
$ tree -dL 4 /mnt/iso mnt '-- files '-- archive '-- june |-- finances '-- scripts См. также
tree(1), mkisofs(8).


Последний сеанс многосеансового диска стирается командой
$ cdrecord blank=session
А в маловероятном случае, если ваш диск поддерживает стирание на уровне дорожек, вы можете стирать дорожки точно так же, как сеансы, начиная с последней:
$ cdrecord blank=track




Пример:
# growisofs -Z dev=1,2,0 -dvd-compat -udf -R -J -v /home/carla
Ha DVD легко скопировать дополнительные файлы. Всегда указывайте ключ -Z для первой группы файлов, записываемых на DVD, а затем используйте ключ -М для дополнительных файлов:
# growisofs -Z dev=1,2,0 -dvd-compat -udf -R -J -v /etc # growisofs -M dev=l,2,0 -dvd-compat -udf -R -J -v /shared/projectfiles # growisofs -M dev=l,2,0 -dvd-compat -udf -R -J -v /var/www/public_site
Закрывать и фиксировать диск отдельной командой не обязательно.


Или перейдите в каталог /songs и перечислите отдельные песни:
$ cdrecord -v -nofix -eject dev=0,1,0 -audio -pad song1.wav song3.wav song7.wav
Обязательно используйте диски CD-R, рассчитанные на воспроизведение в бытовых проигрывателях.

Системный загрузчик и альтернативная загрузка



управление вторичному загрузчику, хранящемуся в каталоге /boot. Остальные 66 байт MBR занимает таблица разделов.
Linux позволяет создать на диске IDE до 63 разделов: 3 первичных раздела и 4 раздел, содержащий до 60 логических разделов в одном расширенном разделе. Диски SCSI ограничиваются 15 разделами: 3 первичных и 12 логических в одном расширенном разделе.


198



дисковых разделов выберите пункт Partition & Layout drives. На экране появляется меню с информацией о существующих разделах. Выделите Free и щелкните на кнопке New. Введите размер раздела 2500 Мбайт (точка монтирования — /). Выберите тип файловой системы и проследите за тем, чтобы флажок Initialize? был установлен. Это будет раздел /dev/hda6.
Выделите раздел /dev/hda3 и щелкните на кнопке Modify. Выберите точку монтирования /home и файловую систему Ext3, но не устанавливайте флажок Initialize?.
На этой стадии вы можете либо вернуться и внести изменения в разделы, либо записать новую таблицу разделов на диск. При выборе команды Write появляется предупреждение: «ALL EXISTING DATA ON THESE PARTITIONS WILL BE DESTROYED» со списком разделов, которые будут отформатированы («инициализированы»). В списке должен присутствовать только раздел /.
Продолжайте установку. Когда дойдет до меню установки загрузчика, не перезаписывайте MBR. На вопрос «Do you want Linux to handle booting your system?» ответьте отрицательно. Мы хотим, чтобы загрузочные файлы устанавливались в первый сектор загрузочного раздела, то есть /dev/hda6.
Когда Libranet потребует перезагрузить систему, вызовите командную консоль GRUB и загрузите Libranet вручную:
grub> root (hd0.0) grub> kernel /boot/vmiinuz-2.4.21 root=/dev/hda6 ro grub> boot
(определение параметров загрузки в GRUB рассматривается в разделе 12.7). Когда система начнет нормально работать, отредактируйте файл menu.lst и включите новую систему в меню загрузки GRUB (см. раздел 12.9). Запишите информацию разделов, созданных в процессе установки; это поможет вам в редактировании menu.lst.


Теперь можно переходить к загрузке:
grub> boot
Система запускается стандартным образом.












Графические оболочки справочных систем


Существует несколько хороших графических программ для просмотра man- и infoстраниц:

Konqueror — браузер и файловая оболочка KDE также содержит превосходную программу просмотра man- и info-страниц. Просто введите man:foo или info:/foo в адресной строке. Konqueror позволяет легко напечатать нужную информацию и отобрать отдельные man- или info-страницы для печати; Yelp — программа просмотра для Gnome; отображает man- и info-страницы, а также справочные документы Gnome. Поддерживает индексирование и поиск; Pinfo — удобная консольная программа просмотра man- и info-страниц на базе ncurses. Поддерживает поиск по регулярным выражениям и возможность добавления новых документов.

Изменение принадлежности к группам


Задача

Требуется включить пользователей в некоторую группу или исключить их из этой группы.



С точки зрения Linux все


С точки зрения Linux все man-страницы в системе являются частью единого руководства. Это руководство состоит из следующих разделов:
1 — исполняемые программы или команды оболочки;
2 — системные функции;
3 — библиотечные функции;
4 — специальные файлы (обычно находящиеся в /dev);
5 — форматы файлов и соглашения;
6 — игры;
7 — разное;
8 — команды системного администрирования;
9 — нестандартные функции ядра;
n — новая документация, которая позднее может быть перемещена;
l — локальная документация, специфическая для вашей системы.
Каждая отдельная программа, утилита или функция представлена в этом руководстве отдельной страницей. Поиск страницы для программы или команды обычно сводится к вводу команды man foo, где foo — имя программы.
Вероятно, вам также попадались нумерованные ссылки на man-страницы вида grep(1). Такая ссылка обозначает страницу man grep из раздела 1. Она вызывается следующим образом:
$ man 1 grep
Некоторые man-страницы входят в несколько секций. Команда man foo отобразит только первую из них. Для получения полного списка следует указать ключ -f:
$ man -f man man (1) an interface to the online reference manuals man (7) macros to format man pages
Каждая man-страница делится на секции. Имена секций бывают разными, но чаще всего встречаются следующие: NAME, SYNOPSIS, DESCRIPTION, OPTIONS, FILES, EXAMPLES, SEE ALSO, BUGS и AUTHOR.
Описание синтаксиса команды находится в секции SYNOPSIS man-страницы и выглядит следующим образом:
имя_команды [необязательные ключи] обязательные_элементы
При описании ключей команды используются следующие обозначения:
жирный шрифт — вводится точно так, как показано; курсив — обозначает аргумент, заменяемый конкретным значением. В зависимости от используемой программы просмотра вместо курсива может использоваться подчеркивание текста или жирный шрифт; [-abc] — все ключи в квадратных скобках являются необязательными и их можно комбинировать друг с другом;
Чтобы узнать текущий путь поиска man-страниц, выполните команду manpath без параметров:
$ manpath /usr/local/man:/usr/share/man:/usr/X11R6/man:/usr/man См. также
manpath(1); manpath(5).


Упомянутые команды выполняют поиск по


Упомянутые команды выполняют поиск по ключевым словам в секциях DESCRIPTION man-страниц. Количество искомых слов может быть произвольным, но чем больше слов, тем больше результатов вы получите, потому что команда поочередно ищет каждое слово.
См. также apropos(1), man(1).


nroff — «обертка» для форматирования man-страниц в groff. groff — программа форматирования документов, позволяющая генерировать документы разных форматов (HTML, .pdf, печатные копии, info-страницы и т.д.) на основе одного исходного файла. См. также mandb(8), locate(1), grep(1), nroff(1), groff(1), zless(1), zcat(1); раздел 1.6.



Хотя некоторые пользователи считают, что механизм перемещения по info-страницам слишком усложнен, с info-страницами все же стоит познакомиться. Хотя работать с info-страницами сложнее, чем с man-страницами, (обычно) они проще для понимания. Освоившись с основными приемами перемещения, вы сможете очень быстро найти нужные сведения.
Существует ряд удобных программ просмотра info-страниц, в том числе pinfo, Konqueror и Yelp. Pinfo работает в консольном режиме, а для Konqueror и Yelp необходима система X. Программа Konqueror особенно удобна для поиска и печати отдельных страниц.
См. также info info.



Во все основные дистрибутивы Linux входит поддержка CUPS (Common Unix Printing System). CUPS поддерживает команды как System V (lp), так и Беркли (lpr). В настоящем разделе использованы команды Беркли. Вот их аналоги для System V:
$ man -t finger | lp
Вывод на сетевой принтер:
$ man -t finger | lp -d printername См. также
man(1), lpr(1), lp(1); глава 14; CUPS Software Users Manual (http://localhost:631/documentation.html).



Во все основные дистрибутивы Linux входит поддержка CUPS (Common Unix Printing System). CUPS поддерживает команды как System V (lp), так и Беркли (lpr). В настоящем разделе использованы команды Беркли; далее приводятся их аналоги для System V.
Печать info-страницы:
$ info finger | lp
Печать info-страницы с параметрами форматирования lp:
$ info finger | lp -о cpi=12 -о page-left=54 -о page-right=54 \ -о page-top=54 -о page-bottom=54


Если просто ввести команду man bash > bash.txt, результат будет выглядеть убого. Команда col -b приводит распечатку в порядок, убирает из нее лишние переводы строк и символы Backspace. Это особенно важно для перевода man-страниц в текстовый формат, в man-страницах часто встречаются символы Backspace, которые затем отображаются в текстовых файлах в виде пустых квадратов или повторяющихся символов.
См. также col(1).



Самой распространенной проблемой с RPM является «кошмар RPM», то есть бесконечная цепочка неразрешенных зависимостей. Вот некоторые рекомендации по ее предотвращению:
не оставляйте неразрешенные зависимости. Они не исчезнут сами по себе, а лишь будут скрываться во тьме и расти со временем; качество пакетов RPM не гарантировано. Любой желающий может слепить пакет и отправить его для распространения. По возможности старайтесь выбирать пакеты RPM, построенные специально для вашего дистрибутива и платформы. PLD (Polished Linux Distribution) строит качественные пакеты RPM для всех систем на базе х86; когда потребуется построить программу по исходным текстам, используйте утилиту CheckInstall. CheckInstall генерирует пакеты для Red Hat, Debian и Slackware, поэтому вы получаете дистрибутив со всеми преимуществами непосредственной компиляции и системы управления пакетами (см. раздел 4.5). См. также rpm(8); RPM.org (http://www.rpm.org/); Maximum RPM (http://www.rpm.org/max-rpm/index.html).



Вместо ключа -i (установка, install) может использоваться ключ -U (обновление, Upgrade). При этом может выполняться как обновление, так и установка пакета; команда работает в обоих случаях. Ключ -U заменяет старый пакет. Если вы хотите установить несколько версий одного пакета (скажем, gcc) или несколько разных ядер, не используйте ключ -U — только -i. См. также
rpm(8); RPM.org (http://rpm.org); Maximum RPM (http://www.rpm.org/max_rmp/index.html).


Если RPM сообщает, что удалить пакет невозможно, потому что от него зависят другие пакеты, вам придется либо удалить остальные пакеты, либо оставить пакет в системе. В некоторых случаях (например, при замене Sendmail) зависимости приходится разрывать. Новая почтовая программа — Postfix, Exim или qmail —
2.5. Получение информации об установленных пакетах разрешит зависимости Sendmail, но сначала Sendmal нужно удалить, а это неизбежно приведет к нарушению всех зависимостей.
См. также rpm(8); Maximum RPM (http://www.rpm.org/max-rpm/index.html).


Для поиска документации к конкретному приложению также можно воспользоваться сценарием finddoc из раздела 1.11.
См. также rpm(8); раздел 1.11; Maximum PRM (http://www.rpm.org/max-rpm/index.html).
2.7. Поиск недавно установленных пакетов


Любую информацию о конкретных пакетах можно получить до их загрузки из таких архивов RPM, как http://freshrpms.net, http://rpmfind.net или http://rpm.pbone.net.
См. также rpm(8); Maximum PRM (http://www.rpm.org/max-rpm/index.html); FreshRPMs (http://freshrpms.net/); rpmfind (http://rpmfnd.net); rpm.pbone (http://rpm.pbone.net).



Если список получится слишком длинным, передайте его less или head: rpm -qa --last|head. См. также
rpm(8); Maximum PRM (http://www.rpm.org/max-rpm/index.html).


Необходимость в перестройке базы данных RPM возникает редко, но вреда эта операция не принесет. При любом внесении серьезных изменений в систему будет неплохо перестроить базу данных RPM. При сравнении размеров /var/lib/rpm/packages до и после запуска rpm --rebuilddb иногда можно заметить некоторое уменьшение, поскольку в процессе перестройки из базы данных исключаются неиспользуемые части.
См. также rpm(8); Maximum PRM (http://www.rpm.org/max-rpm/index.html).
2.9. Отслеживание библиотек в системах на базе RPM


Где найти необходимые пакеты? Начните с домашней страницы той программы, которую вы пытаетесь переустановить. Обязательно прочтите всю имеющуюся документацию.
Сейчас появилось множество разных дистрибутивов на базе RPM, поэтому постарайтесь раздобыть пакеты, построенные для вашей конкретной системы. Вот некоторые из крупнейших общедоступных архивов RPM:
FreshRPMs - http://freshrpms.net; rpmfind - http://rpmfind.net; rpm.phone - http://rpm.phone.net.

В вашей системе исходные тексты могут храниться в другом каталоге. В Fedora 1, как и в некоторых ранних версиях используется каталог /usr/src/redhat/RPMS/. В других поставках используется каталог /usr/src/RPM/RPMS. Разберитесь, и вы найдете нужный каталог.
Построение пакетов по исходным текстам не избавляет от «кошмара RPM». Оно всего лишь гарантирует двоичную совместимость с системными библиоте-
2.12. Настройка параметров сборки SRPM ками и оптимизацию RPM для архитектуры вашей системы. Соблюдение зависимостей придется обеспечивать вручную, а это далеко не так просто, как кажется.
Обратите внимание: rpmbuild и rpm — два отдельных пакета. См. также
rpmbuild(8), rpm(8); RPM.org (http://rpm.org/); Maximum PRM (http://www.rpm.org/max-rpm/index.html).



Где найти список параметров? Перейдите в каталог SOURCES и распакуйте архив с исходными текстами:
# cd /usr/src/redhat/SOURCES # tar xzvf samba-3.0.0.tar.bz2
Как упоминалось в разделе 2.11, в вашей системе может использоваться другой каталог исходных текстов.



FreshRPMs — хороший источник качественных пакетов. Зеркала yum находятся по адресу http://ayo.freshrpms.net. Ваш пакет yum из FreshRPMs будет заранее настроен на использование архивов FreshRPMs. Не забудьте установить ключ GPG:
# rpm --import http://freshrpms.net/packages/RPM-GPG-KEY.txt
Включение gpgcheck=1 в файл yum.conf и импортирование ключей гарантирует автоматическую проверку сигнатур пакетов. Этот простой, удобный способ гарантирует, что устанавливаемые пакеты не подвергались злонамеренным модификациям или искажениям в процессе пересылки. См. также
yum(8), yum.conf(5); домашняя страница yum (http://linux.duke.edu/projects/yum/); зеркала yum на сайте FreshRPMs (http://ayo.freshrpms.net).



Сетевой этикет предписывает по возможности пользоваться зеркалами, чтобы не перегружать главный сайт по адресу http://fedora.redhat.com. См. также
yum(8), yum.conf(5); домашняя страница yum (http://linux.duke.edu/projects/yum/); зеркала yum на сайте FreshRPMs (http://ayo.freshrpms.net); Fedora Mirror List (http://www.fedora.us/wiki/FedoraMirrorList).



Одна из самых замечательных особенностей Yum состоит в том, что программа хорошо интегрируется с существующими системами. Yum читает готовую базу данных RPM и создает новый список пакетов, после чего ей можно пользоваться.
См. также yum(8), yum.conf(5); домашняя страница yum (http://linux.duke.edu/projects/yum/); зеркала yum на сайте FreshRPMs (http://ayo.freshrpms.net); Fedora Mirror List (http://www.fedora.us/wiki/FedoraMirrorList).



Yum также удаляет пакеты, которые перестали быть необходимыми. См. также yum(8), yum.conf(5); домашняя страница yum (http://linux.duke.edu/projects/yum/).



Ту же самую информацию можно получить посредством запросов RPM, но при помощи yum это делается чуть удобнее.
См. также yum(8), yum.conf(5); домашняя страница yum (http://linux.duke.edu/projects/yum/).



Локальный кэш пакетов и заголовков рекомендуется периодически обновлять. Это предотвратит появление труднообъяснимых ошибок, а при установке и обновлении будут использоваться обновленные пакеты.
См. также yum(8), yum.conf(5); домашняя страница yum (http://Linux.duke.edu/projects/yum/).


При наличии нескольких источников apt- get всегда использует самую новую версию пакета. Список начинается с наиболее предпочтительных источников, поскольку apt-get обрабатывает список от начала к концу.
Редактирование файла sources.list — абсолютно законный, простой способ управления установкой программ. Занесите в файл все записи, которые вы когда-либо планируете использовать, и закомментируйте строки, не задействованные в конкретной установке.
В список sources.list рекомендуется включить официальные зеркала Debian, чтобы снять нагрузку с серверов Debian.org. Полный список официальных зеркал находится по адресу http://www.debian.org/mirror/.
ВНИМАНИЕ Заплатки безопасности распространяются только с адреса http://www.debian.org/security/ и не копируются на зеркалах. См. также
sources.list(5); официальный список зеркал Debian (http://www.debian.org/mirror/); страница поиска пакетов Debian (http://www.debian.org/distrib/packages).



apt- get всегда выбирает из всех доступных источников новейшие версии устанавливаемых пакетов. Мир Linux быстро развивается, поэтому самая свежая информация всегда находится в Интернете. Чтобы выполнить принудительную установку программы с компакт-диска, закомментируйте все остальные строки в файле sources.list.
ПРИМЕЧАНИЕ Не забывайте выполнять команду apt-get update при каждом изменении файла sources.list. См. также
apt-cdrom(8), apt-get(8); Debian on CD, архивы ISO (http://www.debian.org/CD/http-ftp/).


Для определения имен пакетов используйте страницу поиска Debian по адресу http://www.debian.org/distrib/packages/. Имена пакетов Debian часто отличаются от своих аналогов из RPM. Например, программа CyrusSASL оформляется в пакет sasl-2.x.rpm, а в Debian она разбивается на несколько пакетов с именами libsasl-*.
Не забудьте выполнить команду apt-get update после изменения /etc/apt/sources.list и периодически запускайте ее, чтобы получать обновленную информацию из архивов пакетов.
apt-get загружает и устанавливает (а при необходимости и удаляет) все пакеты, необходимые для разрешения всех зависимостей.
См. также apt-get(8); локальная документация (/usr/share/doc/Debian/apt-howto).

Построение пакетов . deb по исходным текстам чаще всего выполняется с целью использования пакетов из тестовой или нестабильной версии в стабильной. Перекомпиляция настраивает зависимости для стабильной версии.
Если потребуется установить программу, отсутствующую в архивах Debian, постройте .deb при помощи CheckInstall — утилиты, создающей пакеты RPM, .deb и Slackware (см. раздел 4.5).
См. также apt-get(8), dpkg-source(1); локальная документация (/usr/share/doc/Debian/apt-howto); раздел 4.5.
3.8. Обновление системы Debian


Команды обновления отдельных пакетов не существует. Команда apt-get install всегда устанавливает последнюю версию пакета.
См. также apt-get(8); локальная документация (/usr/share/doc/Debian/apt-howto).



Чтобы флаг - u применялся по умолчанию, отредактируйте (или создайте) файл /etc/apt/apt.conf.
// Всегда перечислять обновляемые пакеты // и запрашивать подтверждение у пользователя APT::Get::Show-Upgraded "true";
Перед каждым выполнением команды apt-get dist-upgrade сначала выполните команду apt-get upgrade, чтобы снизить вероятность ошибок при выполнении dist-upgrade. См. также
apt-get(8); локальная документация (/usr/share/doc/Debian/apt-howto).



В какой- то момент Sarge повышается до статуса стабильной версии, a Woody «уходит на покой». Когда это произойдет, обновите свою систему так, как описано в настоящем разделе.
См. также apt-get(8); локальная документация (/usr/share/doc/Debian/apt-howto).



Сопровождение смешанной системы требует осторожности, особенно если в качестве базовой версии используется Woody. По мере «старения» Woody могут возникнуть проблемы двоичной совместимости с Sarge/Sid. Различия между ключевыми системными файлами (такими как libc и gcc) могут стать настолько серьезными, что пакеты Sarge/Sid не будут устанавливаться в Woody. Если это произойдет, попробуйте построить пакеты по исходным текстам (см. раздел 3.6).
См. также apt.conf(5), sources.list(5); страница поиска пакетов Debian (http://www.debian.org/distrib/packages).



Таблица, выводимая командой dpkg -l, выглядит довольно загадочно, поэтому я приведу расшифровку.
$ dpkg -l gnome* Desired=Unknown/Instal1/Remove/Purge/Hoid | Status=Not/Installed/Config-files/Unpacked/Failed-config/Half-installed |/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: uppercase=bad) ||/ Name Version Description +++-============================================================== pn gnome <none> (no description available) un gnome-about <none> (no description available) ii gnome-applets 2.4.2- 1 Various applets for GNOME 2 panel rc gnome-bin 1.4.2-18 Miscellaneous binaries used by GNOME
В строке pn gnome поднимитесь от буквы p наверх по «стрелке». Она приведет вас к строке Desired=Unknown/InstaU/Remove/Purge/Hold с расшифровками первого символа (Purge в данном случае).
От следующего столбца, n, стрелка ведет к строке Status. По ней можно определить, что символ n означает Not/Installed.
В третьем столбце отображается код ошибки. В нашем случае он пуст (и хорошо). Как указано в конце строки, любые символы верхнего регистра в столбцах Status и Err ни к чему хорошему не приведут.
Получаем: пакет gnome когда-то был установлен в системе, но потом он был удален.
Код un означает, что пакет никогда не устанавливался.
Код ii означает, что пакет установлен.
Код rc означает, что пакет был установлен, а затем удален, но после него остались конфигурационные файлы. Состав этих файлов определяется легко:
$ dpkg -L gnome-bin /etc/logcheck/ignore.d.server/gnome-bin /etc/logcheck/ignore.d.workstation/gnome-bin

Кэш пакетов запросто может занимать десятки, если не сотни мегабайт. Загляните в /var/cache/apt/archives и проверьте сами. Чтобы сэкономить место на диске, создайте локальный кэш пакетов в своей сети (см. раздел 3.14).
3.13. Разрешение конфликтов зависимостей в Debian См. также dpkg(8), apt_cache(8), apt-get(8); локальная документация (/usr/share/doc/Debian/ apt-howto); The Debian Reference Manual (http://qref.sourceforge.net/).



В «монолитных» системах подобные конфликты версий встречаются редко. Пользователи смешанных систем сталкиваются с ними чаще. Чтобы предотвратить их, будьте чрезвычайно осмотрительны при выборе устанавливаемых программ — при первой установке Debian потратьте немного времени и выберите каждый необходимый пакет.
См. также dpkg(8), apt-get(8); Debian User's List с архивами (http://lists.debian.org/debian-user/).



Большинству параметров в файле /etc/apt-proxy/apt-proxy.conf, кроме источников пакетов, можно оставить значения по умолчанию. Исключение составляет частота «обновлений», определяющая периодичность загрузки списка пакетов. По умолчанию соответствующая секция выглядит так:
# Максимальная частота обновлений (в минутах) # Высокие значения снижают нагрузку. BACKENDFREQ=240
Я обычно устанавливаю значение этого параметра равным 1440; ежедневной проверки вполне достаточно. Действительно важные события происходят не так часто. Проверку следует производить хотя бы раз в день главным образом для своевременной установки обновлений безопасности.
См. также apt-proxy(8), apt-proxy.conf(5); официальный список зеркал Debian (http://www. debian.org/mirror/); домашняя страница apt-proxy (http://apt-proxy.sourceforge.net/).



Команды ping и traceroute помогут определить, какие зеркала обладают минимальным временем отклика. Дело в том, что географическая близость еще не гарантирует быстрого отклика.
Указание трех источников обеспечивает необходимую избыточность, apt-proxy опрашивает их по порядку: если первый источник не отвечает, опрашивается второй и т.д.
См. также apt-proxy(8), apt-proxy.conf(5), apt-proxy-import(8); официальный списокзеркал Debian (http://www.debian.org/mirror/); домашняя страница apt-proxy (http://apt-proxy.sourceforge.net/).



Большинство дистрибутивов Linux включает установку Core Development Tools или что-нибудь в этом роде, поэтому вам не придется отлавливать программы и устанавливать их по отдельности.
Требования, специфические для конкретной программы, перечисляются в документации. Поищите в архиве с исходными текстами файлы README, INSTALL и другую документацию. Прочитайте все от начала и до конца. При запуске конфигурационный сценарий проверяет наличие в системе всех обязательных элементов. Если какой-либо из этих элементов отсутствует, сценарий завершается с кодом ошибки и сообщает, что необходимо сделать.



Совместное использование find и grep позволяет исключить каталоги, не входящие в конечный список. Ключ grep -v включает подробный вывод. Параметр –e означает «исключить следующий каталог».
Мы исключаем каталоги /proc и /tmp, потому что они содержат временные данные и постоянно меняются. Файлы в каталоге /dev находятся под управлением системы, поэтому их тоже можно исключить. Исключение каталогов также является важной мерой безопасности — при ручном удалении программ по списку diff содержимое каталогов /proc, /tmp и /dev ни в коем случае не должно изменяться. См. также
grep(1), find(1), diff(1).



Описанная в этом разделе процедура считается стандартным способом удаления программ, построенных по исходным текстам. Тем не менее не все авторы программ следуют общепринятым правилам. Обязательно просмотрите всю документацию к программе.
Прежде всего обратите внимание на параметры конфигурации. Некоторые программы (такие, как Apache) поддерживают десятки параметров компиляции. Для обеспечения безопасности откомпилируйте поддержку только тех возможностей, которые будут реально использоваться. Это особенно важно для серверов, доступ к которым осуществляется из непроверенных сетей (скажем, почтовых и веб-серверов).
Аргументы в пользу компиляции программ по исходным текстам:
вы можете включить поддержку тех возможностей, которые вам необходимы; оптимизация программ для конкретной архитектуры; полный контроль над ходом установки. Впрочем, есть и недостатки:
возможные проблемы с обновлением и удалением; до «кошмара зависимостей» рукой подать; на компиляцию большой программы может потребоваться несколько часов.


В каталоге doc- pak программа CheckInstall размещает файлы README и прочую документацию программы. Если не создать каталог doc-pak, CheckInstall спросит, хотите ли вы создать каталог документации по умолчанию. Если ответить отрицательно, пакет останется без документации.
CheckInstall использует «родную» систему управления пакетами: RPM в Red Hat, installpkg в Slackware, apt в Debian. Чтобы удалить пакет CheckInstall, воспользуйтесь программой управления пакетами своей системы.
CheckInstall поддерживает любые сценарии установки. Пример:
# checkinstall -D make installpackages # checkinstall -R make modules_insta11 # checkinstall -S install.sh # checkinstall -D setup
Не забудьте изучить файл README устанавливаемой программы, а также прочую прилагаемую документацию. Не все пакеты с исходными текстами следуют традиционной процедуре configure-make-make install. В отдельных случаях используются другие сценарии установки, как в приведенном выше примере.
CheckInstall еще не позволяет создать пакет без его автоматической установки. Вероятно, эта возможность появится в будущих версиях.
См. также Домашняя страница CheckInstall (http://asic-linux.com.mx/~izto/checkinstall/news.php).


Программа lspci получает часть данных от шины PCI, а затем добавляет к ним дополнительную информацию из внутренней базы данных /usr/share/misc/pci.ids. Даже существует специальная команда для обновления этого файла:
# update-pelids
Если к системе подключено устройство, не распознаваемое lspci (скажем, очень старое и экзотическое устройство ISA), вам придется открыть корпус и посмотреть, что это такое. Также можно попробовать запустить dmesg (см. раздел 5.3).
См. также lspci(8).



Программа dmesg всегда выводит обновленную информацию даже при частой смене оборудования (например, при подключении и отключении устройств USB).
См. также dmesg(8).



Как упоминалось выше, для чтения данных из /proc следует использовать только cat и утилиты, предназначенные специально для этой цели. Программы постраничного вывода типа less или more выводят другие данные, потому что они читают /proc заново с каждой страницей. Также не рекомендуется использовать текстовый редактор или любую программу с возможностью записи, чтобы не создавать риска повреждения системы.



По выходным данным fdisk также можно узнать, какой тип файловой системы находится на любом разделе. В рассмотренном примере используются два разных типа файловых систем Windows (HPFS/NTFS, FAT32) и расширенный раздел Windows, в котором были построены файловые системы Linux и раздел виртуальной памяти. См. также
fdisk(8).



В Joe используется много трехклавишных команд. Каретка (^) обозначает клавишу Ctrl. Нажмите первые две клавиши вместе (например, Ctrl+K), затем отпустите их и нажмите третью клавишу. Далее перечислены базовые команды вызова справки:
JOE и RJOE: ^К Н . — включение/отключение режима вывода справки; Esc . — перебор справочных экранов, Esc , — перебор в обратном направлении. Jpico: ^G . — включение/отключение режима вывода справки; Esc . — перебор справочных экранов, Esc , — перебор в обратном направлении. Jmacs: ^Х Н . — включение/отключение режима вывода справки; ^Х . — перебор справочных экранов, ^Х , — перебор в обратном направлении. Jstar: ^J H . — включение/отключение режима вывода справки; Esc . — перебор справочных экранов, Esc , — перебор в обратном направлении. См. также joe(1).


Одна из приятных особенностей JOE заключается в том, что программа работает с копией исходного файла. Оригинал сохраняется в виде резервной копии (впрочем, эта возможность тоже настраивается и ее можно отключить в .joerc).
См. также joe(1); раздел 6.4.
6.5. Копирование текста между файлами в JOE


Сохранение всех изменений в отдельном файле окажет вам неоценимую помощь. Учтите, что .joercprefs не замещает .joerc — параметры, явно включенные или отключенные в .joerc, сохраняют свое состояние, что бы ни говорилось в .joercprefs. Однако параметры .joerc, начинающиеся с пробела, игнорируются и потому могут включаться и отключаться в .joercprefs. См. также
joe(1).



Файл ~/. joerc очень велик; возможно, вам будет удобнее отобразить только неактивные параметры. Чтобы отобрать их, воспользуйтесь командой фильтрации JOE:
^K / $ grep '^[space]]'
Теперь вы сразу увидите неактивные команды и сможете скопировать те из них, которые хотите активировать, в файл ~/.joercprefs. Вы также можете отобразить только активные параметры:
$ grep '^[^[:space:]]'
Команда ^K X сохраняет ~/.joercprefs и завершает работу. Теперь изменения хранятся отдельно от основного файла, что упрощает их дальнейшее отслеживание и редактирование.
См. также joe(1).



Некоторые полезные команды, выполняемые с блоками текста:
^K B, ^K K — пометка/снятие пометки с начала и конца блока; ^K M - перемещение блока в текущую позицию курсора; ^K C — копирование блока в текущую позицию курсора;

Хотя JOE не обладает собственной поддержкой мыши, вы можете копировать и вставлять данные из других приложений мышью в сеансах X. Это функция тер-
6.9. Быстрое изучение Vim минала, а не JOE. Используйте классический метод Unix: выделите текст мышью, а затем щелкните средней кнопкой мыши. Комбинации клавиш ^V и ^C имеют другой смысл в JOE.
См. также joe(1).



Возможно, из учебного курса вы узнаете все команды, которые вам когда-либо понадобятся. За дополнительной информацией о миллионах возможностей Vim обратитесь к превосходному руководству пользователя Брэма Муленаара (Bram Moolenaar), автора Vim. Руководство включено во внутреннюю справочную систему Vim, а также существует в нескольких электронных версиях по адресу http://vimdoc.sourceforge.net (HTML для поиска, PDF и HTML для печати).
Чтобы вызвать руководство пользователя в Vim, введите команду
:help
Клавиши управления курсором используются для перебора оглавления, а комбинация ^] открывает главу.
Вы также можете сразу перейти к конкретной теме:
:help quickref :help tutor :help usr_06.txt
Поиск по критерию с выводом списка вариантов:
:help vimrc
Вместо Enter нажмите ^D. Результат будет выглядеть примерно так:
:help vimrc vimrc vimrc-intro system-vimrc _gvimrc vimrc vimrc-filetype gvimrc :mkvimrc _vimrc vimrc-example.vim .gvimrc

Сокращения могут использоваться для автоматического исправления орфографии (раздел 6.6) — просто определите свои стандартные ошибки в виде сокращений. Этот прием лучше всего подходит для исправления опечаток (например, teh вместо the).
См. также Справочная система vim (:help map.txt); раздел 6.12.
6.11. Привязка команд к клавишам


Самыми безопасными для привязки являются клавиши F2-F12 и Shift+F2-F12. Но на практике они обычно быстро заканчиваются. Комбинации «запятая+буква»,


Во время чтения документации Vim его гибкость и колоссальные возможности настройки производят огромный эффект. Начните с самого начала, как показано ниже, и не обращайте внимания на хитроумные возможности «для фанатов» до тех пор, пока они вам не потребуются.
6.13. Быстрое перемещение в Vim В следующем примере файла ~/.vimrc продемонстрированы три важных возможности Vim: настройка параметров запуска, сокращений и клавиатурных привязок. Апостроф является признаком строки комментария.
''''''''''''''''''''''''''''''''''''''''''''''' '' Персональный файл vimrc. создан 4/22/2004 '' ''''''''''''''''''''''''''''''''''''''''''''''' '' Отключение режима совместимости с vi '' для использования всех возможностей Vim set nocompatible '' 4 пробела на позицию табуляции set tabstop=4 '' Расширенные возможности забоя set backspacedndent.eol.start '' Выделение синтаксиса включено по умолчанию syntax on '' Автоматическое определение типа файла '' для выделения синтаксиса. filetype plugin indent on ''''''''''''''''''''''''''''''''''''''''''''''' '' Сокращения '' ''''''''''''''''''''''''''''''''''''''''''''''' :ab Qu Carl a Has Gone Fishing, Back Much Later :ab Co Copyright (c) 2004 Carla Schroder all rights reserved :ab Em carla@bratgrrl.com :ab Wb http://tuxcomputing.com ''''''''''''''''''''''''''''''''''''''''''''''' '' Добавление тегов HTML в режиме вставки '' ''''''''''''''''''''''''''''''''''''''''''''''' :map! .ah <A href=""> :map! .a </A> :map! .b <B><Esc>ea</B><Esc>a :map! .i <I><Esc>ea</I><Esc>a :map! .l <LI><Esc>ea</LI><Esc>a
Все изменения, внесенные в ~/.vimrc, вступают в силу при следующем запуске Vim. См. также
vim(1); справочная система vim (:help vimrc, :help usr_05.txt, :help ab).



Файлы сеансов рекомендуется хранить в отдельном каталоге, чтобы их можно было легко найти при необходимости.
См. также Справочная система vim (:help session, :help usr_08.txt).



Далее приводится упрощенный пример выходных данных :version. Знаком «+» помечены включенные возможности, а знаком «-» — отключенные. По этим данным можно легко определить, придется ли вам перекомпилировать Vim, чтобы использовать нужную возможность.
:version VIM - Vi IMproved 6.2 (2003 Jun 1. compiled Apr 1 2004 23:39:33) Included patches: 1-298. 300-426


В Red Hat, Fedora, Mandrake и Slackware смена уровня выполнения является одним из способов закрытия сеанса X, так как на уровне 3 загружается текстовая



В Debian стандартные уровни выполнения 2-5 не отличаются друг от друга; они загружают либо текстовую консоль, либо графическую программу входа в систему в зависимости от того, что было выбрано во время установки. Уровень выполнения 2 используется в Debian по умолчанию. Изменение конфигурации уровней выполнения Debian рассматривается в разделе 7.5.
См. также inittab(5); раздел 7.5.



Другие способы завершения сеансов X лучше подходят для «зависания» X. Любой пользователь может ввести команду «xkill» нажатием клавиш Ctrl+Alt+Backspace.
В графических программах входа в систему (xdm, kdm или gdm) пользователь root может прервать работу программы. Это автоматически прервет работу всех пользователей:
# /etc/init.d/gdm stop См. также
Раздел «Введение» настоящей главы; раздел 7.3; раздел 7.6.



Помните, что update-rc.d работает с именами сценариев в /etc/init.d. Для тестирования команд update-rc.d используется ключ -n:
# update-rc.d -f -n kdm remove
При необходимости можно удалить сценарии из init.d при помощи ключа remove:
# update-rc.d --purge kdm remove
Но обычно лучше оставить их на случай, если они понадобятся в будущем.
См. также update-rc.d(8).



В Gnome используется экранный менеджер gdm, в X — xdm, а в KDE — kdm. Довольно часто встречаются системы, в которых установлены все три программы. xdm обладает минимальной функциональностью; в сущности, программа всего лишь предоставляет графическое окно входа. И kdm, и gdm поддерживают ряд дополнительных возможностей входа и завершения работы, включая меню для выбора оконного менеджера.



Утилита chkconfig берет начальный приоритет и уровень выполнения из стартового сценария программы. Например, в файле /etc/rc.d/init.d/cups присутствует следующий фрагмент:
# Информация Linux chkconfig # chkconfig 2345 90 10
Он означает, что chkconfig запускается на уровнях 2, 3, 4 и 5, с приоритетом 90 для запуска и приоритетом 10 для остановки. Конечно, вы можете изменить эти параметры по своему усмотрению. Либо отредактируйте исходный сценарий из init.d, либо просто переименуйте ссылки:
# mv /etc/rc.d/rc3.d/S90cups /etc/rc.d/rc3.d/S45cups См. также
chkconfig(8); The Red Hat Customization Guide (http://www.redhat.com/docs/manuaLs/ linux/).



Этот способ настройки чуть более трудоемок, но ничего страшного не происходит — вы просто создаете «мягкие» ссылки. Помните, что для каждой запускаемой службы также необходимо создать записи, которые будут останавливать ее на всех уровнях выполнения, на которых она не должна работать. Кроме того, некоторые службы на уровнях 0, 1 и 6 «убивать» не следует, поскольку это важные системные службы, создаваемые Linux. Сохраните информацию о таких службах, прежде чем вносить какие-либо изменения:
$ ls /etc/rc0.d /etc/rc1.d /etc/rc6.d > original-runlevels.txt
На уровнях 2-5 можно делать все, что угодно, но будьте внимательны и не испортите другие уровни.
См. также ln(1).


Для любой программы, имеющей стартовый сценарий, рекомендуется использовать сценарий вместо запуска двоичного файла программы, потому что в сцена-
7.10. Выключение компьютера или перезагрузка Linux рии реализована обработка ошибок и проверка файлов, а также все необходимые условные проверки.



Помните, что процесс выключения всегда должен быть контролируемым. Всем компьютерам, в том числе и машинам с системой Linux, приходится проделать немалый объем работы, чтобы питание можно было безопасно выключить. Система должна завершить работу служб, демонтировать файловые системы и сбросить буферы на диск.
Команды shutdown, poweroff и halt выполняются только привилегированным пользователем root. Ограничение выглядит довольно глупо, потому что у любого оконного менеджера и среды настольной системы имеется собственное меню выключения, а любой пользователь, находящийся поблизости от компьютера, может нажать кнопку питания. Но такова жизнь, и с этим приходится смириться. Возможный выход — предоставить ограниченные привилегии для выполнения команд выключения командой sudo. Другое решение основано на создании специальной группы пользователей, которым разрешено выключение.
См. также shutdown(8), poweroff(8); раздел 8.20; раздел 8.21.


Если файл /etc/shutdown. allow не существует, создайте его.
7.12. Автоматическое выключение компьютера См. также shutdown(8).



Файл /etc/ crontab идеально подходит для планировки простых заданий. Обратите внимание: в файле имеется поле имени, поэтому любой пользователь может создавать в нем свои записи. Тем не менее редактирование файла /etc/crontab разрешается только пользователю root.
Другой способ основан на использовании команды crontab:
# crontab -u root -e
Команда открывает файл crontab для пользователя root; отредактируйте и сохраните его. Не пытайтесь задать имя файла — в процессе редактирования файл является временным, а его имя автоматически задается crontab при сохранении. Файл сохраняется в каталоге /var/spool/cron/crontabs.
См. также cron(8), crontab(1), crontab(5).



Схемы нумерации (вроде представленного ранее примера «Trainers/Coaches/Players») хорошо подходят для небольшой и относительно статичной пользовательской базы. В больших организациях с частыми изменениями они приносят больше вреда, чем пользы. В таких ситуациях лучше направить усилия на правильное распределение пользователей по группам и своевременное внесение изменений.
Как всегда, между дистрибутивами существуют мелкие, но любопытные различия. Коды UID и GID во всех версиях Linux лежат в интервале от 0 до 65534.
Debian:
0-99 — системные учетные записи; 100-999 — установленные пользователем программы и демоны (Postfix, Fetchmail, gdm, dictd и т.д.); 1000-29999 — учетные записи обычных пользователей; 30000-65533 — согласно документации Debian, коды зарезервированы, но при желании вы можете их использовать; 65534 — пользователь nobody, учетная запись без прав и разрешений. Red Hat:
0-499 — коды зарезервированы для системного использования; 500-60000 — обычные пользователи; 65534 — пользователь nobody, учетная запись без прав и разрешений. В других дистрибутивах используются аналогичные схемы нумерации. Экспериментируйте с диапазонами, зарезервированными для учетных записей обычных пользователей, но не трогайте системные диапазоны.
См. также awk(1); раздел 8.17; Debian Policy Manual, глава 9.2.2 (http://www.debian.org/doc/debian-policy/); Red Hat Linux Reference Pocket Guide (http://www.redhat.com/docs/manuals/linux/).



Ключи команды id:
-u — вывод только кодов UID; -g — вывод только кодов GID; -gn — вывод имени первичной группы пользователя вместо GID. См. также


useradd, в отличие от своего родственника adduser, прекрасно работает в сценариях (например, в сценарии mass_useradd из раздела 8.17).
Поля комментария также известны под названием данных GECOS. Данные GECOS состоят из пяти полей, разделенных запятыми. Если вы собираетесь использовать поле комментария, включите все четыре запятые, даже если значения соответствующих атрибутов не указываются. В долгосрочной перспективе это окупится, особенно при выполнении серийных операций и при поиске. Традиционно в данные GECOS входит полное имя, номер комнаты, рабочий телефон, домашний телефон и прочее (произвольная информация). Полное имя используется многими внешними программами — в частности, почтовыми серверами, однако другие поля можно использовать так, как вы сочтете нужным. Например, они позволяют организовать произвольное деление пользователей на группы и их сортировку (см. раздел 8.19).
GECOS — пыльный пережиток прошлого, оставшийся с очень древних времен; сокращение означает «General Electric Compliant Operating System». За полной информацией обращайтесь к Файлу жаргона.
См. также useradd(8); Файл жаргона (http://www.catb.org/~esr/jargon/).



Полное имя является единственным важным атрибутом информации о пользователе. Оно необходимо любой внешней программе, работающей с /etc/passwd, например, почтовому серверу. И хотите — верьте, хотите — нет, но в большинстве версий Linux по-прежнему продолжает существовать finger:
$ finger anitab Login: anitab Name: Directory: /home/anitab Shell: /bin/bash On since Sun May 30 08:46 (PDT) on ttyl 10 hours 55 minutes idle (messages off) No mail. No plan. Phone 555-5555 Office Fooo
Другие поля могут содержать произвольную информацию. В частности, они могут использоваться для хранения заметок или группировки.
Пользователь может сменить свой номер комнаты и рабочий телефон командой chfn, но изменить полное имя и поле «прочее» ему не удастся.
См. также adduser(8), adduser.conf(5), finger(1).


Постарайтесь обойтись без изменения имени пользователя и кода UID, поскольку такое изменение будет иметь общесистемные последствия. Если изменение все же неизбежно, не забудьте отыскать все файлы, принадлежащие пользователю, смените имя в домашнем каталоге пользователя и обновите данные о принадлежности к группам.
8.7. Удаление пользователя Если заменить ключ -exec на -ok, команда find будет запрашивать подтверждение каждого изменения:
# find / -uid 1050 -ok chown -v 1200 {} \;
Трудно переоценить удобство такого применения find. Ключ -exec или -ok приказывает find выполнить следующую команду. Последовательность {} заменяется именем текущего файла. Точка с запятой указывает, где завершается команда chown, а символ \ «экранирует» точку с запятой, чтобы она не была обработана командным процессором.
См. также usermod(8), chfn(1); Файл жаргона (http://www.catb.org/~esr/jargon/).



Правила удаления учетной записи — дело тонкое. Если вы работаете в своей домашней системе, делайте, что хотите. В коммерческих системах заранее изучите политику своей компании. Всегда полезно сначала заблокировать учетную запись работника и создать резервную копию принадлежащих ему файлов.
См. также userdel(8), find(1); раздел 8.9.



Традиционный метод поиска процессов, принадлежащих пользователю, основан на использовании команды ps:
$ ps U 1007
или
$ ps U foober 3936 ? S 0:00 xchat 3987 ? S 0:00 /usr/lib/galeon-bin 4209 ? S 0:00 kdeinit: kio_file file /tmp/ksocket-carla/klauncherkF21rc.slave-
После этого процессы приходится убивать по одному:
# kill 3936 # kill 3987 # kill 4209 См. также
slay(1), kill(1).



Еще один способ заблокировать учетную запись — вставить восклицательный знак в начало поля пароля в файле /etc/shadow:
foobar:!$l$wiD1Qr34$mitGZA76MSYCY04AHIYl:12466:0:99999:7:: :
Также можно заменить х в поле пароля в файле /etc/passwd звездочкой (*):
foober:*:1025:1025:Foober Smith..,:/home/foober:/bin/bash
Наконец, можно лишить пользователя доступа к командному процессору:
# usermod -s /bin/false foober
И все же лучше всего придерживаться варианта с passwd -l и -u.
См. также passwd(1), passwd(5).



Пароль может содержать цифры, буквы и знаки препинания, при этом они чувствительны к регистру символов. Пробелы и функциональные клавиши не


Рекомендуется использовать логически последовательную схему нумерации групп. С точки зрения Linux это несущественно, но зато такая схема избавит вас от многих хлопот. В Red Hat номера системных групп лежат в диапазоне 0-499, а в Debian — в диапазоне 100-999. За дополнительной информацией о схемах нумерации обращайтесь к разделу «Комментарии» в разделе 8.2.
См. также groupadd(8).
8.13. Создание системного пользователя


Многие демоны и процессы, которым необходима системная учетная запись, по умолчанию используют nobody, но все больше приложений требует создания собственной уникальной учетной записи. Старайтесь использовать уникальную учетную запись там, где это возможно, потому что это повышает уровень безопасности системы. Учетная запись nobody чаще всего становится объектом хакерских атак, поэтому собирать разнообразные процессы и демонов в единую цель для атаки не стоит.
См. также adduser(8), adduser.conf(5), useradd(8).



Для решения задачи также можно воспользоваться командами adduser и usermod, но будьте осторожны: adduser позволяет за один вызов включить пользователя только в одну группу, а команда usermod, позволяющая перечислить несколько групп, стирает прежние данные о принадлежности пользователя к группам.
См. также adduser(8), usermod(8).



Программа pwck проверяет логическую целостность файлов /etc/passwd и /etc/shadow. Она последовательно анализирует записи и проверяет, что каждая запись содержит:
правильное количество полей; уникальное имя пользователя; действительные идентификаторы пользователя и группы; действительную первичную группу; действительный домашний каталог; действительный командный процессор. pwck сообщает обо всех записях, не имеющих пароля. Мне очень нравится формулировка в man-странице: «Проверки правильности количества полей и уникальности имени пользователя являются фатальными». Нечего сказать, хорошая реклама! Но не волнуйтесь — вы в полной безопасности, и вызов pwck ничему не повредит.
Когда pwck обнаруживает ошибку, вы можете либо удалить учетную запись, либо проигнорировать ее. Во втором случае pwck прекращает работу и не проверяет новые строки (за одним исключением: обнаружив повторяющееся имя, программа продолжит проверку даже в том случае, если вы не удалите учетную запись).
Программа grpck анализирует файлы /etc/group и /etc/gshadow и проверяет, что каждая запись содержит:
правильное количество полей; уникальное имя группы; действительный список членов и администраторов. См. также pwck(8), grpck(8).



В сценариях используются стандартные средства Shadow Suite, поэтому они легко настраиваются посредством регулировки параметров утилит, задействованных в их работе.
Файл выходных данных выглядит так:
dawns shabaefi 1002 nikitah gohbinga 1003 rubst ahtoohaa 1004
В файл /etc/passwd добавляются записи вида
dawns:x:1002:1002:Dawn Mari Schroder,,123-4567,trainers:/home/dawns:/bin/bash nikitah:x:1003:1003:Nikita Horse,,123-4567,equine:/home/nikitah:/bin/bash rubst:x:1004:1004:Rubs The Cat.101,,234-5678,,test:/home/rubst:/bin/bash
Листинг 8.1. Программа mass_useradd
#!/bin/sh ## ## Использование: ## sh mass_useradd < inputfile >> new-passwords.txt ## PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:$PATH # Чтение строки входных данных. # Формат входного файла:
продолжение ==>



Ключ - n тестирует команду без ее фактического выполнения:
# ./masspasswd -v -g -n usergroup generating password for dawns teivuphu generating password for nikitah kohfahsh 2 password(s) reset - see /root/mass_passwd/mass_passwd.log
Пароли остаются прежними; выполнение команды в этом режиме всего лишь проверяет параметры перед внесением изменений.
См. также Раздел 8.17.



Команда su позволяет переключиться на любую учетную запись, пароль которой вам известен.
Дефис после su существенно влияет на результат выполнения команды. Без дефиса команда сохраняет старую системную конфигурацию и переменные окружения — командный процессор, редактор по умолчанию, пути и umask. См. также


Команда sudo также может применяться для запуска пользователями сценариев (например, сценариев архивации). Будьте очень осторожны со сценариями, а также с командами, предоставляющими доступ к командному процессору или запускающими



Включите следующую строку в сценарий mass_useradd, после строки chmod, чтобы квота пользователя vhenson автоматически применялась для всех новых пользователей:
/usr/sbin/edquota -p vhenson $username
Команду add user можно настроить на автоматическое назначение квот для новых пользователей. Отредактируйте файл adduser.conf:
QUOTAUSER="vhenson"
А теперь плохие новости: Quota сейчас находится в переходной фазе. Код Quota в ядрах версий 2.2 и 2.4 устарел и не подходит для современных версий Quota. Если в ваш дистрибутив включена «заплатка» ядра — считайте, вам повезло. Впрочем, вы сможете быть полностью уверены в этом лишь после того, как установите и настроите Quota и назначите квоту пользователю. Если дистрибутив не содержит готовые к запуску версии Quota, вероятно, вам придется устанавливать целую серию «заплаток» ядра. Подробные инструкции приведены в документе «Quota mini-HOWTO».



Файловые разрешения вычисляются по табл. 9.2. Просуммируйте нужные значения для каждого типа пользователей, а затем перечислите их в порядке следования в таблице: владелец, группа, прочие. Специальные биты рассматриваются в разделе 9.7.
Таблица 9.2. Вычисление файловых разрешений
Специальные биты Разрешение Владелец Группа Прочие
setuid 4 Чтение 4 4 4
setuid 2 Запись 2 2 2
setuid 1 Исполнение 1 1 1
См. также
info chmod.



Символическая запись chmod порой бывает довольно сложной. Следующий пример стирает все существующие разрешения и приводит их в исходное состояние:
$ chmod -v a=,u-rwx,g=rx,o=r сценарий
То же самое можно сделать командой chmod 754.
Символическая форма записи также называется мнемонической: r — чтение (Read); w — запись (Write); х — исполнение (Execute); X — файл должен уже обладать разрешениям исполнения или быть каталогом; s —назначение идентификатора пользователя или группы при исполнении — опасно! Не используйте с исполняемыми файлами (по крайней мере, если вы не до конца представляете, что делаете); t — бит закрепления; u - владелец файла; g — группа, которой принадлежит файл; o — прочие пользователи; + — добавление новых разрешений к действующим; = — замена действующих разрешений; - — сброс разрешений. См. также
info chmod; раздел 9.7.


Рядовые пользователи могут только вносить изменения в принадлежащие им файлы и не могут передать право владения файлом другому пользователю. Тем не менее пользователи могут изменять принадлежность к группам (при условии, что они принадлежат как к исходной, так и к итоговой группе). См. также
info chown.


У статических битов есть еще одно применение. Давным-давно установка этого бита для исполняемого файла приводила к тому, что файл оставался в памяти после завершения его выполнения. В доисторическую эпоху Unix с примитивным управлением памятью и слабосильным оборудованием это ускоряло запуск программ. В наши дни об этом можно не думать. См. также
info chmod; раздел 9.2. 9.8. Назначение разрешений по умолчанию с использованием маски umask


В табл. 9. 4 показано, как составить маску umask для любой комбинации разрешений.
Таблица 9.4. Все значения umask
Umask Разрешения файлов Разрешения каталогов
7 Нет Нет
6 Нет Исполнение
5 Запись Запись
4 Запись Запись и исполнение
3 Чтение Чтение
2 Чтение Чтение и исполнение
1 Чтение и запись Чтение и запись
0 Чтение и запись Чтение—запись—исполнение



Ошибка umount « Device is busy» чаще всего возникает из-за наличия открытого окна терминала, в котором смонтированное устройство является текущим рабочим каталогом:
carla@windbag:/floppy$
Очень важно, чтобы диск был демонтирован перед отключением. Это позволяет системе завершить операции записи и обеспечить корректное отключение. В более новых версиях Linux указывать тип файловой системы не обязательно, поскольку команда mount автоматически распознает типы файловых систем. См. также
mount(8); раздел 9.10.



Каждому запоминающему устройству соответствует блочное устройство в каталоге /dev. Имена устройств определяются способом физического подключения.
Примеры: /dev/hda — первичное устройство на IDE0 (весь диск); /dev/hdb — вторичное устройство на IDE0 (весь диск); /dev/fd0 — флоппи-дисковод на контроллере 0, устройство 0; /dev/fd1 — флоппи-дисковод на контроллере 0, устройство 1; /dev/sda — первый диск SCSI (весь диск); /dev/sdb — второй диск SCSI (весь диск).
Имена запоминающих устройств в Linux формируются по следующей схеме: /dev/fd* — флоппи-дисководы; /dev/hd* — дисководы IDE; /dev/sd* — дисководы SCSI; /dev/sd* — запоминающие устройства USB; /dev/hd* - дисководы CD/DVD-ROM с интерфейсом IDE/ATAPI; /dev/sd* - дисководы CD/DVD-R/RW с интерфейсом IDE/ATAPI; /dev/sd*,/dev/hd* или /dev/XXXx4 — Zip-дисководы.
Устройствам IDE и USB, использующим подсистему эмуляции SCSI, иногда присваиваются имена /dev/sr*, которые представляют собой символические ссылки на /dev/sd*.
Если в вашей системе установлены исходные тексты ядра, поищите определения имен /dev в файле devices.txt. См. также
Глава 5; официальный список имен /dev (http://www.lanana.org/docs/device-list/devices.txt или файл devices.txt в каталоге /usr/src/* вашей системы).


Команда touch обычно используется в сценариях для создания новых файлов, а также для заполнения каталогов файлами с целью тестирования. См. также
mkdir(1), touch(1).


Команда rm -rf / стирает всю корневую файловую систему. Некоторые личности предлагают новичкам выполнить ее, считая это забавной шуткой.
Хотя обычно говорят «rm удаляет файлы», в действительности команда не удаляет файлы, а только отсоединяет их от i-узлов. Файл по-настоящему удаляется лишь после удаления всех жестких ссылок, указывающих на него, и перезаписи данных на диске. Рядовые пользователи могут удалять командой rm любые файлы в любых подкаталогах, доступных для них, но с каталогами дело обстоит иначе: команда rm удаляет только каталоги, принадлежащие данному пользователю.
Команда touch на самом деле предназначена для изменения временных пометок файла. Ее применение для создания новых файлов может рассматриваться как неожиданный побочный эффект.
Для удаления каталогов также существует команда rmdir. Эта команда отказывается удалять каталоги, содержащие какие-либо данные. На первых порах это помогает, но со временем начинает раздражать; многие программы создают файлы, не отображаемые в нормальных списках (имена файлов, начинающиеся с точки, обычно игнорируются; чтобы включить их в вывод, следует выполнить команду ls -a). Соответственно, при попытке выполнения rmdir команда скажет, что в каталоге еще остались файлы. Вероятно, со временем вы перейдете на команду rm -r. См. также
touch(1),rm(1).


В графических файловых оболочках (таких, как Nautilus, Konqueror, Midnight Commander, Gentoo File Manager, gmc и Rox Filer) операции переименования и копирования обычно выполняются быстрее и проще. См. также

Команда Linux fdisk предназначена только для создания томов Linux. Для томов Windows следует использовать команду fdisk из MS-DOS. Далее приводится список часто используемых команд fdisk: m — вывод справки; р — отображение текущей таблицы разделов; d — удаление раздела; n — создание нового раздела; w — запись таблицы разделов на диск; l — отображение списка типов файловых систем; q — завершение работы fdisk без внесения каких-либо изменений. 9.17. Создание файловой системы в новом разделе См. также
fdisk(8).


Команда mke2fs предназначена для создания файловых систем Ext2/3. Она является частью пакета e2fsprogs, загружаемого с сайта http://e2fsprogs.sourceforge.net.
Команда mkreiserfs входит в поставку ReiserFS и является частью reiserfsprogs. Ее можно загрузить по адресу http://www.namesys.com.
Команда mkfs.jfs входит в семейство jfsutils (http://www-124.ibm.com/jfs/).
Команда mkfs.xfs входит в семейство xfsprogs (http://oss.sgi.com/project/xfs). См. также
Раздел «Введение» настоящей главы; JFS (http://www-124.ibm.com/jfs/); XFS (http://oss.sgi.com/project/xfs); ReiserFS (http://www.namesys.com/); Ext2/3 (http://e2fsprogs.sourceforge.net/ext2.html).


В документации часто рекомендуется разместить исходные тексты ядра и дерево сборки в каталоге /usr/src/linux, но делать этого не следует. В файле README ядра прямо сказано: «НЕ ИСПОЛЬЗУЙТЕ область /usr/src/linux! Она содержит (обычно неполный) набор заголовков, используемых библиотечными заголовками ядра. Заголовки должны соответствовать библиотеке и не зависеть от текущей версии ядра». Также не стоит злоупотреблять правами root и использовать каталог, требующий доступа root. Ядро может строиться где угодно, даже на полностью изолированном компьютере.


Описанная процедура настраивает новое ядро «с нуля». Команда make oldconfig не подходит, потому что она не изменяет старую конфигурацию, а позволяет только добавить в нее новые возможности.
Типичное базовое ядро занимает около 1-3 Мбайт (в сжатом виде). Некоторые администраторы предпочитают усекать свое ядро до абсолютного минимума. На сервере, особенно доступном из Интернета, по соображениям безопасности стоит использовать как можно более компактное ядро. Впрочем, на настольных



На сайтах http://lwn.net и http://kernetlrap. org публикуется самая свежая информация о новостях, изменениях, усовершенствованиях и Задачах в области ядра Linux. См. также
Раздел «Введение» настоящей главы; электронная справка в программе настройки ядра; раздел 10.2.


Для запуска xconfig вам понадобится Qt, qt-devel и X. Также можно использовать программу menuconfig.
Команда make без параметров заменяет make dep, make bzimage и make modules.



Не пытайтесь использовать старый файл .config от версии 2.4 — ядра сильно различаются, и у вас будет много проблем.
Команда make без параметров заменяет make dep, make bzlmage и make modules. См. также
Документация в дереве сборки ядра; раздел «Введение» настоящей главы; раздел 10.2.


Заплатки ядра существуют в нескольких разновидностях. Заплатки rc (Release Candidates) находятся в одном шаге от включения в стабильное ядро, а кандидаты pre (PreRelease) — в двух шагах. Если вам не терпится использовать новую возможность, но вы не хотите ждать новой стабильной версии, устанавливайте заплатки rc и pre.
Официальные версии ядра на сайте Kernel.org хорошо протестированы и готовы к эксплуатации. Версии с четными номерами являются стабильными, а версии с нечетными номерами находятся в процессе разработки. Ядро Linux активно поддерживается вплоть до версии 2.0, а в архивах можно найти все версии ядра до первых версий Linux. См. также
patch(1); Kernel Newbies (http://kernelnewbies.org); Kernel.org (http://kernel.org).


Обязательно прочитайте man- страницу mkinitrd, поскольку состав параметров может зависеть от дистрибутива.
Ничто не мешает вам встроить драйвер SCSI в базовое ядро; использование initrd не является обязательным.



Программа mkboot входит в пакет debianutils.
Не забудьте защитить дискету от записи, сдвинув вверх небольшую защелку. Всегда проверяйте загрузочные диски, прежде чем откладывать их для хранения. Диск должен храниться вместе с той системой, для которой он был создан. См. также
mkboot(8).


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



Для выполнения команды cdrecord необходимы привилегии root. Чаще всего для того, чтобы пользователи могли использовать cdrecord, в системе создается группа cdrecord.
В документации иногда встречается запись вида dev=1,0
Начальный 0 для нулевой шины SCSI часто не указывается. И все же проще ввести лишнюю цифру и не оставить ни малейшей неоднозначности. В ядре 2.6 отдельно задавать код устройства не нужно. В командной строке достаточно передать имя /dev:
$ cdrecord dev=/dev/hdc <команды> См. также
cdrecord(1).



В Debian данные конфигурации модулей хранятся в файлах /etc/modules и /etc/modutils/idecd_opts. Включите в /etc/modules строку
ide-scsi Затем включите в /etc/modutils/idecd_opts строку
options ide-cd ignore="hdb hdc"
Для ядра 2.6 никакие особые действия не нужны, достаточно указать в командной строке имя /dev:
$ cdrecord dev=/dev/hdc <команды> См. также
grub(8), lilo(8).


В представленном решении все команды выполняются пользователем root. Это сделано для простоты, потому что команды mount, mkisofs и cdrecord требуют привилегий root. Чтобы пользователи могли выполнять команду mount, используйте sudo. Для выполнения команд mkisofs и cdrecord создайте группу cdrecord. Назначьте ее владельцем mkisofs и cdrecord и включите пользователей в группу cdrecord.
Помните, что в ядре 2.6 эмуляция IDE-SCSI не нужна, поэтому в командной строке cdrecord можно просто указать имя /dev:
# cdrecord dev=/dev/hdc <команды>
В этих нескольких командах выполняется довольно большая работа. Команда mkisofs берет все файлы и упаковывает их в один большой файл .iso. Если вам когда-либо доводилось загружать дистрибутив Linux для записи на компакт-диск, он был упакован в виде файла .iso. Это часто создает проблемы для новичков, которые не понимают, почему они получили один гигантский файл вместо дерева каталогов с файлами Linux.
Рассмотрим командную строку mkisofs более подробно:
# mkisofs -J -r -v -V data_disk -о data.iso /disk_data
Ключи: -J — использование схемы имен Joliet для совместимости с Windows; -r — использование схемы имен Rock Ridge для совместимости с Unix/Linux. Все файлы доступны для чтения для всех пользователей; -v — расширенный вывод; -V data_disk — определение идентификатора тома (data_disk). Это то самое имя диска, которое отображается в Проводнике Windows и в команде file - < /dev/scd* (о том, как определить имена /dev, рассказано в разделе 9.12); -o data.iso /disk_data — имя нового образа .iso и файлы, выбранные для упаковки в .iso (в данном случае все содержимое /disk_data). Обратите внимание: корневой каталог /disk-data не копируется, только его содержимое.
Монтирование .iso перед записью диска является простейшей страховкой. Если вы видите все свои файлы — можно переходить к записи. Если нет, значит, при формировании файла .iso была допущена ошибка и его придется построить заново. Проверка .iso осуществляется так:
# mkdir /test-iso # mount -t iso9660 -o ro,loop data.iso /test-iso
Откройте каталог /test-iso и проверьте свои файлы.
Параметры команды mount: -t iso9660 — тип файловой системы. Компакт-диски с данными всегда относятся к типу iso9660 (кроме udf, но в этом случае вам не придется создавать образ .iso); 11.5. Формирование файловых деревьев на компакт-дисках с данными -o ro,loop data.iso — параметры монтирования data.iso: доступ только для чтения, с использованием файловой системы, внедренной в файл; /test-iso — каталог, созданный как точка монтирования.
После завершения проверки .iso можно записать файл на диск.
# cdrecord -v -eject dev=0,1,0 data.iso
Параметры команды: -v — расширенный вывод; -eject — извлечение диска после записи (не обязательно); -dev=0,1,0 — адрес SCSI устройства записи компакт-дисков; data.iso — имя файла .iso, который содержит файлы, записываемые на диск.
Команда cdrecord по умолчанию записывает данные на максимальной скорости, поддерживаемой устройством и диском. При возникновении ошибок попробуйте снизить скорость записи:
# cdrecord -v -eject speed=4 dev=0,1,0 data.iso
Современные записывающие устройства поддерживают высокую скорость записи (20Х и выше), но многие диски CD-R/CD-RW ограничиваются гораздо более низкими скоростями. Как правило, команда cdrecord автоматически подбирает оптимальную скорость записи. См. также
cdrecord(1), mount(8), mkisofs(8); раздел 9.12; раздел 11.2.

Как говорилось выше, ядро 2.6 не нуждается в эмуляции IDE-SCSI — просто используйте имя /dev:
# cdrecord dev=/dev/hdc <команды>
Не забудьте, что объем созданного временного файла равен объему копируемого диска. 11.7. Стирание диска CD-RW Команда dd производит побайтовое копирование файла. Ее параметры: if — входной файл (источник); /dev/scd0 — имя устройства (см. раздел 11.3). Монтирование диска не обязательно; of - выходной файл (приемник); /tmp/diskfile.iso — временная копия исходного файла на жестком диске. Присвойте ей любое имя по своему усмотрению, но сохраните расширение .iso. Параметры cdrecord остаются теми же, что и в разделе 11.4, но к ним добавляются два новых параметра: fs=8m — размер циклического буфера: чем больше, тем лучше... до определенной степени. Помните, что перебои приводят к фатальным последствиям; параметр fs=8m создает буфер, объем которого достаточен для продолжения записи даже в том случае, если пересылка данных по каким-то причинам замедлится. Если 8 Мбайт недостаточно, вероятно, вам стоит подумать о модернизации своего компьютера. С другой стороны, значение больше 8 Мбайт не обязательно лучше, потому что операционная система может тратить время на перезагрузку таблиц MMU (Memory Management Unit). Значение по умолчанию равно 4 Мбайт. -dummy — замечательная функция тестового прогона перед записью на диск. Дисковод выполняет все операции с выключенным лазером, что дает пользователю возможность обнаружить ошибки до того, как они будут перенесены на диск. См. также
cdrecord(1), dd(1); раздел 11.4.



Стирание на уровне дорожек не поддерживается большинством дисководов. Стирание дорожек или сеансов в произвольной последовательности также невозможно — необходимо начать с конца и постепенно продвигаться к началу. Если при использовании какого-либо значения параметра blank будет получено сообщение об ошибке, попробуйте добавить ключ -force:
$ cdrecord blank=track -force
Но скорее всего, диск был поврежден и его лучше выбросить.
Чтобы получить список всех режимов стирания, выполните команду
$ cdrecord blank=help
Помните, что CD-RW имеет ограниченный цикл жизни, а количество операций перезаписи не бесконечно. Точное значение зависит от производителя и качества диска, но диск должен выдержать как минимум 100 операций перезаписи, прежде чем он станет ненадежным. См. также
cdrecord(1).


Компакт-диски записываются по сеансам. В каждом сеансе задействовано определенное количество секторов диска, На односеансовом диске присутствует вводная запись, одно оглавление, данные и выводная запись, присутствие которой фиксирует диск и не позволяет записать на него что-либо еще. Команда mkisofs позволяет связать несколько сеансов на многосеансовом диске. Для этого нужно знать номера начального и конечного секторов каждого сеанса. Рассмотрим параметры команды:
$ mkisofs -о second-image.iso -J -r -V Session2 -C `cdrecord dev=0,1,0 -msinfo` \ -M 0,1,0 /path-to-new-files -о second-image.iso — имя нового файла .iso (выбирается произвольно); -J — схема имен Joliet для совместимости с Windows (не обязательно); -r — схема имен Rock Ridge для совместимости с Unix/Linux, с открытием общего доступа к файлам для чтения. Параметр обязателен для создания многосеансовых дисков; -C `cdrecord dev=0,l,0 -msinfo` — ключ -С существует под несколькими именами: CD+, CDExtra, last_sess_start, next_sess_start. Он указывает mkisofs на конечную точку последнего сеанса и начальную точку следующего сеанса. Обратные апострофы приказывают командному процессору найти и использовать значения автоматически. Их также молено сгенерировать вручную:
cdrecord dev=0,l,0 -msinfo 12968,20172 -М 0,1,0 — параметр -М должен использоваться с -С. Он определяет адрес шины SCSI устройства записи CD; /путь_к_новым_файлам — список файлов (или каталог), включаемых в новый файл .iso. См. также
cdrecord(1), mkisofs(8).


mkisofs использует спецификацию El Torito для создания загрузочного образа, который «обманывает» PC и заставляет его думать, что он видит загрузочную дискету. См. также
mkisofs(8).


Описанный способ хорошо подходит для проведения архивации «на скорую руку» или перемещения большого количества файлов, но не используйте его для регулярной архивации. Если хотя бы один фрагмент будет испорчен, восстановить данные будет довольно трудно (особенно из сжатых файлов).
О проведении масштабной архивации рассказано в главе 16.
split(1), tar(1), cat(1); глава 16.

В последнее время появляется все больше дистрибутивов Linux в виде файлов .iso, размеры которых предназначены для записи на DVD, и это вполне естественно — некоторые дистрибутивы занимают 8 и более компакт-дисков.
Команда growisofs заменяет cdrecord и обеспечивает интерфейс к mkisofs, так что вы сможете использовать знакомые параметры mkisofs с двумя исключениями: не используйте параметр -o для указания выходного файла, потому что growisofs пишет непосредственно на DVD; не используйте параметр -C, так как growisofs определяет начальную и конечную точки дорожек самостоятельно.
Ключ -dvd-compat обеспечивает совместимость с большинством существующих дисководов DVD.
Ключ -udf добавляет ограниченную поддержку UDF. На момент написания книги пакетная запись еще не была надежно реализована в ядре Linux. В принципе ее можно исключить, хотя ее включение «на всякий случай» обойдется всего в несколько битов метаданных,
Утилиты dvd+rw-tools существуют в виде пакетов RPM, пакетов Debian и в формате .tar. В архиве .tar также имеется файл spec на тот случай, если вам захочется создать собственный пакет RPM.
Форматировать новые диски DVD-RW не обязательно, потому что, начиная с версии 5.10, growisofs делает это автоматически при добавлении файлов на DVD.
Чтобы узнать номер версии, выполните команду
$ growisofs --version
Программа supermount должна обеспечивать возможность вставки и извлечения дисков (например, дискет) без ввода команд mount и unmount. Она появилась в Red Hat, SuSE и других дистрибутивах, где обычно включается по умолчанию.
Чтобы временно отключить supermount, выполните команду
# /usr/sbin/supermount -i disable
Повторное включение производится с параметром -i enable. К сожалению, supermount работает не очень надежно, поэтому, возможно, ее лучше отключить вообще. Для этого удалите записи supermount и /etc/fstab. Если вы предпочитаете перестраховаться, удалите пакет magicdev:
# rpm -q magicdev 11.12. Запись аудиодиска для стандартных проигрывателей В Debian это делается командой
# apt-get remove magic-dev См. также
Домашняя страница dvd+rw-tools (http://fly.chalmers.se/~appro/linux/DVD+RW).



Новые версии sox вроде бы должны поддерживать формат .mp3, но на практике это не всегда так. Выполните команду sox -h и посмотрите, какие форматы поддерживает команда. Если ваша конкретная версия sox не поддерживает .mp3, используйте mpgl23 и sox:
$ mpgl23 -b 10000 -s filename.mp3 | sox -t raw -r 44100 -s -w -c 2 -filename.wav
Параметры: -b 10000 — размер буфера в байтах; -s — перенаправление результата в стандартный вывод (вместо попытки воспроизведения файла); sox -t raw -r 44100 -s -w -c 2 — описание формата .cdr с явным указанием спецификаций. Диск не может содержать более 99 дорожек. Впрочем, чтобы па одном диске поместилось 99 песен, эти песни должны быть совсем короткими.
Если музыкальные файлы уже хранятся в формате .wav, вероятно, вам не придется преобразовывать их. Тем не менее не все файлы .wav имеют правильную структуру для записи на диск; в таких случаях команда cdrecord остановится и выдаст сообщение об ошибке. Преобразуйте неправильный файл .wav в .cdr при помощи sox, а затем снова преобразуйте .cdr в .wav.
Форматы .wav и .flac обеспечивают наивысшее качество из всех форматов цифрового аудио. Всегда начинайте с них, если существует такая возможность, а потом преобразуйте их в другие форматы по мере необходимости. Чаще всего это делается для экономии места, поскольку файлы .wav и .flac очень велики. Файл .ogg обычно занимает около 1/10 объема файла .wav.
Ogg Vorbis — открытая и не защищенная патентами технология кодирования аудиоинформации. Она не связана с лицензионными отчислениями или другими ограничениями, присущими запатентованным, закрытым форматам типа MP3.
Формат .ogg обеспечивает хорошее качество звука при сжатии данных с потерями. Под «потерями» имеется в виду, что часть информации пропадает для уменьшения размера файла.
MP3 — другой качественный формат сжатия с потерями. Это запатентованный, закрытый формат, поэтому его использование ограничено, код закрыт, а исполнители и распространители должны платить лицензионные отчисления. Компания «Thomson and Fraunhofer», которой принадлежат права на формат MP3, включают в него поддержку DRM (Digital Rights Management, а проще говоря, ограничение копирования). См. также
cdrecord(1), sox(1), normalize(1).


Всегда проверяйте диски аварийного восстановления перед тем, как их использовать.
GRUB использует собственную схему нумерации разделов; отсчет начинается с 0, а не с 1. Диски IDE и SCSI обозначаются hd, а флоппи-дисководы обозначаются fd.
Таблица разделов Linux: 1-4-первичныеразделы; 5 и выше — расширенные разделы.
В GRUB она принимает следующий вид: 0-3 — первичные разделы; 4 и выше — расширенные разделы
Дополнительные диски обозначаются hd1, hd2 и т. д. Таким образом, hd0,3 — то же самое, что /dev/hda4, а hd1,5 соответствует /dev/hdb6. См. также
Раздел «Введение» настоящей главы; раздел 12.7; раздел 12.9; The Grub Manual (http://www.gnu.org/software/manual/grub.html); info grub.


При выполнении трех команд, о которых говорилось ранее, происходит следующее:
grub> root (hd0.0) Назначение корневого устройства grub> setup (hd0) Установка GRUB в MBR grub> quit Выход из GRUB
12.4. Установка GRUB сценарием grub-install См. также
Раздел 12.7; раздел 12.9; The Grub Manual (http://www.gnu.org/software/manual/grub.html); info grub.


Вероятно, update- grub не создаст полный файл menu.lst в системе с альтернативной загрузкой, но по крайней мере вы сможете загрузить операционную систему Linux. После этого в menu.lst можно будет добавить записи других операционных систем. См. также
grub-install(5); info grub; The Grub Manual (http://www.gnu.org/software/manual/ grub.html).


В большинстве современных дистрибутивов Linux GRUB устанавливается по умолчанию. Проследите за тем, чтобы ваши дистрибутивы не установили LILO.
QTParted — превосходная графическая утилита для создания, удаления, перемещения и изменения размеров дисковых разделов. Программа QTParted включена в Knoppix, поэтому при желании вы можете настроить разделы перед установкой Linux. Изменения также можно внести после установки, даже если раздел уже содержит данные. Разумеется, сначала необходимо создать резервную копию всех данных. QTParted хорошо справляется со своей работой, но изменение таблицы разделов чревато неприятностями.
Размещение /swap в автономном разделе повышает быстродействие системы; кроме того, такой раздел может использоваться совместно разными системами при альтернативной загрузке. Выделение /home в автономный раздел позволит вам использовать содержимое в разных экземплярах Linux, а также проводить установку и удаление систем без восстановления данных из архива.
Linux позволяет создать на диске IDE до 63 разделов: 3 первичных раздела и 4 раздел, содержащий до 60 логических разделов в одном расширенном разделе. Диски SCSI ограничиваются 15 разделами: 3 первичных и 12 логических в одном расширенном разделе. См. также
fdisk(8); глава 13; домашняя страница QTParted (http://qtparted.sourceforge.net).

Программа установки Libranet автоматически находит существующие разделы виртуальной памяти, поэтому выбирать их во время установки не нужно.
Вы можете отредактировать файл menu.lst в любом из новых экземпляров Linux. Просто смонтируйте загрузочный раздел:
# mkdir /bootpartition # mount /dev/hda1 /bootpartition # vim /bootpartition/boot/grub/menu.lst
В этом проявляются некоторые преимущества использования загрузочного
раздела — вы всегда знаете, где он находится, а его содержимое надежно изолировано от корневых файловых систем.
Вероятно, разбиение диска на разделы является самой важной частью построения системы с альтернативной загрузкой. На физическом жестком диске могут существовать только четыре первичных раздела, поэтому старайтесь по возможности использовать логические разделы; в противном случае разделы быстро кончатся. См. также
The Grub Manual (http://www.gnu.org/software/manual/grub.html); info grub. 12.7. Определение параметров загрузки в командной консоли GRUB

Если вы не уверены в том, что в системе использовались стандартные схемы выбора имен ядра, запросите у GRUB все содержимое /boot. Введите строку kernel /boot и нажмите клавишу Tab:
grub> kernel /boot/<tab> System.map System.map-2.4.21 System.map-2.6.3 boot grub config-2.4.21 config-2.6.3 splash.xpm.gz vmlinuz vmlinuz-2.4.21 kernel-of-truth-2.6.3
Похоже, мы обнаружили ядро 2.6 со странным именем kernel-of-truth-2.6.3. Несмотря на глупое имя, оно может работать точно так же, как его родственники с более вменяемыми именами.
Автоматическое расширение имен клавишей Tab позволяет легко проводить поиск в целых файловых системах. Эта возможность особенно полезна для исследования незнакомых систем, потому что вы можете начать с корня:
grub> root (hd0,6) grub> find /<tab> Possible files are bin dev etc lib mnt opt tmp sys var usr boot home proc sbin root cdrom floppy initrd
Однако это открывает большую брешь в системе безопасности, так как любой пользователь, имеющий доступ к консоли GRUB, сможет прочитать любой файл в системе командой cat:
grub> cat /root/secretpersonalstuff.txt grub> cat /etc/shadow
В разделе 12.14 рассказано, как закрыть эту брешь посредством парольной защиты GRUB.
Команда GRUB находит корневые устройства и ядра независимо от того, где они находятся. Допустим, в системе установлены два жестких диска IDE. На втором диске корневая файловая система Linux установлена в каталоге /dev/hdb5. Загрузка производится следующим образом:
grub> root (hd1.4) grub> kernel /boot/vmlinuz-2.4.21 ro root=/dev/hdb5 grub> boot
В незнакомой системе можно поручить GRUB поиск всех установленных жестких дисков:
grub> root (hd<tab> Possible disks are: hd0 hd1 См. также
The Grub Manual (http://www.gnu.org/software/manual/grub.html); info grub. 12.8. Настройка загрузочного раздела


Запутались? Помните, что и имя раздела не является именем каталога, потому что раздел — не каталог, а точке монтирования можно присвоить любое имя. GRUB ничего не знает о точках монтирования — загрузчик читает файловые системы до того, как они будут смонтированы-. Таким образом, если в загрузочном разделе не существует каталога /boot, GRUB не увидит /boot/grub, а только /grub. Хотя наличие каталога /boot не является строго обязательным, соблюдение этих правил существенно упростит вашу жизнь. См. также
The Grub Manual (http://www.gnu.org/software/manual/grub.html); info grub.

Запомните, что корневое устройство, заданное строкой
root (hd0.0)
определяет местонахождение каталога /boot, а в обозначении hd0, 0 используется собственная система нумерации разделов GRUB. В строке
kernel /boot/vmlinuz-2.4.22-1 root=/dev/hda2 ro
параметр root определяет корневую файловую систему с использованием dev-имени ядра. См. также
The Grub Manual (http://www.gnu.org/software/manual/grub.html); info grub.
12.10. Настройка menu.lst


Определения глобальных параметров конфигурации: default 0 — определение загрузочной строфы по умолчанию. Строфы нумеруются последовательно, начиная с 0, поэтому обозначение default 0 соответствует первой строфе; timeout 5 — промежуток времени, по истечении которого загружается запись по умолчанию; color cyan/blue white/blue — цветовая схема загрузочного меню GRUB. Первая часть (cyan/blue) определяет цвет текста и фона, а вторая (white/blue) — цвета выделенных строк текста. Список цветов приведен в руководстве GRUB и в описании info grub; splashimage(hd0.0)/boot/splash.xpm.gz; foreground bbbbbb; background 000000 — заставку, входящую в ваш дистрибутив, можно заменить любым изображением по вашему выбору (см. раздел 12.16). Параметр splashimage задает путь к изображению. Также необходимо задать цвет текста и фона для отображения шрифтов с использованием стандартных шестнадцатеричных цветовых кодов HTML.
Параметру default также можно присвоить значение saved. При использовании default saved также необходимо включить в загрузочные строфы строку savedefault:
title Libranet GNU/Linux, kernel 2.4.21 root (hd0.0) kernel /boot/vmlinuz-2.4.21 root=/dev/hda1 savedefault
В этом случае последняя строфа, использованная при загрузке, по умолчанию будет использоваться при следующей загрузке. Во многих дистрибутивах строка savedefault включается в загрузочные строфы, но параметр default saved отсутствует, поэтому механизм не работает. См. также
The Grub Manual (http://www.gnu.org/software/manual/grub.html); info grub; раздел 12.6.


Последние три параметра строки стоит рассмотреть подробнее: rootnotverify — не пытаться читать или монтировать раздел; makeactive — установить флаг загрузочного раздела (необходимо для Windows); chainloader +1 — ссылка на загрузчик операционных систем, не поддерживаемых GRUB напрямую (Windows относится к их числу).
Существует более простой способ организации совместной работы Windows 95/98/ ME с Linux: сначала установите Windows 95/98/ME, а затем добавьте Linux. В этом случае программа установки автоматически запишет GRUB в MBR и создаст запись для Windows в меню GRUB. См. также
Microsoft Knowledge Base Article 217210: «How to Multiple Boot Windows XP, Windows 2000, Windows NT, Windows 95, Windows 98, Windows ME, and MSDOS»; раздел 9.16; The Grub Manual (http://www.gnu.org/software/manual/grub.htmL).


Если потребуется организовать альтернативную загрузку нескольких версий Windows, начните с самой старой и устанавливайте их по порядку, вплоть до самой новой. При этом вы можете установить только один экземпляр Windows 95/98/ ME, потому что эти системы, в отличие от Windows NT/2000/XP, не поддерживают альтернативную загрузку.
Для всех версий Windows можно использовать один первичный раздел, разделив его на несколько логических разделов. Для создания разделов и их форматирования следует использовать программу установки Windows NT/2000/XP; не используйте программу Linux fdisk. См. также
Microsoft Knowledge Base Article 217210: «How to Multiple Boot Windows XP, Windows 2000, Windows NT, Windows 95, Windows 98, Windows ME, and MSDOS»; The Grub Manual (http://www.gnu.org/software/manual/grub.html); info grub; раздел 12.13.


Флоппи-дисководы постепенно исчезают с компьютеров, особенно с портативных. Даже в ноутбуках, заменяющих настольные компьютеры, вместо флоппидисковода часто устанавливается комбинированный дисковод CD-ROM/DVDROM/CD-R/RW. См. также
Домашняя страница Knoppix (http://www.knopper.net); The Grub Manual (http://www.gnu.org/software/manual/grub.html); info grub.


Разрешения на доступ к файлам являются атрибутами файловой системы. GRUB работает вне файловых систем, поэтому каждый, кто имеет доступ к командной консоли GRUB, сможет прочитать любой файл в системе.
Даже если вы потеряете пароль GRUB, это еще не катастрофа. Загрузите систему с диска аварийного восстановления и отредактируйте файл menu.lst. В этом проявляется старый принцип безопасности в Unix: «При наличии физического доступа к компьютеру с ним можно сделать все, что угодно». См. также
The Grub Manual (http://www.gnu.org/software/manual/grub.html); info grub.


Пароли GRUB и строка lock особенно полезны на общих рабочих станциях — например, в учебных залах, лабораториях и на рабочих местах. Тем не менее любой пользователь, обладающий физическим доступом к компьютеру, сможет использовать загрузочный диск аварийного восстановления и получить неограниченный доступ. Чтобы этого не произошло, можно запретить использование аварийных дисков в программе настройки BIOS, но не забывайте, сколько существует различных загрузочных устройств: дискеты, компакт-диски, устройства USB, Jaz/Zip, Ethernet Wake-on-LAN, SuperDisk... и наверное, это еще не все. Завершив настройку, установите пароль на вход в BIOS. См. также
The Grub Manual (http://www.gnu.org/software/manual/grub.html); info grub.

Семейство ImageMagick состоит из нескольких утилит командной строки: animate composite 12.17. Загрузка Linux с использованием LILO conjure convert display identify import mogrify montage
Отдельной команды imagemagick не существует. За подробностями обращайтесь к imagemagick(1).
Попробуйте провести поиск в Google по словам «grub splashimage». Вы найдете всевозможные галереи графических изображений, а также рекомендации и полезные приемы по их созданию. См. также
imagemagick(1), gzip(1), info grub; The Grub Manual (http://www.gnu.org/software/manual/grub.html).


Команда liloconfig хорошо подходит для создания базового файла lilo.conf; после этого файл проще и удобнее редактировать вручную. При каждом изменении /etc/lilo.conf необходимо запускать LILO, чтобы внести изменения в MBR:
# /sbin/lilo -v
Параметр -v определяет уровень детализации вывода, а его значения лежат в интервале от 1 до 5:
# /sbin/lilo -v5 См. также
lilo(8), lilo.conf(5); /usr/doc/lilo или /usr/share/doc/lilo; «The Large Disk Howto» на tldp.org.


Когда в системе установлено несколько версий Windows, загрузчик Windows всегда относится к первой из них. Таким образом, если в /dev/hda1 установлена система Windows 95, а в /dev/hda2 — Windows 2000, в LILO все равно включается ссылка на /dev/hda1. См. также
lilo(8), lilo.conf(5); /usr/doc/lilo или /usr/share/doc/lilo; Microsoft Knowledge Base Article 217210: «How to Multiple Boot Windows XP, Windows 2000, Windows NT, Windows 95, Windows 98, Windows ME, and MS-DOS».


В мире Linux существует огромное количество всевозможных загрузочных дисков. Если вам удастся загрузить систему, вы сможете исправить любые ошибки. Обязательно проверьте установочные диски своего дистрибутива, потому что на них часто имеются средства аварийного восстановления, приспособленные для вашего дистрибутива, в том числе и утилиты для переустановки загрузчика. См. также
lilо(8), lilo.conf(5); /usr/doc/lilo или /usr/share/doc/lilo.


Для обеспечения дополнительной безопасности на стадии загрузки заблокируйте все внешние загрузочные устройства в программе настройки BIOS и установите пароль на вход в BIOS. Решение не идеально, но по крайней мере, рядовые пользователи не смогут испортить вашу работу. См. также
lilo(8), lilo.conf(5); /usr/doc/lilo или /usr/share/doc/lilo,.


Команда dd выполняет побайтовое копирование. Поддержка файловых систем ей не нужна, поэтому она может использоваться для копирования блочных устройств (например, /dev/hda).
Если в вашей системе отсутствует флоппи-дисковод, испорченную запись MBR можно восстановить при помощи диска Knoppix (см. раздел 12.13). См. также
dd(1), mke2fs(8); раздел 12.13.

Компиляция системы по исходным текстам (старый подход)


Сопровождение системы Linux также прошло большой путь. Благодаря пакетам и интеллектуальным средствам разрешения зависимостей своевременное обновление системы и исправление ошибок упростилось и стало порождать меньше ошибок. В наши дни молодежь получает все готовенькое. В доисторические времена не было дисководов CD-ROM — вместо широкополосного подключения приходилось использовать коробки дискет. Чтобы установить новую программу, нам, ветеранам, приходилось подолгу загружать архивы или копировать их с дискет, а затем компилировать их по исходным текстам. Зависимости? Все проблемы приходилось решать самим, без малейшей помощи со стороны новомодных утилит. Все проходило примерно так:

# tar -xvf someprogram.tar # ./configure # make

Вызов make завершался неудачно из-за неразрешенных зависимостей. Тогда приходилось загружать архив программы с необходимыми библиотеками, что на модеме со скоростью на 300 бод (такой, с резиновой присоской, крепится на телефоне) занимало около 6 часов. Я провела это время за работой в саду. Когда пересылка была закончена, я вернулась, распаковала новый архив и повторила попытку:

# ./configure # make

Копирование перемещение и переименование файлов и каталогов

Задача

В системе существуют каталоги и файлы. Как перенести файл в другой каталог? Как сменить имя файла? И как создать его копию? 9.16. Создание дисковых разделов Linux командой fdisk

Man и info универсальные руководства Linux


Практически у каждой программы, написанной для Linux, имеется своя man-страница. Как правило, man-страницы не предназначаются для освоения программы новичками. Они создаются для других целей: документирование синтаксиса команды, описание всех параметров и ключей, а также общедоступность. Даже если вы окажетесь на компьютере, полностью отрезанном от внешнего мира, в вашем распоряжении всегда будет информация из man-страниц. А поскольку man-страницы интегрируются с программами, которым они принадлежат, только установленные программы будут иметь man-страницы, причем версии этих страниц будут относиться именно к вашей системе.

Info-страницы обычно содержат более подробную информацию. Включенные в них гиперссылки используются для перехода к различным узлам, или главам, документа, а также для создания перекрестных ссылок на другие info-страницы. Нередко info-страницы представляют собой переформатированные man-страницы. Но в некоторых случаях (прежде всего, в программах проекта GNU) info-страницы



Настройка монтирования файловых систем в /etc/fstab


Задача

Пользователям нужно записывать данные на компакт-диски, работать с флэшдисками и другими съемными устройствами. Давать им привилегии root только для монтирования этих устройство нельзя, но только суперпользователь root может использовать команды mount, описанные в разделе 9.9. Также требуется выбрать файловые системы, автоматически монтируемые при загрузке системы.



Настройка нового ядра


Настройка конфигурации является не только самым длительным, но и самым важным этапом сборки нового ядра. На этом этапе вы решаете, какое оборудование, файловые системы, функции энергосбережения и т. д. будут поддерживаться ядром. В вашем распоряжении более сотни разных параметров и для каждого нужно принять три потенциальных решения: нужно ли включать данную возможность, и если нужно — оформить ли ее в виде загружаемого модуля или статически откомпилировать в ядро? Как правило, если возможно построить модуль, следует выбрать именно этот вариант. Модули экономят память, поскольку память для них выделяется лишь в случае их фактического использования. Кроме того, обновить или установить отдельный модуль проще, чем перестраивать все ядро.

Программа конфигурации ядра содержит справку почти но каждому параметру. В справке говорится, можно ли оформить некоторую функцию в виде модуля или ее необходимо встроить в базовое ядро. Здесь вы найдете информацию о том, для чего нужна каждая функция, и рекомендации на случай, если вы не уверены, следует ли включать соответствующий режим. Если справки нет и вы не знаете, что делать — включайте. В худшем случае вы получите более громоздкое ядро с неиспользуемыми возможностями.

Программа конфигурации ядра не позволит реализовать в виде модуля те функции, которые должны быть частью базового ядра. У этого правила есть лишь одно важное исключение: драйвер дискового устройства, содержащего корневую файловую систему. Вообще говоря, этот драйвер должен быть встроен в базовое ядро, чтобы система могла загрузиться, иначе возникает «порочный круг»: драйверы необходимы для загрузки корневой файловой системы, но файловая система не может загрузиться, потому что драйверы находятся в ней. Если драйверы не встраиваются в ядро, вам придется создать образ initrd. Initrd создает исходный виртуальный диск, который загружает драйверы дисковых устройств, что позволяет загрузить систему.

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

Для настройки ядра 2.4 используется программа menuconfig, а для настройки ядра 2.6 — либо menuconfig, либо xconfig. Программа menuconfig создана на базе ncurses, так что вам не понадобится X. Если поддержка ncurses не установлена, либо установите ее, либо используйте исходную программу настройки ядра config, но это просто ужасно. Процесс затягивается на целую вечность, и если вы допустите хотя бы одну ошибку, все придется начинать заново.

Программа xconfig была полностью переработана для ядра 2.6. Она чрезвычайно эффективна и удобна, а по каждому параметру пользователь может получить содержательную справку. Для ее запуска вам понадобится Qt, qt-devel, gtt и X. На Рисунок 10.1 показан пользовательский интерфейс xconfig во всей красе.

Дерево сборки ядра содержит объемистую документацию; загляните в каталог linux-$VERSION/Documentation. В каталоге Linux-$VERSION/README содержатся важные указания по поводу установки, а в каталоге linux-$VERSION/Documentation/ Changes — важная информация о версиях gcc и других используемых программах.

Настройка параметров сборки SRPM


Задача

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



Настройка Vim


Задача

При выходе из программы вся настройка теряется. Конечно, вам не хочется заново вводить все сокращения и привязки при запуске. Как настроить рабочую среду Vim с сохранением сокращений и нестандартных привязок?



Настройка yum


Задача

Требуется сменить источник, из которого yum загружает программы.



Назначение редактора по умолчанию


Задача

Некоторые программы (например, crontab и quota) используют редактор по умолчанию. Чаще всего им оказывается какое-нибудь убогое древнее страшилище, а вы стали поклонником Vim и JOE. Как назначить в качестве редактора по умолчанию ту программу, которая вам нравится?



О чем рассказано в книге


Для Linux существуют тысячи программных пакетов. Почти все они делают чтото полезное, поэтому заранее понятно, что рассмотреть все темы (или хотя бы их большинство) попросту невозможно. Решения о том, какой материал включить в книгу, а какой оставить за пределами рассмотрения, принимались в соответствии с моими представлениями о базовых навыках администрирования Linux (возможно, у вас эти представления будут другими). В книгу были включены программы, которые я считаю лучшими в своей категории: djbdns, GRUB, Apache 2, vim и Postfix, а также испытанные временем ветераны вроде LILO.

В книге приводятся полезные сценарии для выполнения типовых операций:

массовое создание учетных записей; массовое изменение паролей; поиск всей установленной документации к программе; поиск «бесхозных» библиотек в системах на базе RPM и их включение в базу данных RPM.

В книгу не вошли настольные и вспомогательные приложения типа Open Office, KMail, FireFox, Konqueror, Gimp, GnuCash и т. д. — книга посвящена построению инфраструктуры. Если вы освоите основные принципы администрирования и сопровождения Linux-системы, дальше можно будет двигаться куда угодно.



Операции с кэшем пакетов Debian


Задача

Требуется обеспечить актуальность кэша пакетов и списков пакетов, чтобы программа apt работала правильно, без возникновения ложных проблем с зависимостями.



Определение имен устройств для mount и fstab

Задача

Требуется смонтировать дисковое устройство: жесткий диск с интерфейсом IDE или SCSI, CD, DVD, флэш-диск USB или Zip-диск. Но вы не знаете, какое имя устройства следует использовать — где его найти? 9.12. Определение имен устройств для mount и fstab

Определение параметров компиляции Vim


Задача

У вас возникли трудности с Vim. Похоже, некоторые возможности программы не были включены при компиляции. Как узнать, какие параметры использовались при компиляции Vim?



Определения типов файлов


Далее типы файлов Linux будут представлены чуть более подробно. Обычные файлы — обычные текстовые файлы, файлы данных или двоичные исполняемые файлы. Каталоги — списки файлов. Символьные и блочные устройства — файлы, которые могут рассматриваться как промежуточные точки между ядром и драйверами устройств — например, /dev/hda (жесткий диск IDE), /dev/ttyS1 (модем для последовательного порта) и т. д. Они используются ядром для перенаправления запросов к различным устройствам системы.