iconv: превращаем «????????» обратно в нормальный русский текст
В старых файлах, при копировании с Windows, в логах или при парсинге данных из разных источников часто появляется классика: вместо «
Проблема кодировки. И лучший инструмент для её решения в Linux — утилита
Установка (если вдруг нет):
Основные опции:
•
•
•
•
Примеры:
1. Конвертация файла на месте
Файл text.txt в CP1251, нужно в UTF-8:
Потом можно перезаписать оригинал:
2. Через stdin/stdout (в пайплайне)
Или с curl:
3. Автоопределение кодировки + конвертация
iconv не угадывает сам, но комбинируем с file или uchardet:
4. Массовое конвертирование всех файлов в директории
____________________
если iconv ругается «
В старых файлах, при копировании с Windows, в логах или при парсинге данных из разных источников часто появляется классика: вместо «
Привет, мир» вы видите «ÐŸÑ€Ð¸Ð²ÐµÑ‚, мир» или полные кракозябры.Проблема кодировки. И лучший инструмент для её решения в Linux — утилита
iconv.iconv — часть GNU libc, конвертирует текст из одной кодировки в другую. Поддерживает сотни encoding’ов: UTF-8, CP1251, KOI8-R, ISO-8859-1, CP866 и т.д.Установка (если вдруг нет):
sudo apt install iconv
# на Debian/Ubuntu уже есть в libc6
# или просто проверьте: iconv --versionОсновные опции:
•
-f — from (исходная кодировка)•
-t — to (целевая кодировка)•
-o — файл вывода•
--list — показать все поддерживаемые кодировки (их > 1000!)Примеры:
1. Конвертация файла на месте
Файл text.txt в CP1251, нужно в UTF-8:
iconv -f CP1251 -t UTF-8 text.txt -o text_utf8.txt
Потом можно перезаписать оригинал:
iconv -f CP1251 -t UTF-8 text.txt > text.txt.tmp && mv text.txt.tmp text.txt
2. Через stdin/stdout (в пайплайне)
cat old_file.txt | iconv -f KOI8-R -t UTF-8
Или с curl:
curl -s http://old-site.ru/page | iconv -f CP1251 -t UTF-8
3. Автоопределение кодировки + конвертация
iconv не угадывает сам, но комбинируем с file или uchardet:
# Сначала узнаём кодировку
file -i old_file.txt
# или
uchardet old_file.txt
# Потом конвертируем
iconv -f $(uchardet old_file.txt) -t UTF-8 old_file.txt -o new_file.txt
4. Массовое конвертирование всех файлов в директории
for file in *.txt; do
iconv -f CP1251 -t UTF-8 "$$ file" -o " $${file%.txt}_utf8.txt"
done
____________________
если iconv ругается «
illegal input sequence» — добавьте //IGNORE или //TRANSLIT:iconv -f CP1251 -t UTF-8//TRANSLIT//IGNORE bad_file.txt
TRANSLIT — заменит неизвестные символы на похожие, IGNORE — просто пропустит.Preload — это фоновая служба, которая анализирует, какие программы вы чаще всего запускаете, и предзагружает их библиотеки (
При следующем запуске система берёт всё из RAM, а не читает с диска.
После установки (
Настройка (по желанию):
Конфиг в
После правки:
Проверяем, что работает:
.so), бинарники и зависимости в кэш страниц памяти.При следующем запуске система берёт всё из RAM, а не читает с диска.
После установки (
sudo apt install preload ) автоматически стартует как systemd-сервис.Настройка (по желанию):
Конфиг в
/etc/preload.conf. Основные параметры:
# Количество процессов для отслеживания (по умолчанию 150–200)
model.cachesize = 200
# Какие директории сканировать (добавьте свои)
map.minimum = /usr/bin:/usr/local/bin:/usr/games:/bin:/sbin:/usr/sbin
# Исключить ненужное (например, редко используемые)
exclude = /usr/bin/rare_app /usr/lib/firefox/firefox-bin
# Частота обновления модели (в секундах)
cycle = 3600После правки:
sudo systemctl restart preloadПроверяем, что работает:
# статус службы sudo systemctl status preload
# лог предзагрузок
cat /var/log/preload.log
# вручную обновить модель
sudo preload-predictЗамена стандартной команды cat
Команда
Основное отличие
Примеры использования:
1. Просмотр файла с подсветкой синтаксиса и номерами строк:
2. Сравнение файла с его версией в Git:
3. Сочетание с другими командами через pipe:
Чтобы найти определенный текст в файле и вывести результат с подсветкой синтаксиса, вы можете использовать grep совместно с bat:
Установка bat зависит от дистрибутива. Пример для Debian:
Команда
bat — это утилита командной строки, предназначенная для замены стандартной команды cat - чтение данных из файла или стандартного ввода. Основное отличие
bat от cat заключается в добавлении подсветки синтаксиса, интеграции с Git, а также в возможности отображения номеров строк и вывода в формате "paging".Примеры использования:
1. Просмотр файла с подсветкой синтаксиса и номерами строк:
bat file.txt2. Сравнение файла с его версией в Git:
bat --diff file.txt3. Сочетание с другими командами через pipe:
Чтобы найти определенный текст в файле и вывести результат с подсветкой синтаксиса, вы можете использовать grep совместно с bat:
grep -n 'search_term' file.txt | batУстановка bat зависит от дистрибутива. Пример для Debian:
sudo apt install bat
В некоторых дистрибутивах команда может быть доступна как batcat из-за конфликта имен.Разница между
CHMOD и CHOWN
Говоря простыми словами, chown определяет, кому принадлежит файл, а chmod определяет, кто что может делать этим файлом.chmod и chown работают вместе: chmod может контролировать, что разрешено владельцу и группе владельцев для данного файла или каталога, в то время как chown быстро меняет, кто в системе получает доступ к файлу.Отрезаем расширение у файла.
Стандартный способ — использовать утилиту basename, который отрезает весь путь слева, а если указать дополнительный параметр, то дополнительно отрежет справа и суффикс.
Например пишем
Получаем:
Но можно обойтись внутренними преобразованиями в bash
Получаем:
Или наоборот, отрезать имя файла и оставить только расширение:
Получаем:
Стандартный способ — использовать утилиту basename, который отрезает весь путь слева, а если указать дополнительный параметр, то дополнительно отрежет справа и суффикс.
Например пишем
file.txt и суффикс .txtbasename file.txt .txtПолучаем:
fileНо можно обойтись внутренними преобразованиями в bash
filename=file.txt; echo ${filename%.*}Получаем:
fileИли наоборот, отрезать имя файла и оставить только расширение:
filename=file.txt; echo ${filename##*.}Получаем:
txtЧтобы каждый раз не мониторить завершение какого-либо долгого процесса, к примеру, бэкапа или сборки пакетов, можно применить звуковой сигнал по его завершении.
Пример псевдокода:
•
•
Пример псевдокода:
some_long_command; echo $'\a'•
; - отделяет команды друг от друга.•
echo $'\a' - подаст звуковой сигнал.Сочетание команд find и grep
Комбинация этих команд позволяет искать файлы с помощью
Найти определенный текстовый шаблон в файлах в каталоге и его подкаталогах:
Найдите файлы, измененные в пределах временного диапазона, а затем выполните поиск внутри них:
Найти файлы с расширением .txt и затем найти в них шаблон:
Комбинация этих команд позволяет искать файлы с помощью
find, а затем искать определенное содержимое в этих файлах с помощью grep.Найти определенный текстовый шаблон в файлах в каталоге и его подкаталогах:
find /path/to/search -type f -exec grep -H "pattern" {} +Найдите файлы, измененные в пределах временного диапазона, а затем выполните поиск внутри них:
find /path/to/search -type f -mtime -7 -exec grep -H "pattern" {} +Найти файлы с расширением .txt и затем найти в них шаблон:
find /path/to/search -type f -name "*.txt" -exec grep -H "pattern" {} +Анализ логов с агрегацией и сортировкой
Условие:
Есть лог веб-сервера access.log в формате:
Пример:
Задача:
Вывести топ-5 IP, которые сделали больше всего запросов с кодом 500.
Решение:
•
• •
• •
•
•
•
•
Условие:
Есть лог веб-сервера access.log в формате:
IP - - [date] "METHOD URL HTTP/1.1" STATUS SIZEПример:
192.168.1.10 - - [01/Feb/2026:10:12:34] "GET /api/users HTTP/1.1" 200 1234Задача:
Вывести топ-5 IP, которые сделали больше всего запросов с кодом 500.
Решение:
awk '$9 == 500 {print $1}' access.log \
| sort \
| uniq -c \
| sort -nr \
| head -5•
awk '$9 == 500 {print $1}'• •
$9 — HTTP-код• •
$1 — IP-адрес•
sort — обязательная подготовка для uniq•
uniq -c — считаем количество повторений•
sort -nr — числовая сортировка по убыванию•
head -5 — топ-5Где вы окажетесь завтра, зависит от того, что вы изучаете сегодня. PostgreSQL — инструмент, который ищут компании, а грамотных специалистов по нему все еще немного.
Почему именно PostgreSQL? Потому что это не просто база данных, а сердце ваших проектов. Если вы администратор БД, разработчик, DevOps или администратор Linux, этот курс — ваш апгрейд.
Мы научим настраивать кластеры, оптимизировать производительность, разбираться с блокировками и решать задачи работы с большими объемами данных. А также живые лекции, практические задания и диплом, который признают лидеры рынка. Учитесь у практиков, которые знают, как решать реальные задачи, и получите навыки, за которые платят топовые компании.
Присоединяйтесь к курсу «PostgreSQL для администраторов баз данных и разработчиков» сейчас и начните свой путь к высокооплачиваемой карьере!
Оставить заявку: https://otus.pw/VeBi/
🎁Бонус: скидка 5% на обучение по промокодуgo_dba . Предложение действительно до 12.02
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Почему именно PostgreSQL? Потому что это не просто база данных, а сердце ваших проектов. Если вы администратор БД, разработчик, DevOps или администратор Linux, этот курс — ваш апгрейд.
Мы научим настраивать кластеры, оптимизировать производительность, разбираться с блокировками и решать задачи работы с большими объемами данных. А также живые лекции, практические задания и диплом, который признают лидеры рынка. Учитесь у практиков, которые знают, как решать реальные задачи, и получите навыки, за которые платят топовые компании.
Присоединяйтесь к курсу «PostgreSQL для администраторов баз данных и разработчиков» сейчас и начните свой путь к высокооплачиваемой карьере!
Оставить заявку: https://otus.pw/VeBi/
🎁Бонус: скидка 5% на обучение по промокоду
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Контроль активности пользователя
Чтобы мониторить действий пользователей в системе, можно использовать два приложения —
Они предоставляют отличный способ отслеживать, что делают пользователи, какие команды они запускают, сколько ресурсов они потребляют, как долго пользователи активны в системе. Еще одна замечательная особенность в том, что она дает общие ресурсы, потребляемые такими службами, как
Команды для мониторинга действий процесса:
⁃
⁃
⁃
⁃
⁃
Пакет
Чтобы мониторить действий пользователей в системе, можно использовать два приложения —
psacct или acct.Они предоставляют отличный способ отслеживать, что делают пользователи, какие команды они запускают, сколько ресурсов они потребляют, как долго пользователи активны в системе. Еще одна замечательная особенность в том, что она дает общие ресурсы, потребляемые такими службами, как
Apache, MySQL, FTP, SSH и т.д.Команды для мониторинга действий процесса:
⁃
ac — выводит статистику пользовательских входов/выходов (время подключения) в часах.⁃
lastcomm — печатает информацию о ранее выполненных командах пользователя.⁃
accton — используются для включения/выключения процесса учета.⁃
sa — суммирует информацию о ранее выполненных командах.⁃
last и lastb — показывают список последних зарегистрированных пользователей.Пакет
psacct доступен только для дистрибутивов на основе rpm (RHEL, CentOS и Fedora), а acct — для Ubuntu, Debian и Linux Mint.Получить всю информацию о компонентах компьютера можно с помощью команды
Если запустить команду без параметров, то на выходе получим огромный список в несколько сотен строк, включающий версию прошивки, установленные драйверы, поддерживаемые возможности, серийные номера, номера версий и информацию о шине.
Поэтому следует немного отфильтровать поток, запустив:
Пример вывода информации с конкретными классами:
Вывод можно преобразовать в форматы HTML, XML или JSON, к примеру:
Чтобы убрать из вывода информацию, такую как IP адреса и серийные номера, можно добавить параметр
lshwЕсли запустить команду без параметров, то на выходе получим огромный список в несколько сотен строк, включающий версию прошивки, установленные драйверы, поддерживаемые возможности, серийные номера, номера версий и информацию о шине.
Поэтому следует немного отфильтровать поток, запустив:
sudo lshw -short или sudo lshw -businfo, чтобы увидеть список классов устройств, которые дальше можно передать утилите.Пример вывода информации с конкретными классами:
sudo lshw -short -class bus -class cpu Вывод можно преобразовать в форматы HTML, XML или JSON, к примеру:
sudo lshw -html -class storage > log.html Чтобы убрать из вывода информацию, такую как IP адреса и серийные номера, можно добавить параметр
-sanitizeИзменения владельца файла или директории
В Linux каждый пользователь имеет свои собственные файлы, причем он может регламентировать возможность доступа других пользователей к ним.
С этим может помочь команда
Чтобы предоставить пользователю с именем name возможность распоряжаться файлом
Помимо изменения владельца файла, может изменяться группа его владельцев или его владелец и группа его владельцев одновременно.
В результате команды:
владельцем
В Linux каждый пользователь имеет свои собственные файлы, причем он может регламентировать возможность доступа других пользователей к ним.
С этим может помочь команда
chown.Чтобы предоставить пользователю с именем name возможность распоряжаться файлом
file.txt:chown name file.txtПомимо изменения владельца файла, может изменяться группа его владельцев или его владелец и группа его владельцев одновременно.
В результате команды:
chown name:group file.txtвладельцем
file.txt станет пользователь с именем name, а группой его владельцев — group.Создаем файл устройства
В качестве примера рассмотрим процесс создания дополнительного файла loop-устройства.
Для начала следует получить список доступных в системе файлов loop-устройств:
Далее представим, что команда ls вывела 15 файлов loop-устройств (от
где
идентификатор
вспомогательный идентификатор
В качестве примера рассмотрим процесс создания дополнительного файла loop-устройства.
Для начала следует получить список доступных в системе файлов loop-устройств:
ls -al /dev | grep loopДалее представим, что команда ls вывела 15 файлов loop-устройств (от
loop0 до loop14). Исходя из этого, следует создать файл с именем loop15:mknod -m 0777 /dev/loop15 b 7 17где
-m - флаг, задающий права доступа0777 - права доступа/dev/loop15 - название /dev файлаb - обозначение блочного устройстваидентификатор
7 - фиксирован для всех файлов loop-устройств вспомогательный идентификатор
15 - указывает на номер файла loop-устройства.Вывести размер папки
Рассмотрим, как вывести размер всей папки и размер без учета вложенных папок.
Допустим, у вас есть какая-то папка folder. Тогда команда для вывода ее размера выглядит следующим образом:
Также вы можете посмотреть общий размер только самих файлов в папке, без учета содержимого подпапок. Для этого используется опция
Рассмотрим, как вывести размер всей папки и размер без учета вложенных папок.
Допустим, у вас есть какая-то папка folder. Тогда команда для вывода ее размера выглядит следующим образом:
sudo du -sh /home/dir/to/some/folder-s – выводить только размер самой папки, без вложенных подпапок.-h – выводить информацию в привычном виде. Речь о единицах измерения (K – килобайт, M – мегабайт и т. д.).Также вы можете посмотреть общий размер только самих файлов в папке, без учета содержимого подпапок. Для этого используется опция
-S:sudo du -sSh /home/dir/to/some/folderЕсли открыть окно терминала и ввести несколько команд, а после открыть второе окно, то история команд bash во втором окне не будет содержать команд из первого. К тому же, если закрыть первый терминал, а затем второй, то история команд из первого терминала будет перезаписана вторым.
Так происходит из-за того, что история команд записывается только при закрытии терминала, а не после каждой команды. Это можно исправить.
Отредактируем файл
добавив в него строки:
Так история команд будет добавляться к старой, а не перезаписывать ее, и запись будет происходить каждый раз в момент отображения подсказки bash.
Так происходит из-за того, что история команд записывается только при закрытии терминала, а не после каждой команды. Это можно исправить.
Отредактируем файл
.bashrc добавив в него строки:
shopt -s histappendPROMPT_COMMAND='history -a'Так история команд будет добавляться к старой, а не перезаписывать ее, и запись будет происходить каждый раз в момент отображения подсказки bash.
This media is not supported in your browser
VIEW IN TELEGRAM
Устали от бесконечных миграций схемы под каждый новый атрибут в логах? Выбираете между скоростью запросов и гибкостью хранения динамических JSON?
На живом примере разберем стратегии работы с полуструктурированными данными в ClickHouse:
✅Schema-on-Read vs Schema-on-Write: Когда и какой подход выбрать для баланса скорости, гибкости и стоимости.
✅Гибридные модели и Native JSON: Практическое использование современных возможностей ClickHouse.
✅Настройка и типичные запросы: Пишем DDL и сравниваем производительность разных подходов на реальных данных.
Спикер — Никита Елисеев, Senior Data Engineer. Узнайте из первых рук, как строить эффективные решения, а не костыли.
Зарегистрируйтесь, чтобы получить работающие решения и перестать «ломать» данные под базу: регистрация
На живом примере разберем стратегии работы с полуструктурированными данными в ClickHouse:
✅Schema-on-Read vs Schema-on-Write: Когда и какой подход выбрать для баланса скорости, гибкости и стоимости.
✅Гибридные модели и Native JSON: Практическое использование современных возможностей ClickHouse.
✅Настройка и типичные запросы: Пишем DDL и сравниваем производительность разных подходов на реальных данных.
Спикер — Никита Елисеев, Senior Data Engineer. Узнайте из первых рук, как строить эффективные решения, а не костыли.
Зарегистрируйтесь, чтобы получить работающие решения и перестать «ломать» данные под базу: регистрация
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576Команда curl
Запрос страницы
Команда напечатает исходный код
Скачивание файла
Получение заголовка
Если вы хотите посмотреть, какие заголовки отдает сервер, то можно использовать опцию
Измерение продолжительности соединения
Можно использовать опцию
curl утилита командной строки для передачи данных с или на сервер. С помощью curl вы можете загружать или выгружать данные, используя один из поддерживаемых протоколов, включая HTTP, HTTPS, SCP, SFTP и FTP Запрос страницы
curl google.comКоманда напечатает исходный код
google.com в окне вашего терминала.Скачивание файла
curl -O https://domain.com/testzip.tar.gzПолучение заголовка
HTTPЕсли вы хотите посмотреть, какие заголовки отдает сервер, то можно использовать опцию
-I. Она позволяют получить заголовок без тела документа.curl -I https://www.google.comИзмерение продолжительности соединения
Можно использовать опцию
-w для отображения информации в stdout после завершения передачи. Узнаем общее время, которое потребовалось для успешного выполнения запроса:curl -w "%{time_total}\n" -o /dev/null -s www.test.com