폴더가 마운트 된 원격 파일 시스템인지 확인


43

주어진 폴더가 쉘 스크립트 내에서 마운트 된 원격 (nfs) 파일 시스템에 있는지 확인하는 가장 좋은 방법 (신뢰할 수있는 휴대용 등)은 무엇입니까?

다음과 같은 명령을 찾고 있습니다.

chk-remote-mountpoint /my/path/to/folder 

답변:


34

으로 스테판은 말한다 "것과 보편적 인 유닉스 대답이 없다."

내가 찾은 최고의 해결책은 다음과 같습니다.

df -P -T /my/path/to/folder | tail -n +2 | awk '{print $2}'

파일 시스템 유형을 반환합니다 (예 : nfs또는) ext3.

-T옵션 표준 이 아니므 로 다른 Unix / Linux 시스템에서는 작동하지 않을 수 있습니다 ...

아래 Gilles 의 의견 에 따르면 "이것은 내장되지 않은 Linux에서는 작동하지만 BusyBox, * BSD 등에서는 작동하지 않습니다."


1
이것은 내장되지 않은 Linux에서는 작동하지만 BusyBox, * BSD 등에서는 작동하지 않습니다. 이것이 충분한 지 결정하는 것은 사용자의 몫입니다.
Gilles 'SO- 악의를 멈춰라'

보기 /etc/mtab또는의 결과 mount를 사용하는 대신 df좀 더 많은 경우에 할 수있다.
TNW

1
@TNW 또는 심지어/proc/mounts
laebshade

1
분명히, 표준 mount도 아니고 /etc/mtab, /proc/mounts따라서 표준도 아니기 때문에 거기에 무엇이 있을지에 대한 보장이 없습니다 ...
Totor

1
이것은 -T다른 의미 를 가진 OSX 10.8에서는 작동하지 않습니다
DavAlPi

13

GNU를 사용할 수 있습니다 stat.

%m 마운트 포인트를 찾으십시오.

$ stat --format=%m /usr/src/linux
/usr/src

%T (파일 시스템 모드에서) 파일 시스템의 이름을 찾으십시오.

$ stat --file-system --format=%T /usr/src/linux
reiserfs

따라서 /usr/src/linux내 시스템에서 마운트되어 /usr/src있고 파일 시스템 유형이있는 파일 시스템 에 저장되어 있음을 알고 reiserfs있습니다.

자세한 내용은 참조하십시오 man stat. 파일에 대한 정보가 필요하고 grep | awk와드 로 돌아가고 싶지 않을 때 거의 항상 유용한 매우 다양한 명령 입니다.


내 버전에는 (utilutils 8.5, Debian Squeeze 사용) 옵션 stat이 없습니다 . 따라서이 솔루션은 매우 신뢰할 수 없습니다. %m--format
Totor

나는 그것을 믿지 않았지만 coreutils 8.5와 8.13 (debian wheezy) 사이의 차이점은 당신이 옳다고 말합니다. 나를 매우 놀라게 고려 :) 짜기가 너무 오래된 :( 잘못을 너무 안정
frostschutz

1
coreutils changelog에서 : 2010-08-27 <Aaron Burgemeister> stat: add %m to output the mount point for a file. 거의 3 년 전입니다. 데비안에 아직이 기능이 없다는 점이 놀랍습니다.
frostschutz

데비안 스퀴즈가 2011 년 2 월 6 일에 출시 되었지만 2010-08-06 에 동결 되어이 핵심 유틸리티가 변경되기 전에 ... 가능한 경우 가능한 "표준"솔루션을 찾고 있습니다.
Totor

이전 통계에서 작동하는 경우 파일 시스템 % T 명령을 사용할 수 있습니다. 그래도 작동하지 않고 통계 버전이 필요한 정보를 제공하지 않으면 어색한 솔루션으로 돌아갑니다.
frostschutz

4

mount -l사용 grep, sed또는 awk해당 디렉토리를 참조 라인을 찾습니다.


/my/path/to/the/directory실제로 마운트 포인트에서 무언가를 알아내는 것이 복잡해 보입니다 /my/path. 어쩌면 당신은에 대한 좀 더 자세한 내용을 제공 할 수 있습니다 grep, sed, awk당신은 (완전한 답을) 제안 명령?
Totor

mount -l | grep 'type nfs' | sed 's/.* on \([^ ]*\) .*/\1/'시스템의 모든 nfs 마운트 지점 목록을 제공해야합니다.
Andy Shulman

이것은 stat : mount | fgrep "`stat --printf=" on %m type" /var/log/`". The mount` 명령 과 결합하여 모든 마운트 포인트를 <device> on <mountpoint> type <type>형식으로 인쇄 합니다. 이것을 잡기 stat --printf위해 on <mountpoint> type파트를 생성했습니다 .
MSalters

많은 로컬 및 원격 파일 시스템 마운트 유형이 있습니다. 그들 모두의지도를 갖는 것은 어려울 수 있습니다. (예 : drvfs 로컬 또는 원격?)
Erik Aronesty

예, 그러나 질문은 구체적으로 nfs에 대해 묻습니다. "마운트 된 원격 (nfs) 파일 시스템"
jayhendren

2

불행히도 이에 대한 보편적 인 유닉스 답변은 없습니다.

주어진 파일에 대해 할 수있는 한 가지는 /a/b/c/d경로를 걷는 것입니다.

  • /알파벳/.
  • /알파벳/..
  • /알파벳/../..
  • ...

... 및 변경 stat(2)될 때까지 각 수준에서을 수행하십시오 st_dev. 그러면 마운트 지점이 어디에 있는지 알게됩니다. 그런 다음 파일 시스템 유형을 찾기 위해 해당 마운트 지점의 정식 경로 를 찾 /etc/mtab거나 출력 mount할 수 있습니다. 그런 다음 원격 장치와 그렇지 않은 장치를 찾는 것은 특히 퓨즈 유형의 장치에 까다로울 수 있습니다. 예를 들어, nfs, cifs, fuse.sshfs, fuse.davfs분명하지만, 무엇에 대한 예를 들어 fuse.gvfs-fuse-daemon또는 fuse.avfsd그 모두 네트워크와 비 네트워크 파일이있을 수 있습니까?


글쎄, 나는 여기에 nfs를 사용하고 있습니다 (내 질문을 편집했습니다). 에 관해서 stat(2)는 C 함수를 참조하고 있다고 생각하지만 쉘을 사용하고 있습니다. 그러나 st_dev메이저와 마이너 디바이스 ID로는 의미하며, 쉘 명령 (리눅스 특정?이다) stat(1)(비표준)가 %t%T--format각각 메이저와 마이너 번호에 대한 옵션, 하지만 항상 (로컬 및 NFS를 "0"을 반환 ). 데비안 스퀴즈와 레니를 사용해 보았습니다.
Totor

--file-system옵션의 유무에 관계없이 이것을 시도하고 있습니까?
frostschutz

@frostschutz없이. 와 함께 사용하면 또 다른 의미가 --file-system있습니다.
Totor

2

df (1)에 대한 "-l"은 로컬이 아닌 파일 시스템에서 오류와 함께 실패하므로이 동작을 사용하여 파일 시스템이 원격인지 알 수 있습니다.

df -l /path 2> /dev/null | grep -q "File"
rc=$?
if [ "$rc" = "0" ]
then
   echo "local mount, do stuff"
fi

그러나이 -l옵션은 표준아닙니다 .


답변이 아닙니다
Totor

@ 토토 왜 안돼? 물론 df실패하는 이유 는 여러 가지가 있습니다. 그 이유 만으로도 이것이 좋은 대답이되지는 않지만, 질문에 대답하려고하므로 왜 "답이 아님"이라고 부르는지 알 수 없습니다.
terdon

@terdon 동의합니다. 나는 충분히주의 깊게 읽지 않았습니다. 이것을 지적 해 주셔서 감사합니다. 편집하고 투표하겠습니다. :)
Totor

이것은 기본적으로 리눅스에서 안정적으로 작동하는 유일한 것입니다.
Erik Aronesty

1

df /path당신에게 말할 것이다 /path는 지점이 아닌 마운트 말한다 경우 마운트 지점입니다 /.


1
질문은 원격 마운트 지점을 나타냅니다 .
Totor

1

그냥 해

df /me/path/to/folder

첫 번째 필드 (파일 시스템)가 host : / path 형식이면 NFS임을 알 수 있습니다.


0

df -tLinux 및 df -TBSD 시스템에서 사용할 수 있습니다 .

에서 남자 DF :

-t, --type = TYPE

유형이 TYPE 인 파일 시스템으로 목록 제한

if df -t nfs | grep -q /path/to/folder$; then
  # it is an NFS
fi

꽤 좋은. 그러나 불행히도이 -t옵션은 POSIX / SUS에서 다른 의미를 갖 습니다. 따라서이 옵션을 사용하면 도구 / UNIX에서 다른 버전으로 일관성없는 결과를 제공 할 수 있습니다.
Totor

-2

개인적으로 사용하려고합니다 mountpoint(Linux에서 매우 이식 가능합니다!) :

NAME
       mountpoint - see if a directory is a mountpoint

SYNOPSIS
       mountpoint [-d|-q] directory

또는 showmount실제로 NFS공유 ( nfs-common패키지의 일부)를 마운트하는 모든 시스템에 설치해야 할 부분은 다음과 같습니다.

NAME
       showmount - show mount information for an NFS server

SYNOPSIS
       showmount [ -adehv ] [ --all ] [ --directories ] [ --exports ] [ --help ] [ --version ] [ host ]

다른 옵션은 다음과 같습니다.

$ mount -l -t nfs | grep 'my mount point'

1
mountpoint마운트 포인트가 원격 인 경우 유틸리티는 말하지 않습니다. 또한 원격 파일 시스템은 NFS 파일 시스템으로 제한되지 않습니다. 마지막으로 mountpoint표준이 아닙니다 ( 이 목록에 없음 ).
Totor

Linux 및 NFS에서 도구를 특별히 요청했습니다 mountpoint.이 경우 표준입니다.
malat

이것은 어쨌든 내 첫 번째 요점에 대답하지 않습니다.
Totor

-3
find . -type d -name nfs -exec mountpoint {} \; | grep not

마운트 된 경우 'nfs'라는 모든 폴더를 확인합니다.


OP는 (는) 이름의 폴더를 찾지 않습니다 nfs.
codeforester 2016
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.