RedHat7 / CentOS 7: полезные команды

А у нас на работе случилось тестирование по знанию команд linux :)

На самом деле это круто, когда работа мотивирует изучать что-то новое и постоянно развиваться. Тем более, ребята подготовили неплохие конспекты и даже тем, кто с терминалом был "на вы" при минимальных  усилиях разобраться в происходящем оказалось не очень сложно.

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

В этом посте осуществлена попытка собрать необходимый минимум полезных команд, часто используемых при решении типовых задач в ОС 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   - отобразить размеры директории включая файлы внутри нее с сортировкой по занимаемому месту

 

Переменные окружения

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

KEY=value1
KEY=value1:value2
KEY="value with spaces"

Существует три типа переменных окружения:

 - локальные переменные окружения (environmental variables) - определены только для текущей сессии, будут безвозвратно стерты по ее завершении. Вывести текущие переменные окружения - команда printenv или env без параметров

 - пользовательские переменные окружения (shell variables) - определяются для конкретного пользователя и устанавливаются при входе в систему или удаленном подключении. Хранятся в файлах конфигурации  .bashrc, .bash_profile, .bash_login, .profile и других, размещенных в директории пользователя. Для просмотра используется команда set.

 - системные переменные окружения - доступны всем пользователям, загружаются при старте системы из файлов  /etc/environment, /etc/profile, /etc/profile.d/ /etc/bash.bashrc.

Конфигурационные файлы переменных окружения:

  •  .bashrc - переменные конкретного пользователя, загружается каждый раз при создании пользователем терминального сеанса
  • .bash_profile - загружается каждый раз при удаленном подключении по SSH
  • /etc/environment - файл для работы с переменными окружения на системном уровне, будут доступны всем пользователям системы, в том числе при удаленном подключении
  • /etc/bashrc - выполняется для всех локальных пользователей при создании сессии в терминале
  • /etc/profile - выполняется для всех удаленных пользователей при открытии терминала

Команды для работы с переменными окружения:

$ echo $PATH                     - просмотр значения переменной
$ VAR=значение                   - установить пользовательскую переменную окружения для текущей сессии (недоступна дочерним процессам)
$ export VAR=значение            - установить локальную переменную окружения (environmental variable), доступную дочерним процессам
$ env –i [VAR=value] <команда>   - временно удалить все переменные оболочки и выполнить команду передав свои значения переменной
$ env –i bash                    - запустить оболочку без переменных окружения
$ unset VAR                      - удалить переменную по имени до конца текущей сессии
$ export PATH=""                 - альтернативный способ удалить переменную по имени до конца текущей сессии
$ PATH=$PATH:new_path            - добавить каталог в список путей, в которых shell ищет исполняемые файлы

 

Работа с сетью

Основные команды для работы с сетью:

$ ifconfig      - получение информации об активных сетевых устройствах
$ ifconfig -a   - получение информации обо всех сетевых устройствах

Адаптер lo (loopback) в выводе ifconfig используется системой для обращения к самой себе.

$ ping -c 5 ya.ru            - отправить 5 пакетов ECHO_REQUEST по адресу ya.ru и отобразить задержку между отправкой пакета и ответом. Базовое средство проверки подключения компьютера к сети.
$ tracepath ya.ru            - проследить маршрут, по которому пакеты идут до хоста ya.ru
$ netstat -tnp               - отобразить установленные сетевые подключения. Опция -t отображает установленные tcp-соединения.
$ netstat -tln               - отобразить открытые приложениями порты (опция -l - показывать слушающие "listening"-порты)
$ netstat -tunap | grep 9090 - найти процессы, использующие порт 9090


Пример скрипта, ожидающего запуск Zookeeper на порту 2181:

# Wait until Zookeeper started
while [[ -z "`netstat -tln | grep 2181`" ]]; do
  sleep 1
done
echo 'Zookeeper started. Importing data...'         

$ wget http://example.com/file.zip                      - скачать в текущую директорию file.zip
$ wget -P /path/to/save -O arch.zip http://example.com/file.zip     - скачать файл в директорию /path/to/save и сохранить под именем arch.zip
$ wget --save-cookies cookies.txt --post-data 'username=user&password=pass' http://example.com/auth.php     - авторизоваться на сервере, передав логин и пароль и сохранить cookie в текстовый файл

curl http://test.com                      - получить содержание главной страницы сайта
curl -o index.html http://test.com        - сохранить содержимое главной страницы в index.html
curl -u user:pass http://test.com         - авторизоваться, используя HTTP Base Auth и получить содержимое страницы
curl -H 'Host: test.ru' http://test.com   - передать произвольные HTTP-заголовок
curl -X POST -H "Content-Type: application/json" -d '"name":"test"' http://test.com/api/ - передать POST-запрос с данными в JSON-формате
curl --request PUT "http://test.com/api/" --data "name=Test" - передать данные PUT-запросом

Работа со службами

В RHEL7 для управления службами в операционной системе используется утилита systemd, приносящая концепцию юнитов.

Юниты находятся в конфигурационных файлах, расположенных в директориях (указаны по возрастанию приоритета):

  • /usr/lib/systemd/system/ - юниты из установленных покетов RPM
  • /run/systemd/system/ - юниты, созданные в рантайме
  • /etc/systemd/system/ - юниты, созданные и управляемые системным администратором с помощью команды systemctl enable.

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

Типы юнитов systemd:

  • .service – системный сервис,
  • .target — группа юнитов systemd,
  • .automount – точка автомонтирования файловой системы,
  • .device – файл устройства, распознанного ядром,
  • .mount – точка монтирования файловой системы,
  • .path – файл или директория в файловой системе,
  • .scope – процесс, созданный извне,
  • .slice – группа иерархически организованных юнитов, управляющая системными процессами,
  • .snapshot – сохраненное состояние менеджера systemd,
  • .socket – сокет межпроцессного взаимодействия,
  • .swap – свап-устройство или свап-файл (файл подкачки),
  • .timer – таймер systemd.

Основные команды для работы со службами:

$ sudo systemctl start nginx.service       - запустить сервис
$ sudo systemctl stop nginx.service        - остановить сервис
$ sudo systemctl restart nginx.service     - перезапустить сервис
$ sudo systemctl reload nginx.service      - перечитать конф. файлы без перезапуска сервиса

$ sudo systemctl enable nginx.service      - включить автозапуск сервиса при загрузке системы
$ sudo systemctl disable nginx.service     - отключить автозапуск сервиса при загрузке системы

$ systemctl status nginx.service           - просмотр состояния сервиса

$ journalctl -u nginx.service              - вывод записей лог-файла сервиса

$ systemctl list-dependencies nginx.service  - отобразить дерево зависимостей юнита


$ systemctl cat nginx.service                - просмотреть юнит-файл
$ sudo systemctl edit --full nginx.service   - модифицировать юнит-файл
$ sudo systemctl daemon-reload               - перезапустить systemd для подхвата изменений после модификации юнит-файла

Менеджер пакетов YUM

Менеджер пакетов YUM - высокоуровневое решение по управлению RPM-пакетами.  Основные преимущества YUM:

- хранение пакетов в централизованных репозиториях с определяющими зависимости метаданными. Если для установки одного пакета нужно докачать пакеты из других репозиториев - YUM будет об этом знать заранее

- автоматически разрешаются взаимосвязи между пакетами как при установке (докачать нужное) так и при удалении (удалить ставшее ненужным)

- возможность обновить одной командой все пакеты в системе

Основные комады YUM:

$ yum repolist         - показать список сконфигурированных репозиториев
$ yum check-update     - проверка репозиториев на доступность обновлений
$ yum update           - обновление всех пакетов
$ yum update <name>    - обновление пакета <name>
$ yum install <name>   - установка пакета <name>
$ yum remove <name>    - удаление пакета <name>
$ yum clean packages   - удаление пакетов из кэша
$ yum clean all        - удаление из кэша и пакетов и метаданных


$ yum --showduplicates list <name> | expand        - отобразить все версии пакета <name>
$ sudo yum install <name>-<version info>           - установить нужную версию пакета <name>

 

Неразобранное, материал на будущее

$ mount    - просмотр примонтированных устройств
$ yum -y -q install cifs-utils              - устанавливаем cifs-utils
$ mkdir /mnt/shareddrive                    - создаем директорию, в которую будем монтировать
$ mount -t cifs //network/path /mnt/shareddrive -o 'rw,username=user,password='pass''  - монтируем сетевой диск в каталог /mnt/shareddrive, используем указанные имя пользователя и пароль для авторизации

$ ps -eL|wc -l  - определить количество процессов
$ cat /etc/security/limits.conf | grep nproc | grep username - определить максимальное количество процессов для пользователя
$ ps -eL|awk '{arr[$1]++}END{for (a in arr) print a, arr[a]}'|sort -nk 2 - определить процесс,который породил больше всего потоков