Первые шаги во FreeBSD


Вот вы установили эту чудесную ОС. И, наверное, первый вопрос "и что теперь". А теперь мы узнаем основные команды, которыми вы будете пользоваться каждый день. Советую посмотреть каждую из описанных ниже команд.

Одна из важных команд это получение справки по другим командам "man", например, набрав "man pwd" мы получим полную справку по назначению команды pwd и по всем ее возможностям. Не пренебрегайте прочтением справки, она поможет избежать многих проблем.

Давайте узнаем, где мы сейчас вообще находимся. Команда "pwd" возвращает текущий каталог. Наберите ее. Перемещаться по каталогам надо командой "cd" (change dir). Это достаточно интересная команда, например, набрав "cd ~" мы попадаем в свой домашний каталог. "cd .." - каталог вверх. "cd ../.." - два каталога вверх. "cd /" - перейти в корень файловой системы и т.д.

Чтобы просмотреть содержимое текущего каталога наберите "ls", но результат этой команды в чистом виде не очень читабельный, хотя в некоторых случаях так лучше. Наберите "ls -l" - мы увидим список по одной записи в строке, при этом отображаются так же атрибуты файлов и каталогов. Например "d" в самом начале означает что это каталог, а "-" что это файл. Если вывод команды не вошел на экран, то наберите "ls -l | more". Это означает "передать результат команды ls -l программе more". Программа more в свою очередь позволяет просматривать переданные ей данные, перемещаясь привычным способом (стрелки курсора, pgup, pgdown).

Вообще используя командную строку FreeBSD можно строить очень сложные команды и благодаря этому эффективно работать в этой ОС.

Наберите "date", эта команда показывает текущую дату. Так же она позволяет менять время в системных часах компьютера. Можно форматировать результат работы команды, например, так: date "+%d.%m.%Y" . Чтобы узнать больше об этой команде, наберите "man date"

Узнать информацию об ОС можно, набрав "uname -a", так же у этой команды есть и другие ключи. Например "uname -i" покажет платформу (архитектуру) компьютера, на котором она запущена.

Давайте посмотрим список пользователей, которые сейчас находятся в системе: "who" или "w". Кстати многие начинающие пользователи ОС FreeBSD даже не догадываются, что можно открыть одновременно несколько консолей для удобства работы. Если вы не используете графическую оболочку, то нажмите Alt+F2 и увидите приглашение ввода логина и пароля. Вернутся на первую консоль - Alt+F1 и т.д. Чтобы посмотреть информацию о себе, наберите "who am i" или "whoami", но первый вариант информативнее.

Добавить учетную запись пользователя можно командой adduser. Будет задан ряд вопросов: логин, имя, uid (user identificator), группа, пригласить ли его в другие группы, логин класс (оставляем, как есть), шелл, путь к домашней директории, использовать ли пароль (думаю, стоит выбрать да ;), использовать ли пустой пароль (нет), использовать ли случайный пароль (нет), вводим пароль, повторяем, заблокировать ли акаунт после создания (нет), проверяем и подтверждаем. (Эта последовательность записывалась на ОС FreeBSD-5.4-STABLE, на других версиях может несколько отличатся, но смысл, думаю, ясен).

"rmuser логин_пользователя" удаляет пользователя из системы после подтверждения.

Теперь давайте посмотрим список запущенных программ (процессов). Команда "ps", но результат команды достаточно скудный. Лучше использовать дополнительные ключи команды: "ps -aux", так мы получаем много информации о процессах. Здесь думаю уже пора рассказать о команде "grep". Эта команда вырезает из предоставленных ей данных строку по шаблону и показывает результат. Например "ps -aux | grep root" покажет все процессы, запущенные от пользователя root, а "ps -aux | grep xterm" покажет все запущенные копии программы xterm (вариант консоли для графической оболочки).

Программа "top" предназначена для интерактивного (в реальном времени) мониторинга процессов а так же доступной памяти и свопа на диске (выйти из программы можно нажав "q", или ctrl+c - эта комбинация прерывает выполнение программы. не только top но и почти любой другой).

редактировать файлы можно командой "edit имя_файла", запускается встроенный редактор "ee" (easy edit) и в нем открывается указанный файл. Если указанного файла не существует, то он будет создан. Можно указать через пробел несколько файлов, тогда когда вы заканчиваете работу с одним, откроется следующий.

Бывает надо сменить владельца файла или директории или же права доступа на них. делается это следующими командами:

chown пользователь:группа файла/директория - так мы сменим владельца конкретного файла/директории. Так же может указываться маска файлов ( chown пользователь:группа text0* )

chmod права_доступа файл/директория - меняем права доступа. поле "права_доступа" имеет вид xxx , где каждый x - это цифра от 1 до 7. У каждой цифры свое назначение, права слева направо: владельца группы_владельца всех_остальных (естественно пользователь root имеет доступ к любым файлам пользователей). Цифра получается путем нехитрого преобразования, посмотрите на список соответствия:

rwx rwx rwx
421 421 421

Здесь r - возможность чтения файла/директории, w - записи, x - запуска файла на выполнение. (у директории обязательными являются права r-x --- ---).

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

Так же надо заметить, что обе команды chmod и chown имеют ключ -R. Он используется, когда надо сменить владельца/права доступа на директорию и все находящиеся в ней файлы и директории. Например "chown -R vasya:users books"

Несколько команд можно объединить в одной строке знаком "&&". Каждая следующая команда будет выполняться, только если предыдущая завершилась успешно, иначе вся последовательность будет остановлена. Например "chmod 644 film.avi && chown vasya:users film.avi" .

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

Командой "du" (disk usage) можно смотреть использование диска в конкретной директории, т.е. узнать размеры директорий. Наберите "du -hd 1", вы увидите размеры директорий в текущем месте файловой системы. Изучите "man du" чтобы понять, что значат эти "-hd 1"

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

"cp исходный_файл конечный_файл" - скопировать исходный_файл в конечный_файл. Например, cp ~/downloads/lalal.tar.gz ../ggg.tar.gz (копирует из папки downloads в домашней директории файл lalal.tar.gz в директорию на уровень выше текущей директории и переименовывает конечный файл в ggg.tar.gz). Так же можно делать "cp text text.copy" (делает копию файла text в этой же директории и называет ее text.copy)

"mv исходный_файл конечный_файл" - перемещает исходный_файл в конечный_файл. "mv lalal.tar.gz /home/vasya/lalal.tar.gz" перемещает файл lalal.tar.gz из текущей директории в домашнюю директорию пользователя vasya. При подобных операциях надо помнить о правах на директорию назначения и ее владельце, так если этот файл пытается переместить какой то другой пользователь (root'а в расчет не берем) а у vasya нет доступа к своей папке для других - то у того пользователя, конечно же, ничего не получится. Команда "mv lalal.tar.gz ggg.tar.gz" просто переименовывает файл lalal.tar.gz в ggg.tar.gz

"rm файл" - удаляет файл. "rm lalal.tar.gz". Для удаления директорий есть отдельная команда rmdir, но мне больше нравится конструкция "rm -rf директория" - она удаляет указанную директорию со всеми поддиректориями и файлами без подтверждений.

Все эти команды, конечно же, умеют работать с масками файлов. Например "mv text* ../text*", думаю действие этой команды понятно без объяснений.

Команда "find" выполняет поиск файла. " find /usr/ports -name "kde*" " найдет все файлы и папки с именем, начинающимся на "kde", искать будет с директории /usr/ports и во всех поддиректориях.

Допустим, у вас есть файл, но вы не знаете что это за файл и для чего нужен. Поможет команда "file". Она может определить тип файла. Например, набрав "file /bin/ls" мы узнаем что "ls" - это исполняемый файл (ELF 32-bit LSB executable), и еще некоторую информацию о нем. Или у меня есть файл "xmms.m3u" - это плейлист для проигрывателя xmms (графический плеер, очень похож на winamp). Я набираю "file /home/dmq/xmms.m3u" и узнаю что это просто текстовый файл (ISO-8859 English text). Конечно же я мог узнать это набрав "edit /home/dmq/xmms.m3u" и посмотрев содержимое, но такое способ подходит не всегда и не дает полной информации о файле.

Можно просмотреть содержимое файла, не открывая его в каком либо редакторе. Команда "cat", например "cat ~/.login". Тут, как я уже говорил, возможно, использование программы "more", если файл большой.

"dmesg" позволяет смотреть буфер системных сообщений. Ключ "-a" позволяет увидеть абсолютно все сообщения и системный лог. Конечно же, чтобы в этом найти что то нужное необходимо использовать дополнительно "grep" и, возможно, "more" если результат все равно окажется большим. Например "dmesg | grep mem" покажет объем оперативной памяти и диапазон памяти, зарезервированный для себя некоторыми устройствами (видеокартой, звуковой картой и т.д.)

Перенаправление вывода. Мы можем перенаправить вывод программ в файл или какое либо устройство. Например, я хочу вывод команды dmesg записать в файл, чтобы потом его внимательно изучить. Для этого я наберу "df -h > /home/dmq/dmesg.log". Как можно увидеть символ ">" задает место назначения для перенаправляемого потока вывода. Можно даже сделать так: "cat /home/vasya/файл > /dev/dsp0" (предполагается, что у вас есть псевдоустройство dsp, оно используется для вывода звука). Такой командой мы можем "послушать" любой файл.

Команды head и tail. На вход этим командам подается какая либо информация, и они, оставив n-ое количество строк сверху (head) или снизу (tail) показывают этот остаток. В простейшем варианте использования для этих команд задается только параметр "-n", где n - это количество строк, которые надо оставить. Чтобы все это понять, надо посмотреть такой пример: "cat /var/log/messages | tail -10" . Этой комбинацией команд мы посмотрим последние 10 строк файла /var/log/messages. Аналогично "cat /var/log/messages | head -25" получим 25 первых строк того же файла. Чтобы больше узнать о возможностях этих команд - посмотрите "man head", "man tail".

Естественно вам надо будет устанавливать и удалять различные программы на компьютере. Во FreeBSD все программы, распространяемые бесплатно есть в "Коллекции Портов". Если при установке вы распаковали ее на винчестер, то можете ее изучить, перейдя в каталог /usr/ports. Устанавливать и удалять почти все программы можно только от пользователя root. Советую для тренировки установить файловый менеджер Midnight Commander (он очень похож на Norton Commander и облегчает многие операции). Для этого мы сначала найдем его, набрав " find /usr/ports -name "mc*" ", затем перейдем в нужную директорию, которую показала нам команда поиска (были выданы и другие директории, содержащие в начале названия "mc", но нам нужна именно эта) "cd /usr/ports/misc/mc". Теперь набираем "make install clean". Программа установки скачает из интернета необходимые файлы исходные тексты, скомпилирует их, установит программу, и подчистит за собой следы работы (предполагается, что вы подключены к интернету, и он настроен). Если же к интернету вы не подключены, то необходимо где-то найти или скачать вручную все необходимые файлы с исходными текстами и положить их в директорию /usr/ports/distfiles , перейти в директорию /usr/ports/misc/mc и набрать "make install clean". Если все прошло успешно, то вы можете набрать "mc" и запустится этот файловый менеджер.

Другой способ установки программ - использовать пакеты. Пакет - это программа, которую автор скомпилировал на своем компьютере и сохранил в архив исполняемые файлы программы, библиотеки, страницы справочника и т.д. Преимущество пакетов в том, что исключается стадия компилирования и не придется тратить на нее время (которое иногда может доходить до нескольких часов и более). Недостаток - если ваша операционная система настроена нестандартно (что врядли вы станете делать, т.к. наживете много проблем), то программа может не заработать. Я, например, предпочитаю именно пакеты. Для того чтобы установить пакет его необходимо загрузить из интернета. С дистрибутивом FreeBSD (если это не вариант miniinst) уже поставляются основные пакеты, но они скорее всего будут несколько устаревшими, для установки пакетов из дистрибутива надо пользоваться программой sysinstall, так же посмотреть их и выбрать нужные предлагается при установке ОС. работа с пакетами ведется тремя основными командами: pkg_add, pkg_delete и pkg_info. pkg_info выдает информацию по конкретному пакету. pkg_add устанавливает пакет. pkg_delete соответственно удаляет. Узнать, какие программы уже установлены можно просмотрев каталог /var/db/pkg (это справедливо и для пОртов). Давайте рассмотрим на примере установку пакета того же файлового менеджера Midnight Commander. Чтобы его установить я загружу файл ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-5.4-release/misc/mc-4.6.0_15.tbz (у меня версия ОС 5.4-релиз, а версия программы 4.6.0_15). Затем я могу посмотреть краткую информацию о пакете, набрав "pkg_info mc-4.6.0_15.tbz". Установлю пакет "pkg_add mc-4.6.0_15.tbz". Если предыдущая версия пакета уже была установлена то я просмотрю каталог /var/db/pkg "ls -l /var/db/pkg", найду там версию mc-4.6.0 (установленные пакеты отображаются, конечно же, без расширения файла, которое у архива может быть как .tbz так и .tgz), наберу pkg_delete mc-4.6.0_15. И снова "pkg_add mc-4.6.0_15.tbz". Если при удалении пакета ОС сообщила, что он необходим для работы других программ, то удалять его, скорее всего не стоит. Но если вы загрузили просто новую версию пакета и уверены, что она подойдет для программ, которым он необходим, то пакет можно удалить, используя "pkg_delete -f". Ключ "-f" означает force delete, т.е. не обращая внимания на зависимости. Следом, конечно же, надо будет установить новую версию пакета. Но так делать не желательно. Если вы решили обновить программное обеспечение ОС то очень желательно, даже скорее необходимо обновлять его все, т.к. некоторые версии окажутся несовместимы и придется возвращаться к исходному состоянию.

Теперь рассмотрим команды для работы с архивами. С ОС поставляются программы для работы с тремя основными видами архивов (основными для *BSD и Linux операционных систем). Это tar, gzip и bzip2. Дополнительно могут быть установлены программы для работы с архивами zip и rar, а так же для всех остальных которые хоть чуть-чуть известны. Рассмотрим по очереди эти три основных архиватора. (tar - архивы .tar, gzip - .gz и bzip2 - .bz2 . Так же архивы могут быть смешанными, т.е. файл упакован сначала одним архиватором, затем вторым. Так очень популярной комбинацией является .tar.gz , .tar.bz2)

tar . Надо сказать, что tar это не архиватор, а упаковщик, т.е. им можно объединить несколько файлов или папок для удобства хранения или передачи. Чтобы tar'ом запаковать файл необходимо набрать "tar -cf новый_файл.tar файл_для_упаковки". Здесь ключ "c" означает create - создать, "f" - указывает исходный файл. Исходный файл может быть и не один - тогда их необходимо указать все через пробел. Чтобы запаковать директорию со всеми поддиректориями надо набрать "tar -czf название.tar имя_директории", например, "tar -cf test.tar /home/vasya/text". Теперь научимся распаковывать. "tar -xf test.tar" так мы распакуем ранее созданный файл test.tar в текущую директорию. Ключ "x" значит extract - распаковать, а "f" задает файл для распаковки. Так же можно просмотреть содержимое запакованного файла, набрав "tar -tf test.tar", если файлов слишком много то можно добавить "tar -tf test.tar | more". Советую изучить "man tar" чтобы узнать о всех его возможностях.

Теперь рассмотрим архиватор gzip. Чтобы добавить файл в архив, набираем "gzip -c test > test.gz", так же справедливо "gzip -c test1 test2 > test.gz". Просмотреть информацию об архиве можно так "gzip -l test.gz" . Чтобы в архив запаковать директорию, все поддиректории и файлы набираем "gzip -cr название_директории > test.gz". Здесь ключ "r" указывает архиватору, что нужно просмотреть всю директорию рекурсивно и все добавить в архив. Чтобы распаковать архив test.gz, набираем "gunzip test.gz", так мы распакуем содержимое архива в текущий каталог. Чтобы добиться лучших результатов, можно использовать gzip на пару с tar: tar -czf archive.tar.gz исходный_файл/каталог. Здесь ключ "z" указывает tar'у после упаковки пропустить результат через архиватор gzip. Чтобы разархивировать такой архив, набираем "tar -xf archive.tar.gz", при этом автоматически будет определено, что архив получен двумя программами, и он успешно разархивируется.

Архиватор bzip2. Создать архив "bzip2 имя_файла". Внимание! исходный файл будет удален, останется только архив (для тренировки прочтите "man bzip2" и найдите, как это отключить). Можно задавать уровень компрессии используя кличи "-1 .. -9", например "bzip2 -5 info.txt". bzip2 не умеет архивировать директории, поэтому надо использовать его в паре с tar'ом: tar -cfj archive.tar.bz2 исходный_файл/директория . Здесь ключ "z" заменен на "j", что и задает формат конечного архива bzip2. Чтобы разархивировать .bz2 архив можно использовать bzip2 с ключом "-d" (decompress) или отдельную программу bunzip2 что равносильно. bzip2 -d archive.tar.bz2 . Разархивировать такой архив надо как и .tar.gz: tar -xf archive.tar.bz2 .

Давайте рассмотрим важную команду "sysctl". Как нетрудно догадаться по названию она позволяет контролировать систему, а точнее позволяет в реальном времени изменять самые разнообразные настройки системы. Например, чтобы включить или выключить фаервол ipfw (должна быть поддержка в ядре), необходимо набрать "sysctl net.inet.ip.fw.enable=1" (или "0" чтобы выключить). Просмотреть все возможные настройки можно так "sysctl -a". После перезагрузки внесенные изменения будут утеряны, чтобы их сохранить, внесите изменения в файл /etc/sysctl.conf . Формат файла очень прост, и вот пример:

#--- /etc/sysctl.conf ---
hw.snd.maxautovchans=4
hw.snd.pcm0.vchans=4
kern.ipc.shmmax=67108864
kern.ipc.shmall=65536

Конечно же не надо менять бездумно параметры системы, чтобы понять за что отвечает каждый из них, надо прочитать handbook, расположенный на сайтах www.freebsd.org и www.freebsd.org.ru, страницы справки "man sysctl" и, возможно, дополнительную литературу на сайтах соответствующей тематики ( http://www.bsdekaterinburg.ru , http://www.nixp.ru , http://www.bsdportal.ru ), или же в печатных изданиях.

Напоследок сделаю одно уточнение, чтобы не вводить вас в заблуждение, и вы более четко понимали что делаете. Все эти "команды" на самом деле не команды, а программы. Т.е. они не "вшиты" в ядро системы. В окружении ОС есть переменная $PATH - это системные пути, по которым находятся программы и библиотеки, посмотреть ее можно, набрав "echo $PATH" (при условии, что в качестве шелла у вас bash). Например, когда вы набираете "ls", ОС ищет такую программу по эти системным путям и находит ее в директории /bin, откуда и запускает с заданными параметрами (ключами). Надо заметить что если вам надо запустить программу из текущего каталога то необходимо набирать "./имя_файла" (во FreeBSD "." означает текущий каталог), так ОС не будет искать программу по системным путям.

Желаю Вам удачи в изучении и исследовании ОС FreeBSD!

Обновлено: 12.03.2015