cat 은 작은 파일을 그대로 출력합니다. 옵션 둘이 진단에 유용합니다.
cat -n conf.txt # 줄 번호
cat -A conf.txt # 탭은 ^I, 줄 끝은 $, CR 은 ^M
nl -ba conf.txt # 빈 줄까지 번호cat -A 는 "분명 같은데 왜 다르지" 를 해결합니다. 보이지 않는 탭, 줄 끝 공백, Windows 의 ^M 이 드러납니다.
less 파일 로 열면 화면 단위로 보여 주고 키로 움직입니다. more 는 아래로만 가는 옛 도구라 less 만 씁니다.
| 키 | 동작 |
|---|---|
| Space / b | 한 화면 아래 / 위 |
| G / g | 끝 / 처음 |
/단어 |
아래로 검색 |
| n / N | 다음 / 이전 일치 |
| F | 파일 끝을 따라가기 |
| q | 나가기 |
less +F app.log 로 열면 tail -f 처럼 따라가다 Ctrl+C 로 멈춰 검색할 수 있습니다. less -N 은 줄 번호를 켭니다. 파이프 끝에 | less 를 붙여 긴 출력을 넘겨 봅니다.
| 옵션 | 뜻 |
|---|---|
-n |
숫자로 비교 |
-r |
내림차순 |
-k2 |
2번째 열 기준 |
-t, |
열 구분자 |
-u |
중복 제거 |
-f |
대소문자 무시 |
-h |
K·M·G 단위 |
-n 이 없으면 10 이 2 보다 앞에 옵니다. 사전순으로 1 이 2 보다 작기 때문입니다. 열 기준 정렬은 -k2 -n 처럼 함께 씁니다.
uniq 는 바로 옆 줄이 같을 때만 합칩니다. 그래서 항상 sort 뒤에 옵니다.
sort names.txt | uniq # 중복 제거
sort names.txt | uniq -c # 개수 붙여서
sort names.txt | uniq -d # 중복된 것만
sort names.txt | uniq -u # 한 번만 나온 것만sort | uniq -c | sort -rn 이 "무엇이 가장 많이 나오나" 의 고정 패턴입니다. 로그의 IP, 에러 종류, 호출 경로를 셀 때 그대로 씁니다.
cut -d' ' -f2 fruits.txt # 공백 구분 2번째 열
cut -d, -f1,3 data.csv # 1·3 열
cut -c1-3 fruits.txt # 1~3번째 글자
paste a.txt b.txt # 옆으로 붙이기
paste -sd+ nums.txt | bc # 3+10+7 을 만들어 계산cut 은 구분자 하나만 인식해 공백이 여러 개면 열이 어긋납니다. 그럴 때는 운영 묶음 02 의 awk '{print $2}' 가 낫습니다. column -t 는 열을 맞춰 보기 좋게 출력합니다.
두 파일이 어디가 다른지 봅니다. 설정 파일 비교에 매일 씁니다.
diff a.txt b.txt # 5c5 형식
diff -u a.txt b.txt # -/+ 통합 형식, git 과 같음
diff -q a.txt b.txt # 다른지만 (종료 코드 1)
diff -r dir1 dir2 # 폴더끼리
comm -12 <(sort a) <(sort b) # 양쪽에 있는 줄만5c5 는 5번 줄이 바뀌었다는 뜻이고 < 가 첫 파일, > 가 둘째 파일입니다. -u 형식이 읽기 쉬워 실무에서는 대부분 -u 를 씁니다.
글자 단위로 바꾸거나 지웁니다. 줄 단위 도구인 sed 보다 단순합니다.
tr 'a-z' 'A-Z' # 대문자로
tr ',' '\n' # 쉼표를 줄바꿈으로
tr -d '\r' # CR 삭제
tr -s ' ' # 연속 공백을 하나로tr -d '\r' 이 Windows 에서 만든 파일의 ^M 을 없애는 가장 짧은 방법입니다. dos2unix 가 없는 서버에서 씁니다.
file 이 인코딩과 줄 끝을 알려 줍니다. 한글이 깨지거나 스크립트가 첫 줄부터 실패하면 이것부터 봅니다.
file ko.txt # UTF-8 Unicode text
file win.txt # ASCII text, with CRLF line terminators
sed -i 's/\r$//' win.txt # CRLF -> LF
iconv -f EUC-KR -t UTF-8 old.txt > new.txt # 인코딩 변환서버는 UTF-8 이 기본입니다. 옛 시스템에서 온 EUC-KR 파일은 iconv 로 바꾸고, -c 를 붙이면 변환 못 하는 글자를 건너뜁니다.
vi 는 명령 모드와 입력 모드가 있습니다. 열면 명령 모드이고, i 를 누르면 입력 모드, Esc 로 다시 명령 모드입니다.
| 상황 | 키 |
|---|---|
| 글자 입력 시작 | i |
| 입력 끝 | Esc |
| 저장 | :w |
| 나가기 | :q |
| 저장 후 나가기 | :wq |
| 저장 안 하고 나가기 | :q! |
: 로 시작하는 것은 명령 모드에서 화면 맨 아래에 치는 명령입니다. 막혔을 때는 Esc 를 두 번 누르고 :q! 를 치면 어디서든 나옵니다.
| 키 | 동작 |
|---|---|
dd |
줄 삭제 |
yy |
줄 복사 |
p |
붙여넣기 |
u |
되돌리기 |
x |
글자 삭제 |
o |
아래 새 줄에서 입력 |
A |
줄 끝에서 입력 |
5dd |
5줄 삭제 |
숫자를 앞에 붙이면 반복입니다. dd 로 지운 줄은 p 로 다른 곳에 붙일 수 있어 잘라내기가 됩니다.
| 키 | 동작 |
|---|---|
gg / G |
처음 / 끝 |
:10 |
10번 줄로 |
/단어 |
검색, n 다음 |
:set nu |
줄 번호 표시 |
:%s/old/new/g |
전체 치환 |
:noh |
검색 강조 끄기 |
:%s/old/new/g 는 운영 묶음 02 의 sed s///g 와 같은 문법입니다. % 가 전체 범위, g 가 줄 안 전부입니다. :5,10s/a/b/ 처럼 줄 범위를 줄 수도 있습니다.
nano 는 화면 아래에 키가 표시되는 쉬운 편집기입니다. 있으면 초보자에게 좋지만 최소 설치 서버에는 없는 경우가 많습니다.
nano conf.txt # Ctrl+O 저장, Ctrl+X 나가기
EDITOR=vi crontab -e # 다른 도구가 부르는 편집기 지정vi 는 모든 리눅스에 있습니다. nano 가 편해도 vi 의 열 개 키는 알아 둬야 낯선 서버에서 막히지 않습니다.