Практическая работа: Модуль 4. Работа с терминалом и оболочкой console
См. также Требования, правила и цели выполнения практической работы
Практические задания
Задание 1.
Определите файл tty текущей сессии псевдотерминала.
Отправьте эхо на файл псевдотерминала. Для этого откройте новый терминал, отправьте приветствие.
Выведите на экран переменные $COLUMNS и $LINES.
Запустите
sleep 9000
и через некоторое время нажмите Ctrl + C для прерывания команды.Откройте утилиту
mc
, посмотрите иерархию файлов в mc и попробуйте закрыть ее нажатием Ctrl + C.Почему
mc
не закрывается через Ctrl + C?
Задание 2.
Прежде чем начать работать, узнайте, в какой рабочей директории вы находитесь.
Измените текущую директорию на etc.
Что изменилось в строке ввода команд?
Проверьте еще раз рабочий каталог.
Выведите список всех объектов командой
ls
.Посмотрите на имя хоста, выведите командой
cat
на экран hostname.Ответьте на вопрос: изменился ли файл после выполнения
cat
?Куда команда
cat
вывела содержимое файла?Безопасна ли команда
cat
?Сделайте копию hostname перед изменением перенаправления STDOUT.
cat hostname > ~/hostname.old
Куда сохранился файл hostname.old?
Проверьте, как сохранился бекап:
cat < ~/hostname.old
Поменяйте имя хоста с помощью редактора nano:
nano /etc/hostname
Ответьте на вопрос: почему подчеркивает красным цветом [ File „/etc/hostname“ is unwritable ]?
Закройте редактор с помощью Ctrl + X. И если при выходе из nano редактор запросит сохранить изменения, то нужно нажать N и Enter.
Повторите команду с повышенными правами.
$ sudo !!
Комбинация символов !! подставляет предыдущую команду
Важно
Выполнять предыдущую команду sudo !!
можно, только если вы знаете, какая команда была до этого. Иначе можно сломать что-нибудь важное в системе. Используйте аккуратно, зная, что root может всё.
Измените текст на dc-1 (будущее название хоста).
Мы написали что-то неправильно и на автомате нажали Ctrl + Z.Привычка Windows отменять введенный текст этим сочетанием.
Нажмите Ctrl + Z.
Этим действием мы отправили процесс на паузу управляющей последовательностью Ctrl + Z.
Верните процесс из фонового режима командой
fg
.Сохраните нужный нам текст dc-1, нажимая Ctrl + O и Enter.
Закройте редактор nano с помощью Ctrl + X.
Чтобы сменилось название хоста, выполните перезагрузку.
После смены имени хоста будут возникать проблемы с отображением
sudo
, и для этого надо изменить хост в/etc/hosts
.
Задание 3.
Выведите приветствие текущему пользователю. Где можно использовать приветствие и переменную $USER?
Посмотрите, какие есть общие глобальные переменные окружения.
Выведите все переменные текущей сессии.
Найдите с помощью
grep
фильтра в текстовых данных конвейером только LINES или COLUMNS.Попробуйте перезапустить пк в текущем пользователе без root.
Ответьте, почему не получилось, посмотрев на переменную окружения $PATH:
Посмотрите, какие бинарные файлы может запускать обычный пользователь.
Посмотрите, какие файлы может запускать root пользователь. Для этого выполните вход в сессию root пользователем.
Ответьте на вопрос: Почему пользователь не может найти команду reboot
, хотя она есть у root пользователя?
Ответы на практические задания (пошаговые инструкции)
Задание 1.
Определите файл tty текущей сессии псевдотерминала.
localadmin@astra:~$ tty
Отправьте эхо на файл псевдотерминала. Для этого откройте новый терминал, отправьте приветствие.
localadmin@astra:~$ echo “Hello from $(tty)!” > /dev/pts/0
Как мы видим, первое окно получило сообщение из второго терминала.
Выведите на экран переменные $COLUMNS и $LINES.
localadmin@astra:~$ echo "$COLUMNS $LINES"
Запустите
sleep 9000
и через некоторое время нажмите Ctrl + C для прерывания команды.
localadmin@astra:~$ sleep 9000
Откройте утилиту
mc
, посмотрите иерархию файлов вmc
и попробуйте закрыть ее нажатием Ctrl + C.
localadmin@astra:~$ mc
Почему
mc
не закрывается через Ctrl + C?
Ответ прост: mc
обрабатывает управляющую последовательность Ctrl + C и для выхода можно нажать F10 или мышкой на кнопку .
Задание 2.
Прежде чем начать работать, узнайте, в какой рабочей директории вы находитесь.
localadmin@astra:~$ pwd
/home/localadmin
Измените текущую директорию на etc.
localadmin@astra:~$ cd /etc
Что изменилось в строке ввода команд?
localadmin@astra:/etc$
^_ рабочий каталог теперь /etc
Проверьте еще раз рабочий каталог.
localadmin@astra:/etc$ pwd
/etc
Выведите список всех объектов командой
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
...
Посмотрите на имя хоста, выведите командой
cat
на экран hostname.
localadmin@astra:/etc$ cat hostname
Ответьте на вопрос: изменился ли файл после выполнения
cat
?Ответ: Файл остался неизменным
Куда команда
cat
вывела содержимое файла?Ответ: Команда вывела содержимое в поток STDOUT.
Безопасна ли команда
cat
?Ответ: Да, потому что она только читает файл.
Сделайте копию hostname перед изменением перенаправления STDOUT.
localadmin@astra:/etc$ cat hostname > ~/hostname.old
или
localadmin@astra:/etc$ cat hostname 1> ~/hostname.old
Куда сохранился файл hostname.old?
Ответ: в домашнюю директорию пользователя, так как мы указали путь, начиная с тильды слеш ~/
Проверьте, как сохранился бекап:
localadmin@astra:/etc$ cat < ~/hostname.old
Поменяйте имя хоста с помощью редактора nano:
localadmin@astra:/etc$ nano /etc/hostname
Ответьте на вопрос: почему подчеркивает красным цветом [ File „/etc/hostname“ is unwritable ]? - Не хватает прав пользователю localadmin
Закройте редактор с помощью Ctrl + X
. И если при выходе из nano редактор запросит сохранить изменения, то нужно нажать N
и Enter.
Повторите команду с повышенными правами.
localadmin@astra:~$ sudo !!
!! подставляет предыдущую команду
Важно
Выполнять предыдущую команду sudo !!
можно, только если вы знаете, какая команда была до этого. Иначе можно сломать что-нибудь важное в системе. Используйте аккуратно, зная, что root может всё.
Измените текст на dc-1 (будущее название хоста).
Мы написали что-то неправильно и на автомате нажали Ctrl + Z. Привычка Windows отменять введенный текст этим сочетанием.
Нажмите Ctrl +Z.
Этим действием мы отправили процесс на паузу управляющей последовательностью Ctrl + Z.
Верните процесс из фонового режима командой
fg
.Сохраните нужный нам текст dc-1, нажимая Ctrl + O и Enter.
Закройте редактор nano с помощью Ctrl + X.
Чтобы сменилось название хоста, выполните перезагрузку.
localadmin@astra:/etc$ sudo reboot
После смены имени хоста будут возникать проблемы с отображением
sudo
, и для этого надо изменить хост в/etc/hosts
.
localadmin@astra:~$ sudo nano /etc/hosts
Задание 3.
Выведите приветствие текущему пользователю.
localadmin@astra:~$ echo "Hello $USER"
Hello localadmin
Где можно использовать приветствие и переменную $USER?
Ответ: Можно использовать в скрипте, чтобы получить доступ к папке пользователя my_dir=»/home/$USER»
Посмотрите, какие есть общие глобальные переменные окружения:
localadmin@astra:~$ env
Выведите все переменные текущей сессии.
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'
...
Найдите с помощью
grep
фильтра в текстовых данных конвейером только LINES или COLUMNS.
localadmin@astra:~$ (set -o posix;set) | grep -E "LINES|COLUMNS"
COLUMNS=103
LINES=26
Попробуйте перезапустить пк в текущем пользователе без 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
.