CertNote/ 출퇴근 학습 노트
로드맵
KOEN
리눅스마스터 2급 · 2급리눅스마스터 2급
  • Week 1
    • 1.운영체제와 커널: 리눅스가 하는 일
    • 2.리눅스의 탄생: 유닉스에서 리누스까지
    • 3.자유 소프트웨어와 오픈소스: 라이선스가 정하는 것
    • 4.배포판: 커널과 도구를 하나로 묶어 파는 단위
    • 5.Week 1 종합 복습: 리눅스라는 이름의 정체
  • Week 2
  • Week 3
    • 1.셸 첫걸음: 명령 한 줄을 읽는 법
    • 2.디렉터리와 파일 다루기
    • 3.내용 보기와 찾기
    • 4.사용자와 계정 관리
    • 5.Week 3 종합 복습: 명령어 한 장 정리
  • Week 4
  • Week 5
  • Week 6
  • Week 7
  • Week 8
  • Week 9
  • Week 10
  • Week 11
리눅스마스터 1급 · 1급리눅스마스터 1급
합격 후기

© CertNote · 주간랩스

  • 소개
  • 수정 기록
  • 문의
  • 이용약관
  • 개인정보처리방침
← 리눅스마스터 2급/Week 3/Day 3

기준: 리눅스마스터 2급 출제 기준·오류 제보

리눅스마스터 2급· AssociateWeek 3 · Day 3읽기 약 8분
핵심 정리
  • 내용을 보는 네 가지: cat(통째로) · less(넘겨가며) · head(앞) · tail(뒤).
  • tail -f 는 파일에 새로 붙는 내용을 실시간으로 따라간다. 로그를 볼 때 쓴다.
  • find는 파일을 찾고, grep은 파일 안의 문자열을 찾는다. 이 구분이 시험 포인트다.
  • find는 경로부터 쓴다 — find /etc -name "*.conf".
  • wc는 줄·단어·글자 수를 센다. wc -l이 줄 수다.

Day 3 - 내용 보기와 찾기

파일 내용 보기

명령하는 일언제
cat 파일내용을 전부 출력짧은 파일
less 파일한 화면씩 넘겨가며긴 파일
more 파일less 의 옛 버전. 뒤로 못 감
head 파일앞에서 10줄파일 첫머리 확인
tail 파일뒤에서 10줄최근 로그 확인
wc 파일줄·단어·글자 수분량 세기
head -n 5 a.txt      # 앞 5줄
tail -n 20 a.txt     # 뒤 20줄
tail -f /var/log/messages   # 실시간으로 따라가기
wc -l a.txt          # 줄 수만
  • head와 tail의 기본값은 10줄이다. 개수를 바꾸려면 -n을 쓴다.
  • tail -f 의 f는 follow다. 파일이 계속 자라는 로그를 지켜볼 때 쓰고, Ctrl+C로 빠져나온다.

head · tail 의 줄 수 지정, 네 가지 모양

쓰는 법뜻
head -n 5 / head -5앞 5줄
tail -n 5 / tail -5뒤 5줄
tail -n +55번째 줄부터 끝까지 (+가 붙으면 시작 위치)
head -n -5마지막 5줄을 뺀 나머지 전부
head -c 100줄이 아니라 앞 100바이트
head -n 20 a.txt | tail -n 5     # 16~20번째 줄만 (앞 20줄 중 뒤 5줄)
tail -n +2 list.csv              # 첫 줄(제목 줄)만 빼고 전부
tail -f -n 50 /var/log/messages  # 뒤 50줄을 보여 준 뒤 계속 따라간다
  • 파일 가운데 구간을 뽑을 때는 head와 tail을 파이프로 잇는다. 위 첫 줄이 그 전형이다.
  • tail -f는 파일을 고치는 명령이 아니다. 읽기만 하면서 끝에 새로 붙는 줄을 화면에 내보낼 뿐이다.

more 와 less 의 차이

구분moreless
이동기본적으로 앞으로 넘기며 본다앞뒤로 자유롭게 움직인다
끝에 닿으면자동으로 종료된다q를 누를 때까지 남아 있다
검색/단어/단어(아래로) · ?단어(위로)
  • "한 화면씩 보여 주는 명령"으로 묶이지만, 뒤로 되돌아가며 볼 수 있는 쪽이 less 라는 점으로 가른다. 구현에 따라 more도 파일을 볼 때는 b로 한 화면 되돌아갈 수 있지만 시험에서는 이 대비로 묻는다.
  • 둘 다 파이프 뒤에 붙여 긴 출력을 끊어 보는 데 쓴다 — ls -l /etc | less.

wc 출력 읽기

$ wc /etc/passwd
  42   78 2104 /etc/passwd
   │    │    │
   │    │    └── 바이트 수
   │    └─────── 단어 수
   └──────────── 줄 수
옵션세는 것
-l줄(line) 수
-w단어(word) 수
-c바이트 수
-m문자 수
  • 옵션 없이 쓰면 줄 → 단어 → 바이트 순으로 세 숫자가 나온다. 순서가 문항으로 나온다.
  • 영문만 있는 파일은 -c와 -m이 같지만, 한글이 섞이면 달라진다. UTF-8에서 한글 한 글자는 3바이트이기 때문이다.
  • /etc/passwd는 한 줄이 계정 하나이므로 wc -l /etc/passwd가 곧 계정 수다.

less 안에서

키하는 일
Space / b다음 / 이전 화면
/단어앞으로 검색
n / N다음 / 이전 검색 결과
G / g맨 끝 / 맨 앞
q나가기
  • man 페이지도 사실 less로 보여주는 것이라 조작법이 같다.

cat의 다른 쓰임

cat a.txt b.txt          # 두 파일을 이어서 출력 (concatenate)
cat a.txt > b.txt        # 내용을 b.txt 에 저장 (덮어쓰기)
cat -n a.txt             # 줄 번호를 붙여 출력
  • cat은 concatenate(이어붙이다) 의 줄임말이다. 원래 여러 파일을 이어 출력하는 명령이다.
cat > memo.txt           # 키보드로 친 내용을 파일로 저장. Ctrl+D 로 끝낸다
cat a.txt >> b.txt       # b.txt 끝에 이어 붙인다 (기존 내용 유지)
cat -b a.txt             # 빈 줄을 뺀 줄에만 번호
  • >는 덮어쓰고 >>는 뒤에 덧붙인다. cat a.txt > a.txt처럼 같은 파일을 입력과 출력에 동시에 쓰면 내용이 비워지므로 주의한다.
  • 인자 없이 cat만 치면 키보드 입력을 기다린다. 멈춘 것이 아니니 Ctrl+D(입력 끝)로 빠져나온다.

파일 찾기 — find

   find  /etc  -name "*.conf"
    │      │        │
    │      │        └── 조건
    │      └─────────── 어디서부터 찾을지 (필수)
    └────────────────── 명령
조건뜻
-name "패턴"이름으로 (대소문자 구분)
-iname이름으로 (대소문자 무시)
-type f / -type d파일만 / 디렉터리만
-size +10M10MB보다 큰
-user 이름소유자로
-mtime -7최근 7일 안에 수정된
find /home -name "*.txt"        # 이름으로
find / -type d -name "log"      # 디렉터리만
find . -size +100M              # 100MB 넘는 것
find /var -mtime -1             # 하루 안에 바뀐 것
  • 경로를 반드시 먼저 쓴다. find -name "*.txt" /home 은 동작하지 않는다.
  • 패턴은 따옴표로 감싼다. 감싸지 않으면 셸이 *.txt를 현재 디렉터리의 파일 이름들로 먼저 바꿔 버려, find가 엉뚱한 인자를 받는다.

숫자 앞의 + 와 -

-size, -mtime처럼 숫자를 받는 조건은 부호가 뜻을 바꾼다.

표기뜻예
+nn보다 크다 / 더 오래됐다-size +10M 10MB 초과, -mtime +7 7일보다 더 전에 수정
-nn보다 작다 / 더 최근이다-size -10k 10KB 미만, -mtime -7 최근 7일 안에 수정
n정확히 n-mtime 7 딱 7일 전
시간 조건기준
-mtime내용 수정 시각 (일 단위)
-atime마지막 접근 시각
-ctime속성 변경 시각
-mmin수정 시각을 분 단위로
  • -size의 단위는 c 바이트 · k KB · M MB · G GB 다. 대소문자를 구분하므로 -size +10m은 오류다.

조건을 엮고, 찾은 것에 명령 실행하기

find /home -name "*.log" -size +1M       # 두 조건을 나란히 쓰면 AND
find /etc -name "*.conf" -o -name "*.cfg" # -o 는 OR
find /tmp ! -user root                    # ! 는 NOT — root 소유가 아닌 것
find /var/log -type f -empty              # 크기가 0인 파일
find /usr -perm 644                       # 권한이 정확히 644인 것
find . -maxdepth 1 -type d                # 한 단계까지만 내려가서
find /tmp -name "*.tmp" -mtime +7 -exec rm {} \;
#                                  │      │  │
#                                  │      │  └── -exec 의 끝 표시 (\ 로 ; 를 보호)
#                                  │      └───── 찾은 파일 이름이 들어갈 자리
#                                  └──────────── 찾은 파일마다 이 명령을 실행
  • {}에는 찾은 파일 이름이 하나씩 들어가고, \;으로 명령의 끝을 알린다. 이 둘이 -exec의 고정 짝이다.
  • 지우는 명령 앞에서는 -exec 없이 먼저 돌려 무엇이 걸리는지 확인하는 것이 안전하다.
  • find는 디스크를 실제로 뒤지므로 느리다. 이름만 빠르게 찾으려면 미리 만든 색인을 쓰는 locate 가 있다(updatedb로 색인 갱신).
구분findlocate
방식디스크를 직접 탐색미리 만든 DB 검색
속도느리다빠르다
최신성항상 정확색인 갱신 전 파일은 못 찾음
조건이름·크기·시간·소유자·권한 등주로 이름(경로)
$ touch /tmp/newfile.txt
$ locate newfile.txt
$ sudo updatedb
$ locate newfile.txt
/tmp/newfile.txt
  • 방금 만든 파일이 locate에 안 잡히는 것은 고장이 아니다. 색인은 보통 하루 한 번 자동으로 갱신되며, 당장 반영하려면 root로 updatedb를 실행한다.

"찾는다"는 명령이 더 있어 문항에서 섞여 나온다. 무엇을 찾는지로 가른다.

명령찾는 대상찾는 곳
find조건에 맞는 파일·디렉터리지정한 경로 아래 전부
locate이름에 문자열이 든 파일미리 만든 색인
which명령의 실행 파일 위치PATH에 적힌 디렉터리
whereis명령의 실행 파일 + 매뉴얼·소스 위치정해진 표준 디렉터리
grep파일 안의 줄지정한 파일의 내용
$ whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz

내용 찾기 — grep

grep "root" /etc/passwd          # 그 단어가 든 줄을 출력
grep -i "ERROR" app.log          # 대소문자 무시
grep -n "root" /etc/passwd       # 줄 번호와 함께
grep -v "root" /etc/passwd       # 그 단어가 없는 줄만 (반대)
grep -r "TODO" /home/user        # 하위 디렉터리까지 재귀
grep -c "root" /etc/passwd       # 개수만
옵션뜻
-i대소문자 무시 (ignore case)
-n줄 번호 표시
-v일치하지 않는 줄 (invert)
-r하위 디렉터리까지
-c일치한 줄의 개수
-w단어 단위로 일치
-l일치한 줄 대신 파일 이름만
-E확장 정규 표현식 사용 (egrep과 같다)
$ grep -n "root" /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin
$ grep -c "root" /etc/passwd
2
$ grep -w "root" /etc/passwd | wc -l
2
$ grep "root" /etc/passwd /etc/group
/etc/passwd:root:x:0:0:root:/root:/bin/bash
/etc/passwd:operator:x:11:0:operator:/root:/sbin/nologin
/etc/group:root:x:0:
  • grep은 줄 단위로 일한다. 일치하는 글자만이 아니라 그 글자가 든 줄 전체를 출력한다.
  • -c는 일치한 "줄"의 수다. 한 줄에 root가 세 번 나와도 1로 센다.
  • 파일을 둘 이상 주면 줄 앞에 파일 이름:이 붙는다.
  • 대문자 옵션과 헷갈리지 않는다 — -i는 대소문자 무시, -l은 파일 이름만, -v는 반대다.

패턴에 쓰는 기호

grep의 패턴은 단순 문자열이 아니라 정규 표현식이다. 줄의 어느 위치인지를 지정할 수 있다.

기호뜻예
^줄의 시작grep "^root" /etc/passwd — root로 시작하는 줄
$줄의 끝grep "bash$" /etc/passwd — bash로 끝나는 줄
.아무 한 글자grep "r..t" — root, r00t
[ ]괄호 안 글자 중 하나grep "[0-9]" — 숫자가 든 줄
^$빈 줄grep -v "^$" a.conf — 빈 줄을 뺀 나머지
grep "bash$" /etc/passwd | wc -l     # 로그인 셸이 bash 인 계정 수
grep -v "^#" /etc/fstab              # 주석(#으로 시작)을 뺀 줄만
grep -E "error|fail" app.log         # error 또는 fail 이 든 줄

⚠️ 와일드카드의 *와 정규 표현식의 *는 다르다. 파일 이름에서 *는 "아무 문자열"이지만, grep 패턴에서 *는 "바로 앞 글자의 0번 이상 반복"이다. find -name의 패턴은 와일드카드, grep의 패턴은 정규 표현식이다.

find vs grep — 이름으로 파일을 찾으면 find, 파일 안의 내용을 찾으면 grep 이다. 문항에서 "특정 문자열이 포함된 줄"이라고 하면 grep이다.

이어 붙이기 — 파이프

ls -l | grep ".txt"          # ls 결과에서 .txt 만
cat a.txt | wc -l            # a.txt 의 줄 수
ps -ef | grep httpd          # 실행 중인 프로세스 중 httpd
grep "ERROR" app.log | head  # 오류 줄 중 앞 10개
  • |(파이프) 는 앞 명령의 출력을 뒤 명령의 입력으로 넘긴다.
  • 명령 하나하나는 단순하지만 이어 붙이면 강력해진다 — 유닉스의 설계 철학이다.
  • |는 명령으로, >는 파일로 보낸다. ls | wc -l은 wc라는 명령에 넘기는 것이고, ls > wc는 wc라는 파일을 만들어 버린다.
  • 파이프는 몇 개든 이을 수 있다 — cat /etc/passwd | grep bash | wc -l.
$ wc -l /etc/passwd
42 /etc/passwd
$ cat /etc/passwd | wc -l
42
  • 파일을 인자로 주면 이름이 함께 나오고, 파이프로 받으면 숫자만 나온다. wc가 파일 이름을 모른 채 내용만 넘겨받았기 때문이다.

내일은 시스템을 쓰는 사람, 즉 사용자와 계정을 다루는 명령을 익힌다.

📖 용어

  • cat : 파일 내용을 이어서 출력하는 명령. concatenate의 줄임말.
  • less : 긴 파일을 한 화면씩 넘겨가며 보는 페이저. man도 이것으로 표시된다.
  • tail -f : 파일에 새로 추가되는 내용을 실시간으로 따라 출력하는 옵션.
  • find : 조건에 맞는 파일 자체를 디스크에서 찾는 명령.
  • grep : 파일 안에서 문자열이 든 줄을 찾는 명령.
  • locate : 미리 만들어 둔 색인에서 파일 이름을 빠르게 찾는 명령.
  • 파이프(|) : 앞 명령의 출력을 뒤 명령의 입력으로 연결하는 기호.
  • wc : 줄·단어·문자 수를 세는 명령. -l은 줄 수.

📝 연습 문제

선택지를 클릭하면 정답·해설이 펼쳐집니다.

문제 1

다음 중 파일에 새로 기록되는 내용을 실시간으로 계속 확인할 때 사용하는 명령으로 알맞은 것은?

문제 2

다음 중 /etc 디렉터리 아래에서 확장자가 .conf인 파일을 찾는 명령으로 알맞은 것은?

문제 3

다음 중 파일 안에서 특정 문자열이 포함된 줄을 찾는 명령으로 알맞은 것은?

문제 4

다음 중 grep -v "root" /etc/passwd 명령의 결과로 알맞은 것은?

문제 5

다음 중 head와 tail 명령이 옵션 없이 기본으로 출력하는 줄 수로 알맞은 것은?

이전디렉터리와 파일 다루기Week 3 · Day 2다음 사용자와 계정 관리Week 3 · Day 4

참고 공식 자료

  • 리눅스마스터 2급 공식 출제 기준(새 탭에서 열림)

이 페이지

  • 파일 내용 보기
  • head · tail 의 줄 수 지정, 네 가지 모양
  • more 와 less 의 차이
  • wc 출력 읽기
  • less` 안에서
  • cat`의 다른 쓰임
  • 파일 찾기 — find
  • 숫자 앞의 `+` 와 `-`
  • 조건을 엮고, 찾은 것에 명령 실행하기
  • 내용 찾기 — grep
  • 패턴에 쓰는 기호
  • 이어 붙이기 — 파이프
  • 용어
  • 연습 문제