Полезное применение различных утилит 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