In Linux we trust!

Linux hints & tricks

Серия быстрых рецептов, трюков и хаков для Linux...

1) Постоянно падает процесс и его нужно все время поднимать

Пусть постоянно падает какой-нибудь redis-server. Добавляем в крон (crontab -e) следующую строчку:

* * * * * [ ps aux | grep -q redis-server ] || /etc/init.d/redis start
2) Установка под Debian Flash 11
$ apt-get remove gnash
$ tar xvf install_flash_player_11_linux.i386.tar.gz
$ mkdir -p /usr/lib/mozilla/plugins/
$ cp libflashplayer.so /usr/lib/mozilla/plugins/
$ cd ./usr/bin
$ cp flash-player-properties /usr/local/bin

Актуальная версия: тыц.

Запускайте Firefox и в Add-ons - Plugins увидите включенный Shockwave Flash 11. В случае, если нужен более простой без заморочек плеер, то:

$ apt-get install browser-plugin-gnash
3) Отключить сжатие в Firefox

Отключить сжатие в Firefox

Если не помогает, то можно полностью удалить это ключ, чтобы никаких упоминаний о сжатии в заголовках не было.

4) Массово удалить ключи в Redis

Удалим из базы Redis все ключи начало которых "CACHE:" (без кавычек).

$ echo 'KEYS CACHE:*' | redis-cli | sed -e 's/^.*$/DEL "&"/' | redis-cli
5) Глобальная замена строки в файлах

Например, заменить все ссылки по PHP файлам с одного сайта на другой.

$ for file in $(find . -iname '*.php'); do
>   sed -i 's/onesite.com/anothersite.com/g' "$file"
> done
6) MySQL дамп определенных таблиц

Дамп таблиц с префиксом из одной базы:

$ tables=$(echo 'show tables like "prefix_%"' | mysql db | tail -n +2)
$ mysqldump db $tables > db.sql
7) Удалить пустые директории
$ find . -type d -empty -delete
8) Перевод из одной системы счисления в другую

Из шестнадцатеричной в десятичную:

$ echo 'obase=10;ibase=16;100' | bc
256

Из десятичной в шестнадцатеричную:

$ echo 'obase=16;ibase=10;256' | bc
100

Если ibase идет первым, то значение obase трактуется исходя из этого значения.

Из двоичной в десятичную:

$ echo 'obase=10;ibase=2;100' | bc
4

Из десятичной в двоичную:

$ echo 'obase=2;ibase=10;100' | bc
1100100
9) Убить старые процессы
$ killall --older-than 1M php
10) wget options

Ограничение скорости wget:

$ wget --limit-rate=1000k

wget при рекурсивном скачивании можешь упереться в ограничения по robots.txt. Чтобы это не мешало:

$ wget -e robots=off
11) Публичный ключ из приватного

Никогда не храню публичные ключи, их в любой момент можно получить из приватных:

$ ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub
12) Тестирование нового диска

Только что вставленный в систему диск лучше тестово прогнать:

$ hdparm -Tt /dev/sdb
/dev/sdb:
 Timing cached reads:   7458 MB in  2.00 seconds = 3729.13 MB/sec
 Timing buffered disk reads: 344 MB in  3.01 seconds = 114.30 MB/sec
$ dd if=/dev/sdb of=/dev/null bs=$((1024 * 1024)) count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 0.893076 s, 117 MB/s
13) Манипуляции с Unix time

Когда под рукой нет любимого языка программирования, а перевести Unix time туда-обратно очень нужно:

$ date -d @1430816417
Tue May  5 13:00:17 MSK 2015
$ date -d @1430816417 +"%Y-%m-%d"
2015-05-05
$ date +%s
1482823220
14) Убрать grep из grep

В bash-скриптах, чтобы при grep вывод убрать сам grep:

$ ps aux | grep foo | grep -v grep
$ ps aux | grep [f]oo

Оба варианта эквивалентны, но второй короче и предпочтительнее.

15) Быстрый SOCKS-сервер:
$ ssh -f -C2qTnN -D 1080 user@myhost

В браузере указываем localhost:1080 как SOCKS-сервер.

16) rename

Утилита rename позволяет переименовывать файлы по заданному регулярному выражению. Например, переименовать все *.jpeg в *.jpg:

$ rename 's/\.jpeg$/\.jpg/' *.jpeg

Или понизить регистр всех имен файлов:

$ rename 'y/A-Z/a-z/' *
17) Последний аргумент

Знали ли вы, что в bash-оболочке есть переменная, что сохраняет последний аргумент?

$ mkdir mydir
$ cd $_

Удобно! =)

18) Время действие SSL сертификата
$ echo | openssl s_client -connect ya.ru:443 2>/dev/null \
>   | openssl x509 -noout -dates
notBefore=May 13 12:19:15 2016 GMT
notAfter=May 13 12:19:15 2018 GMT
19) Перевод окончания строк в UNIX-формат
$ tr -d '\r' < my.txt > my.txt.new
$ mv my.txt{.new,}
20) Утилита lsof

lsof - выводит список открытых файлов. Например, список открытых файлов в домашнем каталоге:

$ lsof -lw +d "`pwd`"

Полный вывод всех открытых файлов:

$ lsof -n

Узнаем "владельца" порта:

$ lsof -i :9091
21) Проверка интерактивности

Опция -t позволяет определить был ли скрипт запущен интерактивно.

$ echo | test -t 0 && echo 'Started interactively!'
$ test -t 0 && echo 'Started interactively!'
Started interactively!

0 это файловый дескриптор, который соответствует стандартному потоку ввода.

22) readlink, realpath

Читают и канонизируют символические ссылки. Каждый компонент ссылки должен существовать.

$ readlink -e ~
/home/user
$ > 1 && ln -s 1 2 && ln -s 2 3
$ readlink -e 3
/home/user/1

realpath принимает множественные аргументы, но не всегда может присутствовать в системе.

$ realpath /proc/"$$"/fd/* 2>/dev/null
/dev/pts/11
/dev/pts/11
/dev/pts/11
/dev/pts/11