Это многостраничный печатный вид этого раздела. Нажмите что бы печатать.

Вернуться к обычному просмотру страницы.

Linux

Linux — это семейство операционных систем, работающих на основе одноименного ядра.

1 - Шпаргалка по полезным командам Linux для работы с дисками и устройствами

Шпаргалка по полезным командам Linux для работы с дисками и устройствами и не только

1. dd – Копирование и конвертация данных

Основное использование:

dd if=входной_файл of=выходной_файл [опции]

Примеры:

  • Создать образ диска:
    dd if=/dev/sda of=backup.img bs=4M status=progress
    
  • Записать образ на USB:
    dd if=ubuntu.iso of=/dev/sdb bs=4M status=progress
    
  • Создать файл-заполнитель (1 ГБ):
    dd if=/dev/zero of=testfile bs=1G count=1
    

Опции:

  • bs=N – размер блока (например, 4M, 1K).
  • count=N – количество блоков.
  • status=progress – показывает прогресс.
  • Флаг conv= (convert) позволяет задать дополнительные преобразования данных. Можно указывать несколько параметров через запятую.

1. conv=sync

  • Назначение: Дополняет каждый ввод (input block) нулями до полного размера блока, если он был прочитан не полностью.
  • Пример использования:
    dd if=/dev/sda of=image.img bs=4K conv=sync
    
    • Если при чтении блока в 4 КБ считалось только 2 КБ (например, из-за ошибки), оставшиеся 2 КБ будут заполнены нулями.
    • Полезно для сохранения выравнивания блоков при копировании повреждённых данных.

2. conv=noerror

  • Назначение: Продолжать копирование, даже если встретились ошибки чтения.
  • Пример:
    dd if=/dev/sda of=image.img bs=4K conv=noerror,sync
    
    • Без noerror dd остановится при первой ошибке.
    • Важно: Обычно используется вместе с sync, чтобы сохранить размер блока.

3. Другие полезные флаги conv=

Флаг Описание
notrunc Не обрезать выходной файл (полезно при дозаписи).
fsync Синхронизировать данные на диск перед завершением.
fdatasync Синхронизировать только данные (без метаданных).
excl Запретить перезапись существующего файла.
nocreat Не создавать выходной файл, если его нет.

Примеры комбинаций

  1. Копирование диска с игнорированием ошибок и синхронизацией блоков:

    dd if=/dev/sda of=backup.img bs=1M conv=noerror,sync status=progress
    
    • Продолжает копирование при ошибках, дополняя неполные блоки нулями.
  2. Дозапись в файл без его обрезки:

    dd if=data.bin of=output.bin bs=1M conv=notrunc
    
  3. Копирование с гарантированной записью на диск:

    dd if=source.iso of=/dev/sdb bs=4M conv=fsync
    
  • Комбинация noerror,sync часто используется при копировании повреждённых дисков.
  • Если нужно создать точную копию с возможными ошибками, лучше использовать ddrescue (из пакета gddrescue), так как он более эффективен при восстановлении данных.

2. df – Информация о свободном месте на дисках

Основное использование:

df [опции] [файл/устройство]

Примеры:

  • Показать место в человеко-читаемом формате:
    df -h
    
  • Показать только определённую файловую систему:
    df -h /dev/sda1
    
  • Показать тип файловой системы:
    df -Th
    

Опции:

  • -h – человеко-читаемый формат (KB, MB, GB).
  • -T – показать тип файловой системы.
  • -i – показать использование inodes.

3. du – Анализ использования диска файлами и папками

Основное использование:

du [опции] [путь]

Примеры:

  • Проверить размер папки:
    du -sh /home/user/
    
  • Показать размер всех подпапок:
    du -h --max-depth=1 /var/
    
  • Найти самые большие файлы:
    du -ah / | sort -rh | head -10
    

Опции:

  • -s – только итоговая сумма.
  • -h – человеко-читаемый формат.
  • --max-depth=N – глубина вложенности.

4. ncdu – Интерактивный анализ дискового пространства

Установка (если нет):

sudo apt install ncdu  # Debian/Ubuntu
sudo dnf install ncdu  # Fedora

Примеры:

  • Анализ текущей папки:
    ncdu
    
  • Анализ всей системы (требует root):
    sudo ncdu /
    

Управление в ncdu:

  • ↑/↓ – навигация.
  • Enter – войти в папку.
  • d – удалить файл/папку.
  • q – выход.

5. lsblk – Список блочных устройств (диски, разделы)

Основное использование:

lsblk [опции]

Примеры:

  • Показать все устройства в дереве:
    lsblk
    
  • Показать UUID и файловую систему:
    lsblk -f
    
  • Показать размеры в человеко-читаемом формате:
    lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT -e7
    

Опции:

  • -f – показать файловые системы.
  • -o – выбрать поля для вывода.
  • -e7 – исключить loop-устройства.

6. lsusb – Список USB-устройств

Основное использование:

lsusb [опции]

Примеры:

  • Показать все USB-устройства:
    lsusb
    
  • Подробный вывод:
    lsusb -v
    

Опции:

  • -v – подробная информация.
  • -t – вывод в виде дерева.

7. lspci – Список PCI-устройств

Основное использование:

lspci [опции]

Примеры:

  • Показать все устройства:
    lspci
    
  • Подробно о видеокарте:
    lspci -v -s $(lspci | grep VGA | cut -d' ' -f1)
    

Опции:

  • -v – подробный вывод.
  • -nn – показать ID производителя.
  • -k – показать драйверы.

Итог

Команда Описание
dd Копирование данных на низком уровне
df Свободное место на дисках
du Размер файлов и папок
ncdu Интерактивный анализ диска
lsblk Список дисков и разделов
lsusb Список USB-устройств
lspci Список PCI-устройств

🚀 Полезные сочетания:

  • df -h | grep -v loop – показать только реальные диски.
  • du -sh * | sort -h – сортировка файлов по размеру.
  • lsblk -o NAME,SIZE,MOUNTPOINT,FSTYPE – удобный вывод дисков.

1.1 - Разбор конструкции find -exec и варианты использования

Эти команды — мощные инструменты для поиска, обработки и фильтрации данных в Linux.

1. Что означает {} \; в команде find?

  • {} – это специальный placeholder, который заменяется на имя каждого найденного файла.
  • \;завершает команду, передаваемую в -exec. Обратный слэш (\) экранирует точку с запятой, чтобы shell не интерпретировал её как конец команды.

Пример:

find /home -user olduser -exec chown newuser {} \;

Здесь:

  1. find ищет все файлы в /home, принадлежащие olduser.
  2. Для каждого файла выполняется chown newuser filename.
  3. {} подставляется как имя файла, а \; указывает на конец команды.

2. Альтернативные форматы -exec

Вариант 1: + вместо \; (группировка файлов)
  • + в конце передаёт все найденные файлы одной командой (эффективно для массовых операций).

Пример:

find /var/log -name "*.log" -exec tar -czvf logs.tar.gz {} +
  • Создаёт один архив со всеми .log-файлами (вместо запуска tar для каждого файла отдельно).
Вариант 2: -execdir (безопасное выполнение)
  • Выполняет команду в директории файла (защита от path injection).

Пример:

find /tmp -type f -execdir rm {} \;
  • Удаляет файлы, запуская rm из их родительских директорий.

3. Другие полезные команды с -exec

Изменение прав (chmod)
find /path -type f -exec chmod 644 {} \;
  • Устанавливает права 644 на все файлы.
Поиск и замена текста (sed)
find . -name "*.txt" -exec sed -i 's/foo/bar/g' {} \;
  • Заменяет foo на bar во всех .txt-файлах.
Копирование файлов (cp)
find /src -name "*.jpg" -exec cp {} /dest \;
  • Копирует все .jpg из /src в /dest.
Подсчёт строк (wc)
find . -type f -exec wc -l {} \;
  • Считает строки в каждом файле.
Удаление файлов старше 30 дней
find /backups -mtime +30 -exec rm {} \;
  • Удаляет файлы, не изменявшиеся больше месяца.

4. Комбинации с xargs (альтернатива -exec)

Если -exec неудобен, можно использовать xargs:

find /path -name "*.tmp" | xargs rm
  • xargs передаёт имена файлов в rm пачками (аналогично + в -exec).

С обработкой пробелов в именах:

find /path -name "*.log" -print0 | xargs -0 tar -czvf logs.tar.gz
  • -print0 и -0 корректно обрабатывают пробелы в путях.

5. Полезные опции find для -exec

Опция Пример Описание
-type f find /path -type f -exec ... Только файлы.
-type d find /path -type d -exec ... Только директории.
-mtime -7 find /log -mtime -7 -exec ... Файлы, изменённые за последние 7 дней.
-size +1G find / -size +1G -exec ... Файлы >1 ГБ.
-perm 777 find / -perm 777 -exec ... Файлы с правами 777.

Итог

  • {} \; – подставляет имя файла и завершает команду.
  • + – группирует файлы для одной команды (эффективнее).
  • -execdir – безопасное выполнение в директории файла.
  • Альтернативы: xargs, -delete, -printf.

Пример на все случаи:

find ~/Downloads -name "*.iso" -size +1G -exec ls -lh {} +
  • Находит ISO-файлы >1 ГБ в ~/Downloads и выводит их список с размерами.

1.2 - Шпаргалка по find, sed, ugrep

Эти команды — мощные инструменты для поиска, обработки и фильтрации данных в Linux. Здесь собраны примеры для ежедневного использования.

**Шпаргалка по find, sed, ugrep (+ grep)


1. find – Поиск файлов и выполнение действий

🔍 Базовый поиск

  1. Найти файлы по имени (регистронезависимо):
    find /path -iname "*.txt"
    
  2. Найти файлы, изменённые за последние 7 дней:
    find /path -mtime -7
    
  3. Найти файлы размером >100 МБ:
    find /path -size +100M
    
  4. Найти пустые файлы и директории:
    find /path -empty
    
  5. Найти файлы с правами 755:
    find /path -perm 755
    

⚡ Действия с найденными файлами

  1. Удалить все .tmp-файлы:
    find /path -name "*.tmp" -delete
    
  2. Изменить владельца файлов:
    find /path -user olduser -exec chown newuser {} \;
    
  3. Архивировать все .log-файлы:
    find /var/log -name "*.log" -exec tar -czvf logs.tar.gz {} +
    
  4. Найти и заменить права:
    find /path -type f -exec chmod 644 {} \;
    
  5. Найти файлы и вывести их размер:
    find /path -type f -exec du -h {} \;
    

2. sed – Потоковый редактор (поиск и замена текста)

🔧 Базовые замены

  1. Заменить первое вхождение в строке:
    echo "Hello World" | sed 's/World/Linux/'
    
  2. Заменить все вхождения:
    echo "a b a b" | sed 's/a/c/g'
    
  3. Удалить строки, содержащие error:
    sed '/error/d' file.txt
    
  4. Удалить пустые строки:
    sed '/^$/d' file.txt
    
  5. Заменить только в строках, содержащих debug:
    sed '/debug/s/old/new/' file.txt
    

📂 Работа с файлами

  1. Заменить в файле на месте (с бэкапом):
    sed -i.bak 's/old/new/g' file.txt
    
  2. Удалить строки с 5 по 10:
    sed '5,10d' file.txt
    
  3. Вывести только строки с 20 по 30:
    sed -n '20,30p' file.txt
    
  4. Добавить текст в начало файла:
    sed -i '1i New Header' file.txt
    
  5. Добавить текст в конец файла:
    sed -i '$a Footer Text' file.txt
    

3. grep/ugrep – Поиск текста в файлах

🔎 Базовый поиск

  1. Найти слово в файле (регистронезависимо):
    grep -i "pattern" file.txt
    
  2. Найти точное совпадение (целое слово):
    grep -w "word" file.txt
    
  3. Вывести только совпадающую часть:
    grep -o "pattern" file.txt
    
  4. Найти строки, НЕ содержащие шаблон:
    grep -v "exclude" file.txt
    
  5. Подсчитать количество совпадений:
    grep -c "pattern" file.txt
    

📂 Рекурсивный поиск

  1. Искать в всех файлах директории:
    grep -r "pattern" /path/
    
  2. Искать только в .php-файлах:
    grep -r --include="*.php" "pattern" /path/
    
  3. Искать в файлах без .log:
    grep -r --exclude="*.log" "pattern" /path/
    
  4. Искать в скрытых файлах:
    grep -r --hidden "pattern" /path/
    
  5. Искать в файлах изменённых за последние 2 дня:
    find /path -mtime -2 -type f -exec grep -l "pattern" {} \;
    

🚀 ugrep – Улучшенный grep

  1. Поиск с подсветкой и нумерацией строк:
    ugrep -n --color=auto "pattern" file.txt
    
  2. Поиск с контекстом (строки до/после):
    ugrep -C 3 "pattern" file.txt  # 3 строки вокруг
    
  3. Поиск с инвертированным контекстом:
    ugrep -v -C 2 "pattern" file.txt
    
  4. Поиск сжатых файлов (.gz, .zip):
    ugrep -z "pattern" archive.gz
    
  5. Поиск с регулярными выражениями:
    ugrep -P "\d{3}-\d{2}-\d{4}" file.txt  # Поиск SSN
    

4. Комбинации команд (find + grep + sed)

🔗 Поиск + обработка

  1. Найти все .conf-файлы и заменить http на https:
    find /etc -name "*.conf" -exec sed -i 's/http/https/g' {} \;
    
  2. Найти файлы, содержащие password, и вывести их имена:
    find /path -type f -exec grep -l "password" {} \;
    
  3. Удалить все строки с # TODO из .py-файлов:
    find . -name "*.py" -exec sed -i '/# TODO/d' {} \;
    

📊 Анализ логов

  1. Найти ошибки в логах за последний час:
    grep "ERROR" /var/log/syslog | grep "$(date -d '1 hour ago' '+%b %d %H')"
    
  2. Посчитать уникальные IP в Nginx-логе:
    awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr
    

📂 Массовая обработка файлов

  1. Переименовать все .jpg.png:
    find . -name "*.jpg" | sed 's/\.jpg$//' | xargs -I {} mv {}.jpg {}.png
    
  2. Удалить BOM из UTF-8 файлов:
    find . -type f -exec sed -i '1s/^\xEF\xBB\xBF//' {} \;
    
  3. Удалить все пробелы в конце строк:
    find . -type f -exec sed -i 's/[[:space:]]*$//' {} \;
    

🔒 Безопасность

  1. Найти файлы с SUID/SGID:
    find / -type f \( -perm -4000 -o -perm -2000 \) -exec ls -la {} \;
    
  2. Найти открытые порты и процессы:
    netstat -tulnp | grep -E '0.0.0.0|:::'
    

📜 Разное

  1. Извлечь все email из файла:
    grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b" file.txt
    
  2. Заменить CRLFLF (Windows → Unix):
    sed -i 's/\r$//' file.txt
    
  3. Удалить HTML-теги из файла:
    sed 's/<[^>]*>//g' file.html
    
  4. Найти дубликаты файлов по содержимому:
    find . -type f -exec md5sum {} + | sort | uniq -w32 -dD
    
  5. Случайная строка из файла:
    shuf -n 1 file.txt
    

Итоговая таблица

Задача Команда
Поиск файлов find /path -name "*.txt"
Замена текста sed 's/old/new/g' file.txt
Рекурсивный поиск текста grep -r "pattern" /path/
Удаление строк sed '/pattern/d' file.txt
Поиск в логах grep "ERROR" /var/log/syslog

🚀 Совет:

  • ugrep быстрее grep и поддерживает расширенные regex (-P).
  • find + exec мощнее xargs, но xargs лучше для большого числа файлов.

2 - Что такое PGP?

PGP (Pretty Good Privacy) — это криптографическая программа, обеспечивающая конфиденциальность и аутентификацию данных при передаче. По сути, это стандарт для шифрования сообщений электронной почты, файлов, каталогов и даже целых дисков.

PGP использует гибридную криптосистему, сочетающую в себе симметричное и асимметричное шифрование, что делает его одновременно эффективным и безопасным.

Ключевые концепции: как это работает

  1. Асимметричное шифрование (Криптография с открытым ключом):
    • У каждого пользователя есть пара ключей:
      • Закрытый ключ (Private Key): Должен храниться в строжайшем секрете. Никогда и никому не передается. Используется для расшифровки данных, предназначенных вам, и для подписи ваших сообщений.
      • Открытый ключ (Public Key): Может свободно распространяться кому угодно (публиковаться на сайте, в ключевых серверах, отправляться по почте). Используется для шифрования данных, которые сможете расшифровать только вы, и для проверки вашей цифровой подписи.
    • Принцип: То, что зашифровано открытым ключом, может быть расшифровано только соответствующим закрытым ключом, и наоборот.
flowchart TD
    subgraph Sender [Отправитель]
        A[Исходное сообщение] --> B{Создать цифровую подпись}
        B --> C[Зашифровать своим<br>Закрытым ключом]
        C --> D[Цифровая подпись]

        A --> E[Исходное сообщение]
        D --> F{Объединить сообщение и подпись}
        E --> F
        F --> G[Подписанное сообщение]

        G --> H{Зашифровать сообщение}
        H --> I[Сгенерировать случайный<br>сеансовый ключ]
        I --> J[Зашифровать сообщение<br>сеансовым ключом симметрично]
        J --> K[Зашифрованное сообщение]

        I --> L[Зашифровать сеансовый ключ<br>Открытым ключом получателя]
        L --> M[Зашифрованный сеансовый ключ]

        K --> N{Объединить для отправки}
        M --> N
        N --> O[Итоговые данные для отправки]
    end

    O --> P[Передача по незащищенному каналу<br>e.g. Интернет, почтовый сервер]

    subgraph Receiver [Получатель]
        P --> Q[Итоговые данные для отправки]
        Q --> R{Разделить данные}
        R --> S[Зашифрованный сеансовый ключ]
        R --> T[Зашифрованное сообщение]

        S --> U[Расшифровать сеансовый ключ<br>своим Закрытым ключом]
        U --> V[Сеансовый ключ]
        
        T --> W[Расшифровать сообщение<br>сеансовым ключом]
        V --> W
        W --> X[Подписанное сообщение]

        X --> Y{Разделить сообщение и подпись}
        Y --> Z[Полученное сообщение]
        Y --> AA[Цифровая подпись]

        AA --> AB[Расшифровать подпись<br>Открытым ключом отправителя]
        AB --> AC[Оригинальный хэш отправителя]

        Z --> AD[Вычислить хэш от<br>полученного сообщения]
        AD --> AE[Хэш полученного сообщения]

        AC --> AF{Сравнить хэши}
        AE --> AF

        AF -- Совпали --> AG[✅ Подпись верна<br>Сообщение аутентично и не изменено]
        AF -- Не совпали --> AH[❌ Подпись неверна!<br>Сообщение отклонено]
    end
  1. Цифровая подпись:

    • Позволяет получателю убедиться в двух вещах:
      • Аутентичность: Сообщение действительно отправлено вами.
      • Целостность: Сообщение не было изменено во время передачи.
    • Как создается: Вы создаете хэш (отпечаток) вашего сообщения и шифруете этот хэш своим закрытым ключом. Получатель расшифровывает хэш вашим открытым ключом, вычисляет хэш полученного сообщения самостоятельно и сравнивает их. Если они совпали — подпись верна.
  2. Гибридная система:

    • Шифровать большие объемы данных (например, длинное письмо) асимметричным шифрованием computationally expensive (требует много вычислительных ресурсов).
    • Решение PGP:
      1. Программа создает случайный сеансовый ключ (симметричный, один и тот же для шифрования и расшифровки).
      2. Этим сеансовым ключом шифруется само сообщение (быстро и эффективно).
      3. Этот сеансовый ключ сам шифруется открытым ключом получателя.
      4. Зашифрованное сообщение и зашифрованный сеансовый ключ отправляются получателю.
    • Получатель:
      1. Своим закрытым ключом расшифровывает сеансовый ключ.
      2. Расшифрованным сеансовым ключом расшифровывает всё сообщение.
flowchart TD
    subgraph Sender [Отправитель]
        direction LR
        A[Исходные данные<br>Сообщение или файл] --> B[Сгенерировать случайный<br>сеансовый ключ]
        B --> C[Зашифровать данные<br>сеансовым ключом<br>Симметричное шифрование AES]
        B --> D[Зашифровать сеансовый ключ<br>Открытым ключом получателя<br>Асимметричное шифрование RSA]
        C --> E[Зашифрованные данные]
        D --> F[Зашифрованный сеансовый ключ]
        E --> G[Объединить и отправить]
        F --> G
    end

    G --> H[Передача]

    subgraph Receiver [Получатель]
        direction LR
        H --> I[Принять данные]
        I --> J[Извлечь зашифрованный<br>сеансовый ключ]
        I --> K[Извлечь зашифрованные данные]
        J --> L[Расшифровать сеансовый ключ<br>своим Закрытым ключом]
        L --> M[Сеансовый ключ]
        K --> N[Расшифровать данные<br>сеансовым ключом]
        M --> N
        N --> O[Исходные данные]
    end

Схема омена ключами

flowchart TD
    A[Алиса генерирует свою<br>пару ключей] --> B[Алиса публикует свой<br>Открытый ключ на сервере]
    A --> C[Алиса отправляет свой<br>Открытый ключ Бобу по email]

    subgraph Bob [Действия Боба]
        D[Боб генерирует свою<br>пару ключей] --> E[Боб получает ключ Алисы]
        B -.-> E
        C --> E
        E --> F{Верифицировать отпечаток ключа}
        F -- "Звонок Алисе,<br>сверка отпечатков" --> G[✅ Ключ доверен]
        F -- "Отпечаток не проверен" --> H[❌ Ключ не доверен]
        G --> I[Боб может отправлять<br>Алисе зашифрованные сообщения]
    end

    subgraph Alice [Действия Алисы]
        J[Алиса получает ключ Боба] --> K[Алиса верифицирует<br>отпечаток ключа Боба]
        K --> L[✅ Ключ доверен]
        L --> M[Алиса может отправлять<br>Бобу зашифрованные сообщения]
    end

Пошаговое руководство по применению PGP

Современное применение PGP чаще всего сводится к использованию его реализаций с графическим интерфейсом, которые упрощают процесс.

Шаг 1: Установка необходимого ПО

Вам не нужна оригинальная коммерческая программа PGP. Существует ее бесплатный и открытый аналог — GnuPG (GPG). Это движок командной строки. Для удобства ставьте программы с графическим интерфейсом:

  • Для электронной почты:
    • Thunderbird (почтовый клиент) + дополнение Enigmail. Это классическая и очень мощная связка.
    • Mailvelope — расширение для браузеров (Chrome, Firefox), которое позволяет работать с PGP прямо в веб-интерфейсах, таких как Gmail, Outlook.com и т.д.
  • Для шифрования файлов/текста:
    • Gpg4win (для Windows) — комплект, включающий GPG, Kleopatra (менеджер ключей), плагины для Outlook и др.
    • GPG Suite (для macOS) — аналогичный комплект для Mac.
    • Kleopatra — кроссплатформенный менеджер ключей и сертификатов.

Шаг 2: Генерация пары ключей

  1. Установите, например, Gpg4win или GPG Suite.
  2. Запустите менеджер ключей (Kleopatra или другой).
  3. Нажмите «Создать новую пару ключей» («New Key Pair»).
  4. Введите свои данные:
    • Имя и Email: Это идентифицирует ваш ключ. Указывайте реальный email, на который планируете получать зашифрованные письма.
    • Парольная фраза (Passphrase): Это ОЧЕНЬ ВАЖНО. Парольная фраза защищает ваш закрытый ключ на диске. Она должна быть длинной и сложной (например, 4-5 случайных слов). Без нее даже кража вашего закрытого ключа будет бесполезна.
  5. Дождитесь завершения генерации. Процесс может занять несколько минут, так как программа собирает энтропию (случайные данные) от ваших действий с мышкой и клавиатурой.

Шаг 3: Обмен открытыми ключами

Чтобы кто-то мог отправить вам зашифрованное сообщение, ему нужен ваш открытый ключ.

  • Экспорт: В вашем менеджере ключей (Kleopatra) вы можете экспортировать открытый ключ в файл (обычно с расширением .asc или .pub). Этот файл представляет собой блок текста между строками -----BEGIN PGP PUBLIC KEY BLOCK----- и -----END PGP PUBLIC KEY BLOCK-----.
  • Способы распространения:
    • Отправить по email: Просто прикрепите файл .asc к письму.
    • Скопировать текст: Скопируйте текстовый блок и вставьте его в тело письма.
    • Ключевые серверы (Keyservers): Это специальные публичные базы данных открытых ключей. Вы можете «залить» (upload) свой ключ на сервер (например, keys.openpgp.org). Тогда любой человек, зная ваш email, сможет его найти. (Важно: удалить ключ с ключевого сервера обычно невозможно!)

Шаг 4: Импорт и проверка чужих открытых ключей

Чтобы отправить сообщение кому-то, вам нужен их открытый ключ.

  1. Импорт: Получите файл ключа или текстовый блок. В вашем менеджере ключей будет функция «Импорт» («Import»), где вы можете указать файл или вставить текст.
  2. Верификация (Крайне важный шаг!): Как убедиться, что импортированный ключ действительно принадлежит тому, кто вам его прислал, а не злоумышленнику (атака “man-in-the-middle”)?
    • Сравнение отпечатка (Fingerprint): У каждого ключа есть уникальный «отпечаток» — длинная строка из букв и цифр (например, AB12 CD34 EF56 7890 ...). Свяжитесь с человеком другим, доверенным каналом связи (телефонный звонок, мессенджер с E2EE типа Signal/Telegram, личная встреча) и сравните отпечатки. Если они совпали — ключ подлинный.
    • Подпись ключей (Web of Trust): Более продвинутый метод, когда ваши доверенные контакты digitally подписывают ваш ключ, подтверждая его подлинность для третьих лиц.

Шаг 5: Шифрование и подпись

  • В почтовом клиенте (Thunderbird + Enigmail): После настройки в интерфейсе письма появятся кнопки «Зашифровать» (иконка с ключом) и «Подписать» (иконка с ручкой). Просто отметьте нужные галочки перед отправкой. Плагин сам найдет открытый ключ получателя в вашей связке и всё сделает.
  • В веб-почте (Mailvelope): Расширение добавит свою кнопку в интерфейс Gmail/Yahoo и т.д. Нажав на нее, вы откроете окно, где можно ввести текст, выбрать получателя (чей открытый ключ использовать) и зашифровать. Результат вставится в тело письма.
  • Для файлов (Kleopatra): Через меню «Файл» -> «Зашифровать/Расшифровать» можно выбрать файлы и указать получателей.

Шаг 6: Расшифровка и проверка

  • Когда вы получаете зашифрованное письмо, ваш почтовый плагин (Enigmail/Mailvelope) автоматически распознает его.
  • Он проверит, есть ли у вас в связке закрытый ключ, соответствующий адресу получателя.
  • Если есть, он запросит у вас парольную фразу для доступа к этому закрытому ключу и автоматически расшифрует сообщение.
  • Если письмо было подписано, плагин также покажет результат проверки подписи (например, зеленую галочку и текст “Проверенная подпись от Имя Отправителя”).

Сценарии применения

  1. Конфиденциальная переписка: Самая частая цель. Защита содержимого писем от прочтения провайдерами, хакерами, правительственными агентствами.
  2. Защита целостности данных: Отправка важных документов (договоров, инструкций) с подписью, чтобы получатель мог быть уверен, что их не подменили.
  3. Шифрование файлов на диске: Можно зашифровать чувствительные файлы на своем компьютере или на флеш-накопителе, чтобы даже в случае утери устройства данные были защищены.
  4. Анонимность в darknet: PGP — обязательный стандарт для безопасного общения на теневых форумах и в рынках, где анонимность критически важна.

Сильные и слабые стороны

Сильные стороны:

  • Высокий уровень безопасности при правильном использовании.
  • Де-факто стандарт, поддерживается многими платформами.
  • Децентрализованность — не зависит от единого центра сертификации.

Слабые стороны:

  • Сложность для обычных пользователей: Основная причина, почему PGP не стал мейнстримом.
  • Проблема верификации ключей: Сложно надежно проверить, что ключ действительно принадлежит нужному человеку.
  • Уязвимости метаданных: PGP шифрует тело письма, но не скрывает метаданные (тему, отправителя, получателя, дату отправки). Эта информация остается открытой.
  • Управление ключами: Потеря закрытого ключа или парольной фразы означает безвозвратную потерю доступа к данным. Компрометация ключа требует его отзыва и генерации нового.

Вывод

PGP — это мощный, проверенный временем инструмент для защиты приватности, который остается золотым стандартом для шифрования email. Его применение требует определенных усилий для изучения и дисциплины для постоянного использования. Для большинства пользователей лучшей отправной точкой является установка Thunderbird с плагином Enigmail или браузерного расширения Mailvelope.

2.1 - Структура хранения ключей

Описание структуры хранения ключей при установке GnuPG

1. База данных и структура хранения GnuPG на компьютере

GnuPG не использует единую базу данных в традиционном понимании (как SQLite или MySQL). Вместо этого он использует набор файлов в специальном каталоге (обычно ~/.gnupg/ в Linux/macOS или %APPDATA%\gnupg в Windows). Это портативная и простая в резервном копировании структура.

Вот ключевые файлы и их назначение:

Файл / Каталог Назначение и описание
~/.gnupg/ Домашний каталог GnuPG. Основное место хранения всех данных. Его местоположение можно изменить через переменную окружения GNUPGHOME или опцию --homedir.
pubring.kbx Основной файл с открытыми ключами (публичными). Это ключевой файл в современном формате “keybox” (KBX), который используется по умолчанию в версиях GnuPG 2.1 и новее. Хранит импортированные открытые ключи.
trustdb.gpg База данных доверия (Trust DB). Это самая близкая к “базе данных” часть. Она не содержит самих ключей, а хранит информацию о уровне доверия, который вы назначили владельцам ключей (например, “полное”, “ограниченное”, “недоверенное”), и вычисленные на основе этой информации валидности ключей (ultimate, full, marginal, expired, revoked и т.д.).
private-keys-v1.d/ Каталог с секретными ключами. Это очень важный каталог. В современных версиях каждый секретный ключ (закрытый) хранится в отдельном файле с расширением .key. Файлы зашифрованы с использованием вашей парольной фразы. Это то, что нужно бэкопировать в первую очередь и максимально защищать!
openpgp-revocs.d/ Каталог с предварительно сгенерированными отзывными сертификатами. Когда вы создаете новый ключ, GnuPG автоматически генерирует сертификат для его отзыва (чтобы вы могли объявить ключ недействительным, если забыли пароль или потеряли доступ к нему). Имена файлов соответствуют отпечаткам ключей.
gpg.conf Главный файл конфигурации для команды gpg. Сюда можно прописать все часто используемые опции (например, используемый keyserver, алгоритмы по умолчанию и т.д.).
dirmngr.conf Файл конфигурации для dirmngr — демона, отвечающего за взаимодействие с keyserver-ами и проверку сертификатов OCSP.
gpg-agent.conf Файл конфигурации для gpg-agent — демона, который управляет секретными ключами, кэширует парольные фразы и обеспечивает безопасность их использования.

Устаревшие файлы (встречаются в старых системах или после обновления):

  • pubring.gpg, secring.gpg: Публичные и секретные ключи в старом формате. Современные версии GnuPG (>2.1) используют pubring.kbx и каталог private-keys-v1.d/ вместо secring.gpg.

Как это работает вместе?

  1. Когда вы выполняете gpg --list-keys, программа читает список открытых ключей из pubring.kbx.
  2. Когда вы проверяете подпись, gpg сверяется с trustdb.gpg, чтобы узнать, насколько ключ, которым подписан файл, валиден с точки зрения вашей сети доверия.
  3. Когда вы подписываете или расшифровываете что-либо, gpg обращается к gpg-agent.
  4. gpg-agent находит нужный секретный ключ в каталоге private-keys-v1.d/, запрашивает у вас пароль для его расшифровки (если он еще не закэширован) и выполняет криптографическую операцию.

2. Что устанавливается при установке GnuPG

При установке GnuPG (пакет gnupg, gnupg2 или установщик для Windows) устанавливается не одна программа, а целый набор взаимосвязанных компонентов:

Компонент Назначение
gpg / gpg2 Основная программа (бинарник). Это командная утилита, с которой взаимодействует пользователь. Именно она вызывает все остальные компоненты для выполнения задач. В версиях 2.x основной бинарник называется gpg2, но часто существует символьная ссылка gpg на него для совместимости.
gpg-agent Агент управления ключами. Это фоновый процесс (демон), который:
• Управляет секретными ключами.
• Кэширует введенные парольные фразы в течение заданного времени (чтобы не вводить пароль каждый раз).
• Перенаправляет запросы на ввод пароля на правильный PIN-entry.
Это ключевой компонент для безопасности и удобства.
gpg-connect-agent Утилита для отладки и отправки команд gpg-agentу напрямую.
gpgconf Утилита для управления конфигурацией runtime-процессов GnuPG (например, для перезагрузки агента или просмотра используемых опций).
dirmngr Менеджер каталогов. Еще один фоновый процесс, который отвечает за:
• Связь с keyserver-ами (получение ключей, отправка ключей, поиск).
• Проверку отозванных сертификатов (CRL/OCSP) для технологии S/MIME (используется в gpgsm).
gpgsm Утилита для работы с сертификатами S/MIME (стандарт, часто используемый в почтовых клиентах). Работает с X.509 сертификатами, а не с OpenPGP ключами.
gpgparsemail, gpgscm и др. Вспомогательные скрипты и утилиты для обработки почты и тестирования.
pinentry-* Набор программ для ввода пароля. Это отдельные пакеты (например, pinentry-gtk2, pinentry-qt, pinentry-curses, pinentry-tty), которые должны быть установлены вместе с GnuPG. Агент gpg-agent вызывает pinentry, чтобы показать графический или текстовый диалог ввода пароля. Это сделано для изоляции и безопасности — сам gpg-agent не имеет доступа к дисплею.

Итог: Установка GnuPG — это установка целой экосистемы (gpg, gpg-agent, dirmngr), которая работает вместе, чтобы предоставить полнофункциональную криптографическую инфраструктуру. Данные хранятся в виде набора файлов в домашнем каталоге, а не в единой монолитной базе, что упрощает резервное копирование и перенос.

2.2 - gpg-agent

gpg-agent — это демон для управления секретными (приватными) ключами независимо от какого-либо протокола. Он используется в качестве бэкенда для gpg и gpgsm, а также для нескольких других утилит.

Агент автоматически запускается по требованию gpg, gpgsm, gpgconf или gpg-connect-agent. Таким образом, нет необходимости запускать его вручную. Если вы хотите использовать включенный агент Secure Shell, вы можете запустить агент с помощью:

gpg-connect-agent /bye

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

gpgconf --kill gpg-agent

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

GPG_TTY=$(tty)
export GPG_TTY

Важно, чтобы эта переменная окружения всегда отражала вывод команды tty. Для систем W32 эта опция не требуется.

Пожалуйста, убедитесь, что подходящая программа pinentry установлена под именем по умолчанию (что зависит от системы) или используйте опцию pinentry-program, чтобы указать полное имя этой программы. Часто полезно установить символическую ссылку от фактически используемого pinentry (например, /usr/local/bin/pinentry-gtk) к ожидаемому (например, /usr/local/bin/pinentry).

2.3 - dirmngr

С версии 2.1 GnuPG dirmngr отвечает за доступ к серверам ключей OpenPGP. Как и в предыдущих версиях, он также используется в качестве сервера для управления и загрузки списков отзыва сертификатов (CRL) для сертификатов X.509, загрузки сертификатов X.509 и предоставления доступа к провайдерам OCSP. Dirmngr вызывается внутренне через gpg, gpgsm или с помощью инструмента gpg-connect-agent.

2.4 - gpg

gpg — это часть OpenPGP в GNU Privacy Guard (GnuPG). Это инструмент для предоставления услуг цифрового шифрования и подписи с использованием стандарта OpenPGP. gpg предлагает полное управление ключами и все функции, которые вы ожидаете от полноценной реализации OpenPGP.

Существуют две основные версии GnuPG: GnuPG 1.x и GnuPG 2.x. GnuPG 2.x поддерживает современные алгоритмы шифрования и, следовательно, должен быть предпочтительным вариантом по сравнению с GnuPG 1.x. Вам нужно использовать GnuPG 1.x только в том случае, если ваша платформа не поддерживает GnuPG 2.x или вам нужна поддержка некоторых функций, которые были устаревшими в GnuPG 2.x по соображениям безопасности, например, расшифровка данных, созданных с помощью ключей PGP-2.

Если вы ищете первую версию GnuPG, вы можете обнаружить, что эта версия установлена под именем gpg1.

Команды и опции

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

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

Если у вас возникли какие-либо проблемы, добавьте опцию --verbose (подробно) к вызову команды, чтобы увидеть больше диагностической информации.

2.4.1 - Команды GPG

Полный список команда GPG

Команды, не привязанные к конкретной функции

--version Выводит информацию о версии программы и лицензировании. Обратите внимание, что эту команду нельзя сокращать.

--help -h Выводит сообщение о использовании, суммирующее наиболее полезные опции командной строки. Обратите внимание, что эту команду нельзя произвольно сокращать (хотя можно использовать её короткую форму -h).

--warranty Выводит информацию о гарантиях.

--dump-options Выводит список всех доступных опций и команд. Обратите внимание, что эту команду нельзя сокращать.

Конечно, вот перевод и структурированная таблица с командами, а также примеры использования.

Команды для выбора типа операции

Команда (короткая) Описание
--sign (-s) Подписать сообщение. Можно комбинировать с --encrypt (для подписи и шифрования) и/или --symmetric. Ключ для подписи выбирается по умолчанию или задаётся опциями --local-user и --default-key.
--clear-sign
--clearsign
Создать подпись в чистом тексте (cleartext signature). Содержимое читаемо без специального ПО, которое нужно только для проверки подписи. Может изменять пробельные символы в конце строк.
--detach-sign (-b) Создать отделённую подпись (detached signature).
--encrypt (-e) Зашифровать данные для одного или нескольких открытых ключей. Комбинируется с --sign и/или --symmetric. Получатели задаются опциями --recipient.
--symmetric (-c) Зашифровать симметричным шифром с использованием парольной фразы (по умолчанию AES-128). Комбинируется с --sign и/или --encrypt. Пароль кэшируется.
--store Только сохранить (создать простой пакет literal data).
--decrypt (-d) Расшифровать файл, переданный в командной строке (или из STDIN) и записать в STDOUT. Если файл подписан, подпись также проверяется.
--verify Проверить подпись файла, не выводя содержимое. Для проверки отделённой подписи нужно указать файл подписи и файл(ы) данных.
--multifile Модифицирует другие команды (--verify, --encrypt, --decrypt) для обработки нескольких файлов, переданных в командной строке или из STDIN.
--verify-files Аналогично --multifile --verify.
--encrypt-files Аналогично --multifile --encrypt.
--decrypt-files Аналогично --multifile --decrypt.
--list-keys (-k)
--list-public-keys
Вывести список указанных или всех открытых ключей. Не использовать для парсинга в скриптах (используйте --with-colons).
--list-secret-keys (-K) Вывести список указанных или всех секретных ключей. # означает, что ключ не используется, > — ключ на смарт-карте.
--check-signatures
--check-sigs
Аналогично --list-keys, но также проверяет и выводит подписи ключей. ! — хорошая подпись, - — плохая, % — ошибка проверки.
--locate-keys
--locate-external-keys
Найти ключи по аргументам (использует те же методы, что и при шифровании). Вторая команда не ищет в локальных хранилищах.
--show-keys Анализирует переданные ключи (не из ключевых колец) и выводит информацию о них, как --list-keys.
--fingerprint Вывести список ключей вместе с их отпечатками. Если указать дважды, покажет отпечатки всех субключей.
--list-packets Вывести только последовательность пакетов (для отладки).
--edit-card
--card-edit
Открыть меню для работы со смарт-картой.
--card-status Показать содержимое смарт-карты.
--change-pin Позволить сменить PIN-код смарт-карты.
--delete-keys Удалить ключ из открытого ключевого кольца. В пакетном режиме требуется --yes или указание отпечатка.
--delete-secret-keys Удалить ключ из секретного ключевого кольца. В пакетном режиме требуется указание отпечатка.
--delete-secret-and-public-key Удалить и секретный, и открытый ключ.
--export Экспортировать указанные или все открытые ключи в STDOUT или файл.
--send-keys Отправить указанные ключи на keyserver.
--export-secret-keys
--export-secret-subkeys
Экспортировать секретные ключи. Вторая форма делает первичный ключ непригодным для использования (GNU расширение).
--export-ssh-key Экспортировать ключ в формате OpenSSH.
--import
--fast-import
Импортировать/объединить ключи в ключевое кольцо.
--receive-keys
--recv-keys
Импортировать ключи с заданными keyIDs с keyserver’а.
--refresh-keys Запросить обновления для существующих в ключевом кольце ключей с keyserver’а.
--search-keys Найти ключи по именам на keyserver’е.
--fetch-keys Загрузить ключи по указанным URI.
--update-trustdb Обслуживание базы доверия (интерактивно, запрашивает ownertrust).
--check-trustdb Обслуживание базы доверия без взаимодействия с пользователем.
--export-ownertrust Экспортировать значения ownertrust (для резервного копирования).
--import-ownertrust Импортировать значения ownertrust из файла.
--rebuild-keydb-caches Перестроить кэши в ключевом кольце.
--print-md
--print-mds
Вывести дайджест сообщения для указанного или всех алгоритмов.
--gen-random Сгенерировать count случайных байт заданного уровня качества (0, 1, 2).
--gen-prime Сгенерировать простое число. (Use the source, Luke :-))
--enarmor
--dearmor
Упаковать/распаковать произвольные данные в/из ASCII-armor OpenPGP.
--unwrap Модифицирует --decrypt для вывода исходного сообщения без слоя шифрования (выводит структуру OpenPGP).
--tofu-policy Установить политику TOFU (Trust On First Use) для указанных ключей.

Конкретные примеры использования

1. Шифрование и подпись:

# Зашифровать и подписать файл 'document.txt' для получателя alice@example.com, используя свой ключ bob@example.com для подписи.
# Результат в файле 'document.txt.gpg'
gpg --encrypt --sign --recipient alice@example.com --local-user bob@example.com --output document.txt.gpg document.txt
# Короткая форма:
gpg -e -s -r alice@example.com -u bob@example.com -o document.txt.gpg document.txt

2. Создание и проверка отделённой подписи:

# Создать отделённую подпись для файла 'package.zip'
gpg --detach-sign --output package.zip.sig package.zip
# Проверить отделённую подпись
gpg --verify package.zip.sig package.zip

3. Симметричное шифрование:

# Зашифровать файл 'secret.txt' симметричным шифром с помощью пароля
gpg --symmetric --output secret.txt.gpg secret.txt
# Расшифровать полученный файл (gpg запросит пароль)
gpg --decrypt --output secret.txt secret.txt.gpg

4. Работа с ключами:

# Вывести список открытых ключей с отпечатками
gpg --list-keys --fingerprint
# Импортировать ключ из файла
gpg --import public_key.asc
# Экспортировать открытый ключ с ID 12345678 в файл
gpg --export --armor 12345678 > public_key.asc
# Обновить все ключи в ключевом кольце с keyserver'а
gpg --refresh-keys

5. Проверка подписи чистого текста:

# Проверить подпись файла 'message.txt.asc'
gpg --verify message.txt.asc
# Если нужно извлечь подписанное содержимое в файл 'message.txt'
gpg --output message.txt --decrypt message.txt.asc

Конечно, вот перевод, структурированная таблица и практические примеры.

Как управлять своими ключами

В этом разделе объясняются основные команды для управления ключами.


Таблица команд управления ключами

Команда (короткая) Описание
--quick-generate-key
--quick-gen-key
Быстро сгенерировать стандартный ключ с одним ID пользователя. Без диалогов.
--quick-set-expire Установить срок действия основного ключа (fpr) и/или его субключей.
--quick-add-key Добавить субключ к существующему ключу (по отпечатку fpr).
--quick-add-adsk Добавить Дополнительный Субключ для Расшифровки (ADSK) из другого ключа.
--generate-key
--gen-key
Сгенерировать новую пару ключей, используя параметры по умолчанию (интерактивно).
--full-generate-key
--full-gen-key
Сгенерировать новую пару ключей с диалогами для всех опций.
--generate-revocation
--gen-revoke
Создать сертификат отзыва для всего ключа.
--generate-designated-revocation
--desig-revoke
Создать назначенный сертификат отзыва (позволяет отозвать чужой ключ).
--edit-key Основная команда для интерактивного управления ключами через меню.
--sign-key Подписать открытый ключ вашим секретным ключом (ярлык для sign в --edit-key).
--lsign-key Подписать ключ с пометкой “не для экспорта” (ярлык для lsign).
--quick-sign-key
--quick-lsign-key
--quick-tsign-key
Быстро подписать ключ без дополнительного взаимодействия.
--quick-add-uid Добавить новый ID пользователя к существующему ключу.
--quick-revoke-uid Отозвать ID пользователя на существующем ключе.
--quick-revoke-sig Отозвать подписи ключей, сделанные указанным ключом.
--quick-set-primary-uid Установить или обновить флаг основного ID пользователя.
--quick-update-pref Обновить список предпочтений ключа до текущего значения по умолчанию.
--quick-set-ownertrust Установить уровень доверия (ownertrust) для ключа.
--change-passphrase
--passwd
Изменить парольную фразу секретного ключа.

Ключевые понятия из --edit-key:

  • sign / lsign / tsign / nrsign – Подписать ключ (обычная/локальная/доверительная/безотзывная).
  • adduid – Добавить user ID.
  • addkey – Добавить субключ.
  • passwd – Сменить парольную фразу.
  • revkey / revuid – Отозвать субключ / user ID.
  • expire – Изменить срок действия.
  • save – Сохранить изменения и выйти.
  • quit – Выйти без сохранения.

Примеры использования

1. Быстрое создание ключа

# Создать ключ для Alice, который никогда не истекает, используя алгоритмы по умолчанию
gpg --quick-generate-key "Alice Lovelace <alice@example.com>" default default never

# Создать ключ для Bob с истечением через 1 год
gpg --quick-gen-key "Bob Babbage <bob@example.com>" default default 1y

# Создать ключ, защищённый паролем "secret", в пакетном режиме
echo "secret" | gpg --batch --pinentry-mode loopback --passphrase-fd 0 --quick-gen-key "Test User" default default

2. Управление сроком действия и субключами

# Установить срок действия основного ключа (с отпечатком XYZ123...) на 2025-12-31
gpg --quick-set-expire XYZ1234567890ABCDEFGH 2025-12-31

# Добавить субключ шифрования (алгоритм по умолчанию) к существующему ключу
gpg --quick-add-key XYZ1234567890ABCDEFGH default encr

# Добавить субключ для аутентификации (Ed25519) с истечением через 6 месяцев
gpg --quick-add-key XYZ1234567890ABCDEFGH ed25519 auth 6m

3. Работа с существующими ключами (подпись, отзыв)

# Подписать ключ с отпечатком ABCD... (все его user IDs)
gpg --quick-sign-key ABCD0987654321ABCD0987654321ABCD0987654321

# Подписать ключ, но только конкретный user ID ('=*@company.org' - точное совпадение)
gpg --quick-sign-key ABCD0987654321ABCD0987654321ABCD0987654321 "=*@company.org"

# Отозвать user ID 'old@email.com' у ключа 'user@example.com'
gpg --quick-revoke-uid "user@example.com" "old@email.com"

4. Импорт и экспорт

# Импортировать ключ из файла
gpg --import public_key.asc

# Экспортировать открытый ключ с отпечатком XYZ... в файл
gpg --export --armor XYZ1234567890ABCDEFGH > alice_public.asc

# Экспортировать секретный ключ для резервной копии (ОСТОРОЖНО!)
gpg --export-secret-keys --armor XYZ1234567890ABCDEFGH > alice_secret_backup.asc

5. Просмотр и проверка

# Показать список открытых ключей с отпечатками
gpg --list-keys --fingerprint

# Показать список секретных ключей
gpg --list-secret-keys

# Проверить подписи на всех ключах в ключевом кольце
gpg --check-signatures

6. Интерактивное управление через --edit-key

# Начать редактирование ключа (заменить 'user@example.com' на свой ID)
gpg --edit-key user@example.com

# В появившемся интерактивном меню (prompt: gpg>) можно использовать:
# gpg> adduid                         # Добавить новый user ID
# gpg> addkey                         # Добавить новый субключ
# gpg> passwd                         # Сменить пароль
# gpg> expire                         # Изменить срок действия
# gpg> key 1                          # Выбрать первый субключ (для операций с ним)
# gpg> trust                          # Изменить уровень доверия
# gpg> save                           # Сохранить изменения и выйти

Конечно, вот подробная таблица всех субкоманд --edit-key и дополнительные примеры.

Таблица субкоманд интерактивного меню --edit-key

Команда вводится после приглашения gpg>.

Субкоманда Описание
uid n Переключить выбор пользователя (user ID) или фотографии с индексом n. * — выбрать всех, 0 — отменить выбор всех.
key n Переключить выбор субключа с индексом n или key ID n. * — выбрать все, 0 — отменить выбор всех.
sign Создать подпись на ключе. Если ключ ещё не подписан вашим ключом по умолчанию, будет запрошено подтверждение.
lsign То же, что sign, но подпись помечается как неэкспортируемая (local).
nrsign То же, что sign, но подпись помечается как безотзывная (non-revocable).
tsign Создать доверительную подпись (trust signature). Требует указания глубины цепи доверия и значения.
delsig Удалить подпись с ключа. Не может отозвать подпись, уже отправленную публично.
revsig Отозвать подпись. Для каждой вашей подписи будет предложено создать сертификат отзыва.
check Проверить подписи на всех выбранных user IDs. С опцией selfsig показываются только самоподписи.
adduid Добавить дополнительный user ID (имя и email).
addphoto Добавить фотографию (JPEG) в качестве user ID.
showphoto Показать выбранную фотографию user ID.
deluid Удалить user ID или фотографию. Не может отозвать user ID, уже отправленный публично.
revuid Отозвать user ID или фотографию.
primary Пометить текущий user ID как основной. Снимает эту пометку с других user IDs.
keyserver Установить предпочтительный keyserver для выбранных user IDs. "none" — удалить.
notation Установить нотацию (name=value) для выбранных user IDs. "none" — удалить все.
pref Показать фактические предпочтения (шифры, хэши, сжатие) для выбранного user ID.
showpref Показать предпочтения с учётом значений по умолчанию (более подробно).
setpref [string] Установить список предпочтений. Без аргументов — сбросить на значения по умолчанию. "none" — очистить.
addkey Добавить новый субключ к основному ключу.
addcardkey Сгенерировать субключ на смарт-карте и добавить его к этому ключу.
keytocard Перенести выбранный секретный субключ на смарт-карту. Ключ в keyring будет заменён на заглушку.
bkuptocard file Восстановить ключ из файла-бэкапа на новую смарт-карту.
keytotpm Перенести выбранный секретный ключ в форму, защищённую TPM (Trusted Platform Module).
delkey Удалить публичную часть субключа. Не может отозвать субключ, уже отправленный публично.
revkey Отозвать субключ.
expire Изменить срок действия основного ключа или выбранного субключа.
trust Изменить уровень доверия (ownertrust) для ключа. Изменения в trustdb применяются сразу.
disable Отключить весь ключ. Отключённый ключ нельзя использовать.
enable Включить ключ.
addrevoker Добавить назначенного отзывающего (designated revoker) для ключа. Опция "sensitive" — не экспортировать по умолчанию.
addadsk Добавить Дополнительный Субключ для Расшифровки (Additional Decryption Subkey) с другого ключа.
passwd Изменить парольную фразу для секретного ключа.
toggle Пустая команда для обратной совместимости.
clean Очистить ключ: удалить невалидные, устаревшие, отозванные подписи и подписи от отсутствующих ключей.
minimize Сжать ключ до минимального размера, оставив для каждого user ID только последнюю самоподпись.
change-usage Изменить флаги использования (возможности) основного ключа или субключей (например, добавить Authenticate).
cross-certify Добавить перекрёстные сертифицирующие подписи на подписывающие субключи для защиты от атак.
save Сохранить все изменения в ключевое кольцо и выйти.
quit Выйти без сохранения изменений.

Примеры использования --edit-key

1. Базовое управление ключом

# Начать редактирование ключа для alice@example.com
gpg --edit-key alice@example.com

# В интерактивном меню:
gpg> adduid                         # Добавить новый user ID (запрос имени и email)
    Real name: Alice Lovelace
    Email address: alice@work.com
    Comment: Work account
    (Подтвердить)

gpg> uid 2                          # Выбрать второй user ID (только что добавленный)
gpg> primary                        # Сделать его основным
gpg> passwd                         # Изменить парольную фразу
gpg> save                           # Сохранить изменения и выйти

2. Управление субключами

gpg --edit-key bob@example.com

gpg> addkey                         # Добавить новый субключ
    Please select what kind of key you want:
       (3) DSA (sign only)
       (4) RSA (sign only)
       (5) Elgamal (encrypt only)
       (6) RSA (encrypt only)
       (7) DSA (set your own capabilities)
       (8) RSA (set your own capabilities)
       (10) ECC (sign only)
       (11) ECC (set your own capabilities)
       (12) ECC (encrypt only)
       (13) Existing key
    Your selection? 6               # Выбираем RSA (только шифрование)
    What keysize do you want? 4096  # Указываем размер ключа
    Key is valid for? 1y            # Указываем срок действия (1 год)
    (Подтвердить создание)

gpg> key 1                          # Выбрать первый субключ (для операций с ним)
gpg> expire                         # Изменить его срок действия
    Key is valid for? (0) 0
    Key does not expire at all
    Is this correct? (y/N) y        # Сделать бессрочным

gpg> revkey                         # ОТОЗВАТЬ этот субключ (если он скомпрометирован)
gpg> save

3. Подписание чужих ключей и управление доверием

# Предполагается, что ключ друга уже импортирован
gpg --edit-key friend@example.com

gpg> sign                           # Подписать ключ друга
    ... Вывод информации о ключе и его отпечатка ...
    Really sign? (y/N) y            # Подтверждаем подписание

gpg> tsign                          # Создать доверительную подпись
    Enter the depth of this trust signature (1-255): 1
    Enter the trust value (60=marginal, 120=full, 0-255): 120
    Enter a domain name (optional): our-community.org
    Really sign? (y/N) y

gpg> trust                          # Изменить уровень доверия к владельцу ключа
    Your decision? 5                # Указываем: "I trust ultimately"
gpg> save

4. Работа со смарт-картой (YubiKey и аналоги)

gpg --edit-key mykey@example.com

gpg> keytocard                      # Перенести выбранный секретный ключ на карту
    Please select where to store the key:
       (1) Signature key
       (2) Encryption key
       (3) Authentication key
    Your selection? 1               # Переносим подписывающий ключ в слот для подписи
    (Введите пароль админа карты)

gpg> key 1                          # Выбрать следующий ключ
gpg> keytocard
    Your selection? 2               # Переносим шифрующий ключ в слот для шифрования

gpg> save                           # Секретные ключи теперь на карте, в keyring - заглушки

5. Отзыв компонентов ключа

# Ключ скомпрометирован, нужно отозвать старый email и создать сертификат отзыва
gpg --edit-key compromised@example.com

gpg> uid 1                          # Выбрать user ID со старым email
gpg> revuid                         # ОТОЗВАТЬ этот user ID
    Create a revocation certificate for this user ID? (y/N) y
    Enter the reason for the revocation: 1 # 1 = Key has been compromised
    Enter an optional description; ...:
    (Подтвердить)

gpg> genrevoke                      # Создать сертификат отзыва для всего ключа
    Create a revocation certificate? (y/N) y
    Enter the reason for the revocation: 1
    ... (Описание) ...
    Вывод ASCII-armored сертификата отзыва
    Сохранить его в надёжное место!

gpg> quit                           # Пока не сохраняем изменения, только создали сертификат

# Позже, чтобы применить отзыв, импортируем сертификат
gpg --import revocation_certificate.asc

2.4.2 - Опции PGP

Список опций PGP

В GnuPG (gpg) имеется множество опций для точного контроля поведения и изменения конфигурации по умолчанию.

Опции конфигурации GPG: Как изменить конфигурацию. • Опции GPG, связанные с ключами: Опции, связанные с ключами. • Ввод и вывод GPG: Опции ввода и вывода. • Опции OpenPGP: Специфичные для протокола OpenPGP опции. • Опции соответствия (Compliance): Опции соответствия. • Эзотерические опции GPG: Выполнение действий, которые обычно не требуются. • Устаревшие опции: Опции, признанные устаревшими.

Длинные опции (long options) можно поместить в файл настроек (по умолчанию ~/.gnupg/gpg.conf). Короткие имена опций (short option names) работать не будут — например, armor является допустимой опцией для файла настроек, а a — нет. Не нужно писать 2 дефиса, достаточно указать имя опции и любые необходимые аргументы. Строки, у которых первый непробельный символ является решёткой (#), игнорируются. Команды также можно помещать в этот файл, но обычно это бесполезно, так как команда будет выполняться автоматически при каждом запуске gpg.

Пожалуйста, помните, что разбор опций останавливается, как только встречается не-опция. Вы можете явно остановить разбор с помощью специальной опции --.

Таблица опций конфигурации GPG

Опция (короткая) Описание
--default-key name Использовать name как ключ по умолчанию для подписи. Рекомендуется использовать отпечаток или длинный ключевой ID. Переопределяется опцией -u.
--default-recipient name Использовать name как получателя по умолчанию, если не используется --recipient. Не запрашивать подтверждение.
--default-recipient-self Использовать ключ по умолчанию в качестве получателя по умолчанию.
--no-default-recipient Сбросить --default-recipient и --default-recipient-self. Не для файла опций.
-v, --verbose Выдавать больше информации при обработке. Если использовать дважды, входные данные выводятся подробно.
--no-verbose Сбросить уровень детализации до 0. Не для файла опций.
-q, --quiet Работать как можно тише. Не для файла опций.
--batch Использовать пакетный режим. Никогда не спрашивать, не разрешать интерактивные команды.
--no-batch Отключить пакетный режим.
--no-tty Убедиться, что TTY (терминал) никогда не используется для вывода.
--yes Предполагать ответ “да” на большинство вопросов. Не для файла опций.
--no Предполагать ответ “нет” на большинство вопросов. Не для файла опций.
--proc-all-sigs Отменить поведение --batch для остановки проверки подписи при первой плохой подписи.
--list-filter {select=expr} Фильтр списка для вывода только определенных ключей при выводе списка ключей.
--list-options parameters Строка параметров для настройки вывода списков ключей и подписей. См. подопции ниже.
show-photos Показывать фото ID ключей. По умолчанию no.
show-usage Показывать информацию об использовании ключей (E=шифрование, S=подпись, C=сертификация, A=аутентификация). По умолчанию yes.
show-ownertrust Показывать значение доверия (ownertrust) для ключей. По умолчанию no.
show-trustsig Показывать информацию о доверительных подписях. По умолчанию no.
show-policy-urls Показывать URL политик в списках --check-signatures. По умолчанию no.
show-notations Показывать все notations подписей. По умолчанию no.
show-std-notations Показывать только стандартные (IETF) notations подписей. По умолчанию no.
show-user-notations Показывать пользовательские notations подписей. По умолчанию no.
show-x509-notations Выводить сертификаты X.509, встроенные в подписи ключей, в формате PEM (для отладки).
store-x509-notations Сохранять сертификаты X.509, встроенные в подписи ключей, как файлы PEM.
show-keyserver-urls Показывать предпочтительные URL keyserver’ов. По умолчанию no.
show-uid-validity Показывать расчетную валидность user ID. По умолчанию yes.
show-unusable-uids Показывать отозванные и просроченные user ID. По умолчанию no.
show-unusable-subkeys Показывать отозванные и просроченные субключи. По умолчанию no.
show-unusable-sigs Показывать подписи ключей, сделанные с использованием слабых или неподдерживаемых алгоритмов.
show-keyring Показывать имя ключевого кольца в заголовке списков ключей. По умолчанию no.
show-sig-expire Показывать даты истечения срока действия подписей. По умолчанию no.
show-sig-subpackets Включать подпакеты подписи в список ключей (только с --with-colons). По умолчанию no.
show-only-fpr-mbox Для каждого user ID с действительным email выводить только отпечаток и адрес.
sort-sigs Сортировать подписи по keyID и времени создания для --list-sigs и --check-sigs. По умолчанию yes.
--verify-options parameters Строка параметров для настройки проверки подписей. См. подопции ниже.
show-photos Показывать фото ID на ключе, выпустившем подпись. По умолчанию no.
show-policy-urls Показывать URL политик в проверяемой подписи. По умолчанию yes.
show-notations Показывать все notations в проверяемой подписи.
show-std-notations Показывать только стандартные (IETF) notations в проверяемой подписи. По умолчанию yes.
show-user-notations Показывать пользовательские notations в проверяемой подписи.
show-keyserver-urls Показывать предпочтительные URL keyserver’ов в проверяемой подписи. По умолчанию yes.
show-uid-validity Показывать расчетную валидность user ID на ключе, выпустившем подпись. По умолчанию yes.
show-unusable-uids Показывать отозванные и просроченные user ID при проверке подписи. По умолчанию no.
show-primary-uid-only Показывать только основной user ID при проверке подписи.
--enable-large-rsa Разрешить создание RSA-ключей размером до 8192 бит (с --generate-key --batch).
--disable-large-rsa Запретить создание больших RSA-ключей.
--enable-dsa2 Включить усечение хэша для всех DSA-ключей.
--disable-dsa2 Отключить усечение хэша для DSA-ключей.
--photo-viewer string Командная строка для просмотра фото ID. Замещает %i, %I, %k, %K, %f, %t, %T, %v, %V, %U, %%.
--exec-path string Задать список каталогов для поиска программ просмотра фото.
--keyring file Добавить файл file в текущий список ключевых колец.
--primary-keyring file Обозначить file как основное ключевое кольцо (сюда импортируются новые ключи).
--secret-keyring file Устаревшая опция, игнорируется.
--trustdb-name file Использовать file вместо trustdb по умолчанию.
--homedir dir Установить домашний каталог в dir.
--display-charset name Установить кодировку для преобразования строк (например, iso-8859-1, koi8-r, utf-8).
--utf8-strings Считать аргументы командной строки строками в UTF-8.
--no-utf8-strings Считать аргументы в кодировке, указанной --display-charset.
--options file Читать опции из файла file, а не из файла по умолчанию.
--no-options Явно не читать никакой файл опций. Сокращение для --options /dev/null.
-z n Установить уровень сжатия n для алгоритмов ZIP/ZLIB. 0 - отключить сжатие. -1 - принудительное сжатие уровнем по умолчанию.
--compress-level n Установить уровень сжатия для ZIP/ZLIB.
--bzip2-compress-level n Установить уровень сжатия для BZIP2.
--no-compress Отключить сжатие. Identical to -z0.
--bzip2-decompress-lowmem Использовать метод распаковки BZIP2 с низким потреблением памяти (медленнее).
--mangle-dos-filenames Заменять расширение выходного файла для совместимости со старыми версиями Windows.
--no-mangle-dos-filenames Не изменять имена файлов (по умолчанию).
--ask-cert-level Запрашивать уровень сертификации при подписании ключа.
--no-ask-cert-level Не запрашивать уровень сертификации.
--default-cert-level n Уровень сертификации по умолчанию при подписании ключа (0-3). По умолчанию 0.
--min-cert-level Минимальный уровень сертификации для принятия подписи при построении базы доверия. По умолчанию 2.
--trusted-key long key ID or fingerprint Считать указанный ключ таким же доверенным, как свой собственный секретный ключ.
--add-desig-revoker [sensitive:]fingerprint Добавить указанный ключ как назначенного отзывающего для вновь создаваемых ключей.
--default-new-key-adsk fingerprint Добавить указанный субключ как ADSK (Additional Decryption Subkey) для вновь создаваемых ключей.
--trust-model {pgp|classic|tofu|tofu+pgp|direct|always|auto} Установить модель доверия. По умолчанию pgp.
--always-trust Идентично --trust-model always.
--assert-signer fpr_or_file Убедиться, что хотя бы одна действительная подпись сделана указанным ключом (по отпечатку).
--assert-pubkey-algo algolist Убедиться, что при проверке подписи использовался алгоритм из algolist.
--auto-key-locate mechanisms Механизмы автоматического поиска ключей (local, wkd, keyserver, ldap, cert, dane, ntds, nodefault, clear). По умолчанию local,wkd.
--no-auto-key-locate Отключить автоматический поиск ключей.
--auto-key-import Импортировать ключ, встроенный в подпись, при успешной проверке.
--no-auto-key-import Не импортировать встроенные ключи (по умолчанию).
--auto-key-retrieve Автоматически получать ключи с keyserver’а при проверке подписей неизвестных ключей.
--no-auto-key-retrieve Не получать ключи автоматически (по умолчанию).
--keyid-format {none|short|0xshort|long|0xlong} Формат отображения key ID. По умолчанию 0xlong.
--keyserver name Устарело. Использовать name в качестве keyserver’а. Используйте dirmngr.conf вместо этого.
--keyserver-options {name=value} Опции для keyserver’а (include-revoked, include-disabled, honor-keyserver-url, include-subkeys и др.).
--completes-needed n Количество полностью доверенных пользователей для представления нового подписанта (по умолчанию 1).
--marginals-needed n Количество частично доверенных пользователей для представления нового подписанта (по умолчанию 3).
--tofu-default-policy {auto|good|unknown|bad|ask} Политика TOFU по умолчанию (по умолчанию auto).
--max-cert-depth n Максимальная глубина цепочки сертификации (по умолчанию 5).
--no-sig-cache Не кэшировать статус проверки подписей ключей.
--auto-check-trustdb Автоматически запускать --check-trustdb при необходимости.
--no-auto-check-trustdb Отключить автоматическую проверку trustdb.
--use-agent Фиктивная опция. gpg всегда требует агент.
--no-use-agent Фиктивная опция.
--gpg-agent-info Фиктивная опция. Не имеет эффекта.
--agent-program file Указать программу-агент для операций с секретными ключами.
--dirmngr-program file Указать программу dirmngr для доступа к keyserver’ам.
--disable-dirmngr Полностью отключить использование Dirmngr.
--no-autostart Не запускать gpg-agent или dirmngr автоматически, если они еще не запущены.
--lock-once Заблокировать базы данных один раз и не снимать блокировку до завершения процесса.
--lock-multiple Снимать блокировки, когда они больше не нужны.
--lock-never Полностью отключить блокировку.
--exit-on-status-write-error Немедленно завершать процесс при ошибках записи в status FD.
--limit-card-insert-tries n Ограничить количество запросов на вставку смарт-карты числом n-1.
--no-random-seed-file Не использовать файл для хранения пула случайных чисел между вызовами.
--no-greeting Не показывать начальное сообщение об авторских правах.
--no-secmem-warning Не показывать предупреждение о “использовании незащищенной памяти”.
--no-permission-warning Не показывать предупреждение о небезопасных разрешениях файлов и каталогов.
--require-secmem Отказаться работать, если невозможно получить защищенную память.
--no-require-secmem Работать, даже если нет защищенной памяти (по умолчанию, с предупреждением).
--require-cross-certification Требовать наличия действительной перекрестной сертификации для субключей при проверке подписи.
--no-require-cross-certification Не требовать перекрестной сертификации.
--expert Разрешить пользователю выполнять определенные нестандартные или потенциально несовместимые действия.
--no-expert Запретить экспертный режим (по умолчанию).
Опция (короткая) Описание
--recipient name
-r
Зашифровать для пользователя с ID name. Если эта опция или --hidden-recipient не указана, GnuPG запросит user-id (если не задан --default-recipient).
--hidden-recipient name
-R
Зашифровать для пользователя с ID name, но скрыть key ID его ключа. Помогает скрыть получателя сообщения и является ограниченной мерой против анализа трафика.
--recipient-file file
-f
Аналогично --recipient, но шифрует для ключа, хранящегося в указанном файле file. Файл должен содержать ровно один ключ. GnuPG считает ключ в файле полностью valid.
--hidden-recipient-file file
-F
Аналогично --hidden-recipient, но шифрует для ключа, хранящегося в указанном файле file.
--encrypt-to name То же, что --recipient, но предназначена для использования в файле опций. Может использоваться с вашим собственным user-id как “encrypt-to-self” (зашифровать для себя). Рекомендуется использовать отпечаток или длинный keyID. Эти ключи используются только при наличии других получателей. Проверка доверия для этих user id не выполняется, можно использовать даже отключенные ключи.
--hidden-encrypt-to name То же, что --hidden-recipient, но предназначена для использования в файле опций. Может использоваться как скрытый “encrypt-to-self”.
--no-encrypt-to Отключить использование всех ключей, заданных через --encrypt-to и --hidden-encrypt-to.
--group {name=value} Создает именованную группу, подобную псевдонимам в почтовых программах. Когда имя группы указывается как получатель, оно раскрывается в указанные значения. Значениями могут быть key IDs или отпечатки. Пространства в значениях обрабатываются как разделители.
--ungroup name Удалить заданную запись из списка групп.
--no-groups Удалить все записи из списка групп.
--local-user name
-u
Использовать name как ключ для подписи. Переопределяет --default-key.
--sender mbox При создании подписи: указывает user ID ключа для подписи и встраивает его в создаваемую подпись (используя subpacket “Signer’s User ID” OpenPGP).
При проверке подписи: mbox используется для ограничения информации, выводимой кодом TOFU, соответствующими user IDs. GnuPG учитывает только почтовую часть User ID.
--try-secret-key name Для скрытых получателей GPG нужно знать ключи для пробной расшифровки. Эта опция позволяет задать дополнительные ключи для использования. Рекомендуется использовать long keyid во избежание неоднозначностей.
--try-all-secrets Не смотреть на key ID, хранящийся в сообщении, а пробовать все секретные ключи по очереди, чтобы найти правильный ключ для расшифровки. Принудительно включает поведение, используемое для анонимных получателей.
--skip-hidden-recipients При расшифровке пропускать всех анонимных получателей. Помогает избежать перебора всех секретных ключей, когда функция скрытых получателей используется для сокрытия ключа encrypt-to.
--no-skip-hidden-recipients Не пропускать анонимных получателей при расшифровке (поведение по умолчанию).

2.4.3 - Ввод и вывод

Описание настроек для ввода и вывода

Ввод и Вывод

--armor -a Создавать вывод в формате ASCII-armor (защищенный ASCII). По умолчанию создается бинарный формат OpenPGP.

--no-armor Предполагать, что входные данные не в формате ASCII-armor.

--output file -o file Записывать вывод в файл file. Для записи в стандартный поток вывода (stdout) используйте - в качестве имени файла.

--max-output n Эта опция устанавливает лимит на количество байт, которые будут сгенерированы при обработке файла. Поскольку OpenPGP поддерживает различные уровни сжатия, возможно, что открытый текст данного сообщения может быть значительно больше исходного сообщения OpenPGP. Хотя GnuPG корректно работает с такими сообщениями, часто возникает желание установить максимальный размер файла, который будет сгенерирован, прежде чем обработка будет принудительно остановлена из-за ограничений ОС. По умолчанию 0, что означает «без ограничений».

--chunk-size n Режим шифрования AEAD шифрует данные блоками (chunks), чтобы принимающая сторона могла проверять ошибки передачи или подделку в конце каждого блока, а не откладывать это до получения всех данных. Используемый размер блока составляет 2^n байт. Наименьшее разрешенное значение для n — 6 (64 байта), а наибольшее — значение по умолчанию 22, что создает блоки размером не более 4 МиБ.

--input-size-hint n Эта опция может быть использована, чтобы сообщить GPG размер входных данных в байтах. n должно быть положительным числом в десятичной системе счисления. Эта опция полезна только если ввод осуществляется не из файла. GPG может использовать эту подсказку для оптимизации стратегии выделения буферов. Она также используется в строке --status-fd «PROGRESS» для предоставления значения «total», если оно недоступно другими способами.

--key-origin string[,url] gpg может отслеживать происхождение ключа. Некоторые источники известны неявно (например, keyserver, web key directory) и устанавливаются автоматически. Для стандартного импорта происхождение импортируемых ключей можно задать с помощью этой опции. Чтобы узнать возможные значения, используйте "help" в качестве string. Некоторые источники могут хранить необязательный аргумент url; такой URL можно добавить к string через запятую.

--import-options parameters Это строка, разделенная пробелами или запятыми, которая задает параметры для импорта ключей. К параметрам можно добавлять префикс ‘no-’, чтобы придать противоположное значение. Параметры:

import-local-sigs Разрешить импорт подписей ключей, помеченных как “local” (локальные). Обычно это не полезно, если не используется схема с общим ключевым кольцом. По умолчанию no.

keep-ownertrust Обычно возможные, но все еще существующие значения доверия (ownertrust) ключа очищаются, если ключ импортируется. Это в целом желательно, чтобы ранее удаленный ключ не получал автоматически значения доверия仅仅 из-за импорта. С другой стороны, иногда необходимо повторно импортировать набор доверенных ключей, сохраняя уже назначенные значения доверия. Этого можно достичь, используя эту опцию.

repair-pks-subkey-bug При импорте пытаться исправить повреждения, вызванные ошибкой keyserver PKS (версии до 0.9.6), которая искажает ключи с несколькими подключами. Обратите внимание, что это не может полностью восстановить поврежденный ключ, так как некоторые crucial данные удаляются keyserver’ом, но это, по крайней мере, возвращает вам один подключ. По умолчанию no для обычного --import и yes для keyserver --receive-keys.

import-show show-only Показывать список ключа непосредственно перед его сохранением. Это можно комбинировать с опцией --dry-run, чтобы только просмотреть ключи; опция show-only является ярлыком для этой комбинации. Команда --show-keys — это еще один ярлык для этого. Обратите внимание, что суффиксы, такие как ’#’ для строк “sec” и “sbb”, могут выводиться, а могут и нет.

import-export Запустить весь код импорта, но вместо сохранения ключа в локальное ключевое кольцо записать его в вывод. Опция экспорта export-dane влияет на вывод. Эта опция может быть использована, например, для удаления всех недействительных частей из ключа без необходимости его сохранять.

merge-only Во время импорта разрешать обновления существующих ключей, но не разрешать импорт любых новых ключей. По умолчанию no.

import-clean После импорта compact (удалить все подписи, кроме самоподписи) любые user ID из нового ключа, которые не пригодны для использования. Затем удалить любые подписи из нового ключа, которые не пригодны для использования. Это включает подписи, выпущенные ключами, которых нет в ключевом кольце. Эта опция эквивалентна выполнению команды --edit-key “clean” после импорта. По умолчанию no.

self-sigs-only Принимать только самоподписи при импорте ключа. Все другие подписи ключей пропускаются на раннем этапе импорта. Эту опцию можно использовать с keyserver-options для смягчения попыток flooding ключа поддельными подписями с keyserver’а. Недостаток заключается в том, что все другие действительные подписи ключей, требуемые Web of Trust, также не импортируются. Обратите внимание, что при использовании этой опции вместе с import-clean она подавляет финальный шаг очистки после объединения импортированного ключа с существующим ключом.

ignore-attributes Игнорировать все attribute user ID (photo ID) и их подписи при импорте ключа.

repair-keys После импорта исправлять различные проблемы с ключами. Например, это переупорядочивает подписи и удаляет дубликаты подписей. По умолчанию yes.

bulk-import При использовании keyboxd (опция use-keyboxd в common.conf) выполняет импорт в рамках одной транзакции.

import-minimal Импортировать минимально возможный ключ. Это удаляет все подписи, кроме самой последней самоподписи на каждом user ID. Эта опция эквивалентна выполнению команды --edit-key “minimize” после импорта. По умолчанию no.

restore import-restore Импортировать в режиме восстановления ключа. Это импортирует все данные, которые обычно пропускаются во время импорта; включая все специфичные для GnuPG данные. Все другие противоречащие опции переопределяются.

--import-filter {name=expr} --export-filter {name=expr} Эти опции определяют фильтр импорта/экспорта, который применяется к импортируемому/экспортируемому ключевому блоку непосредственно перед его сохранением/записью. name определяет тип используемого фильтра, expr — выражение для вычисления. Опцию можно использовать несколько раз, что добавляет больше выражений к тому же имени name.

Доступные типы фильтров:

keep-uid Этот фильтр будет сохранять пакет user id и зависящие от него пакеты в ключевом блоке, если выражение оценивается как истина.

drop-subkey Этот фильтр удаляет выбранные подключи. В настоящее время реализовано только для --export-filter.

drop-sig Этот фильтр удаляет выбранные подписи ключей на user ids. Самоподписи не рассматриваются. В настоящее время реализовано только для --import-filter.

select Этот фильтр реализован только для --list-filter. Можно использовать все имена свойств.

Синтаксис выражения см. в главе «ВЫРАЖЕНИЯ ФИЛЬТРА». Имена свойств для выражений зависят от фактического типа фильтра и указаны в следующей таблице. Обратите внимание, что все имена свойств также могут использоваться --list-filter.

Имена свойств могут иметь префикс с областью видимости, разделенной косой чертой. Допустимые области видимости: "pub" для открытых и секретных первичных ключей, "sub" для открытых и секретных подключей, "uid" для пакетов user-ID и "sig" для пакетов подписей. Неверные области видимости в настоящее время игнорируются.

Доступные свойства:

uid Строка с user id. (keep-uid)

mbox Часть addr-spec user id с почтовым ящиком или пустая строка. (keep-uid)

algostr Строка с описанием алгоритма ключа. Например, “rsa3072” или “ed25519”.

key_algo Число с алгоритмом открытого ключа пакета ключа или подключа. (drop-subkey)

key_size Число с эффективным размером ключа пакета ключа или подключа. (drop-subkey)

key_created key_created_d Первое — это метка времени создания пакета открытого ключа или подключа. Второе — то же самое, но представленное в виде строки ISO, например, “2016-08-17”. (drop-subkey)

key_expires key_expires_d Время истечения срока действия открытого ключа или подключа или 0, если срок действия не истекает. Второе — то же самое, но представленное в виде строки с датой ISO или пустой строки, например, “2038-01-19”.

fpr Шестнадцатеричный отпечаток (fingerprint) текущего подключа или первичного ключа. (drop-subkey)

primary Логическое значение, указывающее, является ли user id первичным. (keep-uid)

expired Логическое значение, указывающее, истек ли срок действия user id (keep-uid), ключа (drop-subkey) или подписи (drop-sig).

revoked Логическое значение, указывающее, был ли отозван user id (keep-uid) или ключ (drop-subkey).

disabled Логическое значение, указывающее, отключен ли первичный ключ.

secret Логическое значение, указывающее, является ли ключ или подключ секретным. (drop-subkey)

usage Строка, указывающая флаги использования для подключа, из последовательности «ecsa?». Например, подключ, способный только подписывать и аутентифицировать, будет точным совпадением для “sa”. (drop-subkey)

sig_created sig_created_d Первое — это метка времени создания пакета подписи. Второе — то же самое, но представленное в виде строки с датой ISO, например, “2016-08-17”. (drop-sig)

sig_expires sig_expires_d Время истечения срока действия пакета подписи или 0, если срок действия не истекает. Второе — то же самое, но представленное в виде строки с датой ISO или пустой строки, например, “2038-01-19”.

sig_algo Число с алгоритмом открытого ключа пакета подписи. (drop-sig)

sig_digest_algo Число с алгоритмом хеширования пакета подписи. (drop-sig)

origin Строка с происхождением ключа или вопросительный знак. Например, строка “wkd” используется, если ключ получен из Web Key Directory.

lastupd Метка времени последнего обновления ключа с keyserver’а или из Web Key Directory.

url Строка с URL, связанным с последним поиском ключа.

--export-options parameters Это строка, разделенная пробелами или запятыми, которая задает параметры для экспорта ключей. К параметрам можно добавлять префикс ‘no-’, чтобы придать противоположное значение. Параметры:

export-local-sigs Разрешить экспорт подписей ключей, помеченных как “local” (локальные). Обычно это не полезно, если не используется схема с общим ключевым кольцом. По умолчанию no.

export-attributes Включать attribute user IDs (photo IDs) при экспорте. Не включение attribute user IDs полезно для экспорта ключей, которые будут использоваться программой OpenPGP, не принимающей attribute user IDs. По умолчанию yes.

export-sensitive-revkeys Включать информацию о назначенном отзывающем (designated revoker), которая была помечена как “sensitive” (чувствительная). По умолчанию no.

backup export-backup Экспортировать для использования в качестве резервной копии. Экспортируемые данные включают все данные, необходимые для последующего восстановления ключа или ключей с помощью GnuPG. Формат基本上是 OpenPGP формат, но расширенный специфичными для GnuPG данными. Все другие противоречащие опции переопределяются.

export-clean Compact (удалить все подписи) user IDs экспортируемого ключа, если user IDs не пригодны для использования. Также не экспортировать любые подписи, которые не пригодны для использования. Это включает подписи, выпущенные ключами, которых нет в ключевом кольце. Эта опция эквивалентна выполнению команды --edit-key “clean” перед экспортом, за исключением того, что локальная копия ключа не изменяется. По умолчанию no.

export-minimal Экспортировать минимально возможный ключ. Это удаляет все подписи, кроме самой последней самоподписи на каждом user ID. Эта опция эквивалентна выполнению команды --edit-key “minimize” перед экспортом, за исключением того, что локальная копия ключа не изменяется. По умолчанию no.

export-revocs Экспортировать только отдельные (standalone) сертификаты отзыва ключа. Эта опция не экспортирует отзывы сторонних сертификатов отзыва.

export-dane Вместо вывода material ключа выводить записи OpenPGP DANE, пригодные для размещения в файлах зон DNS. Перед каждой записью выводится строка ORIGIN, чтобы позволить направлять записи в соответствующую зону.

mode1003 Включить использование нового формата экспорта секретного ключа. Этот формат избегает повторного шифрования, требуемого текущим форматом OpenPGP, а также улучшает безопасность секретного ключа, если он был защищен парольной фразой. Обратите внимание, что незащищенный ключ экспортируется как есть и, следовательно, небезопасен; общее правило передачи секретных ключей в зашифрованном OpenPGP файле все равно применяется в этом режиме. Версии GnuPG до 2.4.0 не могут импортировать такой секретный файл.

--with-colons Выводить списки ключей, разделенные двоеточиями. Обратите внимание, что вывод будет закодирован в UTF-8 независимо от каких-либо настроек --display-charset. Этот формат полезен, когда GnuPG вызывается из скриптов и других программ, так как он легко анализируется машиной. Подробности этого формата документированы в файле doc/DETAILS, который включен в дистрибутив исходного кода GnuPG.

--fixed-list-mode Не объединять primary user ID и primary key в режиме листинга --with-colon и выводить все метки времени в виде секунд с 1970-01-01. Начиная с GnuPG 2.0.10, этот режим всегда используется, и поэтому эта опция устарела; однако использовать ее не вредно.

--legacy-list-mode Вернуться к режиму списка открытых ключей до версии 2.1. Это влияет только на удобочитаемый вывод, а не на машинный интерфейс (т.е. --with-colons). Обратите внимание, что устаревший формат не передает подходящую информацию для эллиптических кривых.

--with-fingerprint То же, что и команда --fingerprint, но изменяет только формат вывода и может использоваться вместе с другой командой.

--with-subkey-fingerprint --without-subkey-fingerprint Если для первичного ключа выводится отпечаток, эта опция принудительно выводит отпечаток для всех подключей. Этого также можно было бы достичь, используя --with-fingerprint дважды, но используя эту опцию вместе с форматом keyid по умолчанию “none”, выводится compact отпечаток. Начиная с версии 2.6.0 эта опция активна по умолчанию; используйте вариант «without», чтобы отключить ее.

--with-v5-fingerprint В режиме листинга с двоеточиями выводить строки “fp2” для ключей OpenPGP версии 4, имеющих отпечаток ключа в стиле v5.

--with-icao-spelling Печатать spelling отпечатка по стандарту ICAO в дополнение к шестнадцатеричным цифрам.

--with-keygrip Включать keygrip в списки ключей. В режиме --with-colons это неявно включено для секретных ключей.

--with-key-origin Включать локально хранящуюся информацию о происхождении и последнем обновлении ключа в список ключей. В режиме --with-colons это выводится всегда. Эти данные в настоящее время являются экспериментальными и не должны рассматриваться как часть стабильного API.

--with-wkd-hash Выводить идентификатор Web Key Directory вместе с каждым user ID в списках ключей. Это экспериментальная функция, и семантика может измениться.

--with-secret Включать информацию о наличии секретного ключа в списках открытых ключей, выполненных с помощью --with-colons.


Таблица опций GnuPG

Опция (короткая) Опция (полная) Описание
-a --armor Создавать вывод в формате ASCII-armor (защищенный ASCII).
--no-armor Предполагать, что входные данные не в формате ASCII-armor.
-o --output file Записывать вывод в указанный файл. Используйте - для stdout.
--max-output n Установить лимит (в байтах) на размер генерируемых данных. 0 = без лимита.
--chunk-size n Установить размер блока (chunk) для AEAD шифрования (2^n байт, n=6..22).
--input-size-hint n Сообщить GPG предполагаемый размер входных данных (в байтах) для оптимизации.
--key-origin string[,url] Установить происхождение импортируемых ключей.
--import-options parameters Задать параметры импорта (см. список значений ниже).
--import-filter {name=expr} Применить фильтр к импортируемому ключевому блоку.
--export-filter {name=expr} Применить фильтр к экспортируемому ключевому блоку.
--export-options parameters Задать параметры экспорта (см. список значений ниже).
--with-colons Выводить списки ключей в машиночитаемом формате (разделены двоеточиями).
--fixed-list-mode (Устарело) Не объединять primary user ID и key, выводить время в секундах.
--legacy-list-mode Использовать устаревший (до 2.1) формат человекочитаемого вывода.
--with-fingerprint Выводить отпечатки пальцев ключей (изменяет только формат вывода).
--with-subkey-fingerprint Принудительно выводить отпечатки для всех подключей (по умолчанию вкл. с 2.6.0).
--without-subkey-fingerprint Отключить вывод отпечатков для подключей.
--with-v5-fingerprint В colon-режиме выводить строки “fp2” для v4 ключей с v5-отпечатком.
--with-icao-spelling Выводить spelling отпечатка по стандарту ICAO.
--with-keygrip Включать keygrip в списки ключей.
--with-key-origin Включать информацию о происхождении и времени обновления ключа.
--with-wkd-hash Выводить Web Key Directory хеш для каждого user ID.
--with-secret Включать информацию о наличии секретного ключа в списках открытых ключей (для --with-colons).

Параметры для --import-options:

Параметр Описание
import-local-sigs Разрешить импорт подписей, помеченных как “local”.
keep-ownertrust Сохранять существующие значения доверия (ownertrust) при импорте.
repair-pks-subkey-bug Пытаться исправить ключи, поврежденные из-за ошибки keyserver PKS.
import-show, show-only Показывать ключ перед сохранением. show-only + --dry-run = только просмотр.
import-export Запустить импорт, но записать результат в вывод, а не в keyring.
merge-only Разрешить только обновление существующих ключей, запретить импорт новых.
import-clean Очистить ключ от невалидных user ID и подписей после импорта.
self-sigs-only Импортировать только самоподписи, игнорируя все другие подписи ключей.
ignore-attributes Игнорировать attribute user IDs (photo IDs) и их подписи.
repair-keys Исправлять проблемы с ключами (упорядочить подписи, убрать дубли) после импорта.
bulk-import Выполнять импорт в keyboxd в рамках одной транзакции.
import-minimal Импортировать минимальный ключ (только последние самоподписи на каждом user ID).
restore, import-restore Импорт в режиме восстановления (включает все данные, обычно пропускаемые).

Параметры для --export-options:

Параметр Описание
export-local-sigs Разрешить экспорт подписей, помеченных как “local”.
export-attributes Включать attribute user IDs (photo IDs) в экспорт.
export-sensitive-revkeys Включать информацию о “sensitive” назначенных отзывающих (designated revokers).
backup, export-backup Экспорт в формате резервной копии (включает все данные для восстановления).
export-clean Очистить ключ от невалидных user ID и подписей перед экспортом (не изменяет локальный ключ).
export-minimal Экспортировать минимальный ключ (только последние самоподписи на каждом user ID).
export-revocs Экспортировать только standalone сертификаты отзыва.
export-dane Выводить записи OpenPGP DANE для DNS вместо material ключа.
mode1003 Использовать новый, более безопасный формат экспорта секретных ключей (GnuPG >= 2.4.0).

Типы фильтров для --import-filter / --export-filter:

Тип фильтра Описание
keep-uid Сохранять user ID пакет, если выражение истинно.
drop-subkey Удалять выбранные подключи (только для --export-filter).
drop-sig Удалять выбранные подписи ключей (не самоподписи) (только для --import-filter).
select Фильтр для выбора (только для --list-filter).

2.4.4 - OpenGPG опции

Опции для настройки работы Open GPG

Специфичные опции для протокола OpenPGP

--force-ocb --force-aead Принудительно использовать AEAD шифрование вместо MDC шифрования. AEAD — это современный и более быстрый способ аутентифицированного шифрования, чем старый метод MDC. --force-aead является псевдонимом и устарел. См. также опцию --chunk-size.

--force-mdc --disable-mdc Эти опции устарели и не имеют эффекта начиная с GnuPG 2.2.8. MDC всегда используется, если только ключи не указывают, что можно использовать алгоритм AEAD, и в этом случае используется AEAD. Но обратите внимание: если исключительно требуется создание устаревшего сообщения без MDC, опция --rfc2440 позволяет это сделать.

--disable-signer-uid По умолчанию идентификатор пользователя (user ID) ключа подписи встраивается в подпись данных. На данный момент это делается только в том случае, если ключ подписи был указан с помощью local-user с использованием почтового адреса или с помощью sender. Эта информация может быть полезна проверяющему для поиска ключа; см. опцию --auto-key-retrieve.

--include-key-block --no-include-key-block Эта опция используется для встраивания фактического ключа подписи в подпись данных. Встраиваемый ключ сокращается до одного идентификатора пользователя и включает только подключ подписи, использованный для создания подписи, а также действительные подключи шифрования. Вся остальная информация удаляется из ключа, чтобы сохранить его, и, следовательно, подпись небольшой. Эта опция является аналогом опции gpgsm --include-certs в OpenPGP и позволяет получателю подписанного сообщения отвечать зашифрованно отправителю без использования каких-либо онлайн-каталогов для поиска ключа. По умолчанию установлено --no-include-key-block. См. также опцию --auto-key-import.

--personal-cipher-preferences string Установить список личных предпочтений шифров на строку string. Используйте gpg --version, чтобы получить список доступных алгоритмов, и используйте none, чтобы вообще не устанавливать предпочтений. Это позволяет пользователю безопасно переопределить алгоритм, выбранный предпочтениями ключа получателя, поскольку GPG будет выбирать только алгоритм, пригодный для использования всеми получателями. Самый высокорейтинговый шифр в этом списке также используется для команды шифрования --symmetric.

--personal-digest-preferences string Установить список личных предпочтений хеширования на строку string. Используйте gpg --version, чтобы получить список доступных алгоритмов, и используйте none, чтобы вообще не устанавливать предпочтений. Это позволяет пользователю безопасно переопределить алгоритм, выбранный предпочтениями ключа получателя, поскольку GPG будет выбирать только алгоритм, пригодный для использования всеми получателями. Самый высокорейтинговый алгоритм хеширования в этом списке также используется при подписании без шифрования (например, --clear-sign или --sign).

--personal-compress-preferences string Установить список личных предпочтений сжатия на строку string. Используйте gpg --version, чтобы получить список доступных алгоритмов, и используйте none, чтобы вообще не устанавливать предпочтений. Это позволяет пользователю безопасно переопределить алгоритм, выбранный предпочтениями ключа получателя, поскольку GPG будет выбирать только алгоритм, пригодный для использования всеми получателями. Самый высокорейтинговый алгоритм сжатия в этом списке также используется, когда нет ключей получателей для рассмотрения (например, --symmetric).

--s2k-cipher-algo name Использовать name в качестве алгоритма шифрования для симметричного шифрования с парольной фразой, если не заданы --personal-cipher-preferences и --cipher-algo. По умолчанию используется AES-128.

--s2k-digest-algo name Использовать name в качестве алгоритма хеширования, используемого для преобразования (mangling) парольных фраз для симметричного шифрования. По умолчанию используется SHA-1.

--s2k-mode n Выбирает способ преобразования парольных фраз для симметричного шифрования. Если n равно 0, будет использоваться обычная парольная фраза (что в целом не рекомендуется), 1 добавляет соль (salt) (которую не следует использовать) к парольной фразе, а 3 (по умолчанию) повторяет весь процесс несколько раз (см. --s2k-count).

--s2k-count n Указать, сколько раз повторяется процесс преобразования парольных фраз для симметричного шифрования. Это значение может находиться в диапазоне от 1024 до 65011712 включительно. Значение по умолчанию запрашивается у gpg-agent. Обратите внимание, что не все значения в диапазоне 1024–65011712 являются допустимыми, и если выбрано недопустимое значение, GnuPG округлит его до ближайшего допустимого значения. Эта опция имеет смысл только если --s2k-mode установлен в значение по умолчанию 3.


Таблица опций GnuPG (OpenPGP protocol specific)

Опция (полная) Описание
--force-ocb, --force-aead Принудительно использовать современное AEAD шифрование вместо устаревшего MDC. --force-aead — устаревший псевдоним.
--force-mdc, --disable-mdc Устарели (не действуют с GnuPG 2.2.8). MDC используется всегда, если только ключи не предписывают использовать AEAD.
--disable-signer-uid Не внедрять идентификатор пользователя (User ID) ключа подписи в подпись данных.
--include-key-block Встроить фактический ключ подписи (сокращенный) в подпись данных для облегчения ответного шифрования.
--no-include-key-block По умолчанию. Не встраивать ключ подписи в подпись данных.
--personal-cipher-preferences string Задать личный порядок предпочтения алгоритмов шифрования. none — сбросить предпочтения.
--personal-digest-preferences string Задать личный порядок предпочтения алгоритмов хеширования. none — сбросить предпочтения.
--personal-compress-preferences string Задать личный порядок предпочтения алгоритмов сжатия. none — сбросить предпочтения.
--s2k-cipher-algo name Задать алгоритм шифрования по умолчанию для симметричного шифрования (паролем). По умолчанию: AES-128.
--s2k-digest-algo name Задать алгоритм хеширования по умолчанию для преобразования парольных фраз. По умолчанию: SHA-1.
--s2k-mode n Выбрать метод преобразования парольной фразы. 0 - плохо, 1 - с солью (плохо), 3 - итерации (хорошо, по умолчанию).
--s2k-count n Задать количество итераций для преобразования парольной фразы (если --s2k-mode=3). Диапазон: 1024–65011712. Значение по умолчанию запрашивается у gpg-agent.

2.4.5 - Опции соответствия

Эти опции контролируют, каким стандартам соответствует GnuPG. Одновременно может быть активна только одна из этих опций.

Опции соответствия (Compliance options)

Эти опции контролируют, каким стандартам соответствует GnuPG. Одновременно может быть активна только одна из этих опций. Если указано несколько опций, последняя из них отменяет все предыдущие. Обратите внимание, что настройка по умолчанию почти всегда является правильной. Перед использованием любой из этих опций ознакомьтесь с разделом «ВЗАИМОДЕЙСТВИЕ С ДРУГИМИ ПРОГРАММАМИ OPENPGP» ниже.

--gnupg Использовать стандартное поведение GnuPG. Это, по сути, поведение OpenPGP (см. --openpgp), но с расширениями из предлагаемого обновления OpenPGP и с некоторыми дополнительными обходными путями для распространенных проблем совместимости в разных версиях PGP. Это опция по умолчанию, поэтому обычно в ней нет необходимости, но она может быть полезна для переопределения другой опции соответствия в файле gpg.conf.

--openpgp Сбросить все параметры пакетов, шифрования и хеширования до строгого поведения OpenPGP. Эта опция подразумевает --allow-old-cipher-algos. Используйте эту опцию, чтобы сбросить все предыдущие настройки, такие как --s2k-*, --cipher-algo, --digest-algo и --compress-algo, к значениям, соответствующим OpenPGP. Все обходные пути для PGP отключены.

--rfc4880 Сбросить все параметры пакетов, шифрования и хеширования до строгого поведения RFC-4880. Эта опция подразумевает --allow-old-cipher-algos. Обратите внимание, что в настоящее время это то же самое, что и --openpgp.

--rfc4880bis Сбросить все параметры пакетов, шифрования и хеширования в строгое соответствие предлагаемым обновлениям RFC-4880.

--rfc2440 Сбросить все параметры пакетов, шифрования и хеширования до строгого поведения RFC-2440. Обратите внимание, что при использовании этой опции пакеты шифрования создаются в устаревшем режиме без защиты MDC. Это опасно, и поэтому должно использоваться только для экспериментов. Эта опция подразумевает --allow-old-cipher-algos. См. также опцию --ignore-mdc-error.

--pgp6 Эта опция устарела; она обрабатывается как псевдоним для --pgp7.

--pgp7 Настроить все параметры для максимального соответствия PGP 7. Это разрешало шифры IDEA, 3DES, CAST5, AES128, AES192, AES256 и TWOFISH, хеши MD5, SHA1 и RIPEMD160, а также алгоритмы сжатия “none” и ZIP. Эта опция подразумевает --escape-from-lines и отключает --throw-keyids.

--pgp8 Настроить все параметры для максимального соответствия PGP 8. PGP 8 гораздо ближе к стандарту OpenPGP, чем предыдущие версии PGP, поэтому все, что она делает, это отключает --throw-keyids и устанавливает --escape-from-lines. Разрешены все алгоритмы, кроме хешей SHA224, SHA384 и SHA512.

--compliance string Эта опция может быть использована вместо одной из опций выше. Допустимые значения для string — это названия опций выше (без двойного дефиса) и, возможно, другие, как показано при использовании "help" для string.

--min-rsa-length n Эта опция настраивает режим соответствия "de-vs" для более строгих требований к размеру ключа. Например, значение 3000 превращает ключи rsa2048 и dsa2048 в ключи, не соответствующие стандарту VS-NfD.

--require-pqc-encryption Эта опция принудительно требует использование квантово-устойчивых (quantum-resistant) алгоритмов шифрования. Если не все открытые ключи являются квантово-устойчивыми, шифрование завершится ошибкой. Использование алгоритма симметричного шифрования AES-256 также обеспечивается этой опцией. При расшифровке выводится предупреждение для всех неквантово-устойчивых ключей. На данный момент алгоритмы Kyber (ML-KEM768 и ML-KEM1024) и AES-256 считаются квантово-устойчивыми; Kyber всегда используется в композитной схеме вместе с классическим ECC-алгоритмом.

--disable-pqc-encryption Эта опция отключает использование квантово-устойчивых подключей и использует подключ с неквантово-устойчивым алгоритмом, если он доступен, или выдает ошибку в противном случае. Опция игнорируется, если активна --require-pqc-encryption.

--require-compliance Чтобы проверить, что данные были зашифрованы в соответствии с правилами текущего режима соответствия, пользователю gpg необходимо анализировать строки статуса (status lines). Это позволяет интерфейсам (frontends) обрабатывать проверку соответствия более гибким способом. Однако для использования в скриптах необходимый анализ строк статуса требует значительных усилий; вместо этого можно использовать эту опцию, чтобы убедиться, что процесс gpg завершится с ошибкой, если правила соответствия не выполнены. Обратите внимание, что в настоящее время эта опция имеет эффект только в режиме "de-vs".


Таблица опций соответствия GnuPG

Опция Описание
--gnupg По умолчанию. Поведение GnuPG (OpenPGP + расширения + обходные пути для совместимости с PGP).
--openpgp Строгое соответствие OpenPGP. Сбрасывает алгоритмы к стандартным значениям. Разрешает старые алгоритмы шифрования.
--rfc4880 Строгое соответствие RFC-4880 (в настоящее время эквивалентно --openpgp). Разрешает старые алгоритмы шифрования.
--rfc4880bis Строгое соответствие предлагаемым обновлениям RFC-4880.
--rfc2440 Опасно. Строгое соответствие устаревшему RFC-2440. Создает шифрование без защиты MDC. Разрешает старые алгоритмы.
--pgp7 Максимальная совместимость с PGP 7. Разрешает старые алгоритмы (IDEA, 3DES, CAST5, MD5 и др.), включает --escape-from-lines, отключает --throw-keyids.
--pgp8 Совместимость с PGP 8. Близко к OpenPGP. Отключает --throw-keyids, включает --escape-from-lines. Запрещает только хеши SHA224/384/512.
--compliance string Универсальная опция. В качестве string используйте значения выше без -- (например, openpgp, rfc4880).
--min-rsa-length n Ужесточает требования к размеру ключа в режиме "de-vs" (например, n=3000 сделает ключи RSA2048 несоответствующими).
--require-pqc-encryption Требует использования квантово-устойчивых алгоритмов шифрования (Kyber) и AES-256. Шифрование завершится ошибкой, если не все ключи соответствуют.
--disable-pqc-encryption Отключает использование квантово-устойчивых подключей. Предпочитает классические алгоритмы. Игнорируется, если активен --require-pqc-encryption.
--require-compliance Заставляет gpg завершаться с ошибкой, если правила текущего режима соответствия (например, de-vs) не выполнены. Упрощает проверку в скриптах.

2.4.6 - Дополнительные опции

Дополнительные опции для настройки и управления pgp

Таблица опций GnuPG (PGP)

Опция (Оригинал) Короткая опция Перевод на русский язык и пояснение
–dry-run -n Пробный запуск. Не вносить никаких изменений (реализовано не полностью).
–list-only Только список. Изменяет поведение некоторых команд. Похоже на --dry-run, но в некоторых случаях работает иначе.
–interactive -i Интерактивный режим. Запрашивать подтверждение перед перезаписью любых файлов.
–compatibility-flags flags Флаги совместимости. Установить флаги для обхода проблем, вызванных несоответствующими стандарту ключами или данными.
–debug-level level Уровень отладки. Выбрать уровень детализации отладочных сообщений для исследования проблем.
–debug flags Флаги отладки. Установить конкретные флаги отладки. Полезно только для разработчиков.
–debug-all Отладка всё. Установить все полезные флаги отладки.
–debug-iolbf Буферизация вывода. Установить буферизацию stdout построчной.
–debug-set-iobuf-size n Размер буфера I/O. Изменить размер буфера IOBUFs до n килобайт. Только для сопровождающих.
–debug-allow-large-chunks Большие чанки. Для тестов позволяет указать размер блока до 4 ЭиБ.
–debug-ignore-expiration Игнорировать истечение срока. Пытается переопределить даты истечения срока действия ключа. Для тестов.
–faked-system-time epoch Поддельное системное время. Устанавливает системное время назад или вперед. Только для тестирования.
–full-timestrings Полные строки времени. Изменяет формат вывода времени создания и истечения с даты на дату и время.
–enable-progress-filter Фильтр прогресса. Включает вывод статуса PROGRESS для индикации прогресса обработки больших файлов.
–status-fd n Дескриптор статуса. Записывает специальные статусные строки в файловый дескриптор n.
–status-file file Файл статуса. То же, что и --status-fd, но записывает данные в файл.
–logger-fd n Дескриптор лога. Записывает вывод лога в файловый дескриптор n, а не в STDERR.
–log-file, –logger-file file Файл лога. То же, что и --logger-fd, но записывает данные в файл.
–log-time Время в логе. Добавляет ко всему лог-выводу временную метку, даже если файл лога не используется.
–attribute-fd n Дескриптор атрибутов. Записывает подпакеты атрибутов в файловый дескриптор n.
–attribute-file file Файл атрибутов. То же, что и --attribute-fd, но записывает данные в файл.
–comment string Комментарий. Использовать string как строку комментария в чистых подписях и ASCII-зашифрованных сообщениях.
–no-comments Без комментариев. Удалить все комментарии.
–emit-version Выводить версию. Принудительно добавлять строку версии в ASCII-вывод.
–no-emit-version Не выводить версию. Не добавлять строку версии (по умолчанию).
–sig-notation, –cert-notation, –set-notation {name=value} -N Нотация подписи/сертификата. Поместить пару “имя=значение” в подпись в качестве данных нотации.
–known-notation name Известная нотация. Добавить name в список известных критических нотаций подписи.
–sig-policy-url, –cert-policy-url, –set-policy-url string URL политики. Использовать string как URL политики для подписей.
–sig-keyserver-url string URL keyserver’а. Использовать string как предпочтительный URL keyserver’а для подписей данных.
–set-filename string Установить имя файла. Использовать string как имя файла, хранящееся внутри сообщений.
–for-your-eyes-only Только для ваших глаз. Установить флаг ‘только для ваших глаз’ в сообщении.
–no-for-your-eyes-only Не только для ваших глаз. Отключить опцию выше.
–use-embedded-filename Исп. встроенное имя файла. Попытаться создать файл с именем, встроенным в данные. Опасно.
–no-use-embedded-filename Не исп. встроенное имя. Не использовать встроенное имя файла (по умолчанию).
–cipher-algo name Алгоритм шифрования. Использовать name как алгоритм шифрования. Нарушает стандарт.
–digest-algo name Алгоритм хеширования. Использовать name как алгоритм хеш-суммы. Нарушает стандарт.
–compress-algo name Алгоритм сжатия. Использовать алгоритм сжатия name. Нарушает стандарт.
–cert-digest-algo name Алгоритм хеша для сертификатов. Использовать name как алгоритм хеш-суммы при подписи ключа.
–disable-cipher-algo name Запретить алгоритм шифр. Никогда не разрешать использование алгоритма name.
–disable-pubkey-algo name Запретить алгоритм подписи. Никогда не разрешать использование алгоритма name.
–throw-keyids Скрыть ID ключей. Не помещать ID ключей получателей в зашифрованные сообщения.
–no-throw-keyids Не скрывать ID ключей. Отключает опцию выше.
–not-dash-escaped Без экранирования дефисом. Меняет поведение чистых подписей для использования с файлами патчей.
–escape-from-lines Экранировать строки “From”. Обрабатывать строки, начинающиеся с “From “, особым образом.
–no-escape-from-lines Не экранировать “From”. Отключает опцию выше.
–passphrase-repeat n Повтор пароля. Указать, сколько раз запрашивать повторение новой парольной фразы.
–passphrase-fd n Дескриптор пароля. Читать парольную фразу из файлового дескриптора n.
–passphrase-file file Файл пароля. Читать парольную фразу из файла file.
–passphrase string Парольная фраза. Использовать string как парольную фразу. Опасно.
–pinentry-mode mode Режим pinentry. Установить режим ввода пароля (ask, cancel, error, loopback).
–no-symkey-cache Отключить кеш пароля. Отключает кеш парольных фраз, используемый для симметричного шифрования.
–request-origin origin Источник запроса. Сообщить GnuPG, откуда пришел запрос (local, remote, browser).
–command-fd n Дескриптор команд. Читать пользовательский ввод для вопросов из файлового дескриптора n.
–command-file file Файл команд. То же, что и --command-fd, но читает команды из файла.
–allow-non-selfsigned-uid Разрешить не самоподписанные UID. Разрешить импорт ключей с пользовательскими ID, которые не самоподписаны. Не рекомендуется.
–no-allow-non-selfsigned-uid Запретить не самоподписанные UID. Запрещает опцию выше.
–allow-freeform-uid Свободная форма UID. Отключить все проверки формы пользовательского ID при генерации нового.
–ignore-time-conflict Игнорировать конфликт времени. Превратить проверки временных меток в предупреждения.
–ignore-valid-from Игнорировать “действует с”. Разрешить использование подобранных ключей, созданных в будущем.
–ignore-crc-error Игнорировать ошибку CRC. Позволить GnuPG игнорировать ошибки контрольной суммы CRC в ASCII-armor.
–ignore-mdc-error Игнорировать ошибку MDC. Превратить сбой защиты целостности MDC в предупреждение. Используйте с осторожностью.
–allow-old-cipher-algos Разрешить старые шифры. Разрешить использование старых алгоритмов с размером блока 64 бита (3DES, IDEA).
–allow-weak-digest-algos Разрешить слабые хеши. Разрешить проверку подписей, сделанных со слабыми алгоритмами хеширования (напр., MD5).
–weak-digest name Слабый хеш. Считать указанный алгоритм хеширования слабым.
–allow-weak-key-signatures Разрешить слабые подписи ключей. Разрешить подписи ключей третьих сторон, сделанные с использованием SHA-1.
–override-compliance-check Переопределить проверку соответствия. Устаревшая опция, больше не имеет эффекта.
–no-default-keyring Без ключевого кольца по умолчанию. Не добавлять ключевое кольцо по умолчанию в список keyring’ов.
–no-keyring Без ключевых колец. Не использовать никакие ключевые кольца вообще.
–skip-verify Пропустить проверку. Пропустить шаг проверки подписи для ускорения расшифровки.
–with-key-data С данными ключа. Печатать данные открытого ключа в выводе списка.
–list-signatures, –list-sigs Список подписей. То же, что --list-keys, но также列出 подписи (без их проверки).
–fast-list-mode Быстрый режим списка. Изменить вывод команд списка для более быстрой работы (опуская часть информации).
–no-literal Без literal. Не для нормального использования.
–set-filesize Установить размер файла. Не для нормального использования.
–show-session-key Показать сеансовый ключ. Показать сеансовый ключ, использованный для сообщения.
–show-only-session-key Только показать сеансовый ключ. Только показать сеансовый ключ, но не обрабатывать сообщение дальше.
–override-session-key string Переопределить сеансовый ключ. Не использовать открытый ключ, а использовать указанный сеансовый ключ.
–override-session-key-fd fd Переопределить сеансовый ключ (fd). То же, что и выше, но ключ читается из файлового дескриптора.
–ask-sig-expire Спрашивать срок подписи. При создании подписи данных запрашивать срок ее действия.
–no-ask-sig-expire Не спрашивать срок подписи. Отключает опцию выше.
–default-sig-expire value Срок подписи по умолчанию. Срок действия по умолчанию для подписей данных (напр., “2m”, “5y”).
–ask-cert-expire Спрашивать срок сертификата. При подписи ключа запрашивать срок действия подписи.
–no-ask-cert-expire Не спрашивать срок сертификата. Отключает опцию выше.
–default-cert-expire value Срок сертификата по умолчанию. Срок действия по умолчанию для подписей ключей.
–default-new-key-algo string Алгоритм ключа по умолчанию. Изменить алгоритмы по умолчанию для генерации ключей (напр., “ed25519/cert,sign+cv25519/encr”).
–no-auto-trust-new-key Не доверять новому ключу автоматически. Не устанавливать доверие новому ключу в “ultimate” при создании.
–force-sign-key Принудительная подпись ключа. Принудительно создавать подпись ключа, даже если она уже существует.
–forbid-gen-key Запретить генерацию ключа. Запретить использование команд генерации ключей.
–allow-secret-key-import Разрешить импорт секретных ключей. Устаревшая опция, не используется.
–allow-multiple-messages Разрешить множественные сообщения. Устаревшая опция, не имеет эффекта.
–no-allow-multiple-messages Запретить множественные сообщения. Устаревшая опция, не имеет эффекта.
–enable-special-filenames Специальные имена файлов. Включить режим, где имена вида -&n ссылаются на файловый дескриптор n.
–disable-fd-translation Отключить трансляцию дескрипторов. Только для Windows.
–no-expensive-trust-checks Без дорогих проверок доверия. Только для экспериментального использования.
–preserve-permissions Сохранить права доступа. Не менять права доступа к файлу секретного ключа. Только для экспертов.
–default-preference-list string Список предпочтений по умолчанию. Установить список предпочтений по умолчанию для новых ключей.
–default-keyserver-url name URL keyserver’а по умолчанию. Установить URL keyserver’а по умолчанию для записи в самоподписи.
–list-config Список конфигурации. Показать различные внутренние параметры конфигурации GnuPG.
–list-gcrypt-config Конфигурация Libgcrypt. Показать параметры конфигурации Libgcrypt.
–gpgconf-list Список для gpgconf. Аналогично --list-config, но для использования утилитой gpgconf.
–gpgconf-test Тест gpgconf. Провести синтаксическую проверку файла конфигурации.
–chuid uid Сменить пользователя. Сменить текущего пользователя на uid (число или имя). Только из-под root.

2.4.7 - Config

Создание и редактирование конфигурационного файла.

Файлы конфигурации

Существует несколько файлов конфигурации для управления определенными аспектами работы gpg. Если не указано иное, они ожидаются в текущем домашнем каталоге (см. опцию --homedir).

gpg.conf Это стандартный файл конфигурации, читаемый gpg при запуске. Он может содержать любые допустимые длинные опции; начальные два дефиса указывать не нужно, и опцию нельзя сокращать. Это имя по умолчанию можно изменить в командной строке (см. опцию gpg --options). Вам следует создавать резервные копии этого файла.

common.conf Это необязательный файл конфигурации, читаемый gpg при запуске. Он может содержать опции, относящиеся ко всем компонентам GnuPG. В настоящее время его основное использование — для опции "use-keyboxd". Если домашний каталог по умолчанию ~/.gnupg не существует, GnuPG создает этот каталог и файл common.conf с "use-keyboxd".

Примечание: В крупных системах полезно размещать предопределенные файлы в каталоге /usr/local/etc/skel/.gnupg, чтобы новые пользователи начинали работу с готовой конфигурацией. Для существующих пользователей предоставляется небольшой вспомогательный скрипт для создания этих файлов (см. addgnupghome).

Для внутренних целей gpg создает и поддерживает несколько других файлов; все они находятся в текущем домашнем каталоге (см. опцию --homedir). Только программа gpg может изменять эти файлы.

~/.gnupg Это домашний каталог по умолчанию, который используется, если не задана ни переменная окружения GNUPGHOME, ни опция --homedir.

~/.gnupg/pubring.gpg Публичный ключевой контейнер (keyring) в устаревшем формате. Вам следует создавать резервные копии этого файла.

Если этот файл недоступен, gpg по умолчанию использует новый формат keybox и создает файл pubring.kbx, если только этот файл уже не существует, в этом случае он также будет использоваться для ключей OpenPGP.

Примечание: Если существуют оба файла, pubring.gpg и pubring.kbx, но в последнем нет ключей OpenPGP, будет использоваться устаревший файл pubring.gpg. Будьте осторожны: версии GnuPG до 2.1 всегда будут использовать файл pubring.gpg, потому что они не знают о новом формате keybox. Если вам придется использовать GnuPG 1.4 для расшифровки архивных данных, вам следует сохранить этот файл.

~/.gnupg/pubring.gpg.lock Файл блокировки (lock file) для публичного ключевого контейнера.

~/.gnupg/pubring.kbx Публичный ключевой контейнер в новом формате keybox. Этот файл используется совместно с gpgsm. Вам следует создавать резервные копии этого файла. См. выше связь между этим файлом и его предшественником.

Чтобы преобразовать существующий файл pubring.gpg в формат keybox, вы сначала создаете резервную копию значений доверия (ownertrust), затем переименовываете pubring.gpg в publickeys.backup (чтобы он не распознавался любой версией GnuPG), запускаете импорт и, наконец, восстанавливаете значения доверия:

$ cd ~/.gnupg
$ gpg --export-ownertrust >otrust.lst
$ mv pubring.gpg publickeys.backup
$ gpg --import-options restore --import publickeys.backup
$ gpg --import-ownertrust otrust.lst

~/.gnupg/pubring.kbx.lock Файл блокировки для pubring.kbx.

~/.gnupg/secring.gpg Устаревший контейнер секретных ключей, используемый версиями GnuPG до 2.1. Он не используется GnuPG 2.1 и позднее. Вы можете захотеть сохранить его на случай, если вам придется использовать GnuPG 1.4 для расшифровки архивных данных.

~/.gnupg/secring.gpg.lock Файл блокировки для устаревшего контейнера секретных ключей.

~/.gnupg/.gpg-v21-migrated Файл, указывающий, что миграция на GnuPG 2.1 была выполнена.

~/.gnupg/trustdb.gpg База данных доверия (trust database). Нет необходимости создавать резервные копии этого файла; лучше создать резервную копию значений доверия владельца (см. опцию --export-ownertrust).

~/.gnupg/trustdb.gpg.lock Файл блокировки для базы данных доверия.

~/.gnupg/random_seed Файл, используемый для сохранения состояния внутреннего пула случайных чисел.

~/.gnupg/openpgp-revocs.d/ Это каталог, в котором gpg хранит предварительно сгенерированные отзывные сертификаты. Имя файла соответствует отпечатку OpenPGP соответствующего ключа. Рекомендуется создавать резервные копии этих сертификатов и, если основной закрытый ключ не хранится на диске, перемещать их на внешнее запоминающее устройство. Любой, кто имеет доступ к этим файлам, может отозвать соответствующий ключ. Вы можете распечатать их. Вам следует создавать резервные копии всех файлов в этом каталоге и позаботиться о том, чтобы эта резервная копия хранилась в надежном месте.

Работа дополнительно контролируется несколькими переменными окружения:

HOME Используется для определения местоположения домашнего каталога по умолчанию.

GNUPGHOME Если установлена, указывает каталог, используемый вместо "~/.gnupg".

GPG_AGENT_INFO Эта переменная устарела; она использовалась версиями GnuPG до 2.1.

PINENTRY_USER_DATA Это значение передается через gpg-agent в pinentry. Это полезно для передачи дополнительной информации пользовательскому pinentry.

COLUMNS LINES Используются для масштабирования некоторых дисплеев под полный размер экрана.

LANGUAGE Помимо своего использования в GNU, она используется в версии для W32 (Windows) для переопределения выбора языка, сделанного через реестр. Если она используется и установлена в допустимое и доступное имя языка (langid), файл с переводом загружается из gpgdir/gnupg.nls/langid.mo. Здесь gpgdir — это каталог, из которого был загружен бинарный файл gpg. Если его не удается загрузить, предпринимается попытка использовать реестр, и в крайнем случае используется родная система локалей Windows.

GNUPG_BUILD_ROOT Эта переменная используется только набором регрессионных тестов в качестве вспомогательного средства в операционных системах без надлежащей поддержки для определения имени текстового файла процесса.

GNUPG_EXEC_DEBUG_FLAGS Эта переменная позволяет включить диагностику для управления процессами. Ожидается десятичное числовое значение. Бит 0 включает общую диагностику, бит 1 включает определенные предупреждения в Windows.

GNUPG_ASSUME_COMPLIANCE Вспомогательная переменная для отладки, чтобы перевести систему в состояние предположения о соответствии. Например, в режиме de-vs это вернет 2023 в качестве идентификатора вместо 23.

При вызове компонента gpg-agent программа gpg отправляет набор переменных окружения в gpg-agent. Имена этих переменных можно перечислить с помощью команды:

gpg-connect-agent 'getinfo std_env_names' /bye | awk '$1=="D" {print $2}'

2.5 - gpgsm

gpgsm — это инструмент, аналогичный gpg, который предоставляет услуги цифрового шифрования и подписи для сертификатов X.509 и протокола CMS. Он в основном используется в качестве бэкенда для обработки электронной почты S/MIME. gpgsm включает в себя полноценное управление сертификатами и соответствует всем правилам, установленным для немецкого проекта Sphinx.

2.6 - scdaemon

scdaemon — это демон для управления смарт-картами. Обычно он вызывается gpg-agent и, как правило, не используется напрямую.

2.7 - user id

Существует несколько способов указать идентификатор пользователя для GnuPG. Некоторые из них действительны только для gpg, другие — только для gpgsm. Вот полный список способов указания ключа:
  • По идентификатору ключа. Этот формат определяется по длине строки и её содержимому или префиксу 0x. Идентификатор ключа X.509 сертификата — это младшие 64 бита его SHA-1 отпечатка. Использование идентификаторов ключей — это просто сокращение; для всей автоматизированной обработки следует использовать отпечаток.

    При использовании gpg можно добавить восклицательный знак (!), чтобы принудительно использовать указанный основной или вторичный ключ, а не пытаться вычислить, какой основной или вторичный ключ использовать.

    Последние четыре строки примера дают идентификатор ключа в длинной форме, как это используется в протоколе OpenPGP. Вы можете увидеть длинный идентификатор ключа, используя опцию --with-colons.

    234567C4
    0F34E556E
    01347A56A
    0xAB123456
    
    234AABBCC34567C4
    0F323456784E56EAB
    01AB3FED1347A5612
    0x234AABBCC34567C4
    
  • По отпечатку. Этот формат определяется по длине строки и её содержимому или префиксу 0x. Обратите внимание, что только 20-байтовая версия отпечатка доступна с gpgsm (т.е. SHA-1 хэш сертификата).

    При использовании gpg можно добавить восклицательный знак (!), чтобы принудительно использовать указанный основной или вторичный ключ, а не пытаться вычислить, какой основной или вторичный ключ использовать.

    Лучший способ указать идентификатор ключа — использовать отпечаток. Это избегает любых неоднозначностей в случае дублирования идентификаторов ключей.

    1234343434343434C434343434343434
    123434343434343C3434343434343734349A3434
    0E12343434343434343434EAB3484343434343434
    0xE12343434343434343434EAB3484343434343434
    

    gpgsm также принимает двоеточия между каждой парой шестнадцатеричных цифр, поскольку это де-факто стандарт представления отпечатков X.509. gpg также позволяет использовать SHA-1 отпечаток, разделенный пробелами, как это выводится командами для отображения ключей.

  • По точному совпадению с идентификатором пользователя OpenPGP. Это обозначается ведущим знаком равенства. Это не имеет смысла для сертификатов X.509.

    =Heinrich Heine <heinrichh@uni-duesseldorf.de>
    
  • По точному совпадению с адресом электронной почты. Это указывается заключением адреса электронной почты в угловые скобки.

    <heinrichh@uni-duesseldorf.de>
    
  • По частичному совпадению с адресом электронной почты. Это указывается префиксом строки поиска символом @. Это использует поиск подстроки, но учитывает только адрес электронной почты (т.е. внутри угловых скобок).

    @heinrichh
    
  • По точному совпадению с DN субъекта. Это указывается ведущим слэшем, за которым непосредственно следует закодированный в RFC-2253 DN субъекта. Обратите внимание, что вы не можете использовать строку, напечатанную командой gpgsm --list-keys, потому что она была переупорядочена и изменена для лучшей читаемости; используйте --with-colons, чтобы напечатать необработанную (но стандартно экранированную) строку RFC-2253.

    /CN=Heinrich Heine,O=Poets,L=Paris,C=FR
    
  • По точному совпадению с DN издателя. Это указывается ведущим символом решетки, за которым непосредственно следует слэш, а затем закодированный в RFC-2253 DN издателя. Это должно вернуть корневой сертификат издателя. См. примечание выше.

    #/CN=Root Cert,O=Poets,L=Paris,C=FR
    

2.8 - сравнение SSH и PGP

Наглядное сравнение SSH и PGP систем и их использование

SSH и PGP ключи — это два столпа современной кибербезопасности, но они решают совершенно разные задачи. Их часто путают, потому что оба используют асимметричную криптографию (пары из открытого и закрытого ключей).

Проще всего запомнить так:

  • SSH-ключи — это пропуск. Их основная задача — аутентификация (доказательство того, что вы имеете право доступа к чему-либо).
  • PGP-ключи — это универсальный инструмент. Их задачи — шифрование (чтобы не могли прочитать), подпись (чтобы могли проверить авторство и целостность) и иногда аутентификация.

Сравнительная таблица: SSH vs PGP ключи

Критерий SSH-ключи (Secure Shell) PGP-ключи (Pretty Good Privacy)
Основное назначение Аутентификация и установка безопасного канала. Предоставление доступа к чему-либо (серверу, Git-репозиторию, etc.) без пароля. Шифрование, подпись, аутентификация. Защита конфиденциальности и целостности данных (почты, файлов, ПО).
Главная задача Доказать серверу, что вы — это вы. 1. Зашифровать данные для конкретного получателя.
2. Подписать данные, чтобы подтвердить авторство.
3. Зашифровать данные (например, файлы).
Типичное применение Вход на удаленные серверы (Linux), безопасная передача файлов (SCP, SFTP), работа с Git (GitHub, GitLab). Шифрование электронной почты, подписание коммитов в Git, проверка целостности скачанного ПО (например, дистрибутивов Linux), шифрование файлов.
Формат и структура Относительно простой. Чаще всего это пары файлов: id_rsa (закрытый) и id_rsa.pub (открытый). Используют алгоритмы вроде RSA, Ed25519. Сложная и богатая структура. Ключ содержит много метаданных: имя, email, даты создания/истечения, возможности ключа (может ли он шифровать, подписывать), отпечаток (fingerprint), а также может состоять из подключей.
Доверие (Trust Model) Простое и централизованное. Вы вручную копируете свой открытый ключ на нужный сервер (в файл ~/.ssh/authorized_keys). Сервер доверяет тому, у кого есть соответствующий закрытый ключ. Децентрализованное (Веб доверия - Web of Trust). Вы можете подписывать ключи других людей, подтверждая, что доверяете их подлинности. Цепочка таких подписей создает сеть доверия.
Идентификация Понимается сервером. Обычно привязана к пользователю на конкретном сервере. Привязана к человеку (через имя и email в ключе).
Отзыв ключа Удаление открытого ключа из файла authorized_keys на сервере. Создание и широкое распространение сертификата отзыва (Revocation Certificate), который объявляет ключ недействительным.

Наглядные схемы работы

1. Схема работы SSH-ключа для доступа к серверу

flowchart TD
    subgraph User [Пользователь на своем компьютере]
        A[Запрос подключения к серверу] --> B[SSH-клиент предъявляет<br>свой Открытый ключ]
        A --> C[Сервер отправляет<br>«Вызов» случайными данными]
        C --> D[SSH-клиент подписывает «Вызов»<br>своим Закрытым ключом]
        D --> E[Отправляет подпись серверу]
    end

    subgraph Server [Удаленный сервер]
        B --> F[Сервер проверяет<br>есть ли присланный Открытый ключ<br>в файле authorized_keys]
        E --> G[Сервер проверяет подпись<br>«Вызова» с помощью<br>найденного Открытого ключа]
        G -- Подпись верна --> H[✅ Аутентификация успешна<br>Доступ разрешен]
        G -- Подпись неверна --> I[❌ Доступ запрещен]
    end

2. Схема работы PGP-ключа для подписи данных

flowchart TD
    subgraph Sender [Отправитель Подписывает данные]
        A[Исходные данные] --> B[Создает их хэш отпечаток]
        B --> C[Подписывает хэш<br>своим Закрытым PGP-ключом]
        C --> D[Цифровая подпись]
        A --> E[Объединяет исходные данные<br>и подпись для отправки]
        D --> E
    end

    subgraph Receiver [Получатель Проверяет подпись]
        E --> F[Разделяет полученное<br>на данные и подпись]
        F --> G[Вычисляет хэш<br>от полученных данных]
        F --> H[Расшифровывает подпись<br>Открытым PGP-ключом отправителя<br>и получает оригинальный хэш]
        G --> I{Сравнивает хэши}
        H --> I
        I -- Совпали --> J[✅ Подпись верна<br>Данные подлинны и не изменены]
        I -- Не совпали --> K[❌ Подпись неверна!<br>Данные отклонены]
    end

Ключевые выводы и аналогия

Представьте себе большую охраняемую территорию:

  • SSH-ключ — это пропускная карта, которую вы прикладываете к турникету. Турникет (сервер) проверяет, есть ли номер вашей карты в базе разрешенных номеров. Если есть — вас пускают. Задача решена.
  • PGP-ключ — это ваша печать и набор секретных кодов.
    • Шифрование: Вы можете положить документ в шкатулку и запереть ее на кодовый замок, который откроется только кодом конкретного получателя.
    • Подпись: Вы можете запечатать документ сургучной печатью. Любой, у кого есть оттиск вашей печати (ваш открытый ключ), может убедиться, что документ распечатали вы и его не вскрывали.

Можно ли использовать PGP-ключ для SSH? Технически да, это возможно через дополнительные надстройки (например, gpg-agent может работать как ssh-agent). Это позволяет использовать один главный PGP-ключ для множества задач (почта, подпись кода, доступ к серверам). Но «из коробки» эти системы не совместимы.

3 - Шпаргалка по основным командам nano

Шпаргалка по основным командам nano для быстрого редактирования простых файлов

Шпаргалка для редактора nano

Запуск nano

  • Открыть файл: nano имя_файла
  • Создать новый файл: nano (после сохранения нужно указать имя)

Основные команды (управляются через Ctrl + клавиша или ^)

  • ^G – открыть справку (помощь)
  • ^O – сохранить файл (O – Write Out)
  • ^X – выйти из nano (если есть изменения, предложит сохранить)
  • ^K – вырезать строку (Kill)
  • ^U – вставить строку (Unpaste)
  • ^W – поиск по тексту (Where)
  • ^\ – поиск и замена (ввести искомое, затем замену)
  • ^C – показать позицию курсора (строка/столбец)

Навигация

  • ^F – вперед на 1 символ (Forward)
  • ^B – назад на 1 символ (Backward)
  • ^Право/Лево – перемещение по словам (Alt + стрелки в некоторых версиях)
  • ^A – в начало строки (A – Home)
  • ^E – в конец строки (E – End)
  • ^Y – вверх на страницу
  • ^V – вниз на страницу

Дополнительно

  • ^T – проверка орфографии (если включено)
  • ^R – вставить содержимое другого файла (Read File)
  • ^D – удалить символ под курсором (Delete)
  • ^_ (Ctrl + Shift + “-”) – перейти на номер строки

Выход и сохранение

  1. ^X → если есть изменения, нажмите:
    • Y – сохранить, N – не сохранять, Ctrl+C – отмена.
  2. Если сохраняете (Y), введите имя файла и нажмите Enter.

Подсказка: Внизу экрана всегда отображаются основные комбинации. Для более продвинутых функций (например, подсветки синтаксиса) может потребоваться конфигурационный файл ~/.nanorc.

4 - Шпаргалка по основным командам Vim

Шпаргалка по основным командам Vim для быстрого редактирования простых файлов

Режимы в Vim

  1. Нормальный режим (командный) — Esc
    (используется для навигации и команд)
  2. Режим вставкиi, a, o
    (для редактирования текста)
  3. Визуальный режим (выделение) — v, V, Ctrl+v
  4. Командная строка:
    (для сложных команд, например сохранения)

Основные команды (в нормальном режиме)

1. Навигация

  • h, j, k, l — влево, вниз, вверх, вправо
  • w / b — вперед/назад по словам
  • 0 / $ — в начало/конец строки
  • gg / G — в начало/конец файла
  • Ctrl+d / Ctrl+u — вниз/вверх на полэкрана
  • :10 — перейти на 10-ю строку

2. Редактирование

  • i — вставить перед курсором
  • a — вставить после курсора
  • o / O — новая строка ниже/выше
  • x — удалить символ под курсором
  • dd — удалить строку
  • yy — скопировать строку
  • p / P — вставить после/перед курсором
  • u — отменить действие
  • Ctrl+r — повторить отмененное

3. Поиск и замена

  • /слово — поиск слова вперед
  • ?слово — поиск слова назад
  • n / N — следующее/предыдущее совпадение
  • :%s/старое/новое/g — заменить все вхождения в файле
  • :%s/старое/новое/gc — заменить с подтверждением

4. Работа с файлами

  • :w — сохранить
  • :w имя_файла — сохранить как…
  • :q — выйти
  • :q! — выйти без сохранения
  • :wq или ZZ — сохранить и выйти
  • :e имя_файла — открыть другой файл

5. Полезные фишки

  • . — повторить последнюю команду
  • % — перейти к парной скобке (), {}, []
  • >> / << — сдвинуть строку вправо/влево
  • Ctrl+v → выделение → I → текст → Esc — вставить текст в несколько строк
  • :set number — показать номера строк
  • :sp файл / :vsp файл — разделить окно горизонтально/вертикально

Примеры использования

  1. Редактирование конфига

    vim /etc/nginx/nginx.conf
    
    • Нажать i для редактирования
    • Нажать Esc, затем :wq для сохранения и выхода
  2. Поиск и замена

    • Ввести :%s/old/new/g для замены всех “old” на “new”
  3. Копирование строк

    • Навести курсор на строку → yy → перейти куда нужно → p

Выход из Vim (шутка, но важно!)

  • Если застряли — нажать Esc, затем:
    • :q! → выйти без сохранения
    • :wq → сохранить и выйти

Эта шпаргалка покрывает 90% повседневных задач в Vim. Для продвинутых возможностей (макросы, плагины) стоит изучить vimtutor (введите в терминале).

5 - Пакет scrcpy для управления Android устройством через Linux

scrcpy — это инструмент командной строки для зеркалирования экрана и управления Android-устройством с компьютера через USB или Wi-Fi. Он не требует root-доступа и работает на Linux, Windows и macOS.

scrcpy — это инструмент командной строки для зеркалирования экрана и управления Android-устройством с компьютера через USB или Wi-Fi. Он не требует root-доступа и работает на Linux, Windows и macOS.


Для чего нужен scrcpy в Linux?

  1. Зеркалирование экрана Android

    • Показывает экран телефона/планшета на ПК с низкой задержкой (до 60 FPS).
    • Полезно для стриминга, записи экрана или демонстрации.
  2. Управление Android с ПК

    • Можно кликать мышкой, печатать с клавиатуры.
    • Поддержка мультитача (если устройство поддерживает HID).
  3. Передача файлов

    • Drag & Drop файлов между ПК и Android (scrcpy --push-target /sdcard/).
  4. Запись экрана

    • Сохранение видео без потери качества:
      scrcpy --record screen.mp4
      
  5. Беспроводное подключение (Wi-Fi)

    • После подключения по USB можно переключиться на Wi-Fi:
      scrcpy --tcpip=192.168.1.100  # вместо USB
      
  6. Экономия заряда

    • Если экран телефона выключен, но управление работает (scrcpy --turn-screen-off).
  7. Разработка и отладка

    • Удобен для тестирования приложений без эмулятора.

Как установить scrcpy в Linux?

1. Установка из репозиториев (проще)

sudo apt install scrcpy  # Debian/Ubuntu
sudo dnf install scrcpy  # Fedora
sudo pacman -S scrcpy    # Arch Linux

2. Установка вручную (последняя версия)

# Требуются зависимости:
sudo apt install ffmpeg adb gcc git meson ninja-build

# Сборка из исходников
git clone https://github.com/Genymobile/scrcpy
cd scrcpy
./install_release.sh

Базовые команды

Команда Описание
scrcpy Запуск по USB
scrcpy --bit-rate 2M --max-size 800 Настроить качество
scrcpy --no-control Только просмотр (без управления)
scrcpy --fullscreen Во весь экран
scrcpy --show-touches Показывать касания

Плюсы и минусы

Плюсы

  • Низкая задержка (~35 мс)
  • Не требует root
  • Поддержка Linux, Windows, macOS
  • Можно использовать мышку/клавиатуру

Минусы

  • Нет звука (можно через sndcpy отдельно)
  • Для Wi-Fi нужно сначала подключиться по USB

6 - Шпаргалка по основным командам crone

Шпаргалка по основным командам crone с примерами

Формат команды cron

Команда 0 3 * * 0 /usr/bin/docker system prune -af --filter "until=168h" && /usr/bin/docker volume prune -f в cron состоит из двух частей:

  1. Расписание: 0 3 * * 0
  2. Команда: /usr/bin/docker system prune -af --filter "until=168h" && /usr/bin/docker volume prune -f

Разбор расписания (пять полей):

┌───────────── минуты (0 - 59)
│ ┌───────────── час (0 - 23)
│ │ ┌───────────── день месяца (1 - 31)
│ │ │ ┌───────────── месяц (1 - 12)
│ │ │ │ ┌───────────── день недели (0 - 6) (0 - воскресенье)
│ │ │ │ │
│ │ │ │ │
0 3 * * 0
  • 0 - в 0 минут часа
  • 3 - в 3 часа утра
  • * - каждый день месяца
  • * - каждый месяц
  • 0 - только по воскресеньям

Итог: команда выполняется каждое воскресенье в 3:00 утра.

Где хранятся файлы конфигурации cron

1. Системные cron-задачи:

  • /etc/crontab - основной файл конфигурации
  • /etc/cron.d/ - каталог для дополнительных конфигураций
  • /etc/cron.hourly/, /etc/cron.daily/, /etc/cron.weekly/, /etc/cron.monthly/ - каталоги для скриптов, выполняемых с указанной периодичностью

2. Пользовательские cron-задачи:

  • /var/spool/cron/crontabs/ - каталог с индивидуальными файлами для каждого пользователя (обычно редактируются через crontab -e)
  • Для просмотра: crontab -l
  • Для редактирования: crontab -e

Особенности:

  1. При редактировании через crontab -e не нужно указывать пользователя - задача будет выполняться от имени текущего пользователя
  2. В системных файлах (/etc/crontab) требуется указать пользователя:
    0 3 * * 0 root /usr/bin/docker system prune -af...
  3. Для root-задач лучше использовать crontab -e от root или размещать в /etc/cron.d/

Проверка cron-задач

После добавления задачи можно проверить:

# Для пользовательских задач
crontab -l

# Для системных задач
cat /etc/crontab
ls /etc/cron.d/

Дополнительные параметры cron

В конец cron-задачи можно добавить перенаправление вывода:

0 3 * * 0 /usr/bin/docker system prune -af --filter "until=168h" && /usr/bin/docker volume prune -f > /var/log/docker-clean.log 2>&1

Где:

  • > /var/log/docker-clean.log - перенаправление stdout в файл
  • 2>&1 - перенаправление stderr в тот же файл

7 - Шпаргалка по работе с ядрами в Linux

Шпаргалка по работе с ядрами в Linux. Добавление, удаление, обновление.

1. Узнать текущее ядро

uname -r

2. Список установленных ядер

sudo mhwd-kernel -l

3. Удалить ядро

sudo mhwd-kernel -r <kernel-name>
  • <kernel-name> — имя ядра, которое вы хотите удалить (например, linux515).

4. Обновить конфигурацию bootloader

sudo update-grub

или

sudo grub-mkconfig -o /boot/grub/grub.cfg

5. Установить новое ядро

sudo mhwd-kernel -i <kernel-name>
  • <kernel-name> — имя ядра, которое вы хотите установить (например, linux519).

6. Переключиться на другое ядро

  1. Установите новое ядро: sudo mhwd-kernel -i <kernel-name>
  2. Перезагрузите систему: sudo reboot
  3. В меню bootloader выберите новое ядро.

7. Проверка текущего ядра

uname -r

8. Ручное удаление ядра (не рекомендуется)

sudo pacman -Rdd <package-name>
  • <package-name> — имя пакета ядра, которое вы хотите удалить (например, linux515).

Внимание: Будьте осторожны при удалении ядер, особенно если вы не уверены, какое ядро активно используется.

8 - Find and Sed

Примеры использования поисковых запросов POSIX c SED FIND GREP

Замена текста в множестве файлов с множеством вложенных директорий

Вариант с использованием FIND XARGS SED UG

#Заменяем в файлах md 
find . -type f -name "*.md" | xargs sed -Ei 's/bx-apps/bx_apps/g'

#Проверяем, что ничего не осталось
ug -r -g'*.md' 'bx-apps' *

А теперь с толкованием по шагам:

  1. find . - точка говорит что ищем в текущей директории
  2. -type f - говорит что будем искать имена файлов -type d имена директорий
  3. -name "*.md" - говорит что GLOB паттерн файлов с расширением md
  4. | принимаем на вход поток имен файлов от find
  5. xargs - запустит приложение и передаст ему на вход имя файла
  6. sed -Ei - запустим потоковый редактор SED с расширенным функционалом POSIX (-E) и править будем прямо в самих файлах (i)
  7. 's/bx-apps/bx_apps/g' - regex строка замены слова bx-apps на bx_apps с ключом g, т.е. глобально.

А теперь проверим, что получилось:

  1. ug -r - это просто grep только удобный и продвинутый, -r значит от сюда и рекурсивно по всем директориям
  2. -g'*.md' - это glob поиск по файлам с расширением *.md
  3. 'bx-apps' - собственно что должны искать

По результату ничего не должно показать. Кстати, перед началом выполнения find | sed можно выполнить тоже ug только с поиском того, что хотим заменить ug -r -g'*.md' 'bx-apps'

Вариант с использованием того же только без UG

#Проверим наличие строк для замены
find . -type f -name "*.md" | xargs sed -En '/bx-apps/p'

#Заменяем в файлах md 
find . -type f -name "*.md" | xargs sed -Ei 's/bx-apps/bx_apps/g'

#Проверяем, что ничего не осталось
find . -type f -name "*.md" | xargs sed -En '/bx-apps/p'

Без повторений рассмотрим только изменения:

  1. sed -En - не будет изменять файл, а только выведет строки в которых встретит искомую строку
  2. '/bx-apps/p' - искомая строка с ключом p это просто напечатать.

Вариант с использованием того же только без FIND

#Проверяем, что ничего не осталось
ug -r -g'*.md' 'bx-apps' *

#Заменяем в файлах md 
ug -r --format='%f' -g'*.md' | xargs sed -Ei 's/bx-apps/bx_apps/g'

#Проверяем, что ничего не осталось
ug -r -g'*.md' 'bx-apps' *

Объяснения:

  1. ug -r -g'*.md' 'bx-apps' - уже знакомая строка, выведет все файлы и строки с искомой строкой
  2. ug -r --format='%f' -g'*.md' - новое значение --format='%f' - это формат вывода данных, где:
    • %f - путь и имя файла
    • %n - номер строки в файле
    • %O - контекст, с найденным словом
    • %~ - перевод строки

9 - Управление пакетами PACMAN

ARCH, MANJARO для управления пакетами, загрузка, удаление, обновление.

ARCH, MANJARO для управления пакетами, загрузка, удаление, обновление.

Команды пакета PACMAN

Выполняются под правами администратора, поэтому пишем

sudo pacman --help

использование:  pacman <действие> [...]
действия:
    pacman {-h --help}
    pacman {-V --version}
    pacman {-D --database} <параметры> <пакет(ы)>
    pacman {-F --files}    [параметры] [файл(ы)]
    pacman {-Q --query}    [параметры] [пакет(ы)]
    pacman {-R --remove}   [параметры] <пакет(ы)>
    pacman {-S --sync}     [параметры] [пакет(ы)]
    pacman {-T --deptest}  [параметры] [пакет(ы)]
    pacman {-U --upgrade}  [параметры] <файл(ы)>

используйте 'pacman { -h --help}' вместе с другими операциями для просмотра параметров

Утилита -D

использование:

pacman {-D --database} <параметры> <пакет(ы)>

параметры:

Параметр Описание
-b, –dbpath <путь> указать альтернативное расположение базы данных
-k, –check проверить валидность локальной бд (-kk для синхронизации баз)
-q, –quiet не показывать сообщения об удачных операциях
-r, –root <путь> указать альтернативный корневой каталог
-v, –verbose выводить больше информации
–arch установить альтернативную архитектуру
–asdeps отметить пакеты как неявно установленные
–asexplicit отметить пакеты как явно установленные
–cachedir <каталог> указать альтернативное расположение кэша
–color <когда> раскрашивать вывод
–config <путь> использовать альтернативный конфигурационный файл
–confirm всегда спрашивать подтверждения
–debug показывать отладочные сообщения
–disable-download-timeout use relaxed timeouts for download
–disable-sandbox disable the sandbox used for the downloader process
–gpgdir <путь> установить альтернативный домашний каталог для GnuPG
–hookdir установить альтернативное расположение hook
–logfile <путь> использовать альтернативный файл журнала
–noconfirm не спрашивать подтверждения
–sysroot работать с подключенной гостевой системой (только root)

Установочная информация о менеджере пакетов

Параметр ПУТЬ
Root /
Conf File /etc/pacman.conf
DB Path /var/lib/pacman/
Cache Dirs /var/cache/pacman/pkg/
Hook Dirs /usr/share/libalpm/hooks/ /etc/pacman.d/hooks/
Lock File /var/lib/pacman/db.lck
Log File /var/log/pacman.log
GPG Dir /etc/pacman.d/gnupg/
Targets Нет

Утилита -F

использование:

pacman {-F --files} [параметры] [файл(ы)]

параметры:

Параметр Описание
-b, –dbpath <путь> указать альтернативное расположение базы данных
-l, –list показать список файлов пакета
-q, –quiet показывать меньше информации при запросах и поиске
-r, –root <путь> указать альтернативный корневой каталог
-v, –verbose выводить больше информации
-x, –regex включить использование регулярных выражений в поиске
-y, –refresh загрузить обновленные базы данных с серверов (-yy принудительно обновить даже если обновленные)
–arch установить альтернативную архитектуру
–cachedir <каталог> указать альтернативное расположение кэша
–color <когда> раскрашивать вывод
–config <путь> использовать альтернативный конфигурационный файл
–confirm всегда спрашивать подтверждения
–debug показывать отладочные сообщения
–disable-download-timeout use relaxed timeouts for download
–disable-sandbox disable the sandbox used for the downloader process
–gpgdir <путь> установить альтернативный домашний каталог для GnuPG
–hookdir установить альтернативное расположение hook
–logfile <путь> использовать альтернативный файл журнала
–machinereadable выдавать машинно-читаемый вывод
–noconfirm не спрашивать подтверждения
–sysroot работать с подключенной гостевой системой (только root)

Утилита -Q

использование:

pacman {-Q --query} [параметры] [пакет(ы)]

параметры:

Параметр Описание
-b, –dbpath <путь> указать альтернативное расположение базы данных
-c, –changelog показать список изменений пакета
-d, –deps показать все пакеты, установленные как зависимости [фильтр]
-e, –explicit показать все явно установленные пакеты [фильтр]
-g, –groups показать все пакеты данной группы
-i, –info показать информацию о пакете (-ii для резервных копий)
-k, –check проверить, что все файлы пакета существуют (-kk для вывода свойств файла)
-l, –list показать список файлов пакета
-m, –foreign показать установленные пакеты, не найденные в базе(ах) данных [фильтр]
-n, –native показать установленные пакеты, найденные только в базе(ах) данных [фильтр]
-o, –owns <файл> найти пакет, содержащий <файл>
-p, –file <пакет> извлечь информацию из файла пакета, а не из базы данных
-q, –quiet показывать меньше информации при запросах и поиске
-r, –root <путь> указать альтернативный корневой каталог
-s, –search искать указанную строку в локально установленных пакетах
-t, –unrequired показать все пакеты, не требуемые ни одним пакетом(-tt игнорировать дополнительные зависимости) [фильтр]
-u, –upgrades показать список устаревших пакетов [фильтр]
-v, –verbose выводить больше информации
–arch установить альтернативную архитектуру
–cachedir <каталог> указать альтернативное расположение кэша
–color <когда> раскрашивать вывод
–config <путь> использовать альтернативный конфигурационный файл
–confirm всегда спрашивать подтверждения
–debug показывать отладочные сообщения
–disable-download-timeout use relaxed timeouts for download
–disable-sandbox disable the sandbox used for the downloader process
–gpgdir <путь> установить альтернативный домашний каталог для GnuPG
–hookdir установить альтернативное расположение hook
–logfile <путь> использовать альтернативный файл журнала
–noconfirm не спрашивать подтверждения
–sysroot работать с подключенной гостевой системой (только root)

Утилита -R

использование:

pacman {-R --remove} [параметры] <пакет(ы)>

параметры:

Параметр Описание
-b, –dbpath <путь> указать альтернативное расположение базы данных
-c, –cascade удалить пакет и все зависящие от него пакеты
-d, –nodeps пропустить проверку версий (-dd пропускает все проверки)
-n, –nosave удалять конфигурационные файлы
-p, –print вывести список целей вместо выполнения операций
-r, –root <путь> указать альтернативный корневой каталог
-s, –recursive удалять ненужные зависимости (-ss включая явно установленные)
-u, –unneeded удалить ненужные пакеты
-v, –verbose выводить больше информации
–arch установить альтернативную архитектуру
–assume-installed <пакет=версия> добавить виртуальный пакет для удовлетворения зависимостей
–cachedir <каталог> указать альтернативное расположение кэша
–color <когда> раскрашивать вывод
–config <путь> использовать альтернативный конфигурационный файл
–confirm всегда спрашивать подтверждения
–dbonly изменить только записи в базе данных, не файлы пакетов
–debug показывать отладочные сообщения
–disable-download-timeout use relaxed timeouts for download
–disable-sandbox disable the sandbox used for the downloader process
–gpgdir <путь> установить альтернативный домашний каталог для GnuPG
–hookdir установить альтернативное расположение hook
–logfile <путь> использовать альтернативный файл журнала
–noconfirm не спрашивать подтверждения
–noprogressbar не показывать индикатор выполнения при загрузке
–noscriptlet не запускать установочные скрипты, если они есть
–print-format <строка>
–sysroot работать с подключенной гостевой системой (только root)

Утилита -S

использование:

pacman {-S --sync} [параметры] [пакет(ы)]

параметры:

Параметр Описание
-b, –dbpath <путь> указать альтернативное расположение базы данных
-c, –clean удалить старые пакеты из кэша (-cc для всех)
-d, –nodeps пропустить проверку версий (-dd пропускает все проверки)
-g, –groups показать все пакеты данной группы (-gg показывает все группы и пакеты)
-i, –info показать информацию о пакете (-ii показать детали)
-l, –list показать все пакеты из этого репозитория
-p, –print вывести список целей вместо выполнения операций
-q, –quiet показывать меньше информации при запросах и поиске
-r, –root <путь> указать альтернативный корневой каталог
-s, –search искать указанную строку в удаленных репозиториях
-u, –sysupgrade обновить установленные пакеты(-uu разрешает откат версий)
-v, –verbose выводить больше информации
-w, –downloadonly загрузить пакеты с сервера, но не устанавливать
-y, –refresh загрузить обновленные базы данных с серверов (-yy принудительно обновить даже если обновленные)
–arch установить альтернативную архитектуру
–asdeps установить пакеты как неявно установленные
–asexplicit установить пакеты как явно установленные
–assume-installed <пакет=версия> добавить виртуальный пакет для удовлетворения зависимостей
–cachedir <каталог> указать альтернативное расположение кэша
–color <когда> раскрашивать вывод
–config <путь> использовать альтернативный конфигурационный файл
–confirm всегда спрашивать подтверждения
–dbonly изменить только записи в базе данных, не файлы пакетов
–debug показывать отладочные сообщения
–disable-download-timeout use relaxed timeouts for download
–disable-sandbox disable the sandbox used for the downloader process
–gpgdir <путь> установить альтернативный домашний каталог для GnuPG
–hookdir установить альтернативное расположение hook
–ignore <пакет> пропустить пакет при обновлении (может быть использовано неоднократно)
–ignoregroup <группа> пропустить группу при обновлении (может быть использовано неоднократно)
–logfile <путь> использовать альтернативный файл журнала
–needed переустанавливать только устаревшие пакеты
–noconfirm не спрашивать подтверждения
–noprogressbar не показывать индикатор выполнения при загрузке
–noscriptlet не запускать установочные скрипты, если они есть
–overwrite overwrite conflicting files (can be used more than once)
–print-format <строка> укажите формат вывода целей
–sysroot работать с подключенной гостевой системой (только root)

Утилита -T

использование:

pacman {-T --deptest} [параметры] [пакет(ы)]

параметры:

Параметр Описание
-b, –dbpath <путь> указать альтернативное расположение базы данных
-r, –root <путь> указать альтернативный корневой каталог
-v, –verbose выводить больше информации
–arch установить альтернативную архитектуру
–cachedir <каталог> указать альтернативное расположение кэша
–color <когда> раскрашивать вывод
–config <путь> использовать альтернативный конфигурационный файл
–confirm всегда спрашивать подтверждения
–debug показывать отладочные сообщения
–disable-download-timeout use relaxed timeouts for download
–disable-sandbox disable the sandbox used for the downloader process
–gpgdir <путь> установить альтернативный домашний каталог для GnuPG
–hookdir установить альтернативное расположение hook
–logfile <путь> использовать альтернативный файл журнала
–noconfirm не спрашивать подтверждения
–sysroot работать с подключенной гостевой системой (только root)

Утилита -U

использование:

pacman {-U --upgrade} [параметры] <файл(ы)>

параметры:

Параметр Описание
-b, –dbpath <путь> указать альтернативное расположение базы данных
-d, –nodeps пропустить проверку версий (-dd пропускает все проверки)
-p, –print вывести список целей вместо выполнения операций
-r, –root <путь> указать альтернативный корневой каталог
-v, –verbose выводить больше информации
-w, –downloadonly загрузить пакеты с сервера, но не устанавливать
–arch установить альтернативную архитектуру
–asdeps установить пакеты как неявно установленные
–asexplicit установить пакеты как явно установленные
–assume-installed <пакет=версия> добавить виртуальный пакет для удовлетворения зависимостей
–cachedir <каталог> указать альтернативное расположение кэша
–color <когда> раскрашивать вывод
–config <путь> использовать альтернативный конфигурационный файл
–confirm всегда спрашивать подтверждения
–dbonly изменить только записи в базе данных, не файлы пакетов
–debug показывать отладочные сообщения
–disable-download-timeout use relaxed timeouts for download
–disable-sandbox disable the sandbox used for the downloader process
–gpgdir <путь> установить альтернативный домашний каталог для GnuPG
–hookdir установить альтернативное расположение hook
–ignore <пакет> пропустить пакет при обновлении (может быть использовано неоднократно)
–ignoregroup <группа> пропустить группу при обновлении (может быть использовано неоднократно)
–logfile <путь> использовать альтернативный файл журнала
–needed переустанавливать только устаревшие пакеты
–noconfirm не спрашивать подтверждения
–noprogressbar не показывать индикатор выполнения при загрузке
–noscriptlet не запускать установочные скрипты, если они есть
–overwrite overwrite conflicting files (can be used more than once)
–print-format <строка> укажите формат вывода целей
–sysroot работать с подключенной гостевой системой (только root)

10 - UGREP и все о нем

Удивительная поисковая программа на все случаи жизни. Детальный разбор

Примеры использования поисковых запросов POSIX

Установка UGREP

pkg install ugrep

Файл конфигурации .ugrep хранится в корне домашнего каталога

ug –save-config OPTIONS

сохранит новые настройки

Я уже в восторге от UGREP

Примеры

Пример Описание
ug -Q запускает интерактивный режим поиска
ug -%% -jwQ рекурсивный Google поиск по словам с интерактивностью
ug PATTERN искать во всех файлах по паттерну рекурсивно
ug PATTERN FILE искать в конкретном файле
ug PATTERN DIR искать в конкретной директории
ug -3 PATTERN DIR искать рекурсивно до 3-го уровня вложенности
ug -3 -g"foo*.txt" PATTERN DIR искать только в именах файлов foo*.txt нужный паттерн в директории DIR не глубже 3-го уровня
ug -z PATTERN искать в архивах
ug -z -tc,cpp -Z PATTERN искать в архивах коды С и С++ с неточным совпадением -Z паттерна
ug -z -l "" package.zip покажет все файлы в архиве
ug -z -W –pager "" mailattachment.zip просмотреть 16-ричный дамп в архиве
ug –save-config –ignore-files –ignore-binary –decompress сохранит файл конфигурации игнорируя bin и .git файлы и смотреть в архивах
ug –help regex покажет help команды

Опции UG со списком файлов

Опция Описание
-l список файлов, удовлетворяющих паттрену
-l -m5, список файлов, где есть не меньше 5 совпадений
-l –max-files=3 только первые 3 файла с совпадениями
-L все файлы не совпавшие с паттерном
-c посчитать сколько совпадений в файле
-cv посчитать сколько несовпадений в файле
-cu посчитать совпадения
-cm1, посчитать совпадения, но не показывать с 0

Опции UG для отображения результата

Опция Описание
-H выводить имя файла
-n выводить номер строки
-k выводить номер колонки
-b выводить номер байта с начала файла
-u разделяет групповые запросы и выводит результат раздельно
-C3 мощно! выводит 3 строки до совпадения (-B3) и 3 строки после (-A3)
-y выводит весь файл и подсвечивает найденные строки
-o выводит только найденные фразы
-o -C20 выведет 40 строк вокруг каждого найденного значения
–width=40 выведет результат шириной 40 знаков

Опции управления паттерном

Опция Описание
-F искать как fgrep
-G искать как grep
-P искать как perl
-Z искать как fuzzy (приблизительно)
-U искать не как Unicode
-Y искать как grep
-i искать регистронечувствительно
-j искать умно регистронезависимо
-w искать целиком слова, а не части слов
-x искать целыми строками
-v инверсия паттерна
-e PATTERN можно складывать выражения поиска
-N PATTERN -e “[0-9]+” -N “0+” ищет ненулевые числа
-f FILE читает из файла паттерн
-f cpp/names наверно очень нужная вещь, для тех кто пишет на С

Googling files

непереводимая вещь, но смысл типа ищем как гуглинг

Опция Описание
-% “foo bar” чтобы в одной строке было оба паттерна
-%% “foo bar” чтобы в одном файле было оба паттерна
-% “foo -bar” чтобы в одной строке был 1-й, но не было второго
-%% “foo -bar” чтобы в одном файле был 1-й, но не было второго
-% “foo bar|baz” чтобы в одной строке был или 1-й или 2-й
-% “foo -(bar|baz)” чтобы в строке был 1-й, но не было ни второго и не третьего
-% “foo AND NOT (bar OR baz)” аналогично выше
-% “foo -bar -baz” чтобы в строке был 1-й и не было 2-го и 3-го вместе
-% ‘foo “-bar baz”’ чтобы был первый без второго но с третьим
-F -% “foo bar?” с фиксацией поиска

Приблизительный поиск

Опция Описание
-Z искать приблизительно, допускается один символ не совпадающий в шаблоне (вообще три темы в таком поиске: - недостающий символ; - лишний символ; - замененный символ)
-Z2 все тоже самое, что выше но теперь с двумя символами
-Z+2 этот поиск конкретно указывает, что только могут быть лишние 2 символа
-Z-2 этот поиск конкретно указывает, что только могут быть недостающие 2 символа
-Z~2 этот поиск конкретно указывает, что только могут быть 2 символа замененные
-Z+-2 этот поиск конкретно указывает, что только могут быть лишние и недостающие 2 символа
-Z+-~2 это аналог -Z2
-c -Z посчитаем сколько было таких неудачных совпадений
-c -Zbest2 посчитаем только с лучшими вариантами, плохие отбросит
-c -Zbest2 –sort=best посчитает все, но выведет в отсортированном виде по степени ухудшения

Ищем в архивах

Это уже для меня конкретное откровение! Чтобы grep еще и в архивах искал

Опция Описание
-z ищет в zip/7z/tar/pax/cpio архивах, и в сжатых файлах tarballs и gz/Z/bz/bz2/lzma/xz/lz4/zstd/brotli
-z –zmax=2 ищет также, как и выше, но не больше 2-го уровня вложенности архивов в архивы
-z -I –zmax=2 как и выше, но не ищет в двоичных файлах
-z -tc,cpp ищет в архивах и файлы типа С и С++ (ключ t указывает тип файла)
-z -g".txt,.md" работает как find и ищет в именах файлов и директорий в архивах
-z -g"^bak/" ищет в архивах, исключая bak директории

Двоичные файлы и устройства

Опция Описание
-I игнорировать двоичные файлы
-W hexdump — 16-ричный двоичный код искать, а текст, как обычный текст
-X ищет двоичный код в hexdump
-U –hexdump hexdump 8-битный двоичный шаблон регулярных выражений, соответствующий шаблону на основе символов Unicode (опция -U)
–hexdump=4a выводит четырехколоночный дамп со всеми символами
–hexdump=4ch это тоже в 4 колонки, но без символов и пробелов
–hexdump=4C3 выводит дамп 3 строки перед и 3 строки после найденного паттерна
–hexdump=4C3 -u -b похожа, как выше, но разгруппирует запрос и укажет байт адрес в файле
-Dread ищет на специальном устройстве

опции для –hexdump

получает аргументы

  • [1-8] — количество колонок дампа
  • [a] — все выводить
  • [bch] — не выводить символы, пробелы и байт коды
  • [A[NUM]][B[NUM]][C[NUM]] — строки перед и после

Ищет по двоичному коду:

 ug -X 'ffffff'

000a9660  41 41 67 42 2c 43 41 43  70 42 2c 51 41 41 51 2c  |AAgB,CACpB,QAAQ,|
000a9880  41 55 2c 43 41 41 43 2c  43 41 41 43 3b 4d 41 43  |AU,CAAC,CAAC;MAC|
000a9890  35 42 2c 49 41 41 49 2c  43 41 41 43 2c 43 41 41  |5B,IAAI,CAAC,CAA|
000a98a0  43 6a 42 2c 51 41 41 51  2c 47 41 41 47 2c 49 41  |CjB,QAAQ,GAAG,IA|
000a98b0  41 49 3b 4d 41 43 72 42  2c 49 41 41 49 2c 49 41  |AI;MACrB,IAAI,IA|
000a98c0  41 49 2c 43 41 41 43 2c  43 41 41 43 73 47 2c 65  |AI,CAAC,CAACsG,e|
000a98d0  41 41 65 2c 45 41 41 45  3b 51 41 43 7a 42 78 67  |AAe,EAAE;QACzBxg|
000a98e0  46 2c 59 41 41 59 2c 43  41 41 43 2c 49 41 41 49  |F,YAAY,CAAC,IAAI|
000a98f0  2c 43 41 41 43 2c 43 41  41 43 77 67 46 2c 65 41  |,CAAC,CAACwgF,eA|
000a9900  41 65 2c 43 41 41 43 3b  51 41 43 6e 43 2c 49 41  |Ae,CAAC;QACnC,IA|
000a9910  41 49 2c 43 41 41 43 2c  43 41 41 43 41 2c 65 41  |AI,CAAC,CAACA,eA|
000a9920  41 65 2c 47 41 41 47 2c  49 41 41 49 3b 4d 41 43  |Ae,GAAG,IAAI;MAC|
000a9930  39 42 3b 49 41 43 46 3b  49 41 43 41 2c 4b 41 41  |9B;IACF;IACA,KAA|
000a9940  4b 2c 43 41 41 43 6c 37  46 2c 4d 41 41 4d 2c 43  |K,CAACl7F,MAAM,C|
000a9950  41 41 43 2c 43 41 41 43  3b 45 41 43 68 42 3b 45  |AAC,CAAC;EAChB;E|
000a9960  41 47 41 36 6e 42 2c 4f  41 41 4f 41 2c 43 41 41  |AGA6nB,OAAOA,CAA|
000a9970  41 2c 45 41 41 47 3b 49  41 43 52 2c 49 41 41 49  |A,EAAG;IACR,IAAI|
000a9980  2c 43 41 41 43 2c 49 41  41 49 2c 43 41 41 43 35  |,CAAC,IAAI,CAAC5|
000a9990  59 2c 4d 41 41 4d 2c 45  41 41 45 3b 4d 41 47 68  |Y,MAAM,EAAE;MAGh|
000a99a0  42 2c 49 41 41 49 2c 49  41 41 49 2c 43 41 41 43  |B,IAAI,IAAI,CAAC|
000a99b0  2c 43 41 41 43 34 72 46  2c 51 41 41 51 2c 45 41  |,CAAC4rF,QAAQ,EA|

Ищет по Unicode:

ug -U --hexdump 'ffffff'

zotero-pdf-translate/node_modules/yauzl/index.js
   140:   
00001910  79 4f 66 66 73 65 74 20  3d 3d 3d 20 30 78 66 66  |yOffset === 0xff|
00001920  66 66 66 66 66 66 29 29  20 7b 0a -- -- -- -- --  |ffffff)) {J-----|
   333:   
00003b60  3d 3d 20 30 78 66 66 66  66 66 66 66 66 20 7c 7c  |== 0xffffffff |||
   334:   
00003ba0  20 30 78 66 66 66 66 66  66 66 66 20 7c 7c 0a --  | 0xffffffff ||J-|
   335:   
00003be0  78 66 66 66 66 66 66 66  66 29 20 7b 0a -- -- --  |xffffffff) {J---|

выводит в красивом виде 16-ричного дампа в 4 колонки

ug --hexdump=4a 'ffffff'

zotero-pdf-translate/node_modules/yauzl/index.js
   140:   
00001900  20 63 65 6e 74 72 61 6c  44 69 72 65 63 74 6f 72  79 4f 66 66 73 65 74 20  3d 3d 3d 20 30 78 66 66  | centralDirectoryOffset === 0xff|
00001920  66 66 66 66 66 66 29 29  20 7b 0a -- -- -- -- --  -- -- -- -- -- -- -- --  -- -- -- -- -- -- -- --  |ffffff)) {J---------------------|
   333:   
00003b60  3d 3d 20 30 78 66 66 66  66 66 66 66 66 20 7c 7c  0a -- -- -- -- -- -- --  -- -- -- -- -- -- -- --  |== 0xffffffff ||J---------------|
   334:   
00003ba0  20 30 78 66 66 66 66 66  66 66 66 20 7c 7c 0a --  -- -- -- -- -- -- -- --  -- -- -- -- -- -- -- --  | 0xffffffff ||J-----------------|

выводит в 4 колонки но без пробелов и символов

ug --hexdump=4ch 'ffffff'

zotero-pdf-preview/node_modules/pdfjs-dist/legacy/build/pdf.mjs.map
     1:   
000eb440  305c222026262062 67436f6c6f72203d 3d3d205c22236666 666666665c222920 
     1|   
00112f20  7365656420262030 7866666666666666 66203a2053454544 3b5c6e2020202074 
00112f40  6869732e6832203d 2073656564203f20 7365656420262030 7866666666666666 
     1|   
00120c20  6865696768742c5c 6e20206e6f6e426c 61636b436f6c6f72 203d203078666666 
00120c40  66666666662c5c6e 2020696e76657273 654465636f646520 3d2066616c73652c 
     1|   

выводит 4 колонки и по 3 строки перед и после:

ug --hexdump=4C3 'afaf'

zotero-pdf-translate/node_modules/minimist/CHANGELOG.md
    51:   
00001200  -- -- -- 2d 20 5b 44 65  76 20 44 65 70 73 5d 20  61 64 64 20 6d 69 73 73  69 6e 67 20 60 6e 70 6d  |---- [Dev Deps] add missing `npm|
00001220  69 67 6e 6f 72 65 60 20  64 65 76 20 64 65 70 20  5b 60 33 32 32 36 61 66  61 60 5d 28 68 74 74 70  |ignore` dev dep [`3226afa`](http|
00001240  73 3a 2f 2f 67 69 74 68  75 62 2e 63 6f 6d 2f 6d  69 6e 69 6d 69 73 74 6a  73 2f 6d 69 6e 69 6d 69  |s://github.com/minimistjs/minimi|
00001260  73 74 2f 63 6f 6d 6d 69  74 2f 33 32 32 36 61 66  61 66 30 39 65 39 64 31  32 37 63 61 33 36 39 37  |st/commit/3226afaf09e9d127ca3697|
00001280  34 32 34 33 37 66 65 36  65 38 38 66 37 35 32 64  36 62 29 0a -- -- -- --  -- -- -- -- -- -- -- --  |42437fe6e88f752d6b)J------------|
   186:   
000036c0  -- -- -- -- -- 2d 20 5b  44 65 76 20 44 65 70 73  5d 20 61 64 64 20 6d 69  73 73 69 6e 67 20 60 6e  |------ [Dev Deps] add missing `n|
000036e0  70 6d 69 67 6e 6f 72 65  60 20 64 65 76 20 64 65  70 20 5b 60 33 32 32 36  61 66 61 60 5d 28 68 74  |pmignore` dev dep [`3226afa`](ht|
00003700  74 70 73 3a 2f 2f 67 69  74 68 75 62 2e 63 6f 6d  2f 6d 69 6e 69 6d 69 73  74 6a 73 2f 6d 69 6e 69  |tps://github.com/minimistjs/mini|
00003720  6d 69 73 74 2f 63 6f 6d  6d 69 74 2f 33 32 32 36  61 66 61 66 30 39 65 39  64 31 32 37 63 61 33 36  |mist/commit/3226afaf09e9d127ca36|
00003740  39 37 34 32 34 33 37 66  65 36 65 38 38 66 37 35  32 64 36 62 29 0a -- --  -- -- -- -- -- -- -- --  |9742437fe6e88f752d6b)J----------|

Исключения и включения

Опция Описание
-@ (–all) ищет во всех нескрытых файлах и отменяет все ограничения до него
-. (–hidden) включая скрытые файлы
-I игнорировать двоичные файлы
-p не переходить по символическим ссылкам
-r искать рекурсивно без символических ссылок
-rS искать рекурсивно по символическим ссылкам на файлы, но без директорий
-R искать рекурсивно по символическим ссылкам с директориями
-tc,cpp искат только файлы типом С и С++
-Ohpp,cpp сокращенная запись -g".hpp,.cpp" ищет по расширениям файлов
-g".hpp,.cpp" ищет по имена файлов
-g"src/" ищет все src/ директории рекрсивно
-g"^*.txt,^bak/" ищет файлы и директории исключая файлы *.txt и директории bak/
–iglob="^*.txt,^bak/" тоже, что выше, но регистронезависимый поиск
-K10,99 искать в файлах с 10-й по 99-ю строку
-m1 выводить только первую найденную строку
-m2,9 выводить только со 2-й по 9-ю строку поиска
-m2,9 -u как выше, только разруппировать результат
-3 рекурсия на 3 уроня вглубь
-2-3 рекурсия со 2-го по 3-й уровень
–max-files=3 возвращать результат для первых трех файлов
–ignore-files соблюдать правила .gitignore при рекурсивном поиске
–exclude-fs=PATH исключить поиск системных файлов по пути PATH
–exclude-fs спускаться только в файловые системы с указанными целями
–include-fs=. игнорирует поиск на смонтированных дисках
–exclude-from=FILE игнорирует все файлы помеченные в переменной FILE
–include-from=FILE обратное выше, включает все файлы определенные в FILE
–filter=“COMMANDS” перед поиском, предварительно фильтрует файлы с помощью специальных комманд

Форматированый вывод результата

Опция Описание
--csv в CSV
--json в JSON
--xml в XML
--format=“FORMAT” выводит в некоем условном формате
╭─edge@bsd in ~ 
╰$ ug -% "sed 3d" ./sed --json
[
  {
    "file": "./sed/example.md",
    "matches": [
      { "line": 6, "match": "╰$ seq 10 | sed -E  '1,3d;5d'" }
    ]
  },
  {
    "file": "./sed/example.md~",
    "matches": [
      { "line": 6, "match": "╰$ seq 10 | sed -E  '1,3d;5d'" }
    ]
  }
]

получилось очень мило

У grep бывает все красиво

Опция Описание
--pretty — выводит все красочно и красиво и включает -n, -T, --color, --tree, --heading, --break и --sort
--tree — добавляет деревянной красоты к ключам -l и -c когда выводим списо файлов
--heading — выводит имя файла как заголовок в поиске
--break — выведет пустую линию между результатами поиска
-T — добавит \tab в строке и колонке с номером
--color — выводит в цвете
--colors=COLORS — задать цвет вывода
--hyperlink=+ — включает гиперссылки в вывод на терминал
--pager — мне это очень напомнило редактор vi в режиме просмотра. Т.е. смотрим на вывод постранично
--tag output matches as match instead of colorizing them, where --tag=TAG,TAG outputs TAGmatchTAG
--replace=“FORMAT” replace matches in the output by FORMAT, see also ug --help format
--separator=SEP specify SEP to separate line and column numbers from the match
--group-separator=SEP specify SEP to separate context for options -ABC
--width truncate lines to the terminal window width; --width=40 truncates to 40 characters

Так будет выглядеть вывод в дереве

╭─edge@bsd in ~ 
╰$ ug -l ".*\.man"         
.zsh_history
emacs-29.4.core

.cache/
╰╴chromium/
│ ╰╴Default/
│ │ ╰╴Cache/
│ │ │ ╰╴Cache_Data/
│ │ │ │ ╰╴02c12a7839f51358_0
│ │ │ │ ╰╴3c7eb053e143ec36_0
│ │ │ │ ╰╴40051ca56893c175_0
│ │ │ │ ╰╴6fa460d8b7921dfc_0
│ │ │ │ ╰╴87d71ae3063c69c0_0
│ │ │ │ ╰╴90a53aad17d58184_0
│ │ │ │ ╰╴9da1f7ca347c666b_0
│ │ │ │ ╰╴a96d92547e75daa0_0
│ │ │ │ ╰╴c1df79e2d6a936bc_0
│ │ │ │ ╰╴c4bbc1e0b652d750_0
│ │ │ │ ╰╴c7b98cb5b80c61a8_0
│ │ │ │ ╰╴d446ead8e6fafe30_0
│ │ │ │ ╰╴f48eb8aee3d80bd8_0
│ │ │ ▔ 
│ │ ╰╴Code Cache/
│ │ │ ╰╴js/
│ │ │ │ ╰╴00d8a21e14d11b61_0

Globs

эти шарики делают поиск по файлам и директориям

Команда Описание
-g стандартны режим “паттерн”
--iglob= поиск регистро нечувствительное имя файла или директории
--exclude= исключить из поиска файлы
--include= включить в поиск файлы
--include-dir= включая директории
--exclude-dir= исключая директории
--include-from=file файл с именами включаемыми в поиск
--exclude-from=file файл с имена не включаемыми в поиск
--ignore-files=file файл с именами игнорируемые в поиске

Паттерны glob

Команда Описание
* ищет все
? ищет любой один символ
[abc-e] ищет в этой позиции символы abcde
[^abc-e] ищет символы в этой позиции кроме a,b,c,d,e,/
[!abc-e] тоже, что выше
/ ищет только в текущей директории
**/ ищет в предыдущих дирикториях
/** ищет в последующих директориях
\? ищет любой спец.символ

Продолжение следует…

11 - Find

Удивительная утилита, которая может найти все на диске и еще выполнить над тем, что нашла, все что угодно!

Удивительная утилита, которая может найти все на диске и еще выполнить над тем, что нашла, все что угодно!

Командная строка find

find [path...] [expression]

Аргумент path указывает директорию или список директорий с которой начинаем поиск.

Аргумент expression состоит из опций, тестов и действий. Одно выражение может объединять любое их количество, используя традиционные булевы операторы, такие как and и or.

OPTION

  • -d, -depth: указывает на проход утилиты вглубь в дочерние каталоги
  • -mindepth, -maxdepth: уровень обработки каталогов вглубь

TESTS

Тесты — это основные команды утилиты.

  • -name: проверяет, соответствует ли имя файла шаблону (использует простое сопоставление с шаблоном и смотрит только на имя файла)
  • -regex: проверяет, соответствует ли имя файла шаблону (использует стандартные регулярные выражения Emacs и проверяет полный путь к файлу)
  • -type: проверяет, относится ли файл к определенному типу (f – обычный файл, d – каталог, s – символическая ссылка и т. д.)
╭─edge@edge-manjaro in ~/data/sites/doc10 on master ✘ 
╰$ find . -name "*.svg"
./content/docs/latex/pdfpages/adobe-pdf-icon.svg
./content/docs/latex/pdfpages/adobe-pdf-2.svg
./content/docs/linux/ssh/ssh.svg
./themes/hugo-theme-relearn/exampleSite/static/images/logo.svg

. — это поиск в текущей директории

-name — ищем файлы с именами по шаблону

╭─edge@edge-manjaro in ~/data/sites/doc10 on master ✘ 
╰$ find config -type d 
config
config/_default

выведем только директории в каталоге config

Работа со временем

  • -amin, -anewer, -atime: — проверяет последние изменения в файлах
  • -cmin, -cnewer, -ctime: — проверяет время создания файлов относительно времени другого файла
  • -mmin, -mnewer, -mtime: — проверяет время последнего изменения файла
  • -newer: — сравнивает файлы новее исходного
╭─edge@edge-manjaro in ~/data/sites/doc10 on master ✘ 
╰$ find . -name "*.png" -ctime -2
./public/docs/emacs/yasnippet/logo.png
./public/docs/emacs/magit/magit.png
./public/docs/latex/newfont/121751.png
./public/docs/latex/pdfpages/adobe.png
./public/docs/latex/titleps/131227.png
./public/docs/latex/titlesec/101100.png
./public/docs/latex/titlesec/101034.png
./public/docs/latex/titlesec/101112.png

вывести все файлы с расширением .png, созданные в течение последних двух дней

─edge@edge-manjaro in ~/data/sites/doc10 on master ✘ 
╰$ find . -newer ./public/docs/linux/ssh/ssh.png

./public
./public/tags/index.html
./public/tags/index.xml
./public/tags/documentation/index.html
./public/tags/documentation/index.xml
./public/tags/soft/index.html

вывести все файлы, которые новее ssh.png

Поиск по свойствам файлов

  • -perm: поиск по правам доступа файла
  • -size: поиск по размеру файла
╭─edge@edge-manjaro in ~/data/sites/doc10 on master ✘ 
╰$ find . -perm 777
./assets/images/big.jpg
./assets/images/width-title.jpg
./assets/images/logo.png

поиск всех файлов с правами 777

╭─edge@edge-manjaro in ~/data/sites/doc10 on master ✘ 
╰$ find . -size 2M
./assets/images/ig.png
./themes/hugo-theme-relearn/exampleSite/content/introduction/quickstart/magic.gif
./themes/hugo-theme-relearn/static/js/mathjax/mml-svg.js

поиск файлов размером больше 2М

Действия над найденными файлами

  • -ls: выводит результат в формате ls
  • -print, -print0, -printf: вывод результата в стандартный поток вывода
  • -fprint, -fprint0, -fprintf: вывод результата в файл
╭─edge@edge-manjaro in ~/data/sites/doc10 on master ✘ 
╰$ find . -name "ssh*" -ls
   502782      0 drwxr-xr-x   1 edge     edge           62 ноя 15 17:44 ./content/docs/linux/ssh
   502783      8 -rw-r--r--   1 edge     edge         7865 ноя 13 11:52 ./content/docs/linux/ssh/ssh.svg
   502784    136 -rw-r--r--   1 edge     edge       136846 ноя 13 11:53 ./content/docs/linux/ssh/ssh.png
   502907      0 drwxr-xr-x   1 edge     edge           70 ноя 14 17:55 ./public/ru/docs/linux/ssh
   502853      0 drwxr-xr-x   1 edge     edge          114 ноя 14 19:42 ./public/docs/linux/ssh
   502854    136 -rw-r--r--   1 edge     edge       136846 ноя 17 19:26 ./public/docs/linux/ssh/ssh.png
   502855      8 -rw-r--r--   1 edge     edge         7865 ноя 17 19:26 ./public/docs/linux/ssh/ssh.svg

выводит все файлы, где в имени есть ssh

╭─edge@edge-manjaro in ~/data/sites/doc10 on master ✘ 
╰$ find . -name "ssh*" -printf '%s %p\n'
62 ./content/docs/linux/ssh
7865 ./content/docs/linux/ssh/ssh.svg
136846 ./content/docs/linux/ssh/ssh.png
70 ./public/ru/docs/linux/ssh
114 ./public/docs/linux/ssh
136846 ./public/docs/linux/ssh/ssh.png
7865 ./public/docs/linux/ssh/ssh.svg

выводит только размер и имя

  • -delete: удаляет все найденные файлы
  • -exec: выполняет любую команду над результатом поиска
find /tmp -name "*.tmp" -delete

удалит все файлы с расширением tmp

─edge@edge-manjaro in ~/data/sites/doc10 on master ✘ 
╰$ find . -name "*.yaml" -type f -exec grep -l doc {} \;  
./themes/hugo-theme-relearn/.github/actions/release_milestone/action.yaml
./themes/hugo-theme-relearn/.github/workflows/docs-build-deployment.yaml
./themes/hugo-theme-relearn/.github/workflows/docs-build.yaml

найдет все файлы с расширением yaml в которых есть слово doc

╭─edge@edge-manjaro in ~/data/sites/doc10 on master ✘ 
╰$ find . -name "*.yaml" -type f | xargs grep -l doc      
./themes/hugo-theme-relearn/.github/actions/release_milestone/action.yaml
./themes/hugo-theme-relearn/.github/workflows/docs-build-deployment.yaml
./themes/hugo-theme-relearn/.github/workflows/docs-build.yaml

это альтернативная команда xargs вместо exec. Получает на вход результат find и выполняет свою команду.

Операторы Find

Операторы можно комбинировать как обычные логические выражения

(expr): это обычные круглые скобки !, -not: оператор отрицания НЕТ -a, -and: оператор логическое И -o, -or: оператор логическое ИЛИ

Расширенные параметры

find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path] [expressions]
  • H, L, P — порядок обработки символических ссылок
  • O — уровень оптимизации от 0 до 3
  • D — диагностическая информация

REGEX

find [path] [expression]

Этот раздел посвящен простому слову в команде exptession

find [path] -regex [regular_expression]

Будет выполнен поиск по указанному пути и возвращен список файлов, удовлетворяющих условию.


╭─edge@edge-manjaro in ~/data/sites/doc10 on master ✘ 
╰$ find ./ -type f -regex '.*css\/*'
./themes/hugo-theme-relearn/assets/css/auto.css
./themes/hugo-theme-relearn/assets/css/chroma-learn.css
./themes/hugo-theme-relearn/assets/css/chroma-neon.css
./themes/hugo-theme-relearn/assets/css/chroma-relearn-dark.css
./themes/hugo-theme-relearn/assets/css/chroma-relearn-light.css
./themes/hugo-theme-relearn/assets/css/format-print.css

выдал все файлы в которых есть в наименовании css/

╭─edge@edge-manjaro in ~/data/sites/doc10 on master ✘ 
╰$ find ./ -type f -regex '.*neon.*'
./themes/hugo-theme-relearn/assets/css/chroma-neon.css
./themes/hugo-theme-relearn/assets/css/theme-neon.css
./public/css/theme-neon.css
./public/css/chroma-neon.css

а в этом запросе должен быть neon

Команда -iregex

find [path] -iregex [regular_expression]

почти тоже самое, только с регистронезависимым поиском. Будет искать и большие и маленькие буквы.

Команда -regextype

Выбирает тип регулярного выражения

  • findutils
  • emacs — установлено по умолчанию
  • gnu-awk
  • grep
  • egrep
  • posix-awk
  • posix-basic
  • posix-egrep
  • posix-extended

На этой странице есть описание всех синтаксисов регулярных выражений

https://www.gnu.org/software/findutils/manual/html_node/find_html/Regular-Expressions.html"https://www.gnu.org/software/findutils/manual/html_node/find_html/Regular-Expressions.html"

12 - ZSH

Командная оболочка ZSH и все о ней

ZSH является расширенным аналогом BASH и имеет с ним обратную совместимость, добавляя ему большое количество улучшений.

Установка по умолчанию ZSH

Проверить текущую оболочку

$ echo $SHELL

Проверить какие оболочки установлены

chsh -l

Установить по умолчанию zsh:

chsh -s /bin/zsh/

Если не установлен, то в Manjaro выполнить

sudo pacman -S zsh
zsh

если скрипт не запустился, то

autoload -Uz zsh-newuser-install
zsh-newuser-install -f

Поставим OH-MY-ZSH

sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

Читаем документацию https://github.com/ohmyzsh/ohmyzsh/wiki

Редактируем ~/.zshrc

1. export ZSH="$HOME/.oh-my-zsh" — путь к настройкам oh-my-zsh

2. ZSH_THEME="strug" — тема оформления shell-а. Образец

// 

plugins=(git
    bundler
    copyfile
	copybuffer
    copypath
    cp
    emacs
    node
    npm
    qrcode
    rsync
)

Продолжение настройки: подключаем плагины

19. source $ZSH/oh-my-zsh.sh — определяю источник для доступа к репозиторию oh-my-zsh

20. EDITOR='emacs' — назначаю редактор по умолчанию Emacs

21. [[ -s /home/edge/.autojump/etc/profile.d/autojump.sh ]] && source /home/edge/.autojump/etc/profile.d/autojump.sh — подключаю модуль autojump т.к. он отказался подключаться по умолчанию и его пришлось устанавливать в ручную.

autojump

Установка из репозитория https://github.com/wting/autojump

настройка обязательно написать в строке ~/.zshrc

[[ -s /home/edge/.autojump/etc/profile.d/autojump.sh ]] && source /home/edge/.autojump/etc/profile.d/autojump.sh
  1. j foo — быстро переходит в директорию, в которой уже переходили по cd
  2. jc bar — переходит в дочернюю диреторию не набирая cd
  3. jo music — откроет директорию в стандартном файловом менеджере
  4. jco images — откроет дочернюю диреторию в стандартном файловом менеджере

bundler

copyfile

copyfile <filename>

copybuffer

copybuffer

или горячая клавиша C-o

copypath

copypath

cpv (модуль cp)

cpv() {
    rsync -pogbr -hhh --backup-dir="/tmp/rsync-${USERNAME}" -e /dev/null --progress "$@"
}
compdef _files cpv

Получает что-то вроде:

cpv doc10 doc11

doc10/themes/hugo-theme-relearn/static/
doc10/themes/hugo-theme-relearn/static/css/
doc10/themes/hugo-theme-relearn/static/css/auto-complete.css
          1,75K 100%    1,75kB/s    0:00:00 (xfr#2254, to-chk=199/3084)
doc10/themes/hugo-theme-relearn/static/css/fontawesome-all.min.css
         94,26K 100%   94,54kB/s    0:00:00 (xfr#2255, to-chk=198/3084)
doc10/themes/hugo-theme-relearn/static/css/fonts.css
          2,72K 100%    2,73kB/s    0:00:00 (xfr#2256, to-chk=197/3084)

emacs

  1. emacs — открывает редактор с файлом
  2. e — аналогично emacs
  3. te — открывает клиента emacs в терминале
  4. eeval — выполняет команду M-x eval не открывая Emacs
  5. eframe — откроет новый frame emacs
  6. efile — печатает текущий путь файла в буфер
  7. ecd — печатает тукущую директорию в буфер

Теперь, чтобы открыть этот файл мне нужно набрать:

j hb3
e content/docs/linux/zsh/index/md

и я продолжаю работать. Но это еще не все.

ecode64

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

Функция Алиас Описание
encode64 e64 Кодирует в base64
encodefile64 ef64 Кодирует файл в base64 и помещает в одноименный файл с расширением .txt
decode64 d64 Декодирует из base64
╭─edge@edge-manjaro in ~ 
╰$ e64 "Игорь Ра"
0JjQs9C+0YDRjCDQoNCw
╭─edge@edge-manjaro in ~ 
╰$ 


╭─edge@edge-manjaro in ~ 
╰$ d64 0JjQs9C+0YDRjCDQoNCw
Игорь Ра%
╭─edge@edge-manjaro in ~ 
╰$ 


╭─edge@edge-manjaro in ~ 
╰$ echo "Игорь Ра" | e64
0JjQs9C+0YDRjCDQoNCwCg==


╭─edge@edge-manjaro in ~ 
╰$ echo "0JjQs9C+0YDRjCDQoNCwCg==" | d64
Игорь Ра
// Создам файл
╭─edge@edge-manjaro in ~ 
╰$ > etest.txt    
Пример файла
^Z
[1]  + 8113 suspended   > etest.txt

// Закодирую файл
╭─edge@edge-manjaro in ~ 
╰$ ef64 etest.txt 
etest.txt's content encoded in base64 and saved as etest.txt.txt

// Посмотрим, что получилось
╭─edge@edge-manjaro in ~ 
╰$ cat etest.txt.txt 
0J/RgNC40LzQtdGAINGE0LDQudC70LAK

git

Легче посмотреть документацию, чем перечислять здесь: “https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/git"https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/git"

Самые ключевые команды:

Алиас Команда
g git
ga git add
gaa git add –all
gam git am
gb git branch
gco git checkout
gccd git clone –recurse-submodules “$@” && cd “$(basename $_ .git)”
gcam git commit –all –message
gcmsg git commit –message
gd git diff
gf git fetch
gfo git fetch origin
gl git pull
gp git push
gpf! git push –force
gpod git push origin –delete
grb git rebase
gr git remote
grset git remote set-url
grm git rm
gsh git show
gst git status

pass

Требует отдельной статьи, т.к. очень серьезная программа для хранения паролей.

qrcode

Передаем текст в сервис “https://qrcode.show/"https://qrcode.show/"

Алиас Комманда
qrcode [text] curl -d “text” qrcode.show
qrsvg [text] curl -d “text” qrcode.show -H “Accept: image/svg+xml”
qrsvg "Игорь Ра"
<?xml version="1.0" standalone="yes"?><svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="330" height="330" viewBox="0 0 330 330" shape-rendering="crispEdges"><rect x="0" y="0" width="330" height="330" fill="#fff"/><path fill="#000" d="M40 40h10v10H40V40M50 40h10v10H50V40M60 40h10v10H60V40M70 40h10v10H70V40M80 40h10v10H80V40M90 40h10v10H90V40M100 40h10v10H100V40M120 40h10v10H120V40M160 40h10v10H160V40M190 40h10v10H190V40M200 40h10v10H200V40M2
╭─edge@edge-manjaro in ~/data/sites 
╰$ qrcode "Игорь Ра"
█████████████████████████████████
█████████████████████████████████
████ ▄▄▄▄▄ █ ▀▀▀▄██▄ █ ▄▄▄▄▄ ████
████ █   █ █▄█ ▄▀██▄ █ █   █ ████
████ █▄▄▄█ █▄▀▄▀██▄  █ █▄▄▄█ ████
████▄▄▄▄▄▄▄█▄█▄█▄▀▄▀ █▄▄▄▄▄▄▄████
████▄█▀ ▄ ▄ ▄▀█ ▀ ██ ▄▀█▄█   ████
████▄  ▀▀▄▄▀█▄  █ █▄▀▀▀▄▄▄█▀▀████
████  ▄█▀█▄█▄  ▄▄ ▀ █▄▄█▄██ ▀████
████ ▄ ▀█▄▄▀██▀ ▄▄██ █ ▄▀▀██▀████
████▄██▄▄▄▄▄▀▀▄▀▀▀   ▄▄▄ █▀▄ ████
████ ▄▄▄▄▄ █ ▀ ▄▀█▀  █▄█ ▄ ▀█████
████ █   █ █ ███▄▄ █  ▄▄ ▀█▄▀████
████ █▄▄▄█ ██ ▀█▄█ ▄█▀ ▀█ ▄  ████
████▄▄▄▄▄▄▄█▄▄███▄▄▄█▄▄▄▄█▄█▄████
█████████████████████████████████
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀

rcync

Можно этой команде посвящать отдельный пост. Но в этом случае имеем четыре Алиаса:

Алиас Команда Описание
rsync-copy rsync -avz –progress -h Копирует файлы и директории
rsync-move rsync -avz –progress -h –remove-source-files перемещает файлы и директории
rsync-update rsync -avzu –progress -h обновляет файлы
rsync-synchronize rsync -avzu –delete –progress -h синхронизирует
hugo && rsync-synchronize ~/data/sites/hb3/public/ ftp_name@server.name:~/public_html/

13 - Строчный редактор SED

Основные команды редактора SED

Кто такой SED?

Синтаксис SED

Использование: sed [ПАРАМЕТР]{только-сценарий-если-нет-другого-сценария}
               [входной-файл]
  -n, --quiet, --silent
                 выключить автоматическую печать образца
      --debug
                 комментировать выполнение программы
  -e script, --expression=сценарий
                 добавить сценарий в исполняемые команды
  -f script-file, --file=файл-сценария
                 добавить содержимое файла-сценария в исполняемые команды
  --follow-symlinks
                 переходить по символьным ссылкам при обработке на месте
  -i[СУФФИКС], --in-place[=СУФФИКС]
                 править файлы на месте (создаёт копию, если указан СУФФИКС)
  -l N, --line-length=N
                 задать желаемую длину до переноса строки для команды «l»
  --posix
                 отключить все расширения GNU
  -E, -r, --regexp-extended
                 использовать в сценарии расширенные регулярные выражения
                 (для переносимости используйте -E (POSIX)
  -s, --separate
                 рассматривать файлы раздельно, а не в виде одного
                 длинного непрерывного потока
      --sandbox
                 работать в режиме «песочницы»
                 (отключает команды e/r/w)
  -u, --unbuffered
                 загружать минимальный объём данных из входных файлов
                 и чаще сбрасывать выходные буферы на диск
  -z, --null-data
                 разделять строки символами NUL
      --help     показать эту справку и выйти
      --version  показать информацию о версии и выйти

Если не указан параметр -e, --expression, -f или --file, то в качестве
интерпретируемого сценария sed берётся первый необязательный аргумент.
Все оставшиеся аргументы являются именами входных файлов; если входные
файлы не указаны, тогда читается стандартный ввод.

Домашняя страница GNU sed: <https://www.gnu.org/software/sed/>.
Справка по работе с программами GNU: <https://www.gnu.org/gethelp/>.
Сообщения об ошибках отправляйте на <bug-sed@gnu.org>.

Обзор опций SED

Опции настолько интересны, что я решил сделать в блоге специальный раздел для примеров по каждой опции по тегу #regexp

--version — очевидно выведет версию SED

--help — смотрим предыдущий раздел

-n --quiet --silent

Это полезная опция, которая выводит только строки, которые удовлетворяют запросам в выражении, по умолчанию выводится весь текст и дублируются строки, удовлетворяющие запросу.

Пример:

╭─edge@edge-manjaro in ~/tmp/sed 
╰$ seq 3 | sed -E -e  '2ia' -e '2ai' -e '3c100'  
1
a
2
i
100

а теперь поставим -n:

╭─edge@edge-manjaro in ~/tmp/sed 
╰$ seq 3 | sed -E -n -e '2ia' -e '2ai' -e '3c100' 
a
i
100

вывелись только те строки, в которых были изменения

Работа с SED

Для образца, я загнал в файл sed.txt help

sed --help > sed.txt

Дальше работаю с этим файлом

ключ p:

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

sed -n /script/p sed.txt

-e script, --expression=сценарий
-f script-file, --file=файл-сценария

вывести 5-ю строку sed -n 5p sed.txt

вывести с 1-й по 5-ю строку sed -n 1,5p sed.txt

вывести c 35-й строки до конца файла sed -n '35,$p' sed.txt

вообще лучше приучить себя ставить команды в апострофы, либо ' , либо "

ключ d:

— удаляет строку с выполненным условием

8d --- удалить 8-ю строку
/^$/d --- Удалить все пустые строки.
1,/^$/d	--- Удалить все строки до первой пустой строки, включительно.
/GUI/d	--- Удалить все строки, содержащие "GUI".

ключ s:

— заменяет по условию

's/Windows/Linux/'	В каждой строке, заменить первое встретившееся слово "Windows" на слово "Linux".
's/BSOD/stability/g' В каждой строке, заменить все встретившиеся слова "BSOD" на "stability".
's/ *$//'	        Удалить все пробелы в конце каждой строки.
's/00*/0/g'	        Заменить все последовательности ведущих нулей одним символом "0".
'1,3 s/unix/linux/' Заменить в 1-й по 3-ю строки

ключ g:

— выполняет глобальную замену всех вхождений ’s/unix/linux/g’ Заменить все вхождения в строке ’s/unix/linux/1’ Заменить только первое вхождение в строке ’s/unix/linux/3’ Заменить только третье вхождение в строке ’s/unix/linux/3g’ Заменить все вхождения начиная с 3-го в строке

ключ i

игнорирует регистр в шаблоне

Синтаксис: sed 's/old_pattern/new_pattern/i' filename Пример: sed 's/life/Love/i' a.txt

скрипт

  1. /что искать/ — просто пишем регулярное выражение, что будем искать.

  2. G — пустая строка.

Добавить пустые строки во всем файле:

sed G sed.txt
  1. вставить 2 пустые строки G;G

знак ; перечисляет команды в скрипте

sed '/^$/d;G' sed.txt
  1. удалит все пустые строки и вставит пустые после каждой строки

выполним команду:

sed '/script/{x;p;x;}' sed.txt
  1. вставит пустые строки над каждой где есть слово script

выполним команду:

sed '/script/G' sed.txt
  1. Выполнить нумерацию строк

= выполняет нумерацию

sed = sed.txt | sed 'N;s/\n/\t/'
  1. Вывести все строки, содержащие шаблон, включая следующие за каждой из них x строк:

Синтаксис: sed -n '/pattern/,+xp' filename Пример: sed -n '/learn/,+2p' a.txt

  1. Замена шаблона другим шаблоном, за исключением строки n:

Синтаксис: sed 'n!s/old_pattern/new_pattern/' filename Пример: sed -i '5!s/life/love/' a.txt

- n — отключает печать образца если не поставить, то выведет весь файл, а если поставить, то только результат выполненной работы

для - e — параметр редактировать файл

14 - SSH на все случаи жизни

Полное руководство по настройке SSH-ключей и подключений

Содержание

  1. Генерация SSH-ключей
  2. Настройка подключения к удаленному серверу
  3. Настройка подключения к GitHub
  4. Настройка подключения к GitLab
  5. Настройка подключения к Gitea
  6. Настройка подключения между серверами
  7. Безопасность и дополнительные настройки

Генерация SSH-ключей

1. Генерация пары ключей

Откройте терминал и выполните:

ssh-keygen -t ed25519 -C "ваш_email@example.com"

Для большей совместимости (если ed25519 не поддерживается):

ssh-keygen -t rsa -b 4096 -C "ваш_email@example.com"

2. Выбор расположения ключей

При запросе расположения ключей:

  • Нажмите Enter для сохранения в стандартном расположении (~/.ssh/id_ed25519)
  • Или укажите свой путь (например, ~/.ssh/github_ed25519)

3. Задание парольной фразы

Рекомендуется задать надежную парольную фразу для дополнительной безопасности.

Настройка подключения к удаленному серверу

1. Копирование публичного ключа на сервер

ssh-copy-id -i ~/.ssh/id_ed25519.pub username@remote_server

Если ssh-copy-id недоступен:

cat ~/.ssh/id_ed25519.pub | ssh username@remote_server "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

2. Настройка SSH-конфигурации

Создайте/отредактируйте файл ~/.ssh/config:

nano ~/.ssh/config

Добавьте конфигурацию для сервера:

Host myserver
    HostName server_ip_or_domain
    User username
    IdentityFile ~/.ssh/id_ed25519
    Port 22  # измените, если используете нестандартный порт

3. Подключение к серверу

Теперь можно подключаться просто:

ssh myserver

Настройка подключения к GitHub

1. Копирование публичного ключа

Выведите содержимое публичного ключа:

cat ~/.ssh/id_ed25519.pub

2. Добавление ключа в GitHub

  1. Перейдите в GitHub → Settings → SSH and GPG keys
  2. Нажмите “New SSH key”
  3. Вставьте содержимое публичного ключа
  4. Сохраните

3. Тестирование подключения

ssh -T git@github.com

Должно появиться сообщение с вашим именем пользователя.

Настройка подключения к GitLab

1. Копирование публичного ключа

cat ~/.ssh/id_ed25519.pub

2. Добавление ключа в GitLab

  1. Перейдите в GitLab → Preferences → SSH Keys
  2. Вставьте содержимое публичного ключа
  3. Сохраните

3. Тестирование подключения

ssh -T git@gitlab.com

Настройка подключения к Gitea

1. Копирование публичного ключа

cat ~/.ssh/id_ed25519.pub

2. Добавление ключа в Gitea

  1. Перейдите в Gitea → Settings → SSH / GPG Keys
  2. Нажмите “Add Key”
  3. Вставьте содержимое публичного ключа
  4. Сохраните

3. Тестирование подключения

ssh -T git@gitea.example.com  # замените на ваш домен Gitea

Настройка подключения между серверами

1. Генерация отдельного ключа для сервера

На сервере-источнике:

ssh-keygen -t ed25519 -f ~/.ssh/server_to_server -C "server1_to_server2"

2. Копирование ключа на целевой сервер

ssh-copy-id -i ~/.ssh/server_to_server.pub username@target_server

3. Настройка SSH-конфигурации

На сервере-источнике в ~/.ssh/config:

Host targetserver
    HostName target_server_ip
    User username
    IdentityFile ~/.ssh/server_to_server

4. Проверка подключения

ssh targetserver

Безопасность и дополнительные настройки

1. Защита ключей

chmod 700 ~/.ssh
chmod 600 ~/.ssh/*

2. Использование ssh-agent

eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519

Для автоматического добавления при входе добавьте в ~/.bashrc или ~/.zshrc:

if [ -z "$SSH_AUTH_SOCK" ]; then
   eval "$(ssh-agent -s)"
   ssh-add ~/.ssh/id_ed25519 2>/dev/null
fi

3. Настройка двухфакторной аутентификации

Для серверов рекомендуется:

  • Отключить вход по парню
  • Использовать только SSH-ключи
  • Настроить Fail2Ban

В /etc/ssh/sshd_config:

PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no
PermitRootLogin no

4. Менеджер SSH-ключей (опционально)

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

sudo apt install keychain  # для Debian/Ubuntu

Добавьте в ~/.bashrc:

eval `keychain --eval --agents ssh id_ed25519`

Заключение

Вы успешно настроили SSH-ключи для:

  • Удаленных серверов
  • GitHub, GitLab и Gitea
  • Межсерверного взаимодействия

Дополнительные рекомендации:

  1. Регулярно обновляйте SSH-ключи (рекомендуется каждые 6-12 месяцев)
  2. Используйте разные ключи для разных сервисов
  3. Храните приватные ключи в безопасном месте
  4. Используйте менеджер паролей для хранения парольных фраз

15 - i3

Установка тайлингового оконного менеджера на Almalinux

Стандартная установка гласит:

dnf install i3

Но не все так просто!

Возникает ошибка на AlmaLinux

Ошибка возникает из-за того, что пакет i3 из репозитория EPEL требует perl(JSON::XS), который отсутствует в стандартных репозиториях AlmaLinux.

Решение:

  1. Установите perl-JSON-XS вручную
    Сначала попробуйте установить зависимость:

    dnf install perl-JSON-XS
    
  2. Если пакет не найден, включите дополнительные репозитории
    В AlmaLinux 9 (основанном на RHEL 9) perl-JSON-XS может быть в репозитории CRB (CodeReady Builder) или PowerTools. Включите его:

    dnf config-manager --set-enabled crb
    dnf install perl-JSON-XS
    
  3. Повторите установку i3
    После установки зависимости:

    dnf install i3
    
  4. Если проблема сохраняется, попробуйте --skip-broken

    dnf install i3 --skip-broken
    

    (но это нежелательно, так как может привести к нерабочему окружению).

  5. Альтернатива: сборка из исходников
    Если пакет недоступен, можно установить i3 вручную:

    dnf install @development-tools libxcb-devel xcb-util-keysyms-devel xcb-util-wm-devel libev-devel yajl-devel
    git clone https://github.com/i3/i3
    cd i3
    mkdir build && cd build
    meson ..
    ninja
    ninja install
    

Примечание:

  • Убедитесь, что EPEL активирован:
    dnf install epel-release
    dnf update