Category: it

Category was added automatically. Read all entries about "it".

nepal

Set X terminal title

А вот ещё микрохаутушечка для линуксоида-любителя.

Есть у меня скрипт, который делает некую полезную работу, поделённую на пару десятков этапов. Каждый этап может длиться несколько минут или часов. Я запускаю скрипт в терминале, он цветной строчкой с таймстемпом оповещает о начале каждого этапа, типа:

[12:23:22] [4/21] Updating bla bla ....

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

Меж тем у терминала (иксового) есть некий текст, написанный в рамке X окна. Почему бы туда не написать нам ту же строчку, что мы выводим на экран. Аналогично поступает, например, emerge из Gentoo.

Читаем мой любимый console_codes(4) и выясняем, что для этого нужно. Пишем простой код на шелле (он же показывает разноцветности в терминале):


#!/bin/bash
# Example of setting title and using colors in terminal.
# By Kir Kolyshkin <kir AT sacred DOT ru>

BF='\033[1m'            # Bold
NF='\033[0m'            # Normal
GF='\033[32m'           # Green
SET_TITLE='\033]0;'    # Set title
ST='\033\\'             # ECMA-48 string terminator

# Log to console and set terminal title as well
log() {
        local d=$(date +%H:%M:%S)
        echo -e [${GF}${d}${NF}] ${BF}$*${NF}
        echo -ne ${SET_TITLE}[$d] $*${ST}
}

# Usage example
MAX=10
for N in $(seq 1 $MAX); do
        log "Counting $N/$MAX..."
        sleep 0.7
done
nepal

как скопировать файлы с полным путём?

Есть файлы, ну, скажем, /etc/fstab, /home/kir/a.txt и так далее. Хочется их скопировать в текущий каталог, но с сохранением полного пути. Желательно какой-то одной простой командой.

В первую очередь приходит в голову конструкция вида

for f in list_of_files; do d=$(dirname $f); mkdir -p $d; cp $f ./$d/; done

Но это как-то несколько громоздко.

Коллега koct9i предложил использовать тар. Вот так примерно выходит:

tar cf - list_of_files | tar xf -

Есть ли вариант проще? Все файлы заданы с абсолютными путями, копировать в текущий каталог.

Update: поправил ошибку в шельном коде, указанную [info]beshenov.

Update2: vm_lj дал наиболее простой вариант: cp --parents :)
nepal

thunderbird plugins

Почти все знают, что к браузеру Firefox есть большое количество полезных дополнений, ну хотя бы AdBlock, DOM Inspector или там GreaseMonkey.

Некоторые знают, что к почтовому клиенту Thunderbird тоже есть много дополнений. Но почти никто их не использует (ну или не пишет про них). Постараюсь несколько исправить это досадное упущение.

Collapse )
nepal

directory lookup speedup howto, или как ускорить файловую систему

Если у вас система тормозит при попытке прочитать большой каталог, файлы в который добавлялись в очень разное время (типа /usr/bin) -- наверное, у вас не включена опция dir_index на файловой системе ext2/3/4. Типичный симптом: когда в почте хотите открыть вложение, вам предлагается выбрать программу, вы пишете /usr/bin -- и тут всё застревает секунд на 5-10. Это застревание можно частично починить включением вот этой самой опции dir_index.

Включить её не слишком просто, но, впрочем, не так уж и сложно. Хотя у вас, скорее всего, она уже включена инсталлятором системы. Но вдруг нет? Collapse )
nepal

media-tech MT4017 PIXER LED webcam vs. linux

Купил вчера сдуру вебкам в "Ашане". И вот чем всё это закончилось.

А ещё есть какой-то Люка Ризотти, который завёл себе домен линукс-проджектс.орг и продаёт на нём закрытые бинарные драйвера для подобных вебкамов. Я, говорит, за 50-100-200 евро (в зависимости от всяких там условий) вам скомпиляю драйвер под ваше ведро. Учитывая, что этот вебкам стоит 600 рублей, а у меня на ноутбуке Gentoo и несколько десятков разных ядер, <censored> я в <censored> этого <censored> Люку с его <censored> предложениями.

Гугл групс тоже <censored>. Это что-то среднее между списком рассылки и сурсфоржем (ближе к списку рассылки), но чтобы туда написать, я должен иметь google account. То есть с kir@myhomepage.ru я не могу написать.
nepal

output rate limiter in awk

В процессе обдумывания OpenVZ bug #1066 написал несколько интересных штук на awk.

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

Вот самый простой вариант -- каждую 1000 входных строк печатать число, количеству "проглоченных" строк соответствующее:

awk '(NR % 1000 == 0) {printf NR "\r"}'

Возможно, что более информативно будет печатать не количество строчек, а сами эти строчки (не все, конечно, а некоторое). Вот этот код печатает каждую тысячную строчку из stdin:

awk '(NR % 1000 == 0) {printf "\033[2K%s\r", $0}'

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

awk '(NR % 1000 == 0) {t=systime(); if (t!=t1) {printf "\033[2K%s\r", $0; t1=t}}'

Можно, впрочем, печатать и номер строки, и саму строку:

awk '(NR % 1000 == 0) {t=systime(); if (t!=t1) {printf "\033[2K[%d] %s\r", NR, $0; t1=t}}'

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

Кстати, забавно, что получилась такая своеобразная русская рулетка, например, вот некоторые файлы на вашем диске:

ls -lR / 2>/dev/null | awk '(NR % 1000 == 0) {t=systime(); if (t!=t1) {printf "\033[2K%s\r", $0; t1=t}}'

PS по коду всё должно быть понятно, за исключением, может быть, \033[2K -- это очистка текущей строки. Нужна в том случае, если следующая строчка короче предыдущей, чтобы мусора на экране не оставалось.
nepal

Про цвета в терминале

Современные эмуляторы терминала поддерживают 256 цветов. Но многие программы про это не знают, потому что эмулятор выставляет переменную окружения TERM=xterm, а в terminfo про xterm прописано, что у него 8 цветов:
$ echo $TERM
xterm
$ tput colors
8

Но может, у вас всё так и должно быть? Проверить легко -- запустить вот такой код:

for ((x=0; x<=255; x++));do echo -e "${x}:\033[48;5;${x}mcolor\033[000m";done
(если заменить 48 на 38, будет меняться цвет текста, а не цвет фона)

Если вам напечатают много красивых цветов, то, значит, ваш эмулятор терминала умеет 256 цветов. Что нужно сделать, чтобы об этом узнали программы? Да просто выставить TERM=xterm-256color (убедившись, что у вас есть такой файл в /usr/share/terminfo/x/). Лучше всего сделать сразу в настройках эмулятора терминала (у меня в XFCE Terminal это Preferences -> Advanced -> $TERM setting).

Потом можно посмотреть, что изменилось:
$ echo $TERM
xterm-256color
$ tput colors
256


Можно запустить vim и увидеть, что цвета чуток изменились (если вы используете цветовую схему и подсветку синтаксиса). Чтобы убедиться, что vim "увидел", что у вас 256 цветов, напишите :set t_Co -- в ответ должны увидеть t_Co=256.

И даже для color ls предусмотрена цветовая схема с 256 цветами (она потом сама подгрузится в /etc/profile.d/colorls.sh, когда bash будет исполнять profile, а пока сделаем ручками):
$ eval $(dircolors -b /etc/DIR_COLORS.256colors)
$ ls

Всякие разные ESC-последовательности для терминала можно посмотреть в man console_codes. Всё вышеприведённое справедливо для Fedora 9; your mileage may vary, there are no guarantees etc.
nepal

Запустил OpenVZ на ARM (Gumstix Overo)

Вот на этой самой железяке я таки запустил OpenVZ. Все детали в блоге OpenVZ.

Спрашивают, на фига это нужно, на таком мелком железе запускать виртуализацию, контейнеры какие-то. Отвечаем.

Мне видится, что, во-первых, для мобильников и прочих PDA контейнер — хорошая среда для запуска untrusted application. Скачали вы чёрт знает что из Интернета — пускай работает внутри отдельного урезанного контейнера.

Дальше, в роутерах тоже подобное железо стоит, соответственно, можно использовать модель «один сетевой сервис на один контейнер» для пущей безопасности и лучшего контроля за ресурсами. Безопасность — потому что если сервис дырявый, то будет скомпрометирован только он один. Ресурсы — наши хвалёные бинкаунтеры и всё прочее групповое (CPU, I/O scheduling), которого в ванильном ядре [пока] не хватает.

Развивая идею appliances — можно ведь и для «маленького» железа делать это. Скачал готовый настроенный образ, запустил, и всё. Как выразился сегодня koct9i, идеально для тупого админа, который сам не может поставить и настроить систему. В общем-то, и не для тупого тоже это хорошо — это ещё и fast provisioning, быстрое разворачивание.

Для «маленького» железа именно контейнеры хороши, потому как оверхед накладные расходы маленькие, производительность практически не падает.

Что скажете?

Update: ну что за напасть — и к этой записи начал сыпаться спам! Ввиду этого комменты скринятся. Спам буду удалять, не спам — расскринивать.
nepal

Mouse Keys, или Если у вас не работает NumLock

Если у вас вдруг никак не работают циферки на дополнительной цифровой секции клавиатуры (которая справа), а вместо этого происходит что-то странное, то это Mouse Keys -- эмуляция мышки с помощью клавиатуры. Это удобно и практически незаменимо, когда вдруг мышка не работает -- но неудобно, если вдруг хочется циферки на этой клавиатуре понабирать.

Так вот, включение и выключение этой функциональности работает поShift+Alt+NumLock. Для того, чтобы задать начальное состояние после запуска, надо в настройках мыши включить или выключить опцию Mouse Keys.

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