15.10.2008

Компьютерная грамотность помогает сохранить мозг в старости

Американские учёные замерили активность мозга у людей 55-78 лет во время их работы на компьютере. Медики и психиатры проанализировали результаты и пришли к выводу, что использование технологий на самом деле может принести пользу для стареющего мозга. По крайней мере, если в пенсионном возрасте часто работать на компьютере, то более вероятно, что возможности мозга сохранятся на более долгий срок.

Во время опытов людей садили прямо внутрь магнитно-резонансного сканера и заставляли продолжительное время работать с поисковыми системами в интернете. Исследование проводилось в двух группах: первая — из продвинутых пользователей, а вторая — из людей, слабо разбирающихся в технологиях. Так вот, первая группа продемонстрировала вдвое больший уровень активации нейронов. Необычно высокая активность проявилась в областях мозга, которые отвечает за принятие решений и логику (а не только в визуальном кортексе, как это бывает при чтении книг). У людей с низким уровнем компьютерной грамотности такой активности мозга не наблюдалось.

А если бы их заставили в linux подключиться к провайдеру по VPN трудно и предстваить как возросла бы их мозговая активность :)

05.10.2008

Автоматизация проверки доступности сети

Друг попросил помочь решить проблему с автоматизацией проверки доступности подсети.

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

Решение выглядит так:

#!/bin/bash

ip="192.168.4.254"
count=3
attempt=3
file="./time"

result=$(ping -c ${count} ${ip} | tail -2 | head -1 | awk '{print $4}')

if [ $result -eq 0 ]; then
if [ -f ${file} ]; then
f=$(cat ${file})
if [ ${f} -eq ${attempt} ]; then
rm ${file}
/etc/init.d/pptpd restart
else
att=$(expr ${f} + 1)
fi
else
att=1
fi

if [ ! -z ${att} ]; then
echo ${att} > ${file}
fi
else
if [ -f ${file} ]; then
rm ${file}
fi
fi

Что делает этот скрипт? Рассмотрим подробнее:

1. Переменные:
* ip - ip-адрес хоста, который будем пинговать
* count - количество пакетов, отсылаемых ping'ом
* attempt - количество безуспешных попыток "достучаться" до хоста
* file - полное имя файла, в котором будет храниться количество безуспешных попыток
* result - количество пакетов, прошедших в результате выполнения ping
2. Логика:
1. $result -eq 0 - если не вернулось ни одного пакета, значит, связи нет и надо это дело обработать:
1. -f ${file} - файл есть (не впервые обнаруживаем отсутствие связи), считаем значение количества попыток из файла (f=$(cat ${file})):
1. Если количество попыток ещё не равно заданному допустимому значению, увеличиваем количество попыток и значение помещаем в переменную (att=$(expr ${f} + 1));
2. Если количество попыток уже равно заданному допустимому значению (${f} -eq ${attempt}), удаляем файл и выполняем необходимую команду или скрипт (/etc/init.d/pptpd restart);
2. Если файла нет (значит это первая попытка обнаружившая пропажу связи), поместим значение 1 в переменную для использования в дальнейшем и будем знать, что один раз уже было :)
3. Если есть хоть какое-то непустое значение переменной (! -z ${att}), поместим его в файл (echo ${att} > ${file})
2. если связь есть или она появилась с момента последней проверки и присутствует файл, файл надо удалить

Источник: http://www.f-notes.info

Пакетное изменение разрешений файлов и каталогов

Частенько возникает необходимость изменения разрешений большого количества файлов и каталогов в пакетном режиме.

Можно, конечно, сделать и так:

chmod -R 755 /mydir

Просто. Но неправильно в большинстве случаев, так как в этой командой меняются разрешения как файлов, так и каталогов. И, наверняка, вам не понравится, когда, вдруг, вы не сможете попасть в каталог, потому что выставили на него неверные разрешения, например, так chmod -R 444 /mydir...

Чтобы изменить разрешения файлов независимо от разрешений каталогов и наоборот я делаю следующее:

* выставляем разрешения на файлы:

find /mydir -type f -exec chmod 644 {} \;

* выставляем разрешения на каталоги:

find /mydir -type d -exec chmod 755 {} \;

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

FTP-сервер в "песочнице": как добраться до данных вне неё?

Источник

Когда ftp-сервер работает в "песочнице" (используется chroot), задействовать обычные симлинки (symlinks) на директории, расположенные вне корневой директории ftp-сервера, не представляется возможным, так как для ftp-сервера они находятся вне доступного дерева каталогов. Но держать абсолютно все файлы и каталоги в корневом каталоге ftp-сервера тоже не всегда возможно и рационально.

В этом случае спасает опция -o bind или --bind утилиты mount. Расмотрим, как это работает.

Допустим, что корневой каталог ftp-сервера - /var/ftp. А нам нужно, чтобы пользователи нашего ftp-сервера получили доступ "только на чтение" к каталогу music, который лежит на сервере в каталоге /home/user/, т.е. полный путь - /home/user/music. Решение нашей задачи выглядит так:

1. Создаём каталог - точку монтирования:


mkdir -p /var/ftp/music


2. Выполняем монтирование так:


mount -o ro,bind /home/user/music /var/ftp/music


или так:


mount -o ro --bind /home/user/music /var/ftp/music


После этого, наш ftp-сервер сможет получить доступ к этим данным.

Обратите внимание, что данная возможность появилась в linux с версии ядра 2.4.0

или внести изменения в файл /etc/fstab добавив строку:

/home/budda/downloads /var/ftp/pub/disk80 -o ro,rbind 0 0



Обработка текстов в *nix

Источник

Очень часто администраторам *nix-систем приходится выполнять различные выборки, сортировки, группировки неструктурированных данных. Благо система имеет уйму утилит для этого.

Рассмотрим в примерах выборку определённых полей файла. Надо отобрать из файла данные размещённые в первой, пятой и шестой колонках файла /etc/passwd. Существует множество решений, ниже приведены лишь несколько из них:

1. cat /etc/passwd | awk -F\: '{print $1" "$5" "$6}'

...
avahi Avahi mDNS daemon,,, /var/run/avahi-daemon
haldaemon Hardware abstraction layer,,, /home/haldaemon
...

2. cat /etc/passwd | awk -F\: '{print $1":"$5":"$6}'

...
avahi:Avahi mDNS daemon,,,:/var/run/avahi-daemon
haldaemon:Hardware abstraction layer,,,:/home/haldaemon
...

3. cat /etc/passwd | cut -d":" -f1,5,6

...
avahi:Avahi mDNS daemon,,,:/var/run/avahi-daemon
haldaemon:Hardware abstraction layer,,,:/home/haldaemon
...

4. cut -d":" -f1,5,6 /etc/passwd

...
avahi:Avahi mDNS daemon,,,:/var/run/avahi-daemon
haldaemon:Hardware abstraction layer,,,:/home/haldaemon
...

Чем отличаются друг от друга эти варианты?

Первые два варианта: 1 и 2, - используют cat и awk. Первая утилита выводит содержимое файла /etc/passwd, вторая отбирает необходимые поля. "-F\:" указывает на то, что разделителем полей в потоке служит двоеточие. Обратный слэш (\) перед двоеточием предписывает читать двоеточие, как двоеточие и не пытаться обработать его, как спецсимвол. В общем-то, обратный слэш используется в данном случае для перестраховки. Обратите внимание, что в первом случае мы вывели поля (нумеруются начиная с 1), разделённые пробелом, а во втором - двоеточием. Если вам необходимо модифицировать вывод, используйте эту связку, если вам нужно просто вывести требуемые поля пользуйтесь вариантами три или четыре.

В третьем варианте используется связка cat и cut. Первый выводит, второй режет :) Эту связку можно можифицировать так, как указано в варианте 4, так как cut может принимать на вход и поток (вариант три), и файл (вариант четыре). -d":" - указывает считать разделителем полей двоеточие. Здесь разделитель указан в кавычках, поэтому использовать обратный слэш (\) нет необходимости. -f1,5,6 говорит о том, что нужно отобразить 1-ое, 5-ое и 6-ое поля. Имейте ввиду, что для cut порядок полей, пречисленных после -f, не имеет значения. Поля будут выводится так, как они расположены в файле. Другими словами, вы просто указываете какие поля вас интересуют, а не порядок вывода полей. Если вам необходимо изменить порядок полей, воспользуйтесь awk.Например, так:
cat /etc/passwd | awk -F\: '{print $6" "$5" "$1}'

...
/var/run/avahi-daemon Avahi mDNS daemon,,, avahi
/home/haldaemon Hardware abstraction layer,,, haldaemon
...

Кроме того, awk также умеет получать данные не только из потока, но и напрямую из файла. Т.е. последний пример мы можем переписать так:
awk -F\: '{print $6" "$5" "$1}' /etc/passwd

...
/var/run/avahi-daemon Avahi mDNS daemon,,, avahi
/home/haldaemon Hardware abstraction layer,,, haldaemon
...


Почему я чаще пользуюсь конструкцией "cat | awk" или "cat | cut"? Всё просто. Когда я пытаюсь отобрать поля, я не всегда помню их точное положение в файле. Тогда я делаю:
cat /etc/passwd

Получаю полный список. После чего, уточнив нужные поля, нажимаю стрелочку вверх (в bash это вызов предыдущей команды) и дописываю | awk........

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


03.10.2008

Автодополнение параметров команд в bash

В bash по умолчанию автодополнение параметров команд не работает, например:
apt-get dist-upgrade (за исключением Ubuntu)
Однако решается эта задача очень просто: достаточно раскоментировать в /etc/bash.bashrc следующие строки:

# enable bash completion in interactive shells
#if [ -f /etc/bash_completion ]; then
# . /etc/bash_completion
#fi

После этого автодополнение будет работать буквально везде, где только можно себе представить, например: bash [TAB] – автодополнение apt-cache --search и др.