📌 문제

앞선 문제들과 비슷하게 홈 디렉터리 아래의 - 파일안에 bandit2의 비밀번호가 들어있다고 한다. 

- 파일 안에 있는 비밀번호를 읽으면 된다. 

 

이 문제를 통해 -로 시작하는 파일 읽는 방법에 대해알아보자 

 

 

📌 풀이 

 

파일을 읽는 명령어는 cat이므로 cat [ 파일 이름] 을 이용하여 내용을 읽으려고 했다. 

그런데 그렇게 입력해도 계속 대기만 할 뿐 파일의 내용을 읽지 않는다. 그 이유는 파일의 이름과 관련이 있었다. 

 

파일의 이름이 - 이다. 보통 리눅스의 명령어에서 - 다음에 옵션들을 붙여서 여러가지 기능들을 추가적으로 수행 할 수 있도록 해준다. 

그래서 쉘은 cat 다음에 들어온 - 를 파일의 이름으로 읽는것이 아닌, - 옵션을 위한 특수문자로 인식하여 사용자로부터의 입력을 기다리고 있고 있던 것이다. 

bandit1@bandit:~$ ls
-
bandit1@bandit:~$ cat -
^C

 

 

이러한 파일을 읽기 위한 방법은 파일의 경로를 명시적으로 지정해주거나, 절대경로를 이용하면 된다. 

$ cat ./-

$ cat home/bandit1/-

 

아니면 cat 명령의 입력으로 - 파일을 사용한다.  (입력 리다이렉션) 

$ cat < -

 

 

 

🍪 cat [파일 이름] 과 cat < [파일 이름] 의 차이점

https://askubuntu.com/questions/1190700/what-is-the-difference-between-cat-filename-and-cat-filename

 

What is the difference between "cat < filename" and "cat filename"?

The simplest way to display file contents is using the cat command: cat file.txt I can get the same result using input redirection: cat < file.txt Then, what is the difference between them?

askubuntu.com

 

 

  1. 첫번째의 경우 cat 명령어가 직접 파일을 읽는 것이고, 두번째 명령어는 쉘이 파일을 읽고 cat에게 전달하는 것이다. 
  2. 첫번째 명령의 경우 여러개의 파일을 읽을 수 있지만, 두번째는 한개의 파일만을 읽을 수 있다. 
  3. cat이 파일을 읽는 경우, 파일을 읽을때 마다 새로운 파일 디스크립터를 열기 때문에 파일 디스크립터 한계에 도달하면  "Too many open files" 오류가 발생할 수 있다. 하지만 쉘이 파일을 읽는 경우에는 이미 열려있는 표준 입력을 이용하기 때문에 추가적으로 파일 디스크립터를 사용하지 않는다고 한다. 

 

따라서 대량이 파일을 읽을때는 두번째 명령어가 파일 디스크립터의 소비가 적을 수 있다.

※ 파일 디스크립터?  열린 파일이나 입출력 자원들을 고유하게 식별하고 접근하기 위한 참조값 

 

그리고 이러한 파일 디스크립터는 시스템 혹은 운영체제 별로 최대값이 설정되어있지만, 사용자에 따라 그 값을 바꿀 수 있다. 

https://hunnie.co.kr/61

 

리눅스 오픈 가능한 파일 - Too many open files

"Too many open files" 라는 에러가 발생하였을 때의 조치 방법입니다. 리눅스는 모든 것(파일, 세션 등)을 파일로 취급합니다. 파일 디스크립터는 시스템 에서 파일이나 소켓과 같은 I/O 리소스를 참조

hunnie.co.kr

 

 

 

📌 정리

파일이름에 특수문자가 포함되어있어 읽혀지지 않는다면, 명시적으로 파일의 경로를 작성해주거나 절대경로를 이용하여 파일을 읽자. 또는 입력리다이렉션을 이용해보자 

'OverTheWire > bandit' 카테고리의 다른 글

Bandit Level 5 → Level 6  (0) 2025.01.11
Bandit Level 4 → Level 5  (0) 2025.01.10
Bandit Level 2 → Level 3  (0) 2025.01.10
Bandit Level 0 → Level 1  (0) 2025.01.10
Bandit Level 0  (0) 2025.01.10

+ Recent posts