командная строка


Настройка функциональных клавиш в ZSH

Как единообразно задействовать функциональные клавиши в zsh на различных терминалах

5
Ваша оценка: Ничего Рейтинг: 5 (1 vote)
bliznezz аватар

Маленький, но очень мощный 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.

4.75
Ваша оценка: Ничего Рейтинг: 4.8 (4 голоса)
ramok аватар

Сканирование и послеобработка изображений из командной строки

Возникла необходимость отсканировать пару страничек с паспорта и отослать по почте. Задача решилась таким вот способом.

# настраиваем сканер 
$ 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
4
Ваша оценка: Ничего Рейтинг: 4 (1 vote)
ramok аватар

phpinfo() из командной строки

Я сталкиваюсь с php только как админ (ну или подправить пару строчек в чужом скрипте) и часто надо возникает необходимость проверять настройки php на сервере. Для этого я создавал файлик с таким содержимым:

<?php
    phpinfo();
?>

называл его как то info.php, забрасывал в корневой каталог какого нибуть сайта на сервере и открывал в броузере.
Это был самый очевидный путь, и он меня вполне устраивал Ж:-)

Но недавно мне подсказали более простой путь узнать эту информацию прямо в командной строке:

$ php -i
0
Ваша оценка: Ничего

Нелинейные конвейеры

Допустим вам нужно сравнить вывод двух команд с помощью diff. Обычная методика - создание временных файлов, однако это можно сделать и на лету:

$ diff <(date +%M) <(date +%T)
1c1
< 55
---
> 00:55:21
0
Ваша оценка: Ничего
ramok аватар

Коллекция форк бомб

Время от времени в сети мне попадаются различные реализации форк бомб, и вот накопилась небольшая коллекция Ж:-)
Предупреждение: не уверен? не запускай!

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 . ./_\&. ./_>_`

Присылайте другие варианты Ж:-)

0
Ваша оценка: Ничего
ramok аватар

Просмотр 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

5
Ваша оценка: Ничего Рейтинг: 5 (1 vote)

подсветка текста в консоли

Иногда хочется пропустить текст через такой фильтр, как 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 ( коментарий с пояснениями)

0
Ваша оценка: Ничего
ramok аватар

Именованный 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
0
Ваша оценка: Ничего
alexu аватар

Копирование содержимого файла в буфер обмена из командной строки

Скопировать содержимое файла в буфер обмена в Linux, не используя выделение или Ctrl-C можно несколькими способами:
1) стандартный буфер X с помощью xclip
скопировать:

$ cat file | xclip

вставить:

$ xclip -o

2) стандартный буфер X с помощью xsel
скопировать:

$ cat file | xsel

вставить:

$ xsel

утилиты xsel и xclip очень похожи, но xsel имеет больше опций (несколько буферов, возможность работать с различными дисплеями, добавление в буфер к существующей информации, и т.д. За подробностями - в man xsel

3) буфер klipper от KDE:
скопировать:

$ dcop klipper klipper setClipboardContents "$(cat file)"

вставить:

$ dcop klipper klipper getClipboardContents

добавляйте свои способы ;)

0
Ваша оценка: Ничего
ramok аватар

Редактирование сложных команда в 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

0
Ваша оценка: Ничего
ramok аватар

Определение типа файла

если вы друг нашли какой нибуть файл, и не знаете какого он типа(аудио, фильм, скрипт...), то определить тип файла поможет утилита 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)
0
Ваша оценка: Ничего
ramok аватар

Цветной вывод команд в консоли

Устали от черно серого терминала(вариант: черно зеленого Ж:-)?
Можно порадовать себя всевозможными способами в буквальном смысле разукрасить свою жизнь в консоли. Но как обычно этого может быть мало, и как всегда найдется человек доведший идею до мараз^W логического конца Ж:-)

Этот набор врапперов над более чем 80 самыми расспространенными программами(df, ping, gcc... так же наиболее часто используемыми файлами /etc/fstab, /var/log/messages...) который разукрашивает вывод этих команд в косоли. Читаем дальше...

5
Ваша оценка: Ничего Рейтинг: 5 (1 vote)
ramok аватар

Сбор статистики о используемых скриптовых языках

Абсолютно безполезный скрипт для сбора статистики о наиболее часто используемых скриптовых языках. Можно использовать эту информацию в холиворах или как аргумент в тяжелых раздумиях какой скпиптовый язык изучать Ж:-)
Вот некоторая статистика собранная на некоторых доступных мне машинах: ... Абсолютно безполезный скрипт для сбора статистики о наиболее часто используемых скриптовых языках. Можно использовать эту информацию в холиворах или как аргумент в тяжелых раздумиях какой скпиптовый язык изучать Ж:-)
Вот некоторая статистика собранная на некоторых доступных мне машинах:

[=Unifont]
FreeBSD gate  OpenBSD(webserver) Cygwin (home)     Debian(workstation) Debian(webserver) FreeBSD(inner server)
0
Ваша оценка: Ничего
ramok аватар

Скрипт для временного поста файлов в интернет

Часто бывает что нужно временно выложить в интернет какой нибудь файл и дать ссылку для скачивания. Этот скрипт облегчает заливку файлов на сервер по 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'
0
Ваша оценка: Ничего
ramok аватар

Как сравнить 2 каталога

$ diff -qr dir1 dir2

0
Ваша оценка: Ничего
ramok аватар

Временное приостановление консольных программ

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

0
Ваша оценка: Ничего

Как раскрасить приглашения 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
0
Ваша оценка: Ничего
ramok аватар

подсветка результатов работы grep

GNU grep имеет удобную возможность подсвечивать цветом найденный паттерн

добавте это в ~/.bashrc или ~/.zshrc

export GREP_OPTIONS='--color=auto'
#export GREP_COLOR='5;38' #мигающий
export GREP_COLOR='1;33' #ярко-желный на черном
0
Ваша оценка: Ничего
ramok аватар

быстрая отмена алиасов в bash и zsh

могут быть алиасы которые по имени совпадают с программой
например

less='~/bin/less.sh'
ls='ls -FA --color=auto'
vi=vim

но иногда надо запустить программу, а не алиас. временно отменить выполнение алиаса можно так

$ \ls
0
Ваша оценка: Ничего