파일 내용 확인하고 필요한 것 찾기
터미널에서 파일 내용을 확인하고 원하는 문구와 파일을 검색하는 cat, less, grep, find 명령어 활용법을 설명합니다.
서버 안에서 폴더를 만들고 파일을 다루는 법을 배웠습니다. 그렇다면 메모장이나 코드 에디터 화면이 없는 터미널에서, 파일 안에 어떤 글자가 적혀 있는지 어떻게 확인할 수 있을까요? 또, 수많은 파일들 사이에서 내가 원하는 에러 메시지나 특정 설정값이 어디에 숨어 있는지 어떻게 찾아낼까요? 이번 시간에는 터미널에서 파일을 열어보고 내용을 검색하는 강력한 도구인 `cat`, `less`, `grep`, `find` 명령어에 대해 배웁니다.
짧은 파일 내용을 빠르게 훑어보기: `cat`
가장 흔하게 쓰이는 파일 확인 명령어는 `cat`입니다. `cat`은 Concatenate(연결하다)의 앞 글자를 딴 것이지만, 실무에서는 단순히 '파일의 모든 내용을 터미널 화면에 와르르 쏟아내어 보여주는 도구'로 훨씬 많이 쓰입니다.
사용법은 매우 간단합니다. `cat [파일 이름]`을 입력하면 됩니다. 예를 들어 환경 변수 설정 파일의 내용을 확인하고 싶다면 `cat .env`라고 입력합니다. 파일 내용이 터미널 화면에 즉시 출력되며 커서가 다시 깜빡입니다. 내용이 아주 짧은 설정 파일, 간단한 안내문, 패스워드 토큰 값 등을 확인할 때 주로 사용합니다.
cat 명령어를 통한 내용 출력
$ cat robots.txt
User-agent: *
Disallow: /admin/명령을 내리자마자 파일 안에 적혀 있던 두 줄의 텍스트가 화면에 곧바로 출력됩니다.
하지만 내용이 수천 줄이 넘어가는 서버 접속 로그 파일을 `cat`으로 열면 어떻게 될까요? 글자들이 화면을 미친 듯이 채우며 순식간에 지나가 버리고, 결국 화면에는 가장 마지막 부분만 남게 됩니다. 즉, 내용이 긴 파일에는 `cat`이 적합하지 않습니다.
긴 파일을 여유 있게 읽어보기: `less`
내용이 매우 긴 에러 로그나 복잡한 코드를 터미널에서 읽어야 할 때는 `cat` 대신 `less` 명령어를 사용합니다. `less`는 파일의 내용을 한 번에 다 보여주지 않고, 화면 크기에 딱 맞게 한 페이지씩 잘라서 보여주는 똑똑한 도구(Pager)입니다.
`less [파일 이름]`을 입력하면 터미널 화면이 전환되면서 파일의 맨 첫 페이지가 나타납니다. 마우스 휠을 굴리듯 화면을 탐색할 수 있습니다.
less 화면에서의 이동 단축키
권장
- 방향키 위/아래: 한 줄씩 스크롤합니다.
- 스페이스바(Space): 한 페이지 단위로 시원하게 넘깁니다.
- 슬래시(/) 누르고 검색어 입력 후 엔터: 파일 내에서 원하는 단어를 검색합니다 (예: /error). 다음 검색 결과를 보려면 소문자 'n'을 누릅니다.
- 알파벳 'q' (Quit): 읽기를 종료하고 원래의 터미널 입력 화면으로 빠져나옵니다.
주의
- 당황해서 Ctrl+C 연타하기: less를 종료할 때는 Ctrl+C가 아니라 반드시 'q'를 눌러야 안전하게 종료됩니다.
바이브코딩 중에 웹 서버가 갑자기 멈췄을 때, 에러 로그 파일의 원인을 파악하기 위해 `less error.log`를 입력하고 오류 메시지를 천천히 스크롤 해가며 읽는 것이 서버 운영의 일상입니다.
건초 더미에서 바늘 찾기: 강력한 검색기 `grep`
만약 파일이 100개가 있는데, 그중에서 "database_password"라는 글자가 적힌 파일이 무엇인지 찾아야 한다면 어떻게 할까요? 일일이 파일을 다 열어볼 수는 없습니다. 이때 리눅스 터미널의 진정한 강력함인 `grep` 명령어가 빛을 발합니다.
`grep`은 텍스트 내부를 뒤져서 내가 지정한 특정 패턴(문자열)이 포함된 줄만 정확히 뽑아내어 보여주는 명령어입니다. 바이브코딩 시 에러를 추적하거나 설정값을 찾을 때 절대 없어서는 안 될 필수 도구입니다.
명령어 구조는 `grep [찾을 단어] [대상 파일]`입니다. 예를 들어 `server.py` 코드 안에서 'port'라는 단어가 들어간 줄만 보고 싶다면 `grep port server.py`라고 입력합니다.
grep의 실전 100% 활용법
bash```bash
$ grep -r "apikey" config/
config/dev.json: "apikey": "dev_12345"
config/prod.json: "apikey": "prod_98765"
```- 1단일 파일 검색: grep error app.log (app.log 안에서 error 글자가 있는 줄만 추출합니다.)
- 2다수의 파일 동시 검색: grep database *.js (현재 폴더의 모든 자바스크립트 파일에서 database 단어를 찾습니다.)
- 3대소문자 무시 (-i 옵션): grep -i Error app.log (Error, error, ERROR 모두 찾습니다.)
- 4현재 폴더 및 하위 폴더 전체 뒤지기 (-r 옵션): grep -r 'TODO' src/ (src 폴더 안의 모든 파일에서 TODO를 찾습니다.)
`grep`은 단독으로도 쓰이지만, 앞서 배운 명령어들과 결합할 때 시너지가 엄청납니다. 나중에 배울 파이프(`|`)라는 기호를 쓰면, 현재 실행 중인 수많은 프로그램 목록 중에서 특정 프로그램만 콕 집어 검색하는 식의 응용이 가능합니다.
잃어버린 파일을 찾아주는 탐지견: `find`
`grep`이 '파일 안의 글자'를 찾아준다면, `find`는 '파일 자체'의 이름이나 특성을 기반으로 파일을 찾아주는 도구입니다. "어디에 저장했는지 기억이 안 나는데, 이름이 report로 시작하는 파일이 어디 있지?" 같은 상황에서 사용합니다.
기본 구조는 `find [어디서부터 찾을지 경로] -name [찾을 파일 이름]`입니다. 시스템 전체에서 찾으려면 경로에 최상위 루트인 `/`를 넣고, 현재 위치부터 하위 폴더들을 다 뒤지려면 `.`을 넣습니다.
find 명령어 활용 예시
| 명령어 | 수행 목적 |
|---|---|
| find . -name 'index.html' | 현재 폴더(.)와 그 밑의 모든 폴더를 뒤져 정확히 index.html이라는 이름의 파일 경로를 찾습니다. |
| find /var/www -name '*.png' | /var/www 폴더 전체에서 확장자가 png로 끝나는 모든 이미지 파일을 찾습니다. (별표*는 '무엇이든'을 의미합니다) |
| find . -type d -name 'backup' | 현재 폴더 하위에서 파일이 아닌 디렉터리(-type d) 중에서 이름이 backup인 것만 정확히 찾아냅니다. |
`find` 명령어는 서버 전체를 뒤지기 때문에 권한 부족(Permission denied) 에러가 많이 뜰 수 있지만 당황하지 마세요. 내가 접근할 수 있는 폴더 안에서 찾은 결과물은 에러들 사이로 정상적으로 출력됩니다.
개념 퀴즈
퀴즈 답을 맞춰야 학습 완료가 됩니다.서버 로그 파일인 'server.log' 내용이 너무 길어 화면을 넘어갑니다. 이 파일을 열고 위아래로 스크롤하면서 내용 전체를 천천히 확인한 후, 다 읽고 나면 알파벳 'q'를 눌러 빠져나올 수 있게 해주는 명령어는 무엇인가요?
3줄 요약
- 1cat은 짧은 파일의 내용을 터미널에 즉시 출력할 때, less는 긴 파일의 내용을 페이지 단위로 스크롤하며 읽을 때 사용합니다.
- 2grep은 파일 내용 속에 특정 단어(텍스트 패턴)가 포함된 줄만 정확하게 추출해 내는 가장 강력한 본문 검색 도구입니다.
- 3find는 서버의 지정된 경로를 탐색하여 특정 이름이나 확장자를 가진 파일(또는 폴더)의 위치를 찾아내는 명령어입니다.