14 мая 2015 г.

Как проверить zip архив на целостность в Ubuntu

Недавно качал свежую прошивку для своего смартфона через 3g сеть на даче, которая была в виде zip архива, а контрольных сумм на сайте производителя небыло. А проверить, не битый ли архив, очень хотелось.

Итак, чтобы проверить архив, открываем консоль, переходим в директорию, где лежит наш архив, и запускаем:
zip -T your_firmware.zip
Если архив не битый и с ним все в порядке, то увидим следующее сообщение:
test of your_firmware.zip OK
В этот раз нам повезло и архив в полном порядке, можно обновлять прошивку на смартфоне.

13 мая 2015 г.

Решаем проблему установки Steam на Ubuntu 14.04

При установке клиента Steam на версию Ubuntu 14.04.2 64-битной редакции (amd64) может возникнуть ошибка зависимостей пакетов, на подобии такой:

Пакеты, имеющие неудовлетворённые зависимости:
libgl1-mesa-glx:i386 : Зависит: libglapi-mesa:i386 (= 10.1.3-0ubuntu0.4)
                        Рекомендует: libgl1-mesa-dri:i386 (>= 7.2)
E: Невозможно исправить ошибки, у вас отложены (held) битые пакеты.

Это связано с тем, что при установке убунту версии равной 14.04.2 или выше, устанавливается графический стек от более поздней редакции (на данный момент от версии 14.10 15.10).

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

sudo apt-get install libc6:i386 libgl1-mesa-dri-lts-utopic:i386 libgl1-mesa-glx-lts-utopic:i386

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

Update:
В выпусках 14.04.3 и 14.04.4 так же обновился графический стек (от версий 15.04 и 15.10 соответственно), поэтому актуальные команды будут выглядеть следующим образом.
Для стека от версии 15.04 (14.04.3):

sudo apt-get install libc6:i386 libgl1-mesa-dri-lts-vivid:i386 libgl1-mesa-glx-lts-vivid:i386

Для стека от версии 15.10 (14.04.4):

sudo apt-get install libc6:i386 libgl1-mesa-dri-lts-wily:i386 libgl1-mesa-glx-lts-wily:i386

Если будут какие-то другие проблемы, пишите в комментарии.

6 мая 2015 г.

Отслеживание действий с файлами или папками в Ubuntu с помощью iwatch

Отслеживаем изменения файлов

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

iwatch

Для работы с этой подсистемой я выбрал утилитку iwatch, которая показалась мне довольно удобной по причине того, что она умеет выполнять команды при возникновении какого-либо события, отправлять уведомление на электронную почту, фильтровать отслеживаемые файлы, а так же поддерживает работу в режиме демона. Но начнем с более простого консольного режима.

iwatch - консольный режим

В самом простом случае для запуска достаточно указать команду в таком формате:
iwatch "путь к директории или файлу"
Если указали директорию и нужно рекурсивно просмотреть все поддиректории, то добавим опцию -r:
iwatch -r "путь к директории или файлу"
Но в таком формате iwatch будет отслеживать события по-умолчанию, в которые не входит события доступа и изменения (события по-умолчанию: close_write, create, delete, move, delete_self and move_self).
Чтобы нам указать, какие события нужно отслеживать, добавим опцию -e:
iwatch -r -e default,modify "путь к директории или файлу"
Попробуем отследить изменения файлов в директории командой:
iwatch -r -e default,modify petrenko/
Поменяем один символ в файле и сохраним его. В результате получим:
[ 5/мая/2015 23:36:50] IN_CLOSE_WRITE petrenko/flex/lab2/flex2_1.l
[ 5/мая/2015 23:36:50] * petrenko/flex/lab2/flex2_1.l is closed
[ 5/мая/2015 23:36:56] IN_MODIFY petrenko/flex/lab2/flex2_1.l
[ 5/мая/2015 23:36:56] IN_CLOSE_WRITE petrenko/flex/lab2/flex2_1.l
[ 5/мая/2015 23:36:56] * petrenko/flex/lab2/flex2_1.l is closed
Хорошо видно, что происходило с файлом во время наших манипуляций. 

iwatch поддерживает большой набор событий, опишем самые основные из них:
access - был доступ к файлу
modify - файл был изменен
attrib - изменились атрибуты файла
close_write - файл закрыт после открытия в режиме записи
close_nowrite - файл закрыт после открытия в режиме только для чтения
close - файл закрыт, независимо, после чтения или записи
open - файл был открыт
moved_from - файл был перемещен в другое место
moved_to - файл был перемещен в отслеживаемую директорию
move - файл или директория были перемещены
create - создан файл в отслеживаемых директориях
delete - удален файл в отслеживаемых директориях
delete_self - отслеживаемый файл удален
unmount - файловая система, на которой находится отслеживаемый файл, размонтирована
isdir - событие с директорией
default - стандартные события

Сражу предупрежу, будьте осторожны с событиями access и isdir, указав их можно получить кучу сообщений о любом доступе ко всем файлам и директориям, особенно если вы решили отслеживать объемную директорию, чтобы избежать такого поведения, используйте фильтры, речь о которых пойдет далее.

iwatch - фильтруем отслеживаемые файлы

Для фильтрации у нас есть три опции:
-t <строка фильтра> - указываем строку (в формате регулярных выражений), по которой будут выбраны файлы или директории
-X <строка фильтра> - указываем фильтр, по которому будут исключены файлы или директории
-x <имя файла или директории> - указываем файл или директорию, которые будут исключены из отслеживаемых

Чтобы отслеживать доступ к файлам в формате flac:
iwatch -r -e access -t '.flac' Музыка/
Чтобы исключить из отслеживаемых все скрытые файлы, введем:
iwatch -r -e access -X '/\.' petrenko/

iwatch - выполняем команду при событии

Чтобы выполнить команду при возникновении события, используем опцию , например, чтобы вывести уведомление в системе при изменении файла:
iwatch -r -c "notify-send iwatch 'Событие %e в %f'" -e modify petrenko/
У iwatch есть возможность подставлять информацию о событии на места спецификаторов, в примере выше использованы %e и %f, которые означают имя события и путь к файлу или директории, с котором это событие произошло. 

Остальные спецификаторы (как и дополнительную информацию об использовании утилиты) можно увидеть, если запустить iwatch без всяких опций.

На этом закончим, о работе в режиме демона читайте в следующей части статьи.