우분투 · 리눅스 입문 — 7편

리눅스 텍스트 명령어 — cat·less·grep·tail

리눅스는 거의 모든 게 텍스트 파일입니다 — 설정도, 로그도. 그래서 "파일 내용 보고 찾는" 명령어가 손에 붙으면 절반은 끝나요.

2026년 5월 12일 · 약 8분 · 26편 입문 시리즈 7편

터미널에서 grep으로 로그 파일을 검색하는 화면 — 리눅스 텍스트 명령어를 상징하는 일러스트

6편에서 파일을 만들고·복사하고·옮기고·지웠죠. 그런데 정작 "그 안에 뭐가 들었는지"는 아직 못 봤어요. 리눅스에서 이게 중요한 이유 — 설정 파일(/etc/...)도, 프로그램 로그(/var/log/...)도, 거의 다 그냥 텍스트 파일입니다. 메모장 열듯 볼 수만 있으면 시스템의 절반이 보여요.

이 글은 "파일을 열지 않고 내용을 보는" 명령어들입니다 — 통째로 쏟아내는 cat, 페이지 넘기며 보는 less, 앞/뒤만 떼서 보는 head/tail, 실시간으로 흐르는 걸 보는 tail -f, 그리고 "어디에 그 단어 있지"를 찾는 grep. 마지막엔 wc·sort·uniq와 파이프(|) 맛만 봅니다. 26편 입문 시리즈 7편이고, 명령어 다 안전한 것들이에요(파일을 고치진 않음 — 그건 8편 nano부터).

준비물 — 우분투 + 터미널. 6편에서 만든 ~/linux-practice가 있으면 거기서, 없으면 mkdir -p ~/linux-practice && cd ~/linux-practice로 만들고 시작하세요. 실습용 텍스트 파일은 아래에서 함께 만듭니다.

파일 내용 보는 4가지 — cat · less · head · tail

먼저 실습용 파일을 하나 만듭니다(여러 줄짜리):

$ cd ~/linux-practice $ printf "사과\n바나나\n포도\n사과\n딸기\n바나나\n사과\n" > fruits.txt ← fruits.txt에 과일 이름 7줄 넣기 (printf로 줄바꿈 \n 포함해서 씀)

이제 이 파일을 네 가지 방법으로 봅니다 — 상황에 따라 골라 씁니다:

$ cat fruits.txt 사과 / 바나나 / 포도 ... ← 통째로 화면에 출력. 짧은 파일에 좋음. 긴 파일이면 좌르륵 흘러감 $ less fruits.txt ← 한 화면씩 보여줌. ↑↓로 스크롤, '/단어'로 검색, q로 나가기. 긴 파일/로그에 최적 $ head fruits.txt 사과 / 바나나 / 포도 / 사과 / 딸기 ← 앞 10줄만 (head -n 3 이면 앞 3줄만) $ tail fruits.txt ... / 딸기 / 바나나 / 사과 ← 뒤 10줄만 (tail -n 3 이면 마지막 3줄만)
언제 뭘 쓰나: 짧은 파일 = cat. 긴 파일을 차분히 보고 싶다 = less(파일 안 망가뜨림, 검색 됨). 파일 맨 앞만 = head. 파일 맨 뒤(특히 로그의 최근 부분)만 = tail. 이 넷이면 거의 다 됩니다.

tail -f — 로그가 실시간으로 흐르는 걸 본다

이건 따로 빼서 강조합니다. 실무에서 가장 많이 쓰는 텍스트 명령 중 하나예요. tail -f는 "파일의 끝을 보여주는데, 새 줄이 추가되면 그것도 바로 화면에 띄워준다"는 뜻입니다.

$ tail -f /var/log/syslog ← 시스템 로그가 실시간으로 흐름. 뭔가 동작할 때마다 새 줄이 떠오름 (보다가 멈추려면) Ctrl+C ← 4편에서 배운 그 비상 탈출구

왜 유용하냐면 — 프로그램이 이상하게 동작할 때, tail -f로 로그를 띄워두고 그 프로그램을 한 번 더 실행해보면 "무슨 일이 일어나는지"가 눈앞에서 흘러갑니다. "에러 났어요"보다 훨씬 구체적인 단서가 잡혀요. (로그 폴더 자체에 대한 자세한 얘기는 시리즈 24편 "로그 분석"에서.) 지금은 "로그는 텍스트 파일이고, tail -f로 실시간으로 볼 수 있다"만 챙기면 됩니다.

grep — "어디에 그 단어 있지"

파일이 길어지면 눈으로 못 찾습니다. grep"이 단어가 들어 있는 줄만 골라서 보여줘"예요. 텍스트를 다루는 한 평생 씁니다.

$ grep 사과 fruits.txt 사과 / 사과 / 사과 ← '사과'가 들어간 줄만 출력 (이 파일에선 3줄) $ grep -n 바나나 fruits.txt 2:바나나 6:바나나 ← -n: 몇 번째 줄인지 번호도 같이 $ grep -i apple /etc/hosts ← -i: 대소문자 무시하고 찾기 $ grep -r "검색어" . ← -r: 현재 폴더 아래 모든 파일을 뒤져서 그 단어가 있는 줄+파일명 출력

자주 쓰는 옵션은 셋 — -n(줄 번호), -i(대소문자 무시), -r(폴더 전체 뒤지기). 코드 폴더에서 "이 함수 어디서 쓰지?" 할 때 grep -rn "함수이름" .이면 끝납니다. 6편의 find가 "파일 이름으로 찾기"였다면, grep은 "파일 내용으로 찾기"예요. 둘 다 알면 무적.

세고·정렬하고 — wc · sort · uniq, 그리고 파이프(|) 맛보기

마지막 세 개는 "텍스트를 가공하는" 도구입니다. 그리고 여기서 리눅스의 진짜 무기 — 파이프(|) — 를 살짝 보여드릴게요. 파이프는 "왼쪽 명령의 출력을 오른쪽 명령의 입력으로 넘긴다"는 뜻입니다.

$ wc -l fruits.txt 7 fruits.txt ← -l: 줄 수 세기 (wc는 글자/단어/줄 수 세는 도구) $ sort fruits.txt 딸기 / 바나나 / 바나나 / 사과 / 사과 / 사과 / 포도 ← 가나다순 정렬해서 출력 (원본은 안 바뀜) $ sort fruits.txt | uniq 딸기 / 바나나 / 사과 / 포도 ← 정렬한 걸 uniq에 넘김 → '연달아 같은 줄'을 하나로. 중복 제거 $ sort fruits.txt | uniq -c 1 딸기 2 바나나 3 사과 1 포도 ← uniq -c: 각 줄이 몇 번 나왔는지 세기. "사과가 3번" — 한 줄로 통계가 나옴

마지막 한 줄(sort fruits.txt | uniq -c) 보세요 — 작은 명령 두 개를 파이프로 이어 붙였더니 "과일별 개수"가 나왔습니다. 이게 리눅스 명령줄의 철학이에요: 작은 도구를 파이프로 조립해 큰 일을 한다. grep ... | wc -l(특정 단어가 든 줄이 몇 개?), cat 로그 | grep ERROR | tail(로그에서 에러만 골라 최근 것) 같은 조합이 일상이 됩니다. 파이프와 리다이렉션을 제대로 다루는 건 시리즈 12편에서요. 오늘은 "|로 명령을 이어 붙일 수 있다"는 감만.

팁: less·man 안에서 길을 잃으면 항상 q로 나옵니다. tail -f처럼 안 끝나는 명령은 Ctrl+C. 그리고 명령어 옵션이 헷갈리면 grep --help·man sort — 4편에서 배운 내장 설명서. 인터넷보다 빠를 때가 많아요.

정리 — 다음은 직접 고치기(nano)

오늘 손에 넣은 것: cat/less/head/tail(내용 보기), tail -f(실시간 로그), grep(내용으로 찾기, 옵션 -n -i -r), wc -l/sort/uniq -c(세고 정렬), 그리고 파이프 |(작은 도구 조립). 전부 "보고 찾고 세는" 거였죠 — 파일을 망가뜨릴 일이 없는 것들.

이제 슬슬 파일을 직접 고쳐야 합니다. 설정 파일 한 줄 바꾸기 같은 거요. 다음 8편은 터미널 안에서 텍스트를 편집하는 가장 쉬운 도구 — nano입니다. (고수들이 쓰는 vim은 13편에서 따로.) nano만 알면 /etc/... 설정도 손볼 수 있어요.

시리즈 흐름

  1. 1~5편 입문 묶음 ✔   6편 — 파일 명령어(cp·mv·rm·find) ✔
  2. 7편 — 텍스트 명령어 (이 글) ✔
  3. 8편 — nano 편집기 (터미널에서 파일 고치기 — 가장 쉬운 길)
  4. 9편 — 권한과 chmod / 10편 — 사용자·그룹 / 11편 — apt / 12편 — 파이프와 리다이렉션 …

오늘 할 일: ~/linux-practice에서 fruits.txt 만들고, catless(q로 나오기) → grep 사과 fruits.txtsort fruits.txt | uniq -c를 순서대로 쳐보세요. 마지막 파이프 한 줄에서 "오"가 나오면 성공입니다. 8편에서 만나요. (더 깊이는 우분투 공식 명령줄 튜토리얼도 함께.)

우분투·리눅스 입문 시리즈

보고 찾을 줄 알면, 다음은 고칠 차례. 8편 "nano 사용법"으로 이어집니다.

다음 편은 JUNAI 블로그에서 이어 보세요.

© 2026 JUNAI · 우분투·리눅스 입문 시리즈 7편 · 본 글은 2026년 5월 12일 기준으로 작성되었습니다.

© 2026 주나이테크(주) @JUNAITECH