Экспертам


romy4 аватар

Статистика tcp соединений

netstat -npat|grep ESTABLISHED |
  awk 'BEGIN{counter=0;} {split($5,a,":");ip=a[1];if(ip in ips)ips[ip]+=1;else ips[ip]=1;counter++;} END{for(i in ips)print i" = "ips[i]"\n"}'|
  sort | grep -vP '^\s*$'

Если убрать grep ESTABLISHED, то это добавит список ожидающих соединений.
Если оставить netstat -n то добавятся UDP

0
Ваша оценка: Ничего

Текст в картинку (делаем скриншот консоли)

Учитываются системные шрифты, а вот цветовые схемы консоли не работают

$ ifconfig | convert label:@- ip.png
$ ping -c 5 ya.ru | convert label:@- ya.png
$ echo "Hello World" | convert label:@- hello.png
5
Ваша оценка: Ничего Рейтинг: 5 (2 голоса)

Архивация динамического списка файлов, с отображением прогресса

Стояла задача - в страшно разветвленной помойке директорий и файлов выцепить все файлы определенных типов и затарить их в архив /tmp/archive.tar.gz. Дополнительно хотелось наблюдать за прогрессом с прогнозом времени выполнения. Было решено средствами find, pv, gawk (только gawk, с mawk не заработало) следующим образом:

find -type f -o -name \*.c -o -name \*.h -o -name \*.xsl -print0 |
    xargs -0 du -bs |
        awk '{s+=$1;sub(/^[0-9]*\t/,"");n=$0"\0"n;printf"scan files: %d\r",++i}END{ORS="";print n|"tar --null -cT-|pv -s "s"|gzip -9> /tmp/archive.tar.gz"}'
0
Ваша оценка: Ничего

Оживление запоротого насмерть BIOS

Рассказ о том, как я восстановил свой BIOS после неудачной прошивки coreboot. Примеры прошивки под DOS и Linux, немного фотографий и рассказ об одном из самых брутальных способов оживления мертвой материнки.

http://blindage.org/?p=3827

5
Ваша оценка: Ничего Рейтинг: 5 (1 vote)

Замена песочным часам в терминале

Иногда в окне терминала требуется функциональность песочных часов. Предлагается решение:

4
Ваша оценка: Ничего Рейтинг: 4 (3 голоса)

Вывод сообщений статуса в bash скрипте

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

Примерно вот так:

 * Производится действие 1          [DONE]
 * Производится действие 2          [FAIL]
это ошибка действия 2
4.5
Ваша оценка: Ничего Рейтинг: 4.5 (2 голоса)

Узнать время в другом часовом поясе

Иногда нам хочется узнать время в другом часовом поясе. Иногда (но еще реже) нам нужно, чтобы таймзона нашего пользователя была не такой, как системная. Для этого существует переменная окружения TZ, в которую можно записать значение и получить нужный эффект.

$ date
Fri Feb 18 10:22:53 EET 2011
 
$ TZ="America/Chicago" date
Fri Feb 18 02:22:53 CST 2011

Узнать название зоны поточнее всегда можно в каталоге /usr/share/zoneinfo.

0
Ваша оценка: Ничего
ramok аватар

Пример замены n-го появления строки в файле

Задача была озвучена так:

Цитата:

20:19 < todd_dsm> hey all, I have 1 file to modify (httpd.conf) I need to change the 2nd of for occurrences of "AllowOverride None". Is there a way do change the 2nd occurrence and leave 1,3, and 4 untouched?

Примерный перевод

Цитата:

У меня есть httpd.conf. Мне надо заменить второе появление в файле "AllowOverride None". Есть возможность заменить второе появление, не тронув первое, третье и четвертое?

Ответ:
Пример заменяет второе появление "AllowOverride None" на "replace".

$ printf "AllowOverride None\nAllowOverride None\nAllowOverride None\nAllowOverride None\n" |
    awk '/AllowOverride None/ && (++i == 2) {print "replace";next}{print}'

На sed

$ printf "AllowOverride None\nAllowOverride None\nAllowOverride None\nAllowOverride None\n" |
       sed -e '/AllowOverride None/{x;/^1$/{x;s/.*/replace/;x};s/$/1/;x}'
0
Ваша оценка: Ничего
banda аватар

Wget 1.12 what new

Вышел релиз Wget 1.12 , консольной программы для автоматического получения файлов по сети. В новой версии представлены следующие улучшения.

0
Ваша оценка: Ничего
ramok аватар

Информация о VCS (Version Control Systems) в приглашении zsh

При переходе на git пришла в голову мысль что было бы удобно видеть в приглашении zsh в каком состоянии локальный репозиторий.
Всевозможные rebase, am, merge и подобное сбивает с толку.
Сказано - сделано. Написал собственный велосипед. Потом нашел еще парочку велосипедов в интернете, разобрал на запчасти и прикрутил к своему велосипеду новенькие колеса и смазал педали. Но вскоре, к своему стыду, в мане zsh увидел уже готовый даже не велосипед, а целый танк с экипажем. И собакой в придачу.

Вот он

$ PAGER=less LESS='-p VERSION CONTROL SYSTEMS' man zshall

Творчески переосмыслив пример из мана вот что получилось

autoload -Uz vcs_info
 
# включаем только git svn svk cvs. Возможные VCS можно посмотреть командой vcs_info_printsys
zstyle ':vcs_info:*'              enable            git svn svk cvs
 
# домашняя директория из CVS репозитория. Исключаем ее и некоторые директории из домашнего репозитория
zstyle ':vcs_info:*'              disable-patterns "$HOME(|/.*|/bin)"
 
# Модифицированная версия из man zshcontrib, добавлены флажки staged и unstaged изменений
zstyle ':vcs_info:*'              actionformats    '%F{5}(%f%s%F{5})%F{3}%m%F{5}[ %F{2}%b%F{3}|%F{1}%a%F{5}][ %B%F{yellow}%c%F{red}%u%%b%F{5}]%f '
zstyle ':vcs_info:*'              formats          '%F{5}(%f%s%F{5})%F{3}%m%F{5}[ %F{2}%b%F{5}][ %B%F{yellow}%c%F{red}%u%%b%F{5}]%f '
zstyle ':vcs_info:(sv[nk]|bzr):*' branchformat     '%b%F{1}:%F{3}%r'
 
zstyle ':vcs_info:*'              check-for-changes true
zstyle ':vcs_info:*'              get-revision      true
 
setopt prompt_subst
RPROMPT=$'${vcs_info_msg_0_}%b%F{cyan}%T%f'
 
 
# в zsh >= 4.3.11 можно add-zsh-hook precmd vcs_info
precmd ()
{
    vcs_info
}

Ну и как всегда: Live demo! Ж:-)

0
Ваша оценка: Ничего

Боремся с предупреждениями при статической линковке glibc в Linux

Этот совет вводит в заблуждение и ошибочен. -all-static линкует все динамически, в чем можно убедиться, выполнив ldd <наша программа>. Возможно, в комментариях кто подскажет как избавиться от динамической зависимости от glibc?

Несмотря на то, что статическая линковка в Linux это зло, иногда и ко злу приходится приобщаться по разным причинам... Если вы пытаясь слинковать все динамически получаете следующее или похожее предупреждение:

/usr/lib/gcc/i686-pc-linux-gnu/4.4.1/../../../libcrypto.a(dso_dlfcn.o): In function `dlfcn_load':
(.text+0x7b6): warning: Using 'dlopen' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/lib/gcc/i686-pc-linux-gnu/4.4.1/../../../libssh.a(misc.c.o): In function `ssh_get_user_home_dir':
(.text+0x262): warning: Using 'getpwuid' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/lib/gcc/i686-pc-linux-gnu/4.4.1/../../../libssh.a(connect.c.o): In function `getai':
(.text+0x663): warning: Using 'getaddrinfo' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking

что свидетельствует о том, что во время запуска программы все равно потребуется динамическая библиотека, поменяйтя ключ при линковке (обычно переменная LDFLAGS в Makefile) -static, на -all-static и возрадуйтесь! Впрочем не забывайте подключить также -lc, -lm и подобные статические библиотеки.

1
Ваша оценка: Ничего Рейтинг: 1 (1 vote)

Полный аудит действий пользователей на файловом сервере под управлением SAMBA

Возникла необходимость видеть историю всех действий пользователей на файловом сервере под управлением SAMBA

после долгого чтения гугла пришел к выводу, что это бесполезно и погрузился в чтение манов самбы.
И вот какое решение родилось:

5
Ваша оценка: Ничего Рейтинг: 5 (3 голоса)
angel2s2 аватар

Логи в цвете

Узнал про интересную утилитку, которая подсвечивает логи, что облегчает их чтение. Очень удобно.

Имя ей CCZE. Правда она не обновлялась с 2003 года, но это и не нужно.

Ставим:
sudo aptitude install ccze

Юзаем:
ccze -A < /var/log/syslog | tail -f -n 20

Ключ -А нужен чтобы текст выводился "сырым", иначе всякие tail'ы да less'ы подглючивают.

0
Ваша оценка: Ничего
angel2s2 аватар

Скрипт для импорта pgp-ключей с лаунчпада (для *buntu)

Не так давно я выкладывал скрипт для импорта ключей из PPA репозиториев, но, к сожалению, на сайте launchpad.net произошли изменения и старый скрипт уже не работает. Поэтому было решено это дело исправить, а заодно добавить приятную возможность :)

5
Ваша оценка: Ничего Рейтинг: 5 (1 vote)
ramok аватар

Вывод описания ошибки в стандартном assert

Стандартный макрос assert() в C применяется для внутренних допущений в фунции, которые всегда должны выполнятся. Иначе они являются последствиями программной ошибки. Например вызов фунции не с тем параметром или повредилась память.

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

Например имеем файлик assert.c:

#include <stdio.h>
#include <assert.h>
 
int main()
{
    assert(2 + 2 == 4 && "описание ошибки если 2 + 2 не равно 4");
    assert(2 + 2 == 5 && "описание ошибки если 2 + 2 не равно 5");
    return 0;
}

Тестируем что получится:

ramok@~tests/ make assert && ./assert
cc -W -Wall assert.c   -o assert
assert: assert.c:7: main: Assertion `2 + 2 == 5 && "описание ошибки если 2 + 2 не равно 5"' failed.
[1]    29464 abort (core dumped)  ./assert
0
Ваша оценка: Ничего

Ограничение использования CPU каким-либо процессом

В этом поможет утилита cpulimit. )

Ставим:
$ aptitude install cpulimit
Выполняем:

stasikos@stas-desk:~$ sudo cpulimit -e dynamips -l 20
Process 12942 detected

Радуемся:

top - 16:01:06 up  4:47,  1 user,  load average: 0.65, 0.88, 0.74
Tasks: 117 total,   2 running, 113 sleeping,   1 stopped,   1 zombie
Cpu(s): 13.2%us,  2.1%sy,  0.0%ni, 84.5%id,  0.0%wa,  0.2%hi,  0.0%si,  0.0%st
Mem:   1000948k total,   915980k used,    84968k free,    19792k buffers
Swap:  2048248k total,   215404k used,  1832844k free,   396968k cached
 
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND           
12942 stasikos  20   0  491m 213m  58m T   20 21.8   3:59.97 dynamips
5
Ваша оценка: Ничего Рейтинг: 5 (1 vote)

fusion-icon и оконный декоратор gtk-window-decorator

Ошибкам подвержены следующие версии пакетов

x11-wm/compiz-fusion-0.7.8
x11-plugins/compiz-fusion-plugins-main-0.7.8
x11-plugins/compiz-fusion-plugins-unsupported-0.7.8
x11-plugins/compiz-fusion-plugins-extra-0.7.8
x11-apps/fusion-icon-0.1

Все из оверлея "desktop-effects"

Проблема:
В гноме видим оконный декоратор.

После запуска fusion-icon видим что хотя и выставлен декоратор gtk-window-decorator окно выглядит иначе

Лечение:

0
Ваша оценка: Ничего
ramok аватар

Как фильтровать абзацы

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

Практический пример:
при настройке мультимедийных клавиш, xev выводит очень быстро, очень много текста. Хочется фильтровать только описание событий связанных с определенными клавишами. Например пусть это будет XF86Forward и XF86Back.

Собственно пример команды

$ xev | sed -ne 'H;$bz;/^$/{:z;g;/XF86Forward\|XF86Back/p;s/.*//;x}'

Запускаем это и нажимаем все мультимедийные клавиши в поисках нужных.

Как это работает:
1. Накапливаем в буфере (hold space) абзац
2. Если находим признак окончания абзаца (в нашем случае - пустая строка) или это последняя строка, забираем из буфера накопленный.
2.1 Проверяем если нужные слова в абзаце. Если есть - печатаем абзац.
2.2. Стираем обработаный абзац.
 

5
Ваша оценка: Ничего Рейтинг: 5 (1 vote)
banda аватар

Google Earth через http прокси

Это делается очень просто и не надо будет никакой тульзы по направлению к прокси или т.п. И не надо трогать к иптаблес :) (как их ненавижу)

Короче эту делаю я так, надеюсь всем понятно

$ http_proxy=http://127.0.0.1:8090 googleearth

Можно занести в ~/.bashrc или ~/.zshrc строчку

export http_proxy=http://127.0.0.1:8090

и тогда многие программы будут тоже ходить через прокси

4.5
Ваша оценка: Ничего Рейтинг: 4.5 (2 голоса)
bliznezz аватар

xrandr: меняем разрешение экрана на лету

0
Ваша оценка: Ничего