Решение проблем
Неудачно запущенные службы
Следующая команда найдёт все службы, которые не смогли выполнить запуск:
$ systemctl --state=failed
Чтобы определить причину, по которой служба не запустилась, необходимо изучить записи её логов. Подробнее см. .
Диагностика службы
Если какая-либо служба systemd ведет себя не так, как ожидается, и вы хотите получить дополнительную информацию о том, что происходит, присвойте переменной окружения значение . Например, чтобы запустить демон systemd-networkd в режиме отладки:
Добавьте для службы:
Environment=SYSTEMD_LOG_LEVEL=debug
Или, как вариант, пропишите переменную окружения вручную:
# SYSTEMD_LOG_LEVEL=debug /lib/systemd/systemd-networkd
После этого systemd-networkd и следите за журналом службы с помощью опции /.
Время загрузки системы увеличивается с течением времени
После использования некоторые пользователи заметили, что время загрузки системы значительно увеличилось. После использования NetworkManager запускался необычно долго.
Проблема связана с тем, что файл стал слишком большим. При этом также может уменьшаться скорость работы других команд, например, или . Для решения проблемы можно удалить все файлы из каталога журнала (в идеале — сделав где-нибудь резервные копии, хотя бы временно), а затем размер журнала.
systemd-tmpfiles-setup.service не запускается во время загрузки
Начиная с версии Systemd 219, определяет ACL-атрибуты для каталогов в и, следовательно, требует поддержки ACL для той файловой системы, в которой находится журнал.
Отключение emergency mode на удалённой машине
Вам может понадобиться отключить emergency mode на удалённой машине, например на виртуальных машинах Azure или Google Cloud. Это связано с тем, что в случае ухода системы в emergency mode она отключится от сети и лишит вас возможности подключения к ней.
Для отключения этого режима и .
Команды Linux связанные с установкой пакета
Эти команды используются для управления пакетами Linux.
78. rpm
RPM (менеджер пакетов) — это утилита управления пакетами, используемая для установки, удаления, обновления, запроса и проверки пакетов программного обеспечения.
80. yum
Yum (измененное средство обновления Yellowdog) — это утилита, предоставляется в системах RHEL для установки, удаления и поиска пакетов. Например, Yum автоматически устанавливает зависимости пакетов. , установит сервер «apache».
81. Apt
Apt — это инструмент командной строки для установки, обновления и удаления пакетов deb в Ubuntu, Debian и подобных дистрибутивах Linux.
Формат строки
Каждая строка в файле /etc/fstab содержит следующие поля, разделенные пробелами или символами табуляции:
filesystem dir type options dump pass
filesystem
Физическое место размещения файловой системы, по которому определяется конкретный раздел или устройство хранения для монтирования.
type
Тип файловой системы. Поддерживается множество типов: ext2, ext3, ext4, btrfs, reiserfs, xfs, jfs, smbfs, iso9660, vfat, ntfs, swap и auto. При выборе auto команда mount попытается определить реальный тип файловой системы самостоятельно. Это полезно для компакт-дисков (CD/DVD).
options
Параметры монтирования файловой системы. Подробнее смотрите на man странице mount
Обратите внимание, что некоторые параметры относятся к конкретным типам файловых систем.
Опция | Значение |
---|---|
auto | Файловая система монтируется при загрузке автоматически или после выполнения команды ‘mount -a’. |
noauto | Файловая система может быть смонтирована только вручную. |
exec | Позволяет исполнять бинарные файлы на разделе диска. Установлено по умолчанию. |
noexec | Бинарные файлы не выполняются. Использование опции на корневой системе приведёт к её неработоспособности. |
ro | Монтирует файловую систему только для чтения. |
rw | Монтирует файловую систему для чтения/записи. |
sync | Все операции ввода-вывода должны выполняться синхронно. |
async | Все операции ввода-вывода должны выполняться асинхронно. |
user | Разрешает любому пользователю монтировать файловую систему. Применяет опции noexec, nosuid, nodev, если они не переопределены. |
nouser | Только суперпользователь может монтировать файловую систему. Используется по умолчанию. |
defaults | Использовать значения по умолчанию. Соответствует набору rw, suid, dev, exec, auto, nouser, async. |
suid | Разрешить операции с suid и sgid битами. В основном используются, чтобы позволить пользователям выполнять бинарные файлы со временно приобретёнными привилегиями для выполнения определённой задачи. |
nosuid | Запрещает операции с suid и sgid битами. |
nodev | Данная опция предполагает, что на монтируемой файловой системе не будут созданы файлы устройств (/dev). Корневой каталог и целевая директория команды chroot всегда должны монтироваться с опцией dev или defaults. |
atime | Включает запись информации о последнем времени доступа (atime) при каждом чтении файла. Включено по умолчанию на Linux до v.2.6.29 включительно. |
noatime | Отключает запись информации о последнем времени доступа (atime) при каждом чтении файла. |
relatime | Включает запись информации о последнем времени доступа при чтении файла, если предыдущее время доступа (atime) меньше времени изменения файла (ctime). Включено по умолчанию на Linux начиная с v.2.6.30. |
acl | Включить обработку ACL для раздела |
dump
Используется утилитой dump для определения того, нужно ли создать резервную копию данных в файловой системе. Возможные значения: или 1. Если указано число 1, dump создаст резервную копию. У большинства пользователей утилита dump не установлена, поэтому им следует указывать 0 в этом поле.
pass
Используется программой fsck для определения того, нужно ли проверять целостность файловой системы. Возможные значения: , 1 или 2
Значение 1 следует указывать только для корневой файловой системы (с точкой монтирования ); для остальных ФС, которые вы хотите проверять, используйте значение 2, которое имеет менее высокий приоритет.Обратите внимание, что в случае btrfs следует всегда указывать , даже если эта файловая система используется в качестве корневой. Файловые системы, для которых в поле указано значение , не будут проверяться fsck.
Системные вызовы и обёрточные библиотечные функции
introtruncate
Часто, обёрточная функция glibc очень маленькая, она просто копирует
аргументы в нужные регистры перед запуском системного вызова, а затем
присваивает переменной errno значение, которое было возвращено системным
вызовом. (Эти те же шаги выполняет syscall(2), её можно использовать для
осуществления системных вызовов, для которых нет обёрточных функций.)
Замечание: системные вызовы указывают, что произошла ошибка возвращая
отрицательное целое число вызывающей стороне; когда это происходит,
обёрточная функция меняет знак у возвращённого значения (на положительный),
копирует его в errno и возвращает -1 вызвавшей обёртку функции.
Что нужно проверить перед перезагрузкой
Перед перезагрузкой дважды проверьте несколько деталей в своей установке, чтобы добиться успешной установки. Для этого сначала выполните chroot во вновь установленной системе, а затем:
, чтобы можно было войти по ssh
Это важно, так как вход в пользователя root отключен по умолчанию начиная с OpenSSH-7.1p2.
, чтобы вы могли переключиться в него с помощью su.
установите какой-нибудь SSH-сервер и включите его автозагрузку.
настройте сеть, чтобы подключение выполнялось автоматически при загрузке.
установите и настройте его на использование раздела подкачки, который вы присвоили ранее в качестве корневого раздела. Возможно, вы захотите настроить загрузчик так, чтобы он мог загружаться в вашу старую систему; для этой цели полезно повторно использовать существующий раздел в новой системе.
Команды Linux, для работы с файлами
Эти команды используются для обработки файлов и каталогов.
33. ls
Очень простая, но мощная команда, используемая для отображения файлов и каталогов. По умолчанию команда ls отобразит содержимое текущего каталога.
34. pwd
Linux pwd — это команда для показывает имя текущего рабочего каталога. Когда мы теряемся в каталогах, мы всегда можем показать, где мы находимся.
Пример ример ниже:
35. mkdir
В Linux мы можем использовать команду mkdir для создания каталога.
По умолчанию, запустив mkdir без какой-либо опции, он создаст каталог в текущем каталоге.
36. cat
Мы используем команду cat в основном для просмотра содержимого, объединения и перенаправления выходных файлов. Самый простой способ использовать cat— это просто ввести » имя_файла cat’.
В следующих примерах команды cat отобразится имя дистрибутива Linux и версия, которая в настоящее время установлена на сервере.
37. rm
Когда файл больше не нужен, мы можем удалить его, чтобы сэкономить место. В системе Linux мы можем использовать для этого команду rm.
38. cp
Команда Cp используется в Linux для создания копий файлов и каталогов.
Следующая команда скопирует файл ‘myfile.txt» из текущего каталога в «/home/linkedin/office«.
39. mv
Когда вы хотите переместить файлы из одного места в другое и не хотите их дублировать, требуется использовать команду mv. Подробнее можно прочитать ЗДЕСЬ.
40.cd
Команда Cd используется для изменения текущего рабочего каталога пользователя в Linux и других Unix-подобных операционных системах.
41. Ln
Символическая ссылка или программная ссылка — это особый тип файла, который содержит ссылку, указывающую на другой файл или каталог. Команда ln используется для создания символических ссылок.
Команда Ln использует следующий синтаксис:
42. touch
Команда Touch используется в Linux для изменения времени доступа к файлам и их модификации. Мы можем использовать команду touch для создания пустого файла.
44. head
Команда head используется для печати первых нескольких строк текстового файла. По умолчанию команда head выводит первые 10 строк каждого файла.
45. tail
Как вы, возможно, знаете, команда cat используется для отображения всего содержимого файла с помощью стандартного ввода. Но в некоторых случаях нам приходится отображать часть файла. По умолчанию команда tail отображает последние десять строк.
46. gpg
GPG — это инструмент, используемый в Linux для безопасной связи. Он использует комбинацию двух ключей (криптография с симметричным ключом и открытым ключом) для шифрования файлов.
50. uniq
Uniq — это инструмент командной строки, используемый для создания отчетов и фильтрации повторяющихся строк из файла.
53. tee
Команда Linux tee используется для связывания и перенаправления задач, вы можете перенаправить вывод и/или ошибки в файл, и он не будет отображаться в терминале.
54. tr
Команда tr (translate) используется в Linux в основном для перевода и удаления символов. Его можно использовать для преобразования прописных букв в строчные, сжатия повторяющихся символов и удаления символов.
Утилита systemctl
В Systemd есть специальный инструмент для управления службами в Linux — systemctl. Эта утилита позволяет делать очень много вещей, начиная от перезапуска службы linux и проверки ее состояния, до анализа эффективности загрузки службы. Синтаксис у утилиты такой:
$ systemctl опции команда служба служба…
Опции настраивают поведение программы, подробность вывода, команда — указывает что нужно сделать со службой, а служба, это та самая служба, которой мы собираемся управлять. В некоторых случаях утилита может использоваться без указания команды и службы.
Рассмотрим все по порядку. Опции очень сильно зависят от команд, поэтому рассмотрим их позже, а пока пройдемся по командах:
- list-units — посмотреть все службы (юниты), аналог опции -t
- list-sockets — посмотреть все службы сокетов
- start — запустить службу linux
- stop — остановить службу linux
- reload — обновить конфигурацию службы из файла юнита
- restart — перезапустить службу
- try-restart — перезапустить службу, только если она запущена
- reload-or-restart — обновить конфигурацию затем выполнить перезапуск службы linux, если не поддерживается — только перезапустить
- isolate — запустить только одну службу вместе с ее зависимостями, все остальные остановить
- kill — отправить сигнал завершения процессу используется вместе с опциями —signal и —kill-who
- is-active — проверить запущена ли служба linux
- is-failed — проверить не завершилась ли служба с ошибкой
- status — посмотреть состояние и вывод службы
- show — посмотреть параметры управления службой в Linux
- reset-failed — перезапустить службы linux, завершившиеся с ошибкой
- list-dependencies — посмотреть зависимости службы linux
- list-unit-files — вывести все установленные файлы служб
- enable — добавить службу в автозагрузку
- disable — удалить службу из автозагрузки
- is-enabled — проверить если ли уже служба в автозагрузке
- reenable — сначала выполнить disable потом enable для службы
- list-jobs — все запущенные службы linux независимо от типа
- snapsot — сохранить состояние служб, чтобы потом восстановить
- daemon-reload — обновить конфигурацию всех служб
- mask — сделать юнит недоступным
- unmask — вернуть файл службы linux
А теперь основные опции:
- -t, —type — тип служб для вывода
- -a, —all — показать все известные службы, даже не запущенные
- -q — минимальный вывод
- —version — версия программы
- —no-pager — не использовать постраничную навигацию
- —no-legend — не выводить подробное описание
- -f — принудительное выполнение команды
- —runtime — не сохранять вносимые изменения после перезагрузки
- -n — количество строк вывода лога для команды status
- —plain — использовать обычный текстовый режим вместо деревьев
- —kill-who — задать процесс, которому нужно отправить сигнал
- —signal — сигнал, который нужно отправить.
- —state — отфильтровать список служб по состоянию.
Как видите, опции будут мало полезны и лучше обратить больше внимания на команды, с помощью них выполняются все действия.
Ядро и системные вызовы
Какими бы умными они ни были, компьютерные программы не могут делать все сами. Им нужно делать запросы, чтобы за них выполнялись определенные функции. Эти запросы поступают в ядро Linux. Как правило, программа вызывает библиотеку или другой программный интерфейс, а затем библиотека делает соответствующий запрос — называемый системным вызовом — к ядру.
Возможность видеть системные вызовы, выполненные программой, и их ответы может помочь вам понять внутреннюю работу программ, которые вас интересуют или которые вы написали. Это что делает Strace. Это может помочь в устранении неполадок и поиске узких мест.
Это не то же самое, что отладка приложения с помощью такого инструмента, как gdb. Программа отладки позволяет вам исследовать внутреннюю работу программы во время ее выполнения. Он позволяет вам выполнять логику вашей программы и проверять память и значения переменных. Для сравнения, strace собирает информацию о системных вызовах во время работы программы. Когда отслеживаемая программа завершается, strace выводит информацию о системном вызове в окно терминала.
Системные вызовы предоставляют всевозможные низкоуровневые функции, такие как операции чтения и записи в файлах, завершающие процессы и т. Д. Есть список из сотен системных вызовов на страница руководства по системным вызовам.
2. Управление файловой системой
1. Операции чтения и записи файлов.
fcntl | файловый элемент управления |
open | открыть файл |
creat | Создать новый файл |
close | Закрыть слово описания файла |
read | Прочитать файл |
write | Записать файл |
readv | считывать данные из файла в буферный массив |
writev | Записать данные из массива буферов в файл |
pread | Файлы, читаемые случайным образом |
pwrite | Запись случайных файлов |
lseek | Переместить указатель файла |
_llseek | Перемещение указателя файла в 64-битном адресном пространстве. |
dup | Скопируйте описание открытого файла |
dup2 | Копировать слова описания файла в соответствии с заданными условиями |
flock | Добавление / разблокировка файла |
poll | Мультиплексирование ввода-вывода |
truncate | Обрезать файл |
ftruncate | см. усечение |
umask | Установить маску разрешений для файла |
fsync | Записать часть файла из памяти обратно на диск |
2. Работа файловой системы
access | Определить доступность файла |
chdir | Изменить текущий рабочий каталог |
fchdir | см. chdir |
chmod | Изменить метод файла |
fchmod | см. chmod |
chown | изменить владельца файла или группу пользователей |
fchown | см. chown |
lchown | см. chown |
chroot | Изменить корневой каталог |
stat | Получить информацию о статусе файла |
lstat | см. статистику |
fstat | см. статистику |
statfs | Получить информацию о файловой системе |
fstatfs | см. statfs |
readdir | прочитать запись каталога |
getdents | прочитать запись каталога |
mkdir | Создать каталог |
mknod | Создать узел индекса |
rmdir | удалить каталог |
rename | Переименование файла |
link | Создать ссылку |
symlink | Создать символическую ссылку |
unlink | удалить ссылку |
readlink | Прочитать значение символьной ссылки |
mount | Установить файловую систему |
umount | Отключить файловую систему |
ustat | Получить информацию о файловой системе |
utime | Изменить время изменения доступа к файлу |
utimes | см. utime |
quotactl | Контрольная дисковая квота |
Изменение корневого раздела
Используя arch-chroot
Bash-скрипт arch-chroot является частью пакета из официальных репозиториев. Перед тем, как запускать , этот скрипт монтирует интерфейсные файловые системы вроде и делает доступным из под окружения chroot.
Запустите arch-chroot с указанием нового корневого каталога:
# arch-chroot /mnt/arch
Чтобы запустить командную оболочку bash вместо sh:
# arch-chroot /mnt/arch /bin/bash
Чтобы запустить в окружении chroot минуя создание сеанса в командной оболочке:
# arch-chroot /mnt/arch /usr/bin/mkinitcpio -p linux
Используя chroot
# cd /mnt/arch # mount -t proc proc proc/ # mount --rbind /sys sys/ # mount --rbind /dev dev/
И, опционально:
# mount --rbind /run run/
Чтобы использовать интернет-соединение в chroot может понадобиться скопировать resolv.conf:
# cp /etc/resolv.conf etc/resolv.conf
Чтобы запустить bash в окружении chroot:
# chroot /mnt/arch /bin/bash
Примечание: Если вы получили ошибки:
- , это значит, что архитектуры основной среды и среды нового корневого каталога не совпадают.
- , перемонтируйте раздел с разрешением exec: .
После входа в сеанс chroot может понадобиться проинициализировать среду командной оболочки в новой среде:
# source /etc/profile # source ~/.bashrc
Совет: Вы также можете установить другое приглашение командной оболочки для того, чтобы отличать среду chroot от основной:
# export PS1="(chroot) $PS1"
Используя systemd-nspawn
systemd-nspawn может использоваться для запуска команды или операционной системы в легковесном контейнере. Во многих случаях он похож на chroot, но является более мощным инструментом, так как он полностью эмулирует отдельную иерархию файловой системы и дерево процессов, различные системы межпроцессного взаимодействия, имя хоста и домена.
Перейдите в точку монтирования нового корневого раздела и запустите systemd-nspawn:
# cd /mnt/arch # systemd-nspawn
Нет необходимости самостоятельно монтировать интерфейсные файловые системы вроде ,
так как systemd-nspawn запускает новый процесс init в созданной виртуальной среде, который берет на себя эту задачу. Это похоже на загрузку второй операционной системы внутри основной, но без создания виртуальной машины.
Чтобы вернуться в основную систему, просто разлогиньтесь или запустите команду poweroff. После этого вы можете размонтировать разделы, как показано в .
Without root privileges
Chroot requires root privileges, which may not be desirable or possible for the user to obtain in certain situations. There are, however, various ways to simulate chroot-like behavior using alternative implementations.
PRoot
PRoot may be used to change the apparent root directory and use without root privileges. This is useful for confining applications to a single directory or running programs built for a different CPU architecture, but it has limitations due to the fact that all files are owned by the user on the host system. PRoot provides a argument that can be used as a workaround for some of these limitations in a similar (albeit more limited) manner to fakeroot.
Fakechroot
is a library shim which intercepts the chroot call and fakes the results. It can be used in conjunction with to simulate a chroot as a regular user.
$ fakechroot fakeroot chroot ~/my-chroot bash
Unshare
Unshare, part of , can be used to create a new kernel namespace. This works with the usual chroot command. For example:
$ unshare --map-root-user chroot ~/namespace /bin/sh
Сохранение параметров mount после перезагрузки
Для того, что бы устройства при перезагрузки системы монтировались автоматически, необходимо прописать инструкции монтирования в файл /etc/fstab. Файл /etc/fstab содержит список записей в следующем формате:
Например:
/dev/sdb1 /home ext4 defaults 0 0
Подключит устройство /dev/sdb1 (например жесткий диск) в директорию /home
После того как инструкция для mount прописаны в /etc/fstab, что бы проверить правильность написания дайте команду
mount -a
Если команда отработает без ошибок, то все устройства прописанные в /etc/fstab будут подключены, а также изменения не потеряются после перезагрузки.
Run graphical applications from chroot
If you have an X server running on your system, you can start graphical applications from the chroot environment.
To allow the chroot environment to connect to an X server, open a virtual terminal inside the X server (i.e. inside the desktop of the user that is currently logged in), then run the xhost command, which gives permission to anyone to connect to the user’s X server (see also Xhost):
$ xhost +local:
Then, to direct the applications to the X server from chroot, set the DISPLAY environment variable inside the chroot to match the DISPLAY variable of the user that owns the X server. So for example, run:
$ echo $DISPLAY
as the user that owns the X server to see the value of DISPLAY. If the value is «:0» (for example), then in the chroot environment run:
# export DISPLAY=:0
ЗАМЕЧАНИЯ
Чаще всего, код системного вызова с номером __NR_xxx, определённого в
/usr/include/asm/unistd.h, можно найти в исходном коде ядра Linux в
функции sys_xxx(). (Таблицу вызовов для i386 можно найти в
/usr/src/linux/arch/i386/kernel/entry.S.) Есть много исключений из этого
правила, в основном из-за того, что большинство старых системных вызовов
заменена на новые, при чём без всякой системы. На платформах с эмуляцией
собственнических ОС, таких как parisc, sparc, sparc64 и alpha, существует
много дополнительных системных вызовов; для mips64 также есть полный набор
32-битных системных вызовов.
С течением времени при необходимости происходили изменения в интерфейсе
некоторых системных вызовов. Одной из причин таких изменений была
необходимость увеличения размера структур или скалярных значений
передаваемых системному вызову. Из-за этих изменений на некоторых
архитектурах (а именно на старых 32-битных i386) появились различные группы
похожих системных вызовов (например, truncate(2) и truncate64(2)),
которые выполняют одинаковые задачи, но отличаются размером своих
аргументов. (Как уже отмечалось, на приложения это не влияет: обёрточные
функции glibc выполняют некоторые действия по запуску правильного системного
вызова, и это обеспечивает совместимость по ABI для старых двоичных файлов.)
Примеры системных вызовов, у которых есть несколько версий:
- *
-
В настоящее время есть три различные версии stat(2): sys_stat() (место
__NR_oldstat), sys_newstat() (место __NR_stat) и sys_stat64()
(место __NR_stat64), последняя используется в в данный момент. Похожая
ситуация с lstat(2) и fstat(2). - *
-
Похожим образом определены __NR_oldolduname, __NR_olduname
и__NR_uname для вызовов sys_olduname(), sys_uname() и
sys_newuname(). - *
-
В Linux 2.0 появилась новая версия vm86(2), новая и старая версии ядерных
процедур называются sys_vm86old() и sys_vm86(). - *
-
В Linux 2.4 появилась новая версия getrlimit(2) новая и старая версии
ядерных процедур называются sys_old_getrlimit() (место __NR_getrlimit)
и sys_getrlimit() (место __NR_ugetrlimit). - *
-
В Linux 2.4 увеличено размер поля ID пользователей и групп с 16 до 32
бит. Для поддержки этого изменения добавлено несколько системных вызовов
(например, chown32(2), getuid32(2), getgroups32(2),
setresuid32(2)), упраздняющих ранние вызовы с теми же именами, но без
суффикса «32». - *
-
В Linux 2.4 добавлена поддержка доступа к большим файлам (у которых размеры
и смещения не умещаются в 32 бита) в приложениях на 32-битных
архитектурах. Для этого потребовалось внести изменения в системные вызовы,
работающие с размерами и смещениями по файлам. Были добавлены следующие
системные вызовы: fcntl64(2), getdents64(2), stat64(2),
statfs64(2), truncate64(2) и их аналоги, которые обрабатывают файловые
дескрипторы или символьные ссылки. Эти системные вызовы упраздняют старые
системные вызовы, которые, за исключением вызовов «stat», называются также,
но не имеют суффикса «64».На новых платформах, имеющих только 64-битный доступ к файлам и 32-битные
UID/GID (например, alpha, ia64, s390x, x86-64), есть только одна версия
системных вызовов для UID/GID и файлового доступа. На платформах (обычно это
32-битные платформы) где имеются *64 и *32 вызовы, другие версии устарели. - *
-
Вызовы rt_sig* добавлены в ядро 2.2 для поддержки дополнительных сигналов
реального времени (см. signal(7)). Эти системные вызовы упраздняют старые
системные вызовы с теми же именами, но без префикса «rt_». - *
-
В системных вызовах select(2) и mmap(2) используется пять или более
аргументов, что вызывало проблемы определения способа передачи аргументов на
i386. В следствии этого, тогда как на других архитектурах вызовы
sys_select() и sys_mmap() соответствуют __NR_select и __NR_mmap,
на i386 они соответствуют old_select() и old_mmap() (процедуры,
использующие указатель на блок аргументов). В настоящее время больше нет
проблемы с передачей более пяти аргументов и есть __NR__newselect,
который соответствует именно sys_select(), и такая же ситуация с
__NR_mmap2.
Зачем использовать chroot
После chroot каталоги и файлы, считываемые системой, будут находиться не в старом корне системы, а в структуре каталогов и файлов в новом корне (то есть в указанном новом местоположении), поэтому преимущества, которые это дает, примерно следующие Три:
- Повышение безопасности системы и ограничение возможностей пользователей;
После chroot структура корневых каталогов и файлы старой системы не будут доступны в новом корне, что повышает безопасность системы. Обычно это делается для использования chroot перед входом в систему, чтобы пользователи не могли получить доступ к некоторым конкретным файлам.
- Создать структуру каталогов системы, изолированную от исходной системы, чтобы облегчить разработку пользователей;
После использования chroot система читает каталоги и файлы в новом корне, который представляет собой структуру каталогов, не связанную с файлами в исходном корне системы. В этой новой среде его можно использовать для тестирования статической компиляции программного обеспечения и независимой разработки, не связанной с системой.
- Измените положение корневого каталога системы, загрузите систему Linux для запуска и аварийную систему.
Функция chroot — переключать корневую позицию системы, и наиболее очевидная функция — использовать ее при обработке начального загрузочного диска системы, переключать корневую позицию системы с начального RAM-диска (initrd) и выполнить настоящий init. Кроме того, когда в системе возникают проблемы, мы также можем использовать chroot для переключения на временную систему.
Открыть системный вызов
Мы можем использовать системный вызов «Open» в нашем дистрибутиве Linux, чтобы быстро открыть документ, который мы укажем в нашем коде языка C. Сначала запустите командный терминал. Вы можете использовать сочетание клавиш «Ctrl + Alt + T». Предположим, у вас есть текстовый файл «test.txt» в домашнем каталоге, и он содержит некоторое содержимое. Итак, вначале вы должны создать новое имя файла типа C «new.c» в терминале через редактор nano. Поэтому попробуйте простую нано-инструкцию ниже.
Теперь редактор Nano запущен. Введите в него код, показанный ниже. У нас в коде два файловых дескриптора. Оба файла можно открыть с помощью системного вызова open. Первый дескриптор содержит вызов чтения, а второй — функцию записи. Первый открытый вызов — это открытие текстового файла «test.txt» и сохранение его содержимого в файловый дескриптор «fd». Второй системный вызов open создает файл с именем «target». Документ «target» был возмещен файловому дескриптору «fd1». Инструкция записи используется для расшифровки байтов данных в буфере. Нажмите «Ctrl + S», чтобы сохранить код, и нажмите сочетание клавиш «Ctrl + X», чтобы закрыть файл.
Запустите инструкцию компиляции gcc, чтобы скомпилировать этот код C.
Давайте выполним код, используя простой запрос «a.out» в оболочке следующим образом:
Выходные данные переданы в файл «target». Давайте проверим «целевой» файл с помощью запроса «кошка». Экран вывода показывает 20-символьные данные в «целевом» файле.
Заключение
В конце статьи можно сформулировать следующий вывод: поскольку
файл и процесс – два ключевых понятия в операционной системе,
утилита lsof может оказаться незаменимым помощником администратора в
тех случаях, когда надо разобраться, как работает система, а особенно
в тех случаях, когда система скомпрометирована. И она тем полезнее,
чем больше ваша система и чем больше вы с ней работаете, чем лучше вы
понимаете, что она может. Когда вы освоите ее возможности, вы сможете
создать отдельные скрипты для обработки тех огромных массивов
информации, которые выдает эта программа. Можно, например, запускать
команду lsof -i через определенные промежутки времени, чтобы
сравнивать полученные данные. Если будут выявлены отличия в числе
открытых процессов или другие отличия, удовлетворяющие заданному
критерию, скрипт может сформировать сообщение администратору.
Мы рассмотрели только малую часть
возможностей этой утилиты. Более подробную информацию ищите на
соответствующей man-страничке.
Можно еще отметить, что для lsof разработана графическая оболочка,
называемая GLSOF. Ее можно получить с сайта
http://glsof.sourceforge.net/.
Ссылки:
- http://rus-linux.net
- С.Лапшанский,
“Кто использует эти файлы”, перевод статьи Майкла Лукаса
(URL: ). - В.А.Костромин,
“Linux для пользователя”, БХВ-Петербург, 2002 г. - “Meet the Amazing Mr. Lsof” (URL:
) - Indiana
University, Unix Workstation Support Group, «Unix for Advanced
Users”. 15.9. List Open Files: lsof
and fuser
(URL: - Thomas
Nooning, “Track network connections with LSOF on Linux”
(URL:
. - Martin
Zahn, “Introduction to lsof”, (URL:
). - “Installing, configuring and
using lsof 4.50 to list open files on systems running Solaris 2.x”
(URL:
)