명령어와 쉘


  • 쉘(shell)이란 운영체제의 커널과 사용자 사이를 이어주는 역할을합니다. 쉘은 사용자의 명령어를 해석하고 운영체제가 알아들을 수 있게 지시해줍니다. 다시 운영체제는 쉘으로부터 받은 지시를 해석하여 하드웨어를 위한 지시어로 바꾸어줍니다.
  • 터미널을 실행하게되면 기본적으로 쉘을 실행하여 그 내용을 출력합니다. 쉘도 하나의 프로그램입니다. 따라서 쉘을 실행중인 상태에서 또다른 쉘을 실행할 수도 있습니다.
  • 쉘의 기능
    • 사용자의 명령어를 번역
    • 내장 명령어
    • 리다이렉션
    • 변수
    • 스크립트
    • 파이프
    • 후방(Background)처리
    • 서브쉘


기본 명령어

파일/디렉터리

Windows의 탐색기에서 할 수 있는 것들을 리눅스의 명령어를 통해서 그대로 할 수 있습니다.



ls

ls [옵션] [{목적 디렉터리명}]

탐색기의 중요한 기능중 하나인 특정 폴더(디렉터리)에 속한 파일과 폴더를 보여주는 역할을 합니다.
  • 옵션
    • -l : 파일에 대한 정보를 자세하게 보여줍니다. 파일의 사용권한, 소유자, 그룹, 크기, 날짜 등을 자세하게 보여줍니다.
    • -a : 숨김파일까지 출력합니다.
    • -R : 하위 디렉토리의 내용을 출력합니다.
  • 예제
    • 입력
      [testuser01@test test01]$ ls

    • 출력
      a b c d
    • 입력
      [testuser01@test test01]$ ls -a -l

    • 출력
      total 12
      drwxrwxr-x. 3 testuser01 testuser01 4096 Feb 28 13:00 .
      drwx------. 5 testuser01 testuser01 4096 Feb 28 12:58 ..
      -rw-rw-r--. 1 testuser01 testuser01    0 Feb 28 12:59 a
      -rw-rw-r--. 1 testuser01 testuser01    0 Feb 28 12:59 b
      -rw-rw-r--. 1 testuser01 testuser01    0 Feb 28 12:59 c
      drwxrwxr-x. 2 testuser01 testuser01 4096 Feb 28 13:00 d

cd

cd {디렉터리명}

폴더를 더블클릭하여 들어가는 것과 같은 효과를 냅니다. 현재 디렉터리를 바꿉니다.
  • 디렉터리명
    • ..  :  상위 디렉토리
    • .  :  현재 디렉토리
    • -  :  이전 디렉토리
  • 예제
    • 입력
      [testuser01@test test01]$ cd d
      [testuser01@test d]$ ls -a

    • 출력
      . ..

    • 입력
      [testuser01@test d]$ cd ..
      [testuser01@test test01]$ ls -a

    • 출력
      .  ..  a  b  c  d

pwd

pwd [옵션]

현재 어떤 폴더에 위치해 있는지 보여줍니다.
  • 예제
    • 입력
      [testuser01@test test01]$ cd d
      [testuser01@test d]$ pwd

    • 출력
      /home/testuser01/test01/d

    • 입력
      [testuser01@test d]$ cd ..
      [testuser01@test test01]$ pwd

    • 출력
      /home/testuser01/test01

cp

cp [옵션] {원본 파일명 | 원본 디렉터리} {목적 파일명 | 목적 디렉터리명}

이 명령어로 간단하게 파일이나 폴더를 복사하세요.


  • 옵션
    • -r : 하위 디렉토리까지 복사합니다.
    • -f : 기존파일이 있을경우 덮어씌웁니다.
  • 예제
    • 입력
      [testuser01@test test01]$ cp a a_copy
      [testuser01@test test01]$ ls

    • 출력
      a  a_copy  b  c  d

    • 입력
      [testuser01@test test01]$ cp a d/a_copy
      [testuser01@test test01]$ ls -al d

    • 출력
      total 8
      drwxrwxr-x. 2 testuser01 testuser01 4096 Feb 28 13:21 .
      drwxrwxr-x. 3 testuser01 testuser01 4096 Feb 28 13:17 ..
      -rw-rw-r--. 1 testuser01 testuser01    0 Feb 28 13:21 a_copy

    • 입력
      [testuser01@test test01]$ cp -r d d_copy
      [testuser01@test test01]$ ls d_copy

    • 출력
      a_copy

mv

mv [옵션] {이동전 파일명 | 이동전 디렉터리명} {목적 파일명 | 목적 디렉터리명}

파일이나 폴더의 위치를 이동할 수 있습니다. 파일이나 폴더의 이름도 변경 할 수 있습니다.
  • 옵션
    • -f : 기존파일이 있을경우 덮어씌웁니다.
  • 예제
    • 입력
      [testuser01@test test01]$ mv a a_rename
      [testuser01@test test01]$ ls

    • 출력
      a_copy  a_rename  b  c  d  d_copy

    • 입력
      [testuser01@test test01]$ mv b d
      [testuser01@test test01]$ cd d
      [testuser01@test d]$ ls

    • 출력
      a_copy  b

rm

rm [옵션] {목적 파일명 | 목적 디렉터리명}

rm 명령어는 파일이나 폴더를 삭제하는 기능을 수행합니다.
  • 옵션
    • -f : 물어보지 않고 삭제합니다.
    • -i : 삭제시 삭제할 것인지 한번 더 확인합니다.
  • 예제
    • 입력
      [testuser01@test d]$ rm -f a_copy
      [testuser01@test d]$ cp b b_copy
      [testuser01@test d]$ ls

    • 출력
      b  b_copy

    • 입력
      [testuser01@test d]$ cd ..
      [testuser01@test test01]$ rm -f ./d/*
      [
      testuser01@test test01]$ ls -a ./d

    • 출력
      .  ..

mkdir
mkdir [옵션] {디렉터리명}

이 명령어로 폴더를 만들 수 있습니다.
  • 옵션
    • -p : 상위 디렉토리까지 한번에 생성합니다.
  • 예제
    • 입력
      [testuser01@test test01]$ mkdir e
      [testuser01@test test01]$ ls

    • 출력
      a_copy  a_rename  c  d  d_copy  e

    • 입력
      [testuser01@test test01]$ mkdir -p f/g/h
      [testuser01@test test01]$ cd ./f/g/h
      [testuser01@test h]$ pwd

    • 출력
      /home/testuser01/test01/f/g/h

    • 입력
      [testuser01@test h]$ mkdir ../../../i
      [testuser01@test h]$ cd 
      /home/testuser01/test01/
      [testuser01@test test01]$ ls

    • 출력
      a_copy  a_rename  c  d  d_copy  e  f  i

find

find {시작 디렉터리명} {탐색조건}

 이 명령어로  파일이나 폴더를을 찾을 수 있습니다.
  • 탐색조건
    • -name {파일명 | 디렉터리명} : 파일 또는 디렉터리 이름으로 검색
    • -user {사용자명} : 사용자명의 소유자를 가지고 검색
  • 예제
    • 입력
      [testuser01@test test01]$ find . -name a_copy

    • 출력
      ./a_copy
      ./d_copy/a_copy


편집

단지 문서를 작성한다거나, 소스코드 및 구성설정 파일등을 수정하기 위하여 더이상 Windows에서 메모장이나 한글, Microsoft Word 사용할 필요가 없습니다.




vi

터미널상에서 vi 에디터를 사용하여 간단하게 문서를 작성할 수 있게 해 줍니다.

vim

vi보다 더 발전된 형태의 에디터입니다. vi의 기능을 포함하고 있습니다. 텍스트 강조 기능등이 포함되어 있습니다.

nano

vi의 커맨드에 익숙하지 않다면 특별한 커맨드가 필요없는 nano 에디터를 사용해보세요.





컴파일 및 디버깅

vi를 이용해 소스코드를 작성했다면 작성한 소스코드를 컴파일하여 소스코드를 여러분만의 프로그램으로 만들 수 있습니다. 문제가 있다면 디버거를 사용하세요.


gcc

gcc는 c언어로 쓰여진 소스코드를 실행파일로 만들어주는 컴파일러입니다.

gdb

c언어로 쓰여진 프로그램을 디버깅하는데 쓰이는 툴입니다.

make

여러 파일로 구성된 프로그램이 있을 경우 하나의 소스파일을 수정하면 모든 파일을 다시 컴파일하고 링크해야하는데, make는 이러한 수고를 덜기 위하여 수정된 파일만 자동으로 알아내 컴파일하도록 도와주는 툴입니다.

configure

makefile을 만들기위한 스크립트입니다.


프로세스 관리

리눅스에서는 동시에 여러개의 프로그램을 실행할 수 있습니다. 따라서 프로세스들의 목록을 얻거나 상태를 점검할 필요가 있습니다. Windows의 작업관리자에서 할 수 있는 것들을 아래의 명령어들을 통해 그대로 할 수 있습니다.



ps

ps [옵션]

ps는 프로세스들의 목록을 열거합니다.
  • 옵션
    • -a : 다른 사용자의 프로세스도 보여줍니다.
    • -l : 자세한 형태의 정보를 출력합니다.

kill

kill [옵션] {프로세스 ID}

실행중인 프로세스를 강제로 종료시키기 위하여 이 명령어를 사용합니다.

top

top [옵션]

시스템 사용량을 확인하기위한 명령어입니다. Windows의 작업관리자에서 보는 화면과 비슷한 화면을 제공해줍니다.

원격 접속

ssh

ssh {사용자명}@{원격지 주소(호스트 명)}

Secure Shell 의 약자입니다. 안전한 연결을 생성하여 접속한 뒤 원격 환경의 쉘을 얻습니다.
  • 예제
    • 입력
      [testuser01@test test01]$ ssh u20083201@key.cs.kookmin.ac.kr

    • 출력
      u20083201@key.cs.kookmin.ac.kr's password:
      비밀번호를 입력한뒤 한번더 확인합니다.
    • 원격 장비에 접속되고 원격지의 쉘이 실행됩니다.
      [u20083201@centos ~]$

    • 입력
      [u20083201@centos ~]$ exit

    • 출력
      logout
      Connection to key.cs.kookmin.ac.kr closed.

    • 원격 장비에서 로그아웃되고 로컬 환경의 쉘로 돌아옵니다.
      [testuser01@test test01]$ 

기타

cat

cat [옵션{파일명}

파일의 내용을 터미널상에서 간단하게 볼 수 있습니다.
  • 예제
    • 입력
      [testuser01@test test01]$ cat c

    • 출력
      apple banana orange
      car plane ship
      cat dog bird

touch

touch {파일명 | 디렉터리명}

아무 내용이 없는 파일을 만들거나 최종 수정일을 변경할 수 있습니다.
  • ƒ기존에 존재하지 않는다면 빈 파일을 생성시킵니다. 
  • 기존에 존재한 파일은 수정일을 변경합니다. 
  • 예제
    • 입력
      [testuser01@test test01]$ touch f/g/h/document.txt
      [testuser01@test test01]$ ls f/g/h

    • 출력
      document.txt


grep

grep [옵션] {패턴} {목적 파일명}
파일의 내용에 특정 단어나 문자열이 포함되어있는지 간단하게 검사해 볼 수 있습니다.

  • 옵션
    • -c : 파일의 내용 대신 문자열이 들어있는 라인의 수를 출력합니다.
    • -i : 대소문자를 구분하지 않습니다.
    • -n : 행 번호를 출력합니다.
  • 예제
    • 입력
      [testuser01@test test01]$ grep -n "ship" c

    • 출력
      2:car plane ship

    • 입력
      [testuser01@test test01]$ cat c | grep bird

    • 출력
      cat dog bird

tar

압축시 : 
tar [옵션] {목적 파일명} {압축할 대상 파일명}

해제시 : 
tar [옵션] {압축 파일명} [{압축을 풀 파일명}]

Windows의 알집이 하던일을 tar가 해 줍니다.
  • 옵션
    • -c : 압축
    • -x : 해제
    • -v : 상세한 압축 상황을 묘사합니다.
    • -f : 읽거나 기록할 파일을 정의합니다.
    • -z : gzip으로 압축하여 백업합니다.
  • 예제
    • 입력
      [testuser01@test test01]$ tar cf c.tar c

    • 출력
      a_copy  a_rename  c  c.tar  d  d_copy  e  f  i

    • 입력
      [testuser01@test test01]$ cp c.tar ./d
      [testuser01@test test01]$ cd d
      [testuser01@test test01]$ tar xf c.tar
      [testuser01@test test01]$ ls .

    • 출력
      c  c.tar

gzip

압축시 : 
gzip [옵션] {압축할 파일명}

해제시 : 
gzip [옵션] {압축해제할 파일명}

Windows의 알집이 하던일을 gzip이 해 줍니다.
  • 옵션
    • -9 : 압축률을 최대로
    • -v : 압축결과 출력
    • -r : 각 디렉토리의 모든 파일을 차례로 압축