Заметка содержит набор команд, который бывают полезны при работе в консоли
grep – поиск текста
# Исключить строки, содержащие подстроку
grep -v "substring" filename.txt
# Вывести только искомый фрагмент
grep -o "substring" filename.txt
# Искать по регулярному выражению
grep -P "\d+" filename.txt
# Подсветить найденный фрагмент
grep --color "substring" filename.txt
# Рекурсивный поиск по всем поддиректориям
grep -r "substring" *
# Не выводить имя файла при поиске по файлам
grep -h "substring" *.txt
# или
grep --no-filename "substring" *.txt
tail – вывод последних строк файла
Для примера будем использовать файл, содержащий 20 строк
cat filename.txt
Показать
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# Вывести 5 последних строк
tail -n 5 filename.txt
# или
tail -n5 filename.txt
# или
tail -5 filename.txt
# Вывести файл, начиная с пятой строки
tail -n +5 filename.txt
# Следить за файлом и выводить по мере добавления новых строк, например, за файлом лога
tail -fn0 filename.txt
# Следить за файлом и выводить по мере добавления новых строк, если на момент вызова команды еще нет файла
tail -Fn0 filename.txt
head – поиск с начала файла
# Вывести первых 5 строк
head -n 5 filename.txt
# или
head -n5 filename.txt
# или
head -5 filename.txt
# Вывести все строки с начала, за исключением 5 последних
head -n -5 filename.txt
sed
# Удалить пустые строки
cat filename.txt | sed '/^$/d'
git
# Удалить тег локально
git tag -d <tag>
# Удалить тег в удаленном репозитории
git push origin :refs/tags/<tag>
# Второй способ удалить в удаленном репозитории
git push --delete origin <tag>
GPG
# Создать GPG ключ
gpg --full-generate-key
# Просмотр ключей
gpg --list-keys
# Экспортировать приватный ключ в файл export.gpg
gpg -o export.gpg --armor --export-options backup --export-secret-keys 4907A111A483CB6B3C4E894E7C8CD3E06FEB83C8
# или с указанием идентификатор
gpg -o export.gpg --armor --export-options backup --export-secret-keys gpg@example.com
# Импортировать ключ из файла export.gpg
gpg --import-options restore --import export.gpg
# Установка доверия ключа в не интерактивном режиме, например, после импорта
echo -e "5\ny\n" | gpg --command-fd 0 --expert --edit-key 4907A111A483CB6B3C4E894E7C8CD3E06FEB83C8 trust
# Подтвердить все ключи в не интерактивном режиме
for fpr in $(gpg --list-keys --with-colons | awk -F: '/fpr:/ {print $10}' | sort -u); do echo -e "5\ny\n" | gpg --command-fd 0 --expert --edit-key $fpr trust; done
# Сжать и зашифровать директорию
tar -czf - folder | gpg -e -r 4907A111A483CB6B3C4E894E7C8CD3E06FEB83C8 > folder.tar.gz.gpg
# Распаковать зашифрованный архив
gpg --decrypt folder.tar.gz.gpg | tar -xzf -
# Удалить секретный ключ
gpg --delete-secret-keys 4907A111A483CB6B3C4E894E7C8CD3E06FEB83C8
# Удалить открытый ключ
gpg --delete-keys 4907A111A483CB6B3C4E894E7C8CD3E06FEB83C8
Управление пользователями и группами
# Создать пользователя и домашнюю директорию
useradd --create-home username
# Добавление текущего пользователя в группу
sudo usermod -a -G <название группы> $USER
docker
# Получить entrypoint образа
docker inspect -f '{{.Config.Entrypoint}}' <image id>
# Получить тип операционной системы
docker version --format '{{.Server.Os}}'
# Получить платформу
docker version --format '{{.Client.Arch}}'
# Размер лога контейнеров
sudo du -h $(docker inspect --format='{{.LogPath}}' $(docker ps -qa))
# Тип системного драйвера логов
docker info --format '{{.LoggingDriver}}'
# Тип драйвера лога контейнера
docker inspect -f '{{.HostConfig.LogConfig.Type}} {{.Name}}' $(docker ps -qa)
systemd
# Валидация времени для таймера
systemd-analyze calendar --iterations 5 "*-*-* *:00/5"
# Вывод всех таймеров
systemctl list-timers --all
Манипуляции с переменными
# Перевести в верхний регистр
"${VAR^^}"
# Перевести в нижний регистр
"${VAR,,}"
# Заменить первый символ a на b
"${VAR/a/b}"
# Заменить все символы a на b
"${VAR//a/b}"
Разное
# Загрузить переменные окружения из файла
set -o allexport; source .env; set +o allexport
# Установить время модификации файла
touch -m -t $(date +%Y%m%d%H%M) filename