Архив

Публикации с меткой ‘FreeBSD’

Как курить man’ы во FreeBSD

17 октября 2009

Man pages – это основная документация в UNIX. Многие начинающие пользователи UNIX испытывают предубеждение, что, мол, man pages непонятны, трудны для изучения. Это не так. Предубеждение родом из прошлого, когда страницы руководства писались программистами для программистов. Тогда системному администратору (да и обычному пользователю) были необходимы навыки программиста. Сейчас требования квалификации пользователя FreeBSD существенно упали. Man’ы тоже упростились, и вполне могут стать отправной точкой для изучения FreeBSD.

 

Man pages состоят из девяти нумерованных разделов. Рассмотрим их поближе:

1. General commands (основные команды);

2. System calls and error numbers (системные вызовы и коды ошибок);

3. The C libraries (библиотеки языка C);

4. Devices and device drivers (устройства и драйверы устройств);

5. File formats (форматы файлов);

6. Game instructions (инструкции к играм);

7. Miscellaneous information (разное);

8. System maintenance commands (команды обслуживания системы);

9. Kernel system interfaces (системные интерфейсы ядра).

 

Каждая страница man начинается с названия описываемой команды и номера раздела в круглых скобках (например, команда man ls выведет 1-й строчкой LS(1), что означает, что команда ls принадлежит разделу руководства #1 General commands). Если подобные упоминания команд встречаются в документации, то это означает, что читать эту страницу руководства следует именно из указанного раздела.

 

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

CP(1)                   FreeBSD General Commands Manual                  CP(1)

NAME
     cp — copy files

SYNOPSIS
     cp [-R [-H | -L | -P]] [-f | -i | -n] [-lpv] source_file target_file
     cp [-R [-H | -L | -P]] [-f | -i | -n] [-lpv] source_file …
        target_directory

DESCRIPTION
     In the first synopsis form, the cp utility copies the contents of the
     source_file to the target_file.  In the second synopsis form, the con-
     tents of each named source_file is copied to the destination
     target_directory.  The names of the files themselves are not changed.  If
     cp detects an attempt to copy a file to itself, the copy will fail.

     The following options are available:

     -H    If the -R option is specified, symbolic links on the command line
           are followed.  (Symbolic links encountered in the tree traversal
           are not followed.)

<…>

EXIT STATUS
     The cp utility exits 0 on success, and >0 if an error occurs.

COMPATIBILITY
     Historic versions of the cp utility had a -r option.  This implementation
     supports that option, however, its use is strongly discouraged, as it
     does not correctly copy special files, symbolic links or fifo’s.

     The -v and -n options are non-standard and their use in scripts is not
     recommended.

SEE ALSO
     mv(1), rcp(1), umask(2), fts(3), symlink(7)

STANDARDS
     The cp command is expected to be IEEE Std 1003.2 («POSIX.2») compati-
     ble.

HISTORY
     A cp command appeared in Version 1 AT&T UNIX.

Как видно из примера, man pages делятся на разделы. Часть из них является стандартными, и встречаются практически в каждой странице руководства.

NAME сообщает имя программы.

SYNOPSIS приводит перечень ключей и их аргументы.

DESCRIPTION содержит краткое описание программы/функции/библиотеки.

OPTIONS – параметры командной строки и их назначение.

BUGS описывает проблемы с программным кодом.

SEE ALSO – перечень смежных материалов man.

Стандарты man pages описаны в MDOC(7).

Навигация по man pages осуществляется стрелкой вниз (вперед), клавишами B (назад), PgUp (страница вперед) и PgDown (страница назад). В пределах страницы можно выполнять поиск. Для этого надо нажать / и вслед за ним ввести искомое слово. Если оно будет найдено, то вы сразу переместитесь к его первому вхождению, и оно будет подсвечено. Клавишей N можно переместиться к следующим вхождениям этого слова.

 

Существует возможность искать страницы man.

Команда apropros ищет все страницы man, названия или описания которых включают указанное слово. Например:

[19:05] root@SAN [/root] # apropos cp
CPU_ELAN(4)              — AMD Elan 520 CPU support
acpi(4)                  — Advanced Configuration and Power Management support
acpi_asus(4)             — Asus Laptop Extras
acpi_fujitsu(4)          — Fujitsu Laptop Extras
acpi_ibm(4)              — ACPI extras driver for IBM laptops
acpi_panasonic(4)        — ACPI hotkey driver for Panasonic laptops
acpi_sony(4)             — ACPI notebook controller driver for Sony laptops
acpi_thermal(4)          — ACPI thermal management subsystem
acpi_toshiba(4)          — Toshiba HCI interface
acpi_video(4)            — ACPI Video Extensions driver
acpiconf(8)              — control ACPI power management
acpidb(8)                — ACPI DSDT debugger

<…>

Остальное я вырезал за ненадобностью. Большинство найденных страниц не имеет никакого отношения к команде cp (служащей для копирования файлов), однако в них присутствует искомая комбинация символов.

В таких случаях куда полезнее может оказаться команда whatis. Она ищет в man pages только целиком встречающиеся слово или сочетание слов. Происходит это так:

[19:08] root@SAN [/root] # whatis cp
cp(1)                    — copy files
cp(4)                    — driver for synchronous Cronyx Tau-PCI WAN adapters

Как мы видим, cp – это не только программа копирования файлов, но еще и драйвер. Чтобы просмотреть man page из конкретного раздела (например, 4-го), используется такой синтаксис:

man 4 cp

Все гениальное просто. Man pages – не исключение.

Default ,

Монтируем флешку во FreeBSD

7 октября 2009

1. Подключаем к компьютеру флеш-носитель.

2. Вводим команду:

# dmesg

Обнаруживаем нечто вроде:

umass0: <JetFlash Mass Storage Device, class 0/0, rev 2.00/1.00, addr 2> on uhub4
umass0: Get Max Lun not supported (STALLED)
da1 at umass-sim0 bus 0 target 0 lun 0
da1: <JetFlash Transcend 2GB 8.07> Removable Direct Access SCSI-2 device
da1: 40.000MB/s transfers
da1: 1926MB (3944448 512 byte sectors: 255H 63S/T 245C)

Интересующее нас устройство зарегистрировалось в системе как da1.

3. На всякий пожарный случай проверяем, какие тома на нем расположены:

# ls /dev/

da1

da1s1

Итак, на флеш-носителе есть всего один том, именующийся da1s1.

4. Монтируем его в каталог /mnt:

# mount_msdosfs /dev/da1s1 /mnt

5. Проверяем результат:

# ls /mnt/
Drivers FreeBSD Images

Содержимое флеш-носителя у нас перед глазами.

Default , ,

Прокрутка консоли во FreeBSD

7 октября 2009

Буфер экрана во FreeBSD прокручивается клавишами вверх-вниз при нажатом Scroll Lock. Возврат в командную строку осуществляется повторным нажатием Scroll Lock.

Default , ,

Выбор идеального дистрибутива Linux. Однозначный ответ на вечный вопрос

24 мая 2009

Интернет пестрит статьями, выкладками и холиварами на тему выбора идеального дистрибутива Linux для дома/офиса/сервера и пр. В числе высеров Linux-коммунити встречаются весьма интересные материалы, охватывающие огромное число аспектов выбора ОС, включающие в себя сравнительные таблицы дистрибутивов и рекомендации на все случаи жизни. Я пойду другим путем. Я сразу дам ответ, какой дистрибутив лучший. Просто лучший по всем параметрам, и все. Который подойдет и новичку, и профессионалу, и сисадмину, и программисту, и секретарше, и завсегдатаю порносайтов. Лучший Linux — это FreeBSD. И все. И будьте любезны грызть в сторонке бордюр, если вы с этим не согласны. Потому что мне в падлу отслеживать развитие 3-4 совместимых/смежных дистрибутивов, периодически мигрируя на выбившийся в лидеры. Потому что мне в падлу осваивать в каждом новом дистрибутиве новый менеджер пакетов, новые пути расположения конфигурационных файлов, системные утилиты управления ОС и заниматься прочей хуйней. FreeBSD — она одна. Толпы мудаков из коммунити не рвутся сделать «что-то свое, лучшее», они просто работают совместно с командой разработчиков FreeBSD, которые и занимаются селекцией патчей, правок и апдейтов. Это гарантирует стабильность и удобство для нас, конечных пользователей. А больше нам ничего и не надо.

Default , ,

Установка ПО во FreeBSD

25 апреля 2009

Во FreeBSD можно устанавливать ПО как минимум 2-мя путями.

1. Установка из пакетов.

Сами пакеты хранятся на ftp FreeBSD, и индексируются автоматически. Для работы с ними используются команды pkg_add (установка пакета), pkg_info (вывод сведений об установленном пакете) и pkg_delete (удаление). Для примера установим, осмотрим и удалим популярный файл-менеджер Midnight Commander:

[12:23] fedoseyev@SAN [/home/fedoseyev] # pkg_add -r mc
Fetching ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-6-stable/Latest/mc.tbz... Done.

// Пакет установлен, обновляем пути:

[12:23] fedoseyev@SAN [/home/fedoseyev] # rehash

// Делаем пробный запуск:

[12:23] fedoseyev@SAN [/home/fedoseyev] # mc

// Смотрим информацию о пакете:

[12:23] fedoseyev@SAN [/home/fedoseyev] # pkg_info -x mc

Information for mc-4.6.2:

Comment:
Midnight Commander, a free Norton Commander Clone

Description:
GNU Midnight Commander is a user-friendly yet powerful file manager
and visual shell, useful to novice and guru alike. It provides a
clear, user-friendly, and somewhat protected interface to a Unix
system while making many frequent file operations more efficient and
preserving the full power of the command prompt. You will wonder how
you could ever live without it.

WWW: http://www.midnight-commander.org

// И удаляем его:

[12:23] fedoseyev@SAN [/home/fedoseyev] # pkg_delete -x mc

2. Установка из коллекции портов.
Логично, что предварительно необходимо коллекцию портов установить. Это можно сделать с помощью программы sysinstall. Для установки программы из портов необходимо выполнить ее поиск:
# cd /usr/ports && make search name=nmap
// Программа ответит нечто вроде этого:

Port: nmap-4.85.b7
Path: /usr/ports/security/nmap
Info: Port scanning utility for large networks
Maint: daniel@roe.ch
B-deps: gettext-0.17_1 gmake-3.81_3 libdnet-1.11_2 libiconv-1.11_1 lua-5.1.4 pcre-7.9 pkg-config-0.23_1
R-deps: libdnet-1.11_2 lua-5.1.4 pcre-7.9 pkg-config-0.23_1
WWW: http://nmap.org/

Теперь можно приступать к установке, с учетом указанного пути пакета:
# cd security/nmap && make install clean

После сборки программа будет готова к запуску и использованию.

Default ,

Почему не работает свежеустановленное ПО во FreeBSD

22 апреля 2009

Любой пользователь, со скрипом пересаживающийся с Linux на FreeBSD (чаще всего миграция осуществляется именно в таком направлении), первым делом готовит себе привычную рабочую среду, устанавливая привычное же ПО. И, имея твердую веру в то, что система сразу же позволит это самое ПО запускать, удивляется, увидев что-то вроде этого:

[21:00] fedoseyev@SAN [/home/fedoseyev] # mc
mc: Command not found.

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

# rehash

После этого все заработает.

Default

Управление удаленным FreeBSD-сервером с оглядкой на безопасность

22 апреля 2009

Я уже давно приучил себя к мысли, что выполнять любые операции с системой, для которых не требуются привилегии администратора, необходимо под учетной записью обычного пользователя. Применительно к UNIX, это вообще стандарт де-факто, идея-фикс, канон, догма и так далее. А когда речь идет об удаленной машине, имеет смысл вовсе запретить логиниться на нее root’ом. Но права root’а иногда все-таки нужны, а FreeBSD — система консервативная, не слишком быстро реагирующая на перемены в мире, и, скажем, распространенной в среде Linux команде sudo не обучена. Зато в числе групп безопасности FreeBSD имеется группа wheel, которой делегированы права выполнять команду su (от SuperUser — команда, повышающая привилегии пользователя до уровня root). Сложив вышеназванные факты воедино, приходим к следующему решению:

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

# adduser

Система спросит имя пользователя, логин, домашний каталог и пр. В рассматриваемом примере предположим, что мы создали пользователя webadmin.

Добавляем его в группу wheel. Для этого необходимо отредактировать строку в файле /etc/group, добавив нужного пользователя через запятую после root:

wheel:*:0:root,fedoseyev,webadmin

Запрещаем root’у логиниться по ssh. Для этого правим конфигурационный файл демона ssh — /etc/ssh/sshd_config. Нас интересуют 2 параметра:

PermitRootLogin no
PasswordAuthentication yes

Осталась самая малость. Перезапускаем демон ssh:

# /etc/rc.d/sshd restart

Готово. Самое время проверить результаты работы. Для начала стукнемся root’ом:

login as: root
Using keyboard-interactive authentication.
Password:
Access denied

Нельзя, что нам и требовалось. Логинимся созданным пользователем и повышаем привилегии до суперадминистратора (когда в ответ на команду su система спросит пароль, она, само собой, будет иметь ввиду пароль root’а):

login as: webadmin
Using keyboard-interactive authentication.
Password:
Last login: Wed Apr 22 20:03:18 2009 from x.x.x.x

[20:23] webadmin@SAN [/home/webadmin] > su
Password:
[20:23] webadmin@SAN [/home/webadmin] #

Вуаля.

Default , , ,

Настройка сервера времени во FreeBSD

21 апреля 2009

В догонку к предыдущей статье рассмотрим настройку сервера времени во FreeBSD. Она более тривиальна и понятна, чем в Windows, вопреки расхожим убеждениям в том, что UNIX-системы сложнее.

Во FreeBSD в качестве сервера времени выступает демон ntpd. Создадим для него конфигурационный файл и внесем нужные настройки:
# cat > /etc/ntpd.conf
# NTP Servers for sync:
server europe.pool.ntp.org

# Drifts for local NTP Server
driftfile /var/db/ntpd.drift

# To deny any machines from changing configuration, but allow localhost:
restrict default nomodify nopeer
restrict 127.0.0.1

# To allow any machines to sync their clocks with ntpd, but ensure
# they are not allowed to configure ntpd or used as peers to sync
# against, uncomment this line:
restrict x.x.x.x mask 0.0.0.0 nomodify notrap nopeer

# To allow any machines from LAN to sync their clocks with ntpd, but
# ensure they are not allowed to configure ntpd or used as peers to
# sync against, uncomment this line:
# restrict 192.168.x.x mask 255.255.255.0 nomodify notrap nopeer

Нажимаем Ctrl+D (в дальнейшем ^D).
В моем конфигурационном файле каждый параметр достаточно хорошо документирован, поэтому описывать каждую строчку нет смысла. Единственное, на что следует обратить внимание сразу: такая конфигурация предполагает, что данный сервер времени является глобальным, то есть может быть использован любым компьютером в Интернете.

Создаем файл, который служит для автоматической компенсации естественного смещения часов:
# touch /var/db/ntpd.drift

И, наконец, добавляем демон ntpd в автозагрузку:
# cat >> /etc/rc.conf
ntpd_enable="YES"
ntpd_flags="-c /etc/ntpd.conf -l /var/log/ntpd.log -p /var/run/ntpd.pid -f /var/db/ntpd.drift"
^D

Теперь можно запустить ntpd:
# ntpd -c /etc/ntpd.conf -l /var/log/ntpd.log -p /var/run/ntpd.pid -f /var/db/ntpd.drift

И проверить наличие процесса ntpd в списке:
# top

Если в колонке COMMAND вы наблюдаете процесс ntpd, то вы все сделали правильно.

Default ,

Настройка приглашения в csh

19 апреля 2009

Стандартная строка приглашения csh во FreeBSD выглядит бледно и бедно. Однако ее можно поменять командой:

$ set prompt

с набором параметров.

Для себя выбрал идеальный вариант ввиде:

$ set prompt=”%T %n@%m [%/] %# “

что соответствует такой строке приглашения:

16:00 root@SAN [/root] #

где 16:00 — текущее время, root — имя пользователя, SAN — имя хоста, [/root] — активный каталог. Очень удобно и информативно. Команда должна быть записана в ~/.cshrc (для текущего пользователя), либо в /etc/csh.cshrc (для всех пользователей, но если в ~/.cshrc указано другое, то приоритет отдается личной настройке пользователя).

Вариантов переменных, которые можно использовать в приглашении, масса:

%/ — активный каталог
%M — полное DNS-имя компьютера
%m — NetBIOS-имя компьютера
%S/%s — включить/отключить стандартный режим
%B/%b — включить/отключить полужирный шрифт
%U/%u — включить/отключить подчеркивание
%t — показ времени в 12-часовом формате
%T — показ времени в 24-часовом формате
%p — показ времени с точностью до секунды в 12-часовом формате
%P — показ времени с точностью до секунды в 24-часовом формате
%n — имя пользователя
%d — день недели в текстовом формате
%D — день недели в числовом формате
%w — месяц в текстовом формате
%W — месяц в числовом формате
%y — год в двухзначном формате
%Y — год в четырехзначном формате

Default , , ,