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