Все новости с меткой: bash


Простой скрипт, который может пригодиться для периодического дампа всех MySQL баз данных на вашем сервере + заархивировать по отдельности каждую папку с сайтом. Код под катом


Подробнее




Для начала нужно установить программку на свой телефон - Packet Capture. Программа  является прокси-сервером, в котором для мониторинг SSL-траффика используется аттака "Man in the Middle". В программу добавляется подставной сертификат, который для клиента считается доверенным. А сам прокси-сервер устанавливает две независимсые SSL-сессии, анализируя дешифрованные данные. А рут не нужен потому, что приложуха использует VPNService, доступный с Android 4.0. С помощью такого прокси можно анализировать работу различных REST API, которые ходят по https протоколу. Например, мне понадобилось починить музыкальное API ВКонтакте для VkAudioSaver.

Packet Capture VK API

Пожалуй, самым трудоемким шагом во всей этой истории будет генерация подставного сертификата. Для этого используются утилита openssl.


openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout cert.key -out cert.crt

sudo openssl pkcs12 -export -out cert.pfx -inkey cert.key -in cert.crt -certfile cert.crt -name "cert" -caname "cert"

Далее вводим пароль нового сертификата, получившийся файл cert.pfx. Его синхронизируем с устройством и затем в настройках программы добавляем сгенерированный самоподписанный сертификат. В диалговом окне импорта в поле алиас пишем "cert" и пароль. Затем добавляем сертификат в "Trusted credentials". Запускаем сниффинг запросов.

Доне.

Подробнее




В какой-то момент времени мы понимаем, что первый релиз уже на подходе и пора бы добавить локализацию проекта. Делается это легко, настройках проекта добавляется новая локализация, на основе базового storyboard будет сгенерирован файл Main.strings, в котором по ObjectId идет замена заголовков контролов на нужный язык.

Это все очень классно, но проблема таится в следующем - как обновить этот strings-файл новыми строками в добавок к уже существующем, к следующему релизу обязательно появляются новые ViewController-ы. Решения нормального нет: можно либо перегенерить заново этот strings-файл с непереведенными строчками, потом глазом искать новые и добавлять в старый файл. Либо руками выцеплять ObjectId, тыкая на свойства каждого контрола и вручную добавлять для них поля для перевода. Все это неудобно и не понятно, по каким причинам нельзя было встроить это в XCode.

В целом я придумал простое решение в виде скрипта на bash, который генерит заново файл локализации, смотрит в существующий файл и если не находит в нем существующего ObjectID - добавляет новую строчку с локализацией
 


Подробнее




Нашел тут завалявшийся скрипт на bash, позволяющий автоматически загружать файлы в свой аккаунт на DepositFiles.com. Зачем это нужно? Ну к примеру этот сервис дает 5 баксов за 1000 скачиваний, а там можно прикрутить что угодно под этим соусом, ибо ручками грузить крайне неудобно.

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


В скрипте используется какой-то рандомный прокси из России, дабы не кидало с домена dfiles.ru на depositfiles.eu, если вдруг вы планируете запускать скрипт где-то не в России.

#!/bin/bash

cookieFile="depositcookies.txt"
login="login";
pass="passwd";
proxy="109.197.92.60:8080";

if [ $# -eq 0 ]; then
	echo "File for upload parameter missed!" 1>&2;
	exit 1;
else
	file="$1";
fi

data=`curl -sb $cookieFile http://dfiles.ru/`;

if ! echo "$data" | grep "$login" > /dev/null ; then
	curl -sc $cookieFile "http://dfiles.ru/login.php?return=%2F" > /dev/null
	curl -sc $cookieFile "http://dfiles.ru/api/user/login" -S \
	-F "login=$login" \
	-F "password=$pass" \
	 > /dev/null

	data=`curl -x "$proxy" -sb "$cookieFile" "http://dfiles.ru/"`;
	if ! echo "$data" | grep "$login" > /dev/null; then
		echo "$data";
		echo "ne ok";
		exit 2;
	fi
fi

action=`expr match "$data" ".*action=\"\([^\"]*\)\""`;
uploadIdentifier=`expr match "$data" ".*UPLOAD_IDENTIFIER\" value=\"\([^\"]*\)\""`;

data=`curl -sb "$cookieFile" "$action" -S \
-F "MAX_FILE_SIZE=2097152000" \
-F "UPLOAD_IDENTIFIER=$uploadIdentifier" \
-F "go=1" \
-F "agree=1" \
-F "files=@$file"`

echo "`expr match "$data" ".*parent.ud_download_url = '\([^']*\)'"`";
Подробнее




Значится понадобилось мне тут взять и получить все коды смайлов, которые используются ВКонтакте, чтобы в будущем встроить их в свой мессенджер и уметь различать их.

Откуда берем:

Ну можно например из мини-диалогов в самом вконтактике. Берем в firefox нажимаем правой кнопкой миши на смайлик и с помощью инструментов для разработчика выбираем пункт "Исследовать элемент".

Далее копируем длинную портяну кода вида

<a class="emoji_smile_cont" onclick="return cancelEvent(event);" onmousedown="Emoji.addEmoji(Emoji.shownId, 'D83DDD30', this); return cancelEvent(event);" onmouseover="return Emoji.emojiOver(2, this);">

 

Таких строчек у нас примерно будет 528 штук. Сохраним их в файл emoji.txt. Задача заключается в том, как быстро вытянуть utf-16 коды символов, используемых для смайлов по адресу http://vk.com/images/emoji/<код смайла>.png


На помощь придет трехстрочный скрипт на коленке:

while read line ; do
	expr "$line" : ".*\(shownId, '[0-9A-F]\+\)" | cut -f2 -d"'";
done < emoji.txt

Ну и все, можно даже вывести все это добро в html файлик, предварительно завернув код смайла в <img src="http://vk.com/images/emoji/$smile.png" /> и убедиться, что все коды валидны

Доне.

Подробнее




Представим, что мы хотим получать смску в определенное время каждый день, причем, где бы мы не находились) Конечно же, можно тупо поставить обычный будильник на телефон, но вся прелесть в том, что можно передавать какие-нибудь данные, которые периодически изменяются, например, курсы валют, погоду или какие-то свои технические данные с сервера. Для этого нам поможет сервис LittleSMS с открытым API, вся прелесть которого сводится к копеечным ценам за отправку смс (например, на номера российских операторов 0,5-0,9 рублей). Вам остается зарегистрироваться и получить ключ апи, для теста будет предложено несколько бесплатных смс.

Ну и сам код скрипта на bash


#!/bin/bash
   
user='user@yandex.ru' # Ваш логин (обычно, совпадает с емейлом)
sender='7953*******' # имя отправителя
api_key='*****' # API-ключ, есть в личном кабинете
test=0 # тестовый режим, в рабочем режиме параметр можно пропустить

recipients="37529*******";
days=$(expr 365 - `date +"%j"`);

message="До нового года осталось $days дней";

function sendSms() {
	echo `curl -k -s https://littlesms.ru/api/message/send \
		--data-urlencode "user=$user" \
		--data-urlencode "recipients=$recipients" \
		--data-urlencode "message=$1" \
		--data-urlencode "sender=$sender" \
		--data-urlencode "test=$test" \
		--data-urlencode "apikey=$api_key"`;
}

sendSms "$message"

Теперь осталось настроить crontab, чтобы скприпт срабатывал периодически

$ sudo crontab -e

В открывшемся файле запишем, например, каждый день в 0 часов 0 минут будет отправляться смс. Не забывайте, что время нужно указывать в локали GMT+0.

 # m h  dom mon dow   command

0 0 * * * /home/bingo/sms.sh

Доне

Подробнее




Я же ведь говорил, что буду писать всякие очевидные или не очень вещи, скорее даже в первую очередь для себя, чтобы не забыть и не искать снова уже знакомое решение.

Так вот, проблема заключается в следующем: как без установки фотошопа и без запуска gimp легко и просто массово изменить размеры всех изображений, находящихся в папке в линукс, используя лишь консоль?

Для начала поставим пакет imagemagick

$ sudo apt-get install imagemagick

Ну и собственно сам скриптец:

for file in *.png; do
	convert $file -resize 65x59 $file;
done

Так же мы можем распараллелить сам процесс конвертации, если у нас несколько процессоров:

procs=`cat /proc/cpuinfo | grep processor -c`;

for file in *.jpg; do
	echo "converting $file...";
	while [ `ps -e | grep convert -c` -ge $procs ] ; do
		sleep 1s;
	done;
	convert $file -resize 33% $file &
done;

Доне.

Подробнее