본문 바로가기
리눅스

spaces in this filename (Bandit Level 2 → Level 3)

by 올라잇임돠! 2025. 9. 21.

All !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  Right !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 👊👊👊👊👊👊👊👊👊👊👊👊👊👊👊👊👊👊👊

 

 

어 동생이다.

 

이번엔 level 2에서 3 넘어가는 문제다.

 


The password for the next level is stored in a file called --spaces in this filename-- located in the home directory

어 --spaces in this filename-- 여기 파일에 있단다.

 

파일 이름에 공백이 있으면 또 안 읽히나 뭐 이딴문제를

우선 갈겨본다.

 

아 안되네 뭐여 

 

검색 ㄱㄱ

 

....

 

공백 앞에 \(역슬래쉬)를 붙이면 된다는데?

 

--spaces\ in\ this\ filename--

이렇게 하면 되나 

 

ㄱㄱ

안되잖아 장난 똥때리나

 

잠.깐.만

 

앞에 -- 때문인가?

 

푸하하하 

 

지렸죠 

해결이염 ㅋ

 

더 찾아봤는데 '',작은 따옴표로 감싸거나 "",큰 따옴표로 감싸면 된단다.

 

뒤질래? 안되잖아 

 

 

 

 

와 찾다가 엄청난걸 알아버렸습니다.

===========(지림포인트 1)=============

cat 명령어가 단순히 파일 내용을 출력해주는 명령어인줄 알았는데 그게 아니였습니다.

 

!! 그니까 cat이 인자가 주어졌을때랑, 인자가 안주어졌을때로 볼 수 있는데

(여기서 인자란? cat file <-----"file"처럼 cat 명령어 뒤에오는 text를 말합니다.)

 

 

그니까 인자가 주어졌을때 (cat뒤에 텍스트를 썼을때)

이때 cat은 이(this) 인자를 "파일명"으로 인식하고 그 파일을 열어서(open()) 그 파일의 내용을 읽고 출력해준다고 합니다.

 

 

근데 인자가 안주어졌을때(중요!)*****

 

이 cat이라는 녀석은 인자(파일명)이 안 주어지면

"어 파일명이 안 주어졌네? 그럼 stdin(표준입력)에서 읽어와야지" 하고

stdin(표준입력)에서 읽어와서 출력합니다.

 

근데 이 stdin(표준입력)은 기본적으로 키보드에 연결되어 있는거죠

그래서 내가 키보드로 입력한 텍스트가 그대로 출력됩니다.

이런식으로

 

근데 여기서 < 이 연산자를 사용하면

자 cat은 인자가 없는거로 생각합니다.

그래서 인자가 없으니까 stdin(표준입력)에서 읽어올려고 하는데 

 

!!이때 일반적인 경우에는 stdin(표준입력)이 키보드에 연결되어 있어

키보드로 입력한 값을 읽어오지만

 

"<" 이녀석이 그걸 바꿔버린거에요!!! 키보드에서 파일로 (키보드 -> 파일)!!

그래서 그 파일을 내용을 읽어오는거죠

 

cat file 이거는 cat이 직접 순수 file을 열어서 읽어오는거고

cat < file 이거는 cat은 그냥 stdin만 읽어오는데 쉘이 파일을 stdin에 연결을 해준거에요!!

 

개소름ㄷㄷㄷ 지렸죠?

 

 

그리고 cat 뒤에 -로 시작하는 파일명을 인자로 주면 

cat 이녀석이 -를 보고 아 이 녀석이 나한테 옵션을 주려나 보다 라고 딱 준비를 하는데

--spaces 이런 옵션은 없잖아요 그니까 오류가 생겼던 거에요.

 

 

그리고 < (리다이렉션이라고 한데요.)  이거 말고

"--" 를 붙여줘서 하는 방법도 있대요

"--' 이게 이 뒤로는 옵션으로 읽지 말라는 것과 같아서

 

cat -- --"spaces in this filename"-- 이렇게 해도 읽어와요

 

 

" ",' ' 이 따옴표들이 

 

그니까 쉘은 공백으로 인자를 구분한대요 

spaces in this filename 이 문장에서는(spaces 이거 하나) (in 이거 하나) (this 이거 하나)  (filename 이거 하나) 이렇게 보는거죠

 

근데 " ", ' '로 감싸버리면 이 공백을 못 읽고 하나로 봐버립니다.

그럼 저위에 문장에서 --"spaces in this filename"--는

 

spaces in this filename 이거는 " "로 감싸버려서 하나로 되어버렸고

그리고 "spaces in this filename"와 --사이에는 공백이 없으니까 하나로 보고

 

이래서 --"spaces in this filename"-- 이 문장을 하나의 인자가 되어버리는거죠

이것도 지리네 ===========(지림포인트 2)=============

 

하 오늘도 해결!!

 

캐뤼!!!!!!

'리눅스' 카테고리의 다른 글

dashed filename 읽기 (Bandit Level 1 → Level 2)  (0) 2025.09.20