Перейти к основному контенту

Лабораторная работа 1. Работа с консолью в Linux.

Цель

Получение базовых навыков при работе с консолью в операционной системе Linux (CentOS 7).

Задачи

  1. Подключиться к виртуальной машине в RESDS Dashboard.
  2. Выполнить базовые действия с файлами и папками.
  3. Установить пакет wget.
  4. Научиться работать с переменными окружения.
  5. Создать нового пользователя и подключиться к нему. Поменять shell у пользователя.
  6. Изучить работу с текстом в Bash.

Схема виртуального стенда

Для работы с облачной платформой необходимо прочитать инструкцию.

Переключиться на проект [GROUP]:[team]-lab:1-2. Подключиться к labnode, логин - labuser, пароль - labpass1!

Задание 1. Работа с файловой системой.

  1. Создать директорию task01. Перейти в неё.
mkdir task01
cd task01
  1. Создать в домашнем каталоге текстовый файл user при помощи текстового редактора vi, и заполнить его произвольными символами.
vi user
  1. Скопировать файл user в новый файл с именем root.
cp user root
  1. Посмотреть права доступа на файлы можно с помощью команды:
ls -l
  1. Задать владельца root и группу root на файл root. (sudo позволяет выполнять команды от root; ввести пароль в диалоговом окне, при этом символы отображаться не будут; пароль - labpass1!)
sudo chown root:root root
  1. Переименовать (т.е. переместить с новым именем) файл user в файл lock.
mv user lock
  1. На файл root поставить доступ на чтение и запись группе и владельцу остальным только на чтение.
sudo chmod 664 root
  1. На файл lock поставить доступ на чтение владельцу, группе и остальным пользователям убрать доступ на чтение запись и исполнение.
chmod 600 lock
  1. Вывести содержимое файла root в терминал.
cat root
  1. Отредактировать файл root случайным образом и вывести его содержимое в консоль.
sudo vi root 
cat root
  1. Удалить каталог task01.
cd
sudo rm -rf task01

Задание 2. Установка пакетов.

Для установки, удаления, обновления пакетов в ОС CentOS 7 используется утилита yum (аббр. Yellowdog Updater, Modified). В процессе установки/обновления/удаления пакетов нужно будет подтвердить установку новых версий, нажав y. Или же использовать флаг -y.

Для установки/удаления пакетов существуют команды:

sudo yum install -y package_name
sudo yum remove -y package_name

В качестве примера необходимо установить программу для скачивания файлов по web-протоколам - wget.

sudo yum install wget

Можно проверить версию установленного пакета:

wget –-version

Задание 3. Создание пользователей.

Создать нового пользователя newuser с паролем newpass1!. Сделать его администратором.

sudo adduser newuser
sudo passwd newuser # Ввести пароль newpass1!, при этом пароль отображаться не будет
sudo usermod -aG wheel newuser # Добавить пользователя newuser в группу wheel, что даст ему права на исполнение команд с sudo

Для того, чтобы выполнять команды от имени пользователя newuser, необходимо сменить текущее окружение на окружение пользователя newuser командой - su. При этом нужно будет ввести пароль пользователя newuser.

su - newuser

Имя пользователя изменилось с labuser на newuser. Также, имя пользователя хранится в переменной окружения $USER. Просмотреть значение переменной можно с помощью команды echo.

echo $USER

Чтобы узнать, в каких группах состоит текущий пользователь, используется команда groups. В данном случае это должны быть группы newuser и wheel.

groups

Для выхода из оболочки используется команда exit. При этом выход идет в оболочку, запущенную пользователем labuser.

exit

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

cat /etc/shells

Сейчас должна быть запущена оболочка /bin/bash. Чтобы узнать, какая оболочка запущена сейчас, можно вывести на экран значение переменной $0.

echo $0

Чтобы просто запустить оболочку, достаточно просто набрать путь к ней. Запустить оболочку - sh, и вывести на экран переменную - $0. После выйти обратно в bash.

/bin/sh
echo $0
exit

Чтобы сменить оболочку по умолчанию для пользователя, можно отредактировать файл /etc/passwd, либо можно использовать утилиту usermod. Необходимо посмотреть, какая оболочка сейчас является оболочкой по умолчанию для пользователя newuser, сменить её на /bin/sh, и проверить изменения.

sudo grep newuser /etc/passwd # grep - программа для поиска по тексту. В данном случае, выведет все строки, содержащие newuser. 
sudo usermod --shell /bin/sh newuser
sudo grep newuser /etc/passwd # Данная команда произведет поиск по файлу 
                              # /etc/passwd, и отобразит в консоли все 
                              # строки, в которых присутствует слово
                              # newuser. В этой же строке будет указано,
                              # какая оболочка используется данным
                              # пользователем

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

su - newuser
echo $0
exit
sudo userdel -r newuser # флаг r используется, когда вы хотите удалить также домашний каталог пользователя.

Задание 4. Работа с текстом в bash.

Для практики нужно воспользоваться текстовым файлом, специально созданным для выполнения задания - таблица подключений OpenVPN, состоящая из имени клиента, IP адреса, MAC адреса устройства и внешнего IP, с которого клиент подключился. Необходимо загрузить файл, воспользовавшись специальной утилитой s3cmd, загружающего файлы с облачного хранилища, работающему по специальному протоколу s3(simple storage server):

sudo yum install s3cmd -y
sudo yum upgrade -y
cd ~ 
cp /var/lib/cloud/s3cfg .s3cfg
s3cmd get s3://lab1/clients.txt ~/

Вывести содержимое файла в консоль (Тут для удобства можно пользоваться встроенными в консоль горячими клавишами: Ctrl+L - Очистить содержимое консоли, Shift+PgUp - Прокрутить консоль вверх, Shift+PgDn - Прокрутить консоль вниз).

cat ~/clients.txt

Для того, чтобы вывести строки, содержащие подстроку, можно использовать grep. Необходимо вывести информацию о клиенте под номером 24 (grep - регистрозависимый, Client24 начинается с заглавной буквы).

grep Client24 ~/clients.txt

В результате исполнения команды должна быть выведена одна строка. Если было несколько строк, содержащих подстроку Client24, то в результате выведется несколько строк. Далее необходимо ввести команду:

grep Client2 ~/clients.txt

Необходимо попробовать понять, сколько будет выведено строк и почему именно они.

Помимо обычных строк grep поддерживает также регулярные выражения. При этом регулярные выражения должны экранироваться символом . С помощью регулярных выражений можно задать абсолютно любой паттерн. Относительно простой - вывести всех клиентов, имя которых заканчивается на 4. Точка в выражении означает любой символ.

grep Client\.4 ~/clients.txt

grep также умеет работать с пайплайном (вертикальная черта). С помощью пайплайна можно передавать вывод от одной программы другой, по принципу конвейера. Например, можно вывести текст через cat, и передать этот вывод на вход команды grep, для его обработки этой командой.

cat ~/clients.txt  |  grep Client\.4

Пайплайнов может быть несколько. Так, например, воспользовавшись программой AWK можно вывести только имя клиента и его внешний адрес - то есть первый и четвертый столбцы. (Внимание на пробел в двойных кавычках между номерами столбцов. Это разделитель, который будет между столбцами в конечном результате. Пробел можно заменить на любой другой символ, например, на дефис -, или символ табуляции \t. Можно попробовать это сделать)

cat ~/clients.txt  |  grep Client\.4 | awk ‘{print $1” “$4}’

AWK также поддерживает функции в своем синтаксисе. Например, чтобы вывести имя клиента и MAC, при этом чтобы MAC печатался заглавными буквами, нужно использовать следующую конструкцию.

cat ~/clients.txt  |  grep Client\.4 | awk ‘{print $1” “toupper($3)}’

Далее необходимо вывести MAC адрес, чтобы он был разделён не двоеточиями, а дефисами, тогда можно воспользоваться sed. Нужно лишь задать параметры для замены. После этого результат можно вывести не в консоль, а в новый файл (набирать в одну строку):

cat ~/clients.txt  |  grep Client\.4 | awk ‘{print $1” “toupper($3)}’ | sed -r ‘s/:/-/g’ > newfile.txt