Архив рубрики «unix»

vim: внешние фильтры

29.04.2010

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

Выполнение внешней команды на диапазоне:

:{диапазон} ! {команда}

При этом на STDIN команды подается содержимое диапазона, а затем диапазон заменяется выводом STDOUT команды.

Несколько примеров.

Форматирование всего исходного текста на perl с помощью perltidy:

:% ! perltidy -es=4 -t -st

Отфильтровать с помощью команды grep все строки, содержащие символ "#" из строк 14-24:

:14,24 ! grep -v "\#"

vim: сортировка

20.04.2010

Сортировать в vim очень просто:

:{диапазон}sort

Диапазон подставится автоматически, если в визуальном режиме (V) выделить блок, а затем перейти в командный режим (:):

:'<,'>

Или для сортировки всего файла:

:%sort

Сортировка в обратном порядке:

:%sort!

Сортировка в прямом порядке, удаляя все дубликаты:

:%sort -u

Также для сортировки можно использовать внешние утилиты, например стандартный юниксовый sort:

:%!sort --numeric-sort --reverse

Ну и как обычно, читаем маны:

:help :sort

firefox: оптимизация внутренних баз данных sqlite

26.08.2009
$ find .mozilla/firefox -type f -name "*.sqlite" -exec time sqlite3 \{\} "VACUUM" ";"

via

linux: как узнать (проверить) key fingerprint?

08.06.2009

Узнать fingerprint ключа можно при помощи команды ssh-keygen:

# ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key
2048 e2:02:50:2b:d8:1f:ce:d4:18:07:02:7b:22:90:44:25 /etc/ssh/ssh_host_rsa_key.pub (RSA)

По-умолчанию команда ищет публичный ключ и печатает для него fingerprint.

tar: Просмотр содержимого архива (tar.gz, tgz, tar.bzip2)

05.12.2008

Для вывода оглавления tar-архива используется команда -t:

~$ tar -tvf archive.tar
-rw-rw-rw-  0 username  groupname 45523421 Dec  5 16:17 file1.txt
-rw-r--r--  0 username  groupname 13234112 Dec  5 16:17 file2.txt
-rw-r--r--  0 username  groupname 75323624 Dec  5 16:17 file3.txt

Для tar.gz (tgz; tar+gzip):

~$ tar -ztvf archive.tar.gz
...

Для tar.bz2 (tar+bzip2):

~$ tar -jtvf archive.tar.bz2
...

Использованные команды:
-t – печать содержимого архива на stdout
-v - подробный вывод, аналог ключа -l утилиты ls. Без этой команды будет выведен краткий спискок файлов без размеров и прав.
-f имя_файла - использовать указанный файл в качестве архива, иначе читать с ленты
-zgzip-фильтр. В некоторых реализациях использовать необязательно.
-jbzip2-фильтр. В некоторых реализациях использовать необязательно.

Ubuntu: x-term в UTF-8, соединение с удаленным хостом в KOI8-R

27.11.2008

Дано: X-терминал в Ubuntu настроен на работу в локали ru_RU.UTF-8. Удаленный сервер может адекватно работать только с кодировкой ru_RU.KOI8-R. Что делать?

Решение: перекодировать на лету
Для этого удобно использовать утилиту luit, входящую в дистрибутив и устанавливаемую по умолчанию в составе пакета x11-utils.

$ LANG=ru_RU.KOI8-R luit
$ ssh user@koi8.host.tld

Если случилось так, что у вас нет локали KOI8-R, то придется ее создать:

$ sudo locale-gen ru_RU.KOI8-R

цветное приглашение bash prompt

15.10.2008

В unix-консоли, а в частности в приглашении bash можно использовать ANSI-последовательности для задания цветового вывода:

 
PS1='[\\e[01;32m]\\u@\\h[\e[00m]:[\\e[01;34m]\\w[\\e[00m]$ '; export PS1

Цвет задается последовательностью вида \e[ATTR;FG;BGm, где ATTR - необязательный аттрибут, FG - цвет переднего плана, BG - цвет фона.

Сброс цвета к значению по умолчанию - \e[0m

Краткую таблицу соответствия кодов конкретным цветам опубликовал в статье "Prompt Magic" Дэниел Роббинс:

colortable.gif

С помощью ATTR можно делать текст полужирным, подчеркнутым, мигающим, и т.п.:

0 по-умолчанию
1 жирный
22 не жирный
4 подчеркнутый
24 не подчеркнутый
5 мигающий
25 не мигающий
7 инвертированный
27 не инвертированный

В качестве примера полезно посмотреть небольшой скрипт, выводящий на консоль таблицу возможных цветовых комбинаций:

#!/bin/sh
############################################################
# Nico Golde &lt;nico(at)ngolde.de&gt; Homepage: http://www.ngolde.de
# Last change: Mon Feb 16 16:24:41 CET 2004
############################################################
 
for attr in 0 1 4 5 7 ; do
    echo "----------------------------------------------------------------"
    printf "ESC[%s;Foreground;Background - \\n" $attr
    for fore in 30 31 32 33 34 35 36 37; do
        for back in 40 41 42 43 44 45 46 47; do
            printf '\\033[%s;%s;%sm %02s;%02s  ' $attr $fore $back $fore $back
        done
    printf '\\n'
    done
    printf '\\033[0m'
done
 

Ссылки по теме:

Макросы RCS

13.10.2008

Ниже приведен список макросов RCS, которые можно использовать внутри любых текстовых файлов. При checkout'е макрос будет развернут в значение.

Макросы RCS (RCS Keywords)

© http://babbage.cs.qc.edu/courses/cs701/Handouts/rcs_keywords.html

© Перевод Алексей Шатловский, 2008, http://shatlovsky.ru/blog/2008/10/13/makrosy-rcs/

$Author$
Имя учетной записи юзера, который внес зарегистрировал (check-in) последнию ревизию

$Date$
Дата и время (UTC) последнего check-in.

$Header$
Стандартный заголовок, содержащий полное имя RCS-файла, номер ревизии, дату (UTC), автора, состояние и имя учетной записи юзера, заблокировавшего ревизию (если заблокировано).

$Id$
То же, что и $Header$, но имя файла без полного пути.

$Locker$
Имя учетной записи юзера, заблокировавшего ревизию (пусто, если не заблокировано).

$Log$
Лог-сообщение, введенное во время checkin, предваренное заголовком, содержащим имя RCS-файла, номер ревизии, автора и дату. Существующие логи замещаются. Вместо этого, новые логи вставляются после $Log:...$. Это полезно для сохранения полной истории изменений исходного файла.

$RCSfile$
Имя RCS-файла без пути.

$Revision$
Номер ревизии.

$Source$
Имя и полный путь к RCS-файлу.

$State$
Состояние, назначенное ревизии опцией -s команд rcs(1) или ci(1).

vim: old-skool h0tkeyz

23.09.2008
 
" F2 = Save file
map  <silent> <f2>    :write<cr>
imap  <silent> <f2>    <esc>:write<cr>
 
" F10 = Exit without save
map   <silent> <f10>    :quit<cr>
imap  <silent> <f10>    <esc>:q<cr>
 

Инструкция по установке Ruby + Gems + Rails на Ubuntu

19.09.2008

Ставим Ruby через менеджер пакетов apt-get:

~$ sudo apt-get install ruby rdoc irb libyaml-ruby libzlib-ruby ri libopenssl-ruby ruby1.8-dev build-essential

Пакеты rdoc и irb не входят в зависимости, хотя и необходимы для Gem и Rails.

Ставим RubyGems из исходников. Это позволит в дальнейшем RubyGems спокойно само-обновляться:

~$ wget "http://rubyforge.org/frs/download.php/38646/rubygems-x.x.x.tgz"
~$ tar -xvzf rubygems-x.x.x.tgz
~$ rm rubygems-x.x.x.tgz
~$ cd rubygems-x.x.x
~$ sudo ruby setup.rb
~$ cd ..
~$ rm -r rubygems-x.x.x

(НЕЛЬЗЯ запускать установку снаружи, типа use sudo ruby rubygemsx.x.x/setup.rb)

Теперь можно обновить RubyGems

~$ sudo gem update --system

Если эта команда не сработала, то, возможно, нужно создать симлинк /usr/bin/gem1.8 -> /usr/bin/gem

~$ sudo ln -s /usr/bin/gem1.8 /usr/bin/gem

Ставим Rails и mongrel через RubyGems:

~$ sudo gem install rails mongrel

Добавляем /var/lib/gems/1.8/bin/ в пути, и все готово!

~$ PATH=${PATH}:/var/lib/gems/1.8/bin/
~$ export PATH

[источник]

Харитон Мизгирь пишет: NB! если при установке какого-нибудь gem'а выдается ошибка
"no such file to load — mkmf"
это значит, что не установлен ruby1.8-dev, libsqlite3-dev
или еще какой-нибудь *-dev

~$ sudo apt-get install ruby1.8-dev libsqlite3-dev

и т.д.