find에서 xdev 옵션 이름 뒤에 숨겨진 역사는 무엇입니까?

find에서 xdev 옵션 이름 뒤에 숨겨진 역사는 무엇입니까?

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_MOUNTst_dev

주문에는 과 1988 가 SVr4 find모두 있었으며 -mount였습니다.-xdev-xdev-mount

반면에 SunOS과 는 이미 1985년에 있었고 BSD그 위에 /가 구현되지 않았기 때문에 다른 의미를 사용할 수 있었고 실제로 그랬습니다. 다른 마운트 지점을 인쇄한 후 on이 더 이상 떨어지지 않습니다.-xdevSunOSBSD find*ftw()find -xdevSunOSst_dev

그러다가 1992년에 첫 번째 표준에는 언급된 파일 형식(예: tar) POSIX이상의 것이 포함되었습니다 . libcPOSIX 표준의 문제점은 마운트 지점이 보고되어야 하고 마운트 지점이 보고된 후에 중지되는 반면, 마운트 지점이 보고되기 전에 구현이 중지된다는 것입니다.find-xdev-xdevAT&T

GNU find는 POSIX.1-1992 텍스트를 준수하는 구현입니다.

따라서 최근 POSIX 표준 회의에서 관련 버그 보고서에 대해 논의하고 주요 표준 -mount과 .FTW_XDEVnftw()

find -mountfindAT&T UNIX에서와 동일하게 작동해야 하며 마운트 지점을 보고하면 안 됩니다.

find -xdevPOSIX 표준에 작성된 대로 실행해야 하며 마운트 지점을 보고하고 트리가 삭제될 때 중지해야 합니다.

이를 위해서는 구현을 변경 하고 GNU가 변경된 동작을 발견할 수 있도록 AT&TUNIX 기반 구현이 필요합니다 .find-xdev-mount

참고: 제가 아는 한 sfind/libfind이것은 이미 새로운 규칙을 따르는 유일한 현재 구현입니다.

libfidndPOSIX 최종 프로토콜이 확립되기 전에 필요한 코드가 구현되었기 때문에 이제 마운트 지점에서 중지하는 것을 더 쉽게 기억할 수 있도록 하는 별칭이 된 -mount+기본 코드를 구현했지만 이를 추가로 보고했습니다.-xdev-mount+

관련 정보