Архивация в несколько потоков
Понадобилось по работе делать снапшоты несколько-GB-тных логов и нетлистов прогонов синтеза под ПЛИС, есть несоклько архиваторов использующих многопоточность/многоядерность, попробовал pbzip2, установим:
1 | sudo yum install -y pbzip2.x86_64 |
Сама строка из мейкфайла:
1 | 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 — принудительное задание сколько ядер юзать
Скриншот из командной строки люникса
Установка зависимостей:
1 | sudo yum install -y xorg-x11-apps ImageMagick |
для выбранного окна (запустить команду, затем выбрать нужное окно и кликнуть внутри него мышкой):
1 | xwd -frame -screen > screenshot.xwd && convert screenshot.xwd -type TrueColor screenshot.png |
для всего экрана:
1 | xwd -nobdrs -screen > screenshot.xwd && convert screenshot.xwd -type TrueColor screenshot.png |
Скачка аудиодорожки с ютьюб
Иногда попадаются интерсные музыкальные сборники без визуального ряда, чтобы отделить зёрна от плевел используем хорошо зарекомендовавший себя youtube-dl:
1 2 3 | $ 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 юзера
1 2 3 4 | usermod -u newID "user" groupmod -g newID "group" find / -user oldID -exec chown newID {} \; find / -group oldID -exec chgrp newID {} \; |
cron
Для запуска скрипта по факту перезагрузки используем конструкцию @reboot в /etc/crontab:
1 | @reboot sh /path/to/your_app |
Либо, если надо вставить задержку запуска 15 секунд:
1 | @reboot /bin/sleep 15; sh /path/to/your_app |
Однострочники
Узнать свой внешний IP-адрес
1 | curl ipinfo.io/ip |
Найти файлы больше 2Гб
1 | find /home/idoka/Videos -type f -size +2G -exec ls -sh {} \; |
Запуск GUI-приложений из CLI
Добавить в конец командной строки, чтобы GUI-приложуха не мусорила логом в консоль:
1 | ./super-gui-app >& /dev/null |
Удалить все пустые *.log-файлы из /var/www:
1 | find /var/www -name '*.log' -exec /bin/sh -c '> "{}"' \; |
Число совпадений в верилог-файлах
Количество блоков с асинхронным инверсным сбросом:
1 | grep -n negedge *.v | wc -l |
Замены в исходниках
Предварительно смотрим как будут выглядеть строчки после замены:
1 2 3 | $ 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):
1 2 | $ 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-время:
1 | date -u "+%Y%m%d%H%M00" |
локальное время:
1 | date "+%Y%m%d%H%M00" |