Использование командной строки

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

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

Так что для копирования какого-то файла нам нужно запустить программу cp с указанием - какой файл и куда скопировать. Например:

cp file1 file2

Это нам сделает копию файла file1 под именем file2

А для того, чтобы изменить настройки сетевых подключений, мы должны вносить изменения в файл /etc/network/interfaces, который содержит описание сетевых устройство и их параметров

Откуда же нам знать, какие параметры нужно указывать программе, чтобы она выполнила то, что мы от неё хотим? Для этого у каждой программы имеется краткая справка по использованию, которую можно прочитать, указав в параметре запуска --help
Почитаем справку по программе cp

cp --help

если вывод не помещается в один экран, то можно перенаправить вывод программе more и читать его построчно:

cp --help |more

пролистывание вывода в таком случае мы осуществляем нажатием на enter. Прекратить чтение можно, нажав сочетание клавиш ctrl-c. Это вообще стандартная команда прерывания выполнения любой команды.

Вместо more можно использовать less - тогда текст можно листать и вперёд и назад, просто нажимая стрелки вверх или вниз.

cp --help |less

Выход из программы less осуществляется нажатием на клавишу q - ещё один стандартный способ завершить работу многих программ.

Если же такой справки кажется мало, то можно почитать файл руководства, для чего используется программа man. Следует написать man <имя программы>

man cp

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

Я уже писал, что cp - это программа. В линуксе любая команда - это крошечная программа, служащая обычно только одной цели, но служащая очень хорошо. В таких маленьких программах маловероятны ошибки, а работают они максимально быстро и стабильно. Написанием и сопровождением этих программ занимается проект GNU, поэтому было бы правильнее операционную систему называть GNU/Linux, т.к. без утилит GNU Линукс является просто ядром, толку от которого для пользователя практически нет. В свою очередь и от утилит GNU без Линукса толку нет. Но я уже писал в другой статье и повторюсь здесь - Линукс без GNU существовать может - яркий пример тому Android, а вот примеров работы утилит GNU без Линукса нет. Ну и задача написать ядро операционной системы несоизмеримо более сложная, чем написание нескольких базовых программ для неё. Исходя из этого я GNU/Linux называю просто Линукс и не считаю это проблемой.

Другие базовые программы, которые мы будем использовать постоянно:

mc - файловый менеджер
nano - текстовый редактор
mv - перемещение файла
chmod - изменение прав доступа к файлу
cron - планировщик задач
и некоторые другие, но их общее число вряд ли превысит 20 штук. Как видите, набор не так уж и велик.

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

В помощь системному администратору написано множество графических инструментов. Есть и системы, работающие из веб-браузера - например, Webmin. Но для начала нужно всё-таки освоить более низкоуровневое взаимодействие с сервером, чтобы затем иметь представление о том, что же делают эти надстройки.

Структура каталогов

Каталоги, находящиеся в корне файловой системы Linux служат каждый для своей цели.:

/bin – для хранения исполняемых файлов системных утилит. Там хранятся такие базовые программы, как уже известная нам cp для копирования файлов, mv для перемещения, nano для редактирования текстов и прочее. В некотором смысле это хранилище того, что для Линукса предоставляет проект GNU, хотя там могут быть и другие программы

/boot – здесь находится ядро и конфигурация загрузчика, которым сейчас почти всегда является GRUB. Процесс загрузки Linux - тема для отдельного разговора, факультативно почитать о нём можно в этой статье.

/dev – файлы устройств. С точки зрения операционной системы всё является файлом, в том числе и работа с устройствами. Яркий пример - отправка данных в com-порт представляет собой обычную запись в файл \dev\ttyS0, а запись на первый раздел первого жёсткого диска - это работа с файлом /dev/sda1.

/etc - один из самых интересных для системного администратора - в нём содержатся конфигурационные файлы. Программы в Линуксе все свои настройки хранят в обычных текстовых файлах. К примеру, вот конфигурация сетевых интерфейсов, настройкой которых мы займёмся в следующей статье:


Как видите, все параметры хранятся в человекочитаемом виде, в отличие от того же реестра windows, где чёрт ногу сломит.

/home – для хранения домашних каталогов пользователей. Каждому из пользователей даётся один собственный каталог и это единственное место в файловой системе, где пользователь может делать что угодно. Доступ в остальные места ему ограничен и в основном предоставляется только для чтения, да и то не всегда. Права в Линуксе - это не что-то эфемерное и устанавливаются очень чётко и тут не пройдёт фокус "запустить от имени администратора" :-) С этим каталогом и будут работать клиенты нашего сервера.

/lib – для хранения различных библиотек. Системному администратору практически не интересен, он туда не заходит годами. А если и заходит, то скорее всего это означает, что в системе что-то сломалось.

/lost+found – хранилище всяких сломанных и восстановленных файлов. Бывает это редко, так что чаще всего каталог вообще не используется и стоит пустым

/mnt - для монтирования всяких разных файловых систем. Монтирование - это присоединение какого-либо устройства, содержащего файлы, к нашей системе. Вставили флешку - для неё создастся подкаталог в /mnt и он будет содержать все файлы, находящиеся на флешке. Сюда обычно монтируют сетевые папки, дисководы, жёсткие диски и т.д. В последнее время всё чаще вместо /mnt используется /media. В графических системах в /media есть подкаталог обычного пользователя, куда он может смонтировать свои носители - например те же усб-накопители - не привлекая для этого администратора.

/opt – место для хранения установленных программ. Используется редко. Хотя раньше был очень востребованным - например, на моём сетевом накопителе в данном каталоге находятся все сторонние программы.

/proc - тут человеку делать нечего - здесь у нас содержится информация о процессах. Если системный администратор лично пошёл в этот каталог - значит случилась беда. А так оттуда берут данные такие программы, как top, выводящая информацию о процессах в удобном виде:


/root - домашний каталог пользователя root.

/sbin - то же, что и /bin, но с утилитами для администрирования системы. Программы отсюда имеет право выполнять только root.

/tmp -  для временных файлов. Если вы будете писать программу для Линукса, то именно здесь будете хранить временные файлы. Многие пользователи монтируют /tmp к оперативной памяти, ускоряя работу с временными файлами до космических скоростей.

/usr – здесь находятся программы, устанавливаемые в процессе эксплуатации системы.

/var - предназначен для активного использования системой - тут и журналы и кэши и сайты и почтовые ящики. Очень активно используемый каталог.

Конечно, этот список не полный, а в некоторых случаях многого из описанного может и не быть - например если система встраиваемая, то зачем ей /home? Но чаще всего, установив свежую ОС вы получите плюс-минус этот набор каталогов и именно с ними будете работать. В корне создавать новые каталоги не рекомендуется, однако многие администраторы (и я в том числе) пренебрегают этой рекомендацией. Например, я почти всегда для Самбы создаю каталог в корне, а не в /var или /mnt.

Создание, копирование, перемещение, редактирование и обзор файлов

 

Для работы с файлами используются файловые менеджеры. Наиболее часто используемым в Линуксе является менеджер Midnight Commander. Мы его тоже установим, но сначала попробуем обойтись без него и я расскажу, какие средства использую для работы с файлами. Помните, что запуск любой команды с параметром --help даст краткую справку по использованию.

ls - получение списка файлов.
ls / выведет содержимое корневого каталога
запуск ls без параметров выведет содержимое текущего каталога
ls --color / - то же, но в цветном виде. Удобно для визуального отделения папок от файлов

cd - смена каталога.
Предположим, что мы хотим посмотреть, какие утилиты у нас есть в системе
cd /bin
ls

вывод не поместился на экран. Что же делать? Перенаправить его команде less, служащей для чтения большого количества строк.
ls |less

выход осуществляем по Q

cat - вывод содержимого файла.
Давайте посмотрим, какие группы есть у нас в системе:
cat /etc/group
конечно, это же действие можно выполнять и с помощью less
less /etc/group

touch, cp и mv - создание, копирование и перемещение файлов.
Создадим в домашнем каталоге root файл, переместим его и скопируем
touch /root/test

mv /root/test /root/test2

cp /root/test2 /root/test3

в результате в каталоге /root будут лежать два файла - test2 и test3

Утилита touch предназначена для обновления атрибута времени доступа к файлу, но если запустить её для файла, которого не существует, то он будет создан.

rm - удаление файла

rm /root/test2

rm -rf /путь/к/папке удалит всё содержимое папки и её саму. Используйте с осторожностью!

mkdir - создание каталога

mkdir /root/folder

nano - текстовый редактор.
nano /root/test3

Редактор простой и удобный. Следует запомнить всего два сочетания клавиш - ctrl o для сохранения и ctrl x для выхода.

Права UNIX

Права на файлы устанавливаются при помощи утилиты chmod и представляются в четырёхзначном цифровом формате.
Разберём пример: Пусть права на файл будут 0674
0 - это флаг запуска от имени группы или от имени пользователя. Обычно он не устанавливается и равен нулю
6 - права хозяина и означают, что он может читать файл и записывать в него, но не может исполнять файл как программу
7 - права группы. Тут разрешено и чтение и запись и исполнение
4 - права остальных пользователей. Им можно только читать файл.

что за цифры? - спросите вы. Цифры - это восьмеричное представление двоичной записи чтение-запись-исполнение, где разрешение действия отмечается как 1, а запрет - как 0. Допустим, что мы устанавливаем разрешение только на чтение. Двоичная запись будет 100, что в восьмеричной системе означает цифру 4. Если мы хотим установить разрешение только на чтение и запись, но без права исполнять файл, то запись будет 110, что соответствует цифре 6 в восьмеричной системе счисления. Считать эти значения вручную не обязательно - в файловый менеджер MC встроена функция установления прав и там в удобном виде можно посмотреть числовое значение:

Права в восьмеричном виде посчитаны автоматически и указаны под таблицей: 100674
Изменим права на этот файл следующим образом - владельцу разрешим полный доступ (7), группе только чтение (4), у остальных пользователей прав не будет вообще (0)

chmod 0740 /root/test3

в результате получим такую картину:

Также можно добавлять права сразу для всех категорий пользователей, указав +x или +w или +r

команда
chmod +x /root/test3
добавит флаг исполнения сразу во все поля:

 

Владелец и группа устанавливаются при помощи утилиты chown

Сменим владельца файла на secretar, а группу - на smbgrp

chown secretar:smbgrp /root/test3

Создание пользователей - тема отдельной статьи.

Перейдём к практическому применению полученных знаний и выполним настройку сети.