Рядом с определением DFID
вы видите определение PFID()
, которое печатает поля f_seq
, f_oid
и f_ver
FID. FID никогда не -используются в Lustre.
f_seq
— это 64 -битовая последовательность (SEQ )номер. Это указывает, на каком MDT (или в конфигурациях DNE, на каком OST )находится диапазон инодов (или объектов ). Каждый MDT получает диапазон порядковых номеров, затем выделяет их (по одному )клиентам, и клиенты могут создавать новые файлы с этим порядковым номером.
f_oid
— 32-битный идентификатор объекта -(OID ). Это указывает на объект в диапазоне SEQ, который выделяется клиентом всякий раз, когда создается новый файл. Для конфигураций DNE MDS выделяет OID для номеров SEQ, назначенных каждому OST.
f_ver
— зарезервированное 32-битное -поле версии (VER ). Это предназначено для использования снимками/наборами данных для различения объектов, которые в противном случае имеют одинаковый SEQ/OID. Это поле также используется для объектов OST для хранения индекса чередования LOV для файла в xattr fid
, так что макет LOV может быть восстановлен из объектов OST, если макет MDT поврежден.
См.https://www.eofs.eu/_media/events/elw11/08_johann_lombardi_hands_on_lustre_2.x.pdfдля более полного описания FID.
Чтобы проверить, являются ли все аргументы файлами, проще проверить, является ли один из аргументов не файлом:
for argument do
if [ ! -f "$argument" ]; then
printf 'Not a file: %s\n' "$argument" >&2
exit 1
fi
done
echo 'All arguments are files'
Это перебирает все позиционные параметры и проверяет каждый из них по очереди. Если найден файл, отличный от -, печатается ошибка и выполнение кода завершается.
Исследовать все аргументы:
for argument do
if [ -f "$argument" ]; then
printf 'Is a file: %s\n' "$argument"
else
printf 'Is not a file: %s\n' "$argument"
fi
done
Это перебирает все позиционные параметры и проверяет каждый из них по очереди, печатая результат теста.
Обратите внимание, что "является файлом" на самом деле означает "является обычным файлом или символической ссылкой на обычный файл". Если вы хотите убедиться, что это не символическая ссылка на обычный файл, используйте
if [ ! -f "$argument" ] || [ -L "$argument" ]; then
как тест в первом цикле или
if [ -f "$argument" ] && [ ! -L "$argument" ]; then
как тест во втором цикле.
Первую строку цикла также можно записать
for argument in "$@"; do
... но люди, как правило, забывают ставить двойные кавычки $@
, и в любом случае цикл вверху становится короче.