1a4bbdc3

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


Разберитесь в структуре 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)

Содержание раздела







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