2008-08-25

Трюки bash

История и bang-bang


История команд - очень удобный инструмент. С помощью стрелок вверх-вниз можно перемещаться по истории введенных команд. Кроме того, с помощью команды history можно просмотреть всю историю команд:

190  ps axu | grep htt
  191  /www/bin/apachectl start
  192  vi /usr/local/lib/php.ini 
  193  cat /www/logs/error_log 
  194  ps -auxw | grep http
  195  pwd

Ничего удивительного.
Гораздо интереснее то, что называется bang-bang, или команда !!. `!!` означает последнюю команду в истории. Т.е. ввод !! в данном случае аналогичен pwd.
Но и это еще не все. Можно ввести `!<первые буквы команды>`. `!ps` вызовет `ps axu | grep htt`. Но будьте внимательны и сообщайте восклицательному знаку достаточно символов команды. Например !p в данном случае будет аналогично `pwd`, а не `ps axu | grep htt` (поскольку pwd ниже в истории) как возможно хотелось бы.

2008-08-21

Распространение модулей Python (distutils)

Не секрет, что у Python существует огромная стандартная библиотека с кучей модулей. Но кроме нее, существует просто огроменная коллекция модулей в pypi (Python Package Index).
Однако многие начинающие разработчики сталкиваются с проблемой распространения своих модулей. Можно конечно записать их все в архив и дать пользователям точные инструкции, как все это устанавливать. Однако это неудобно как для пользователей, так и для самих разработчиков. В python у этой проблемы есть простое и элегантное решение - создание стандартных пакетов при помощи модуля distutils.

Для модуля distuils есть очень подробная дока под названием Distributing Python Modules, но для первого прочтения и решения проблемы по-быстрому она явно сложновата.

Итак, допустим у нас есть некий проект - библиотека PyFoo. Состоит она из двух файлов и классов: foo.py и bar.py (ну и разумеется пустого файла __init__.py).

2008-08-15

Забудьте man crontab


По какой-то причине администраторы (и я не исключение) постоянно забывают порядок полей в crontab'е и постоянно возвращаются к его мануалу.
Чтобы не терять времени, добавте следующий комментарий в начало вашего crontab:

#minute (0-59),
#|      hour (0-23),
#|      |       day of the month (1-31),
#|      |       |       month of the year (1-12),
#|      |       |       |       day of the week (0-6 with 0=Sunday).
#|      |       |       |       |       commands
0       2       *       *       0,4     /root/bin/logchecker

&copy; Unix Guru Universe: Unix Tip 2588 - February  2, 2007
http://www.ugu.com/sui/ugu/show?tip.today