linux trick
Работа с файлами и директориями
Создаем директорию
mkdir -p /my/long/path/to/dir
И стремительно переходим в только, что созданную директорию без лишнего пути
cd !$
Если случайно сменили директорию, можно просто вернуться в последнюю набрав:
cd -
Создание нескольких директорий в одном каталоге одной командой
mkdir {dir2,dir3} # создаем три директории с именами FolderName001 FolderName001002 FolderName001003 mkdir FolderName001{001..3}
Меняем разрешения только на определенные каталоги в директории
chmod -R 775 /my/long/path/to/dir/{temp,logs}
Создайте несколько пустых файлов
touch /my/long/path/to/dir/{1..5}.txt
Убираем в файле все пробелы и комментарии
sed -e '/#/d; /^$/d'
Удаление всех файлов за исключением одного указанного:
rm -rf !(save_file_name)
Вывод списка директорий (без файлов)
ls -d */ dir -d */ find . -maxdepth 1 -type d tree -d -L 1 echo */ ls -l | grep '^d'
Копирование файла в несколько директорий
echo dir1 dir2 | xargs -n 1 cp -v test.file 'test.file' -> 'dir1/test.file' 'test.file' -> 'dir2/test.file'
Удаление файлов и директорий по дате
У find есть ключ mtime, который позволяет предаться данной забаве.
find /path/to/files/* -mtime +1 -delete
В примере выше есть нюанс. -mtime +1
модифицированные больше 1 дня назад, а -mtime 1
модифицированные один день назад (сегодня и позавчера уже не затронет). Вместо -delete, для начала можно ничего не писать, он выдаст на экран что найдет.
Либо так
#! /bin/bash i=7 #(или ваше число дней) find /path/to/files/ -type f -mtime +$i -exec rm -f {} \;
По ссылке можно подробнее ознакомится с временными метками
Временные метки файлов
Для того, чтобы увидеть временные метки файла, используется команда stat
touch FileName.txt stat FileName.txt Файл: 'FileName.txt' Размер: 0 Блоков: 0 Блок В/В: 4096 пустой обычный файл Устройство: 802h/2050d Inode: 14417922 Ссылки: 1 Доступ: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Доступ: 2019-10-28 15:06:47.243769073 +0300 Модифицирован: 2019-10-28 15:06:47.243769073 +0300 Изменён: 2019-10-28 15:06:47.243769073 +0300
Для того, чтобы получить дату установки OS:
# date ls -alct / | tail -1 | awk '{print $7, $6, $8}' # date and time ls -alct --time-style=+"%b %d %Y %H:%M:%S" / | tail -1 | awk '{print $6, $7, $8, $9}
История
Получить TOP 10 наиболее часто используемых команд в терминал. Дергаются естественно из истории.
history | awk '{print $2}' | sort | uniq -c | sort -rn | head -10
Убрать комментарии и пустые строки в файле
- С помощью sed
cat /etc/filename.conf | sed -e '/#/d; /^$/d'
- С помощью grep
cat /etc/nsswitch.conf | grep -Ev '(#.*$)|(^$)'
Еще можно выполнить поисковый запрос в командной строке набрав комбинацию клавиш Ctrl + r
Вывод аргументов
вывод аргументов последней команды
!:*
вывод последнего аргумента последней команды
!:$
Навигация в терминале
HotKey для навигации
Переместиться в начало терминала Shift + Ctrl PageUP Переместиться в конец терминала Shift + Ctrl PageDown Переместиться в на одну страницу вверх Shift PageUP Переместиться в на одну страницу вниз Shift PageDown Перевести букву в верхний регистр Alt + c Вырезать слово перед курсором Alt + d Вырезать слово после курсора Alt + w Перемещение в лево Alt + b Перемещение в право Alt + f Перейти в начало строки Ctrl + a Перейти в конец строки Ctrl + e Удалить строку слева от курсора Ctrl + u Удалить строку справа от курсора Ctrl + k Отчистить консоль Ctrl + l # or clear
Backup
Прежде, чем редактировать какой-либо конфиг, перед редакцией всенепременнейше нужно сделать его копию. Пример с файлом конфигурации dovecot.
Делаем бэкап:
cp /etc/dovecot/conf.d/10-mail.conf{,.bak251019}
Восстанавливаем из бекапа:
cp /etc/dovecot/conf.d/10-mail.conf{.bak251019,}
Указываем тёкшею дату при копировании
cp /etc/dovecot/conf.d/10-mail.conf{,.bak_$(date '+%F_%H:%M:%S')}
Архивируем несколько директорий
tar -cjf /var/backup/'date +%Y%m%d_%H%M%S'.tar.bz2 dir1 dir2 file3
Бекап только измененных файлов:
yes | cp -auv source/ destinaton/
Просмотр
Посмотреть все смонтированные устройства с человеко читаемым выводом:
mount | column -t
Удобный просмотр пользователей в файле /etc/passwd
cat /etc/passwd | column -t -s :
Сортировка процессов по памяти:
ps aux | sort -nk 4
Сортировка процессов по использованию CPU:
ps aux | sort -nk 3
Вывод результатов двух или более команд. Команды разделяются амперсандом;
{ uname -r & w; }
Поиск
Пример, как найти все файлы, содержащие определенный текст в файле
grep -Ril "text-to-find-here" /
Где:
- i обозначает случай игнорирования (необязательный аргумент).
- R означает рекурсивный.
- l означает «показать имя файла, а не сам результат».
Ищем ip адрес в файле
grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}" /var/log/apache2/access.log.1
- E Использовать расширенное регулярное выражение
- o Выводить только ip адрес
Сразу удаляем все найденное
grep -Ril "text-to-find-here" / | xargs rm -f
Еще как вариант:
grep -rn word /directory
Где:
-r
– рекурсивный обход каталога-n
– выведет номер строки в результатах
Пример поиска с использованием нескольких шаблонов:
egrep -rn '(word1|word2|word3)' /home/vasyan/somedir
Поиск одинаковых файлов
По контрольной сумме
find . ! -empty -type f -exec md5sum {} + | sort | uniq -w32 -dD
Либо воспользоваться утилитой fdupes
Поиск файлов содержащих пробел в имени
find . -type f -name '* *'
Переименование
Быстро переименовать файл можно так:
mv filename.{old,new}
Заменяем нижние подчёркивания в имени файла на пробелы:
rename "s/_/ /g" * # либо так find -type f -name '*_*' | xargs -n1 bash -c 'mv "$0" "${0//_/ }"'
Пути
Находим путь до исполняемого файла
readlink -f -- "$(which awk)" /usr/bin/gawk
Диски
Смотрим размер дисков:
lsblk -o name,size NAME SIZE sda 256G sdb 256G
Сеть
Сортировка по количеству подключений tcp:
netstat -ntu | awk '{print $5}'| cut -d: -f1 -s | sort | uniq -c | sort -nk1 -r
Посмотреть свой внешний ip
curl http://ifconfig.co