Нудные, однообразные операции мало кому по душе и порой выматывают гораздо больше серьёзной работы. Десяток — другой однотипных операций, отошли покурить, отвлеклись, и вы уже забыли, где уже сделали изменения, где ещё нет, и наша песня хороша — начинай сначала. Заходим в терминал и включаем уровень Бога!)
Массовое копирование файлов в командной строке
Предположим, у нас в каталоге /root есть новый пакет jquery, который нужно обновить на всех сайтах в системе. Одной командой:
for file in $(find /var/www/ -type f -name "jquery.min.js"); do cp /root/jquery.min.js "$file" ; done;
Щелчок по Enter — и готово! Попробуйте, к примеру, из любой панели управления сервером, вручную обновить на полсотни сайтов один и тот же файл или отредактировать его.
Массовое редактирование файлов при помощи sed
Предположим у нас есть масса php файлов, со строкой Hello wrld, которые мы размножили с опечаткой. Исправим это одной командой в терминале:
for file in $(find /var/www/ -type f -name "example.php"); do sed -i 's/Hello wrld/Hello world/g' $file ; done
Но что делать, когда редактировать нужно с некими нюансами и различными условиями? Вряд ли, даже хорошее знание bash спасёт вас, ведь дольше окажется написание кода под различные условия, чем если бы вы последовательно открыли эти файлы по фтп или в панели.
Последовательная массовая правка файлов в текстовом редакторе nano
Раз нам необходимо вычитывать код в редакторе, перед изменением файлов, но мы не хотим путаться и возвращаться к файлам, которые уже сделали, можно использовать для этой цели любой консольный текстовый редактор. Я посоветую освоить vi, а сам выберу nano) Не спрашивайте почему. Просто осваивайте vi, он реально хорош, вы полюбите его.
for file in $(find /var/www/ -type f -name "example.php") ; do nano $file ; done
Файлы будут открываться последовательно и после сохранения или выхода из предыдущего, вы точно ничего не пропустите, не упустите, но в то же время, если отвлечетесь, всегда будете знать на чем остановились.
Открыть несколько файлов в nano можно и так
nano /home/user/* # открыть все файлы в каталоге nano /home/user/*.php # открыть только php файлы nano /home/user/*[!php] # открыть все файлы кроме php
Условий выборки может быть масса, ведь это самые простейшие подстановки командной строки.
Просмотр и редактирование cron заданий пользователей
Для просмотра всех крон задач пользователей я использую простую команду
cat /var/spool/cron/crontabs/*
А для того, чтобы видеть кому какие cron задания принадлежат подпишем их. И выведем все cron задания юзеров кроме root пользователя.
for us in $(ls /var/spool/cron/crontabs/[!root]* | cut -d/ -f6) ; do echo -e "---\nUser: $us\n" ; crontab -l -u $us ; done
А вто так можно последовательно открыть и отредактировать все cron задачи пользователей в консольном редакторе nano
for us in $(ls /var/spool/cron/crontabs/* | cut -d/ -f6) ; do crontab -e -u $us ; done
Заметьте, что мы не редактируем файлы задач напрямую, а вызываем команду crontab с параметрами -eu для каждого юзера. Потому что она имеет встроенную проверку синтаксиса и не позволит установить неверную крон задачу. Конечна эта проверка касается лишь синтаксиса cron, она не проверяет саму shell команду, в которой может быть всё что угодно.