- 내용을 보는 네 가지:
cat(통째로) ·less(넘겨가며) ·head(앞) ·tail(뒤). tail -f는 파일에 새로 붙는 내용을 실시간으로 따라간다. 로그를 볼 때 쓴다.find는 파일을 찾고,grep은 파일 안의 문자열을 찾는다. 이 구분이 시험 포인트다.find는 경로부터 쓴다 —find /etc -name "*.conf".wc는 줄·단어·글자 수를 센다.wc -l이 줄 수다.
기준: 리눅스마스터 2급 출제 기준오류 제보
cat(통째로) · less(넘겨가며) · head(앞) · tail(뒤).tail -f 는 파일에 새로 붙는 내용을 실시간으로 따라간다. 로그를 볼 때 쓴다.find는 파일을 찾고, grep은 파일 안의 문자열을 찾는다. 이 구분이 시험 포인트다.find는 경로부터 쓴다 — find /etc -name "*.conf".wc는 줄·단어·글자 수를 센다. wc -l이 줄 수다.| 명령 | 하는 일 | 언제 |
|---|---|---|
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 -n 5 / head -5 | 앞 5줄 |
tail -n 5 / tail -5 | 뒤 5줄 |
tail -n +5 | 5번째 줄부터 끝까지 (+가 붙으면 시작 위치) |
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 |
|---|---|---|
| 이동 | 기본적으로 앞으로 넘기며 본다 | 앞뒤로 자유롭게 움직인다 |
| 끝에 닿으면 | 자동으로 종료된다 | q를 누를 때까지 남아 있다 |
| 검색 | /단어 | /단어(아래로) · ?단어(위로) |
less 라는 점으로 가른다. 구현에 따라 more도 파일을 볼 때는 b로 한 화면 되돌아갈 수 있지만 시험에서는 이 대비로 묻는다.ls -l /etc | less.$ 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 /etc -name "*.conf"
│ │ │
│ │ └── 조건
│ └─────────── 어디서부터 찾을지 (필수)
└────────────────── 명령| 조건 | 뜻 |
|---|---|
-name "패턴" | 이름으로 (대소문자 구분) |
-iname | 이름으로 (대소문자 무시) |
-type f / -type d | 파일만 / 디렉터리만 |
-size +10M | 10MB보다 큰 |
-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처럼 숫자를 받는 조건은 부호가 뜻을 바꾼다.
| 표기 | 뜻 | 예 |
|---|---|---|
+n | n보다 크다 / 더 오래됐다 | -size +10M 10MB 초과, -mtime +7 7일보다 더 전에 수정 |
-n | n보다 작다 / 더 최근이다 | -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로 색인 갱신).| 구분 | find | locate |
|---|---|---|
| 방식 | 디스크를 직접 탐색 | 미리 만든 DB 검색 |
| 속도 | 느리다 | 빠르다 |
| 최신성 | 항상 정확 | 색인 갱신 전 파일은 못 찾음 |
| 조건 | 이름·크기·시간·소유자·권한 등 | 주로 이름(경로) |
$ touch /tmp/newfile.txt
$ locate newfile.txt
$ sudo updatedb
$ locate newfile.txt
/tmp/newfile.txtlocate에 안 잡히는 것은 고장이 아니다. 색인은 보통 하루 한 번 자동으로 갱신되며, 당장 반영하려면 root로 updatedb를 실행한다."찾는다"는 명령이 더 있어 문항에서 섞여 나온다. 무엇을 찾는지로 가른다.
| 명령 | 찾는 대상 | 찾는 곳 |
|---|---|---|
find | 조건에 맞는 파일·디렉터리 | 지정한 경로 아래 전부 |
locate | 이름에 문자열이 든 파일 | 미리 만든 색인 |
which | 명령의 실행 파일 위치 | PATH에 적힌 디렉터리 |
whereis | 명령의 실행 파일 + 매뉴얼·소스 위치 | 정해진 표준 디렉터리 |
grep | 파일 안의 줄 | 지정한 파일의 내용 |
$ whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gzgrep "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의 패턴은 정규 표현식이다.
findvsgrep— 이름으로 파일을 찾으면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
42wc가 파일 이름을 모른 채 내용만 넘겨받았기 때문이다.내일은 시스템을 쓰는 사람, 즉 사용자와 계정을 다루는 명령을 익힌다.
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 명령이 옵션 없이 기본으로 출력하는 줄 수로 알맞은 것은?