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
- 다운로드 할 경우 대표 사이트
- 패키지 이름 정보를 통해 버전 등을 파악한 후 다운로드
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
- 설치 순서
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
'tip' 카테고리의 다른 글
Version Schema Difinitions 버전정보표기방법 (0) | 2013.10.24 |
---|---|
윈도우7에서 IE8 설치하기 (0) | 2013.10.23 |
Microsoft Dynamics CRM을 통한 효과적인 영업기회 및 고객관리 방안 (0) | 2013.09.30 |
8080 already in use (0) | 2013.08.26 |
객체지향생활체조 (0) | 2013.07.26 |
댓글