무슨 뜻이에요 find . exec /bin/bash -p \; -quit
?
.
나는 그것이 /bin/bash
.
주문과 관련이 있나요 -p
?/bin/bash
find
\;
은 무슨 -quit
뜻인가요?
답변1
find . -exec /bin/bash -p \; -quit
(이것은 GNU find
또는 그것과 호환된다고 가정합니다 -quit
) 시작될 것입니다. 이는 (현재 작업 디렉토리)부터 시작하여 디렉토리 트리 아래로 내려가고 find
, 각 파일에 대해 자체적으로 시작하여 실행됩니다(실행될 명령이 끝나는 위치를 알려줍니다) , 명령이 성공하면 종료합니다(때문에)..
.
/bin/bash -p
\;
find
-quit
명령 find
자체는 그다지 유용하지 않습니다. 이것은 시작하는 복잡한 방법입니다 bash
. 이는 -p
이 명령 뒤에 숨겨진 (사악한) 의도에 대한 힌트를 제공합니다.
-p
bash
상승된 컨텍스트(예: 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가 재설정되지 않습니다.