This article is protected by the Open Publication
License, V1.0 or later. Copyright © 2005 by Red Hat,
Inc.
Original article: http://www.redhat.com/magazine/005mar05/departments/tips_tricks/
Перевод: © Иван Песин
Служба поддержки пользователей Red Hat получает технические вопросы со всего мира. Специалисты Red Hat ежедневно добавляют полученные вопросы и ответы на них в базу знаний Red Hat Knowledgebase. Пользователи, имеющие учетную запись сайта redhat.com, имеют ограниченный доступ к базе знаний. Подписчики Red Hat Enterprise Linux имеют полный доступ — с дополнительными категориями и возможностями расширенного поиска. Каждый месяц Red Hat Magazine знакомит читателей с Red Hat Knowledgebase, публикуя несколько самых свежих вопросов и ответов.
Скрипты командного интерпретатора могут не только произвести впечатление на ваших друзей, но и сохранить ваше время и силы. С помощью простых в использовании команд, некоторые задачи можно решить за несколько секунд, вместо минут и даже часов. Доказательством этому случат опубликованная в прошлом номере статья Как перестать беспокоиться и полюбить командную строку, часть 1 и статья из этого номера Как перестать беспокоиться и полюбить командную строку, часть 2. Этот выпуск Tips & Tricks раскрывает некоторые простые, но мощные команды Linux, которые каждый может взять в свой арсенал.
Любой, кто занимался администрированием NFS, рано или поздно сталкивался с недоступностью сервера, что приводило к появлению массы "неубиваемых" процессов, ожидающих восстановления связи с сервером NFS. Быстрый экскурс по параметрам монтирования NFS из страницы руководства mount(8) познакомит нас с опциями "intr" и "soft", которые позволяют прерывать такие процессы и завершать по тайм-ауту операции ввода-вывода с неотвечающим сервером. Но что, если мы не ожидали этих проблем? Или если мы решили использовать непрервыаемость операций ввода-вывода для обеспечения целостности данных приложений, выполняющих запись на тома NFS?
В группах новостей часто можно встретить рекомендацию в таки случаях перезагрузить систему, но даже это может оказаться непростым делом, поскольку останов системы будет сильно затянут из-за неотвечающих томов NFS.
Причиной "неубиваемости" этих процессов является то, что не выполняющийся процесс, а ядро, по запросу процесса, взаимодействует с устройством или файловой системой. Вы сталкивались с подобной ситуацией, если вы пытались смонтировать поврежденную дискету или компакт, а команда mount подвисала. В таких случаях нужно просто извлечь носитель — это повлечет сбой подсистемы, а зависший процесс завершится с ошибкой.
В случае NFS, подсистема управляется потоком ядра с именем rpciod. Быстрым решением будет старая добрая команда kill -9
<pid>
, примененная к rpciod (или killall -9 rpciod
).
Не волнуйтесь, процесс в действительности не завершится, но в ответ не
полученный сигнал, вернет всем ожидающим процессам ошибки. Более
элегантным подходом будет заставить rpciod решить, что не стоит
пытаться дождаться сервера. Этого можно добиться деактивировав сетевой
интерфейс или добавив правило пакетного фильтра, которое будет
возвращать ошибку "icmp-port-unreachable"... Будьте терпеливы, перед
тем как rpciod сдастся, может пройти несколько минут, но он таки
сдастся, даже с "жестко" смонтированными файловыми системами.
Предположим, что сервер 192.168.0.5 стал недоступным. Чтобы разрешить
ситуацию, добавим в пакетный фильтр клиента правило:
iptables -I OUTPUT -d 192.168.0.5 -j REJECT
С помощью команды factor
легко найти разложение на
простые множители любого числа. Перед ее использованием, убедитесь что
пакет coreutils установлен в системе. Его можно установить либо с
компактов Red Hat Enterprise Linux, либо из Red Hat Network
(RHN) командой up2date coreutils, если система зарегистрирована
в RHN.
Формат использования команды factor:
factor <number>
Например:
factor 210
выдаст следующий результат:
210: 2 3 5 7
Если число не указано в командной строке, factor
считывает числа, разделенные табуляцией, пробелом или символом новой строки из стандартного ввода.
Запрос командой rpm -q
по-умолчанию не выводит информацию об архитектуре. Чтобы получить такую информацию, используйте команду rpm
со следующими параметрами:
rpm -q --queryformat="%{n}-%{v}-%{r}.%{arch}.rpm\n" <имя-пакета>
Замените <имя-пакета> названием интересующего вас пакета.
Если вы не знаете точного имени, вы можете использовать этот же ключ --queryformat
вместе с командой rpm -qa
и передать вывод команде grep
для поиска всех пакетов, имя которых содержит указанную строку:
rpm -qa --queryformat="%{n}-%{v}-%{r}.%{arch}.rpm\n" | grep <имя-пакета>
Для этого можно использовать команду rpm. Чтобы получить список всех установленных пактов вместе с датой и временем установки, введите:
rpm -qa --last
Если вы хотите получить информацию по конкретному пакету, укажите в команде имя-пакета:
rpm -q --last >имя-пакета<
Например, используйте нижеприведенную команду, чтобы получить информацию о пакете filesystem
:
rpm -q --last filesystem
вывод команды будет таким:
filesystem-2.2.1-3 Wed 07 Jan 2004 05:30:57 AM EST
Чтобы сохранить символические ссылки при копировании файлов и каталогов по сети, рекомендуется использовать команду rsync
. При использовании команды scp
, вместо ссылки копируется файл, на который указывает эта ссылка.
Например, чтобы скопировать и сохранить ссылку test.log
на /home/test/test.log из локального каталога /rsync_test
на машину serverOne в каталог /rsync_test
, выполните:
rsync -a -e ssh /rsync_test/ serverOne:/rsync_test
Узнать кто сейчас зарегистрирован в системе можно несколькими способами. Одним из них является использование команды last
.
Команда last
выводит всех регистрировавшихся
в системе пользователей, вместе с их терминалами. Однако, эта команда
выводит информацию о регистрациях, выполненных после создания
файла /var/log/wtmp
. Потому, убедитесь, что файл /var/log/wtmp
существует. Сделать это можно командой:
touch /var/log/wtmp
Другой командой, связанной с last
, является lastb
.
Разница лишь в том, что последняя выводит список неудачных
попыток регистрации в системе. Для ее работы, должен быть создан файл /var/log/btmp
.
Кроме того, есть еще очень полезная команда w
.
Команда w
выводит список текущих зарегистрированных пользователей и что они
делают (выполняемый процесс). Для каждого пользователя выводятся
следующие поля:
имя пользователя, название терминала, удаленная система, время
регистрации, время простоя, JCPU, PCPU и название текущего
процесса пользователя.
Поле JCPU содержит процессорное время, использованное всеми процессами, запущенными с данного терминала. Оно не включает фоновые задания, выполненные ранее, но включает текущие фоновые задания.
Поле PCPU содержит процессорное время, использованное текущим процессом, указанным в поле "what".