gnu.org 문서에 언급된 대로 파일을 나열하기 위해 ls를 사용하는 것이 위험합니까?

gnu.org 문서에 언급된 대로 파일을 나열하기 위해 ls를 사용하는 것이 위험합니까?

ls로 파일을 나열하는 것이 위험합니까?

알 수 없는 파일이 포함된 디렉터리에서 ls 명령을 실행하면 문제가 발생합니까?

gnu.org 문서의 다음 문장에 명시된 대로 ls 명령을 실행하는 것이 얼마나 위험한지 예를 보여주실 수 있나요?

너무 많은 순진한 사용자가 신뢰할 수 없는 소스의 디렉터리에서 "ls"를 실행합니다.

https://www.gnu.org/software/coreutils/quotes.html

답변1

위험은 단지 달리기에만 있는 것이 아닙니다 ls. 위험은 출력을 입력하거나 붙여넣는 데 있습니다. 예를 들어, 신뢰할 수 없는 소스에서 이름을 얻을 수 있습니다 . 기존 (또는 GNU ) &date;을 실행하면 다음이 표시됩니다.lsls -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는 lsor '&date;'와 같은 명령 바로 뒤에 이것을 입력하거나 붙여넣으면 'funny story about `rm …`.txt'의도 치 않게 올바르게 인용하게 될 것입니다. 그러나 그렇습니다. 해석하거나 백틱을 사용합니다.fileless&

이 기능은 "모든 항목에 작은따옴표"보다 더 복잡합니다. 파일 이름 자체에는 작은따옴표가 포함될 수 있으므로 맹목적으로 작은따옴표를 사용하는 것이 항상 작동하는 것은 아닙니다. 일반적으로 GNU는 ls백슬래시, 작은따옴표, 큰따옴표를 사용할 수 있으며 심지어ANSI-C 인용문파일 이름을 안전한 형식으로 표시하려면 *를 붙여넣으면 됩니다.


* 모든 쉘이 ANSI-C 인용을 이해하는 것은 아닙니다. 하지만 GNU를 사용하고 있다면 ls이를 이해하는 최신 쉘(예: GNU bash)을 사용하고 있을 것입니다. 또한 이는 모든 상황에 붙여넣을 때 예상대로 작동하는 코드 조각을 만드는 것이 아닙니다. 이는 예상대로 작동하지 않는(또는 "불량 작성자의 의도대로 작동") 스니펫을 방지하기 위한 것입니다.

관련 정보