Linux
Linux — это семейство операционных систем, работающих на основе одноименного ядра.
LINUX
Linux — это семейство операционных систем (ОС), работающих на основе одноименного ядра.
Линус Торвальдс — первый разработчик и создатель Linux. Именно в честь него и была названа ОС. В 1991 году Линус начал работу над собственной ОС семейства Unix.
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 |
Не создавать выходной файл, если его нет. |
Примеры комбинаций
-
Копирование диска с игнорированием ошибок и синхронизацией блоков:
dd if=/dev/sda of=backup.img bs=1M conv=noerror,sync status=progress
- Продолжает копирование при ошибках, дополняя неполные блоки нулями.
-
Дозапись в файл без его обрезки:
dd if=data.bin of=output.bin bs=1M conv=notrunc
-
Копирование с гарантированной записью на диск:
dd if=source.iso of=/dev/sdb bs=4M conv=fsync
- Комбинация
noerror,sync
часто используется при копировании повреждённых дисков.
- Если нужно создать точную копию с возможными ошибками, лучше использовать
ddrescue
(из пакета gddrescue
), так как он более эффективен при восстановлении данных.
2. df
– Информация о свободном месте на дисках
Основное использование:
df [опции] [файл/устройство]
Примеры:
- Показать место в человеко-читаемом формате:
- Показать только определённую файловую систему:
- Показать тип файловой системы:
Опции:
-h
– человеко-читаемый формат (KB, MB, GB).
-T
– показать тип файловой системы.
-i
– показать использование inodes.
3. du
– Анализ использования диска файлами и папками
Основное использование:
Примеры:
- Проверить размер папки:
- Показать размер всех подпапок:
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
Примеры:
- Анализ текущей папки:
- Анализ всей системы (требует root):
Управление в ncdu
:
↑/↓
– навигация.
Enter
– войти в папку.
d
– удалить файл/папку.
q
– выход.
5. lsblk
– Список блочных устройств (диски, разделы)
Основное использование:
Примеры:
- Показать все устройства в дереве:
- Показать UUID и файловую систему:
- Показать размеры в человеко-читаемом формате:
lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT -e7
Опции:
-f
– показать файловые системы.
-o
– выбрать поля для вывода.
-e7
– исключить loop-устройства.
6. lsusb
– Список USB-устройств
Основное использование:
Примеры:
- Показать все USB-устройства:
- Подробный вывод:
Опции:
-v
– подробная информация.
-t
– вывод в виде дерева.
7. lspci
– Список PCI-устройств
Основное использование:
Примеры:
- Показать все устройства:
- Подробно о видеокарте:
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 {} \;
Здесь:
find
ищет все файлы в /home
, принадлежащие olduser
.
- Для каждого файла выполняется
chown newuser filename
.
{}
подставляется как имя файла, а \;
указывает на конец команды.
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
– Поиск файлов и выполнение действий
🔍 Базовый поиск
- Найти файлы по имени (регистронезависимо):
find /path -iname "*.txt"
- Найти файлы, изменённые за последние 7 дней:
- Найти файлы размером >100 МБ:
- Найти пустые файлы и директории:
- Найти файлы с правами 755:
⚡ Действия с найденными файлами
- Удалить все
.tmp
-файлы:
find /path -name "*.tmp" -delete
- Изменить владельца файлов:
find /path -user olduser -exec chown newuser {} \;
- Архивировать все
.log
-файлы:
find /var/log -name "*.log" -exec tar -czvf logs.tar.gz {} +
- Найти и заменить права:
find /path -type f -exec chmod 644 {} \;
- Найти файлы и вывести их размер:
find /path -type f -exec du -h {} \;
2. sed
– Потоковый редактор (поиск и замена текста)
🔧 Базовые замены
- Заменить первое вхождение в строке:
echo "Hello World" | sed 's/World/Linux/'
- Заменить все вхождения:
echo "a b a b" | sed 's/a/c/g'
- Удалить строки, содержащие
error
:
- Удалить пустые строки:
- Заменить только в строках, содержащих
debug
:
sed '/debug/s/old/new/' file.txt
📂 Работа с файлами
- Заменить в файле на месте (с бэкапом):
sed -i.bak 's/old/new/g' file.txt
- Удалить строки с 5 по 10:
- Вывести только строки с 20 по 30:
- Добавить текст в начало файла:
sed -i '1i New Header' file.txt
- Добавить текст в конец файла:
sed -i '$a Footer Text' file.txt
3. grep
/ugrep
– Поиск текста в файлах
🔎 Базовый поиск
- Найти слово в файле (регистронезависимо):
grep -i "pattern" file.txt
- Найти точное совпадение (целое слово):
- Вывести только совпадающую часть:
grep -o "pattern" file.txt
- Найти строки, НЕ содержащие шаблон:
grep -v "exclude" file.txt
- Подсчитать количество совпадений:
grep -c "pattern" file.txt
📂 Рекурсивный поиск
- Искать в всех файлах директории:
- Искать только в
.php
-файлах:
grep -r --include="*.php" "pattern" /path/
- Искать в файлах без
.log
:
grep -r --exclude="*.log" "pattern" /path/
- Искать в скрытых файлах:
grep -r --hidden "pattern" /path/
- Искать в файлах изменённых за последние 2 дня:
find /path -mtime -2 -type f -exec grep -l "pattern" {} \;
🚀 ugrep
– Улучшенный grep
- Поиск с подсветкой и нумерацией строк:
ugrep -n --color=auto "pattern" file.txt
- Поиск с контекстом (строки до/после):
ugrep -C 3 "pattern" file.txt # 3 строки вокруг
- Поиск с инвертированным контекстом:
ugrep -v -C 2 "pattern" file.txt
- Поиск сжатых файлов (
.gz
, .zip
):
ugrep -z "pattern" archive.gz
- Поиск с регулярными выражениями:
ugrep -P "\d{3}-\d{2}-\d{4}" file.txt # Поиск SSN
4. Комбинации команд (find
+ grep
+ sed
)
🔗 Поиск + обработка
- Найти все
.conf
-файлы и заменить http
на https
:
find /etc -name "*.conf" -exec sed -i 's/http/https/g' {} \;
- Найти файлы, содержащие
password
, и вывести их имена:
find /path -type f -exec grep -l "password" {} \;
- Удалить все строки с
# TODO
из .py
-файлов:
find . -name "*.py" -exec sed -i '/# TODO/d' {} \;
📊 Анализ логов
- Найти ошибки в логах за последний час:
grep "ERROR" /var/log/syslog | grep "$(date -d '1 hour ago' '+%b %d %H')"
- Посчитать уникальные IP в Nginx-логе:
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr
📂 Массовая обработка файлов
- Переименовать все
.jpg
→ .png
:
find . -name "*.jpg" | sed 's/\.jpg$//' | xargs -I {} mv {}.jpg {}.png
- Удалить BOM из UTF-8 файлов:
find . -type f -exec sed -i '1s/^\xEF\xBB\xBF//' {} \;
- Удалить все пробелы в конце строк:
find . -type f -exec sed -i 's/[[:space:]]*$//' {} \;
🔒 Безопасность
- Найти файлы с SUID/SGID:
find / -type f \( -perm -4000 -o -perm -2000 \) -exec ls -la {} \;
- Найти открытые порты и процессы:
netstat -tulnp | grep -E '0.0.0.0|:::'
📜 Разное
- Извлечь все email из файла:
grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b" file.txt
- Заменить
CRLF
→ LF
(Windows → Unix):
sed -i 's/\r$//' file.txt
- Удалить HTML-теги из файла:
sed 's/<[^>]*>//g' file.html
- Найти дубликаты файлов по содержимому:
find . -type f -exec md5sum {} + | sort | uniq -w32 -dD
- Случайная строка из файла:
Итоговая таблица
Задача |
Команда |
Поиск файлов |
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 использует гибридную криптосистему, сочетающую в себе симметричное и асимметричное шифрование, что делает его одновременно эффективным и безопасным.
Ключевые концепции: как это работает
- Асимметричное шифрование (Криптография с открытым ключом):
- У каждого пользователя есть пара ключей:
- Закрытый ключ (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
-
Цифровая подпись:
- Позволяет получателю убедиться в двух вещах:
- Аутентичность: Сообщение действительно отправлено вами.
- Целостность: Сообщение не было изменено во время передачи.
- Как создается: Вы создаете хэш (отпечаток) вашего сообщения и шифруете этот хэш своим закрытым ключом. Получатель расшифровывает хэш вашим открытым ключом, вычисляет хэш полученного сообщения самостоятельно и сравнивает их. Если они совпали — подпись верна.
-
Гибридная система:
- Шифровать большие объемы данных (например, длинное письмо) асимметричным шифрованием computationally expensive (требует много вычислительных ресурсов).
- Решение PGP:
- Программа создает случайный сеансовый ключ (симметричный, один и тот же для шифрования и расшифровки).
- Этим сеансовым ключом шифруется само сообщение (быстро и эффективно).
- Этот сеансовый ключ сам шифруется открытым ключом получателя.
- Зашифрованное сообщение и зашифрованный сеансовый ключ отправляются получателю.
- Получатель:
- Своим закрытым ключом расшифровывает сеансовый ключ.
- Расшифрованным сеансовым ключом расшифровывает всё сообщение.
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: Генерация пары ключей
- Установите, например, Gpg4win или GPG Suite.
- Запустите менеджер ключей (Kleopatra или другой).
- Нажмите «Создать новую пару ключей» («New Key Pair»).
- Введите свои данные:
- Имя и Email: Это идентифицирует ваш ключ. Указывайте реальный email, на который планируете получать зашифрованные письма.
- Парольная фраза (Passphrase): Это ОЧЕНЬ ВАЖНО. Парольная фраза защищает ваш закрытый ключ на диске. Она должна быть длинной и сложной (например, 4-5 случайных слов). Без нее даже кража вашего закрытого ключа будет бесполезна.
- Дождитесь завершения генерации. Процесс может занять несколько минут, так как программа собирает энтропию (случайные данные) от ваших действий с мышкой и клавиатурой.
Шаг 3: Обмен открытыми ключами
Чтобы кто-то мог отправить вам зашифрованное сообщение, ему нужен ваш открытый ключ.
- Экспорт: В вашем менеджере ключей (Kleopatra) вы можете экспортировать открытый ключ в файл (обычно с расширением
.asc
или .pub
). Этот файл представляет собой блок текста между строками -----BEGIN PGP PUBLIC KEY BLOCK-----
и -----END PGP PUBLIC KEY BLOCK-----
.
- Способы распространения:
- Отправить по email: Просто прикрепите файл
.asc
к письму.
- Скопировать текст: Скопируйте текстовый блок и вставьте его в тело письма.
- Ключевые серверы (Keyservers): Это специальные публичные базы данных открытых ключей. Вы можете «залить» (upload) свой ключ на сервер (например,
keys.openpgp.org
). Тогда любой человек, зная ваш email, сможет его найти. (Важно: удалить ключ с ключевого сервера обычно невозможно!)
Шаг 4: Импорт и проверка чужих открытых ключей
Чтобы отправить сообщение кому-то, вам нужен их открытый ключ.
- Импорт: Получите файл ключа или текстовый блок. В вашем менеджере ключей будет функция «Импорт» («Import»), где вы можете указать файл или вставить текст.
- Верификация (Крайне важный шаг!): Как убедиться, что импортированный ключ действительно принадлежит тому, кто вам его прислал, а не злоумышленнику (атака “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) автоматически распознает его.
- Он проверит, есть ли у вас в связке закрытый ключ, соответствующий адресу получателя.
- Если есть, он запросит у вас парольную фразу для доступа к этому закрытому ключу и автоматически расшифрует сообщение.
- Если письмо было подписано, плагин также покажет результат проверки подписи (например, зеленую галочку и текст “Проверенная подпись от Имя Отправителя”).
Сценарии применения
- Конфиденциальная переписка: Самая частая цель. Защита содержимого писем от прочтения провайдерами, хакерами, правительственными агентствами.
- Защита целостности данных: Отправка важных документов (договоров, инструкций) с подписью, чтобы получатель мог быть уверен, что их не подменили.
- Шифрование файлов на диске: Можно зашифровать чувствительные файлы на своем компьютере или на флеш-накопителе, чтобы даже в случае утери устройства данные были защищены.
- Анонимность в 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
.
Как это работает вместе?
- Когда вы выполняете
gpg --list-keys
, программа читает список открытых ключей из pubring.kbx
.
- Когда вы проверяете подпись,
gpg
сверяется с trustdb.gpg
, чтобы узнать, насколько ключ, которым подписан файл, валиден с точки зрения вашей сети доверия.
- Когда вы подписываете или расшифровываете что-либо,
gpg
обращается к gpg-agent
.
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, вы можете запустить агент с помощью:
Если вы хотите вручную завершить текущий работающий агент, вы можете сделать это безопасно с помощью:
Вы всегда должны добавить следующие строки в ваш .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>
-
По частичному совпадению с адресом электронной почты. Это указывается префиксом строки поиска символом @. Это использует поиск подстроки, но учитывает только адрес электронной почты (т.е. внутри угловых скобок).
-
По точному совпадению с 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 + “-”) – перейти на номер строки
Выход и сохранение
^X
→ если есть изменения, нажмите:
Y
– сохранить, N
– не сохранять, Ctrl+C
– отмена.
- Если сохраняете (
Y
), введите имя файла и нажмите Enter.
Подсказка: Внизу экрана всегда отображаются основные комбинации. Для более продвинутых функций (например, подсветки синтаксиса) может потребоваться конфигурационный файл ~/.nanorc
.
4 - Шпаргалка по основным командам Vim
Шпаргалка по основным командам Vim для быстрого редактирования простых файлов
Режимы в Vim
- Нормальный режим (командный) —
Esc
(используется для навигации и команд)
- Режим вставки —
i
, a
, o
(для редактирования текста)
- Визуальный режим (выделение) —
v
, V
, Ctrl+v
- Командная строка —
:
(для сложных команд, например сохранения)
Основные команды (в нормальном режиме)
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 файл
— разделить окно горизонтально/вертикально
Примеры использования
-
Редактирование конфига
vim /etc/nginx/nginx.conf
- Нажать
i
для редактирования
- Нажать
Esc
, затем :wq
для сохранения и выхода
-
Поиск и замена
- Ввести
:%s/old/new/g
для замены всех “old” на “new”
-
Копирование строк
- Навести курсор на строку →
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?
-
Зеркалирование экрана Android
- Показывает экран телефона/планшета на ПК с низкой задержкой (до 60 FPS).
- Полезно для стриминга, записи экрана или демонстрации.
-
Управление Android с ПК
- Можно кликать мышкой, печатать с клавиатуры.
- Поддержка мультитача (если устройство поддерживает HID).
-
Передача файлов
- Drag & Drop файлов между ПК и Android (
scrcpy --push-target /sdcard/
).
-
Запись экрана
- Сохранение видео без потери качества:
scrcpy --record screen.mp4
-
Беспроводное подключение (Wi-Fi)
- После подключения по USB можно переключиться на Wi-Fi:
scrcpy --tcpip=192.168.1.100 # вместо USB
-
Экономия заряда
- Если экран телефона выключен, но управление работает (
scrcpy --turn-screen-off
).
-
Разработка и отладка
- Удобен для тестирования приложений без эмулятора.
Как установить 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 состоит из двух частей:
- Расписание:
0 3 * * 0
- Команда:
/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
Особенности:
- При редактировании через
crontab -e
не нужно указывать пользователя - задача будет выполняться от имени текущего пользователя
- В системных файлах (/etc/crontab) требуется указать пользователя:
0 3 * * 0 root /usr/bin/docker system prune -af...
- Для 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. Узнать текущее ядро
2. Список установленных ядер
3. Удалить ядро
sudo mhwd-kernel -r <kernel-name>
<kernel-name>
— имя ядра, которое вы хотите удалить (например, linux515
).
4. Обновить конфигурацию bootloader
или
sudo grub-mkconfig -o /boot/grub/grub.cfg
5. Установить новое ядро
sudo mhwd-kernel -i <kernel-name>
<kernel-name>
— имя ядра, которое вы хотите установить (например, linux519
).
6. Переключиться на другое ядро
- Установите новое ядро:
sudo mhwd-kernel -i <kernel-name>
- Перезагрузите систему:
sudo reboot
- В меню bootloader выберите новое ядро.
7. Проверка текущего ядра
8. Ручное удаление ядра (не рекомендуется)
sudo pacman -Rdd <package-name>
<package-name>
— имя пакета ядра, которое вы хотите удалить (например, linux515
).
Внимание: Будьте осторожны при удалении ядер, особенно если вы не уверены, какое ядро активно используется.
8 - Find and Sed
Примеры использования поисковых запросов POSIX c SED FIND GREP
Потоковый редактор SED. В комбинации с UG и FIND. Примеры использования для практического применения.
Замена текста в множестве файлов с множеством вложенных директорий
Вариант с использованием 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' *
А теперь с толкованием по шагам:
find .
- точка говорит что ищем в текущей директории
-type f
- говорит что будем искать имена файлов -type d
имена директорий
-name "*.md"
- говорит что GLOB паттерн файлов с расширением md
|
принимаем на вход поток имен файлов от find
xargs
- запустит приложение и передаст ему на вход имя файла
sed -Ei
- запустим потоковый редактор SED с расширенным функционалом POSIX (-E) и править будем прямо в самих файлах (i)
's/bx-apps/bx_apps/g'
- regex строка замены слова bx-apps
на bx_apps
с ключом g
, т.е. глобально.
А теперь проверим, что получилось:
ug -r
- это просто grep
только удобный и продвинутый, -r
значит от сюда и рекурсивно по всем директориям
-g'*.md'
- это glob поиск по файлам с расширением *.md
'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'
Без повторений рассмотрим только изменения:
sed -En
- не будет изменять файл, а только выведет строки в которых встретит искомую строку
'/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' *
Объяснения:
ug -r -g'*.md' 'bx-apps'
- уже знакомая строка, выведет все файлы и строки с искомой строкой
ug -r --format='%f' -g'*.md'
- новое значение --format='%f'
- это формат вывода данных, где:
%f
- путь и имя файла
%n
- номер строки в файле
%O
- контекст, с найденным словом
%~
- перевод строки
А также, наверно, существует еще 1000 вариантов как это сделать, но я в своих заметках пишу то, чем можно всегда быстро и удобно воспользоваться.
9 - Управление пакетами PACMAN
ARCH, MANJARO для управления пакетами, загрузка, удаление, обновление.
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
Установка 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
В конце команды -exec
обязательно поставить {}
— результат выборки и в самом конце \;
чтобы команда выполнилась над файлом 1 раз, если использовать +
то в grep
, будут переданы несколько файлов.
╭─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
и выполняет свою команду.
XARGS работает в разы быстрее EXEC
Операторы 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 в сочетании с регулярными выражениями и другими командами оболочки, становится супер инструментом.
Этот раздел посвящен простому слову в команде exptession
find [path] -regex [regular_expression]
Будет выполнен поиск по указанному пути и возвращен список файлов, удовлетворяющих условию.
Шаблон 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
Для поиска через FIND всегда результат будет начинаться с ./, а это значит что в регулярном выражении мы должны поставить ./ - т.е экранировать точку и косую черту
Команда -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 была написана Паулем Фалстадом, когда он был студентом Принстонского университета в 1990 году. Название оболочки произошло от учетной записи “zsh” университетского ассистента Пауля по имени Чжун Шао. В настоящее время проект развивается энтузиастами под руководством Питера Стефенсона в рамках свободно распространяемого ПО.
ZSH является расширенным аналогом BASH и имеет с ним обратную совместимость, добавляя ему большое количество улучшений.
Установка по умолчанию ZSH
Проверить текущую оболочку
Проверить какие оболочки установлены
Установить по умолчанию zsh:
Если не установлен, то в Manjaro выполнить
если скрипт не запустился, то
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
j foo
— быстро переходит в директорию, в которой уже переходили по cd
jc bar
— переходит в дочернюю диреторию не набирая cd
jo music
— откроет директорию в стандартном файловом менеджере
jco images
— откроет дочернюю диреторию в стандартном файловом менеджере
bundler
copyfile
Копирует содержимое файла в буфер обмена, чтобы потом вставить в другое место.
copybuffer
Копирует тукущую команду в строке в буфер обмена, чтобы потом вставить в другое место.
или горячая клавиша C-o
copypath
Копирует текущую дирректорию в буфер обмена, чтобы потом вставить в другое место.
cpv (модуль cp)
Копирует файлы или директории с сохранением Backup, прав доступа и показывает прогресс. Использует функцию rcync
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
Создает несколько мощных ALIASES для работы с emacs
emacs
— открывает редактор с файлом
e
— аналогично emacs
te
— открывает клиента emacs в терминале
eeval
— выполняет команду M-x eval
не открывая Emacs
eframe
— откроет новый frame emacs
efile
— печатает текущий путь файла в буфер
ecd
— печатает тукущую директорию в буфер
Теперь, чтобы открыть этот файл мне нужно набрать:
j hb3
e content/docs/linux/zsh/index/md
и я продолжаю работать. Но это еще не все.
ecode64
Создает текст и файлы в формате base64
Нужно для отправки картинок по почте, вставки на сайты в код и т.д. Иногда пользуюсь, поэтому поставил.
Функция |
Алиас |
Описание |
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
Это целая фабрика ALIASES для 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
Работает из терминала с программой PASS
Требует отдельной статьи, т.к. очень серьезная программа для хранения паролей.
qrcode
Генерит QRcode в TXT и SVG
Передаем текст в сервис “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 - это неинтерактивный строчный редактор. Он принимает текст либо с устройства stdin, либо из текстового файла, выполняет некоторые операции над строками и затем выводит результат на устройство stdout или в файл. Как правило, в сценариях, 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
Дальше работаю с этим файлом
ключ 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
скрипт
-
/что искать/
— просто пишем регулярное выражение, что будем искать.
-
G
— пустая строка.
Добавить пустые строки во всем файле:
sed G sed.txt
- вставить 2 пустые строки
G;G
знак ;
перечисляет команды в скрипте
sed '/^$/d;G' sed.txt
- удалит все пустые строки и вставит пустые после каждой строки
выполним команду:
sed '/script/{x;p;x;}' sed.txt
- вставит пустые строки над каждой где есть слово script
выполним команду:
sed '/script/G' sed.txt
- Выполнить нумерацию строк
=
выполняет нумерацию
sed = sed.txt | sed 'N;s/\n/\t/'
- Вывести все строки, содержащие шаблон, включая следующие за каждой из них x строк:
Синтаксис: sed -n '/pattern/,+xp' filename
Пример: sed -n '/learn/,+2p' a.txt
- Замена шаблона другим шаблоном, за исключением строки n:
Синтаксис: sed 'n!s/old_pattern/new_pattern/' filename
Пример: sed -i '5!s/life/love/' a.txt
- n
— отключает печать образца
если не поставить, то выведет весь файл, а если поставить, то только результат выполненной работы
для
- e
— параметр редактировать файл
14 - SSH на все случаи жизни
Полное руководство по настройке SSH-ключей и подключений
Содержание
- Генерация SSH-ключей
- Настройка подключения к удаленному серверу
- Настройка подключения к GitHub
- Настройка подключения к GitLab
- Настройка подключения к Gitea
- Настройка подключения между серверами
- Безопасность и дополнительные настройки
Генерация 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
:
Добавьте конфигурацию для сервера:
Host myserver
HostName server_ip_or_domain
User username
IdentityFile ~/.ssh/id_ed25519
Port 22 # измените, если используете нестандартный порт
3. Подключение к серверу
Теперь можно подключаться просто:
Настройка подключения к GitHub
1. Копирование публичного ключа
Выведите содержимое публичного ключа:
cat ~/.ssh/id_ed25519.pub
2. Добавление ключа в GitHub
- Перейдите в GitHub → Settings → SSH and GPG keys
- Нажмите “New SSH key”
- Вставьте содержимое публичного ключа
- Сохраните
3. Тестирование подключения
Должно появиться сообщение с вашим именем пользователя.
Настройка подключения к GitLab
1. Копирование публичного ключа
cat ~/.ssh/id_ed25519.pub
2. Добавление ключа в GitLab
- Перейдите в GitLab → Preferences → SSH Keys
- Вставьте содержимое публичного ключа
- Сохраните
3. Тестирование подключения
Настройка подключения к Gitea
1. Копирование публичного ключа
cat ~/.ssh/id_ed25519.pub
2. Добавление ключа в Gitea
- Перейдите в Gitea → Settings → SSH / GPG Keys
- Нажмите “Add Key”
- Вставьте содержимое публичного ключа
- Сохраните
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. Проверка подключения
Безопасность и дополнительные настройки
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
- Межсерверного взаимодействия
Дополнительные рекомендации:
- Регулярно обновляйте SSH-ключи (рекомендуется каждые 6-12 месяцев)
- Используйте разные ключи для разных сервисов
- Храните приватные ключи в безопасном месте
- Используйте менеджер паролей для хранения парольных фраз
15 - i3
Установка тайлингового оконного менеджера на Almalinux
Стандартная установка гласит:
Но не все так просто!
Возникает ошибка на AlmaLinux
Ошибка возникает из-за того, что пакет i3
из репозитория EPEL требует perl(JSON::XS)
, который отсутствует в стандартных репозиториях AlmaLinux.
Решение:
-
Установите perl-JSON-XS
вручную
Сначала попробуйте установить зависимость:
-
Если пакет не найден, включите дополнительные репозитории
В AlmaLinux 9 (основанном на RHEL 9) perl-JSON-XS
может быть в репозитории CRB (CodeReady Builder) или PowerTools. Включите его:
dnf config-manager --set-enabled crb
dnf install perl-JSON-XS
-
Повторите установку i3
После установки зависимости:
-
Если проблема сохраняется, попробуйте --skip-broken
dnf install i3 --skip-broken
(но это нежелательно, так как может привести к нерабочему окружению).
-
Альтернатива: сборка из исходников
Если пакет недоступен, можно установить 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