Полезные команды и скрипты в терминале Linux

Иногда не стоит придумывать велосипед, и для этого есть уже целая утилита в
GNU Coreutils

Сделать дамп всех баз данных в отдельные файлы
#!/bin/bash

USER="root"
PASSWORD="password"
OUTPUT="/www/sql"

#rm "$OUTPUTDIR/*gz" > /dev/null 2>&1

databases=`mysql -u $USER -p$PASSWORD -e "SHOW DATABASES;" | tr -d "| " | grep -v Database`

for db in $databases; do
    if [[ "$db" != "information_schema" ]] && [[ "$db" != "performance_schema" ]] && [[ "$db" != "mysql" ]] && [[ "$db" != _* ]] ; then
        echo "Dumping database: $db"
        mysqldump -u $USER -p$PASSWORD --databases $db > `date +%Y%m%d`.$db.sql
       # gzip $OUTPUT/`date +%Y%m%d`.$db.sql
    fi
done

Получить из дампа только одну таблицу, 1 аргумент файл базы данных, 2 аргумент имя таблицы
#!/bin/sh

DB=$1
TABLE=$2

if [ -f $DB ]; then
    /bin/gunzip -c $DB | /usr/bin/awk '/CREATE TABLE `'$TABLE'`/,/UNLOCK TABLES/' > /tmp/$DB.$TABLE.sql
    else
    echo 'FILE not found'
fi
Получить структуру базы данных из дампа
#!/bin/sh

DB=$1
if [ -f $DB ]; then
    /bin/gunzip -c $DB | /usr/bin/awk '/CREATE TABLE /,/ENGINE=/' > /tmp/$DB.$TABLE.sql
    else
    echo 'FILE not found'
fi
Проделать нечто со списком файлов
for list in `ls -1 /`; do echo "File -- ${list}"; done
Если в имени файла есть пробелы лучше использовать while.
(while read i; do cp  "${i}" "/destination"; done) < list
Сравнить два файла на наличие нехватки строк командой grep, данная команда покажет какие строки исчезли из файла new
grep -vFx old -f new
Или можно использовать diff
diff old new  | grep -E "^<" | sed -e 's/^< //g'
Прослушать микрофон удаленного компьютера по ssh
ssh user@host 'arecord -'|aplay -
Подключиться к камере удаленного компьютера по ssh
ssh user@host LD_PRELOAD=/usr/lib/libv4l/v4l1compat.so ffmpeg -an -f  video4linux2 -s 640x480 -i /dev/video0 -r 10 -b:v 500k -f matroska - | mplayer
LD_PRELOAD=/usr/lib/libv4l/v4l1compat.so — нужно если изображение будет перевернуто

Простейший сниффер на python2
#Packet sniffer in python
#For Linux
 
import socket
#create an INET, raw socket
s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_TCP)
# receive a packet
while True:
  print s.recvfrom(65565)
Создать gif из видео
ffmpeg -ss 00:22:00.000 -i yesbuddy.mov -r 10 -s 320x240 -t 00:00:10.000 output.gif
Перевернуть видео на 90 градусов без конвертации
ffmpeg -i in.mp4 -metadata:s:v rotate="-90" -codec copy out.mp4
Переконвертировать видео с указанным максимальные битрейтом, если нужно аля gif добавляем -an вырежет звук
ffmpeg -i in.mp4 -c:v libx264 -b:v 1M -maxrate 1.5M out.mp4
Заменить определенную строку в нескольких файлах
find -name "шаблонфайла*.txt" -exec replace "Что меняем" "На что меняем" -- {} \;
Вставить строку в определенное место в тексте при помощи sed
После:
find -type f -name "шаблонфайла*.txt" -exec sed -i '/Что ищем/a Что вставляем/' {} \;
Перед:
find -type f -name "шаблонфайла*.txt" -exec sed -i '/Что ищем/i Что вставляем/' {} \;
Массовое переименование по регулярному выражению.
Для начала проверьте что у вас за утилита rename командой rename --versionЕсли так, то все ок
/usr/bin/rename using File::Rename version 0.20
А если так, то рекомендую установить perl-rename
rename из util-linux 2.32
А теперь сама командая
find -type f -name "*.css?ver=3.3" -exec perl-rename 's/\?.*//' {} \;
\?.* — убрать все что после знака?

Если нужно скопировать файлы сохраняя путь можно использовать параметр --parents у команды cp
cp --parents from/files.* to/
Посмотреть какие страны в текущий момент поддерживают соединение с сервером. нужно geoip-bin
for ip in netstat -tapn | grep "ESTABLISHED" |  awk '{split($5,S,":");print S[1]}';do geoiplookup $ip; done | sort | uniq -c
Передать по ssh данные используя архиватор tar
tar -cz DIR | ssh root@inetsystems.ru tar -xz --directory /PATH/TO/DIR
Вырезать нежелательные данные из потока между определенных патернов
cat file | sed  '/Начало патерна/,/Конец патерна/g'
Вырезать содержимое между 2х паттернов
sed -n '/Начало патерна/,/Конец патерна/p' file.txt
Удалить ANSI color из вывода
sed 's/\x1b\[[0-9;]*m//g'  
Посмотреть топ 10 запросов с одного IP к виртуальному хосту в apache
cat /var/log/apache2/access.log  | awk '{print $1}' | sort | uniq -c | sort -rn | head -10

Найти в файле IP адреса при помощи grep
grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}" file.txt
Объединить данные из массива объектов json
cat file.json | jq '[.[].id] | join(",")' 
Данная заметка будет постоянно дополняться

Комментарии ()

    Авторизация

    GitHubGoogleVkontakteYandex
    Есть вопрос или предложение пиши в Telegram @cloudsv

    MTProto прokси для Telegram

    Прямой эфир

    Diego mont 25 мая 2023, 07:04
    Полезные боты в Telegram 2
    cloudsv 24 апреля 2023, 17:56
    Обновление Scala Rider G4 52
    cloudsv 12 ноября 2022, 19:16
    Установка и настройка minidlna 3
    cloudsv 03 ноября 2022, 03:42
    Настройка прокси mtproto для Telegram 52
    cloudsv 03 января 2022, 10:50
    Let's Encrypt это легко и просто 4
    cloudsv 10 сентября 2020, 13:17
    MySQL Workbench падает при подключении 2
    cloudsv 05 августа 2020, 11:57
    Мне вчера стукнуло 34 4
    cloudsv 07 августа 2023, 22:56
    Linux Asus ROG x13 flow 2022 GV301RE и Linux 0
    cloudsv 15 апреля 2023, 16:23
    Linux Уведомление о смены workspace в X11 Linux 0
    cloudsv 17 октября 2020, 09:55
    Linux Отключить DHCP IPv6 в systemd 0
    cloudsv 30 июля 2020, 21:54
    О жизни Мне вчера стукнуло 34 4
    cloudsv 15 апреля 2020, 15:45
    Linux Основные hotkeys редактора Vim 0
    cloudsv 01 октября 2019, 08:00
    Linux Локальный редирект порта в Linux 0
    cloudsv 25 августа 2019, 16:14
    О жизни Социальная сеть от Яндекса Aura 0
    cloudsv 30 июля 2019, 21:34
    О жизни 33 year old 0
    cloudsv 25 июня 2019, 18:29
    Telegram Полезные боты в Telegram 2