왜 이런 식으로 작동합니까?

왜 이런 식으로 작동합니까?

나는 소벨의 책을 읽고 있어요Linux 명령, 편집기 및 셸 프로그래밍에 대한 실용 가이드, 4e, 저는 현재 쉘 기본 5장을 시작하고 있습니다.

135페이지에서 Sobel은 다음과 같이 설명합니다.

명령줄에서 쉘이 실행할 파일 이름을 세 가지 방법으로 지정할 수 있습니다: 절대 경로 이름(슬래시 [/]로 시작, 90페이지), 상대 경로 이름(슬래시로 끝나지는 않지만 포함) ; 91페이지) 또는 간단한 파일 이름(슬래시 없음)으로 표시됩니다.

게다가 그는 다음과 같이 썼다.

슬래시 없이 간단한 파일 이름을 지정하면 쉘은 디렉토리 목록에서 지정된 이름과 일치하고 사용자에게 실행 권한이 있는 파일 이름을 검색합니다. 쉘은 모든 디렉토리를 검색하지 않고 PATH라는 변수로 지정된 디렉토리만 검색합니다.

중요한 것은, 그는 작업 디렉토리가 일반적으로 다음과 같다는 점을 지적합니다.아니요경로의 일부.

그래서 내 질문은 간단한 파일 이름이 명령으로 전달되는지 아니면 명령 인수로 전달되는지에 따라 쉘이 어떻게 다르게 동작하는지(왜?) 이해하는 것입니다.

책의 이 시점까지 나는 간단한 파일 이름을 상대 경로의 특별한 경우로 이해했습니다. 여기서는 주어진 파일이 작업 디렉터리의 직접적인 하위 항목이기 때문에 슬래시가 필요하지 않습니다. 예를 들어, foo내 홈 디렉터리에 라는 파일이 있고 내가 홈 디렉터리에 있다면,

ls -l foo

( 인수로 간단한 파일 이름을 foo전달했습니다 ) 에 대한 세부 정보를 제공합니다 .fools

이제 이 행동은다른그 자체가 프로그램/파일/실행 파일인 명령의 경우(제 순진함과 정확성 부족을 용서해 주시기 바랍니다). Sobell은 명령줄에 다음을 제공하면 쉘이 반드시 작업 디렉터리가 아닌 PATH에서 디렉터리를 찾을 것이라고 말하는 것 같습니다(PATH의 일부가 아닌 한).

ls

즉, 간단한 파일 이름을 인수가 아닌 명령으로 제공하는 특정 경우에는 쉘의 모양이 다르게 동작합니다. 이 이해가 맞나요?

답변1

예. 당신의 이해가 정확합니다.

/tmp해당 디렉토리로 이동하여 "text"라는 단어가 포함된 텍스트 파일을 생성하면 다음과 같은 내용이 표시됩니다.

cd /tmp
echo 'text' > file.txt

이제 다음 명령을 서로 바꿔서 사용할 수 있습니다.

cat /tmp/file.txt
cat ./file.txt
cat file.txt

각 명령은 파일의 텍스트 내용을 표시합니다.

하지만! 이제실행 가능 파일문서:

cd /tmp
printf '#!/usr/bin/env bash\n\necho "hi"\n' > executable
chmod a+x executable

파일은 여전히 ​​파일이므로 이전과 마찬가지로 파일에 액세스할 수 있습니다.

cat /tmp/executable
cat ./executable
cat executable

그러나 Bash 셸에서는 다음과 같이만 실행할 수 있습니다.

/tmp/executable
./executable

다음과 같이 파일을 실행할 수 없습니다.

executable

그러면 쉘이 일치하는 실행 파일을 찾기 위해 다양한 $PATH 위치를 검색하게 됩니다. 아무 것도 없기 때문에 쉘은 포기하고 오류 127("명령 'executable'을 찾을 수 없음")을 반환합니다.

왜 이런 식으로 작동합니까?

이것은 의식적인 안전 결정입니다! 해커가 일상적인 셸 명령(예: 명령) 중 하나와 일치하는 /tmp이름을 사용하여 디렉터리에 실행 파일을 배치하면 잠재적으로 사용자가 모르는 사이에 악의적인 명령을 실행할 수 있습니다.ls

해결책은 $PATH에 설치한 신뢰할 수 있는 명령만 셸에서 실행하도록 하는 것입니다.

당신이 시간이 있었다면하다현재 작업 디렉토리에서 일회성 스크립트를 실행하려는 경우 실행 파일의 경로(예: ./executable또는 )를 지정하여 /tmp/executable이를 수행 할 수 있습니다. 추가 경로 정보를 제공함으로써 실행 파일이 실제로 해당 위치에서 실행되기를 원하며 그렇게 하도록 속이는 것이 아니라는 것을 나타냅니다!

관련 정보