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

Представляю проект Perl 5 Maven по-русски

06.04.2013

Начата работа по переводу учебника Gabor Szabo по Perl, Perl Maven.

Переведена вводная статья, Установка и начало работы с Perl:

В ней вы узнаете, как установить Perl на Microsoft Windows и как начать использовать его на Windows, Linux или Mac.

Вы узнаете, как установить и настроить среду разработки, или, говоря простым языком: какой редактор или IDE использовать для Perl-программирования?

Также мы увидим стандартный пример "Hello World".

Читать дальше

Буду весьма признателен за конструктивную критику.

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

29.04.2010

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

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

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

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

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

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

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

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

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

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

20.04.2010

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

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

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

  1. :'<,'>

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

  1. :%sort

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

  1. :%sort!

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

  1. :%sort -u

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

  1. :%!sort --numeric-sort --reverse

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

  1. :help :sort

vim: избавляемся от dos-овых концов строк (\r\n -> \n)

02.09.2009
  1. Если vim распознал dos-овые концы строк, и не показывает ^M,
    1. :set ff=unix
    2. :w

    Документацию по поводу опции fileformat почитать можно в разделе usr_23:

    1. :help usr_23
  2. Если vim автоматически не распознал DOS line ends, то в конце строк будут символы ^M. Удалить их можно простой заменой:
    1. :%s/^M//g

    Символ ^M при этом вводится как Ctrl-V Ctrl-M.

bash: горячие клавиши

17.06.2009

Полный мануал как обычно:

  1. man bash

, ключевые слова в квадратных скобках:

Перемещение:
слово-назад – Alt-B [backward-word (M-b)]
слово-вперед - Alt-W [forward-word (M-f)]
начало-строки - Ctrl-A [beginning-of-line (C-a)]
конец-строки - Ctrl-E [end-of-line (C-e)]

Удаление:
удалить-строку-вперед - Ctrl-K [kill-line (C-k)] - от курсора до конца строки
удалить-строку-назад - Ctrl-U [unix-line-discard (C-u)] - от курсора до начала строки
удалить-слово-вперед - Alt-D [kill-word (M-d)] - от курсора до конца слова
удалить-слово-назад - Alt-Backspace [backward-kill-word (M-Rubout)] - от курсора до начала слова

(Обновляется. Последнее изменение: 17 июня 2009 г.)

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

08.06.2009

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

  1. # ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key
  2. 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.

Создание /etc/init.d/nginx на debian 5.0 lenny

05.06.2009
  1. $ sudo vim /etc/init.d/nginx

Вставляем нижеследующий код (помним про команду ‘set :paste’ для вставки в VIM):

  1. #!/bin/sh
  2. ### BEGIN INIT INFO
  3. # Provides: nginx
  4. # Required-Start: $remote_fs $syslog $named $network $time
  5. # Required-Stop: $remote_fs $syslog $named $network
  6. # Default-Start: 2 3 4 5
  7. # Default-Stop: 0 1 6
  8. # Short-Description: Start nginx at boot time
  9. # Description: Enable service provided by nginx.
  10. ### END INIT INFO
  11. # $Id$
  12.  
  13.  
  14. NGINXHOME=/usr/local/nginx
  15. NGINXPID=$NGINXHOME/logs/nginx.pid
  16.  
  17. PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
  18. DAEMON=$NGINXHOME/sbin/nginx
  19. NAME=nginx
  20. DESC=nginx
  21.  
  22. if [ ! -x $DAEMON ]
  23. then
  24. echo "Couldn't find $DAEMON. Please set path to DAEMON."
  25. exit 0
  26. fi
  27.  
  28.  
  29. # Include nginx defaults if available
  30. if [ -f /etc/default/nginx ] ; then
  31. . /etc/default/nginx
  32. fi
  33.  
  34. set -e
  35.  
  36. case "$1" in
  37. start)
  38. echo -n "Starting $DESC: "
  39. start-stop-daemon --start --pidfile $NGINXPID \
  40. --exec $DAEMON -- $DAEMON_OPTS
  41. echo "$NAME."
  42. ;;
  43. stop)
  44. echo -n "Stopping $DESC: "
  45. start-stop-daemon --stop --pidfile $NGINXPID \
  46. --exec $DAEMON
  47. echo "$NAME."
  48. ;;
  49. restart|force-reload)
  50. echo -n "Restarting $DESC: "
  51. start-stop-daemon --stop --pidfile \
  52. $NGINXHOME/run/$NAME.pid --exec $DAEMON
  53. sleep 1
  54. start-stop-daemon --start --pidfile \
  55. $NGINXPID --exec $DAEMON -- $DAEMON_OPTS
  56. echo "$NAME."
  57. ;;
  58. reload)
  59. echo -n "Reloading $DESC configuration: "
  60. start-stop-daemon --stop --signal HUP --pidfile $NGINXPID \
  61. --exec $DAEMON
  62. echo "$NAME."
  63. ;;
  64. *)
  65. N=/etc/init.d/$NAME
  66. echo "Usage: $N {start|stop|restart|force-reload}" >&2
  67. exit 1
  68. ;;
  69. esac
  70.  
  71. exit 0

Сохраняем скрипт и выходим из vim.

Делаем скрипт исполняемым:

  1. $ sudo chmod 755 /etc/init.d/nginx

Указываем, что nginx нужно запускать при запуске и остановке сервера:

  1. $ sudo /usr/sbin/update-rc.d -f nginx defaults

UPD: Блок, заключенный между строками

  1. ### BEGIN INIT INFO
  2. ### END INIT INFO

обеспечивает LSB-совместимость. Подробнее см. http://wiki.debian.org/LSBInitScripts

Установка nginx на debian 5.0 lenny

04.06.2009

На "пустом" свежеустановленном Debian не хватает ряда инструментов и библиотек для сборки и установки nginx.

Ставим gcc, make, и компания:

  1. $ sudo apt-get install build-essential

Библиотеки для сборки nginx:

  1. $ sudo apt-get install libpcre3 libpcre3-dev libpcrecpp0 libssl-dev zlib1g-dev

Для поддержки встроенного Perl добавляем:

  1. $ sudo apt-get install libperl-dev

Собственно процесс сборки и установки (вместо 0.7.XX впишите номер актуальной версии):

  1. $ wget http://sysoev.ru/nginx/nginx-0.7.XX.tar.gz
  2. $ tar zxvf nginx-0.7.XX.tar.gz
  3. $ ln -s nginx-0.7.XX nginx
  4. $ cd nginx
  5. $ ./configure \
  6. --prefix=/usr/local/nginx \
  7. --with-cc-opt="-I /usr/include" \
  8. --with-ld-opt="-L /usr/lib" \
  9. --with-http_stub_status_module \
  10. --with-http_realip_module \
  11. --with-http_perl_module \
  12. --with-http_ssl_module
  13.  
  14. $ make && make install
  15.  

Обратите внимание, параметры

  1. --with-cc-opt="-I /usr/include" --with-ld-opt="-L /usr/lib"

указывают на расположение системных заголовков и библиотек, без них configure не видит ряда системных библиотек.

Unix: Поиск и замена во многих файлах одновременно

09.02.2009

Задача: найти все файлы содержащие OLDTEXT, и заменить OLDTEXT на NEWTEXT.

UPD2:Решение, предложенное ocehb:

  1. grep -rl OLDTEXT . | grep -Ev '(~|.o|.a)$' | grep -Ev '/.svn/' | xargs perl -i -pe "s/OLD_TEXT/NEW_TEXT/g;"

UPD1:Вариант без vim:

  1. grep -HR OLDTEXT ./ | awk '{print $1}' | sed 's/:.*$//' | grep -v '~' | sort | uniq | xargs perl -i -pe "s/OLD_TEXT/NEW_TEXT/g;"

Изначально предложенное решение с vim:

  1. grep -HR OLDTEXT ./ | awk '{print $1}' | sed 's/:.*$//' | grep -v '~' | sort | uniq | xargs vim -p

В открывшемся окне vim командуем:

  1. :tabdo %s/OLDTEXT/NEWTEXT/g

(заменить OLDTEXT на NEWTEXT во всех вкладках)

  1. :xa

(записать изменения во всех вкладках)
либо

  1. :qa!

(отменить изменения во всех вкладках)

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

  1. VIM FAQ
  2. Save all open buffers at once
  3. Сохранение файла без прав на запись в vim используя sudo
  4. [SLUG] Vim. Search and replace in multiple files

ubuntu: обновляем систему до последнего релиза

18.12.2008

Инструкция по обновлению:
http://www.ubuntu.com/getubuntu/upgrading

Поехали..