RedHat / CentOS полезные команды

  • Михаил
  • 12 мин. на прочтение
  • 132
  • 20 Jun 2022
  • 21 Nov 2022

 

Типы юнитов 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 для подхвата изменений после модификации юнит-файла

 

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

Основные каталоги и структура файловой системы 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     - обновление пакета 
    $ yum install    - установка пакета 
    $ yum remove     - удаление пакета 
    $ yum clean packages   - удаление пакетов из кэша
    $ yum clean all        - удаление из кэша и пакетов и метаданных
    $ yum --showduplicates list  | expand        - отобразить все версии пакета 
    $ sudo yum install -           - установить нужную версию пакета 

   

$ 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 - определить процесс, который породил больше всего потоков

P.S. эта статья взята от сюда https://ezhvsalate.ru/posts/redhat7-centos-7-poleznye-komandy