ls로 파일을 나열하는 것이 위험합니까?
알 수 없는 파일이 포함된 디렉터리에서 ls 명령을 실행하면 문제가 발생합니까?
gnu.org 문서의 다음 문장에 명시된 대로 ls 명령을 실행하는 것이 얼마나 위험한지 예를 보여주실 수 있나요?
너무 많은 순진한 사용자가 신뢰할 수 없는 소스의 디렉터리에서 "ls"를 실행합니다.
답변1
위험은 단지 달리기에만 있는 것이 아닙니다 ls
. 위험은 출력을 입력하거나 붙여넣는 데 있습니다. 예를 들어, 신뢰할 수 없는 소스에서 이름을 얻을 수 있습니다 . 기존 (또는 GNU ) &date;
을 실행하면 다음이 표시됩니다.ls
ls -N
&date;
쉘에서 수행할 작업 &
과 수행할 작업을 모르는 경우 ;
다음 중 하나를 쉽게 실행할 수 있습니다.
nano &date;
file &date;
rm &date;
cp &date; whatever
이들 명령은 모두 즉시 실행됩니다 date
. date
해로운 명령은 아니고 일부러 안전한 예를 선택했습니다. 하지만 파일 이름이 문자 그대로 지정되면 어떻게 될까요 funny story about `rm …`.txt
? 아 얘야, 어디 보자! 공백이 있는 이름을 따옴표로 묶거나 이스케이프 처리해야 한다는 사실을 깨닫고 큰따옴표를 선택할 수도 있습니다.
less "funny story about `rm …`.txt"
실제로 이 정확한 명령은 거의 항상 안전 하지만 ( …
유지하려는 이름의 파일이 없으면 안전합니다 ), -rf ~
.…
백틱 안에 있는 내용이 실행됩니다.따옴표나 큰따옴표가 없습니다. 파일을 안전하게 검사하려면 이름을 작은따옴표로 묶어야 합니다.
less 'funny story about `rm …`.txt'
위의 명령은 실행되지 않습니다 rm
.
ls
귀하가 링크한 문서는 이러한 사고로부터 순진한 사용자를 보호하기 위해 설계된 GNU 기능에 관한 것입니다 . 기본 출력을 변경하는 이유 중 하나가 다음과 같다고 명시적으로 명시되어 있습니다.
터미널에서 파일 이름을 잘라내어 붙여넣는 더 쉽고 안전한 방법
예제 파일 이름에서 GNU는 ls
or '&date;'
와 같은 명령 바로 뒤에 이것을 입력하거나 붙여넣으면 'funny story about `rm …`.txt'
의도 치 않게 올바르게 인용하게 될 것입니다. 그러나 그렇습니다. 해석하거나 백틱을 사용합니다.file
less
&
이 기능은 "모든 항목에 작은따옴표"보다 더 복잡합니다. 파일 이름 자체에는 작은따옴표가 포함될 수 있으므로 맹목적으로 작은따옴표를 사용하는 것이 항상 작동하는 것은 아닙니다. 일반적으로 GNU는 ls
백슬래시, 작은따옴표, 큰따옴표를 사용할 수 있으며 심지어ANSI-C 인용문파일 이름을 안전한 형식으로 표시하려면 *를 붙여넣으면 됩니다.
* 모든 쉘이 ANSI-C 인용을 이해하는 것은 아닙니다. 하지만 GNU를 사용하고 있다면 ls
이를 이해하는 최신 쉘(예: GNU bash
)을 사용하고 있을 것입니다. 또한 이는 모든 상황에 붙여넣을 때 예상대로 작동하는 코드 조각을 만드는 것이 아닙니다. 이는 예상대로 작동하지 않는(또는 "불량 작성자의 의도대로 작동") 스니펫을 방지하기 위한 것입니다.