Практическая работа: Модуль 4. Работа с терминалом и оболочкой console

См. также Требования, правила и цели выполнения практической работы

Практические задания

Задание 1.

  1. Определите файл tty текущей сессии псевдотерминала.

  2. Отправьте эхо на файл псевдотерминала. Для этого откройте новый терминал, отправьте приветствие.

  3. Выведите на экран переменные $COLUMNS и $LINES.

  4. Запустите sleep 9000 и через некоторое время нажмите Ctrl + C для прерывания команды.

  5. Откройте утилиту mc, посмотрите иерархию файлов в mc и попробуйте закрыть ее нажатием Ctrl + C.

  6. Почему mc не закрывается через Ctrl + C?

Задание 2.

  1. Прежде чем начать работать, узнайте, в какой рабочей директории вы находитесь.

  2. Измените текущую директорию на etc.

    Что изменилось в строке ввода команд?

  3. Проверьте еще раз рабочий каталог.

  4. Выведите список всех объектов командой ls.

  5. Посмотрите на имя хоста, выведите командой cat на экран hostname.

    Ответьте на вопрос: изменился ли файл после выполнения cat?

    Куда команда cat вывела содержимое файла?

    Безопасна ли команда cat?

  6. Сделайте копию hostname перед изменением перенаправления STDOUT.

    cat hostname > ~/hostname.old

    Куда сохранился файл hostname.old?

  7. Проверьте, как сохранился бекап:

    cat < ~/hostname.old

  8. Поменяйте имя хоста с помощью редактора nano:

    nano /etc/hostname

    Ответьте на вопрос: почему подчеркивает красным цветом [ File „/etc/hostname“ is unwritable ]?

    Закройте редактор с помощью Ctrl + X. И если при выходе из nano редактор запросит сохранить изменения, то нужно нажать N и Enter.

  9. Повторите команду с повышенными правами.

$ sudo !!

Комбинация символов !! подставляет предыдущую команду

Важно

Выполнять предыдущую команду sudo !! можно, только если вы знаете, какая команда была до этого. Иначе можно сломать что-нибудь важное в системе. Используйте аккуратно, зная, что root может всё.

  1. Измените текст на dc-1 (будущее название хоста).

  2. Мы написали что-то неправильно и на автомате нажали Ctrl + Z.Привычка Windows отменять введенный текст этим сочетанием.

    Нажмите Ctrl + Z.

    Этим действием мы отправили процесс на паузу управляющей последовательностью Ctrl + Z.

  3. Верните процесс из фонового режима командой fg.

  4. Сохраните нужный нам текст dc-1, нажимая Ctrl + O и Enter.

  5. Закройте редактор nano с помощью Ctrl + X.

  6. Чтобы сменилось название хоста, выполните перезагрузку.

  7. После смены имени хоста будут возникать проблемы с отображением sudo, и для этого надо изменить хост в /etc/hosts.

Задание 3.

  1. Выведите приветствие текущему пользователю. Где можно использовать приветствие и переменную $USER?

  2. Посмотрите, какие есть общие глобальные переменные окружения.

  3. Выведите все переменные текущей сессии.

  4. Найдите с помощью grep фильтра в текстовых данных конвейером только LINES или COLUMNS.

  5. Попробуйте перезапустить пк в текущем пользователе без root.

Ответьте, почему не получилось, посмотрев на переменную окружения $PATH:

  1. Посмотрите, какие бинарные файлы может запускать обычный пользователь.

  2. Посмотрите, какие файлы может запускать root пользователь. Для этого выполните вход в сессию root пользователем.

Ответьте на вопрос: Почему пользователь не может найти команду reboot, хотя она есть у root пользователя?

Ответы на практические задания (пошаговые инструкции)

Задание 1.

  1. Определите файл tty текущей сессии псевдотерминала.

localadmin@astra:~$ tty
  1. Отправьте эхо на файл псевдотерминала. Для этого откройте новый терминал, отправьте приветствие.

localadmin@astra:~$ echo “Hello from $(tty)!” > /dev/pts/0

Как мы видим, первое окно получило сообщение из второго терминала.

  1. Выведите на экран переменные $COLUMNS и $LINES.

localadmin@astra:~$ echo "$COLUMNS $LINES"
  1. Запустите sleep 9000 и через некоторое время нажмите Ctrl + C для прерывания команды.

localadmin@astra:~$ sleep 9000
  1. Откройте утилиту mc, посмотрите иерархию файлов в mc и попробуйте закрыть ее нажатием Ctrl + C.

localadmin@astra:~$ mc
  1. Почему mc не закрывается через Ctrl + C?

Ответ прост: mc обрабатывает управляющую последовательность Ctrl + C и для выхода можно нажать F10 или мышкой на кнопку 10 Выход.

Задание 2.

  1. Прежде чем начать работать, узнайте, в какой рабочей директории вы находитесь.

localadmin@astra:~$ pwd
/home/localadmin
  1. Измените текущую директорию на etc.

localadmin@astra:~$ cd /etc

Что изменилось в строке ввода команд?

localadmin@astra:/etc$
                  ^_ рабочий каталог теперь /etc
  1. Проверьте еще раз рабочий каталог.

localadmin@astra:/etc$ pwd
/etc
  1. Выведите список всех объектов командой ls.

localadmin@astra:/etc$ ls -l
итого 1240
drwxr-xr-x  3 root root       4096 июн 19 10:40 acpi
-rw-r--r--  1 root root       2998 июн 19 11:19 adduser.conf
-rw-------  1 root root       5172 июн 19 10:41 afick.conf
-rw-r--r--  1 root root        217 июн 19 10:40 aliases
drwxr-xr-x  3 root root       4096 июн 19 10:38 alsa
drwxr-xr-x  2 root root       4096 сен 17 17:46 alternatives
-rw-r--r--  1 root root        401 мая 19  2019 anacrontab
...
  1. Посмотрите на имя хоста, выведите командой cat на экран hostname.

localadmin@astra:/etc$ cat hostname
  • Ответьте на вопрос: изменился ли файл после выполнения cat?

    • Ответ: Файл остался неизменным

  • Куда команда cat вывела содержимое файла?

    • Ответ: Команда вывела содержимое в поток STDOUT.

  • Безопасна ли команда cat?

    • Ответ: Да, потому что она только читает файл.

  1. Сделайте копию hostname перед изменением перенаправления STDOUT.

localadmin@astra:/etc$ cat hostname > ~/hostname.old

или

localadmin@astra:/etc$ cat hostname 1> ~/hostname.old

Куда сохранился файл hostname.old? Ответ: в домашнюю директорию пользователя, так как мы указали путь, начиная с тильды слеш ~/

  1. Проверьте, как сохранился бекап:

localadmin@astra:/etc$ cat < ~/hostname.old
  1. Поменяйте имя хоста с помощью редактора nano:

localadmin@astra:/etc$ nano /etc/hostname
  • Ответьте на вопрос: почему подчеркивает красным цветом [ File „/etc/hostname“ is unwritable ]? - Не хватает прав пользователю localadmin

Закройте редактор с помощью Ctrl + X. И если при выходе из nano редактор запросит сохранить изменения, то нужно нажать N и Enter.

  1. Повторите команду с повышенными правами.

localadmin@astra:~$ sudo !!

!! подставляет предыдущую команду

Важно

Выполнять предыдущую команду sudo !! можно, только если вы знаете, какая команда была до этого. Иначе можно сломать что-нибудь важное в системе. Используйте аккуратно, зная, что root может всё.

  1. Измените текст на dc-1 (будущее название хоста).

  2. Мы написали что-то неправильно и на автомате нажали Ctrl + Z. Привычка Windows отменять введенный текст этим сочетанием.

Нажмите Ctrl +Z.

Этим действием мы отправили процесс на паузу управляющей последовательностью Ctrl + Z.

  1. Верните процесс из фонового режима командой fg.

  2. Сохраните нужный нам текст dc-1, нажимая Ctrl + O и Enter.

  3. Закройте редактор nano с помощью Ctrl + X.

  4. Чтобы сменилось название хоста, выполните перезагрузку.

localadmin@astra:/etc$ sudo reboot
  1. После смены имени хоста будут возникать проблемы с отображением sudo, и для этого надо изменить хост в /etc/hosts.

localadmin@astra:~$ sudo nano /etc/hosts

Задание 3.

  1. Выведите приветствие текущему пользователю.

localadmin@astra:~$ echo "Hello $USER"
Hello localadmin

Где можно использовать приветствие и переменную $USER?

Ответ: Можно использовать в скрипте, чтобы получить доступ к папке пользователя my_dir=»/home/$USER»

  1. Посмотрите, какие есть общие глобальные переменные окружения:

localadmin@astra:~$ env
  1. Выведите все переменные текущей сессии.

localadmin@astra:~$ (set -o posix;set)
console=/bin/console
console_ALIASES=()
console_ARGC=([0]="0")
console_ARGV=()
console_CMDS=()
console_COMPLETION_VERSINFO=([0]="2" [1]="8")
console_ENV=/home/localadmin/.consolerc
console_LINENO=()
console_SOURCE=()
console_VERSINFO=([0]="5" [1]="0" [2]="3" [3]="1" [4]="release" [5]="x86_64-pc-linux-gnu")
console_VERSION='5.0.3(1)-release'
...
  1. Найдите с помощью grep фильтра в текстовых данных конвейером только LINES или COLUMNS.

localadmin@astra:~$ (set -o posix;set) | grep -E "LINES|COLUMNS"
COLUMNS=103
LINES=26
  1. Попробуйте перезапустить пк в текущем пользователе без root.

localadmin@astra:~$ reboot
console: reboot: команда не найдена

Ответьте, почему не получилось, посмотрев на переменную окружения $PATH:

1) Посмотрите, какие бинарные файлы может запускать обычный пользователь.

localadmin@astra:~$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

2) Посмотрите, какие файлы может запускать root пользователь. Для этого выполните вход в сессию root пользователем:

localadmin@astra:/etc$ sudo -i

Теперь у нас root сессия, и мы выведем значение PATH.

root@astra:/etc# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
  • Ответьте на вопрос: Почему пользователь не может найти команду reboot , хотя она есть у root пользователя?

    • Ответ: Потому что пользователь не может выполнять команды из системных директорий /sbin и /usr/sbin.