1) 학습 요약표
학습내용 | 설명 |
파일 출력 | cat, more(/검색, n, -N), less(/검색, n, -N) |
부분 출력 | head(-n), tail(-n, -f, -F 로그 실시간/교체 추적) |
단순 출력/시간 | echo, date |
텍스트 필터링 | grep(-i, -v, -n, -E 정규식, -w), cut(-d, -f), paste, wc(-l), sort(-r, -n), uniq(-c) |
로그 분석 활용 | tail -F와 grep, wc, cut, paste 조합으로 실시간 분석 |
2) 이론 설명
(1) cat – 파일 내용 출력 및 연결
- 기능: 파일의 내용을 표준 출력(터미널)에 출력하거나, 여러 파일을 연결해 출력.
- 동작 원리: 파일 내용을 읽어 버퍼에 저장한 후 표준 출력으로 보냄.
- 주요 옵션: 없음 (다른 명령어와 파이프(|)로 결합해 활용)
예제:
cat /var/log/syslog | grep -i error
cat part1.txt part2.txt
cat part1.txt part2.txt > merged.txt
- /var/log/syslog 파일 내용을 출력하고, 대소문자 구분 없이(error/ERROR) 검색.
- 두 파일을 이어서 한 번에 출력
- 여러 파일을 하나로 합쳐서 새로운 파일로 저장
해설:
- cat /var/log/syslog: 시스템 로그 파일 출력 / | grep -i error: 출력 결과 중 error 키워드 필터링.
- part1.txt 내용과 part2.txt 내용을 순서대로 이어서 터미널에 출력.
- part1.txt와 part2.txt를 이어 붙여 merged.txt라는 새 파일 생성, 기존 merged.txt가 있으면 덮어씀.
(2) more & less – 페이지 단위 출력
- 기능: 긴 파일을 페이지 단위로 나눠서 출력, 검색(/), 다음 검색(n), 줄 번호(-N) 지원.
- 차이점: less는 위아래 스크롤 가능, more는 아래로만.
예제:
less -N /etc/passwd
- /etc/passwd를 줄 번호와 함께 열고 /root 검색 가능.
- /error 입력 후 Enter → 첫 번째 "error"로 이동.
- n → 다음 "error"로 이동.
- N → 이전 "error"로 이동.
- q → 종료.
(3) head & tail – 특정 라인 출력
- 기능: 파일의 앞부분 또는 뒷부분을 지정한 라인 수 만큼 출력.
- 주요 옵션:
- -n <숫자>: 출력할 줄 수 지정.
- tail -f: 파일이 추가되는 내용을 실시간 출력.
- tail -F: 로그 파일이 교체(rotated)되어도 추적 유지.
- 두 옵션 모두 종료할 땐 Ctrl + C
예제:
tail -F /var/log/auth.log | grep -i fail
head -n 3 /etc/passwd /etc/group
- 인증 로그를 실시간 추적하며, fail(실패) 키워드 감시.
- 여러 파일 한꺼번에 확인
(4) echo & date – 단순 출력과 시간 확인
- echo: 문자열 출력, 환경변수 출력.
- -e : 기본적으로 echo는 문자열을 있는 그대로 출력.
그런데 -e 옵션을 붙이면, 문자열 안에 있는 이스케이프 문자들(\n, \t, \\, \a 등)을 특수한 의미로 처리. - date: 현재 시스템 시간 출력.
예제:
echo "현재 시간: $(date)"
- 현재 시간을 포함한 문자열 출력.
(5) grep – 패턴 검색
- 기능: 파일에서 특정 문자열 또는 패턴을 검색.
- 주요 옵션:
- -i: 대소문자 무시.
- -v: 패턴 제외.
- -n: 줄 번호 출력.
- -E: 정규식 사용.
- -w: 단어 단위 매칭.
예제:
grep -i error /var/log/syslog
grep -v "127.0.0.1" access.log
- syslog에서 대소문자 구분 없이 "error"가 들어간 줄만 출력.
- access.log에서 127.0.0.1이 포함된 줄을 제외하고 나머지만 출력.
(6) cut & paste – 열 단위 처리
cut:
- 기능 : 파일이나 입력 스트림을 구분자(-d)로 나눠서, 특정 필드(-f)만 추출. 주로 CSV, 로그, /etc/passwd 같은 구분자 기반 파일에서 특정 열만 뽑을 때 사용.
# /etc/passwd에서 사용자명과 홈 디렉토리만 추출
cut -d: -f1,6 /etc/passwd
- -d: → 콜론(:)을 구분자로 사용
- -f1,6 → 첫 번째 필드(사용자명)와 여섯 번째 필드(홈 디렉토리) 출력
paste:
- 기능: 여러 파일을 가로로(열 단위로) 병합하거나, 입력 스트림을 한 줄로 합쳐서 출력. 간단한 데이터 조합, 컬럼 합치기 등에 활용.
paste -d "," file1.txt file2.txt
paste -s file.txt
- -d 구분자 : 기본은 탭(tab)으로 열을 구분하지만, 원하는 구분자로 바꿀 수 있다.
- -s : 입력된 모든 라인을 세로(행 단위)로 이어붙이지 않고, 가로(한 줄)로 이어붙임. → file.txt의 모든 줄을 한 줄로 합쳐 출력.
(7) wc, sort, uniq – 데이터 카운트 및 정렬
wc -l 기능: 표준 입력 또는 파일의 총 줄(line) 수를 계산.
예제:
wc -l /var/log/syslog
- syslog 파일의 총 줄(line) 개수를 출력.
sort 기능: 데이터를 숫자 기준으로 내림차순(-r) 정렬, -n은 숫자 값 기준으로 비교.
예제:
cat scores.txt | sort -r -n
- -n: 숫자 값으로 정렬 (문자열이 아닌 숫자 기준)
- -r: 내림차순(큰 값 → 작은 값)
uniq 기능: 연속된 중복 항목을 하나로 묶어 출력하며, 각 항목의 개수를 앞에 표시.
예제:
cat access.log | cut -d' ' -f1 | sort | uniq -c | sort -r -n
- -c : 각 줄이 몇 번 나왔는지 횟수를 세어 앞에 표시.
- -d : 중복된 줄만 출력 (중복 횟수가 2번 이상인 줄).
- -u : 한 번만 등장한 줄(고유한 줄)만 출력.
3) 기본 실습 과제
문제 1. 로그 분석 상황 만들기
- /tmp/log_practice 디렉토리를 만들고 이동하라.
- echo와 date를 사용하여 log1.txt, log2.txt에 5줄씩 임의의 로그와 현재 시간을 기록하라.
- 두 파일을 cat으로 합쳐 all.log로 저장하고, 합쳐진 줄 수를 확인하라.
문제 2. 페이지와 부분 출력 활용
- all.log 파일을 less로 열고 "error" 문자열을 검색 후 다음(n)/이전(N)으로 이동해본다.
- all.log 파일의 첫 3줄과 마지막 2줄을 각각 출력하라.
문제 3. 실시간 로그 모니터링
- 새로운 터미널에서 log3.txt를 만들고, 다른 터미널에서 tail -f로 추적하라.
- 첫 번째 터미널에서 echo를 사용해 log3.txt에 "warning"과 "ok" 메시지를 3번씩 기록하라.
- tail 모니터링 중 grep을 활용해 "warning"만 실시간으로 필터링하라.
문제 4. 텍스트 필터링과 데이터 가공
- all.log 파일에서 대소문자 구분 없이 "error"가 없는 줄만 출력하라.
- log1.txt와 log2.txt에서 1열과 3열을 cut으로 추출 후, paste로 하나의 CSV 형식으로 합쳐라.
문제 5. 데이터 집계 및 정렬 심화
- echo를 사용해 access_data.txt 파일을 만들고, 5개의 IP 주소와 각기 다른 점수를 공백으로 구분해 기록하라.
- echo를 사용해 score_data.txt 파일을 만들고, 5명의 이름과 점수를 공백으로 구분해 기록하라.
- access_data.txt에서 IP만 추출해 등장 횟수를 uniq로 세고 sort로 많이 나온 순으로 출력한 뒤 result_ips.txt로 저장하라.
- score_data.txt를 숫자 기준으로 큰 값부터 정렬해 result_scores.txt로 저장하라.
- 두 결과 파일의 줄 수를 wc로 각각 확인하라.
'리눅스 > 기초 학습' 카테고리의 다른 글
Day 5: 파일 검색, 백업 & 자원 확인 (1) | 2025.08.01 |
---|---|
Day 4: 권한 및 소유권 (파일/디렉토리 퍼미션 관리) (2) | 2025.07.30 |
Day 3: 사용자 및 그룹 관리 (2) | 2025.07.24 |
Day 1.5: 리눅스에서 자주 쓰지만 초보자가 놓치기 쉬운 개념들 (3) | 2025.07.20 |
Day 1: 셸 기본 & 파일 조작 (2) | 2025.07.19 |