Журнал Эмбеддед-Инженера

bash: советы и шпаргалки

Архивация в несколько потоков

Понадобилось по работе делать снапшоты несколько-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:

Скриншот из командной строки люникса

Установка зависимостей:

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"

 

 

 

 

 

PS: если заметка помогла Вам, поделитесь ей с друзьями или коллегами: