Официальная возможность получить лицензионный софт бесплатно.
Giveaway of the Day
Это не реклама!

Щелкните для получения прогноза по Биробиджану


суббота, 30 августа 2014 г.

Внешний выпуск "Биробиджанского Ведомасона"


(материал предоставлен внештатным корреспондентом ZEROC)
(первоисточник)


Cобраны неопровержимые доказательства вторжения Мордорской Федерации на территорию демократической Укроббитании.



Бронекавалерийская дивизия Черного Властелина захватила Новоазовск и Хоббитон и вышла к Мариуполю.



четверг, 28 августа 2014 г.

Формирование списка чисел заданной ширины: seq

Понадобилось мне создать энное количество каталогов вида "каталогХХХ", где ХХХ - последовательные номера в диапазоне от 0 до 999, но не обязательно весь диапазон, например, от 6 до 155. При этом ХХХ - всегда три знака, стало быть

Конструкция for и "развёртывание фигурных скобок" (brace expansion - ABSG, ch.36, p.528)?

#start - начальный номер, finish - конечный
for i in {$start..$finish}; do ... ; done


Не пойдет! Потому что "развертывание" не поддерживает использование переменных, и $i примет текстовое значение "{начальный_номер..конечный_номер}" вместо ожидаемого набора чисел в нужном интервале.

Может вернуться ко временам DOS и сделать три вложенных цикла? Можно, и оно даже будет работать:

for i in {0..9}
  for j in {0..9}
    for k in {0..9}
      if [ $i$j$k -lt $start ] || [ $i$j$k -gt $finish ] then break
      mkdir каталог$i$j$k
...

Но зачем крутить лишние циклы и делать кучу лишних проверок на попадание в диапазон? В общем, команда seq рулит! Потребовалось некоторое время, чтобы вспомнить формат pfintf-a, но оно того стоило.

Сначала попробовал с ключом -w - выровнять ширину: если числа в последовательности имеют разную ширину, например "1" и "123", то меньшие будут дополняться ведущими нулями - для диапазона 1..111 "1" превратится в "001", "10" - в "010". Чудесно! Чудесно? Мне-то надо, чтобы было всегда три знака, независимо от конечного значения, а здесь три знака будут только если конечное значение трехзначное, увы. (с тоской вспоминаю Clarion, где такие вещи решались на "раз-два")

Что ж, раз ключ -w не подходит, попробуем поиграться с -f - формат вывода. А вот это - то, что доктор прописал:

for i in $( seq -f %03g 0 $max_dir_number )
do
    dir_name="каталог$i"
    mkdir $dir_name
    chown $owner_name:$owner_group $dir_name
    chmod 777 $dir_name
done


формат %03g как раз делает то, что я хочу: дополняет нулями слева (0), до трех знаков (3). Честно скажу, не помню, для чего суффикс "g", я тупо взял его из подобного примера. Но работает именно так, как надо.

среда, 20 августа 2014 г.

SAMBA: несколько полезных команд по работе с...

1. добавить пользователя в группу

net rpc group addmem группа пользователь -U админ -S сервер_каталога

ГРУППУ и ПОЛЬЗОВАТЕЛЯ можно указывать без домена, если явно указываешь СЕРВЕР_КАТАЛОГА. Впрочем, я не проверял, можно ли не указывать СЕРВЕР_КАТАЛОГА, но просто указать домен.
АДМИН - пользователь, имеющий права на изменение групп и учетных записей пользователей


Почему rpc, а не ads? Потому что с ads что-то не получалось, а по rpc прошло "со свистом". Разбираться дальше было лень

2. удалить пользователя из группы

аналогично, но заменить addmem на delmem

3. удобный список групп, в которых состоит пользователь

id домен\\пользователь|sed 's/\,/\n/g'|sort -t \\ -k 2


Вывод будет примерно такой:
 
$ getent passwd contoso\\gates_wh
CONTOSO\gates_wh:*:129125:100513:Gates, William Henry, III:/home/CONTOSO/gates_wh:/bin/false
 
$ id contoso\\gates_wh|sed 's/\,/\n/g'|sort -t \\ -k 2
113723(CONTOSO\acl_cnt304421_p-sam4200sizpi)
129126(CONTOSO\acl_cnt304421_p-sam4200sizpi-def)
122960(CONTOSO\acl_cnt30srv012_031rw)
122867(CONTOSO\acl_cnt30srv012_o)
113709(CONTOSO\acl_cnt30srv041_p022f)
123333(CONTOSO\acl_cnt30srv041_p056f)
122903(CONTOSO\acl_cnt30srv042_valid)
122900(CONTOSO\acl_cnt30srv201-l-r)
uid=129125(CONTOSO\gates_wh) gid=100513(CONTOSO\domain users) группы=100513(CONTOSO\domain users)
122893(CONTOSO\rbl_user-gpo9)

То есть, sed-ом заменяем запятые, которые выдает стандартная id, перечисляя список групп, на переводы строки, чтобы группы вывелись в столбик.
Дальше сортируем полученный столбец. Можно было, в принципе, вырезать GID-ы, но лень, поэтому, чтобы сортировать не по GID-ам, а по названиям групп, объявляем символ "\" разделителем полей (это будет "\" между ДОМЕНОМ и ПОЛЬЗОВАТЕЛЕМ), и сортируем не с начала строки, а по второму полю.

понедельник, 11 августа 2014 г.

sed: чистка логов

Сошел с ума SARG: после настройки авторизации в сквиде через AD в логах стали появляться записи вида:

что-то-там ... домен\имя_пользователя ...

SARG, видя такое безобразие, в итоговом отчете всем пользователям присваивает имя "домен", из-за чего отчет становится нечитаемым.

Пришлось думать, как почистить логи прежде чем скормить SARG-у

cat лог|sed 's/домен\\//'|sed 's/.*TCP_DENIED.*$//'|sed '/^$/d'

первый sed убирает из лога упоминания про "домен\"
второй убирает все строки, где пользователь получил отказ в доступе
третий убирает оставшиеся пустые строки.

Наверное, будет логичнее совместить второй и третий и поставить их перед первым, чтобы не делать лишние замены "домен\" в строках, которые всё равно будут удалены.

Да, более правильной и быстрой оказалась такая конструкция:

cat лог|sed '/^.*TCP_DENIED.*$/d'|sed 's/[дД][оО][мМ][еЕ][нН]\\//'

Возможно, удалось бы совместить обе замены в одну, но уже лень.

пятница, 8 августа 2014 г.

HDD-бокс Zalman ZM-VE300

Приобрел эту интересную штуку.
Описание на сайте производителя.

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

Чем же так хорош этот бокс, что за него в розницу отдал 2100 рублей?