"-p \; -quit" 및 -exec는 무엇을 의미합니까?

"-p \; -quit" 및 -exec는 무엇을 의미합니까?

무슨 뜻이에요 find . exec /bin/bash -p \; -quit?

.나는 그것이 /bin/bash.

주문과 관련이 있나요 -p ?/bin/bashfind

\;은 무슨 -quit뜻인가요?

답변1

find . -exec /bin/bash -p \; -quit

(이것은 GNU find또는 그것과 호환된다고 가정합니다 -quit) 시작될 것입니다. 이는 (현재 작업 디렉토리)부터 시작하여 디렉토리 트리 아래로 내려가고 find, 각 파일에 대해 자체적으로 시작하여 실행됩니다(실행될 명령이 끝나는 위치를 알려줍니다) , 명령이 성공하면 종료합니다(때문에).../bin/bash -p\;find-quit

명령 find자체는 그다지 유용하지 않습니다. 이것은 시작하는 복잡한 방법입니다 bash. 이는 -p이 명령 뒤에 숨겨진 (사악한) 의도에 대한 힌트를 제공합니다.

-pbash상승된 컨텍스트(예: setuid 실행 파일을 실행한 프로세스)에서 호출되면 해당 권한을 포기하지 못하게 됩니다.

사용자가 제한된 명령 집합만 실행할 수 있는 제한된 컨텍스트에 있는 것 같습니다. 예를 들어 제한된 셸을 통해 이 작업을 수행할 수 있습니다.

그러나 find이는 허용되는 명령 목록 중 하나이며, 제한된 환경을 설정한 사람은 쉘(쉘 내장이 아님)에 설정된 제한 find에 관계없이 임의의 명령이 실행될 수 있다는 사실을 무시했습니다.find

따라서 find . -exec /bin/bash -p \; -quit누군가가 이러한 제한을 우회하기 위해 이 명령을 실행하는 것처럼 보입니다.

답변2

명령 은 find실제로 옵션을 사용해야 합니다.-exec, 이는 이스케이프된 세미콜론으로 끝나야 합니다. 이것은 쉘 명령 사이의 구분 기호가 아닌 find명령의 일부로 만들기 위해 이스케이프가 필요하다고 설명하는 모든 매뉴얼에 있습니다.find-quit귀하의 예에 표시된 옵션.

그런데,-quit특정 구현을 참조하는 것 같습니다(예:GNU 찾기)에는 표시되지 않기 때문입니다.POSIX:

-quit
즉시 종료합니다(오류가 발생하지 않으면 반환 값은 0입니다). 이것은 다르다-prune왜냐하면-prune디렉토리의 내용을 정리하는 데에만 작동하지만-quit find가 즉시 중지되도록 합니다. 하위 프로세스는 계속 실행되지 않습니다. 모든 빌드된 명령줄 -exec... \+또는-execdir... \+프로그램이 종료되기 전에 호출됩니다. 뒤쪽에-quit실행 후에는 명령줄에 지정된 파일이 더 이상 처리되지 않습니다. 예를 들어, 일반적인 사용법은 find /tmp/foo /tmp/bar -print -quit다음과 같습니다 ./tmp/foo-quit원하는 것을 찾으면 파일 시스템 검색을 중지하십시오. 예를 들어, 하나의 파일만 찾으려면 다음과 같이 할 수 있습니다.
find / -name needle -print -quit

-p옵션은 다음에 설명되어 있습니다.배쉬 매뉴얼:

Bash 시작 시 유효 사용자(그룹) ID가 실제 사용자(그룹) ID와 동일하지 않은 경우-p옵션이 제공되지 않고, 시작 파일이 읽혀지지 않고, 쉘 함수가 환경에서 상속되지 않고, SHELLOPTS, BASHOPTS, CDPATH 및 GLOBIGNORE 변수(환경에 나타나는 경우)가 무시되고 유효 사용자 ID가 실제 사용자 ID로 설정됩니다. 사용자 ID. 호출 시 -p 옵션을 제공하면 시작 동작은 동일하지만 유효 사용자 ID가 재설정되지 않습니다.

관련 정보