리눅스 텍스트 편집 도구를 상징하는 여러 터미널 편집기 화면

리눅스에서 문서 파일을 수정하는 방법: cat부터 nano, vim, sed까지

리눅스를 처음 쓰면 의외로 자주 막히는 지점이 있다. 바로 “파일 하나 수정하려고 하는데 뭘 써야 하지?”라는 문제다. 윈도우에서는 메모장을 열면 되지만, 리눅스 서버에서는 그래픽 화면이 없을 때도 많고, SSH로 접속한 터미널 안에서 모든 일을 처리해야 할 때가 많다.

리눅스에서 문서를 수정하는 방법은 하나만 있는 것이 아니다. 파일을 보기만 할 때, 새 파일을 만들 때, 한두 줄을 추가할 때, 설정 파일을 안전하게 고칠 때, 여러 파일에서 특정 문자열을 한꺼번에 바꿀 때 쓰는 도구가 조금씩 다르다. 그래서 처음에는 명령어가 너무 많아 보이지만, 역할별로 나누면 훨씬 이해하기 쉽다.

리눅스 텍스트 편집 도구를 상징하는 여러 터미널 편집기 화면
리눅스에서 문서를 수정하는 방법은 하나가 아니라, 상황에 따라 여러 도구를 골라 쓰는 방식에 가깝습니다.

먼저 알아둘 것: 리눅스의 문서는 대부분 텍스트 파일이다

리눅스에서 설정 파일, 로그 파일, 스크립트 파일은 대부분 텍스트 파일이다. 예를 들어 웹서버 설정, 쉘 스크립트, cron 설정, hosts 파일, 환경 변수 파일 같은 것들이 모두 텍스트 기반이다. 그래서 텍스트 파일을 보고 수정하는 방법을 익히면 리눅스 관리의 절반은 훨씬 덜 무서워진다.

다만 문서를 수정하기 전에 항상 기억해야 할 원칙이 있다. 중요한 파일은 수정 전에 백업하고, 수정 후에는 문법 검사나 서비스 재시작 전 테스트를 해야 한다는 점이다.

cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
cp app.conf app.conf.$(date +%Y%m%d-%H%M%S).bak

처음에는 귀찮아 보여도 이 습관 하나가 장애를 줄인다. 특히 서버 설정 파일은 한 글자만 잘못 써도 서비스가 올라오지 않을 수 있다.

cat: 파일을 보는 명령어지만, 간단한 생성도 가능하다

cat은 원래 파일 내용을 출력하는 명령어다. 이름은 concatenate에서 왔고, 여러 파일을 이어서 보여주는 용도도 있다. 엄밀히 말하면 편집기는 아니지만, 리눅스에서 텍스트 파일을 다룰 때 가장 먼저 만나는 명령어다.

cat memo.txt
cat file1.txt file2.txt
cat /etc/os-release

짧은 파일을 확인할 때는 cat이 편하다. 하지만 로그처럼 긴 파일을 cat으로 열면 화면이 순식간에 지나가 버린다. 긴 파일은 뒤에서 설명할 less, tail을 쓰는 편이 좋다.

cat은 리다이렉션과 함께 쓰면 새 파일을 만들 수도 있다.

cat > memo.txt
첫 번째 줄
두 번째 줄
Ctrl + D

위 명령은 memo.txt를 새로 만든다. 입력을 마치려면 Ctrl + D를 누른다. 이미 같은 이름의 파일이 있으면 내용이 덮어써지므로 주의해야 한다.

cat >> memo.txt
추가할 줄
Ctrl + D

>>는 기존 파일 뒤에 내용을 추가한다. >는 덮어쓰기, >>는 이어쓰기라고 기억하면 된다.

터미널에서 파일을 보고 만들고 수정하는 흐름을 표현한 그림
간단한 파일 확인과 한두 줄 추가는 cat, redirection, tee만 알아도 처리할 수 있습니다.

less, head, tail: 수정 전 확인할 때 쓰는 명령어

파일을 수정하기 전에는 먼저 내용을 확인해야 한다. 이때 cat만 쓰기보다 파일 크기와 목적에 따라 다른 명령어를 쓰는 것이 좋다.

less /var/log/syslog
head -n 20 app.log
tail -n 50 app.log
tail -f app.log

less는 긴 파일을 페이지 단위로 볼 때 좋다. 방향키나 스페이스바로 이동하고, /검색어로 검색하고, q로 종료한다. head는 앞부분, tail은 뒷부분을 본다. tail -f는 로그 파일이 실시간으로 추가되는 모습을 볼 때 자주 쓴다.

echo와 printf: 한두 줄을 빠르게 쓰거나 추가하기

간단한 한 줄을 파일에 넣을 때는 echoprintf가 편하다. 작은 설정값, 임시 메모, 스크립트 한 줄을 만들 때 쓴다.

echo "hello linux" > memo.txt
echo "another line" >> memo.txt
printf "first line\nsecond line\n" > memo.txt

echo는 간단하지만 옵션과 쉘에 따라 동작이 조금씩 다를 수 있다. 줄바꿈이나 특수 문자를 정확히 다루고 싶으면 printf가 더 예측 가능하다.

tee: 관리자 권한 파일에 내용을 쓸 때 유용하다

리눅스 초보자가 자주 헷갈리는 부분이 sudo echo ... > file이다. 예를 들어 다음 명령은 기대와 다르게 실패할 수 있다.

sudo echo "127.0.0.1 test.local" >> /etc/hosts

이유는 echo만 sudo로 실행되고, >> 리다이렉션은 현재 쉘 권한으로 처리되기 때문이다. 이럴 때는 tee를 쓴다.

echo "127.0.0.1 test.local" | sudo tee -a /etc/hosts

tee는 입력받은 내용을 파일에 쓰면서 화면에도 보여준다. -a는 append, 즉 이어쓰기다. 관리자 권한 파일에 한두 줄을 추가할 때 매우 자주 쓰인다.

nano: 초보자에게 가장 편한 터미널 편집기

nano는 리눅스 초보자에게 가장 추천하기 쉬운 편집기다. 화면 아래에 단축키가 표시되고, 일반적인 메모장처럼 바로 입력하면 된다. 설정 파일을 직접 열어 고칠 때 부담이 적다.

nano memo.txt
sudo nano /etc/hosts
sudo nano /etc/nginx/sites-available/default

기본 조작은 이것만 기억해도 된다.

  • Ctrl + O: 저장
  • Enter: 파일명 확인
  • Ctrl + X: 종료
  • Ctrl + W: 검색

처음 서버 설정 파일을 고칠 때는 nano가 가장 안전하다. vim을 잘 모르는 상태에서 실수로 빠져나오지 못해 당황하는 일도 줄어든다.

노트북 화면에 코드 편집기가 열려 있고 책상 위에 노트와 키보드가 놓인 모습
nano는 쉽고, vim은 강력하며, sed와 perl은 반복 수정에 강합니다.

vi와 vim: 서버 어디에나 있는 강력한 편집기

vi 또는 vim은 리눅스 서버에서 거의 항상 만날 수 있는 편집기다. 처음에는 어렵다. 이유는 입력 모드와 명령 모드가 분리되어 있기 때문이다. 하지만 익숙해지면 빠르고 강력하다.

vi memo.txt
vim memo.txt
sudo vim /etc/ssh/sshd_config

vim에서 기본 흐름은 다음과 같다.

i        입력 모드로 전환
Esc      명령 모드로 돌아가기
:w       저장
:q       종료
:wq      저장하고 종료
:q!      저장하지 않고 강제 종료

검색과 치환도 자주 쓴다.

/server_name
n
:%s/old/new/g

/server_name은 검색, n은 다음 검색 결과로 이동, :%s/old/new/g는 파일 전체에서 oldnew로 바꾸는 명령이다. vim은 처음에는 낯설지만, 서버 작업을 오래 할수록 익혀둘 가치가 크다.

sudoedit: root 권한 파일을 조금 더 안전하게 수정하기

관리자 권한 파일을 수정할 때 무조건 sudo vim 파일, sudo nano 파일만 쓰는 것은 아니다. sudoedit를 쓰면 임시 파일을 사용자 권한으로 편집한 뒤, 저장 시점에 원본 파일로 반영한다.

sudoedit /etc/hosts
sudoedit /etc/nginx/nginx.conf

기본 편집기는 환경 변수로 지정할 수 있다.

EDITOR=nano sudoedit /etc/hosts
EDITOR=vim sudoedit /etc/hosts

서버 관리에서는 sudoedit가 더 안전하고 감사 추적에도 유리한 경우가 있다. 회사 서버나 운영 서버에서는 팀 규칙에 따라 어떤 방식을 쓸지 정하는 것이 좋다.

sed: 파일 안의 문자열을 자동으로 바꾸기

sed는 stream editor의 줄임말이다. 파일을 직접 열어 손으로 고치는 편집기라기보다, 규칙에 따라 내용을 자동으로 바꾸는 도구다. 특정 문자열을 바꾸거나, 특정 줄을 삭제하거나, 여러 파일에 같은 수정을 반복할 때 강력하다.

sed 's/old/new/' file.txt
sed 's/old/new/g' file.txt
sed -i 's/old/new/g' file.txt

s/old/new/는 한 줄에서 처음 나오는 old만 바꾼다. g를 붙이면 한 줄 안의 모든 old를 바꾼다. -i는 파일을 직접 수정한다.

직접 수정할 때는 백업을 같이 만드는 습관이 좋다.

sed -i.bak 's/old/new/g' file.txt

그러면 file.txt.bak 백업 파일이 생긴다. 운영 파일을 고칠 때는 특히 유용하다.

awk와 perl: 조건에 따라 고치거나 복잡한 치환을 할 때

awk는 줄 단위로 데이터를 처리하는 데 강하다. 주로 출력, 필터링, 열 처리에 많이 쓰지만, 간단한 변환 작업에도 사용할 수 있다.

awk '{ print $1 }' access.log
awk -F: '{ print $1 }' /etc/passwd

파일을 직접 수정하는 용도로는 sed가 더 흔하지만, 조건이 복잡하면 awk를 거쳐 새 파일을 만든 뒤 교체하는 방식도 쓴다.

awk '{ gsub(/old/, "new"); print }' file.txt > file.txt.new
mv file.txt.new file.txt

perl은 복잡한 정규식 치환에 강하다. 여러 시스템에서 다음 형태를 자주 볼 수 있다.

perl -pi.bak -e 's/old/new/g' file.txt

-p는 줄 단위로 읽고 출력하게 하고, -i.bak은 직접 수정하면서 백업을 만든다. sed로 충분한 경우가 많지만, 정규식이 복잡하면 perl이 편할 때가 있다.

ed와 ex: 거의 쓰지 않지만 알아두면 좋은 전통 도구

ed는 아주 오래된 라인 편집기다. 요즘 직접 사용할 일은 많지 않지만, POSIX 환경에서 매우 기본적인 편집기로 남아 있다. ex는 vi의 라인 편집 모드라고 볼 수 있다. 자동화 스크립트나 특수한 환경에서 등장할 수 있다.

ed file.txt
ex file.txt

초보자가 일부러 먼저 배울 필요는 없다. 다만 리눅스의 편집 도구 역사를 이해하거나, 매우 제한된 환경에서 작업할 때 이런 도구가 있다는 정도만 알아두면 된다.

micro와 emacs: 선택지로 알아둘 만한 편집기

micro는 비교적 현대적인 터미널 편집기다. 단축키가 직관적이고, 초보자에게 편하다. 다만 기본 설치되어 있지 않은 서버가 많다.

micro memo.txt

emacs는 오래되고 강력한 편집기다. 단순한 편집기를 넘어 하나의 작업 환경에 가깝다. 하지만 서버 설정 파일 하나 고치려고 처음 배우기에는 부담이 크다.

emacs memo.txt

개인 취향과 작업 환경에 따라 선택하면 된다. 서버에서 빠르게 설정을 고치는 용도라면 nanovim을 먼저 익히는 것이 실용적이다.

실전 상황별 추천

명령어가 많아 보여도 상황별로 고르면 어렵지 않다.

  • 파일 내용을 빠르게 보기: cat, less, head, tail
  • 한 줄 추가: echo, printf, tee
  • 초보자가 직접 수정: nano
  • 서버 어디서든 안정적으로 수정: vi, vim
  • 관리자 권한 파일을 안전하게 수정: sudoedit
  • 문자열을 자동으로 일괄 변경: sed, perl
  • 조건과 열 기반 처리: awk

수정 후에는 반드시 확인하자

파일을 수정하는 것만큼 중요한 것이 수정 후 확인이다. 설정 파일이라면 문법 검사를 하고, 변경 전후 차이를 확인하고, 서비스 재시작 전에 테스트하는 습관이 필요하다.

diff -u file.txt.bak file.txt
grep -n "server_name" /etc/nginx/sites-available/default
nginx -t
systemctl reload nginx

diff는 바뀐 내용을 보여준다. grep -n은 찾은 문자열의 줄 번호를 보여준다. nginx -t처럼 서비스별 문법 검사 명령이 있다면 반드시 먼저 실행해야 한다.

마무리

리눅스에서 문서를 수정하는 방법은 다양하다. cat은 보기와 간단한 생성에 좋고, nano는 초보자에게 편하고, vim은 어디서나 쓸 수 있는 강력한 편집기다. tee는 관리자 권한 파일에 한 줄을 추가할 때 유용하고, sedperl은 반복 수정에 강하다. awk는 조건과 열 기반 처리에 좋다.

처음에는 cat, less, nano, sudo tee 정도만 익혀도 충분하다. 그 다음에 vim, sed, awk를 천천히 익히면 된다. 중요한 것은 명령어를 많이 외우는 것이 아니라, “지금 내가 하려는 일이 보기인지, 직접 편집인지, 한 줄 추가인지, 일괄 변경인지”를 먼저 구분하는 것이다.

Similar Posts

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다