Когда пользователь удаляет файл в Linux, сам файл не удаляется полностью. Вместо этого лишь удаляется его запись в индексе файловой системы, и пространство, которое он занимал, помечается как доступное для записи. Фактическое содержимое файла остается на месте и может быть легко восстановлено, пока на это место не будет записана новая информация. Чтобы этого избежать можно перезаписать область памяти нулями или случайными числами.
Можно использовать shred для HDD дисков (для SSD это не актуально), он перезапишет содержимое файла случайными числами перед удалением. И если восстановить файл, то его невозможно будет прочитать. Важно заметить, что перезапись файлов удлиняет интервал удаления файла, делает этот процесс более медленным.
Добавить нули перед удалением файла, перезаписать 4 раза:
Можно посмотреть как это работает:
В выводе будет абракадабра (это получит хакер, который восстановит секретный файл с диска).
Можно еще добавить alias для этого:
Уничтожить весь диск:
shred не работает с каталогами, для них можно использовать wipe:
shred не эффективен для файловых систем AIX, JFS, XFS, Ext3 и NFS из-за определенных особенностей и способа их работы.
#utils #security
Можно использовать shred для HDD дисков (для SSD это не актуально), он перезапишет содержимое файла случайными числами перед удалением. И если восстановить файл, то его невозможно будет прочитать. Важно заметить, что перезапись файлов удлиняет интервал удаления файла, делает этот процесс более медленным.
Добавить нули перед удалением файла, перезаписать 4 раза:
$ shred -uzn 4 file-with-secrets.txt
Можно посмотреть как это работает:
$ echo "hello world" > my-new-file.txt
$ shred -n 4 my-new-file.txt
$ cat my-new-file.txt
В выводе будет абракадабра (это получит хакер, который восстановит секретный файл с диска).
Можно еще добавить alias для этого:
alias rmf='shred -uzn 4'
Уничтожить весь диск:
$ shred /dev/<device>
shred не работает с каталогами, для них можно использовать wipe:
$ wipe -rf <dir>
shred не эффективен для файловых систем AIX, JFS, XFS, Ext3 и NFS из-за определенных особенностей и способа их работы.
#utils #security
Что такое ГОСТ?
Это государственный стандарт. Криптографические алгоритмы, разработанные в СССР и используемые для защиты информации. Они включают в себя алгоритмы шифрования, хеширования, электронной подписи и другие методы защиты данных. ГОСТ алгоритмы были широко использованы в России и других странах бывшего Советского Союза, и многие из них все еще остаются популярными в сфере информационной безопасности.
Если касаться криптографии, то военные не любят пользоваться импортными методиками, для них лучше ГОСТ шифрование, сертифицированное (криптопро и подобное).
Некоторые из наиболее известных ГОСТ алгоритмов, которые могут быть использованы с помощью OpenSSL, включают в себя:
Если нет ГОСТ шифров, необходимо собрать openssl с поддержкой данных шифров.
#utils #security
Это государственный стандарт. Криптографические алгоритмы, разработанные в СССР и используемые для защиты информации. Они включают в себя алгоритмы шифрования, хеширования, электронной подписи и другие методы защиты данных. ГОСТ алгоритмы были широко использованы в России и других странах бывшего Советского Союза, и многие из них все еще остаются популярными в сфере информационной безопасности.
Если касаться криптографии, то военные не любят пользоваться импортными методиками, для них лучше ГОСТ шифрование, сертифицированное (криптопро и подобное).
Некоторые из наиболее известных ГОСТ алгоритмов, которые могут быть использованы с помощью OpenSSL, включают в себя:
* ГОСТ 28147-89 (Magma)
* ГОСТ Р 34.10-2012 (GOST R 34.10-2012)
* ГОСТ Р 34.11-2012 (GOST R 34.11-2012)
$ openssl ciphers -v | grep GOST
Если нет ГОСТ шифров, необходимо собрать openssl с поддержкой данных шифров.
#utils #security
Немного про man, как осуществлять поиск по ключевым словам, как пользоваться
1. Главные пользовательские команды
2. Системные вызовы
3. Библиотека функции С
4. Устройства и сетевые интерфейсы
5. Формат файла
6. Игры
7. Смешанные файлы
8. Стандартные операции ядра Linux
Для создания man используется определенный синтаксис, язык. Маны хранятся обычно в сжатом виде
Поиск по ключевому слову, примеры:
Поиск. Искать во всех man, которые касаются системных вызовах по ключевому слову change.
Если мануалов мало, можно осуществить обновление базы данных, подтянуть новое:
#utils
1. Главные пользовательские команды
2. Системные вызовы
3. Библиотека функции С
4. Устройства и сетевые интерфейсы
5. Формат файла
6. Игры
7. Смешанные файлы
8. Стандартные операции ядра Linux
Для создания man используется определенный синтаксис, язык. Маны хранятся обычно в сжатом виде
.gz по пути /usr/share/man/*
Для того чтобы узнать какой man предоставляет утилита:$ whatis stdout
Поиск по ключевому слову, примеры:
$ man -k unistd
$ man -K PRIx32
$ man -wK PRIx32
$ man -k '[a-z]' | grep '(3)'
$ man -f open
$ man 0 stdio.h
$ man 3 stdio
Поиск. Искать во всех man, которые касаются системных вызовах по ключевому слову change.
$ man -k [a-z] | grep '(2)' | grep 'change'
Если мануалов мало, можно осуществить обновление базы данных, подтянуть новое:
$ mandb
#utils
Существует масса пакетов, которые тянут за собой зависимости, они называются Recommends. Например, в пакете
#debian #utils
neofetch есть рекомендации без которых пакет и так отлично работает. Не хотелось бы засорять систему. Как сделать так, чтобы не ставились рекомендованные пакеты?$ apt-get install neofetch --no-install-recommends
#debian #utils
eatmydata
В мейнтейнерской среде часто используется инструмент eatmydata для ускорения установки пакетов и выполнения операций. Этот инструмент позволяет временно отключить синхронизацию данных на диске, что может значительно ускорить выполнение операций ввода-вывода. eatmydata обходит использование системных вызовов, связанных с синхронизацией данных на диске, таких как fsync(), fdatasync() и msync(). Он также может обходить вызовы, связанные с блокировками файлов, такие как flock().
Однако, следует помнить, что использование eatmydata может повлечь за собой потерю данных в случае аварийного отключения компьютера или других проблем. Поэтому его использование следует рассматривать с осторожностью и только в тех случаях, когда ускорение работы действительно необходимо.
#debian #utils
В мейнтейнерской среде часто используется инструмент eatmydata для ускорения установки пакетов и выполнения операций. Этот инструмент позволяет временно отключить синхронизацию данных на диске, что может значительно ускорить выполнение операций ввода-вывода. eatmydata обходит использование системных вызовов, связанных с синхронизацией данных на диске, таких как fsync(), fdatasync() и msync(). Он также может обходить вызовы, связанные с блокировками файлов, такие как flock().
Однако, следует помнить, что использование eatmydata может повлечь за собой потерю данных в случае аварийного отключения компьютера или других проблем. Поэтому его использование следует рассматривать с осторожностью и только в тех случаях, когда ускорение работы действительно необходимо.
$ apt-get install eatmydata
$ eatmydata apt-get install <a lot of packages>
#debian #utils
exec и tee
С помощью exec можно делать замену дескрипторов/процессов.
tee читает из своего stdin и пишет в stdout например, сценарий
Затем выполнить:
Разбор. Здесь два процесса, первый наш исполняемый
Часто с tee командами возникает (freeze shell) tee останавливает появления приглашения PS1, который ожидает EOF в своем stdin, в качестве обходного пути можно сделать
Перенаправить stdout и stderr в
Перенаправить stdout в
Перенаправить stderr в
Для заметки:
Другой пример, сценарий
Трюки без exec, а с tee:
#shell #utils
С помощью exec можно делать замену дескрипторов/процессов.
tee читает из своего stdin и пишет в stdout например, сценарий
script.sh:#!/bin/bash
exec 2> >(tee file.log)
sleep .1
>&1 echo "hello 1"
>&2 echo "hello 2"
Затем выполнить:
$ ./script.sh
Разбор. Здесь два процесса, первый наш исполняемый
script.sh, а второй это tee. У первого процесса stderr (2 файловый дескриптор) смотрит в pipe, у второго процесса stdin (1 файловый дескриптор) смотрит тоже в этот pipe, то есть весь stderr сценария будет перенаправляться в tee, который будет записывать это в файл file.log.Часто с tee командами возникает (freeze shell) tee останавливает появления приглашения PS1, который ожидает EOF в своем stdin, в качестве обходного пути можно сделать
sleep .1 как в примере выше.Перенаправить stdout и stderr в
file.txt:exec &> >(tee file.txt)
Перенаправить stdout в
file.txt:exec 1> >(tee file.txt)
Перенаправить stderr в
file.txt:exec 2> >(tee file.txt)
Для заметки:
&> и >& одинаковы
2>&1 перенаправляет stderr в stdout
>/dev/null перенаправляет только stdout
Другой пример, сценарий
main.sh:#!/bin/bash
>&1 echo "hello 1"
>&2 echo "hello 2"
Трюки без exec, а с tee:
$ ./main.sh 2>&1 | tee logs/file.log
$ ./main.sh 2> >(tee logs/stderr.log)
#shell #utils
Как перевести скрипт в бинарный формат (ELF)?
Создадим сценарий:
Установка:
Перевести скрипт в ELF файл:
hello
Удостовериться, что наш сценарий-программа действительно ELF:
#utils #security
Создадим сценарий:
$ echo -e '#!/bin/sh\necho hello\nexit 0' > hello.sh
Установка:
$ apt-get install -y shc
Перевести скрипт в ELF файл:
$ shc -f hello.sh
$ ./hello.sh.x
hello
Удостовериться, что наш сценарий-программа действительно ELF:
$ file hello.sh.x
hello.sh.x: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=0d5954d51e07ffc91fce25485256ef210af3dbcc, for GNU/Linux 3.2.0, strippedhello.sh.x аналогичен a.out файлу, получился ELF. shc отличный инструмент, чтобы скрыть скрипт в бинарном файле.#utils #security
Как установить скаченный шрифт?
Например, появилось необходимость установить новый шрифт в терминале. Скачиваем шрифт из интернета (обычно с форматом .ttf), затем кладем его в
Обновить кэш:
Проверить доступность:
Затем в настройках терминала выбрать новый шрифт.
#utils #terminal
Например, появилось необходимость установить новый шрифт в терминале. Скачиваем шрифт из интернета (обычно с форматом .ttf), затем кладем его в
~/.fonts директорию.Обновить кэш:
$ fc-cache -fv
Проверить доступность:
$ fc-list | grep "my new font"
Затем в настройках терминала выбрать новый шрифт.
#utils #terminal
strace
Отследить работу процесса a.out:
Вывод в файл log:
Отслеживание конкретного процесса:
Отследить встроенную команду:
Например, команда 'mount -t nfs ...' возвращает отрицательный статус, можно проанализировать вывод утилиты strace:
Разбор:
-s1024 длина сообщений будет полная, а не обрезанная (32 длиной).
-f отслеживать дочерние процессы (если они будут созданы -
-i указатель инструкции во время системного вызова.
-k трассировка выполнения отслеживаемых процессов.
-n номера системных вызовов.
Данные трюки я использовал при отладке ПО. Работая системным программистом часто приходилось пользоваться strace. Если strace не работает, можно обратиться к файлу
#kernel #utils
Отследить работу процесса a.out:
$ strace a.out
Вывод в файл log:
$ strace -o my-log a.out
Отслеживание конкретного процесса:
$ strace -p <pid>
Отследить встроенную команду:
$ strace bash -c 'cd /tmp'
Например, команда 'mount -t nfs ...' возвращает отрицательный статус, можно проанализировать вывод утилиты strace:
$ strace -o mount.strace -s1024 -f -i -k -n mount -t nfs <path> <to-path>
Разбор:
-s1024 длина сообщений будет полная, а не обрезанная (32 длиной).
-f отслеживать дочерние процессы (если они будут созданы -
fork()).-i указатель инструкции во время системного вызова.
-k трассировка выполнения отслеживаемых процессов.
-n номера системных вызовов.
Данные трюки я использовал при отладке ПО. Работая системным программистом часто приходилось пользоваться strace. Если strace не работает, можно обратиться к файлу
/proc/sys/kernel/yama/ptrace_scope, про него описано в man 2 ptrace.#kernel #utils
Как смотреть журналы (dmesg и journalctl)
journalctl - системный журнал (читает
Вывод в реальном времени:
Отобразить сегодняшние записи:
Вывести только err уровень:
err, warning уровни:
Показывает журнал конкретного сервиса:
dmesg - системный журнал ядра (читает
less вывод:
Читабельный формат:
Показывает уровень (приоритет):
Вывод в реальном времени:
В сумме:
Зачистить dmesg:
#kernel #utils
journalctl - системный журнал (читает
/var/log/journal).Вывод в реальном времени:
$ journalctl -f
Отобразить сегодняшние записи:
$ journalctl -S today
Вывести только err уровень:
$ journalctl -S today -p err
err, warning уровни:
$ journalctl -S today -p 3..4
Показывает журнал конкретного сервиса:
$ journalctl -u <name>.service
dmesg - системный журнал ядра (читает
/var/log/kern.log или напрямую из ядра).less вывод:
$ dmesg -H
Читабельный формат:
$ dmesg -T
Показывает уровень (приоритет):
$ dmesg -x
Вывод в реальном времени:
$ dmesg -w
В сумме:
$ dmesg -HTx
Зачистить dmesg:
$ dmesg -C
#kernel #utils
X clipboards
Primary
Старый и традиционный вид буфера. Копирование в Primary: с помощью мыши. Вставка из Primary: Middle click, Shift + insert.
Clipboard
Более современный буфер обмена. Копирование в Clipboard: Ctrl + C. Вставка из Clipboard: Ctrl + V.
Secondary
Используется реже и имеет меньшее значение в повседневной работе. Его использование зависит от конкретных приложений и инструментов.
Работа с буферами обмена через утилиту xsel:
Зачистка clipboard буфера:
Зачистка primary буфера:
Вставка в clipboard буфер:
Вставка в primary буфер:
#utils
Primary
Старый и традиционный вид буфера. Копирование в Primary: с помощью мыши. Вставка из Primary: Middle click, Shift + insert.
Clipboard
Более современный буфер обмена. Копирование в Clipboard: Ctrl + C. Вставка из Clipboard: Ctrl + V.
Secondary
Используется реже и имеет меньшее значение в повседневной работе. Его использование зависит от конкретных приложений и инструментов.
Работа с буферами обмена через утилиту xsel:
Зачистка clipboard буфера:
$ xsel -b -c
Зачистка primary буфера:
$ xsel -p -c
Вставка в clipboard буфер:
$ echo "this is clipboard" | xsel -b -i
Вставка в primary буфер:
$ echo "this is primary" | xsel -p -i
#utils
gcc (GNU Compiler Collection)
Получение объектного файла (-с (compile) означает только компиляция - без компоновки):
Процесс сборки, получение бинарного файла (-o задает имя исполняемого файла):
Компиляция одиночного файла:
Поместить отладочную информацию в объектный/исполняемый файл:
Удалить отладочную информацию из ELF файла:
Различные уровни оптимизации 0-3, 0 - НЕ оптимизировать код:
-O3 означает оптимизировать код (улучшает его производительность, уменьшает размер кода и т.д.) Даже если программа собрана с -O3, volatile все равно говорит компилятору - НЕ оптимизировать код.
Вывод сообщений о всех предупреждениях или ошибках, возникающих во время компиляции:
Дополнительные предупреждения:
Эти флаги служат для поиска библиотек, передается компоновщику:
Для поиска заголовочных файлов -I/usr/local/include
В этой команде линкуется (связывается) exe с библиотекой math
Бывают случаи когда нужной библиотеки нет в стандартной библиотеке и компиляцию придется осуществлять с дополнительным флагом, например так:
#utils #build
Получение объектного файла (-с (compile) означает только компиляция - без компоновки):
$ gcc -c main.c
Процесс сборки, получение бинарного файла (-o задает имя исполняемого файла):
$ gcc -o exe a.o b.o
Компиляция одиночного файла:
$ gcc main.c -o program
Поместить отладочную информацию в объектный/исполняемый файл:
$ gcc -g<level>
$ gcc -g3 main.c
Удалить отладочную информацию из ELF файла:
$ strip -s a.out
Различные уровни оптимизации 0-3, 0 - НЕ оптимизировать код:
$ gcc -O0 main.c
-O3 означает оптимизировать код (улучшает его производительность, уменьшает размер кода и т.д.) Даже если программа собрана с -O3, volatile все равно говорит компилятору - НЕ оптимизировать код.
Вывод сообщений о всех предупреждениях или ошибках, возникающих во время компиляции:
-Wall
Дополнительные предупреждения:
-Wextra
Эти флаги служат для поиска библиотек, передается компоновщику:
-L<путь> -l<библ>
Для поиска заголовочных файлов -I/usr/local/include
-I<путь>
В этой команде линкуется (связывается) exe с библиотекой math
gcc -o exe sums.c -lm
Бывают случаи когда нужной библиотеки нет в стандартной библиотеке и компиляцию придется осуществлять с дополнительным флагом, например так:
$ gcc main.c -lpthread
#utils #build
Если в
1. Узнаём, какие версии пакета доступны:
2. Скачиваем исходники нужной версии (например, 3:4.8.22-1 из buster):
В результате будут скачаны исходные файлы пакета mc нужной версии из соответствующего репозитория.
#debian #utils
/etc/apt/sources.list прописаны несколько deb-src разных релизов (например, sid, bookworm, bullseye, buster и т.д.) и нужно скачать конкретную версию пакета, например, из buster:1. Узнаём, какие версии пакета доступны:
$ apt-cache madison mc
2. Скачиваем исходники нужной версии (например, 3:4.8.22-1 из buster):
$ apt-get source mc=3:4.8.22-1
В результате будут скачаны исходные файлы пакета mc нужной версии из соответствующего репозитория.
#debian #utils
kernel-hardening-checker
Это инструмент и библиотека для Linux, предназначенная для проверки конфигурации ядра на соответствие рекомендациям по усилению безопасности (security hardening) и противодействию эксплойтам. Он позволяет выявить, какие конфигурации ядра включены, а какие нет, помогая администраторам настроить систему на более безопасный уровень работы.
Установка:
# Пакет проходит проверку и скоро появится в ветке sid (unstable)
Проверяет указанный файл конфигурации ядра Linux на включённые меры харденига и выводит отчёт с рекомендациями, опция
> GitHub
#kernel #security #utils #opensource #software
Это инструмент и библиотека для Linux, предназначенная для проверки конфигурации ядра на соответствие рекомендациям по усилению безопасности (security hardening) и противодействию эксплойтам. Он позволяет выявить, какие конфигурации ядра включены, а какие нет, помогая администраторам настроить систему на более безопасный уровень работы.
Установка:
# Пакет проходит проверку и скоро появится в ветке sid (unstable)
Проверяет указанный файл конфигурации ядра Linux на включённые меры харденига и выводит отчёт с рекомендациями, опция
-c указывает путь к конфигу:$ kernel-hardening-checker -c /boot/config-6.1.0-32-amd64
> GitHub
#kernel #security #utils #opensource #software
linkchecker
Хотите убедиться, что на вашем сайте или в документации нет битых ссылок? LinkChecker — это удобная утилита, которая поможет автоматически проверить все ссылки на странице или в целом каталоге.
* Проверяет внутренние и внешние ссылки
* Поддерживает рекурсивный обход каталогов
* Работает с HTML, XHTML, CSS и другими форматами
* Выводит отчёт о битых и перенаправленных ссылках
Установка:
Проверка всех ссылок в каталоге:
Проверка внешних ссылок:
Если найдутся битые ссылки, LinkChecker покажет их список с кодом ошибки (например, 404).
#utils
Хотите убедиться, что на вашем сайте или в документации нет битых ссылок? LinkChecker — это удобная утилита, которая поможет автоматически проверить все ссылки на странице или в целом каталоге.
* Проверяет внутренние и внешние ссылки
* Поддерживает рекурсивный обход каталогов
* Работает с HTML, XHTML, CSS и другими форматами
* Выводит отчёт о битых и перенаправленных ссылках
Установка:
$ apt-get install -y linkchecker
Проверка всех ссылок в каталоге:
$ linkchecker dir/
Проверка внешних ссылок:
$ linkchecker --check-extern dir/
Если найдутся битые ссылки, LinkChecker покажет их список с кодом ошибки (например, 404).
#utils
Fail2ban
Это маленькая утилита‑охранник, которая защищает сервер от перебора паролей и подозрительной активности. Она следит за логами (например, sshd) и, если видит слишком много неудачных попыток входа, временно блокирует IP через Firewall. Если у вас есть сервер, советую настроить эту утилиту, очень хорошо защищает от украинских скрипт-кидди (которые ничего не могут, кроме как позориться на весь мир), ну и в подобных случаях.
Зачем нужен для SSH:
- защищает от brute‑force
- снижает нагрузку от ботов
- не требует сложной настройки
- автоматически банит подозрительные IP
Установка:
Запуск и автозагрузка:
-> Базовая настройка
Не изменяй
Минимальная настройка для SSH в
bantime — на сколько секунд банить
maxretry — сколько попыток можно сделать
Применить настройки:
-> Проверки
Статус сервиса:
Статус конкретной тюрьмы (ssh):
Разбанить IP:
Где полезен кроме SSH:
- защита nginx
- защита nextcloud
- защита vsftpd и postfix
- фильтрация подозрительных паттернов в логах
#security #utils
Это маленькая утилита‑охранник, которая защищает сервер от перебора паролей и подозрительной активности. Она следит за логами (например, sshd) и, если видит слишком много неудачных попыток входа, временно блокирует IP через Firewall. Если у вас есть сервер, советую настроить эту утилиту, очень хорошо защищает от украинских скрипт-кидди (которые ничего не могут, кроме как позориться на весь мир), ну и в подобных случаях.
Зачем нужен для SSH:
- защищает от brute‑force
- снижает нагрузку от ботов
- не требует сложной настройки
- автоматически банит подозрительные IP
Установка:
$ apt-get install fail2ban
Запуск и автозагрузка:
$ systemctl enable fail2ban
$ systemctl start fail2ban
-> Базовая настройка
Не изменяй
/etc/fail2ban/jail.conf — создавай локальный файл:$ cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Минимальная настройка для SSH в
/etc/fail2ban/jail.local:[sshd]
enabled = true
filter = sshd
port = ssh
maxretry = 5
bantime = 600
logpath = /var/log/auth.log
bantime — на сколько секунд банить
maxretry — сколько попыток можно сделать
Применить настройки:
$ systemctl restart fail2ban
-> Проверки
Статус сервиса:
$ fail2ban-client status
Статус конкретной тюрьмы (ssh):
$ fail2ban-client status sshd
Разбанить IP:
$ fail2ban-client set sshd unbanip 1.2.3.4
Где полезен кроме SSH:
- защита nginx
- защита nextcloud
- защита vsftpd и postfix
- фильтрация подозрительных паттернов в логах
#security #utils
batcat
Это утилита для удобного просмотра файлов в терминале. Это расширенная версия команды cat:
- нумерация строк
- подсветка синтаксиса
- поддержка тем оформления
- просмотр с прокруткой (через less)
Обычно устанавливается как bat, но в Debian/Ubuntu называется batcat.
#utils
Это утилита для удобного просмотра файлов в терминале. Это расширенная версия команды cat:
- нумерация строк
- подсветка синтаксиса
- поддержка тем оформления
- просмотр с прокруткой (через less)
Обычно устанавливается как bat, но в Debian/Ubuntu называется batcat.
#utils
Как модули попадают в ядро Linux
Когда ядро обнаруживает необходимость в тех или иных функциональных возможностях, ещё не загруженных в память, оно вызывает helper
Утилиты
У модулей есть alias. Например, модуль
Это значит, что
(Примечание:
Затем
Например, модуль
Затем
Для загрузки модулей, собранных вне дерева ядра, полезно иметь включённый CONFIG_MODVERSIONS=y
Он не обязателен для загрузки модулей в принципе, но позволяет обеспечивать совместимость символов между версиями ядра и модулей (versioned symbols), что уменьшает риск получить ошибку при
#kernel #utils
Когда ядро обнаруживает необходимость в тех или иных функциональных возможностях, ещё не загруженных в память, оно вызывает helper
kmod (через механизмы uevent/hotplug). Kmod в свою очередь запускает утилиту modprobe, а уже modprobe вызывает insmod. Посмотреть можно так:$ systemctl status kmod
Утилиты
modprobe, insmod, modinfo и другие - это просто ссылки на /bin/kmod, они ничем не отличаются как отдельные бинарники. Всем заправляет один kmod, можно вызвать /bin/kmod напрямую и он сам определит, какую "утилиту" вы имели в виду.kmod и modprobe запускаются ядром автоматически, когда требуется загрузка определённого модуля. modprobe принимает на вход имя модуля или его alias.У модулей есть alias. Например, модуль
qrtr в выводе lsmod имеет такое имя. Его alias можно посмотреть в /lib/modules/*/modules.alias. Например: net-pf-42 -> qrtrЭто значит, что
modprobe можно передавать один и тот же модуль:$ modinfo qrtr
$ modprobe net-pf-42
(Примечание:
modinfo ищет только по реальному имени файла модуля, alias понимает modprobe)Затем
modprobe просматривает /lib/modules/*/modules.dep. Этот файл описывает модули, которые требуют загрузки других модулей перед своей загрузкой - то есть зависимости. Файл создается командой:$ depmod -a
Например, модуль
qrtr-mhi.ko запрашивает загрузку qrtr.ko и mhi.ko:kernel/net/qrtr/qrtr-mhi.ko: kernel/net/qrtr/qrtr.ko kernel/drivers/bus/mhi/host/mhi.ko
Затем
modprobe вызывает insmod (указывая путь из /lib/modules/*/), который загружает сначала зависимые модули, затем нужный модуль.insmod довольно "глуп" в отношении нахождения модулей, поэтому принимает абсолютные пути и нужный порядок вручную:$ insmod /lib/modules/2.6.11/kernel/fs/fat/fat.ko
$ insmod /lib/modules/2.6.11/kernel/fs/msdos/msdos.ko
modprobe более "умный" - он ориентируется по modules.dep, поэтому достаточно передать имя:$ modprobe msdos
Для загрузки модулей, собранных вне дерева ядра, полезно иметь включённый CONFIG_MODVERSIONS=y
Он не обязателен для загрузки модулей в принципе, но позволяет обеспечивать совместимость символов между версиями ядра и модулей (versioned symbols), что уменьшает риск получить ошибку при
insmod.#kernel #utils
Локализация
Набор переменных, который определяет язык приложений, консоли и другие локальные параметры системы.
Например, разбор en_US.UTF8:
en - язык.
US - региональная настройка.
UTF8 - кодировка.
Язык - тут думаю понятно.
Региональная настройка - это определенные параметры, такие как формат даты и времени, валюта,
числовой формат и другие локальные настройки, которые могут отличаться от других стран.
Кодировка - определяет соответствие между символами и числовыми значениями, которые используются
компьютером для их хранения и обработки.
Получить все доступные локализации:
Чтобы изменить локализацию можно задать:
Если при выводе выдаются ошибки типа: Cannot set LC_CTYPE to default locale: No such file or directory
То скорее всего задается локализация, которая не была сгенерирована. Для этого нужно подправить
Затем выполнить:
Появится новая локализация:
Можно запустить приложение с другим языком, например:
LANG - Локализация, установленная в этой переменной используется в качестве значения для всех остальных LC_* переменных.
LANGUAGE - Запасные локализации (нужно для вывода сообщений на разных языках).
#shell #utils
Набор переменных, который определяет язык приложений, консоли и другие локальные параметры системы.
Например, разбор en_US.UTF8:
en - язык.
US - региональная настройка.
UTF8 - кодировка.
Язык - тут думаю понятно.
Региональная настройка - это определенные параметры, такие как формат даты и времени, валюта,
числовой формат и другие локальные настройки, которые могут отличаться от других стран.
Кодировка - определяет соответствие между символами и числовыми значениями, которые используются
компьютером для их хранения и обработки.
Получить все доступные локализации:
$ locale -a
Чтобы изменить локализацию можно задать:
$ export LANG=en_US.UTF8
Если при выводе выдаются ошибки типа: Cannot set LC_CTYPE to default locale: No such file or directory
То скорее всего задается локализация, которая не была сгенерирована. Для этого нужно подправить
/etc/locale.gen файл. В этом файле нужно раскомментировать нужную локализацию, например en_US.UTF-8 UTF-8Затем выполнить:
$ locale-gen
Появится новая локализация:
$ locale -a
Можно запустить приложение с другим языком, например:
$ LANGUAGE=zh_TW vim
LANG - Локализация, установленная в этой переменной используется в качестве значения для всех остальных LC_* переменных.
LANGUAGE - Запасные локализации (нужно для вывода сообщений на разных языках).
#shell #utils