xdev 옵션의 이름이 직관적이지 않다고 생각합니다. 나에게 이것은 "교차 장치 (검색)"의 약자 인 것 같습니다. 그러나 이는 정반대로 검색을 단일 파일 시스템으로 제한합니다. 대안이지만 다소 오래된 이름은 기억하기 쉬운 "mount"입니다. 이 옵션의 이름 뒤에 숨겨진 역사는 무엇입니까?
답변1
실제로는 크로스 디바이스를 의미할 가능성이 높습니다.하다아니요여러 기기에서.
내부에1985년 BSD에 대한 최초 구현, 코드는 다음과 같습니다
int Xdev = 1; /* true if SHOULD cross devices (file systems) */
[...]
else if (EQ(a, "-xdev")) {
Xdev = 0;
Xdev
장치가 교차해야 하는지 여부를 추적하는 내부 변수는 어디에 있습니까? 술어는 -xdev
이를 0으로 설정합니다.
몇 년 후 AT&T의 David Korn은 SVR4에 유사한 조건자를 추가하고 -mount
별칭을 부여했습니다( FTW_MOUNT
새로운 나무 걷기 라이브러리의 특징을 반영하여).
-mount
이 옵션은 별로 좋다고 생각하지 않습니다 . 을 나타낸다고 가정단일 설치이는 Linux에서도 오해의 소지가 있지만 적어도 Linux에서는 파일 시스템에 대해 여러 마운트 지점을 설정할 수 있습니다.
$ mkdir -p a/b b
$ sudo mount --bind a b
이제 b
동일한 마운트 지점입니다.장비와 ..
a
$ find . -xdev
.
./b
./b/b
./a
./a/b
$ find . -mount
.
./b
./b/b
./a
./a/b
find
여러 기기에서 작동하지 않지만 b
다릅니다.산요점 그래서 -mount
(단일 설치로서) 더 오해의 소지가 있습니다 -xdev
.방지크로스 디바이스).
답변2
당신이 믿는 것보다 더 복잡합니다.
AT&T 구현에서 find
이 기능이 nftw()
도입되었으며 SVr4
마운트 지점에서 중지되고 다른 항목이 있는 파일을 보고하지 않는 nftw()
플래그가 함께 제공됩니다 .FTW_MOUNT
st_dev
주문에는 과 1988 가 SVr4
find
모두 있었으며 -mount
였습니다.-xdev
-xdev
-mount
반면에 SunOS
과 는 이미 1985년에 있었고 BSD
그 위에 /가 구현되지 않았기 때문에 다른 의미를 사용할 수 있었고 실제로 그랬습니다. 다른 마운트 지점을 인쇄한 후 on이 더 이상 떨어지지 않습니다.-xdev
SunOS
BSD
find
*ftw()
find -xdev
SunOS
st_dev
그러다가 1992년에 첫 번째 표준에는 언급된 파일 형식(예: tar) POSIX
이상의 것이 포함되었습니다 . libc
POSIX 표준의 문제점은 마운트 지점이 보고되어야 하고 마운트 지점이 보고된 후에 중지되는 반면, 마운트 지점이 보고되기 전에 구현이 중지된다는 것입니다.find
-xdev
-xdev
AT&T
GNU find는 POSIX.1-1992 텍스트를 준수하는 구현입니다.
따라서 최근 POSIX 표준 회의에서 관련 버그 보고서에 대해 논의하고 주요 표준 -mount
과 .FTW_XDEV
nftw()
find -mount
find
AT&T UNIX에서와 동일하게 작동해야 하며 마운트 지점을 보고하면 안 됩니다.
find -xdev
POSIX 표준에 작성된 대로 실행해야 하며 마운트 지점을 보고하고 트리가 삭제될 때 중지해야 합니다.
이를 위해서는 구현을 변경 하고 GNU가 변경된 동작을 발견할 수 있도록 AT&T
UNIX 기반 구현이 필요합니다 .find
-xdev
-mount
참고: 제가 아는 한 sfind/libfind
이것은 이미 새로운 규칙을 따르는 유일한 현재 구현입니다.
libfidnd
POSIX 최종 프로토콜이 확립되기 전에 필요한 코드가 구현되었기 때문에 이제 마운트 지점에서 중지하는 것을 더 쉽게 기억할 수 있도록 하는 별칭이 된 -mount+
기본 코드를 구현했지만 이를 추가로 보고했습니다.-xdev
-mount+