Что такое bash centos 7

Обновлено: 04.07.2024

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

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

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

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

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

/ - корень

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

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

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

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

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

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

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

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

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

/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 для выполнения):

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Другой вариант - добавить на удаленной машине в файл

/.ssh/authorized_keys содержимое публичного ключа.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Информация о размерах файлов и директорий, свободном пространстве

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

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

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

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

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

- локальные переменные окружения (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 - выполняется для всех удаленных пользователей при открытии терминала

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

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

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

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

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

В 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.

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

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

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

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

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

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

Рассмотрим, как и для чего был создан программный продукт, разберем его преимущества, области применения и расскажем о начале работы с Bash.

Обзор будет полезен всем, кто начинает свое практическое знакомство с Linux.

2. Что такое Bash.

Bash (Bourne again shell или «возрождённый» shell) – это модифицированная версия программной оболочки Bourne-shell (sh или «Оболочка Борна»). Она является командным процессором, работающим интерактивно в текстовом окне. Bash нужен для приема команд пользователя и их отправки операционной системе для последующей обработки.

Bash – это универсальный инструмент для выполнения различных задач, который в некоторых случаях позволяет избежать установки специализированного программного обеспечения. Одновременно, это скриптовый язык программирования, позволяющий создавать сценарии для автоматизации различных операций.

История создания.

Предшественница Bash – Bourne-shell (sh, «Оболочка Борна») была одной из первых оболочек для операционных систем Unix. Ее создал в 1978 году британский ученый Стивен Борн, давший Bourne-shell свое имя.

Изначально оболочка sh обладала относительно небольшим набором функций, но в 1987 году Bourne-shell заинтересовался программист Брайан Фокс, сумевший доработать и значительно расширить ее функционал. В 1989 году Брайан создал бета-версию Bash и продолжал поддерживать свое детище вплоть до 1993 года.

Брайан Фокс — создатель оболочки Bash.

Брайан Фокс — создатель оболочки Bash.

Основные команды, правила их написания и прочие особенности Bash были перенесены из sh. Прочие возможности, включая историю, позаимствованы из Korn Shell и C Shell (других вариаций Bourne-shell). Bash практически полностью соответствует стандартам POSIX.

Сегодня оболочка Bash предустановлена в большей части дистрибутивов Unix/Linux. Взаимодействие оболочки и операционной системы обеспечивается с помощью специальной программы – терминала (например, lxterm, xterm, eterm, gnome-terminal).

3. Синтаксис.

Правила написания Bash представляют собой расширенный синтаксис Bourne-shell. Узнать подробности про основы взаимодействия с оболочкой, а также спецификации конкретных команд можно в руководстве Bash Reference Manual, распространяемом GNU. Это полезная шпаргалка для начинающих, позволяющая быстрее сориентироваться в оболочке.

Пример скрипта.

Ниже рассмотрен пример самого простого скрипта, выводящего надпись « Hello world ».

Ответ:


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

Отличие Bash от Bourne-shell.

Bash в Linux способна выполнять практически все важные сценарии Bourne-shell без внесения дополнительных изменений. Исключение составляют те, где необходимо ссылаться на специальные переменные Bourne-shell или, где применяются ее встроенные команды.

В синтаксисе Bash применяются приемы из Korn Shell и C Shell:

  • редактирование командной строки;
  • вывод истории команд;
  • создание стеков директорий;
  • правила замены команд «$(…)» ;
  • переменные «$PPID» и «$RANDOM» .

Используя консоль Bash в качестве интерактивного интерпретатора, можно прибегать к автоматическому дополнению названий файлов, программ, переменных и команд нажатием клавиши Tab (↹) .

4. Для чего нужен Bash.

Основные преимущества.

На данный момент разработано множество различных вариаций Bourne-Shell, но, по сравнению с ними, командный интерпретатор Bash обладает рядом преимуществ.

  • Позволяет работать со структурами « [[ » (в sh доступна только « [ » с ограничениями).
  • Поддерживает работу с массивами в Linux.
  • Доступно множество расширений, выполненных по стандартам C , включая циклы с тремя аргументами « for((i=0; i<=3; i++)) », возможность присваивать инкремент « += » и многое другое.
  • Поддерживает синтаксис « <<< ‘here strings’ ».
  • Работает с расширениями « . ».
  • Доступны алиасы для перенаправления, подобно « Csh », подобно « &| » для « 2>&1 | » и « &> » для « > … 2>&1 ».
  • Поддерживает сопроцессы с перенаправлением « <> ».
  • Огромный комплект расширений нестандартных конфигураций, включая изменение регистра.
  • Существенно увеличены возможности арифметики (правда, нет поддержки чисел с плавающей точкой).
  • Переменные « $RANDOM », « $SECONDS », « $PIPESTATUS[@] » и « $FUNCNAME » в Bash являются расширениями.
  • Доступно огромное количества функций, обеспечивающих работу в интерактивном режиме. Хотя на поведение скриптов они не влияют.

Примечание! Чем новее интерпретатор, тем больше функций он предоставляет.

Узнать версию Bash в Linux можно командой:

Ответ:


Примеры применения.

5. Как работать с Bash.

Рассмотрим, как пользоваться Bash на примере подключения к web-серверу, где находятся файлы сайта, с установленным дистрибутивом Linux через протокол SSH с нуля.

Для этого можно воспользоваться любым предпочитаемым способом.

1. После успешного ввода логина и пароля программа Терминал Linux в автоматическом режиме запустит Bash. Собственно, пользователь уже подключится к системе и увидит приглашение на ввод команд.

2. Приглашение отображается относительно стандартно и имеет следующий вид:

Ответ:


3. Когда приглашение выполнено, терминал автоматически поставит пробел и будет находиться в ожидании ввода команд. На предложенном изображении была нажата кнопка « Enter ». В следующей строчке введена команда « cd » перейти в существующий каталог « /opt ». Еще ниже отображается результат вывода – рабочим каталогом стал « /opt » и это показано в приглашении.

Ответ:


4. Командная строка Linux позволит запускать любое установленное в системе приложение. Как правило, каталоги со списком исполняемых программ расположены в каталогах « /bin, /usr/bin ». Проверяемые каталоги интерпретатор сохраняет в переменной « $PATH ».

Просмотреть их список можно командой:

5. Далее можно воспользоваться командой « ls » и добавить к ней один из каталогов, найденных в « $PATH », чтобы увидеть список доступных программ.

Ответ:


6. Если приложение консольное, Bash произведет его запуск в терминале. Ниже показан пример запуска редактора mcedit .


7. Bash также позволяет осуществлять запуск приложений в фоновом режиме.

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


Здесь строка « [2] 29990 » – это номер и PID-процесса. При этом mcedit находится в фоновом режиме.

Вернуться к нему можно командой « fg », добавив номер задачи, если их запущено несколько, или « jobs ».


Поскольку в фоне может работать достаточно много команд, проверить номер требуемой можно командой « bg ».

Она отобразит список активных задач:


6. Заключение.

Помимо вышеперечисленного в этой статье, интерпретатор имеет множество полезных встроенных команд. С их помощью можно выполнять весь спектр работы с сервером CentOS 7.

Favorite

Добавить в избранное

Главное меню » Linux » Bash. Автоматизация с помощью Bash

(1 оценок, среднее: 5,00 из 5)

Bash. Автоматизация с помощью Bash

Т еперь вы можете использовать все навыки bash, которые вы изучили в этой серии предыдущих статей по bash, для создания очень полезных сценариев bash, которые помогут вам автоматизировать скучные повторяющиеся административные задачи.

Автоматизация действительно должна быть вашей конечной целью всякий раз, когда вы пишете сценарий bash.

В этой статье мы покажем вам несколько сценариев автоматизации, которые впоследствии можно будет расширить, чтобы автоматизировать любую задачу. Эти скрипты будут использовать массивы bash, if-else, циклы и другие концепции, которые вы изучили в этой серии.

Автоматизация управления пользователями с помощью сценария bash

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

Сначала создайте текстовый файл, включающий все имена хостов или IP-адреса серверов, на которых вы хотите добавить пользователя.

Например, здесь я создал файл servers.txt, который включает пять разных серверов:

Имейте в виду, что vsмы использовали имена хостов серверов, поскольку мы уже включил IP-адреса в свой файл /etc/hosts. Вы также можете использовать здесь конфигурационный файл SSH.

Теперь взгляните на следующий сценарий bash adduser.sh :

Сценарий adduser.sh сначала попросит вас ввести имя пользователя и идентификатор пользователя, которого вы хотите добавить; затем он выполнит цикл и подключится ко всем серверам в файле servers.txt через SSH и добавит запрошенного пользователя.

Запустим скрипт и посмотрим, как он работает.

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

  • Вы можете использовать пустые парольные фразы ssh или запустить ssh-agent, чтобы не получать запрос на ввод ключа (или пароля) во время выполнения сценария.
  • У вас должна быть действующая учетная запись с доступом суперпользователя (без требования пароля) на всех серверах.

Представьте, что вам нужно добавить пользователя на более 100 различных серверов Linux! Adduser.sh сценарий определенно может сэкономить вам бесчисленное количество часов работы.

Автоматизация резервного копирования с помощью сценария bash

Итак, вы сначала создали массив с именем backup_dirs, в котором хранятся все имена каталогов, которые мы хотим сохранить . Затем вы создали три другие переменные:

  • dest_dir: чтобы указать каталог назначения резервного копирования.
  • dest_server: для указания сервера назначения резервного копирования.
  • backup_time: указать дату резервного копирования.

Далее, для всех каталогов в backup_dirs массива, создать GZIP сжатый деготь архив в /tmp, а затем использовать цементные команду для отправки/копирования резервной копии на сервере назначения. Наконец, удалите все архивы gzip из /tmp.

Вот пример выполнения сценария backup.sh :

Вы можете запускать резервное копирование каждый день в полночь. В этом случае вы можете запланировать запуск скрипта как задание cron :

Мониторинг доступного дискового пространства

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

Читать Перспективы Steam Deck повысились благодаря поддержке EAC и BattlEye

В нашей файловой системе/базе данных почти не осталось места, так как в настоящее время она используется на 97%. Мы можем отобразить только использование, если использую команду awk для отображения только пятого поля.

Теперь взгляните на следующий сценарий bash disk_space.sh :

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

Обратите внимание, что вам нужно заменить your_email в скрипте своим реальным адресом электронной почты.

Мы запустили сценарий:

Вы можете запустить сценарий disk_space.sh примерно через шесть часов. В этом случае вы также можете запланировать запуск скрипта как задание cron:

Все! На этом мы подошли к концу нашей серии руководств для начинающих по bash. Надеюсь, вам понравилось изучать скрипты на bash. Имея в своем арсенале навыков bash-скрипты, вы можете автоматизировать любую скучную утомительную задачу в Linux!

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

CentOS от англ. Community ENTerprise Operating System — дистрибутив Linux, основанный на коммерческом Red Hat Enterprise Linux компании Red Hat и совместимый с ним.

Согласно жизненному циклу Red Hat Enterprise Linux (RHEL) , CentOS 5, 6 и 7 будут поддерживаться «до 10 лет», поскольку они основаны на RHEL.

Ранее версия CentOS 4 поддерживалась семь лет.

Red Hat Enterprise Linux состоит из свободного ПО с открытым кодом, но доступен в виде дисков с бинарными пакетами только для платных подписчиков.

Как требуется в лицензии GPL и других, Red Hat предоставляет все исходные коды.

Разработчики CentOS используют данный исходный код для создания окончательного продукта, очень близкого к Red Hat Enterprise Linux и доступного для загрузки.

Установка CentOS

Сайт загрузки образов CentOS 7 изображение с сайта www.andreyolegovich.ru

Зеркало для загрузки CentOS 7

Изучить как записать образ на USB карту вы можете в статье UltraISO

Подробнее про установку CentOS читайте в статье «Установка CentOS»

Изучить установку CentOS 7 на VirtualBox вы можете в статье «Установка CentOS на VirtualBox»

После установки

Рекомендую выполнить следующее

sudo yum -y update
yum install -y redhat-lsb-core net-tools epel-release kernel-headers kernel-devel
yum groupinstall -y "Development Tools"

Если нужно включать интерфейс при загрузке:

Узнать версию

Узнать версию установленной Centos можно командой

CentOS Linux release 7.9.2009 (Core)

Или (начиная с 6-й версии)

CentOS Linux release 7.9.2009 (Core)

Начиная с CentOS 6 можно пользоваться

rpm -q centos-release

Если установить пакет redhat-lsb

\LSB Version: :core-4.1-amd64:core-4.1-noarch:cxx-4.1-amd64:cxx-4.1-noarch:desktop-4.1-amd64:desktop-4.1-noarch:languages-4.1-amd64:languages-4.1-noarch:printing-4.1-amd64:printing-4.1-noarch Distributor ID: CentOS Description: CentOS Linux release 7.9.2009 (Core) Release: 7.9.2009 Codename: Core You have new mail in /var/spool/mail/andrei [andrei@demoad

]$ lsb_release -a LSB Version: :core-4.1-amd64:core-4.1-noarch:cxx-4.1-amd64:cxx-4.1-noarch:desktop-4.1-amd64:desktop-4.1-noarch:languages-4.1-amd64:languages-4.1-noarch:printing-4.1-amd64:printing-4.1-noarch Distributor ID: CentOS Description: CentOS Linux release 7.9.2009 (Core) Release: 7.9.2009 Codename: Core

Если достаточно только главной версии, можно использовать

Установка программ

Для начала неплохо обновить пакетный менеджер. В CentOS он называется yum

Для тихой установки используйте флаг -y

yum install -y redhat-lsb-core net-tools epel-release kernel-headers kernel-devel

yum groupinstall -y "Development Tools"

Для установки графической оболочки используйте команду

yum groupinstall -y "X Window System" "MATE Desktop"

Добавить пользователя в группу sudo

У всех пользователей из группы wheel есть возможность выполнять команду sudo поэтому нужно стать root.

И из-под root добавить пользователя в группу wheel командой

usermod -aG wheel andrei

Снова стать пользователем можно выполнив

Настройка сети

Установка wget

sudo yum install wget

Установка Go

После скачивания проверьте, что контрольная сумма совпадает с записанной на сайте

Совпадает со значением на сайте - посмотрите на нижнюю строку

Установка образа через сеть VirtualBox изображение с сайта www.andreyolegovich.ru

sudo tar -C /usr/local -xzf go1.15.5.linux-386.tar.gz

Добавьте путь до go в PATH

Создайте рабочую директорию

Проверьте установился ли Go

Если получили что-то подобное

go version go1.15.5 linux/386

Если получили ошибку

-bash: /usr/local/go/bin/go: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory

Попробуйте установить glibc.i686

sudo yum install glibc.i686

Установка X

Установка и настройка X сервера ассмотрены в отдельной статье - «X Window System в CentOS»

Полезные команды

Перемещение между X и реальным терминалом (physical terminal) осуществляется нажатием правого CTRL + F2 - чтобы перейти в консоль

Правый CTRL + F1 - чтобы перейти в иксы

Чтобы узнать называние своей консоли выполните

Чтобы узнать кто подключён к системе выполните

andrei tty1 2020-11-19 11:03 (:0) andrei pts/0 2020-11-19 11:45 (:0) andrei tty2 2020-11-19 11:42 andrei pts/1 2020-11-19 11:48 (192.168.56.1)

tty1 и tty2 это реальные терминалы

В Linux всё является файлами и tty терминалы не исключение.

Или аналогичную команду

crw--w----. 1 andrei tty 136, 1 Nov 19 12:43 /dev/pts/1

Первый символ - это тип файла.

Доступно семь типов файлов: обычные, директории, символьные, блоки, сокеты, именованые каналы, символьные ссылки

- : regular file
d : directory
c : character device file
b : block device file
s : local socket file
p : named pipe
l : symbolic link

Тип c означает character. То есть этот файл может принимать и показывать символы

drwxr-xr-x. 118 root root 8192 Nov 19 11:02 /etc

Видно, что тип файла d. То есть directory

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 8G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 7G 0 part ├─centos-root 253:0 0 6.2G 0 lvm / └─centos-swap 253:1 0 820M 0 lvm [SWAP] sr0 11:0 1 57.7M 0 rom /run/media/andrei/VBox_GAs_6.1.10

brw-rw----. 1 root disk 8, 0 Nov 19 11:02 /dev/sda brw-rw----. 1 root disk 8, 1 Nov 19 11:02 /dev/sda1 brw-rw----. 1 root disk 8, 2 Nov 19 11:02 /dev/sda2

Можно убедитсья, что тип файлов b. То есть block

? означает что должен быть один любой символ.

brw-rw----. 1 root disk 8, 1 Nov 19 11:02 /dev/sda1 brw-rw----. 1 root disk 8, 2 Nov 19 11:02 /dev/sda2

[12] означает что должен быть либо символ 1 либо символ 2

brw-rw----. 1 root disk 8, 1 Nov 19 11:02 /dev/sda1 brw-rw----. 1 root disk 8, 2 Nov 19 11:02 /dev/sda2

Когда вы хотите узнать версию системы вы можете выполнить

ls -l /etc/system-release

lrwxrwxrwx. 1 root root 14 Nov 17 13:44 /etc/system-release -> centos-release

Тип файла l означает link то есть это не настоящий файл, а ссылка

ls -l /etc/system-release /etc/centos-release /etc/redhat-release

-rw-r--r--. 1 root root 37 Oct 23 17:53 /etc/centos-release lrwxrwxrwx. 1 root root 14 Nov 17 13:44 /etc/redhat-release -> centos-release lrwxrwxrwx. 1 root root 14 Nov 17 13:44 /etc/system-release -> centos-release

Если бы вы пользовались redhat то настоящим был бы redhat-release

Ещё один способ получить информацию о версии - выполнить lsb_release -d где -d означает description

Description: CentOS Linux release 7.9.2009 (Core)

Узнать где находится файл lsb_release можно командой which lsb_release. Чтобы сразу получить дополнительную информацию выполните

ls -lF $(which lsb_release)

-rwxr-xr-x. 1 root root 15929 Mar 27 2015 /usr/bin/lsb_release*

Опция -F означает показать тип файлов. Поэтому нам удалось увидеть * после lsb_release. * означает, что файл исполняемый.

Чтобы узнать откуда взялся файл можно воспользоваться командой rpm с опциями q (query) и f (file)

rpm -qf $(which lsb_release)

Чтобы скопировать файл в интерактивном режиме воспользуйтесь командой cp с опцией i (interactive)

interactive означает, что если файл с таким имененм существует, вас спросят прежде чем затирать его

cp -i /etc/hosts .
cp -i /etc/hosts .

cp: overwrite ‘./hosts’?

Чтобы создать директорию сразу же с поддиректорией внутри воспользуйтесь командлой mkdir с опцией p (parent)

mkdir -p sites/heiheiru
ls -l sites

total 0
drwxrwxr-x. 2 andrei andrei 6 Nov 19 13:40 heiheiru

Чтобы создать одновременно несколько файлов с именами идущими по порядку выполните touch с <>

touch files/file
ls -l files

-rw-rw-r--. 1 andrei andrei 0 Nov 19 13:46 file1 -rw-rw-r--. 1 andrei andrei 0 Nov 19 13:46 file2 -rw-rw-r--. 1 andrei andrei 0 Nov 19 13:46 file3 -rw-rw-r--. 1 andrei andrei 0 Nov 19 13:46 file4 -rw-rw-r--. 1 andrei andrei 0 Nov 19 13:46 file5

Чтобы скопировать директорию files в директорию sites со всем содержимым выполните

cp -R files sites
ls -l sites/files/

total 0 -rw-rw-r--. 1 andrei andrei 0 Nov 19 13:49 file1 -rw-rw-r--. 1 andrei andrei 0 Nov 19 13:49 file2 -rw-rw-r--. 1 andrei andrei 0 Nov 19 13:49 file3 -rw-rw-r--. 1 andrei andrei 0 Nov 19 13:49 file4 -rw-rw-r--. 1 andrei andrei 0 Nov 19 13:49 file5

Директория files была скопирована в директорию sites, то есть теперь у sites есть поддиректория files.

Если у вас установлен модуль tree вы можете наглядно изучить вложенность. Если нет - выполните сперва sudo yum install tree

sites └── files ├── file1 ├── file2 ├── file3 ├── file4 └── file5 1 directory, 5 files

Создать ссылку можно командой ln, символьную ссылку ln -s

Очистить терминал можно нажав CTRL + l

Изучить детали своего SSH подключения можно командой

192.168.56.1 52350 192.168.56.101 22

Сперва идут IP и порт клиента, затем IP и порт сервера

Чтобы изучить содержимое длинного тестового файла выполните

Поиск

Найти и сразу скопировать в текущую директорию

Найти в текущей директории

Удалить из текущей директории

Найти все ссылки

find /etc -type l

Найти все ссылки только на верхнем уровне вложенности

find /etc -maxdepth 1 -type l

Filesystem Size Used Avail Use% Mounted on /dev/sda1 1014M 194M 821M 20% /boot

Найти обычные файлы определённого размера

find /boot -size +20000k -type f

find: ‘/boot/efi/EFI/centos’: Permission denied find: ‘/boot/grub2’: Permission denied /boot/initramfs-0-rescue-389ee10be1b38d4281b9720fabd80a37.img /boot/initramfs-3.10.0-1160.el7.x86_64.img /boot/initramfs-3.10.0-1160.2.2.el7.x86_64.img

find /boot -size +10000k -type f

find: ‘/boot/efi/EFI/centos’: Permission denied find: ‘/boot/grub2’: Permission denied /boot/initramfs-0-rescue-389ee10be1b38d4281b9720fabd80a37.img /boot/initramfs-3.10.0-1160.el7.x86_64.img /boot/initramfs-3.10.0-1160.el7.x86_64kdump.img /boot/initramfs-3.10.0-1160.2.2.el7.x86_64.img /boot/initramfs-3.10.0-1160.2.2.el7.x86_64kdump.img

То же самое плюс показать размер файлов

find /boot -size +10000k -type f -exec du -h <> \;

find: ‘/boot/efi/EFI/centos’: Permission denied find: ‘/boot/grub2’: Permission denied 60M /boot/initramfs-0-rescue-389ee10be1b38d4281b9720fabd80a37.img 21M /boot/initramfs-3.10.0-1160.el7.x86_64.img 13M /boot/initramfs-3.10.0-1160.el7.x86_64kdump.img 21M /boot/initramfs-3.10.0-1160.2.2.el7.x86_64.img 14M /boot/initramfs-3.10.0-1160.2.2.el7.x86_64kdump.img

Изменить пароль пользователя

Чтобы в CentOS изменить пароль пользователя выполните команду passwd

]$ sudo passwd andrei

[sudo] password for andrei:
Changing password for user andrei.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

locale

Чтобы в CentOS узнать текущую locale

System Locale: LANG=en_US.UTF-8 VC Keymap: us X11 Layout: us

Список доступных локалей

aa_DJ aa_DJ.iso88591 aa_DJ.utf8 aa_ER aa_ER.utf8 aa_ER.utf8@saaho aa_ER@saaho aa_ET aa_ET.utf8 af_ZA af_ZA.iso88591 af_ZA.utf8 am_ET am_ET.utf8 an_ES an_ES.iso885915 an_ES.utf8 ar_AE ar_AE.iso88596 ar_AE.utf8 ar_BH ar_BH.iso88596 ar_BH.utf8 ar_DZ ar_DZ.iso88596 ar_DZ.utf8 ar_EG ar_EG.iso88596 ar_EG.utf8 ar_IN ar_IN.utf8 ar_IQ

Выбрать только английский

localectl list-locales | grep en_US

en_US en_US.iso88591 en_US.iso885915 en_US.utf8

Список системных переменных, связанных с локалью доступен по команде

LANG=en_US.UTF-8 LC_CTYPE="en_US.UTF-8" LC_NUMERIC=en_US.UTF-8 LC_TIME=en_US.UTF-8 LC_COLLATE="en_US.UTF-8" LC_MONETARY=en_US.UTF-8 LC_MESSAGES="en_US.UTF-8" LC_PAPER=en_US.UTF-8 LC_NAME=en_US.UTF-8 LC_ADDRESS=en_US.UTF-8 LC_TELEPHONE=en_US.UTF-8 LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=en_US.UTF-8 LC_ALL=

Подробная информация по каждой переменной может быть получена с помощью флагов -c -k

locale -c -k LC_TIME

LC_TIME abday="Sun;Mon;Tue;Wed;Thu;Fri;Sat" day="Sunday;Monday;Tuesday;Wednesday;Thursday;Friday;Saturday" abmon="Jan;Feb;Mar;Apr;May;Jun;Jul;Aug;Sep;Oct;Nov;Dec" mon="January;February;March;April;May;June;July;August;September;October;November;December" am_pm="AM;PM" d_t_fmt="%a %d %b %Y %r %Z" d_fmt="%m/%d/%Y" t_fmt="%r" t_fmt_ampm="%I:%M:%S %p" era= era_year="" era_d_fmt="" alt_digits= era_d_t_fmt="" era_t_fmt="" time-era-num-entries=0 time-era-entries="S" week-ndays=7 week-1stday=19971130 week-1stweek=7 first_weekday=1 first_workday=2 cal_direction=1 timezone="" date_fmt="%a %b %e %H:%M:%S %Z %Y" time-codeset="UTF-8"

locale -c -k LC_CTYPE

LC_CTYPE ctype-class-names="upper";"lower";"alpha";"digit";"xdigit";"space";"print";"graph";"blank";"cntrl";"punct";"alnum";"combining";"combining_level3" ctype-map-names="toupper";"tolower";"totitle" ctype-width=16 ctype-mb-cur-max=6 charmap="UTF-8" ctype-class-offset=72 ctype-map-offset=86 ctype-indigits_mb-len=1 ctype-indigits0_mb="0" ctype-indigits1_mb="1" ctype-indigits2_mb="2" ctype-indigits3_mb="3" ctype-indigits4_mb="4" ctype-indigits5_mb="5" ctype-indigits6_mb="6" ctype-indigits7_mb="7" ctype-indigits8_mb="8" ctype-indigits9_mb="9" ctype-indigits_wc-len=1 ctype-outdigit0_mb="0" ctype-outdigit1_mb="1" ctype-outdigit2_mb="2" ctype-outdigit3_mb="3" ctype-outdigit4_mb="4" ctype-outdigit5_mb="5" ctype-outdigit6_mb="6" ctype-outdigit7_mb="7" ctype-outdigit8_mb="8" ctype-outdigit9_mb="9" ctype-outdigit0_wc=48 ctype-outdigit1_wc=49 ctype-outdigit2_wc=50 ctype-outdigit3_wc=51 ctype-outdigit4_wc=52 ctype-outdigit5_wc=53 ctype-outdigit6_wc=54 ctype-outdigit7_wc=55 ctype-outdigit8_wc=56 ctype-outdigit9_wc=57 ctype-translit-tab-size=4554 ctype-translit-default-missing-len=1 ctype-translit-ignore-len=0 ctype-translit-ignore="" map-to-nonascii=0

Список доступных локалей

Изменить locale

Предположим, что нужно поменять локаль на en_us.iso88591

Откройте locale.conf и найдите строку LANG

Замените UTF-8 на iso88591

Альтернативный способ с использованием sed - выполните команду

Чтобы проверить изменения выполните

System Locale: LANG=en_US.iso88591 VC Keymap: us X11 Layout: us

Чтобы изменить системную переменную, например, LC_CTYPE выполните

И внесите в конец файла следующий код

LC_CTYPE="en_US.iso88591" export LC_CTYPE

locale -c -k LC_CTYPE

LC_CTYPE ctype-class-names="upper";"lower";"alpha";"digit";"xdigit";"space";"print";"graph";"blank";"cntrl";"punct";"alnum";"combining";"combining_level3" ctype-map-names="toupper";"tolower";"totitle" ctype-width=16 ctype-mb-cur-max=1 charmap="ISO-8859-1"

Читайте также: