Полезное применение различных утилит Linux
2023-10-21T15:40:00+05:00
linux# systemd
# Редактирование unit systemd через nvim/vim
Вводите с добавлением опции -E
sudo -E systemctl edit reflector.timer
# hexedit, hexdump и xxd
Сдампить все шестнадцатеричные числа и вывести в терминал убрав все точкии найти одинаковые паттерны байтов
Пример:
$ hexdump bea.exe -C | sed 's/\.//g' | grep 'AB AA AA 3F'
001db390 00 00 22 43 00 00 16 44 ab aa aa 3f 89 88 08 3b |"CD?;|
001e4af0 ab aa aa 3f a0 8a 61 00 70 f6 52 00 a0 d0 52 00 |?apRR|
# Сравнивание и редактирование шестнадцатеричных (hex) чисел с двух разных бинарных файла
Конвертируем бинарники в читабельный формат, записывая в выходной файл которые будут удобны в сравнивании
xxd bea_mod.exe > bea_mod.hex
xxd bea.exe > bea.hex
Сравниваем с помощью neovim используя опцию -d (diff) и заодно редактируем тот который будет использоваться
nvim -d bea.hex bea_mod.hex
Как только сохранили .hex файл конвертируем его обратно в .exe используя в xxd опцию -r
xxd -r TMNT2.hex TMNT2.exe
DONE!
# Только просмотр сравнивая оба
diff <(xxd [файл]) <(xxd [другой_файл]) > diff.txt
less diff.txt
# (Простой вид) Конвертирование 2-х бинарников в .txt вместе сравнивая и редактируя их
Конвертируем в непрерывный формат вывода hex кода и меняем расширение на .txt
xxd -p bea.exe > bea.txt
xxd -p bea_mod.exe > bea_mod.txt
Редактором nvim сравниваем оба конвертированных файла
nvim -d bea.txt bea_mod.txt
Проводим манипуляции только с одним файлом (bea.txt)
После редактирование и его сохранение, обратно преобразуем этот модифицируемый текстовый файл в исполняемый .exe
xxd -r -p bea.txt bea.exe
# Как находить и редактировать по offset'у?
Используя hexdump (только показать)
hexdump TMNT2.exe -C | grep '00246450'
# vim/neovim
Таймкод: 3:03-5:20
# Как добавить в конце всех строк обратную косую черту
y desktop-file-utils
faudio
fontconfig
freetype2
gcc-libs
gettext
glu
lcms2
lib32-faudio
lib32-fontconfig
lib32-freetype2
lib32-gcc-libs
.....
Данная команда
:%norm A \
y desktop-file-utils \
faudio \
fontconfig \
freetype2 \
gcc-libs \
gettext \
glu \
lcms2 \
lib32-faudio \
lib32-fontconfig \
lib32-freetype2 \
.....
# Как слить строки блоком сниз в одну строку?
Команда
:%j
# wget
Скачивание файла и замена данного файла на существующий в root каталоге
Например эта целая строка
sudo wget -O /etc/makepkg.conf https://gitlab.com/anzix/dotfiles/-/raw/master/makepkg.conf
# sed
# Как при использовании sed не редактируя строку закомментировать её
На примере убрав водяной знак в конфиге dgvoodoo.conf
sed -i '/^dgVoodooWatermark.*/ s/./;&/' dgVoodoo.conf
Раскомментирование
sed -i '/<pattern>/s/^#//g' file
Комментирование
sed -i "/<pattern>/s/^/#/g" file
# Пример
sed -i "/^#en_US.UTF-8 UTF-8/s/^#//g" /etc/locale.gen # раскомментировать
sed -i "/^en_US.UTF-8 UTF-8/s/^/#/g" /etc/locale.gen # закомментировать
Вставить строку рядом с другой
sed -i "/^PATTERN/s/WORD/WORD ADDED_WORD/" FILE
# Пример
sed -i "/^HOOKS=(.*)/s/udev/udev resume/" /etc/mkinitcpio.conf
Заменить целую строку если был найден паттерн
sed -i "/^PATTERN/c\REPLACEMENT" FILE
# Пример
sed -i "/^GRUB_DEFAULT=0/c\GRUB_DEFAULT=saved" /etc/default/grub
# Как с при использовании sed заменить значение строки с пробелами но не ломая оформление этой строки
На примере данной строки
Filtering = appdriven
Вот так это выглядит
sed -i '/^Filtering/s/appdriven/trilinear/' dgVoodoo.conf
# Разное
# Список пакетов в одну большую строку
packages/base | xargs
# Список пакетов в колонку
packages/base | column -t