25 KiB
Решения лабораторных работ по видеокурсу Sander Van Vugt
лабораторные работы начинаются в 3-й главы
Глава 3. Базовые инструменты для работы с файлами.
- Создать структуру каталогов
/tmp/files/pictures
,/tmp/files/photos
,/tmp/files/videos
mkdir -p /tmp/files/pictures /tmp/files/photos /tmp/files/videos
- Из папки
/etc
скопировать все файлы имена которых начинаются сa
,b
илиc
(лат.) в каталог/tmp/files
cp /etc/[a-c]* /tmp/files
- Из
/tmp/files
переместить все файлы имена которых начинаются наa
илиb
в/tmp/files/photos
, а файлы, имена которых начинаются наc
переместить в/tmp/files/videos
mv /tmp/files/[ab]* /tmp/files/photos
mv /tmp/files/c* /tmp/files/videos
- Найти в папке
/etc
все файлы, размер которых меньше 1000 байт и скопировать их в/tmp/files/pictures
find /etc -type f -size -1000c -exec cp {} /tmp/files/pictures \;
- В папке
/tmp/files
создать символьную ссылку на/var
cd /tmp/files
ln -s /var .
- В папке
/tmp/files
создать сжатый архив директории/home
tar -zcvf home.tar.gz /home
- Распаковать архив с относительными именами файлов в
/tmp/archive/
mkdir /tmp/archive
tar -xvf home.tar.gz -C /tmp/archive
Глава 4. Работа с текстовыми файлами.
- Используйте
head
иtail
для отображения пятой строки в файле/etc/passwd
head -n 5 /etc/passwd | tail -n 1
- Используйте
sed
для отображения пятой строки в файле/etc/passwd
sed -n 5p /etc/passwd
- Используйте
awk
в конвейере, чтобы отфильтровать последний столбец в выводеps aux
ps aux | awk '{ print $NF }'
- Используйте
grep
, чтобы показать имена всех файлов в директории/etc
, содержащих строки со словомroot
grep '\<root\>' /etc/* 2>/dev/null
- Показать все строки в файлах директории
/etc
состоящие из 3-х символов. Используйтеgrep
grep '^...$' /etc/* 2>/dev/null
- Используйте
grep
, чтобы найти все файлы содержащиеalex
, но неalexander
. Подсказка: создайте файл, в первой строке -alex
, во второйalexander
cd
echo -e "alex\nalexander" > testfile
grep '\<alex\>' *
Глава 5. Подключение к серверу RHEL.
- Из графической консоли перейдите в вирутальный терминал tty6.
sudo chvt 6
- После выполнения 1-го задания авторизуйтесь как обычный пользователь и вернитесь в графический интерфейс, используя соответствующую команду.
chvt 1
- Используя
ssh
подключитесь какroot
кlocalhost
ssh root@localhost
Глава 6. Управление пользователями и группами.
- Настроить для всех новых пользователей: минимальная длина пароля - 6 символов, срок действия 90 дней.
vi /etc/login.defs
PASS_MIN_LEN 6
PASS_MAX_DAYS 90
- В домашней директории всех новых пользователей создается пустой файл с именем
newfile
.
touch /etc/skel/newfile
- Создать новых пользователей
anna
,andrey
,linda
,lisa
.
useradd anna
useradd andrey
useradd linda
useradd lisa
- Установить пароль для
anna
иandrey
-password
, дляlinda
иlisa
- пароль отключить.
passwd andrey
или
echo password | passwd --stdin anna
passwd linda -l
passwd lisa -l
- Создать группы
profs
,students
и назначитьanna
иandrey
членамиprofs
, аlinda
иlisa
- членами группыstudents
.
groupadd profs
groupadd students
usermod -aG profs anna
usermod -aG profs andrey
usermod -aG students linda
usermod -aG students lisa
Главал 7. Права доступа к файлам.
- Запретить доступ другим пользователям (
others
) ко всем новым файлам пользователя Linda. в файл/home/linda/.bashrc
добавить значениеumask 007
vi /home/linda/.bash_profile
- Создать структуру общих каталогов
/data/profs
,/data/students
со следующими разрешениями:
mkdir -p /data/profs /data/students
- члены групп имеют доступ на чтение и запись в эти директории, другие пользователи не имеют никаких разрешений;
chmod g+w,o-rx /data/profs/
chmod g+w,o-rx /data/students/
- члены групп могут редактировать все файлы создаваемые в этих директориях;
chmod g+s /data/profs/
chmod g+s /data/students/
- пользователи могут удалять только файлы , которые им принадлежат;
chmod +t /data/profs/
chmod +t /data/students/
- члены группы
profs
имеют доступ на чтение в/data/students
setfacl -m d:g:profs:rx /data/students/
- пользователь
anna
должна иметь возможность удалять файлы из директорий/data/profs
и/data/students
chown anna /data/profs
chown anna /data/students
Глава 8. Настройка сети.
- Назначить серверу статический IP адрес в текущей подсети. необходимо выяснить текущий IP
ip a
если в строке с указанным адресом есть global dynamic
, значит IP адрес получен от DHCP сервера.
для изменения сетевых настроек можно использовать утилиты nmcli
или nmtui
. Или вручную внести изменения в конфигурационный файл соответствующего подключения в директории /etc/sysconfig/network-scripts/
nmcli connection add type ethernet ifname ens18 ipv4.addresses 192.168.10.11/24 ipv4.gateway 192.168.10.9 ipv4.dns 8.8.8.8
nmcli connection show - чтобы увидеть название созданного подключения, пусть это будет ethernet-ens18
nmcli connection up ethernet-ens18 - после создания нового подключения, его необходимо активировать
- Назначить дополнительный IP адрес 10.0.0.10/24 на тот же сетевой интерфейс.
для решения этого задания можно использовать
nmcli
илиnmtui
nmcli connection modify ens18 +ipv4.addresses 10.0.0.10/24
- Перезагрузить сервер и убедиться, что настройки сохранились.
Глава 9. Управление процессами.
- Запустить команду
dd if=/dev/zero of=/dev/null
. Перевести запущенный процесс в фоновый режим.
dd if=/dev/zero of=/dev/null
Ctrl+Z
bg
- Запустить предыдущую команду 3 раза в фоновом режиме.
dd if=/dev/zero of=/dev/null &
dd if=/dev/zero of=/dev/null &
dd if=/dev/zero of=/dev/null &
- Используя
jobs
получить информацию о запущенных фоновых процессах.
[root@co1 ~]# jobs
[1] Запущен dd if=/dev/zero of=/dev/null &
[2] Запущен dd if=/dev/zero of=/dev/null &
[3]- Запущен dd if=/dev/zero of=/dev/null &
[4]+ Запущен dd if=/dev/zero of=/dev/null &
- Из
top
изменить приоритет (niceness
) одного из ранее запущенныхdd
на значение-5
. Убедиться, что использование CPU этого процесса увеличилось.
top
r
- Остановить все запущенные процессы
dd
из командной строки.
[root@co1 ~]# ps aux | grep '\<dd'
root 69261 51.6 0.0 7352 880 pts/1 R 15:29 0:24 dd if=/dev/zero of=/dev/null
root 69262 50.2 0.0 7352 912 pts/1 R 15:29 0:23 dd if=/dev/zero of=/dev/null
root 69263 49.2 0.0 7352 888 pts/1 R 15:29 0:23 dd if=/dev/zero of=/dev/null
root 69264 49.6 0.0 7352 992 pts/1 R 15:29 0:22 dd if=/dev/zero of=/dev/null
root 69266 0.0 0.0 12136 1100 pts/1 R+ 15:29 0:00 grep --color=auto \<dd
[root@co1 ~]# kill 69261 69262 69263 69264
или
killall dd
Глава 10. Управление программным обеспечением.
- Убедитесь, что ваша система использует YUM репозиторий для установки основных пакетов ОС.
yum repolist
в выводе должны быть перечислены используемые репозитории
- Найдите пакет, содержащий sepolicy, и установите его.
[user@host ~]$ yum provides sepolicy
Last metadata expiration check: 0:01:03 ago on Tue 31 Aug 2021 08:19:16 AM MSK.
policycoreutils-devel-2.9-14.el8.i686 : SELinux policy core policy devel utilities
Repo : baseos
Matched from:
Filename : /usr/bin/sepolicy
policycoreutils-devel-2.9-14.el8.x86_64 : SELinux policy core policy devel utilities
Repo : baseos
Matched from:
Filename : /usr/bin/sepolicy
[user@host ~]$ yum install policycoreutils-devel.x86_64
- Установите предыдущую версию PHP.
[user@host ~]$ yum module list | grep php
php 7.2 [d] common [d], devel, minimal PHP scripting language
php 7.3 common [d], devel, minimal PHP scripting language
php 7.4 common [d], devel, minimal PHP scripting language
sudo yum module install php:7.3
при установке обязательно указать module
- yum MODULE install
- Загрузите из репозитория пакет httpd не устанавливая, проверьте есть ли в этом пакете какие-либо скрипты.
yum --downloadonly httpd
rpm -qp --scripts httpd-2.4.37-39.module_el8.4.0+778+c970deab.x86_64.rpm
Глава 11. Работа с systemd.
- Убедиться, что сервис
httpd
стартует автоматически при загрузке системы.
[user@host ~]$ sudo systemctl status httpd
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
Drop-In: /etc/systemd/system/httpd.service.d
└─override.conf
Active: inactive (dead)
Docs: man:httpd.service(8)
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled;
- сервис не будет стартовать при загрузке системы
sudo systemctl enable --now httpd
- Отредактировать конфигурацию таким образом, чтобы в случае сбоя, через 1 минуту сервис снова работал.
sudo systemctl edit httpd.service
содержимое файла
[httpd]
Restart=always
RestartSec=60s
sudo systemctl daemon-reload
sudo systemctl start httpd
Глава 12. Планирование заданий.
- Убедиться, что
systemd timer
, который очищает временные файлы, активен.
[user@host ~]$ systemctl status systemd-tmpfiles-clean.timer
● systemd-tmpfiles-clean.timer - Daily Cleanup of Temporary Directories
Loaded: loaded (/usr/lib/systemd/system/systemd-tmpfiles-clean.timer; static; vendor preset: disabled)
Active: active (waiting) since Sun 2021-08-22 20:12:26 MSK; 1 weeks 4 days ago
Trigger: Fri 2021-09-03 20:36:07 MSK; 13h left
Docs: man:tmpfiles.d(5)
man:systemd-tmpfiles(8)
Aug 22 20:12:26 co1.rh systemd[1]: Started Daily Cleanup of Temporary Directories.
- Запустить задание cron, которое выполнит команду
touch /tmp/cronfile
через 5 минут.
crottab -e
установить значение минут +5 к текущему времени
38 * * * * touch /tmp/cronfile
- Используя
at
запланировать задание отключения компьютера сегодня в удобное время.
[user@host ~]$ systemctl status atd.service
● atd.service - Job spooling tools
Loaded: loaded (/usr/lib/systemd/system/atd.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2021-08-22 20:12:36 MSK; 1 weeks 4 days ago
Main PID: 1143 (atd)
Tasks: 1 (limit: 11258)
Memory: 424.0K
CGroup: /system.slice/atd.service
└─1143 /usr/sbin/atd -f
Aug 22 20:12:36 co1.rh systemd[1]: Started Job spooling tools.
[user@host ~]$ sudo at 21:00
[sudo] password for da2001:
warning: commands will be executed using /bin/sh
at> poweroff
at> <EOT>
для выхода из оболочки at
нажать Ctrl+D
отменим задание
[user@host ~]$ sudo atq
3 Fri Sep 3 21:00:00 2021 a root
[user@host ~]$ sudo atrm 3
Глава 13. Настройка хранения логов.
- Убедитесь, что логи systemd сохраняются постоянно (persistently). убедимся, что служба запущена
[user@host ~]$ systemctl status systemd-journald.service
● systemd-journald.service - Journal Service
Loaded: loaded (/usr/lib/systemd/system/systemd-journald.service; static; vendor preset: disabled)
Active: active (running) since Sun 2021-08-22 20:12:19 MSK; 1 weeks 4 days ago
Docs: man:systemd-journald.service(8)
man:journald.conf(5)
Main PID: 586 (systemd-journal)
Status: "Processing requests..."
Tasks: 1 (limit: 11258)
Memory: 2.5M
CGroup: /system.slice/systemd-journald.service
└─586 /usr/lib/systemd/systemd-journald
Aug 22 20:12:19 co1.rh systemd-journald[586]: Journal started
Aug 22 20:12:19 co1.rh systemd-journald[586]: Runtime journal (/run/log/journal/75cfadef25be494698e02d31e421d7bf) is 8.0M, max 90.8M, 82.8M free.
проверим настройки
[user@host ~]$ cat /etc/systemd/journald.conf
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
#
# Entries in this file show the compile time defaults.
# You can change settings by editing this file.
# Defaults can be restored by simply deleting this file.
#
# See journald.conf(5) for details.
[Journal]
#Storage=auto
#Compress=yes
#Seal=yes
***
в данном случае нас интересует только строка Storage, строки ниже не показаны. Значение auto
говорит о том, что логи будут сохранятся в папку /var/log/journal
, при условии, что папка существует. Убирать символ #
в начале не нужно, т.к. значение auto используется по-умолчанию.
[user@host ~]$ sudo mkdir /var/log/journal
[user@host ~]$ sudo systemctl restart systemd-journald.service
[user@host ~]$ sudo systemctl status systemd-journald
● systemd-journald.service - Journal Service
Loaded: loaded (/usr/lib/systemd/system/systemd-journald.service; static; vendor preset: disabled)
Active: active (running) since Fri 2021-09-03 09:20:40 MSK; 21s ago
Docs: man:systemd-journald.service(8)
man:journald.conf(5)
Main PID: 156983 (systemd-journal)
Status: "Processing requests..."
Tasks: 1 (limit: 11258)
Memory: 1.2M
CGroup: /system.slice/systemd-journald.service
└─156983 /usr/lib/systemd/systemd-journald
Sep 03 09:20:40 co1.rh systemd-journald[156983]: Journal started
Sep 03 09:20:40 co1.rh systemd-journald[156983]: System journal (/var/log/journal/75cfadef25be494698e02d31e421d7bf) is 16.0M, max 999.0M, 982.9M free.
теперь видно, что логи сохраняются в /var/log/journal/75cfadef25be494698e02d31e421d7bf
- Создать запись в rsyslog, при которой сохраняются все сообщения категории error и выше (severity - error) в
/var/log/error
sudo vi /etc/rsyslog.d/error.conf
*.error /var/log/error
sudo systemctl restart rsyslog.service
- Убедитесь, что
/var/log/error
архивируется ежемесячно, при этом 12 последних сообщений должны сохраниться перед архивацией. посмотрим настройки по-умолчанию для примера
[user@host ~]$ cat /etc/logrotate.conf
# see "man logrotate" for details
# rotate log files weekly
weekly
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# use date as a suffix of the rotated file
dateext
# uncomment this if you want your log files compressed
#compress
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d
# system-specific logs may be also be configured here.
настройку для отдельного сервиса или категории необходимо создать в новом файле в папке /etc/logrotate.d
посмотрим пример какого-нибудь файла из этой папки
[user@host ~]$ cat /etc/logrotate.d/samba
/var/log/samba/log.* {
compress
dateext
maxage 365
rotate 99
notifempty
olddir /var/log/samba/old
missingok
copytruncate
}
на основе настроек в /etc/logrotate.conf
и /etc/logrotate.d/samba
создадим новый конфиг для архивации логов error
sudo vi /etc/logrotate.d/error
/var/log/error {
montly
rotate 12
create
}
Глава 14. Управление дисками.
Для выполнения этой лабораторной работы необходимо создать дополнительный жёсткий диск в вашей виртуальной машине размером 10 ГБ.
- Создать основной раздел размером 1ГиБ. Отформатировать его в Ext4 и задать постоянную точку монтирования в
/mount/files
, используя его UUID.
sudo fdisk /dev/sdb
o - создать mbr (DOS) таблицу разделов
n - создать новый раздел
p - основной (primary) раздел
номер раздела и первый сектор оставить как предлагает fdisk
+1G - задать размер 1 Гб
w - записать изменения на диск и выйти
sudo mkfs.ext4 /dev/sdb1
sudo mkdir -p /mount/files
sudo blkid - покажет UUID всех разделов, скопировать UUID нужного
sudo vi /etc/fstab
добавить строку
UUID=3ffc186a-14c8-4fdf-807b-b1eba7b32346 /mount/files ext4 defaults 0 0
sudo mount -a
если ошибок нет, значит монтирование прошло успешно
- Создать расширенный раздел, включающий все оставшееся дисковое пространство. В этом разделе создать раздел XFS размером 5OO МиБ с постоянной точкой монтирования в
/mount/xfs
, используя меткуmyxfs
.
sudo fdisk /dev/sdb
n - создать новый раздел
e - создать расширенный (extended) раздел
номер раздела и первый и последний сектор оставить как предлагает fdisk
n - создать новый раздел
fdisk сам предложит создать логический раздел с номером 5, соглашаемся и соглашаемся с первым сектором. Далее необходимо указать конец раздела
+500M
w - записать изменения на диск и выйти
посмотреть созданные разделы
cat /proc/partitions
создадим ФС и метку раздела
sudo mkfs.xfs -L myxfs /dev/sdb5
посмотреть заданную метку
[user@host ~]$ ls /dev/disk/by-
by-id/ by-label/ by-partuuid/ by-path/ by-uuid/
[user@host ~]$ ls /dev/disk/by-label/
myxfs
добавим монтирование по метке
sudo mkdir -p /mount/xfs
sudo vi /etc/fstab
добавим строку
LABEL=myxfs /mount/xfs xfs defaults 0 0
проверим правильность монтирования
[user@host ~]$ sudo mount -a
[user@host ~]$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 32G 0 disk
├─sda1 8:1 0 500M 0 part /boot
├─sda2 8:2 0 1000M 0 part [SWAP]
└─sda3 8:3 0 9.8G 0 part
└─cl-root 253:0 0 9.8G 0 lvm /
sdb 8:16 0 10G 0 disk
├─sdb1 8:17 0 1G 0 part /mount/files
├─sdb2 8:18 0 1K 0 part
└─sdb5 8:21 0 500M 0 part /mount/xfs
sr0 11:0 1 1024M 0 rom
- Создать раздел подкачки 5OO МиБ и активировать его. После перезагрузки он должен быть доступен.
sudo umount /dev/sdb1 /dev/sdb5
sudo fdisk /dev/sdb
n - создать новый раздел
fdisk сам предложит создать логический раздел с номером 6, соглашаемся и соглашаемся с первым сектором. Далее необходимо указать конец раздела
+500M
t - изменить тип раздела
6 - указать тип какого раздела необходимо изменить
L - показать все возможные варианты
82 - необходим тип 82 Linux swap / Solaris
w - записать изменения на диск и выйти
формат раздела как SWAP
[user@host ~]$ sudo mkswap /dev/sdb6
Setting up swapspace version 1, size = 500 MiB (524283904 bytes)
no label, UUID=bdb56026-b883-41fc-a422-51492af8cbb5
укажем точку монтирования
sudo vi /etcfstab
добавим
UUID=bdb56026-b883-41fc-a422-51492af8cbb5 swap swap defaults 0 0
активируем новый раздел подкачки
[user@host ~]$ sudo mount -a
[user@host ~]$ free -m
total used free shared buff/cache available
Mem: 1817 539 753 2 524 1123
Swap: 999 0 999
[user@host ~]$ sudo swapon /dev/sdb6
[user@host ~]$ free -m
total used free shared buff/cache available
Mem: 1817 539 752 2 524 1123
Swap: 1499 0 1499