Понимание Inode’ов
Понимание inode’ов критически важно для понимания файловых систем Unix. Файлы содержат данные и метаданные. Метаданные — это информация о файле. Метаданные хранятся в inode. Содержимое inode включает:
- Номер inode
- UID
- GID
- Размер
- Atime (время последнего доступа)
- Mtime (время последней модификации)
- Ctime (время последнего изменения метаданных)
- Размер блока
- Режим (права доступа и тип файла)
- Количество жёстких ссылок
- ACL (списки контроля доступа)
Обычно inode занимает 256 байт. Имена файлов не хранятся в inode — они находятся в данных, относящихся к директории. Как правило, имена файлов хранятся линейно, из-за чего поиск по имени может быть медленным. Файловые системы Ext4 и XFS используют более эффективные B-деревья (Btrees) для хранения имён файлов в директориях, что обеспечивает постоянное время поиска, в отличие от линейного.
Dentry (сокращение от directory entry — запись в директории) используется для хранения связи между inode и именем файла в директории.
Inode может содержать как прямые (direct), так и косвенные (indirect) указатели на блоки данных файла. Прямой указатель означает, что inode содержит номер блока, в котором находятся данные файла. Косвенный указатель означает, что inode содержит номер блока, в котором находятся номера других блоков с данными.
Файловая система Ext создаёт фиксированное количество inode’ов при форматировании. Если inode’ы заканчиваются, необходимо форматировать файловую систему. В отличие от неё, XFS не использует фиксированное количество inode’ов — они создаются по мере необходимости.
При удалении файла системный вызов unlink() удаляет запись в директории, указывающую на inode, и помечает inode как свободный. Сами блоки данных при этом не удаляются.
Количество жёстких ссылок на файл хранится в inode. Каждый раз при создании жёсткой ссылки это число увеличивается. Символические (soft) ссылки не увеличивают счётчик ссылок на файл или директорию.
Суперблок содержит метаданные о файловой системе. Обычно в файловой системе хранится несколько копий суперблока на случай повреждения основной. Некоторые из данных, хранящихся в суперблоке:
– Размер файловой системы
– Размер блока
– Количество свободных и занятых блоков
– Размер и расположение таблицы inode’ов
– Карта блоков диска
Информацию о суперблоке можно получить с помощью команды:
👉@linuxchmod
Понимание inode’ов критически важно для понимания файловых систем Unix. Файлы содержат данные и метаданные. Метаданные — это информация о файле. Метаданные хранятся в inode. Содержимое inode включает:
- Номер inode
- UID
- GID
- Размер
- Atime (время последнего доступа)
- Mtime (время последней модификации)
- Ctime (время последнего изменения метаданных)
- Размер блока
- Режим (права доступа и тип файла)
- Количество жёстких ссылок
- ACL (списки контроля доступа)
Обычно inode занимает 256 байт. Имена файлов не хранятся в inode — они находятся в данных, относящихся к директории. Как правило, имена файлов хранятся линейно, из-за чего поиск по имени может быть медленным. Файловые системы Ext4 и XFS используют более эффективные B-деревья (Btrees) для хранения имён файлов в директориях, что обеспечивает постоянное время поиска, в отличие от линейного.
Dentry (сокращение от directory entry — запись в директории) используется для хранения связи между inode и именем файла в директории.
Inode может содержать как прямые (direct), так и косвенные (indirect) указатели на блоки данных файла. Прямой указатель означает, что inode содержит номер блока, в котором находятся данные файла. Косвенный указатель означает, что inode содержит номер блока, в котором находятся номера других блоков с данными.
Файловая система Ext создаёт фиксированное количество inode’ов при форматировании. Если inode’ы заканчиваются, необходимо форматировать файловую систему. В отличие от неё, XFS не использует фиксированное количество inode’ов — они создаются по мере необходимости.
При удалении файла системный вызов unlink() удаляет запись в директории, указывающую на inode, и помечает inode как свободный. Сами блоки данных при этом не удаляются.
Количество жёстких ссылок на файл хранится в inode. Каждый раз при создании жёсткой ссылки это число увеличивается. Символические (soft) ссылки не увеличивают счётчик ссылок на файл или директорию.
Суперблок содержит метаданные о файловой системе. Обычно в файловой системе хранится несколько копий суперблока на случай повреждения основной. Некоторые из данных, хранящихся в суперблоке:
– Размер файловой системы
– Размер блока
– Количество свободных и занятых блоков
– Размер и расположение таблицы inode’ов
– Карта блоков диска
Информацию о суперблоке можно получить с помощью команды:
dumpe2fs /dev/mount | grep -i superblock
👉@linuxchmod
👍4
Запуск команд в фоновом режиме
Синтаксис
Задачу (например, команду или скрипт) можно перевести в фоновый режим, добавив символ «&» в конец командной строки. Этот оператор переводит команду в фоновый режим и освобождает место в терминале. Команда, выполняемая в фоновом режиме, называется заданием. Во время работы фоновой команды можно выполнять любые другие команды. Синтаксис выглядит следующим образом:
Чтобы перевести команду ls в фоновый режим, введите:
Чтобы перевести следующую команду поиска в фоновый режим, добавьте символ «&» в конец командной строки:
Как найти задания, работающие в фоновом режиме?
Выполните следующую команду:
Пример вывода данных:
[1] и [2] идентификаторы заданий.
Чтобы отобразить идентификаторы процессов для идентификаторов заданий помимо стандартных сведений, передайте параметр -l:
Пример вывода данных:
Пример вывода данных:
7307
7324
Как прекратить выполнение заданий, работающих в фоновом режиме?
Для принудительного или постепенного завершения процесса следует использовать команду kill. Синтаксис выглядит следующим образом:
Как переместить процесс из фонового режима в приоритетный?
Синтаксис:
ИЛИ
Сначала следует вывести список текущих заданий с помощью команды jobs. Для этого введите:
jobs -l
Пример вывода данных:
Чтобы перевести задание job id #2 в приоритетный режим, введите:
ИЛИ используйте команду:
Пример вывода данных:
Чтобы перевести это задание обратно в фоновый режим, нажмите клавишу Z, удерживая клавишу CTRL. При этом выполнение текущего приоритетного задания будет приостановлено. Введите следующую команду, чтобы перевести задание в фоновый режим:
ИЛИ используйте команду:
Теперь командное задание grep будет работать в фоновом режиме.
👉@linuxchmod
Синтаксис
Задачу (например, команду или скрипт) можно перевести в фоновый режим, добавив символ «&» в конец командной строки. Этот оператор переводит команду в фоновый режим и освобождает место в терминале. Команда, выполняемая в фоновом режиме, называется заданием. Во время работы фоновой команды можно выполнять любые другие команды. Синтаксис выглядит следующим образом:
command & script-name & /path/to/command arg1 arg2 & command-1 | command-2 arg1 & command-1 | command-2 -arg1 -arg2 >/path/to/output &
ПримерыЧтобы перевести команду ls в фоновый режим, введите:
$ ls *.py > output.txt &
Чтобы перевести следующую команду поиска в фоновый режим, добавьте символ «&» в конец командной строки:
find . -iname "*.mp3" > myplaylist.txt &
Как найти задания, работающие в фоновом режиме?
Выполните следующую команду:
jobs
Пример вывода данных:
[1]- Running find / -iname "*.c" 2> /dev/null > /tmp/output.txt &
[2]+ Running grep -R "hostNamed" / 2> /dev/null > /tmp/grep.txt &
Где[1] и [2] идентификаторы заданий.
Чтобы отобразить идентификаторы процессов для идентификаторов заданий помимо стандартных сведений, передайте параметр -l:
jobs –l
Пример вывода данных:
[1]- 7307 Running find / -iname "*.c" 2> /dev/null > /tmp/output.txt &
[2]+ 7324 Running grep -R "hostNamed" / 2> /dev/null > /tmp/grep.txt &
Чтобы отобразить только идентификаторы процессов, введите:jobs -p
Пример вывода данных:
7307
7324
Как прекратить выполнение заданий, работающих в фоновом режиме?
Для принудительного или постепенного завершения процесса следует использовать команду kill. Синтаксис выглядит следующим образом:
kill PID
kill -15 PID
kill -9 PID
killall process-Name-Here
killall -15 process-Name-Here
killall -9 process-Name-Here
Как переместить процесс из фонового режима в приоритетный?
Синтаксис:
%JOB-ID
ИЛИ
fg JOB-ID
Сначала следует вывести список текущих заданий с помощью команды jobs. Для этого введите:
jobs -l
Пример вывода данных:
[1]- 7307 Running find / -iname "*.c" 2> /dev/null > /tmp/output.txt &
[2]+ 7324 Running grep -R "hostNamed" / 2> /dev/null > /tmp/grep.txt &
Чтобы перевести задание job id #2 в приоритетный режим, введите:
%2
ИЛИ используйте команду:
fg 2
Пример вывода данных:
grep -R "hostNamed" / 2> /dev/null > /tmp/grep.txt
Чтобы перевести это задание обратно в фоновый режим, нажмите клавишу Z, удерживая клавишу CTRL. При этом выполнение текущего приоритетного задания будет приостановлено. Введите следующую команду, чтобы перевести задание в фоновый режим:
%2 &
ИЛИ используйте команду:
bg
Теперь командное задание grep будет работать в фоновом режиме.
👉@linuxchmod
👍4
🕵️
🔧 Примеры, которые реально полезны:
1️⃣ Кто слушает порт 443:
📌
2️⃣ Все открытые соединения от процесса (например, PID 1234):
3️⃣ Список соединений в состоянии
4️⃣ Сколько вообще активных соединений:
💡 Фишка:
Для UDP аналогично — просто меняем
👉@linuxchmod
ss
вместо netstat
: как быстро найти, что слушает портnetstat
давно устарел и не показывает точную картину на системах с systemd
. Настоящие профи уже давно используют ss
.🔧 Примеры, которые реально полезны:
1️⃣ Кто слушает порт 443:
ss -ltnp 'sport = :443'
📌
-l
— только слушающие, -t
— TCP, -n
— не резолвим имена, -p
— покажи PID/имя процесса.2️⃣ Все открытые соединения от процесса (например, PID 1234):
ss -pant | grep pid=1234
3️⃣ Список соединений в состоянии
ESTABLISHED
:
ss -ant state established
4️⃣ Сколько вообще активных соединений:
ss -s
💡 Фишка:
ss
быстрее и точнее netstat
, т.к. работает через netlink
. Особенно это критично на серверах с тысячами соединений.Для UDP аналогично — просто меняем
-t
на -u
.👉@linuxchmod
👍2
This media is not supported in your browser
VIEW IN TELEGRAM
aafire
Как установить libaa-bin в Ubuntu / Debian
sudo apt update
sudo apt install libaa-bin
Примеры программ с использованием aalib
https://aa-project.sourceforge.net/aalib/
👉@linuxchmod
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5⚡1
This media is not supported in your browser
VIEW IN TELEGRAM
Netdata - это высокоточный мониторинг инфраструктуры и производительности в режиме реального времени.
200+ предварительно созданных интеграций
Интеграция со все большим количеством операционных систем, коллекторов, платформ уведомлений и цепочек инструментов мониторинга/наблюдения.
Если метрика может быть собрана, она будет собрана: с 2 000+ автоопределяемых метрик и 100+ предварительно настроенных предупреждений на каждый узел.
https://github.com/netdata/netdata
👉@linuxchmod
200+ предварительно созданных интеграций
Интеграция со все большим количеством операционных систем, коллекторов, платформ уведомлений и цепочек инструментов мониторинга/наблюдения.
Если метрика может быть собрана, она будет собрана: с 2 000+ автоопределяемых метрик и 100+ предварительно настроенных предупреждений на каждый узел.
https://github.com/netdata/netdata
👉@linuxchmod
👍2
Скриптик переустановки пароля пользователя MikroTik
Скрипт интересен строкой преобразования кода символа из переменной
👉@linuxchmod
# Скрипт смены пароля пользователя
# только для исполнения в терминале ROS
# by Sertik 09/06/2020
{
:global EnterString do={
:local cont 0; :local string ""
:while ($cont!=13) do={
:local key ([:terminal inkey])
:if ($key!=13) do={
:local char [[:parse "(\"\\$[:pick "0123456789ABCDEF" (($key >> 4) & 0xF)]$[:pick "0123456789ABCDEF" ($key & 0xF)]\")"]]
:set string ("$string"."$char")}
:set cont $key
}
:return $string}
;
:put "Please, enter Username:"
:local RegUser [$EnterString];
:put "";
:if ([:len [/user find disabled=no name=$RegUser]]!=0) do={:put "Ok, a user with this name was found"; :put "";
:put "Please, enter new password for this user:"
:local newPass [$EnterString];
[/user remove $RegUser];
[/user add name=$RegUser password=$newPass group=full];
:put "";
:put "The user has been re-created, the password has been changed";
:put ("New user`s password: "."$newPass");
:put "Don't forget to set up access restrictions based on ip addresses";
} else={:put ("User "."$RegUser "."not found"); :put "";
}
}
Скрипт интересен строкой преобразования кода символа из переменной
$key
, сграбленного с клавиатуры терминала, в сам символ.:local char [[:parse "(\"\\$[:pick "0123456789ABCDEF" (($key >> 4) & 0xF)]$[:pick "0123456789ABCDEF" ($key & 0xF)]\")"]]
👉@linuxchmod
👍2
Badblocks — команда для поиска и исправления поврежденных секторов на жестких дисках
Команда badblocks предназначена для поиска и исправления поврежденных секторов на жестких дисках. На сегодняшний день она в некоторой степени утратила свою актуальность из-за того, что современные жесткие диски осуществляют переназначение поврежденных секторов в автоматическом режиме сразу же после возникновения ошибок, связанных с чтением или записью данных. Тем не менее, она может использоваться для активации упомянутого механизма переназначения секторов, так как при работе в основном режиме она осуществляет посектороное чтение данных с жесткого диска, которое позволяет жесткому диску выявить и переназначить поврежденные сектора.
Предупреждение: не используйте рассматриваемую команду, если не до конца уверены в правильности своих действий или не понимаете сути происходящих процессов, ведь в результате даже незначительной ошибки вы можете лишиться всех хранящихся на диске данных. Кроме того, не пытайтесь использовать эту команду по отношению к смонтированному разделу или к диску с со смонтирнованными разделами, ведь в этом случае последствия будут непредсказуемыми.
Перед использованием badblocks необходимо определиться с жестким диском или его разделом, на котором нужно искать поврежденные сектора. Для этого может использоваться команда lsblk:
В данном случае в столбце NAME будут выводиться имена файлов устройств накопителей и их разделов (для обозначения разделов используется дополнительная нумерация), в столбце FSTYPE - названия созданных в разделах файловых систем, в столбце LABEL - метки разделов, в столбце MOUNTPOINT - пути к точкам монтирования файловых систем, а в столбце MODEL - информация о моделях устройств.
Базовый синтаксис команды:
Параметр -v используется для вывода информации о ходе процесса проверки жесткого диска.
Если вам по какой-либо причине понадобится запретить использование поврежденных секторов на уровне файловой системы вы всегда можете сохранить список этих секторов и передать его утилите e2fsck. Это делается следующим образом:
Однако, в большинстве случаев будет достаточно однокртного посектороного чтения данных из раздела или со всего устройства.
Примеры использования
1. Выбор раздела жесткого диска для проверки
Выберем раздел с корневой файловой сситемой дистрибутива Debian (с соотвествующей меткой), который в данный момент не смонтирован. Ему соответствует файл устройства sdb2.
2. Проверка выбранного раздела на наличие поврежденных секторов
Очевидно, что в ходе проверки раздела поврежденных секторов не было обнаружено.
👉@linuxchmod
Команда badblocks предназначена для поиска и исправления поврежденных секторов на жестких дисках. На сегодняшний день она в некоторой степени утратила свою актуальность из-за того, что современные жесткие диски осуществляют переназначение поврежденных секторов в автоматическом режиме сразу же после возникновения ошибок, связанных с чтением или записью данных. Тем не менее, она может использоваться для активации упомянутого механизма переназначения секторов, так как при работе в основном режиме она осуществляет посектороное чтение данных с жесткого диска, которое позволяет жесткому диску выявить и переназначить поврежденные сектора.
Предупреждение: не используйте рассматриваемую команду, если не до конца уверены в правильности своих действий или не понимаете сути происходящих процессов, ведь в результате даже незначительной ошибки вы можете лишиться всех хранящихся на диске данных. Кроме того, не пытайтесь использовать эту команду по отношению к смонтированному разделу или к диску с со смонтирнованными разделами, ведь в этом случае последствия будут непредсказуемыми.
Перед использованием badblocks необходимо определиться с жестким диском или его разделом, на котором нужно искать поврежденные сектора. Для этого может использоваться команда lsblk:
# lsblk -o NAME,FSTYPE,LABEL,MOUNTPOINT,MODEL
NAME FSTYPE LABEL MOUNTPOINT MODEL
...
В данном случае в столбце NAME будут выводиться имена файлов устройств накопителей и их разделов (для обозначения разделов используется дополнительная нумерация), в столбце FSTYPE - названия созданных в разделах файловых систем, в столбце LABEL - метки разделов, в столбце MOUNTPOINT - пути к точкам монтирования файловых систем, а в столбце MODEL - информация о моделях устройств.
Базовый синтаксис команды:
# badblocks -v /dev/<имя файла раздела или устройства>
Параметр -v используется для вывода информации о ходе процесса проверки жесткого диска.
Если вам по какой-либо причине понадобится запретить использование поврежденных секторов на уровне файловой системы вы всегда можете сохранить список этих секторов и передать его утилите e2fsck. Это делается следующим образом:
# badblocks -v /dev/<имя файла раздела или устройства> > /tmp/badblocks.txt
# e2fsck -l /tmp/bad-blocks.txt /dev/<имя файла раздела или устройства>
# rm /tmp/badblocks.txt
Однако, в большинстве случаев будет достаточно однокртного посектороного чтения данных из раздела или со всего устройства.
Примеры использования
1. Выбор раздела жесткого диска для проверки
# lsblk -o NAME,FSTYPE,LABEL,MOUNTPOINT,MODEL
NAME FSTYPE LABEL MOUNTPOINT MODEL
sdb MAXTOR STM316081
├─sdb4 ext4 home /home
├─sdb2 ext4 Debian
└─sdb1 swap
...
Выберем раздел с корневой файловой сситемой дистрибутива Debian (с соотвествующей меткой), который в данный момент не смонтирован. Ему соответствует файл устройства sdb2.
2. Проверка выбранного раздела на наличие поврежденных секторов
# badblocks -v /dev/sdb2
Checking blocks 0 to 12697599
Checking for bad blocks (read-only test): done
Pass completed, 0 bad blocks found. (0/0/0 errors)
Очевидно, что в ходе проверки раздела поврежденных секторов не было обнаружено.
👉@linuxchmod
👍3
Наиболее распространенные оболочки
🔹Текстовые оболочки
Bash (оболочка типичная для систем GNU/Linux)
Bourne оболочки (оболочка из первых систем Unix)
C оболочки (оболочки популярные на Unix)
Z оболочки (известный как Zsh)
Korn оболочки (системы оболочки , обычно доступные на Unix)
Debian Альмквист оболочки (оболочки , используемый в Debian и производных для запуска системных скриптов)
cmd.exe (оболочка операционных систем семейства Windows NT)
command. com (оболочка операционной системы MS-DOS и некоторых системах Microsoft Windows)
Windows PowerShell (Advanced Shell для систем Microsoft Windows)
🔹Графические оболочки
GNOME (что характерно для GNU / Linux и Solaris 10)
KDE (что характерно для GNU/ Linux)
Xfce (что характерно для систем GNU / Linux)
Common Desktop Environment (как правило, доступны для систем Unix)
Finder (оболочка систем Mac OS )
File Explorer оболочка системы Microsoft Windows)
Unity (Official оболочка Ubuntu)
👉@linuxchmod
🔹Текстовые оболочки
Bash (оболочка типичная для систем GNU/Linux)
Bourne оболочки (оболочка из первых систем Unix)
C оболочки (оболочки популярные на Unix)
Z оболочки (известный как Zsh)
Korn оболочки (системы оболочки , обычно доступные на Unix)
Debian Альмквист оболочки (оболочки , используемый в Debian и производных для запуска системных скриптов)
cmd.exe (оболочка операционных систем семейства Windows NT)
command. com (оболочка операционной системы MS-DOS и некоторых системах Microsoft Windows)
Windows PowerShell (Advanced Shell для систем Microsoft Windows)
🔹Графические оболочки
GNOME (что характерно для GNU / Linux и Solaris 10)
KDE (что характерно для GNU/ Linux)
Xfce (что характерно для систем GNU / Linux)
Common Desktop Environment (как правило, доступны для систем Unix)
Finder (оболочка систем Mac OS )
File Explorer оболочка системы Microsoft Windows)
Unity (Official оболочка Ubuntu)
👉@linuxchmod
👍4
Текстовый интерфейс пользователя (RHCSA)
Стандартные потоки (RHCSA)
Создание backup скрипта (RHCSA)
Инкрементальные бэкапы с tar
Глоббинг и регулярные выражения (RHCSA)
источник
👉@linuxchmod
Стандартные потоки (RHCSA)
Создание backup скрипта (RHCSA)
Инкрементальные бэкапы с tar
Глоббинг и регулярные выражения (RHCSA)
источник
👉@linuxchmod
👍2
👍2