командная строка
Настройка функциональных клавиш в ZSH
Как единообразно задействовать функциональные клавиши в zsh на различных терминалах
Маленький, но очень мощный date
ну наверное все знаю функционал линуксовой команды date, вывод даты в самом разном формате.
а также есть функционал вычисления дат. например сегодня у меня Thu Aug 14 16:09:28 EEST 2008
вчера:
$ date --date="yesterday" +%F $ date --date="1 days ago" +%F 2008-08-13
воскресенье через 2 недели:
$ date --date="sunday next 2 week" Sun Aug 31 01:00:00 EEST 2008
если мы скажем день недели - date будет иметь ввиду ближайший такой день (или сегодняшний)
$ date --date="friday" +%F 2008-08-15
аналогично если добавить this: this friday.
Сканирование и послеобработка изображений из командной строки
Возникла необходимость отсканировать пару страничек с паспорта и отослать по почте. Задача решилась таким вот способом.
# настраиваем сканер $ sudo apt-get install sane libsane $ rehash $ sudo sane-find-scanner -q found USB scanner (vendor=0x04a9 [Canon], product=0x220e [CanoScan], chip=LM9832/3) at libusb:004:004 $ sudo scanimage -L device `plustek:libusb:004:004' is a Canon CanoScan N1240U/LiDE30 flatbed scanner # сканируем две странички паспорта в out1.pnm и out2.pnm $ sudo xscanimage # конвертим .pnm в .jpg $ convert out1.pnm ukr-pass-1.jpg $ convert out2.pnm ukr-pass-2.jpg # проверяем что получилось $ feh ukr-pass*.jpg # поворачиваем на 180 градусов если надо. (повернуть фотографии можно и прямо в feh) $ convert -rotate 180 ukr-pass-2.jpg ukr-pass-2.jpg # сливаем два изображения в одно $ montage -adjoin -geometry 1024x768 ukr-pass-1.jpg ukr-pass-2.jpg ukr-pass.jpg # почистим за собой $ rm out1.pnm out2.pnm ukr-pass-1.jpg ukr-pass-2.jpg # отошлем сканы $ mutt -a ukr-pass.jpg
phpinfo() из командной строки
Я сталкиваюсь с php только как админ (ну или подправить пару строчек в чужом скрипте) и часто надо возникает необходимость проверять настройки php на сервере. Для этого я создавал файлик с таким содержимым:
<?php phpinfo(); ?>
называл его как то info.php, забрасывал в корневой каталог какого нибуть сайта на сервере и открывал в броузере.
Это был самый очевидный путь, и он меня вполне устраивал Ж:-)
Но недавно мне подсказали более простой путь узнать эту информацию прямо в командной строке:
$ php -iНелинейные конвейеры
Допустим вам нужно сравнить вывод двух команд с помощью diff. Обычная методика - создание временных файлов, однако это можно сделать и на лету:
$ diff <(date +%M) <(date +%T)
1c1
< 55
---
> 00:55:21Коллекция форк бомб
Время от времени в сети мне попадаются различные реализации форк бомб, и вот накопилась небольшая коллекция Ж:-)
Предупреждение: не уверен? не запускай!
1. bash
:(){ :|:&};:
2. perl
$ perl -MPOSIX -e '$pid=fork; exit if $pid; setid; fork while(1)'3. sh
создаем файлик с таким содержимым и запускаем его
#!/bin/sh $0 & $0 &
4. sh by Anonymous
$ echo '. ./_&. ./_'>_;. ./_придумал вариацию на тему
. ./_`echo . ./_\&. ./_>_`Присылайте другие варианты Ж:-)
Просмотр diff из потока в цвете
Часто приходится смотреть diff не из файла, а из потока, например сформированный командой cvs diff или svn diff.
Удобно в таком случае просматривать в цвете в vim, не записывая в файл, а прямо в потоке.
наример:
$ svn co svn://anonsvn.kde.org/home/kde/branches/KDE/3.5/kdelibs/kdecore/ $ cd kdecore $ svn diff -r 181258:183456 kglobalaccel_x11.cpp | vim -
diff покажется красиво раскрашенным Ж:-)
PS
подсветка текста в консоли
Иногда хочется пропустить текст через такой фильтр, как grep, но чтобы он только подсветил совпадения, а не вырезал строки с ними.
Можно использовать вот такую функцию, которую можно добавить в ваш ~/.bashrc или ~/.zshrc:
function hilight { ESC=`echo -e "\033"` COLORON="${ESC}[1;33m" COLOROFF="${ESC}[1;0m" if [ -z "$1" ] ; then echo "Usage: hilight 'regex' [file1 file2 ...]" 1>&2; return 1 fi REGEX="$1" shift sed -e "s/${REGEX}/${COLORON}&${COLOROFF}/g" $* }
пример использования:
$ hilight слово *UPD:
можно подобное реализовать на grep ( коментарий с пояснениями)
Именованный pipe замкнутый сам на себя
Абсолютно бесполезный пример как можно замкнуть именованный пайп сам на себя. для демонстрации на каждой итерации
добавляется пара >< что бы продемонстрировать что что-то таки происходит Ж:-)
зачем? да просто так Ж:-D
#!/bin/sh PIPE=infinity.pipe [ -p $PIPE ] && rm $PIPE mkfifo $PIPE # инициируем пересылку echo "go!" >> $PIPE & while read GO; do # все что пришло - читаем echo "$GO" # сообщаем что мы таки живы выводя то что крутится в канале sleep 1 # это можно убрать, но будет слишком быстро Ж:-) # возвращаем обратно в pipe все что пришло + пара символов # если символов больше 12 - начать сначало echo ">$GO<" | sed -e 's/.\{20\}.*/go!/' >> $PIPE done < $PIPE
Копирование содержимого файла в буфер обмена из командной строки
Скопировать содержимое файла в буфер обмена в Linux, не используя выделение или Ctrl-C можно несколькими способами:
1) стандартный буфер X с помощью xclip
скопировать:
$ cat file | xclipвставить:
$ xclip -o2) стандартный буфер X с помощью xsel
скопировать:
$ cat file | xselвставить:
$ xselутилиты xsel и xclip очень похожи, но xsel имеет больше опций (несколько буферов, возможность работать с различными дисплеями, добавление в буфер к существующей информации, и т.д. За подробностями - в man xsel
3) буфер klipper от KDE:
скопировать:
$ dcop klipper klipper setClipboardContents "$(cat file)"вставить:
$ dcop klipper klipper getClipboardContentsдобавляйте свои способы ;)
Редактирование сложных команда в bash и zsh
Часто бывает что вам необходимо редактировать сложную команду в шеле. Например написать мини скрипт, или составить список файлов которые выхотите удалить в директории с большим кол-вом файлов и где не подходят маски.
В bash в режиме emacs(установленный по умолчанию) ctrl-x ctrl-e вызодвет редактор прописанный в переменной окружения EDITOR.
В zsh вы можете добится того же эффекта добавив в ~/.zshrc
autoload -U edit-command-line zle -N edit-command-line bindkey -M emacs "^X^E" edit-command-line # для режима emacs bindkey -M vicmd v edit-command-line # для командного режима vi
Теперь в режиме emacs будет такоеже поведение как в bash.
А в командном режиме vi достаточно нажать v
Определение типа файла
если вы друг нашли какой нибуть файл, и не знаете какого он типа(аудио, фильм, скрипт...), то определить тип файла поможет утилита file
для одного файла:
$ file /bin/zsh
/bin/zsh: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV) for GNU/Linux
2.4.1, dynamically linked (uses shared libs), for GNU/Linux 2.4.1, strippedдля нескольких файлов сразу:
$ file bin/postit requiem_for_a_dream-lux_aeterna.mp3 goodye_lenin.avi
bin/postit: Bourne shell script text executable
requiem_for_a_dream-lux_aeterna.mp3: MPEG ADTS, layer III, v1, 128 kBits,
44.1 kHz, JntStereo
goodbye_lenin.avi: RIFF (little-endian) data,
AVI, 512 x 288, 25.00 fps, video:
DivX 4, audio: MPEG-1 Layer 3 (stereo, 48000 Hz)Цветной вывод команд в консоли
Устали от черно серого терминала(вариант: черно зеленого Ж:-)?
Можно порадовать себя всевозможными способами в буквальном смысле разукрасить свою жизнь в консоли. Но как обычно этого может быть мало, и как всегда найдется человек доведший идею до мараз^W логического конца Ж:-)
Этот набор врапперов над более чем 80 самыми расспространенными программами(df, ping, gcc... так же наиболее часто используемыми файлами /etc/fstab, /var/log/messages...) который разукрашивает вывод этих команд в косоли. Читаем дальше...
Сбор статистики о используемых скриптовых языках
Абсолютно безполезный скрипт для сбора статистики о наиболее часто используемых скриптовых языках. Можно использовать эту информацию в холиворах или как аргумент в тяжелых раздумиях какой скпиптовый язык изучать Ж:-)
Вот некоторая статистика собранная на некоторых доступных мне машинах: ... Абсолютно безполезный скрипт для сбора статистики о наиболее часто используемых скриптовых языках. Можно использовать эту информацию в холиворах или как аргумент в тяжелых раздумиях какой скпиптовый язык изучать Ж:-)
Вот некоторая статистика собранная на некоторых доступных мне машинах:
[=Unifont] FreeBSD gate OpenBSD(webserver) Cygwin (home) Debian(workstation) Debian(webserver) FreeBSD(inner server)
Скрипт для временного поста файлов в интернет
Часто бывает что нужно временно выложить в интернет какой нибудь файл и дать ссылку для скачивания. Этот скрипт облегчает заливку файлов на сервер по ssh и выводит урл
Пример использования:
$ postit bin/postit bin/postit.html postit 100% 370 0.4KB/s 00:00 postit.html 100% 2060 2.0KB/s 00:00 http://remote.org.ua/tmp/postit http://remote.org.ua/tmp/postit.html
#!/bin/sh # by ramok (c) 2006 idea by nexus # upload files by ssh, and show url # change your settings hire SSH_URL=user@remote.org.ua:~user/www/data/tmp/ WWW_URL=http://remote.org.ua/tmp/ # try do not touch below Ж;-)) [ -z $1 ] && printf "Usage: `basename $0` file [file..]" 1>&2 && exit 1 scp $@ $SSH_URL echo $@ | sed -e 's|[^ /]*/||g' -e 's|\([^ /]*\)[ ]*|'${WWW_URL}'\1\n|g'
Как сравнить 2 каталога
$ diff -qr dir1 dir2Временное приостановление консольных программ
Ecли консольная программа слишком быстро выводит слишком много текста и/или слишком быстро или слишком грузит систему(как например http://linsovet.com/node/7#comment-488 Ж:-) и хочется приостановить временно её выполнение, приостановить можно ctrl-s. Продолжить выполнение ctrl-q. Часто случается случайно нажать ctrl-s и создается впечатление что консоль "зависла". Это можно отколючить если вы хотите использовать эти клавиши для своих целей
$ stty -ixon
Другой способ приостановить программу ctrl-z. Этим вы приостановите процесс и забросите в фон.
Для того что бы продолжить выполнение нужно выполнить команду fg (foregroung).
Так же можно продолжить выполнение програмыы в фоне. Для этого надо выпонить команду bg (background).
Рекомендую посмотреть параметры этих команд в man вашего шела. Также обратите внимание на команды jobs, nice
Как раскрасить приглашения bash
Заносится в ~/.bashrc. При выполнении su root меняются цвета.
COLOR1="\[\033[0;36m\]" COLOR2="\[\033[0;33m\]" COLOR3="\[\033[0;38m\]" COLOR4="\[\033[0;32m\]" if [ "$UID" = 0 ]; then # I am root COLOR2="\[\033[0;31m\]" PS1="$COLOR1[$COLOR1\u$COLOR2@$COLOR1\h$COLOR2:$COLOR4\W$COLOR1]$COLOR2# $COLOR3" else PS1="$COLOR1[$COLOR1\u$COLOR2@$COLOR1\h$COLOR2:$COLOR4\W$COLOR1]$COLOR2\$ $COLOR3" fi
подсветка результатов работы grep
GNU grep имеет удобную возможность подсвечивать цветом найденный паттерн
добавте это в ~/.bashrc или ~/.zshrc
export GREP_OPTIONS='--color=auto' #export GREP_COLOR='5;38' #мигающий export GREP_COLOR='1;33' #ярко-желный на черном
быстрая отмена алиасов в bash и zsh
могут быть алиасы которые по имени совпадают с программой
например
less='~/bin/less.sh' ls='ls -FA --color=auto' vi=vim
но иногда надо запустить программу, а не алиас. временно отменить выполнение алиаса можно так
$ \ls


