Bash: как найти последний созданный в папке файл:
ls -t | head -1
Если нужно найти файл определённого типа, то можно вот так:
ls -t | grep jpg | head -1
Bash: как найти последний созданный в папке файл:
ls -t | head -1
Если нужно найти файл определённого типа, то можно вот так:
ls -t | grep jpg | head -1
Разберёмся, как объяснить малинке через коммандную строку, с какой громкостью должен воспроизводиться звук. Самый простой способ — через псевдографическую программу alsamixer (вроде из пакета alsa-utils) — запускаем и двигаем ползунок вверх-вниз, соответственно регулируется громкость. Выход кнопкой Esc.
┌───────────────────────────── AlsaMixer v1.0.28 ──────────────────────────────┐ │ Card: bcm2835 ALSA F1: Help │ │ Chip: Broadcom Mixer F2: System information │ │ View: F3:[Playback] F4: Capture F5: All F6: Select sound card │ │ Item: PCM [dB gain: -10.00] Esc: Exit │ │ │ │ │ │ ┌──┐ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │▒▒│ │ │ │▒▒│ │ │ │▒▒│ │ │ │▒▒│ │ │ │▒▒│ │ │ │▒▒│ │ │ │▒▒│ │ │ │▒▒│ │ │ ├──┤ │ │ │OO│ │ │ └──┘ │ │ 58 │ │ < PCM > │ │ │ │ │ └──────────────────────────────────────────────────────────────────────────────┘
Для интерактивного режима alsamixer пойдёт, но для скрипта нет. Для скрипта нам подойдёт программа amixer. Используется так:
pi@kmsvsr-raspberrypi ~/usr/bin $ amixer cset numid=1 -- 400 numid=1,iface=MIXER,name='PCM Playback Volume' ; type=INTEGER,access=rw---R--,values=1,min=-10239,max=400,step=0 : values=400 | dBscale-min=-102.39dB,step=0.01dB,mute=1
Здесь громкость регулируется последним числом, оно должно быть в интервале от -10239 (тишина) до 400 (на полную), при этом половина громкости соответствует примерно -1000.
Добавил своей малинке функцию кухонного таймера. Написал короткий скрипт для воспроизведения звукового файла через назначенный пользователем интервал времени. Скрипт получился такой:
#!/bin/bash # kmstimer echo "Таймер сработает через $1 минут" for ((i=0; i<$1; i++)) do echo "Прошло $i минут" sleep 60 done echo "Время вышло!" echo "Время вышло" | festival --tts --language russian mpg123 /home/pi/usr/share/sounds/default.mp3
Если на системе установлен синтезатор речи festival, то система получеловеческим голосом объявит, что время вышло, после чего воспроизведёт указанный в скрипте музыкальный файл.
Пример использования скрипта следующий:
/bin/kmstimer 15
где 15 — время в минутах.
Получившимся скриптом удобно пользоваться с android-смартфона, например через программу Raspi SSH. Добавляем новые кнопки с названием вроде «Таймер 15 минут (гречка)» и соответственно кодом «kmstimer 15» — таймер будет включаться нажатием одной кнопки на смартфоне.
yui-compressor — программа для сжатия JavaScript и CSS
Страница проекта здесь http://yui.github.io/yuicompressor/
Программа консольная, написана на Java
Используется примерно так:
java -jar yuicompressor-x.y.z.jar [options] somescript.js > compressed.js
zip -9 -r ./folder.zip ./folder
Здесь -9 — степень сжатия, а -r — рекурсия для содержимого папки
Как в Linux поменять слово в файле одной командой:
sudo sed -i 's/petra/qiana/' /etc/apt/sources.list
Пример использования команды 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
Для дистрибутива Raspbian по умолчанию логин pi, пароль raspberry
Стандартная консольная программа для изменения настроек малинки — raspi-config
Стандартная консольная команда для запуска оконного менеджера — startx
Максимальна скорость сети по Ethernet на самом деле не 100 Мбит/с, а около 24 Мбит/с (вроде потому что через шину USB)
Для ножек GPIO стандартное напряжение 3.3В, вроде как если превысить, то сгорит
Для удобства работы с ножками GPIO, на них можно одевать фишки с проводами, которые можно надёргать с материнской платы из старого системника (LPT, USB, звук от CDROM, фишки от кулеров и т.п.), ну или можно купить нормальные провода в радиотоварах.
Для подключения светодиодов во всех источниках советуют использовать дополнительное сопротивление, чтобы не спалить.
Скачать дистрибутив в виде архива 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
Сперва выяснить ip-адрес, который получила малинка:
Подключиться к командной строке по SSH
Через программу raspi-config
В файле /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
Интерактивный справочник по ножкам
Это пример выдачи напряжения 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 (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, пока не закончен.
Имеется в наличии
Бак водонапорный к нему подключены 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 — работа с переменными