3. Centos 7

В этом посте осуществлена попытка собрать необходимый минимум полезных команд, часто используемых при решении типовых задач в ОС Linux, в частности - дистрибутивов Red Hat Enterprise Linux / Cent OS 7.

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

Основные каталоги и структура файловой системы Linux регламентируются FHS - Filesystem Hierarchy Standard. FHS поддерживается Free Standards Group — некоммерческой организацией, в составе которой находятся крупные разработчики программного и аппаратного обеспечения, такие как HP, Red Hat, IBM и Dell.

Структура каталогов Linux
/ — корень
----/bin — (binaries) бинарные файлы пользователей
----/boot — файлы загрузчика
----/dev — (devices) файлы устройств
----/etc — (etcetera) конфигурационные файлы
----/home — домашние директории пользователей
----/lib (library) — системные библиотеки
----/media — съёмные носители
----/mnt (mount) — точки монтирования
----/opt (optional applications) — дополнительные приложения
----/proc — (process) информация о процессах
----/root - домашний каталог суперпользователя (root)
----/run — процессы
----/sbin — (system binaries) системные исполняемые файлы
----/srv (server) — сервер
----/sys (system) — информация о системе
----/tmp (temp) — временные файлы
----/usr — (user applications) программы пользователя
--------/usr/bin — исполняемые файлы
--------/usr/sbin — системные исполняемые файлы
--------/usr/lib— библиотеки
--------/usr/local — пользовательские программы, библиотеки и настройки
----/var (variable) — переменные файлы
--------/var/log — файлы логов
--------/var/lib — базы данных
--------/var/lock — файлы блокировок
--------/var/run — PID процессов

/ - корень

Главный каталог, по сути - файловая система Linux. Только root может менять и читать файлы в этом каталоге.

/bin (binaries) - бинарные файлы пользователей

Содержит исполняемые файлы, которые можно использовать когда не подключен каталог /usr. В основном - общие команды, например cat / ls / ps и др.

/boot — файлы загрузчика

Cодержит ядро и другие файлы, используемые при загрузке системы.

/dev (devices) - файлы устройств

В Linux все устройства являются файлами в каталоге /dev. Инициализируется при запуске системы - сканируются подключенные устройства и для них создаются специальные файлы.

/dev/null - псевдоустройство, в которое можно записать все что угодно и оно исчезнет навсегда.

Используя его, можно, например подавить вывод на stdout:

$ cat $filename >/dev/null

/dev/shm - раздел файловой системы, размещенный в оперативной памяти

Может быть использован для увеличения производительности приложений. При перезагрузке информация в разделе стирается.

/etc (etcetera) - конфигурационные файлы

Здесь хранятся конфигурационные файлы всех установленных в системе программ, скрипты запуска и завершения системных демонов, монтирования файловых систем и авторазгрузки программ.

/home — домашние директории пользователей

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

/lib (library) — системные библиотеки

Содержит файлы системных библиотек, которые используются исполняемыми файлами в каталогах /bin и /sbin.

Библиотеки имеют имена файлов с расширением *.so и начинаются с префикса lib*. Например, libncurses.so.5.7. Папка /lib64 в 64 битных системах содержит 64 битные версии библиотек из /lib.

/media — съёмные носители

В этот каталог система монтирует все подключаемые внешние накопители — флешки, оптические диски и другие носители информации.

/mnt (mount) — точки монтирования

В этот каталог могут быть смонтированы внешние или дополнительные файловые системы.

/opt (optional applications) — дополнительные приложения

В эту папку устанавливаются проприетарные программы, игры или драйверы.

/proc (process) — информация о процессах

Содержит информацию о запущенных процессах, обновляемую в реальном времени. Также там есть информация об использовании системных ресурсов (/proc/cpuinfo, /proc/meminfo, /proc/uptime).

/run — процессы

Еще один каталог, содержащий PID файлы процессов, похожий на /var/run, но в отличие от него, он размещен в TMPFS, а поэтому после перезагрузки все файлы теряются.

/sbin (system binaries) - системные исполняемые файлы

Также как /bin содержит исполняемые файлы, доступные на ранних этапах загрузки, но здесь - программы, выполняемые только с правами суперпользователя - системные утилиты.

/srv (server) — сервер

В этом каталоге содержатся файлы серверов и сервисов. Например, могут содержаться файлы веб-сервера apache.

/sys (system) — информация о системе

Назначение каталогов Linux из этой папки — получение информации о системе непосредственно от ядра. Это еще одна файловая система, организуемая ядром и позволяющая просматривать и изменить многие параметры работы системы, например, работу swap, контролировать кулеры и многое другое.

/tmp (temp) — временные файлы

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

/usr — (user applications) программы пользователя

/usr/bin — исполняемые файлы

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

/usr/lib— библиотеки

Содержит библиотеки для программ из /usr/bin или /usr/sbin.

/usr/local — пользовательские программы, библиотеки и настройки

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

/usr/sbin — системные исполняемые файлы

Содержит двоичные файлы программ для системного администрирования, которые нужно выполнять с правами суперпользователя. Например, таких как Gparted, sshd, useradd, userdel и т д.

/var (variable) — изменяемые файлы

Содержит постоянно изменяемые файлы, генерируемые процессами во время работы. Здесь есть системные журналы, кеши, базы данных и т.п.

/var/log - файлы логов

Содержит большинство логов всех установленных в операционной системе программ.

/var/lib — базы данных

Содержит файлы баз данных, пакеты и т.п.

/var/lock - блокировки

Файлы, расположенные здесь, означают, что ресурс, файл или устройство занято и не может быть использовано другим процессом.

/var/run — PID процессов

Содержит идентификаторы процессов, которые могут использоваться для взаимодейстия между программами. В отличие от /run данные сохраняются после перезагрузки.

Пользователи и группы

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

Для отслеживания владельцев процессов и файлов используются числовые идентификаторы. Идентификатор пользователя и группы - целое число (обычно) в диапазоне от 0 до 65535. Присвоение уникального идентификатора пользователя выполняется при заведении системным администратором нового регистрационного имени. Среди пользователей системы выделяется один пользователь - системный администратор или суперпользователь, обладающий всей полнотой прав на использование и конфигурирование системы. Это пользователь с идентификатором 0 и регистрационным именем root.

Учетные записи пользователей, как и большинство другой информации о конфигурации системы UNIX, по традиции, представлена в виде текстовых файлов: /etc/passwd, /etc/group и /etc/shadow (в системах с теневым хранением паролей).

Основные команды для работы с пользователями и группами (часть команд указанных ниже будет требовать sudo для выполнения):

$ useradd username            - добавить пользователя username
$ useradd -D                  - показать доступные при добавлении пользователя настройки
$ passwd                      - изменить пароль пользователю (далее следовать подсказкам системы)
$ userdel                     - утилита удаления пользователя

$ groupadd group1             - добавить группу group1
$ usermod -aG group1 user1    - добавить пользователя user1 в группу group1
$ groupmod -n group2 group1   - изменить имя группы group1 на group2
$ groupdel                    - утилита удаления группы

$ su user1                    - сменить текущего пользователя на user1 (если не указать пользователя именем по умолчанию будет root)
$ sudo somecommand            - выполнить команду somecommand от лица пользователя root

В современных дистрибутивах Linux вместо root аккаунта для администрирования как правило используется утилита sudo (substitute user and do), позволяющая выполнить команду от лица пользователя root.

Все настройки sudo находятся в файле /etc/sudoers. Здесь можно настроить очень много параметров, начиная от кому будет позволено выполнять команды от имени суперпользователя и заканчивая ограничением набора доступных команд. Неправильный синтаксис, добавленный в этот файл, может полностью нарушить распределение прав между пользователями. Потому для работы с этим файлом используется утилита visudo, которая открывает файл в обычном текстовом редакторе, но во время сохранения файла проверяет его синтаксис. Это позволяет избежать ошибок в конфигурации.

Работа с файловой системой: навигация, создание-перемещение-удаление файлов, ссылки

Основные команды, используемые для навигации по файловой системе из окна терминала, создание, перемещение и удаление файлов и каталогов:

$ cd           - перейти в домашнюю директорию
$ cd  ~        - перейти в домашнюю директорию
$ cd  /        - перейти в корневую директорию
$ cd  -        - перейти в директорию, где находились до этого
$ cd ..        - перейти на уровень выше
$ pwd          - вывести текущую рабочую директорию (где находитесь)
$ ./myprog     - запуск исполняемого файла myprog, находящегося в текущей директории


$ ls                 - вывести список директорий и файлов в текущей рабочей директории
$ ls -a              - включить в вывод скрытые файлы (их имена начинаются с точки)
$ ls -l              - добавить к выводу более подробную информацию
$ mkdir d1 d2        - создать директории d1 и d2 в текущей рабочей директории
$ mkdir -p d1/d2     - создать вложенные директории
$ touch f.txt        - создать файл f.txt
$ echo "123" > f.txt - записать "123" в файл f.txt (если файла нет - будет создан, если есть - перезаписан)
$ cat f.txt          - вывод содержимого файла f.txt
$ cp f.txt f2.txt    - скопировать файл f.txt в f2.txt
$ mv f.txt f2.txt    - переместить файл f.txt в f2.txt
$ cp -vr dir1/ dir2  - скопировать рекурсивно (ключ r) содержимое директории dir1 в dir2 и вывести информацию о выполненной работе (ключ v)
$ mv -v /opt ~/1.txt ~/2.txt - переместить из домашней директории в /opt файлы 1.txt и 2.txt и вывести информацию о выполненной работе (ключ v)
$ rm f.txt f2.txt     - удалить f.txt и f2.txt
$ rm -rf mydir        - удалить директорию mydir со всем содержимым (ключ r) игнорируя несуществующие файлы и аргументы (ключ f, force)

В ОС Linux существует два вида ссылок.

Жесткие ссылки привязываются к иноду, таким образом, файл присутствует в системе под несколькими разными именами. Файл существует до тех пор, пока с его инодом связано хотя бы одно имя. Понятия «жёсткая ссылка на файл» и «имя файла» являются синонимами.

$ touch firstlink             - создали файл
$ ln firstlink secondlink     - создали жесткую ссылку на него
$ ls -i firstlink secondlink  - вывели содержимое рабочего каталога с инодами: они равны

15782 firstlink 15782 secondlink

Жесткие ссылки могут быть только на файлы, не на директории. Также нельзя создать жесткую ссылку на файл в другой файловой системе (у каждой ФС свой набор инодов).

Cимволические ссылки (или симлинки) - специальный вид файла, который ссылается на другой файл по имени, а не напрямую на инод. Симлинки не предохраняют файл от удаления. Если файл удалить, то симлинк на него станет нерабочим (или битым).

Симлинки создаются командой ln с опцией '-s':

ln -sv  ./versions/20180702-163849/ ./current    - создать симлинк current на директорию ./versions/20180702-163849/

При работе с большим количеством файлов бывает удобно использовать маски - т.н. wildcards.

Wildcard "*" соответствует нулю или большему количеству символов:

$ ls -d /etc/g* - вывести список файлов в директории /etc имена которых начинаются с "g" и файл с именем "g" (если такой существует)
$ rm file*      - удалить все файлы, имена которых начинаются в file

Wildcard "?" заменяет один любой символ:

$ rm myfile?      - удалить все файлы, с именами начинающимися со слова "myfile" за которым следует один любой символ

Шаблон "[]" позволяет явно указать набор символов - будут найдеты совпадения, содержащие один из указанных в скобках символов. Также в можно указать диапазон символов (для этого используется символ –/дефис) или несколько диапазонов подряд, тогда шаблон будет совпадать с одним любым символом из этого диапазона:

$ myfile[12]         — соответствует myfile1 и myfile2
$ [Cc]hange[Ll]og    — соответствует файлам с именами Changelog, ChangeLog, changeLog, и changelog
$ ls /etc/[0-9]*     — вывести список файлов в директории /etc/ имена которых начинаются с цифры
$ ls /tmp/[A-Za-z]*  — вывести список файлов в директории /tmp/ имена которых начинаются с латинской буквы (заглавной или прописной)

Управление процессами и потоками, отправка сигналов, kill

Процесс (process) — некая виртуальная среда, инкапсулирующая в себе ресурсы (открытые файлы, файлы отображенные в память...) и их дескрипторы, потоки и т.д. Каждый процесс имеет как минимум один поток. Также каждый процесс имеет свое собственное виртуальное адресное пространство и контекст выполнения, а потоки одного процесса разделяют адресное пространство процесса. Некоторые приложения могут создавать несколько процессов одновременно.

Каждому процессу в системе назначаются числовые идентификаторы PID (Process Identifier) в диапазоне от 1 до 65535 и идентификаторы родительского процесса PPID (Parent Process Identifier).

$ ping ya.ru > /dev/null &   - оператор & означает запуск процесса в фоновом режиме (не блокирует терминал)
$ jobs                       - просмотреть запущенные в фоновом режиме задачи
$ fg [job id]                - вернуть в терминал задачу с определенным идентификатором
ctrl-Z, затем
$ bg           - приостановить выполнение задачи и продолжить ее в фоновом режиме
$ ps aux                     - просмотр информации о запущенных процессах всех пользователей
$ top                        - непрерывно отобразить информацию самых активных процессов
$ htop                       - более продвинутая версия top, устанавливается отдельно. Показывает все процессы в системе, использование процессоров и памяти

Сигнал в операционных системах семейства Unix - асинхронное уведомление процесса о каком-либо событии.

Когда сигнал послан процессу, операционная система прерывает выполнение процесса, при этом, если процесс установил собственный обработчик сигнала, операционная система запускает этот обработчик, передав ему информацию о сигнале, если процесс не установил обработчик, то выполняется обработчик по умолчанию.

$ kill -l                    - все доступные в системе сигналы
$ kill [ -s сигнал ] pid     - отправить процессу pid сигнал

По умолчанию отправляется сигнал SIGTERM. Для безусловного завершения процесса можно отправить SIGKILL. Т.к. в большинстве систем SIGKILL имеет идентификатор 9, часто встречается команда в сокращенной форме записи:

$ kill -9 123     - безусловно, "жестко" завершить процесс 123

SSH и передача файлов

SSH (Secure Shell) — защищенный протокол для удаленного доступа к компьютерам. В *nix-подобных системах (Linux, macOS) ssh-клиент обычно установлен по умолчанию и подключаться можно напрямую из терминала. Для подключения нужно указать адрес сервера и, опционально, имя пользователя и порт.

Простейший вариант - подключение по паролю. В таком случае система будет запрашивать пароль каждый раз при подключении.

Для подключения без ввода пароля можно использовать ключи: приватный (закрытый) и публичный (открытый). Эти ключи связаны друг с другом таким образом, что зашифровав информацию одним ключом, расшифровать ее можно только другим.

Для создания ключей необходимо выполнить команду:

$ ssh-keygen

Опционально можно ввести passphrase.

Будут созданы два файла:

~/.ssh/id_rsa — приватный ключ.Его нельзя никому передавать.

~/.ssh/id_rsa.pub — публичный ключ. Можно спокойно распространять.

Для загрузки публичного ключа на сервер нужно выполнить на локальной машине команду:

$ ssh-copy-id -i /home/demo/.ssh/id_rsa.pub user@remote_host

Другой вариант - добавить на удаленной машине в файл ~/.ssh/authorized_keys содержимое публичного ключа.

Для более удобной работы с ключами можно добавить ключ к ssh-агенту. После этого для него больше не будет спрашиваться passphrase (если был задан) и не нужно будет вводить ключ вручную — он будет автоматически использован при соответствующем подключении.

$ ssh-add /home/demo/.ssh/id_rsa   -  добавить ключ в запущенный в системе агент (попросит passphrase, если задан).

ssh-agent привязан к сессии. Поэтому, например, если перезагрузить компьютер, то ключи нужно будет добавлять в агент заново.

Протокол SSH можно использовать для передачи файлов на удалённый сервер и загрузки их оттуда.

$ scp root@hostmane:/home/user/file.tar.gz /opt - скачать с сервера файл /home/user/file.tar.gz в /opt
$ scp /opt/file.tar.gz root@hostmane:/home/user - загрузить на удаленный сервер в /home/user файл /opt/file.tar.gz

Перенаправление ввода/вывода

Процесс взаимодействия с пользователем выполняется в терминах записи и чтения в файл. Вывод на экран представляется как запись в файл, а ввод — как чтение файла. Файл, из которого осуществляется чтение, называется стандартным потоком ввода, а в который осуществляется запись — стандартным потоком вывода. Существует еще и стандартный поток ошибок, на который выводятся все сообщения об ошибках и те информативные сообщения о ходе работы программы, которые не могут быть выведены в стандартный поток вывода.

$ ls -l > file.txt  - вывести содержимое директории в файл
$ wc -w < file.txt  - посчитать количество слов в файле

Можно организовать конвейер (pipe) выполняемых команд.

$ cat myfile | grep Linux | wc -l

В примере выше вывод команды cat, т. е. текст из файла myfile, будет направлен на вход команды grep, которая выделит только строки, содержащие слово "Linux". Вывод команды grep будет, в свою очередь, направлен на вход команды wc -l, которая подсчитает число таких строк. Статус выхода из канала совпадает со статусом выхода, возвращаемым последней командой.

Работа с текстовыми файлами, find и grep

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

$ less myfile     - просмотреть содержимое файла

После открытия текстового файла внутри утилиты можно набирать разные команды (они отображаются в левом нижнем углу), рассмотрим некоторые из них.

Для вызова справки внутри утилиты воспользуйтесь клавишей h.

Поиск внутри утилиты:

/text    - поиск слова text "вперёд", начиная с первой отображаемой строки
?text    - поиск слова text "назад", начиная с последней отображаемой строки

В режиме поиска:

n            - следующее совпадение
N (shift-n)  - предыдущее совпадение.

tail - утилита, выводящая несколько последних строк файла, head - несколько первых строк.

Отображение последних 10 строк файла:

$ tail -10 myfile  - отобразить последние 10 строк файла
$ tail -f myfile   - вывод новых строк файла в режиме реального времени можно использовать для просмотра обновления логов, остановить: ctrl-c
$ head -10 myfile1 - отобразить первые 10 строк файла

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

iconv - преобразование кодировки файла

$ iconv -f <начальная кодировка> -t <желаемая кодировка> <исходный файл> -o <файл-результат>

Дополнительные ключи:

 -s  - игнорировать ошибки
 -l  - вывести список доступных кодировок
 -c  - отбросить неконвертируемые символы

Find — команда для поиска файлов и каталогов на основе специальных условий.

$ find / -name top    - найти все файлы в системе, имеющие имя top
$ find / -iname top   - найти все файлы в системе, имеющие имя top без учета регистра символов
$ find / -name 'top*' - найти все файлы в системе с именами, начинающимися с top

$ find . -name "test*" -not -name "*.php" - найти файлы, начинающиеся на test, но без расширения php
$ find -name "*.html" -o -name "*.php"    - найти файлы с расширением html или php
$ find /usr/local -size +10000k           - найти файлы в /usr/local размером больше 10 килобайт
$ find ~ -size -300c                      - найти в домашнем каталоге размером меньше 300 байт
$ find . -exec ls -ld {} \;               - выполнить ls для получения подробной информации о каждом найденном файле
$ find /tmp -type f -name "*.txt" -exec rm -f {} \; - удалить все текстовые файлы в /tmp

Команда grep - поиск по шаблону в файле.

$ grep шаблон *              - искать шаблон в файлах, находящихся в текущем каталоге
$ grep -r шаблон *           - искать шаблон в файлах текущего каталога и подкаталогов
$ grep -v -l pattern *       - найти файлы, не содержащие строк, соответствующих шаблону
$ grep -C 2 pattern files    - выведет строки, в которых найдено соответствие, плюс 2 строки до и 2 после каждой найденной
$ grep ERROR /var/log/app.log -c  - найти количество строк, содержащих ERROR в логе


$ grep -rnw '/path/to/somewhere/' -e 'pattern' - найти файлы, содержащие шаблон, расположенные в /path/to/somewhere/

-r or -R - искать рекурсивно по поддиректориям
-n       - выводить номера строк
-w       - искать целые слова в качестве совпадений
-l       - выводить только имена файлов

$ grep --include=\*.{c,h} -rnw '/path/to/somewhere/' -e "pattern"  - найти файлы, содержащие шаблон, расположенные в /path/to/somewhere/, имеющие расширение .c или .h

$ grep --exclude=*.o -rnw '/path/to/somewhere/' -e "pattern" - найти файлы, содержащие шаблон, расположенные в /path/to/somewhere/, кроме файлов с расширением .o

$ grep --exclude-dir={dir1,dir2,*.dst} -rnw '/path/to/somewhere/' -e "pattern" - найти файлы, содержащие шаблон, расположенные в /path/to/somewhere/, исключив из поиска директории dir1 и dir2 и файлы с расширением .dst

Для того, чтобы получить информацию о доступном в системе пространстве, можно использовать утилиту df (disk free):

$ df -h     - показать в понятном формате (флаг h = human-readable) список всех файловых систем по именам устройств с указанием размера

Для оценки занимаемого файлом или директорией дискового пространства используется утилита du (disk usage):

$ du -sh /home/myuser/data/      - отобразить размер директории
$ du -shx /home/myuser/data/     - отобразить размер директории, не учитывая каталоги в иерархии, относящиеся к другим точкам монтирования (флаг -x)
$ du -sh /home/myuser/data/      - отобразить размер директории и содержащихся в ней подкаталогов
$ du -sh /var/log/* | sort -hr   - отобразить размеры директории в ГБ
  • 0 Los Usuarios han Encontrado Esto Útil
¿Fue útil la respuesta?

Artículos Relacionados

7. Команда grep: поиск по файлам и папкам

Grep поиск или поиск в комбинации с потоками. Grep это вполне возможно самая популярная из...

8. Команда chattr: атрибуты файла, запрет изменения файла

Команда chattr: атрибуты файла, запрет изменения файла С помощью команды chattr можно изменить...

6. Архиваторы в LINUX

В наши дни мы сталкиваемся с файлами архивов очень часто и на всех платформах: Windows, Mac или...

9 . Базовая настройка Firewall + DNS + Proxy для пересылки запросов

Netfilter Firewall + DNS + Proxy Обновляемся и ставим нужный софт. Очень часто в небольших...

9.2 RDP КЛИЕНТЫ В LINUX

ЛУЧШИЕ RDP КЛИЕНТЫ В LINUX 1. REMMINA Для этой операционной системы существует не так много...