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

         

От издательства


Ваши замечания, предложения, вопросы отправляйте по адресу электронной почты comp@piter.com (издательство «Питер», компьютерная редакция).

Мы будем рады узнать ваше мнение!

На веб-сайте издательства http://www.piter.com вы найдете подробную информацию о наших книгах.



Печать отдельных man или infoстраниц


Задача

Многие man- и info-документы весьма длинны — скажем, man bash занимает 33 печатных страницы. Требуется напечатать лишь часть описания. Как организовать выборочную печать страниц?



Платформы

В мире существуют тысячи дистрибутивов Linux. Свои дистрибутивы создают отдельные компании, кампусы и даже просто группы единомышленников. Тем не менее дистрибутивы делятся (пусть и не очень четко) на две большие категории: системы на базе RPM, представленные в книге Red Hat и Fedora, и системы на базе apt, представленные Debian. Семейство Debian бурно развивается и пополняется такими представителями, как Knoppix, Xandros, Libranet, Unbuntu и Linspire.

Предисловие

Даже если ваш дистрибутив не принадлежит ни к одной из этих категорий (скажем, Slackware или Gentoo), основные принципы практически не изменяются. Ядро остается тем же; программы и утилиты остаются теми же; оконные менеджеры остаются теми же; принципиальные различия существуют только в способе установки программ.

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



Поиск файла config


Если ранее вы строили ядро в своей системе, файл .config будет находиться на верхнем уровне старого дерева сборки. Если сборка ядра не выполнялась, поищите в каталоге /boot, куда этот файл помещается большинством дистрибутивов. Файл в каталоге /usr/src/linux, скорее всего, является обобщенным и бесполезным для вашей конкретной конфигурации.

Если в системе нет файла .config, перейдите к разделу 10.3, потому что вам придется настраивать конфигурацию ядра «с нуля». Команда make oldconfig будет работать, но она использует конфигурацию по умолчанию из дерева сборки, совершенно не соответствующую вашей системе. Команда make oldconfig сообщает, какой файл она использует:

$ make oldconfig # Using defaults found in arch/i386/defconfig

Этот файл вам не подходит! В выходных данных должно быть сказано:

# Using defaults found in .config

Прервите выполнение команды клавишами Ctrl+C и начните заново. См. также

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



Поиск программ установленных в системе Debian


Задача

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



Поиск всей документации к программе


Задача

Требуется найти все файлы README и HOWTO, все журналы изменений, руководства, примеры и прочую документацию, прилагаемую к установленной программе.



Получение информации об установленных пакетах в yum


Задача

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



к числу относительно неопытных пользователей


Итак, вы принадлежите к числу относительно неопытных пользователей Linux. Вы установили Linux, вам удалось войти в систему, пошарить в Интернете, отправить и получить электронную почту... а дальше что? Несмотря на успешное выполнение некоторых простейших задач, вы чувствуете себя словно пилот самолета, летящего на автопилоте. В вашем распоряжении масса замечательных возможностей (во всяком случае, так вам сказал ваш знакомый, большой знаток в области Linux), но как за них взяться? Что где находится и как работает? Что это за штуковина под названием grep, о которой так часто говорят? И как наладить работу Samba? И где находится #$%^ документация?
Мир Linux/Unix отлично документирован. Нет, я серьезно! Вы сможете найти ответ на любой вопрос; нужно только знать, где искать. Man-страницы, info-страницы, файлы README, документация в формате HTML, сами программы... Не нужно быть великим программистом, чтобы отыскать полезную информацию в исходных текстах, потому что все необходимые сведения часто содержатся в комментариях.
Среди тысяч виртуальных сообществ Интернета всегда найдется одно (или несколько) для конкретной программы из Вселенной Linux. Почти у каждой программы, какой бы малой она ни была, существует собственный список рассылки. У каждого дистрибутива Linux имеются свои списки рассылки и форумы пользователей. Я уже не говорю о многочисленных книгах и журналах. Получается, что настоящая проблема с документацией Linux — не ее нехватка, а получение нужной информации без долгих и самоотверженных поисков.


Привязка команд к клавишам


Задача

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



Проверка целостности файлов паролей


Задача

Файлы паролей (/etc/group, /etc/passwd, /etc/shadow и /etc/gshadow) интенсивно используются в процессе администрирования, и вам нужно какое-нибудь средство для проверки правильности их синтаксиса. Было бы неприятно узнать о допущенной ошибке (например, о том, что вы забыли назначить кому-то пароль) после того, как ваша система будет взломана!



Разрешение конфликтов зависимостей в Debian


Задача

Программа не устанавливается из-за проблем с зависимостями, или команда apt-get dist-upgrade оставляет пакеты, которые нужно удалить.



Редактор JOE «пять в одном»

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

JOE поддерживает три режима эмуляции:

jstar (WordStar); jpico (Pico); jmacs (hmacs)

и два собственных режима, JOE и RJOE. В ограниченном режиме RJOE («Restricted JOE») могут открываться только файлы, указанные в командной строке. После запуска редактора в режиме RJOE вы не сможете открыть новые файлы в редакторе или открыть новый сеанс командной оболочки. Таким образом, режим RJOE хорошо подходит для sudo-пользователей, поскольку он предотвраща-

6.2. Поиск команд JOE

ет выход в режим командной строки с привилегиями root. Все пять режимов работают из одного 200-килобайтного исполняемого файла.

См. также

joe(1), vi(1); Gtypist (http://www.gnu.org/software/gtypist/gtypist.html).



страницы на самом деле очень


Разберитесь в структуре man-страниц; изучите условные обозначения команд и их параметров, и вы поймете, что man- страницы на самом деле очень полезны.

Проведите поиск по ключевым словам командой apropos или man -k. Например, чтобы найти команду для подсчета слов в файле, введите следующую строку:
$ apropos count words
или
$ man -k count words american-english (5) -a list of english words grpconv (8) - convert to and from shadow passwords and groups. grpunconv (8) - convert to and from shadow passwords and groups. kmessedwords (1) -a letter order game for KDE lpasswd (1) - add. change, or delete digest passwords. pwconv (8) - convert to and from shadow passwords and groups. pwunconv (8) - convert to and from shadow passwords and groups. shadowconfig (8) - toggle shadow passwords on and off we (1) - print the number of newlines. words, and bytes in files 1.4. Поиск потерянных man-страниц Выбор команды неважен; apropos и man -k делают одно и то же. Список обширный, но, похоже, нам нужна программа we. Не забывайте о ключе -f для вывода всех версий man-страницы:
$ man -f manpath manpath (1) - determine search path for manual pages manpath (5) - format of the /etc/manpath.config file


Иногда база данных man-страниц повреждается из- за изменений, вносимых пользователями, или некорректной установки man-страниц. Для начала попробуйте провести поиск командой whereis -m:
$ whereis -m cat cat:/usr/man/man1/cat.1.gz /usr/share/man/man1/cat.1.gz
Страница обнаружена. Попробуйте прочитать ее командой man:
$ man /usr/man/man1/cat.1.gz
Если не получится, попробуйте заново построить базу данных man командой mandb:
# mandb
Если и это не поможет, проверьте общесистемный поиск с использованием команд Locate и grep:
$ locate / cat. | egrep -w 'cat\.[l-93[a-zA-Z]*[.gz]?'
Команда подойдет для любой man-страницы — достаточно заменить cat искомым именем.
Если ни одно из этих решений не помогло добраться до нужной страницы, попробуйте воспользоваться сценарием finddoc из раздела 1.11. Если и сценарий не найдет страницу, значит, она отсутствует в вашей системе.



Попробуйте прочитать man-страницу напрямую программами zcat и nroff:
$ zcat /usr/man/man1/cat.1.gz |nroff -man | less
Последнее средство — прочитайте низкоуровневый код страницы программой zless:
$ zless /usr/man/man1/cat.1.gz .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.32. .TH CAT "1" "JULY 2003" "cat (coreutils) 5.0" "User Commands" .SH NAME cat \-concatenate files and print on the standard output .SH SYNOPSIS .B cat [\fIOPTION\fR] [\fIFILE\fR]...
Выглядит некрасиво, но понять можно.


Отредактируйте файл /etc/manpath.config.
Допустим, в путь поиска нужно добавить каталог /opt/man. Включите его в /etc/manpath.config:
# Поля, включаемые в каждый автоматически # сгенерированный путь MANPATH
MANDATORY_MANPATH /usr/man MANDATORY_MANPATH /usr/share/man MANDATORY_MANPATH /usr/XllR6/man MANDATORY_MANPATH /usr/locai/man MANDATORY_MANPATH /opt/man
Все, готово. Теперь man найдет man-страницы, находящиеся в новом каталоге. При создании нестандарного каталога man-страниц не забудьте создать подкаталоги разделов:
$ ls /opt/man/local man1 man2 man3 man4 man5 man6 man7 man8 man9
Включать все нумерованные подразделы не обязательно — достаточно разделов для тех man-страниц, которые будут там храниться.
Если вы будете использовать подкаталоги (например, /opt/man и /opt/man/local), укажите их именно в таком порядке:
MANDATORY_MANPATH /opt/man/local MANDATORY_MANPATH /opt/man
Подкаталоги должны указываться перед родительскими каталогами, в противном случае программа просмотра man-страниц их проигнорирует.


Воспользуйтесь встроенным учебником info. Введите в командной строке строку info, нажмите h и выполните инструкции. Обучение занимает 15-30 минут, и это время будет потрачено с пользой.

С ключом -t man- страница форматируется специально для печати. Страница man finger хорошо подходит для экспериментов, потому что она состоит всего из двух листов:
$ man -t finger | lpr
Вывод на сетевой принтер:
$ man -t finger | lpr -P printername
Получение списка доступных принтеров:
$ lpstat -p -d
Возможно и другое решение. Следующая команда форматирует страницу в HTML и отправляет ее в браузер по вашему выбору:
$ man -Hmozilla finger
Далее остается лишь отдать команду печати в браузере. Проследите за тем, чтобы между -H и именем браузера не было пробелов.
1.9. Печать info-страниц


Воспользуйтесь lpr:
$ info finger | lpr
Однако в зависимости от настроек принтера в распечатке могут оказаться слишком маленькие поля или странные переносы строк. Отформатируйте выходные данные при помощи параметров lpr:
$ info finger | lpr -о cpi=12 -о page-left=54 -о page-right=54 \ -о page-top=54 -о page-bottom=54
Числовые значение задаются в пунктах, то есть 1/72 дюйма. В представленном примере на странице создаются одинаковые поля по 3/4 дюйма.


Экспортируйте man- или info-страницу в текстовый файл командой col. После этого вы сможете легко выбрать печатаемые страницы. Следующие команды показывают, как сделать это для страниц man bash или info bash:
$ man bash | col -b > bash.txt $ info bash | col -b > bash.txt

Воспользуйтесь finddoc — замечательным сценарием Python, любезно предоставленным замечательной Акканой Пек.
1.11. Поиск всей документации к программе Имя сценария может быть произвольным. Не забудьте разрешить его исполнение:
$ chmod +x finddoc
В командной строке указывается только имя сценария и название программы, для которой ищется документация. Пример:
$ ./finddoc grep /usr/share/doc/grep /usr/share/doc/grep-dctrl /usr/share/doc/grep-dctrl.changelog.gz
Выходные данные фильтруются другими командами или направляются в файл:
$ ./finddoc | grep -i examples | lpr $ ./finddoc | grep -i faq $ ./finddoc | grep -i examples > python-examples.txt
Листинг 1.1. Программа finddoc
#!/usr/bin/env python # # Finddoc: Сценарий для поиска документации Linux-программ. # При создании собственной копии сценария обязательно сохраните # начальные пробелы в том виде, в котором они приводятся в тексте. # потому что они необходимы для работы Python. # # Поиск документации по заданным строкам, без учета регистра символов # и только по целым словам. Сценарий зависит от "locate" # и предполагает, что база данных locate содержит актуальную информацию. # # Copyright 2003 by Akkana Peck. # Допускается использование, распространение или модификация программы # на условиях GPL. import sys. os. string. re # Имена файлов, которые мы будем считать относящимися к документации. # Редактируйте по своему усмотрению. Следите за тем. чтобы # новые имена добавлялись только в нижнем регистре, docfilenames - [ \ "changelog", \ "readme", \ "install", \ "howto", \ "authors", \ "news", \ "todo", \ "config", \ "sample", \ "samples", \ "example", \ "examples", \ "ref", \ "guide", \ "manual", \ "quickstart", \
продолжение =>



Воспользуйтесь системой управления пакетами RPM. Команда установки в Red Hat имеет следующий синтаксис:
# rpm -i пакет
Например, следующая команда устанавливает графический редактор Tuxpaint. Ключ -v обеспечивает выдачу подробных сообщений, а ключ -h отображает индикатор хода установки в виде строки из символов #:
# rpm -ivh tuxpaint-9.13-1.i386.rpm Preparing...###################### [100%] 1. tuxpaint ################## [100%]
Следующая команда проверяет установку без ее фактического выполнения:
# rpm -ivh --test tuxpaint-9.13-1.1386.rpm Preparing... ###################### [100%] #


Воспользуйтесь флагом -U:
# rpm -Uvh tuxpaint-9.13-1.i386.rpm
Чтобы предварительно протестировать команду, введите:
# rpm -Uvh --test tuxpaint-9.13-1.i386.rpm


Задача решается командой rmp -e:
# rpm -ev tuxpaint
Вводить полное имя пакета (например, tuxpaint-9.13.-1.i386.rpm) не обязательно; достаточно одной метки.
Чтобы удалить сразу несколько программ, перечислите их, разделяя пробелами:
# rpm -ev tuxpaint SDLttf SDLttf-devel SDLimages
Чтобы установка производилась без проверки зависимостей:
# rpm -ev --nodeps tuxpaint
Предварительное тестирование командной строки перед выполнением осуществляется командой
# rpm -ev --test tuxpaint SDLttf SDLttf-devel SDLimages


Воспользуйтесь информационными запросами RPM. Все запросы начинаются с rpm -q.
Следующая команда проверяет по базе данных RPM, установлена ли программа:
$ rpm -q tuxpaint tuxpaint-9.13-1
Для проведения поиска установленного пакета по его частичному имени без учета регистра символов используется команда:
$ rpm -qa | grep -i kde lockdev-1.0.1-1.3 kdebase-3.1.4-6 kdeutils-3.1.4-1 kdegames-3.1.4-4
Вывод списка всех файлов установленного пакета:
$ rpm -ql kdegames /usr/bin/atlantik /usr/bin/kasteroids /usr/bin/katomic ...
Вывод списка документации к приложению:
$ rpm -qd kdegames | grep katomic /usr/share/doc/HTML/en/katomic/common /usr/share/doc/HTML/en/katomic/index.docbook ...
Вывод списка конфигурационных файлов пакета:
$ rpm -qc openssh /etc/ssh/moduli


Для выполнения запросов к пакетам, не установленным в системе, в командную строку добавляется ключ -p.
Следующая команда выводит список всех файлов документации:
$ rpm -qpd tuxpaint-9.13-1.i386.rpm /usr/share/doc/tuxpaint-9.13-1/AUTHORS.txt /usr/share/doc/tuxpaint-9.13-1/CHANGES.txt /usr/share/doc/tuxpaint-9.13-1/COPYING.txt ...
Вывод списка всех файлов:
$ rpm -qpl tuxpaint-9.13-1.i386.rpm /etc/tuxpaint/tuxpaint.conf /usr/bin/tuxpaint ...
Вывод списка зависимостей пакета:
$ rpm -qpR tuxpaint-9.13-1.i386.rpm /bin/sh SDL >= 1.2.4 SDL_image ...


Добавьте в командную строку ключ --last:
# rpm -qa --last
Команда выводит список установленных пакетов, начиная с тех, которые устанавливались последними.


Попробуйте построить заново базу данных RPM с правами root:
# rpm --rebuilddb
или построить ее заново:
# rpm --initdb


Воспользуйтесь сценарием rpm-orphan-find. Сценарий находит все библиотеки в вашей системе, а затем сравнивает результаты с содержимым базы данных RPM. Все «бесхозные» библиотеки объединяются в новый, виртуальный пакет .rpm. Пакет не содержит файлов, а только список обеспечиваемых зависимостей. Сценарий запускается как любой сценарий Bash:
# chmod +x rpm-orphan-find # ./rpm-orphan-find
После завершения работы сценария установите новый пакет, и прежде «бесхозные» библиотеки будут включены в базу данных RPM. Спасибо Полу Хайнлайну (Paul Неinlein) и Питеру Сэмюэльсону (Peter Samuelson) за этот замечательный сценарий.
Листинг 2.1. Программа rpm-orphan-find
#!/bin/bash ## rpm-orphan-find. сценарий для поиска ## "бесхозных" библиотек в системах на базе RPM ## и их преобразования в виртуальный пакет .rpm ## Авторы - Пол Хайнлайн и Питер Сэмюэльсон ## Copyright 2003 ## Допускается использование, распространение или модификация ## программы на условиях GPL. OS=$(uname -s) LIBS="/lib /usr/lib $(cat /etc/ld.so.conf)" NAME=$(echo ${OS}-base-libs | tr '[A-Z]' '[a-z]') VER=1.0: REL=1 TMPSPEC=$(mktemp /tmp/${NAME}.spec.XXXXXX)
exec 9>$TMPSPEC
cat <<__eof__ >&9 Summary: $OS Base Virtual Package Name: $NAME Version: $VER Release: $REL
продолжение =>



Соберите воедино все пакеты, необходимые для разрешения зависимостей, и установите их все сразу. Пример:
# rpm -ivh tuxpaint-0.9.13-1.i386.rpm error: Failed dependencies SDL_image is needed by tuxpaint-0.9.13-1 SDL_ttf is needed by tuxpaint-0.9.13-1 libSDL_image-1.2.so.0 is needed by tuxpaint-0.9.13-1 libSDL_ttf-2.0.so.0 is needed by tuxpaint-0.9.13-1 # rpm -ivh tuxpaint-0.9.13-1.i386.rpm SDL_image-1.2.3-4.i386.rpm SDL_ttf-2.0.6-1.i386.rpm
Программа установки сортирует их и устанавливает в правильном порядке.
Что делать, если RPM жалуется на отсутствие файла или пакета, а вы абсолютно уверены в том, что он установлен? Возможно, база данных RPM содержит ошибки; попробуйте перестроить ее:
# rpm --rebuilddb
Если это не помогло, переустановите якобы отсутствующий пакет с ключом --replacepkgs:
# rpm -ivh --replacepkgs SDL_ttf-2.0.6-1.i386.rpm
Если вы твердо уверены в том, что необходимые библиотеки существуют в вашей системе, попробуйте провести форсированную установку, не обращая внимания на ошибки:
# rpm -ivh --force tuxpaint-2002.10.20-1.i386.rpm
или откажитесь от проверки зависимостей:
# rpm -ivh --nodeps tuxpaint-2002.10.20-1.i386.rpm
Если конфликт зависимостей так и не удалось разрешить, попробуйте установить новую программу и все ее зависимые пакеты из пакетов, сгенерированных по исходным текстам (см. раздел 2.11).


Постройте новую программу из пакета RPM с исходными текстами (SRPM, Source RPM).
Загрузите SRPM (в данном примере tuxpaint-2002.10.20-1.src.rpm) в каталог по вашему усмотрению. Проследите за тем, чтобы он подходил для вашей поставки Linux. Запустите программу установки пакета:
# rpm -ivh tuxpaint-2002.10.20-1.src.rpm
Команда помещает исходные тексты в каталог /usr/src/SOURCES, а файл spec — в каталог /usr/src/SPECS:
# ls /usr/src/SOURCES tuxpaint-2002.09.29.tar.gz tuxpaint-Makefile.patch tuxpaint-stamps-2002.09.29.tar.gz tuxpaint.desktop tuxpaint-opt.patch $ ls /usr/src/SPECS tuxpaint.spec
Далее построите файл spec:
# rpmbuild -bb tuxpaint.spec
Новый пакет RPM создается в каталоге /usr/src/RPMS/i386:
# ls /usr/src/RPMS/i386 tuxpaint-2002.10.20-1.i386.rpm
Теперь у вас имеется новый пакет RPM с программой Tuxpaint, откомпилированный для вашей системы.


Сначала загрузите и установите исходный пакет RPM:
# rpm -ivh samba-3.0.0-15.src.rpm
Затем перейдите в каталог SPECS и откройте файл spec:
# cd /usr/src/redhat/SPECS # vim samba.spec
Найдите секцию с параметрами %configure:
%configure \ --with-acl-support \ --with-automount \ --with-fhs \ ...
Добавьте или удалите параметры конфигурации, сохраните и закройте файл spec, а затем постройте пакет, как описано в разделе 2.11:
# cd /usr/src/redhat/SPECS # rpmbuild -bb tuxpaint.spec

Воспользуйтесь yum (Yellow dog Updater Modified).
Программа yum является стандартной для дистрибутива Fedora; в других системах ее придется устанавливать дополнительно: # rpm -ivh yum-2.0.4-1.noarch.rpm
Затем загрузите ключи GPG, необходимые для загрузки из проекта Fedora:
# rpm --import http://www.fedora.us/FEDORA-GPG-KEY
Дополнительные ключи можно найти в каталогах загрузки, таких как http://download.fedora.redhat.eom/pub/fedora/tinux/core/2/i386/os/. Понадобятся ключи для всех архивов, на работу с которыми будет настроен yum. Включите следующую строку в файл /etc/yum.conf, чтобы проверка ключей осуществлялась автоматически:
gpgcheck=1 2.14. Настройка yum Теперь можно устанавливать новую программу:
# yum install tuxpaint
Первая загрузка Yum займет около 30 минут, потому что она будет сопровождаться загрузкой списков пакетов:
Gathering header information file(s) from server(s) Server: Fedora Linux / stable for Red hat Linux 9 (i386) Server: Red Hat Linux 9 П386) Server: Red Hat Linux 9 П386) updates Finding updated packages Downloading needed headers getting /var/cache/yum/fedora-stable/headers/leafnode-0-1.9.430. fdr.l.rh90.i386.hdr
getting /var/cache/yutn/fedora-stable/headers/libzvt-devel-0- 2.0 .1-0.fdr,5.rh90.i386.hdr Dependencies resolved I will do the following: [install : tuxpaint-2002.10.20-l.i386.rpm] Is this ok [y/N]:
Ответьте утвердительно, и на этом все будет закончено.


Отредактируйте список источников загрузки в файле /etc/yum.conf. Допустим, вы хотите использовать некоторые зеркала Fedora по адресу http://www.fedora.us/wiki/FedoraMirrorList:


Сначала обновите список пакетов:
# yum check-update
Новые пакеты устанавливаются командой
# yum -у install tuxkart
Флаг - у включает режим автоматизированной установки (с положительными ответами на все вопросы).
Чтобы обновить один пакет, воспользуйтесь командой
# yum update gltron
Обновление нескольких пакетов:
# yum update gltron ktron tuxracer
Обновление всех установленных пакетов:
# yum update
Поиск устанавливаемого пакета:
# yum search quake
Допустим, вам нужна конкретная библиотека, но вы не знаете, какой пакет предоставляет ее. Найдите ее с помощью yum:
2.17. Получение информации об установленных пакетах в yum # yum provides libc6.1-1.so.2



Yum позволяет решить и эту задачу:
# yum remove gltron
Одновременное удаление нескольких пакетов:
# yum remove gltron ktron tuxkart xpoker


Используйте команды запросов yum. Следующая команда выводит список всех установленных пакетов:
# yum list installed


Воспользуйтесь параметром clean. Следующая команда удаляет все кэшированные пакеты:
# yum clean packages
Загрузка обновленных заголовков пакетов:
# yum clean headers
Удаление из системы старых, ненужных заголовков:
# yum clean oldheaders
Удаление кэшированных пакетов и старых заголовков с сохранением текущих заголовков:
# yum clean all

Пакеты Debian устанавливаются из официальных архивов пакетов Debian, неофициальных архивов и с дисков CD-ROM. Источники указываются в файле /etc/apt/sources.list, после чего система управления пакетами Debian используется для установки пакетов из источников.
Списки адресов сайтов для загрузки программ:
официальное зеркало Debian — http://www.debian.org/mirror/; неофициальные архивы APT — http://www.apt-get.org. Список поставщиков дисков CD-ROM по всему миру:
http://www.debian.org/CD/vendors/; Для поиска отдельных пакетов можно воспользоваться страницей поиска Debian:
http://www.debian.org/distrib/packages/.
3.3. Установка пакетов Debian с диска CD-ROM Следующим шагом должно стать редактирование файла /etc/apt/sources.list и занесение в него выбранных источников.



Измените файл /etc/apt/sources.list командой apt-cdrom; это единственный способ включения архивов на CD-ROM в sources.list. Диск должен находиться в дисководе, но монтировать его не обязательно. Затем введите команду:
# apt-cdrom add Using CD-ROM mount point /cdrom/ Unmounting CD-ROM Please insert a Disc in the drive and press enter Mounting CD-ROM Identifying.. [OeabcO3dlO414e59dfal622326e2Oda7-2] Scanning Disc for index files.. Found 1 package indexes and 0 source indexes. This Disc is called: 'Libranet GNU/Linux 2.8.1 CD2' Reading Package Indexes...Done

Воспользуйтесь командой apt-get install:
# apt-get install tuxkart
Установка пакета с перезаписью файлов:
# apt-get install --reinstall tuxkart
3.5. Удаление пакетов из системы Debian Чтобы установить сразу несколько программ, перечислите их, разделяя пробелами:
# apt-get install tuxkart gltron frozen-bubble tuxracer nethack galaga
Загрузка программ без установки или распаковки:
# apt-get -d install tuxkart
Чтобы протестировать команду перед выполнением, присоедините к строке ключ --dry-run:
# apt-get install tuxkart gltron frozen-bubble tuxracer nethack galaga --dry-run


Воспользуйтесь командой apt-get remove:
# apt- get remove tuxpaint Reading Package Lists... Done Building Dependency Tree... Done The following packages will be REMOVED: tuxkart 0 upgraded. 0 newly installed. 1 to remove and 79 not updated. Need to get OB of archives. After unpacking 188 kB disk space will be freed. Do you want to continue? [Y/n]у (Reading database ... 141283 files and directories currently installed.) Removing tuxkart...



Воспользуйтесь командой apt-get source и содействием dpkg. Для начала загрузите заголовки и библиотеки, от которых зависит устанавливаемая программа, в каталог, в котором будет строиться пакет:
# cd /usr/src # apt-get build-dep tuxkart
Загрузка и сборка пакета:
# apt-get -b source tuxkart
Установка пакета:
# dpkg -i tuxkart.deb


Воспользуйтесь командой apt-get install:
# apt- get install gltron Reading Package Lists... Done Building Dependency Tree... Done The following packages will be upgraded: gltron 1 upgraded, 0 newly installed, 0 to remove and 78 not upgraded. Need to get 89.5kB of archives. After unpacking 266kB of additional disk space will be used. Get:l ftp://ftp.debian.org sid/main gltron 3.53 [89.5kB] Fetched 89.5kB in 5s (16.8kB/s) Preconfiguring packages... (Reading database... 141286 files and directories currently installed.) Preparing to replace adduser 3.52 (using .../archives/adduser_3.53_all.deb)... Unpacking replacement gltron.. . Setting up adduser (3.53)... #
Обновление нескольких пакетов:
# apt-get install tuxkart gltron frozen-bubble tuxracer nethack galaga


Убедитесь в том, что файл /etc/apt/sources. list содержит ссылки на нужные источники, а затем выполните команду apt-get upgrade.


Прежде всего отредактируйте файл /etc/apt/sources.list, чтобы в нем содержались только записи Sarge. Затем выполните следующие команды:
# apt-get update # apt-get -u upgrade # apt-get -u dist-upgrade
Флаг -u позволяет сначала просмотреть список изменений. В зависимости от скорости подключения к Интернету и количества необходимых пакетов процедура может занять несколько часов.
3.10. Создание смешанной системы Debian


Отредактируйте файл /etc/apt/sources.list так, чтобы в нем содержались ссылки на источники как для стабильной, так и тестовой версий (за информацией о файле sources.list обращайтесь к разделу 3.2. Затем отредактируйте /etc/apt/apt.conf и задайте версию по умолчанию (в нашем примере это стабильная версия). Затем при установке или обновлении пакетов нужная версия выбирается при помощи флага -t.
Отредактированный (или созданный) файл /etc/apt/apt.conf должен выглядеть примерно так:
// Версия системы по умолчанию. // Допустимые значения: woody, sarge, sid // (или stable, testing, unstable) APT::Default-Release "stable";
Далее производится обновление списков пакетов:
# apt-get update
Сейчас по умолчанию используется стабильная версия, поэтому указывать ее при установке пакетов не обязательно. Следующая команда устанавливает Tuxkart из стабильной версии:
# apt-get install tuxkart
Для установки пакета из тестовой версии (Sarge) воспользуйтесь ключом -t:
# apt-get -t testing install tuxkart
Чтобы гарантированно получить конкретную версию, укажите номер пакета:
# apt-get install tuxkart-0.2.0-3

Воспользуйтесь средствами обработки запросов dpkg. Следующая команда выводит список всех установленных пакетов и направляет его в файл:
$ dpkg -l | tee dpkgiist
Поиск всех пакетов, удовлетворяющих критерию поиска, и вывод информации об их состоянии:
$ dpkg -l '*gnome*'
Desired=Unknown/Install/Remove/Purge/Ноld | 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
Поиск установленных пакетов, удовлетворяющих критерию поиска:
$ dpkg -l | grep gnome
Вывод списка файлов, входящих в пакет:
$ dpkg -L gnome-applets . /usr/share /usr/share/lintian
3.11. Поиск программ, установленных в системе Debian /usr/share/lintian/overrides /usr/share/lintian/overrides/gnome-applets ...
Следующая команда определяет, к какому пакету относится файл:
$ dpkg -S boing.wav tuxkart-data: /usr/share/games/tuxkart/wavs/boing.wav
Вывод полной информации о пакете:
$ dpkg -s kpoker Package: kpoker Status: install ok installed Priority: optional Section: games Installed-Size: 428 Maintainer: Daniel Schepler <schepler@debian.org> Source: kdegames Version: 4:3.1.5-1 ...


Воспользуйтесь программами apt и dpkg.
Не забывайте выполнять команду apt- get update после модификации файла /etc/apt/sources.list, а также регулярно выполняйте ее, чтобы список пакетов оставался актуальным.
Следующая команда выводит список загруженных, но не установленных пакетов:
$ dpkg --yet-to-unpack
Проверка нарушенных зависимостей:
$ apt-get check
Удаление кэшированных пакетов, которые стали ненужными:
$ apt-cache autoclean
Удаление всех кэшированных пакетов:
$ apt-cache clean
Вывод списка частично установленных пакетов:
$ dpkg --audit
Если вызов dpkg --audit возвращает какие-либо результаты, как в следующем случае:
$ dpkg --audit vpw (no information available)
для начала убедитесь в том, что возвращаемый пакет существует:
$ dpkg -l vpw Package 'vpw' is not installed and no info is available
Если пакет существует, либо завершите установку, либо удалите ее. Если пакет не установлен, поищите соответствующую запись в /var/lib/dpkg/available и /var/lib/dpkg/status и удалите ее.


Существует несколько команд, которые могут пригодиться для решения этой задачи; в этом разделе они перечисляются в том порядке, в котором их стоит попробовать.
Допустим, проблемы возникли с пакетом libpam-modules, который не желает обновляться:
# apt-get install libpam-modules ... The following packages have unmet dependencies: libpam-modules: Depends: libdb3 (>=3.2.9-19.1) but 3.2.9-19 is to be installed E: Broken packages
Если вы работаете в смешанной системе, для начала попробуйте указать версию:
# apt-get install -t stable libpam-modules
Если это не помогает или система не является смешанной, попробуйте воспользоваться системой разрешения конфликтов Debian:
# apt-get -f install
Затем выполните команду:
# dpkg --configure -a
И снова повторите команду:
# apt-get -f install
Если будет получен следующий ответ, значит, попытка завершилась неудачей:
Reading Package Lists... Done Building Dependency Tree... Done 0 upgraded, 0 newly installed. 0 to remove and 1 not upgraded.
Теперь проверьте, что произойдет при удалении существующего пакета libpam-modules:
# apt-get remove --dry-run libpam-modules Reading Package Lists... Done Building Dependency Tree... Done The following packages will be REMOVED:



Воспользуйтесь программой apt-proxy:
# apt-get proxy
apt-proxy запускается автоматически после установки.
Теперь отредактируйте секцию add_backend/debian/ файла /etc/apt-proxy/aptproxy. conf так, чтобы она содержала ссылки на географически близкие зеркала (список зеркал с пакетами находится по адресу http://www.debian.org/mirror/list).
Затем отредактируйте файл /etc/apt/sources.list на клиентских компьютерах так, чтобы он содержал ссылку на сервер apt-proxy. По умолчанию используется порт 9999:
deb http://ip-or-hostname:9999/main stable main contrib non-free deb http://ip-or-hostname:9999/non-US stable/non-US main contrib non-free deb http://ip-or-hostname:9999/security stable/updates main contrib non-free
Запустите apt-get update на клиентских машинах, и локальный архив начнет работать. Каждый раз, когда клиентский компьютер в локальной сети устанавливает программу, эта программа будет кэшироваться на сервере apt-proxy. Последующие запросы того же пакета будут обслуживаться из локального кэша.


По умолчанию записи /etc/apt-proxy.apt-proxy.conf выглядят так:
add_backend /debian/ \ $APT_PROXY_CACHE/debian/ \ http://ftp.us.debi an.org/debian/ \ http://ftp.de.debian.org/debian/ \ http://ftp.uk.debian.org/debian/ \ +ftp.us.debian.org::debian/
На сайте http://www.debian.org/mirror/ list приведен текущий списокзеркал Debian. Например, вот некоторые германские зеркала в mirror/list:
DE Germany ---------- ftp.de.debian.org /debian/ /debian/ ftp2.de.debian.org /debian/ /debian/ ftp.tu-clausthal.de /pub/linux/debian/ /pub/linux/debian/ debian.uni-essen.de /debian/ /debian/
Замените стандартные записи apt-proxy.conf своими, предваряя каждую запись префиксом http://:
add_backend /debian/ \ $APT_PROXY_CACHE/debian/ \ http://ftp.de.debian.org/debian/ \ http://ftp2.de.debian.org/debian/ \ http://ftp.tu-clausthal.de/pub/linux/debian/ \
Файлы /etc/apt/sources.list на клиентских компьютерах изменять не нужно.


Сначала запустите apt- get update по крайней мере на одном клиентском компьютере, чтобы инициализировать кэш. Затем на сервере выполните команду
# apt-proxy-import -d /var/cache/apt/archives См. также
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; конкретные библиотеки или утилиты для компилируемых программ. Общие средства разработки Linux:
GNU coreutils — большой набор важнейших системных утилит: shellutils, fileutils и textutils. Полный список можно найти по адресу http://www.gnu.org/software/coreutils/ (также можно воспользоваться командой info coreutils); GNU binutils — утилиты для работы с двоичными файлами (http://www.gnu.org/software/binutils); gcc — коллекция компиляторов GNU, в том числе для языков С, C++, Objective- C, Fortran, Java и Ada, а также библиотеки для этих языков; GNU tar — утилита для создания архивов исходных текстов (как правило, имена файлов заканчиваются суффиксом .tar); gunzip — утилита сжатия, часто используемая в сочетании с tar. Имена таких файлов заканчиваются суффиксом tar.gz; bunzip2 — формат сжатия для упаковки и распаковки архивов; имена файлов заканчиваются суффиксом .bz2; make — утилита для чтения параметров конфигурации и построения файлов программ. В документации к приложению должна содержаться вся информация, необходимая для его успешной сборки.


Стандартными средствами Linux сгенерируйте список всех файлов в системе перед установкой. Затем сгенерируйте аналогичный список после установки и сравните два списка командой diff. В результате вы получите список установленных файлов. В следующем примере используется программа JOE (Joe's Own Editor):
# find / | grep -v -e A/proc/ -e Vtmp/ -e ~/dev/ > joe-preinstall.list
Откомпилируйте и установите новую программу, затем сгенерируйте список файлов после установки:
# find / | grep -v -e */proc/ -e */tmp/ -e */dev/ > joe-postinstall.list
Затем создайте список установленных файлов, сравнив два списка командой diff:
$ diff joe-preinstall.list joe-postinstall.list > joe-installed.list

Распакуйте tar-архив. Запустите сценарий configure, затем make и make install. 4.4. Установка программ по исходным текстам Начните с каталога, в котором хранятся tar-архивы и каталоги с исходными текстами. В следующем примере используется программа JOE (Joe's Own Editor):
# cd /usr/src/downloads # tar zxvf joe-2.9.8.tar.gz # cd joe-2.9.8 # ls # less README # less INFO # ./configure --help # ./configure <options, if needed> # make # make install | tee joe-makeinstall
Последняя команда сохраняет выходные данные установки в текстовом файле joe-makeinstall.
Некоторые программы архивируются утилитой bzip2 вместо более традиционной утилиты gzip. Распаковка архивов .bz2 осуществляется так:
# tar jxvf joe-2.9.8.tar.bz2
Удаление программ, построенных по исходным текстам, производится командой
# make uninstall
Такой способ работает только в том случае, если автор программы включил поддержку make uninstall. Если файлы приходится удалять вручную, сохраните вывод make install в текстовом файле. Другой способ — построение списка установленных файлов (см. раздел 4.3).

Воспользуйтесь CheckInstall. Выполните следующие команды (в данном примере, как и в предыдущем, используется программа JOE в системе Debian):
# mkdir /doc-pak # tar zxvf joe-2.9.8.tar.gz # cd joe-2.9.8 # ./configure # make # checkinstall -D
CheckInstall заменяет make install, поэтому команда должна выполняться из корневого каталога дерева исходных текстов. Выполните инструкции, отображаемые в процессе работы. Программа строит и устанавливает .deb, в чем нетрудно убедиться:
$ dpkg -l | grep joe ii joe 2.9.801 joe's own editor, my fave
Все, программа установлена и готова к работе. Копия пакета остается в каталоге исходных текстов.
Следующая команда строит пакет Slackware:
# checkinstall -S
Построение пакета RPM:
# checkinstall -R
4.5. Создание пакетов по исходным текстам с применением CheckInstall


Воспользуйтесь программой lspci:
# /sbin/lspci -vv


Воспользуйтесь программой dmesg. Программа выводит список всего оборудования, обнаруженного ядром.
Чтобы просмотреть весь вывод dmesg, введите команду
$ dmesg | less
5.3. Сбор информации об оборудовании программой dmesg Выходные данные dmesg также можно отфильтровать для поиска конкретных устройств. Так, следующая команда выводит список всех устройств PCI:
$ dmesg | grep -i usb
Вывод списка устройств ISA:
$ dmesg | grep -i isa isapnp: Scanning for PnP cards... isapnp: SB audio device quirk - increasing port range isapnp: Card 'SupraExpress 56i Voice'
Определение объема физической памяти в системе:
$ dmesg | grep -i memory Memory: 256492/262080k available (1467k kernel code. 5204 reserved. 516k data. 96k init . OK highmem)
Вывод списка устройств IDE, использующих подсистему эмуляции SCSI в ядре 2.4 и более старых версий:
$ dmesg | grep -i scsi Kernel command line: root=/dev/hda6 ro hdb=scsi hdc=scsi ide_setup: hdb=scsi ide_setup: hdc=scsi SCSI subsystem driver Revision: 1.00 hdb: attached ide-scsi driver hdc: attached ide-scsi driver scsio: SCSI host adapter emulation for IDE ATAPI devices ...
А вот как выглядят «настоящие», не эмулированные устройства SCSI:
$ dmesg | grep -i scsi SCSI subsystem driver Revision: 1.00 scsi0: Adaptec AIC7XXX EISA/VLB/PCI SCSI HBA DRIVER, Rev. 6.2.8 <Adaptec aic7892 Ultral60 SCSI adapter» aic7892: Ultral60 Wide Channel A, SCSI Id=7. 32/253 SCBs ...Vendor: IBM-PSG Model:DPSS-336950M M Rev: S9HA Attached scsi disk sda at scsi0, channel 0. id 0. lun 0 (scsi0:A:0): 160.000MB/S transfers (80.000MHz DT. offset 63. 16bit) SCSI device sda: 71096640 512-byte hdwr sectors (36401 MB) Partition check: sda: sda1 sda2 sda3 sda4 < sda5 sda6 >
Далее показана информация о камере USB, подключенной к системе, включая ее местонахождение в файловой системе. Обычно информация об устройстве USB занимает десяток строк и более:
% dmesg | grep -i usb ... usb.с: registered new driver ibmcam icmcam.c: IBM PC Camera USB camera found (model 2. rev. 0x030a) usbvideo.c: ibmcam on /dev/video0: canvas=352x240 videosize=352x240
Вывод информации о последовательных портах:
$ dmesg | grep -i tty ttyS00 at 0x03f8 (irq = 4) isa 16550A
Вывод информации о процессоре (или процессорах):
$ dmesg | grep -i cpu Initializing CPU#0 CPU: LI I Cache: 64K (64 bytes/line). D cache 64K (64 bytes/line)


Прочитайте данные из виртуальной файловой системы /proc. Для чтения данных из /proc следует применять только cat и утилиты, предназначенные специально для этой цели (например, sysctl, lspci, ps и top). Синтаксис cat остается неизменным:
$ cat /proc/файл
Выполняя с /proc те же операции, что и с обычными файловыми системами, вы сможете легко найти нужную информацию. Информация об оборудовании хранится в каталогах с соответствующими именами:
$ ls /proc bus cmdline cpuinfo devices dma driver filesystems ide kcore kmsg ksyms loadavg meminfo misc modules mounts mtrr partitions pci scsi swaps sys tty
Вывод информации о процессоре:
$ cat /proc/cpuinfo processor : 0 vendor id : AuthenticAMD
5.4. Получение текущей сводки оборудования с использованием /proc cpu family : 6 model : 3 model name : AMD Duron(tm) Processor stepping : 1 cpu MHz : 801.442 ...
Вывод информации о физической и виртуальной памяти:
$ cat /proc/meminfo total: used: free: shared: buffers: cached: Mem: 262746112 237740032 25006080 0 11575296 150138880 Swap: 534601728 81661952 452939776 MemTotal: 256588 kB MemFree: 24420 kB ...
Вывод информации о жестком диске IDE:
$ cat /proc/ide/via --------VIA BusMastering IDE Configuration-------- Driver Version: 3.37 South Bridge: VIA vt82c686a Revision: ISA 0x22 IDE 0x10 Highest DMA rate: UDMA66 ...
Вывод информации о геометрии диска (как физической, так и логической):
$ cat /proc/ide/ide0/hda/geometry physical 39870/16/63 logical 2501/255/63
Идентификация диска:
$ cat /proc/ide/ide0/hda/model IBM-DTLA-305220
Вывод информации об устройствах SCSI (обратите внимание: команда не различает устройства, подключенные к шине SCSI, и устройства IDE, использующие подсистему эмуляции SCSI; в данном случае речь идет о дисководах CD-ROM с интерфейсом IDE):
$ cat /proc/scsi/scsi Attached devices: Host: scsi0 Channel: 00 Id: 00 Lun: 00 Vendor: TOSHIBA Model: DVD-ROM SD-M1202 Rev:1020 Type: CD-ROM ANSI SCSI revision: 02 Host: scsi0 Channel: 00 Id: 01 Lun: 00 Vendor: LITE-ON Model: LTR-24102B Rev:5S54 Type: CD-ROM ANSI SCSI revision: 02


Воспользуйтесь программой fdisk. Вывод информации обо всех разделах на всех жестких дисках:
# /sbin/fdisk -l Disk /dev/hda: 20.5 GB, 2057674520 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/hda4 1034 2501 11791710 f W95 Exf d (LBA) /dev/hda5 2437 2501 522081 82 Linux swap /dev/hda6 1034 1670 5116639+ 83 Linux /dev/hda7 1671 2436 6152863+ 83 Linux
Вывод таблицы разделов для отдельного диска:
# /sbin/fdisk -l /dev/hda Disk /dev/hda: 20.5 GB, 20576747520 bytes 255 heads, 63 sectors/track, 2501 cylinders Units - cylinders of 16065 * 512 = 8225280 bytes


Включите режим электронной справки, поддерживаемый во всех режимах JOE. Для запуска JOE в режиме справки воспользуйтесь командой
$ joe -help


Создайте персональный файл .joerc с описанием нужной конфигурации и сохраните его в своем домашнем каталоге. Для начала загляните в /etc/joe, где хранятся файлы инициализации JOE по умолчанию:
$ ls /etc/joe jmacsrc joerc jpicorc jstarrc rjoerc terminfo
Воспользуемся файлом joerc для «обычного» JOE, который не пытается прикидываться кем-то другим. Скопируйте файл в свой домашний каталог и сделайте его скрытым, сохранив прежнее имя:
$ joe -linums -help /etc/joe/joerc ^K D Name of fil e to save ^С to abort): ~/.joerc Could not make backup file . Save anyway (y,n,^C)? Y File ~/.joerc saved
«^» означает клавишу Ctrl. Регистр символов команд не имеет значения; К D — то же самое, что k d.
Хотя .joerc позволяет управлять всеми аспектами работы JOE вплоть до мелочей, самые полезные параметры собраны в первых двух секциях. Например:
-marking Текст между ^К В и курсором выделяется (используется с -lightoff)
-force Вставка завершающего перевода строки при сохранении файла
-lightoff Снятие выделения после копирования или перемещения блока
-exask ^K X всегда запрашивает подтверждение имени файла
Неактивные параметры начинаются с пробела или символа табуляции. Чтобы активировать параметр, удалите начальный пробел и убедитесь в том, что строка сдвинута до предела влево.


Сохраните изменения в отдельном файле, который в нашем примере будет называться .joercprefs. Загрузите этот файл, включив следующую строку в начало .joerc, в любую позицию до начала «первой секции». Обязательно включите начальное двоеточие и выровняйте директиву по левому краю:
:include .joercprefs


Откройте в JOE два окна: для ~/.joerc и для нового файла ~/.joercprefs. Скопируйте нужные параметры из ~/.joerc в ~/.joercprefs. Сначала создайте резервную копию оригинала ~/.joerc:
$ ср ~/.joerc ~/.joerc.bak
Откройте ~/.joerc, затем откройте второе окно и присвойте имя новому файлу:
$ joe -linums -help ~/.joerc ^К О ^К Е Name of file to edit (^C to abort): ~/.joercprefs


Команда ^K F обеспечит любые потребности в области поиска и замены. Для проведения нетривиального поиска применяются специальные служебные последовательности, называемые регулярными выражениями.
Итак, введите команду ^K F. Клавиши «вверх» и «вниз» позволяют выбрать из списка предыдущий критерий поиска и замены. Комбинация ^L продолжает поиск без применения замены.
Допустим, вы хотите найти в документе все вхождения слова «nucular» и заменить их правильным написанием «nuclear». Вот как это делается:
^K F Find (^С to abort): \<nucular\> (I)gnore (R)eplace (B)ackwards Bloc(K) NNN(^С to abort): r Replace with (^C to abort): nuclear Replace (Y)es (N)o (R)est (B)ackup (X to abort)? r
6.7. Вертикальное выделение текста в JOE Обратите внимание на последовательности \< и \>. Они указывают JOE, что поиск должен ограничиваться целыми словами. Без них JOE найдет все вхождения строки, даже находящиеся внутри других слов.
Возможно, вместо замены написания вы предпочтете заключить неверное слово в кавычки:
Replace with (^С to abort): "\&"
Или еще более экзотический вариант:
Replace with (^C to abort): "It's nuclear, not "\&" dammit!!"
Поиск совпадения только в начале строки:
\^nucular
Поиск совпадения только в конце строки:
nucular\$
Чтобы найти пропуски, нажмите «пробел» и символ табуляции в квадратных скобках:
\[ ]
Поиск любого из символов, указанного в квадратных скобках (для поиска без учета регистра символов):
\[Nn]ucular См. также
joe(1); раздел «The special search sequences» в электронной справке JOE.



Воспользуйтесь режимом прямоугольного выделения.
Режим включается командой ^ T X. Выделите блок текста командами ^K B и ^K K, а затем выполните с ним нужную операцию.


Для поиска файлов в JOE используйте команды ^K R и ^ K E. Эти команды либо открывают существующий файл, либо создают новый файл:
^K E Name of the file to edit (^C to abort):
Имена существующих файлов расширяются клавишей Tab. В данном примере введите .ga, а затем два раза нажмите Tab. JOE автоматически вставляет звездочку при нажатии Tab, так что вводить этот символ не нужно.
^K E Name of the file to edit (AC to abort): .ga* .gaby/ .gaim/ .gaimrc .galeon/
Клавиша Enter осуществляет переход «вниз» по дереву файлов, a Backspace — «вверх», по направлению к корневому каталогу. Клавиша Tab выбирает файл.
Следующая команда вставляет существующий файл в позиции курсора:
^K R Name of the file to edit (^C to abort):
Запомните команды управления окнами:
^K O — открытие нового окна; ^K I — отображение всех окон/скрытие неактивных окон; ^K P и ^K N — перемещение между окнами.


Запустите программу обучения Vim; для этого достаточно ввести vimtutor в командной строке. Через 30-60 минут вы будете управляться с программой, как бывалый профессионал. Это самый лучший и быстрый способ.


Воспользуйтесь сокращениями Vim. Сокращения создаются в нормальном режиме:
:ab th This is an example of a Vim abbreviation.
Чтобы воспользоваться сокращением, переключитесь в режим вставки и введите символы th, за которыми следует пропуск (пробел, символ табуляции или возврат курсора).
Просмотр списка всех сокращений:
tab
Удаление сокращения:
:unabbreviate th
Удаление всех сокращений:
:abclear
Сокращения, как и все параметры конфигурации Vim, можно сохранять в файле ~/.vimrc.


Команда map связывает нажатия клавиш с произвольной командой или текстовой строкой в нормальном режиме; команда map! определяет нажатия клавиш для режима вставки. Чтобы просмотреть текущие назначения, введите команду :map или :map! без параметров.
ВНИМАНИЕ
Будьте осторожны при создании собственных привязок — не используйте клавиши, с которыми в Vim уже связаны операции, поскольку команда map выполнит ваше требование и заменит их, не сказав ни слова. Кстати говоря, по этой причине стоит сначала как следует освоить Vim, а уже потом приступать к экспериментам с привязкой.
Новая привязка создается командой вида
:map <F3> :runtime! syntax/2html.vim
Команда включает теги HTML в текущий документ в новом окне. Для ее активации будет использоваться клавиша F3.
Удаление привязок осуществляется командой вида
:unmap <F3>
Имена клавиш Esc, <CR> и <F2>-<F12> приходится записывать в особом виде, потому что при простом нажатии клавиша выполнит ту команду, которая за ней закреплена.
В следующем примере с клавишей F3 связывается команда, которая включает режим вставки, заключает слово между тегами HTML и выходит из режима вставки, чтобы вы могли продолжить печать:
:map <F3> i<B><Esc>ea</B><Esc>a
Приведу несколько примеров привязок режима вставки для быстрого добавления тегов HTML. Они быстро работают, потому что выполняются без выхода из режима вставки. Маловероятно, чтобы такие комбинации запятых с буквами встретились в обычном тексте.
:map! .ah <A href=""> :map! .а </А> :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 с нужными параметрами. Либо создайте файл заново, либо скопируйте и отредактируйте глобальный файл /etc/vim/vimrc. Что можно сохранить в файле ~/.vimrc? Любые значения параметров Vim. Чтобы узнать имена всех параметров, введите команду
:set all aleph=224 noarabic arabicshape noallowrevins noaltkeymap ...
Затем посмотрите, что означает каждый параметр:
:help noaltkeymap
Следующая команда открывает информацию о параметрах в виде справочной страницы с гиперссылками:
:help options


Воспользуйтесь маркерами Vim для сохранения позиции курсора (по аналогии с книжными закладками).


Нет проблем — создайте сеанс (session). Сеанс Vim сохраняет всю рабочую среду и восстанавливает ее в прежнем виде при следующем запуске сеанса. Достигнув точки, в которой вам хотелось бы сохранить свою рабочую среду, сохраните все открытые файлы, затем задайте имя сеанса:
:wall :mksession myarticle.vim
В данном примере создается файл сеанса myarticle.vim. Чтобы вернуться к сохраненному сеансу, введите команду
$ vim -S myarticle.vim 6.14. Сеансы Vim После работы в этом сеансе у вас есть два варианта. Либо сохраните все изменения под тем же именем:
:mksession! myarticle.vim
либо организуйте доморощенный «контроль версии», сменив имя сеанса:
:mksession myarticle_rev2.vim
Также возможно перейти к другому сеансу без завершения программы:
:wall :mksession! myarticle_rev2.vim :source myarticle.vim
У сеансов есть еще одно интересное применение: создайте идеальную рабочую среду и сохраните ее на будущее:
$ vim :help ^W w :vertical split /~
Результат показан на Рисунок 6.1.

Рисунок 6.1. Создание идеальной рабочей среды
Увеличьте окно с деревом файлов и уменьшите окно справки, чтобы вам было удобно с ними работать. Команда ^W w используется для переключения между окнами,а команда ^W + (или -) — для изменения их размеров. Добившись идеального результата, сохраните конфигурацию командой :mksession 3pane.vim (Рисунок 6.2).


Отредактируйте переменные окружения в файлах ~/.bashrc или ~/.bash_profile. Файл ~/. bashrc является предпочтительным, потому что он распространяется на
6.16. Определение параметров компиляции Vim все экземпляры командного процессора, открытые во время сеанса. Содержимое файла ~/.bash_profile читается только во время входа в систему.
Включите в ~/.bashrc следующие строки:
EDITOR=vim VISUAL=$EDITOR export EDITOR VISUAL
Разумеется, вы можете задать любой редактор по своему выбору. Обычно рекомендуется использовать консольные текстовые редакторы вроде JOE, Pico, Vim или Emacs. Также можно выбрать редактор X вроде Kwrite или GEdit, но учтите, что в некоторых ситуациях система X может быть недоступна, поэтому такой выбор подходит не всегда. Важно использовать обе переменные, VISUAL и EDITOR. Старое название VISUAL является пережитком прошлого, но некоторые программы по-прежнему используют его.
Проследите за тем, чтобы файл ~/.bashrc был включен в ~/.bash_profile:
# include .bashrc if it exists if [ -f ~/.bashrc ]; then source ~/.bashrc fi См. также
bash(1).



Запустите Vim и введите команду
:version
Команда выводит все параметры компиляции и местонахождение инициализационных файлов в системе.


Используйте init. Сначала проверьте текущий уровень выполнения:
# /sbin/runlevel N 5
«N» означает, что уровень после загрузки не изменялся. Если бы это произошло, то в выходных данных отображался бы исходный уровень. Для смены уровня выполнения необходимо обладать правами root:
# /sbin/init 3
Команда останавливает все службы уровня 5 и запускает службы уровня 3. Происходящее напоминает «частичную перезагрузку». Все пользователи принудительно выводятся из системы.
При решении особо серьезных проблем иногда требуется переключиться на уровень 1:
# /sbin/init 1
Команда останавливает X и переводит вас в командный процессор с правами root, с ограниченным набором служб и без X. В Red Hat после спуска на уровень 1 не нужно вводить пароль root, поэтому не предоставляйте доступ к init sudo-пользователям.

Откройте файл /etc/inittab и найдите следующую запись:
# Уровень выполнения по умолчанию id:2:initdefault:
Просто замените 2 другой цифрой (кроме 0 или 6).
Если вы предпочитаете иметь свободу выбора на стадии загрузки, закомментируйте строку id:X:initdefault. Init предложит выбрать уровень выполнения во время загрузки.
7.4. Запуск и остановка X


Существует несколько способов. Лучше всего настроить один уровень выполнения на загрузку текстовой консоли, а затем запустить X в нужный момент командой startx:
$ startx
После этого простой выход из сеанса X будет приводить к завершению X. Вы не будете выходить из Linux, только из X.
Во многих дистрибутивах на уровне 3 загружается текстовая консоль. В Red Hat, Fedora, Mandrake и SuSE на уровне 5 загружается графическая программа входа в систему. В Slackware это делается на уровне 4.
Возможно, пользователям Debian придется предпринять дополнительные действия, потому что в Debian уровни 2-5 идентичны. Настройка уровней выполнения в Debian рассматривается в разделе 7.6.


Воспользуйтесь командой update-rc.d. В следующем примере на уровне 5 добавляется новая служба KDE Display Manager. kdm — имя запускаемого файла в /etc/init.d. Список уровней выполнения должен завершаться точкой:
# update-rc.d kdm start 99 5 . stop 01 0 1 2 3 4 6 .
Следующая команда удаляет службу на всех уровнях выполнения. Удаление не может быть избирательным; удаляется либо всех, либо ничего.
# update-rc.d -f kdm remove
Изменение уровня выполнения для существующей службы производится в два этапа: сначала удалите службу, а затем добавьте ее на нужных уровнях. Обязательно создайте записи для всех служб на всех уровнях, как для запуска, так и для остановки.


Сначала узнайте, какой экранный менеджер используется в вашей системе, после чего добавьте или удалите его на соответствующих уровнях. Проверка выполняется так:
$ ps ах | grep dm 537 ? S 0:00 /usr/bin/kdm 544 ? S< 0:10 /usr7XllR6/bin/X :0 -dpi 100 -nolisten tcp vt7 -auth /var/ lib/kdm/A:O-PbCldj
В системе работает kdm, экранный менеджер К. Сначала удалите его на всех уровнях:
# update-rc.d -f kdm remove update-rc.d: /etc/init.d/kdm exists during rc.d purge (continuing) Removing any system startup links for /etc/init.d/kdm ... /etc/rc0.d/K01kdm /etc/rcl.d/K01kdm /etc/rc2.d/S99kdm /etc/rc3.d/S99kdm /etc/rc4.d/S99kdm /etc/rc5.d/S99kdm /etc/rc6.d/K01kdm
Обеспечьте запуск kdm на 5 уровне и его остановку на остальных уровнях:
# update-rc.d kdm start 99 5 . stop 01 1 2 3 4 6 . Adding system startup for /etc/init.d/kdm ... /etc/rc0.d/K01kdm -> ../init.d/kdm /etc/rcl.d/K01kdm -> ../init.d/kdm /etc/rc2.d/K01kdm -> ../init.d/kdm /etc/rc3.d/K01kdm -> ../init.d/kdm /etc/rc4.d/K01kdm -> ../init.d/kdm /etc/rc5.d/K01kdm -> ../init.d/kdm /etc/rc6.d/S99kdm -> ../init.d/kdm
Очень важно, чтобы для каждого уровня существовала запись, которая бы явно запускала или останавливала каждую службу. Приоритет всегда состоит из двух цифр; 99 — наименьший приоритет.
Наконец, отредактируйте файл /etc/inittab так, чтобы выбранный уровень использовался по умолчанию:
# Уровень выполнения по умолчанию id:3:initdefault:
Новый уровень вступает в силу после перезагрузки. Если закомментировать эту строку, вам будет предложено выбрать уровень выполнения во время загрузки.

Воспользуйтесь программой chkconfig. Пример настройки ssh:
# chkconfig --level 2345 ssh on # chkconfig --level 016 ssh off
Вы должны выполнить обе операции — определить, на каких уровнях служба должна запускаться и на каких уровнях она работать не должна. «On» означает запуск, a «off» — отключение службы.
Добавление новой службы на всех уровнях выполнения:
# chkconfig --add ssh
Удаление службы на всех уровнях выполнения:
# chkconfig --del ssh
Со службами xinetd дело обстоит несколько иначе, но для управления ими также используется chkconfig:
# chkconfig ktalk on # chkconfig rsync off
Службы xinetd либо работают, либо нет; они не различаются по уровням. Вывод информации о состоянии всех служб на всех уровнях, включая службы xinetd:
# cnkconfig --list anacron 0:off 1:off 2:on 3:on 4:on 5:on 6:off syslog 0:off 1:off 2:on 3:on 4:on 5:on 6:off cups 0:off 1:off 2:on 3:on 4:on 5:on 6:off apmd 0:off 1:off 2:on 3:on 4:on 5:on 6:off xinetd based services: chargen-udp off rsync: off sgi-fam: on
Вывод информации об отдельной службе:
# chkconfig --list syslog syslog 0:off 1:off 2:on 3:on 4:on 5:on 6:off 7.8. Ручная настройка служб, запускаемых при загрузке


Создайте ссылки в каталогах /rc*. d командой ln. Удалите ссылки для тех служб, которые не будут использоваться.
Например, ссылка для запуска CUPS на уровне 3 создается так:
# ln -s /etc/rc.d/init.d/cups /etc/rc.d/rc3.d/S90cups
Повторите для каждого уровня выполнения. Не забудьте создать ссылки для отключения службы:
# ln -s /etc/rc.d/init.d/cups /etc/rc.d/rc0.d/K01cups
Приоритет задается в интервале 1-99. Наличие процессов с одинаковыми приоритетами не создает проблем; на практике чаще всего встречается приоритет 20. Обычно приоритеты не столь важны, но некоторые функции (например, фильтрация пакетов и ведение журналов) должны обладать приоритетами 1 -10 для раннего запуска и 80 и выше для позднего завершения. Также обратите внимание на последовательность запуска. Например, поддержка сети должна запускаться раньше служб, зависящих от работы сети.



Запустите стартовый сценарий программы в init.d с соответствующими параметрами. Найдите сценарий, прочитайте его и просмотрите состав поддерживаемых параметров. Например, на практике часто выполняется операция перезапуска сетевой поддержки. В файле /etc/init.d/networking присутствует следующая команда:
echo "Usage: /etc/init.d/networking {start|stop|restart|force-reload}"
Подобная строка присутствует в каждом сценарии init. Нужную информацию также можно получить, запустив сценарий без аргументов:
# /etc/init.d/networking Usage: /etc/init.d/networking {start|stop|restart|force-reload}
Таким образом, остановка службы поддержки сети осуществляется командой
$ /etc/init.d/networking stop


Выбор не столь существенен; используйте тот способ, который вам больше подходит. Следующие команды выключения могут использоваться только привилегированным пользователем root:
# shutdown -h now
или
# poweroff
или
# halt
Выключение через шесть минут:
# shutdown -h +6
Команда shutdown рассылает оповещения всем подключенным пользователям. Вы можете указать собственный текст:
# shutdown -h +6 "Time to stop working and start partying."
Консольные пользователи увидят следующее сообщение:
Broadcast message from root (pts/6) Wed Aug 14 13:51:24 2003 Time to stop working and start partying. The system is going DOWN for system halt on 6 minutes!
Чтобы отменить выключение компьютера, выполните следующую команду с правами root:
# shutdown -c
Перезагрузка выполняется командой
# shutdown -r now
или
# reboot
или нажатием Ctrl+Alt+Delete. Любой пользователь может перезагрузить компьютер, если только не отключить данную возможность в /etc/inittab (в разделе 7.11 рассказано, как запретить перезагрузку или предоставить разрешение конкретным пользователям).



Чтобы полностью запретить перезагрузку по Ctrl+Alt+Delete, закомментируйте следующую строку в /etc/inittab:
# са:12345:Ctrlaltdel :/sbin/shutdown -t1 -r now
Чтобы разрешить ее отдельным пользователям, включите в командную строку ключ -а:
са:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
Затем перечислите пользователей, которым разрешено выполнять перезагрузку, в файле /etc/shutdown.allow.


Благодаря cron задача решается элементарно просто. Включите следующий фрагмент в /etc/crontab, чтобы компьютер автоматически выключался каждую ночь в 23:00:
# m h dom mon dow user command 00 23 * * * root /sbin/shutdown -h now


Воспользуйтесь схемой нумерации идентификаторов пользователей в Linux (UID) и возможностью сортировки по полям или столбцам в awk. Пример для системы на базе Debian или Slackware:
$ awk -F: '$3 > 999 { print $0}' /etc/passwd nobody:x:65534:65534:nobody:/nonexistent:/bin/sh carla:x:1000:1000::/home/carla:/bin/bash foober:x:1001:1001::/home/test:/bin/false bitchkat:x:1002:1002::/home/test2/:bin/bash сolby:x:1003:1003::/home/test3:/bin/bash
Отображение подмножества записей:
$ awk -F: '($3 >= 1000) && ($3 <= 1005) { print $0}' /etc/passwd
Для систем Red Hat и SuSE:
$ awk -F: '$3 > 499 { print $0}' /etc/passwd
Алфавитная сортировка результата:
$ awk -F: '$3 > 499 { print $0}' /etc/passwd | sort
Описанный прием особенно удобен тогда, когда схему нумерации UID в группах удается спроектировать заранее. Например:
Trainers 1000-1100; Coaches 1101-1200; Players 1200-2000. Если вы будете придерживаться подобной схемы, в вашем распоряжении появится простой инструмент для сортировки пользователей и их последующего разбиения на группы.


Воспользуйтесь командой id:
$ id carla uid=1000(carla) gid=1000(carla) 8.4. Создание учетной записи пользователя командой useradd groups=1000(carla),20(dialout),24(cdrom),25(floppy),29(audio),30(dip),44(video), 105(windows),432(usb),1001(cdrecording)


Воспользуйтесь командой useradd - m для создания имени пользователя, его домашнего каталога и других переменных окружения; затем назначьте пароль командой passwd -e. До создания пароля учетная запись остается неактивной.
Далее приводится простейший вариант вызова. С флагом -m команда создает домашний каталог и копирует в него файлы из /etc/skel:
# useradd -m имя_пользователя
Как правило, в команду также включается полное имя пользователя с флагом -c (Comment, то есть «комментарий»). Поставьте четыре запятые после имени пользователя, чтобы остальные поля комментария (рабочий телефон и т. д.) остались пустыми.
# useradd -m -с Grace Hopper,,,, ghopper
Имя пользователя должно быть уникальным.
Теперь выполните команду passwd -e. Флаг -e означает, что пароль становится недействительным после первого входа, что заставляет пользователя сменить его:
# passwd -e ghopper Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully
Окружение пользователя формируется на основании стандартного содержимого /etc/default/useradd и /etc/skel. Конфигурация useradd по умолчанию отображается командой
# useradd -D


Введите команду adduser имя_пользователя и введите запрашиваемые данные:
# adduser anitab Adding user anitab... Adding new group anitab (1008). Adding new user anitab (1008) with group anitab.
8.6. Изменение учетной записи пользователя Creating new home directory /home/anitab. Copying files from /etc/ skel Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully Changing the user information for anitab Enter the new value, or press ENTER for the default Full name []: Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct [y/n]у
В командной строке adduser можно указать код UID, переопределяя значение по умолчанию:
# adduser --uid 1500 anitab
Стандартная конфигурация adduser задается в файле /etc/adduser.conf.


Воспользуйтесь командами usermod и chfn.
Изменять можно любые атрибуты, включая имя пользователя и код UID. Чтобы сменить имя, сначала укажите новое имя, а затем старое:
# usermod -l aborg anitab
Следующая команда изменяет UID (в следующем примере исходное значение 1050 меняется на 1200) без изменения имени пользователя. Сначала указывается новый код UID, затем имя:
# usermod -u 1200 anitab
Принадлежность пользователя к группам не изменяется. Все файлы в домашнем каталоге пользователя автоматически обновляются новым кодом UID. Тем не менее вам придется вручную найти и изменить все файлы за пределами домашнего каталога (crontab, почтовые каталоги, временные файлы /tmp и файлы в общих каталогах). Для поиска файлов можно воспользоваться командой find с указанием исходного кода UID, если вы хотите просмотреть список файлов перед внесением изменений:
# find / -uid 1050 /usr/src/include/lber.h /usr/src/include/ldap.h /usr/src/include/ldbm.h
Смена владельца файлов осуществляется командой chown:
# chown 1200 /usr/scr/include/lber.h
Последовательная смена владельца для каждого файла — занятие довольно утомительное. Команды chown и find могут выполнить эту работу за вас:
# find / -uid 1050 -exec chown -v 1200 {} \; changed owner of '/usr/src/include/lber.h' to 1200 changed owner of '/usr/src/include/ldap.h' to 1200 changed owner of '/usr/src/include/ldbm.h' to 1200
Следующая команда перемещает домашний каталог пользователя со всем содержимым. Если новый каталог не существует, он автоматически создается. Сначала указывается новый каталог, а затем имя пользователя. Обязательно используйте флаги -d и -m:
# usermod -d /server1/home/aborg/ -m aborg
Изменение данных GECOS:
# chfn aborg
Пользователь может передать при вызове chfn данные GECOS по своему усмотрению. Исключение составляют два поля: полное имя и «прочее». Содержимое этих полей может редактироваться только суперпользователем.


Учетная запись удаляется командой userdel. Поиск файлов, принадлежащих пользователю, осуществляется командой find.
Удаление учетной записи:
# userdel aborg
Чтобы команда userdel сработала, пользователь не может находиться в системе, и под его именем не должны быть запущены процессы.
Команда userdel удаляет данные пользователя из всех системных файлов (/etc/passwd, /etc/shadow, /etc/group), но не трогает файлы, принадлежащие этому пользователю. Чтобы удалить домашний каталог пользователя и почтовый ящик, добавьте флаг -r:
# userdel -r aborg
Другие файлы (такие, как crontab и файлы данных вне домашнего каталога) приходится искать отдельно:
# find / -uid 1200


Воспользуйтесь программой slay:
# slay foober slay: -KILL is kicking foober's butt! slay: Whoa. I have the power supreme.
Программа slay находит и уничтожает все процессы указанного пользователя, благодаря чему вам не приходится искать и завершать их самостоятельно.

Чтобы временно деактивировать учетную запись, заблокируйте пароль пользователя ключом -l (lock):
8.10. Управление паролями # passwd -l aborg Password changed.
Следующая команда снимает блокировку с учетной записи:
# passwd -u aborg



Операции назначения и настройки паролей осуществляются командой passwd.
Сброс или изменение пароля:
# passwd aborg
Пользователь также может сменить свой пароль:
>aborg@server04:~$ passwd
Следующая команда ограничивает срок действия пароля aborg шестью месяцами, с выдачей предупреждения за пять дней:
# passwd -х 180 -w 5 -i 1 aborg
Чтобы просмотреть пароли пользователя, воспользуйтесь командой
# passwd -S option aborg P 02/18/2004 0 10 5 1


Воспользуйтесь командой groupadd.
Команда создает новую группу по системным значениям, настроенным в /etc/default/useradd и /etc/skel/:
# groupadd newgroup
Системная группа создается с ключом -r:
# groupadd -r newgroup
Ключ -r является специфическим для Red Hat. Если в вашей версии groupadd он не поддерживается, укажите следующий доступный номер системной группы:
# groupadd -g 127 newgroup
Следующий доступный номер группы можно узнать из файла /etc/group.


Сначала, если потребуется, переназначьте номера групп редактированием файла /etc/group. Просто скопируйте данные пользователей и вставьте их в другую группу. Затем удалите группу командой groupdel, после чего воспользуйтесь командами find и chgrp для поиска и передачи права владения файлами другой группе.
Удаление группы:
# groupdel имя_группы
Удаление группы считается хлопотной операцией, потому что не существует утилит для автоматического переноса/удаления файлов или пользователей, входящих в группу. Вам придется самостоятельно найти их и изменить коды GID вручную:
# find / -gid 750 /usr/src/include/lber.h /usr/src/include/ldap.h /usr/src/include/ldbm.h
Изменения можно вносить последовательно:
# chgrp 800 /usr/src/include/lber.h ...
А можно выполнить замену одновременно посредством совместного использования find и chgrp:
# find / -gid 750 -exec chgrp -v 800 {} \; См. также
groupdel(8), find(1), chgrp(1); раздел 8.6.



Задача может быть решена как командой adduser, так и useradd. С adduser это делается примерно так:
# adduser --system --no-create-home --group squid Adding system user squid...

Создание системных групп сценарием addgroup происходит следующим образом:
# addgroup --system группа
В командной строке можно передать код GID, переопределяя значение по умолчанию. Не забудьте придерживаться схемы нумерации групп, принятой в вашем дистрибутиве Linux (или в вашей организации):
# addgroup --system --gid 300 группа См. также
addgroup(8); раздел 8.11.
8.16. Проверка целостности файлов паролей


Отредактируйте файл /etc/groups вручную. Просто скопируйте и вставьте записи; это самый быстрый способ.


Файлы /etc/passwd и /etc/shadow проверяются командой pwck, а файлы /etc/group и /etc/gshadow — командой grpek:
# pwck # grpek
Если команда завершается без выдачи сообщений, значит, ошибки не обнаружены. В противном случае команда выводит перечень ошибок. Ошибки нужно будет исправить, иначе работа программы завершится. Чтобы ограничиться просмотром всех ошибок, запустите программу в режиме «только чтения»:
# pwck -r # grpek -r

Воспользуйтесь сценарием mass_useradd. Это сценарий командного процессора, поэтому он должен работать практически везде. Вам также понадобится сценарий
8.17. Серийное добавление новых пользователей mass_passwd (листинг 8.2). Сохраните эти два сценария в одном каталоге. Также следует установить утилиту pwgen, генерирующую пароли. Создайте список имен и паролей в формате:
имя_пользователя: имя фамилия
Также можно добавить дополнительные данные GECOS:
dawns:Dawn Marie Schroder,,123-4567,trainers
Затем запустите сценарий mass_useradd (листинг 8.1). Сценарий создает записи в /etc/passwd, /etc/group и /etc/shadow, домашние каталоги, персональные группы и пароли, которые становятся недействительными после первого использования.
Следующая команда приказывает mass_useradd использовать список новых пользователей из файла newusers с заменой/созданием выходного файла newlogins.txt:
sh mass_useradd < newusers > newlogins.txt
Присоединение новых имен и паролей к файлу newlogins.txt:
sh massuseradd < newusers >> newlogins.txt
Помимо выходного файла, который представляет собой обычный список, mass_passwd создает для каждого пользователя отдельный файл с инструкциями. Инструкции распечатываются и раздаются пользователям. Эти файлы, а также файл журнала хранятся в домашнем каталоге пользователя, запустившего сценарий (обычно root):
# ls /root/mass_passwds dawns.passwd.txt nikitah.passwd.txt mass_passwd.log rubst.passwd.txt



Воспользуйтесь сценарием mass_passwd из раздела 8.17. Сценарий позволяет задать состав пользователей тремя разными способами:
# mass_passwd пользователь1 пользователь2 ... # masspasswd -g группа группа... # mass_passwd -a
В первом случае передается список имен пользователей, разделенных пробелами.
Во втором случае изменяются пароли пользователей, входящих в указанные группы.
В третьем случае изменяются все пароли из /etc/passwd.


Вставьте список имен прямо в файл /etc/group.
Далее описан быстрый способ построения списка пользователей для вставки в /etc/group. Он основан на схеме нумерации UID, позволяющей легко отсортировать нужную группу пользователей. Для примера воспользуемся схемой «Trainers/Coaches/Players», описанной в разделе 8.2. Добавим в группу Trainers несколько новых членов:
$ awk -F: '($3 >= 1050) && ($3 <= 1060) { print $1}' /etc/passwd | tr '\n' ',' bcool,bkind,frnow,kthxbye,oknodo
Теперь скопируйте и вставьте список в /etc/group.
А если в вашей системе нет аккуратной, четкой схемы нумерации UID? Воспользуйтесь данными GECOS. Выберите одного из полей для хранения метки. Поле «прочее» лучше всего подходит для этой цели, поскольку пользователи не могут изменять его по своему усмотрению. Оно находится в данных GECOS — пяти полей, разделенных запятыми. Данные GECOS выглядят примерно так:
bcool:х:1300:1300:Bob Cool,,,,trainer:/home/bkind:/bin/bash bkind:x:1055:1055:Bev Kind,,,,trainer:/home/bkind:/bin/bash
После добавления меток выборка пользователей легко производится при помощи grep и awk:
$ cat /etc/passwd grep trainer awk -F: '{ print $1}' | tr '\n' ',' bkind,bcool, 8.20. Временное использование привилегий root См. также
passwd(5), awk(1).



Когда потребуется выполнить какую- нибудь административную операцию, воспользуйтесь командой su (Switch User):
carla@windbag:~$ su Password: root@windbag:/home/carla#
Затем вернитесь к своей «основной личности»:
root@windbag:/home/carla# exit carla@windbag:~$
Переключение на root с восстановлением конфигурации окружения и командного процессора root:
carla@windbag:~$ su - Password: root@windbag:/home/carla~#
Переход на другой командный интерпретатор:
$ su - --shell=tcsh Password:
Доступные командные процессоры перечислены в /etc/shells.


Воспользуйтесь sudo — командой, которая предоставляет ограниченные права root конкретным пользователям для решения конкретных задач и регистрирует их действия без сообщения пароля root.
Допустим, имеется пользователь jhaugh, которому вы хотите предоставить полные права root. Поскольку пользователи sudo имеют собственные пароли, пароль root остается защищенным. Отредактируйте файл /etc/sudoers командой visudo — файл открывается в редакторе по умолчанию.
# visudo # Файл sudoers # # Этот файл ДОЛЖЕН редактироваться командой 'visudo' # с правами root. # За дополнительной информацией о записи в файл # sudoers обращайтесь кman-странице. # # Спецификация псевдонимов хостов # Спецификация псевдонимов пользователей # Спецификация псевдонимов команд # Спецификация привилегий пользователей root ALL=(ALL) ALL
Для начала создайте псевдоним хоста:
Host_Alias LOCALHOST = localhost
В секции «Спецификация привилегий пользователей» («User privilege specification») добавляются отдельные пользователи:
jhaugh ALL=(ALL) ALL
Эта строка предоставляет jhaugh привилегии root для выполнения любых операций в системе и на подключенных компьютерах. Допустим, вы хотите предоставить другому пользователю tgwynne привилегии root только на локальном компьютере. Включите следующую запись:
tgwynne LOCALHOST = ALL
А пользователю msmith разрешается только выключение локального компьютера:
msmith LOCALHOST=/sbin/shutdown, /sbin/halt 8.21. Временное предоставление привилегий root командой sudo
Предоставление группам обычных пользователей права выключения своих компьютеров:
# Спецификация псевдонимов хостов Host_Alias LOCALHOST = localhost # Спецификация псевдонимов пользователей User_Alias USERS = tgwynne, msmith, jhaugh, \ abyron, jwinters # Спецификация псевдонимов команд Cmnd_Alias SHUTDOWN = /usr/sbin/shutdown, /usr/sbin/halt, \ /usr/sbin/reboot, /usr/sbin/poweroff # Спецификация привилегий пользователей USERS LOCALHOST = SHUTDOWN
Вызов команды sudo выглядит так:
$ sudo /usr/sbin/halt
Команда запрашивает у пользователей их пароли, после чего завершается. Чтобы узнать, выполнение каких команд им разрешено, пользователи могут выполнить следующую команду:
$ sudo -l User jhaugh may run the following commands on this host: (ALL) ALL
Команда sudo фиксирует ошибки в системном журнале и передает сообщение root:
$ sudo /usr/sbin/halt carla is not in the sudoers file. This incident will be reported.
Вы можете определять группы серверов и предоставлять пользователям привилегии для группы:
# Спецификация псевдонимов хостов Host Alias FILESERVERS = hostl, host2, host3 # Спецификация псевдонимов пользователей User_Alias FILESERVERADMINS = jhaugh, abyron, jwinters # Спецификация псевдонимов команд Cmnd_Alias FILEUTILS = /bin/chgrp, /bin/chmod, \ /bin/chown, /bin/cp, /bin/dd, /bin/df, \ /bin/dir, /bin/dircolors, /bin/du, /bin/install, \ /bin/ln, /bin/ls, /bin/mkdir, /bin/mkinfo, \ /bin/mknod, /bin/mv, /bin/rm, /bin/rmdir, \ /bin/shred, /bin/touch, /bin/vdir, sync # Спецификация привилегий пользователей FILESERVADMINS FILESERVERS = FILEUTILS


Воспользуйтесь пакетом Linux Disk Quota. Пакет содержит ряд компонентов, в том числе quota, edquota, quotacheck и repquota.
Сначала отредактируйте файл /etc/fstab и выберите разделы, для которых будут установлены квоты. Квоты могут устанавливаться как для отдельных пользователей (usrquota), так и для групп (grpquota). Оба вида квот могут действовать одновременно:
/dev/hda6 / ext3 defaults 0 1 /dev/hda7 /home ext3 defaults,usrquota,grpquota 0 1
Перемонтируйте файловую систему:
# mount -о remount /home
Сценарий Quota init запускает программу quotacheck, которая анализирует систему, создает базу данных использования дискового пространства и создает файлы квот.
Затем назначьте квоты пользователям. При этом файл конфигурации открывается в редакторе по умолчанию:
# edquota -u vhenson Disk quotas for user vhenson (uid 1550): Filesystem blocks soft hard inodes soft hard /dev/hda7 550466 0 0 47466 0 0
Мягкое ограничение (soft limits) предоставляет нарушителю отсрочку с выдачей предупреждений. Жесткое ограничение (hard limits) вступает в силу немедленно. Чтобы задать ограничение, просто отредактируйте файл:
# edquota -u vhenson Disk quotas for user vhenson (uid 1550): Filesystem blocks soft hard inodes soft hard /dev/hda7 550466 650000 700000 47466 0 0
Блоки всегда имеют размер 1024 байта, поэтому 650 000 блоков составляют около 665 Мбайт. 8.22. Дисковые квоты
Сохраните и закройте файл. Убедитесь в том, что квота вступила в силу:
# quota vhenson Disk quotas for user vhenson (uid 1550): 650000 700000
Назначение квот группам осуществляется следующим образом:
# edquota -g engineers
Если жадный пользователь использует всю групповую квоту, значит, группе не повезло — другим ничего не остается.
Следующая команда вызывает редактор по умолчанию для назначения отсрочки для мягких ограничений во всей файловой системе:
# edquota -t Grace period before encforcing soft limits for users: Time units may be: days, hours, minutes, or seconds Filesystem Block grace period Inode grace period /dev/hda3 7days 7days
Один из пользователей может использоваться в качестве «прототипа» для определения квот нового пользователя:
# edquota -p vhenson dnorth
или сразу нескольких новых пользователей:
# edquota -p vhenson "awk -F: '$3 > 999 {print $1}' /etc/passwd"
Также можно перечислить сразу нескольких пользователей:
# edquota -p vhenson dnorth jvesperman sanvin
Несомненно, вы захотите следить за использованием квот. Следующая команда выводит общесистемный отчет о текущем расходовании дискового пространства:
# repquota -a
Чтобы ограничиться конкретной файловой системой, используйте команду:
# repquota /home

Воспользуйтесь командой chmod (CHange MODe). Смена разрешений может выполняться только суперпользователем (root) и владельцем файла. 9.3. Выполнение массовых операций командой chmod Например, следующая команда предоставляет владельцу файла доступ для чтения и записи к файлу /archive/datafile. Ни один другой пользователь, кроме root, вообще не сможет обратиться к этому файлу:
$ chmod -v 600 /archive/datafile mode of '/archive/datafile' changed to 0600 (rw-------)
В следующем примере владелец файла /shared/list разрешает его чтение всем желающим, но изменения в файл могут вноситься только владельцем файла и root:
$ chmod -v 644 /shared/list mode of '/archive/datafile' changed to 0644 (rw-r--r--)
Чтобы сценарий можно было запустить, в атрибутах файла необходимо установить бит исполнения. Следующая команда разрешает редактирование сценария только пользователю, а чтение и исполнение — всем желающим:
$ chmod 755 /shared/somescript
У каталогов бит исполнения всегда должен быть установлен, иначе они не будут работать:
$ chmod 755 /shared
Назначение разрешений каталогу со всем содержимым, включая подкаталоги, производится с ключом -R. Ключ -v включает режим подробного вывода, чтобы вы видели, какие действия выполняет команда:
% chmod -R -v 755 /shared


Команда chmod поддерживает операции со списками файлов. Для построения списков можно воспользоваться командой find или метасимволами командного процессора.
Следующая команда делает несколько файлов доступными только для чтения для всех пользователей:
$ chmod 444 file.txt file2.txt file3.txt
Чтобы сделать все файлы текущего каталога доступными для чтения/записи для владельца и группы, но без изменения разрешений самого каталога, воспользуйтесь командой:
$ find . -type f -exec chmod -v 660 {} \;
Назначение разрешений для каталога и всего содержимого, включая подкаталоги:
$ chmod -R -v 755 /shared
В следующем примере чтение/запись всех файлов с расширением .txt в текущем каталоге разрешается владельцу, а всем остальным разрешается только чтение:
$ chmod -v 644 *.txt
Изменение всех файлов текущего каталога, начинающихся с определенного префикса:
$ chmod -v 644 apt* См. также
info chmod.


Самым распространенным применением символических обозначений chmod является добавление бита исполнения в атрибуты файла без изменения остальных разрешений:
$ chmod +x сценарий
По умолчанию используется режим a (All), поэтому данный пример разрешит исполнение сценария всем пользователям. Следующая команда устанавливает бит исполнения только для владельца файла: 9.4. Настройка разрешений в символьном формате chmod $ chmod u+x сценарий
Также существует возможность сброса отдельных битов. Следующая команда лишает группу и прочих пользователей права исполнения:
$ chmod go-x сценарий
Быстрая установка бита setgid для каталога с целью создания общего каталога. Все файлы, созданные в этом каталоге, будут принадлежать той же группе, что и сам каталог:
$ chmod +s /общий-каталог
Сброс всех разрешений для группы и прочих пользователей:
$chmod go= сценарий
Следующая команда предоставляет группе те же разрешения, которыми обладает владелец файла:
$chmod g=u сценарий


Воспользуйтесь командой chown и смените владельца и/ или группу, которой принадлежит файл:
# chown пользователь файл # chown пользователь:группа файл # chown :группа файл
Пример:
$ chown -v carlas:share index.txt changed ownership of 'index.txt' to carlas:share $ chown -v :share toc.txt changed ownership of 'toc.txt' to :share

Команда chown позволяет выполнять некоторые массовые операции. Также можно воспользоваться командой find или метасимволами командного процессора.
9.7. Создание общих каталогов с использованием setgid и бита закрепления Чтобы сменить владельца сразу для нескольких файлов, передайте список файлов, разделенный пробелами:
# chown carlas file.txt file2.txt file3.txt
Список файлов также можно задать при помощи метасимволов командного процессора:
# chown carlas *.txt
Следующая команда передает все файлы пользователя другому пользователю:
# chown -R -v --from valh piglet /shared/scripts
To же самое можно сделать при помощи команды find:
# find /-user valh -exec chown -v piglet {} \;
Команда find также дает возможность находить файлы по коду UID, что не может сделать chown:
# find / -uid 1050 -exec chown -v 1200 {} \;
Смена владельца каталога со всеми подкаталогами и файлами, с подробным выводом:
# chown -R -v piglet /shared/scripts: changed ownership of 'scripts/backups.tgz' to piglet changed ownership of 'scripts/fake-spec-rpm' to piglet
В команде можно использовать как имя пользователя, так и UID. Если учетная запись пользователя была удалена и в системе остались «бесхозные» файлы, то для их поиска придется использовать UID. См. также
info chown; раздел 8.6.



Воспользуйтесь битом setgid для автоматического назначения файлов принадлежности к общей группе.
Вот как это делается в восьмеричной записи:
# chmod -v 2775 /общий-каталог
Также можно использовать символическую запись:
# chmod -v +s /общий-каталог


Разрешения по умолчанию определяются маской umask. Чтобы узнать текущее состояние маски, введите команду:
$ umask 0022
или
$ umask -S u=rwx,g=rx,o=rx
Чтобы временно назначить новую маску до конца текущего сеанса, введите команду
$ umask 0002
Долгосрочное изменение маски umask обеспечивается включением строки umaskxxxx в файл ~/.bashrc. Часто используемые значения umask перечислены в табл. 9.3.
Таблица 9.3. Часто используемые значения umask
Umask Пользователь Группа Прочие
0002 Все Все Чтение и исполнение
0022 Все Чтение и исполнение Чтение и исполнение
0007 Все Все Нет
0077 Все Нет Нет
Используйте команды mount и umount. Пример монтирования дисковода CD-ROM:
# mount -r -t iso9660 /dev/scd0 /cdrom
Ключ -r означает доступ только для чтения; ключ -t определяет тип файловой системы. Строка /dev/scd0 определяет имя, назначаемое устройству ядром, /cdrom — каталог, в котором монтируется устройство. Он должен присутствовать в системе перед монтированием диска.
Тип файловой системы определяется командой file:
$ file - < /dev/scd0 /dev/stdin: ISO 9660 CD-ROM filesystem data 'Data1
При монтировании диска CD-ROM ключ -r можно не указывать. Команда выдаст предупреждение, но диск смонтирует:
# mount -t iso9660 /dev/scd0 /cdrom mount: block device /dev/scd0 is write-protected, mounting read-only
Следующая команда монтирует дискету для чтения/записи:
# mount -w /dev/fd0 /floppy
Следующая команда монтирует флэш-диск с интерфейсом USB. Ключ noatime должен использоваться для перезаписываемых носителей с ограниченным количеством операций перезаписи (таких, как CD/DVD-RW или флэш-диски):
# mount -w -о noatime /dev/sdal /memstick
Смонтированное устройство демонтируется командой
# umount /memstick
Возможно, вы получите ответ вида
# umount /memstick umount: /memstick: device ns busy
9.10. Настройка монтирования файловых систем в /etc/fstab Это означает, что приложение (командный интепретатор, файловый менеджер) читает данные из файловой системы. Дополнительная информация выводится командой lsof (LiSt Open Files):
$ lsof /memstick COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME gs 938 dawnm 128r DIR 2.0 1024 12 /memstick/may-04.pdf bash 938 dawnm 129r DIR 2.0 1024 24 /memstick
Далее можно либо закрыть приложения, либо убить их одной командой:
# kill -9 `lsof -t /memstick`
Команда mount может выполняться только суперпользователем root. Чтобы другие пользователи могли монтировать съемные диски, необходимо отредактировать /etc/fstab (см. следующий раздел).


Добавьте в файл /etc/fstab записи с определением точек монтирования и разрешений доступа. В следующем примере показан пример /etc/fstab с разделом Linux, двумя разделами Windows и съемными носителями:



Воспользуйтесь командами dmesg и fdisk. Команда dmesg находит имена устройств, а команда fdisk отображает нумерацию разделов на жестких дисках. Возможно, вам также поможет официальный список имен /dev по адресу http://www.lanana.org/docs/device-list/devices.txt (если в вашей системе установлены исходные тексты ядра, возможно, файл devices.txt находится в каталоге /usr/src/).
Следующая команда ищет информацию CD-устройств в выходных данных dmesg:
$ dmesg | grep -i cd hdc: ATAPI CDROM. ATAPI CD/DVD-ROM DRIVE hdc: ATAPI 40X CD-ROM DRIVE. 128K cache. UDMA (33)
Быстрый поиск в devices.txt дает следующий результат:
Second IDE hard disk/CD-ROM interface 0=/dev/hdc Master: whole disk (or CD-ROM)
Не обращайте внимания на 0=; имя устройства — /dev/hdc. А вот как выглядят дисководы CD/DVD, использующие подсистему IDE/SCSI:
$ dmesg | grep -i cd hdb: TOSHIBA DVD-ROM SD-M1202. ATAPI CD/DVD-ROM drive hdc: LITE-ON LTR-24102B. ATAPI CD/DVD-ROM drive ide-cd: ignoring drive hdb ide-cd: ignoring drive hdc Type: CD-ROM ANSI SCSI revision: 02 Type: CD-ROM ANSI SCSI revision: 02 Attached scsi CD-ROM sr0 at scsi0. channel 0. id 0. lun 0 Attached scsi CD-ROM sr1 at scsi0, channel 0. id 1. lun 0 scd0: scsi3-mmc drive: 32x/32x cd-rw xa/form2 cdda tray Uniform CD-ROM driver Revision: 3.12 scd1: scsi3-mmc drive: 131x/40x writer cd/rw xa/form2 cdda tray
Итак, устройствам соответствуют имена /dev/scd0 и /dev/scd1.
Для жестких дисков приходится указывать конкретные разделы, поскольку каждый раздел является самостоятельным блочным устройством. Команда fdisk -l выводит информацию обо всех разделах на всех обнаруженных жестких дисках:
# /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/hda4 1034 2501 11791710 f W95 Exfd (LBA) /dev/hda5 2437 2501 522081 82 Linux swap /dev/hda6 1034 1670 5116639+ 83 Linux /dev/hda7 1671 2436 6152863+ 83 Linux
Скопируйте имя устройства из столбца Device. А вот как команда fdisk отображает устройства USB:
Disk /dev/sda: 65 MV, 65536000 bytes 8 heads, 32 sectors/track, 500 cylinders



Воспользуйтесь командами mkdir и touch.
Команда mkdir создает каталоги. Создание нового подкаталога в текущем каталоге:
$ mkdir photos
Следующая команда создает новый каталог верхнего уровня (эта операция разрешена только суперпользователю):
# mkdir /local_bins
При создании каталога можно указать разрешения:
# mkdir -m 755 /shared
Чтобы создать подкаталог и все его родительские каталоги, используйте ключ -p:
$ mkdir -p photos/scanned/jpgs/thumbs
Большинство файлов создается программами (текстовыми и графическими редакторами, компиляторами и т. д.). Пустой файл также можно создать командой touch:
$ touch newfile.txt


Используйте команду rm (ReMove) — но будьте внимательны! Команда rm удаляет файлы и каталоги без предупреждения.
Удаление одного файла с расширенным выводом:
$ rm -v game-stats.txt removed 'game-stats.txt'
Удаление с запросом подтверждения:
$ rm -vi dpkglist rm: remove regular file 'dpkglist'?y removed 'dpkglist'
Ключ -r (Recursive) обеспечивает удаление каталога со всеми файлами и подкаталогами:
$ rm -rvi /home/games/stats/baseball



Воспользуйтесь командами ср и mv. Следующая команда копирует два файла из текущего рабочего каталога в каталог ~/images2:
$ ср -v navbar.gif redheart.gif ~/images2 'navbar.gif -> /home/terri/images2/navbar.gif' 'redheart.gif -> /home/terri/images2/redheart.gif'
При перезаписи файлов можно воспользоваться ключом -b для создания резервных копий старых файлов в приемном каталоге:
$ ср -bv icon-zip.gif main.gif ~/data2 'icon-zip.gif' -> '/home/terri/data2/icon-zip.gif' (backup: '/home/terri/data2/iconzip. gif~') 'main.gif' -> '/home/terri/data2/main.gif' (backup: '/home/terri/data2/main.gif~')
Для сохранения полного пути к файлу используется ключ --parents:
$ ср -v --parents -/homes/images/kitchen.jpg ~/data2 '/home/terri/homes/images/kitchen.jpg' -> '/home/terri/data2/homes/images/kitchen.jpg'
Ключ -s создает мягкие ссылки на файлы вместо копирования:
$ cp -s navbar.gif redheart.gif ~/images2
Ключ -r копирует каталог со всеми подкаталогами:
$ ср -rv -/homes/images/ /shared/archives
Операции перемещения и переименования осуществляются командой mv. Следующая команда перемещает два файла в другой каталог:
$ mv -v about.gif arrow.gif ~/data2 'about.gif' -> '/home/terri/data/about.gif' 'arrow.gif' -> '/home/terri/data/arrow.gif'
Пример переименования файла:
$ mv -v downloads.gif email.gif 'downloads.gif' -> 'email.gif'


Первый способ: загрузите систему с диска Knoppix и воспользуйтесь QTParted — замечательным графическим приложением, которое создает, удаляет, перемещает и изменяет размеры разделов без уничтожения данных. Программа даже позволяет изменять размеры разделов NTFS.
Также можно воспользоваться программой fdisk. Пример создания первичного раздела:
# fdisk /dev/hda The number of cylinders for this disk is set to 2501. There is nothing wrong with that, but this is larger than 1024. and could in certain setups cause problems with: 1) software that runs at boot time (e.g.. old versions of LILO) 2) booting and partitioning software from other OSs (e.g.. DOS FDISK. OS/2 FDISK) Command (m for help): n Command action l logical (5 or over) p primary partition (1-4) p Partition number (1-4): 3 First cylinder (511-1232, default 511): 511 Last cylinder or +size +sizeM or +sizeK (511-1232, defaultl232): +3000M Command (m for help): w The partition table has been altered! Calling ioctl() to re-read the partition table Syncing disks #
Вот и все. Изменения можно отменить вплоть до того момента, когда нажатие w запишет новую таблицу разделов на диск. Клавиша m выводит меню команд, а клавиша q завершает работу программы.
Чтобы сохранить какие-либо данные в новом разделе, необходимо перезагрузить компьютер и разместить в разделе файловую систему (см. следующий раздел).


Воспользуйтесь командой той файловой системы, которую вы собираетесь использовать.
Ext2 # mke2fs /dev/hda3 Ext3 # mke2fs-j /dev/hda3 ReiserFS # mkreiserfs /dev/hda3 JFS # mkfs.jfs /dev/hda3 XFS # mkfs.xfs /dev/hda3

Загрузите свежие исходные тексты ядра и откомпилируйте ядро с использованием существующего файла .config, добавив в него новые возможности. Предварительно сделайте следующее: убедитесь в том, что на диске имеется не менее 500 Мбайт свободного пространства для процесса сборки; распечатайте выходные данные dmesg, lscpi, cat/proc/cpuinfo и lsusb (за дополнительной информацией обращайтесь к главе 5); создайте резервную копию всех данных и держите под рукой загрузочный диск аварийного восстановления; найдите файл .config ядра.
10.2. Добавление новых возможностейв ядро 2.4 Чтобы добавить новые возможности в существующее ядро, загрузите новые исходные тексты той лее версии ядра. Версия ядра выводится командой uname:
$ uname -r 2.4.22
Распакуйте новые исходные тексты ядра в подкаталог, находящийся в вашем домашнем каталоге, — например, ~/src:
$ tar xvjf linux-2.4.22.tar.bz2
Отредактируйте make-файл нового ядра (~/src/linux-2.4.22/Makefile) и присвойте новое значение параметру EXTRAVERSION — например, EXTRAVERSION=-newkernel.
Выполните следующие команды из каталога /~/src/linux-2.4.22:
$ make mrproper
Скопируйте файл .config в каталог /~/src/linux-2.4.22. Переходите к настройке нового ядра. Программа конфигурации задаст многочисленные вопросы; на этом этапе выбираются новые возможности:
$ make oldconfig
Выполните следующие команды:
$ make dep $ make bzImage $ make modules $ su # make modules_install # cp ~/src/linux-2.4.22/arch/i386/boot/bzImage /boot/vmlinuz-2.4.22-new-kernel # cp ~/src/linux-2.4.22/System.map /boot/System.map-2.4.22-new-kernel
Наконец, чтобы использовать новое ядро, включите его в загрузчик и перезагрузите компьютер. В GRUB соответствующая запись выглядит примерно так:
title Kernel 2.4.22, new kernel root (hd0.0) kernel /boot/vmlinuz-2.4.22-new-kernel root=/dev/hda1 ro
Пользователи LILO делают следующее:
image=boot/vmlinuz-2.4.22-new-kernel label=Kernel 2.4.22, new kernel root=/dev/hda1 read-only
И не забудьте перезапустить LILO, чтобы новая конфигурация была записана в загрузочную запись:
# /sbin/lilo
Сохраните копию нового файла .config в каталоге за пределами дерева сборки, чтобы файл не был случайно удален или заменен. Присвойте ему новое, содержательное имя:
$ cp ~/src/linux-2.4.22/.config ~/kernel-configs/.config-2.4.22-jan-04
Если вы убедились в том, что новое ядро работает нормально, можно удалить старое ядро, его каталог /lib/modules/$VERSION, дерево сборки и записи загрузчика (а если не хотите, оставьте их в системе).


Загрузите новые исходные тексты той же версии ядра, откомпилируйте новое ядро и настройте его конфигурацию «с нуля». Версия ядра выводится командой uname:
$ uname -r 2.4.22
10.3. Усечение типового ядра 2.4 Предварительно сделайте следующее: убедитесь в том, что на диске имеется не менее 500 Мбайт свободного пространства для процесса сборки; распечатайте выходные данные dmesg, lscpi, cat/proc/cpuinfo и lsusb (за дополнительной информацией обращайтесь к главе 5); создайте резервную копию всех данных и держите под рукой загрузочный диск аварийного восстановления.
Распакуйте новые исходные тексты ядра в подкаталог, находящийся в домашнем каталоге,— например, ~/src :
$ tar xvjf linux-2.4.22.tar.bz2
Отредактируйте make-файл нового ядра (~/src/unux-2.4.22/Makefile) и присвойте новое значение параметру EXTRAVERSION — например, EXTRAVERSION=-slim-kernel. Выполните следующие команды из каталога /~/src/linux-2.4.22:
$ make mrproper $ make menuconfig $ make dep $ make bzImage $ make modules $ su # make modulesinstall # cp ~/src/linux-2.4.22/arch/i386/boot/bzImage /boot/vmlinuz-2.4.22-new-kernel # cp ~/src/linux-2.4.22/System.map /boot/System.map-2.4.22-new-kernel
В процессе настройки ядра следует помнить, что вы начинаете «с пустого места», поэтому необходимо включить каждую используемую функцию. Также проследите за тем, чтобы ненужные функции не включались. Некоторые базовые возможности, которые вам наверняка понадобятся: поддержка загружаемых модулей, встроенная в ядро; поддержка двоичных форматов a.out, ELF и MISC (в меню General Setup); поддержка всех загрузочных устройств (дисков IDE, CD-ROM, флоппи-дисководов, дисков SCSI и USB), встроенная в ядро. Если не включать эти функции или оформить их в виде модулей, для загрузки системе понадобится ramdisk (образ initrd).
После завершения настройки включите новое ядро в загрузчик, перезагрузите компьютер и радуйтесь жизни. Не забудьте скопировать новый файл .config в каталог, находящийся за пределами дерева сборки, чтобы защитить его от случайного удаления или замены.

Создайте резервную копию всех данных и держите под рукой диск аварийного восстановления.
Распечатайте выходные данные dmesg, lscpi, cat/proc/cpuinfo и lsusb. Распакуйте новые исходные тексты ядра в подкаталог, находящийся в домашнем каталоге,— например, ~/src:
$ tar xvjf linux-2.4.25.tar.bz2
Отредактируйте make-файл нового ядра (~/src/linux-2.4.25/Makefile) и присвойте новое значение параметру EXTRAVERSION — например, EXTRAVERSION=-newkernel.
Выполните следующие команды из каталога /~/src/linux-2.4.25:
$ make mrproper
Чтобы использовать существующий файл .config, скопируйте его в ~/src/linux-2.4.25 и продолжайте выполнять приведенные инструкции. В противном случае вернитесь к разделу 10.3.
Выполните следующие команды:
$ make oldconfig $ make dep $ make bzImage $ make modules $ su # make modules_install # cp ~/src/linux-2.4.25/arch/i386/boot/bzImage /boot/vmlinuz-2.4.25-new-kernel # cp ~/src/linux-2.4.25/System.map /boot/System.map-2.4.25-new-kernel
Включите новое ядро в загрузчик и перезагрузите компьютер.
10.5. Построение ядра 2.6


В данном примере будет использоваться ядро версии 2.6.3. Создайте резервную копию всех данных и держите под рукой загрузочный диск аварийного восстановления.
Распечатайте выходные данные dmesg, lscpi, cat/proc/cpuinfo и lsusb.
Загрузите и распакуйте новые исходные тексты ядра в подкаталог, находящийся в домашнем каталоге, — например, ~/src. Перейдите в каталог верхнего уровня нового дерева исходных текстов (~/src/linux-2.6.3).
Отредактируйте make-файл нового ядра (~/src/linux-2.6.3/Makefile) и присвойте новое значение параметру EXTRAVERSION — например, EXTRAVERSION=-test. Выполните следующие команды:
$ make mrproper $ make xconfig $ make $ su # make moduies_instail # cp ~/src/linux-2.6.3/arch/i386/boot/bzImage /boot/vmlinuz-2.6.3-test # cp ~/src/linux-2.6.3/System.map /boot/System.map-2.6.3-test
Сохраните копию нового файла .config в каталоге за пределами дерева сборки. Включите новое ядро в загрузчик и перезагрузите компьютер.


Выполните инструкции из раздела 10.5, но вместо xconfig используйте oldconfig
$ make mrproper
Скопируйте существующий файл .config в каталог /~/src/linux-2.6.3. Выполните следующие команды:
$ make oldconfig $ make $ su # make modules_install # cp ~/src/linux-2.6.3/arch/i386/boot/bzImage /boot/vmlinuz-2.6.3-test # cp ~/src/linux-2.6.3/System.map /boot/System.map-2.6.3-test
Включите новое ядро в загрузчик и перезагрузите компьютер.


В ядрах 2.4 и 2.6 используется одна и та же процедура. Перейдите в каталог с деревом сборки (например, ~/src/linux-2.4.25). Вам потребуется актуальный файл .config; скопируйте его на верхний уровень дерева сборки и выполните следующую команду:
# make oldconfig
В процессе настройки конфигурации найдите нужный драйвер и выберите его оформление в виде модуля (например, модуль tulip является универсальным драйвером для многих карт Ethernet). Затем выполните команды:
$ make dep $ make modules $ su # make modules_install # depmod -av
Загрузите модуль командой modprobe:
# modprobe tulip
Процесс не требует перезагрузки системы.
Комментарии
Если использовать oldconfig почему-либо не удастся, используйте make menuconfig. Правда, это займет больше времени, и вам придется следить за тем, чтобы не упустить что-нибудь важное.
При установке сторонних модулей; не входящих в дерево ядра, следует руководствоваться инструкциями производителя. Стандартная процедура включает загрузку исходных текстов, сборку модуля и его загрузку командой modprobe. Некоторые производители (например, nVidia) включают сценарий, который делает все за вас.
Как правило, дистрибутивы проверяют оборудование при загрузке и автоматически загружают нужные модули. Если этого не происходит, вам придется внести изменения в стартовые файлы. В Red Hat и SuSE модуль включается в файл /etc/modules.conf; в Debian используется файл /etc/modules, а в Slackware — файл rc.modules.
Еще более простой способ — включить в ядро поддержку kmod, автоматического загрузчика модулей. В большинстве дистрибутивов она включается по умолчанию. В программах настройки конфигурации ядра для этой цели используется пункт «Automatic kernel module loading» (ядро 2.6) или «Kernel module loader» (2.4) в категории «Loadable module support».
Не используйте программу kerneld; начиная с ядра 2.2, вместо нее используется kmod. См. также
Раздел «Введение» настоящей главы; раздел 10.2.


Загрузите заплатку и примените ее к исходным текстам ядра. Затем откомпилируйте и постройте новое ядро. В нашем примере ядро 2.6.3 будет обновлено до версии 2.6.4. Заплатка должна находиться в каталоге второго уровня дерева сборки:
$ ls ~/src linux-2.6.3 patch-2.6.4.bz2
Перейдите в каталог верхнего уровня дерева сборки, распакуйте и примените заплатку:
$ cd linux-2.6.3 $ bzip2 -dc ../patch-2.6.4.bz2 | patch -s -p1
Ключ --dry-run позволяет протестировать команду:
$ bzip2 -dc ../patch-2.6.4.bz2 | patch -s -p1 --dry-run
Настройте конфигурацию и проведите сборку ядра.
В дерево сборки предусмотрительно включен сценарий /scripts/patch-kernel для применения заплаток. Этот сценарий особенно полезен при установке нескольких заплаток, поскольку он автоматически применяет их в нужном порядке. Выполните в каталоге верхнего уровня команду
$ scripts/patch-kernel
Заплатки должны применяться по очереди, и все они должны находиться в системе. Например, для использования заплатки patch-2.6.5-rc6 вам также понадобятся первые пять заплаток в серии (rc1-rc5).


Воспользуйтесь той же командой, которая применялась для распаковки заплатки, и добавьте и нее ключ -R:
$ bzip2 -dc ../patch-2.6.4.bz2 | patch -s -p1 -R См. также
patch(1); Kernel Newbies (http://kernelnewbies.org); kernel.org (http://kernel.org).



Постройте образ initrd ( виртуальный диск) командой mkinitrd после сборки ядра. Затем включите в загрузчик запись для загрузки образа.
В ядрах 2.4 и 2.6 команда mkinitrd выполняется после команды make modules_install:
# mkinitrd -o /boot/initrd-2.4.25-new.kernel.img
Команда строит образ и устанавливает его в каталог /boot; остается лишь создать записи в загрузчике. В GRUB:
title Kernel 2.4.25. new kernel root (hd0.0) kernel /boot/bzImage-2.4.25-new-kernel root=/dev/hda1 ro initrd /boot/initrd-2.4.25-new-kernel.img
Пользователи LILO делают следующее:
image=/boot/bzImage-2.4.22-new-kernel initrd=/boot/initrd-2.4.25-new-kernel.img label=Kernel 2.4.22, new kernel root=/dev/hda1 read-only
Не забудьте выполнить /sbin/lilo, чтобы активировать изменения.


Вам потребуется утилита mkboot и чистая дискета. По умолчанию загрузочный диск создается с использованием vmlinuz и текущего корневого раздела:
$ mkboot
Создание загрузочного диска с указанием ядра:
$ mkboot vmlinuz-2.4.21
Также можно указать другой корневой раздел и ядро:
$ mkboot /dev/hda2 vmlinuz-2.4.21
Если флоппи-дисковод имеет нестандартное расположение, укажите его с ключом -d:
$ mkboot -d /dev/fd1


Вам потребуется утилита mkbootdisk и чистая дискета. Создание загрузочного диска с указанием ядра:
$ mkbootdisk vmlinuz-2.6.5-1.358
По умолчанию команда mkbootdisk не выводит данных. Ключ --verbose включает режим расширенного вывода:
$ mkbootdisk --verbose vmlinuz-2.6.5-1.358
Если имя флоппи-дисковода отлично от /dev/fd0, укажите его в командной строке mkbootdisk:
$ mkbootdisk --device /dev/fd0 vmlinuz-2.6.5-1.358


Команда cdrecord - scanbus вернет необходимую информацию. Конфигурация отдельной системы с CD/DVD-ROM и устройством записи CD может выглядеть так:
$ cdrecord -scanbus Cdrecord 1.10 (i686-pc-1inux-gnu) Copyright (C) 1995-2001 Jrg Schilling Linux sg driver version: 3.1.24 Using libscg version 'schily-0.5' scsibus0: 0,0,0 0) 'TOSHIBA' 'DVD-ROM SD-M1202'. '1020' Removable CD-ROM 0,1,0 1) 'LITE-ON ' 'LTR-24102B ' '5S54' Removable CD-ROM 0,2,0 2) * 0,3,0 3) * 0,4,0 4) * 0,5,0 5) * 0,6,0 6) *
Устройства записи DVD выглядят так:
1.2.0 2) 'PIONEER ' 'DVD-ROM DVD-303 ' '1.09' Removable CD-ROM
Первые три числа задают шину SCSI, код устройства и код LUN (Logical Unit Number) соответственно. Четвертое число снова повторяет код устройства. В параметре cdrecord нужно передать три первых числа в следующем формате:
dev=0,1,0

Убедитесь в том, что система эмуляции IDE-SCSI включена, а дисководы настроены для ее использования. Это относится только к ядру Linux 2.4, поскольку в ядре 2.6 дисководы IDE/ATAPI поддерживаются напрямую, с использованием стандартных обозначений /dev/hd*.
Сначала убедитесь в том, что в системе доступен драйвер псевдоустройства ide-scsi:
$ locate ide-scsi.o /lib/modules/2.4.21/kernel/drivers/scsi/ide-scsi.o
Затем отредактируйте два текстовых файла: /etc/modules.conf и конфигурационный файл загрузчика (пользователям Debian следует обращаться к подразделу «Комментарий», так как в этой системе используются другие файлы). Сначала определите имена дисковых устройств в своей системе:
$ dmesg | grep '^hd.:' hda: IBM-DTLA-305020. ATA DISK drive hdb: TOSHIBA DVD-ROM SD-M1202. ATAPI CD/DVD-ROM drive hdc: LITE-ON LTR-24102B. ATAPI CD/DVD-ROM drive
Имена нужных устройств — hdb и hdc. Включите следующие строки в файл /etc/modules.conf:
alias scsi_hostadapter ide-scsi options ide-cd ignore="hdb hdc" alias scd0 sr_mod pre-install sg modprobe ide-scsi pre-install sr-mod modprobe ide-scsi pre-install ide-scsi modprobe ide-sd
Затем пользователи LILO добавляют следующий фрагмент в конец файла lilo.conf, используя обозначения hd* для своих устройств:
append="hdb=ide-scsi" append="hdc=ide-scsi" <>Пользователи GRUB включают следующий фрагмент в файл /etc/grub.conf, в конец строки kernel, используя обозначения hd* для своих устройств:
hdb=scsi hdc=scsi
Полная строка должна выглядеть так:
kernel /boot/vmlinuz-2.4.21 root=/dev/hdal ro hdb=scsi hdc=scsi 11.4. Создание компакт-диска с данными для распространения Перезагрузите систему и убедитесь в том,что модуль ide-scsi загружен:
$ lsmod | grep ide-scsi ide-scsi 9456 1 scsi mod 55124 2 [ide-scsi srmod]
Теперь команда cdrecord -scanbus должна выводить имена устройств SCSI для всех дисководов, настроенных па использование IDE-SCSI.
Обратите внимание:имена устройств изменились, поэтому при монтировании дисков вместо имен /dev/hd* будут использоваться имена /dev/scd*. Вероятно, стоит обновить файл /etc/fstab новыми именами /dev.


Воспользуйтесь командами mkisofs, mount и cdrecord. Сначала упакуйте все файлы в единый файл .iso командой mkisofs, затем смонтируйте .iso для проверки правильности файловой системы. Затем запишите данные на диск командой cdrecord.
В нашем примере файл .iso называется data.iso, компакт-диску присвоено имя data_disk, а все файлы копируются из каталога /disk_data. Точка монтирования для .iso ~/test-iso.
Выполните следующие команды:
# mkisofs -J -r -v -V data_disk -о data.iso /disk_data # mkdir /test-iso # mount -t iso9660 -o ro,loop data.iso /test-iso



Включите параметр -graft-points в вызов mkisofs. В следующем примере сохраняется существующая структура каталогов scripts и finances:
$ ls finances scripts $ mkisofs -r -J -v -o cdimg1.iso -graft-points scripts/=scripts finances/=finances
Результат легко проверить — достаточно смонтировать образ и просмотреть структуру каталогов командой tree -d:
$ sudo mount -t iso9660 -o ro,loop cdimg1.iso /mnt/iso $ tree -d /mnt/iso



Чтобы напрямую скопировать содержимое исходного диска на записываемый диск, выполните следующую команду:
$ cdrecord -v dev=0,1,0 -isosize /dev/scd0
Способ быстрый, но рискованный, потому что любой перебой в потоке данных приведет к порче всей копии. Лучше сначала кэшировать оригинал на жестком диске. В следующем примере сначала проводится проверка записи:
$ dd if=/dev/scd0 of=/tmp/diskfilе.iso $ cdrecord dev=0,1,0 fs=8m -v -eject -dummy /tmp/diskfile.iso
Чтобы записать данные на диск, удалите ключ -dummy.


Воспользуйтесь параметром blank команды cdrecord. Значение blank=fast стирает только оглавление диска (ТОС), область памяти программы (РМА) и pregap:
$ cdrecord -v blank=fast dev=0,1,0
Более полное стирание производится с параметром all:
$ cdrecord -v blank=аll dev=0,1,0
Не рассчитывайте, что стирание полностью уничтожит информацию; при желании данные все равно удастся восстановить. Параметр blank=fast прекрасно подходит для повседневного использования, а работает намного быстрее — и к тому же продлевает жизнь диска CD-RW.


Процесс состоит из двух шагов. Обе команды, cdrecord и mkisofs, поддерживают специальные параметры для создания многосеансовых дисков. При первоначальной записи файлов на CD создайте файл .iso обычным способом, а затем включите в командную строку cdrecord ключ -multi:
$ cdrecord -v eject dev=0,1,0 -multi first-image.iso
Затем создайте дополнительные образы .iso при помощи ключей -C и -M:
$ mkisofs -о second-image.iso -J -r -V Session2 -С `cdrecord dev=0,1,0 -msinfo` \ -M 0,1,0 /path-to-new-files
11.9. Создание загрузочного компакт-диска Затем запишите новый файл .iso на диск, снова используя ключ -multi:
$ cdrecord -v -eject dev=0,1,0 -multi second-image.iso
Операцию можно повторять сколько угодно раз. Добравшись до последнего сеанса, опустите ключ -multi. Диск необходимо закрыть и зафиксировать, в противном случае он не будет читаться большинством дисководов. Другой способ закрыть диск без записи дополнительного сеанса основан на использовании ключа -fix:
$ cdrecord -v -fix -eject dev=0,1,0


Образ загрузочной информации включается в файл . iso командой mkisofs. Если загрузочный образ находится на дискете, сначала создайте каталог boot/ в файловом дереве, записываемом па диск, и скопируйте его туда:
$ dd if=/dev/fd0 of=~/cd-files/boot/boot.img bs=10k count=144
Или скопируйте его из другого каталога на жестком диске:
$ ср boot.img ~/cd-files/boot/boot.img
Затем упакуйте .iso:
$ mkisofs -r -b boot/boot.img -с boot/boot.catalog -o bootable-cd.iso ~/cd-files
Запишите диск командой cdrecord, как это обычно делается. Вы получаете загрузочный диск.

Разбейте файл утилитой split, а затем преобразуйте новые файлы в образы .iso и запишите их на диски. Сборка исходного файла осуществляется командой cat
Допустим, имеется 2-гигабайтный архив tar с именем big-backup. В следующем примере он разбивается на 650-мегабайтные фрагменты. Емкость компакт-диска составляет 700 Мбайт, но нужно оставить место для служебных данных:
$ split -b 650m big-backup.tar.gz creating file 'xaa' creating file 'xab' creating file 'xac'
Каждый файл теперь занимает около 682 Мбайт. Преобразуйте каждый файл в образ .iso:
$ for i in xa*; do echo -e "$i"; mkisofs -o $i.iso $i; done
11.11. Запись дисков DVD с данными После завершения обработки команда ls выведет следующий результат:
$ ls хаа xaa.iso xab xab.iso хае хае.iso
Теперь запишите каждый файл .iso на отдельный компакт-диск:
$ cdrecord -v -eject dev=0,l,0 xaa.iso $ cdrecord -v -eject dev=0,1,0 xab.iso $ cdrecord -v -eject dev=0,1,0 xac.iso
Чтобы восстановить разбитый архив, скопируйте файлы .iso с компакт-диска на жесткий диск и воспользуйтесь командой cat:
$ cat хаа xab xac > big-backup.tar.gz
Или последовательно присоединяйте содержимое каждого компакт-диска к архиву на жестком диске без предварительного копирования:
$ cat /cdrom/xaa > big-backup.tar.gz $ cat /cdrom/xab >> big-backup.tar.gz $ cat /cdrom/xac >> big-backup.tar.gz
Собранному файлу можно присвоить любое имя. Главное — сохранить расширение tar.gz. После этого архив можно распаковать:
$ tar xzvf big-backup.tar.gz


Используйте утилиту growisofs из пакета dvd+rw-tools. Но прежде чем что-нибудь делать, убедитесь в том, что для устройства записи DVD не включена поддержка supermount/automount, поскольку это приведет к порче диска.
Копирование файлов с жесткого диска на DVD осуществляется за одну операцию:
# growisofs -Z <имя устройства> <команды mkisofs> <файлы>



Используйте sox, normalize и cdrecord, а также «болванки», предназначенные для записи аудио. На первом этапе программа sox преобразует звуковые файлы в формат .cdr, после чего формат .cdr преобразуется в формат .wav. Затем ключ -audio команды cdrecord преобразует файлы .wav в формат CD-DA (Compact Disk Digital Audio), поддерживаемый стандартными проигрывателями.
$ sox soundfile filename.cdr $ sox filename.cdr filename.wav $ cdrecord -v nofix -eject dev=0,1,0 -audio -pad filename.wav
Ключ -pad гарантирует правильное заполнение секторов диска, a -nofix оставляет диск открытым для добавления новых дорожек. Чтобы закрыть и зафиксировать диск, выполните следующую команду:
$ cdrecord -v -fix -eject dev=0,1,0
Преобразовывать файлы один за другим утомительно. Следующая команда Bash преобразует группу файлов .ogg в формат .cdr:
$ for i in *.ogg; do echo $i; sox $i ${i%%.ogg}.cdr ; echo ${i%%.ogg}.cdr; done
Замените ogg расширениями тех файлов, которые требуется преобразовать.
Если коллекция дорожек собирается из разных источников, воспользуйтесь утилитой normalize и уравняйте громкость звука с ключом -m (Mixed mode):
$ normalize -m /soundfiles/*.wav
Выбор дорожек для записи может осуществляться разными способами. Следующая команда записывает все дорожки в формате .wav в каталог /home/songs в определенном порядке: сначала цифры, затем алфавитные символы в верхнем регистре, затем алфавитные символы в нижнем регистре:
$ cdrecord -v -nofix -eject dev=0,1,0 -audio -pad /home/songs/*.wav


Переход на GRUB не нарушает работоспособности системы. Прежде всего установите GRUB или обновите программу до последней версии. Номер версии определяется командой
$ grub --version grub (GNU GRUB 0.94)
Затем выполните ряд подготовительных действий: Распечатайте таблицу разделов (fdisk -l | lpr).
Распечатайте файл lilo.conf.
Создайте резервную копию данных и держите под рукой диск аварийного восстановления (загрузочную дискету LILO или диск Knoppix).
4. Оставьте установку LILO на случай, если вы захотите вернуться к ней.
Затем выполните следующие действия: Создайте загрузочную дискету GRUB. Установите GRUB в MBR. Загрузите систему. Отредактируйте конфигурационный файл GRUB, menu.lst.
Чтобы создать загрузочную дискету, найдите каталог /grub/i386. Его «официальное» местонахождение — /urs/lib/grub/i386-pc, но в Red Hat используется каталог /usr/share/grub/i386-pc. В других дистрибутивах также могут существовать различия. Скопируйте файлы stage1 и stage2 на дискету командой dd:
$ dd if-stage1 of=/dev/fd0 bs=512 count=1 1+0 records in 1+0 records out 512 bytes transferred in 0.550740 seconds (930 bytes/sec) $ dd if=stage2 of=/dev/fd0 bs=512 seek=1 209+1 records in
12.2. Переход с LILO на GRUB 209+1 records out 107250 bytes transferred in 6.889581 seconds (15567 bytes/sec)
Загрузите систему с дискеты. Теперь необходимо найти корневое устройство, то есть раздел с загрузочными фаршами GRUB первой и второй стадии загрузки:
grub> find /boot/grub/stage1 (hd0.0)
Задайте корневое устройство:
grub> root (hd0.0)
Обратите внимание: в GRUB используется собственная схема нумерации разделов. Запись hd0,0 соответствует /dev/hda1 (см. подраздел «Комментарий»), Теперь установите GRUB в MBR (первый сектор первого диска):
grub> setup (hd0)
Пора завершить загрузку. Снова задайте корневое устройство:
grub> root (hd0.0)
Введите путь к ядру и корневой файловой системе. Данные берутся из файла lilo.conf. Обязательно присоедините ключ ro, чтобы ядро и корневая файловая система монтировались только для чтения:
grub> kernel /boot/vmlinuz-2.4.21 root=/dev/hda1 ro
Не путайте root в строке kernel с корневым устройством. Root в строке kernel идентифицирует корневую файловую систему, тогда как корневым устройством называется раздел, содержащий каталог /boot.
Вероятно, теперь стоит создать меню загрузки GRUB. За подробностями обращайтесь к рецепту 12.9.


Воспользуйтесь командной консолью GRUB.
Прежде всего установите GRUB или обновите программу до последней версии. Номер версии определяется командой
$ grub --version grub (GNU GRUB 0.94)
Затем выполните ряд подготовительных действий: Распечатайте таблицу разделов (fdisk -l | lpr). Распечатайте файл lilo.conf. Создайте резервную копию данных и держите под рукой диск аварийного восстановления (загрузочную дискету LILO или диск Knoppix). Оставьте установку LILO на случай, если вы захотите вернуться к ней.
Затем запустите консоль GRUB:
# grub Probing devices to guess BIOS drivers. This may take a long time. GNU GRUB version 0.94 (640K lower / 3072 upper memory) [ Minimal BASH-like line editing is supported. For the first word. TAB lists possible command completions. Anywhere else TAB list s the possible completions of a device/filename. ] grub>
Найдите загрузчик stage1:
grub> find /boot/grub/stage1 (hd0.0)
Затем выполните три команды:
grub> root (hd0.0) grub> setup (hd0) grub> quit
Перезагрузите систему; вас приветствует командная консоль GRUB.
В разделах 12.7 и 12.9 рассказано о том, как создать меню загрузки GRUB.


Воспользуйтесь встроенным сценарием установки GRUB grub-install. Прежде всего установите GRUB или обновите программу до последней версии. Номер версии определяется командой
$ grub --version grub (GNU GRUB 0.94)
Затем запустите сценарий grub-install. Если для /boot используется собственный раздел, укажите его:
# grub-install --root-directory=/boot /dev/hda
В противном случае достаточно имени устройства:
# grub-install /dev/hda
Затем выполните команду
# update-grub
Команда создает новый файл menu.lst. При перезагрузке появится меню GRUB, и система загрузится, как обычно.


Многие дистрибутивы Linux позволяют настраивать разделы во время установки. Создавайте новые разделы только в том случае, если они необходимы, и оставляйте свободной место для других установок.
Для примера рассмотрим «чистую» установку Fedora на диске IDE объемом 20 Гбайт со следующей схемой разбиения:
/dev/hda1 Первичный 100 Мбайт /boot /dev/hda2 Первичный 2500 Мбайт / /dev/hda3 Первичный 3000 Мбайт /home /dev/hda4 Расширенный /dev/hda5 256 Мбайт /swap Свободно 14144 Мбайт
Процедура выглядит так: Загрузите первый установочный компакт-диск. Выберите клавиатуру, мышь и монитор. Когда появится окно Disk Partitioning Setup, выберите Manually partition with Disk Druid. На экране появляется графическое изображение жесткого диска. Удалите все существующие разделы. Для этого поочередно выделите их и щелкните на кнопке Delete. Затем выделите Free Space и щелкните на кнопке New. Точка монтирования — /boot. Выберите файловую систему Ext2 и введите размер раздела. Минимум, который Fedora примет для /boot, составляет 100 Мбайт. Снова выделите Free Space и щелкните на кнопке New. Точка монтирования — /. Выберите файловую систему Ext3 и введите размер раздела 2500 Мбайт. Щелкните на кнопке ОК. Снова выделите Free Space и щелкните на кнопке New. Точка монтирования — /home. Выберите файловую систему Ext3 и введите размер раздела 3000 Мбайт. Щелкните на кнопке ОК. Снова выделите Free Space и щелкните на кнопке New. Прокрутите список filesystem options и найдите в нем строку swap. Точка монтирования отсутствует; задайте размер 256 Мбайт. Щелкните на кнопке ОК. На этой стадии еще можно вернуться и внести изменения, потому что новая таблица разделов еще не была записана на диске. Завершив настройку, запишите таблицу на диск кнопкой OК в главном меню Disk Druid.

Продолжайте установку. Проследите за тем, чтобы был установлен именно загрузчик GRUB, а не LILO. Другие экземпляры Linux будут использовать те же разделы /home и /swap. Вы можете установить сколько угодно экземпляров Linux, пока не кончится свободное место на диске или не будут использованы все доступные разделы.


Установите дополнительные экземпляры Linux в логические разделы. Затем для каждого экземпляра системы создается запись в меню загрузки GRUB. Сначала подготовьте систему по инструкциям, приведенным в разделе 12.5. Загрузите установочный компакт-диск второго экземпляра Linux (в нашем примере вторым экземпляром будет дистрибутив Libranet Debian). В меню определения


Воспользуйтесь средствами GRUB для поиска корневых устройств и образов ядер. Загрузите командную консоль GRUB нажатием клавиши «с» во время запуска GRUB.
Чтобы найти корневое устройство (раздел, содержащий /boot), введите строку root (hd0 и нажимайте клавишу Tab до тех пор, пока на экране не появится информация о разделах:
grub> root (hd0,<tab> Possible partitions are: Partition num: 0. Filesystem type is ext2fs, partition type 0x83 Partition num: 1. Filesystem type is ext2fs, partition type 0x83
Если вы не уверены в том, какой именно раздел вам нужен, опробуйте их поочередно, это не повредит. Начните с (hd0,0):
grub> root (hd0.0) Filesystem type is ext2fs, partition type 0x83
Затем попробуйте найти образ ядра. Введите /boot/vmlinuz и нажмите клавишу Tab. Если найти образ /boot/vmlinuz не удалось, GRUB сообщит вам об этом:
grub> kernel /boot/vmlinuz<tab> Error 15: File not found
В этом случае назначьте корневым устройством другой раздел и проведите поиск образа ядра на нем:
grub> root (hd0.1) Filesystem type is ext2fs, partition type 0x83 grub> kernel /boot/vmlinuz<tab> possible files are: vmlinuz vmlinuz-2.4.21
Ядро найдено. Введите путь к ядру и корневой файловой системе:
grub> kernel /boot/vmlinuz-2.4.21 ro root=/dev/hda2
Помните, что нумерация разделов в GRUB начинается с 0, поэтому hd0,l=/dev/hda2.
Следующие два используются только в системах, при загрузке которых используется ramdisk. Сначала найдите initrd:
grub> find /boot/init<tab> grub> find /boot/initrd-2.4.22-1.img
Загрузите образ initrd:
grub> initrd /boot/initrd-2.4.22-1.img



Чтобы узнать, в каких разделах находятся файловые системы, воспользуйтесь командой df. Перед этим проследите за тем, чтобы все проверяемые разделы были смонтированы.
Сначала необходимо убедиться в том, что файловые системы установлены в правильных разделах, при помощи команды df:
$ df -h Filesystem Size Used Available Use% Mounted on /dev/hda2 2.5G 1.5G 1G 60% / /dev/hdal 100M 30M 70M 30% /boot
Чтобы убедиться в правильности файлового дерева загрузочного раздела, запросите содержимое /boot/boot:
$ ls /boot System.map-2.4.21 boot grub config splash.xpm.gz vmlinuz vmlinuz-2.4.21
Некоторые дистрибутивы (скажем, Debian) создают мягкую ссылку /boot на родительский каталог:
$ cd /boot $ ls -al boot lrwxrwxrwx 1 root root 1 Apr 16 08:50 /boot/boot -> .
Вы можете оставить все как есть и не создавать новый каталог /boot, хотя ссылка создаст зацикливание в файловом дереве. Это еще один способ обеспечить присутствие каталога /boot в загрузочном разделе.


Включите загрузочные записи в конфигурационный файл GRUB, /boot/grub/menu.lst ( в Red Hat используется файл grub.conf с мягкой ссылкой menu.lst). Загрузочная запись GRUB называется строфой (stanza). Ее базовая конфигурация выглядит так:
title Fedora I core root (hd0.0) kernel /boot/vmlinuz-2.4.22-1 root=/dev/hda1 ro initrd /boot/initrd-2.4.22-1.img
Название (title) выбирается произвольно, а его присутствие обязательно — оно сообщает GRUB, где начинается каждая строфа, а также определяет содержимое пункта меню загрузки. Две другие строки содержат информацию, которая вводилась в командной строке GRUB. Использовать команду boot в menu.lst не нужно.
В меню можно включить сколько угодно операционных систем; каждая система представляется отдельной строфой вроде приведенной ранее. Проследите за тем, чтобы строка kernel указывала на правильный раздел и образ ядра. В одном корневом разделе часто размещаются несколько загружаемых ядер, и все загрузочные конфигурации часто используют один и тот же загрузочный раздел (более того, это даже рекомендуется).


Внесите изменения в файл /boot/grub/menu.lst (в некоторых системах используется grub.conf).
Содержимое файла делится на две секции: глобальные параметры и загрузочные записи (строфы). Цвета, тайм-аут и пункт меню по умолчанию определяются в секции глобальных параметров.
Далее приводится пример полного файла menu.lst с глобальными параметрами:
## Файл конфигурации GRUB для пользователя windbag, создан 22-10-2003 ## Глобальные параметры # Пункт по умолчанию default 0 # Тайм-аут в секундах timeout 5 # Цвета color cyan/blue white/blue # Отображение заставки splashimage (hd0.0)/boot/splash.xpm.gz foreground bbbbbb background 000000 ## Меню загрузки ## Пункт по умолчанию title Libranet GNU/Linux, kernel 2.4.21 root (hd0.0) kernel /boot/vmlinuz-2.4.21 root=/dev/hdal ro hdb=scsi hdc=scsi # Новое тестовое ядро 2.6 title Ubranet GNU/Linux. kernel 2.6.3-testl root (hd0.0) kernel /boot/bzImage-2.6.3-test1 root=/dev/hda1 ro # Red Hat 9 title Red Hat 9 root (hd0.4) kernel /boot/vmlinuz-2.4.22-1 root=/dev/hda5 ro initrd /boot/initrd-2.4.22-1.img



Известно несколько хитроумных приемов для добавления Windows 95/98/ME в систему Linux. Вам придется скрыть разделы и восстановить GRUB в записи MBR после установки Windows, потому что Windows заменяет системный загрузчик. Для установки Windows 95/98/ME необходимо заранее подготовить первичный раздел. К сожалению, GRUB не поддерживает загрузку с CD-ROM, поэтому вам потребуется загрузочная дискета Windows. Если у вас еще нет такой дискеты, создайте ее в Windows.
Установка Windows 95/98/ME в раздел /dev/hda4 производится так. Загрузите командную консоль GRUB.
Вставьте загрузочную дискету Windows.
Скройте все существующие разделы в командной строке GRUB:
grub> hide(hd0.0) grub> hidethd0.1) grub> hide(hd0.2)
4. Загрузите Windows с дискеты:
grub> chainloader (fd0) +1 grub> boot
Не забудьте включить поддержку CD-ROM в загрузочную дискету.

5. Создайте первичный раздел DOS для установки Windows, используя команду MS-DOS fdisk. Когда создание разделов будет завершено и вы вернетесь к приглашению А:\>, вставьте компакт-диск Windows и запустите программу установки:
A:\> D: D:\> setup
6. Windows заменяет MBR, но это лишь упростит последующие перезагрузки. После того, как система будет установлена, восстановите GRUB в MBR. Загрузитесь с дискеты GRUB и выполните следующие команды:
grub> root (hd0.0) grub> setup (hd0)
7. Извлеките дискету GRUB и перезагрузите компьютер. На экране снова появляется меню GRUB. Загрузите Linux и отредактируйте menu.lst:
title Windows 98 on /dev/hda4 hide (hd0.0) hide (hd0.1) hide (hd0.2) unhide (hd0.3) rootnoverify(hd0.3) makeactive chainloader +1


С Windows NT/2000/ XP дело обстоит намного проще. Программа установки ведет себя более разумно — она позволяет вам выбрать существующий или создать новый раздел. Систему даже можно установить на компьютере с уже установленным экземпляром Linux (при условии, что на диске имеется достаточно свободного места и неиспользованный первичный раздел).
Запишите содержимое таблицы разделов и отметьте, что установлено в каждом разделе. Windows не распознает разделы Linux, а только выводит их размеры, поэтому наличие записанной информации поможет лучше разобраться в происходящем.
12.13. Восстановление GRUB в MBR с использованием диска Knoppix Загрузочная дискета на этот раз не понадобится; загрузите систему с компакт-диска. После того как система будет установлена, восстановите GRUB в MBR — загрузите компьютер с дискеты GRUB и выполните следующие команды:
grub> root (hd0.0) grub> setup (hd0) grub> reboot
Извлеките дискету GRUB и перезагрузите компьютер. На экране снова появляется меню GRUB. Загрузите Linux и создайте в menu.lst запись для Windows:
title Windows XP on /dev/hda4 rootnovenfy(hd0.3) makeactive chainloader +1
Скрывать разделы от Windows NT/2000/XP не нужно.


Воспользуйтесь компакт-диском Knoppix. Загрузите систему и откройте окно командного процессора. Переключитесь на учетную запись root командой su и запустите консоль GRUB. Выполните следующие три команды:
grub> root (hd0.0) grub> setup (hd0) grub> quit
После перезагрузки появляется меню GRUB.

Задайте пароль в menu.lst, чтобы ограничить использование командной консоли GRUB. Сначала в Bash сгенерируйте хешированный пароль командой grub-md5-crypt:
# grub-md5-crypt Password: Retype password: $l$RiAfJO$QTuAlS/BGqlkYHQADZejsl
Вставьте зашифрованный пароль в секцию глобальных параметров menu.lst перед загрузочными строфами:
password --md5 $l$RiAfJO$QTuAlS/BGqlkYHQADZejsl
Также можно использовать простой текстовый пароль:
password bigsecretpassword
12.15. Защита отдельных пунктов меню GRUB Конечно, этот вариант менее надежен. Если вы используете простой текстовый пароль, ограничьте доступ к файлу и разрешите его только root:
# chmod 600 menu.lst
Когда во время загрузки системы появится меню GRUB, нажмите клавишу р, чтобы ввести пароль и получить доступ к командной консоли. Пользователи, не знающие пароля, смогут только выбрать один из пунктов меню загрузки; командная консоль GRUB останется для них недоступной.


Установите пароль GRUB (см. раздел 12.14), а затем включите команду lock в menu.lst:
title Libranet GNU/Linux, kernel 2.4.21. single user mode lock root (hd0.0) kernel /boot/vmlinuz-2.4.21 root=/dev/hda1 ro single
GRUB читает menu.lst последовательно, поэтому все строки после lock становятся недоступными для пользователей, не знающих пароля. При попытке загрузить заблокированный пункт меню будет выдано следующее сообщение об ошибке:
Error 32: Must be authenticated
Желательно сообщить пользователям, к каким командам меню ограничен доступ:
Libranet GNU/Linux, kernel 2.4.21. single user mode, AUTHENTICATION REQUIRED



Заставку GRUB можно создать на базе любого графического файла. Преобразуйте изображение к определенному формату и размеру, а затем включите в menu.lst ссылку на созданный файл.
Графические заставки GRUB должны удовлетворять следующим требованиям: тип файла — xpm.gz; размеры — 640 х 480; 14 цветов.
Начните с создания изображения размером не менее 640x480 в любом графическом формате. Остальное делается программами ImageMagick и gzip. В следующем примере мы преобразуем файл .jpg:
$ convert -depth 14 -resize 640x480 image.jpg newimage.xpm && gzip newimage.xpm
Переместите новый файл newimage.xpm.gz. Откройте файл menu.lst и добавьте (или измените) строку с определением заставки:
# Отображение заставки splashimage (hd0.5)/boot/newimage.xpm.gz


Сгенерируйте базовый файл lilo. conf командой liloconfig. Отредактируйте файл, включите в него комментарии, названия и любые дополнительные параметры по вашему усмотрению.
Убедитесь в том, что вы загрузили новейшую версию LILO. Как обычно, создайте резервную копию данных и держите под рукой загрузочный диск. Выполните команду:
# /sbin/lilo -V LILO version 22.4.1
После установки/обновления запустите liloconfig. Программа задает много вопросов и предлагает выполнить многочисленные инструкции. Допустим, корневая файловая система находится в разделе /dev/hda3. Ответьте положительно на четыре вопроса:
Install a partition boot record to boot Linux from /dev/hda3? Use LBA32 for addressing big disks using new BIOS features? Install a master boot record on /dev/hda? Make /dev/hda3 the active partition?
Запустите lilo, чтобы записать изменения в MBR:
# /sbin/lilo -v
Перезагрузите компьютер. Вероятно, файл /etc/lilo.conf стоит отредактировать, потому что он содержит минимальный набор записей.


Первый установленный экземпляр Linux является «основным». Сохраните его, чтобы обеспечить работу LILO. Проследите за тем, чтобы корневая файловая система, содержащая каталог /boot, находилась в первичном разделе, в противном случае LILO работать не будет.
Запишите местонахождение раздела, в котором будет устанавливаться корневая файловая система следующего экземпляра Linux. Если вы также знаете точное имя ядра и образа initrd (если он используется), вы можете немного опередить события. Оставаясь в основном экземпляре Linux, создайте запись lilo.conf для второго экземпляра:
# Red Hat 9 image=/boot/vmlinuz-2.4.22-1 initrd=/boot/i nitrd-2.4.22-1.img label="Red Hat 9" root=/dev/hda6 read-only
Запишите изменения в MBR:
# /sbin/lilo -v
Переходите к установке второго экземпляра. Присутствие записи в меню загрузки LILO ускорит перезагрузки, необходимые для завершения установки.
Когда программа установки перейдет к установке загрузчика, обязательно выберите вариант «install to the first sector of the root partition» (возможно, в вашей программе установки формулировка будет выглядеть несколько иначе). Не перезаписывайте MBR.
12.19. Альтернативная загрузка Windows и Linux с использованием LILO Если точные имена ядра и образа initrd неизвестны, вам придется узнать их в основном экземпляре Linux. Переходите к установке второго экземпляра Linux. Когда дело дойдет до первой перезагрузки, вы снова окажетесь в основном экземпляре Linux. Смонтируйте файловую систему второго экземпляра Linux и прочитайте содержимое каталога /boot:
# mount /dev/hda6 /mnt/tmp # cd /mnt/tmp # ls boot System.map initrd-2.4.22-1.img System.map-2.4.22-1 vmlinuz vmlinuz-2.4.22.1
Имена ядра и образа initrd известны. Создайте запись в lilo.conf, перезапустите /sbin/lilo и перезагрузите компьютер. Теперь вы можете выбрать новую версию Linux в меню загрузчика и завершить установку программы. См. также
lilo(8), lilo.conf(5); /usr/doc/lilo или /usr/share/doc/lilo.



Самый простой способ — установить все версии Windows, которые должны работать в системе. Всегда устанавливайте их по порядку, начиная с самой старой. Сохраните четвертый первичный раздел для Linux.
В системе может быть установлен только один экземпляр Windows 95/98/ME, потому что эти системы не поддерживают альтернативную загрузку. Windows NT/2000/ХР поддерживают альтернативную загрузку и создают записи для каждого установленного экземпляра в загрузчике Windows.
Установите Linux в последнюю очередь. Сделайте четвертый первичный раздел расширенным и создайте логический раздел для Linux. Во время установки Linux установите LILO в MBR, a LILO автоматически создаст запись для Windows.
# Стабильное ядро 2.4 image=/boot/vmlinuz-2.4.21 label="Libranet-hd3" root=/dev/hda5 read-only # Windows other = /dev/hda1 label="Windowses" table = /dev/hda


Воспользуйтесь встроенной функцией создания загрузочных дискет:
# cd /usr/lib/iilo # make -f Makefile.floppy
Не забудьте защитить дискету от записи.


Ограничьте доступ к lilo.conf и разрешите его только суперпользователю root:
# chmod 600 lilo.conf
Затем защитите LILO паролем. Внесите в секцию глобальных параметров lilo.conf следующие записи:
password="" restricted
Перезапустите LILO, чтобы изменения вступили в силу:
# /sbin/lilo
В ответ на запрос введите пароль root. Программа создает файл /etc/lilo.conf.shs с паролем, доступным только для root. Теперь при перезагрузке системы LILO будет запрашивать пароль у каждого, кто попытается ввести команду linux single или linux init=/bin/sh.


Запишите резервную копию MBR на дискету. Смонтируйте диск, а затем воспользуйтесь командой dd:
# dd if=/dev/hda of=/floppy/mbr bs=512 count=1


Решение проблем установки RPM


Задача

Попытка установки пакета RPM завершается с сообщением «Error: Failed dependency». Добро пожаловать в «кошмар зависимостей»!



Сборка пакетов по исходным текстам


Задача

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



Сеансы Vim


Задача

Вы работаете над большим проектом; работа прерывается на ночь. Хорошо бы сохранить все: параметры, привязки, открытые файлы, открытые окна, позицию и размер окон... словом, все, что обычно пропадает при завершении работы?



Серийная замена паролей


Задача

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



Серийное добавление новых пользователей


Задача

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



Серийное включение пользователей в группы


Задача

Требуется добавить большое количество пользователей в группу.



Сопровождение yum


Задача

Вы хотите избавиться от скопления загруженных пакетов в системе или позаботиться о том, чтобы Yum работал со свежими пакетами вместо кэшированных.>/p>



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


Задача

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



Создание дисковых разделов Linux командой fdisk


Задача

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

Создание файлов и каталогов

Задача

Требуется упорядочить файлы, разместив их в каталогах. Но откуда берутся каталоги? И если на то пошло, как создать файл? 9.14. Удаление файлов и каталогов

Создание файловой системы в новом разделе


Задача

На диске был создан новый раздел. Но пользоваться им еще нельзя; сам по себе раздел — не более чем фрагмент дискового пространства. Как разместить на нем файловую систему?



Создание групп командой groupadd


Задача

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



Создание локального архива Debian

Задача

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

3.15. Выбор пакетных зеркал для apt-proxy.conf

Создание системного пользователя


Задача

Вы хотите знать, как создать системного пользователя для таких программ, как Postfix, Apache или Squid. Для таких программ рекомендуется создать собственные учетные записи пользователей вместо того, чтобы на скорую руку «свалить» их на универсального пользователя nobody.



Создание системных групп командой addgroup


Задача

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



Создание смешанной системы Debian


Задача

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



Списки совместимости

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

Первым и наиболее надежным источником информации станет веб-сайт вашего дистрибутива Linux. На большинстве таких сайтов публикуются списки HCL (Hardware Compatibility Lists). Если для какой-то конкретной разновидности Linux такого списка не существует, возьмите список из другого дистрибутива. Устройство, которое работает в одном дистрибутиве, должно работать во всех. Различаться будут только уровни прямой поддержки. Например, Mandrake и Linspire обеспечивают расширенную поддержку звуковых карт и видеоадаптеров. Другие дистрибутивы могут работать с теми же устройствами, но, возможно, вам придется найти и установить драйверы самостоятельно. Иногда для этого даже приходится компилиро-

5.2 Идентификация оборудования при помощи lspci

вать модули ядра (что не вызывает ни малейших сложностей у настоящих асов Linux — так, мелкое неудобство). Таким образом, начните с источников информации по вашему дистрибутиву.

Еще один способ быстро найти информацию по конкретному устройству — провести поиск в Google Groups вида

debian linux riva tnt2

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



Средства разрешения зависимостей


Впрочем, ситуация не столь безоблачна. Самой популярной системой управления пакетами для Linux является RPM (Red Hat Package Manager). RPM — мощная система; она осуществляет проверку зависимостей и версий, а также отслеживает все установленные пакеты в базах данных RPM. Но RPM не может произвести выборку дополнительных пакетов для разрешения зависимостей или управлять связями между пакетами. Оказавшись в тупике из-за проблем зависимости, RPM лишь сообщает, какие пакеты нужно установить; пользователю приходится самостоятельно искать пакеты и устанавливать их. При этом могут возникнуть новые конфликты зависимостей, и простая установка быстро выходит из-под контроля. Подобные ситуации называются «кошмаром RPM».

Для систем на базе RPM было разработано несколько программ разрешения зависимостей, в том числе apt-rpm, urpmi, Yum и Ximian Red Carpet. В конкретных дистрибутивах имеются превосходные программы установки/разрешения зависимостей — скажем, up2date в Red Hat или YaST в SuSE. В этой главе рассматриваются основы RPM и программа Yum, которая изначально разрабатывалась для систем на базе RPM. Для многих пользователей Yum обеспечивает оптимальное сочетание богатства возможностей и простоты использования.



Типы файлов Linux


Помните, что в Linux любой объект интерпретируется как файл. Файлы Linux делятся на семь типов, перечисленных в табл. 9.1.

Таблица 9.1. Типы файлов

Тип файла
Обычный файл
Каталог
Ссылка
Символьное устройство
Сокет
Именованный канал
Блочное устройство

Признак типа выводится в самом начале записи в списке файлов:

# ls -l /dev/initctl prw------- 1 root root 0 Jan 12 00:00 /dev/initctl # ls -l /tmp/.ICE-unix/551 srwx------ 1 carla carla 0 Jan 12 09:00 /tmp/.ICE-unix/551

Тип файлов может указываться в командной строке find:

# find / -type p # find / -type s

Если поиск занимает слишком много времени, работу команды можно прервать клавишами Ctrl+C. 9.1. Введение

Атрибуты файлов

Также стоит обратить внимание на атрибуты файла — например, сценария sortusers:

# ls -l sortusers -rwxr-xr-x 1 meredydd programmers 3783 Jan 7 13:29 sortusers

Строка -rwxr-xr-x 1 meredydd programmers сообщает программисту много полезных сведений: первый символ — является признаком обычного файла. Этот атрибут не может изменяться пользователем. По этому признаку Linux определяет тип файла, поэтому с точки зрения системы расширение является лишним. Расширения нужны только для пользователей и приложений; подстрока rwx задает разрешения владельца файла; первая подстрока r-х задает разрешения владельца группы; вторая подстрока r-х задает разрешения для «всего мира», то есть для каждого, кто имеет доступ к файлу; 1 — количество жестких ссылок на файл. У каждого файла имеется как минимум одна ссылка из родительского каталога; в подстроке meredydd programmers содержится владелец файла и группа, которой принадлежит файл.

Разрешения и права владения могут изменяться командами chmod, chgrp и chown; команда chmod изменяет разрешения, а команды chown и chgrp меняют права владения. Запись rwx на первый взгляд выглядит странно, но в действительности это мнемоника: rwx=Read, Write, eXecute. В этом формате задаются разрешения для владельца, группы и всех остальных.

Таким образом, в примере sortusers пользователю meredydd разрешается чтение, запись и исполнение файла. Члены группы и прочие могут только читать и исполнять файл. Хотя отредактировать файл может только сам пользователь meredydd, ничто не мешает членам группы и другим пользователям скопировать его содержимое.

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



Удаление файлов и каталогов


Задача

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



Удаление групп командой groupdel


Задача

Требуется удалить группу или группы, но при этом проследить за тем, чтобы в системе не осталось «бесхозных» файлов или пользователей.



Удаление пакетов в yum


Задача

Требуется удалить некоторые пакеты из системы.



Управление паролями


Задача

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



Уровни выполнения

Стандартная схема уровней выполнения Linux:

0 — остановка; 1 — однопользовательский режим; 2-5 — многопользовательский режим; 6 — перезагрузка.

Уровни выполнения в дистрибутивах Debian:

0 — остановка; 1 — однопользовательский режим; 2-5 — многопользовательский режим; 6 — перезагрузка.

Уровни выполнения в дистрибутивах Red Hat:

0 — остановка; 1 — однопользовательский текстовый режим; 2 — не используется (определяется пользователем); 3 — многопользовательский текстовый режим; 4 — не используется (определяется пользователем); 5 — многопользовательский графический режим; 6 — перезагрузка.

Уровни выполнения в дистрибутивах Slackware:

0 — остановка; 1 — однопользовательский режим;
7.2. Смена уровня выполнения после загрузки 2 — не используется (то же, что 3); 3 — многопользовательский текстовый режим; 4 — многопользовательский графический режим; 5 — не используется (то же, что 3); 6 — перезагрузка.

В других дистрибутивах могут существовать другие варианты. Уровни 7-9 теоретически существуют, но на практике не используются. Чтобы понять, что происходит на каждом уровне, достаточно прочитать каталоги rc*.d.



Установка и обновление пакетов в yum


Задача

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



Установка yum


Задача

Мне надоело постоянно попадать в «кошмар RPM». Работать должен компьютер, а не пользователь.



Vi/Vim универсальный редактор


Vi (официально произносится «ви-ай», хотя я люблю говорить «ви» в рифму с «фи», чтобы позлить фанатов) — общедоступный текстовый редактор. В какой бы разновидности системы Linux вы ни работали, в вашем распоряжении всегда будет vi или один из его потомков.

У vi существует множество клонов: Vim, elvis, vile, calvin, Vigor, viper, virus и т. д. Проекты такого рода появляются и исчезают, но Vim, elvis и vile широко используются и активно развиваются.

Vim — самый популярный из всех потомков vi. При запуске vi во многих дистрибутивах Linux (таких, как Red Hat, Debian и Mandrake) запускается Vim. Программа поддерживает окна и цветовое выделение синтаксиса, содержит обширную электронную справку и документацию. Впрочем, даже если в вашем распоряжении окажется только древняя версия vi, навыки работы в Vim вам пригодятся.



Включение существующего кэша пакетов в aptproxy conf

Задача

На сервере apt-proxy уже существует довольно большой кэш пакетов. Вы хотели бы, чтобы программа apt-proxy использовала его вместо того, чтобы загружать все пакеты заново.

3.16. Включение существующего кэша пакетов в apt-proxy.conf

Внутреннее строение файловой системы

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

Логический блок — минимальная единица хранения информации (в байтах), которая может выделяться файловой системой. Один файл может состоять из нескольких блоков.

Логический том — раздел диска, диск или том, состоящий из нескольких дисков или разделов,— любая единица хранения данных, воспринимаемая как единое, обособленное пространство.

Внутренняя фрагментация — неиспользуемые места, возникающие, когда файл или его часть заполняет блок лишь частично. Например, если размер блока равен 4 Кбайт, а файл занимает 1 Кбайт, то 3 Кбайт теряются.

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

Экстент — смежные блоки, принадлежащие одному файлу. Файловая система воспринимает экстент как единое целое, что повышает эффективность отслеживания больших файлов.

B+-деревья — сначала появились b-деревья (сбалансированные деревья). После усовершенствования они превратились в b+-деревья. Эти удобные структуры данных, позаимствованные из теории индексирования баз данных, заметно ускоряют поиск и перебор в структурах данных. Файловые системы, использующие эту концепцию, могут быстро просканировать дерево каталогов, сначала выбрать нужный каталог, а затем просканировать его содержимое. Файловая система Ext2 выполняет последовательный поиск, который работает медленнее. 9.1. Введение

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

I-узел — большая часть метаданных файла содержится в i-узле, или индексном узле. Каждому файлу ставится в соответствие уникальный номер i-узла.



Временное использование привилегий root


Задача

Будучи добропорядочным пользователем Linux, вы понимаете, как валено использовать минимальные привилегии, необходимые для выполнения работы. Вы знаете, что суперпользователь root всемогущ, и поэтому работаете в качестве root только тогда, когда это абсолютно необходимо. Как временно переключиться на учетную запись root?



Временное предоставление привилегий root командой sudo


Задача

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



Выбор пакетных зеркал для aptproxy conf


Задача

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



Выключение компьютера или перезагрузка Linux


Задача

Только посмотрите, сколько существует способов выключения и перезагрузки: shutdown, halt, init 0, poweroff, Ctrl+Alt+Delete... Каким из них лучше пользоваться?



Запрет или ограничение доступа к Ctrl+Alt+Delete


Задача

Всем известно, что комбинация клавиш Ctrl+Alt+Delete перезагружает компьютер. Но хотите ли вы этого? С точки зрения безопасности машина становится уязвимой во время перезагрузки, тогда как перезагрузка может быть выполнена любым пользователем, имеющим доступ к клавиатуре. Исходя из этих соображений, возможно, вы предпочтете либо полностью запретить перезагрузку компьютера клавишами Ctrl+Alt+ Delete, либо ограничить ее некоторыми пользователями.



Журнальные файловые системы


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

Файловые системы Linux асинхронны. Они не записывают метаданные прямо на диск, а накапливают данные в кэше записи в памяти и осуществляют запись периодически, в моменты низкой загрузки процессора. Такая схема повышает общее быстродействие системы, но сбой питания или системы может привести к потере метаданных. Если это произойдет, при активации драйвера файловой системы во время перезапуска и при выполнении программы fsck (FileSystem Consistency checK) будут обнаружены несоответствия. Поскольку Ext2 хранит несколько экземпляров метаданных, обычно ей удается восстановить нормальное состояние системы.

Но у такого подхода есть недостаток — время восстановления. Fsck проверяет абсолютно все биты метаданных. На это может потребоваться от нескольких минут до получаса и более для больших файловых систем. Журнальным файловым системам столь долгая проверка не нужна, потому что они ведут журналы изменений. Таким образом, проверяются только изменившиеся файлы, а не вся файловая система.

В распоряжении пользователей Linux имеется немало замечательных журнальных файловых систем, в том числе Ext3, ReiserFS, XFS и JFS. Ext3 — журнальная система на базе Ext2. Системы ReiserFS, XFS и JFS способны работать с файловыми системами, объем которых на 64-разрядных платформах измеряется экзабайтами. К сожалению, пользователи ia32 ограничены обычными терабайтами.

Какую файловую систему выбрать? Не существует однозначно лучшего варианта; все они хороши по-своему. Далее приводится краткая сводка основных достоинств и недостатков.

Ext3 — система отличается простотой и удобством. Она прекрасно устанавливается поверх Ext2, поэтому вам не придется строить систему с самого начала.

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