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

[ 시스템 설정을 위한 내용 ]

설치된 CentOS Server  : CentOS 6.5

설치된 Main Disk : S-ATA3 300GB

설치된 Storage : HP P2000 G3 FC

설치된 Storage 정보 : 12TB (Raid 5 구성, Usable=10TB)

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

 

리눅스를 사용하면서 디스크를 큰 용량을 사용하게 되는 경우가 있습니다. 스토리지를 이용하거나 NAS 를 사용하는 경우에

발생할 수 있을 것 같은데요... 기본적인 Disk 파티션으로는 MSDOS 형태를 띄기때문에 아래와 같이 2개의 문제점이 발생합니다.

 

a. 하나의 파티션에서 인식되는 용량한계 : 2Tb

b. 하나의 디스크 총 용량 인식한계 : 4Tb

 

위 같은 문제를 해결하기 위해 적용하는 것이 GPT 파티션을 적용하는 것입니다.

아래의 내용을 따라 Linux 에서 GPT 파티션을 사용해봅니다.

 

[ GPT Partition 사용가능 여부 체크 ]
]# cat /boot/config-2.6.32-431.el6.x86_64 | grep EFI

CONFIG_EFI=y
CONFIG_FB_EFI=y
CONFIG_EFI_VARS=y
CONFIG_EFI_PARTITION=y

위 내용들이 모두 "y" 값을 가지고 있어야 시스템에서 GPT 파티션을 지원하는 것입니다.


 

[ GPT Partition 생성 ]
파티션을 구성하는 가장 대표적인 명령어는 "fdisk" 라는 것은 리눅서!!! 라면 누구나 알고 계시겠지요?

다만, fdisk 를 이용하면 msdos 파티션을 인식하기 때문에 GNU 에서는 "parted" 라는 도구를 권하고 있습니다.

우선 parted 명령의 내용부터 알고 이어서 진행하겠습니다.

 - parted -

1. 정의 : 디스크의 파티셔닝 및 파티션 크기를 조절

 

2. 형식

# parted [Option] [Device]

 

- Option -

* h : help - 도움말 출력

* l : list - 리스트 형태로 정보를 출력

* s : 프롬프트를 출력시키지 않고 실행

* m : ":" 내용을 각 정보마다 출력시켜주어 파싱이 될 수 있음

 

위 처럼 parted 명령어를 이용하여 GPT 파티션을 적용해보자.

현재 제 시스템의 디스크 정보는 300Gb(/dev/sdb), 10Tb(/dev/sda) 이므로 이 정보를 가지고 진행합니다.

 

]# parted                       

============================================================= parted Tool Prompt =======

 

 

(parted) help                       //어떤 내용을 써야하는지 알기 위해 도움말 출력

============================================================= parted Tool help =======

※ 꼭 알아두어야 하는 부분은 표시해드린 부분입니다.

 


(parted) print                  //디스크의 정보 확인(오류 발생 방지)
============================================================= parted Tool Print Info ===

 

Number        : 생성된 파티션의 번호 (/dev/sda?? 형태로 적용됨)

Start, End    : 파티션의 시작과 종료 지점 (용량 형태로 출력)

Size             : 파티션의 크기

File system  : mkfs 또는 mkpartfs 명령어를 이용했을 경우 출력되는 파일시스템 타입

     (fat16, fat32, ext2, linux-swap, reiserfs 등이 올 수 있음.)

Flags           : 파티션의 상태정보를 출력

     (boot, root, swap, hidden, raid, lvm, lba, palo 등이 올 수 있음.)

 


(parted) mklabel gpt        //디스크의 파티션 정보를 GPT로 변경
============================================================= parted Tool mklabel Info ===

Warning: The existing disk label on /dev/sda will be destroyed and all data on this disk will be lost.
Do you want to continue?

Yes/No? yes


Warning: WARNING: the kernel failed to re-read the partition table on /dev/sda (Device or resource busy).
As a result, it may not reflect all of your changes until after reboot.

 

(parted) print   //변경된 GPT 파티션 정보 확인
============================================================= parted Tool Print Info ===

 

 

(parted) mkpart primary 0Gb 2048Gb  //파티션 작업을 위해 2개 파티션 생성
(parted) mkpart primary 2048Gb 4096Gb
 * Syntax : mkpart [diskType] [StartPoint] [EndPoint]

 

 

(parted) print   //파티션 정보를 확인
============================================================= parted Tool Print Info ===

 

 


(parted) quit   // parted Tool 종료
########################################################################################


]# fdisk -l /dev/sda
============================================================= fdisk Tool List Info =====

 

 

 

################################### File system 생성 ###################################

※parted 부분에서 print 를 이용하여 출력된 Number는 디바이스 명칭 및 파티션 번호로 사용됨.
   즉, 아래의 표 형태로 출력된다고 보시면 됩니다.

 

parted Tool

Partition 

Number 1

/dev/sda1

Number 2

/dev/sda2 

 

 

 

################################### 추가사항 ###################################

[ GPT Partition으로 LVM 구성 ]

리눅스를 사용하면서 데이터 백업이나 관리를 용이하게 하기위해 Volume 이라는 것을 구성하는 방법이

존재합니다. 볼륨구성에 대한 부분은 따로 게시글을 이용하여 설명 드리도록 하겠습니다.

추가내용의 경우는 GPT Partition 으로 생성한 부분을 LVM 으로 구성하기 위한 방법입니다.

어렵지 않으니 아래의 글을 참조하시기 바랍니다.

우선적으로 GPT Partition 은 생성 및 설정되어 있는 상태로 진행해야 하는 것을 기억해주세요.

 

 

(parted) print   //파티션 정보를 확인
============================================================= parted Tool Print Info ===

 

 

 

(parted) set 1 lvm on  // lvm 을 사용하려면 옵션을 on 상태로 Flags 정보를 변경해야함.
 * Syntax : #set [Number] lvm [status]


(parted) print
============================================================= parted Tool Print Info ===

  ※ "Flages" 항목에서 'lvm' 으로 내용이 추가됨을 확인할 수 있습니다.

 

(parted) quit   // parted Tool 종료

 

모든 내용이 적용되었으면, 파티션으로 인식하는 부분과 LVM 구성에 필요한 단계를 모두 완료되었으므로

해당내요을 이용하여 LVM 을 구성하시면 됩니다.

AND

[ 변수의 종류 ]
1. 지역변수

 

- 현재 자신의 쉘에서만 사용가능한 변수(#alias 유사)
     (변수 선언시 "소문자"로 선언)

2. 환경변수

- 현재 자신의 쉘 + 파생된 쉘 모두 사용가능한 변수(.bashrc / alias 유사)

- 시스템 전체 어떤 프롬프트에서도 사용할 수 있는 장점이 존재
     (변수 선언시 "대문자"로 선언)

 

 

[ 변수 활용하기 ]
1. 변수 선언
    - 지역변수로 선언 : #변수명=변수값

                          (ex : #a=ls)

    - 환경변수로 선언 : #export 변수명=변수값

                          (ex : #export B=ifconfig)


2. 변수 출력
    - $변수명 형태로 사용

 ex) #echo $a   : a 변수의 내용을 화면으로 출력
       #$B          : B 변수의 내용을 프롬프트로 출력(실행)

 

3. 변수 해제

- #unset 변수명

 

4. 종합 활용예제
  a. 지역변수 선언해보기
  - #a=ls
  - #echo $a
  - #$a (ls 명령어가 실행됨)


  b. 환경변수 선언해보기
  - #export AA='ls -al'
  - #echo $AA
  - #$AA
  - #env | grep AA


  c. PATH 값에 내용추가하기
  - #env | grep PATH   : PATH 내용 확인
  - #export PATH=$PATH:/etc/rc.d/init.d   : 정상 추가
  - #export PATH=/etc/rc.d/init.d             : 빠욤

 

AND

현재 CentOS 기준으로 6.5 가 최신버전인데.. 6.3 인지.. 6.2 부터인지 모르지만

시스템이 On 상태에서 SCSI Device 를 장착해도 자동인식이 동작되지 않고 있다.

 

그래서 HDD 추가 후 장치 인식을 위해 재부팅을 해주는 번거로움이 있었지만

아래의 방법을 따라 진행해보자.. 신세계를 경험하게 될 수 있다~!!

 

 

[ 방법 1 ]

패키지를 하나 설치하여 도구를 이용해보자.

* 패키지 : sg3-utils.~~~~~.rpm

* CMD : rescan-scsi-bus.sh

* 경로 : /usr/bin/rescan-scsi-bus.sh

 

위 패키지를 설치 후 명령어를 이용하여 실행하면 SCSI Bus 를 다시 스캔하는 작업으로

변경된 장치의 인식이 가능해진다. 물론 환경변수인 PATH 값에 "/usr/bin" 경로를 찾을 수

있도록 설정했다면 프롬프트상에서 바로 입력하는 것이 가능하다.

 

※ 위 패키지는 리눅스 설치시디에 내장되어 있기 때문에 설치하기가 수월합니다.

 

 

[ 방법 2 ]

오프라인(IP통신 포함)이나 패키지를 설치할 수 없는 환경에서 리다이렉션을 이용해보자.

 

  - 형식 : # echo "c t l" > /sys/class/scsi_host/HostNumber/scan

◆ c : Channel on the Host Bus Adapter

◆ t : SCSI Target ID

◆ l : Logical Unit Number

◆ hostnumber : 0 ~ 3 까지의 값을 가지며 SCSI Contoler 값이다. (host0, host1, host2, host3)

 

  - 적용 : # echo "- - -" > /sys/class/scsi_host/host0/scan

 

위 처럼 적용한 사항은 첫번째 SCSI 컨트롤러(host0)에 장착된 Device 에 대해 항상 스캔("- - -")을

하도록 설정하지만, RedHat 에서는 무한 루프 상태가 될 수 있으므로 권장하지 않는다.

AND

httpd.conf 파일은 Apache Web Server 설정에 필요한 파일이다.

rpm 을 이용하여 설치하였다면 아래의 경로에 파일이 있으므로 참고하길 바란다.

* 설정파일 : /etc/httpd/conf/httpd.conf

 

지금부터 httpd.conf 파일을 해부해보자. 해당 파일은 크게 세가지 형태로 세분화할 수 있다.

* Global Environment : 아파치 웹서버 전반적인 설정

Main-Server configuration : 아파치 웹서버의 주 서버에 대한 설정

Virtual Hosts : 아파치 웹서버로 구동하는 가상 호스트에 대한 설정

 

 

### Global Environment ###

※  전반적인 설정에 대한 부분으로 아파치 웹서버에서 동작하는 모든 부분에 영향을 준다.

 

* ServerType : standalone

- 서버(데몬)의 구동방법으로는 "standalone"과 "inetd" 방식이 있는데,  standalone 방식으로 동작하도록 설정

 

* ServerTokens : OS

- 추가예정


* ServerRoot : "/etc/httpd"

- 아파치 웹서버의 설치 경로를 나타낸다. 단, 절대경로로 지정한다.

  아래쪽으로 설정하는 항목의 대부분 패스들은 이 경로에 대한 상대경로로 지정이 된다. 


* PidFile : run/httpd.pid

- ServerType이 Standalone 일 경우만 유효하다. 아파치 서버의 프로세스ID 가 기록될 파일을 지정,
ServerRoot 를 기준으로 상대경로로 지정도 가능하며, "/"로 시작하는 절대경로도 지정 가능
 


* Timeout : 60

- 클라이언트와 서버간에 아무런 메시지가 발생하지 않았을 때 오류로 처리될 시간을 설정. (단위:초)
  네트웍의 속도가 나쁠수록 수치 값은 높게 설정하는 것이 좋다.

 

* KeepAlive : Off

- 접속한 채로 요청이 없어도 연결을 지속시킬 것인지 여부 설정. 허용하지 않는 것이 좋다.

 

* MaxKeepAliveRequests : 100

- 클라이언트가 접속된 시간동안 아파치서버에 요청할 수 있는 최대의 개수를 지정. '0'은 제한없음. 

 

* KeepAliveTimeout : 15

- 클라이언트가 접속을 유지한 상태로 아무 요청이 없을 경우 접속을 끊어줄 시간을 지정. (단위:초)

 

* Listen : 80
* Listen : 12.34.56.78:80

시스템의 기본값(local_IP, #80)이외에 다른 IP Address와 포트에 대해서도 연결할 수 있게 설정

- "httpd.conf" 파일 맨 뒤의 가상호스트(Virtual Host)를 설정하기 위해 필요

 

* Include : conf.d/*.conf

- httpd 가 동작될 때 참조할 설정파일의 위치를 정의한다.

- 현재 설정은 /etc/httpd/conf.d/ 경로안의 모든 conf 파일을 포함하여 실행되도록 설정되어 있으며

  가능한 변경하지 않도록 한다.

 

* ExtendedStatus : On

- "server-status" 로 아파치 웹 서버의 상태를 모니터링 할 때 "자세히 정보보기" 기능을

   제공할 것인지 설정(제공:on)

 

* User : apache
* Group : apache

아파치 웹 서버 데몬이 요청을 받았을 때 반환할 user와 group 을 설정
- Server Daemon 이 Standalone Type 방식으로 동작되고, 아파치의 실행이 root 권한으로 동작한 경우 유효하다.

 

 

### Main-Server configuration ###

아파치 웹서버의 주 서버가 사용할 값들을 지정한다.

<VirtualHost> 로 지정한 값이 아니면 모두 여기서 지정된 값이 기본값으로 적용된다.

 

* ServerAdmin : root@localhost

웹 페이지를 로딩시 에러가 출력될 경우 에러페이지내 출력될 관리자 정보(브라우저에 출력될 정보 입력)

- 대부분 해당 웹서버의 관리자 E-mail 주소를 입력하여 사용

 

* ServerName : localhost

클라이언트 브라우저의 주소창에 보여지는 호스트 이름을 지정

- 도메인도 가능하고 IP Address 도 가능하다.

- www를 쓰지않는 호스트에서 www를 쓰는 것처럼 보이게 할 수 있다.

  ex) test.net2free.net(DNS 주소) 을 www.net2free.net(web주소) 으로 지정해서 쓰는 것과 같다고 볼 수 있다.

 

* DocumentRoot : "/var/www/html"

아파치 웹 서버의 웹문서가 있는 기본 경로를 지정

- 디렉터리명을 지정하는 것이므로, 경로의 가장 마지막에 "/"를 입력하지 않도록 한다.

<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>      
                

- Directory 에서 사용할 옵션들을 지정한 부분게 되며, 아래의 옵션들을 더 사용가능하다.

[ None, All, Indexes, Includes, FollowSymlinks, ExeCGI, MultiViews ]


* UserDir : public_html

하나의 웹 서버에서 여러 사용자들의 홈페이지를 각각 관리할 경우 사용자들의 홈페이지 디렉토리 경로를 지정

- ex) bluetails 란 사용자의 홈페이지를 "http://www.net2free.net/~bluetails" 라고 가정했을때 그 페이지의

        리눅스 경로는 "~bluetails/public_html/" 경로가 기본 경로로 사용되게 된다.

 

<Directory /home/*/public_html>
    AllowOverride FileInfo AuthConfig Limit
    Options MultiViews Indexes SymLinksIfOwnerMatch
IncludesNoExec
    <Limit GET POST OPTIONS PROPFIND>
        Order allow,deny
        Allow from all
    </Limit>
    <Limit PUT DELETE PATCH PROPPATCH MKCOL COPY
MOVE LOCK UNLOCK>
        Order deny,allow
        Deny from all
    </Limit>
</Directory>

- 여러 사용자의 홈페이지 기본경로(public_html)의 권한 대한 옵션을 지정


* DirectoryIndex : index.html index.html.var

- 설정 파일내 여러 항목들 중 디렉터리만을 지정하여 사용하는 부분이 참조할 기본 출력 파일을 정의

- 다수를 지정하고 싶을때는 띄어쓰기로 구분하며 순서대로 탐색을 하게 된다.(index.html index.php index.htm 등)

  ex)- Browser -> http://www.net2free.net:9702

- Server 에서는 "DocumentRoot/DirectoryIndex" 형태로 출력시킬 파일을 찾아가게 된다.

 

* TypesConfig : /etc/mime.types

- 웹서버의 mime type을 설정한 파일을 지정

- mime.types 파일은 서버에 의해 리턴될 수 있는 파일명과 mime형식을 기술해 놓은 파일이다.

 

* DefaultType : text/plain

- mime.types 파일에 정의 되어있지 않은 파일 형식으로 요청을 받는 경우, 즉 알 수 없는 문서타입에

   대한 기본적인 응답 mime 타입을 지정


* HostnameLookups : Off

웹 서버의 로그(access_log)를 지정하는 Format 에서 "DNS Lookup"으로 지정하였을 때,

   domain 또는 IP Address로 남길 것인지 지정

- Default 설정은 IP Address로 남기게 되고, Domain 으로 설정(On)한 경우보다 속도가 조금 빠르다.

 

* ErrorLog : logs/error_log

- 아파치 웹서버의 에러로그 기록파일의 경로를 지정

<VirtualHost>부분에서 Log 관련 항목을 설정하지 않는 경우는 위 설정된 경로로 로그가 기록되게 된다.

 

* LogLevel : warn

- 로그를 기록할 때 그 파일내 기록할 내용의 중요도를 설정

중요도는 " debug → info → notice → warn → error → crit → alert → emerg " 가 존재

- 중요도가 낮으면 기록량이 많아지는 단점이 있으므로 서버의 역할에 잘 맞추어 설정하도록 한다.

 

* CustomLog : logs/access_log common

- 임의의 로그 포맷을 지정하여 로그파일에 기록하기 위해 설정

- 형식은 [경로(파일명까지 입력)] [선언명]

- 아파치 1.3.9 이상 버전은 CustomLog 를 <VirtualHost>에서도 사용할 수 있게 제공한다.

=> LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

- 커스텀 로그로 사용될 형식을 지정하는 방법이다.

- 형식은 [ "기록형태" 선언명 ] 으로 지정

- 관리자는 원하는 정보를 지정해서 보기 위해 적당한 Format으로 여러개를 설정해두는 것을 추천한다.

 

* ServerSignature : On

- 서버가 생성하는 문서trailing footer line의 설정을 가능하게 한다.

- 문서의 형식은 "error documents", "FTP directory listings", "mod_status and mod_info output etc.",

  "but not CGI generated documents" 등이 있음.

 

* Alias : /icons/ "/usr/local/apache/icons/"

- 이벤트용 페이지나 관리자 전용 페이지를 만드는 등 필요한 경우에 별칭을 주도록 제공한 항목

- 형식은 [ 별명 "리눅스 경로" ] 로 작성한다.

- 단, Alias 의 경우는 파일과 디렉터리 모두 지정이 가능하므로 "/" 기호에 대한 부분은 주의가 필요하다.

 

* ScriptAlias : /cgi-bin/ "/usr/local/apache/cgi-bin/"

- ScriptAlias는 Alias 와 근본적으로 같은 내용으로 형식도 동일하다.

- ScriptAlias는 지정한 리눅스 경로 안에 있는 파일을 서버가 실행되도록 설정하기 때문에 디렉터리만 지정하도록 권장


* IndexOptions : FancyIndexing VersionSort NameWidth=* HTMLTable Charset=UTF-8

- IndexOPtions는 웹 페이지상에서 디렉토리 목록을 출력할 때의 옵션을 지정

- Standard(볼품없는 기본 텍스트 형태), FancyIndexing(아이콘화 하여 아주 조금 더 예쁜 형태) 형식이 있다.

- 웹서버의 버전, 디렉터리명의 길이 무제한, HTML 형식의 테이블 출력, 문자인코딩(UTF-8) 형식으로 기본 지정됨.

 

- 아래의 내용은 IndexOptions 항목에서 "FancyIndexing" 의 경우 디렉토리 목록을 표시할 때

  출력시킬 아이콘 및 문구를 지정하는 항목이다.

=> AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip

- 내용이 인코딩 타입인 경우 위처럼 나타낸다.

- 형식은 [ "AddIconByEncoding" / "(형식,출력 아이콘 경로)" / "형식" ]

    AddIconByType (TXT,/icons/text.gif) text/*

    ....

- 타입방식으로 선언시 위처럼 나타낸다.

- 형식은 [ "AddIconByType" / "(타입,출력 아이콘 경로)" / "형식" ]

     AddIcon /icons/binary.gif .bin .exe

    .... 

- 확장자 형태의 내용은 위처럼 나타낸다.

- 형식은 [ "AddIcon" / "출력 아이콘 경로" / "확장자" ]

=> DefaultIcon : /icons/unknown.gif

- "AddIcon..." 으로 지정한 항목이 아닌 경우 출력시킬 기본아이콘을 지정

=> AddDescription "GZIP compressed document" .gz
    ....

- AddDescription은 서버가 생성한 인덱스의 파일 뒤에 간단한 설명을 표시할 때 사용.

형식은 [ "AddDescription" / "표시할 설명" / "확장자" ]

 

* ReadmeName : README.html

- 디렉토리 목록표시 가장 하단에 보여줄 설명파일의 이름을 지정.(꼬리말과 유사)

 

* HeaderName : HEADER.html

- 디렉토리 목록표시 가장 상단에 보여줄 설명파일의 이름을 지정.(머리말과 유사)

 

* IndexIgnore : .??* *~ *# HEADER* README* RCS CVS *,v *,t

- 디렉토리 목록을 인덱싱할 때 제외할 파일명을 지정. (디렉터리 목록에 제외될 대상)

쉘 환경의 와일드카드(*, ?)가 허용.

 

* LanguagePriority : en ca cs da de .....

- 언어의 우선순위를 내림차순으로 지정한다. (AddLanguage 의 형식 명칭 참조)

=> AddLanguage en .en
    .....

- AddLanguage 는 문서의 언어 형식을 지정.

- 형식은 [ "AddLanguage" / "형식명칭" / "확장자" ]

 

* Format: Action media/type /cgi-script/location

- Action 과 매칭되는 파일이 호출될때마다 스크립트를 실행시킬 수 있도록 설정

- 형식은 [ "Format: Action" / "매칭형식" / "연결스크립트" ]

 

* ErrorDocument

- 에러발생시 응답을 정의할 수 있는 방법을 정의한다. 3가지 기본 형태를 제공한다.

 

=> ErrorDocument 500 "The server made a boo boo.

- 일반적인 텍스트 형태로 출력

- 형식은 [ "ErrorDocument" / "에러코드번호" / "출력시킬 텍스트" ]

=> ErrorDocument 404 /missing.html

=> ErrorDocument 404 /cgi-bin/missing_handler.pl

- 또다른 페이지로의 연결 (지역적인 방향전환)

- 형식은 [ "ErrorDocument" / "에러코드번호" / "출력시킬 페이지 경로" ]

=> ErrorDocument 402 http://www.example.com/subscription_info.html

- 또다른 페이지로의 연결 (외부 방향전환)

- 형식은 [ "ErrorDocument" / "에러코드번호" / "외부로 출력시킬 페이지 경로" ]

 


### 가상호스트(VirtualHost) 설정 ###

하나의 Apche 웹서버에 여러개의 도메인이나 호스트네임을 설정하여 관리할 경우 설정.

 

Apche 웹서버 설정 파일내 "<VirtualHost> ~ </VirtualHost>" 부분에 정의하여 사용하고

가상호스트에서 설정한 내용은 주 서버 설정과는 별도로 인식되기 때문에 VirtualHost 부분에

설정한 내용이 적용받아 실행된다 볼 수 있다.

가상호스트에 대한 자세한 정보는 http://www.apache.org/docs/vhosts/ 를 참조하시기 바랍니다.

 

버추얼 호스팅에서는 두가지 방법이 존재한다.

ㄱ. 이름기반의 버추얼 호스팅

- 도메인을 사용하는 경우 하나의 도메인에 여러개의 호스트가 존재하는 형태로 출력되는 방법

- ex) www.net2free.net , blog.net2free.net -> 192.168.1.55

 

ㄴ. IP 기반의 버추얼 호스팅

- 하나의 웹서버가 두개의 아이피로 모두 연결이 가능하도록 설정하여 출력되는 방법

- ex) 192.168.1.55 , 192.168.1.150   -> www.net2free.net

 

위 2가지 방법 중 이름을 이용한 호스팅을 하기 위해서는 "NameVirtualHost" 가 정의 되어 있어야 가능하다.

또한 정의 IP 를 이용하여 선언하는 것을 추천한다.

 

* NameVirtualHost : *:80

* NameVirtualHost : 192.168.1.55

- 아래쪽에 선언하는 VirtaulHost 들의 name-base 역할을 할 서버를 지정.

- 형식은 [ "NameVirtualHost" / "IP:Port" ] 로 지정하고, 80번을 이용하는 경우는 Port 를 생략해도 무방.

 

* <VirtualHost www.net2free.net:80>

ServerAdmin webmaster@manualand.co.kr

DocumentRoot /home/sspark/public_html

ServerName www.manualand.co.kr

ErrorLog /home/sspark/public_html/aw/error_log

CustomLog /home/sspark/public_html/aw/access_log common

   </VirtualHost>

 

=> <VirtualHost ServerInfo:Port>

- ServerInfo 부분은 도메인 또는 IP 를 이용하여 설정하고, Port 부분은 자신이 원하는 0~65535 중 설정한다.

   (Port 는 방화벽 해제가 필수이다.)

- 현재 설정하는 VirtualHost 에만 적용되는 사항들로 설정하게 된다.

=> ServerAdmin

=> DocumemtRoot
=> ServerName
=> ErrorLog
=> CustomLog

- 근본적인 내용은 Main 설정 부분에서 안내한 내용과 동일하다.

</VirtualHost>

 

 

//////////////////////////////////// 기타 적용 가능 사항 /////////////////////////////////////////

 

* LockFile : logs/accept.lock

- 아파치 컴파일시 USE_FCNTL_SERIALIZED_ACCEPT나 USE_FLOCK_SERIALIZED_ACCEPT으로 컴파일 했을 때

  사용되는 LockFile의 경로지정시에 사용한다. 기본값으로 가능한 사용.


* ResourceConfig : conf/srm.conf
* AccessConfig : conf/access.conf

- 아파치 웹 서버의 환경설정 파일은 'httpd.conf' , 'srm.conf' , 'access.conf' 로 사용하는데 관리의 용이성을 위해

  'httpd.conf' 내 위 항목으로 각 내용을 정의하여 사용한다.

- 3개의 파일 로딩 순서는 "httpd.conf > srm.conf > access.conf" 로 실행된다.

 

* MinSpareServers : 10
* MaxSpareServers : 20

- 성능향상과 빠른 응답속도를 위해 생성하는 유휴서버(서비스대기 중인 프로세스)의 개수를 설정하는 항목
- 유휴서버가 MinSpareServers의 개수(10) 보다 적으면 추가로 생성, MaxSpareServers의 개수(20)보다 많으면 세션만료


* StartServers : 5  

- httpd 가 시작될 때 자식 프로세스의 갯 수를 설정. 시작시 동시에 띄우게 될 웹 데몬의 갯 수라 보면 된다.

- 데몬 동작 후 시스템의 상황에 따라 동적으로 변동되므로 큰 의미는 없다.

 

* MaxClients : 150

- 접근할 수 있는 클라이언트의 최대 갯 수 설정항목.

지정한 개수이상 클라이언트의 요청 발생시 아파치는 응답하지 않고 이 요청을 무시한다.(시스템의 자원 낭비 방지)

 

* MaxRequestsPerChild : 30

- 아파치 웹서버의 자식프로세스들에 대한 클라이언트의 요청 개수를 지정

- 만약 자식프로세스가 이 값만큼의 클라이언트요청을 받았다면 해당 자식프로세스는 자동으로 죽게되고,

  이 값을 0으로 설정하면 무제한으로 설정이 되므로 적절히 조절할 것.

 

* BindAddress : *  

- 서버가 응답할 수 있는 IP Address를 설정

- 하나의 시스템에 있는 아파치 웹 서버 하나로 여러 웹 서버처럼 관리하는 웹 호스팅 서비스등에서 많이 이용.

- "*" 은 "모든  IP Address" 에 대해 응답, IP Address를 지정한다면 지정한 IP Address에 대해서만 응답

웹 호스팅 서비스를 하고자 한다면 여러개의 IP Address를 ISP로부터 할당받아 지정해 주면된다.

- "httpd.conf" 파일의 'VirtualHost' 부분에서 IP 기반 버추얼 호스팅을 하기 위해서 필수 설정 사항이다.

 

* Port : 80

- 아파치 웹 서버의 기본포트를 지정(특별한 경우가 아니면 기본 포트인 80 을 적용)

사용가능한 포트는 0 ~ 65535이며 1024이하의 포트 번호는 Well Known Port 라고 해서 시스템에서 예약되어

   root 만 Listen 상태로 만들 수 있게 설정되어 있다. 그래서 1024 이상의 포트 번호를 지정해서 사용할 것.
-
Port 를 9702 로 지정했다면, 웹 브라우저로 접근시 [ http://www.net2free.net:9702 ] 형태로 접속해야한다.

- 단, 80번은 default이므로 Port 번호를 생략할 수 있다.

 

 

위 기재된 모든 내용은 httpd.conf 파일내 모든 내용을 담고 있지는 않습니다. 추가로 궁금한 내용이 있거나 꼭 알아야 할 항목들이 있다면

위키피디아를 참조하시거나 문의를 남겨주세요^^

AND

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

※ 해당 내용의 경우 VMware를 이용한 로컬 네트웍 상에서 작업을 하는 내용을 안내하여 드립니당~!

[ 시스템 설정을 위한 내용 ]

설치된 Base Windows  : Windows 7 Pro
설치된 CentOS Server  : CentOS 6.4
설치된 VMware Program : VM workstation 9.0.2

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

리눅스를 사용할때 웹호스팅을 하게 되는 경우 사용자별 사용제한을 두지 않으면
시스템의 HDD 공간을 낭비하게 되는 경우가 발생할 수 있습니다.

이를 방지하기 위하여 사용자별 HDD 사용 공간을 설정할 수 있는데, 이를 바로 "Quota 설정"이라고 합니다.

이제 아래의 방법으로 Quota를 설정해보도록 할게요^^~ Follow ME~!!!

[ Quota 환경설정 ]
첫번째로 Quota를 설정하기 위해선 해당 파일시스템에 대하여 fstab을 이용하여 "usrquota" 옵션을 설정해주어야
하는데요.. 상세한 내용은 "/etc/fstab 활용하기" 부분과 아래 그림을 참고하여 주세요^^


 위 그림에서 보는바와 같이 Quota를 적용하기 위한 파일시스템에 내용을 기재하여 주시고 재부팅 또는 mount를 통하여
quota 설정을 위한 환경을 만드시기 바랍니다.
 설정을 위한 환경의 적용된 사항을 확인하기 위해서는 "mount" 명령을 이용하여 아래와 같이 quota 여부를 확인하세요

두번째로 Quota를 설정하려면 "/" 파티션에서 "aquota.user" 파일을 생성하여 줍니다(touch 이용).


[ Quota 적용하기 ]
이제 Quota 설정을 위한 환경설정은 마친 상태이고 본격적으로 사용자별 Quota 적용을 위한 명령어는 아래와 같습니다.
============================================================================================================
1. quotaoff -avug : 쿼터 종료

2. quotacheck -avug : 쿼터 체크(쿼터 설정 파일이 없으면 자동으로 생성되게 됩니다.)
    ※ 해당 명령어의 실행을 위해서는 필히 쿼터를 종료한 상태로 진행하여야 합니다. 

3. quotaon -avug : 쿼터 시작

4. repquota -a : 현재 설정된 쿼터 설정환경을 확인.
    ※ 해당 명령어의 실행을 위해서는 쿼터가 시작된 상태여야 확인이 가능합니다.
 
5. edquota -u username(ex. test) : 사용자(test)의 쿼터 정보를 수정한다
 
6. edquota -p test user1 : 사용자(test)의 쿼터 정보를 사용자(user1)에게 복사.
    ※ 해당 명령어로 복사할 사용자는 동일한 파일 시스템내 사용자들에게만 적용할 수 있습니다. 
============================================================================================================


[ Quota 정보확인 ]
위 안내드린 사항으로 하나의 예를 들어 정보를 확인 해보겠습니다. 
관련 사항으로 쿼터 설정시 설정된 정보에 대한 상세 내용도 함께 알려드릴게요^^

아래 내용은 설정을 모두 적용한 후 "repquota -a" 명령어를 이용하여 출력된 정보에서 발췌한 내용입니다. 
============================================================================================================
*** Report for user quotas on device /dev/sdb3
Block grace time: 7days; Inode grace time: 7days
                        Block limits                       File limits
User     " "      used    soft    hard  grace      used    soft    hard  grace
----------------------------------------------------------------------
root        --     10289        0         0                     5        0         0
test         --          5    9216   10240                     5        0         0
user1      --          4    9216   10240                     4        0         0
user2      --         25    9216   10240                   13        0         0 

1. /dev/sdb3 : Quota 가 적용된 파일시스템 정보
2. Block grace time : 파일용량의 초과시 사용자 잠금 전까지의 유예기간
3. Inode grace time : 파일갯수 초과시 사용자 잠금 전까지의 유예기간

4. User : Quota 내용을 적용하기 위한 사용자명  
5.  " " : 비어 있는 공간이지만 이해를 돕기위해 쓴 내용이고 출력되는 사항은 아래와 같이 3가지 입니다.
          (-- : 용량을 초과하지 않은 상태, +- : 용량을 초과한 상태, -+ : 파일의 갯수를 초과한 상태)
6. Block limits : 제한할 수 있는 총 사용량 (단위는 Kbyte)
    - used : 사용하고 있는 용량
    - soft : 9216 Kbyte 로 제한이 걸려있으며, 보통 hard 값의 10%를 제한 내용을 기재하여 둡니다.
    - hard : 10240 Kbyte 로 제한이 걸려있는 상태입니다.
    - grace : 사용하고 있는 용량을 초과한 경우 출력되는 곳

7. File limits : 제한할 수 있는 한번에 전송하는 파일의 용량 (단위는 Kbyte)
    - used : 사용하고 있는 파일 갯수
    - soft / hard : "Block limits" 동일한 환경으로 사용하며, 현재 적용되어 있지 않은 상태입니다.
    - grace : 사용하고 있는 파일의 갯수를 초과한 경우 출력되는 곳 
============================================================================================================

이상으로 Linux 시스템에서 사용하는 Quota 설정에 대해 알아보았는데요..
역시나 모든 것은 반복 숙달을 하시면서 익혀가시는 것이 가장 좋은 방법이라고 생각합니다^^
그럼 마스터가 될때까지~~ 열심히 Follow ME~!!! 

AND

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

※ 해당 내용의 경우 VMware를 이용한 로컬 네트웍 상에서 작업을 하는 내용을 안내하여 드립니당~!

[ 시스템 설정을 위한 내용 ]

설치된 Base Windows : Windows 7 Pro
설치된 Server CentOS : CentOS 5.8
설치된 VMware Program : VM workstation 8.0.1

메일 서버 패키지 파일 : sendmail, sendmail-cf
=============================================================================================================================

- 메일 서버의 개요 및 동작 원리 -
메일 사용자가 메일 클라이언트(ex:outlook)를 사용해서 메일을 보내는 경우 "e-mail"은 메일서버로 접속한 뒤 받는 사람

메일 주소가 현재 사용 가능한지 여부를 인증(SMTP)받아야 한다.

사용가능여부의 인증이 성공하면 메일서버의 MTA(Mail Transfer Agent)는 SMTP(Simple Mail Transfer Protocol)를
이용하여 받는 사람(@뒤쪽 도메인의 메일 서버 정보를 NS/DNS 서버로 부터 질의하여 검색)의 메일 서버로 전송한다.

메일을 수신한 메일서버는 지정된 디렉터리(/var/spool/mail)에 수신메일을 저장 후 수신자가 접속할 때까지 기다린다.

메일은 받는 사람이 자신의 메일 클라이언트로 접속하여 자신의 메일 계정으로 수신된 메일을 확인, 삭제 또는 다운로드 등

메일 서버로 부터 응답을 결정하여 메일 서버로부터 전송받게 된다.

- 메일 서버의 구분 -
ㄱ. SMTP 서버 (MTA) - Sendmail, Qmail ... 등
ㄴ. POP 서버 (MDA:Mail Delevery Agent) - ipop3, imap ... 등
ㄷ. Mail Client (MUA:Mail User Agent) - Outlook express, 웹메일 ... 등


[ 메일서버 참고사항(CentOS 기준) ]




이제 메일 서버를 실제로 설정하여 사용할텐데요. DNS 구성은 Host 만 추가하면 되므로 구성이 완료되어 있다는

전제하에 진행하도록 하겠습니다.

[ 메일서버 환경 설정(/etc/mail) ]

※ 메일 서버 설정 파일 : sendmail.cf, sendmail.mc


1. sendmail.cf 파일을 삭제

2. sendmail.mc 파일을 수정
(빨간색이 수정사항이며 수정전 백업은 필수!!!)

- 52 Line : dnl TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl - dnl 삭제
- 53 Line : dnl define('confAUTH_MECHANISMS', 'EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl - dnl 삭제
- 116 Line : DAEMON_OPTIONS('Port=smtp, Addr=0,0,0,0, Name=MTA')dnl

3. m4 유틸리티로 sendmail.cf 파일을 생성 (2번 사항의 sendmail.mc 파일의 수정부분을 반영하여 생성됨)

- m4 sendmail.mc > sendmail.cf

4. sendmail 환경설정 (3번에서 생성한 sendmail.cf 파일로 빨간색 부분이 수정된 부분)
- Cwmail.noose.net : 메일 서버로 사용될 Domain 을 지정
- Djmail.noose.net : Telnet 을 통해 확인을 하는 경우에도 강제적으로 Domain 이 출력되게 설정


※ 1. "/etc/mail/access", "/etc/mail/local-host-names" 파일에 할당받은 도메인 명을 기록해야 함
    2. "Cw" 와 "Dj" 중 한개의 옵션만을 사용해야 한다. 두개를 같이 사용하는 경우 데몬 재시작시 오류 발생


[ 메일서버 방화벽 설정해제 ]
1. /etc/sysconfig/iptables 를 수정 (" "안쪽 부분(붉은색만)을 라인 추가해서 입력해야함!!!)
- "-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 25 -j ACCEPT" //SMTP가 사용하는 포트
- "-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 110 -j ACCEPT" //POP3가 사용하는 포트


[ 시스템 시작시 메일 서비스 자동시작 설정 ]
1. "ntsysv" 에서 아래의 두가지 서비스를 등록
- "dovecot"
- "saslauthd"
- 두가지 서비스의 "[]" 부분에 "*" 표시를 등록한다.


[ 적용한 사항의 확인 ]
1. name/sendmail 의 데몬을 재시작
# /etc/rc.d/init.d/named restart
# /etc/rc.d/init.d/sendmail restart

2. 일반 PC에서 도메인 질의
C:\>nslookup
>mail.noose.net
Server: ns.noose.net
Address: 192.168.X.128#53

Name: mail.noose.net
Address: 192.168.X.130#53

3. 일반 PC에서 25번 포트의 telnet 확인
- C:\>telnet 192.168.X.130 25 입력 후 아래의 " " 안의 메세지 내용이 출력되어야 함    //SMTP가 사용하는 포트 확인
" 220 mail.noose.net ESMTP Sendmail 8.13.8/8.13.8; Tue, 26 Apr 2011 15:20:18 +09 00 "
- C:\>telnet 192.168.X.130 110 입력 후 아래의 " " 안의 메세지 내용이 출력되어야 함     //POP3가 사용하는 포트 확인
" +OK Dovecot ready. "

4. Outlook Express 에서 메일 기능의 정상 여부 확인

AND

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

 사용자 관련 명령어

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

- id -

1. 정의 : 사용자의 uid, gid, group 에 대한 내용을 출력


2. 형식

  - #id [UserName]



- groups -

1. 정의 : 사용자가 속한 그룹의 정보를 출력


2. 형식

  - #groups [UserName]



- su(Switch User) - [ 중요도 : ☆☆☆ ]

1. 정의 : 사용자를 전환하고자 할 때 사용


2. 형식

  - #su [UserName]
  - #su - [UserName]  : '-' 옵션을 사용

3. 정보
  [ 명령어 사용 제한사항 ]
  - 관리자(#) -> 사용자($)
  - #su noose : 암호를 물어보지 않는다.
  - $

  - 사용자($) -> 관리자(#)
  - $su root   : 암호를 물어본다
  - 암호 :     : root 비밀번호를 입력 후 root 로 전환
  - #

  - 사용자($) -> 사용자($)
  - $su noose1 : 암호를 물어본다
  - 암호 :     : noose1 비밀번호를 입력 후 noose1 로 전환
  - #

  ※ su 명령어를 이용하는 경우
     - 관리자 → 사용자 로 변경 : 암호가 불필요
     - 사용자 → 관리자 로 변경 : 암호가 필요 (관리자 암호)
     - 사용자 → 사용자 로 변경 : 암호가 필요 (변경하고자 하는 사용자 암호)


  [ 명령어 옵션에 대한 차이 ]
  - $su root
  - 암호 :
  - #
  - #ifconfig  : 명령어를 사용할 수 없다.
  - #exit
   ※ 단, '#/sbin/ifconfig' 이라고 하면 정상 동작.

  - $su - root
  - 암호 :
  - #
  - #ifconfig  : 명령어를 정상적으로 사용할 수 있다.
  - #exit

※ "su" , "su -" 명령어의 차이
   - $su     : 시스템 환경변수 정보를 변경하지 않고 사용자만 전환된다.
   - $su -   : 시스템 환경변수 정보를 변경하면서 해당 사용자로 전환된다.

    ◎ 'su' 명령어가 아닌 'su -' 명령어로 사용자 전환을 할 것.
       -> su 명령어로만 사용자를 변경하면 최초로 접속한 사용자의 환경변수를 그대로 사용하기 때문이다.

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

- who / whoami / w -

1. 정의 : 터미널(원격 접속)을 통해 접속된 사용자의 정보를 확인

 

2. 형식

  - #who

     : 시스템에 접속한 사용자의 이름, 열려 있는 포트번호, 접속시간, 접속IP를 확인


  - #whoami

     : 시스템에 접속한 사용자의 이름만 출력


  - #who am i

     : who 명령어로 확인되는 내용 중 자신에 해당하는 부분만 출력


  - #w

     : who 명령어로 확인되는 내용과 런타임, 실행되는 프로그램 내용을 출력


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

 검색 관련 명령어

==========================================================================================
- which -
1. 정의 : 실행파일을 찾고자 할 때 사용

 

2. 형식
  - #which [파일명]

 

3.예제
  - #which su  : 정상 검색 (/bin/su)
  - #which vsftp  : 오류발생
  - #which vsftpd : 정상 검색
   ※ 실행파일(명령어)의 풀네임으로 검색하여야 한다.


  - #which useradd usermod userdel
  - #which useradd su ifconfig
    -> 다수의 Argument 값도 인식이 되고, 서로다른 경로라도 무관

 

  [ 섭수! ]
  - #which vsftp  : 오류발생(경로를 확인)
  - #env | grep PATH
     -> 두개의 경로가 같게 출력

 

  - #which ifconfig : 정상출력(/sbin/ifconfig)
  - #su - noose
  - noose]$which ifconfig : 오류발생

 

   ※ which 명령어로 확인되는 명령어의 경로는 환경변수의
      "PATH" 값을 참조하여 검색된다.

 

==========================================================================================
- find -
1. 정의 : 파일을 검색할 때 사용

 

2. 형식
  - #find [검색시작경로] [옵션] [검색조건]

 

3. 옵션
  - name : 이름을 조건으로 사용

  - exec : 검색된 결과를 배열로 받아 특정 명령을 실행하도록 적용
  - print : 결과값을 화면으로 출력(Linux 기본값, Unix 필수값)
  - perm : 특정권한 유무에 대한 조건을 사용
  - atime : access time을 조건으로 사용 (ls -lu=마지막 접근시간)
  - mtime : modification time을 조건으로 사용 (ls -l=마지막 수정시간)
  [시간정보]
    * +n : ((n*24)+24) 이전 시간에 작업한 내용을 출력
    *  n  :(n*24) 시간동안 작업한 내용을 출력
    * -n : n ~ Now 동안 작업한 내용을 출력

 

4. 실습예제
  - #man find
  - #find /etc -name passwd    : "/etc/" 경로 아래에서 'passwd' 이름의 파일을 검색
  - #find / -name su  : "/" 경로 아래에서 'su' 이름의 파일을 검색
     => 단, "/" 에서 검색을 시작할 경우 시간이 오래 걸릴 수 있음.

 

  - #find /etc -name passwd
  - #find /etc -name passwd -print
     => Linux 시스템은 기본값으로 적용되어 있어 차이가 없다.

 

  - #find /backup -perm 600 : "backup" 내 600 허가권인 파일을 검색
  - #find / -perm 4000  : "/" 내 4000 허가권인 파일을 검색 (오류)
  - #find / -perm +4000 : "/" 내 4000 이상인 파일을 검색
     => 취약점 분석 : setuid 설정된 파일을 검색
         (ex : #find / -perm +4000 > /backup/setuid)
 
  - #find /backup -mtime +n
  - #find /backup -mtime n
  - #find /backup -mtime -n
   ※ ls -l 명령어로 보이는 시간정보에서 Modification Time 확인가능

 

  - #find /backup -atime +n
  - #find /backup -atime n
  - #find /backup -atime -n
   ※ ls -lu 명령어로 보이는 시간정보에서 Access Time 확인가능


  - #find /backup -name "test*" -print  : /backup 경로내 "test" 로 시작되는 정보를 검색하여 출력

  - #find /backup -name "test*" -exec rm {} \; : 위 결과로 나타난 정보를 삭제하도록 적용

 

==========================================================================================
- grep -
1. 정의 : 파일로 부터 일정한 패턴값을 찾을 때 사용

 

2. 형식
  - #grep [패턴] [파일명]
  - #grep [옵션] [패턴] [파일명]

 

3. 옵션
  - i : 대/소문자 구분없이 검색가능
  - n : 패턴의 실제 위치의 행번호와 함께 내용을 출력
  - v : 패턴을 제외한 내용을 출력 (특정내용 삭제시 이용)

 

4. 실습예제
  - #grep noose /etc/passwd
  - #grep wheel /etc/group
  - #grep password /boot/grub/grub.conf

 

  - #grep -i RooT /etc/passwd
  - #grep -i virtualhost /etc/httpd/conf/httpd.conf
    : 대/소문자를 구분없이 패턴 값으로 내용을 검색함

 

  - #grep -n root /etc/passwd
  - #head -15 /etc/passwd | nl
    : 패턴 내용을 위치하고 있는 행번호까지 함께 출력

 

  - #grep -in document /etc/httpd/conf/httpd.conf
    : 'i', 'n' 옵션의 혼용으로 오류사항을 검색할 때 유용하다.

 

  - #grep -v root /etc/passwd
  - #grep -v sdb /etc/fstab > /backup/fstab
    : Mount 를 위해 추가한 /dev/sdb 정보를 삭제하여 원본 fstab을 만들어
      백업시킬수 있음.

 

 [ 응용예제 ]
  - #cat /etc/passwd | grep [사용자명]
  - #cat /etc/group | grep [그룹명]
  - #rpm -qa | grep [패키지명]  : 패키지명에 해당하는 패키지를 출력
  - #env | grep [변수명]         : 변수명에 해당하는 환경변수 내용 출력
  - #useradd -D | grep HOME : 사용자의 기본 홈 디렉터리만 출력
  - #useradd -D | grep -v MAIL : 사용자 기본설정 중 Mail 내용만 빼고 출력

 

==========================================================================================
- egrep -
1. 정의 : 파일로 부터 일정한 패턴값을 찾을 때 사용
            (grep 보다 확장된 형태로 가능)

 

2. 형식
   - #egrep [옵션] [패턴] [파일명]

 

3. 옵션
   - a|b : a or b 의 검색결과 출력

 

4. 예제
   - #egrep 'root|noose' /etc/passwd
      : '/etc/passwd' 파일내 'root' 또는 'noose'를 포함하는 내용을 출력
   - #env | egrep 'HOME|PATH|SHELL'

      : 시스템 환경변수 중 HOME,PATH,SHELL 의 값을 모두 출력

 

 

==========================================================================================
시스템 응용관리 명령어

==========================================================================================
 - file -
1. 정의 : 파일의 속성정보 및 디스크의 포맷정보를 확인가능


2. 형식
   - #file [옵션] [파일명]


3. 옵션
   - s : 디스크의 포맷정보를 확인


4. 예제
조건 : pwd = /backup, tarfile = /backup/test.tar, /backup/aaa


[ 파일정보확인 ]
   - #file /backup/test.tar : tar archive
   - #file /backup/aaa : tar archive
   - #file /etc/passwd : ASCII text
   - #file /usr/bin/passwd : setuid, executable


[ 디스크정보확인 ]
   - #file -s /dev/sdb7 : ext3 filesystem data
   - #file -s /dev/sdb3 : data
    ※ mkfs 명령어가 사용되어 포맷된 형식을 확인 가능

 

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

- ln -

1. 정의 : 서버 설치 후 시스템 관리에 용이하도록 스크립트 또는 경로 이동의 최소화에 자주 사용


2. 링크의 종류

 [ 하드 링크 (Hard Link) ]

    ㄱ. 형식

       - #ln [Source 파일] [심볼릭 링크 파일이 생성되는 디렉터리] 파일명

    ㄴ. 특징

       - 원본이 삭제되어도 링크파일에는 영향을 주지 않는다.(cp와 유사)


 [ 심볼릭 링크(Symbolic Link) ]

    ㄱ. 형식

       - #ln -s [Source 파일] [심볼릭 링크 파일이 생성되는 디렉터리] 파일명

    ㄴ. 특징

       - 원본이 삭제되면 링크파일이 동작되지 않는다.(바로가기 키)


 ※ 링크 생성시 유의사항 : 파일 생성 시 반드시 절대경로로 생성할 것!

 

==========================================================================================
- PS(Process) -

1. 정의 : 현재 동작하고 있는 프로세스의 현황을 출력
            (Windows 의 "작업관리자"와 유사)


2. 형식
   - #ps [옵션]
   - #pstree [옵션]


3. 옵션
   [ ps ]
   - a  : 현재 실행하고 있는 전체 프로세스(일반사용자들 포함)
   - e  : 모든 프로세스가 실행하는 정보를 출력
   - f  : 출력할 정보의 내용을 풀 포맷형식으로 출력


   [ pstree ]
   - n  : PID(ProcessID) 순서로 정렬하여 출력
   - p  : 프로세스명과 PID를 함께 출력


4. 예제

   - #ps      : 현재 로그인한 사용자에 대한 CMD 정보만 간단하게 출력
   - #ps -aef   : 모든 프로세스정보를 풀 포맷 형식으로 출력
   - #ps -aef | grep [XX]  : XX 내용을 실행하는 프로세스 정보만 출력


   - #pstree
   - #pstree -np
   - #pstree -np | grep [XX]  : XX 내용을 실행하는 프로세스 정보만 출력

 

==========================================================================================
- wget -
1. 정의 : 웹서버에서 파일을 다운로드 받을 때 사용


2. 특징

   - 인터넷이 연결되어 있는 상태에서만 지원

   - PWD 경로내 파일이 다운로드 됨


3. 형식

   - #wget [URL]

   - #ls -l     : URL 정보를 이용하여 원하는 파일이 다운로드되었는지 확인하세요.

 

==========================================================================================
- pwconv/pwunconv -
1. 정의 : /etc/shadow 파일을 복구할때 이용
  
2. 형식
  - #pwunconv : shadow 파일을 참조하지 않도록 설정
  - #pwconv : shadow 파일을 참조하도록 설정
                   (파일이 존재하지 않으면 /etc/passwd 파일을 참조하여 재 생성)

 

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

- wc -

1. 정의 : 파일내 단어, 문자, 라인의 수를 출력


2. 형식

  - #wc [옵션] [argument]


3. 예제

  - #wc /etc/passwd      : 사용자 정보파일내 단어, 문자, 라인의 수 정보를 확인

  - #cat /etc/passwd | wc -l    : 시스템의 사용자 수를 확인 가능

  - #ps -ef | wc -l         : 시스템의 동작 중인 프로세스 수를 확인 가능

  - #rpm -qa | wc -l      : 시스템내 설치된 패키지의 수를 확인 가능

==========================================================================================
시스템 로그관련 명령어

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

- last -

1. 정의 : 로그인 정보를 화면에 출력

 

2. 형식

  - #last      : 시스템내 로그인 내역에 대한 정보를 출력

  - #last UserName    : UserName 계정의 로그인 내역을 출력


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

- lastlog -

1. 정의 : 사용자별로 가장 마지막 로그인 정보만 출력

 

2. 형식

  - #lastlog      : 시스템내 '/etc/passwd' 파일을 참조하여

                       모든 계정들의 마지막 로그인 정보를 출력


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

- lastb -

1. 정의 : 접속실패에 대한 로그 정보를 출력

 

2. 형식

  - #lastb      : 시스템에 로그인 시도를 하였다가 실패한 내역을 출력

 


AND

- RPM(RedHat Package Manager) -
1. 정의 : 리눅스에서 패키지를 설치/수정/삭제/확인 할 수 있는 패키지 관리자
            (Windows 의 "프로그램 관리자" 와 유사)

 

2. 형식
  - 설치 : #rpm -ivh [풀 패키지명]
  - 수정 : #rpm -Uvh [풀 패키지명] (업그레이드 형식)
  - 삭제 : #rpm -e [패키지명]
  - 질의 : #rpm -qa | grep [패키지명(일부가능)]

 

3. 옵션
  - i : install - 설치
  - v : verbose - 자세히 출력
  - h : hash - '#'으로 화면에 출력
  - e : erase - 삭제
  - q : question - 질의
  - nodeps : no dependencies - 의존성을 없애고 설치
  - U : upgrade - 설치된 패키지를 버전업할 때 이용
          (설치하려는 버전이 더 높은 경우 기존 설치된 패키지를 지우고 설치)

 

4.  RPM 파일 설명
   [패키지 파일 : mysql-5.0.77-4.el5_6.6.i386.rpm]
   - mysql : 패키지명
   - 5.0.77 : Upgrade Version (설치하는 패키지의 버전)
   - 4.el5_6.6 : Update Version (패키지가 업데이트 된 버전)
   - i386 : Architecture (시스템의 플랫폼 형식)
   - rpm : 확장자

 

   [패키지의 종류]
   - 단일 패키지 : 하나의 pkg(RPM) 파일을 설치 후 관련 서비스가 가능한 패키지
   - 다중 패키지 : 여러개의 pkg(RPM) 파일이 하나의 패키지 이름으로 묶여서 모두
                       설치 후 서비스가 가능한 패키지(특징 : 대표pkg 존재)

 

5. 실습예제
  [ 패키지 설치를 위한 확인 ]
  - #uname -a(-i)   : 아키텍처를 확인
  - #rpm -qa | grep 패키지명  : 설치하려는 패키지명의 설치 및 버전 확인
    (#rpm -qa | grep mysql)

 

  [ 패키지 설치 ]
  - #rpm -ivh mysql-bench-5.0.77-4.el5_6.6.i386.rpm
     : mysql-bench 패키지 설치 -> 의존성 오류 발생으로 설치불가

  - #rpm -ivh mysql-5.0.77-4.el5_6.6.i386.rpm : mysql 패키지 정상설치
  - #rpm -i mysql-bench-5.0.77-4.el5_6.6.i386.rpm
      : 옵션없이 mysql-bench 설치시 바로 프롬프트가 출력되어 확인절차가 필요

  - #rpm -ivh mysql-connector-odbc-3.51.26r1127-2.el5.i386.rpm
      : 의존성 오류가 발생하여 설치 불가
  - #rpm -ivh --nodeps mysql-connector-odbc-3.51.26r1127-2.el5.i386.rpm
      : 오류가 발생한 패키지의 의존성을 무시하고 설치


  [ 패키지 수정 ]
  - #rpm -Uvh


  [ 패키지 삭제 ]
  - #rpm -e mysql  : mysql 패키지를 삭제
                             -> 의존성 오류가 발생

  - #rpm -e --nodeps mysql : 의존성을 무시하여 삭제

 

 ※ RPM 의 단점
    - pkg들의 의존성이 발생(ex: 다중pkg의 경우 대표pkg 부터 설치해야함)
    - 설치시 하나씩 설치해야하는 번거로움이 있다.

 

 ※ RPM 의존성 해결방안
    - 다중pkg 의 경우 대표pkg 부터 설치한다.
    - 삭제 또는 설치하려는 pkg가 의존성이 발생한 pkg와 대표pkg 명이 같으면
       "--nodeps" 옵션을 사용하면 안됨.

 

==========================================================================================
- yum(Yellowdog Update Manager) -
1. 정의 : 리눅스에서 pkg를 설치/수정/삭제/확인 하기 위한 도구
            (의존성을 해결한 프로그램)

 

2. 형식
  - 설치 : #yum [-y] install [패키지명]
  - 수정 : #yum [-y] update [패키지명]
  - 확인 : #yum list (rpm -qa | grep 으로 확인하는 경우가 많음)

 

  - 삭제 : #yum [-y] remove [패키지명]

    * 유의사항
       -> 삭제하기 위한 대표pkg 명을 입력하여야 함
       -> 의존성 발생 pkg 까지 모두 삭제하므로 신중히 사용해야 함
           ==> 가능한 rpm 을 이용하여 삭제할 것!

 

3. 실습예제
  [ 패키지 설치 ]
  - #yum install telnet-server : telnet-server 패키지 설치시도

  - #yum install telnet*
  - #yum install mysql-*
      : "*" 를 이용하여 여러개의 pkg도 한번에 설치가 가능

  - #yum -y install telnet-server : telnet-server 패키지 설치완료

 

  [ 패키지 확인 ]
  - #yum list  : 시스템내에 전체 패키지내용을 출력
  - #yum list mysql : mysql 패키지의 설치된 정보 및 update 가능 내용도 출력

 

  [ 패키지 수정 ]
  - #yum update mysql : mysql 패키지의 업데이트 버전을 설치시도
  - #yum -y update : list 로 확인되는 모든 패키지의 업데이트를 한다.

 

  [ 패키지 삭제 ]
  - #yum remove telnet-server  : telnet-server 패키지 정상삭제
  - #yum remove mysql  : 의존성이 발생하는 패키지도 모두 삭제를 시도

 

==========================================================================================
※YUM 과 RPM 의 차이점

[ RPM ]

  1. 의존성이 발생한다.
  2. pkg를 하나씩 설치해야하는 번거로움
  3. On/Off Line 모두 사용 가능
  4. pkg 명의 일부만 알아도 검색으로 설치가 가능

 

 [ YUM ]

  1. 의존성을 해결한다.
  2. 필요한 경우 pkg를 모두 함께 설치 (mysql-*)
  3. On Line 상태에서만 가능
  4. pkg 명의 일부만 아는 경우 필요없는 pkg를
     설치할 가능성이 있음 (php* - php53 도 설치)

 

AND

* File System 에 대해 궁금하신 부분은 아래 글을 참고해주시기 바랍니다.

2013/12/31 - [Infomation's] - File System 이란 무엇인가?

 

리눅스에서는 파일시스템을 ext 계열로 사용하고 있으며, 현재는 ext3/ext4 형태로 사용하고 있습니다.

파일시스템을 만들기 위해 파티션 작업을 하는 부분과 파일시스템 생성/사용 부분으로 알아봅시다.

 

우선적으로 Device 를 인식하는 부분을 알고 아래의 내용을 따라서 진행해보시기 바랍니다.

※ 단, CentOS 6.X 부터는 IDE Type 에 대한 부분도 SCSI 로 인식되어집니다.

* SCSI Device : /dev/sdX(a ~ )    -> ex) 1번째 SCSI HDD : /dev/sda

- Partition : /dev/sdXN(0 ~ )  -> ex) 1번째 SCSI HDD 2번째 Partition : /dev/sda2

   -> ex) 3번째 SCSI HDD 5번째 Partition : /dev/sdc6 (extended 파티션 때문에 1개가 늘어남)

* IDE Device : /dev/hdX(a ~ )      -> ex) 1번째 IDE HDD : /dev/hda

- Partition : /dev/hdXN(0 ~ )  -> ex) 2번째 IDE HDD 3번째 Partition : /dev/hdb3

   -> ex) 1번째 SCSI HDD 6번째 Partition : /dev/hda7 (extended 파티션 때문에 1개가 늘어남)

 

 

##### Partitioning (파티션 설정) #####

 

- fdisk -
1. 정의 : 물리적인 HDD를 논리적으로 분할하여 사용하기 위한 명령어
             (파티션 설정을 위한 명령어)

 

2. 형식
   - #fdisk [옵션] [장치명] : 상세 옵션의 경우 fdisk 메뉴얼 참조

 

3. 옵션
  - l : List 형태로 파티션의 정보를 확인

 

 

※ Partition 알아두기

Disk 라고 불리는 HDD 는 아래와 같이 세 종류의 파티션 설정을 Default 로 가지고 있다.

또한, 각 Disk 별로 가질 수 있는  갯 수 제한이 있으니 참고하기 바랍니다.

 

  * Primary (주 파티션)  [ 4개 제한]

=> 기본적인 파티션영역, 디스크 저장소 역할

※ Extended 영역 뒤로 생성 금지 (파티션 무빙이 불가능하므로)

 

  * Extended (확장 파티션) [ 1개 제한 ]

=> Primary 영역의 갯 수 제한을 보완, Logical 의 그릇 역할 (저장소 역할 X)

※ 생성시 Primary 1개 역할을 겸함, 5개 이상 파티션 필요시 필수 파티션,
    생성시 디스크의 마지막까지 영역을 설정할 것.

 

  * Logical (논리 파티션) [ ∞ 개 제한 ]

=> Extended 영역 안에서만 존재 가능, Extended 영역 안에서는 Primary 와 동일함 (저장소 역할 O)

 

※ 파티션명이 "5" 부터 시작 (/dev/sda5, /dev/hdb5, /dev/sdc7 등)

 

 


 

##### Creating File System (파일시스템 생성) #####
- mkfs(Make File System) -
1. 정의 : 설정된 파티션을 mount 할 수 있는 상태의 파일시스템으로 변환시켜주는 명령어
            (Windows의 "format" 과 유사)

 

2. 형식
   - #mkfs.[파일 시스템 형식] [파티션명]
   - #mkfs -t [파일 시스템 형식] [파티션명]
     ※mkfs 명령어 이용시 Extended 형식의 파티션은 사용할 필요가 없다.

 

3. 실습
   - #mkfs -t ext4 /dev/sdb5

   - #mkfs.ext4 /dev/hda7

 

  ※ 예외사항

    - #mkfs.ext3 /dev/sdc
        -> mkfs 명령어 의 Argument 로 파티션이 아닌 장치명으로 입력하면 해당장치의 설정했던 파티션 정보를

      모두 삭제되는 오류가 발생

 

 

##### Using File System (파일시스템 사용) #####
- mount/umount -
1. 정의 : 물리적인 파티션을 논리적인 저장소로 인식하거나 해제하는 과정

 

2. 형식
  [mount]
   - #mount [파티션명] [마운트지점(디렉터리)]

 

  [umount]
   - #umount [파티션명]
   - #umount [마운트지점(디렉터리)]

 

  [ 마운트 정보확인 ]
  - #mount
  - #df -h  : 옵션을 제외한 Mount 정보가 한 눈에 보기 쉽게 출력

 

 ※ 단, mount 명령어로 사용한 정보는 시스템이 reboot 되거나 halt 상태가 되면 초기화된다.


- 부팅시 자동 Mount -
1. 정의 : 시스템이 reboot 되거나 halt 상태가 되면 mount 정보를 가지는 /etc/mtab 파일의 내용이

            모두 초기화 되므로 시스템이 부팅하면서 참조되는 /etc/fstab 파일을 이용하여 자동 마운트를 설정한다.

 

2. 설정파일 : /etc/fstab

 ※ "/etc/fstab" 부분의 상세 내용은 아래글을 참조하여 주세요^^

 

2011/04/14 - [Linux/Tip & Tech] - "/etc/fstab" 파일을 활용하여 자동 마운트하기

 

3. 참고사항

- /etc/fstab 파일내 정의된 정보는 mount 명령어 사용시 Device 또는 Mount Point 만으로도 Mounting 이 가능

- /etc/fstab 파일의 편집에서 실수하는 경우 시스템이 로딩이 불가능할 수 있으므로 필히 백업하거나 Rescue 를 알아두기

 

 

##### Using File System (파일시스템 사용-추가) #####

CentOS 와 RHEL 을 기준으로 6.X 버전에서는 IDE Type 의 HDD 를 지원하고 있지 않습니다.

그래서 IDE HDD 를 추가하게 되면 "/dev" 로 표기되던 파티션 및 디스크정보가 순서가 뒤바뀌는 경우가

종종 발생하게 됩니다. 이를 방지하기 위해 UUID 라고 하는 물리주소를 이용하는데요.

위에서 배운 부팅시 자동마운트를 설정할때도 UUID를 이용하여 적용하는 사례가 많습니다.

아래의 "blkid" 명령어로 UUID 를 확인해서 적용하시면 문제가 해결될 수 있습니다.

 

- blkid -
1. 정의 : 블럭장치에 대한 속성 정보를 설정하거나 출력시 사용

 

2. 형식

   - #blkid    : 현재 시스템내 존재하는 모든 블럭장치의 UUID를 출력

 

   - #blkid -p -u filesystem 파티션

                 : 해당 파티션의 상세 속성정보 출력

AND

- 사용자/그룹 관련 파일 정보 -

 ※ /etc/passwd 영역별 내용 설명
    [noose:x:500:500:noose:/home/noose:/bin/bash]

       - noose : 사용자명
       - x : 비밀번호
       - (u)500:(g)500 : UID, GID
       - (c)noose : Comment(이름)
       - (d)/home/noose : 해당 사용자의 홈 디렉터리
       - (s)/bin/bash : 쉘(shell)


 ※ /etc/shadow 영역별 내용 설명
    [noose:$1$GtaDKM2q$MDhN4r8aOwwUEwNFgKbFL1:15349:0:99999:7:::]
       - noose : 사용자명
       - ?????????? : 비밀번호
       - 15349 : 비밀번호 생성일자
       - 0 : 비밀번호 만료 후 재설정까지의 인터벌
       - 99999 : 비밀번호 설정 후 만료까지의 인터벌
       - 7 : 비밀번호 만료 후 경고일자


 ※ /etc/group 영역별 내용 설명
    [bin:x:1:root,bin,daemon]
       - bin : 그룹명
       - x : 그룹 비밀번호 (/etc/gshadow)
       - (g)1 : 그룹번호(GID)
       - root,bin,damon : 그룹의 구성원
 

 ※ /etc/login.defs
  - MAIL_DIR : 사용자 추가시 해당 사용자의 메일함이 저장될 경로


  - PASS_MAX_DAYS : 비밀번호 만료기간
  - PASS_MIN_DAYS  : 비밀번호 만료 후 재설정 가능기간
  - PASS_MIN_LEN    : 비밀번호의 최소 길이
  - PASS_WARN_AGE : 비밀번호 만료 후 경고일자

 

  - UID_MIN          : UID가 가질 수 있는 최소값
  - UID_MAX         : UID가 가질 수 있는 최대값
  - GID_MIN          : GID가 가질 수 있는 최소값
  - GID_MAX         : GID가 가질 수 있는 최대값

 

  - CREATE_HOME              : 사용자의 홈 디렉터리를 생성할 것인지 여부
  - USERGROUPS_ENAB      : '/etc/group' 파일에 그룹을 생성할 것인지 여부
  - MD5_CRYPT_ENAB         : 사용자의 비밀번호를 md5 코드화 할 것인지 여부

 

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

- useradd -
1. 정의 : 사용자 생성할 때 사용

             - 사용자 정보 확인 : cat /etc/passwd [| grep 사용자명]

 

   [특징]
       - 사용자 정보 관련 파일 : /etc/passwd, /etc/shadow

       - 별도의 옵션을 지정하지 않는 한 사용자가 생성될 때
         해당 사용자명과 동일한 '그룹명' 과 기본 홈디렉터리
         아래로 '사용자명' 으로 디렉터리가 생성
         [ UserName => 1. ('-g' : X)/etc/group : GroupName(UserName)
                               2. ('-d' : X)/home  : /home/UserName             ]

 

2. 형식
  - #useradd [옵션] [Argument] [UserName]

 

3. 옵션
  - /etc/passwd 설명 참조!
  - "-m -k" : /etc/skel 의 디렉터리를 변경하여 사용자 생성 가능
                  (argument 부분에 생성된 Dir 입력할 것)

 

   [ 섭수! ]
 ※ 사용자 생성시 알아두기
   - 'uid/gid' 값을 수정하지 않으면 '/etc/passwd'를 참조하여 가장 큰 값의 'uid/gid'에서
      "+1" 값으로 생성된다.

   - 사용자 생성시 "-g" 옵션으로 별도의 gid를 입력하지 않으면 해당 사용자의 uid 값을
      그대로 가지는 gid 값으로 '/etc/group' 추가된다.

   - '-g' 옵션을 사용하는 경우는 '/etc/group' 파일내 정의된 그룹을 사용해야 함.

   - '-d' 옵션을 사용하는 경우는 $HOME으로 사용할 "+/Username" 까지 경로를 입력해야 함.

 

   [ /etc/skel (뼈대) ]
     ㄱ. 정의 : 사용자 추가때 $HOME 생성시 /etc/skel 디렉터리 내용을 참조하여
                   자동 복사형태로 $HOME 이 생성된다.
                   (생성된 사용자 $HOME 과 /etc/skel 의 내용이 동일하게 출력)

 

     ㄴ. 형식
         - #useradd [-m -k /etc/skel] [UserName]

 

     ※ 사용자 기본 참조 디렉터리를 변경하며 생성
         - #useradd -m -k /backup test8

            * 단, "-m -k" 옵션으로 생성한 사용자의 경우 bash-shell 정의 파일이 없으므로,
              로그인시 쉘 오류가 발생 -> /etc/skel 내용을 복사하는 번거로움 발생.

 

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

- useradd -D -
1. 정의 : 사용자 생성의 기본값 정의 (사용자 생성의 환경설정)

          [ 문서 파일 : /etc/default/useradd ]
          [ 명령어 : useradd -D ]

 

 ※ useradd -D 내용 설명
       - (g)GROUP=100         : 사용자 생성 시 기본 GID값이 100부터
       - (b)HOME=/home       : 사용자 생성 시 기본 디렉터리 (Base Home Dir)
       - (f)INACTIVE=-1        : 계정 만료일이 경과되면 사용금지(일) ('0'=만료 즉시 계정잠금 / '-1'=기능 사용 안함)
       - (e)EXPIRE=              : 계정 만료일을 지정(일)
       - (s)SHELL=/bin/bash   :  기본 쉘
       - SKEL=/etc/skel         : 사용자 생성시 자동 복사될 디렉터리
       - CREATE_MAIL_SPOOL=yes
          : 사용자 생성 시 계정명과 동일한 메일 계정 생성

 

2. 형식
  - #useradd -D [옵션] [Argument]

  - #vi /etc/default/useradd

 

[ useradd -D -b 지정시 유의사항 ]
  - 생성되지 않은 디렉터리를 HOME 값으로 지정하면 $HOME 생성불가 오류
  ※ HOME 값으로 지정할 디렉터리를 우선적으로 해당 Dir 생성할 것!
     ('-p' 옵션 적용도 확인)

 

  - Tab 키를 이용한 HOME 값 지정시 '/' 까지 입력되는 오류
  ※ Tab 키를 활용하지 않거나 또는 지정한 디렉터리의 마지막 '/'는 삭제할 것

 

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

- userdel (User Delete) -
1. 정의 : 시스템에 저장된 사용자 정보를 삭제

 

2. 형식
    - userdel UserName        : 사용자 계정만 삭제(/etc/passwd, /etc/shadow, /etc/group)
                                          사용자 디렉터리 삭제 안 됨. (권장사항)
    - userdel [-r] UserName   : 사용자 계정과 사용자 디렉터리
                                           (메일관련, 홈디렉터리 등 포함해서 삭제)

 

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

- usermod (User Modification) -
1. 정의 : 시스템에 저장된 사용자 정보 수정


2. 형식
  - #usermod [옵션] [Argument] [UserName]
     - 해당 명령어의 옵션은 'useradd' 명령어의 옵션과 유사

 

 ※ 사용자 $HOME 내용 변경할때 $HOME 디렉터리도 함께 이동
   - #usermod -d /hosting_users/home/test1 -m test1

        * 즉, 사용자 정보 수정시 $HOME 에 대한 정보(-d 옵션)를 변경하면
         '-m' 의 옵션을 이용해서 해당 디렉터리도 함께 이동이 가능

 

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

- groupadd -
1. 정의 : 시스템에 그룹을 생성하는 명령어

 

2. 설정파일 : /etc/group

 

3. 형식
     - #groupadd [옵션] [Argument] [GroupName]

        ※ 별도의 그룹을 생성하거나 사용자를 그룹에 지정하지 않는 이상
            사용자 생성과 동시에 한 개의 그룹이 자동 생성된다.

 

4. 옵션
   - g : 그룹에 대한 gid 값을 지정하여 생성할 수 있음

         ※ 옵션 X => /etc/group 에서 gid 번호가 가장 큰 수 +1 형태로 그룹이 추가
             옵션 O => /etc/group 에서 존재하는 그룹명/Gid 는 입력이 불가능
     

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

- groupmod -
1. 정의 : 시스템에 그룹을 수정하는 명령어
           
2. 형식
     - #groupmod [옵션] [Argument] [GroupName]

 

3. 옵션
   - g : "/etc/group" 파일내 gid에 해당하는 값을 수정

 

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

- groupdel -
1. 정의 : 시스템에 그룹을 삭제하는 명령어

 

2. 형식
     - #groupdel GroupName

  ※ "/etc/group" 파일내 GroupName 에 해당하는 라인을 삭제

AND