앞서 풀어보았던 150개의 문제중에 짚고 넘어갈만한 명령어와 개념을 정리해본다.

명령어


파일시스템

ls

ls(list segments)명령어는 파일의 목록을 표시하는 기능을 수행한다. 사용법은 아래와 같다.

$ ls [options] [path]

일반적으로 사용하는 옵션들은 아래와 같다.

-l: 롱 포맷, 모드, 소유자, 용량, 날짜등 다양한 정보를 함께 보여준다.
-F: 파일의 형태를 나타내는 문자를 추가하여 출력한다. 폴더는'/' 링크는'@'
-a: 숨김 파일을 포함한 모든 파일을 출력
-R: 서브디렉토리까지 재귀적으로 출력
-d: 디렉토리와 링크에 대한 정보를 표시
-t: 수정시간에 따라 파일 목록 나열
-r: 역순으로 나열
-s: Kb용량과 함께 출력
-h: 사람이 인지할 수 있는 형태로 출력

chown

chown(change the owner of a file)은 파일의 소유권을 바꾸기 위해 사용된다. chown명령어에 대한 일반적인 구성은 다음과 같다.

$ chown[-R][user][:group] target1 [target2...]
  • 선택적인 user변수는 target들의 소유권을 가질 수 있는 사용자를 표시한다.
  • 선택적인 group변수는 target들이 관련되어있는 그룹을 표시한다.
  • target변수는 사용자나 그룹들이 바뀔 수 있는 파일이나 디렉토리들을 표시한다.
  • 폭넓게 적용되는 -R옵션은 명명되는 모든 target디렉토리와 그 안에 들어있는 파일들에 대해 재귀적인 변화를 지정한다.

chmod

chmod(change mod)는 파일이나 디렉토리의 파일시스템 모드를 바꾼다. 모드는 허가나 특별한 모드들을 포함한다. 사용법은 아래와 같다.

$ chmod [options] mode[,mode] file1 [file2...]

현재 어떤 모드가 적용되어있는지 보기 위해서는 다음과 같이 입력한다.

$ ls -l file

일반적인 옵션은 아래와 같다.

-R: 재귀적으로 파일과 디렉토리들의 모드들을 바꾼다.
-v: 실행되고 있는 모든 파일을 나열한다.(verbose)

du

disk usage의 줄임말로, 현재 디렉토리의 사용량을 보여주는 명령어이다. 사용법은 아래와 같다.

$ du [options] file

기본적으로 디렉토리의 용량만 Kb단위로 표시해주며, 사용할 수 있는 옵션은 아래와 같다.

-a: 모든 파일들의 기본정보를 보여준다.
-b: 표시단위를 Byte로 한다.
-k: 표시단위를 Kb로 한다.
-h: 적당한 용량을 붙여서 보여준다. (human readable)
-c: 모든 파일의 정보를 보여주고나서 최종 합계를 표시한다.
-s: 총사용량만 표시한다.

df

disk free의 줄임말로, 파일시스템의 디스크 사용량과 가용량을 확인할 수 있다. 사용법은 아래와 같다.

$ df [options] file

-h(human readable)옵션을 붙여주면 적절한 단위가 붙어 알아보기 쉽게 출력된다.

$ df -h 
Filesystem      Size  Used Avail Use% Mounted on
udev            988M  4.0K  988M   1% /dev
tmpfs           201M  524K  200M   1% /run
/dev/dm-0        18G  3.3G   14G  20% /

free

메모리의 사용량 및 가용량을 보여주는 명령어이다. 아무런 옵션도 주어지지 않으면 Kb단위로 표시해주며, -m옵션을 주어 자주 사용한다.

$ free -m
             total       used       free     shared    buffers     cached
Mem:          2000        351       1648         16         11         90
-/+ buffers/cache:        249       1751

cat

cat(concatenate) 명령어는 파일의 내용을 화면에 출력해주는 역할을 한다. 사용법은 다음과 같다.

$ cat [options] file

사용할 수 있는 옵션은 다음과 같다.

-b: 줄 번호를 왼편에 나타내며, 공백은 제외한다.
-n: 줄 번호를 왼편에 나타내며, 공벽도 포함한다.
-v: 탭과 개행문자를 제외한 제어문자를 ^로 출력한다.
-E: 행 끝에 $를 추가한다.
-e: -vE, 제어문자를 ^형태로 표현하며, 각 행의 끝에 $를 추가한다.
-T: 탭문자(^I)를 출력한다.
-A: -vET, eT
-s: 중복되는 빈행은 하나로 처리한다.

dd

블록단위로 파일을 복사하거나 파일 변환을 할 수 있는 명령어이다. 데이터에 직접 접근하여 복사나 변환을 수행한다.

$ dd if=/dev/zero bs=1G count=1 of=1GB_file  # 빈 1Gb파일 생성

주로 사용하는 옵션은 아래와 같다.

if: 표준입력 대신 지정한 파일을 입력으로 받는다.
of: 표준출력 대신 지정된 파일에 출력한다.
bs: 블록사이즈 지정, ibs와 obs를 한번에 지정한 것과 같다.
ibs: 읽어들이는 블록사이즈 지정
obs: 출력하는 블록사이즈 지정
count: 입력블록의 ibs크기만큼 count번 복사
skip: 입력 시작시 블록단위만큼 ibs크기를 건너뛰고 입력을 시작
seek: 출력 시작시 블록단위만큼 obs크기를 건너뛰고 출력을 시작

rm

파일, 디렉토리를 삭제하는 리눅스 명령어이다. 사용방식은 다음과 같다.

$ rm [options] file

자주 사용하는 옵션은 아래와 같다.

-f: 삭제확인 과정을 거치지 않음
-i: 삭제 전 사용자에게 확인을 거침
-r: 하위 디렉토리를 포함 모든 내용을 삭제
-d: 빈 디렉토리 제거
-v: 지워지는 파일의 정보를 출력

mount

mount 명령어는 운영체제에게 파일 시스템이 사용준비가 되었음을 지시하고, 이를 파일 시스템 계층 구조에 있는 특정 지점에 연결시킨 다음, 접근에 관련한 옵션을 설정한다. 마운트를 통해 파일시스템, 파일, 디렉토리, 장치, 특수파일을 사용할 수 있게 한다. 반대 기능을 가진 unmount 옵션도 존재한다.

$ mount [-t type] [-o option] [device file] [mount point]

사용가능한 타입은 다음과 같다.

ext2: 리눅스 파일 시스템
ext3: 저널링 파일 시스템 (파일 복구 가능)
ntfs: 윈도우 파일 시스템
fat32 ...

/etc/fstab을 수정하여, 영구적 마운트를 설정해줄 수 있다.

ln

ln은 Link의 약어로서 리눅스 파일시스템에서 링크파일을 만드는 명령어이다. 리눅스에는 심볼릭링크와 하드링크 두가지 링크 파일이 존재한다.

  • 심볼릭 링크: 단순히 원본파일을 가리키도록 링크만 생성해둔 것으로, 윈도우의 바로가기를 연상하면 된다.
  • 하드 링크: 원본파일과 다른 이름으로 존재하는 동일한 내용의 다른 파일. 원본과 링크 둘 중 하나를 삭제하더라도 다른 하나는 남아있으며, 원본의 내용이 변경될 경우 링크파일의 내용또한 자동으로 변경된다.

링크는 다음과 같은 명령어를 이용해 생성할 수 있다.

$ ln [options] source link    # 하드링크 생성
$ ln -s [options] source link # 심볼릭링크 생성

사용할 수 있는 옵션은 다음과 같다.

-f: 대상파일이 이미 존재할 경우 지우고 새 링크파일 생성
-i: 대상파일이 이미 존재할 경우 지울것인지 물어봄
-b: 대상파일이 이미 존재할 경우 백업파일을 만든 후에 링크파일을 생성

tar

tar는 리눅스 파일시스템을 아카이빙하고 압축하는 명령어이다. 여러 옵션이 있지만, 자주 사용하는 명령어들은 다음과 같다.

$ tar -cvf [파일명.tar] [폴더명]      # 폴더를 압축
$ tar -xvf [파일명.tar]             # 압축 해제
$ tar -zcvf [파일명.tar.gz] [폴더명]  # gz로 압축
$ tar -zxcf [파일명.tar.gz]         # tar.gz 압축 해제
$ tar -rvf [압축파일명.tar] [새파일]   # 기존 압축에 새 파일 추가
$ tar -tvf [압축파일명.tar]          # 내용 확인

touch

touch는 파일의 날짜 및 시간정보를 변경하는 명령어이다. 옵션을 지정하지 않으면 크기가 0인 파일을 생성한다. 옵션은 아래와 같다.

-c: 현재 시간으로 변경
-t: 뒤따라오는 시간으로 변경
-r: 뒤따라오는 파일의 시간과 같게 변경

$ touch -t 199210151200 testfile

mkdir

mkdir(make directory)는 디렉토리를 생성하는 명령어이다. 기본적인 사용법은 다음과 같다.

$ mkdir [options] path/to/folder

주로 사용하는 옵션은 다음과 같다.

-p: 상위 디렉토리 자동 생성
-m: 퍼미션 지정 생성

검색

find

find는 파일, 파일내 검색을 할 수 있는 명령어이다. 지정된 경로에 입력한 옵션 및 조건에 맞는 파일을 찾아주는 기능을 한다. 사용법은 아래와 같다.

$ find [path] [options] [expression]

경로가 옵션 앞에 오는데, 입력하지 않으면 현재 경로를 기준으로 검색한다. find에서는 다양한 옵션을 이용해 검색할 수 있는데, 사용할 수 있는 옵션들은 아래와 같다.

-name: 파일이름이 문자열과 일치하는 파일을 찾는다. (find -name *log)
-user: 특정소유자의 파일을 찾는다.
-perm: 특정 퍼미션을 가진 파일을 찾는다.
-type: d,l,f,p,s,b,c등 특정 형태의 파일을 찾는다.
-mtime: m일 이전에 수정된 파일을 찾는다.(mtime, ctime, atime)
-size: 파일 크기를 기준으로 찾는다.
-exec: 찾은 파일과 연계하여 명령을 내린다. 제일 끝에 \;를 붙여주어야 한다.

grep

grep은 텍스트 검색 기능을 가진 명령어이다. global | regular expression | print에서 따온 말이다. 기본적인 사용법은 다음과 같다.

$ grep [options] [pattern] file

주로 사용하는 옵션은 다음과 같다.

-c: 패턴이 일치하는 행의 수를 출력
-i: 비교시 대소문자 구별을 안함
-v: 지정한 패턴과 일치하지 않는 행만 출력
-n: 행의 번호와 함께 출력
-l: 패턴이 포함된 파일의 이름을 출력
-w: 패턴이 전체 단어와 일치하는 행만 출력

프로세스

at

반복되는 예약작업을 할 경우에 cron을 이용하면 되지만, 단발적인 예약작업을 사용하기 위해 cron을 설정해주는 것은 매우 번거로운 일이다. 이런 경우에 at를 사용하면 편리하게 예약작업을 만들어줄 수 있다. 사용방법은 다음과 같다.

$ 명령어 | at 00:00 0000-00-00
$ 명령어 | at 00:00
$ at 0000-00-00 00:00 스크립트.sh

예약작업 목록 확인 및 삭제는 다음과 같이 수행한다.

# 목록 확인
$ atq
1   Mon Jan  9 11:11:00 2017
$ at -l
1   Mon Jan  9 11:11:00 2017

# 작업 삭제
$ atrm 1
$ at -d 1
$ at -r 1

cron

cron은 반복적인 예약작업을 수행해주는 데몬이다. 설정방법은 다음과 같다.

*   *   *   *   *  수행할 명령어
┬   ┬   ┬   ┬   ┬
│   │   │   │   │
│   │   │   │   │
│   │   │   │   └───────── 요일 (0 - 6) (0 =일요일)
│   │   │   └────────── 월 (1 - 12)
│   │   └─────────── 일 (1 - 31)
│   └──────────── 시 (0 - 23)
└───────────── 분 (0 - 59)

kill

kill은 프로세스에 시그널을 보내어 프로세스를 종료시키는 명령어이다. 사용법은 아래와 같다.

$ kill [SIGNAL] PID
$ kill -9 PID   # 응답없어도 강제종료
$ kill -15 PID  # 일반적 종료

기억해둘만한 시그널과 ID는 다음과 같다.

SIGINT(2) 프로세스 인터럽트 (Ctrl + C)
SIGQUIT(3) 프로세스 중단
SIGKILL(9) 프로세스 강제종료
SIGALRM(14) 알림 발생
SIGTERM(15) 프로세스 종료
SIGCONT(18) 프로세를 재시작하라
SIGSTOP(19) 프로세스를 일시정지
SIGTSTP(20) 프로세스 일시정지 (Ctrl + Z)

nice

특정 프로세스가 실행될 때 우선순위를 지정하여서 실행속도를 높여주는 도구이다. 기본 nice값은 부모 프로세스의 것을 따르며 보통 0으로 시작한다. 일반적으로 프로세스가 가질 수 있는 nice값 범위는 -20~19이며, -20이 가장 우선순위가 빠르고 +19는 가낭 낮은 우선순위를 의미한다.

새로운 프로세스를 실행할 때 nice명령어를 이용해 nice값을 지정해줄 수 있다.

$ nice -n [nice값] 프로세스

renice 명령어는 이미 실행중인 프로세스의 nice값을 변경할 수 있다.

$ renice -n [nice값] -p [PID]

ps

ps(process status)는 시스템에서 현재 수행되고 있는 프로세를 확인하는 기초 명령어이다. 보통 grep과 함께 특정 프로세스를 검색하는 용도로 많이 사용된다.

$ ps -ef | grep httpd

주로 사용하는 옵션은 다음과 같다.

-e: 모든 프로세스
-f: full format으로 보여준다.
-u: 각 프로세서의 사용자 이름과 시작 시간을 보여준다.
-j: 작업 중심 형태 출력
-s: 시그널 중심 형태 출력
-a: 다른 사용자들의 프로세스도 출력

프로세스들을 계층형 구조로 확인하고 싶으면 pstree를 사용하면 된다.

top

top은 시스템의 운용사항을 실시간으로 모니터링할 수 있는 유틸리티로, 윈도우의 작업관리자를 연상하면 된다. CPU, 메모리, 프로세스등을 확인할 수 있다.(네트워크 부하율은 표시되지 않는다.)

$ top
top - 15:50:02 up  6:54,  3 users,  load average: 0.02, 0.01, 0.00
Tasks: 190 total,   1 running, 189 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.3 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem:   2048612 total,   409288 used,  1639324 free,    20092 buffers
KiB Swap:  2093052 total,        0 used,  2093052 free.   109268 cached Mem

  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
    7 root      20   0       0      0      0 S  0.3  0.0   0:12.48 rcu_sched
 1356 nobody    20   0  589740  14128   3528 S  0.3  0.7   0:18.50 msp-rqwatcher:
 1646 snmp      20   0   45632   6436   3708 S  0.3  0.3   0:10.95 snmpd
 3814 root      20   0       0      0      0 S  0.3  0.0   0:00.18 kworker/u2:0
    1 root      20   0   33828   4192   2672 S  0.0  0.2   0:00.92 init
    2 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kthreadd
    3 root      20   0       0      0      0 S  0.0  0.0   0:00.72 ksoftirqd/0

top을 실행하면서 프로세를 죽이거나 우선순위를 변경하는 등의 작업을 할 수 있다.


네트워크

netstat

netstat(network status)는 네트워크 접속, 라우팅 테이블, 네트워크 인터페이스의 통계 정보를 보여주는 도구이다. 기본적인 문법은 아래와 같다.

$ netstat [options]

netstat은 다양한 옵션을 이용해 출력할 수 있는데 기억해둘 만한 옵션들은 다음과 같다.

-a(all): 모든 소켓 보기, 이 옵션이 없으면 Established 상태만 출력된다.
-c(continuous): 실행명령을 매 초마다 실행
-e(extend): 확장 정보 추가, User부분과 Inode열이 추가된다.
-l(listening): Listening상태인 소켓 리스트만 보여준다.
-n(numeric): 도메인 주소를 읽지않고 숫자로 출력
-p(program): PID와 사용중인 프로그램명이 출력
-r(route): 라우팅 테이블 보기
-t(tcp)
-u(udp)

nslookup

nslookup(name server lookup)은 네임 서버 관련된 조회를 할 수 있는 명령어이다. 사용법은 아래와 같다.

$ nslookup google.com           # 구글의 ip확인
$ nslookup -query=mx google.com # 구글의 MX확인
$ nslookup -type=ns google.com  # NS레코드로 DNS목록 확인
$ nslookup 209.132.183.181      # Reverse DNS lookup

ssh

ssh(secured shell)은 네트워크를 통해 다른 컴퓨터에 접근하거나 그 컴퓨터에서 명령 실행등을 할 수 있도록 해준다. 기본 사용법은 아래와 같다.

$ ssh id@host

기본적으로 22번 포트로 접속을 시도하며, 다른 포트를 이용하려면 -p옵션을 사용하면 된다.
ssh명령어 뒤에 명령어를 추가하여 원격으로 접속하여 특정 작업을 수행할 수 있다.

$ ssh id@host mkdir /test

iptables

iptables는 시스템 관리자가 리눅스 커널 방화벽이 제공하는 테이블과 그것을 저장하는 체인, 규칙들을 구성할 수 있게 해주는 어플리케이션이다.

체인: 미리 정의 된 세 가지 체인이 존재한디.

  • INPUT: 호스트 컴퓨터를 향한 모든 패킷
  • OUTPUT: 호스트 컴퓨터에서 발생하는 모든 패킷
  • FORWARD: 호스트 컴퓨터가 목적지가 아닌 모든 패킷, 즉 라우터로 사용되는 컴퓨터를 통과하는 패킷

매치: 패킷을 처리할 때 만족해야될 조건들을 가리킨다. 즉 이 조건을 만족시키는 패킷들만 규칙을 적용한다.

  • -s: 출발지 IP주소와 매칭
  • -d: 목적지 IP주소와 매칭
  • -p: 특정 프로토콜과 매칭
  • -t: 처리될 테이블
  • -j: 규칙에 맞는 패킷을 어떻게 처리할 것인가

타겟: 규칙과 일치할 때 동작을 취하는 타겟을 지원한다.

  • ACCEPT: 패킷을 받아들인다.
  • DROP: 패킷을 버린다.(패킷이 전송된 적 없던 것 처럼)
  • REJECT: 패킷을 버리고 동시에 적잘한 응답 패킷을 전송한다.
  • LOG: 패킷을 syslog에 기록한다.
  • RETURN: 호출 체인 내 패킷 처리를 계속한다.

텍스트 처리

awk

awk는 입력으로부터 한 줄씩 읽어서 정규표현식으로 조건이 맞는지를 검사하고, 참으로 판명되면 그 줄에 대한 명령어를 실행하는 형식으로 동작한다. 기본적인 사용형식은 다음과 같다.

$ awk [options] 'pattern{action}' filename

옵션은 다음과 같다.

-F 필드구분자: 필드구분자를 지정한다. 기본 구분자는 공백이다.
-f 파일명: 스크립트 파일을 불러온다.

패턴부분은 다음과 같은 방식으로 정의해줄 수 있다.

BEGIN: 입력파일을 읽어들이기 전에 제시되는 문자를 실행시킬 때 지정
END: awk가 모든 입력을 처리한 후 제시되는 문자를 실행시킬 때 지정
/문자열/: 문자열과 일치하는 라인을 찾아 action을 실

액션부분에는 보통 print가 위치하며, 다양한 시스템변수도 갖고 있다.

$ awk '{print 시스템변수}' filename

FILENAME | 현재 처리중인 파일명
FS | 필드 구분자로 디폴트는 공백
RS | 레코드 구분자로 디폴트는 새로운 라인
NF | 현재 레코드의 필드 개수
NR | 현재 레코드의 번호
OFS | 출력할 때 사용하는 FS
ORS | 출력할 때 사용하는 RS
$0 | 입력 레코드의 전체
$n | 입력 레코드의 n번째 필드

df 명령을 이용해 출력되는 내용 중 두번째 필드가 5000이상인 행을 출력하라.

$ df | awk '$2 >= 5000 {print}'

cut

cut은 리눅스 파일에서 필요한 부분만 추출할 때 사용한다. 다음과 같이 사용할 수 있다.

$ cat /etc/passwd | head -3
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
$ cat /etc/passwd | head -3 | cut -f1 -d':'
root
deamon
bin

-f옵션은 필드의 순번, -d옵션은 필드 구분자를 나타낸다.

head / tail

head와 tail은 라인이 많은 텍스트파일의 앞/뒤의 일부분만 출력해보기위해 주로 사용하는 명령어이다. 일반적인 사용법은 아래와 같다.

$ head/tail [-라인 수] filename

라인 수를 옵션으로 주지 않으면 기본적으로 10줄씩 출력한다.
-f옵션을 주면 실시간으로 계속해서 출력하여 보여준다.

sed

sed(stram editor)는 1개 라인단위로 입력을 받아 처리 후 표준출력으로 출력해주는 스트림 에디터이다. 사용예는 다음과 같다.

$ sed 's/hello/Hello/g' text.txt    # 파일 내의 hello를 Hello로 바꿈
$ sed '3,7/hello/d' text.txt        # 3~7라인에 hello를 포함하고 있는 라인을 삭제
$ sed -n '5,10s' text.txt           # 5~10번 라인을 출력

일반적으로 사용하는 옵션은 다음과 같다.

s: 대체
g: 라인의 첫번째 일치하는것 뿐만 아니라 그 뒤로도 계속 적용
n: 출력을 안함
p: n이 있더라도 출력함

출력만 하고, 저장을 하지는 않는다. 저장을 하려면 리다이렉션 등의 방법을 사용!

more

more는 파일을 한 페이지씩 끊어서 출력한다. 또한 vi와 연결되어 있어 편집 기능도 제공하고, 파일을 보는 중에 외부의 다른 명령을 실행할 수도 있다. 아래와 같은 명령어를 이용해 실행할 수 있다.

$ more test.txt

‘!명령어 ~~’와 같이 외부 명령어를 사용할 수 있고, v키를 눌러 vi로 전환도 가능하다. /찾을구문을 이용해 내용 검색도 가능하다.

vi

문서 편집기로 가장 많이 활용하는 것이 vi이다. vi는 세가지의 모드가 있다.

  • 입력모드
    • 타이핑을 하여 파일의 내용을 입력
    • i,I,a,A,o,O,r,R을 입력하여 진입
  • 명령모드
    • 복사, 붙여넣기, 삭제 등의 편집기능의 활용
    • ESC를 눌러 진입
  • 콜론모드(ex모드)
    • 열기, 저장, 다른이름으로 저장등의 명령 수행
    • 명령모드에 :를 입력

명령 모드에서 자주 사용되는 기호는 다음과 같다.

  • 이동
    • G: 파일의 맨 끝으로
    • 1G: 파일의 맨 앞으로
    • ^: 현재 줄의 맨 앞으로(빈칸 무시)
    • 0: 현재 줄의 맨 앞으로
    • $: 현재 줄의 맨 뒤로
    • %: 짝을 이루는 기호 확인
    • w: 다음 단어로
    • b: 이전 단어로
    • e: 현재 단어의 끝 글자
  • 편집
    • y: 복사
    • yy: 라인 복사
    • 2yy: 두 줄 복사
    • p: 붙여넣기
    • d$: 커서부터 줄의 끝까지 삭제
    • dd: 라인 삭제
    • u: 복구하기
  • 찾기
    • /가: 현재 줄에서 아래방향으로 ‘가’를 검색
    • ?가: 현재 줄에서 위쪽방향으로 ‘가’를 검색

콜론모드에서는 ex편집기에서 사용하던 명령어를 사용할 수 있다.

  • 기본형식
    • :1,10 co 50: 1~10라인을 50라인 이후로 복사
    • :10,20d : 10~20라인을 삭제
    • :/pattern1/,/pattern2/d : pattern1부터 pattern2라인까지 삭제
    • :%s/pattern1/pattern2/g : 문서 내 pattern1을 전부 pattern2로 변경
  • 저장 및 종료하기
    • :w : 저장하기
    • :q : 종료하기
    • :100,$ w filename : 100라인~끝까지 filename이라는 이름으로 저장하기
    • :1,100 w filename : 처음~100라인까지 filename이라는 이름으로 저장하기
  • 읽기
    • :r filename : 현재 위치에 filename 읽어들이기
    • :150 r filename : 150라인 이후에 filename 읽어들이기
  • 다중 편집
    • :args : 현재 편집중인 파일목록 출력
    • :n : 다음 파일 열기
    • :e filename: filename이라는 파일 열기

탭 사이즈를 수정하고 싶으면 다음과같이 입력해주면 된다.

:set ts=4
:set sw=4
:set sts=4

항상 수정하고 싶다면 위 내용을 vimrc에 입력해두면 vim이 실행될때마다 저 명령을 수행한다.

wc

wc(word count)는 행 수, 단어 수, 바이트 수 등을 세는 명령어이다. 문자의 수나 가장 긴 행의 길이도 표시할 수 있다.

$ echo hello > file1
$ echo hello world > file2
$ wc file1 file2
 1  1  6 file1      # 1행 1단어 6바이트
 1  2 12 file2      # 1행 2단어 12바이트
 2  3 18 합계

기본형 보다는 행수 세기 혹은 가장 긴 행의 길이를 구하거나 단어의 수를 세는 용도로 많이 사용한다.

$ cat /etc/hosts | wc -l    # 라인 수 
43

$ cat /etc/hosts | wc -L    # 가장 긴 라인의 길이(바이트)
58

$ cat /etc/hosts | wc -c    # 단어의 수
1218

split

split은 큰 파일을 여러 작은 파일로 나눌 때 사용한다. 기본적 사용법은 아래와 같다.

$ split -b 100m filename    # filename을 100mb단위로 분할
$ split -l 1000 filename    # filename을 1000줄 단위로 분할
$ ls
xaa xab xac xab ...

sort

sort는 파일의 내용을 정렬하는 명령이다. 기본적인 사용법은 다음과 같다.

$ sort [options] [-o 저장될 파일명] [정렬할 파일명] [병합할 파일명]

옵션을 지정해주지 않으면 ASCII코드 순서대로 정렬을 하고, 정렬할 파일을 지정해주지 않으면 커맨드 입력으로 받아들인다. 지정할 수 있는 옵션은 다음과 같다.

-n: 비교 대상을 숫자로 한정
-f: 영어 정렬시 대소문자 구분 안함
-r: 역순 출력
-b: 앞에 붙는 공백 무시
-t: 필드 구분자 지정
-k: 정렬 기준 key 지정
-u: 정렬 후 중복행 제거
-o: 저장할 파일 명시, 명시하지 않으면 화면에 출력

:를 구분자로 2번째 열을 기준으로 정렬하려면 다음과 같이 입력하면 된다.

$ sort -t':' -k2 file

그외

usermod

usermod는 유저를 수정하는 명령어이다. 기본적 사용방법은 아래와 같다.

$ usermod [options] username

유저의 아이디를 바꾸려면 아래와 같이 사용한다.

$ usermod -l newid oldid

모듈

$ insmod    # 모듈 적재
$ lsmod     # 모듈 출력
$ rmmod     # 모듈 삭제
$ modprobe  # 모듈 적재
$ modinfo   # 모듈 정보 확인

패키지 관리자

yum

yum의 명령어는 다음과 같다.

$ yum check-update      # 업데이트가 필요한 패키지 체크
$ yum install package   # 패키지를 인스톨
$ yum list              # 설치된 패키지의 리스트
$ yum update package    # 패키지 업데이트
$ yum upgrade package   # 패키지 업그레이드
$ yum remove package    # 패키지 삭제

rpm

rpm의 명령어는 다음과 같다.

$ rpm -ivh package       # 패키지 설치
$ rpm -qa | grep package # 설치 확인
$ rpm -ev package        # 패키지 삭제
$ rpm -Uvh package       # 패키치 업그레이드

$ rpm -qf filename       # 파일이 속한 패키지 찾기
$ rpm -qi package        # 패키지 정보 보기
$ rpm -ql package        # 내부 파일 목록 보기 

apt-get

apt-get의 명령어는 다음과 같다.

$ apt-get update           # 패키지 인덱스 정보 업데이트(/etc/apt/sources.list)
$ apt-get upgrade          # 설치된 패키지 업그레이드
$ apt-get install package  # 패키지 설치
$ apt-get remove package   # 패키지 삭제

설치된 패키지는 /var/cache/apt/archive/ 에 설치된다.


일반적 지식

리다이렉션

표준입출력(Standard I/O)기능은 입력/출력을 다루는 기본적인 방법을 제공한다. 기본 입출력 스트림에는 표준입력(0), 표준출력(1), 그리고 표준에러(2) 세 가지 종류가 있다.

  • 표준출력(stdout): 정상적인 출력
  • 표준에러(stderr): 에러메세지
  • 표준입력(stdin): 특별한 지정이 없으면 키보드로부터 입력을 읽어들임
$ cat afile bfile
this is afile
this is bfile
$ cat afile bifle >cfile # 표준 출력을 cfile로 리다이렉트
$ cat cfile
this is afile
this is bfile

리다이렉트을 하는 일반적인 방법은 다음과 같다.

기능 명령어
stdout을 file로 보냄 prog > file
stderr를 file로 보냄 prog 2> file
stdout과 stderr를 file로 보냄 prog > file 2>&1
stdin을 file로부터 가져옴 prog < file
stdout을 file의 끝으로 보냄 prog » file
stderr를 file의 끝으로 보냄 prog 2» file
stdout과 stderr를 file의 끝으로 보냄 prog » file 2>&1
c가 나올 때까지 키보드에서 stdin을 읽음 prog « c
stdout을 prog2로 파이프 prog | prog2
stdout과 stderr를 prog2로 파이프 prog 2>&1 |& prog2

히스토리

히스토리를 이용해 이전에 입력했던 명령어를 반복하거나, 변경하여 다시 사용할 수 있다. bash쉘은 bashrc에 히스토리의 사이즈를 정하고 있다.

$ grep HISTSIZE ~/.bashrc
HISTSIZE=1000

history명령어는 이전에 입력한 명령어들을 쉘이 실행된 후 몇 번쨰로 입력된 명령어인가를 나타내는 번호화 함께 출력한다. history뒤에 숫자를 붙이면 출력 개수를 제한할 수 있다.

$ history 4
2117 ls
2118 grep HISTSIZE ~/.bashrc
2119 ll
2120 cd ..

-w옵션을 주면 현재 히스토리를 파일로 저장할 수 있다.

$ history -w history.log
$ !!    #마지막 명령행을 반복한다.
$ !:    #마지막 명령행을 반복한다.
$ !so   #so로 시작하는 가장 최근의 것을 반복한다.
$ !?fn? #fn을 포함하는 것 중 가장 최근의 것을 반복한다.
$ !34   #34번쨰 히스토리를 반복한다.
$ !!&    #마지막 명령을 백그라운드에서 반복한다.

작업제어

명령어 의미
command & 백그라운드에서 command를 실행. 계속해서 포그라운드에서 다른 작업들을 실행할 수 있음
CTRL+c INTR 시그널을 보내서 포그라운드 작업을 죽임
CTRL+z TSTP 시그널을 보내서 포그라운드 작업을 중지시킴
suspend 쉘을 중지시킴
stop 명령어 또는 같은 기능의 앨리어스를 이용해 백그라운드 작업을 중지시킴
bg %num 중지된 작업을 백그라운드에서 계속 실행되도록 함
fg %num 백그라운드 작업이나 중지된 작업을 포그라운드로 가져옴
kill &num 특정 백그라운드 작업을 중지시킴
kill pid 프로세스 ID를 이용해 특정 백그라운드 작업을 종료시킴
jobs 백그라운드 작업과 중지된 작업을 작업 번호와 함께 나열함
set notify 작업의 상태가 바뀌면 즉시 통보함
stty tostop 백그라운드 작업들이 화면에 메세지를 출력하지 못하도록 함
nohup command & 세션이 끊기더라도 백그라운드에서 작업을 계속함

환경변수

# 환경변수 확인
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/root/jsh/shell

# 환경변수 리스팅
$ printenv
SHELL=/bin/bash
TERM=xterm-256color
USER=root
...

# 환경변수 생성
$ export TEST='testing'
$ echo $TEST
testing

# 환경변수 삭제
$ unset TEST
$ echo TEST

환경변수 PATH는 Shell에서 명령을 실행할 때 해당 경로에서 찾으라고 알려주는 것이다. PATH를 추가하기 위해서는 .bashrc 혹은 .bash_profile에 다음 내용을 추가하면 된다.

export PATH=$PATH:path/to/add

기본 PATH는 /etc/environment에 있다.

기타

포트

20, 21 FTP
22 SSH
25 SMTP
53 DNS
80 HTTP
109 POP2
110 POP3
143 IMAP4
443 HTTPS

디렉토리 구조

디렉토리 목적
/ 루트 디렉토리
/bin(or /sbin) 시스템을 부팅하는 데 필요한 핵심 실행 파일이 저장된 디렉토리
/dev 시스템에 연결된 장치들, 예를들어 터미널, 디스크, 테이프, 모뎀
/etc 패스워드, 네트워크 주소와 이름, 시스템 시작 설정 등을 포함하는 시스템
/home 사용자 디렉토리
/lib 프로그램을 위한 다양한 공용 라이브러리들의 홈
/mnt 다른 시스템으로부터 익스포트 된 파일 시스템들을 임시로 마운트하고 있는 위치
/proc 시스템에서 현재 실행되고 있는 프로세스들의 이미지
/tmp 부팅 중 없어질 임시 파일들, 재부팅되면 여기 있는 모든 파일들은 지워진다.
/usr /usr/bin은 일부 표준 시스템 유틸리티, /usr/man은 맨페이지, /usr/include는 C프로그램 헤더, /usr/sbin은 관리자 실행 프로그램
/var 주로 관리자 용인 다양한 파일들을 저장하는 디렉토리. 특히 log파일은 /var/log에 기록

쉘 변경

$ chsh username
패스워드 입력 후 바꾸고자 하는 쉘의 경로명을 입력

스크린

$ screen -S screenName  # 스크린 생성
Ctrl + a + d            # 스크린 분리
$ screen -r screenName  # 스크린 재진입

정규식

패턴 의미
. 단일문자
[] 문자 범위
* 0회 이상
? 0회 또는 1회
+ 1회 이상
{a,b} a회이상 b회 이하
| 선택
^A 라인의 시작문자가 A
A$ 라인의 마지막 문자가 A
\b 문자 혹은 공백
\d 숫자
\s 공백
\t
\w 알파벳 혹은 숫자 혹은 _

Shell 스크립트 내장 변수

내장변수

  • $$: 해당 프로세스의 PID값
  • $?: 가장 최근에 실행한 명령의 종료값(exit code)
  • $#: 프로그램에 전달된 인수의 갯수
  • $0: 명령 수행 시 명령의 이름을 기억하는 변수값
  • $n: 전달된 n번째 인수
  • $*: 전달된 인수들 전체를 하나의 문자열로 표시
  • $!: 마지막으로 실행된 백그라운드 프로세스 PID값

exit code

  • 0: Successful completion of the command
  • 1: General unkown error
  • 2: Misuse of shell command

logrotate

logrodate를 이용해 로그파일을 순환, 압축, 메일링 할 수 있다. cron을 사용해서 한다.
하루, 일주일, 한달 등 시간단위로 로테이트 하는 것이 가능하며, 용량을 제한해 로테이트하는 것 역시 가능하다. 압축 및 메일링도 가능함.

IP 주소 체계

  • IPv6: 128bit를 16비트씩 16진수로 표현하여 8자리로 나타냄
  • IPv4: 32bit를 8비트씩 10진수로 표현하여 4자리로 나타냄

가상화

하이퍼 바이저는 시스템의 자원을 분할하여 여러 개의 가상 머신을 생성 및 관리해주는 프로그램으로, 서버 가상화 기술은 하이퍼바이저의 활용 방법, 지원 기능, 활용도 등을 기준으로 1~3세대로 나눌 수 있다.

  • 1세대
    • 하나의 물리적 서버에 하이퍼바이저를 이용하여 여러 개의 가상 머신을 생성/삭제/운영하는 수준
    • Xen, KVM, VirtualBox등이 이에 해당
  • 2세대
    • 다수의 물리적 서버 자원을 통합하여 관리기능을 제공하는 기술
    • 여러 대의 서버를 하나로 묶어서 하나의 서버 풀을 구성하고, 물리적 서버간 관리와 에러처리등이 가능
    • Oracle VM, vSphere, XenServer
  • 3세대
    • 다양한 하이퍼바이저들을 통합관리하기 위한 플랫폼
    • 각기 다른 하이퍼바이저 위에 운영되는 가상머신을 관리 가능
    • Openstack, Cloudstack, Eucalyptus, OpenNebula
  • 최근에는 하이퍼바이저 없이 프로세스 형태로 동작하는 컨테이너 방식인 Docker도 자원의 효율성 면에서 각광받고 있다.

용량 제한

$ ulimit -f 2000

앨리어스

$ alias dir='cd'
$ unalias dir

헷갈리는 내용

‘_‘를 구분자로 하여 3번째 필드로…

$ sort -t'_' -k3 filename
$ cut -d'_' -f3 filename
$ awk -F_ '{print $3}' filename

인자의 순서

$ usermode -l newname oldname
$ ln -s file link
$ tar -cvf file.tar file
$ mount device mount_point
through.kim's profile image

through.kim

2017-01-09 08:53

Read more posts by this author