bash


Замер времени выполенения команды

Как раз сейчас понадобилось замерить время работы скрипта... Поискал тут, не нашел :( Зато гугль помог. А все оказалось не просто, а очень просто:

$ time for i in {1..100000} ; do echo $i $>/dev/null ; done
 
real	0m3.680s
user	0m2.964s
sys	0m0.692s

ЗЫЖ В sh этого нету.

3
Ваша оценка: Ничего Рейтинг: 3 (2 голоса)
Vaulter аватар

Распаковка архивов

###   Handy Extract Program
 
extract () {
    if [ -f $1 ] ; then
        case $1 in
            *.tar.bz2) tar xvjf $1   ;;
            *.tar.gz)  tar xvzf $1   ;;
            *.bz2)     bunzip2 $1    ;;
            *.rar)     unrar x $1    ;;
            *.gz)      gunzip $1     ;;
            *.tar)     tar xvf $1    ;;
            *.tbz2)    tar xvjf $1   ;;
            *.tgz)     tar xvzf $1   ;;
            *.zip)     unzip $1      ;;
            *.Z)       uncompress $1 ;;
            *.7z)      7z x $1       ;;
            *)         echo "'$1' cannot be extracted via >extract<" ;;
        esac
    else
        echo "'$1' is not a valid file"
    fi
}

Уже не помню где нашел, не мое :)

Поместить в ~/.bashrc или profile

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

выход из bash без сохранения истории

перевод типса из shell-fu.

самый простой вариант это SIGKILL своего шелла:

 kill -9 $$

вариант по-нежнее:

 unset SAVEFILE; unset HISTFILE;
0
Ваша оценка: Ничего

Из TIF в PDF и сбор всех PDF в один

Собрал небольшой скриптик для перевода из tif в pdf, а потом сбор всех pdf файлов в один.

Использовал:
http://www.opennet.ru/docs/RUS/bash/bash-1.html
http://flerant.in.nnov.ru/blog/1188235.html
http://www.togaware.com/linux/survivor/Convert_MS_Word.html
http://www.linuxgraphics.ru/forum/viewthread.php?thread_id=566#post_5215

UPD: new version

Линки в тему:

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

Просмотр ника по ICQ UID на bash

#!/bin/bash
curl http://people.icq.com/people/about_me.php?uin=$1 2> /dev/null | \
    grep "<div class=\"h5-2-new\">" | awk -F ">" '{print $2}'  |\
        iconv -f cp1251 -t utf-8 | awk -F "<" '{print $1}'

UPD:

#!/bin/sh
 
if [ -z "$1" ]; then
    echo Usage: $(basename $0) ICQ-UIN
    exit 1
fi  
 
curl http://people.icq.com/people/about_me.php?uin=$1 2> /dev/null | \
    sed -ne 's,.*<div class="h5-2-new">\([^<]*\)</div>.*,\1,p' | iconv -f cp1251 -t utf-8
0
Ваша оценка: Ничего
ramok аватар

Удобный алиас в zsh для copy/paste примеров из советов

На linsovet.com многие советы содержат примеры запуска команд из командной строки в формате в подобном формате

$ echo команда 1
$ echo команда 2

Этот формат неудобен если вы хотите скопировать сразу несколько команд и скопировать прямо в терминал. Если добавить в ~/.zshrc алиас

alias \$=''

то эта проблема будет решена. Если команда начинается с $, то он будет автоматически убран

Идея взята отсюда

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

Установка свежего Chromium

Многим из нас хорошо известен браузер Chromium (да-да, тот самый, основа Google Chrome), который на данный момент очень активно разрабатывается, да так, что свежие сборки выходят буквально каждые пару часов. Он все еще довольно нестабилен, особенно на сайтах со сложным содержимым, однако его с успехом можно использовать в качестве быстрого просмотрщика ссылок. ПPредставленный здесь скрипт поможет вам установить Chromium на свою Linux-машину и поддерживать версию этого браузера в актуальном состоянии.

Создайте скрипт, обозвав, например, update.sh. Запустите. При следующих запусках будет проверяться локальная версия и свежая сборка, и если таковая существует - локальная версия будет обновлена.

Добавьте в свой PATH=$HOME/bin:$PATH (если еще нет)

5
Ваша оценка: Ничего Рейтинг: 5 (3 голоса)

Пишем альтернативный поиск по истории переписки в Pidgin

Итак, для начала скажу что я меньше месяца в линуксе, и естественно, пока что ламер. Поэтому предоставляю не столько код, сколько идею.
Многие мои знакомые (да и я сам) недовольны странно реализованным способом поиска в истории по ключевым словам. Хочется чего-то более удобного.
Этот элементарнейший bash-скрипт позволяет нам автоматически проискать всю историю переписки с определенным человеком, сгенерировать на ее основе HTML документ содержащий строки с искомым ключевым словом и открыть его для просмотра. Я не хотел публиковать этот позор, но друзья сказали, что это очень удобная штука...
Пользуйтесь, делайте что хотите, изменяйте, улучшайте, доведите до ума, делайте из фекалий кондитерское изделие. :) Критика приветствуется, улучшения КРАЙНЕ приветствуются. Особая просьба пофиксить костыль в коде, он заметен. А все от незнания.

4.5
Ваша оценка: Ничего Рейтинг: 4.5 (2 голоса)

Bash: Добавляем дату и время в историю команд

Данная функция будет очень полезна, если сервер администрирует несколько человек, или даже в случае если вы единственный администратор сервера, вам будет полезна вспомнить когда та или иная команды была выполенены.

Отредактируйте ~/.bashrc добавив внизу такую строку:

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

Маленький однострочник на баше для получения погоды в консольку (на 3 дня)

wget -q -O - http://wap.gismeteo.ru/26702.wml |\
 sed -e '/^<br\/>.*\|<\/\?p>\|<a href.*\|(c).*\|.*wapstart.ru.*\|.*wml.*\|.*?xml.*\|<\/card>/d;s/^.*title="\(.*\)">/\1\n\n/;s/<br\/>//g;s/<img src=.*alt="\(.*\)"\/> <b>\(.*\) .*<\/b>/\1 - \2/g'

Чтобы получить погоду на свой город, идем по линку http://wap.gismeteo.ru/, жмем линк "Другие города", дальше находим свой город и смотрим его адрес, для Калининграда это http://wap.gismeteo.ru/wap2/towns/26702.wap2, вот тут нам нужно число, которое стоит перед ".wap2". Запоминаем его и вписываем в скрипт перед ".wml". Все :)

ЗЫЖ Знаю, что скрипт можно написать и лучше, но писал его "на коленке" за минут 15, главное чтобы работало. Да и не для себя делал, а по просьбе одного знакомого, как простенький пример.

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

Различные стили автодополнения в командной строке vim

Для тех кто хочет в командной строке vim автодополнение файлов как в bash заносим в ~/.vimrc

set wildmode=longest,list

При нажатии Tab имя файла дополнится до наибольшего совпадения и выведет список альтернатив.

Мне больше нравится автодополнение как в моем zsh

set wildmode=list:longest,full

подробности :help wildmode

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

timeout: запуск команды с таймаутом по истечении которого команде посылается сигнал

интересный и очень полезный скрипт нашел в документации к башу
запуск команды с таймаутом. по истечении которого команде посылается сигнал. например -9

$0 [-signal] [timeout] [:interval] [+delay] [--] <command>
 
SIG=-TERM       # default signal sent to the process when the timer expires
timeout=60      # default timeout
interval=15     # default interval between checks if the process is still alive
delay=2         # default delay between posting the given signal and
                # destroying the process (kill -KILL)
0
Ваша оценка: Ничего

редирект STDERR в пайп

В баше на первый взгляд нельзя отправить поток STDERR через пайп в другую программу. По крайней мере нельзя просто добавить '2' к операторам '|' и '>()'.

Но на самом деле это делается очень просто:

$ ./command 2>&1 >log_normal | tee log_errors | mail

Дело в том, что операторы редиректа обрабатываются с конца команды. Таким образом, в данном случае сначала stdout будет перенаправлен в файл log_normal, затем stderr будет скопирован в stdout.

Команда

$ ./command >log_normal 2>&1 | tee log_errors | mail

Запишет в log_normal сообщения и из stdout и из stderr, а в log_errors не попадет ничего.

Подобная запись может быть полезна при запуске скриптов из крона, когда лог хочется сохранить в файле, а ошибки - и сохранить в файл, и получить по почте.

PS
Подробнее здесь

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

Использование списка аргументов в bash и zsh в интерактивном режиме

Как то был совет "Вставка последнего аргумента предыдущей команды в bash и zsh." который показывает как более эффективно работать в командной строке.
Но он не поможет если вам нужен не один аргумент, а несколько. В этом совете представлен пример работы когда многим командам нужно указывать как параметр имена нескольких файлов.
Для этого используется механизм передачи параметров, который позволяет ссылаться на параметры с помощью переменно $@.

Задача: создать два скрипта, дать им права и добавить их в cvs репозиторий.

port-check - чекаем порты без проблем или скрипт для проверки доступности портов

Нам, админам, довольно часто, точнее постоянно, приходится мониторить различные ресурсы своей сети и не редко удаленной. Если нет возможности поставить на хост средства мониторинга, то приходится проверить по портам. Раньше я это делал так:

$ netcat -w3 -z host port && echo OK

А что если нужно проверять несколько хостов и/или портов? Вот для этих целей и был написан скрипт.

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

Алиас для показа самых больших файлов и директорий в текущей директории

"Резиновый винчестер это не игрушка, это мечта" Ж:-)
Как всегда не хватает места, и при поиске чего бы такого удалить может помочь алиас который показывает файлы и директории которые занимают больше мегабайта.

для bash, заносим в ~/.bashrc

alias dud="(shopt -s dotglob;du -ks * | sort -nr | sed -e 's/^\([0-9]\{1,\}\)[0-9]\{6\}[^0-9]/\1G\t/;t;s/^\([0-9]\{1,\}\)[0-9]\{3\}[^0-9]/\1M\t/;t;d')"
#или альтернативный вариант с perl
alias dud="(shopt -s dotglob;du -ks * | sort -nr | perl -pe 's/^(\d+)\d{6}[^\d]/\$1G\t/ || s/^(\d+)\d{3}[^\d]/\$1M\t/ || s/.*\n//')"

для zsh, заносим в ~/.zshrc

alias dud="(setopt globdots;du -ks * | sort -nr | sed -e 's/^\([0-9]\{1,\}\)[0-9]\{6\}[^0-9]/\1G\t/;t;s/^\([0-9]\{1,\}\)[0-9]\{3\}[^0-9]/\1M\t/;t;d')"
#или альтернативный вариант с perl
alias dud="(setopt globdots;du -ks * | sort -nr | perl -pe 's/^(\d+)\d{6}[^\d]/\$1G\t/ || s/^(\d+)\d{3}[^\d]/\$1M\t/ || s/.*\n//')"

Цифры примерные, так как считается что в мегабайте не 1024 байт, а 1000.

Пример использования:

3
Ваша оценка: Ничего Рейтинг: 3 (4 голоса)

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

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

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

Ссылка: 10 трюков в командной строке, о которых вы не знали. Честное слово.

10 трюков в командной строке, о которых вы не знали. Честное слово.

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

via nexus

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

Как съесть один пирог дважды: bash, tee, process substitution

Задача проста: обработать один стандартный ввод с помощью двух (или более) фильтров.

Тривиальное решение: сохранить ввод в файл и потом его дважды обработать.

$ some_cmd > tmp_file; filtr1 < tmp_file; filtr2 < tmp_file; rm tmp_file

Существует однако полезная программа tee, которая умеет свой стандартный ввод записывать в много разных мест. Вот бы взять да и отослать результат не в разные файлы, а послать на вход разным процессам! Если в bash разрешена такая штука как process substitution, то это вполне возможно.

Пример: выведем список юзеров, у которых логин-шелл установлен в /bin/bash, а также число таких юзеров.

$ grep /bin/bash /etc/passwd | tee >(wc -l)

Здесь мы составили нужный список с помощью grep, размножили его с помощью tee и одну из копий подали на вход команде wc -l, которая сосчитает количество строк. Пример, конечно, игрушечный, но общая идея должна быть ясна :)

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