답변:
으로 스테판은 말한다 "것과 보편적 인 유닉스 대답이 없다."
내가 찾은 최고의 해결책은 다음과 같습니다.
df -P -T /my/path/to/folder | tail -n +2 | awk '{print $2}'
파일 시스템 유형을 반환합니다 (예 : nfs또는) ext3.
이 -T옵션 은 표준 이 아니므 로 다른 Unix / Linux 시스템에서는 작동하지 않을 수 있습니다 ...
아래 Gilles 의 의견 에 따르면 "이것은 내장되지 않은 Linux에서는 작동하지만 BusyBox, * BSD 등에서는 작동하지 않습니다."
/etc/mtab또는의 결과 mount를 사용하는 대신 df좀 더 많은 경우에 할 수있다.
/proc/mounts
mount도 아니고 /etc/mtab, /proc/mounts따라서 표준도 아니기 때문에 거기에 무엇이 있을지에 대한 보장이 없습니다 ...
-T다른 의미 를 가진 OSX 10.8에서는 작동하지 않습니다
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와드 로 돌아가고 싶지 않을 때 거의 항상 유용한 매우 다양한 명령 입니다.
stat이 없습니다 . 따라서이 솔루션은 매우 신뢰할 수 없습니다. %m--format
2010-08-27 <Aaron Burgemeister> stat: add %m to output the mount point for a file. 거의 3 년 전입니다. 데비안에 아직이 기능이 없다는 점이 놀랍습니다.
mount -l사용 grep, sed또는 awk해당 디렉토리를 참조 라인을 찾습니다.
/my/path/to/the/directory실제로 마운트 포인트에서 무언가를 알아내는 것이 복잡해 보입니다 /my/path. 어쩌면 당신은에 대한 좀 더 자세한 내용을 제공 할 수 있습니다 grep, sed, awk당신은 (완전한 답을) 제안 명령?
mount -l | grep 'type nfs' | sed 's/.* on \([^ ]*\) .*/\1/'시스템의 모든 nfs 마운트 지점 목록을 제공해야합니다.
mount | fgrep "`stat --printf=" on %m type" /var/log/`". The mount` 명령 과 결합하여 모든 마운트 포인트를 <device> on <mountpoint> type <type>형식으로 인쇄 합니다. 이것을 잡기 stat --printf위해 on <mountpoint> type파트를 생성했습니다 .
불행히도 이에 대한 보편적 인 유닉스 답변은 없습니다.
주어진 파일에 대해 할 수있는 한 가지는 /a/b/c/d경로를 걷는 것입니다.
... 및 변경 stat(2)될 때까지 각 수준에서을 수행하십시오 st_dev. 그러면 마운트 지점이 어디에 있는지 알게됩니다. 그런 다음 파일 시스템 유형을 찾기 위해 해당 마운트 지점의 정식 경로 를 찾 /etc/mtab거나 출력 mount할 수 있습니다. 그런 다음 원격 장치와 그렇지 않은 장치를 찾는 것은 특히 퓨즈 유형의 장치에 까다로울 수 있습니다. 예를 들어, nfs, cifs, fuse.sshfs, fuse.davfs분명하지만, 무엇에 대한 예를 들어 fuse.gvfs-fuse-daemon또는 fuse.avfsd그 모두 네트워크와 비 네트워크 파일이있을 수 있습니까?
stat(2)는 C 함수를 참조하고 있다고 생각하지만 쉘을 사용하고 있습니다. 그러나 st_dev메이저와 마이너 디바이스 ID로는 의미하며, 쉘 명령 (리눅스 특정?이다) stat(1)(비표준)가 %t와 %T로 --format각각 메이저와 마이너 번호에 대한 옵션, 하지만 항상 (로컬 및 NFS를 "0"을 반환 ). 데비안 스퀴즈와 레니를 사용해 보았습니다.
--file-system옵션의 유무에 관계없이 이것을 시도하고 있습니까?
--file-system있습니다.
df (1)에 대한 "-l"은 로컬이 아닌 파일 시스템에서 오류와 함께 실패하므로이 동작을 사용하여 파일 시스템이 원격인지 알 수 있습니다.
df -l /path 2> /dev/null | grep -q "File"
rc=$?
if [ "$rc" = "0" ]
then
echo "local mount, do stuff"
fi
df실패하는 이유 는 여러 가지가 있습니다. 그 이유 만으로도 이것이 좋은 대답이되지는 않지만, 질문에 대답하려고하므로 왜 "답이 아님"이라고 부르는지 알 수 없습니다.
개인적으로 사용하려고합니다 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'
mountpoint.이 경우 표준입니다.
find . -type d -name nfs -exec mountpoint {} \; | grep not
마운트 된 경우 'nfs'라는 모든 폴더를 확인합니다.
nfs.