rm
будет запрашивать подтверждение для незаписываемых целей, если stdin - терминал. С другой стороны, флаг -i
включает подтверждение для всех целей. Очевидно, что ни то, ни другое не работает с простым решением, заключающимся в пересылке yes n
в rm
, поэтому мы должны использовать что-то другое.
Используя GNU find, удалите все объекты, у которых установлен хотя бы один из битов режима записи (как обычно, сначала для проверки используйте -print
вместо -delete
):
find dir/ -perm /0222 -delete
Или удалите все файлы(*), у которых установлен хотя бы один бит режима записи, но пропустите содержимое каталогов без возможности записи:
find . -type d ! -perm /0222 -prune -o ! -type d -perm /0222 -exec rm {} +
(* фактически все, кроме каталогов)
-delete
подразумевает поиск в глубину (по крайней мере, в GNU find), и не работает с -prune
, поэтому мы не можем использовать его здесь. После этого мы можем удалить пустые каталоги с возможностью записи:
find . -type d -perm /0222 -delete
Это приведет к ошибкам для непустых каталогов.
-perm /0222
означает "любой из битов записи установлен", и его инверсия ! -perm /0222
означает "ни один из битов записи не установлен".
В других версиях find используйте +0222
вместо /0222
. (Согласно manpage GNU, первый вариант противоречит требованиям POSIX и был устаревшим.)
Для поиска файлов и каталогов, не подлежащих записи, мы можем аналогично использовать
find . ! -perm /0222
Рекурсивное перечисление содержимого каталогов, не подлежащих записи, немного сложнее, но с помощью инструментов GNU это может сработать:
find . ! -perm /0222 -print0 | xargs -0 find
Пожалуйста, прочтите раздел Arch wiki выше.
Во-первых, вам нужно добавить хук encrypt
и lvm2
в mkinitcpio.conf, а затем запустить:
mkinitcpio -p linux
Во-вторых, нам нужно позволить grub расшифровать диск в продвижение процесса загрузки.
Ниже я процитировал детали из Arch wiki:
Чтобы разблокировать зашифрованный корневой раздел при загрузке, следующие параметры ядра должны быть установлены загрузчиком:
cryptdevice=UUID=device-UUID:lvm root=/dev/mapper/MyVol-root
The <device-UUID> refers to the UUID of /dev/sdaX
Вот как это работает: вы будете сначала нужно расшифровать диск в параметре ядра, чтобы вы могли загрузиться.