연재 강좌

CentOS 7 CentOS 기본 강좌

2016.11.10 13:48

gooddew 조회:7065

(1) 종료와 재부팅 / 가상콘솔 / 런레벨


① 시스템 종료 및 재부팅 명령어


# shutdown -h now    // 시스템 종료 
# shutdown -h 0        // 시스템 종료 
# poweroff                // 시스템 종료 
# halt -p                   // 시스템 종료 
# telinit 0                  // 시스템 종료

# shutdown -h 10      // 10분 후에 종료됨

# shutdown -h 22:10  // 22시 10분 후에 종료됨

# reboot                   // 재부팅

# shutdown -r 10       // 10분 후에 재부팅됨

# shutdown -r 22:10   // 22시 10분 후에 재부팅됨

# shutdown -k 10       // 가짜로 안내 메일 보내기 실제 작동은 하지 않음

# shutdown -c           // 예약한 종료 및 재부팅 작업 취소





② 가상콘솔


실제는 하나의 모니터가 있지만 여러개의 모니터가 있는것 같은 기능, 총 6개까지 가능함

기본 출력 화면에서 Ctrl + Alt + F2 키 누르면 새로운 출력창이 열림

명령로 가능함


# chvt 가상콘솔번호(1~6)

# chvt 2  // 두번째 가상콘솔

# chvt 1  // 첫번째 가상콘솔




③ 런레벨 

02.jpg


* 리눅스는 런레벨이 있습니다. 런레벨이란 부팅모드라 이해 하시면 됩니다.

   레벨은 총 0 ~ 6 까지 있습니다.


0 : poweroff 종료모드

1 : rescure 시스템 복구 모드 , 단일 사용자 모드

2 : multiuser 사용안함

3 : multiuser 텍스트 모드, 다중사용모드

4 : multiuser 사용안함

5 : graphical 그래픽 모드, 다중사용자모드

6 : reboot



* 현재 런레벨 확인하기


06.jpg
ls -l /etc/systemd/system/default.target 


/etc/systemd/system/default.target  파일이 /lib/systemd/system/multi-user.tatget 로 링크가 되어 있네요


그렇다면 부팅은 TEXT 모드로 부팅이 된다는것입니다.


만약에 graphical-uesr.target 이라면 그래픽 모드로 부팅이 됩니다. 근데 x-windows 설치가 안되 있다면


graphical-uesr.target 가 설정을 했을때 정상 부팅이 되지 않습니다.


 



* 런레벨 링크 파일 위치


07.jpg


# ls -l /lib/systemd/system/runlevel*.target   →  런레벨 관련 링크 파일입니다.



* 런레벨3 으로 변경하기
# ln -sf /lib/systemd/system/multiuser.target /etc/systemd/system/default.target  


* 런레벨5 로 변경하기
# ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target
 




(2) 자동완성 및 히스토리


① 자동완성(Tab)

자동완성이란 파일의 일부만 입력한후에 Tab키를 눌러 나머지 파일명을 자동으로 완성하는 기능

빠른 입력과 동시에 파일명이나 디렉토리명을 틀리지 않고 정확하게 입력이 가능합니다.


② 도스키 : 이전에 입력한 명령어를 방향키 상/하를 눌러서 다시 나타나게하는 기능


③ history : 기존에 사용했던 명령어 리스트를 볼수 있음


# history


08.jpg



# history -c  // -c 옵션을 넣어서 명령어 리스트를 초기화


09.png


 



(3) vi 에디터


03.png

① vi 편집기

vi는 명령모드와 편집모드가 존재하며 모드전환간에 키를 이용해서 전환을 먼저 하고 작업을 진행합니다.

vi를 실행하게 되면 바로 편집모드가 아닌 명령 모드 상태이기 때문에 바로 편집이 안됩니다.

편집모드에서 바로 저장할수는 없고 라인명령모드에서 편집모드로 바로 갈수 없습니다.

vi 편집에서 행번호를 넣으려면 :set number 엔터


i키 : 편집모드 (파일을 편집할때 사용하는 모드)
esc키 : 명령모드 (편집모드 또는 라인저장모드로 선택)
:키 : 라인명령모드 (파일을 저장이나 수정취소를 할경우)
 



② vi 편집기 사용법 요약


* 새파일 작성하기

# vi 파일명 --> i키(편집모드로 이동) --> esc키(명령모드로 이동) --> :wq(저장명령)


* 기존파일 수정하기

# vi 파일명 -->  i키(편집모드로 이동) --> esc키(명령모드로 이동) --> :wq(저장명령)


* 파일을 수정후 저장 안하고 종료

# vi 파일명 -->  i키(편집모드로 이동) --> esc키(명령모드로 이동) --> :q!(강제종료, 저장안함 명령)


* vi 편집중에 비정상 종료시 대처 방법

리눅스에서는 파일명 앞에 . 이 있으면 숨김파일입니다.

편집하는 곳의 경로에서 # ls -al 명령어로 보면 ".편집했던파일명.swp" 라는 .으로 시작하는 숨김파일이 존재합니다.

이 파일을 삭제하면 됩니다.





(4) 마운트


73.png


물리적인 장치와 특정한(디렉토리) 에 연결 시켜주는 과정

마운트를 하려면 폴더 생성하고 마운트를 시키면 됩니다.


* 마운트할 폴더 생성

# mkdir /mnt/cdrom


* 마운트

# mkdir /dev/cdrom /mnt/cdrom


* 리마운트 : 장치에 설정에 변경 할겨우

# mount -o remount,ro /dev/sdc1 /mnt/usb  ( usb 디스크를 읽기전용으로 다시 마운트 함 )


* 마운트 해제 : 장치를 디렉토리에서 분리함. 마운트가 해제가 되도 기존의 자료는 유지되며,

다시 마운트 하면 재사용이 가능함 

# umount /dev/cdrom

   




(5) 기본 명령어


① 파일이나 폴더 목록 보기

# ls


# ls /etc      // 특정 경로를 추가하면 그 폴더 목록을 볼수 있음

# ls -a         // 숨김파일도 보기

# ls -l          //  자세히 보기

# ls *.conf    // 확장명이 conf 모든파일

# ls -al         // 옵션을 두개이상 같이 사용 가능함



② 디렉토리 이동

# cd  

         

# cd  .                       // 현재폴더

# cd  ..                     // 상위폴더  

# cd /etc/sysconfig   // 절대 경로 이동 

# cd ../../etc/           // 상대 경로 이동

# cd                         // 현재 계정의 홈디렉토리로 이동

# cd ~test                 // test 계정의 홈디렉토리로 이동



③ 현재 경로확인

# pwd



④ 화면 클리어

# clear



⑤ 용량이 0 인 파일 생성

# touch 파일명


 

⑥ 파일 및 폴더 삭제

# rm


# rm -f 파일명    // 삭제전에 물어보지 않고 삭제

# rm -rf  폴더     // 폴더가 여러개 있을때 물보지 않고 강제 삭제할 경우 -rf 추가

# rmdir 폴더       // 폴더안에 파일또는 폴더가 존재하면 삭제 안됨



⑦ 파일 및 폴더 복사

# cp


# cp 파일1 파일2    // 파일 복사

# cp -r 폴더1 폴더2    //  폴더 복사

# cp -rf 파일1 파일2    // 중복되었을때 덮어쓸건지 물으는데 모두 덮어 쓸경우 사용




⑧ 파일 및 폴더 이동 또는 이름 변경

# mv


# mv 파일1 파일2             // 파일 이름 변경, 폴더 이름 변경도 가능

# mv 파일1 /tmp/파일1     // 파일을 다른 폴더로 이동, 폴더도 동일하게 적용



⑨ 디렉토리 만들기

# mkdir


# mkdir 폴더

# mkdir -p 폴더1/폴더2/폴더3       // -p 옵션, 여러개 폴더는 한번에 생성

 



⑩ 텍스트 파일을 화면에 출력


# cat 파일명      // 전체파일 출력

# head  파일명  // 파일 내용중 상단 10줄만 출력

# tail 파일명      // 파일 내용중 하단 10줄만 출력

# tail -5 파일명      // 파일 내용중 하단 5줄만 출력

# more 파일명   // 전체파일 페이지 단위, 다음페이지 : 스페이스바키 , 이전페이지: b   

# less 파일명    // more 명령어와 동일

# file 파일명      // 파일정보 확인               




⑪ 명령어 도움말  

# man 명령어


ls 명령어의 사용법을 알고 싶다면

# man ls  하게되면 ls 명령어의 사용법이 출력 됩니다.





⑫ 파이프 (pipo)

* 두개의 프로그램을 연결해 주는 연결 통로의 의미

* | 문자를 사용함

 예) # ls -al | more




⑬ 필터 (filter)

* 필요한것만 걸러주는 명령어

* grep , tail, wc, sort , grep , awk , sed 등

* 주로 파이프와 같이 사용

 예) ps -ef | grep ssh                   //  ssh 글자가 포함된 서비스 출력

 예) rpm -qa | grep bind               //  bind 글자가 포함된 설치된 패키지 출력




⑭ 리다이렉션 ( redirection )

* 표준 입출력 방향을 바꿔줌

* ">" 또는 ">>" 사용함

> : 동일한 파일명이 존재하면 기존 파일 삭제후 새로 파일 생성

>>: 기존 파일이 존재하지 않으면 새로생성, 만약 동일한 파일명 있을 경우 그 파일 내용 이후에 추가로 삽입함

 예) ls /etc/*.conf > conf.txt              // ls 출력  명령어는 파일로 출력함 

 예) sort < list.txt > new_list.txt          // list.txt 파일의 내용을 줄단위로 정렬해서 new_list.txt 라는 새로운 파일을 생성함





(6) 사용자와 그릅 관리


* 계정을 생성은 우선은 그릅을 먼저 생성하고 그 다음에 계정을 그릅 포함 시켜서 계정을 생성하는것이 바람직하니다. 


① 사용자 정보 파일 /etc/passwd

- passwd 저장형식

→ 사용자이름 : 비밉번호 : 사용자아이디 : 그릅의아이디 : 전체이름(생략가능) : 홈데렉토리 : 기본셀


② 그릅 정보 파일 /etc/group

- group 저장 형식

→ 그릅이름 : 비밀번호 : 그릅아이디


③ 비밀번호 관리 파일 /etc/shadow

* 비밀번호를 같아도 shadow 안에 비밀번로 항목은 모두 다름

* root 관리자는 타 계정의 비밀번호 변경은 가능하지만 비밀번호를 알수는 없음


④ 사용자 계정 생성

# useradd 사용자id                // 그릅이 사용자 계정과 동일하게 생성됨

# useradd -g Home centos    // Home 그릅 소속의 centos 라는 계정을 생성함


⑤ 사용자 비밀번호 설정 및 수정

# passwd 사용자id



⑥ 사용자 속성 변경

# usermod  -g root  사용자id


 

⑦ 사용자 삭제

# userdel  사용자id        // 사용자의 홈디렉토리는 삭제 안됨

# userdel  -r 사용자id     // 홈디렉토리 까지 삭제



⑧ 암호를 주기적으로 변경 하도록 설정

# chage -m 30 userid    (주기적 변경 및 30 이전 암호 변경 불가)



⑨ 현재 사용자가 속한그릅을 보여줌

# groups



⑩ 새로운 그릅 생성

# groupadd Home        // Home 이라는 그릅 생성



⑪ 그릅삭제

# groupdel Home // Home 그룹삭제



(7) 파일과 디렉토리의 소유권과 허가권


01.png


① 파일(폴더) 정보


* 형식  

- 파일 타입(유형) : 파일 허가권 : 파일 링크수 : 파일 소유자 : 파일 그릅 : 용량 : 마지막변경날짜,시간 : 파일이름 



* 파일 타입(유형) :

일반파일 : -

디렉토리 d

링크파일 l


* 파일 허가권 : rw-,  r--,  r-- 3개씩 끊어 읽음 ( r은 read, w는 write , x 는 execute 의 약자 )     

첫번째 "rw-" 은 소유자(user)의 파일 접근 권한

두번째 "r--" 은 그릅(group)의 파일접근권한

세번째 "r--" 은 그외의 사용자(other)의 파일 접근권한 

문자(ugo) 및 숫자(0~7)로도 표시 가능


* 링크수 : 파일이 링크를 만든 갯수

* 파일 소유자: 파일 만든 계정

* 파일 그릅 : 파일만든 계정의 동일한 그릅

* 용량 : 파일 용량

* 파일 이름



* file.txt 에 대한 설명은

- : 일반파일

rw-r--r-- : 사용자 읽기,쓰기 가능, 실행안됨. 그릅 읽기가능 ,쓰기,실행안됨. 그외사용자 일기가능, 쓰기,실행 안됨 

1 : 파일 링크수 1개

root : 파일 소유자 root

root : 파일 그릅 root

0 : 용량 0 byte

11월 13일 03:25 : 11월 13일 3시 25분 마지막 수정

file.txt 파일명



② 파일(폴더)의 권한 수정하기


# chmod 755 file.txt   // 파일 권한을 755로 변경



* 숫자 허가권 옵션


r = 4 , w =2 , x = 1 이며 합계로 계산

rw-  => 4 + 2 => 6

r--  => 4 => 4

r-x  => 4 + 1 => 5

--x  => 1 => 1


file.txt 에 대한 권한은

rw-r--r-- => 644 



* 문자 허가권 옵션


user = u ,   group = g  ,  other = o


# chmod u+x file.txt        // 소유자(u) 실행(x) 권한 추가 

# chmod ugo-x file.txt    // 소유자(u) 그릅(g) 그외사용자(o)실행(x) 권한 삭제 

# chmod o+rw file.txt      // 그외사용자(o) 읽기(r),쓰기(w) 권한 추가 




③ 파일의 소유권 변경


# chown centos  file.txt             // 소유자를 centos로 변경, root 만 사용 가능

# chgrp centos  file.txt              // 그릅을 centos로 변경

# chown centos.centos  file.txt  // 소유자와 그릅을 동시에 변경. 사용자.그릅 형식으로 . 사이에 사용자를 centos로 그릅을 centos 변경함 


파일 소유주라고 하더라도 파일 허가권이 없으면 읽고 쓰고 실행이 안됨




(8) 링크


04.png

① 링크 : 링크는 하드링크 심볼릭 링크로 두가지가 있습니다.


* 하드 링크 : 

하드링크는 그냥 복제본 이라고 생각하시면 됩니다. 원본 파일과 똑같습니다.

하드에 있는 실제 파일을 거점으로 똑같은 복제본이 만들어 진겁니다. 동일한 inode를 공유하기 때문에

원본을 수정하면 하드링크도 수정이되고, 하드링크를 수정하면 원본도 수정됩니다.

그리고, 원본파일이 지워지거나 삭제하거나 하더라도 하드링크 파일은 아무런 관련을 받지 않습니다.

하지만 하드링크는 원본파일과 용량이 같습니다. 하지만 그렇다고 해서 , 하드링크와 원본 갯수가 합쳐서 2개라고 해서

용량이 2배가 되는것은 아닙니다. Inode 를 공유하기 때문에 용량은 그대로 이고, 그냥 표시해주는 값일 뿐입니다.

명령어 # ln 윈본파일 하드링크파일

        


* 심볼릭 링크 :

Windows 바로가기 아이콘과 비슷합니다.

새로운 inode 생성

긴 디렉토리명 짭게 해서 사용 하면  유용함
원본 자체 포인터 역할 뿐이므로, 원본을 삭제,수정 및 이동시키면 정상 사용 못함


* 명령어 # ln -s 윈본파일 심볼릭 링크파일

* 명령어 # ln -sf 윈본파일 심볼릭 링크파일    // 기존 링크파일 있을때 강제로 덮어 씀게됨




(9) 프로그램 설치 


① RPM (RedHat Package Manager)


윈도우 setup.exe 와 비슷한 설치파일이고, 확장명은 rpm 이며, 이를 패키지라 불름


13.jpg


* rpm 파일 형식 : 패키지 이름-버전-릴리즈번호.os버전.아키텍쳐.rpm


- 패키지이름 : curl → 패키지(프로그램) 이름

- 버전 : 7.27.0 → 대개 3자리수로 구성되며, 주버전.부버전.패치버전

- 릴리즈 번호 : 25 → 문제점을 개선할때마다 붙여지는 버전

- OS 버전 : el7.centos → Centos 에서 배포할경우 붙여짐

- 아키텍처 : x86_64 → 64비트 cpu 를 의미



* 아키텍처 종류

- x86_64 : 64비트

- i386 ~ i686 : 32비트

- src : 소스

- noarch : 모든 CPU 가능




* rpm 설치

# rpm -Uvh 패키지이름.rpm    

옵션 설명

- U : 대문자이며, 패키지 설치 및 업그레이드

- v :  설치과정 출력

- h : 설치과정을 # 으로 표시



* 설치된 rpm 삭제

# rpm -e 패키지이름   

삭제할때 옵션인 패키지 이름은 rpm 형식 전체는 입력하는것이 아니라 패키지 이름만 입력

위 그림의 예시에서 보면 # rpm -e curl 만 입력하면 됨



* 이미 설치된 패키지의 질의

 

# rpm -qa 패키지이름     //  패키지가 설치되었는지 확인

# rpm -qa | grep "패키지이름일부"   //  패키지 이름을 정확히 모르고 패키지 이름 일부만 알 경우 사용.

                                                   // 검색한 패키지 이름이 포한된 모든 패키지 목록 출력



15.jpg


* 설치가 되어 설치된 패키지 정보가 나오고 설치가 안되있으면 아무 메세지도 안나옵니다.


# rpm -qi 패키지이름     // 패키지가 상세한 정보 확인

# rpm -qf 파일절대경로     // 파일이 어느 패키지에 포함된 것인지 확인



* 아직 설치되지 않은 패키지에 대한 질의

# rpm -qlp 패키지파일이름       //    패키지 파일에 어떤 파일이 포함되어 있는지 확인

# rpm -qip 패키지파일이름       //    패키지 파일의 상세정보




* RPM 의 단점

-의존성 문제 : A 패키지가 설치되기 위해서 B 패키지가 필요한 경우 RPM 으로 설치시 문제 생길수 있음


- 이를 해결하기 위해서 YUM 등장함



② 편리한 패키지 설치 YUM

21.png


* YUM (Yellowdog Udater Modified ) 개념

rpm 명령의 패키지 의존성 문제를 완전하게 해결함

인터넷을 통하여 필요한 파일을 저장소에서 자동으로 모두 다운로드 해서 설치하는 방식

저장소 url 설정파일 위치는 /etc/yum.repos.d/디렉토리 


* YUM 의 기본적인 사용법

기본설치

# yum install 패키지이름

주로 " # yum -y install 패키지 이름 " 으로 사용

옵션 -y 사용자의 설치는 모두 yes 로 간주하고 설치는 진행한다는 의미. 자동 설치됨


10.jpg


* 인터넷이 아닌 로컬 컴퓨터에 있는 rpm 설치할 경우도 가능


# yum localinstall  rpm파일이름.rpm 

# rpm -Uvh rpm파일이름.rpm 설치가 안되면 # yum localinstall  rpm파일이름.rpm 하면 설치가 가능함


- 설치 원리는 "rpm파일이름"은 단독으로 설치되는 파일이 아니고 의존성 파일이 필요한데

"rpm파일이름"을 rpm -Uvh 으로 설치하면 의존성 파일은 설치가 안되고 설치를 진행해서 정상설치가 않되지만

yum 으로 설치하게되면 설치패키지가 그 패키지만 설치해도 문제 없으면 그대로 설치하고

만약 설치 패키지가 의존성 파일을 추가로 필요하다면, 인터넷에서 필요한 파일을 알아서 다운 받아서

설치 되기 때문에 의존성 문제를 스스로 해결해서 정상 설치함 



* 레드햇 확장 패키지 저장소 추가

- yum 은 기본 패키지 설치 저장소가 CentOS 보다 패키지가 많은  래드햇 저장소도 추가로 이용할수 있습니다.  

# yum -y install epel-release


33.png


- 장점 기존 패키지 저장소 보다 더 많은 패키지가 설치이 가능합니다.

- CentOS 서버에서 yum 으로 설치 했을때 설치가 안될경우 활용할수 있습니다.



* 업데이트 가능한 목록 보기

# yum check-update


* 업데이트

# yum update 패키지이름

# yum update                    // 패키지 전체 업데이트


* 패키지 삭제

# yum remove 패키지이름


* 패키지 정보확인

$ yum info 패키지이름

 

  


③ YUM 고급 사용법


* 패키지 그릅 설치 : 특정 패키지 경우 호환성 좋게 하기 위해서 패키지들을 그릅으로 묶어서 설치 할수 있습니다.

# yum groupinstall 패키지이름

# yum grouplist 그릅 패키지 리스트

 

14.jpg

* "최소설치", "계산노드", "인프라서버"..., "호환성 라이브러리" 이런 항목이 그릅 리스트 입니다.

* 추가로 숨긴 리스트를 볼수도 있는데

# yum grouplist hidden


16.jpg


* 리스트를 한글로 나오지만 그릅을 설치할때는 영문으로 써야 됩니다.


* 지금 언어 설정을 확인합니다.


# echo $LANG

ko_KR,UTF-8   //  한글이네요


17.jpg

 

영문으르 바꾸어 봅시다


# LANG=en_US.UTF-8


다시 YUM 으로 그릅 리스트롤 보면

# yum grouplist hidden


18.jpg



* 영문으로 바꾸었네요


* 이제 설치해보겠습니다. 

# yum -y groupinstall "Web Server" 


* 그릅 리스트 이름에 중간에 공백이 있다면 "" 으로 묶어주세요




*  패키지 리스트 확인

# yum list 패키지 이름 


* 특정 파일이 속한 패키지이름 확인


# yum provides 패키지이름


* 예를 들어서, ifconfig 파일을 설치해야 되는데 # yum -y install ifconfig  실행하면 패키지가 없고 나옵니다.

그러면 ifconfig 는 단독으로 쓰는것이 아니고 어떤 패키지를 설치야 그 패키지 안에 포함 되는 프로그램인라는 의미입니다.

이럴때 ifconfig 프로그램이 포함된 패키지 이름을 확인하는 방법이 # yum provides ifconfig 입니다.


12.jpg


* ifconfig 는 net-tools 라는 패키지안에 있다고 나옵니다. 그러면 ifconfig 설치한다면


# yum -y install net-tools 이 패키지를 설치 하면 ifconfig 설치가 됩니다.


다시 한글로 바꾸려면


# LANG=ko_KR.UTF-8


하면 됩니다.





④ YUM 기본 저장소 변경하기


* 패키지는 몇가지 종류가 있습니다.


- 기본(base) 패키지 : CentOS 설치본에 포함된 패키지

- 업데이트(update) 패키지 : CentOS 설치본이후에 업데이트된 패키지

- 확장(extras) 패키지 : CentOS 설치본외 확장 패키지

- 확장 패키지외 추가(CentOS) : 확자 팩기를 더 확장한 패키지


YUM 의 저정소 설정 파일은 /etc/repo.d 안에 확장명이 repo 인 파일입니다.


 19.jpg

 


설정파일을 보면


20.jpg


위 그림음 repo 디폴트 값인데요



설정 파일에서 꼭 필요한 항목은 아래 네줄만 존재하면 작동이 가능합니다.

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

[장치명]                                                    
name=                                 
baseurl=                    
gpgcheck=

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


설정 파일을 예제로 알아보겠습니다. 


/etc/repo.d/*.repo 설정파일들을 백업을 해놓고, 새로 CentOS-Base.repo 설정 파일을 만들어서

YUM 이 다운 받은 기본 저장소 링크를 변경 할수 있습니다.


* CentOS-Base.repo 파일 예시

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


# nano dvd.repo


[dvd]                                                         // 임의 지정함
name=CentOS DVD                                      // 임의 지정함
baseurl=file:///media/cdrom                         // 기본 다운 링크를 dvd 에서 설치하게 설정함
gpgcheck=0


[network]                                                      // 임의 지정함
name=Network                                               // 임의 지정함
baseurl=
https://mirror.kernal.org/dentos/7/os/x86_64      // [dvd] 할목에 설치패키지가 없으면 두번째로 다운받는 링크 지정 mirror.kernal.org/dentos/7/os/x86_64  
https://mirror.centos.org/dentos/7/os/x86_64      // [dvd] 할목에 설치패키지가 없으면 두번째로 다운받는 링크 지정 mirror.centos.org/dentos/7/os/x86_64  
gpgcheck=0


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


* dvd 마운트 하고 yum 프로그램을 설치를 시도하면 우선적으로 dvd 에서 설치본을 찾고 설치본이 dvd 에 없으면


https://mirror.kernal.org/dentos/7/os/x86_64     


https://mirror.centos.org/dentos/7/os/x86_64     


두군데서 다운받습니다.





(10) 파일 압축과 묶기


① 파일 압축


* 압축파일 확장명은  xz, bz2, gz, zip, Z 등이 있음

* CentOS 에서 압축을 하면 원본 파일이 없어지고 압축파일만 남으며, 압축파일을 풀으면 압축된 파일은 없어지고 원본 파일만 남음

* 압축율 대체로 xz > bz2 > gzip ( xz 가 가장 최근에 제작된 압축 프로그램 )


* 파일 압축관련 명령

* xz : 확장명을 xz 로 압축하거나 풀어준다

# xz 파일명   // 압축하기

# xz -d 파일명   // 압축풀기


* bzip2 : 확장명을 bz2 로 압축하거나 풀어준다

# bzip2 파일명   // 압축하기

# bzip2 -d 파일명   // 압축풀기

* bunzip2 은 bzip2 -d 와 동일한 명령어


* gzip : 확장명을 gz 로 압축하거나 풀어준다

# gzip 파일명   // 압축하기

# gzip -d 파일명   // 압축풀기

* gunzip 은 gzip -d 와 동일한 명령어




② 파일 묶기

* 파일 악축과 파일 파일 묶는것은 별개의 프로그램이 수행을 합니다.

* 파일 묶는 명령어는 tar 이며 묶은파일의 확장명도 tar 입니다.


* 파일 묶기 명령

* tar : 확장명 tar 로 묶음파일을 만들어 주거나 묶음을 풀어준다. tar 로 묶는경우 윈본 파일은 남아 있습니다.

* 파일을 묶은 다음에 압축까지 한꺼번에도 가능하며, 이 경우 파일명 입력할때 압축 확장명( 예 : file.tar.xz )까지 추가 해야됨 

* 동작 : c (묶기) , x (풀기) , t (경로확인)

* 옵션 : f (파일) , v (진행과정출력) , J ( tar + xz ) , z ( tar + gz ) , j ( tar + bzip2 )


* 사용예

# tar cvf file.tar /etc/sysconfig/    →   /etc/sysconfig/   디렉토리를 file.tar 묶기

# tar cvfJ file.tar.xz /etc/sysconfig/    →   /etc/sysconfig/  디렉토리를 file.tar 묶고 + xz 로 압축 → file.tar.xz (압축 파일 확장명 반듯이 추가)  

# tar xvf file.tar /etc/sysconfig/    →   file.tar 풀기

# tar xvfJ file.tar.xz /etc/sysconfig/    →  file.tar.xz 로 압축 해제후 file.tar 묶은 상태 풀기




③ 파일 위치 검색

# find [경로] [옵션] [조건] [action] : 기본 파일 찾기

* [옵션] : -name(파일명) , -user(소유자) , -newer(전,후) , -perm(권한) , -size(크기)

* [action]  : -print(기본값, 생략가능) , -exec(외부명령 실행) 

* 사용예 :

 # find /dev/ -name sd*

 # find /dev/  -size +100k  -size -200k

 # find /dev/ -name sd* -exec ls -la {} \;       ( 주의 { } 앞뒤는 공백 반듯이 필요 )


22.png


# which 실행파일 이름 : PATH 에 설정된 디렉토리만 검색 

# whereis 실행파일 이름 : 실행파일, 소슬, man 페이지 파일 까지 검색

# locate 파일이름 : 파일목록 데이타 베이스에서 검색

 





④ ntsysv : 서비스 설정


# system-config-keyboard : 키보드 설정

# system-config-language : 언어 설정




(11) cron 과 at


① 크론

* cron : 주기적으로 반복되는 일을 자동적으로 실행할수 있도록 설정

* 관련된 데몬(서비스)는 crond 이고 관련 파일은 "/etc/crontab"

* 크롭 서비스가 운영하고 있는지 확인해 보겠습니다.


26.jpg


* 크론 데몬 확인

# systemctl  status crond

active 상태가 inactive 라고 나오네요. 서비스가 중지된 상태 입니다.

서비스를 가동하겠습니다.

# systemctl restart crond

active 상태가 active 라고 나오네요. 서비스가 활성 되었습니다..



* cron 설정 방법을 예제로 알아 보겠습니다.

* crontab 설정파일을 열으세요

# nano /etc/crontab


27.png


* 제일 상단 3줄(SHELL, PATH, MAIL )은 형식적인 항목이고 

* 3번재줄에서 MAILTO=root 는 cron 작업하고 작업 로그를 root 한테 메일이 보내는것인데

* 크론 서비스 작동에 대한 로그 내용이 필요 없는 경우 MAILTO="" 이렇게 변경하면 LOG 는 남지 않습니다.


* CRON 의 작성 형식은

[ 첫번째숫자는 분단위] [ 두번째 숫자는 시간단위 ] [ 세번째 일단위 ] [ 네번째 월단위 ] [ 다섯번째 요일단위 ] [ 실행 소유자 ] [ 실행 파일 ]


* 하단에 3줄 추가한 빨간색 박스 내용의 의미는

→ 매월 15일 새벽 3시 01 분에 root 권한으로 /etc/con.monthly 안에 모든 파일을 실행   ( run-parts : 폴더안에 실행 파일 전체를 실행하라는 의미 )

→ 매월 매일 새벽 3시 01 분에 root 권한으로 /root/backup.sh 파일을 실행            ( 특정 스크립트 파일만 실행 )

→ 매월 매일요일 새벽 2시 00 분에 root 권한으로 rdate -s time.bora.net 실행        ( 명령어를 실행 )


이렇게 크롬을 사용할수 있습니다.


* corntab 파일을 수정했을 경우 crond 데몬을 재 실행 해야 적용이 됩니다.

# systemctl restart crond



② at : 반복적이지 않은 일회성 작업 예약


25.jpg


# at 시간

# at 2:01am tomorrow    // 내일 새벽 2시 1분

# at 12:01am Nov 01      //11월 1일에 새벽12시1분

# at now + 1 hours         // 지금부터 1시간 후에

at> 프롬프트에서 [ Ctrl + D ] 키 눌러서 종료

예약 확인 : at -l

예약 취소 : atrm [작업번호]





(12) 네트워크


① 네트워크 개념

* TCP/IP : 컴퓨터 끼리 네트워크상으로 의사소통하는 프로토콜중 가장 널리 사용되는 프로토콜의 한 종류 


* 호스트이름과 도메인 이름 :

* 호스트이름은 각각의 컴퓨터에 지정된 이름

* 도메인이름(또는 도메인주소)은 daum.net 같은 형식


* IP 주소

- 각 컴퓨터의 랜카드에 부여되는 중복되지 않는 유일한 주소( 공인 IP 기준, 사설IP 제외 )

- 4바이트로 이루어 졌으며 0 ~ 255 까지의 숫자

- 예) PC 의 IP 주소는 192.168.0.123

- 네트워크 주소 : 같은 네트워크에 속해 있는 공통된 주소


* 브로드케스트(broadcast)주소

- 내부 네트워크의 모든 컴퓨터가 듣게되는 주소

- 현재 주소의 제일 끝자리를 255 로 바꾼 주소


* 게이트웨이(gateway)

- 라우터 = 게이트웨이

- 네트워크건에 데이터를 전송하는 컴퓨터 및 장비


* 넷마스크(netmask) 와 클래스(class)

- 넷마스트 : 네트워크의 규모를 결정(예:255.255.255.0 → C 클래스)


* DNS (Domain Name System) 서버 (= 네임서버) 주소

- url 을 해당 컴퓨터의 ip 주소로 변환해 주는 서버

- 설정파일은 /etc/resolv.conf , 기본은 랜카드의 설정파일에서 가져옴





② 네트워크 설정 프로그램 - nmtui


* text 모드에서 네트워크 설정을 쉽게 할수 있도록 도와주는 도구 입니다.

- 네트워크 설정 (ip, subnet mask, gateway, dns )

- 네트워크 연결 활성 및 비활성

- 시스템 호스트 이름 변경


* 설정값을 변경후에 저장하고 나온후에 네트워크 서비스 재가동 필요 ( # systemctl   restart   network )


# nmtui


23.jpg



설정이 끝났으면 마지막에 OK 누르시면 됩니다.


24.jpg



* 네트워크 장치를 on 또는 off 시키는 명령

# ifup [장치명]   →  장치 on

# ifup [장치명]   →  장치 off


* ip 정보 출력

# ifconfig

# ip a


* 도메인을 ip 로 해석하기, dns 서버 작동 테스트

# nslookup


28.png


* 해당 컴퓨터가 인터넷에 연결되어 있는지 확인하기


# ping 컴퓨터의 ip  ( 종료시 Ctrl + C )

# ping 192.168.0.60

# ping -c  3   192.168.0.60    // -c 옵션으로 횟수도 지정가능   , 3회만 ping 연결 테스트


* 네트워크 설정 파일

- /etc/sysconfig/network   → 네트워크의 기본적인 정보가 설정되는 파일. 보통은 디폴트 값 그래로 사용하며, 수정 안함

- /etc/sysconfig/network-scripts/ifcfg-장치명  →  랜카드의 네트워크 중요 설정 파일


* 네트워크 설정 파일을 수정해서 네트워크가 가능하게 해보겠습니다 

* ifcfg-장치명 설정 파일을 열으세요

* 예제에서는 설정파일이 /etc/sysconfig/network-scripts/ifcfg-enp5s0 입니다.

# nano /etc/sysconfig/network-scripts/ifcfg-enp5s0


35.png


* 자동(dhcp) 할당 경우

BOOTPROTO = dhcp 로 하고

ONBOOT = yes 

수정하고 저장한후에 네트원크 서비스를 재 시작합니다.

# systemctl   restart   network



* 고정 ip 경우


34.png


- BOOTPROTO = static

- ONBOOT = yes

- IPADDR=192.168.0.100

- NETMASK=255.255.255.0

- GATEWAY=192.168.0.1

- DNS1=8.8.8.8

- DNS2=8.8.4.4


* 시스템의 IP , 서브넷마스크, 게이트웨이 DNS1, DNS2(생략 가능) 추가 입력


- /etc/resolv.conf  →  dns 서버 정보 및 호스트 이름을 설정하는 파일.

                                네트워크 서비스를 재시작하거나 서버를 재부팅하면 랜카드 설정 파일(/etc/sysconfig/network-scripts/ifcfg-enp5s0)

                                안에 있는 dns 에서 값을 다시 가져와 적용함


- /etc/hosts  → 현 컴퓨터의 호스트 이름 및 FQDN 을 설정하는 파일 


  

* 네트워크를 통해서 외부 타임서버에서 정확한 시간을 가져와서 시간 설정이 가능함

# rdate - s time.bora.net     // rdate 없을 경우 yum -y install rdate



* 네트워크 보안을 위한 SELinux


-SELinux( Securty Enhanced Linux ) 보안아 취약한 리눅스를 보호 하기 위해 탄생

- 강제 (Enforcing), 허용 ( Permissive ), 비활성 ( Disabled ) 세가지 레벨이 있음

- 설정 파일인 /etc/sysconfig/selinux 편집해서 설정함

   - 강제 (Enforcing) : 시스템 보안에 영양을 미치는 기능이 감지되면 아예 그 기능이 작동하지 않도록 시스템에서 막아준다

   - 허용 ( Permissive ) : 시스템 보안에 영양을 미치는 기능이 감지되면 허용은 되지만 그 내영이 로그에 남음  

   - 비활성 ( Disabled ) : SELinux 를 사용하지 않음

- 편집후 재부팅해야 적용이 됨

- 클라이언트로 사용할 경우에는 보안상 Enforcing 설정을 권장하고, 서버로 사용할 경우에는 서비스와 충동 때문에 Disabled 로 많이 사용함


29.png


- SELinux 설정 상태확인하기

# sestatus


30.png




(13) 프로세스(데몬), 서비스


① 프로세스, 데몬


* 정의 : 하드 디스크에 저장된 프로그램이 메모리에 로딩되어 활성화 된것

* 포그라운드 프러세서 : 실행하면 화면에 나타나서 사용자와 상호 작용을하는 프로새서, 대부분의 응용 프로그램

* 백그라운드 프로세서 : 실행은 되었지만 화면에 나타나지 않고 실행되는 프로세서, 백신 프로그램, 서버 데몬 등

* 프로세서 번호 : 각 프로세서에 할당된 번호. 프로세서 번호는 일정하지 않으며 os 가 랜덤으로 생성함. 즉, 프로그램의 고유 프로세서 번호는 없음

* 작업번호 : 현재 실행되고 있는 백그라운드 프로세서의 순차번호. 프로그램을 포그라운드와 백그라운드 전환시 사용함

* 모든 프로세스는 부모 프로세스를 가지고 있음. 부모 프로세스를 kill 하면 자식 프로세스도 kill 됨

* 프로세스 관련명령

 # ps                                         //  현재 프로세스를 확인하는 명령어

 # ps -ed | grep [프로세스이름]   // 이 형식으로 많이 사용함

 # kill 프로세스 번호                     // 프로세스는 종료하는 명령어

 # kill -9 프로세스 번호                 // kill 명령어로도 프로그램이 종료되지 않을때 사용. 프로세스는 강제로 종료하는 명령어

 # pstree                                   // 부모프로세스와 자식 프로세스의 관계를 트리 형태로 보여줌

  

31.png



kill 명령어 사용 예시

어떤 프로그램이 무한 루프에 빠진 상태를 만들어서 그 프로그램을 강제 종료를 해보겠습니다.


32.png

# yes 라는 프로그램을 실행했습니다. yes 는 화면에 yes 라고 무한 루트를 출력하고 Ctrl + C로 종료 가능합니다. 


# ps -ef | grep yes      // yes 프로그램을 프로세서는 찾습니다.

yes 관련 프로세스가 두가지나 나오는데요. 두번째는 grep --color=auto yes 라는것은

# ps -ef | grep yes 실행한 명령어를 자체를 의미하고 진짜 yes 프로그램과 무관합니다.

--color=auto  포함된 줄은 무시하면 됩니다. 


* 여기서 yes 프로그램의 프로세서 번호는 2533 이 되는것이고 종료 한다면


# kill 2533      // 종료하기 


# kill - 9 2533  // 만약에 kill 명렁어로 해도 종료가 안되면 옵션 -9 를 추가해서 강제 종료 할수 있습니다.





② 포그라운드와 백그라운드


* 포그라운드와 백그라운드는 멀키태스킹할때 유용합니다.

* 가상 터미널을 이용해도 멀티테스킹 작업이 가능한데 터미널 하나에서 포그라운드와 백그라운드를 이용해서 멀티 테스킹도 가능합니다.

* 포그라운드에서 백그라운드로 넘기려면 작업을 중지(Ctrl + z) 시키고 # bg 실행하면 되고

* 백그라운드에서 돌고 있는 프로그램을 포그라운드로 가져오려면 백그라운드에서 한개가 돌고 있다면 # fg 만 하면 되고

  여러개 백그라운드에서 작업 중이라면 # jobs "작업번호" 를 확인하고 # fg "작업번호" 해서 불러 옵니다. 


36.png


* 위 그림 예제에 대한 설명입니다.

# at 포그라운드 작업을 중지 시키려면 Ctrl + z 누릅니다.

* 포그라운드 진행중인 새로운 작업을 중지 시키려면  Ctrl + z 누릅니다.

* 2개의 작업이 중지된 상태입니다.

* 마지막에 포그라운드에서 작업을 중지시킨 프로그램을 백그라운드에서 이어서 하려면 # bg 실행합니다.

  만약 여기서 마지막에 작업하다 중지시킨 작업 말고 다른 작업을 백그라운드에 넘기려면 작업번호를 bg 명령어 뒤에 추가해서 

# bg "작업번호" 이런 형식으로 실행합니다.

* 백라운드 작업 상태를 확인하려면 # jobs 실행합니다.

* 작업번호[1]은 백그라운드에서 Stoped으로 되어 있는것은 중지되어 있는 상태고

* 작업번호[2]번은 running 아리도 되어 있는것은 백그라운드에서 계속 작업중이라는 의미입니다.

* 작업번호[2] 번을 포그라운드로 가져오기 위해서 # fg 2 입력합니다

* 다시 포드라운드 작업을 Ctrl + z 해서 중지 시키고 # bg 실행해서 백그라운드 돌립니다.

# 백그라운드 작업중에서 취소해야 될경우 jobs 작업 번호를 확인후에 # kill [작업번호]로 강제 종료 할수 있습니다.

* 처음부터 작업을 백그라운드에서 바로 실행하게 할려면 명령어 뒤에 & 넣고 실행하면

백그라운드에서 작업을 바로 시작합니다.( 예:  # yes > /dev/null & )  



③ 서비스와 소켓


* 서비스


- 시스템과 독자적으로 구동이되어 제공하는 프로세스를 말하며, 예로 웹서버(httpsd), DB(mysqld) 서버, FTP(vsftpd) 서버 등이 있습니다.

- 실행 및 종료는 대게 systemctl start/stop/restart 서비스이름 으로 사용됩니다.

- 서비스 실행 스크립트 파일은 /usr/lib/systemd/system/ 디렉토리에 '서비스.service' 라는 이름으로 확인할수 있다. 예를 들어 웹서비스는

httpsd.service 라는 이름의 파일이 존재한다



* 소켓

- 서비스는 항상 가동 되지만 외부에서 특정 서비스를 요청할 경우 systemd 가 구동 시킨다. 그리고 요청이 끝나면 소켓도 종료된다. 그래서

소켓으로 설정된 서비스를 요청할때는 처음 연결되는 시간이 앞에서 설명한 서비스와 비교 했을때 약간 더 걸리수가 있다. 이유는  systemd 가

새로 서비스를 구동하는데 시간이 소요되기 때문입니다. 이와 같은 소켓의 대표적인 예로 텔넷서버를 들수가 있다

* 소켓과 관련된 스크립트 파일은 /usr/lib/systemd/system/ 디렉토리에 소켓이름.socket 이라는 이름으로 존재한다





(14) 읍급복구


① root 비번을 분실했을때


41.jpg

* 부팅 메뉴에서 키보드 e 키를 누릅니다.



43.png

* 방향키로 가장 하단으로 이동합니다.


* 하단에서 다시 위로 linux16 이라는곳은 찾아갑니다. End 키를 눌러서 그 줄의 가장끝으로 이동합니다.


* 가장 끝부터해서 앞쪽으로 rhgb 까지 삭제합니다.


44.png

* 삭제한곳에 init=/sbin/sh 입력합니다.


* 키보드 Ctrl + x 누르니면 복구 모드로 부팅이 됩니다.


45.png


* 아래 순차대로 명령어를 실행하세요.


bash-4.2  # mount -o remount,rw /              //  / 마운트를 쓰기 가능하게 변경함

bash-4.2  # passwd root                             //  root 계정 비번 변경

bash-4.2  # touch /.autorelabel                    //  변경된 파일의 SELinux 컨텍스트가 부팅 후 적절히 복구될 수 있도록 해줍니다

bash-4.2  # exec /sbin/init                          //  재부팅 


* 부팅후 변경한 비번으로 로그인이 가능합니다.



② GRUB 루트로더


* GRUB 루트로더 특징

  - 부트정보를 사용자가 임의로 변경해 부팅할수 있다. 즉 부팅 정보가 옯바르지 않더라도 수정하여 부팅 할수 있다

  - 다른 여러가지 운영체제와 멀티 부팅을 할수 있다

  - 대화형 설정을 제공해 줘서 커널의 경로와 파일의 이름만 알면 부팅이 가능하다


* GRUB2 의 장점

  - 셀 스크립트를 지원함으로써 조건식 및 함수를 사용할수 있다

  - 동적 모듈을 로드 할수 있다

  - 그래픽 부트 메뉴를 지원하며 부트 스플레시 boot splash 성능이 개선 되었다

  - ISO 이미지를 이용해서 바로 부팅 할수 있다


* GRUB2 설정 방법

 - /boot/grub2/grub.cfg 설정파일 ( 직접 변경하면 안됨 )  

 - /etc/default/grub 파일과 /etc/grub.d/ 안에 파일을 수정한 후에 # grub2-mkconfig 실행해서 설정함


# nano /etc/default/grub


46.png


* 부팅 지연 시단 시간 5초를 변경할수 있습니다.

* 변경후 # grub2-mkconfig -o /boot/grub2/grub.cfg 실행하세요


47.png

* 부팅 시간이 변경되서 출력 됩니다.



* 위에서 배운 분팅 메뉴에서 복구 모드로 진입해서 root 비번을 누구나 초기화 할수 있는데, 이 기능은 보안상 취약하기 때문에

아이디와 비번을 입력후에 복구 모드로 진입하게 설정을 해보겠습니다.


48.png


# nano /etc/grub.d/00_header

제일 하단으로 이동하고 아래 내용을 추가 합니다.

--------------------------------------------
cat << EOF
set superusers="test"
password test 1234
EOF

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

# grub2-mkconfig -o /boot/grub2/grub.cfg

실행을 해줍니다.


* 재부팅을 합니다.




* 부팅메뉴에서 복구 모드 진입을 위해서 e 누르면


49.png


Enter username :

test

password :

1234


* 아이디와 비번이 맞으면 복구 모드로 진입합니다. 하지만 아이디와 비번이 한개라도 틀리면 로그인이 안됩니다.




(15) 커널과 모듈


① 커널 및 모듈의 개념

74.png

* 커널은 운영체제 최소한의 역할수 있게 하는 핵심적인 최소한의 소프트웨어 입니다.

* 커널은 교체 및 업그레이가 가능함.  

* 모듈은 운영체제에서 사용 하는 코드이지만 자주 안쓰는 코드로서 필요할때 커널에 포함 시켜서 쓰고 필요 없으면 커널에서 분리가능

* 커널에서 모듈 분리가 가능하기 때문에 커널의 용량이 최소화 되서 운영체제 성능이 향샹이 됨

 



② 커널 컴파일 (운영체제 업그레이드)


* 커널 컴파일은 운영체제를 업그레이드 하는것을 의미합니다.

* 윈도우로 예를 들면 윈도우7 에서 윈도우 10 으로 업그레이드 되는것을 말하며, 업그레이드후 업그레이드 후에

  기존 응용 프로그램은 그대로 사용이 가능합니다.


    

ⓐ 의존성 파일 설치

# yum -y install gcc gcc-c++ qt qt-devel ncurses-devel ncurses bc perl openssl-devel


ⓑ  현재 운영체제 버전확인 ( 시스템에 맞는 커널 번전을 다운 받기 위해 확인 )

 # uname -r


ⓒ 커널 설치폴더 이동 커널을 반듯이 이 경로에서 다운 받아야 됨. 다른 폴더에서 다운 받으면 커널은 설치 안됨 )  

# cd /usr/src   

 

ⓓ 커널 다운    

# wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.8.8.tar.xz


ⓔ 압축 풀기

# tar xfJ linux-4.8.8.tar.xz

# cd linux-4.8.8


ⓕ 커널 설정 초기화

# make mrproper


ⓖ 커널 환경 설정

# make munuconfig


ⓗ 커널 컴파일 및 설치 ( 이 작업은 시스템에 따라서 몇시간도 걸릴수 있음 )

# make ; make modules_install  ;  make install     


ⓘ 부트 로더 확인

# cat /etc/grub2/grub.cfg




(16) 하드 디스크 추가하기


* 리눅스 시스템에서 하드 디스크 추가하기

70.png


* 작업 순서


① 물리적인 하드 디스크 연결


50.jpg


- 운영체제에서 하드가 인식이 됬는지 확인해 보겠습니다.


# ls /dev/sd* 하면 /dev/sdb 가 보입니다. 그러면 운영체제가 하드를 인식했다는 의미입니다.


- 다른 방법으로 # fdisk -l 해서 /dev/sdb 가 하드가 추가 됬는지도 확인이 가능합니다.



* Disk dev/sdb1 추가가 됬네요.

* 하드가 추가 된것을 확인이 되었고 파티션 작업을 시작 해보겠습니다. 



② 파티션 생성 ( # fdisk /dev/sdb )


51.png


* 새로 추가한 디스크가 sdb 라면


# fdisk /etc/sdb 로 디스크 파티션 명령을 진행합니다. 하드를 추가 했을때 두번째 하드가 반듯이 sdb 가 되는것 아니며


* sd 다음에 어떤 문자( sda~sdz )도 나올수 있습니다. 심지어 하드를 추가하면 기존에 하드가 한개 였을때 sda 였던것이 sdb로 바뀌고


* 새추 장착한 하드가 sda 가 될수도 있습니다.  


* fdisk 메뉴에서 m 은 메뉴를 출력하는것입니다.


* 새로운 하드라면 Command ( m for  help ):  n 눌러 파티션을 새성하면 되는데 만약 기존에 파티션이 있다면 삭제해야 되는데

그럴때는 d 누르면 파티션이 삭제됩니다.


* 파티션을 4개 이하로 생성한다면 primary(주파티션)을 선택하면 됩니다. primary 파티션은 한개의 하드에 4개 파티션 까지 설정이 가능합니다. 


* 시작섹터 입력은 파티션 시작 섹터를 설정 하는 단계인데 컴퓨터가 알아서 계산하기 때문에 디폴트 값으로 진행(엔터)하면 됩니다. 


* 마지막 섹터 입력은 파티션 크기를 넣는 설정하는 단계인데 섹터만 넣거나 또는 용량과 단위(K,M,G)해서 설정도 가능하며


만약 디스크 전체용량을 사용한다면 디폴트 값으로 진행(엔터)하면 됩니다.


* 파티션 설정이 완료후에 저장을 해야 됩니다.  Command ( m for  help ):  w 이력 하면 설정값을 저정후 프로그램이 종료됩니다.


파티션 설정후 윈도우에서는 재부팅이 필요하지만 리눅스에서는 재부팅이 필요 없습니다. 



③ 포맷작업 ( mkfs.ext4  /dev/sdb1 )


52.png


# mkfs.ext4 /dev/sdb1 이렇게 실행하면 포맷은 끝납니다.


여기서 주의할 점은 장치명 입력할때 sdb 아니고 sdb1 입니다.


sdb는 하드 디스크 전체를 말하는것이고  sdb1 는 파티션 단위를 말합니다.


* fdisk 에서는 하드 디스크 전체는 사용하는것이기 때문에 옵션을 sdb 사용하고

* mkfs.ex4 를 파티션 단위로 포맷을 해야 되기 때문에 옵션을 sdb1 사용해야 겠습니다.



④ 마운트 작업 ( mount /dev/sdb1 /disk2 )


54.png


* 리눅스는 장치를 불러와서 사용할때는 폴더에 마운트 시켜서 사용하게 됩니다. 폴더를 장치와 동기와 시키는 작업을 말합니다.

동기화를 시키면 폴더로 접근해서 장치를 사용할수 있습니다.

 


⑤ /etc/fstab 에 등록해서 부팅후에도 계속 사용가능함


56.png


위 그림에서 빨간색 줄 항목을 보면


앞에부터 " 파일시스템 장치명 / 마운트 포인트 / 파일시스템 종류 / 옵션 / dump 관련 설정 / 파일점검 옵션 " 이렇게 되는데


3개만 정학하게 작성하고 나머지는 defaults 와 0 0 입력하시면 됩니다.


/etc/fstab 파일을 열지 않고 명령어만으로 간단하게 수정도 가능합니다.


# echo "/dev/sdb1 disk2 ext4 defaults 0 0" >> /etc/fstab




(17) 사용자별 공간 할당 - 쿼터


* 쿼터 개념 :


① 파일 시스템 마다 사용자나 그릅이 생성할수 있는 파일의 용량 및 개수를 제한함

② 파일 시스템을 "/" 로 지정하는것 보다 별도의 파일 시스템을 지정해서 해당 부분을 쓰게 하는것이 좋음

③ "/" 파일 시스템을 많은 사용자가 동시에 사용하게 되면 CentOS 서버를 운영하기 위해서 디스크를 읽고 쓰는 작업과 일반 사용자가 디스크를

읽고 쓰는 작업이 동시에 발생 하므로 전반적으로 시스템의 성능이 저하됨

④ quota 패키지가 설치되어 있지 않다면 설치 (

 - 설치 확인 :  # rpm qa quota

 - 설치 : # yum -y install quota 


* 작업 순서


72.png


* 사용자들을 쿼터로 제한 해보겠습니다.


① 하드 추가해서 /dev/sdb1 공간을 사용자 계정 전용 공간으로 만듬. 자세한 방법은 이전 하드 추가 강좌 참고

 - 하드추가

 - # fdisk /dev/sdb → n → p → 1 → default → default → w 단계진행 파티션 설정

 - # mkfs.ext4 /dev/sdb1 포맷

 - # mkdir /disk2 추가 하드 디스크를 마운트할 디렉토리 생성

 - # mount /dev/sdb1 /disk2 

 - # echo "/dev/sdb1 disk2 ext4 defaults 0 0" >> /etc/fstab


② 제한 하고자하는 사용자 계정을 만듭니다.


57.png


* user1 과 user2 계정을 추가 했습니다.


* 계정을 추가 할때 주의할 점은 쿼터를 적용시킨 디스크(disk2) 장치안에  -d 옵션으로 계정의 홈디렉토리를 생성해야 됩니다.



③ 추가한 디스크를 용량 제한을 할수 있는 쿼터용 디스크로 설정하기.  /etc/fstab 파일 수정


# nano /etc/fstab 파일을 열어서 


" defaults "를 " defaults,usrjquota=aquota,user,jqfmt=vfsv0 " 로 변경 


58.png



④ 적용 하기 위해서 부팅하거나 리마운트 실행 


59.png  

# mount -o remount /disk2



⑤ 쿼터 db 생성하기.


60.png


# cd /disk2    //  쿼터 성정 디스크로 이동
# quotaoff  -avug  
# quotacheck -augmn
# rm -rf aquota.*
# quotacheck -augmn
# touch aquota.user aquota.group
# chmod 600 aquota.*
# quotacheck -augmn
# quotaon -avug



⑥ 사용자별 용량 할당 설정하기


61.png

# edquota  -u  user1    // user1 에 대한 용량 제한하기



62.png


- block 현재 사용량

- soft 는 제한 용량이지만 기간에 따라서 초과될수 있음.

- hard 는 제한 용량이고 절대적으로 넘어갈수 없음   

- inode 는 파일수 제한



다시 예시로 설명 드리겠습니다.


63.png


soft 제한 : 10240k ( 10Mb ) 이고, hard 제한 20480k ( 20Mb ) 입니다.


사용자는 soft 용량 제한인 10 메가를 넘는 작업을 하면 1차 경고 메세지 ( warning, user block quota exceeded.) 가 나옵니다.


soft 용량 제한을 넘어서 하드 용량제한까지는 추가 경고 메세지 없이 사용이 가능하나 7일 안에 정리를 해야 됩니다.


7일 이후에는 삭제가 됩니다.  soft 용량 초과한 상태에서 계속적으로 파일 용량이 늘리는 작업을  하게 될경우 용량이 hard 용량인 20 메가를


넘으려고 하면 추가 경고 메세지 (write failed, user block limit reached. ) 가 나오면서 쓰기 제한을 시킵니다.   


이 경우 마지막 작업한 파일도 제한 hard 용량까지만 저장이 됩니다.



위 조건에서 quota 의 제한 작동 상태를 확인해 보겠습니다.


76.png


만약 여기서 user2 계정도 user1 계정과 같이 동일한 용량 제한을 한다면 간단하게 용량 제한 설정을 복사할수도 있습니다.


user1 에서 user2 로 쿼트 설정을 복사 한다면


67.png


# edquota -p user1 user2  이렇게 하면 됩니다.


# repquota -as   // 이 명령은 사용자별 quota 설정을 출력합니다.  




(18) bash shell, 환경변수 


* CentIS 기본셸은 bash ( Bourne Again SHell : 배시셸 )


① bash 셸의 특징


  ⓐ Alias 기능 : 명령어 단축 기능

  ⓑ History 기능 : 위/아래 화살표 기능

  ⓒ 연산 기능

  ⓓ Job Control 기능

  ⓔ 자동이름 완성 기능(Tab)

  ⓕ 프롬프트 제어 기능

  ⓖ 명령 편집 기능

 


② 환경변수

 *  'echo $환경변수이름' 으로 확인 가능

 *  'export 환경변수=값' 으로 환경 변수의 값을 설정

 * 주요 환경변수

68.png



③ set 과 $ (명령어)


* 리눅스 명령어를 결과로 사용 하기 위해서 $(명령어) 형식 사용

* 결과를 파라미터로 사용하고자 할때 set 과 함께 사용  


69.png


# echo "오늘의 $(date) 입니다."

# echo "현재 디렉토리는 $(pwd) 입니다."


# set $(date)

# echo $1$2$3 → 2016.11.23

# echo $1$2$3$4$5 → 2016.11.17.(목)20:42:42





번호 제목 글쓴이 조회
[공지] 연재 강좌를 진행합니다. gooddew -
105 CentOS 7| SSH 서버 구축 gooddew 1351
104 CentOS 7| telnet 서버 구축 gooddew 1032
103 CentOS 7| Let's Encrypt SSL 설치 [1] gooddew 1349
102 CentOS 7| SAMBA 서버 구축 및 윈도우 네트워크 설치 [1] gooddew 4910
101 CentOS 7| proftpd 서버 구축 gooddew 725
100 CentOS 7| VSFTPD 서버 구축 gooddew 3821
99 CentOS 7| Apache 최신버전 설치하기 gooddew 3427
98 CentOS 7| Nginx, MySQL, PHP 웹서버 구축 gooddew 5174
97 CentOS 7| DNS 서버 설치 [1] gooddew 8151
96 CentOS 7| APM 설치하기 [1] gooddew 8463
95 CentOS 7| 리눅스 설치후 초기 설정해야 할 것들 gooddew 5676
» CentOS 7| CentOS 기본 강좌 gooddew 7065
93 CentOS 7| CentOS-7.0 Minimal 설치 [2] gooddew 5108
92 네트웍 활용| 케이블 모뎀 설치 gooddew 3242
91 네트웍 활용| Netstat 명령어를 이용한 라우팅 테이블 확인 gooddew 4448
90 네트웍 활용| Tracert 명령어를 이용한 장애확인 gooddew 3298
89 네트웍 활용| Ping 명령어를 이용한 장애확인 gooddew 5660
88 네트웍 활용| Lanbird Router 설정 gooddew 1351
87 네트웍 활용| Teltrend Router 설정 gooddew 1198
86 네트웍 활용| 3COM Router 설정 gooddew 2031
XE1.11.6 Layout1.4.8