|
|
www.lissyara.su
—> документация
—> Программирование
—> awk
ЯЗЫК ОБРАБОТКИ ШАБЛОНОВ awk
awk - команда контекстного поиска и преобразования текста. Она - фильтр. Ее можно рассматривать как оболочку awk в оболочке shell.
1. СТРУКТУРА awk-ПРОГРАММЫ
Программа состоит из операторов (правил), имеющих вид:
шаблон {действие}
шаблон {действие}
. . .
| Частные случаи:
{действие} - когда действие выполняется для всех строк.
шаблон - когда выводятся строки с данным шаблоном.
Действие может состоять из последовательности операторов, разделяемой ";" или переводом строки или закрывающей скобкой.
Возможны комментарии (как в shell "#.........").
Пример:
Для дальнейших примеров возьмем входной файл "f-awk" ( фамилия инициалы год-приема-на-работу возраст ):
Иванов И.И. 1980 50
Петров А.В. 1979 40
Сидоров С.К. 1979 40
Хведоров И.Х. 1970 60
|
awk '{print}' f-awk # выдает весь текст;
echo
awk '/до/ {print}' f-awk # выдает строки, где есть "до".
echo
awk '/до/ {}' f-awk # выдает строки, где есть "до"
echo
awk '/до/ {print("Привет!")}' f-awk
| Результат:
Иванов И.И. 1980 50
Петров А.В. 1979 40
Сидоров С.К. 1979 40
Хведоров И.Х. 1970 60
Сидоров С.К. 1979 40
Хведоров И.Х. 1970 60
Сидоров С.К. 1979 40
Хведоров И.Х. 1970 60
Привет!
Привет!
| Существует два оператора специального вида ("BEGIN"-начальные установки и "END" - "последействия"):
BEGIN {действие}
шаблон {действие}
шаблон {действие}
. . .
END {действие}
|
2. ВЫЗОВ awk
Возможны два основных варианта:
1)
awk [-Fc] 'prog.awk' [files]
| Это простейший случай, когда программа (заключенная в кавычки " ' ") находится в теле команды,
-Fc - флаг, меняющий стандартный разделитель полей на "c"
file - имя файла исходных данных, при его отсутствии - со стандартного входа. (Этот формат использован в начальных примерах).
cat f-awk | awk '/до/ {print}'
| и
awk '/до/ {print}' < f-awk
| дают результат, аналогичный
Для демонстрации действия флага "-Fc" рассмотрим вызовы:
awk '/до/ {print($2)}' f-awk
awk -F0 '/до/ {print($2)}' f-awk
| На экран будет выведено:
Первая команда awk выведет вторые поля (благодаря позиционной переменной "$2") строк, содержащие "до". (Кстати, позиционная переменная "$0" соответсвует всей строке).
Во втором случае, благодаря флагу "-F" стандартные разделители заменены на символ "0", т.е. теперь выбранные строки воспринимаются, как разбитые на следующие поля:
Сидоров С.К. 1979 40
---------------------^--------------------
1-е поле 2-е поле (пусто)
Хведоров И.Х. 1970 60
-----------------^---^--------------------
1-е поле 2-е 3-е поле (пусто)
| 2)
awk [-Fc] -f prog.awk [files]
| Флаг "-f" говорит о том, что awk-программу надо брать из файла, имя которого указано следом (имя может быть произвольным и расширение ".awk" добавлено здесь просто из эстетических соображений).
3. awk-ПЕРЕМЕННЫЕ И ВЫРАЖЕНИЯ
В языке awk выделяются две группы переменных:
предопределенные и декларированные в программе. Исходные значения предопределенных переменных устанавливаются интерпретатором awk в процессе запуска и выполнения awk-программы.
К предопределенным относятся: Умолчания:
NR номер текущей строки;
NF число полей в текущей строке;
RS разделитель строк на вводе; "\0"
FS разделитель полей на вводе; пробел и/или табуляция
ORS разделитель строк на выводе; RS
OFS разделитель полей на выводе; FS
OFMT формат вывода чиcл; "%.6g"
FILENAME имя входного файла.
Прочим переменным пользователь может присваивать начальные значения. По умолчанию "0" или пустая строка (что здесь равнозначно!).
Типы переменных:
— позиционные,
— числа с плавающей точкой,
— строка символов,
— массив.
Интерпретатор awk рассматривает переменную как строковую, пока не возникает необходимость выполнить операции:
— если пробел (конкатенация), то строки;
— если "+", то числа с плавающей точкой.
Примеры:
awk '{a = $3 $4; print a}' f-awk
awk '{a = $3+$4; print a}' f-awk
| Результат:
198050
197940
197940
197060
2030
2019
2019
2030
|
awk '{}
END {a = 2 + 2 ; print a}' < f-awk
awk '{}
END {a = 2 + "2" ; print a}' < f-awk
awk '{}
END {a = 2 + "два" ; print a}' < f-awk
awk '{}
END {a = "два"+"два" ; print a}' < f-awk
awk '{}
END {a = 2.2 + 2.000 ; print a}' < f-awk
| Результат:
Массив не объявляется, а начинает существовать в момент первого использования. Индекс массива - любое ненулевое значение или строка. Массивы ассоциативные, т.е. не по вычисляемому индексу, а по совпадению содержания, например:
day [Jan][31] = Mon
day [Feb][01] = Tue
day [Feb][02] = Wed
| Массивы удобно использовать при суммированиях, например записи выплат имеют вид (файл "p-1"):
John 100
Mary 200
Mary 200
John 100
John 300
|
awk '{sum[$1] += $2; print $1 sum[$1]} ' < p-1
| Результат (поименный нарастающий итог):
John100
Mary200
Mary400
John200
John500
| Операции как в Си:
=, +=, -=, *=, /=, %=, +, /, %, ++, --.
Сравнения чисел, если оба числа, иначе - строк:
<, <=, ==, !=, >=, >
Логические операции:
!, ||, &&
Операция "пробел" - конкатенация.
4. ПРИМЕРЫ awk-ПРОГРАММ
1)
awk '{print ($2, $3)}' f-awk
| Результат:
И.И. 1980
А.В. 1979
С.К. 1979
И.Х. 1970
| 2)
awk '/е/ {print ($2, $3)}' f-awk
| Результат:
3)
awk '/е/ {print ($1, 2000 - $3)}' f-awk
| Результат:
4)
awk '{ s = s + $4}
END {print ("Суммарный возраст:" s)
print ("Средний возраст:" s/NR)}' f-awk
| Результат:
Суммарный возраст:190
Средний возраст:47.5
| 5)
awk '{ s += $4 }
{print("NR="NR, "NF="NF)}
END {print ("FILENAME=" FILENAME)
print ("Значение позиционной переменной" $4 "\"пусто\" \
после окончания просмотра)")
print ("Суммарный возраст:" s)
print ("Средний возраст:" s/NR)}' f-awk
| Результат:
NR=1 NF=4
NR=2 NF=4
NR=3 NF=4
NR=4 NF=4
FILENAME=f-awk
| Значение позиционной переменной "пусто" после окончания просмотра)
Суммарный возраст:190
Средний возраст:47.5
|
5. СЕЛЕКТОРЫ
Здесь "селектор" следует понимать, как расширение понятия "шаблон", поскольку там где в структуре команды указан шаблон, в общем случае может стоять любой селектор.
ЗАМЕЧАНИЕ. Открывающая скобка действия "{" должна быть в строке селектора.
В качестве селектора может быть:
1) выражение;
2) шаблон;
3) их комбинация.
Соответсвующие примеры:
1)
$3 != $4 && $3 > 1970
$3 % 2 == 1
$1=="Иванов" - кавычки, чтобы воспринималось, как строка.
| 2)
/ab/ отлично от /a b/, / ab/ и /ab /
Nполя ^шаблон - по совпадению
Nполя !^шаблон - по несовпадению
| Пример:
awk '$3~0 {print} ' < f-awk
echo
awk '$3!~0 {print} ' < f-awk
|
Иванов И.И. 1980 50
Хведоров И.Х. 1970 60
Петров А.В. 1979 40
Сидоров С.К. 1979 40
| 3) Шаблон может формировать множество образцов или указывать, в каком месте поля искать:
/^a/ - поле начинается с "a"
/a$/ - поле кончается "a"
\+ - экранирует оператор
[abc] - любой из символов "a", "b" и "c"
[a-р] - любой символ диапазона
* - 0 или больше вхождений регулярного выражения
+ - 1 или больше вхождений регулярного выражения
? - 0 или 1 вхождение регулярного выражения
ab|cd - "ab" или "cd"
Примеры сочетаний:
awk ' $3~/(7[0-9])$/ {print} ' f-awk
| Результат:
Петров А.В. 1979 40
Сидоров С.К. 1979 40
Хведоров И.Х. 1970 60
| То есть в третьем поле выделить 70-е годы (7 и еще одна цифра от конца поля).
6. ЕЩЕ ПРИМЕРЫ
1)
awk '$1=="Иванов" {print} ' f-awk
| Результат:
2)
awk '$4/2==30 {print} ' f-awk
| Результат:
3)
awk '$3 != $4 && $3 > 1970 {print} ' f-awk
| Результат:
Иванов И.И. 1980 50
Петров А.В. 1979 40
Сидоров С.К. 1979 40
| 4)
awk '$1~/нов$/ {print} ' f-awk
| Результат:
5)
awk '/^Ив|дор/ {print} ' f-awk
| Результат:
Иванов И.И. 1980 50
Сидоров С.К. 1979 40
Хведоров И.Х. 1970 60
| 6)
awk '/1980/,/1979/ {print} ' f-awk
| Результат:
Иванов И.И. 1980 50
Петров А.В. 1979 40
|
7. ДЕЙСТВИЯ
В awk возможны следующие действия:
1) присваивания выражений;
2) операторы управления
3) операторы вывода;
4) встроенные функции.
ОПЕРАТОРЫ УПРАВЛЕНИЯ
Простейшие операторы
exit - завершить выполнение программы;
next - перейти к следующей строке, управление на начало awk-программы;
break - выход из цикла;
continue - переход к следующей итерации;
Структурные операторы
if (условие) {операторы} [else {операторы}]
while (условие) {операторы}
for (выражение; условие; выражение) {операторы}
for (индекс in имя_массива) {операторы}
| Структурные операторы в значительной степени аналогичны соответсвующим операторам Си.
В последнем случае для каждого индекса выполняется блок. Текстовые индексы рассматирваются в лексикографическом порядке.
Примеры
1)
awk ' $4~/40/ {if($3<=1980) {print("Фамилия: " $1 ) M["40"]++}} $4~/50/ {M["50"]++}
END {for(i in M) {print(" i =" i " M[" i "]=" M[i])}} ' f-awk
| Результат:
Фамилия: Петров
Фамилия: Сидоров
i =40 M[40]=2
i =50 M[50]=1
| 2)
awk ' BEGIN {ORS = " "}
{ for(k=NF; k>0; --k) {print $k}
{print RS}
} ' f-awk |
sed 's/^ //'
| Результат:
50 1980 И.И. Иванов
40 1979 А.В. Петров
40 1979 С.К. Сидоров
60 1970 И.Х. Хведоров
| Здесь, кроме изменения очередности полей в строке на противоположное (что делает цикл "for"), предварительно устанавливается выходной разделитель - пробел и весь результат предварительно выдается в одну строку, поэтому после обработки каждой строки выдается команда "print RS" для перевода выходной строки. Редактор sed подключен через конвейер, чтобы убрать возможные пробелы в начале строки.
Существенная деталь. Если запустить лишь базовую структуру
awk '{ for(k=NF; k>0; --k) {print $k}}' f-awk
| то все поля исходной таблицы с изменениями порядка внутри прежних строк получим вытянутыми в один столбец переводом строки:
50
1980
И.И.
Иванов
40
1979
А.В.
Петров
40
1979
С.К.
Сидоров
60
1970
И.Х.
Хведоров
| Однако, если поставим ";" сразу после условия, т.е. сделаем пустое тело цикла, за пределы которого вынесен "print $k"
awk '{ for(k=NF; k>0; --k); {print $k}}' f-awk
| то получим исходную таблицу
Иванов И.И. 1980 50
Петров А.В. 1979 40
Сидоров С.К. 1979 40
Хведоров И.Х. 1970 60
| поскольку "$k" после выхода из цикла будет иметь значение "0", а "$0" - соответсвует всей строке в качестве значения(!), то "print $k" будет после каждого цикла печатать полные строки.
8. ВВОД И ВЫВОД ДАННЫХ
В общем случае в команде awk может быть указано несколько файлов.
Напомним форматы вызова команды:
awk [-Fc] 'prog.awk' [file ...]
awk [-Fc] -f prog.awk [file ...]
^
| Файлы обрабатываются последовательно в указанном порядке.
Это можно использовать для "настройки" awk команды при обработке последующих файлов.
Пусть файл "f0" имеет вид:
А файл awk-программы "prim.awk" имеет вид:
FILENAME == "f0" { # если просматривается файл "f0"
w1 = $2 # присваиваются значения переменным
w2 = $1 # w1 - Сидоров, w2 - 60
}
$1 == w1 { print ("фамилия: "$1)} # означенные переменные
$4 == w2 { print ("годы: " $4)} # используются в
# селекторах
| Тогда при вызове команды
Результат:
фамилия: Сидоров
годы: 60
| То есть второе поле файла "f0" дает значение переменной "w1", а первое - "w2". Эти переменные используются в селекторах при обработке файла "f-awk".
Изменим программу в файле "f-awk":
FILENAME == "f0" {
w1 = $2
w2 = $1
next
}
{ print ("фамилия: "$1); next}
$4 == w2 { print ("годы: " $4)}
| Результат:
фамилия: Иванов
фамилия: Петров
фамилия: Сидоров
фамилия: Хведоров
| Если исключить первый оператор "next", то в выходном файле появится дополнительно первая строка:
поскольку выбирается снова первое поле в певом файле ("f0").
Если исключить и второй "next", то в выходном файле появится дополнительно последняя строка:
которая ранее не выводилась, так как в предшествующий оператор "{ print ("фамилия: "$1)}" заканчивал работу на последней строке файла "f-awk", поэтому "next" пропускал последующую командную строку
$4 == w2 { print ("годы: " $4)}
| И еще одна модификация в связи с вводом данных с терминала. Вызов команды будет:
А файл "prim.awk" примет вид:
BEGIN { print ("Введите годы и фамилию: ")}
FILENAME == "-" {
w1 = $2
w2 = $1
next
}
$1 == w1 { print ("фамилия: "$1); next}
$4 == w2 { print ("годы: " $4)}
|
9. ВСТРОЕННЫЕ ФУНКЦИИ
Встроенные функции:
sin (expr) синус expr
cos (expr) косинус expr
exp (expr) возведение в степень expr
log (expr) натуральный логорифм expr
sqrt (expr) извлечение корня expr
int (expr) целая часть числа
length (s) длина строки s
printf (fmt, ...) форматирование (аналогично Си) по спецификации fmt.
substr (s, m, n) подстрока в n символов строки s, начинающаяся с m.
getline () чтение следующей строки. 0 - конец файла, иначе 1.
index (s1, s2) номер позиции, с которой s1 совпадает с s2, иначе 0.
split (s, M, c) строка s разбивается элементы массива M по разделителю c (по умолчанию FS=" "); функция возвращает число полей.
Примеры.
1)
awk ' BEGIN {FS = "."; a=0}
length ($1) > 8 {print (length ($1), $0);
a++
}
END {print ("Найдено строк: " a) }' f-awk
| Результат:
9 Сидоров С.К. 1979 40
10 Хведоров И.Х. 1970 60
Найдено строк: 2
| Здест поля разделяются по ".", выбираются строки у которых длина первого поля больше 8-ми, и их длина "length ($1)" печатается перед строкой "$0".
2)
awk '{i=split($0, Name, ".");
for (j=1; j<=i; j++)
print ("Name[" j "]=" Name[j])
}' f-awk
| Результат:
Name[1]=Иванов И
Name[2]=И
Name[3]= 1980 50
Name[1]=Петров А
Name[2]=В
Name[3]= 1979 40
Name[1]=Сидоров С
Name[2]=К
Name[3]= 1979 40
Name[1]=Хведоров И
Name[2]=Х
Name[3]= 1970 60
| 3)
awk '{print (length)}' f-awk
| Результат:
Поскольку все строки были выровнены пробелами, а в длине строки учитываются все символы до конца строки.
4)
awk '{printf "%7.2f %s\n", NR, $0}' f-awk
echo
awk '{printf "\t%s %s \n", NR, $0}' f-awk
| Результат:
1.00 Иванов И.И. 1980 50
2.00 Петров А.В. 1979 40
3.00 Сидоров С.К. 1979 40
4.00 Хведоров И.Х. 1970 60
1 Иванов И.И. 1980 50
2 Петров А.В. 1979 40
3 Сидоров С.К. 1979 40
4 Хведоров И.Х. 1970 60
| (Aho, Weinberg, Kernigan)
Ссылка на обсуждение: http://forum.lissyara.su/viewforum.php?f=32.
|
|
2014-07-27, lissyara
gmirror
Удалённое создание софтверного зеркала средствами gmirror, на диске разбитом с использованием gpart. Использование меток дисков для монтирования разделов.
2013-08-20, zentarim
Scan+Print server FreeBSD 9
Настройка сервера печати и сервера сканирования под управлением операционной системы FreebSD 9 для МФУ Canon PIXMA MP540
2011-11-20, BlackCat
Разъём на WiFi-карту
Делаем съёмной несъёмную антену на WiFi-карте путём установки ВЧ-разъёма
2011-09-14, manefesto
Настройка git+gitosis
Настройка системы контроля версия исходного кода в связке git+gitosis+ssh
2011-08-14, zentarim
Wi-FI роутер + DHCP + DNS
Настройка Wi-Fi роутера на Freebsd 8 + DNS сервер + DHCP сервер: чтобы Wi-Fi клиенты были в одной подсети с проводными, проводные и беспроводные клиенты получали адреса автоматически по DHCP, кэширующ
2011-06-15, -ZG-
Охранная система на FreeBSD+LPT
В этой статье описана попытка реализации простой охранной системы на базе FreeBSD с подключением к ней охранных устройтсв на LPT порт и видеорегистрацией.
2011-03-13, terminus
ng_nat
Описание работы ng_nat, практическое использование, достоинства и недостатки в сравнении с ipfw nat
2011-02-20, Капитан
Nagios+Digitemp
Статья описывает создание системы оповещения о превышении температуры в специальных помещениях на основе Nagios с использованием программы Digitemp.
2011-02-17, Le1
Zyxel Configuration
Скрипт для массового изменения конфига свичей Zyxel. Берет из файла iplist список ip-шек, заходит последовательно на каждый и выполняет комманды из файла commands, записывая происходящее в лог файл.
2011-02-16, fox
hast carp zfs ucarp cluster
HAST (Highly Available Storage), CARP, UCARP, ZFS, Cluster настройка и одаптация плюс личные размышления…
2011-02-04, BlackCat
Восстановление ZFS
История о том, как был восстановлен развалившийся RAIDZ ZFS-пул (перешедший в FAULTED) с помощью скотча и подручных средств. Или о том, какие приключения ожидают тех, кто не делает резервных копий.
2011-02-03, Капитан
1-Wire
Статья описывает самостоятельное изготовление контроллера DS9097 для съёма показаний с датчиков температуры DS1820 с помощью программы Digitemp.
2011-01-28, Капитан
Температура в серверной
Статья описывает построение системы наблюдения за температурой в помещении серверной с использованием программы Digitemp и выводом графиков в MRTG
2011-01-21, m4rkell
Syslog server
Как то буквально на днях, у нас завалилось, что то в еве) или не в еве не суть. Суть в том, что когда захотели снять логи с хостов esx обнаружили, что хранят эти негодяи логии только за последнии сутк
2011-01-07, lissyara
Canon/gphotofs
Монтирование цифровых фотоаппаратов Canon (PTP) как файловой системы, автоматизация этого процесса через события devd и внешние скрипты.
2010-12-13, Al
IPSec
Описание принципов работы IPSEC и способов аутентификации.
2010-12-07, manefesto
FreeBSD on flash
Было принято решении переехать на USB Flash и установить минимальный джентельменский набор для работы своего роутера. Делаем =)
2010-12-05, Fomalhaut
root ZFS, GPT
Инструкция по установке FreeBSD с использованием в качестве таблицы разделов GPT и в качестве основной файловой системы - ZFS
2010-09-05, Cancer
Настройка аудиоплеера на ximp3
Цели: Простенький аудиоплеер, для того что бы тетя продавец в магазине утром пришла нажала на кнопку Power и заиграла в зале музыка, так же был доступ по сети, общая шара куда можно заливать музыку, к
2010-08-31, Cancer
Установка и настройка OpenVPN
На днях появилась задача - объединить головной офис и 3 филиала в одну сеть через интернет посредством OpenVPN, чтобы люди могли подключаться через RDP к базам 1С на серверах.
2010-08-25, manefesto
freebsd lvm
Использование linux_lvm для работы с LVM разделами из-под FreeBSD. Проблемы которые возники при монтирование lvm раздела
2010-04-30, gonzo111
proftpd file auth"a
Proftpd - квоты и авторизация из файлов, без использования базы данных и/или системных пользователей
2010-04-22, lissyara
tw_cli
Пошаговая инструкция по восстановлению RAID на контроллере 3ware, из которого выпал один диск. Настройка мониторинга состояния рейда и отчётов о его состоянии на email.
2010-04-14, fox
MySQL Master+Master
MySQL (Master Master) and (Master Slave) Как настроить репликацию…
2010-03-09, terminus
DNS zones
Краткий ликбез про управление DNS зонами. Примеры проведения делегирования прямых и обратных DNS зон.
2010-03-09, aspera
Squid+AD (group access)
Настройка прокси сервера SQUID с автроризацией пользователей в AD. Разделение пользователей на группы
2010-03-02, BlackCat
Шлюз: Часть 4
Настройка дополнительных сервисов: синхронизация времени (OpenNTPD), клиент DynDNS.org.
2010-03-01, BlackCat
Шлюз: Часть 3
Настройка DHCP и DNS серверов для работы внутри частной сети, c поддержкой внутренних (частных зон) DNS, а так же интеграция DHCP и DNS сервисов.
2010-03-01, BlackCat
Шлюз: Часть 2
Конфигурация МСЭ pf для проброса портов с изменением порта назначения и без, а так же поддержки активного режима FTP и ограничения максимального размера сегмента
2010-03-01, BlackCat
Шлюз: Часть 1
Быстрая настройка шлюза/маршрутизатора с установлением PPPoE-соединения, поддержкой NAT и DNS-forwarding.
2010-02-23, Morty
darkstat
Простая считалка траффика, со встроенным веб-сервером. Очень маленькая, может делать отчеты трафика по хостам, портам, протоколам, а также строить графики
2010-01-23, gonzo111
squid+sams+sqstat
Пилим squid и sams - примеры конфигов с объяснениями. Установка SqStat.
2009-12-19, schizoid
mpd5 + radius + ng_car + Abills
Настройка pppoe-сервера с биллинговой системой Abills и шейпером ng_car
2009-11-16, lissyara
UFS->ZFS
Удалённая миграция с UFS на ZFS. Загрузка с раздела zfs. Настройка для работы с малым количеством памяти под архитектурой i386.
2009-11-13, gx_ua
fusefs-ntfs
Установка, настройка и использование fusefs-ntfs, драйвер NTFS, предназанченного для монтирования NTFS разделов под FreeBSD
2009-11-12, Morty
LiveCD
Создание собственного LiveCD с необходимыми вам изменениями, автоматизирование данного процесса, а так же вариант скоростной сборки СД.
2009-09-27, lissyara
Samba как PDC
Контроллер домена - аналог M$ NT4 домена под самбой, без использования LDAP и прочей хиромантии. Просто и быстро =)
2009-08-30, terminus
ipfw nat
Подробное руководство по ipfw nat, сложные случаи конфигурации.
2009-08-24, levantuev
HotSpot
Установка Hotspot системы в общественное заведение.
2009-08-18, lissyara
diskless
Создание бездисковых терминалов под управлением FreeBSD - с загрузкой по сети. Используются для старта rdesktop и подключения к виндовому серверу терминалов.
2009-07-29, BAV_Lug
Видеонаблюдение
Настройка бюджетного варианта видеонаблюдения на удаленном объекте
2009-07-22, Cancer
OpenLDAP адресная книга
Настройка и создание адресной книги на базе OpenLDAP + phpLDAPadmin
2009-06-30, SergeySL
AimSniff
Руководство по созданию системы мониторинга ICQ-переписки на базе AimSniff, использующей базу данных MySQL для хранения и Web-интерфейс WAS (Web Aim Sniff) для просмотра перехваченных сообщений
2009-06-25, atrium
Управление правами доступа
Полномочия пользователей и файлов, принадлежащих им, формирует концепцию ОС UNIX.
2009-06-16, DNK
Exim+PgSQL
Установка почтовой системы exim+pgsql на FreeBSD 7.1
2009-05-30, mvalery
HDD(mbr) -> HDD(gpt)
Как разбить диск размером более 2TB на разделы, сделать загрузочным, а затем перенести на него информацию с рабочей системы — донора.
2009-05-22, Cancer
SendXMPP
Отправка сообщений на Джаббер сервер по средствам SendXMPP
2009-05-11, Raven2000
Network UPS Tools
Network UPS Tools представляет собой набор программ, которые обеспечивают общий
интерфейс для мониторинга и администрирование UPS оборудования.
2009-04-29, m0ps
IPSEC over GRE with RIP
Пример IPSEC over GRE и динамическим роутингом (RIP), с ADSL в качестве последней мили на оборудовании Cisco.
2009-04-24, WhiteBear777
qemu network
Появилась необходимость поставить на БСД эмулятор(qemu) и настроить в качестве гостевой ОС Windows XP, предоставив ей выход в локалку и в сеть internet...
|