Да, и это, вероятно, самый быстрый и простой способ, если все, что вас интересует, это mdadm
программный рейд (, а не lvm
или btrfs
и т. д. )-, но имена рейдовых устройств произвольны (, так что вы не можете просто предположить, что они будут соответствовать^md[0-9]+
-большинство из них, но они не обязаны, и стандарт/стандарт по умолчанию может измениться в будущем ).
Кстати, вот парсер python /proc/mdstat
:https://github.com/truveris/py-mdstat/(, который включает в себя mdjson
инструмент для печати /proc/mdstat
в формате json)
Это был только первый, который я нашел в Google, наверняка есть и другие для perl
, awk
и других языков.
А вот очень быстрый -и -грязный awk
один -лайнер, который определяет наличие каких-либо рейд-устройств (, предполагая, что если второе поле любой строки ввода после первой строки двоеточие :
, то это указывает на рейд-устройство):
awk 'NR > 1 && $2 == ":" {found++}; END {exit !found}' /proc/mdstat
Завершается с true (0 ), если найдено одно или несколько устройств, иначе false.
Personalities
просто перечисляет типы mdadm
рейдов, поддерживаемые ядром. Это не указывает на то, что ЛЮБОЙ из них активно используется, просто в ядре есть необходимый драйвер, скомпилированный в (или загруженный модуль )
Конечно, почему бы и нет. Если они не делают ничего полезного, нет необходимости их запускать или даже устанавливать.
Вот любопытный момент, который я обнаружил в комментарии в другой ветке SE:вы можете просто использовать printf
со строкой формата%o
(восьмеричной ).
Рабочий пример:
# figure out stat(1) flags based on OS
if [[ $(uname -s) == Linux ]]; then PERMS='-c %a' else PERMS='-f %Lp'; fi
stat $PERMS ~/.my.cnf
# result: 600 (not group/world readable)
# permission bits if group/world readable
bitmask=044
perm=$(stat $PERMS ~/.my.cnf)
printf "%o\n" $(( 0$perm & 0$bitmask ))
# result: 0
# now make the file group-readable and try again
chmod 640 ~/.my.cnf
perm=$(stat $PERMS ~/.my.cnf)
printf "%o\n" $(( 0$perm & 0$bitmask ))
# result: 40
Если я не хочу видеть биты прав доступа в восьмеричном формате, я могу достичь своей первоначальной цели, вообще не используя printf
. Если меня волнует только то, были ли установлены какие-либо биты в bitmask
, достаточно просто проверить, не равен ли результат -нулю:
if (( 0$perm & 0$bitmask )); then
echo "Permissions $perm are too lax." >&2
fi
Если вы хотите узнать, были ли установлены все биты в bitmask
, сравните результат их объединения И с битовой маской, примерно так:
(( (0777 & 0066) == 0066 )) && echo "Oh noes, group AND world writable! "