Архивация в несколько потоков
Понадобилось по работе делать снапшоты несколько-GB-тных логов и нетлистов прогонов синтеза под ПЛИС, есть несоклько архиваторов использующих многопоточность/многоядерность, попробовал pbzip2, установим:
sudo yum install -y pbzip2.x86_64
Сама строка из мейкфайла:
tar -cpS syn/out/* syn/log/*.rpt $(LOG) | pbzip2 -7 --compress --force --read -m2000 -p16 > ~/work/$(shell date +%Y%m%d%H%M%S)-$(FPGA_TARGET)-$(shell git rev-parse --abbrev-ref HEAD).tar.bz2
тут делаем tar’ом из нескольких файлов один и передаем в pbzip2, конечный файл называем текущей датой, именем проекта и текущей веткой гита, подробнее про опции pbzip2:
- 7 - степень компрессии 1..9(лучше,медленне), по факту - размер блока 7 = 700 КБ
- force - перезаписать если файл уже существует
- read - означает зачитать входной файл в ОЗУ и там разбить по процессорам
- m2000 - сколько оперативки в МБ использовать. 2ГБ - это практический максимум
- p16 - принудительное задание сколько ядер юзать
Скриншот из командной строки линукса
Установка зависимостей:
sudo yum install -y xorg-x11-apps ImageMagick
для выбранного окна (запустить команду, затем выбрать нужное окно и кликнуть внутри него мышкой):
xwd -frame -screen > screenshot.xwd && convert screenshot.xwd -type TrueColor screenshot.png
для всего экрана:
xwd -nobdrs -screen > screenshot.xwd && convert screenshot.xwd -type TrueColor screenshot.png
Скачка аудиодорожки с ютьюб
Иногда попадаются интерсные музыкальные сборники без визуального ряда, чтобы отделить зёрна от плевел используем хорошо зарекомендовавший себя youtube-dl:
$ sudo yum install -y youtube-dl.noarch
$ youtube-dl --extract-audio https://www.youtube.com/watch?v=I4rUe-qlWpI
[ffmpeg] Destination: Relaxing Jazz music for work in office - 2015-I4rUe-qlWpI.opus
Изменение ID юзера
usermod -u newID "user"
groupmod -g newID "group"
find / -user oldID -exec chown newID {} \\;
find / -group oldID -exec chgrp newID {} \\;
cron
Для запуска скрипта по факту перезагрузки используем конструкцию @reboot в /etc/crontab:
@reboot sh /path/to/your_app
Либо, если надо вставить задержку запуска 15 секунд:
@reboot /bin/sleep 15; sh /path/to/your_app
Однострочники
Узнать свой внешний IP-адрес
curl ipinfo.io/ip
Найти файлы больше 2Гб
find /home/idoka/Videos -type f -size +2G -exec ls -sh {} \\;
Запуск GUI-приложений из CLI
Добавить в конец командной строки, чтобы GUI-приложуха не мусорила логом в консоль:
./super-gui-app >& /dev/null
Удалить все пустые *.log-файлы из /var/www:
find /var/www -name '*.log' -exec /bin/sh -c '> "{}"' \\;
Число совпадений в верилог-файлах
Количество блоков с асинхронным инверсным сбросом:
grep -n negedge *.v | wc -l
Замены в исходниках
Предварительно смотрим как будут выглядеть строчки после замены:
$ cat top.v | sed 's/or negedge rst/`RST_TYPE(rst)/g' | grep RST_TYPE
always @ (posedge clk `RST_TYPE(rst)) begin
always @ (posedge clk `RST_TYPE(rst)) begin
Делаем замену типа сброса на унифицированный дефайн (FPGA/ASIC design):
$ sed -i.bak 's/(!rst)/(`RST_LEVEL(rst))/g' top.v
$ sed -i.bak 's/or negedge rst/`RST_TYPE(rst)/g' top.v
Таймштамп
UTC-время:
date -u "+%Y%m%d%H%M00"
локальное время:
date "+%Y%m%d%H%M00"