Наткнулся на интересный мозаичный оконный менеджер - Awesome
http://awesome.naquadah.org/
ИМХО: На первых парах особенно понравилось, что он вполне юзабелен "по-дефолту" и имеет вполне удобные (ИМХО!) распальцовки: http://awesome.naquadah.org/wiki/index.php/Command_Reference_2_0
На данный момент, версия 2.3-rc1 есть в бэкпортах Debian Etch
Продвинутым
Интересный мозаичный WM
Как удалить файлы из Subversion (SVN) репозитория
Файлы из SVN репозитория нельзя удалить подобно файлам из CVS. Для удаления могут быть разные причины, включая случайный commit или разделение одного репозитория на несколько. На будущее разработчики запланировали опцию 'obfuscate', но в настоящее время единственным способом является следующий:
svnadmin dump /путь/к/репозиторию > myrepo.dump cat myrepo.dump | svndumpfilter exclude /путь/к/ненужным/файлам/репозитория >myrepo.clean mv /путь/к/репозиторию /путь/к/репозиторию.bkp svnadmin create --fs-type fsfs /путь/к/репозиторию svnadmin load myrepo.clean
Пояснения к коду ниже:
зайти в screen на удалённой системе
Требуется: Приатачиться к screen, запущенному на удалённой системе с минимальным количеством телодвижений.
Решение:
Не обязательно, но все таки:
1. делаем беспарольную аутентификацию как рассказно здесь
затем
2.
$ ssh -t login@host 'source .bashrc; screen -x'
Готово!
3. И на последок, что бы все вышеперечисленное таки совершалось с наименьшим количеством телодвижений, создаем скрипт:
$ cat >remotescreen !#/bin/sh ssh -t login@host 'source .bashrc; screen -x' $chmod 755 remotescreen
3.a ... или делаем алиас в любимом .*shrc
[code]
Thunderbird и трей
Наверняка, многим хотелось бы, чтобы громоптиц был запущен целый день, но постоянное нахождение его в таскбаре мозолит глаз. Тем более очень часто почтарь закрывается случайным щелчком по крестику. Для решения этой проблемы я использовал мини-программку AllTray:
$ alltray thunderbird -s -stask -i /usr/share/pixmaps/thunderbird.png
В результате, получаем почтарь, проживающий в трее, разворачивающийся при запуске и с красивой иконкой.
zsh + mc
Давно читаю советы с этого сайта за что всем спасибо.
Вроде нигде такой совет не проскакивал, в общем мой совет:
В zsh я пользуюсь темой приветствия adam2
на днях решил её поправить чтобы показывала не только директорию и пользователя с именем машины но и кое что ещё
но не это важно, а то что за одно я решил избавиться от старого глюка связанного с этой темой,
а именно с проблемой потери размера консоли
.-(~)---------------------------------------------------------------------------------------------------------(denis@tentorium)- `--> .-(~)---------------------------------------------------------------------------------------------------------(denis@tentorium)- `--> `--> .-(/var/cache/dictionaries-common)---------------------------------------------------------------------------------------------- -----------(denis@tentorium)- `-->
т.е. после запуска mc и перехода в /var/cache/dictionaries у нас приглашение съехало.
Git и Subversion могут жить вместе
Предположим, что у вас есть централизованный сервер с svn репозиторием, но вы хотите использовать git локально, делать commit'ы, ветки и другие прелести децентрализованной системы контроля версий. С помощью git-svn это довольно просто.
Аутентификация пользователей windows через MIT Kerberos
Хорошо известно, что помощью Kerberos можно сделать аутентификацию пользователей unix централизованной.
Известно также, что при использовании реализации kerberos от Heimdal можно также аутентифицировать пользователей windows. Но, информация как сделать то же с помощью MIT Kerberos, попалась в первый раз. Всё отличие заключается в том, что ключ для машины с windows нужно генерировать с шифрованием rc4-hmac:normal.
kadmin: addprinc -e rc4-hmac:normal host/win.example.org -w pasword
И указать rc4-hmac:normal в списке разрешённых алгоритмов шифрования в /etc/krb5.conf:
supported_enctypes = des3-hmac-sha1:normal des-cbc-crc:normal rc4-hmac:normal
Модераторам:
возможно, это уже оффтопик. В своё оправдание могу сказать только то, что Kerberos у меня работает под Debian :)
Скрипт для записи и проверки DVD
Периодически приходится писать на DVD разные вещи в консоли. Нередко я сначала раскидываю данные по каталогам, а потом уже пишу по принципу "1 каталог - 1 диск".
Для автоматизации процесса написал скрипт, который пишет на болванку содержимое каталога, проверяет качество записи и, в случае успеха, выдаёт записанный диск.
Создание программного RAID в Linux
Статья с клуба любителей ASPLinux по созданию программного рейда в Linux.
смотрим за работой dd
часто бывает нужно сделать копию/дамп с помощью команды dd какого нить большого объекта, выполняем dd if=/input of=/output bs=1M ... и работает оно себе. когда работает долго - хочется узнать сколько осталось. сколько осталось - не ясно, а статистику I/O можно получить.
нужно подать сигнал -USR1 (-10) этому процессу, и он выкинет эту информацию в stderr
$ dd if=/dev/zero of=/dev/null bs=1M & $ killall -10 dd 566067+0 records in 566066+0 records out 593563222016 bytes (594 GB) copied, 16.1759 s, 36.7 GB/s
Организация удалённого COM-порта
Иногда встаёт задача, когда некое устройство висит на COM-порте одной машины, а управляется с другой.
Для решения этой задачи используем remserial.
На машине, с которой экспортируется COM-порт (/dev/ttyS0):
$ remserial -d -p 23000 -s "9600 raw" /dev/ttyS0 &
где -p 23000 - TCP-порт, -s "9600 raw" - параметры инициализации COM-порта /dev/ttyS0.
На машине, на которую мы собираемся передавать COM-порт(на /dev/ttyS4):
$ nc 192.168.0.2 23000 > /dev/ttyS4
Как узнать размеры терминала в скрипте
Иногда полезно узнать размеры терминала в котором работает ваш скрипт (например при использовании dialog).
0. По умолчанию терминалы под X-Window устанавливают размеры терминалов в переменные LINES и COLUMNS.
Но к сожалению в скрипты они не экспортятся Ж:-(
1. Можно воспользоватся программой stty, если она поддерживает параметр size
$ stty size 71 159 $ eval `stty size | sed -e 's/\(.*\) \(.*\)/LINES=\1 COLUMNS=\2/'` $ echo $LINES $COLUMNS 71 159 $
2. Если на машине установлен ncurses (а сейчас сложно тайти машину на которой он не стоит Ж:-)
то можно воспользоваться программой tput.
COLUMNS=`tput cols` LINES=`tput lines`
3. Если на машине установлен X-Window, то можно воспользоваться командой resize которая возвращает
код на sh для установки переменных LINES и COLUMNS.
$ resize COLUMNS=159; LINES=71; export COLUMNS LINES; $ eval `resize` $ echo $LINES $COLUMNS 71 159 $
Запуск 32-разрядных приложений в 64-разрядной системе
Этот совет - краткое и слишком вольное изложение статьи Daniel Kahn Gillmor "Using proprietary i386 apps on an amd64 system"
Если вы используете 64-разрядную систему, то логично и софт предпочесть 64-разрядный, несмотря на возможность архитектуры amd64 исполнять 32-разрядные приложения. В случае закрытого ПО это может быть проблемой.
Пусть приложение распространяется собранным под x86 архитектуру...
- Установка библиотек
Сначала устанавливаем наиболее распространённые 32-разрядные библиотеки:
apt-get install ia32-libs
Возможно, рассматриваемому приложению потребуются другие библиотеки. В таком случае просто скачиваем с любого зеркала Debian пакет с библиотекой, собранный под архитектуру i386 и распаковываем его в /emul/ia32-linux командой
dpkg -X <файл.deb> /emul/ia32-linux
- Определение необходимых программе библиотек
Просмотрим список необходимых библиотек:
ldd <приложение или библиотека>
Ищем в выводе строки "not found" и устанавливаем библиотеку, как сказано выше.
Существует способ загрузки библиотек в обход ldd, функцией dlopen(). Такие библиотеки в выводе ldd не отображены.Придётся использовать strace:
DUMPDIR=$(mktemp -d) strace -o $DUMPDIR/strace.out -f ./my-proprietary-app
И после завершения программы
grep open $DUMPDIR/strace.out | grep '\.so' | tail
Будет много строк о попытке загрузки библиотеки, по ним можно проследить путь поиска. Если такие попытки заканчиваются удачей, как в приведённом примере
6168 open("/emul/ia32-linux/usr/lib/i686/libogg.so.0", O_RDONLY) = -1 ENOENT (No such file or directory) 6168 open("/emul/ia32-linux/usr/lib/sse2/cmov/libogg.so.0", O_RDONLY) = -1 ENOENT (No such file or directory) 6168 open("/emul/ia32-linux/usr/lib/sse2/libogg.so.0", O_RDONLY) = -1 ENOENT (No such file or directory) 6168 open("/emul/ia32-linux/usr/lib/cmov/libogg.so.0", O_RDONLY) = -1 ENOENT (No such file or directory) 6168 open("/emul/ia32-linux/usr/lib/libogg.so.0", O_RDONLY) = 3
, нам это не интересно; важно выделить в списке те библиотеки, которые так и не были найдены, и распаковать пакеты с ними.
- Создание ссылок
Возможно, пакет распакован, но библиотека не найдена, например, если программа ищет её под другим именем. Тогда создаём символические ссылки.
Всё :)
Как объединить две сетевые карты в одну?
apt-get install ifenslave vim /etc/network/interfaces
внутри /etc/network/interfaces должно выглядеть примерно вот так:
# The loopback network interface auto lo iface lo inet loopback # The bonding network interface auto bond0 iface bond0 inet static address 192.168.0.3 netmask 255.255.255.0 gateway 192.168.0.1 up /sbin/ifenslave bond0 eth0 up /sbin/ifenslave bond0 eth1
абсолютно закомментируйте или удалите все остальное, что относится к eth0 и eth1.
далее, откройте /etc/modprobe.d/arch/i386 (для x86 и для x86_64 архитектур) и добавьте вот эти две строчки:
alias bond0 bonding options bonding mode=1 miimon=100 downdelay=200 updelay=200
после этого просто сделайте /etc/init.d/networking restart
.vimrc в подкаталогах
Иногда случается полезным устанавливать некоторые настройки vim специфично для отдельных каталогов/подкаталогов.
Вот небольшой скриптец, который подгружает .vimrc из каталога, в котором открывается или создаётся файл.
function! Load_local_rc(dir)
if a:dir == expand("~")
return
endif
let rcfile = a:dir."/".".vimrc"
if ! filereadable(rcfile)
return
endif
execute "source ".rcfile
endfunction
autocmd BufReadPre * call Load_local_rc(expand("<afile>:p:h"))
autocmd BufNewFile * call Load_local_rc(expand("<afile>:p:h"))
Защита серверов от случайного выключения\перезагрузки
Защитить сервера от случайной перезагрузки или выключения поможет пакет molly-guard. При выполнении команд shutdown, reboot, halt он засечет удаленное подключение и попросит ввести имя хоста, с которым осуществляется операция. Это полезно при работе с удаленными серверами через ssh подключения, и особенно - при работе с несколькими серверами одновременно.
Вот так простенький пакет в 6 кб поможет сохранить ваше мягкое место. А не как я сегодня, невыспавшись, перегрузил 15 машин (из них 6 продакшн серверов) одной ковбойской командой...
С приветом!
Как переименовать сетевые интерфейсы (eth0 в eth1, eth1 в crazy_mofo и т.д.)
Имена сетевых интерфейсов в Linux компьютерах в последнее время стали привязываться к конкретным устройствам. Так, если вы вытащите жесткий диск с одного компьютера и вставите его в другой, то сетевая карта, называвшаяся на старом компьютере eth0, станет на этом eth1. А при попытке сделать ifconfig eth0 up система будет говорить, что, дескать, такого устройства не существует.
Собака зарыта в udev, который по умолчанию привязывает имена сетевых устройств к их MAC адресам. Например, в Debian Etch это находится в файле
/etc/udev/rules.d/z25_persistent-net.rules
Просто отредактируйте его по своему вкусу и voila :-)
P.S.: не забудьте соответственным образом исправить скрипты для старта сети, т.е. /etc/network/interfaces
Настройка переключения раскладки клавиатуры в KDE через Alt + Shift
Настроить нормальное переключение клавиатуры в KDE всегда было проблемой. Люди настраивали раскладку через конфигурацию xfree, через xkb, или мучались с переключением типа Ctrl+Alt+K в КДЕ. Именно такая раскладка была по умолчанию, с латинской буквой K. А при переключении на русский язык она уже не распознавалась и обратно переходилось переключаться по щелчку мышки. Проблема заключалась в том, что посредством KDE нельзя было выбрать раскладку типа Ctrl + Shift или Alt + Shift. KDE считала обе клавиши модификационными и требовала третью.
Ищем следы вторжений ... и собственные ошибки
Давно установил и настроил несколько утилит для проверки системы и обнаружении вторжений, но сегодня узнал ещё об одной и был слегка шокирован своей криворукостью. :-\
Надо бы упорядочить эту тему
Старая, но ещё актуальная статья.
Сведения об уязвимостях в установленном ПО. Специфично для Debian
- debsecan - информация о проблемах в установленных пакетах.
- apt-listbugs - при установке пакета сообщает о возможных проблемах
Оценка состояния:
- logcheck - поиск подозрительного в логах, отчёт на почту
- chkrootkit, ИМХО, стоит заменить на более новый rkhunter
- tiger - сканирует систему и сообщает о всём подозрительном. Хотя бы один раз запустить нужно. На новом Debian узнаёшь много интересного...
Обнаружение подозрительной деятельности
- portsentry - обнаружение сканирования портов
- tripwire - обнаружение изменений в важных файлах
Лучшая защита - нападение. Удалённый поиск уязвимостей
- nessus
Это в порядке увеличения паранойи ;) Первая группа необходима всегда и везде. Вторая самая удобная: добавил в cron и только отчёты просматривай; не будет лишним даже на домашней машине. Ну а где остановиться - определяется только здравым смыслом.
Кто занял apt базу?
Иногда при попытке использования apt случается такое:
ramok ~/ sudo apt-get update
E: Не могу получить доступ к файлу блокировки /var/lib/apt/lists/lock - open (11 Ресурс временно недоступен)
E: Невозможно заблокировать каталог со списками пакетов
Это обозначает что где то есть процесс который закрыл базу apt для использования. Это могло произойти в случае сбоя программы, которая закрыла базу и забыла ее открыть, или когда где то среди десятков открытых терминалов затерялось окно в котором запущена такая программа.
Посмотрим PID процесса занявший базу apt по лок-файлу
ramok [100]~/ sudo fuser /var/lib/apt/lists/lock
/var/lib/apt/lists/lock: 22069
Если есть желание, то можно посмотреть что за программа залочила базу apt
ramok ~/ ps aux | grep 22069
root 22069 2.3 2.2 28704 22792 pts/27 S+ 11:22 0:01 apt-get upgrade
Убиваем процесс который занял базу:
ramok ~/ sudo fuser -k -TERM /var/lib/apt/lists/lock
/var/lib/apt/lists/lock: 22069
ramok ~/
или не мудрствуя лукаво
ramok ~/ sudo kill -TERM 22069




Последние комментарии
1 час 32 минуты назад
2 часа 16 минут назад
2 часа 19 минут назад
2 часа 44 минуты назад
3 часа 27 минут назад
3 часа 59 минут назад
4 часа 3 минуты назад
23 часа 25 минут назад
2 дня 2 часа назад
2 дня 13 часов назад