본문 바로가기
tip

리눅스 관리 기법

by [김경민]™ ┌(  ̄∇ ̄)┘™ 2013. 9. 30.
728x90


pwd : print working directory

ls : list files

mode

filetype : permission

d   rwx r-x   ---

-   rw-   r--   ---

owner group others


파일접근자 ( root 제외 )

 - 사용자

 - 소유자

 - 기타

d : directory

- : ACSII, EXEC files

l : link

b : block device

c : character device

p : pipe

s : socket

cd : change directory

file command

1.read - cat, more

2.write - cat, tee

* cat file_name : read file

  cat > file : create file

  cat >> file   : add edit file

- 실습 -

 # cat install.log

 # cat > new_file

 Text

 <Ctrl+d>

 # cat new_file

 # cat >> new_file

 Add Text

 <Ctrl+d>

 # cat new_file


 ** cat 명령의 옵션 활용

 

  # cat -n /etc/passwd : -n 출력물 넘버링

  # cat -n /etc/passwd | more

  # cat -n /etc/passwd > user_list_20110918

 

확장자규칙을 만들어 사용

 --


[ 디렉토리 명령 ]

- 디렉토리파일생성

 - mkdir : make directory

  # mkdir dir [dir2 dir3]

  # mkdir -p /root1/dir1/dir2/dir3

 - cp : copy

  # cp source target_dir

  # cp -i source_file targert_dir

    [-f]

 - mv : move

  # move source(file, dir) target_dir

  # move -i source target_dir


[실습]

 # mkdir /root/dir1

 # mkdir -p /root/dir2/subdir

 # alias cp

 # cp install.log dir1

 # cp -r dir2/subdir  /root   or  cp -r dir2/subdir .

 # ls -R dir2

 # alias mv

 # mv subdir dir1

 # mv dir1 backup


- 디렉토리파일삭제

- rmdir

- rm : remove ( file only )

  # rm file_name [ file2 file3 ]

  # rm -r dir_name



[실습]

 # mkdir dir1 dir3 dir4 dir5

 # cp install.log dir1

 # rmdir dir5

 # rmdir dir1 ( error )

 # rm dir1/install.log

 # rmdir dir1

 # rm -r backup


- touch ->        1) 0 kbyte 파일 생성

2) 파일, 디렉토리의 시간의 정보 변경

# touch new_file

# touch exit_file ( 시간정보변경)

# touch -t 월일시간 exit_file ( 사용자지정 시간 변경 )   


[실습]


# cd dir2

# touch file1 file2 file3

# ls -l

# touch file3

# ls -l

# touch -t 09120200 file2

# man touch  

# ls --full



- vi 편집기


[실습]


# LANG=euc

# man man > man.txt

# vi man.txt

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

* 방향이동

h : 커서를 좌측으로

l : 커서를 우측으로

j : 커서를 아래로

k : 커서를 위로

숫자 + G : 숫자에 해당하는 라인으로 커서 이동 ( 숫자 생략시 마지막 줄로 이동 )

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

*편집명령

x : back space

X : delete

숫자+dd : 숫자 만큼의 라인 삭제

숫자+dw : 숫자 만큼의 단어 삭제


R : 라인에 있는 문자열 교체

r : 커서 위치의 한글자 교체

S : 라인의 내용을 교체

s : 커서에 위치한 글자 교체

C : 커서 후반의 내용을 삭제


숫자 + cw : 단어 변경

J : Join 2개의 라인을 병합

라인범위s/검색어/변경어/g

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

1) 라인번호

2) $ : 텍스트 파일의 마지막 라인

3) % : 텍스트 파일 전체 지정


: 1,10s/option/OPTION/g

: 30,$s/option/OPTION/g

: 1,$s/option/OPTION/g

 ==> %s/option/OPTION/g

: %s/the//g ( 삭제 기능 )

: %s/^H//g


: u : last line 에서 동작 된 명령 undo.

*** 특수문자 표현


ctrl+V


: set autoindent - 들여쓰기 기능 설정

: set noautoindent - 들여쓰기 기능 해제



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


확장 명령어


grep 명령


# grep [-option] ‘pattern’ file_name

# command | grep ‘pattern’

[Ex]

# ls -l /etc | grep sysconfig

# ls -l / usr/bin | grep -v z

# ls -l /usr/bin | grep -n in


fgrep - file grep

egrep - extented grep


파일명 중 포함 된 문구 파일 확인

# ls -l /etc | grep xinetd


파일 갯수 확인

# ls -l /etc | tail -n +2 | wc -l  


wc 명령 : word count

-l : line count

-c : file size


[Ex]

# ls -l new_file

# wc -l new_file

# wc -c new_file

# wc -m new_file



file 명령 : file의 자세한 속성 정보 출력

# file file_name


strings 명령 : 텍스트 뷰어 명령으로 접근 불가능한 파일의 내용 정보를 출력,

                      파티션 영역의 침해 내용 확인

# string special_file_name


[실습]

# wc /etc/hosts

# wc -l /etc/hosts

# wc -c /etc/hosts

# wc -m /etc/hosts


# file /bin/ls

# file /etc/passwd


# more /bin/ls

# string /bin/ls


find 명령

- 형식

 find dir_path -option option_arg action


1 block = 512byte

= 1 sector


- 예제

1) find /etc -name hosts

2) find /etc -name ‘host*’

3) find /etc -name ‘*host*’ -type f

4) find /etc -name hosts -ls

5) find /etc -name passwd -exec cp {} /root \;

6) find /etc -name passwd -ok cp {} /root \;


* Meta-character

1. * : 글자 수 상관없이 파일 명 대치

2. ? : 모든 글자 중 한글자 대치

3. [aA] : 두개 이상 글자 중 한개



- permission


* Device ( HDD -> buffer / MEM -> frame buffer -> user )


- Block file : Memory Data block ( 버퍼링 )

- Character file : 디스크 접근 시 바로 데이터 추출 가능 한 형태

Access -> 1 sector = 1 Block = 512 byte = row



 \  rw- r-- rw- : 보안 위험성 - 그룹, 소유자의 허가 없이 파일 변조 가능.



1) 퍼미션의 변경


 chmod [권한] file_name


 i] Symbolic


   chmod u + w newfile

   g - w

   o - r

+ ( 권한추가 ) , - ( 권한삭제 ) 어떠자리에 작업할 것인지 u, g, o를 통해서 표시


 ii] numeric


   chmod [숫자|숫자|숫자] newfile


chmod 777 newfile

-- 각 사용자 자리별로 권한 숫자를 적고, 그 숫자는 0 ~ 7 까지 사용할 수 있다.


[EX]

# mkdir /root/perm

# cd perm

# touch file1 file2 file3

# mkdir dir1 dir2 dir3

# ls -l

# chmod u-w,g-r file1

# chmod 000 dir1

# chmod 4750 file1

# chmod 2750 file2

# chmod 1777 dir2

# history

# su iser01

# id

# ls -l

# cat file1

# exit

# cd dir1

* Sticky Bit directory permission

- 디렉토리에만 설정하는 기능

- 사용자에게 모든 권한을 부여하되 지우는 기능을 제한

 => root 는 모든 파일을 지울 수 있음

 => dir 소유자는 모든 파일을 지울 수 있음

 => 파일 소유자는 자신이 만든 파일을 지울 수 있음

 => 일반 사용자는 다른 사용자의 파일을 지울 수 없음

 ** Web 서버의 자유게시판, 공용 ftp

 ** 퍼미션 변경 시 앞에 한자리 확장하고, ‘1’


# chmod 777 dir1

# cd dir1

# touch file4

# su [UserID]

$ touch file5

$ rm file4

$ exit

# cd ..

# chmod 1777 dir1

# cd dir1

# touch file6

# su [UserID]

$ rm file6

$ rm file5


passwd

# ls -l /etc/shadow

# ls -l /usr/bin/passwd

# su - [userID]

$ passwd ( change password )

Enter password : [현재 사용중인 패스워드]

NEW password : [신규 패스워드 -> shadow 파일 권한 획득]

$ exit

# chmod 755 /usr/bin/passwd

# su - [userID]

$ passwd

Enter password :

<인증오류발생후종료>



# chmod 4755 /usr/bin/passwd

# chmod 2755 file_name

# chmod 6755 file_name


* setID 검출 방법


find / -perm -4000 -type f > setID_v1.0

find / -perm -6000 -type f >> setID_v1.0


cmp setID_V1.0 setID_v1.1




프로세스 및 스케줄


- kernel , process, page, paging ( page in, page out ), physical, logical ( Swap )


# 관찰관련

[ PS ]

[ TOP ]

  PR ( 우선순위 ) , NI ( 우선순위조정 ), VIRT ( 메모리에 올라갈 크기 )


umask


* Process

- 종류 : 프로세스, Zombie, defunct

- 특징 : 작업이 완료되면 자동으로 종료되고 메모리에서 퇴출 됨.


* kill


[EX]

1. 두 개의 명령 터미널

 1) 번 터미널에서 작업 진행

  # sleep 100000

 2) 번 터미널에서 작업 진행

  # ps -ef | grep sleep

  # kill -15 PID

 1) 번 터미널 작업 종료 확인

 

 1) 번 터미널 검색 명령 실행

  # find /

  <ctrl+z>

 2) 번 터미널 프로세스 및 1) 번 터미널 작업 확인

  # ps -ef | grep find

  # kill -l CONT

  # kill -CONT PID


□ Background Process


▶  의미 : 백그라운드 프로세스는 명령줄 사용권한을 사용자에게 넘겨주고 명령줄 후면에서 실행 되는 프로세스


 ▶  관리 : 백그라운드 프로세스 실행 후 관리는 ps 명령 또는 Jobs 명령을 통해 확인하고 kill 명령을 통해 제어한다. 백그라운드 프로세스는 전면으로 변경이 가능하고 현재 진행 중인 전면 프로세스 또한 백그라운드로 이동 시킬 수 있다.


 ▶  예제

# sleep 100000 & : 백그라운드로 프로세스 시작

# jobs [-1] : 진행중인 백그라운드 프로세스 리스트

# kill %2 : 백그라운드 프로세스 제거

# fg %1 : 백그라운드 프로세스 전면으로 이동

# < ctrl + z > : 전면 실행 프로세스 일시 정지

# bg %1 : 정지된 전면 프로세스 백그라운드 이동


▶  실습

# sleep 100000 &

# sleep 10000 &

# jobs

# kill %1

# fg %2

# < ctrl + z >

# bg %2


* 서버용 프로그램 시작 시 전면에 위치할 경우 명령줄 사용 권한을 반납하지 않으므로 다른 작업이 불가능. 따라서 서버 프로세스 구동 시 백그라운드 작업으로 전환시켜 실행 시킨다.


□ 프로세스 스케줄링


▶ 의미 : 프로세스가 동작할 시간을 정하고 해당 시간에 실행 되도록 프로세스 관련 정보를 저장하여 관리하는 것


▶ 관리 : 1회성 관리 ‘at’ 을 이용하고, 반복성 작업인 경우 ‘crontab’ 을 사용한다. 스케줄링 업무에 대한 제한을 위해 con.allow , cron.deny 파일에 사용자 정보 입력을 하면 해당 사용자의 스케줄링 가부를 결정할 수 있다.


▶ 예제

# crontab -l -u [userID] : 현재 설정 된 스케줄링 확인

# crontab -e : 스케줄링 작업 설정

# crontab -r : 스케줄 된 작업들 모두 삭제


▶ 실습


# tty

# crontab -e

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

10 12 25 * * echo  “Sentence” > /dev/pts/1

0,30 13 * * * echo “Sentence” > /dev/pts/1

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

# crontab -l

# crontab -r

# crontab -l ( crontab 삭제확인 )

* “/etc/cron.deny: 파일은 default. ‘cron.allow’ 파일은 스케줄링 금지할 때 사용자가 만들어 사용하는 파일로 ‘cron.deny’ 파일보다 우선 순위가 높다.


□ 네트워크 관리


▶ 의미 : IP, netmask, router, DNS 등 사용자가 서비스를 받기 위한 주소 및 접근 경로를 관리하고 서비스의 정상적인 상태를 유지하는 행동


▶ 관리 :

1) 주소 및 주소 부대 기능에 대한 관리 : ifconfig

2) 서비스 및 유지관리 : service, daemon, chkconfig

* config 파일을 통한 관리 필수




예제


 1) Network Interface Card ( NIC ) 관리 명령

             # ifconfig [-a] [NIC#] : NIC 설정 보기

             # ifconfig NIC# New_IP : 네트워크 주소 변경

             # ifconfig NIC# down : 네트워크 카드 일시 정지 ( type ifup )

             # ifconfig NIC# up : 네트워크 통신 가능 상태로 변경 ( type ifdown )

             # ifconfig NIC# unplumb : NIC 드라이버 언로드

                                        plumb : NIC 드라이버 로드

 

 ▶ 실습

 # ifconfig eth0

 # ping 192.168.xxx.2

 # ctrl+c

 # ifconfig eth0 down

 # ifconfig eth0

 # ping 192.168.xxx.2

 # ifconfig eth0 up

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

 # ifconfig eth0 down

 # ifconfig eth0 172.16.0.100

 # ifconfig eth0 up

 # ifconfig eth0

 # ifconfig eth0 192.168.xxx.10

 # ifconfig eth0

 # netstat -rn     ( Gateway 설정확인 : default 항목 )

 # route add default gw 192.168.xxx.2

 # ping 192.168.xxx.2

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


 ▶ 설정 파일

  1) IP, netmask, Broadcast, HWaddr 등 변경할 때

             /etc/sysconfig/network-scripts/ifcfg-eth#



  2) hostname ( DNS ), Gateway 변경할 때

             /etc/sysconfig/network


 



3) 파일 변경 사항을 적용 할 때

             # service network restart

 

* 구성 정보 파일에 변경 된 내용을 저장할 경우 리부팅 이후에도 구성 내용을 그대로 적용할 수 있음. ( 영구적 변경 설정 )

 ▶ 인터넷 구간 설정

 

   1) DNS 서버 설정 : /etc/resolv.conf

   2) target 시스템이 결정 된 경우 설정 : /etc/hosts

 

서비스 활성화

 

 ▶ telnet 서비스 : 원격에서 서버로 login 하여 명령 권한을 행사할 수 있는 서비스

 

 ▶ 활성화 : “/etc/xinetd.d/*telnet” 파일을 통해 서비스 활성화 가능.

 

  * telnet 서비스가 활성화 가 되었다 하더라도 “root” 사용자에 대한 login 은 허용되지 않음

  * “root” 사용자 login 허용 - /etc/securetty 파일 삭제

 

# mv /etc/securetty /etc/securetty.old

 

 ▶ 예제

 

             # chkconfig --list | grep telnet

             # vi /etc/xinetd.d/kr5-telnet

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

             <생략>

             disable = yes

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

             # service xinetd restart

             # chkconfig -- list | grep telnet

             # telnet localhost

 

 

사용자 관리

 

 ▶ 유형 :

  1) 신규 사용자 추가

  2) 기존 사용자 변경

  3) 사용자 삭제

  4) 그룹 생성

  5) 그룹 삭제

 

 ▶ 사용자 추가 관리

  # useradd [-options args] new_account

     ( adduser )

   * 사용자 추가 명령을 사용할 경우 “/etc/passwd” 파일에 등록

   * 사용자 패스워드를 저장하기 위해 “/etc/shadow” 파일에 등록

   * 관리자가 ‘passwd’ 명령으르 사용하여 패스워드 사용 가능.

             # passwd [-option] userID

 

 ▶ 사용자 변경 관리

  # usermod [-options args] exit_account

   * 존재하는 사용자의 login ID  등을 변경해야 할 경우

   * 명령의 옵션이 useradd 와 동일

 

[passwd]

# etc/shadow

!! -> 계정잠김 :

# passwd -d [userID] : 해제 ( 패스워드 삭제 )

 

* -> 패스워드 사용 금지

 

 ▶ 예제

 

   # more /etc/passwd /etc/shadow

   # ls /home

   # useradd test01

   # more /etc/passwd /etc/shadow

   # ls /home

   # grep test01 /etc/passwd

 

   # usermod -d /home/user02 -m -l user02 test01

 

 

 

 

 ▶ 사용자 그룹 관리

 

   시스템 사용자 관리를 위해 논리적으로 나누는 단위를 사용자 그룹

   주로 부서명을 사용한다.

 

   # groupadd group_name : /etc/group

 

 ▶ 예제 그룹 추가

 

   # groupadd -g 10000 sales

   # useradd -g 10000 sales01

   # passwd sales01

   # grep sales /etc/group /etc/passwd /etc/shadow

   # groupmod -n market sales

   # grep market /etc/group

   # tail -n -5 /etc/group

  

 

□ Disk Device

 

             E-IDE

             SCSI 1,2,3

             FC-AL ( 광모듈 )


 






디스크 관리

 



 ▶ 디스크 파티션 나누기

  - 장착되어 있는 디스크 확인

  - 파티션 나눌 디스크 선택

  - 파티셔닝 정보


 ▶ 예제


  # fdisk -l

  # fdisk /dev/sdb

  # cd /sbin

  # ls mk*

  # mkfs.ext3 /dev/sdb1


  # fdisk -l [disk_name]

  # fdisk disk_name


 ▶ 파일 저장을 위한 구조체 생성 : filesystem


   - 리눅스에서 파일을 저장하기 위한 저장 구조체를 생성

   - mkfs 계열의 명령을 사용하여 다양한 타입의 저장소 생성 가능

    ( 윈도우용, 유닉스 계열 용, 리눅스 )

    * ntfs 경우 커널 드라이버를 별도로 설치


 ▶ 예제 파일 시스템 생성


   # mkfs.ext3 /dev/sda3

  * mkfs 계열 명령은 “/sbin” 디렉토리 안에 위치 .


디스크 관리


1. 신규 디스크 추가

2. 파티션 나누기 : fdisk

3. 파일시스템 생성 : mkfs, mke2fs, mkfs.ext2, mkfs.ext3

4. mount / umount

5. 모니터링 : df, mount




 

  

디스크 작업 예제

 

# dmsg | grep -i scsi

# fdisk -l /dev/sdb

# fdisk /dev/sdb ( 파티션 나누기 )

# mkfs.extN /dev/sdbX

   mkfs -t ext3 /dev/sdbX

 

파일시스템 mount / umount

 

 mount [옵션] [연결할 장치명] [연결할 지점]

 

 의미 : 파일시스템이 구축 된 파티션을 사용하기 위해서 “/” 이하 디렉토리에 연결하는 작업.

 




 [예제]

  # fdisk -l /dev/sdb

  # mkdir /p1 /p2

  # mount /dev/sdb1 /p1

  # mount -t ext2  /dev/sdb2 / p2

  # df -h

  # mount

  * 파티션 연결 후 확인 할 때 : df -h

   1) 1번 필드의 파티션 명, 6번 필드 연결 지점 확인

   2) 파티션의 사이즈 정보

   3) 파티션의 사용량 정보

# df -h  ( 연결되어 있는 경우만 )  

# umount /p2

# df -h

[설정 파일]


“/etc/fstab” 파일에 마운트 할 파티션 정보를 입력하면 부팅 시 자동으로 마운트 할 수 있다.

<형식>

파티션               포인트               FStype               option                 dump                 fsck

/dev/sdb2           /p2                      ext2                    defaults 1                         2

/dev/sdb2           /p2                      ext2                    ro,noexec          1                         2

* option : mount 명령에 사용 될 옵션을 명시

* dump : 백업 가능 여부 ( 0: 백업 안함, 1: 백업 함 )

* fsck : 부팅 중 fsck 검사 여부 ( 0: 검사 안함, 1, 2 : 우선 순위 )

** mount option

 default ( rw, nouser, auto, exec, suid 속성을 모두 가지는 옵션 )

 auto : 부팅 시 자동 마운트

 noauto : 부팅 시 자동 마운트 안함

 exec : 실행 파일이 실행되는 것을 허용

 no exec : 실행 파일이 실행되는 것을 허용 안함

 suid : setuid, setgid 의 사용을 허용하는 옵션

 nosuid : setuid, setgid 의 사용을 거부

 ro ( read only ) : 읽기 전용

 rw ( read write ) : 읽고 쓰기 가능

 nser : 일반 계정 사용자들도 마운트 할 수 있는 옵션

 nouser : root mount 가능

[실습]

 # df -h

 # umount /

 # umount /p1

 # umount /p2

 # mount -r /dev/sdb2 /p2

 # mount -o ro,noexec,nosuid /dev/sdb1 /p1

 # mount

 # df -h

 # vi /etc/fstab

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

/dev/sdb1           /p1        ext3      nosuid,noauto    1           2

/dev/sdb2           /p2        ext3      ro,noexec          1           2

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

# init 6

# df -h

# mount | grep sdb

디스크 공간 점검 및 관리

 # df -h -> 파티션 별 사용 된 용량

 # du -k dir_name

 # du -sk dir_name

파일시스템의 무결성 점검(fsck)

- 검사는 총 5(또는 6) 단계로 진행

- 검사 시 중요한 요소는 inode

- 점검 시 사용자의 접근이 없어야 함파티션은 umount

   * 사용자의 동작을 오류로 간주할 수 있음

 # fsck [-option] [partition]

 [예제]


 # fsck

 # fsck /dev/sdb1

 # umount p2

 # df -h

 # fsck /dev/sdb2

*** 점검 대상 파티션은 반드시 umount 후 점검

*** ‘/’ 파티션은 싱글모드에서 fsck 사용 할 것 ( 유지보수, 긴급점검 )


  

부팅 중 싱글모드 진입

 

 - 로그인 불가능 한 경우

 - 시스템 유지 보수

 

1) Grub 진입 ->

2) Grub 에서 ‘e’ 버튼을 눌러 edit 대상 창으로 ->

3) Booting Module 선택 후 ‘e’ edit : “single” -> ‘b’ 부팅 시작

 

* 작업완료 <ctrl+d>를 입력하면 부팅 단계를 계속 진행.

 

- Grub 패스워드 설정

 

 * grub 명령 실행 -> md5crypt -> 패스워드 복사

 * /etc/grub.conf

  password --md5 <붙여넣기>

 

 ** 적용은 리부팅 후에 적용 됨.


 









□ Linux LVM

 ▶ 배경 : 물리적 디스크의 한계성을 극복

 ▶ 목적

   1) 관리 용이

   2) 디바이스의 여러 조합(크기)을 사용할 수 있음

   3) 확장성이 뛰어남 ( size )

   4) 안전성

   5) 백업 용이

 ▶ LVM 용어

   - PV : Physical Volume ( 디스크 또는 파티션 )

   - VG : Volume Group ( 사용자 관점의 디스크 관리 폴더 )   

   - LV : Logical Volume ( PV를 이용해 만들어진 가상 디스크 )


 ▶ LVM 사용을 준비

   - fdisk 명령을 사용하여 disk 의 파티션을 2G로 분할

   # fdisk /dev/sdb


   n -> p -> 번호 -> cylinder -> Size 입력 -> w

 

   - 파티션 타입 변경

   # fdisk /dev/sdb

   t -> 번호 ( 파티션 번호 ) -> Hex code: 8e -> w

 ▶ LVM 구성

  1. PV 구성

           - pvcreate : PV 구성 명령

           - pvdisplay : PV 구성 확인

           - pvremove : 구성 된 PV 삭제

             # pvcreate /dev/sdb1

             # pvdisplay

             # pvremove /dev/sdb1

  2. VG 구성

             - vgcreate : Volume Group 생성

             - vgdisplay : Volume Group 정보

             - vgremove : Volume Group 삭제

             # vgcreate -s 4m Group_name /dev/sdb1

             # vgdisplay

             # vgremove Group_name

[실습]

 # pvcreate /dev/sdb1

 # pvcreate /dev/sdc1

 # pvdisplay

 # vgcreate -s 8m class /dev/sdb1

 # vgdisplay

  3. LV 구성

             - lvcreate : Logical Volume 생성

             - lvdisplay : Logical Volume 정보

             - lvremove : Logical Volume 삭제

             # lvcreate -L size ( 단위 ) -n lv_name VG_name

             # lvdisplay

             # lvremove /dev/VG_name

 [실습]

   # lvcreate -L 500m -n weekend class

   # lvdisplay

   # lvremove

   # lvdisplay

 ▶ LVM 확장 명령어

   - vgextend : VG 에 디스크 추가

   - lvextend : LV 용량 확장

   - resize2fs : 추가 된 용량 적용

   # vgexted VG_name /dev/sdcX

   # lvextend -L +500m /dev/class/weekend

   # resize2fs -f /dev/class/weekend


  - lvcreate stripe 모드 설정

  # lvcreae -i <disk_개수> -l <PE개수> -n vol_name VG

[실습]

 # pvcreate /dev/sdb1

 # pvcreate /dev/sdc1

 # pvdisplay

 # vgcreate class01 /dev/sdb1

 # lvcreate -L 300m -n week class01

 # lvdisplay

 # mkdir /lv1

 # mkfs.ext3 /dev/class01/week

 # mount /dev/class01/week /lv1

 # df -h

 # vgextend class01 /dev/sdc1

 # lvextend -L +200m /dev/class01/week

 # df -h ( 사용 공간 늘어나지 않음 )

 # resize2fs -f /dev/class01/week

 # df -h

 # umount /lv1

 # lvremove /dev/class01/week

 # lvcreate -i 2 -L 1g -n week2 class01

 # mkfs.ext3 /dev/class01/week2

 # mount /dev/class01/week2 /lv1

 # df -h

 # lvextend -L +500m /dev/class01/week2

 # resize2fs -f /dev/class01/week2

 # df -h

* lv 사용 시 용량을 늘리는 방법

 1) linear mode

  - lvcreate ‘-i’ 옵션을 사용하지 않고 구성할 때

  - 크기를 확장 할 경우 볼륨 디스크의 데이터가 100%가 되기 전에 확장 된 디스크를

    사용하지 않음

  - Concatenation 방식

 2) stripe mode

  - lvcreate ‘-i’ 옵션이 사용 됨

  - 저장 될 데이터가 디스크에 분산적으로 저장 됨

  - 디스크의 I/O 가 좋아 짐

  - Striping 방식

* VG 는 한 시스템에서 99개까지 생성 가능

* PV, LV VG 안에서 최대 255개까지 생성 가능  

시스템 패키지 관리

  ▶ 패키지 유형

     1) 패키지 관리 명령으로 설치하는 패키지

     2) 소스형 패키지

     3) 바법사를 이용한 설치 패키지

     4) 복사형 패키지

  ▶ 관리 유형

    1) 패키지 정보 확인

    2) 신규 설치

    3) 업그레이드

    4) 패키지 삭제   

 # rpm -1 패키지_이름 : 패키지 정보 확인

 # rpm -qa

 # rpm -qdf 파일_이름 : 파일이름을 가지고 패키지 정보 확인

[설치 단계]

 - 설치 할 패키지 존재 여부 확인

 - 설치 할 패키지 매체 확인 : CD-ROM, download

 - 다운로드 할 경우 대표 사이트

    http://rpmfind.et

 - 패키지 이름 정보를 통해 버전 등을 파악한 후 다운로드

    package_name-Program_version-CPU.rpm

 # rpm -ivh Package.rpm --nodeps

 # rpm -Uvh Package.rpm

[제거]

 - 패키지 정보 확인

 - 다른 패키지와 함께 사용되는 영역들 확인

 # rpm -e Package_name

* Sourcer 패키지

  - 사용자 정의형으로 패키지를 조작할 수 있음

  - 명령을 만들기 위한 소스 코드

  - 소스타입 패키지는 gcc 컴파일러를 이용해 명령을 생성

 # gunzip 패키지명

 # tar xvf 패키지명

 # cd dir_pkg

 # ls Makefile ( 없을 경우 )

 # ls configure

 # ./configue

 # make            ( gcc 컴파일러를 이용한 파일 생성 )

 # make install ( 경우에 따라 필요 없음 )

[실습]

 - www.apache.org -> download

 - 다운로드 : 파일 링크 정보

 # wget http://파일링크정보/httpd-2.1.1.tar.gz

 # ls httpd *

 # tar zxvf httpd-2.1.1.tar.gz

 # cd httpd-2.1.1

 # ls Makefile ---> # ls configure

 # ./configure

 # make

 # make install  ->  /usr/local 이하에 디렉토리 생성

 # cd /usr/local/apache2/bin

 # ./apachectl start

 # ps -ef | grep httpd

<윈도우즈 브라우저를 이용해 접속>

 # ./apachectl stop ( web 서비스 종료 )

* 인터넷을 이용한 패키지 설치

 [업데이트 목록 보기]

  # yum list update

 [설치 된 목록 보기]

  # rpm -qa

  # yum list installed

 [gcc 패키지가 설치 확인]

  # rpm -qa | grep gcc

  # yum list installed gcc

 [gcc 패키지 신규 설치]

  # yum install gcc [gcc-c++]

 [gcc 패키지 업데이트]

  # yum update gcc gcc-c++

 [기타 패키지 검색 방법]

  # yum list 패키지명

  # yum list gcc

  # yum list gcc*

 [패키지 삭제]

  # yum remove gcc gcc-c++

압축 및 백업

 ▶ 백업 명령

   아카이브 - 독립 된 여러 개를 하나로

   # tar [option] backup_device backup_contents

    c : create backup

    x : extract backup -> restore

    f : device 지정 ( /dev/stN )

    v : verbose

    z : gz 로 압축 된 파일 압축 해제 ( GNU tar 명령에서만 사용 가능 )

[예제]

 # cd /root

 # mkdir backup work

 # cd work

 # man ls > man.ls

 # man ps > man.ps

 # man mount > man.mount

 # tar cvf /root/backup/work.tar /root/work

 # ls -l backup

 # rm -rf work

 # tar xvf backup/work.tar

 # gzip backup/work.tar

Shell script

  ▶ Script?

   script 는 사용자에게 제공되는 shell 인터페이스를 이용하여 프로그램 기능을 활용한 것

  - 작업의 효율성이 높다.

  - 관리자의 관리 업무 부담을 낮춘다.

  - 타 시스템으로의 이식성이 높다.

  ▶ 기초 스크립트 작성법

   #!/bin/sh       ->          명령 인터페이스

   # time stamp             ->          주석문

   date

  # Number of files

  ls -l /root/work | tail -n +2 | wc -l

  ls -l | tail -n + 2 | wc -l

  echo “End of program”

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


#!/bin/sh


date +%T

echo -n “File counter : “

ls -l /etc | tail -n +2 | wc -l

# Disk usage

echo “Now Disk Usage list“

df -h | grep dev

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

# chmod 755 check.sh

# ./check.sh

Shell

script = batch

- C   vs Bourne vs Korn

 * 변수 : 작업이 수행 될 때 그 값이 자주 변경되는 경우 값을 저장하는 장치

 * 선언 : 변수=

   ** script에 사용되는 변수는 형이 없음. unsigned , 사용 시 모두 char 탑으로 인식.

 * 확인 : echo $변수

 * 빈 공간이 들어가는 형태의 값을 변수에 선언할 때는 따옴표 기호를 사용

    따옴표의 기능은 스페이스의 구별 기능을 문자화 시킨다.

     1) “ “ : 공백 문자를 일반 문자화

     2) ‘ ‘ : 공백 문자, 특수 기능성 문자의 기능을 비활성화

     3) `command` : 다른 명령 속에서 또 다른 명령을 실행시켜 그 결과를 이용함.


[실습]

 # num1=3

 # num2=5

 # num3=7

 # echo $num1 $num2 $num3

 # string1=Linux is more fun (Error!)

 # string2=”Linux is more fun”

 # echo $string1 $string2

 # string3=”Linux is best $num1”

 # string4=’Linux is best $num1’

 # file1=`ls`

* 특수한 변수

$? : Exit status code ( 0 : 성공, 0 이외의 값 : 실패 )

$1~$9 : Postitional parameter ( argument 받기 )

$# : argument 개수

$* : 명령줄에 사용되는 모든 내용 받기

[예제]

# grep ‘root’ /etc/passwd

# echo $?

# grep ‘root’ /etc/password

# echo $?

# grep ‘ROOT’ /etc/passwd

# echo $?

* Interractive Script

 - 선언 : read 변수

 - Script 에서 사용 될 경우 사용자에게 정보를 주기 위한 프롬프트를 제작해야 함.

[예제]

# vi filecounter.sh

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

#!/bin/sh

echo “*****Number of files check script*****”

echo “Enter directory name : “

read dir

ls -l $dir | tail -n +2 | wc -l

echo “End of script”

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

#chmod 755 filecounter.sh

#./filecounter.sh

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

#!/bin/sh

# script name : filecount.sh

# version : 0.5A

echo -n “Enter directory name[ex:/usrbin] : “

read dir

count=’ls -l $dir | tail -n +2 | wc -l’

echo “---------------------------------------------------------------”

echo “Number of files in $dir : $count”

echo “---------------------------------------------------------------”

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


#chmod 755 filecounter.sh

#./filecounter.sh

* 숫자값 변수의 계산

 - Shell 에서 사용되는 변수는 문자 값으로 저장 되므로 연산이 불가능.

 - ‘expr’ 명령을 차용하여 강제로 계산함.

 - 정수형 계산만 가능

[예제]

 # num1=5

 # num2=2

 # num3=$num1+$num2

 # echo $num3

 # num3=”$num1 + $num2”

 # echo $num3

 # num3=`expr $num1 + $num2`

 # echo $num3

* Script 에 자주 사용되는 명령

 - sed 명령 : Editor 형태의 포맷을 지원

 - awk 명령 : Field 로 데이터 처리를 지원

 ** sed 명령 사용법

   1) sed [option] ‘/search word/cmd’ file_name

   2) sed [option] ‘line_num/search word/cmd’ file_name

   3) sed [option] ‘cmd/search/change/’ file_name

 *** 출력되는 명령의 일부분을 제거하고 출력할 때 주로 사용 됨.

[예제]

 # df -h | sed ‘s/%//’

 ** awk 명령

  - 사용방법

   1) awk ‘pattern’ file_name ( grep 명령 )

   2) awk ‘{ action }’ file_name

   3) awk ‘/pattern/{action}’ file_name

   ☆ 조건문, 순환문 등의 C언어 문법 적용이 가능 -> Action 처리

  <action>

   1> ‘{ }’ 안에 정의한다.

   2> action 으로 사용할 수 있는 것 : C 문법, print

   3> Field 구별 : $1, $2, $3, …

   4> Field 구별 기호 판독 : space , tap , Enter

  [예제]

  # df -h | awk ‘{ print $1 }’

  # df -h | awk ‘/dev/{ print $5 }’

  # df -h | awk ‘{ if ( $5 > 40 ) print $5 }’

[파티션 사용률 감시]


 # vi partition.sh

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

#!/bin/sh

echo “Partition Usage Monitor”

echo

df -h | sed ‘s/%//’ | awk ‘/sda/{ if ( $5 > 30 ) print ”disk full”, $5”%” }’

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

df -h | tail -n +2 | sed ‘s/%//’ > /temp/partition.info.tmp

warn=`awk ‘/sda/{ if ($5 > 30) print “warning”, $1, “:”, $5”%”}’ /tmp/partition.info.tmp`

echo “ [5;33m $warn [0m”

rm /tmp/partition.info.tmp

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

 # chmod 755 partition.sh

 # ./partition.sh

* 조건문

 1) if [ 조건문 ]

     then


             statement

     fi

 2) if [ 조건문 ]

     then

statement

     else

statement

     fi

3) if [ 조건문 ]                             case $변수 in

    then                                       case1) statement ;;

             statement                          case2) statement ;;

    elif [ 조건문 ]                       *) satement ;;

    then                                                   esac

             statement

    fi

[예제]

 # vi condition.sh

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

#!/bin/sh

echo -n “Enter partition name[ex: sda]: “

read partition

if [ “$partition” != “” ]

then

   df -h | grep $partition

else

 echo “Please input some partition name”

fi

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

# chmod 755 condition.sh

# ./condition.sh

# vi usercheck.sh

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

#!/bin/sh

echo -n “Enter new user name: “

read user

grep “$user” /etc/passwd

if [ $? -ne 0 ]

then

  useradd $user

  check=`grep $user /etc/passwd`

  echo “$check - check complete”

else

  echo “$user already exist. Please another name.”

fi

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

# chmod 755 usercheck.sh

# ./usercheck.sh

# file xinetd

# vi case.sh

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

#!/bin/sh

if [ $# -ne 1 ]

then

  echo “usage : case.sh [start|stop]”

  exit 1

fi

action=$1

case “$action” in

  “start”) echo “Program start”

  ;;

  “stop”) echo “Now program stop”

  ;;

  *) echo “Only use start or stop. try again”

  ;;

esac

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

# chmod 755 case.sh

# ./case.sh

  APM setting

  - 다운로드 프로그램

   WEB server : httpd-2.0.54.tar.gz

   MySQL server : mysql-4.1.14.tar.gz

   PHP module : php-5.5.x.tar.gz

  - 사이트

   www.apache.org   www.mysql.org   www.php.net

   -> ftp.superuser.co.kr

  - 설치 순서

   MySQL 설치 -> DB active -> Apache 설치 -> PHP 설치

  - MySQL 설치

# wget ftp://ftp.superuser.co.kr/mysql/mysql-4.1.12.tar.gz

# rpm -qa | grep mysql

# rpm -e mysql-server-xxxx --nodeps

# tar zxvf mysql-4.1.14.tar.gz

# cd mysql-4.1.14

# ./configure --with-charset=euckr

# make

# make install

# grep mysql /etc/passwd

# cd /usr/local/bin

# ./mysql_install_db --user=mysql

# chown mysql.mysql -R /usr/local/var

# ./mysqld_safe --user=mysql&

# ./mysqladmin -u root password ‘새로운 패스워드'

-> 소켓 에러 시 참고

:http://web.dicnote.com/bbs/board.php?bo_table=web_tip&wr_id=66&page=3

  - Apache WEB 서버 설치

# wget ftp://ftp.superuser.co.kr/apache/httpd-2.0.54.tar.gz

# tar zxvf httpd-2.0.54.tar.gz

# cd httpd-2.0.54

# ./configure --prefix=/usr/local/apache --enable-shared=max --enable-rule=SHARED_CORE --enable-module=most

# make

# make install

http://kr2.php.net/get/php-5.3.8.tar.gz/from/kr.php.net/mirror

  - PHP 설치

    # tar zxvf php-5.3.x.tar.gz

    # cd php-5.3.x

    # ./configure --prefix=/usr/local/php --with-mysql --with-config-file-path=/usr/local/apache/conf --with-apxs2=/usr/local/apache/bin/apxs --with-zlib-dir --with-gd --enable-gd-native-ttf

    # make

    # make test

    # make install

  - httpd.conf 설정

    LoadModule  php5_module  modules/libphp5.so

    AddType application/x-httpd-php  .html  .htm  .php  .inc

    AddType application/x-httpd-php-source  .phps

  - test 페이지

    #  cd  /usr/local/apache/htdocs ; vi  test.php

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

     <?

             phpinfo();

     ?>

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

    # cd /usr/local/apache/bin

    # ./apachectl start

- httpd 를 이용한 정보 확인

  # /usr/local/apache/bin/httpd -l : 모듈정보

  # /usr/local/apache/bin/httpd -L : 모듈정보자세히보기

- WEB 서버 상태 정보 보기

  # httpd.conf 파일의 server-status 영역의 주석문 제거

  # WEB 페이지의 URL : http://server주소/server-status


 

** 네트워크 트러블 슈팅

 

 - 네트워크 케이블 체크

 

 - 네트워크 체크

 # ifconfig  eth# : up 키워드 유무, 올바른 IP 주소 사용 여부

 

 - 외부망 접속 체크

 # netstat -rn : UG 키워드 및 Gateway IP 확인

 

 - 재부팅 후 네트워크 장애: off -> on 네트워크 세팅 사라짐

  # cd /etc/sysconfig/network-scripts

  # more ifcfg-eth# 파일 확인

 

 - 네트워크 특정 서비스 안될 때 : iptables 확인

  # chkconfig iptables --list

  # service iptables stop

 

** chkconfig 명령의 활용

 

  - 서비스 리스트 확인

   #  chkconfig --list

   # chkconfig service_name --list

 

  - 서비스 레벨 별 on/off

   # chkconfig --level [레벨] service_name [on/off]

   # service service_name restart

 

[예제]

  # chkconfig iptable --list

  # chkconfig -h

  # chkconfig --level 2 iptables off

  # chkconfig iptables --list

 

 

- httpd.conf


 



 

+ ServerRoot

+ mpm_netware

- Timeout

- KeepAliveRequests

- KeepAliveTimeout

+ prefork

- StartServers

- StartServers

- MinSpareServers : 접속자가 많은 경우 수치 높게

- MaxSpareServers : 접속자가 많은 경우 수치 높게

- MaxClients

+ worker

- ThreadsPerChild

- MaxRequestsPerChild ( 0 : 무제한 )

+ Listen

+ User

+ Group

+ ServerAdmin

+ DocumentRoot

+ DirectoryIndex

+ AccessFileName

+ AddIcon

+ AddLangage

+ AddCharset

+ Location / server-staus

+ LoadModule

 

 

 






728x90

댓글