Jak sprawdzić, czy partycja jest zamontowana jako „noexec”?

14

Obecnie używam grep '\s/location/\s.*noexec' /proc/mounts.
(Czy to dobry sposób na sprawdzenie tego?)

użytkownik
źródło
1
W porządku, o ile wystarczy pracować tylko na nowszych wersjach systemu Linux.
jordanm
1
Sprawdź to Q / A
dawud

Odpowiedzi:

13

Powinieneś użyć polecenia mount (8), które jest dostępne od razu we wszystkich systemach Linux i UNIX.

Jeśli uruchomić mountbez żadnych dodatkowych argumentów, będzie to lista wszystkich aktualnie zamontowane partycje w systemie, typ systemu plików oraz wszelkie opcje, takie jak montaż noexec, rwlub nosuid.

Na przykład:

% mount
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
/dev/sda1 on /boot type ext4 (rw,relatime,data=ordered)
/dev/mapper/basement-root on / type ext4 (rw,relatime,data=ordered)
zygis
źródło
5
W systemie Linux zalecam używanie /proc/mountszamiast mount. Jeśli /etc/mtabnie jest aktualizowany (np. Ponieważ /jest tylko do odczytu), dane wyjściowe mountmogą nie być aktualne. Ponadto, w przypadku niektórych opcji (nie noexec), mountdaje odfiltrowane dane wyjściowe, które mogą być mylące dla niektórych kombinacji wersji jądra i mounta (np. Z opcjami związanymi z atime).
Gilles „SO- przestań być zły”
Aby znaleźć partycję, na której montowany jest plik lub katalog - df -P plik / idzie / tutaj | ogon -1 | cut -d '' -f 1
brainLoop
4

Zakładając, że używasz tego w systemie Linux, tak, w porządku. Nieco bardziej niezawodne byłoby sprawdzenie, czy noexecjest to między przecinkami, czy na początku lub na końcu jego kolumny.

grep -Eq '^[^ ]+ /location [^ ]+ ([^ ]*,)?noexec[, ]' /proc/mounts

W awk może to być wyraźniejsze:

awk -v location="/location" '$2 == location {exit(!($4 ~ /(^|,)noexec($|,)/))} END {exit(2)}'
Gilles „SO- przestań być zły”
źródło