Я ищу быстрый способ найти точку монтирования файловой системы, содержащей данный файл. Есть ли что-нибудь более простое или прямое, чем мое решение ниже?
df -h FILE |tail -1 | awk -F% '{print $NF}' | tr -d ' '
Аналогичный вопрос « Есть ли команда, чтобы увидеть, где смонтирован диск? » Использует узел устройства текущего диска в качестве входных данных, а не произвольный файл с диска ...
tr
звонком с помощьюawk -F'% '...
Ответы:
Вы могли бы сделать что-то вроде
или даже
Так как
awk
по умолчанию разделяются на пробелы, вам не нужно указывать,-F
и вам также не нужно обрезать пробелыtr
. Наконец, указав номер строки интереса (NR==2
), вы также можете покончить сtail
.источник
-P
права? Во всех случаях самое последнее поле, котороеawk
должно быть напечатано, должно быть диском.-P
вариант, который только что добавил Жиль.-P
. Тем не менее, я рекомендую всегда использовать,-P
когда вы анализируете выводdf
, это проще, чем проверять, безопасно ли это конкретное использование.mount | grep " on $(df -P ${FILE} | awk 'END{print $NF}') type" | awk '{print $1}'
В GNU / Linux, если у вас есть GNU
stat
из coreutils 8.6 или выше, вы можете сделать:В противном случае:
Ваш подход верен, но предполагает, что точка монтирования не содержит пробела,%, новой строки или других непечатаемых символов, вы можете немного упростить его с более новыми версиями GNU
df
(8.21 или выше):источник
df
не распознает--output
вариант.df
> = 8.21.Для Linux у нас есть findmnt из util-linux, специально созданный для этого
Обратите внимание, что какая-то произвольная точка монтирования может быть возвращена в случае, если есть несколько монтирований связывания. Использование
df
имеет ту же проблему.источник
Так как
stat
возвращает поле «Device», мне было любопытно посмотреть, как можно использовать базовыйstat()
библиотечный вызов для программного получения этой информации POSIX-совместимым способом.Этот фрагмент кода C:
Предоставит идентификаторы основных и вспомогательных устройств для устройства, содержащего файл, указанный в командной строке (
argv[1]
). К сожалению,major()
иminor()
не POSIX, хотя на странице руководства утверждается, что они «присутствуют во многих других системах», кроме GNU / linux.Затем вы можете получить соответствие между основным / второстепенным номером устройства и, например, узлом устройства
/proc/diskstats
, и сопоставить его с точками монтирования/proc/mounts
, иначе./etc/mtab
,Так что утилита командной строки сделать это будет довольно просто.
источник
/proc/diskstats
только для блочных устройств, вы пропустите NFS, proc, fuse ... По крайней мере, в Linux разные точки монтирования могут иметь одинаковые значения maj + minst_dev
может не обеспечить способ отличить один раздел NFS от другого. Тот, кто действительно хочет написать это, должен принять это во внимание;)Вот еще код C ++, если вы хотите сделать это из C ++ ...
Больше ссылок для программных способов
источник