В Linux вы можете увидеть, какие типы файловых систем доступны в работающем ядре, в файле / proc / filesystems
. Содержимое этого файла создается ядром в реальном времени при чтении, поэтому оно отражает текущий статус. Формат этого файла немного раздражает: каждая строка содержит либо 8 пробелов, за которыми следует тип файловой системы, либо nodev
, за которыми следуют 3 пробела, за которыми следует тип файловой системы. Удалите первые 8 символов каждой строки, чтобы получить только доступные типы файловых систем, или используйте grep -w
(если вы не ищете тип файловой системы с именем nodev
) .
if grep -qw aufs /proc/filesystems; then
echo aufs is available
fi
Это не полная история, потому что драйвер файловой системы может быть доступен в виде модуля, который в данный момент не загружен. Предполагая, что вы можете загружать модули, если файловая система недоступна, попробуйте загрузить ее. Модули файловой системы имеют псевдоним вида fs- FSTYPE
(фактическое имя модуля часто является именем типа файловой системы, но не всегда).
if grep -qw aufs /proc/filesystems; then
echo aufs is available
elif modprobe fs-aufs; then
echo now aufs is available
fi
Это для файловых систем ядра. Для файловых систем FUSE проверьте, доступна ли файловая система fuse
, и найдите исполняемый файл, реализующий файловую систему. Хотя вы можете найти fuse
в / proc / filesystems
, он только говорит вам, доступен ли он, а не имеет ли ваша программа достаточно прав для его использования. На практике более надежным тестом является проверка, можете ли вы писать в / dev / fuse
.
if [ -w /dev/fuse ]; then
echo FUSE is available
if type unionfs-fuse >/dev/null 2>/dev/null; then
echo unionfs-fuse is available
fi
fi
Используйте date +%s
для получения метки времени UNIX, например 1524388823
. В отличие от даты, зависящей от локали, -удобочитаемой для человека даты, ее легче сравнивать в сценарии.
На машинах с правильной синхронизацией времени что-то вроде этого должно работать:
a=$(date +%s)
b=$(ssh user@remote date +%s)
c=$(date +%s)
if [ $a -le $b -a $b -le $c ]
then
echo Seems to be OK.
fi
(a)
— местное время до SSH, (b)
— удаленное время, (c)
— местное время после SSH. Если (a <= b <= c)
разумно предположить, что время синхронизировано. Это вообще не принимает во внимание задержку сети -проверьте дельту (a,c )для этого -, но все же это должно быть разумным. Предполагая, что SSH не будет запрашивать пароль и/или вы не будете тратить весь день на его ввод.
Если вы все еще хотите добавить к этому 5 секунд, используйте -5 и c+5. Конечно, это дает 5 секунд в любом направлении -и не считается 5-секундным окном для всех машин. Но если вы на самом деле не выполняете миссию в дальнем космосе, как предполагают ваши имена хостов, в первую очередь нет причин принимать такое огромное расхождение во времени.
Если вы используете NTP постоянно, а не раз в год, все машины должны быть идеально синхронизированы, несмотря ни на что, и большую часть времени мы просто слепо предполагаем, что это так, и даже не проверяем.