Есть ли быстрый и грязный способ сказать программно, в сценарии оболочки или в Perl, находится ли путь в удаленной файловой системе (nfs или тому подобное) или в локальной? Или это единственный способ сделать это, чтобы разобрать /etc/fstab и проверить тип файловой системы?
Как узнать, находится ли файл в удаленной файловой системе с помощью Perl?
Ответы (5)
stat -f -c %T <filename>
должен делать то, что вы хотите. Вам также может понадобиться -l
Вы можете использовать «df -T», чтобы получить тип файловой системы для каталога, или использовать параметр -t, чтобы ограничить отчеты определенными типами (например, nfs), и если он вернется с «файловые системы не обработаны», то это не один из тех, кого вы ищете.
df -T $dir | tail -1 | awk '{print $2;}'
Если вы используете df
в каталоге, чтобы получить информацию только об устройстве, в котором он находится, например. для текущего каталога:
df .
Затем вы можете просто проанализировать вывод, например.
df . | tail -1 | awk '{print $1}'
чтобы получить имя устройства.
Я протестировал следующие устройства на Solaris7,8,9 и 10, и они кажутся надежными.
/bin/df -g <filename> | tail -2 | head -1 | awk '{print $1}'
Должен дать вам тип fs, а не пытаться сопоставить «хост: путь» в вашей точке монтирования.
В некоторых системах номер устройства для файлов NFS отрицательный. Таким образом,
print "remote" if (stat($filename))[0] < 0