Заметки в категории How To

Восстановление пароля root для MySQL

Если вы забыли пароль для пользователя root в базе MySQL/MariaDB/PerconaDB, то вам понадобиться несколько простых действий, чтоб его сменить:

  • Останавливаем MySQL:
sudo service mysql stop
  • Создаем текстовый файл /tmp/init.sql:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';
  • Запускаем сервер:
sudo mysqld_safe --skip-grant-tables
  • Открываем второй терминал, заходим в mysql и меняем пароль пользователю root:
mysql -u root mysql
UPDATE mysql.user SET authentication_string = PASSWORD('MyNewPass') WHERE User = 'root' AND Host = 'localhost';
FLUSH PRIVILEGES;
exit;

Осталось убить процесс mysqld. Для этого в первом терминале нажимаем Ctrl+C и стартуем:

sudo service mysql start

How To: Как создать MySQL пользователя с минимальными правами для бекапа

Использовать для бекапа пользователя root плохая мысль. Создадим пользователя с минимальными правами:

CREATE USER 'botbackup'@'localhost' IDENTIFIED BY 'password';
GRANT SELECT, SHOW VIEW, RELOAD, REPLICATION CLIENT, EVENT, TRIGGER ON *.* TO 'botbackup'@'localhost';
GRANT LOCK TABLES ON *.* TO 'botbackup'@'localhost';

How To: 16 практических примеров команды ls

Команда ls применяется для просмотра списка файлов в каталоге. Хотя, если вы используете Unix-like систему, то вы это уже знаете не хуже меня.

Но все ли вы знаете об этой прекрасной команде? Может быть вы используете ее не до конца?

1. Показать все файлы в каталоге

Классический вариант команды ls - это:

ls -a

Вывод покажет все файлы и каталоги в текущем каталоге, включая скрытые. В том числе и служебные '.' и '..'

2. Скрыть служебные каталоги '.' и '..'

ls -A

3. Отображение файлов и каталого в обратном порядке

По умолчанию, ls возвращает список файлов и каталогов в алфавитном порядке. Если необходимо вернуть список в обратном порядке:

ls -r

4. Сортируем файлы по расширению

Это тоже можно легко сделать:

ls -X

Читать далее...

Улучшаем Gnome Shell (Gnome 3)

В связи с тем, что Canonical отказалась от развития Unity и фактически выбросила всех его приверженцев за борт, пришлось искать альтернативы. KDE когда-то я использовал достаточно плотно. Хорошо в памяти сидит его тормознутость и имено поэтому он был отвергнут на самом начальном этапе.

До Unity в Ubuntu использовалась оболочка Gnome, правда, версии 2. Потому и решил посмотреть, что же нового в Gnome3 нам приготовили разработчики. Т.к. ноут давно просился переустановить систему с нуля, то я и ставил сразу Gnome Ubuntu, но можно было сделать и вот так:

$ sudo apt install ubuntu-gnome-desktop

После этого нужно выйти из системы, выбрать сеанс Gnome и войти. Ничего сложного.

В принципе, оболочка вышла достаточно удобной, но некоторые моменты несколько непривычны. Это все очень легко исправляется расширениями для Gnome.

Pixel Saver

Расширение, которое объединяет заголовок окна с верхней панелью, как в Ubuntu. Это очень удобно и экономит место на ноутбуках.

Установить Pixel Saver

No Topleft Hot Corner

В Gnome при подведении мышки в верхний левый угол автоматически всплывает меню с приложениями и рабочими столами. Иногда это сильно раздражает. Видимо не только меня, т.к. ребята сделали расширение, которое отключает эту возможность.

Нажатие на клавишу 'Win' для активации этого меню остается и вы не будете ограничены в доступе. :)

Установить No Topleft Hot Corner

Top Icons

Трей с иконками приложений в Gnome находится не на привычном месте, а реализован как слацдер в левом нижнем углу. Если он открыт постоянно, то немного мешает. Если же его скрыть (такая возможность есть штатно), то не видно уведомлений. Странное немного решение, которое можно исправить с помощью Top Icons

Trash

Маленькое расширение, которое просто показывает значек корзинке в правом верхнем углу, если она не пуста.

Установить Trash

Panel OSD

Расширение, которое позволяет настроить, в каком месте экрана будут показываться уведомления.

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

Gnome 3 меня пока радует. :)

Как правильно удалить пользователя MySQL/MariaDB

ВНИМАНИЕ: Сделайте резервную копию ваших данных перед запуском команд из этой инструкции!

Шаг 1 - Подключение к серверу MySQL/MariaDB

Если у вас есть необходимость удалить какой-либо продукт типа WordPress или Drupal, то вы должны удалить пользователя из базы данных. Вам нужно удалить все выданные ранее права/разрешения и только после этого удалять пользователя.

Для начала вам необходимо подключиться к базе данных:

$ mysql -u root -p mysql

или

$ mysql -u root -h db.example.com -p mysql

Шаг 2 — список всех пользователей

Для того чтоб увидеть разрешения для пользователя bloguser введите:

mariadb> SHOW GRANTS FOR 'bloguser'@'localhost';

Где:

  • bloguser — имя пользователя MySQL/MariaDB
  • localhost — имя хоста, с которого разрешено подключаться этому пользователю
  • mywpblog — имя базы данных

Шаг 3 - отзыв всех разрешений

Введите следующую sql команду:

mariadb> REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'bloguser'@'localhost';

Пример вывода:

Query OK, 0 rows affected (0.00 sec)

Шаг 4 - Удаление пользователя

Введите следующую команду:

mariadb> DROP USER 'bloguser'@'localhost';

Пример вывода:

Query OK, 0 rows affected (0.00 sec)

Шаг 5 - удаление базы данных

Введите следующую команду:

mariadb> DROP DATABASE mywpblog;

Пример вывода:

Query OK, 0 rows affected (0.00 sec)

На этом все. :) Вы удалили пользователя базы данных.

HTTP сервер для раздачи статики одной строкой

Иногда надо быстро поднять http сервер для отдачи какого-то одного или нескольких файликов.

Тут собраны несколько способов, как одной строкой запустить http сервер для раздачи статических файлов.

Python 2.x

$ python -m SimpleHTTPServer 8000

Python 3.x

$ python -m http.server 8000

Twisted

$ twistd -n web -p 8000 --path .

or

$ python -c 'from twisted.web.server import Site; from twisted.web.static import File; from twisted.internet import reactor; reactor.listenTCP(8000, Site(File("."))); reactor.run()'

Ruby

$ ruby -run -ehttpd . -p8000

asdf

$ gem install adsf   # install dependency
$ adsf -p 8000

Sinatra

$ gem install sinatra   # install dependency
$ ruby -rsinatra -e'set :public_folder, "."; set :port, 8000'

Perl

$ cpan HTTP::Server::Brick   # install dependency
$ perl -MHTTP::Server::Brick -e '$s=HTTP::Server::Brick->new(port=>8000); $s->mount("/"=>{path=>"."}); $s->start'

Plack

$ cpan Plack   # install dependency
$ plackup -MPlack::App::Directory -e 'Plack::App::Directory->new(root=>".");' -p 8000

PHP > 5.4

$ php -S 127.0.0.1:8000

busybox httpd

$ busybox httpd -f -p 8000

Свой NTP сервер в локальной сети

NTP (англ. Network Time Protocol — протокол сетевого времени) — сетевой протокол для синхронизации внутренних часов компьютера с использованием сетей с переменной латентностью.

NTP использует для своей работы протокол UDP и учитывает время передачи. Система NTP чрезвычайно устойчива к изменениям латентности среды передачи. В версии 4 способен достигать точности 10 мс (1/100 с) при работе через Интернет, и до 0,2 мс (1/5000 с) и лучше внутри локальных сетей.

Наиболее широкое применение протокол NTP находит для синхронизации серверов точного времени.

Установка на Ubuntu

sudo apt update
sudo apt install ntp

Настройка сервера

sudo mv /etc/ntp.conf{,.bak}
sudo nano /etc/ntp.conf

Добавляем в конфиг эти строки:

server 0.ru.pool.ntp.org iburst prefer
server 1.ru.pool.ntp.org iburst
server 2.ru.pool.ntp.org iburst
server 3.ru.pool.ntp.org iburst

disable monitor

driftfile /var/db/ntpd.drift
logfile /var/log/ntpd.log

restrict 127.0.0.1

restrict 0.ru.pool.ntp.org noquery notrap
restrict 1.ru.pool.ntp.org noquery notrap
restrict 2.ru.pool.ntp.org noquery notrap
restrict 3.ru.pool.ntp.org noquery notrap

restrict 192.168.0.0 mask 255.255.255.0 nomodify notrap nopeer

Перезапускаем сервер:

sudo /etc/init.d/ntp restart

Проверяем пиры:

ntpq -c peers

Знак «+» перед пиром означает, что время было синхронизировано с этим пиром.

Теперь можно настроить свой маршрутизатор на выдачу клиентам нашего NTP сервера для синхронизации времени с ним.

Как передать статические маршруты клиентам с помощью ISC DHCP сервера

Для этого надо добавить в /etc/dhcp/dhcpd.conf строки:

option classless-routes code 121 = array of unsigned integer 8;
option classless-routes 24, 192,168,100, 192,168,1,2,
                        24, 10,4,0, 192,168,1,2;
option classless-routes-win code 249 = array of unsigned integer 8;
option classless-routes-win 24, 192,168,100, 192,168,1,2,
                            24, 10,4,0, 192,168,1,2;

Этим мы передаем клиентам два статических маршрута:

  1. Маршрут для 192.168.100.0/24 через 192.168.1.2
  2. Маршрут для 10.4.0.0/24 через 192.168.1.2

Остается перезагрузить сервис:

sudo service isc-dhcp-server restart

UPD: Есть проблема с маршрутом по умолчанию в такой конфигурации. Решение проблемы default route.

lftp: зеркалируем локальные и удаленные каталоги

lftp — программа для передачи файлов в сложных условиях ftp, http и других соединений. lftp имеет встроенную поддержку зеркалирования всего дерева каталогов. Она так же может зеркалировать в обратном режиме, т.е. сделать зеркало локального каталога на сервере, загрузив все файлы. Еще одна интересная возможность: зеркалирование двух удаленных серверов по протоколу FXP, если он доступен на серверах.

Синтаксис

mirror
mirror options
mirror -c
mirror -R

Пример: Как сделать зеркало удаленного каталога (скачать файлы)

Для начала необходимо подключиться к удаленному серверу:

lftp ftp.example.com

Введите имя пользователя и пароль:

lftp ftp.example.com:~> user user@example.com

Пример вывода:

Password:
lftp user@example.com@ftp.example.com:~>

Введите ls, чтоб увидеть список файлов:

lftp ftp.example.com:~> ls

Пример вывода:

-rw-r--r--    1 80       www      36809419 Jun 24 23:59 2012-06-24.log.gz
-rw-r--r--    1 80       www      100912271 Jun 25 23:59 2012-06-25.log.gz
-rw-r--r--    1 80       www      102926055 Jun 26 23:59 2012-06-26.log.gz

Для зеркалирования всех файлов в текущий каталог введите:

lftp ftp.example.com:~> mirror

С командой mirror вы можете указать исходный каталог и каталог назначения. Если каталог назначения будет оканчиваться на слеш («/»), то имя исходного каталога будет добавлено к каталогу назначения.

lftp ftp.example.com:~> mirror source destination

или

lftp ftp.example.com:~> mirror logs/ /data/logs

Я очень рекомендую использовать опцию, которая позволяет продолжить скачивание, если вдруг соединение оборвалось:

lftp ftp.example.com:~> mirror -c source destination

или

lftp ftp.example.com:~> mirror --continue

Чтоб скачать только новые файлы (не работает с -c):

lftp ftp.example.com:~> mirror -n

или

lftp ftp.example.com:~> mirror --only-newer

Вы можете ускорить загрузку файлов используя опцию параллельной загрузки:

lftp ftp.example.com:~> mirror -p

Чтоб указать количество потоков, введите:

lftp ftp.example.com:~> mirror --parallel=10

Пример: как сделать обратное зеркалирование (загрузка файлов)

Для создание обратного зеркала каталога вам необходимо передать опцию -R или —reverse команде mirror. Для начала вам необходимо подключиться к серверу, как было показано в предыдущем примере.

Сменить локальный каталог:

lftp ftp.example.com:~> lcd /home/silver/project/lftp

Пример вывода:

lcd ok, local cwd=/home/silver/project/lftp

Для загрузки дерева файлов и каталогов на сервер:

lftp ftp.example.com:~> mirror -R

или укажите локальный и удаленный каталоги:

lftp ftp.example.com:~> mirror -R /home/silver/project/lftp /var/www/html

Для выхода из FTP сессии:

lftp ftp.example.com:~> quit

Cron: How To

Введение

Cron - это системный демон, который используется для запуска периодических задач в фоновом режиме.

Файл crontab - простой текстовый файл со списком команд, которые должны быть выполнены в указанное время.

Каждый пользователь в системе имеет свой crontab файл, включая root. Все пользовательские файлы проверяются cron'ом вне зависимости от того, залогинен пользователь в системе или нет.

Для вывода справки по crontab введите:

man crontab

Использование Cron

Для настройки cron для вашего пользователя введите:

crontab -e

Отредактируйте файл и сохраните его для применения изменений запуска фоновых задач. Не забываенем/датой не могут содержать пробелы и содержат в себе минуты (0-59), часы (0-23, 0 - полночь), дни (1-31), месяцы (1-12), дни недели (0-6, 0 - воскресенье).

01 04 1 1 1 /usr/bin/somedirectory/somecommand

В примере выше будет выполнена команда /usr/bin/somedirectory/somecommand в 4 часа 1 минуту 1 января плюс каждый понедельник в январе.

Разделенные запятыми значения можно использовать для указания нескольких значений. Так же можно использовать дефис "-" в значениях для указания периодов.

01,31 04,05 1-15 1,6 * /usr/bin/somedirectory/somecommand

В этом случае команда будет выполнена в 01 и 31 минуты 4 и 5 часов утра с 1 по 15 января и июня.

Рекомендуется указывать полный путь к команде для запуска, как указано в примерах выше.

Иногда есть необходимость запускать команды через определенные промежутки времени. Следующий пример будет запускать команду раз в 10 минут (0, 10, 20, 30, 40 и 50 минут каждого часа):

*/10 * * * * /usr/bin/somedirectory/somecommand

Эта запись абсолютно эквивалентна:

0,10,20,30,40,50 * * * * /usr/bin/somedirectory/somecommand

Так же crontab поддерживает некоторые специальные строки, которые могут быть использованы вместо указания времени/даты:

строка что имеется ввиду
@reboot Единожды, при загрузке
@yearly Один раз в год, "0 0 1 1 *"
@annually Так же, как и @yearly
@monthly Один раз в месяц, "0 0 1 * *"
@weekly Один раз в неделю, "0 0 * * 0"
@daily Один раз в день, "0 0 * * *"
@midnight Так же, как и @daily
@hourly Один раз в час, "0 * * * *"
@reboot /path/to/execuable1

Пример выше запустит команду при старте системы.

Опции crontab

  • -l - выведет список заданий
  • -r - удалит все задания из crontab
  • -e - редактировать crontab с помощью редактора, указанного в переменной окружения EDITOR

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

Два других способа конфигурации crontab

До этого мы говорили о пользовательских crontab файлах. В системе есть еще два способа конфигурации crontab.

ВременнЫе каталоги /etc/cron.{hourly,daily,weekly,monthly} используются для запуска скриптов. В них можно создать скрипты, которые будут выполнены один раз в час, день, неделю или месяц соответственно.

Так же есть общесистемный файл /etc/crontab, который имеет немного другой синтаксис:

00 01 * * * rusty /home/rusty/rusty-list-files.sh

В данном примере после времени/даты идет имя пользователя, с правами которого будет выполнен скрипт /home/rusty/rusty-list-files.sh

Такой же синтаксис может быть использован в crontab файлах в каталоге /etc/cron.d. В отличие от временнЫх каталогов, в это каталог складываются не скрипты для запуска, а crontab файлы с синтаксисом, показанным выше.

Переменные окружения

В crontab файле можно указывать переменные окружения. Это делают в самом начале файла:

SHELL=/bin/bash
PATH=~/bin:$PATH

Иногда надо чтоб результат работы скрипта cron отправлял на почту. Обычно он отправляет письмо тому пользователю, чей crontab файл используется. Адрес доставки письма можно переопределить с помощью переменной MAILTO:

MAILTO='user@example.com'