BSD
Архивация динамического списка файлов, с отображением прогресса
Стояла задача - в страшно разветвленной помойке директорий и файлов выцепить все файлы определенных типов и затарить их в архив /tmp/archive.tar.gz. Дополнительно хотелось наблюдать за прогрессом с прогнозом времени выполнения. Было решено средствами find, pv, gawk (только gawk, с mawk не заработало) следующим образом:
find -type f -o -name \*.c -o -name \*.h -o -name \*.xsl -print0 | xargs -0 du -bs | awk '{s+=$1;sub(/^[0-9]*\t/,"");n=$0"\0"n;printf"scan files: %d\r",++i}END{ORS="";print n|"tar --null -cT-|pv -s "s"|gzip -9> /tmp/archive.tar.gz"}'
ImageMagick, png и размер холста
При работе с изображениями в формате PNG не стоит забывать о «размере холста». В частности, утилиты из ImageMagick часто вычисляют смещение и размер, исходя именно из размера холста; чтобы этого избежать, используйте +repage.
Удаление файлов по rsync
Команда
$ rsync -a /var/empty/ --delete --include 'файл' --exclude '*' каталог-приёмникудаляет 'файл' из каталога приёмника.
Подсветка man (и всего остального) в xterm-е
В XTerm-е есть возможность полужирный, подчёркнутый, мерцающий и инверсный режим вывода отображать цветом. Это позволяет «раскрашивать» не только man или less, а вообще всю стандартную выдачу.
Утилита для urldecode/urlencode
Для преобразования URL из формата %-encoded (RFC 2396) можно использовать утилиту ascii2uni из пакета uni2ascii
Экспресс-отдача каталога по HTTP
Для того, чтобы отдать произвольный каталог по HTТP через произвольный порт в произвольной ОС, достаточно иметь установленный python.
Добавляем на картинку watermark.
Иногда бывает надо сделать на фотографии или картинке, вкладываемой в инет, так называемый "водяной знак" - небольшую полупрозрачную подпись, например с вашим ником. :) Если это единичный случай, то тут конечно же поможет gimp или что-то похожее. А если вы собираетесь выложить альбом с отпуска, а в нем 200 фото? Тут конечно же на помощь придет старый добрый imagemagick. :)
выход из bash без сохранения истории
перевод типса из shell-fu.
самый простой вариант это SIGKILL своего шелла:
kill -9 $$
вариант по-нежнее:
unset SAVEFILE; unset HISTFILE;
Настройка Fn-клавиш в Ubuntu на примере ASUS M50Vc
В этом посте хочу рассказать о том как настроить хоткеи типа Fn+F1 и т.д. на ноуте в ubuntu, но это так же справедливо для любого другого дистрибутива linux/bsd (уверен, хотя не проверял).
Persistent ZSH aliases (в bash тоже можно :)
Три уровня реальности.
Нулевой. В незапамятные времена я вынес определение aliases из .zshrc в другой файл, .zsh_aliases. Это разгрузило и без того тучный .zshrc, в котором остался только вызов
if [[ -f $ZDOTDIR/.zsh_aliases ]] { . $ZDOTDIR/.zsh_aliases; }
Первый. Теперь .zsh_aliases можно обрабатывать автоматически! Допустим, я по ходу работы придумал полезный alias. Но вот отвлекаться для редактирования .zsh_aliases не хочется. Что за беда? сделал alias с именем mkalias:
mkalias='alias | grep -v "='\''LC_ALL" | sed "s/^/alias /" > ~/.zsh_aliases'
Теперь зафиксировать сделанные в списке alias-ов изменения можно одной командой. И даже вставить её в .zlogout, чтобы управиться с задачей за 0 команд :).
Второй. А что это за "grep" такой лишний в mkalias? А это вот что. Есть несклько команд, которые я хочу запускать не в кодировке по умолчанию, а в другой. Например, man-ы хочу читать по-английски. Или GTK1-программы -- в кодировке всегда KOI8-R. Или, наоборот, stardict-gtk всегда в кодировке UTF-8. Помогает проставить LC_ALL: LC_ALL=соответств_кодировка команда, но лучше это превратить в alias. Вот у меня и заведены файлы .locale.кодировка, которые читаются из .zshrc так:
# alias some LC_ALL changes when running command for N ($ZDOTDIR/.locale.*) { T="${N##*.locale.}" for F (`cat $N`) alias "$F"="LC_ALL=$T $F" } || :
Так что строчки с '="LC_ALL' запоминать не надо, они генерируются. Отсюда и grep -v в mkalias. Более того, .zshrc и .zsh_aliases у меня на всех машинах одинаковые (и на Linux разных конфессий, и на FreeBSD разных версий). А вот .locale.* -- везде разный, т. к. на некоторых машинах по умолчанию стоит одна кодировка, на некоторых -- другая, там одни программы капризничают, тут другие.
Каким способом .zshrc и .zsh_aliases у меня на всех машинах получаются одинаковые? А это к alias-ам отношения не имеет.
unique - фильтрация дубликатов силами легендарного взломщика
искал способ убирать дубликаты строчек из файла.
привычный спобос
cat file_with_dupe | sort | uniq > distinct
не подходит, т.к. сбивает оригинальную сортировку.
помощь получил, с неожиданной стороны: легендарый взломщик паролей John The Ripper имеет в себе нужный мне функционал.
содержит утилитку unique, которая хоть и является симлинком на john, но вызывая её - получаю именно тот сортировщик:
cat file_with_dupe | ./unique distinct
к сожалению работает только в таком синтаксисе единственный параметр OUTPUT_FILE : принимает поток с stdin и отдает фильтрованный результат в файл OUTPUT_FILE
Подсветка tail -f
При просмотре логов с помошью tail -f подсвечиваем нужные слова:
tail -f /var/log/messages | perl -pe 's/(aaa|bbb)/\e[0;36;10m$&\e[0m/g'
Разбор полётов:
(aaa|bbb) - подсветка строк aaa и bbb.
\b((aaa|bbb)\b - подсветка слов aaa и bbb.
.*\b((aaa|bbb)\b.* - подсветка строчки, в которой встречаются aaa и bbb.
P.S. украденно отсюда:
http://fixunix.com/unix/83044-tail-color.html
mutt. Удаление дублирующихся писем.
По мотивам типсов:
1. вторично отправляем почту в procmail
2. Удаление писем в mutt по образцу
Воспользовавшись первым типсом перекинул все, что лежит в mbox через procmail, перефильтровав тем самым всю старую почту в соответствии с новыми правилами в .procmailrc. Процесс прошел успешно, не считая того, что каждое письмо в mbox продублировалось.
Итак, удаляем дубликаты:
1. Shift-d
2. Вводим pattern: ~=
3. Применяем: $
Настройка функциональных клавиш в ZSH
Как единообразно задействовать функциональные клавиши в zsh на различных терминалах
Как открывать ссылки из URxvt в браузере при помощи мыши?
Раньше я знал только один ответ - "выделить ссылку мышкой, открыть браузер, и вставить в адресную строку средней кнопкой". Но как всегда нашелся способ попроще ) Научить urxvt делать такие вещи так же, как и другие более "продвинутые" терминалы очень просто. Для этого нужно добавить в ~/.Xdefaults такие вот строки:
URxvt.perl-ext-common: default,matcher URxvt.urlLauncher: firefox URxvt.matcher.button: 1 URxvt.colorUL: #86a2be
Это сделает URL в терминале подчеркнутыми, выделенными голубым цветом, и левый клик на них будет открывать новые вкладки в firefox.
Vim. Перевод из шестнадатиричной в десятичную систему счисления
:echo 0xff 255
That's all (-:
Полезные советы по FreeBSD
Случайно нашел ленточку советов по FreeBSD на русском:
http://www.igosha.com/archives/category/freebsd
плюс в догонку мои URL's по FreeBSD:
http://delicious.com/pebu3op/FreeBSD
dzen + словарь
Иногда, читая man pages или какую-нибудь документацию в txt, html или в в .pdf наталкиваемся на иностранное слово отсутствующее в нашем словарном запасе.
Что делаем:
- Выделям незнакомое слово мышкой
- Открываем программу-словарик
- Делаем paste и получаем перевод
Слишком много телодвижений для столь простой задачки. Что можно придумать:
- Выделям незнакомое слово мышкой
- Нажимаем хоткей и на экране появляется окошко с переводом до следующего нажатия тогоже хоткея
Решение:
- Инсталируем dzen и словарики: sdcv или dict
- Пишем скрипт:
#!/bin/sh PID=$(ps wwax |grep "dzen2.*$WHEREX.*$WHEREY.*$WIDTH.*$FG" |grep -v grep |awk '{print $1}') if [ ${#PID} -ne 0 ] then kill -9 $PID else xsel -p | xargs sdcv -n | sed '/^$/d' | \
читалка заголовков писем на googlemail
Читалка заголовков мэйлов с googlemail:
#!/bin/sh URL='https://mail.google.com/mail/feed/atom' curl --silent -u name@googlemail.com:passwd $URL | \ grep -v Gmail | \ while read line do echo $line | grep "<title>" 1>/dev/null \ && TITLE=`echo $line | sed -e 's/<title>//' -e 's/<\/title>//'`;\ echo $line | grep "<name>" 1>/dev/null \ && NAME=`echo $line | sed -e 's/<name>//' -e 's/<\/name>//'`;\ echo $line | grep "<email>" 1>/dev/null \ && EMAIL=`echo $line | sed -e 's/<email>//' -e 's/<\/email>//'` && \ echo $(echo $NAME "<"$EMAIL">" $TITLE) done
P.S. Лучшего применения чем прикрутить эту штуку на dzen не нашел :-)
xmonad + Dzen + Task List Menu
Простенькая переключалка между открытыми окнами в xmonad
- Сначала воспользуемся предыдущим советом, и сделаем поддержку wmctrl в xmonad
- Далее:
(echo "Task List"; wmctrl -l)| \ dzen2 -m -p -x $WHEREX -w $WIDTH -fg $FG -bg $BG -l 15 -fn $FONT \ -e 'button1=menuprint;button3=exit;entertitle=uncollapse;leaveslave=collapse' | \ awk '{system("wmctrl -s " $2)}'
После выполнения вышеприведенной команды в dzen статус баре появляется "Task List".
Меню открывается при наведении мышкой на "Task List".
Правая кнопка мышки убирает меню со статусбара.
Переменные WHEREX, WIDTH, FG, BG, FONT инициализировать по личным предпочтениям.
В атачменте мой скрипт, который, подвешанный на хоткей, будет работать как включатель/выключатель Task List меню.
P.S.


