GUI vs. CLI

윈도 운영체제가 있기 전 DOS 환경에서 컴퓨터를 이용해본 사람들은 cddir과 같은 명령어를 기억할 것이다. 조선컴처럼 오로지 명령어를 통해 작업을 할 수 있는 환경을 CLI (command line interfaces)라고 한다. 시간이 지나 윈도와 같은 GUI (graphical user interfaces)가 등장한 이후, 리눅스 환경에서도 ubuntu desktop이나 mint 등 멋진 GUI를 통해 편하게 리눅스를 사용할 수 있다. 폴더를 더블 클릭해서 열고, ctrl+c ctrl+v로 파일을 복사할 수 있다. 마우스를 통해 모든 것을 할 수 있지만, 그렇다고 해서 CLI를 잊어선 안된다. 명령어에 익숙해지게 된다면 같은 일을 GUI보다 훨씬 빠르고 효율적으로 처리할 수 있고, GUI를 쓸 수 없는 불상사가 생겼을 때 엄청난 도움이 될 것이다. 개발자에게는 당연히 필수이지 않을까. 이 글에서는 리눅스 bash 터미널의 shell 스크립트 명령어 쓰는 법을 정리한다.

Shell이란?

쉽게 말해서 키보드로 입력한 명령어를 운영체제로 전달해서 실행시키게 하는 프로그램이다. 윈도의 cmd로 열리는 터미널, 여러 리눅스 시스템에서 쓰는 bash 등이 shell 프로그램의 예이다. ubuntu에서 ctrl+alt+t를 입력하면 bash 터미널을 실행할 수 있다. 아니면 시작 메뉴에서 terminal로 검색해서 실행시킬 수 있다.

각 명령어는 대부분 옵션을 가지고 있는데, 다음과 같은 방식으로 옵션을 쓴다.

$ ls -s
$ ls --size

여기서 -s--size는 같은 옵션이다. 전자(-s)는 약어형 명령이고, 후자(--size)는 사람이 읽을 수 있도록 풀어 쓴 명령이다.

sudo: 관리자 권한으로 명령어 실행

실행하고자 하는 명령어 앞에 sudo를 함께 입력하면, 그 명령을 관리자 권한으로 실행할 수 있다. sudo가 필요한 경우는 대표적으로 프로그램을 설치/업뎃할 때나, root 폴더 등 관리자 권한이 필요한 폴더에 접근하고자 할 때이다.

$ sudo apt-get update

sudo 명령을 무분별하게 쓰지는 말자. 컴퓨터 시스템에 손상을 입힐 수 있다! sudo에 대해서는 추후에 따로 포스트할 예정이다.

파일 및 디렉토리 관련 명령

  • ~: 물결 표시(~)는 사용자의 홈 디렉토리의 경로를 나타낸다. 내 ubuntu 계정 이름이 don이라면, ~는 경로 /home/don을 의미한다.
  • pwd (print working directory): 지금 위치한 경로를 알려준다.
  • ls (list): 현재 폴더 안에 있는 파일 목록을 보여준다.
    ls -l (long listing format): 파일의 크기, 수정 날짜, 파일의 소유자, 그리고 권한(읽기, 쓰기 등)을 같이 보여준다.
    ls -a --all: 숨겨진 파일까지 다 같이 보여준다.
    ls -s --size: 파일 크기를 보여준다
    ls PATH: PATH 경로에서 ls를 실행한 결과를 보여준다. 예를 들어 ls ~ 는 홈 디렉토리의 목록을 보여준다.
  • cd (change directory): 홈 디렉토리로 경로 이동
    cd ..: 상위 디렉토리로 이동
    cd -: 이동하기 전 경로로 이동 (웹브라우저의 뒤로가기와 같은 기능)
    cd PATH: 경로 PATH로 이동, 예를 들어 cd ~/Desktop
  • cp FILEPATH1 FILEPATH2 (copy): FILEPATH1FILEPATH2로 복사
    cp -r FOLDERPATH (copy recursively): FOLDERPATH 통째로 어딘가로 복사
  • mv (move): cp와 같은 사용법으로 복사 대신 이동
  • rm FILEPATH (remove): 파일 삭제
    rm -r FOLDERPATH (remove recursively): 폴더 전체 삭제
  • rmdir FOLDERPATH (remove directory): 빈 폴더만 삭제할 때 사용한다.
  • mkdir FOLDERNAME (make directory): 새로운 폴더 생성

파일 실행

현재 위치에서 실행 가능한 어떤 파일 FILE.EXTENSION을 실행하려면 다음과 같이 입력하면 된다.

$ ./FILE.EXTENSION

시스템 정보 확인

  • df (disk usage of filesystem): 모든 파티션의 용량 정보를 보여준다.
    df -h (human-readable): 사람이 알아들을 수 있도록 용량 단위들을 친절하게 나타낸 모드이다.
  • du (disk usage): 해당 디렉토리의 용량 정보를 보여준다.
    du -s (summary): 하위 디렉토리 내용을 제외한 해당 디렉토리의 용량만 보여준다.
    du -h (human-readable): 용량 단위를 친절하게 알려준다.
    du -sh = du -s -h
  • free: 사용 및 가용 메모리 정보를 나타낸다.
    free -m (megabytes):  메가바이트 단위로 보여준다.
  • top (table of processes): 지금 사용하고 있는 프로세스들이 얼마나 메모리를 사용하고 있는 지 보여주는 윈도의 작업관리자 같은 역할을 한다. 엔터키를 치면 업데이트가 되며, q키를 누르면 나갈 수 있다.
  • uname -a: 기계, 커널 정보 등 여러 시스템 정보를 보여준다.
  • lsb_release -a: 현재 사용 중인 리눅스 배포판에 대한 정보를 보여준다.
  • ip addr: 네트워크 정보를 보여준다.

사용자

  • adduser USERNAME: USERNAME이라는 이름의 사용자 추가
  • passwd USERNAME: USERNAME 사용자의 비밀번호 설정

도움말 얻기

물고기 낚는 법을 알려주는 매우 중요한 명령어를 설명한다.

  • man COMMAND (manual): COMMAND에 대한 매뉴얼을 보여준다.
$ man man
$ man intro

위 두 명령어는 초보자가 읽어볼 만한 좋은 문서이니 읽어보길 권한다.

  • info COMMAND (information): man 보다 더욱 자세하고 깊은 내용의 문서를 제공한다.
  • 위 두 명령어와 비슷한 기능으로 --help 옵션이 있다. 대부분의 명령어는 --help 옵션을 제공하는데, man이나 info보다는 훨씬 짧은 도움말을 제공한다. man --help를 통해 경험해보자.

지금까지 설명한 man, info, --help 옵션 등은 이미 사용하고 있는 명령어 이름을 알고 있을 때 사용 가능한 도우미들이다. 명령어를 찾고 싶을 때는 다음 명령어를 통해 매뉴얼에서 검색할 수 있다.

  • whatis -r COMMAND: COMMAND라는 단어를 명령어 리스트 안에서 찾아본다.
  • apropos -r DESCRIPTION: DESCRIPTION이라는 단어를 문서 내용 안에서 찾아본다.
$ whatis -r cpy
$ apropos -r "copy files"

위 두 명령을 실행해보면 감을 잡을 수 있을 것이다.

tarball 압축

  • tar xvzf FILE.tar.gz: FILE.tar.gz라는 tarball 압축 파일을 FILE이라는 이름의 새 폴더를 만들어서 압축을 푼다.
  • tar zcvf FILE.tar.gz FOLDERNAME: FOLDERNAME 폴더를 FILE.tar.gz로 압축한다.

참조 링크

ubuntu 매뉴얼
https://help.ubuntu.com/community/UsingTheTerminal

openhatch.org 튜토리얼
https://openhatch.org/missions/shell/about