이제 시스템에 들어가고 나오고 하는 일을 할 수 있게 되었다. 그런데 그냥 나오는 것을 목적으로 어디에 들어가는 경우는 없을 것이다. 또 칼잡이에 비유하자면, 이왕 칼을 뽑은 김에 모기라도 쳐야 하지 않겠는가? 앞으로 만나게 될 악당 내지 괴물들을 상상하며, 여기서는 몇몇 작은 벌레들이라도 잡아보도록 하자.
조금 전에 $라는 문자가 US dollar를 의미하는 것이 아니라 쉘 프롬프트를 의미한다고 강조했다. $ 문자 만으로 전체 쉘 프롬프트를 가리키기도 하지만 이 문자 왼쪽에 있는 문자와 기호들도 매우 기본적이면서 중요한 정보를 알려준다.
![]() |
쉘 프롬프트 [jedi@cpu jedi]$ |
---|---|
|
command / option / parameter(file, string)
유닉스 계열 시스템의 명령어는 KISS - Keep It Simple and Small 주의에 입각하여(?) 만들어졌다. 예를들어 한 멍청한 로봇에게 "여기와서 이 부품을 저기로 옮기라"는 작업을 지시하기 위해 do_it_all이라는 기본 명령어를 만들지 않는다. 유닉스 명령어를 만드려면 이 모든 과정을 위해 come / get / hold / go / set / report (오고/집고/들고/가고/놓고/보고함) 등을 각각 따로 구현하려는 생각을 해야 한다. 이 "작고 단순한" 명령들이 입출력에 일정한 규칙을 가지고 있어서 서로 연계되어 동작할 수 있다면 더 좋을 것이다.[4]
여기에서 끝나면 너무 아쉬울 것 같아 한 가지 더, 유닉스 명령어들의 특징을 알려 주겠다. 이것들이 원칙적으로 "한 번에 한 가지씩 일만" 한다고 했는데, 불행히도 한 가지 일이라도 제대로 하려면 온갖 세부적인 사항들을 챙겨야 한다; 이를테면 "온다(come)"라는 동작 하나만 봐도, 뛰어 올 것인지 걸어 올 것인지, 앞으로 올 것인지 뒤로 올 것인지, 심지어 다 왔다는 보고를 할 것인지 말 것인지, ... 아무튼 너무나 따져줄 것이 많다. 유닉스 명령어마다 다양하게 추가적으로 가질 수 있는 이런 정보들은 옵션(options) 및 대상파일(files)로 구성되는 명령행인자(command-line arguments)로 주어진다.
![]() |
명령어를 이용하는 형식들 |
---|---|
|
uname / ls cd / w who finger / free / ps top / uptime / df / set export alias
지금까지 쉘 프롬프트와 명령어의 이용형식에 대해 살펴 보았다. 이것으로 사실상 우리가 이용하는 칼에 대한 이해가 끝난 것이다. 실제로 이것을 휘둘러 보기 위해 기본 동작부터 익히자. 어떤 시스템에 처음 로그인했다면 마땅히 살펴보아야만 하는 몇 가지 내용이 있다. 시스템의 이름과 주소, 그리고 자기 자신의 이용자명과 패스워드는 이미 알고 있을 거고(잘 기억이 나지 않는다면 uname -a 명령으로 언제든 확인할 수 있음), 자신의 쉘도 일단 bash로 해두자.
![]() |
시스템에 대한 기본 정보를 알아내는 명령들 |
---|---|
|
![]() |
너무 긴 출력 줄 수 |
---|---|
많은 명령어가 터미널 창의 기본 줄 수를 훨씬 넘어가는 출력을 해 버리기 때문에 화면이 위로 올라가 버릴 때가 많다. 이용하고 있는 터미널 어플리케이션에 따라 스크롤바가 있을 수도 없을 수도 있는데, 그런 것엔 상관없이 긴 출력을 한 화면씩 잘라서 보기 위해 more 명령을 이용한다. 예를들어 ps aux |more 같은 형식으로 이용한다. 사실 이 more는 파일의 내용을 읽기 위한 명령인데 표준 입출력을 서로 연결시켜 주는 유닉스 쉘의 기능인 파이프('|' 문자)를 통해 다른 명령의 긴 결과를 자기가 받고, 그것을 원래의 기능대로 끊어서 보여주는 것이다. Bash 쉘 자체가 지원하는 기능인 Shift-PgUp/Dn를 이용하는 것도 좋다. GNU/Linux에서는 어떤 터미널 프로그램에서도 이 기능을 이용할 수 있지만 다른 시스템에서는 이용하는 터미널 프로그램에 따라 다르다. |
![]() |
Auto completion? 자동완성 기능! |
---|---|
조금 긴 디렉토리 경로를 찾아가는 다음과 같은 명령을 생각해 보자. $ cd /home/cpu/The_CPU/han/study/fundamental/lookie/html/stylesheet-images/ 이렇게 깊은 디렉토리 구조를 단 몇 초 만에 찾아갈 수 있다. 일일이 수많은 철자를 타이핑하거나 그래픽 파일관리자에서 마우스 클릭을 해대는 것으로는 따라올 수 없는 속도감! Bash를 비롯한 몇몇 쉘은 어떤 명령어 또는 파일이름에 대한 자동완성 기능을 가지고 있다. [8] 자동완성 기능을 이용하는 것은 너무나 간단하다. 명령어는 명령어대로, 또한 파일/디렉토리의 이름도 그 이름대로, 첫 글자만 입력하고 왼쪽 새끼 손가락으로 Tab키를 누르자. 만약 이용할 수 있는 명령어나 파일이름 중에 그 문자로 시작하는 다른 것이 없다면 나머지 철자들이 저절로 입력된다. 그러다 어느 위치에선가 멈추었다면 또 Tab키를 누른다. 지금까지 입력된 부분은 똑같지만 이후부터 철자가 다른 모든 경우가 보여질 것이다. 이때 원하는 이름, 즉 바로 다음 한 글자를 입력하고 또 Tab, ... 이런 식으로 하면 GNU/Linux 시스템의 디렉토리 구조가 복잡하고 파일 이름도 상당히 길다는 사실이 큰 문제가 되지 않는다. |
![]() |
$ clear - 화면 깨끗히 하기 |
---|---|
화면이 가득차서 집중이 안되면 clear 명령을 이용한다. 이것도 입력하기 귀찮아 할까봐 쉘 단축키도 준비되어 있다 - Ctrl-L. |
[8] 자동완성 기능은 굳이 쉘에서 뿐만 아니라 GNU/Linux 시스템에서 이용되는 대부분 소프트웨어들(그래픽 환경에서 돌아가는 것들도 포함)에서도 이용할 수 있다. 예를들어 어떤 소프트웨어의 파일 열기 대화상자에서 마우스 클릭으로 디렉토리를 옮겨다니거나 파일이름을 완성할 수 있지만, 그 대화상자 내부에 있는 텍스트 입력 필드에서 자동완성 기능을 이용해 일을 더 빨리 할 수도 있다.