커널 모드 : 유저모드로는 접근 할 수 없도록 되어있는 시스템역역(커널)에 접근하기 위해 동작되는 실행모드.

유저 모드 : 유저가 접근할 수 있는 OS 영역 내에서 동작되는 실행 모드. 


모드를 나누는 목적 : 보안성과 안전성의 확보


유저들이 마음대로 접근해도 되는 영역에 대해서 유저 모드로 접근이 되도록 하고 커널에 요청해서 처리할 문제가 있을때만 일시적으로 커널 모드로 전환해서 커널 내의 처리 요청을 처리하고 일을 마치면 다시 유저 모드로 

전환되어 실행이 된다.


유저 애플리케이션이 치명적인 운영체제 데이터에 접근하거나 수정하지 

못하게 막기 위해 운영체제는 두 가지 프로세서 접근모드를 사용한다.

유저 애플리케이션 코드는 유저 모드에서 실행되고, 운영체제 코드는 커널 모드에서 실행된다.

커널 모드는 모든 시스템 메모리와 모든 *CPU 인스트럭션에 접근이 허가된 프로세서의 실행 모드를 말한다.

프로세서는 운영체제 소프트웨어에 애플리케이션 소프트웨어가 가진 것보다 높은 특권 레벨을 제공함으로써 

오동장을 유발하는 애플리케이션이 시스템 전체의 안정성을 해치지 않게 보장할 수 있는 필수 기반을 운영체제 

설계자에게 제공한다.


* CPU instruction : CPU 명령어


[ 특징 ]


+ 유저모드 +

1. 사용자 애플리케이션 코드가 실행한다.

2. 시스템 데이터에 제한된 접근만이 허용되며 하드웨어를 직접 접근할 수 없다.

3. 유저 애플리케이션은 시스템 서비스 호출을 하면 유저 모드에서 커널 모드로 전환된다.

4. CPU는 유저 모드 특권 수준으로 코드를 실행한다.

5. 유저 모드에서 실행하는 스레드는 자신만의 유저 모드 스택을 가진다.


+ 커널모드 +

1. 시스템의 모든 메모리에 접근할 수 있고 모든 CPU 명령을 실행할 수 있다.

2. 운영체제 코드나 디바이스 드라이버와 같은 커널 모드 코드를 실행한다.

3. CPU는 커널 모드 특권 수준에서 코드를 실행한다.



출처 : http://karasix.tistory.com/115


▶ 메모리 보호란?


컴퓨터 메모리의 사용을 제어하는 방법이며, 모든 운영 체제에서 중요한 쟁점 사항 중 하나이다.

운영 체제에서 실행하고 있는 프로세스가 자신에게 할당되지 않은 영역의 메모리에 접근하는 것을 막는 것이 

메모리 보호의 주된 목적이다. 이를 통해 프로세스 내의 버그가 다른 프로세스의 동작에 영향을 미치는 것을

예방하며, 악성 소프트웨어가 허가되지 않은 접근권한을 갖고, 시스템에 영향을 끼치는 것을 막아준다.



Ⅰ. ASLR 


Address Space Layout Randomization 의 약자로, 

메모리 상의 공격을 방어하기 위해서, 주소 공간 배치를 난수화 시키는 기법

( 스택, 힙, 라이브러리 등의 데이터 영역 주소등을 난수화 시킨 주소로 프로세스 주소 공간에 배치하는 것. )

*PIE 가 걸려있지 않을땐 binary 영역이 정적이므로 binary 영역을 이용해 우회할 수있다. 주로 *ROP를 사용한다. 


* PIE : Position Independent Executable 의 약자로, 바이너리에 적용되는 ASLR을 일컫는다.

PIE는 바이너리 영역이 배치된 주소를 알아낼 수 있는 메모리 릭 취약점이 존재할 경우 이를 알아온 후 ROP로 익스플로잇이 가능하다.


* ROP : Return Oriented Programming 의 약자로, 취약한 프로그램 내부에 있는 기계어 코드 섹션 

          ( *Gadget ) 들을 이용하여, BOF 공격 시 특정 명령을 실행시키는 방법을 말한다. 

          이러한 ROP는 메모리 보호기법들을 우회할 수 있기 때문에 Fedora core 13( kernel 2.6.33.3-85 )에서 

          BOF 공격이 가능하다.

L ROP는 RTL, Chaning RTL calls, GOT overwrite의 3가지 특징적인 기술을 사용한다.


*Gadget : Gadget은 함수 끝에 기술되어 있는 ret 명령어를 포함한 상위 몇가지 명령어들의 집합이며, 

             이를 이용하여 단 한번의 실패없어 한번에 공격을 성공 할 수 있다.



Ⅱ. Stack Canary


gcc 4.1 버전 이후부터는 Stack Overflow를 방지하기 위해 SSP (stack-smashing protector) 기능이 내장되어 있다.

SSP는 함수 진입 시 스택에 Return address 와 frame pointer 정보를 저장할 때, 이 정보를 보호하기 위해 

( Canary라고 부르는 ) 특정한 값을 기록해두고 함수에서 반환할 때 기록된 값이 변경되지 않았는지 검사한다.

만약 악의적인 사용자가 buffer overflow 등의 공격을 통해 스택 내의 정보를 덮어쓰려면, 

canary 값을 먼저 덮어써야 하기 때문에, canary 값만 보면 공격이 일어났는지 볼 수 있다.

Canary 는 Window 에서의 메모리 기법인 Stack Cookie 와 같은 개념으로,  Buffer 와 RET 사이에서 스택의 BOF를 모니터링 하는 역할을 담당한다.



Ⅲ NX ( DEP )


Non-eXecutable 의 약자로, 메모리 상의 보호를 위해 Stack 과 Heap 에서 코드가 실행되는 것을 막는 기법.

write 권한과 execute 권한을 동시에 갖지 않도록 메모리 페이지의 권한을 설정합니다.

공격자가 BOF 공격을 일으키면 옛날엔 그 메모리에 쉘코드를 넣고 Return Address를 쉘코드를

가르키게 하는 것이 가능했는데, DEP 가 적용된 상태에서는 실행 권한이 없으므로, 

쉘코드가 있어도 프로그램에 대한 예외 처리가 발생되고 종료된다.



'Operating System > Linux' 카테고리의 다른 글

리눅스 명령어  (0) 2015.08.26

A


adduser

루트로 로그인해서 이용자를 추가합니다.
# adduser zzz
zzz란 아이디를 만든다.
# adduser -p bbb -g ggg -s '/bin/bash' -d '/home/www' zzz
비밀번호가 bbb이고 그룹은 ggg 쉘은 bash 홈디렉토리는 /home/www 인 zzz란 아이디를 만든다.

 

 


alias

자주 쓰이는 명령어를 쓰기 편하게 바꾸는 명령입니다.

 

$ alias

alias cp='cp -i'

alias la='ls $LS_OPTIONS -a'

alias less='less -rf'

alias lf='ls $LS_OPTIONS -F'

alias ll='ls $LS_OPTIONS -l'

alias ls='ls $LS_OPTIONS'

alias mv='mv -i'

alias rm='rm -i'

 

 

$ alias dir='ls -al'

dir 명령어가 ls -al 명령어를 대산합니다. 한글로도 사용 가능합니다.

 

B

bg

사용중인 프로그램의 수행을 백그라운드로 수행합니다.

 # bg

 

 

 


bash

bash 셸이 아닌 사용자가 셸을 변경하고자 할 때 사용하는 명령입니다.
bash셸은 일반적으로 Linux의 기본 셸로 지정되어 있습니다.
만약 다른 셸을 사용하고 있으면서 bash 셸로 바꾸기 위한 명령은 다음과 같습니다.

# bash     (enter)'

 

c

C


cat

cat(conCATenate)은 파일의 내용을 표준 출력으로 내보내어, 파일내용을 알아보거나, 여러 파일을 하나의 파일로 출력하여 연결합니다. 또는 표준 입력으로부터 파일을 만들 수도 있습니다.

    cat [options] [file(s)]

파일 이름이 주어지지 않으면, 표준 입력으로 입력 받습니다.

   

옵션 :   -n 행 번호를 붙인다.

          -u 버퍼를 통하지 않고 출력시킨다.

          -A 화면 제어 문자를 보여준다. 라인의 끝은 $, 탭문자는 ^l로 보여준다.

 

ex)

control-D를 입력할 때까지 키보드(표준 입력)에 입력한 내용을 memo라는 파일로 저장한다.             

   cat > memo

 

test2와 test12 파일을 연결하여 te1이라는 파일에 저장한다.

   -rw-r--r--   1 hjh      linux         139 Sep 21 19:53 te1

  -rw-r--r--   1 hjh      linux         281 Sep 14 21:46 test2

  $ cat te1 test2 > test12

  -rw-r--r--   1 hjh      linux         139 Sep 21 19:53 te1

  -rw-r--r--   1 hjh      linux         420 Oct  7 16:53 test12

  -rw-r--r--   1 hjh      linux         281 Sep 14 21:46 test2

 

 

 

 


chfn

사용자의 finger 정보를 바꾸는 명령어입니다.

 

$ chfn

Changing finger information for hjh.

Password:

Name [hjh]: hjh

Office [hjh]:

Office Phone [hjh]:

Home Phone [hjh]:

 

Finger information changed.

 

 

chfs

사용자의 shell을 바꾸는 명령어입니다.

 

$ chsh

Changing shell for hjh.

Password:

New shell [/bin/bash]:

 

 

 

D

date

현재 시각을 출력합니다.

 

$ date

Sat Oct  7 17:34:34 KST 2000

 

 

 

df

파일 시스템 구조와 용량등을 보여줍니다.

 

$ df

Filesystem           1k-blocks    Used Available   Use% Mounted on

/dev/hda6              3016144   1231812   1631120     43% /

/dev/hda1                19487      3198        15283     17% /boot

/dev/hdb2               425582    193543     210065     48% /opt

/dev/hdb1               605164    137520     436904     24% /home/ftp

/dev/hdc                661404    661404             0    100% /home/ftp/pub/cdrom

/dev/hdd                559026    559026             0    100% /home/ftp/pub/cdrom1

 

$ df -m    (파일 크기를 Mbyte단위로 보여줍니다.)

Filesystem           1M-blocks Used Available Use% Mounted on

/dev/hda6                 2945      1203      1593  43%     /

/dev/hda1                   19         3           15  17%     /boot

/dev/hdb2                  416       189        205  48%     /opt

/dev/hdb1                  591       134        427  24%     /home/ftp

/dev/hdc                   646       646           0 100%     /home/ftp/pub/cdrom

/dev/hdd                   546       546           0 100%     /home/ftp/pub/cdrom1

 

 

dmesg

부팅 메세지를 보여주는 명령입니다.

CPU 속도에 대한 간단한 지표(오로지 속도)로는 리눅스 부팅 초기에 화면에 표시되는BogoMIPS라는 것을 들 수 있다.

Probing PCI hardware
Calibrating delay loop.. ok - 47.82 BogoMIPS
Memory 47020k/49152k available (764k kernel
code, 384k reserved, 984k data)

부팅 화면이 너무 빠르게 지나간다면 로그인하고 나서 dmesg 명령을 사용하여 확인해보기 바란다. dmesg명령의 출력화면도 한 페이지를 넘어가므로 more 또는 less를 파이프로 연결하여 사용하기 바란다. 위 결과는 필자의 펜티엄 120MHz에 대한 BogoMIPS 결과이다.

그럼 BogoMIPS란 무엇인가? BogoMIPS 미니 하우투 문서에 잘 설명되어 있다. MIPS‘Millions of Instructions Per Second’를 의미하는 것으로서 초당 몇 번의 연산 명령을 수행할 수 있는지 여부를 보여주는 것이다. 당연히 이 값이 높은 시스템일수록 빠르다는 것은 분명한 사실이다. 하지만 비슷비슷한 수치 간의 비교는 상당히 힘든 방식이다.

BogoMIPS라는 말은 커널 제작자인 Linus가 만든 말로서 Bogo는 ‘Bogus’ 즉 가짜라는 의미를 가지고 있다. 그렇게 과학적이지는 않으므로 우스개소리로 넘기라는 뜻이라고 생각한다. 이 값은 프로세서의 속도에 따라 결정되어야 하는 타이밍 루프(timing loop)값이다.

 

 

du

파일 size를 kbyte단위로 보여줍니다.

 

-a 디렉토리뿐만 아니라 파일의 크기도 보여줍니다.

-b KB단위가 아니라, byte 단위로 나타냅니다.

-s 서브 디렉토리는 나타내지 않습니다.                                       

 

ex)

$ du

...........

4       ./ccc

804     ./WWW/images

1424    ./WWW

4       ./SSS

22280   .

 

총 size보여줍니다.

$ du -s

22280   .

 

$ du -s /usr/bin

72996   /usr/bin

 

e

E

echo

아큐먼트로 오는 문장이나 그 주소에 해당되는 값을 보여줍니다.

 

형식 : echo [-ne] [string]

 

옵션 :

-e 특수한 의미를 가지는 문자를 실행합니다.

\a 벨소리를 냅니다.

\b 백스페이스

\f 폼피드

\n 새로운 라인

\r 한 줄을 띄웁니다.

\t 가로방향의 탭

\\ 역슬래시

 

 

 

 

exit

현재의 프로세스를 종료하고 빠져나갑니다.

 

 

 

 

 

 

F

find

$ find hjh

hjh

 

find ---주어진 파일명과 동일한 파일을 찾고, 그 경로를 출력한다.

# find / -name newbie -print

최상위 루트 디렉토리부터 검색하여 검색된 파일을 한 행에 하나씩 표준 출력

# find . -name newbie -print

현제의 작업 디렉토리에서 검색

# find / -size +1000 -print

최상위 루트에서 크기가 1000블록 이상인 파일 검색

# find . -size -1000 -print

현 디렉토리에서 크기가 1000블록 이하인 파일 검색

# find . -mtime +10 -print

10일 이전에 수정된 파일 검색

# find . -mtime -10 exec rm {} \:

10일 이내에 수정한 파일을 검색하여 모두 지운다

# find / -cmin 5 -print

5분전에 마지막으로 수정된 파일을 찾을 수 있다.

# find /home -empty -print

/home 디렉토리에 용량이 0인 파일과 디렉토리를 찾는다.

# find / -perm -4000 -print

퍼미션이 4000 이상인 파일을 모두 출력한다.

 

 

finger

who 명령을 보충하는 명령이 finger입니다. 특정 사용자에 대한 정보를 알려면 finger username(또는 사용자가 다른 컴퓨터에 있으면 finger username@domain)을 입력합니다.

 

$ finger

Login   Name      Tty     Idle  Login Time   Office     Office Phone

hjh       hjh        /0          Oct  7 16:17 (linux5)

root      root      *1    22:52  Oct  6 17:34

root      root      *p0   22:30  Oct  6 17:36 (:0.0)

root      root      *p1   22:30  Oct  6 17:36 (:0.0)

 

 

free

도스에서의 mem 과 같은 역할을 하며, 메모리의 사용상태와 남은 상태, 버퍼의 상태등을 보여줍니다.

 

$ free

                  total       used       free     shared    buffers     cached

Mem:          30848      29844       1004      14324       1028       8900

-/+ buffers/cache:     19916      10932

Swap:         68504      39508      28996 

 

 

fsck

모든 파일 시스템을 체크합니다.

단일 사용자 모드에서의 부팅

단일 사용자 모드( single user mode, 실행 레벨 1)는 중요한 실행 레벨이다. 이 상태에서는 단지 관리자만이 시스템을 사용할 수 있으며, login 같이 시스템 가동에 필수적인 최소한의 서비스만이 실행된다. 단일 사용자 모드는 몇몇 시스템 관리 작업을 하기 위해서 필요한데, 예를 들자면 /usr파티션에 fsck를 실행시키는 일 같은 것들이다. fsck를 실행시키기 위해서는 해당 파티션을 언마운트시켜야 하는데, /usr 같은 파티션을 언마운트시키자면 거의 모든 시스템 서비스들을 종료시켜야 한다.

가동 중인 시스템을 단일 사용자 모드로 전환하려면, telinit를 사용해 실행 레벨 1로 전환하면 된다. 부팅시에는, 커널 명령행에 single이나 emergency라고 적어주면 커널이 이것을 init에 전달해 주게 되며, init는 이것을 알아듣고 기본 설정된 실행 레벨 대신 레벨 1번을 사용하게 된다. (커널 명령행 인자를 넣는 방법은 시스템을 부팅하는 방법에 따라 좀 다를 수 있다. 보통은 LILO에서 boot: 프롬프트가 떴을 때, "boot:linux single"과 같이 하는 방법을 쓴다.)

단일 사용자 모드는, 주로 손상된 파일시스템이 마운트되기 전에 fsck 명령을 수동으로 실행하기 위해서 사용된다. 손상된 파일 시스템을 그대로 다시 마운트하면 더욱 큰 손상을 입힐 수 있기 때문에, 손상된 파일시스템은 마운트한다거나 기타 다른 조작을 해선 안되며 가능한 빨리 fsck로 복구를 시도하여야 한다.

손상된 파일시스템이 발견되면 init가 자동으로 fsck를 실행하는데, 이 자동 복구가 실패하게 되면 init 스크립트는 자동으로 시스템을 단일 사용자 모드로 진입시킨다. 이렇게 하면, 손상이 심각하여 fsck가 자동으로 복구할 수 없는 파일시스템이 그대로 마운트되는 일을 막을 수 있다. 물론 이럴 정도로 심하게 손상되는 일은 상당히 드물며, 보통 하드디스크가 손상되었거나 실험적인 커널을 사용했을 경우에 가끔 발생할 수 있는 일이다. 그러나, 이런 사태에 대비하고는 있어야 하겠다.

보안상의 이유로, 제대로 설정되어 있는 시스템이라면 단일 사용자 모드에서 쉘을 실행시키기 전에 루트 패스워드를 물어올 것이다. LILO에서 커널 명령행 인수로 single 을 적어 주는 경우도 이와 같다.(그러나 /etc/passwd가 들어있는 파일시스템이 깨졌다면 단일 사용자 모드로도 들어 올 수가 없다. 결국 이럴 때는 부팅 플로피를 사용해야만 할 것이다)

 

 

G

gdm, xdm, kdm

/etc/inittab

서버에서 xdm을 실행해줄 필요가 있다. 이는 보통 /etc/inittab에서 제어되며 사용가능한 xdm서버는 여러가지가 제공된다. (xdm, gdm, kdm등)

xdm을 사용할 것을 권장한다.

/etc/inittab에서 다음줄을 찾는다.

x:5:respawn:/etc/X11/prefdm -nodaemon 
6.0에서는 prefdm은 gdm에 링크되어 있으며, 6.1에서는 prefdm은 어떤 xdm을 이용할 것인가를 결정하는 스크립트 파일이다.

이 줄을 다음과 같이 수정한다.

x:5:respawn:/usr/bin/X11/xdm -nodaemon
보통 xdm은 런레벨 5에서 작동된다. 서버가 어떤 런 레벨에 있는지는 다음 항목을 보면 알 수 있다. /etc/inittab파일의 initdefault항목을 보았을 때, 다음과 같다면
id:3:initdefault:
아래와 같이 고쳐준다.
id:5:initdefault: 

 

 

grep

파일 중에서 어떠한 패턴을 검색합니다. 입력으로 파일이 오지 않으면 표준 입력으로부터 입력을 받습니다.

 

형식 :  grep  문장 파일명

 

옵션----------------

-A [숫자] 라인에서 패턴과 매치되는 문자열을 찾아서 그 이상의 라인을 전부 보여줍니다.

-B [숫자] 라인에서 패턴과 매치되는 문장열을 찾아서 그 이하의 라인을 전부 보여줍니다.

-b 매치되는 라인과 그 크기(bite)를 출력합니다.

-c 매치되는 개수를 출력합니다.

-f 파일로부터 패턴을 입력받아 들입니다.

-n 매치되는 라인과 그 라인수를 출력합니다.

-v 매치되지 않는 라인을 출력합니다.]

-w 주어진 단어와 완전히 매치되는 라인을 출력합니다.

 

ex) finger가들어있는 것들을 모두 보여줍니다.

$ grep finger .bash_history

grep finger *

grep finger .*

grep finger

grep finger newfile > fin

history|grep finger

history|grep finger | more

finger

finger | sort  

 

 

groupadd

그룹이용자를 추가하는 명령입니다.

 Group passwords.

/etc/groups file은 사용자가 특정 group의 회원이 될 수 있도록 허용하는 password를 담고 있다. 이 기능은 /usr/src/shadow-YYMMDD/config.h의 SHADOWGRP 상수를 정의할 경우 작동된다.

만일 이 기능을 쓴다면, /etc/gshadow file을 만들어, group password와 group 관리자에 대한 정보를 담을 수 있도록 하라.

/etc/shadow를 만들 때, 당신은 pwconv를 썼지만, /etc/gshadow를 만드는 데에는 그런 program이 없다. 하지만 걱정말라. 알아서 하니까.

처음 /etc/gshadow를 만들기 위해서 다음처럼 해라:

touch /etc/gshadow

chown root.root /etc/gshadow

chmod 700 /etc/gshadow

당신이 새로운 group을 만든다면, 자동적으로 /etc/group와 /etc/gshadow file에 그들이 덧붙여진다. group에 사용자를 추가하거나 삭제, 또는 group password를 바꾸면, /etc/gshadow file은 따라서 바뀔 것이다.

groups, groupadd, groupmod, groupdel program이 group을 고치는 도구로써 Shadow Suite에 포함되어 공급된다.

/etc/group file의 형식 -------- groupname:!:GID:member,member,...

 

gpasswd 명령은 group의 사용자나 관리자를 추가, 또는 삭제할 때 쓴다. root또는 관리자만이 group member를 추가, 삭제할 수 있다.

group password는 root나 group 관리자에 의해 passwd 명령으로 바꿀 수 있다.

gpasswd에 대한 manual page가 현재 제공되어 있지 않지만, 아무런 parameter없이 gpasswd를 치면 option에 대한 list가 나오므로, file format과 개념만 잘 이해하면 사용법을 쉽게 익힐 수 있다.

 

  

H

head

파일의 처음 n개의 내용을 보고자할 때 사용하는 명령입니다.

 

ex)

$ head .bash_history    

cd test

ls

ls /bin

cd ..

ls /

alias ls

cd root

vi root

ls -al

ls /...........

 

 

history

작업한 내역을 보여줍니다.

 

ex) 최종작업 5가지를 출력합니다.

$ history 5

 1025  ls -l Desktop

 1026  ls -al

 1027  mv test1 test2

 1028  ls -al

 1029  history 5

 

 

I

id

사용자의 로그인명, ID, 그룹 ID등을 출력합니다.

 

$ id

uid=1013(hjh) gid=1000(linux) groups=1000(linux),100(users)

 

 

 ispell

영어 단어의 철자를 확인합니다.

    ispell [options] [file(s)]

파일 이름을 써주면 해당 파일의 단어를 검사하며, 파일 이름없이 실행시키면 표준 입력의 단어를 체크합니다. 해당하는 단어가 없을 때는 비슷한 단어들의 리스트를 보여줍니다.                    

 

 

install

파일을 갱신하고 이진 파일로써 인스톨하기 위해 makefile에서 종종 사용되는 유틸리티입니다.

 

 

 

j

J

 join

두 개의 파일에서 공통된 라인을 찾아 내는 명령입니다.

 

 

joe

emacs에 기초한 텍스트 에디터입니다.

 

 

 

 

K

 kill

실행되어 있는 프로세서 ID를 입력해서 프로세서를 종료하는 명령입니다.

좀비 프로세스 또한 kill명령을 사용하여 끝낼 수 있는데, kill -signal pid 와 같은 형식으로 사용하지만 -9(SIGKILL)이 무조건 종료시키기 위한 옵션으로 많이 쓰입니다. 
다른 시그널은 프로세스에 따라서 무시될 수도 있습니다. 
꼭 kill이 아니더라도 프로세스에게 시그널을 보낼 수있는데, 컨트롤 Z(susp)를 누르면 SIGSTOP이, quit(^)는 SIGQUIT, intr(^C)는 SIGINT가 실행중인 프로세스에게 전달됩니다.

 

 

 

 

L

last

시스템에 마지막으로 접근한 사용자를 표시합니다.
옵션 : -f  파일명을 참조하여 출력합니다.
        -t  tty로 로그인한 터미널을 추적합니다.
        -v  로그인한 연도를 추가해서 출력합니다.

 

 

less

파일을 한 page 단위로 출력합니다.
 

$ less .bash_history

 

 

lf

디렉토리를 모두 보여줍니다.

 

$ lf

Desktop/  a*   bbb   down/  finda  homepage.tar.Z   newfile*   te1     test2

SSS/      a.c  ccc/  err    his    homepage.tar.gz  newfile2*  test/   test3/

WWW/      aaa  doc@  fin    hjh    homepage.tar.z   nohup.out  test12

 

 

ln

앞의 파일, 디렉토리를 뒤로 링크시킴

$ ln -s /usr/doc/HOWTO/ $HOME/doc

 

 

 

locate

저장 위치를 찾아 줍니다.

목록을 DB화 시켜놓았기대문에 빨리 찾습니다.

 

$ locate ls

/usr/lib/python1.5/mimetools.py

/usr/lib/python1.5/mimetools.pyc

/usr/lib/python1.5/mimetools.pyo

/usr/lib/pgsql/python/tutorial/pgtools.py

/usr/lib/pgsql/test/performance/sqls

/usr/lib/pgsql/test/performance/sqls/connection........

 

 

login, logout

자신을 식별하고 시스템에 대한 액세스를 얻기 위해 사용하는 명령입니다. 

형식 : login -옵션 사용자명
옵션 : -f 뒤의 사용자명으로 로그인 합니다.
        -g 뒤의 그룹사용자명으로 로그인 합니다.

터미널 상태에서 login 이라고 입력하면 새롭게 리눅스 시스템에 다른 ID로 로그인할 수 있습니다.

 

 

ls

디렉토리와 파일의 정보를 출력합니다. 도스의 dir과 비슷합니다.

    ls [-ailFRC] [파일 또는 디렉토리]

옵션----------------

    -l 파일에 대한 정보(파일 허용권, 소유자, 그룹, 크기, 날짜)를 긴 형식으로 보여줍니다.

    -a 는 모든 파일을 지정합니다(디렉토리의 히든 파일도 보여줍니다).

    -i 파일의 'inode'도 같이 보여줍니다.

    -t 최종 수정된 시간별로 정렬합니다.

    -r 파일을 역순, 즉 내림차순으로 배열합니다.

    -u 변경되지 않았더라도 최근에 엑세스했던 파일들을 보여준다. 이 t나 u옵션으로 최근에 다루었던 파일을 찾는데 유용하게 쓸 수 있습니다.

    -F 파일의 특성을 보여줍니다. 이름 뒤에 디렉토리면 /를 실행파일이면 *, 심블릭 링크된 파일이면 @를 붙여줍니다.

    -R 하위 디렉토리의 파일도 모두 보여줍니다.

    -C 컬럼별로 파일을 보여줍니다.

    -w 컬럼수로 가로의 크기를 설정합니다.

    -m 가로로 간단히 출력합니다.

    -- color=yes 서브디렉토리를 구별하기 위해 color로 보여집니다.

    

리눅스의 명령어에서 이런 옵션들은 대개 여러 개를 같이 써 줄 수 있다.    
ex) -a -l은 -al과 같이 쓸 수 있습니다..
      ls -art는 현재 디렉토리에서 파일이 최종 수정된 시간의 내림차순으로 정렬된 모든 파일의 이름을 나열합니다. 따라서 가장 최근파일이 맨 아래에 표시됩니다.

 

$ ls -l Desktop

total 40

drwxr-xr-x   2 hjh      linux        4096 Sep  7 18:53 Autostart

-rw-r--r--   1 hjh      linux        2487 Sep  7 18:53 Home.kdelnk

-rw-r--r--   1 hjh      linux         270 Sep  7 18:53 Printer.kdelnk

drwxr-xr-x   2 hjh      linux        4096 Sep  7 18:53 Templates

drwxr-xr-x   2 hjh      linux        4096 Sep  7 18:53 Trash

-rw-r--r--   1 hjh      linux         432 Sep  7 18:53 cdrom.kdelnk

-rw-r--r--   1 hjh      linux         417 Sep  7 18:53 floppy.kdelnk...이하 생략

 

 

 

 

M

mail

메일을 주고 받을 수 있는 명령입니다.

 

[hjh@mail mail]$ mail       

No mail for hjh                      ### 현재 받은 메일이 없다고 나타내 줍니다.

 

 

메일을 보낼 때의 형식 : mail E-mail주소(= mail ID@도메인이름)

 

[hjh@mail mail]$ mail hjh       

  ### hjh라는 ID를 가진 사용자에게 메일을 보냅니다.(현재 host를 같이 사용중일 경우에는 그냥 ID만 적어도 됩니다.)

Subject: 안녕     ### 제목을 적습니다.

안녕                 ### 편지 내용을 적습니다.

test입니다.

.                     ### 마칠 때는 새줄에서 .을 적습니다.

Cc:                 ### 참조할 메일 주소를 적습니다.

[hjh@mail mail]$

 

 

man

주어진 명령이나 자원들의 매뉴얼을 출력한다. more에서와 같이 페이지 넘기기나 탐색 명령을 줄 수 있다.

    man [options] [section] command

 

    -k 다음에 키워드를 주면 그것이 포함된 명령어를 보여준다. 이것이 apropos 명령과 같다.

    -f 다음에 명령어를 적어주면 한 줄짜리 짧은 명령어 설명을 보여준다.  이것은 whatis 명령과 같다.

 

section은 다음과 같이 나누어져 있다. 해당 번호를 적으면 된다.

(1) User Commands

(2) System Calls

(3) Subroutines

(4) Devioes

(5) File Formats

(6) Games

(7) Miscellaneous

(8) Sys. Administration

 

 

 

mv

파일의 이름을 변경하거나 이동하는 명령입니다. 

옵션 : -b 백업파일을 만든후 파일을 지우거나 옮깁니다.
         -i 이미 존재하는 파일을 덮어 쓸 것인지 물어봅니다.
         -v 파일을 옮기면서 파일명을 출력합니다.

 

ex)

-rw-r--r--   1 hjh      linux         281 Sep 14 21:46 test1

$ mv test1 test2
$ ls

-rw-r--r--   1 hjh      linux         281 Sep 14 21:46 test2

 

 

mount,  mke2fs

mount 명령의 여러 양식은 매우 공통적입니다.

형식 : mount  [-t] [fs-type] device mount-point

/proc]#cat filesystems에서 fs-type을 알 수 있습니다.
/etc]#cat fstab 명령으로 device, mount-point를 확인할 수 있습니다.

예를 들어, 명령 mount /dev/hdb3 /mnt 는 디렉토리 /mnt 아래에 하드 디스크 파티션 /dev/hdb3을 탑재합니다.
비슷하게, mount -r -t iso9660 /dev/sr0 /mnt 는 디렉토리 /mnt 아래에 SCSI CD-ROM 드라이브 /dev/sr0을 탑재하며, 이 드라이브는 읽기 전용이고 ISO9660 파일 형식을 갖습니다. 
또한 명령 mount -vat nfs 는 /etc/fatab 파일에 나열되는 모든 NFS 파일 시스템을 탑재합니다.

파 일 시스템이 올바르게 탑재하지 않는 경우, 명령 mount -vf device mountpoint를 사용하여 어떤 mount가 수행중인지를 확인할 수 있습니다. 이 명령은 verbose목록을 제공하며 mount에게 파일 시스템 탑재를 제외한 모든 것을 수행하도록 지시합니다. 이 방법으로 mount 명령을 가장하고 명령이 수행하려고 시도하는 사항에 대한 많은 정보를 얻을 수 있습니다.

 

mke2fs는 partition을 ext2 file system으로 format하기 위해서 사용된다. - LINUX에서 가장 널리 사용되는 file system이다. mount는 formatted partition을 여러분의 계층적인 디렉토리 구조로 연결하기위해 사용된다.

도스 포맷의 디스크

 

먼 약 여러분들이 원래의 IOMEGA의 tools에 의해 생성된 DOS file structure를 가진 ZIP disk를 가지고 있다면 이들은 partition scan상에서 disk가 /dev/sda4 의 하나의 파티션만을 가진다고 보고를 할 것이다.

여러분들은 이들 disk를 /zip라는 directory에 mount를 할려면 이런식으로 해야만 한다.

mkdir /zip

mount -t msdos /dev/sda4 /zip

이 제 여러분들의 disk는 /zip에 마운트되어 보일 것이다. disk가 mount 되어 있는 동안에 여러분들은 그것을 제거하려 해서는 안된다. 여러분들이 disk를 가지고 작업이 끝났을 경우 그것을 umount 시키고 release 시켜 계층적인 directory로 부터 분리시키면 된다.

umount /zip

일단 여러분들이 mount되는 directory /zip를 만들고 나면 여러분들은 다시 이것을 할 필요는 없으며 후에 다시 어디선가 mount를 시키면 된다.

  

리눅스로 다시 포맷하기

 

만약 여러분들이 ZIP disk를 지우고 그 위에 Linux native file system을 만들기를 원하면, 전 disk에 대하여 fdisk를 해 주어야 한다.

fdisk /dev/sda

그리고 모든 기존의 파티션들을 지워야 한다. (d 명령을 사용한다) 그리고 나서 n 명령 이용하여 새로운 partition을 만들어 주고 w 명령으로 변화사항을 기입을 하고 q 명령으로 마친다.

파티션을 format한다.

mke2fs /dev/sda1

(여기서 1이란 수는 여러분들이 fdisk에서 partition에 부여한 번호이다. 이제 여러분들은 disk를 mount하여 사용하면 된다.

mount -t ext2 /dev/sda1 /zip

(위에서 사용한 mount point를 다시 사용한다.) 

 

 

 mkswap

스왑 공간 생성하기

스 왑 파일은 평범한 파일이다. 즉, 커널이 보기엔 일반 파일과 다를 바가 없다. 다만 다른 점이라면 스왑 파일에는 빈틈(holes)이 없으며, mkswap과 함께 사용하게 되어 있다는 점 정도이다. 그리고 스왑 파일은 꼭 자신의 파일시스템(local filesystem)에 있어야 하며, NFS를 통해 마운트된 파일시스템에 있어선 안 된다.

 

스 왑 파일 안에 홀(hole)이 없어야 한다는 점은 중요하다. 스왑 파일은 디스크의 일부를 미리 점유하고 있는데, 이렇게 하면 디스크 섹터를 일일이 할당하는 과정을 거치지 않고서도 메모리 페이지를 파일로 빠르게 스왑시킬 수 있다. 즉, 커널은 파일에 미리 할당되어 있는 섹터를 곧바로 사용하기만 하면 되는 것이다. 스왑 파일 안에 빈틈이 있다는 것은 아무 섹터도 할당되지 않은 공간이 파일 안에 있다는 뜻인데, 이렇게 되면 커널이 스왑을 사용하는데 곤란을 겪게 된다.

 

홀이 없는 스왑 파일을 생성하기 위한 좋은 방법은 다음과 같다.

$ dd if=/dev/zero of=/extra-swap bs=1024 count=1024

1024+0 records in

1024+0 records out

$

 

  위에서 /extra-swap이란 것은 스왑 파일의 이름이며, bs= 뒤에 오는 숫자는 입출력 단위의 크기를 지정한 것이고(1024 byte, 즉 1 kilobyte), count= 뒤의 숫자는 입출력 단위의 몇배 크기의 파일을 만들 것인지를 지정하기 위한 것이다(즉, 여기서는 1024 kilobyte 크기의 파일을 만든 것이 되겠다). count는 꼭 4의 배수로 지정해 주는 것이 좋은데, 그 이유는 커널이 스왑하는 메모리 페이지(memory page)의 단위가 4 kilobyte이기 때문이다. 만일 파일의 크기를 4 kilobyte의 배수로 하지 않는다면, 파일 끝에 남는 몇 킬로바이트는 아예 사용되지 않을 것이다.

 

스 왑 파티션도 사실 특별한 것은 없다. 만드는 것도 다른 보통 파티션과 다를 것이 없지만, 특별한 점이라면 스왑파티션에는 어떤 파일시스템도 사용되지 않으며 날것(raw partition) 그대로 쓴다는 점이다. 스왑용으로 쓸 파티션은 type 82로 지정해 두는 것이 좋은데, 이렇게 해두면 파티션의 용도가 명확해진다. 그러나 사실 커널은 이런 것에 그다지 구애받진 않는다.

 

스 왑 파일이나 스왑 파티션을 만들고 나면, 그 앞부분에 일종의 인식표를 달아두어야 한다. 여기에는 커널이 사용하는 몇가지 정보가 위치하게 된다. 이것을 해주는 명령어는 mkswap인데, 다음과 같이 쓰인다. $ mkswap /extra-swap 1024

Setting up swapspace, size = 1044480 bytes

$ 이렇게 했다고 해서 이 스왑 공간을 사용하게 된 것은 아니다. 다만 커널이 이것을 가상 메모리로 사용할 수 있도록 준비만 마친 것이다.

 

mkswap 명령은 사용에 주의가 필요하다. 이 명령은 파일이나 파티션이 사용 중인지 아닌지를 판별해 주지 않기 때문이다. 따라서 mkswap을 부주의하게 사용하면 중요한 파일과 파티션을 간단히 날려버릴 수 있다! 그러나 다행히도, mkswap 명령은 주로 시스템 설치시에만 사용된다는 점이 우리를 안심시켜 주긴 한다.

 

리 눅스의 메모리 관리자는 각각의 스왑 공간의 크기를 약 127MB로 제한하고 있다(몇가지 기술적인 이유로 인해 실제 한계치는 (4096-10) * 8 * 4096 = 133890048 bytes 즉 127.6875 megabytes이다). 대신, 최대 8개의 스왑 공간을 연결해 사용하면 스왑을 대략 1GB까지 확장할 수가 있다.

 

 

 

n 

N

  nice

nice는 프로세스의 순위를 변경시킵니다. 이것은 커다란 프로그램을 컴파일할 때와 같이 CPU나 메모리를 많이 쓰는 경우 전체 시스템 속도를 많이 저하시켜 마치 다운된 것처럼 만들어 버릴 수도 있기 때문에 다른 프로세스들에게 먼저 양보하는 선행(?)을 하게 한다. 그 정도를 -n뒤에 nice값으로 주어 명령을 실행시킵니다.

    #nice command -n XX

nice값은 -20에서 19까지 있는데, 값이 작을수록 우선 순위가 높습니다. -n옵션을 쓰기 않으면 디폴트로 10이 쓰입니다. 일반 유저는 nice값을 증가시킬 수밖에 없지만 root는 nice값을 감소시켜 우선 순위를 높을 수도 있습니다.                 

 

 

  nslookup

도메인의 IP주소나 도메인 등의 정보를 출력합니다.

형식 : nslookup 도메인이나 IP

[hjh@mail hjh]$ nslookup

.......

www.yahoo.co.kr

.......

Name:    www.yahoo.co.kr

Address:  211.32.119.135

 

211.32.119.135

......

Name:    www.yahoo.co.kr

Address:  211.32.119.135

 

 

 

 

O

od

 8, 10, 16진 또는 파일의 ASCII 덤프를 만들기 위한 명령입니다.

형식 : od -옵션 file

옵션 : -b 바이트를 8진수로 출력합니다.
        -c 바이트를 아스키 문자로 출력합니다.
        -x 16진수 워드단위로 출력합니다.

 

 

P

passwd

사용자의 패스워드를 변경 또는 바꾸는 명령어입니다.(암호화 되어 /etc/passwd 파일에 놓여집니다.)

암호는 최소한 6자 이상이어야 합니다(8자 이상 권장).

암호는 구두점 기호와 숫자뿐만 아니라 대소문자를 모두 포함해도 됩니다.

 

$ passwd

Changing password for hjh

(current) UNIX password:

New UNIX password:

 

 

pine

메일을 주고 받을 수 있는 명령입니다.

 

$ pine

 

 

 PINE 4.10   MAIN MENU                            Folder: INBOX  19 Messages

           ?     HELP               -  Get help using Pine

           C     COMPOSE MESSAGE    -  Compose and send a message

           I     MESSAGE INDEX      -  View messages in current folder

           L     FOLDER LIST        -  Select a folder to view

           A     ADDRESS BOOK       -  Update address book

           S     SETUP              -  Configure Pine Options

           Q     QUIT               -  Leave the Pine program

     Copyright 1989-1999.  PINE is a trademark of the University of Washington.

                    [Folder "INBOX" opened with 19 messages]

? Help                     P PrevCmd                 R RelNotes

----------------

O OTHER CMDS > [ListFldrs] N NextCmd                 K KBLock

 


위와 같이 main창이 뜨면 선택해서 사용할 수 있습니다.

 

ping

ping(packet internet gopher)은 자신의 네트워크나 다른 네트워크가 통신이 잘되고 있는지 점검을 합니다.

형식 : ping hostname
 

 

 

 ps

프로세서에 관한 리스트를 보여줍니다.

 

 

 

 pwd

print working directory, 현재 작업 Directory를 출력한다.

 

 

 

q

Q

quit

대화식 모드에서 lpc를 떠납니다.

 

 

 

 

R

 rm

remove, 파일을 제거한다. 리눅스에서는 한번 지운 파일은 다시 복구할 수 없다.

    rm [options] file(s)

사용 가능한 옵션은 다음과 같다.

    -f 쓸수 없는 파일이라도 물어보지 않고 강제로 지운다.

    -i 각 파일에 대하여 지울 것인지 물어 온다.

    -r 서브디렉토리를 포함한 모든 내용을 재귀적으로 지운다.

    -v 지워지는 파일명을 출력한다.                                                                            

 

 

rmdir

remove directory, 디렉토리를 지운다. 만약 디렉토리가 비어있지 않으면 지울 수 없다.

 

 

 

 

S

 

 

 sh

원래의 unix명령인 본 셸을 불러내는 명령어 입니다.

 

 

su

사용중에 다른 ID로 재접속하는 명령어입니다.

형식 : su 사용자ID (그냥 su만 입력하면 root로 재접속하겠다는 뜻입니다.)

 

 

 

                            swapon
스왑 공간 사용하기

스왑 공간을 초기화하는 데는 swapon 명령을 사용한다. 이 명령은 커널에게 해당 공간을 스왑으로 사용할 수 있다는 점을 알려준다. 이 명령에게는 추가하고자 하는 스왑 공간의 경로를 인수로 전달해 주어야 한다. 임시 스왑 파일을 스왑 공간에 추가하고자 한다면 다음과 같이 한다.

$ swapon /extra-swap
$

스왑 공간들은 /etc/fstab 파일에 의해서 자동적으로 사용될 수도 있다.

/dev/hda8        none        swap        sw     0     0
/swapfile none swap sw 0 0

시스템이 시작될 때, 스크립트를 통해서 swapon -a 명령이 실행되는데 이 명령은 /etc/fstab에 나열되어 있는 스왑 공간들을 모두 사용하게 해 준다. 그래서 흔히 swapon 명령은 추가적인 스왑이 필요할 때만 사용되는 것이 보통이다.

free 명령을 쓰면 스왑의 사용 상황을 모니터 할 수 있다. 이것은 현재 얼마나 많은 용량의 스왑이 사용되고 있는지 알려준다.

$ free
total used free shared buffers
Mem: 15152 14896 256 12404 2528
-/+ buffers: 12368 2784
Swap: 32452 6684 25768

$

여기서 Mem: 이라고 쓰여진 첫째줄은 실제 물리적 메모리의 상황을 보여주는 것이다.커널은 물리적 메모리를 약 1 megabyte 정도 사용하는데, total이라고 쓰여진 세로줄에서 보여주는 전체메모리 양에는 이 커널이 차지하는 공간이 빠져 있다. used라는 세로줄은 현재 사용중인 메모리 양을 보여주고 있으며(두번째 가로줄은 버퍼 로 사용되는 부분을 제외하고 계산한 양이다), free란 세로줄에서는 전혀 사용되지 않은 양을 보여주고 있다. 또한 shared란 부분은 프로세스간에 공유되고 있는 메모리를 나타내고 있는 것이므로, 그 양이 많은 것은 기쁜 일이다. buffers는 현재 디스크 버퍼 캐쉬로 사용되는 메모리 양을 보여주고 있다.

마지막 줄인 Swap:은 위와 같은 항목을 스왑 공간에 똑같이 적용시킨 내용이다. 이 항목이 모두 제로라면, 스왑 공간이 아예 동작하고 있지 않다는 뜻이다.

같은 정보를 top 명령이나 /proc/meminfo 파일을 통해 얻을 수 있다. 그러나 어느 경우든, 특정한 스왑 공간에 대한 정보를 얻는 것은 좀 어렵다.

스왑 공간은 swapoff 명령으로 기능을 멎게 할 수 있다. 그러나 임시로 잡은 스왑 공간이 아니라면, 스왑을 끌 필요는 없다. 만약 스왑을 끄게되면, 스왑 공간에 들어있던 메모리 페이지들이 먼저 실제 메모리로 들어가야 되는데, 실제 메모리에 여유가 없는 경우에는 또 다른 스왑 공간으로 방출되게 된다. 그런데 이 메모리 페이지들을 모두 수용하기에 가상메모리마저도 부족하다면, 그때부터는 리눅스 시스템이 무진장 버벅대기 시작할 것이다. 시간이 아주 많이 걸린 후에는 좀 잠잠해지겠지만, 여전히 시스템은 사용불능 상태에 있게 된다. 따라서 스왑을 끄기 전에, 충분한 여유 메모리가 있는지 꼭 확인해 보아야만 한다(free 같은 것으로).

swapon -a 명령으로 자동적으로 사용되는 스왑 공간들은, 마찬가지로 swapoff -a 명령을 써서 끌 수 있다. 이것도 역시 /etc/fstab 파일에 나열되어 있는 스왑 공간만을 끄기 때문에, 나머지 수동으로 추가시킨 스왑들은 영향을 받지 않는다.

때 때로, 실제 메모리가 많이 비어 있는데도 불구하고 스왑을 아주 많이 쓰고 있는 경우를 보게 될 수가 있다. 보통 이런 일이 발생하는 경우는 이렇다. 어떤 덩치 큰 프로세스가 실제 메모리를 많이 점유하는 바람에 시스템이 스왑을 많이 사용하게 되었다고 하자. 이 프로세스가 종료되면 실제 메모리엔 여유 공간이 많이 남게 되지만, 스왑으로 한번 내려간 데이터는 그것이 당장 필요하지 않는 한 실제 메모리로 불려지지 않는다. 따라서 스왑 영역을 많이 사용하면서도 실제 메모리가 많이 비어있는 현상이 꽤 오래 지속될 수 있는 것이다. 그러므로 이런 현상에 특별히 신경쓸 필요는 없다. 하지만, 최소한 그 원리는 이해하고 있어야 나중에 불안하지 않을 것이다.

 


 

 

T

tar

사용법: tar [옵션]... [파일]...

 

주요 동작 모드 :

  -t, --list              아카이브의 내용물을 출력합니다

  -x, --extract, --get    아카이브에서 파일을 추출합니다

  -c, --create            새로운 아카이브를 만듭니다

  -d, --diff, --compare   아카이브와 파일 시스템간의 차이점을 비교합니다

  -r, --append            아카이브 끝에 파일을 추가합니다

  -u, --update            아카이브 안의 것보다 새로운 파일만 추가합니다

  -A, --catenate          아카이브에 tar 파일을 추가합니다

      --concatenate       -A와 같음

      --delete            아카이브로부터 제거합니다 (자기 테이프에선 안됨!)

 

동작 변경자:

  -W, --verify               아카이브를 기록한 다음 검증하도록 합니다

      --remove-files         아카이브에 파일을 추가한 다음 지웁니다

  -k, --keep-old-files       추출할 때 이미 존재하는 파일을 덮어쓰지 않습니다

:

 -U, --unlink-first         추출하기에 앞서 대상 파일을 지웁니다

      --recursive-unlink     디렉토리를 추출하기에 앞서 그 체계를 비웁니다

  -S, --sparse               스파스 파일을 효율적으로 처리합니다

  -O, --to-stdout            표준 출력으로 파일을 추출합니다

  -G, --incremental          오래된 GNU 형식의 점진적 백업 파일을 처리합니다

  -g, --listed-incremental   새로운 GNU 형식의 점진적 백업 파일을 처리합니다

      --ignore-failed-read   읽을 수 없는 파일에 대해 영 아닌 값으로 종료하지

                             않습니다

 장치 선택과 전환:

  -f, --file=ARCHIVE             아카이브 파일 또는 ARCHIVE 장치를 사용합니다

      --force-local              이름에 콜론이 있는 아카이브 파일도 지역 파일로

                                 인식합니다

      --rsh-command=COMMAND      rsh 대신 원격 COMMAND를 사용합니다

  -[0-7][lmh]                    드라이브와 기록 밀도를 지정합니다

  -M, --multi-volume             다중 볼륨 아카이브를 생성/출력/추출합니다

  -L, --tape-length=NUM          NUM x 1024 바이트를 쓴 뒤에 테이프를 바꿉니다

  -F, --info-script=FILE         각 테이프의 끝에서 스크립트를 실행합니다

                                 (-M을 포함함)

      --new-volume-script=FILE   -F FILE과 같음

      --volno-file=FILE          FILE 안에 있는 볼륨 번호를 사용/갱신합니다

 

장치 블럭 설정:

  -b, --blocking-factor=BLOCK    레코드당 BLOCK x 512 바이트

      --record-size=SIZE         레코드당 SIZE 바이트, 512의 배수

  -i, --ignore-zeros             아카이브에서 영으로 된 블럭을 무시합니다

                                 (EOF를 의미함)

  -B, --read-full-records        읽은 것을 재블럭화합니다 (4.2BSD 파이프용으로)

정보 출력에 관한 옵션:

      --help            이 도움말을 인쇄하고 끝냅니다

      --version         tar 프로그램의 버전 번호를 인쇄하고 끝냅니다

  -v, --verbose         처리되는 파일을 순서대로 출력합니다

      --checkpoint      아카이브를 읽을 동안 디렉토리 이름을 인쇄합니다

      --totals          아카이브를 만들 동안 쓰여진 총 바이트 수를 인쇄합니다

  -R, --block-number    각 메시지마다 아카이브내의 블럭 번호를 표시합니다

  -w, --interactive     모든 행동에 대해 확인을 요구합니다

      --confirm!ation    -w와 같음

 

  -s, --same-order             sort names to extract to match archive

      --preserve-order         same as -s

      --preserve               same as both -p and -s

  -z, --gzip, --ungzip               filter the archive through gzip

  -Z, --compress, --uncompress       filter the archive through compress

      --use-compress-program=PROG    filter through PROG (must accept -d)

 

ex) 디렉토리 SSS를 homepage.tar로 압축합니다.

$ tar cvf homepage.tar /SSS

SSS/            

 

권한 시간까지 출력합니다.

$ tar tvf homepage.tar

drwxr-xr-x hjh/linux         0 2000-10-07 17:11:51 SSS/

 

/etc 디렉토리를 aaa란 파일로 압축시킵니다.

$ tar -zcvf aaa /etc

 

압축된 aaa란 파일을 /etc디렉토리에 압축을 풉니다.

$ tar -zxvf aaa /etc

 

aaa bbb ccc 파일을 zzz 파일로 압축시킵니다.

$ tar -zcvf zzz aaa bbb ccc

 

 

tail

파일의 마지막 n개의 내용을 보고자할 때 사용하는 명령입니다.

 

ex)

$ tail .bash_history       

sdm

kdm

swapon

free

dmesg

dmesg |less

fsck

adduser

groupadd

exit..........

 

 

touch

touch [OPTION]... FILE...

  or : touch [-acm] MMDDhhmm[YY] FILE... (obsolescent)

Update the access and modification times of each FILE to the current time.

 

  -a                     change only the access time

  -c                     do not create any files

  -d, --date=STRING      parse STRING and use it instead of current time

  -f                     (ignored)

  -m                     change only the modification time

  -r, --reference=FILE   use this file's times instead of current time

  -t STAMP               use [[CC]YY]MMDDhhmm[.ss] instead of current time

      --time=WORD        access -a, atime -a, mtime -m, modify -m, use -a

      --help             display this help and exit

      --version          output version information and exit

 

STAMP may be used without -t if none of -drt, nor --, are used.

Note that the three time-date formats recognized for the -d and -t options

and for the obsolescent argument are all different.

 

 

 

 

U

 

umount

umount를 umount되어지는 파일 시스템에서 실행을 시키면 아직 그 파일 시스템은 사용중(busy)이게 되므로 언마운트시 에러가 발생하게 된다. 언마운트는 꼭 그 파일 시스템을 벗어나서 실행시켜야 한다.

unmount를 할 때는 단순히

    umount directory_name 또는 umount device_name

을 써주면 되고

    umount -a

라고 쓰면 현재 마운트 되어 있는 디스크장치들 중에서 /etc/fstab에 있는 모든 장치를 unmount한다. 그리고, 마운트된 디스크 장치들과 디렉토리의 리스트는 /etc/mtab에 저장되어 있다.

예를 들어, disk를 /zip라는 directory에 mount를 할려면 이런식으로 해야만 한다.

mkdir /zip

mount -t msdos /dev/sda4 /zip

이제 여러분들의 disk는 /zip에 마운트되어 보일 것이다. disk가 mount 되어 있는 동안에 여러분들은 그것을 제거하려 해서는 안된다. 여러분들이 disk를 가지고 작업이 끝났을 경우 그것을 umount 시키고 release 시켜 계층적인 directory로 부터 분리시키면 된다.

umount /zip

일단 여러분들이 mount되는 directory /zip를 만들고 나면 여러분들은 다시 이것을 할 필요는 없으며 후에 다시 어디선가 mount를 시키면 된다.

 

 

 

uptime

서버 부팅시간과 현재시간이 출력됩니다.

 

$ uptime

  5:33pm  up 5 days,  5:39,  4 users,  load average: 0.52, 0.58, 0.52

 

 

V

 vi

vi 에디터

유닉스 계열의 운영체제에서 가장 널리 쓰이는 에디터입니다.

vi 명령어 요약

 

1.시작

vi file

vi를 시작하여 지정한 파일 편집

vi -R file

읽기 전용(read- only) 편집기로서 vi를 시작하여 지정한 파일 편집

view file

읽기 전용(read- only) 편집기로서 vi를 시작하여 지정한 파일 편집

 

2.종료

:wq

데이터를 저장하고 종료

:q!

데이터를 저장하지 않고 종료

 

3. 시스템이 다운된 후에 되살리기

vi -r

되살릴 수 있는 모든 파일 이름 보여주기

vi -r file

vi를 시작하여 지정한 파일 되살리기

 

4. 디스플레이 제어하기

^L

현재 화면을 다시 디스플레이하기

:set number

내부 줄 번호 디스플레이

:set nonumber

배부 줄 번호 디스플레이 않기

 

5. 마지막으로 지운 것 복사하기

p

마지막으로 지워진 것을 커서의 뒤/아래에 삽입

P

마지막으로 지워진 것을 커서의 앞/위에 삽입

xp

두 문자를 바꿈

deep

두 단어를 바꿈

ddp

두 줄을 바꿈

 

6. 패턴 검색

/rexp

지정된 정규 표현식에 대해 앞으로 이동

/

이전의 패턴에 대해 앞으로 검색을 반복

?rexp

지정된 정규 표현식에 대해 뒤로 이동

?

이전의 패턴에 대해 뒤로 검색을 반복

n

/나 ?명령에 대해 같은 방향으로 반복

N

/나 ?명령에 대해 반대 방향으로 반복

 

7. 약어의 사용

:ab short long

short를 long에 대한 약어로 변경

:ab

현재 약어 목록을 표시

:una short

약어 short를 표시

 

8. 줄 길이의 조정

r<return></return>

문자를 뉴라인으로 변경

J

줄의 결합

:set wm=n

오른쪽으로 n문자 위치에서 자동적으로 줄 나눔

 

9. 커서 이동

h<left></left>

커서를 한 칸 왼쪽으로 이동

j<down></down>

커서를 한 줄 아래로 이동

k<up></up>

커서를 한 줄 위로 이동

l<right></right>

커서를 한 칸 오른쪽으로 이동

<backspace></backspace>


커서를 한 칸 왼쪽으로 이동

<space></space>


커서를 한 칸 오른쪽으로 이동

-

커서를 이전 줄의 처음으로 이동

+

커서를 다음 줄의 처음으로 이동

<return></return>


커서를 다음 줄의 처음으로 이동

0

커서를 현재 줄의 맨 앞으로 이동

$

커서를 현재 줄의 맨 끝으로 이동

^

커서를 현재 줄의 첫글자(공백이나 탭이 아닌)로 이동

w

커서를 다음 단어의 첫 글자로 이동

e

커서를 다음 단어의 끝 글자로 이동

b

커서를 이전 단어의 첫 글자로 이동

W

w와 같음(문장 부호 무시)

E

e와 같음(문장 부호 무시)

B

b와 같음(문장 부호 무시)

(

다음 문장의 처음으로 이동

)

이전 문장의 처음으로 이동

{

다음 문단의 처음으로 이동

}

이전 문단의 처음으로 이동

H

커서를 화면 맨 위로 이동

M

커서를 중간으로 이동

L

커서를 맨 아래로 이동

 

10. 편집 버퍼를 통한 이동

^F

한 화면 아래로 이동

^B

한 화면 위로 이동

n^F

n화면 아래로 이동

n^B

n화면 위로 이동

^D

반 화면 아래로 이동

^U

반 화면 위로 이동

n^D

n줄만큼 아래로 이동

n^U

n줄만큼 위로 이동

 

11. 셸 명령 실행

:!command

vi를 중단하고 지정한 셸 명령을 실행

:!!

vi를 중단하고 이전의 셸 명령을 실행

:sh

vi를 중단하고 셸을 실행

:!csh

vi를 중단하고 새로운 C-셸을 실행

 

12. 패턴에 의한 치환

:s/pattern/replace/

현재 줄의 치환

:lines/pattern/replace/

지정한 줄의 치환

:line,lines/pattern/replace/

지정한 범위의 치환

:%s/pattern/replace/

모든 줄의 치환

 

13. 데이터 읽기

:liner file

file의 내용을 지정한 줄 다음에 삽입

:r file

file의 내용을 현재의 줄 다음에 삽입

:liner !command

command의 결과를 지정한 줄 다음에 삽입

:r !command

command의 결과를 현재의 줄 다음에 삽입

:r !look pattern

지정한 pattern으로 시작된 단어 삽입

 

14. 정규 표현식을 사용하기 위한 특수 기호

.

뉴라인을 제외한 모든 단일 문자와 대응

*

영 또는 그 이상의 선행 문자와 대응

^

줄의 시작과 대응

$

줄의 끝과 대응

\<

단어의 시작과 대응

\>

단어의 끝과 대응

[ ]

묶여진 문자중의 하나와 대응

[^ ]

묶여진 문자를 제외한 아무것하고나 대응

\

이어지는 기호를 문자 그대로 해석

 

15. 줄 번호

nG

줄번호 n으로 건너뛰기

1G

편집 버퍼의 첫 줄로 건너뛰기

G

편집 버퍼의 마지막 줄로 건너뛰기

:map g lG

g가 lG와 같도록 매크로 정의

 

16. 삽입

i

입력 모드로 전환, 커서 위치 앞에서 삽입

a

입력 모드로 전환, 커서 위치 뒤에서 삽입

I

입력 모드로 전환, 현재 줄의 앞에 삽입

A

입력 모드로 전환, 현재 줄의 끝에 삽입

o

입력 모드로 전환, 현재 줄의 아래에 전개

O

입력 모드로 전환, 현재 줄의 위에 전개

 

17. 편집하고 있는 파일을 바꾸기

:e file

지정한 파일의 편집

:e! file

지정한 파일의 편집, 자동 점검의 생략

 

18. 내용 고치기

r

단지 한 글자만 변경(입력 모드로 바뀌지 않음)

R

입력하는 대로 겹쳐 써서 변경

s

삽입에 의해 한 단어의 변경

C

커서의 위치로부터 줄 끝까지 삽입에 의한 변경

cc

전체 줄을 삽입에 의한 변경

S

전체 줄을 삽입에 의한 변경

cmove

커서부터 move까지 삽입에 의해 변경

~

대,소문자 바꾸기

 

19. 고치기의 취소 또는 반복

u

편집 버퍼를 수정했던 마지막 명령을 취소

U

현재 줄을 저장

.

편집 버퍼를 수정했던 마지막 명령 반복

 

20. 문자 삭제

x

커서가 있는 문자 삭제

X

커서의 왼쪽 문자 삭제

D

커서부터 줄의 끝까지 삭제

dd

현재 줄의 전체 삭제

dmove

커서부터 move까지 삭제

dG

커서부터 편집 버퍼의 끝까지 삭제

d1G

커서부터 편집 버퍼의 맨 앞까지 삭제

:lined

지정한 줄의 삭제

:linelined

지정한 범위의 삭제

 

21. 여러 줄의 복사와 이동

:linecotarget

지정한 줄을 복사하여 target 줄 밑에 삽입

:linelinecotarget

지정한 범위를 복사하여 target 줄 밑에 삽입

:linemtarget

지정한 줄로 이동하여 target 줄 밑에 삽입

:line, linemtarget

지정한 범위로 이동하여target 줄 밑에 삽입

 

22. 데이터를 처리하기 위한 셸 명령의 사용

n!!command

n번 줄에서 command의 실행

!move command

커서부터 move까지 command 실행

!move fmt

커서부터 move까지 줄들을 형식 맞추기

 

23. 데이터 저장하기

:w

원래의 파일로 데이터를 저장

:w file

지정한 파일로 데이터를 저장

:w>> file

지정한 파일에 데이터를 추가

 

 

W

w

현재 로그인한 사용자가 무엇을 하고 있는지 보여줍니다.
uptime의 정보가 헤더로 쓰입니다.
JCPU는 사용자가 사용한 CPU시간을 PCPU는 현재 작업에 쓰이는 CPU 사용 시간을 보여줍니다.

$ w

  4:36pm  up 5 days,  4:42,  4 users,  load average: 0.89, 0.41, 0.35

USER   TTY   FROM       LOGIN@   IDLE   JCPU   PCPU  WHAT

root     tty1     -                Fri 5pm 23:00m 25.77s  0.03s  startx

root     ttyp0    :0.0             Fri 5pm 22:39m  2:26m  2:26m  xlock

root     ttyp1    :0.0             Fri 5pm 22:39m  0.40s  0.22s  ztelnet

hjh      pts/0    linux5            4:17pm  0.00s  0.46s  0.06s  w

 

 

wc

Word Count, 명시된 파일 또는 표준 입력 안의 행, 단어, 문자의 수를 나타냅니다.

형식 :   wc [options] [file(s)]

옵션 :

    -l 행(line)수만 출력합니다.

    -c 문자(character)수만 출력합니다.

    -w 단어(word)수만 출력합니다.

 

ex)

파일속에 들어있는 단어의 수만을 보고자할 때 사용하는 명령입니다.

$ wc -w .bash_history

   2044 .bash_history

 

파일속에 들어있는 문자의 수만을 보고자할 때 사용하는 명령입니다.

$ wc -c .bash_history      

  10703 .bash_history

 

 

whereis

$PATH로 지정된 경로에서 찾아 전체 경로명을 보여준다.

ex)

$ whereis cat

cat: /bin/cat /usr/man/man1/cat.1

 

 

who

who 명령의 목적은 시스템에 로그인된 사람을 찾는 것입니다.

현재 로그인된 사용자들의 로그인 이름, 터미널 회선 및 로그인 시간을 나열합니다.

옵션  :  -u   현재 로그인된 사용자만을 나열합니다.

           -H   각 열 위에 헤더를 표시합니다.

 

$ who

root     tty1     Oct  6 17:34

root     ttyp0    Oct  6 17:36

root     ttyp1    Oct  6 17:36

hjh      pts/0    Oct  7 16:17

 

 

whoami

사용자의 ID를 출력합니다.

$ whoami

hjh

 

 

X

 

 

xdm

xdm는 X-Windows상에서의 login screen을 보여준다. 어떤 system은 특정 level로 가도록 지정하면 xdm을 시동시킨다(/etc/inittab를 보도록).

리눅스 부팅 스크립트에 넣어두면 리눅스를 처음 부팅할 때부터 엑스윈도우로 부팅할 수 있다.

Shadow Suite가 설치되면 xdm도 update될 필요가 있다. 이는 매우 쉽다.

xdm.tar.gz는 ftp://sunsite.unc.edu/pub/Linux/X11/xutils/xdm.tar.gz에 있다.

xdm.tar.gz를 구한 다음, /usr/src에서 푼다:

tar -xzvf xdm.tar.gz

 

/usr/X11R6/lib/X11/config/linux.cf에서 다음 line을 고친다:

#define HasShadowPasswd    NO

를 다음처럼

#define HasShadowPasswd YES

 

그리고 나서 실행 file을 만들자:

cd /usr/src/xdm
xmkmf
make depend
make

 

모든 걸 제자리로...:

cp xdm /usr/X11R6/bin/

 

xdm은 root 권한으로 실행되기에 permission을 바꿀 필요는 없다.

 

 

 

 

 

 

 

Z

 zcat

파일을 압축된 양식으로 보존하지만 데이터를 다른 명령에 파이프하려는 경우 사용할 수 있는 명령입니다.  zcat은  cat 명령과 똑같이 작업하지만 입력으로 압축된 파일이 필요합니다.  zcat은 파일을 압축 해제한 후 표준 출력 디바이스에 프린트합니다.

예를 들어, namelist라는 파일에 저장된 이름과 주소 목록을 압축한 경우, 압축된 파일의 이름은 namelist.gz입니다. 압축된 파일의 내용을 프로그램에 대한 입력으로 사용하려는 경우, 다음과 같이 zcat 명령을 사용하여 파이프라인을 시작할 수 있습니다.

 zcat namelist | program1 | program2 ...

저작자 표시

'Operating System > Linux' 카테고리의 다른 글

메모리 보호기법  (0) 2015.08.26