Лабораторная работа 0. Работа с консолью Linux и редактором Vim

Источник: методичка по консоли Linux. Команды адаптированы для Ubuntu Server 24.04 LTS.

Цель

Вы научитесь работать с файлами, пользователями и текстом в Linux, а также редактировать файлы в Vim.

Задачи

  1. Создайте файлы и измените права доступа.
  2. Установите пакет и проверьте его версию.
  3. Создайте пользователя и проверьте его окружение.
  4. Отредактируйте файл в Vim.
  5. Обработайте текст конвейером команд.

Рабочее окружение

Сначала подготовьте ВМ. Все команды вводите в Ubuntu-ВМ под своим учебным пользователем. Интернет понадобится только для установки пакетов. В остальных заданиях вы будете работать с локальными файлами. Укажите в отчёте, сколько времени заняла работа.

whoami
pwd
sudo -v
test -r ~/labs-mag/terraform/files/clients.txt

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

1. Проверьте, установлен ли Vim. Если нет, установите его и wget:

sudo apt-get update
sudo apt-get install vim wget
vim --version
wget --version

В подготовленной ВМ пакеты уже есть; повторная установка для автономной работы не нужна. update обновляет список пакетов, install устанавливает пакет.

2. Пройдите интерактивный курс:

vimtutor ru

3. Создайте рабочий каталог и файл:

mkdir -p ~/task00
cd ~/task00
vi user

Нажмите i и введите три строки о работе. Чтобы сохранить файл и выйти, нажмите Esc, введите :wq и нажмите Enter. Снова откройте файл: скопируйте строку командой yy, вставьте её командой p, удалите строку командой dd и отмените удаление командой u. Сохраните изменения.

4. Скопируйте файл и посмотрите права:

cp user root
sudo chown root:root root
sudo chmod 664 root
mv user lock
chmod 400 lock
ls -l
cat root
cat lock

Объясните каждую цифру в 664 и 400. Кто может изменить каждый файл?

Задание 2. Ошибка доступа

1. Добавьте строку в файл lock от своего пользователя:

printf 'new line\n' >> lock

Вы получите отказ в доступе. Проверьте владельца и права файла, затем верните разрешение на запись:

ls -l lock
chmod 600 lock
printf 'new line\n' >> lock
cat lock

2. Самостоятельно разрешите чтение группе, оставив запись только владельцу. Перед изменением запишите, какое числовое значение прав нужно задать.

Задание 3. Пользователь и окружение

1. Создайте отдельного учебного пользователя. Если newuser уже существует, проверьте id newuser и выберите другое имя во всех командах задания.

sudo useradd -m -s /bin/bash newuser
sudo passwd newuser
sudo usermod -aG sudo newuser
su - newuser
whoami
id
pwd
sudo -v

Задайте собственный учебный пароль. В Ubuntu административная группа называется sudo. Новые права группы начнут действовать после повторного входа.

2. Посмотрите окружение и создайте переменную:

echo "$USER"
echo "$SHELL"
printf '%s\n' "$PATH"
COURSE=linux
export COURSE
bash -c 'printf "%s\n" "$COURSE"'
unset COURSE
bash -c 'printf "%s\n" "${COURSE:-не задана}"'

Объясните назначение export и отличие переменной оболочки от переменной окружения дочернего процесса.

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

cat /etc/shells
exit
sudo usermod -s /bin/sh newuser
su - newuser
echo "$0"
exit
sudo usermod -s /bin/bash newuser
getent passwd newuser

$SHELL описывает оболочку входа; $0 помогает определить текущую оболочку.

Задание 4. Обработка текста в Bash

1. Скопируйте учебный файл. Terraform для этого не нужен:

cd ~/task00
cp ~/labs-mag/terraform/files/clients.txt .
head clients.txt
wc -l clients.txt
grep Client24 clients.txt
grep Client2 clients.txt

В исходном файле 50 строк без заголовка: имя, внутренний IP, MAC, внешний тестовый IP. Объясните, почему два поиска вернули разное количество строк.

2. Выберите клиентов, имя которых заканчивается на 4:

grep -E '^Client[0-9]*4 ' clients.txt

Получаются Client4, Client14, Client24, Client34, Client44. Выражение привязано к началу строки и концу первого поля.

3. Выведите имя и MAC прописными буквами, замените двоеточия дефисами:

grep -E '^Client[0-9]*4 ' clients.txt | awk '{print $1" "toupper($3)}' | sed 's/:/-/g' > newfile.txt
cat newfile.txt
test "$(wc -l < newfile.txt)" -eq 5

Объясните |, >, $1, $3. Самостоятельно получите имена клиентов, заканчивающиеся на 7, и их внешний IP; отсортируйте результат по имени.

Отчёт и вопросы для защиты

Приложите права до и после исправления, результат id, изменённый в Vim файл, оба конвейера с выводом и прогноз самостоятельного изменения. Ответьте:

  1. Чем отличаются владелец, группа и остальные пользователи?
  2. Почему sudo echo text > root не гарантирует успешную запись?
  3. Чем отличаются su -, sudo и запуск новой оболочки?
  4. Что произойдёт при повторном выполнении команды с > и с >>?

Сохранение и завершение

mkdir -p ~/reports/lab0
cp -r ~/task00 ~/reports/lab0/
sudo rm ~/task00/root
rm ~/task00/lock ~/task00/clients.txt ~/task00/newfile.txt
rmdir ~/task00
sudo userdel -r newuser

Если вы создали другие файлы, сначала просмотрите их через ls -la и сохраните нужное. Для повторения заново создайте task00 и пользователя.