본문 바로가기
리눅스/Part 2 - Configuration and Environment

리눅스 기초 | 11-2. 환경

by 객잔주인 2024. 6. 5.

해당 포스팅은 William E. Shotts, Jr.의 오픈소스 저서 The Linux Command Line(링크)를 번역한 내용입니다


※ 용어 변경: 스타트업 파일 → 시작 파일

텍스트 에디터

쉘의 시작 파일이나 시스템 설정 파일을 편집하기 위해서 텍스트 에디터(text editor)라는 프로그램이 필요합니다. 텍스트 에디터는 커서를 옮겨 문서를 수정할 수 있다는 점에서 워드 프로세서와 비슷한 프로그램입니다. 워드 프로세서와의 차이점이라면 텍스트 에디터는 순수하게 텍스트만 작성할 수 있고 프로그램 작성에 도움이 될만한 기능들을 가지고 있습니다. 텍스트 에디터는 소프트웨어 개발자들이 코드를 작성할 때 사용하거나 시스템 관리자들이 시스템 설정 파일들을 관리하는데 필요한 중요한 툴입니다.

 

리눅스에는 굉장히 많은 텍스트 에디터들이 존재하며 대부분의 시스템은 이미 그 중에서 몇 가지가 설치되어 있습니다. 왜 그렇게 많은 텍스트 에디터가 있는걸까요? 왜냐하면 프로그래머들은 자신들만의 텍스트 에디터를 작성하는 것을 좋아하고 또 많이 사용하기 때문에 자신이 원하는 기능이나 사용 방식을 반영한 텍스트 편집기를 직접 작성하는 경우가 많습니다.

 

텍스트 에디터는 크게 두 가지로 분류됩니다. 그래픽 기반의 에디터와 텍스트 기반의 에디터가 있죠. GNOME과 KDE 모두 인기있는 그래픽 기반 에디터를 가지고 있습니다. GNOME에는 $\texttt{gedit}$이라는 에디터가 포함되어있고, KDE에는 세 가지 에디터 $\texttt{kedit, kwrite, kate}$가 포함되어있습니다.

 

텍스트 기반 에디터는 여러 종류가 있습니다. 그 중 우리가 만나볼 에디터들은 $\texttt{nano}$와 $\texttt{vi}$와 $\texttt{emacs}$입니다. $\texttt{nano}$ 에디터는 PINE email 세트에 포함되는 $\texttt{pico}$ 에디터를 대체하기 위해 디자인 된 쉽고 간단한 에디터 입니다. $\texttt{vi}$ 에디터(대부분의 리눅스 시스템에서 $\texttt{vim}$("vi improved"의 약자)으로 대체됨)는 유닉스 계열 시스템들의 전통적인 에디터입니다. 다음 장의 주제가 될 에디터이기도 합니다. $\texttt{emacs}$ 에디터는 Richard Stallman이 작성했으며, 광범위하고 다재다능한 프로그래밍 환경입니다. 쉽게 구할 수 있지만 대부분의 리눅스 시스템에 기본적으로 설치되어 있지 않습니다.

텍스트 에디터 사용하기

텍스트 에디터는 커맨드 라인에 에디터의 이름과 편집하고 싶은 파일 명을 입력하여 사용할 수 있습니다. 명시된 파일이 존재하지 않으면 에디터는 새로운 파일을 생성합니다. $\texttt{gedit}$을 사용한 예시를 보겠습니다:

이 명령으로 $\texttt{gedit}$이 실행되며 "some_file"이라는 파일이 존재할 경우 그를 불러옵니다.

 

그래픽 기반의 텍스트 에디터의 사용 방법에 대해서는 따로 설명이 필요하지 않기 때문에 여기서 다루지는 않겠습니다. 대신 텍스트 기반 에디터인 $\texttt{nano}$를 살펴보도록 하겠습니다. $\texttt{nano}$를 실행하여 $\texttt{.bashrc}$를 편집해보도록 하죠. 하지만 그 전에 "safe computing"을 실습해보도록 하겠습니다. 설정 파일같은 중요한 파일을 편집할 때에는 항상 복사본을 만들어두는 것이 좋습니다. 우리가 편집하면서 무언가를 망치더라도 쉽게 되돌릴 수 있게 되죠. $\texttt{.bashrc}$의 백업본을 만들어두려면 이렇게 해보세요:

백업 파일의 이름은 자유롭게 지어도 괜찮습니다. 단, 백업 파일이란걸 알아볼 수 있게 지어주세요. 확장자로 ".bak", ".sav", ".old", ".orig" 같은 것들이 많이 사용됩니다. 아, $\texttt{cp}$는 경고 메시지 없이 파일을 덮어쓴다는 점 기억해주세요(즉, 기존 ".bashrc.bak" 파일의 내용이 현재 ".bashrc"의 내용으로 덮어쓰기 됩니다).

 

이제 백업 파일을 만들었으니 편집을 해보겠습니다.

$\texttt{nano}$가 실행되면 이런 화면을 볼 수 있습니다:

Note: 시스템에 $\texttt{nano}$가 설치되어있지 않다면 그래픽 기반 에디터를 사용해도 됩니다. (설치는 어렵지 않으니 배포판 이름과 "nano 설치"를 구글링 해보세요. 예) 우분투를 사용하고 있다면 "우분투 nano 설치" 검색)

 

화면상으로 상단에는 헤더가, 중간에는 편집될 텍스트가, 하단에는 명령 메뉴가 위치합니다. $\texttt{nano}$는 원래 이메일 클라이언트에 기본적으로 제공되던 텍스트 편집기를 대체하기 위해 설계되었기 때문에, 고급 편집 기능이 다소 부족합니다.

 

어떤 에디터를 사용하든 가장 먼저 배워야할 것은 에디터에서 나가는 방법입니다. $\texttt{nano}$의 경우 $\texttt{Ctrl-x}$를 눌러 나갈 수 있습니다. 이는 화면 하단에 있는 메뉴에서 확인할 수 있습니다. $\texttt{^X}$는 $\texttt{Ctrl-x}$를 의미합니다. $\texttt{^}$는 일반적으로 많은 프로그램에서 컨트롤 키를 의미합니다.

 

두 번째로 알아야 할 것은 저장하기 입니다. $\texttt{nano}$에서는 $\texttt{Ctrl-o}$를 입력하여 저장합니다. 나가기와 저장하기를 알았으니 이제 실제 편집을 해보죠. $\downarrow$ 키나 $\texttt{Pagedown}$ 키를 이용해 커서를 파일의 마지막에 위치시키고 아래 내용을 추가해주세요:

Note: 배포판에 따라 위 내용이 설정 파일 내에 있을 수 있습니다. 그러나 다시 한 번 써도 문제가 생기지는 않으니 안심하고 진행해주세요.

 

아래 표에서 각 줄의 의미를 확인해보세요.

 

Table 11-4: $\texttt{.bashrc}$에 추가한 내용들

내용 의미
$\texttt{umask}$ 9장에서 다뤘던 공유 디렉토리의 문제 해결을 위해 $\texttt{umask}$를 다시 설정
$\texttt{export HISTCONTROL=ignoredups}$ 쉘에서 연속해서 같은 명령이 실행된 경우 이를 하나로 압축하여 히스토리에 기록
$\texttt{export HISTSIZE=1000}$ 히스토리 저장량을 기본값 500에서 1000으로 늘림
$\texttt{alias l.='ls -d .* --color=auto'}$ 마침표로 시작하는 모든 디렉토리를 출력하는 $\texttt{l.}$이라는 새로운 명령어를 생성
$\texttt{alias ll='ls -l --color=auto'}$ $\texttt{ls -l}$을 단순화 한 $\texttt{ll}$이라는 명령어를 생성

이처럼 추가적인 내용들이 모두 직관적으로 읽히는 것은 아니기 때문에 $\texttt{.bashrc}$ 파일에 각 줄이 어떤 역할을 하는지 한 눈에 알아볼 수 있게 주석을 남기는 것이 좋습니다. 위 예시에 대해서는 아래와 같이 주석을 남길 수 있습니다:

훨씬 낫네요! 편집이 끝났으니 $\texttt{Ctrl-o}$를 입력해 작업을 저장하고 $\texttt{Ctrl-x}$로 $\texttt{nano}$에서 나오세요.

주석이 중요한 이유

설정 파일을 수정할 때마다 수정사항에 대한 주석을 남기는 것이 좋습니다. 내일은 오늘 수정한 내용이 기억 나겠지만 6개월 뒤엔 어떨까요? 직접 주석을 남겨보세요. 그리고 하는 김에 수정사항을 로그로 남기는 것도 좋습니다.

쉘 스크립트와 $\texttt{bash}$ 시작 파일은 주석을 위해 "#" 기호를 사용합니다. 다른 설정 파일들은 다른 기호를 사용할 수도 있습니다. 대부분의 설정 파일들에 주석이 있으니 그를 따라 설정 내용을 이해할 수 있습니다.

종종 설정 파일에서 줄이 주석 처리 되어 프로그램이 사용하지 않도록 되어있는 것을 볼 수 있을 것입니다. 이는 설정 파일을 읽는 사람들에게 가능한 선택지를 보여주거나 해당 설정을 위한 정확한 문법을 보여주기 위해 작성된 것입니다. 예를 들어, 우분투 18.04의 $\texttt{.bashrc}$ 파일에는 다음과 같은 줄이 있습니다:

$\texttt{# some more ls aliases}$
$\texttt{#alias ll='ls -l'}$
$\texttt{alias la='ls -A'}$
$\texttt{$\texttt{l='ls -CF'}$}$

마지막 세 줄은 alias 정의 예시가 주석처리된 것입니다. 앞의 "#" 기호를 제거하면 해당 alias를 활성화 시키게 됩니다. 반대로, "#" 기호를 줄 앞에 추가하면 설정을 비활성화 시키면서도 해당 설정 내용을 남겨둘 수 있습니다.

수정사항 활성화 시키기

우리가 $\texttt{.bashrc}$에 만든 수정사항은 터미널 세션을 재시작 할 때까지 활성화 되지 않습니다. 왜냐하면 $\texttt{.bashrc}$는 세션이 시작될 때에만 읽히기 때문이죠. 그러나 다음 명령어를 사용하면 $\texttt{bash}$가 $\texttt{.bashrc}$를 읽도록 강제할 수 있습니다:

위 명령을 실행하고 나면 수정사항이 시스템에 반영된 것을 확인할 수 있습니다. 새로 추가한 alias를 사용해보세요.

요약

이번 장에서는 텍스트 에디터를 사용해서 설정 파일을 편집하는 아주 필수적인 스킬을 익혔습니다. 앞으로는 명령어의 매뉴얼 페이지를 읽으면서, 명령어가 지원하는 환경 변수를 주의 깊게 살펴보세요. 유용한 정보가 숨어있을 수 있습니다. 후속 장에서는 쉘 함수에 대해 배워보겠습니다. 이는 강력한 기능으로, $\texttt{bash}$ 시작 파일에 포함시켜 나만의 사용자 정의 명령어 모음에 추가할 수 있습니다.

추가자료

  • $\texttt{bash}$ 매뉴얼 페이지의 INVOCATION 섹션에서는 $\texttt{bash}$ 시작 파일에 관한 아주아주 디테일한 내용들을 확인할 수 있습니다.