Архив категорий Скрипты

Автор:human

мини-лайфхаки в Bash

1. Чтобы быстро скопировать/переименовать файл с длинным именем, можно набрать:

и обратно:

2. Бесполезная, но прикольная форк-бомба (правда, не сработает, если у Вас задан ulimit для количества процессов):

3. Эмулятор сетевого принтера на локальном компьютере:

4. Простейшее нагрузочное тестирование веб-сайта:

5. Удобочитаемый вывод команды mount:

6. SSH туннель с локального порта 7777 на удаленный порт 8888 на сервере myserver.com:

7. Вывести случайное число от 0 до 32767:

echo $RANDOM

8. Выполнить в консоли команды из текстового файла:

9. Создать случайный пароль:

10. Защита от одновременного запуска нескольких копий скрипта:

11. Собрать все строки в одну строку с разделителем,на примере ;

еще один вариант

Обрезать строку после точки , например при catr

Автор:human

Парсим csv файл bash скрипт

Парсим csv файл через bash скрипт. Очень просто и удобно

Автор:human

Скрипт проверки количетсва подключений к базе Mysql и отправке уведомлений и списка подключений на почту и телеграмм

Добавим в крон и PROFIT!!!

Автор:human

bash многотопочность

Пишем многопоточный скрипт на bash

Скажу сразу, что топик посвящён только пользователям *nix систем, в которых есть bash и присутствует утилита GNU parallel. Пользователи Windows могут тоже найти здесь что-то интересное, но они должны учитывать отличия bash скриптов от bat файлов. Статья рассчитана на начинающих, но не на полных новичков, потому элементарные вещи, такие как получение имён и путей файлов подробно рассматриваться не будут. Я лишь кратко напомню о них. Для примера напишем скрипт, оптимизирующий изображения для интернет страничек и удаляющий из них всю лишнюю информацию, такую, как EXIF. Возможно есть более удобные способы написания такого скрипта, но мне они не известны, если Вы знаете, как написать скрипт лучше (сохранив при этом совместимость с Linux), выложите вашу версию в комментариях, я обязательно посмотрю её. Скрипт проверялся только на трёх Linux дистрибутивах: Ubuntu 13.04, Ubuntu 13.10 и Gentoo. Сжатие изображений без потери качества — дело медленное, потому разумно запустить конвертирование в несколько потоков, что даёт значительный прирост (кратный количеству ядер процессора) на многопроцессорных и многоядерных системах. Сразу оговорюсь, что инструменты, которыми я буду пользоваться однопоточные, потому мы будем запускать одновременно несколько процессов обработки (по одному на каждый файл, но в то же время так, чтоб их не было больше, чем доступных машине ядер процессора, GNU Parallel без нас «знает» сколько ядер процессора у нашего ПК и в этом примере нагрузит их все). Вот собственно код скрипта:

Теперь более детально разберём структуру скрипта и его работу:
Скрипт состоит из 5 функций, выполняющих различные оптимизации изображений при помощи программ optipng, AdvanceCOMP, jpegtran и gifsicle. Подробно разбирать их параметры мы не будем, для этого есть man-ы. Скажу, что на текущий момент такое их использование даёт наиболее сильное сжатие, какого мне удалось добиться. Поиск файлов в директориях осуществляется при помощи команды find, find. -type f означает, что искать будем в директории, откуда запущен скрипт и только файлы, а не каталоги и ссылки. Командой sort выполняется сортировка, можно обойтись и без неё, но так вывод скрипта во время работы получается более удобным и информативным. Про echo, grep, cut и awk можете почитать самостоятельно, благо информации по их использованию на русском языке в сети достаточно много и ничего сложного в них нет. Теперь пару слов о функциях:

Это функция, код её очень прост. В качестве переменной $input она принимает первый аргумент, с которым её запустили, в нашем скрипте за это отвечает следующий код:

фигурные скобки {} требуются для GNU Parallel, именно там происходит «вставка» аргументов со стандартного ввода, а в нашем случае поступивших через пайп. Осталось обратить ваше внимание на последний, но очень важный момент. Перед запуском функции через GNU Parallel мы должны сделать её видимой для скрипта, как внешнюю команду. (GNU Parallel разрабатывался именно для запуска внешних программ в несколько потоков) Для этого служит строка

Названия для функции в таком случае надо выбирать такое, чтоб оно не совпадало со стандартными командами, такими как cat, grep, sed и т.д., во избежание недоразумений. После завершения скрипта, экспортированные командой export -f функции будут недоступны и не вызовут никаких проблем (новые команды терминала не появятся).

Надеюсь, кто-нибудь найдёт этот материал полезным. В случае, если Вы найдёте ошибки в статье, не стесняйтесь, зарегистрируйтесь (или войдите на сайт при помощи OpenID или социальных сетей) и напишите о моих ошибках в комментариях, я постараюсь их исправить.

Яндекс.Метрика