답변:
으로 스테판은 말한다 "것과 보편적 인 유닉스 대답이 없다."
내가 찾은 최고의 해결책은 다음과 같습니다.
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
.