Основные команды linux и unix консоли

Что такое inode в Linux?

Inode означает индексный узел. Хотя история не совсем уверена в этом, это самое логичное и лучшее предположение, которое они придумали. Раньше было написан I-node, но дефис со временем потерялся.

Как написано на linfo.org :

Inodes хранит метаданные о файле, к которому он относится. Эти метаданные содержат всю информацию об указанном файле.

  • Размер.
  • Разрешение.
  • Владелец/группа.
  • Расположение жесткого диска.
  • Дата/время.
  • Любая другая необходимая информация.

Каждый используемый inod ссылается на 1 файл. Каждый файл имеет 1 индекс. Каталоги, файлы символов, блочные устройства, все это файлы. У каждого из них есть 1 индекс.

Для каждого файла в каталоге есть запись, содержащая имя файла и номер индекса, связанный с ним.

Inodes  являются уникальными на уровне разделов. Вы можете иметь два файла с одинаковым номером inode, если они находятся в другом разделе. Информация inodes хранится в виде таблицы в виде структуры в стратегических частях каждого раздела. Часто встречается в начале.

Другие значения inode

Работа inode также объясняет, почему невозможно создать жесткую ссылку на другую файловую систему. Разрешение такой задачи откроет возможность наличия конфликтующих номеров inods. Мягкая ссылка, с другой стороны, может быть создана в другой файловой системе.

Поскольку жесткая ссылка имеет тот же номер inode, что и исходный файл, вы можете удалить исходный файл, и данные по-прежнему доступны через жесткую ссылку. Все, что вы сделали в этом случае, это удалите одно из имен, указывающих на этот номер inode. Данные, связанные с этим номером inode, будут оставаться доступными до тех пор, пока не будут удалены все связанные с ним имена.

Inode также являются важной причиной, по которой система Linux может обновляться без перезагрузки. Это связано с тем, что один процесс может использовать файл библиотеки, в то время как другой процесс заменяет этот файл новой версией

Поэтому создаем новый индекс для нового файла. Уже запущенный процесс будет продолжать использовать старый файл, в то время как каждый новый вызов приведет к использованию новой версии.

Еще одна интересная особенность, которая поставляется с inode – это возможность хранить данные в самом inode. Это называется Inlining. Преимущество этого метода хранения заключается в экономии места, поскольку блок данных не потребуется. Это также увеличивает время поиска, избегая большего доступа к диску для получения данных.

В некоторых файловых системах, таких как ext4, есть опция inline_data. Когда он включен, он позволяет операционной системе хранить данные таким образом. Из-за ограничения размера вставка работает только для очень маленьких файлов. Ext2 и более поздние версии часто сохраняют информацию о мягких ссылках таким образом. То есть если размер не более 60 байт.

Заключение

Inode – это не то, с чем вы взаимодействуете напрямую, но они играют важную роль. Если раздел должен содержать много очень маленьких файлов, таких как почтовый сервер, знание того, что они из себя представляют и как они работают, может спасти вас от многих проблем в будущем.

User Namespaces

User namespace имеет собственную копию пользовательского и группового идентификаторов. Затем изолирование позволяет связать процесс с другим набором ID — в зависимости от user namespace, которому он принадлежит в данный момент. Например, процесс может выполняться от (UID 0) в user namespace P и внезапно продолжает выполняться от (UID 13) после переключения в другой user namespace Q.

User spaces могут быть вложенными! Это означает, что экземпляр пользовательского namespace (родительский) может иметь ноль и больше дочерних пространств имён, и каждое дочернее пространство имён может, в свою очередь, иметь свои собственные дочерние пространства имён и так далее… (до достижения предела в 32 уровня вложенности). Когда создаётся новый namespace C, Linux устанавливает текущий User namespace процесса P, создающего C, как родительский для C и это не может быть изменено впоследствии. В результате все user namespaces имеют ровно одного родителя, образуя древовидную структуру пространств имён. И, как и в случае с деревьями, исключение из этого правила находится наверху, где у нас есть корневой (или начальный, дефолтный) namespace. Это, если вы еще не делаете какую-то контейнерную магию, скорее всего user namespace, к которому принадлежат все ваши процессы, поскольку это единственный user namespace с момента запуска системы.

Личная информация

Деятельность

скрыта или не указана

Можно редактировать:
да

Обязательно к заполнению:
нет

Можно скрыть настройками приватности:
да

Интересы

скрыты или не указаны

Можно редактировать:
да

Обязательно к заполнению:
нет

Можно скрыть настройками приватности:
да

Любимая музыка

скрыта или не указана

Можно редактировать:
да

Обязательно к заполнению:
нет

Можно скрыть настройками приватности:
да

Любимые фильмы

скрыты или не указаны

Можно редактировать:
да

Обязательно к заполнению:
нет

Можно скрыть настройками приватности:
да

Любимые телешоу

скрыты или не указаны

Можно редактировать:
да

Обязательно к заполнению:
нет

Можно скрыть настройками приватности:
да

Любимые книги

скрыты или не указаны

Можно редактировать:
да

Обязательно к заполнению:
нет

Можно скрыть настройками приватности:
да

Любимые игры

скрыты или не указаны

Можно редактировать:
да

Обязательно к заполнению:
нет

Можно скрыть настройками приватности:
да

Любимые цитаты

скрыты или не указаны

Можно редактировать:
да

Обязательно к заполнению:
нет

Можно скрыть настройками приватности:
да

Типы привилегий

Каждой описанной выше категории могут быть присвоены привилегии, которые предоставляют или ограничивают права на чтение, изменение или запуск файла.

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

Для каталогов права на чтение нужны, чтобы просматривать список (ls) содержимого, права на изменение – чтобы менять содержимое каталога, права на запуск – чтобы менять каталоги (cd) внутри каталога.

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

Буквенные обозначения

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

Каждое право представлено одной буквой:

  • r – право на чтение;
  • w – право на изменение;
  • x – право на запуск.

Важно помнить о том, что буквенные обозначения прав всегда указываются в данном порядке. Предоставленное право обозначается соответствующей буквой

Если определенный доступ ограничен, это  обозначается с помощью ​​тире (-).

Сначала права предоставляются владельцу файла, затем группе, и только потом другим пользователям. Таким образом, есть три группы из трех значений.

Команда ls использует буквенные обозначения при запуске с опцией «-l» (long-format):

Первое поле выведенного результата представляет привилегии файла.

Эти данные обозначаются с помощью 10 символов. Первый на самом деле не является значением привилегии, он указывает на тип файла (тире для обычного файла, d – для каталога, и т.д.). Следующие 9 символов представляют описанные выше права. Три группы, представляющие владельца, группу и других пользователей, каждая со значениями, определяющими права на чтение, изменение и запуск.

В приведенном выше примере владелец каталога «acpi» имеет права на чтение, изменение и запуск. Группа и другие пользователи имеют права на чтение и запуск.

Файл «anacrontab» позволяет владельцу читать и вносить изменения, но члены группы и другие пользователи имеет только право на чтение.

Восьмеричные обозначения

Более кратким, но менее понятным способом представления привилегий является  восьмеричное обозначение.

В данном случае каждая категория привилегий (владелец группа и другие пользователи) представлена числом от 0 до 7.

Для обозначения каждого типа прав используется определенное число, таким образом, ему задается численное значение:

  • 4 = право на чтение;
  • 2 = право на изменение;
  • 1 = право на запуск.

Числа, связанные с типом прав, которые нужно предоставить каждой категории, нужно суммировать. Таким образом, получится число от 0 до 7 (0 означает, что никакие права не были предоставлены, 7 указывает на полные права на чтение, изменение и запуск).

К примеру, если владелец файла имеет права на чтение и изменение, то они будут представлены значением 6 в столбце владельца файла. Если группа имеет только право на чтение, то это право будет представлено символом 4.

Подобно буквенным, восьмеричные обозначения может содержать дополнительный первый символ, указывающий на тип файла. За ним следует значение прав владельца, группы, затем других пользователей.

Команда chmod является очень важной программой при использовании восьмеричных обозначений

Основная информация

ID

409062477

Можно редактировать:
нет

Можно скрыть настройками приватности:
нет

Уникальный идентификатор пользователя, определяется при регистрации ВКонтакте.

Домен

whoiam27

Можно редактировать:
да

Обязательно к заполнению:
нет

Можно скрыть настройками приватности:
нет

Домен служит для установки красивой запоминающейся ссылки на страницу пользователя ВКонтакте.

Имя

Who

Можно редактировать:
да

Обязательно к заполнению:
да

Можно скрыть настройками приватности:
нет

Фамилия

I-Am

Можно редактировать:
да

Обязательно к заполнению:
да

Можно скрыть настройками приватности:
нет

Отчество

не указано

Можно редактировать:
нет

Обязательно к заполнению:
нет

Можно скрыть настройками приватности:
нет

ВКонтакте больше нельзя редактировать отчество для пользователей, у которых оно не было указано ранее.

Пол

мужской

Можно редактировать:
да

Обязательно к заполнению:
да

Можно скрыть настройками приватности:
нет

Дата рождения

скрыта или не указана

Можно редактировать:
да

Обязательно к заполнению:
да

Можно скрыть настройками приватности:
да

ВКонтакте присутсвует возможность скрыть дату рождения полностью или частично (при этом будут отображены только день и месяц рождения).

Контактная информация

Страна

Можно редактировать:
да

Обязательно к заполнению:
нет

Можно скрыть настройками приватности:
нет

Город

скрыт или не указан

Можно редактировать:
да

Обязательно к заполнению:
нет

Можно скрыть настройками приватности:
нет

Сайт

не указан

Можно редактировать:
да

Обязательно к заполнению:
нет

Можно скрыть настройками приватности:
нет

Skype

скрыт или не указан

Можно редактировать:
да

Обязательно к заполнению:
нет

Можно скрыть настройками приватности:
да

скрыт или не указан

Можно редактировать:
да

Обязательно к заполнению:
нет

Можно скрыть настройками приватности:
да

скрыт или не указан

Можно редактировать:
да

Обязательно к заполнению:
нет

Можно скрыть настройками приватности:
да

Livejournal

скрыт или не указан

Можно редактировать:
да

Обязательно к заполнению:
нет

Можно скрыть настройками приватности:
да

Журналирование неудачных попыток использования утилиты sudo

Использование утилиты без авторизации приведет к выводу строгого предупреждения.

paul@rhel65:~$ sudo su -

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

 password for paul:
paul is not in the sudoers file.  This incident will be reported.
paul@rhel65:~$

После этого пользователь root сможет увидеть следующую запись в файле в случае использования дистрибутива Red Hat (или в случае использования дистрибутива Debian).

root@rhel65:~# tail /var/log/secure | grep sudo | tr -s ' '
Apr 13 16:03:42 rhel65 sudo: paul : user NOT in sudoers ; TTY=pts/0 ; PWD=\
/home/paul ; USER=root ; COMMAND=/bin/su -
root@rhel65:~#

Реализация

Как вы можете видеть, есть много сложностей, связанных с управлением user namespaces, но реализация довольно проста. Всё, что нам нужно сделать, это написать кучу строк в файл — муторно было узнать, что и где писать. Без дальнейших церемоний, вот наши цели:

  1. Клонировать командного процесса в его собственном user namespace.
  2. Написать в UID и GID map-файлы командного процесса.
  3. Сбросить все привилегии суперпользователя перед выполнением команды.

достигается простым добавлением флага в наш системный вызов .

Для мы добавляем функцию , которая осторожно представляет одного обычного пользователя в качестве. И вызовем его из основного процесса в родительском user namespace прямо перед тем, как мы подадим сигнал командному процессу

И вызовем его из основного процесса в родительском user namespace прямо перед тем, как мы подадим сигнал командному процессу.

Для шага мы обновляем функцию , чтобы убедиться, что команда выполняется от обычного непривилегированного пользователя , которого мы предоставили в маппинге (помните, что root пользователь в user namespace командного процесса — это пользователь ):

И это всё! теперь запускает процесс в изолированном user namespace.

В этом посте было довольно много подробностей о том, как работают User namespaces, но в конце концов настройка экземпляра была относительно безболезненной. В следующем посте мы рассмотрим возможность запуска команды в своём собственном Mount namespace с помощью (раскрывая тайну, стоящую за из ). Там нам потребуется немного больше помочь Linux, чтобы правильно настроить инстанс.

Inodes & мягкая/жесткая связь

Мягкая ссылка – известная особенность в Linux. Но что происходит с Inodes, когда вы создаете программную ссылку? На следующем рисунке у нас есть каталог с именем «dir1», файл с именем «file1», а внутри «dir1» у нас есть мягкая ссылка «slink1», которая указывает на «../file1»
Теперь мы можем рекурсивно перечислять и показывать информацию об inods.
Как и ожидалось, dir1 и file1 имеют разные номера inode. Но так же и мягкая ссылка. Когда вы создаете программную ссылку, вы создаете новый файл. В своих метаданных он указывает на цель. Для каждой созданной вами мягкой ссылки вы используете один индекс.

После создания жесткой ссылки в dir1 с помощью следующей команды:

ln ../file1 hlink1

Список номеров inode дает нам следующую информацию:
Вы можете видеть, что « file1 ″ и« hlink1 »имеют одинаковый номер inod. По правде говоря, жесткие ссылки возможны из-за inode. Жесткая ссылка не создает новый файл. Он предоставляет только новое имя для тех же данных.

В старых версиях Linux можно было жестко связать каталог. Было даже возможно, чтобы данный каталог был его собственным родителем. Это стало возможным благодаря реализации inode. Теперь это ограничено, чтобы пользователи не могли создавать очень запутанную структуру каталогов.

Примеры использования who

Используя опцию -a, мы получаем максимум данных, которыми команда готова снабдить нас без каких-либо дополнительных указаний. В состав этой опции входят опции -b, -d, —login, -p, -r, -t, -T, -u:

Этих данных больше, чем при простом использовании who:

Чтобы узнать только время загрузки системы, достаточно написать в терминале:

Нужно узнать текущий уровень запуска (runinit)? Для этого служит команда who в сочетании с опцией -r:

При использовании опции -s выводятся значения NAME, LINE и TIME — информация, идентичная той, что будет получена без использования каких-либо опций. Все то же самое, но уже с добавлением данных о состоянии терминальной сессии, показывает опция -T.

Состояние — это возможность принимать сообщения от других терминалов. Если рядом с названием терминальной линии стоит «+», как на скриншоте, значит, сообщения могут быть приняты от любого стороннего терминала, в противном случае значение примет вид «-». Если вместо плюса или минуса там находится вопросительный знак, то линия неисправна:

Не упоминается в мануале опция -q, тем не менее, она работает, выводя информацию о количестве пользователей в системе:

С помощью -u можно узнать информацию о тех пользователях, которые активны в данный момент:

На этом же скрине видны изменения, которые происходят при использовании опции -H — у колонок с данными появились заголовки.А вот и зомби-процессы, которые показывает опция -d:

Кстати, поле EXIT при использовании этой опции не выводится. Чтобы увидеть его, следует использовать -a.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector