Изменения

~s - скрипты-утилиты

10 142 байта добавлено, 11:14, 27 февраля 2015
Нет описания правки
На регулярность бэкапов скрипту пофигу — когда вызовешь, тогда и будет сделан очередной бэкап. Соответственно, задаётся регулярность просто включением скрипта в cron с нужным интервалом. Двойного одновременного запуска можно не бояться — скрипт отслеживает и его, с помощью pid-файла.
Синтаксис запуска: <tt><nowiki>perl rsync-timemachine.pl -s МЕСТО_НАЗНАЧЕНИЯ [-A 'ОПЦИИ_RSYNC'] [-k ВОЗРАСТ] [-p PID-ФАЙЛ] [-D ПРОПУСТИТЬ_БД] ДИРЕКТОРИИ...</nowiki></tt>
* МЕСТО_НАЗНАЧЕНИЯ в rsync’овском синтаксисе.
* PID-ФАЙЛ — даёт возможность (не шибко нужную, но мало ли) переопределить расположение pid-файла, равное по умолчанию <tt>/var/run/timemachine.pid</tt>.
* ДИРЕКТОРИИ — собственно, что бэкапим. Бэкапятся без полного пути, то есть например /var/backups/mysql попадёт по адресу МЕСТО_НАЗНАЧЕНИЯ/YYYY-MM-DD/mysql.
* ПРОПУСТИТЬ_БД — задаёт регулярное выражение для исключения баз данных из дампа.
{{SVN|vitalif/trunk/scripts/rsync-timemachine.pl|markup}}
Простые полезные консольные команды, которых часто не хватает в UNIX-окружении.
 
== [{{SVN|vitalif/trunk/scripts/cpshift.c|co}} cpshift.c] ==
 
Простая C-программка для копирования кусков файлов. Нечто типа dd, но удобнее, потому что
* Не требует задавать смещения, кратные размеру буфера => простая задача «вытащить X байт из файла, начиная с Y» выполняется в ПИЦОТ раз быстрее, потому что используется большой буфер, а не dd bs=1.
* Поддерживает обратный порядок копирования => позволяет корректно перемещать данные внутри одного файла (например, разделы на диске!) ВПЕРЁД. Если имя входного файла равно имени выходного, то сама выбирает нужный порядок — вперёд или назад — по разнице смещений.
* Поддерживает отрицательные входные смещение и размер — тогда, как в substr в Perl/PHP, они считаются от конца входного файла.
* Понимает шестнадцатеричные и восьмеричные значения параметров — удобно, потому что не нужно обрамлять их в $(()) или конвертировать в десятичные значения.
* Печатает прогресс копирования в %.
 
Короче, может быть, оно и велосипед, но с первого взгляда я такой стандартной unix-тулы не нашёл, а dd, простите, дебилен.
 
Компилировать тривиально:
 
gcc -o cpshift cpshift.c
 
Использовать тоже просто, вот только опций поприбавилось :)
 
./cpshift [OPTIONS] infile [outfile]
 
* Копирует кусок файла 'infile' в 'outfile'.
* 'infile' может быть равен 'outfile', тогда данные перемещаются в одном файле.
* Никогда не обрезает длину выходного файла.
* Если 'outfile' не задан или равен '-', то данные копируются на STDOUT. 'infile' также может быть '-', в этом случае данные копируются из STDIN. Однако, эти потоки всё равно должны поддерживать позиционирование, что cpshift с ними работал.
* Все численные параметры могут быть десятичными (например, 256), шестнадцатеричными (0x1AB) или восьмеричными (0127).
 
Опции:
* --skip SKIP_BYTES — смещение от начала входного файла в байтах. Может быть отрицательным, и тогда считается от конца входного файла.
* --size SIZE_BYTES — максимальный размер копируемой области в байтах. Может быть отрицательным, и тогда копируется всё до позиции (размер_файла-SIZE_BYTES).
* --skip-output SKIP_IN_OUTPUT — смещение в выходном файле в байтах.
* --buffer BUFFER_SIZE — размер буфера (сколько байт копировать за раз). По умолчанию 1 Мб (0x100000 байт).
* --reverse — задаёт обратный порядок копирования. В принципе, опция нужна редко, так как если входной файл равен выходному, то нужный порядок выбирается на основе смещений автоматически.
 
=== English help ===
 
./cpshift [OPTIONS] infile [outfile]
 
* Copies part of 'infile' to 'outfile'.
* Never truncates the output file.
* 'infile' can be equal to 'outfile', then data is moved within one file.
* All numeric parameters may be decimal (256), hexadecimal (0x1AB) or octal (0127).
* '-' can be specified as 'infile' (means STDIN) or 'outfile' (means STDOUT). Note that it must be anyway seekable for cpshift to work with it.
 
Options:
* --skip SKIP_BYTES — skip to this position inside the input file. SKIP_BYTES can be negative; if so, it is counted from the end of input file.
* --size SIZE_BYTES — copy at most this count of bytes. SIZE_BYTES can be negative; if so, it means copy up to the (-SIZE_BYTES)'th byte from the end of input file.
* --skip-output SKIP_IN_OUTPUT — skip to this position inside the output file.
* --buffer BUFFER_SIZE — copy this count of bytes at once (default 1 MB = 0x100000 bytes).
* --reverse — use reverse copying order. In most cases you don’t need to set this manually because when you’re moving data within one file, the correct copying order is selected automatically based on offsets (reverse order is used when moving data forward, forward order is used when moving data backward).
 
== [{{SVN|vitalif/trunk/scripts/move-mdadm0.9.c|co}} move-mdadm0.9.c] ==
 
Простая утилита для перемещения mdadm’овского суперблока при изменении размера RAID-разделов. Лицензия: GNU GPL 3.0 или более поздняя, в том виде, в котором опубликована Фондом Свободного Программного Обеспечения.
 
Компиляция и использование:
 
gcc -o move-mdadm0.9 move-mdadm0.9.c
./move-mdadm0.9 device old_size_in_bytes new_size_in_bytes
 
Есть несколько версий суперблока mdadm — 0.90, 1.0, 1.1 и 1.2. Версии 1.1 и 1.2 располагаются в начале дискового раздела и поэтому не нуждаются в перемещении при изменении его размера; версии 0.90 и 1.0 суперблока, однако, располагаются в конце раздела и поэтому при изменении размера раздела их нужно перемещать.
 
Стандартный подход для этого — удалять диски из массива по одному, изменять их размер и добавлять обратно, опять-таки по одному. Это долго, так как требует синхронизации данных (resync) после добавления каждого диска. Только после завершения нескольких resync вы сможете запустить <tt><nowiki>mdadm --grow</nowiki></tt>.
 
Чтобы этого не делать и была написана данная утилита. С ней вы можете просто остановить массив (<tt><nowiki>mdadm --stop</nowiki></tt>), изменить размеры всех разделов, запустить {{cmd|./move-mdadm0.9 <раздел> <старый_размер_в_байтах> <новый_размер_в_байтах>}}
на каждом разделе и запустить массив обратно, после чего он будет сразу готов для выполнения команды <tt><nowiki>mdadm --grow</nowiki></tt>.
 
=== English help ===
 
Simple tool that allows to move mdadm v0.90 and v1.0 superblocks after resizing a device. License: GNU GPL 3.0 or later, as published by the Free Software Foundation.
 
Compiling and usage:
 
gcc -o move-mdadm0.9 move-mdadm0.9.c
./move-mdadm0.9 device old_size_in_bytes new_size_in_bytes
 
mdadm superblock is the metadata structure stored on devices/partitions participating in a software raid array. There are several versions of metadata format, namely v0.90, v1.0, v1.1 and v1.2. v1.1 and v1.2 superblocks are stored in the beginning and thus do not need moving when the raid partition is resized. However, v0.90 and v1.0 superblocks are stored in the end of the partition, so they need to be moved during resize, or mdadm won’t be able to find them.
 
The standard approach is to remove, resize and re-add disks from the array one by one, but it requires a resync after re-adding each disk, which takes a long time and is basically redundant. Only after all resyncs, you’ll be able to run <tt><nowiki>mdadm --grow</nowiki></tt>.
 
With this tool, you can just stop the array, resize all partitions, run {{cmd|./move-mdadm0.9 <device> <old_device_size_in_bytes> <new_device_size_in_bytes>}}
on each of them, start the array again and it will be immediately ready for
<tt><nowiki>mdadm --grow</nowiki></tt>.
 
== [{{SVN|vitalif/trunk/scripts/bindiff.c|markup}} bindiff.c] ==
 
Побайтно сравнивает два файла и печатает разницу между ними в шестнадцатеричном виде, в формате «адрес: старые_данные новые_данные» (точно такой формат использовался для патчей телефонов Siemens программой V_KLay):
<pre>
00C01582: 0145 0000
00C01587: 02 00
...
</pre>
 
Компилировать просто — {{cmd|gcc -o bindiff bindiff.c}}. Использовать так — {{cmd|./bindiff file1 file2}}.
 
* {{SVN|vitalif/trunk/scripts/bindiff.c}}
== fromto ==
* {{SVN|vitalif/trunk/scripts/fromto|markup}}
 
== intdu, intsort ==
 
«Интерактивный» консольный sort — не ждёт полного результата, а показывает последние LINES строк, обновляющиеся по каждой строке, полученной со стандартного ввода (LINES = `tput lines` = число строк в текущем окне терминала). Строки, «уходящие» назад за пределы окна терминала, отсортированными не являются и смотреть их не надо.
 
Применение: команда «intdu», интерактивно подсчитывающая размеры подпапок текущего каталога и показывающая вам LINES самых больших папок.
 
* {{SVN|vitalif/trunk/scripts/intdu|markup}}
* {{SVN|vitalif/trunk/scripts/intsort|markup}}
== whichpm ==
* {{SVN|vitalif/trunk/scripts/unzip.pl|markup}}
 
== [{{SVN|vitalif/trunk/scripts/cpshift.c|co}} cpshift.c] ==
 
Простая C-программка для копирования кусков файлов. Возможно, велосипед, но с первого взгляда я такой стандартной unix-тулы не нашёл. Есть, конечно, dd, но он работает в ПИЦОТ раз медленнее, потому что приходится говорить bs=1 (чтение и запись по 1 байту).
 
Компилировать и использовать тривиально:
 
gcc -o cpshift cpshift.c
./cpshift --skip SKIP_BYTES --size SIZE_BYTES infile outfile
 
SKIP_BYTES — смещение от начала входного файла, SIZE_BYTES — максимальный размер копируемой области. Оба могут быть как десятичными, так и восьмеричными (если начинается с 0), и шестнадцатеричными (если начинается с 0x).
== convert-filenames ==
;TS_RFC822: Wday, DD Mon YYYY HH:MM:SS +ZZZZ. Wday — 3-буквенная латинская аббревиатура дня недели, Mon — 3-буквенная латинская аббревиатура месяца, ZZZZ — зона, смещение от GMT в формате HHMM (часы, минуты).
;TS_ORACLE: DD-Mon-YYYY HH.MM.SS AM|PM.
 
== pkgsearch.py ==
 
Выводит список установленных модулей Python. На данный момент, похоже, имеет баг, рандомно запускает некоторые скрипты.
== convert-many ==
== bashrc.any ==
Команды для переключения кодировок koi8, utf8, cp1251 в KDE Konsole из консоли, не прибегая к помощи менюшек. Версии для KDE [{{SVN|vitalif/trunk/scripts/bashrc.any?revision=706&view=|markup}} 4.x] и [{{SVN|http://svn.yourcmc.ru/viewvc.py/vitalif/trunk/scripts/bashrc.any?view=markup&revision=704&view=markup}} 3.x].
А команда yc вам не нужна, удаляйте её. :)
= Инструменты Хелперы =
ИнструментыПолезные инструменты для реализации какого-то однократного действия, слишком большие для того, чтобы называть их просто консольной командой. == [{{SVN|vitalif/trunk/scripts/calc-mem.pl|markup}} calc-mem.pl] == Подсчёт '''[[wikipedia:Copy-on-write#Copy-on-write_in_virtual_memory|разделяемой]] и неразделяемой''' памяти, используемой процессами в Linux. Скрипт предназначен для оценки требований памяти каких-нибудь форкающихся демонов типа apache2 httpd, php5-fpm и так далее. Использование:; ./calc-mem.pl -c php-fpm: Разделить системные процессы на две группы — те, у которых команда запуска содержит регулярное выражение «php-fpm» и те, у которых не содержит, и вывести ''средние, суммарные и максимальные'' значения разделяемой и неразделяемой памяти по каждой группе.; ./calc-mem.pl -p 1584: Просто вывести разделяемую и неразделяемую память процесса с pid 1584. * [{{SVN|vitalif/trunk/scripts/calc-mem.pl|co}} Скачать calc-mem.pl] == Команды git == Хелперы для системы контроля версий git, написанные на чём попало. Они имеют имена вида «git-xxx» и если такой скрипт подложить в /usr/lib/git-core/, то «git xxx» вызовет этот скрипт. === [{{SVN|vitalif/trunk/scripts/git-ff|markup}} git-ff] === Типа git pull, но удобнее — автоматически делает Fast-Forward всем локальным веткам, связанным с удалёнными. === [{{SVN|vitalif/trunk/scripts/git-info|markup}} git-info] === Выводит некую информацию о текущем репозитории, типа svn info. === [{{SVN|vitalif/trunk/scripts/git-sparse-checkout|markup}} git-sparse-checkout] === Делает из обычной рабочей копии Sparse Checkout, то есть, сохраняет только заданные в командной строке пути, а остальные игнорирует. === [{{SVN|vitalif/trunk/scripts/git-truncate|markup}} git-truncate] === Скрипт для кастрации истории git-репозитория. «git-truncate REV» угробит все ревизии старше REV и заменит их одной, включающей в себя состояние на момент REV. Дочерние ревизии REV будут пересажены наверх новой. Всё это, правда, произойдёт только в текущей ветке, другие ветки будут сохранены. Будет сохранена и предыдущая версия истории, если к ней ведёт путь от одной из других веток.
== pgraph-dot ==
Использовать в каталоге Mercurial-репозитория следующим образом: <tt>pgraph-dot имяфайла.формат</tt>, где формат — один из поддерживаемых Graphviz форматов вывода (png, svg, dot и т. п.)
* [{{SVN|vitalif/trunk/scripts/pgraph-dot|markup}} Скачать pgraph-dot]
Пример такого графа:
* [http://svn.yourcmc.ru/viewvc.py/vitalif/trunk/scripts/sgold-note.pl?revision=748&view=markup sgold-note.pl]
= Патчи и настройки Персонализация =
Патчи, модификации, файлы настроек, юзер-скрипты.
* [{{SVN|vitalif/trunk/scripts/googlefocus.user.js|markup}} Просмотр скрипта в моём svn]
* [http://userscripts.org/scripts/show/132237 Этот же скрипт на userscripts.org]
 
== [{{SVN|vitalif/trunk/scripts/GoogleSrchUIMod.js|co}} GoogleSrchUIMod.js] ==
 
Немного '''устаревший''' [http://www.opera.com/docs/userjs/ User JS] для Opera, направленный на возвращение Гугла к прежнему (старому) виду.
 
Устаревший потому, что:
* То, что бесило больше всего — выравнивание гуглового поиска по центру страницы — как добавили, так и убрали очень быстро.
* Скрипт поддерживает '''только''' браузер Opera.
* Скрипт частично уже не работает, например, не работает подмена ссылок, так что рекомендуется использовать [[#googletracking-b-gone.user.js]].
 
Конкретно:
* '''без грёбаной панельки''' слева — она показывается свёрнутой, её можно развернуть
* без рекламы справа
* без javascript’ов, которые:
** <s>подменяют ссылки на сайты ссылками на редиректы так, что их не скопипастишь</s> не работает, используйте [[#googletracking-b-gone.user.js]]
** '''противодействуют User JS’ам!'''
** ставят какие-то таймеры, замеряют времена выполнения и делают ещё фиг знает что троянистое
* с результатами поиска, выровненными по левому краю, а не по центру — удобно для широких мониторов
* со ссылочкой «Только на русском» под строкой поиска
 
Основан на [http://shirish.thekamathfamily.com/pages/hack-opera-userjs-to-get-back-the-old-google-search-ui/ Opera UserJS To Get Back The Good Ol’ Google Search UI].
== mc.color ==
* [{{SVN|vitalif/trunk/scripts/perl.syntax.patch}} патч для perl.syntax] — исправленный синтаксис для Perl кода.
== gamin2.pl и патч Sys::Gamin Патчи ==
Есть кучка патчей для различного софта — от Apache Tika до старой версии fglrx. Все они называются <tt>patch-***.diff</tt>. Пример: gamin2.pl и патч Sys::Gamin. Похож на [[#gamin.pl|gamin.pl]], но а) рассчитан на [{{SVN|vitalif/trunk/scripts/patch-Sys-Gamin-0.1-userData.diff}} патченую] версию Sys::Gamin 0.2, с поддержкой userData, и б) сильно менее полезен.
./gamin2.pl /directory1 /directory/2 -u UserData2 some.file
Со всеми событиями от /directory/2 вы будете получать свои данные UserData2.
* [{{SVN|vitalif/trunk/scripts/patch-Sys-Gamin-0.1-userData.diff}} Патч к Sys::Gamin 0.1], добавляющий поддержку userData
* [{{SVN|vitalif/trunk/scripts/gamin2.pl|markup}} gamin2.pl]
 
== apache1-configure ==
 
./configure с параметрами для установки Apache 1.x в /usr/local/apache1.
 
* [{{SVN|vitalif/trunk/scripts/apache1-configure|markup}} apache1-configure]
 
== fglrx_30.diff ==
 
Патч для компиляции модуля ядра <tt>fglrx</tt> Linux-версии проприетарного драйвера [http://ati.amd.com/products/catalyst/index.html ATi Catalyst] для версий 9-6 и 9-7 и версии Linux ядра 2.6.30. Для более новых версий драйвера <tt>fglrx</tt> патч не требуется.
 
* [http://svn.yourcmc.ru/viewvc.py/vitalif/trunk/scripts/fglrx_30.diff?view=log fglrx_30.diff]