Полезные однострочники для администратора веб-сервера

Команда или набор команд, умещающихся в одну строчку, может сделать жизнь пользователя и администратора веб-сервера удивительно комфортной. Однострочников много, а я — один, поэтому пока буду складывать всё то полезное, чем пользуюсь сам регулярно, в одну кучу (в это пост), а потом может быть это дело хоть как-то классифицирую.

Показать cron всех пользователей

Вывести cron-задания для всех пользователей в системе (и на этом же примере видно, как получить список всех пользователей в системе и что-либо выполнить для этих пользователей):

for USER in $(cut -f1 -d: /etc/passwd); do echo "$USER"; crontab -u $USER -l; done

Отправить из консоли письмо с вложением

В CentOS может не быть из коробки утилиты mail, чтобы она появилась надо установить пакет mailx. А теперь отправляем файл file.gz:

echo "Текст письма" | mail -s "Тема письма" -a /root/file.gz vashapochta@mail.ru

Скажу ещё несколько слов про mail, у неё есть ряд полезных параметров:

  • -c — адрес для отправки копии (CC)
  • -b — адрес для отправки скрытой копии (BCC)
  • -r — установить адрес отправителя (From)

Если запустить mail совсем без параметров, то попадёте в консольный почтовый клиент (т.е. сможете не писать, а читать локальные письма). По умолчанию вам будет показан список входящих писем, в начале каждой строки будет порядковый номер письма. Чтобы из клиента выйти, введите команду q, а чтобы почитать какое-то из писем (если ваш ящик не пуст) введите в качестве команды номер письма, например, 1

Проверить и починить все таблицы во всех базах MySQL

mysqlcheck -u root -p --auto-repair --check --all-databases

Вывести список всех баз MySQL, кроме системных

Параметр -B скрывает сетку псевдографической таблицы, а параметр -N скрывает заголовок таблицы. Вместе эти два параметра позволяют получить чистенький текстовый список для использования в других скриптах.

mysql -p -B -N -e "SHOW DATABASES;" \
| grep -v '^mysql$' | grep -v '^information_schema$' | grep -v '^performance_schema$'

Вывести все таблицы MySQL с движком MyISAM

mysql -p -B -N -e "SELECT table_schema, table_name FROM information_schema.tables WHERE engine = 'InnoDB' AND table_schema NOT IN ('mysql', 'performance_schema', 'information_schema');"
service monit stop
mysql -p`cat /root/.mysql-root-password` -B -N -e "SHOW DATABASES;" \
| grep -v '^mysql$' | grep -v '^information_schema$' | grep -v '^performance_schema$' \
| xargs mysqldump -p`cat /root/.mysql-root-password` --force --databases --no-data \
| sed 's/ENGINE=MyISAM/ENGINE=InnoDB/' > /root/all-dbs-schema.sql
mysql -p`cat /root/.mysql-root-password` -B -N -e "SHOW DATABASES;" \
| grep -v '^mysql$' | grep -v '^information_schema$' | grep -v '^performance_schema$' \
| xargs mysqldump -p`cat /root/.mysql-root-password` --force --databases --no-create-info > /root/all-dbs-data.sql
mysqldump -p`cat /root/.mysql-root-password` --force mysql > /root/all-dbs-mysql.sql
service mysql stop
killall -9 mysqld
rm -rf /var/lib/mysql/*
/usr/bin/mysql_install_db --user=mysql
service mysql start
mysql < /root/all-dbs-schema.sql 
mysql < /root/all-dbs-data.sql
mysql mysql < /root/all-dbs-mysql.sql
mysql -B -N -e "FLUSH PRIVILEGES;"
mysql -p`cat /root/.mysql-root-password` -B -N -e "DROP DATABASE test;"

Почистить всю историю шелла

history -c && history -w


Прокомментируйте: