Загрузочные файлы среды окружения

Когда мы входим в систему, запускается программа bash и считывает конфигурационные скрипты, называемые загрузочными файлами. Они задают изначальные значения переменных среды, которые являются общими для всех пользователей. После считываются другие загрузочные файлы в домашней директории, задающие персональные настройки среды окружения. Точная последовательность зависит от того, как был начат сеанс работы с Linux Shell. Есть два типа: login shell и non-login shell.

Когда мы входим в систему с запросом логина и пароля от учетной записи, то это login shell.

Когда мы открываем окно командной строки в графическом интерфейсе, мы не вводим логин и пароль, а сразу получаем доступ к командной строке Linux — это non-login shell.

Login shell использует следующие загрузочные файлы:

  • /etc/profile — глобальный скрипт конфигурации, который используется для всех пользователей
  • ~/.bash_profile — персональный загрузочный файл пользователя. Может использоваться для расширения или изменения конфигурации заданной в глобальном скрипте
  • ~/.bash_login — используется при отсутствии ~/.bash_profile
  • ~/.profile — используется при отсутствии ~/.bash_profile и ~/.bash_login. Этот файл используется в системах на основе Debian, например в Ubuntu.

Non-login shell использует следующие загрузочные файлы:

  • /etc/bash.bashrc — глобальный скрипт конфигурации, который используется для всех пользователей
  • ~/.bashrc — персональный загрузочный файл пользователя. Может использоваться для расширения или изменения конфигурации заданной в глобальном скрипте

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

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

Наиболее важный файл ~/.bashrc. Non-login shell считывает его всегда. А также он обычно подключается для чтения в загрузочных файлах login shell.

Что такое загрузочный файл?

Посмотрим на содержание типичного файла .bash_profile. Он выглядит примерно так:

Строки, которые начинаются с символа «#» — комментарии. Они игнорируются оболочкой и предназначены только для человека. Первая интересная инструкция начинается на четвертой строке и состоит из кода:

Эта инструкция является условным оператором if, о котором подробно будет рассказано далее в разделе написания Shell-скриптов. А сейчас просто переведем конкретный фрагмент кода на русский язык:

С помощью данного кода login shell получается содержание файла «.bashrc». Следующая инструкция загрузочного файла делает что-то с переменной PATH.

Никогда не задумывались, откуда оболочка знает, где искать программы при вводе их имен в командной строке? Например, при вводе ls, оболочка не ищет по всему компьютеру, чтобы найти полный путь к программе /bin/ls. Вместо этого, она ищет в списке директорий, которые указаны в переменной среды окружения PATH.

Переменная PATH очень часто (но не всегда, в зависимости от дистрибутива) задается в загрузочном файле /etc/profile кодом:

Значение переменной PATH изменяется для добавления директории $HOME/bin в конец списка с помощью развертывания строк. Для демонстрации как это работает рассмотрим следующий пример:

Данная техника позволяет нам легко добавлять текст в конец содержания переменной.

Добавляя строку $HOME/bin в конец переменной окружения PATH, директория $HOME/bin добавляется в список директорий, в которых происходит поиск при вводе имени программы. Это значит, что когда мы захотим создать директорию внутри домашней директории для хранения личных программ, оболочка уже снабдила нас этой возможностью. Мы только должны назвать эту директорию bin и все готово.

В последней строке .bash_profile записана инструкция:

Команда export делает доступным содержание переменной PATH для дочерних процессов этой оболочки.

Окружающая среда

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

Что же такое окружающая среда?

Linux shell хранит два типа данных в среде окружения. В bash они почти неразличимы. Это переменные окружения и переменные оболочки. Переменные среды — это биты данных, которые хранятся там программой bash, все остальное переменные окружающей среды. Помимо переменных оболочка может сохранять и псевдонимы (alises) и функции. О них мы поговорим позже.

Исследование среды

Чтобы посмотреть, что хранится в среде, можно воспользоваться командой set, которая встроена в bash, либо программой printenv. Команда set выведет и переменные оболочки и переменные окружения, а printenv только переменные окружения. Так как список содержания среды слишком длинный, то удобнее его перенаправить в программу less, которая позволит перемещаться по нему как при просмотре файла.

При выполнении этой команды мы получим примерно следующее.

Результат printenv внутри less

Мы видим список переменных окружения и их значения. Например, переменная с названием USER имеет значение «mikhail». С помощью printenv можно также получить значение только определенной переменной.

При использовании команды set без параметров и аргументов будут выведены переменные оболочки и переменные окружения. В отличии от printenv список будет отсортирован по названию переменных в алфавитном порядке.

При выполнении этой команды результат будет примерно следующим.

Результат set внутри less

Также можно узнать содержание переменной с помощью команды echo и развертывания строк используя символ $ перед именем переменной.

Псевдонимы, они же aliases, также являются частью среды но не выводятся командами set или echo. Чтобы из увидеть можно воспользоваться командой alias.

Некоторые интересные переменные

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

  • DISPLAY — имя экрана при использовании графического пользовательского интерфейса. Обычно совпадает с «:0», что обозначает имя первого экрана, которое создана графическим интерфейсом X Server.
  • EDITOR — имя программы, которая используется для редактирования текста.
  • SHELL — имя программы, используемой как Linux Shell.
  • HOME — путь к домашней директории пользователя.
  • LANG — текущий язык и кодировка.
  • OLD_PWD — путь к предыдущей рабочей директории.
  • PAGER — имя программы, используемой для постраничного вывода текста.
  • PATH — разделенный двоеточием список директорий, используемый для поиска программы при вводе ее имени без указания полного пути
  • PS1 — строка приветствия 1. Определяет содержания строки приветствия Linux Shell.
  • PWD — путь к текущей рабочей директории
  • TERM — имя эмулятора терминала.
  • TZ — Текущий часовой пояс.
  • USER — имя пользователя.

Тест по основам Linux

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

Правила простые. Есть несколько вопросов. На каждый вопрос нужно дать правильный ответ. При выборе ответа с возможность выбрать несколько вариантов нужно выбрать все подходящие варианты. При сдаче теста будет отображена информация о количестве правильных ответов, их процентном соотношении и расшифровка ошибок по вопросам. Тест можно проходить неограниченное количество раз, подключение к интернету после загрузке этой страницы не требуется 🙂

  1. Куда можно установить Linux?
  2. В каком режиме выполняется работа с коммандной строкой Linux?
  3. Какая команда выводит полный путь к текущей директории?
  4. Какая команда выводит список содержание директории /etc?
  5. Какая команда выполняет переход в домашнюю директорию?
  6. С помощью каких программ можно вывести содержание файла?
  7. Какая команда создает директорию test в текущей директории?
  8. Какой символ или символы используются для перенаправления стандартного вывода в конец существующего файла?
  9. Какой символ или символы используются для перенаправление вывода программы на ввод другой программы?
  10. Какой результат выполнения команды echo {a{b,c},b{1..3},e{d..g},c}?
  11. Какая программа изменяет разрешения прав доступа к файлу?
  12. Какая программа выводит список запущенных процессов?
  13. Какой сигнал безусловно прекращает выполнение процесса?

Управление задачами

С последствиями многопользовательской работы в Linux мы уже знакомы. А как же тогда устроена многозадачная природа? А ведь всеми процессами можно управлять с командной строки.

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

Существует множество команд для управления процессами в командной строки. Мы рассмотрим некоторые из них:

  • ps — список запущенных процессов на компьютере
  • kill — отправка сигнала одному или нескольким процессам (обычно «убийство» процесса)
  • jobs — просмотр списка собственных задач (процессов)
  • bg — выполнение процесса в фоновом режиме
  • fg — возврат процесса из фонового режима

Посмотрим небольшой пример. Как бы это казалось странным, это может быть полезно большинству пользователей работающих с графическим интерфейсом. Большинство из нас знает, что графические программы как и любые другие могут быть запущены из командной строки. А еще они могут выводить туда информацию, которую не выводят, если запущены из графического интерфейса (например нажатием на значок с помощью «мыши»). Также, независимо от того, каким образом запущена программа, управлять ее выполнением можно из командной строки.

В графической оболочке X Windows есть небольшая программа xload, отображающая график загруженности компьютера. Запустим ее из командной строки.

Если мы собираемся просмотреть пример на нашей виртуальной машине, созданной ранее, то вначале нам нужно установить эту программу. Убедимся, что виртуальная машина имеет доступ в интернет, настроив ее соответствующим образом (у нее должна быть включенная сетевая карта в режиме NAT). Для установки xload менеджером пакетов yum. Он работает только с привилегиями суперпользователя, поэтому для установки xload перейдем в режим суперпользователя root с помощью команды su. Как это сделать описано в предыдущем материале. Находясь в режиме суперпользователя введем команду yum clean all чтобы очистить кэш yum, затем yum install xload для установки xload.

Дождемся, когда менеджер пакетов yum загрузит информацию репозиториев из интернета и определит зависимости пакетов, которые необходимо установить для установки xload. После этого будет выведен список устанавливаемых пакетов и запрошено подтверждение на установку.

yum install xload

Подтвердим установку введя символ y и нажав Enter. Возможно будут запрошены другие подтверждения в процессе установки. На каждый запрос нужно давать положительный ответ (вводить y). Дождемся загрузки пакетов и их установки. После введем команду exit, чтобы завершить сеанс суперпользователя и вернуть себе обычные права.

Теперь запустим программу введя команду xload.

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

Еще можно заметить, что в командной строке не появилось стандартное «приглашение» для ввода новой команды. Это потому что Linux Shell ждет завершения работы программы перед тем, как ожидать новую команду. Хотя xload является графическим приложением и не ожидает ввода из командной строки, раз мы запустили программу из командной строки, она привязана к ней и выполняется в «ней».  После закрытия окна xload программа завершит работу и появится приглашения для новой команды.

Отправка программы на задний план

Теперь вновь запустим программу xload, но на этот раз в фоновом режиме, вернув командную строку к ожиданию от нас ввода новой команды. Для этого после ввода команды поставим символ амперсанда (&) обозначающий, что команда должна выполняться в фоновом режиме.

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

А как быть, если по какой-то причине мы не использовали символ & в конце команды (например, забыли)? Для этого случая тоже есть выход. Можно использовать комбинацию клавиш Ctrl + Z и процесс будет приостановлен. Для продолжения выполнения процесса в фоновом режиме можно воспользоваться командой bg. Запустим еще один процесс xload и переведем его в фоновый режим работы.

Чтобы вернуть процесс из фонового режима введем команду fg. Теперь командная строка вновь подключена к программе. Завершим программу, но не будем закрывать окно, а используем комбинацию клавиш комбинацию клавиш Ctrl + С.

Список собственных процессов и задач

У нас остался один процесс xload в фоне, тот что мы запустили дописав в конце команды символ амперсанда (&). Теперь мы хотим посмотреть, а выполняется ли он сейчас и какие еще процессы, связанные с нашим сеансом выполняются.

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

Чтобы получить список процессов нашей учетной записи используем команду ps.

«Убийство» процесса

Предположим, что запущенное приложение не отвечает («зависло»). Как тогда от него избавится? Разумеется с помощью команды kill. Попробуем завершить с ее помощью оставшийся процесс xload. Для начала нам нужно определить сам процесс и для этого мы можем воспользоваться командами jobs или ps. Команда jobs сообщает нам номер задачи, а ps уникальный номер процесса (PID).

Попробуем оба способа. Для начала определим номер задачи с помощью команды jobs. Потом выполним команду kill передав ей номер задачи, приписав перед ним знак процента (%), который значит, что мы хотим завершить задачу с указанным номером.

Окно xload исчезло, так как выполнение программы было завершено с помощью команды kill.

Теперь вновь запустим xload в фоновом режиме. Определим номер процесса (PID) с помощью команды ps и завершим процесс командой kill. На этот раз команде kill передадим номер процесса (PID). В отличии от номера задачи, перед ним не нужно вставлять никаких символов.

Процесс завершился и окно программы xload исчезло.

Чуть подробнее об убийствах процессов

Несмотря на использование команды kill для прекращения процессов, ее предназначение для отправки сигналов процессам. В большинстве случаев сигнал предназначен для сообщения процессу, чтоб он завершился. Но это немного большее чем простое «убийство» процессов. Программы, если они корректно реализованы, прослушивают сигналы операционной системы и отвечаю на них, в большинстве случаев позволяя выполнить корректное завершение. Например, текстовый редактор может прослушивать сигналы, означающие выход пользователя из системы или завершения работы системы (выключение компьютера). Когда он получает подобный сигнал, он сохраняет работу пользователя перед своим завершением.

Введя команду kill -l можно получить список сигналов, которые она поддерживает.

Некоторые из них часто используются:

  • 1SIGHUP — сигнал «вешания трубки». Программы могут слушать его и реагировать на него. Отправляется программам, запущенным в командной строке при закрытии терминала (окна командной строки).
  • 2SIGINT — сигнал прерывания. Отправляется процессам, чтобы их прервать. Программы могут слушать его и реагировать на него. Данный сигнал также можно отправить программе при помощи комбинации клавиш Ctrl + C в терминале, где она выполняется.
  • 15SIGTERM — сигнал прекращения. Отправляется процессам для прекращения их выполнения. Программы могут слушать его и реагировать на него. Этот сигнал отправляется командой kill, если при ее использовании явно не указан никакой сигнал.
  • 9SIGKILL — сигнал убийства. Программы не могут слушать данный сигнал. Он приводит к мгновенному прекращению выполнения процесса программы.

Теперь предположим, что у нас имеется программа, которая безнадежно зависла. Мы желаем от нее избавится. Мы можем сделать следующее:

  1. Используя команду ps узнать номер процесса (PID), который мы желаем завершить.
  2. Использовать команду kill с указанием PID
  3. Если процесс не был завершен (проигнорировал сигнал), отправить более «сильный» сигнал (SIGKILL), чтобы его прервать.

Допустим у нас запущена программа bad_program, которую мы желаем завершить. Вначале с помощью команды ps определим ее PID. Команде ps укажем опцию x, которая выводит список всех собственных процессов, даже если они не были запущены из данного терминала. Чтобы отфильтровать список процессов по имени программы bad_programm, сцепим ее вывод с вводом программы grep, которая фильтрует строки по заданному шаблону (в данном случае bad_programm) и часто используется как фильтр в цепочке команд. Узнав PID, отправим процессу сигнал SIGTERM с помощью команды kill. В нашем примере программа bad_programm игнорирует его, поэтому завершим ее с помощью сигнала SIGKILL, который отправим с помощью команды kill:

Обычно сигнал SIGTERM не указывается, так как при вызове kill без указания данного сигнала, отправляется именно он. А вместо имени сигнала можно указать и его номер, чтобы набираемая команда стала короче. Таким образом действия из примера выше можно выполнить так:

Это конец раздела

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

Разрешения доступа к файлам

Операционные системы семейства Unix, такие как Linux, отличаются от большинства остальных тем, что они не только многозадачные, но и многопользовательские.

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

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

Например, если компьютер подключен к локальной сети или к интернету, разные люди могут с помощью ssh получить доступ к консоли операционной системы и работать с компьютером. Но и это не предел. Удаленный доступ можно получить и к графической среде Linux и работать с приложения, которые будут отображаться на мониторе удаленного компьютера. Несколько людей могут одновременно работать с одним и тем же компьютером. Графическая оболочка X Window в Linux поддерживает такой режим работы.

Возможность многопользовательской работы глубоко интегрирована в архитектуру операционной системы Linux. Дело в том, что Linux является подобной Unix. А теперь имеет смысл представить окружение, в котором был разработан Unix. За годы до того, как компьютеры стали «персональными», они были огромными, дорогими и «общими». Типичная компьютерная система университета состояла из огромной вычислительной машины, расположенной в одном из зданий, и множества терминалов, расположенных по всей территории университета. Каждый терминал был соединен с огромной вычислительной машиной, которая поддерживала работу многих пользователей в одно и тоже время.

Чтобы сделать подобное реальным был разработан метод защиты пользователей друг от друга. Ведь нельзя было допустить, чтобы действия одного пользователя привели к остановке всех вычислений и «крушению» вычислительной системы. Также нельзя было позволять разным людям вмешиваться в файлы, которые им не принадлежат.

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

  • chmod — смена разрешений доступа к файлу
  • su — временно стать «суперпользователем» root
  • sudo — выполнить команду с правами «суперпользователя»
  • chown — изменить владельца файла
  • chgrp — изменить группу владельца файла

Разрешения файлов

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

Для просмотра настроек разрешений для файла можно воспользоваться командой ls с ключом -l. На примере показан фрагмент детального вывода списка файлов из директории /etc.

детальный вывод ls

На примере мы видим, что файл tcsd.conf:

  • имеет владельца tss
  • пользователь tss может осуществлять чтение и запись файла
  • имеет группу владельца tss
  • члены группы tss не имеют доступа к файлу
  • все остальные не имеют доступа к файлу

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

Первые rwx - чтение, запись и выполнение, разрешения для владельца файла. Вторые rwx - чтение, запись и выполнение, разрешения для членов группы файла. Третьи rwx - чтение, запись и выполнение, разрешения для остальных пользователей.  Тип файла - обычный файл, d директория.

chmod

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

Можно представить настройки прав как последовательность бит. Именно так их представляет операционная система. Вот как это работает.

и так далее…

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

Рассмотрим наиболее применимые разрешения доступа для файлов. Те, что начинаются с цифры 7 используются для программ (они разрешают выполнение),  а остальные для других видов файлов.

  • 777rwxrwxrwx — отсутствуют любые ограничения, каждый может выполнять с файлом любые действия. Обычно это нежелательный вариант.
  • 755rwxr-xr-x — владелец имеет полный доступ, все остальные могут только читать и выполнять файл. Такие права устанавливаются на программы, используемые всеми пользователями.
  • 700rwx------ — только владелец имеет полный доступ к файлу. Никто другой не имеет никакого доступа к файлу. Это разрешение используется для программ, которые используются только владельцем и должны быть недоступны остальным пользователям.
  • 666rw-rw-rw- —все пользователи имеют права на чтение и запись файла.
  • 644rwxr--r-- —владелец имеет разрешения чтения и записи файла. Все остальные пользователи могут лишь читать файл. Используется для файлов с данными, к которым нужно открыть доступ на чтение для всех пользователей, но изменять данные может только владелец.
  • 600rw------- —только владелец может читать и записывать файл. Никто другой не имеет доступа к файлу. Используется для частных файлов.

Разрешения директорий

При помощи команды chmod также можно изменять разрешения доступа к директориям. Также возможно использование восьмеричной нотации для задания прав доступа, но значения атрибутов r, w и x отличаются:

  • r — позволяет просматривать содержимое директории (при условии что также задан атрибут x)
  • w — позволяет создавать, удалять и переименовывать файлы и директории внутри директории (при условии что также задан атрибут x)
  • x — позволяет войти в директорию (например, с помощью команды cd)

Для директорий наиболее часто используются следующие разрешения доступа:

  • 777rwxrwxrwx — отсутствуют любые ограничения, каждый может создавать и удалять файлы и директории внутри директории. Нежелательный вариант.
  • 755rwxr-xr-x — владелец имеет полный доступ, все остальные могут входить в директорию и просматривать ее содержимое. Такие права устанавливаются на директории, к которым нужно открыть общий доступ к другим пользователям.
  • 700rwx------ — только владелец имеет полный доступ к директории. Никто другой не имеет никакого доступа к ней и не может даже войти в нее. Используется для частных директорий, когда нужно запретить к ним любой доступ любых других пользователей.

Становимся суперпользователем

Для выполнения важных задач по администрированию системы очень часто требуются права суперпользователя root. Но постоянная работа с такими правами может негативно повлиять на нервную систему. Ведь суперпользователь имеет неограниченный доступ, а следовательно ошибок допускать нельзя. Чем больше привилегий, тем больше ответственность. Поэтому намного проще и безопаснее работать в учетной записи обычного пользователя и получать права root только, когда они необходимы. Мы ведь не хотим по ошибке разрушить свой дом имея «суперсилы» 🙂

Во многих дистрибутивах Linux существуют программы, которые могут дать временный доступ к «божественным» привилегиям root, после чего вновь можно продолжить работу в роли простого смертного не беспокоясь о последствиях.

Одна из таких программ su. Она позволяет заменить свои права на права выбранного пользователя для выполнения необходимых задач, а затем вернуть свои права обратно. Сейчас мы рассмотрим только замену своих прав, на права суперпользователя root. Чтобы получить права суперпользователя root нужно ввести команду su, после чего пароль от учетной записи root. Если пароль введен верно, то произойдет переключения прав и в конце приглашения Linux Shell знак доллара ($) изменится на «решетку» (#), которая обозначает работу под правами суперпользователя. После этого можно выполнить необходимые команды. Для завершения сеанса работы с правами root нужно набрать команду exit. Будет осуществлен возврат к привилегиям собственной учетной записи, а знак «решетки» (#) изменится на знак доллара ($).

Результат работы команд su, id и exit

В некоторых дистрибутивах Linux, в основном Ubuntu, используется другой подход. Вместо переключения в режим суперпользователя с помощью команды su, используется команда sudo. С помощью команды sudo обычные пользователи могут с правами суперпользователя выполнять необходимые им команды, введя перед sudo перед командой. После этого будет запрошен пароль, но не суперпользователя, а от текущей учетной записи. Кроме того, с помощью sudo можно дать возможность отдельным пользователям выполнять с привилегиями root только определенные команды (например дать возможность перезапускать компьютер), там самым ограничив их действия.

На тестовой виртуальной машине, которую мы создали в самом начале, мы не сможем поэкспериментировать с sudo 🙁 Так как для этого вначале нужно произвести необходимые настройки и дать нашему пользователю право на использование sudo. О том как это сделать можно прочитать в справочном материале к программе sudo.

Если же все же попытаться выполнить команду sudo с привилегиями обычного пользователя, мы получим сообщение, что наш пользователь не указан в списке пользователей, которым это разрешено, а о нашей попытке будет доложено в «рапорте». В Linux безопасность находится на высоком приоритете и все попытки неудачного доступа журналируются в логах.

Sudo ls. Mikhail is not in the sudoers file.  This incident will be reported.

Смена владельца файла

Сменить владельца файла или директории можно с помощью команды chown. Чтобы сменить владельца файла нужны привилегии суперпользователя, которые можно получить с помощью команд su или sudo. Используя su, после выполнения команды chown важно не забыть выполнить команду exit, чтобы «вернуть» права суперпользователя root и продолжить работу под своими правами.

Например, мы хотим сменить владельца файла test.txt c mikhail на root. Для этого выполним следующие команды:

С помощью команды ls -la мы можем проверить, что владелец файла действительно изменен.

Пример использования команды chown

Как убедились все прошло успешно 🙂

Смена группы вдадельца

Группа владельца файла или директории меняется с помощью команды chgrp. Для смены группы владельца также нужны привилегии суперпользователя, поэтому для их получения нужно воспользоваться командой su или sudo.

Например, мы хотим сменить группу владельца файла test.txt c mikhail на root. Для этого выполним следующие команды:

С помощью команды ls -la мы можем проверить, что группа файла действительно изменена.

Пример использования команды chgrp

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