2011. 11. 28. 19:19 Log/Linux

process 관리

Process 관리

process는 흔히 실행중인 프로그램을 뜻한다. file과는 다른 의미이다. file은 디스크 상에 존재하며 수동적이다.
process는 메모리에 있거나 cpu가 실행하는 상태를 의미한다

예를 들면

디스크의 특정 파티션의 특정 디렉토리에 있는 ls 명령을 실행하면 ls 명령이 메모리에 올라가고 cpu 자원을 할당 받아
실행된다. 이것을 process 라고 하며 실행이 끝나면 메모리에서 완전히 제거된다.

프로세스 관리는 중요하다. 프로세스를 잘못관리하면 시스템 성능이 떨어질 수 있으며 보안상 시스템이 취약해질 수도 있다.

프로세스 상태보기

ps

PS(1) Linux User's Manual PS(1)
NAME ps - report process statusSYNOPSIS
ps [options]
[lee@river ex]$ ps
PID TTY TIME CMD
3397 pts/1 00:00:00 bash
3578 pts/1 00:00:00 ps
[lee@river ex]$

두개의 프로세스가 실행중이다.

ps 명령을 아무런 옵션 없이 사용하면 출력되는 내용은 현재 터미널에서(여기서는 pts/1) 현재 사용자 권한
(여기서는 lee)으로 실행(메모리에 있거나 cpu 자원을 할당받은)중인 프로세스만 출력된다. 아무런 옵션 없이
사용하면 가장 단순한 형태로 출력해준다.

위의 ps 명령의 각 항목의 의미는 아래와 같다.

PID : 커널이 식별하는 프로세스 식별자
프로세스가 생성되는 순서대로 번호가 할당되며 1번은 init 이다.
TTY : 프로세스가 어떤 터미널에서 실행되었는가 하는 정보
TIME : 프로세스가 cpu를 점유한 누적 시간
CMD : 프로세스 이름

모든 프로세스 목록을 다 보고 싶다면 -e 옵션을 사용하면 된다.

[lee@river ex]$ ps -e
PID TTY STAT TIME COMMAND 1 ? S 0:04 init [3]
2 ? SW 0:00 [keventd]
3 ? SW 0:00 [kapmd]
4 ? SWN 0:00 [ksoftirqd_CPU0]
5 ? SW 0:00 [kswapd]
6 ? SW 0:00 [kscand/DMA]
7 ? SW 0:00 [kscand/Normal]
8 ? SW 0:00 [kscand/HighMem]
10 ? SW 0:00 [kupdated]
11 ? SW 0:00 [mdrecoveryd]
15 ? SW 0:00 [kjournald]
73 ? SW 0:00 [khubd]
285 ? SW 0:00 [kjournald]
286 ? SW 0:00 [kjournald]

위에 출력결과중 TTY는 프로세스가 실행된 터미널을 나타내는데 ? 로 표시된 것은 터미널과 관계없는
프로세스를 뜻한다. 예를 들면 부팅할 때 자동으로 실행된 프로세스를 의미한다.

그리고 STAT 는 프로세스 상태를 나타내는 부분으로 여기에서 몇 가지가 있다.

S (sleep) : 프로세스가 cpu 자원을 기다리고 있는 상태
SW : 프로세스가 swap 영역에 내려와 있는 상태(스왑파티션에 있다)
(한정된 메모리 자원을 효율적으로 사용하기 위해 일부 프로세스가 swap 영역으로 내갈 수 있다)
SWN : swap 영역에 있는 프로세스중 cpu 자원을 할당받을 우선순위가 낮은 상태
T : 중단된 상태
R : Runable 또는 Running 상태
Z : Zombie 상태

주요옵션

-e : 모든 프로세스 출력
-f : 프로세스 소유자 및 부모 프로세스 정보까지 출력
-ef : -e와 -f 는 주로 같이 붙여서 많이 사용된다.

프로세스도 file system 처럼 계층구조로 되어 있다.
부모프로세스가 있고 그 아래에 자식 프로세스가 있는 구조이다.

ex)
[lee@river book]$ pstree

pstree -u 사용자 => 특정 사용자 권한의 프로세스만 tree 구조로 출력할 수 있다.

ex)
[lee@river book]$ pstree -u lee
bash---bash---pstree

[lee@river book]$

부모 프로세스의 pid 를 출력하고자 하는 경우에는 -f 옵션을 사용하면 된다.

ex)[lee@river book]$ ps -f
UID PID PPID C STIME TTY TIME CMD
lee 3122 3119 0 10:17 pts/0 00:00:00 -bash
lee 3522 3122 0 11:11 pts/0 00:00:00 bash
lee 3613 3522 0 11:37 pts/0 00:00:00 ps -f
[lee@river book]$

몇개의 자식 프로세스를 만들고 테스트 해보자

[lee@river book]$ sleep 300 &
[1] 3614

[lee@river book]$ sleep 600 &
[2] 3615

[lee@river book]$ sleep 900 &
[3] 3616

[lee@river book]$ pstree -u lee
bash---bash-+-pstree
`-3*[sleep]

위에서 실행한 3개의 sleep 프로세스의 부모 프로세스는 바로 위에 있는 bash 라는것을 알 수 있다.
그렇다면 자식 프로세스가 죽기 전에 부모프로세스가 죽는다면 자식 프로세스는 어떻게 될까? 확인해보자

[lee@river book]$ ps -f
UID PID PPID C STIME TTY TIME CMD
lee 3122 3119 0 10:17 pts/0 00:00:00 -bash
lee 3522 3122 0 11:11 pts/0 00:00:00 bash
lee 3614 3522 0 11:38 pts/0 00:00:00 sleep 300
lee 3615 3522 0 11:38 pts/0 00:00:00 sleep 600
lee 3616 3522 0 11:38 pts/0 00:00:00 sleep 900
lee 3620 3522 0 11:40 pts/0 00:00:00 ps -f

여기서 PPID 가 Parent PID 즉, 부모프로세스id 이다.

[lee@river book]$ kill -9 3522 <= 프로세스를 죽이는 명령어

[lee@river newbook]$ ps -f
UID PID PPID C STIME TTY TIME CMD
lee 3122 3119 0 10:17 pts/0 00:00:00 -bash
lee 3614 1 0 11:38 pts/0 00:00:00 sleep 300
lee 3615 1 0 11:38 pts/0 00:00:00 sleep 600
lee 3616 1 0 11:38 pts/0 00:00:00 sleep 900
lee 3621 3122 0 11:40 pts/0 00:00:00 ps -f

부모 프로세스가 메모리에서 제거되었으나 자식 프로세스는 여전히 살아있다.
부모 프로세스가 1로 변경되었다. 그래서 sleep 프로세스는 여전히 부모 프로세스를 갖고
메모리에 남아있다. 부모 프로세스가 죽어도 자식 프로세스는 죽지 않는다는 것을 알 수 있다.

이번에는 pstree 로 확인해보자

[lee@river newbook]$ pstree -u lee
sleep
sleep
sleep
bash---pstreebash---man---sh---sh-+-less
`-nroff---groff---grotty
[lee@river newbook]$

sleep 프로세스의 소유자는 여전히 lee 이지만 더이상 bash의 자식은 아니라는것을 알 수 있다

프로세서 제어 명령어 kill

불필요한 프로세스가 메모리에 남아 있다면 메모리 리소스를 줄이기 위해 제거해야 한다.
프로세스를 제거하는 명령은 kill 이다.

[lee@river newbook]$ help kill
kill: kill [-s sigspec | -n signum | -sigspec] [pid | job]... or kill -l [sigspec]
Send the processes named by PID (or JOB) the signal SIGSPEC. If SIGSPEC is not present,
then SIGTERM is assumed. An argument of `-l' lists the signal names; if arguments follow `-l'
they are assumed to be signal numbers for which names should be listed. Kill is a shell
builtin for two reasons: it allows job IDs to be used instead of process IDs, and, if you have reached
the limit on processes that you can create, you don't have to start a process to kill another one.

[lee@river newbook]$man kill
KILL(1) Linux Programmer's Manual KILL(1)
NAME kill -
SYNOPSIS kill [ -s signal | -p ] [ -a ] pid ... kill -l [ signal ]

kill 은 shell 내장 명령어인 동시에 외부명령어로도 존재한다. kill 명령을 경로 없이 사용한다면
shell 내장 명령어 kill 이 사용된다. 둘 다 비슷하지만 완전히 같진 않다.

kill 명령은 프로세스에게 특정 signal 을 전달하는 명령어인데 아래에 전달 할 수 있는 모든 signal의 종류를 확인할 수
있다. 그러나 일반적으로 자주 사용되는 것들은 몇 안 된다.

[lee@river newbook]$ kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE
9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR213) SIGPIPE 14) SIGALRM 15) SIGTERM
17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN22) SIGTTOU 23) SIGURG
24) SIGXCPU 25) SIGXFSZ26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 33) SIGRTMIN
... 이하생략.

주요 signal

1) SIGHUP : 프로세스 재실행이다. 죽였다가 다시 실행하는것과 같다.
2) SIGINT : 현재 프로세스 강제종료. ctrl+c 를 사용한다.
9) SIGKILL : 가장 많이 사용되는 시그널로 프로세스 강제 종료이다. 프로세스가 어떤일을 하든 무조건 죽인다.
물론 죽일 수 없는 예외적인 프로세스도 존재한다. 예를 들면 init 프로세스
15) SIGTERM : 프로세스 종료.
이 시그널을 사용하면 프로세스가 종료되지 않을 수도 있다.강제종료가 아니기 때문이다.
20) SIGTSTP : 현재 프로세스 강제 중단. ctrl+z 사용

위에서 언급한 signal 외에 다른 signal 들은 잘 사용되지 않는다.

ex)[lee@river newbook]$ sleep 900 &
[1] 3658 <= sleep 의 pid

[lee@river newbook]$ ps
PID TTY TIME CMD
3122 pts/0 00:00:00 bash
3658 pts/0 00:00:00 sleep
3659 pts/0 00:00:00 ps

sleep 프로세스는 실행할 때의 인자에 해당하는 시간(초)만큼 메모리를 점유한다.
필요없다고 가정하고 제거해보자.

[lee@river newbook]$ kill -SIGKILL 3658

[lee@river newbook]$[1]+ Killed sleep 900
[lee@river newbook]$

-SIGKILL 대신에 -KILL 또는 -9 라고 해도 같다. kill -l 로 출력해보면 signal을 의미하는 SIG 문자가
각 signal 앞에 다 포함되어 있는 것을 알 수 있다. 그래서 SIG 는 생략해도 되며 -9 는 -SIGKILL 의 번호를 뜻한다.
그 번호를 사용해도 된다. 다른 시그널도 다 마찬가지.

[lee@river newbook]$ sleep 600 &
[1] 3662

[lee@river newbook]$ kill 3662
[lee@river newbook]$[1]+ Terminated sleep 600
[lee@river newbook]$

종료 메세지가 다르다. 아무런 signal을 사용하지 않으면 기본적으로 -SIGTERM 시그널이 사용된다.
kill PID = kill -SIGTERM PID = kill -TERM PID = kill -15 PID => 이 세 개는 다 같은 의미이다.

-SIGTERM 은 -SIGKILL 과 달리 프로세스를 안전하게 정상적으로 종료시킨다.

다른 signal 도 확인해보자.

[root@river root]# ps -e | grep sendmail
1132 ? S 0:00 [sendmail]
1141 ? S 0:00 [sendmail]
3707 pts/0 R 0:00 grep sendmail

[root@river root]# kill -SIGHUP 1132
[root@river root]# ps -e | grep sendmail
1141 ? S 0:00 [sendmail]
3709 ? S 0:00 [sendmail]
3712 pts/0 S 0:00 grep sendmail[root@river root]#

SIGHUP signal을 전달하고 난 후 결과를 보면 1132 PID 의 sendmail PID 가 바뀐 것을 알 수 있다.
즉, sendmail 프로세스가 다시 실행되었다는 의미이다. 이렇게 프로세스를 재 실행 할 경우에는
-9로 죽이고 다시 실행하기 보다는 SIGHUP 를 사용하는 것이 편하다

[root@river root]# sleep 1000

sleep 프로세스를 실행할 때 & 붙이지 않으면 sleep 프로세스가 완전히 끝날 때까지는 shell prompt 가
보이지 않는다. 즉 command 를 사용할 수 없다. 시간이 많이 걸리는 프로세스를 실행할 때 & 붙여주지 않고 실행하면
이렇게 멀티태스킹을 사용하지 못하는 문제가 발생한다. 1000초라는 시간을 기다릴 수 없다면 죽여야 한다.
아무런 명령을 사용할 수 없지만 ctrl+c 를 입력하는 것은 가능하다.

vi 편집기 사용도중 ctrl+z 를 입력했다. 그러면

[1]+ Stopped vim a.txt
[root@river root]#vi 편집기가 강제 중단된다. ctrl+z 를 입력하면 현재 프로세스를 강제 중단하는 시그널을
전달하기 때문이다.

[root@river root]# ps -u
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 3665 0.0 0.1 4088 888 pts/0 S 12:10 0:00 [su]
root 3666 0.0 0.2 5448 1448 pts/0 S 12:10 0:00 -bash
root 3719 0.0 0.5 9160 2780 pts/0 T 12:17 0:00 vim a.txt
root 3726 0.0 0.1 2608 660 pts/0 R 12:19 0:00 ps -u
[root@river root]#%CPU 와 %MEM 은 각각 cpu 점유율과 메모리 점유율을 나타낸다.
vi 프로세스의 상태가 T 이다. 중단된 프로세스를 다시 재실행해야 할 경우에는
fg (foreground) 명령을 사용하면 된다.

foreground/background 프로세스

foreground 프로세스에게 터미널 제어권이 있다. foreground 프로세스가 실행중인동안에서터미널에서
명령을 바로 전달하지 못한다.

ex)[root@river root]# sleep 1000

=> sleep 프로세스가 foreground 상태로 실행중이다.

그 아래의 세 개의 명령은 sleep 프로세스가 끝나야 차례대로 실행된다. 그래서 시간이 많이 걸리는 프로세스를
foreground로 실행해서는 곤란하다. 그럴 때는 background 로 실행하면된다.
단지 실행할 때 & 기호만 붙여주면 된다.

ex)
[root@river root]# sleep 1000 &
[2] 3733
[root@river root]# ls
a.txt anaconda-ks.cfg b.txt contest.txt hello unix install.log install.log.syslog
[root@river root]# pwd
/root[root@river root]#
=> 이제 터미널 제어권이 sleep 에게 있지 않으므로 명령을 계속 입력하는 것이 가능하다.
*.background 프로세스는 jobs 명령어로 따로 관리할 수 있다.

[root@river root]# sleep 300 &
[4] 3737

[root@river root]# sleep 900 &
[5] 3739

[root@river root]# sleep 600 &
[6] 3740

[root@river root]# jobs => 중단 또는 background 상태로 실행중인 프로세스만 출력
[1]- Stopped vim a.txt
[2] Running sleep 1000 &
[3]+ Stopped vim b.txt
[4] Running sleep 300 &
[5] Running sleep 900 &
[6] Running sleep 600 &
[root@river root]#

출력결과중 숫자는 프로세스 제어에 사용되는 job 번호 이며 +,- 기호는 가장 나중에 실행된 것,
그리고 두 번째로 나중에 실행된 프로세스를 뜻한다.

[root@river root]# kill -9 %3 %5
[root@river root]#[3]+ 죽었음 vim b.txt
[5] 죽었음 sleep 900
[root@river root]# jobs
[1]+ Stopped vim a.txt
[2] Running sleep 1000 &
[4] Running sleep 300 &
[6]- Running sleep 600 &[root@river root]#

프로세스 id 대신 job 번호로도 프로세스를 제어할 수 있다는 것을 알 수 있다.
중단 또는 백그라운드로 실행중인 프로세스를 foreground 로 전환하고자 하는 경우에는
fg %job번호를 사용하면 된다.

ex)[root@river root]# fg %6
sleep 600[6]+ Stopped sleep 600
[root@river root]# jobs
[1]- Stopped vim a.txt
[2] Running sleep 1000 &
[4] Running sleep 300 &
[6]+ Stopped sleep 600

[root@river root]# bg %6
[6]+ sleep 600 &
[root@river root]# jobs
[1]+ Stopped vim a.txt
[2] Running sleep 1000 &
[4] Running sleep 300 &
[6]- Running sleep 600 &
[root@river root]#

그리고 foreground 상태의 프로세스를 background 로 전환하고자 할 경우에는 먼저 프로세스를 ctrl+z 로
강제 중단한 후 bg 명령을 사용하면 된다.


'Log > Linux' 카테고리의 다른 글

리눅스 파일시스템 및 마운트  (0) 2011.11.28
작업예약 schedule - cron / at  (0) 2011.11.28
파일 권한(Permission)  (0) 2011.11.28
계정관리  (0) 2011.11.28
vi 편집기  (0) 2011.11.28
Posted by logwatch

2011. 11. 28. 19:12 Log/Linux

파일 권한(Permission)

퍼미션(Permission)

1. r(read)읽기 8진수로 4: 파일을 읽을 수 있고, 디렉토리의 내용을 볼 수 있다.
2. w(write)쓰기 8진수로 2 : 파일에 저장 및 삭제, 디렉토리에 파일저장, 디렉토리의 이름 변경, 삭제를 할 수 있다.
3. x(excute)실행 8진수로 1: 파일을 실행, 디렉토리 access 가 가능하다.

[lee@river lee]$ ls -l /etc/passwd
-rw-r--r-- 1 root root 3197 5월 4 12:57 /etc/passwd
여기서 첫 번째의 root 는 이 파일에 대한 소유자를 뜻한다.
두 번째 root 이 파일에 대한 소유그룹을 뜻한다..

[lee@river lee]$ groups lee
bin
[lee@river lee]$ head -2 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin

lee 와 bin 그룹에 속해있는 lee 사용자가 /etc/passwd 파일에 대해서 행사할 수 있는 권한은 제3자의 권한이다.
제3자가 /etc/passwd 파일에 대해 가질 수 있는 권한은 "r" 이므로 읽기가 가능하다.

[lee@river lee]$ ls -l /etc/shadow
-r-------- 1 root root 2764 5월 4 12:57 /etc/shadow

[lee@river lee]$ head -2 /etc/shadow
head: /etc/shadow: 허가 거부됨
당연히 볼 수 없다. shadow 파일은 소유자만 읽을 수 있는 퍼미션으로 되어있다.

-rwxr-xr-- 1 root root 11217 2월 11 2003 makewhatis
이 파일에 대해서는 lee 사용자가 실행할 수 없다.(제3자권한에 x 퍼미션이 없으므로)

[lee@river lee]$ /usr/sbin/makewhatis
-bash: /usr/sbin/makewhatis: 허가 거부됨

[lee@river lee]$ ls -ld /root
drwxr-x--- 4 root root 4096 5월 4 13:07 /root
디렉토리 파일의 r 권한은 디렉토리내의 파일리스트를 출력할 수 있는 권한을 뜻한다.
디렉토리 파일의 w 권한은 디렉토리내에서 파일을 생성하거나 삭제하거나 이름을 변경할 수 있는 권한을 뜻한다.
디렉토리 파일의 x 권한은 디렉토리를 access 할 수 있는 권한을 뜻한다.

[lee@river lee]$ cd /root
-bash: cd: /root: 허가 거부됨 (디렉토리에 "x" 권한이 없으므로)
[lee@river lee]$ ls -l /root
ls: /root: 허가 거부됨 (디렉토리에 "r" 권한이 없으므로)
[lee@river lee]$ touch /root/a.txt
touch: creating `/root/a.txt': 허가 거부됨 (디렉토리에 "w" 권한이 없으므로)

퍼미션 변경
chmod(change mode)

1. chhmod octal mode file 명

ex)[root@river tmp]# chmod 654 a.txt
[root@river tmp]# ls -l a.txt
-rw-r-xr-- 1 root root 5 5월 6 21:30 a.txt

[root@river tmp]# chmod 203 a.txt

[root@river tmp]# ls -l a.txt
--w-----wx 1 root root 5 5월 6 21:30 a.txt
[root@river tmp]#

2. chmod symbolic mode file명
u : user
g: group
o: other
a: all

symmbolic mode 에는 세 개의 연산자(+, - , =)가 사용될 수 있다.

+ : 특정권한 추가
- : 특정권한 제거
= : 특정권한 변경

[root@river tmp]# ls -l a.txt
--w-----wx 1 root root 5 5월 6 21:30 a.txt
[root@river tmp]# chmod u=rx,g=rw,o=x a.txt
[root@river tmp]# ls -l a.txt
-r-xrw---x 1 root root 5 5월 6 21:30 a.txt

[root@river tmp]# chmod a-x a.txt ( a-x : u-x,g-x,o-x 와 같다)

[root@river tmp]# ls -l a.txt
-r--rw---- 1 root root 5 5월 6 21:30 a.txt

[root@river tmp]# ls -l a.txt
-r--rw---- 1 root root 5 5월 6 21:30 a.txt

[root@river tmp]# chmod u=rwx,g-r,o+x a.txt

[root@river tmp]# ls -l a.txt
-rwx-w---x 1 root root 5 5월 6 21:30 a.txt

[root@river tmp]#

파일에 대한 소유자 및 그룹변경은chown, chgrp 명령어로 한다.

chown 소유자 file명
chgrp 그룹 file명 또는
chown 소유자:그룹 file 명

ex)[root@river tmp]# ls -l a.txt
-rwx-w---x 1 lee root 5 5월 6 21:30 a.txt

[root@river tmp]# chgrp sys a.txt

[root@river tmp]# ls -l a.txt
-rwx-w---x 1 lee sys 5 5월 6 21:30 a.txt

[root@river tmp]# chown root:bin a.txt

[root@river tmp]# ls -l a.txt
-rwx-w---x 1 root bin 5 5월 6 21:30 a.txt

[root@river tmp]#

그 외에 아래와 같은 세 가지 퍼미션이 더 있다.

1. s(set UID) (4nnn n은 8진수) : --s-------
소유자 권한에 s 가 있으면 setUID 퍼미션이다.(실행하는 동안 소유자 권한을 갖는다)
2. s(set GID) (2nnn): ------s--- :
그룹 권한에 s 가 있으면 setGID 퍼미션이다.(실행하는 동안 그룹권한을 갖는다)
3. t(sticky bit) (1nnn): --------t :
3자권한에 t 가 있으면 sticky bit 퍼미션이다.(파일을 만들 수 있다. 그러나 파일소유자만 파일을 삭제할 수 있다)

sticky bit 퍼미션
[root@river var]# mkdir share

[root@river var]# ls -ld share
drwxr-xr-x 2 root root 4096 5월 6 20:22 share
[root@river var]# ls -ld share
drwxrwxrwx 2 root root 4096 5월 6 20:22 share

[lee@river lee]$ id
uid=500(lee) gid=500(lee) groups=500(lee),1(bin)

[lee@river lee]$ ls -l /var/share/a.txt
-rw------- 1 root root 5 5월 6 20:27 /var/share/a.txt

[lee@river lee]$ rm -f /var/share/a.txt

[lee@river lee]$ ls -l /var/share/a.txt
ls: /var/share/a.txt: 그런 파일이나 디렉토리가 없음

share 디렉토리에 모든 사용자가 자신의 파일을 저장하고 사용하게 하려면 777 퍼미션을 줘야 한다.
그러나 퍼미션이 777 이면 디렉토리내의 파일명을 생성, 수정 그리고 삭제할 수 있는 권한을 갖게 되므로
문제가 된다. (자신이 만든 파일 퍼미션을 어떤 식으로 하더라고 다른 사람이 삭제할 수 있게 된다)
이럴 때 사용되는 퍼미션이 sticky bit 퍼미션이다.
sticky bit 퍼미션이 설정되어 있으면 소유자 외에는 파일을 삭제할 수 없게 되므로 자신의 파일을
다른 사용자로부터 보호할 수 있다.

[root@river var]# chmod 1777 share

[root@river var]# ls -ld share
drwxrwxrwt 2 root root 4096 5월 6 20:22 share

[root@river var]# su - lee

[lee@river lee]$ whoami
lee

[lee@river lee]$ ls -ld /var/share
dwxrwxrwt 2 root root 4096 5월 6 20:30 /var/share

[lee@river lee]$ ls -l /var/share/a.txt
-rw------- 1 root root 5 5월 6 20:30 /var/share/a.txt

[lee@river lee]$ rm -f /var/share/a.txt
rm: cannot remove `/var/share/a.txt': 명령이 허용되지 않음[lee@river lee]$

* 아래의 두 개의 퍼미션은 Process 에 대한 이해가 필요하다.

setUID 퍼미션

보안과 관련되어 있는 퍼미션으로 이 퍼미션을 잘못관리하면 보안상 문제가 발생할 수 있다.
소유자 권한으로 파일을 실행할 수 있다.

[lee@river lee]$ id
uid=500(lee) gid=500(lee) groups=500(lee),1(bin)
[lee@river lee]$

[lee@river lee]$ find /root -name .bashrc
find: /root: 허가 거부됨

프로세스의 권한은 사용자 권한을 그대로 따른다 root 사용자는 /root 디렉토리에 읽고,쓰고,실행할 수 있는
권한을 가지고 있다. 그러면 root 가 실행한 프로세스도 마찬가지다.
그리고 lee 사용자는 /root 디렉토리에 대해 아무런 권한도 없으므로 lee 사용자가 실행한 find 프로세스도
마찬가지이다.

예를 들면
[lee@river lee]$ sleep 30 &
[2] 31083

[lee@river lee]$ ps -aux | grep sleep
lee 31083 0.0 0.1 4692 528 pts/1 S 21:03 0:00 sleep 30
lee 31086 0.0 0.1 4668 652 pts/1 S 21:03 0:00 grep sleep
[lee@river lee]$sleep 프로세스의 소유자는 프로세스를 실행한 lee가 된다.그러나 sleep 프로세스에
set uid 퍼미션이 설정되어 있다면
ls -l /bin/sleep
-rwsr-xr-x 1 root root 12444 2월 19 2003 /bin/sleep
[lee@river lee]$ sleep 30 &
[1] 31133

[lee@river lee]$ ps -aux | grep sleep
root 31133 0.0 0.1 4692 528 pts/1 S 21:06 0:00 [sleep]
[lee@river lee]$프로세스 소유자가 lee가 아니라 root 인 것을 알 수 있다.

이제 find 명령어에 setuid 퍼미션을 설정하고 다시 테스트해보자

[root@river root]# whereis find
find: /usr/bin/find /usr/share/man/man1/find.1.gz

[root@river root]# chmod 4755 /usr/bin/find

[root@river root]# ls -l /usr/bin/find
-rwsr-xr-x 1 root root 51028 1월 25 2003 /usr/bin/find
[root@river root]#

find 명령어에 setuid 퍼미션이 설정되었으며 소유자는 현재 root로 되어 있다.

[root@river root]# su - lee

[lee@river lee]$ find /root -name .bashrc
/root/.bashrc
[lee@river lee]$

find 프로세스가 root 권한으로 실행되므로 처음과 달리 lee 사용자가 /root 아래에 있는
.bashrc 파일을 검색할 수 있게 되었다.

setUID 퍼미션이 필요한 이유는?

예를들면

모든 사용자의 비밀번호는 /etc/shadow 라는 파일에 저장되어 있다.
사용자가 자신의 패스워드를 변경한다면 그 변경된 패스워드는 shadow 파일에 기록이 되어져야만 한다.
그렇다고 shadow 파일을 수정할 수 있는 권한을 준다면 당연히 보안상 문제가 발생한다.
setuid 퍼미션은 그럴 때 필요한 것이다. 사용자가 root 권한이 필요한 파일에 엑세스 해야 하는경우
setuid 퍼미션이 필요하다.

setGID 퍼미션

setGID 퍼미션의 개념은 setUID 퍼미션의 개념과 다르지 않다.
파일의 소유 그룹권한으로 실행할 수 있는 권한이다.

*.아래는 bash 메뉴얼 페이지의 일부내용이다.
setuid 퍼미션을 테스트할때 알아두면 도움이 된다.

-p      Turn on privileged mode.  In this  mode,  the  $ENV  and
                      $BASH_ENV  files  are not processed, shell functions are
                      not inherited from the environment,  and  the  SHELLOPTS
                      variable,  if it appears in the environment, is ignored.
                      If the shell is started with the effective user  (group)
                      id  not  equal  to  the real user (group) id, and the -p
                      option is not supplied, these actions are taken and  the
                      effective user id is set to the real user id.  If the -p
                      option is supplied at startup, the effective user id  is
                      not reset.  Turning this option off causes the effective
                      user and group ids to be set to the real user and  group
                      ids.

set [-o 옵션] [인수...]
-p : privileged 모드를 켠다. 이모드에서는 $ENV 파일을 처리하지 않으며
셀함수를 환경으로부터 상속하지 않는다. 유효사용자(그룹) id와 실제 사용자(그룹) id 가 일치하지
않으면 시동할 때 자동으로 작동한다. 이옵션을 끄면 유효사용자, 그룹 id를 실제 사용자, 그룹id로
설정한다.

'Log > Linux' 카테고리의 다른 글

작업예약 schedule - cron / at  (0) 2011.11.28
process 관리  (0) 2011.11.28
계정관리  (0) 2011.11.28
vi 편집기  (0) 2011.11.28
리눅스 기본 명령어  (0) 2011.11.28
Posted by logwatch

2011. 11. 28. 19:11 Log/Linux

계정관리

계정관리

linux system에는 크게 세 가지 종류의 계정이 있다

root : super user 계정이라고도 하며 관리자 계정으로 거의 모든 권한을 행사할 수 있는 계정
system 계정 : 일반적으로 login은 안되며 system 운영상 필요한 계정
일반user 계정: 시스템 운영목적이 아닌 일반사용자를 위한 계정

계정관련 파일

/etc/passwd, /etc/shadow, /etc/group
- 이 가운데 한 가지 파일이라도 잘못되면 사용자는 정상적으로 login 하지 못할 수 있다.

ex)
[lee@river lee]$ head -5 /etc/passwd; tail -3 /etc/passwd
root:x:0:0:root:/root:/bin/bash 관리자 계정

bin:x:1:1:bin:/bin:/sbin/nologin 시스템 계정

daemon:x:2:2:daemon:/sbin:/sbin/nologin 시스템 계정

adm:x:3:4:adm:/var/adm:/sbin/nologin 시스템 계정

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 시스템 계정

user1:x:3041:3041::/home/user1:/bin/bash 일반유저계정

user2:x:3042:3042::/home/user2:/bin/csh 일반유저계정

ftp1:x:3043:3043::/home/ftp1:/bin/tcsh 일반유저계정

패스워드 파일 포맷

man -S5 passwd
There is one entry per line, and each line has the
format:
account:password:UID:GID:GECOS:directory:shell

의미 있는 문자열 및 각 숫자는 콜론 문자로 구분되어 있다.
root : 계정명

x : 패스워드 필드 x 로 표시되어 있으면 패스워드가 /etc/shadow 파일에 저장되어 있다는 의미
패스워드를 shadow 파일에 두면 패스워드를 보호할 수 있다.(shadow file 에 대한 접근은 root 만이 가능하다)

0 : 커널이 참조하는 root 사용자의 식별자.

0 : root 사용자가 속한 첫 번째 그룹(primary group)을 나타낸다

root : 단순히 참고하기위한 용도로 사용되며 이 필드는 비어져 있어도 된다

/root : root 사용자의 홈 디렉토리

/bin/bash : login shell

shadow 파일 포맷

[root@river root]# head -2 /etc/shadow ; tail -2 /etc/shadow
root:$1$0lvCjXwW$JwSLfSuCJGtHebt.0BJGr/:13587:0:99999:7:::
bin:*:13587:0:99999:7:::
user2:!!:13635:0:99999:7:10::
ftp1:$1$xHaNZCYY$kLaYYpY.q7yydEhgxTNum0:13637:0:99999:7:10::

shadow 파일의 각 포맷 역시 도움말 안에 상세한 내용이 나와 있다.

[root@river root]# man -S5 shadow

SHADOW(5) SHADOW(5)
NAME shadow - encrypted password file
DESCRIPTION shadow contains the encrypted password information for
user's accounts and optional the password aging information.
Included is
Login name
Encrypted password
Days since Jan 1, 1970 that password was last changed
Days before password may be changed Days after which password must be changed
Days before password is to expire that user is warned
Days after password expires that account is disabled
Days since Jan 1, 1970 that account is disabled
A reserved field

[root@river root]# head -1 /etc/shadow
root:$1$0lvCjXwW$JwSLfSuCJGtHebt.0BJGr/:13587:0:99999:7:::[root@river root]#

root : 계정명

$1$0lvCjXwW$JwSLfSuCJGtHebt.0BJGr : 암호화된 비밀번호

13587 : root 사용자가 패스워드를 마지막으로 변경한 날짜를 1970년 1월 1일 기준으로 계산한 일수이다.

0: 패스워드를 변경할 수 있는 최소한의 일수를 나타낸다. (0 으로 되어 있으면 설정이 되어 있지 않다는 의미로
패스워드를 변경을 언제든지 할 수 있다)

99999 : 패스워드를 반드시 변경해야만 하는 일수이다. (숫자가 이렇게 되어 있으면 설정이 되어 있지 않다는 의미)

7 : 패스워드 만료일이 되기 전에 언제부터 경고메시지를 보여줄 것인가 하는 필드

: : 유예기간 - 패스워드 만료일까지 사용자가 패스워드를 변경하지 않았다면 계정을 바로 잠그도록 하는 것이 아니라
이 기간 동안은 패스워드를 변경할 수 있도록 하겠다는 것이다. 유예기간동안에도 패스워드를 변경하지 않는다면
그 계정은 잠기게 되므로 사용하지 못한다.

: : 계정이 expire 되는 날을 뜻한다.

* finger 명령으로 passwd 파일을 쉽게 볼 수 있으며 chage 명령으로 shadow 파일을 쉽게 볼 수 있다.

ex)
[root@river root]# finger root
Login: root Name: rootDirectory: /root
Shell: /bin/bash
On since Mon Apr 23 21:40 (KST) on tty1 5 days 13 hours idle
Last login Wed Apr 25 17:01 (KST) on pts/0 from 211.54.45.118
New mail received Sun May 6 04:02 2007 (KST) Unread since Mon Mar 12 11:05 2007 (KST)
No Plan.

[root@river root]# chage -l root
최소: 0

최대: 99999

경고: 7

유효하지 않음: -1

마지막 변경: 3월 15, 2007

패스워드 만기: 불가

패스워드가 유효하지 않음:

계정 만기:불가

group file

ex
[root@river root]# head -2 /etc/group; tail -2 /etc/group
root:x:0:root,user7,admin
bin:x:1:root,bin,daemon,lee
user2:x:3042:ftp1:x:3043:

=> 분석 =>

root : group 이름

x : 패스워드 필드를 뜻한다. (요즘은 쓰이지 않는다. 의미 없는 필드이다)

0 : root 그룹의 식별자

root,user7,admin : root 그룹에 속해있는 사용자. 그룹에 속해있는 사용자가 하나이상일 경우에는 사용자사이를
콤마로 구분

사용자 계정을 추가
명령어는 useradd 또는 adduser 이다.

[root@river root]# ls -l /usr/sbin/adduser
lrwxrwxrwx 1 root root 7 3월 11 23:27 /usr/sbin/adduser -> useradd
* adduser 는 단지 링크파일

*.명령을 옵션없이 그냥입력하면 친절하게 사용법이 출력된다.

[root@river root]# useradd
사용법: useradd [-u uid(사용자 아이디) [-o]] [-g 그룹명][-G 그룹,...]
[-d 홈디렉토리][-s 쉘][-c 적요사항][-m [-k template]]
[-f 비활성화] [-e 만기] [-p passwd] [-M] [-n] [-r] name
useradd -D [-g 그룹명][-b 초기디렉토리][-s 쉘][-f 비활성화] [-e 만기]

useradd 명령어 사용법이 두 가지 형식이 있다는 것을 보여준다.useradd 옵션, 그리고 useradd -D 옵션
여기서 useradd -D 옵션은 디폴트값과 관련 있다. 예를 들면
[root@river root]# useradd -D
그룹=100
홈디렉토리=/home
비활성화=10
만기=
쉘=/bin/bash
SKEL=/etc/skel

위에 출력된 것이 useradd 명령의 디폴트 값이다.
사용자 계정을 추가할 때 홈디렉토리를 지정하지 않으면 /home 그리고 login shell을 지정하지 않으면 /bin/bash
가 지정된다는 그런 의미이다.

[root@river root]# useradd kildong
useradd 명령을 옵션 없이 사용하면 아래와 같은 디폴트값이 지정된다.

[root@river root]# finger kildong
Login: kildong Name: (null)Directory: /home/kildong Shell: /bin/bash
Never logged in
No mail.
No Plan.

[root@river root]# groups kildong
kildong : kildong => kildong은 하나의 primary 그룹에만 속해있다.디폴트 값을 쓰기 싫다면

[root@river root]# useradd -u 5555 -G sys,bin -d /var/kildong2 -c "hong kil dong" -s /bin/csh kildong2

[root@river root]# finger kildong2
Login: kildong2 Name: hong kil dong
Directory: /var/kildong2 Shell: /bin/csh
Never logged in
No mail
No Plan.

[root@river root]# groups kildong2
kildong2 : kildong2 bin sys => kildong2 는 하나의 primary group과 두개의 secondary 그룹에 속해있다.

[root@river root]#

계정삭제

userdel
사용법: userdel [-r] 이름[root@river root]#

-r : 계정 삭제시 홈디렉토리까지 삭제

ex)
[root@river root]# userdel kildong
[root@river root]# finger kildong
finger: kildong: no such user.

[root@river root]# ls -ld /home/kildong
drwx------ 5 3044 3044 4096 5월 6 22:53 /home/kildong
=> 계정 삭제시 -r 옵션을 사용하지 않았으므로 홈 디렉토리가 남아있다.

[root@river root]# userdel -r kildong2
[root@river root]# ls -ld /var/kildong2
ls: /var/kildong2: 그런 파일이나 디렉토리가 없음 => 디렉토리까지 삭제되었다.

계정설정 변경

usermod
명령의 사용법은 useradd와 상당히 유사. 단 usermod 명령어로 계정을 생성할 순 없다. 변경만 가능하다.

[root@river root]# useradd kildong
[root@river root]# finger kildong
Login: kildong Name: (null)
Directory: /home/kildong Shell: /bin/bash
Never logged in.
No mail.
No Plan.

[root@river root]# usermod
사용법: usermod [-u uid(사용자 아이디) [-o]] [-g 그룹명][-G 그룹,...]
[-d 홈 디렉토리 [-m]] [-s 쉘] [-c 적요사항] [-l 새_이름]
[-f 비활성화] [-e 만기] [-p 패스워드] -L|-U] 이름

[root@river root]# usermod -s /bin/bash -c "hongkildong" kildong

[root@river root]# finger kildong
Login: kildong Name: hongkildong
Directory: /home/kildong Shell: /bin/bash
Never logged in.
No mail.
No Plan.

=> kildong 사용자 정보가 바뀌었다. login shell 이 변경되었으며 Name이 추가된 것을 알 수 있다.

그룹 추가 및 삭제, 변경

ex)
[root@river root]# groupadd
usage: groupadd [-g gid [-o]] [-r] [-f] group

[root@river root]# groupadd group1

[root@river root]# tail -2 /etc/group
kildong:x:3044:group1:x:3045:

[root@river root]# groupmod -g 4000 group1

[root@river root]# tail -2 /etc/group
kildong:x:3044:group1:x:4000:

[root@river root]# groupdel group1
[root@river root]# tail -2 /etc/group
ftp1:x:3043:kildong:x:3044:

[root@river root]#

*. 사용자 계정 생성시 자동으로 만들어지는 파일은 skel 항목과 관련있다.


'Log > Linux' 카테고리의 다른 글

process 관리  (0) 2011.11.28
파일 권한(Permission)  (0) 2011.11.28
vi 편집기  (0) 2011.11.28
리눅스 기본 명령어  (0) 2011.11.28
리눅스 사용자 인터페이스 및 명령어  (0) 2011.11.28
Posted by logwatch

2011. 11. 28. 19:11 Log/Linux

vi 편집기

vi 편집기

unix의 일반 text 모드에서 사용되는 편집기에는 vi, emacs, pico 등이 있다.

특징

pico 편집기는 쉽고 단순하다. 간단한 편집 유틸리티 정도로 볼수 있음.

vi - 유닉스에서 가장 널리 사용되는 대중적인 편집기 *. 위키백과사전에 설명되어 있는 vi

emacs - 강력한 편집 기능 제공, vi 편집기에 비하면 더 복잡하고 크다.

* 레드헷을 포함한 대부분의 리눅스에서 기본적으로 사용되는 vi 편집기는 vi 편집기의 기능을 좀 더 향상 시킨
vim(vi improved) 이라는 편집기가 vi 라는 이름으로 사용되고 있으며 본래의 vi 편집기에 비해 사용하기 편한 좀
더 많은 기능을 제공한다.

vi 편집기 mode

vi 편집기 명령어는 크게 세 가지 모드로 나뉘어 질수 있다.

명령 모드 : vi 편집기의 기본모드.( 입력 상태이면 편집 명령어 사용 불가능)

입력모드 : i,I,a,A,o.O (입력모드 상태가 아니면 편집기 입력이 불가능)

확장모드(ex 모드, 또는 last line 모드라고 부른다.? - 왼쪽 하단에 명령어가 표시된다)

각 모드에서 사용하는 명령어는 정해져 있으며 입력모드 명령어가 가장 적다(i,I,a,A,o.O)

확장 모드 명령어는 명령어를 입력할 때 대부분 먼저 ‘:’을 붙이고 명령어를 입력함으로써

다른 모드 명령어와 구분이 된다.

각 모드 사이의 전환

명령어 모드 => 입력모드 전환 ; 입력모드 명령어중 하나를 사용.

입력모드 => 명령모드전환 ; esc 키 입력

입력모드 => 확장모드 ; 명령모드로 전환 후 확장모드 명령어 입력.

vi 편집기 명령어

커서 이동 명령

j(↓) 아래로 이동

k(↑) 위로 이동

h(←) 왼쪽으로 이동

l (→) 오른쪽으로 이동

G(go) 제일 끝줄로 이동

nG n번째 행으로 이동.

^b(back) 한 화면 위로 이동

^f(forward) 한 화면 아래로 이동

^u(up) 반 화면 위로 이동

^d(down) 반 화면 아래로 이동

e 한 단어 뒤로 이동

b 한 단어 앞으로 이동

0 줄의 제일 처음부터 이동

$ 줄의 제일 끝으로 이동

*. vi 편집기 명령어중 반복할 수 있는 일부 명령어 앞에? n(숫자)을 붙일 수 있다.
이때 n 의 의미는 n 뒤의 명령을 n 번 반복하라는 의미이다.
ex) 3dd => dd 명령을 세 번 반복하라. => 세 줄이 삭제된다.

입력 명령어

i 현재 커서 위치에 삽입(커서 위치에 문자를 오른쪽으로 한 칸 밀고 삽입)

a 현재 커서 위치 다음에 삽입 (a == "l + i")

o 현재 커서가 위치한 줄의 아랫줄에 삽입(o == "$ + a + Enter")

I 현재 커서가 위치한 줄의?맨 앞에 삽입 (I == "0 + i")

A 현재 커서가 위치한 줄의?맨 뒤에 삽입 (A == "$ + a")

O 현재 커서가 위치한 줄의?바로 위에 삽입

지우기 명령어

x 현재 커서 위치의 문자를 지운다. (nx x를 n번 반복)

dd 현재 커서가 위치한 줄을 지운다. (ndd dd를 n번 반복)

dw 현재 커서가 위치한 단어를 지운다.

d$ 현재 커서가 위치한 곳부터 그 행의 끝까지를 지운다.

dG 현재 커서가 위치한 행부터 편집문서의 마지막 줄까지 삭제한다.

*. 삭제한 내용은 바로 지워지지 않고 버퍼에 저장되므로 붙여넣기 하거나 취소 할 수 있다.

* 리눅스에 서 사용하는 vim 편집기는 undo를 여러 번 수행할 수 있다

복사하기와 붙이기

yy(=Y) 현재 커서가 위치한 줄을 버퍼에 복사한다.

(nyy => 현재 커서가 위치한 곳부터 아래로 n 라인을 버퍼에 복사한다)

yw 현재 커서가 위치한 단어를 버퍼에 복사한다.

(nyw => 현재 커서가 위치한 단어부터 오른쪽으로 n개의 단어를 버퍼에 복사한다)

p 버퍼에 들어 있는 내용을 현재 커서가 위치한 줄의 아래에 붙인다.

P 버퍼에 들어 있는 내용을 현재 커서가 위치한 줄의 위에 붙인다.? "xyy x라는 버퍼에 라인을 카피한다. (버퍼에 이름을 붙여서 사용하면 편집기가 열려 있는 동안은?버퍼의 내용을 잊어버리지 않는다.)

치환

r 현재 위치의 문자를 한개만 바꾼다.

R 현재 커서위치에서 오른쪽으로 esc 키를 입력할 때 까지 바꾼다.

cw 현재 위치의 단어를 바꾼다.

cc 현재 커서가 위치한 줄을 바꾼다.

C 현재 커서가 위치한 곳으로부터 줄의 끝까지 바꾼다.

~ 대소문자를 서로 바꾼다.

기타 명령어

J 현재 줄과 다음 줄을 합한다.?

^g 현재 편집하고 있는 파일의 정보를 보여준다.

u 방금 한 명령을 취소한다.

^R (=redo) 취소한 명령을 다시 취소 (vim)

U 현재 커서가 위치한 줄에 대한 편집 명령을 취소한다.

. 방금한 명령을 되풀이 한다.

^l 화면 refresh

확장모드 명령어

:! shell command ; 편집기를 벗어나지 않은 상태로 shell command 를 실행한다.

:args 현재 편집하는 파일명을 보여준다.

:w 편집하는 내용을 덮어쓰기로 저장한다.

:w filename 현재 내용을 지정된 파일 이름으로 저장한다.

:w! 강제로 덮어쓰기를 한다.

:wq 현재 편집하는 내용을 저장하고 종료한다.

:wq! 현재 편집하는 내용을 강제로 저장하고 종료한다.

:q! 강제로 종료한다.

:e filename ;새로운 파일을 편집한다.

:e! 현재 파일을 저장하지 않고 편집이전의 상태에서 새로 작성한다.

:r filename 현재 커서위치 다음에 파일을 끼워 넣는다.

:14 r filename 14행 이후에 파일을 읽어 삽입한다.

:n1,n2d n1번째 행에서 n2번째 행까지를 지운다.

:n1,n2 w filename n1에서 n2행까지를 filename에 저장한다.

:3,$d 3번째 행에서 끝항까지 지운다.

:set 여러 가지 환경 변수를 설정한다. set all하면 현재 설정되어 있는 환경 변수를 보여준다.

:set nu ; 라인 넘버 붙이기 (<=> set nonu)

:set showmode ; 현재 명령 상태를 화면 하단에 표시

:set bg=dark 편집기 글자색을 밝게 표시 (vim)

:set ai 자동 들여쓰기

:set ic 문자열 검색시 대소문자 구분 안한다.

:ab문자 문자열? ; 문자열을 문자열 앞에 있는 문자로 줄여 사용할 수 있음.(아래아한글의 상용구 기능에 해당)

:set ts=n 기본 tab size를 n column 으로 한다.

:sp 편집기 화면 수평 분할(화면을 수평으로 여러 개 분할해서 사용할 때 쓴다) (vim)

:^ww 분할된 화면으로 커서 이동. (vim)

문자열검색

/패턴 ; 패턴에 해당하는 내용을 현재 커서위치로 부터 오른쪽에서 그리고 아래쪽으로 찾는다.

n 정방향 다음 찾기 (현재 진행방향으로 => 아래쪽으로)

N 역방향 다음 찾기 (현재 진행 방향 반대쪽으로 => 위쪽으로)

? 패턴 패턴에 해당하는 내용을 현재 커서위치로 부터 왼쪽에서 그리고 위쪽으로 찾는다.

문자열 치환

:n1,n2s/serch/replace/g ( => 시작행번호, 마지막행번호s/찾을패턴/바꿀패턴/옵션 )

(g 는 global의 의미 해당 라인의 문자열을 전부 치환, g옵션이 생략될 경우에는 한 라인에서 치환해야할 패턴이
여러 개일 경우 맨 왼쪽 에 있는 것만 치환됨.)

*. 옵션에 i 가 사용되면 intractive 모드로 명령어 실행, 바꾸기 전에 물어본다.
* . 키보드에 있는 'Del', 'PageUp','Home','End' 및 방향키는 vi 편집기에서는 사용되지 않는다.
(vi 편집기 명령에 사용되는 키가 아니므로 시스템 환경에 따라서 될 수도 있고 안될 수도 있음)

vi 환경설정.

환경설정 파일을 만들면 자주 사용되는 vi 명령을 디폴트값으로 사용 할 수 있다.
환경설정파일은 확장 모드 명령어만 사용
위치 $HOME/.exrc 또는 .vimrc

설정 파일예

set nu(=set number) : 라인번호를 붙임.

set ts=4 : tab 의 크기를 4칸으로 함

syn on(=syntax on) : syntax highlighting

set ai : 자동들여쓰기

set cindent : c 소스 코딩시 자동들여쓰기

set shiftwidth : 자동들여쓰기 간격

set showmode : 편집 상태를 화면 하단에 표시

set vb : visual beep (경고음을 시각적으로 표시)

set title : 제목표시줄에 현재 편집중인 파일명 표시

set ic(=ignorecase) : 문자열 검색 할 때 대/소문자 구분 안함

set bg=dark : 글자색을 밝게 표시되도록 한다.

*. 기타
매크로
qa 라고 하면 a 레지스터에 입력하는 모든 키가 순서대로 매크로로 저장이 된다. 매크로가 실행줄일때는 아래에 기록중이라는 메세지가 보인다. q 를 누르면 매크로 저장이 돤료된다.

매크로에 저장된 명령을 실행할때는 @a 라고 하면 된다. 반복실행할때는 5@a 이렇게 숫자를 앞에 붙여주면 된다.

* vi 편집기 연습문제 1
* vi 편집기 연습문제 2

** vi 명령어 기타 **

vim 또는 vi에서 , Tab 문자를 보려면
:set list
그러면 현재 문서의 모든 탭문자가 ^I 라는 기호로 나타난다.
그리고 라인끝에는 $ 문자가 표시된다.
탭문자를 보이지 않게 하려면
:set nolist


'Log > Linux' 카테고리의 다른 글

파일 권한(Permission)  (0) 2011.11.28
계정관리  (0) 2011.11.28
리눅스 기본 명령어  (0) 2011.11.28
리눅스 사용자 인터페이스 및 명령어  (0) 2011.11.28
vmware 에서 centos 5.x및 fedora9 리눅스 설치방법  (0) 2011.11.28
Posted by logwatch

* 실행파일 경로

- 파일 실행시 참조되는 경로는 $PATH 변수에 설정되어 있다.

echo $PATH

/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin/X11:/usr/X11R6/bin:/root/bin

- 파일 실행시 경로명 없이 파일명만 사용한 경우에는 shell 내장 명령어인지를 먼저 확인한다.

shell 내장 명령어가 아니면 $PATH 변수에 설정되어 있는 디렉토리 경로에서 파일을 찾는다.

현재 디렉토리는 참조하지 않는다.

$PATH 에 설정되지 않는 디렉토리의 파일을 실행할 때 경로를 생략할 수 없다.

실행파일 경로를 재지정 하려면

PATH=설정할 경로 명

*. logout 하게 되면 설정 변수값을 잃어버린다.

파일관련 명령어

cat

conCATenate에서 나온 말로 파일의 내용을 표준 출력으로 내보내어, 파일내용을 알아보거나,
여러 파일을 하나의 파일로 출력하여 연결한다.
또는 표준 입력으로부터 파일을 만들 수도 있다.

cat [options] [file(s)]

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

자주 사용되는 옵션

-n : 행 번호를 붙여서 출력.

-b 행 번호를 보여주되 빈 줄은 행 번호를 붙이지 않고 출력

ex)

cat dict1 dict2 > dictionary => dict1 과 dict2 파일을 연결하여 dictionary라는 파일에 저장

cat > memo => 'control-d'를 입력할 때까지 키보드(표준 입력)로 입력한 내용을 memo라는 파일로 저장

head

파일의 선두를 보여준다.
head [-count] [file(s)] : count에 정해준 줄 수만큼 file(s)의 첫 부분을 보여준다.
count를 생략하면 파일의 첫 10줄을 보여준다.
file을 생략하면 표준입력을 사용한다.

tail

파일의 끝부분을 보여준다.

tail [-count] [file(s)]사용법은 head와 같다.

wc (word count)

파일,또는 표준 입력 안의 행, 단어, 문자의 수를 센다.
wc [options] [file(s)]
자주 사용되는 옵션
-l : line 수 출력
-c : 문자(charater)수 출력
-w : 단어(word)수 출력
옵션을 생략하면 line수, 단어수, 문자수를 모두 출력한다.

ex)

[lee@river lee]$ wc /etc/passwd 109 125 4484 /etc/passwd

more

파일의 내용을 화면 단위로 끊어서 보여준다.
more file(s) : file이 생략되면 표준 입력을 사용한다.

more에서 사용되는 명령어(more 가 실행중일때)

h 도움말
space 다음 페이지
RETURN 다음 한줄 스크롤
q,Q 종료
b,^B 이전 페이지
/pattem 검색
= : 현재 라인 번호 출력
:f : 현재 파일 이름과 라인 번호를 보여준다.
! 쉘 명령어를 실행한다.

*. more 와 유사한 명령어로 less 가 있으나 more 보다 많이 쓰이진 않는다.

* meta character *
- shell 이 특별한 의미로 해석하는 문자를 메타 문자라고 한다. (대개 특수문자가 이에 해당된다)

redirection - 입출력 방향 재지정

file descriptor

0: 표준입력
1: 표준출력
2: 표준에러

> ( = 1>) : 출력방향 전환 (표준출력 => file) 파일이 존재하는 경우는 overwrite
>>( = 1>>) : 출력방향 전환 (표준출력 => file) 파일이 존재하는 경우 append
<(= 0<) ; 입력방향 전환 (표준입력 => file) 입력을 키보드가 아닌 파일에서 받아들다.
<<_문자열; here document 라고 한다. 이 문자열까지만 입력을 받는다는 의미이다.
2> ; 에러방향 전환 (표준에러 => file) 표준에러의 방향은 모니터이다.
에러를 모니터 상에 출력하지 않거나 파일로 남길 때 사용한다.

ex 1)
cat > a.txt => 키보드 입력으로 파일을 만든다.
ctrl + d 를 입력하면 완료된다.
cat < a.txt => 키보드 대신 파일로부터 입력을 받아서 표준출력으로 출력한다.
cat => 키보드로 입력받은 내용을 모니터로 출력한다.

ex 2)
[root@river root]# ls -l a.txt b.txt c.txtls: c.txt: No such file or directory <= 이 부분이 표준에러이다.
-rw-r--r-- 1 root root 0 May 1 20:28 a.txt <= 이부분은 표준출력
-rw-r--r-- 1 root root 0 May 1 20:28 b.txt <= 이부분도 표준출력
[root@river root]# ls -l a.txt b.txt c.txt 2> /tmp/error.txt
-rw-r--r-- 1 root root 0 May 1 20:28 a.txt
-rw-r--r-- 1 root root 0 May 1 20:28 b.txt

=> 에러가 모니터로 출력되지 않고 /tmp/error.txt 파일에 저장되었다.

출력을 그냥 버리고 싶을 경우에는 /dev/null 로 보내면 된다.

pipe

pipe는 앞에 명령의 실행결과를 pipe 뒤의 명령어의 입력으로 전달한다.예를 들면

ls -l /etc | more

=> ls -l /etc 의 실행결과를 모니터로 출력하지 않고 more 명령의 입력으로 전달한다.

pipe를 사용하면 명령을 조합해서 사용할 수 있다는 점 때문에 매우 많이 사용된다.

grep(get regular expression)

: 특정한 문자열을 포함하고 있는 라인을 찾기 위해 사용한다.

자주 사용되는 옵션

-v(invert) ; 찾고자 하는 문자열과 일치하는 라인을 제외한 모든 라인을 출력한다.

-n(number) ; 문자열이나 패턴을 일치시키는 라인들의 라인번호를 표시해준다.

-l(listfile) ; 특정한 패턴을 찾기 위해 여러 개의 파일을 검색할 때 편리하게 사용할 수 있다.

이 옵션은 패턴을 갖고 있는 줄을 찾아 보여주는 것이 아니라 그러한 줄이 발견된 파일명을 결과로 보여준다.

sort
알파벳 순서대로 또는 숫자 순서대로 정렬항목을 기준으로 오름차순, 내림차순으로 정렬한다.
보통 정렬은 사전적으로 순서화되는데 이때 주의할 점은 알파벳 순서는 소문자보다 대문자가 우선이고,
숫자들은 모든 문자보다 우선한다는 것이다. 옵션 없이 실행하면 보통 오름차순이고, -r 옵션을 사용하면 내림차순이다.

cut
데이터의 특정 열을 선택하거나, 파일내의 특정 필드만을 표시할 때 사용한다.

주요옵션

-c 목록 : 목록에 지정한 열을 출력

1,2번열을 출력하려면 -c1,2

1번에서 10번열까지 출력하려면 -c1-10

-f 목록 : 목록에 지정한 필드를 출력

-f1,3은 1번 필드와 3번 필드를 출력

-d 문자 : 문자로 지정된 문자를 필드 구분자로 사용

ex1) $cat test.txt

first second third

$ cut -c1-3 test.txt

fir

$ cut -f1 test.txt

first

$

ex2) $ cat /etc/passwd # 필드구분자를 “:”를 사용

root:x:0:1:Super-User:/root:/bin/bash

daemon:x;1:1::/:

bin:x:2:2::/usr/bin:

$ cut -f1 -d: /etc/passwd

root

daemon

bin

$

paste
수직으로 파일을 결합하여 보여준다.

ex)

$ cat a

kug

kang

su

$ cat b

222-222

333-333

$ paste a b

kug 111-111

kang 222-222

su 333-333

$

*. 파일을 결합할 때 중간에 특정한 구분자를 넣고자 할 때에는 -d옵션을 사용 한다

$ paste -d* a b

kug*111-111

kang*222-222

su*333-333

$

*. 또 다른 옵션 -s는 연속적인 라인을 1개 라인으로 결합한다. 1개 파일내의 라인이 모두 결합되고 나면
그 다음 파일의 라인들도 계속 결합된다.

$ paste -s a b

kug kang su

111-111 222-222 333-333

$

tr

표준입력에서 문자를 복사하여 표준출력에서 출력하는데, 지정된 대로 문자를 교체 또는 삭제한다.
보통은 소문자를 대문자로 바꾸거나 그 외 텍스트 처리작업을 할 때 주로 사용된다.

$cat c

kildong 111-1111

kang 222-2222

su 333-3333

$tr k A < c

Aug 111-1111

Aang 222-2222

$ tr \[a-z\] \[A-Z\] < c

KUG 111-111

KANG 222-2222

SU 333-3333

$

cat c | tr a-z A-Z

KUG 111-111

KANG 222-2222

SU 333-3333

또 다른 옵션 -d(delete)는 아래와 같이 특정한 칼럼을 제거할 수도 있다.

$ cat c

kug 111-111

kang 222-222

$tr -d [0-9] <c

kug -

kang -

$

파일 검색 명령어

whereis

whereis command(s)
명령 인자로 준 명령을 $PATH로 지정된 경로에서 찾아 전체 경로명을 보여준다.예를 들어
whereis csh이라고 입력하면 다음과 같은 출력이 나온다. csh: /usr/bin/csh/usr/man/man1/csh.1

which

which command(s)

명령어를 입력했을 때 실행되는 파일의 경로명을 보여준다.
예를 들어 which tin이라고 입력하면 /usr/local/bin/tin이라고 출력된다. 만약 alias된 명령이 있다면 alias내용을 보여준다.
만약 ls가 alias되어 있을 때 which ls라고 입력하면 다음과 같이 출력된다.
ls aliased to ls -CF

find

find [path...][expression]

ex) find /tmp /etc -name passwd
find /etc -name pass*
find /etc -name *conf

Man Page. http://www.gentoo.org/doc/en/man-guide.xml <= 여기에 설명이 잘되어 있습니다.
man0p p가 POSIX를 뜻한다. 다른 디렉토리에서도 p로 끝나는 것은 같은 의미이다.
이 디렉토리의 맨페이지는 여러가지 POSIX 헤더 파일의 기능을 설명한다.

man1 일반적인 명령어

man1p POSIX버젼의 명령어를 설명한다. 기본적인 명령어만을 다루기 때문에 man1보다 훨씬 작다.
man2 리눅스 커널 시스템 호출이다.

man3 표준 C 라이브러리 함수를 설명한다.

man4 특별한 장치를 설명한다. 이 장치는 보통 커널에서 생성하는 것이지만,
Xorg-X11도 여기에 장치를 넣는다.

man5 시스템 설정파일을 위한 설명

man6 게임이나 다른 특별한 장난감을 소개한다.

man7 그 외의 여러가지 것들을 설명한다. 캐릭터셋이나 SQL 구문, ISO표준,
정규 표현식 등이 여기 포함된다.

man8 (대체로 root가 실행하는) 관리용 명령어들을 설명한다

man9 원래 커널의 여러 부분의 설명이 들어 있기로 되어 있는 곳이다.

mann 주로 Tcl/Tk에서 사용한다. n은 new를 뜻한다.

'Log > Linux' 카테고리의 다른 글

파일 권한(Permission)  (0) 2011.11.28
계정관리  (0) 2011.11.28
vi 편집기  (0) 2011.11.28
리눅스 사용자 인터페이스 및 명령어  (0) 2011.11.28
vmware 에서 centos 5.x및 fedora9 리눅스 설치방법  (0) 2011.11.28
Posted by logwatch

기본적인 인터페이스 환경 이해.

- GUI (Graphic User Interface)

Xwindow (xwindows를 위한 function key 는 alt+f7)

- text mode

리눅스는 Multi User System 으로 동시 접속이 가능하다.

alt+f1 ~ f6 까지 6개의 가상콘솔을 사용할 수 있다.
(* vmware에서는 ctrl+shift+alt+f1)

- 부팅시 디폴트 user interface를 GUI 와 text mode를 선택 지정할 수 있다.
( /etc/inittab 파일에서 지정한다)

* 계정

보안을 위해 로그인시 패스워드를 요구한다.

기본적으로 세가지 형태의 계정이 존재한다.

1. root - 관리자 계정 - 거의 모든 권한을 행사할 수 있다.

2. system 계정 - 시스템 운영에 사용되며 정상적인 로그인 불가

3. 일반사용자 계정 - 필요에 따라 일반사용자 계정을 만들고 로그인을 허락할 수 있다.

- 시스템 사용에 많은 제약을 받을 수 있는 권한을 가진다.

** 실습하기전에 실습계정을 하나 만든다

(useradd user1

passwd user1))

리눅스 명령어

(* 명령어는 대소문자를 철저히 구분한다)

명령어 형태

프롬프트 명령어 -옵션 인수

ex)

[lee@river lee]$ ls -l a.txt b.txt

명령어 옵션 인수의 기본 구분자는 스페이스 문자이며 다시 옵션과 인수의 구분은 - 문자의 유무에 따라 일반적으로 구분된다.

ls -l ; 여기서 -l 은 옵션ls l ; 여기서 l은 인수

리눅스 명령어는 크게 두 가지로 분류된다.

1. 셀 내장 명령어

*. shell - 명령어 해석기.

msdos 의 내부명령어와 유사.
셀에 포함되어 있는 명령어.
도움말보기는 help 명령어로

ex)

[lee@river lee]$ help cd

cd: cd [-L|-P] [dir]

Change the current directory to DIR.
The variable $HOME is the default DIR. The variable CDPATH defines the search path for
the directory containing DIR. Alternative directory names in CDPATH are separated by a colon (:).
A null directory name is the same as the current directory, i.e. `.'. If DIR begins with a slash (/),
then CDPATH is not used. If the directory is not found, and the shell option `cdable_vars' is set, then try the word as a variable name. If that variable has a value, then cd to the value of that variable. The -P option says to use the physical directory structure instead of following symbolic links; the -L option forces symbolic links to be followed.

[lee@river lee]$

* 똑같은 이름의 명령어가 셀 내장 명령어 및 외부명령어로 각각 존재하는 경우에는 경로명 없이 명령어를 입력하면 셀 내장 명령어가 실행된다.
명령어를 찾는 순서가 셀 내장 명령어가 먼저이다.

2. 외부 명령어

디스크에 존재하는 명령어

리눅스 명령어는 주로 bin 이라는 이름의 디렉토리에 존재한다.

대개의 실행파일 경로는 환경변수 PATH를 출력해보면 알수 있다.

[root@river root]#

echo $PATH

/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin/X11:/usr/X11R6/bin:/root/bin

(PATH 환경변수 변경은 export PATH=경로명으로 재지정 할 수 있으며 로그인 시 자동으로 실행되는 profile 에 저장해

두지 않으면로그아웃 할 때 원래값으로 초기화 된다)

*. 도움말은 man 명령어로 출력해 볼 수 있다.

ex)

root@river root]# man ls

LS(1) FSF LS(1)

NAME

ls - list directory contents

SYNOPSIS ls [OPTION]... [FILE]...DESCRIPTION

List information about the FILEs (the current directory by default).

Sort entries alphabetically if none of -cftuSUX nor --sort. Mandatory arguments to long options are mandatory for short

options too. -a, --all do not hide entries starting with . -A, --almost-all do not list implied . and .. --author

*. PATH

경로는 두 가지가 있다. 절대 경로 및 상대경로.

1. 절대 경로 - 파일 위치를 나타날 때 / 가 기준이 된다.

2. 상대경로 - 파일위치를 나타낼 때 현재디렉토리가 기준이 된다.

. : 현재디렉토리

.. : 부모디렉토리

ex)

/---os

| +---linux

| | +---debian

| | +---redhat

| +---windows

| | +---2000

| | +---xp

tree 구조의 예.

*. 디렉토리 관련 명령어

Is

list, 파일의 리스트를 보여준다. 도스의 dir과 비슷하다.

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

자주 쓰이는 옵션은,

-l 파일에 대한 긴 정보(파일 허가권, 소유자, 그룹, 크기, 날짜)를 준다.

-a “.”로 시작하는 파일은 hidden 파일이다. 이 옵션을 사용하면 볼 수 있다.

-t 가장 최근에 변경된 파일을 최근의 것부터 보여준다.

-F 파일의 특성을 보여준다.

이름 뒤에 디렉토리면 /를 실행파일이면 *, 심블릭 링크된 파일이면 @를 붙여준다.

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

cd (change directory)

현재 작업 디렉토리 변경 명령어

cd . : 현재디렉토리로 이동 (아무런 변화 없음)

cd .. : 부모디렉토리로 이동

cd ../../ : 2단계 상위 디렉토리로 이동

cd : 현재 사용자 홈 디렉토리로 이동(bash shell에서)

cd ~ : 현재 사용자 홈 디렉토리로 이동(bash shell에서)

cd $HOME : 현재 사용자 홈 디렉토리로 이동

cd ~kildong : kildong 사용자의 홈 디렉토리로 이동

위의 그림(그림 2-1)과 같은 디렉토리 구조에서 현재 디렉토리가 linux 라고 가정할 때

xp 디렉토리로 이동하려면

cd /os/windows/xp ; 절대경로

cd ../../windows/xp ; 상대경로

mkdir(make directory)

디렉토리를 만든다.

cp - 파일을 복사한다.

cp file1 file2 cp file(s) directory

[-r] option을 주면 directory도 copy가 가능하다.

file1을 file2로 복사한다.

하나 또는 여러 개의 파일을 directory에 복사한다.

명령어 사용형식은 dos와 유사하나 dos와 달리 타겟은 절대 생략할 수 없다.

ex)

[lee@river lee]$ cp /bin/ls <= 타겟경로가 빠져있다.

cp: missing destination file <= 역시 에러다.더 많은 정보를 보려면 `cp --help' 하라.

[lee@river lee]$ cp /bin/ls . <= 파일을 현재 디렉토리에 복사할 때도 현재 디렉토리 경로를 적어줘야 한다.

mv

move, 파일이나 디렉토리의 위치를 바꾸거나 이름을 바꾼다. 사용법은 다음과 같다.

1.mv [options] oldname newname

2.mv [options] file(s) directory

mkdir( make directories)

mkdir dir(s) => 한 번에 여러 개도 만들 수 있다.

rmdir

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

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

rm

remove, 파일을 제거한다. (디렉토리 삭제시에는 -r 옵션을 반드시 사용해야 한다)

rm [options] file(s)

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

-f (force) 물어보지 않고 강제로 지운다.

-i (interactive) 삭제하기전에 물어 온다.

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

'Log > Linux' 카테고리의 다른 글

파일 권한(Permission)  (0) 2011.11.28
계정관리  (0) 2011.11.28
vi 편집기  (0) 2011.11.28
리눅스 기본 명령어  (0) 2011.11.28
vmware 에서 centos 5.x및 fedora9 리눅스 설치방법  (0) 2011.11.28
Posted by logwatch

centos 5.x 설치

*.centOS 리눅스는 http://www.centos.org 사이트에 들어가서 Download : i386 | x86_64
이렇게 두가지가 링크걸려 있는데 여기서 i386 을 클릭해서 받으면 됩니다.
현재(2010.8.7) centos 5.5 버전이 올려져 있습니다.

centOS-5.5-i386-bin-1to7.iso 파일부터 centOS-5.5-i386-bin-6to7.iso 까지
일곱장을 받아서 설치하면 됩니다.
centos 5.3 이나 5.4 버전을 설치해도 됩니다.

vmware 설정(version 7 - 이보다 낮은버전이라도 설정은 비슷합니다)

리눅스를 설치하기 위한 가상머신 장치는
아래와 같이 만들기로 한다.

------------------------------------------------------------------------------------------------------------------------------------------
메모리 : 512 메가 또는 1GB
디스크 : 10G 1개
랜카드 : 1개 (NAT 타입)
나머지 장치는 전부 디폴트로 설정.
------------------------------------------------------------------------------------------------------------------------------------------

File -> New -> Virtual Machine ->
What type of configuration do you want? : typical 선택

-> Install from : I will install the operation system later 선택

-> Guest operating system : Linux 선택 , version : CentOS 선택
(Other Linux 2.6x kernel 또는 Redhat Enterprise Linux5 를 선택해도 된다)

-> Virtaul machine name 이름은 원하는대로 하면 된다.
Location 은 리눅스가 설치될 디렉토리이다.

-> Network connection : Use network address translation(NAT) 선택

-> Select Disk : Create a new virtual disk 선택, 디스크 용량 10기가 선택,
Allocate all disk space now 는 체크하지 않는것이 디스크를 절약할수 있다.
Split virtual disk into 2GB files 는 체크

-> Specify Disk file : 파일명은 바꿀필요없다. 그냥 Next
-> Finish

그런다음
장치를 최적화 한다.

메모리 크기는 512 메가로 한다.
PC메모리가 4G 이상인 사람은 1GB 로 지정하는것이 좋을것이다.
*. 리눅스에 메모리를 많이 할당하면 상대적으로 윈도우가 쓸수 있는 메모리가
그만큼 줄어들게 된다.

랜카드 장치타입이 NAT 인지 확인해보고 아니라면 타입을 NAT 로 변경한다.

PC 에 플로피 드라이버가 없다면 가상머신 장치목록중에 플로피 드라이버를 제거해준다.
제거안해도 문제는 없지만 부팅할때마다 경고가 표시된다.
장치추가및 제거는 vmware 왼쪽메뉴 Commands 에서
Edit Virtual Machine setting 를 선택 거기에서 원하는 장치를 추가하거나 제거할 수 있다.


가상머신 생성이 완료가 되었으면
씨디롬 장치를 선택 -> Device status : Connect at power on 에 체크되어 있어야한다.
Connection : Use IOS image: 여기에 리눅스 설치이미지를 불러온다.
(씨디파일로 설치할경우에는 1번 씨디를 선택해야 한다)

그리고 가상머신의 전원을 켜서 부팅한다.
centos 씨디로 부팅이 되면

boot : 여기에서 잠시 기다리거나 엔터키를 치면 설치가 진행된다.

---------------------------------------------------------------------------------------------------------------------------------------
CD Found : Skip
------------------------------------------------------------------------------------------------------------------------------------------
Next

------------------------------------------------------------------------------------------------------------------------------------------
언어지원 : Korean
------------------------------------------------------------------------------------------------------------------------------------------
Next

------------------------------------------------------------------------------------------------------------------------------------------
키보드 : U.S 영어
------------------------------------------------------------------------------------------------------------------------------------------
Next

------------------------------------------------------------------------------------------------------------------------------------------
설치시 하드드라이브를 파티션하여야합니다.
.....
=> 사용자 레이아웃 만들기 선택(파티션을 직접 설정하기 위한 메뉴)
------------------------------------------------------------------------------------------------------------------------------------------
Next

------------------------------------------------------------------------------------------------------------------------------------------
드라이버 초기화에 대한 경고 창이 뜨고 초기화 할것인지 물어보면
: 예를 선택.

파티션 생성 (세개를 만든다. - / 파티션, /home 파티션, swap 파티션)

새로 생성 선택 -> 파일시스템 유형 : swap 선택 , 용량 : 가상머신 메모리의 2배 선택
새로생성 선택 -> 파일시스템 유형 : ext3 선택 , 용량 : 500(MB) 선택, 마운트지점: /home 선택
새로생성 선택 -> 마운트지점: / 선택, 파일시스템 유형 : ext3 선택, 용량 : 남아있는 용량 전부할당.
첫번째 파티션으로 함 : 체크.
('/' 파티션은 첫번째 파티션으로 하는게 좋다. 그러나 이것을 체크하지 않더라고
대개는 루트파티션은 첫번째가 될것이다)

*. 만약 남아있는 용량을 전부할당했는데 용량부족에러가 뜨면 남은 용량에서 4메가나 8메가를 빼고 할당한다.
------------------------------------------------------------------------------------------------------------------------------------------
Next(부트로더 설치여부)

------------------------------------------------------------------------------------------------------------------------------------------
Grub 부트로더는 /dev/xxx 에 설치될것입니다. : 체크
------------------------------------------------------------------------------------------------------------------------------------------
Next (네트워크장치 설정)

------------------------------------------------------------------------------------------------------------------------------------------
eth0 장치 선택하고 편집메뉴 선택
여기서 DHCP 체크는 없애고 고정ip 를 할당한다.

Enable IP4 support 체크
Manual configuration 체크

IP 주소: 192.168.xxx.3
Netmask : 255.255.255.0
그리고 ipv6 는 체크를 없앤다.
------------------------------------------------------------------------------------------------------------------------------------------

*. IP 주소는 가상머신의 네트워크 어댑터 타입을 NAT 타입으로 한경우
IP Address는 거기에 있는 주소와 맞춰주면 됩니다.
예를들어서 NAT의 디폴트게이트웨이 주소가 192.168.10.2 라면
IP Address 설정을 192.168.10.3 / 255.255.255.0 이렇게 해주면 됩니다.
Enable IP6 support 는 체크되어 있으면 체크를 없앱니다.

가상머신의 게이트웨이 주소 확인은
가상머신 메뉴중 Edit -> Virtual Network Editor 선택하여 vmnet8 장치를 선택해서
Gateway 주소를 볼수 있습니다. 디폴트로 잡혀지는 Gateway 주소는
192.168.xxx.2 입니다.

호스트명 : 수동호스트명설정 체크 : 영소문자로 마음대로. (스페이스문자는 사용할수없다)
그외설정 :
게이트웨이 : 192.168.xxx.2
1차DNS : 168.126.63.1 또는 192.168.xxx.2 (게이트웨이 주소를 써도 된다)
2차DNS : 설정안해도 된다.

Next
------------------------------------------------------------------------------------------------------------------------------------------
root 암호지정
6글자 이상이어야 한다.
------------------------------------------------------------------------------------------------------------------------------------------
Next

------------------------------------------------------------------------------------------------------------------------------------------
설치할 패키지 선택
Desktop - Gnome 체크
Desktop - KDE 체크
Server 체크
Server -GUI 체크

그리고 밑에 보이는 메뉴중
지금 사용자 설정 체크
------------------------------------------------------------------------------------------------------------------------------------------
Next (세부패키지 선택)

------------------------------------------------------------------------------------------------------------------------------------------
데스크탑 환경 : 모두 체크
응용프로그램 : 그래픽인터넷, 텍스트기반인터넷, 편집기 체크 나머지는 선택
개발용도구 : 자바, 개발용도구, 개발용 라이브러리 체크 나머지는 선택
서버 : News 서버, PostgreSQL 제외하고 나머지는 모두 체크
기반시스템 : Fonts, Hardware Support, Java, Legacy Fonts, Xwindow 시스템, 관리도구, 기본, 시스템도구 체크
가상화: 전부 체크하지 않는다.(설치하지 않는다)
클러스터링 : 전부 체크하지 않는다.
클러스터저장 : 전부 체크하지 않는다.
언어지원 : 한국어지원

이 단계가 마지막입니다.
------------------------------------------------------------------------------------------------------------------------------------------
Next

설치가 시작됩니다.

씨디파일로 설치하는 경우 1번 씨디가 다 설치되면
2번씨디 넣으라고 메세지가 뜨면
vmware 메뉴 오른쪽 하단에 표시되어 있는 씨디롬 장치를 더블클릭하여
2번씨디 이미지 파일을 넣고 Device status 항목부분에
Connectd 와 Connet at Power on 에 체크가 풀려 있으면 둘다 체크하여야
합니다. 그렇지 않으면 씨디장치를 사용할 수 없고 오른쪽 하단에 씨디아이콘이
비활성화된 색상으로 표시됩니다.

설치완료되면 자동 리부팅이 됩니다.
리부팅 되고 나서 몇가지 작업을 더 해주어야 설치가 완전히 완료됩니다.

방화벽,SELinux,Kdump 설정등이 남아있습니다.

------------------------------------------------------------------------------------------------------------------------------------------
방화벽 : 활성화 선택
신뢰하는 서비스 : FTP,SSH 체크
------------------------------------------------------------------------------------------------------------------------------------------
Next

기존 방화벽 설정을 덮어쓴다는 경고창이 뜨면 '예' 선택

------------------------------------------------------------------------------------------------------------------------------------------
SELinux
비활성화 선택
시스템 재부팅 하겠느냐는 경고창이 뜨면 '예' 선택
------------------------------------------------------------------------------------------------------------------------------------------
Next

------------------------------------------------------------------------------------------------------------------------------------------
Kdump 활성화 여부 : 체크하지 않는다.
------------------------------------------------------------------------------------------------------------------------------------------
Next

------------------------------------------------------------------------------------------------------------------------------------------
날짜 및 시간
정확히 설정한다.
------------------------------------------------------------------------------------------------------------------------------------------
Next

------------------------------------------------------------------------------------------------------------------------------------------
사용자 생성

사용자를 만들지 않는다.
사용자 만들것은 권장하는 창이 뜨더라도 그냥 무시.
------------------------------------------------------------------------------------------------------------------------------------------
Next

------------------------------------------------------------------------------------------------------------------------------------------
사운드 카드
- 대부분 문제없이 인식한다.
가운데에 있는 사운트 테스트의 재생버튼으로 확인할 수 있다.
------------------------------------------------------------------------------------------------------------------------------------------
Next

------------------------------------------------------------------------------------------------------------------------------------------
추가씨디 설치여부
없다.
------------------------------------------------------------------------------------------------------------------------------------------

끝이다.
완료 버튼 클릭하면 리부팅이 된다.

*. 나중에 파일시스템을 공부하기 위해서는 디스크가 몇개 더 필요합니다.
그때는 시스템을 종료후 vmware 왼쪽 메뉴에 있는 commands 에서 장치를
추가하면 리눅스에서 바로 사용할 수 있습니다.
랜카드도 추후 필요하면 그렇게 추가하여 사용할 수 있습니다.










=======================================================

fedora 8 / 9 번전 설치 방법


그리고 File => New => Virtual Machine 선택으로 새로 설정한후
설치하면 된다.


fedora 8 / 9 설치

씨디롬 부팅후 아래와 같은 메시지를 볼수 있을것입니다.
Welcome to Fedora 8!
------------------------------------------------------------------------------------------
Install or upgrade an existing system
Install or upgrade an existing system (text mode)
Rescue installed system
Boot from local drive
Memory test
--------------------------------------------------------------------------------------------

이중에서 맨 첫번째 Install or upgrade an existing system 선택

--------------------------------------------------------------------------------------------
Disk Found
To begin testing the media before installation press OK.
Choose Skip to skip the media test and start the installation.
=> Skip
--------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------
What language would you like to use during the installation process?
=>
Korean(한국어) 선택
--------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------
시스템에 사용할 키보드를 선택해 주십시요

=> U.S 영어
--------------------------------------------------------------------------------------------

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

경고 : sda (또는 hda) 장치의 파티션 정보를 읽을 수 없습니다.
새로운 파티션을 생성하기 위해서는 반드시 이 드라이브를 최기화 해야 합니다. 단
초기화로 인해 드라이브 안의 모든 자료는 삭제됩니다.
그래도 이 드라이브를 초기화 하시겠습니까?
=> 예(Y)
(디스크 갯수 만큼 경고가 표시됩니다 전부 예를 선택하면 됩니다)
--------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------
설치시 하드 드라이브를 파티션하셔야 합니다. 대부분 사용자에게 적절한 파티션
구조가 기본으로 선택됩니다. 이 기본 옵션을 사용하시거나 또는 스스로 원하는 방식으로
파티션 하실 수 있습니다.

=> 사용자 레이아웃 만들기

설치에 사용할 드라이브를 지정해 주십시요
- 비활성화 상태가 됨
고급용량설정 : (선택할 필요없습니다)

What drive would you like to boot this installation from ?
- 비활성화 상태가 됨
--------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------
파티션 메뉴가 나오면

장치 목록중
/dev/sda (또는 /dev/hda) : 여기에만 파티션 설정을 합니다.
나머지는 나중에 필요할때 하면 됩니다.

/dev/sda 장치를 선택하고 새로생성 =>
파티션 추가 메뉴
마운트 지점 /
파일시스템 유형 : ext3
할당 가능한 드라이브 : sda 만 체크 합니다.
용량 : 7000 MB
나머지 옵션은 그대로 둡니다.

/dev/sda 장치를 선택하고 새로생성 =>
마운트지점 : 파일시스템 유형이 swap 이면 비활성화 된다.
파일시스템유형 : swap
할당가능한 드라이브 : sda 만 체크합니다.
용량 : 가상머신의 주기억장치와 같은 크기로 합니다.

/dev/sda 장치를 선택하고 새로생성 =>
마운트지점 : /home 을 선택합니다.
파일시스템유형: ext3
용량:나머지 용량을 다 할당합니다. (다 할당했는데 용량초과라는 메세지가 뜨면 남은 용량에서 4메가나 8메가를 남겨두고 할당하면 됩니다)
나머지 옵션은 그래도 둡니다.

/dev/sda 밑에
차례대로 /dev/sda1
/dev/sda2
/dev/sda3 이 설정되어 있는것이 보일것입니다.

/dev/sdb와 /dev/sdc 는 아무것도 할게 없습니다.
나중에 필요할때 그때 파티션 설정해서 쓰면 됩니다.
--------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------
다음버튼 클릭했을때
시스템의 메모리가 부족하기때문에 지금 즉시 스왑공간을 사용해야 합니다.
스왑공간을 사용하시려면 현재 새로운 파티션 정보를 디스크에 기록해야 합니다.
그럭헤 하시겠습니까? => 이 메시지가 보이면 그냥 '예' 를 선택하면 됩니다.
--------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------
Grub 부트로더는 /dev/sda에 설치될것입니다. (여기에 체크되어 있으면 됩니다)
기본부팅은 Fedora /dev/sda1 으로 되어 있을것입니다. ( 여기에 체크되어 있으면 됩니다)
나머지는 그대로.
--------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------
네트워크 장치 (부팅시 활성화에 체크되어 있어야 합니다)
=> 편집 => Enable IP4 support 에 체크되어 있어야 하며
Manual configuration 에 체크
IP 주소는 가상머신의 네트워크 어댑터 타입을 NAT 타입으로 한경우
IP Address는 거기에 있는 주소와 맞춰주면 됩니다.
예를들어서 NAT의 디폴트게이트웨이 주소가 192.168.100.2 라면
IP Address 설정을 192.168.100.3 / 255.255.255.0 이렇게 해주면 됩니다.
Enable IP6 support 는 체크되어 있으면 체크를 없앱니다.

호스트명
수동으로 호스트명설정 : 임의로 지정해서 사용하면 됩니다. (ex. fedora8)

그외설정
게이트웨이 : NAT 에 설정되어 있는 디폴트 게이트웨이 주소를 그대로 적으면 됩니다.
1차DNS : 168.126.63.1
--------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------
Please select the nearest city in your time zone:
Asia/Seoul 을 선택.
--------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------
Root 암호 : 6자이상 아무거나
--------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------
fedora의 초기설치는 일반적인 인터넷 사용에 맞는 소프트웨어 모음을 포함하고 있습니다.
어떤 추가적인 임무가 시스템에서 지원되기를 원하십니까?

이 메뉴가 보이면 설정되어 있는 그대로 두고
아래쪽에 지금사용자 설정 메뉴에 체크.
--------------------------------------------------------------------------------------------

데스크탑환경 : gnome 데스크탑환경, KDE(K 데스크탑 환경)
응용프로그램 : 게임과 오락,공학과 과학, 그래픽 인터넷, 텍스트 기반 인터넷, 편집기
개발용도구 : 개발용도구, 개발용 라이브러리
서버 : DNS 이름서버, FTP 서버, Windows 파일서버, 네트워크 서버, 메일서버, 서버 설정도구
기반시스템 : Fonts, Hardware Support, Java, Legacy Fonts, X윈도우 시스템, 관리도구, 기본, 시스템 도구
언어지원 : 한국어 지원
*. 오른쪽에 있는 패키지들은 설치할때 선택해야 할것입니다.
패키지 선택은 사용자가 원하는대로 하면 되겠지만 위에 선택한 패키지들은
원활한 학습을 위해서 선택하는것이 좋다고 생각합니다.

*. 잘 모르면 전체설치를 하면 됩니다.
--------------------------------------------------------------------------------------------



이제 다 되었습니다. 다음 버튼 클릭하고 설치되는 동안 기다리면 됩니다.
중간에 DVD 로 설치하는경우는 끝까지 설치가 다 되겠지만 CD 로 설치하는경우에는
중간에 씨디 교체하라고 하면 씨디만 교체해 주면 됩니다.


*. 설치방법은 꼭 위에 있는 대로 할 필요는 없으면 서버 사용 용도에 따라서 그리고 사용자 업무 및 취향에 따라서 얼마든지 달라 질수 있습니다.

위에 적혀 있는 설치방법은 가상머신(vmware) 환경하에서 리눅스 서버를 배우기에 적합한 용도라고 생각하면 됩니다.


*. 설치하다가 설치 도중 다운되거나 새로 설치하고자 하는경우에는 가상머신 메뉴중 레이블에서 마우스 오른쪽 버튼 눌러서 보이는 메뉴중 Delete from Disk 메뉴를 선택하면 깨끗하게 삭제됩니다.

*. fedora 8 버전은
ftp://ftp.kaist.ac.kr/fedora/linux/releases/8/Fedora/i386/iso <= 이곳에서 다운 받을수 있습니다.

* fedora 9 버전은
네이버나 daum 사이트의 자료실에서 다운로드 받을 수 있습니다.

*.centOS 리눅스는 http://www.centos.org 사이트에 들어가서 Download : i386 | x86_64
이렇게 두가지가 링크걸려 있는데 여기서 i386 을 클릭해서 받으면 됩니다.
centOS-5.3-i386-bin-1to6.iso 파일부터 centOS-5.3-i386-bin-6to6.iso 까지
여섯장을 받아서 설치하면 됩니다.



설치에 대해서 잘 모르는 사람은 이 문서를 프린터하여 보고 그대로 따라하면 어렵지 않게 설치 할 수 있을겁니다.

몇번 설치해보면 설치하는건 별로 어려운것이 아니라는것을 알게 될겁니다.


* vmware-tool 설치
vmware-tool을 vmware 기능을 향상시킬수 있고 HOST OS 로 이동할때
좀 더 편리하게 마우스 커서를 이동할 수 있다.
1. CentOS가 부팅한다.
2. VMware 메뉴에서 VM->Install VMware tools 클릭합니다.
vmware-tools 가상 시디가 마운트 됩니다. 게스트OS 바탕화면에 보면 CD 이미지가 생성됩니다.
만약, 바탕화면에 CD 이미지가 생성안되면, 게스트OS 내컴퓨터를 클릭하여 CD 디렉토리로 이동화면 마운드됩니다.
3. 터미널창을 연다.
4. 터미널 창에서 df 명령어로 CD 마운트 경로 확인후
CD 명령어로 이동
cd /media/(vmware-tool 이미지 디렉토리 이름)
5. cp vmware*gz /tmp 로 복사
6. /tmp 디렉토리로 이동하여 압축풀로 tar 까지 푼다.
cd /tmp ; gunzip vm* ; tar -xf vm*tar
7. 압축이 풀려 있는 디렉토리로 이동하여 아래 처럼 실행하면 됩니다.
# ./vmware-tool.pl
6. 질문에 대해서는 모두 디폴트로 선택하고 다 완료되면
xwindow 로그아웃을 하고 새로 로그인하면 그때부터 적용된다.

'Log > Linux' 카테고리의 다른 글

파일 권한(Permission)  (0) 2011.11.28
계정관리  (0) 2011.11.28
vi 편집기  (0) 2011.11.28
리눅스 기본 명령어  (0) 2011.11.28
리눅스 사용자 인터페이스 및 명령어  (0) 2011.11.28
Posted by logwatch
이전버튼 1 2 3 4 이전버튼

블로그 이미지
내가 나에게 확인 하는 블로그
logwatch

태그목록

공지사항

Yesterday
Today
Total

달력

 « |  » 2024.11
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

최근에 올라온 글

최근에 달린 댓글

글 보관함