초창기 리눅스는 프로그램 패키지 설치가 굉장히 어려웠다(고 합니다).


리눅스는 프로그램을 설치하려면 소스코드를 가져와서 직접 컴파일을 한 후 필요한 곳에 적절하게 배치해야 했다(고 한다)


그래서 리눅스에서 일반사용자가 프로그램을 가져와서 설치하는 것은 불가능에 가까웠다(고 한다..) 


쓰다보니 안되겠다. 앞으로 말하는 초창기 리눅스에 관한 부분은 전부 강의를 통해 들은 부분이니 양해바랍니다. 


프로그램을 가져오더라도 컴파일을 못하는 리눅스 초보자들은 프로그램을 깔 수가 없었습니다. 이러다보니 리눅스는 사용자들에게 외면을 받았고


RedHat사 에서 Redhat Package Manager라는 개념을 도입했습니다. 


윈도우에서 setup.exe 로 쉽게 프로그램을 설치할 수 있는 것처럼 리눅스도 RPM이라는 확장명의 파일을 rpm 명령어로 간편하게 설치하는 방법을 도입한 것이죠. 


드디어 .rpm 을 이용해서 윈도우 프로그램처럼 쉽게 프로그램을 설치할 수 있게 된 것입니다. 


리눅스 초기 인스톨을 할 때 1000개가 넘는 프로그램을 설치한 후 부팅이 되었을 것입니다. 


바로 그 1000개 가량 되는 프로그램이 전부 .rpm 확장자로 설치되는 프로그램들입니다.


rpm파일들은 centos dvd 파일에 전부 들어있습니다. rpm은 패키지(package)라고 합니다. 


rpm파일은 딱 보기에 복잡한 네이밍 구조를 가졌습니다. (알고보면 별것도 아니지만요)


예를 들어 


gedit-3.8.3-6.e17.x86_64.rpm 


이라는 rpm 파일을 확인해보면


패키지이름 : gedit --> 패키지(프로그램)의 이름

버전 : 3.8.3  --> 대개 3자리수로 구성. "주버전.부버전.패치버전 "

릴리즈번호 : 6  --> 문제점을 개선할 때마다 붙여지는 번호

CentOS 버전 : el7  --> CentOS에서 배포할 경우에 붙여짐 (el=enterprise linux)

아키텍처 : x86_64   --> 64비트 CPU를 의미한다. (i386~686) 은 32비트 CPU를 의마합니다.

src : 소스 파일(설치는 가능하나 실행은 되지 않고 컴파일에만 사용 가능합니다)

noarch : 모든 CPU(아키텍처를 가리지 않고 설치가능합니다)


자주 사용하는 rpm 명령어는 다음과 같습니다.


설치 : rpm -Uvh filename.rpm


U (대문자) : 패키지 설치/업그레이드

v             : 설치과정의 확인 

h             : 설치진행과정을 "#"마크로 화면에 출력


삭제 : rpm -e package_name


이미 설치된 패키지 확인  


rpm -qa package_name : 패키지가 설치되었는지 확인

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


아직 설치되지 않은 rpm 파일 확인


rpm -qlp package_name.rpm : 패키지 파일에 어떤 파일들이 포함되었는지 확인 

rpm -qip filename.rpm : 패키지 파일의 상세정보 확인

rpm -qi package_name.rpm : 패키지 파일의 상세정보 확인


반면 RPM은 의존성에 문제가 있습니다. 쉽게 말해 A패키지가 설치되기 위해 B패키지를 필요로 하는 경우, RPM으로 해결이 까다롭기 때문이죠.


이를 해결하려고 YUM이 도입되었는데 YUM에 대해서는 나중에 이야기 하도록 하겠습니다. 



mount 작업을 다시하고 시작했지만 아직 mount에 대한 포스팅을 하지 않았으므로 간단하게 설명만 하고 지나가려 합니다. 


mount는 cd 를 cdrom에 집어넣는 작업이라고 생각하면 됩니다. 지금은 이정도만 알고가면 됩니다. 


캡쳐화면에서 rpm 명령어는 /media/cdrom/Packages/ 에 존재합니다. 그래서 cdrom을 마운트 시켜준 것이죠. 


Packages 폴더에서 ls -l 명령어를 통해 mc 패키지를 찾아봅시다. 아래 화면에서는 '-'를 빼먹는 오타가 났지만 너그럽게 이해바랍니다. 



mc -4.8.7-11.e17.x86_64.rpm 이라는 파일명이 보입니다. 해당 파일의 패키지명은 파일명 맨 앞의 mc 입니다. 



rpm -qa 명령어로 mc 패키지 설치여부를 확인해보니 설치가 되어 있네요. 


여기서 주의할점은 rpm -qa mc 에서 파일명이 아닌 패키지 명을 입력해야 해당 명령이 실행이 됩니다. 


위에 사용된 rpm 명령어를 mc 패키지를 깔고 지워보면서 연습해보시길 바랍니다. 


...


연습이 끝나셨다면 yum에 대해 알아보도록 하겠습니다. 


rpm 확장자를 활용해서 굉장히 간편하게 리눅스 상에서 프로그램을 설치하고 지울 수 있게 되었지만 금새 문제점이 나타나기 시작합니다. 


리눅스 초기의 프로그램들은 굉장히 단순해서 서로 의존성이 없었지만 시간이 지날수록 프로그램이 무거워지고 서로 의존하기 시작합니다. 이렇게 서로 의존하기 시작한 프로그램들을 깔려고 할 때 rpm 확장자는 의존성이 있는 프로그램 패키지를 자동으로 찾아서 설치해주지 못했습니다. 


물론 


# rpm -qR package_name 


으로 패키지와 의존 관계가 있는 패키지들을 찾아볼 순 있습니다만 이렇게 패키지를 설치해도 걸리는 경우가 있고 걸린 해당 파일을 확인하려면 


# rpm -qf package_name 


으로 확인을 해야하는데 복잡해집니다. 


경로를 알지 못하는 경우는 


# find /-name "name"


으로 알아볼 수도 있긴 합니다. 


하지만 모든 경우 너무 복잡하고 시간이 오래걸린다는 거죠. 


이게 rpm의 가장 큰 단점인데 이런 의존성 해결을 위해 yum이 등장하게 되었습니다. 


YUM에 대해 간략하게 설명하자면 다음과 같습니다. 


YUM(Yellowdog Updater Modified) :

rpm 명령의 패키지 의존성 문제를 완전하게 해결, 인터넷을 통하여 필요한 파일을 저장소(repository)에서 자동으로 다운로드해서 설치하는 방식


저장소의 URL : "/etc/yum.repos.d/" 디렉터리


yum의 기본 사용법


설치 : yum install package_name  ( 주로 yum -y install package_name 으로 사용하게 되는데 "-y"는 사용자의 확인을 미리 모두 "yes"로 확인하고 설치를 진행하는 옵션이다 )


RPM 파일 설치 : yum localinstall filename.rpm ( /media/cdrom/Packages/ 경로에 이미 존재하는 rpm 파일을 가져다가 설치하는 로컬명령어이다)

( 덧붙이자면 localinstall 로 rpm 프로그램을 설치할 때 의존성 문제가 발생하는 부분은 웹을 통해서 자동으로 찾아서 설치해준다)

업데이트 가능 목록 확인 : yum check-update


업데이트 : yum update package_name


삭제 : yum remove package_name


정보 확인 : yum info package_name


패키지 그룹 설치 : yum groupinstall package_group_name


패키지 리스트 확인 : yum list package_name


패키지 설치 가능한 그룹 리스트 확인 : yum grouplist (hidden) : (hidden)을 추가로 입력하면 숨겨진 옵션도 확인가능


특정 파일이 속한 패키지 이름 확인 : yum provides filename


GPG 키 검새 생략 : yum install --nogpgcheck filename.rpm (CentOS 19에서 검증되지 않은 패키지를 강제로 설치할 때 사용)


기존 저장소 목록 지우기 : yum clean all


yum 작동 방식 설정 파일 ( yum install package_name 명령이 작동하는 방식 )


(출처 : http://cafe.naver.com/thisislinux)


CentOS 7 패키지 저장소는 CentOS 웹서버 상에 패키지를 저장하는 공간입니다. CentOS에 소속되어 CentOS의 모든 패키지가 저장되어 있는 곳이죠. CentOS 저장소에는 원본패키지, 업데이트패키지, 추가패키지가 존재하는데 원본패키지는 dvd에 mount 시킨 rpm설치파일들이 동일하게 들어있습니다. 그리고 이후에 향상된 패키지를 업데이트 패키지에 넣어두고 기타 추가 패키지들을 추가 패키지에 보관합니다. 


그래서 처음 yum install 명령을 입력하면 yum은 자동으로 CentOS 웹서버에서 필요한 패키지 '목록'을 가져와 설치를 시작하게 되는데 이렇게 사용하려면 CentOS 웹 ftp 주소를 가지고 있어야만 가능합니다. 이 주소가 위에서 언급한 저장소 경로인 /etc/yum.repos.d/ 폴더에 들어있는 것입니다. 그래서 가장먼저 저장소 경로를 담고있는 폴더(대표적인 Centos-Base.repo)를 확인하고 폴더 내에 .repo 확장자를 가지고 있는 파일들로부터 경로(URL)를 받아옵니다. 목록을 가져오고 사용자가 yes 로 설치를 허용하면 설치가 완료된다. 이게 yum 명령의 작동 방식입니다.


yum 명령은 update 패키지를 가장 먼저 가져오게 됩니다. (최신이므로)


추가로 yum 작동 방식 설정 파일을 확인하면


(file) : /etc/yum.conf : 변경할 필요 없음

(directory) : /etc/yum.repos.d/ : yum명령을 입력했을 때 검색하게 되는 네트워크의 주소가 들어 있는 여러 개의 파일이 있습니다. 가장 처음 초기 설정                                         당시 업데이트 부분에 #주석처리 한 기억이 나시는 분도 계실 겁니다 ^.^

/etc/yum.repos.d/ 폴더의 *.repo 파일 중 CentOS-Base.repo 에서 [base], [extra] 부분을 남기고 [update] 부분에 #### 처리로 삭제한 것처럼 보이게 했었습니다.


yum 명령어는 인터넷이 연결된 상태에서만 사용할 수 있는데 그렇다면 인터넷이 연결되지 않은 상태로는 사용이 완전히 불가능하다고 들릴 수도 있겠습니다. 하지만 yum 작동방식에서 원본패키지는 우리가 사용하는 리눅스에 마운트 시킨 dvd에 있는 rpm설치 프로그램과 동일하다고 했던 바가 있습니다. 그렇다면 이러한 상황을 이용해서 yum 명령을 인터넷이 안되더라도 로컬폴더에서 가져와서 설치하도록 설정할 수 있을 겁니다. 


가장 먼저 


# umount /dev/cdrom 

# mount /dev/cdrom /media/cdrom 

# ls /media/cdrom (dvd 경로)

# cd /etc/yum.repos.d/

# mkdir backup

# mv *.repo backup/

# ls -l 

# touch dvd.repo

# vi dvd.repo

[dvd] 

name=CentOS DVD

baseurl=file:///media/cdrom

gpgcheck=0 (1은 gpgcheck를 하므로 추가경로를 입력해주어야 합니다.)

:wq

# ls -l

# cd

# yum install mysql-connector-odbc

# yum install mysql-connector-odbc unixODBC

(다운로드하는 척 하지만 실제로는 네트워크를 사용하지 않고 마운트된 dvd에서 가져와서 설치하는 것)

# yum -y install html2ps

없을 때가 있는데 dvd에 모든 패키지가 들어 있진 않습니다. 실제로 Centos 원본패키지에 더 많은 원본패키지들이 들어있고 그 중에서 가장 많이 사용하는 파일들을 dvd 파일로 만들어서 OS상에 넣어뒀기 때문입니다. 이런 상황이 생기면 옮겨둔 CentOS-Base.repo를 가져오면 되지만 dvd에 있는 건 가져오고 dvd에 없는 건 네트워크 상에서 가져올 수 있으면 더 빠르게 설치가 가능하므로 이렇게 설정을 해보도록 하겠습니다. 

# vi /etc/yum.repos.d/dev.repo

i

[network]

name=Network

baseurl=

http;//mirrors.kernel.org/centos/7/os/x86_64/

http://mirror.centos.org/centos/7/os/x86_64/

gpgcheck=0

:wq

# yum clean all 

# yum -y remove mysql-connector-odbc unixODBC

# yum install mysql-connector-odbc  html2ps

y  ( 일부는 network에서 일부는 dvd 에서 가져와 설치하게 됩니다. )

--패키지그룹실습--

# yum grouplist

그룹 이름이 한글로 나오면 영문으로 바꿔서 설치하는 게 낫다. 

# chvt 2

# yum grouplist 

# yum clean all

# yum grouplist idden > glist.txt            :    yum으로 설치가능한 grouplist가 glist.txt 파일로 저장됩니다.

# chvt 1

# gedit glist.txt

# yum groupinstall "MariaDB Databse Server"  --> 띄어쓰기가 그룹명에 포함되어 있으므로 ""(double quotation)으로 묶어주어야 한다. 

# yum groupinstall "Java Platform"

# yum groupinstall "KDE Application"


이렇게 yum 작동방식과 dvd 활용, network 활용을 하는법 까지 익혀 보았습니다.

책을 보면 금새 이해가 가지만 사용하지 않으면 금새 까먹을 것 같은 부분을 정리해보았다. 


파일에 있어서 디렉터리의 소유권 확인 및 변경에 관한 부분이다. 



sample.txt 파일의 소유권을 확인해보자.


-rw-r--r-x. 2 root root 6 5월 27 17:24 sample.txt


맨 앞의 -는 파일유형

-rw-r--r-x. 는 파일허가권


- 일반파일

d 폴더(디렉터리)

l 링크파일(바로가기)


2는 링크수

root는 파일소유자이름

root는 파일소유그룹이름

6은 파일크기(byte)

5월 27 17:24 는 마지막 변경 날짜/시간

sample.txt 는 파일이름을 나타낸다. 


파일 허가권은 - 파일유형 뒤에 가장 먼저오는 "rw-", "r--", "r-x"로 3개씩 끊어서 읽을수 있다. (r은 read, w는 write, x는 execute)

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

두번째 "r--" 는 그룹(Group)의 파일접근 궎나

세번째 "r--"는 그 외 사용자(other)의 파일접근 권한을 나타낸다. 


숫자로도 나타낼 수 있는데 8진수로 표기한다. 


소유자(user)

그룹(group) 

그 외 사용자(other) 

4

 6


결국 해석하자면 소유자는 읽기, 쓰기 권한을

그룹은 읽기 권한

그 외 사용자는 읽기, 실행 권한을 가지고 있는 것이다. 


그래서 허가권은 변경이 가능한데 chmod 명령어를 통해 속성 변경이 가능하다. 


예를 들어 현재 645인 sample.txt의 접근권한을 변경하려면


# chmod 666 sample.txt 


라고 적으면 된다. 


그러면 해당 파일은 소유자의 권한과 동일한 권한을 그룹과 그 외 사용자가 갖게 된다. 



이렇게 변할 것이다. 


추가로 파일의 소유권(ownership)을 변경하려면 chown/chgrp 명령을 사용하면 된다. 소유한 사용자와 그룹을 변경할 수 있는 명령어이다. 


# chown centos.centos sample.txt 또는

# chown centos sample.txt 및 chgrp centos sample.txt 


로 표기하면 현재 root root 로 소유되어 있던 sample.txt 파일은 소유권이 centos 사용자에게 넘어가게 된다. 


# chown root.root sample.txt 


명령으로 한 번에 소유자와 그룹을 바꿀 수도 있다. 


자, 이제 연습을 해보자. 


vi 에디터를 활용해서 test 라는 파일을 생성한다. 


I를 눌러서 Insert mode를 활성화 시킨 후 다음과 같이 쓴다. 



esc > wq 로 저장 후 빠져나온 다음 


# ls -l  


명령으로 파일이 생성되었는지 확인해본다. 


다음과 같이 생성되었을 것이다. 



위에서 배운대로 허가권을 풀어보자면 일반파일, 소유자는 읽기, 쓰기가 가능하고 나머지는 읽기만 가능한 test 파일이 생성되었다. 


test 파일을 실행시키려고 test 라고 치면 실행되지 않는다


./test 라고 쳐야 되는데 왜냐하면 test라고 쳤을 때 /root의 경로가 지정되어 있지 않기 때문이다. 


그래서 ./ 를 입력해서 root 사용자 폴더의 경로를 지정한 후 폴더를 실행해야 한다. 



하지만 실행하려니까 허가가 거부가 된다. 


허가권을 풀어본대로 소유자에게는 실행 권한이 없기 때문이다. 


다음과 같이 실행권한을 부여하고 나면 실행이 된다. 



./test 를 입력하고 난 첫줄에 hello 에 대한 명령을 찾지 못했다는 말과 함께


입력해 두었던 ls /var 명령어는 실행되어서 /var 폴더의 리스트를 보여주었다. 



그렇다면 이번엔 소유권을 변경해보도록 하자. 


기존에 소유자와 그룹은 root root 로 설정되어 있었다. 


# chgrp centos centos test 


를 입력해서 centos 사용자에게 소유권을 주었다. 



연두색 글씨의 test 파일의 소유권을 확인하면 centos centos 로 바뀐 것이 보일 것이다. 


그래서 위의 캡쳐와 마찬가지로 centos 사용자로 접속해서 test 파일을 확인해보려고 su - centos 명령을 이용해서 centos 사용자로 로그인을 했다. 


그리고 whoami > centos

    pwd (현재경로) > /home/centos 

    ls -l /root/test 를 쳤건만 이게 웬걸 허가 거부를 당햇다. 당황스럽겠지만 허가가 거부된 데에는 이유가 있다. 앞선 test 파일의 허가권을 확인해보면 멀쩡하지만 우리는 현재 centos 사용자로 로그인되어 있어서 슈퍼유저인 root 의 폴더에 접근할 수 없기 때문이다. 



# ls -l / 


확인해보면 위와 같이 일반사용자는 root 폴더에 접근 권한이 없다. 그렇다면 root 폴더의 접근 권한을 바꾸느냐? 


root 폴더의 권한을 바꿀 수 없을 뿐더러 관리자의 폴더를 함부로 손대는 것도 바람직하지 않으므로 차라리 관리자에게 test 파일을 일반사용자 폴더로 넘겨달라고 요청하는 부분이 빠르다. 그러므로 다시 su 명령어를 이용해 root 사용자로 돌아간 다음 test 파일을 centos 사용자에게 넘기도록 하겠다. 


root 암호를 입력하면 root 사용자로 로그인되고 다음과 같이 test 파일을 


# mv test /home/centos 


센토스 홈 폴더로 옮겨준다. 


# mv test ~centos


경로를 모르는 경우 위의 명령대로 입력하면 자동으로 centos 사용자의 home 폴더로 들어간다. 


overwrite 덮어 쓸거냐고 물어보면 쿨하게 y 라고 입력하고 넘어가자.



# ls 


로 확인해보면 test 파일이 사라졌다. /root 에 속해 있던 test 파일을 아예 /home/centos 폴더로 옮겨버렸기 때문이다. 


반대로 centos 사용자는 소유주를 root 사용자로 변경할 수 없는데 이는 당연하다. 


일반 소유주가 관리자의 폴더에 악성코드를 삽입하고 소유주를 변경해버린다면 말도 안되는 일이기 때문이다. 


이와 별도로 symbolic 심볼릭으로도 허가권 변경이 가능하다. 


앞서 # chmond 666 test 로 test 파일에 실행권한을 제외한 모든 권한을 user, group, other 에게 부여하였다. 


# chmod o-x test 


owner 로부터 test 파일의 x(실행) 권한을 뺏는(-) 것이다. 


# chmod ugo-r test 


user, group, other 로부터 test 파일의 r(읽기) 권한을 뺏는(-) 것이다. 


반대로 


# chmod ugo +r test 


를 통해 빼앗았던 r(읽기) 권한을 다시 부여(+)할 수도 있다. 


chmod 는 기존의 권한을 몰라도 사용할 수 있다는 장점이 있다. 


마지막으로 링크에 대해 이야기 하고(왜이리 길어지냐...) 마무리 하겠다. 


파일의 링크(link)에는 하드링크(hard link)와 심볼릭 링크(symbolic link 또는 soft link 라고도 한다) 두 가지가 있다. 


소프트 링크는 windows에서 바로가기 아이콘의 개념과 비슷하다. 


하드링크를 생성하면 "하드링크파일"만 하나 생성되며 같은 inode1을 사용한다. 


# ln 링크대상파일이름 링크파일이름


심볼릭 링크를 생성하면 새로운 inode2를 만들고, 데이터는 원본파일을 연결하는 효과를 가진다. 


# ln -s 링크대상파일이름 링크파일이름


덧붙여 inode란 실제 데이터 파일의 정보를 나타내는 inode 구역에 저장되는 데이터인데 그냥 하나의 객체를 뜻한다고 생각하면 쉽다. 


inode1=inode1 but inode1≠inode2


다시말해 하드링크를 생성한 파일은 원본파일과 완전히 동일한 inode 정보를 가지게 되어 이 말인 즉슨 원본파일을 지워도 hard link 파일은 원본 파일의 데이터를 그대로 갖고 있기 때문에 실행이 된다는 말씀이다. 


하지만 바로가기라는 특성상 symbolic 링크가 더욱 일반적으로 쓰인다. (hard link는 무쓸모인가...)


# ls -il  or # ls -li    


파일리스트 맨 앞에 파일 색인번호를 표시한다. 이 명령어로 hardlink 파일과 softlink 파일의 색인번호를 원본파일과 비교할 수 있다.


링크 파일을 만들어서 테스트 해보시길 바라며 이만 마친다. 





리눅스는 다중 사용자 시스템(Multi-User System) 이다. 

센토스 리눅스는 그 중에서 서버 관리 용도로 많이 사용되는 OS이다. (우분투도..)

즉, 하나의 서버 네트워크를 구축해두고 여러 사람이 동시 다발적으로 접속해서 리눅스 내의 자원을 사용한다는 것이다. 

그래서 리눅스 서버 관리자는 유저와 그룹에 적절한 권한을 부여하여 관리를 해야한다. 적절한 사람에게 적절한 권한이 부여되어야 필요한 사람에게 필요한 정보를 제공할 수 있게 되는 것이다. 그래서 모든 사용자들은 하나 이상의 그룹에 당연히 소속되게 된다. 

기본적으로 서버 관리자는 슈퍼유저로써 root 권한을 가지고 있다. 

필자는 급한 사람이므로 명령어를 먼저 적고 설명을 시작하겠다. 


# useradd newuser

newuser라는 새로운 유저를 생성한다


# passwd newuser

newuser라는 사용자의 비밀번호를 지정하거나 (이미 있다면) 변경한다


# usermod -g root newuser

newuser의 속성을 -g root 로 변경한다(root그룹에 포함시킨다)


--사용자 생성시 옵션--

-u : ID지정 

-g : 그룹지정

-d : 홈 디렉터리 지정

-s : 셀 지정


# userdel newuser

newuser 사용자를 삭제한다 


참고로 userdel 로 사용자를 지우더라도 사용자가 기존에 사용하던 폴더 newuser를 기준으로 /home/newuser 디렉터리는 지워지지 않는다.

(혹시나 돌아올 유저를 생각해서...!) # userdel -r username 명령으로 폴더까지 지울 수는 있다. 돌아올 사람이 아니면 지우자. 


# chage -m 2 newuser

사용자의 암호를 주기적으로 변경하도록 설정하면서 -m 2 라는 명령어를 주면 최소 2일 이상은 같은 비밀번호를 사용해야 한다.


# groups 

현재 사용자가 속한 그룹을 보여준다. 다시 말해 하나의 사용자는 여러 그룹에 포함될 수 있는데 주그룹이 존재하긴 한다. 

전공, 부전공의 관계 정도..? (이중전공도 무시말자..)


# groupadd newgroup

newgroup 이라는 새로운 그룹을 생성한다


# groupmod -n newgroup mygroup


# groupdel newgroup


# gpasswd newgroup

일반적이진 않으나 그룹에 비밀번호를 지정하기도 한다. 하지만 그룹에 비밀번호를 지정했다가 노출되기라도 하면 누가 노출시켰는지 알 수 없기 때문에 사용자 개개인의 비밀번호를 지정하는게 일반적이다. 


# yum -y install system-config-users 

system-config-users 라는 유틸을 yum 을 통해 다운받는다. (yum 에 대해서는 추후에 포스팅하겠다. 지금은 그냥 이런게 있구나~ 정도로 넘어가면 된다. 필자도 넘어가는 중이다.)



1. USER


사용자는 /etc/passwd 파일에 정의되어 있고 각 행의 의미는 다음과 같다. 편의상 영어로 적는다.


username : password : user ID : group ID : whole name : Home directory : basic shell



직접 들어가서 vi 에디터로 확인한 centos 사용자의 정보 (vi edit은 다음 포스트에서 다루려고 한다)


centos 는 유저이름

x 는 비밀번호로 공개가 되어지지 않는다. (root 사용자도 비밀번호를 알 순 없다. 지울수는 있지롱)

주의할점은 user ID 도 1000, group ID 도 1000 이지만 실질적으로 같은 1000은 아니다. 

예를 들자면 A중학교에 1학년에 B랑 2학년에 B는 이름이 같아도 동일한 학년에 속한 B가 아니므로 다른 B다. 

마찬가지로 user 와 group 이라는 다른 부류로 나뉘어 있기 때문에 1000은 같은 1000이 아니라는 말씀.

/home/centos 는 centos 사용자의 홈디렉터리 경로

/bin/bash 는 bash shell (터미널)을 의미한다. (바꿀 일이 없다.. 필자도 바꿀줄 모른다 아직..)


참고로 덧붙이자면 비밀번호는 /etc/shadow 라는 파일에 저장되지만 암호화되어서 절대 알아볼 수 없다. root사용자도 비밀번호를 알아낼 수 없다.


2. GROUP


그룹을 확인하려면 /etc/group 에서 확인할 수 있다. 


각 행의 의미는 다음과 같다.


groupname : password : group ID : username in the group



그룹이름이 centos

비밀번호는 x로 미공개

그룹ID가 1000

그룹내 유저이름이 그룹이름과 동일하게 centos 


이렇게 centos 그룹의 정보를 확인했다. 


3. Managing

처음 centos 사용자를 만들 때 그룹을 생성하지는 않았다. 하지만 위에서 언급했다시피 1사용자-1그룹 으로 매칭이 되어야 한다. 

그렇기 때문에 초기 생성 시 centos를 별도의 그룹에 소속시켜주지 않았지만 일단 linux 자체적으로 그룹을 만들어 임의로 centos 사용자를 배정시킨 것이다. 


예를 들어 임의로


# useradd myuser 


로 myuser라는 유저를 생성하고


# tail -5 /etc/passwd 


로 /etc/passwd 의 최하단 5줄을 확인해보면


myuser:x:1001:1001: : /home/myuser :/bin/bash


를 발견할 수 있다. 


여기서도 마찬가지로 그룹을 정해주지 않았지만 임의로 1001이라는 그룹을 생성해서 myuser를 소속시켰다. 


다시


# tail -5 /etc/group


으로 그룹명을 확인해보도 결과는 동일할 것이다. 


myuser : x : 1001:


그룹명은 당연히 1001로 생성되었다. 자동으로 생성되어 맞는 것처럼 보이지만 실제로 자동으로 배정되는 방식은 편하지 않다. 말하자면 중학교를 뺑뱅이로 돌려버린 것이다. (원하는 중학교 가야지?)


그렇다면 이런 방식으로 자동생성 되는 것을 방지하려면 그룹을 (다닐 중학교를 지어버려야지...) 먼저 생성해 주어야 한다. (리눅스는 전반적으로 하향식 관리의 표본이다)


# groupadd centosGroup

# useradd -g centosGroup user1

# useradd -g centosGroup user2


이런 식으로 그룹 먼저 >>> 유저 나중에 형식으로 작성하는게 일반적이라는 말이다. 


# passwd user1

1234

1234

enter


# passwd user2

1234

1234

enter


tail -5 /etc/shodow 로 확인해보면 암호가 같더라도 암호화된 부호는 다르다. 따라서 다시한번 절!대! 비밀번호는 확인이 불가하다. 


(일반사용자가 유저를 생성할 경우 최소 비밀번호를 8자로 지정해야 되지만 root 권한이 있는 사용자는 다~ 할 수 있다. 

이제와서 말하는 거지만 처음 linux 시작할 때 터미널에서 #과 $ 차이를 몰랐다. 

# 은 root 권한

$ 은 일반사용자  이다.

필자처럼 헷갈리실 분들을 위해서...)


ls -l /home


를 통해서 확인해보면 user1, user2 폴더가 생성되어 있음을 확인할 수 있다. 







이번에는 OS 종료 예약취소, Run-level에 대해 정리해보려고 한다.


터미널창을 열고 


# shutdown -P +10


10분 후에 linux를 종료하는 명령어를 실행시킨 후


# shutdown -c 


로 취소할 수 있다. 


# shutdown -r 23:00


으로 23:00에 재시작을 예약할 수도 있다.


재시작을 예약하게 되면 서버의 사용자들에게 23:00 에 서버가 종료된다는 메시지가 날아가게 된다.


반면 


# init 0 


으로 컴퓨터를 종료할 수 있는데 (Run-level 에서 0은 power-off 를 의미한다...)


보통 리눅스에서 네트워크를 관리한다고 가정했을 때 


# shutdown -P now 


로 서버를 종료해버리면 대.형.사.고 가 발생한다. 예를 들자면 디아블로 담당자가 디아블로 서버를 닫아버린 것과 마찬가지이다. (무슨 욕을 먹으려고...)


그래서 리눅스에서 기본은 종료가 아닌 '로그아웃'이 된다.


# shutdown -k +20


으로 20분 후에 서버가 종료된다는 메시지가 root 사용자를 제외한 사용자들에게 전달된다. 하지만 -k 명령은 가짜다. 20분 후에 꺼진다고 구라를 치는거다! 


# logout


그래서 쫄아버린 사용자들은 사용하던 정보를 잃지 않기 위해 exit이 아닌 logout 을 통해 정보를 남기고 퇴장한다. 




위에서 언급한 Run-level 에 대해 애기하자면


런레벨 

영문모드 

설명 

비고 

power off 

system off 

 

Rescue 

System Recovery mode 

siingle-user mode 

Multi-user 

 

Don't use anymore 

Multi-user 

Multi-user mode by Text 

 

Multi-user 

 

Same as 2 

Graphical 

Multi-user mode by Graphic 

 

Reboot 

 

 


현재 사용중인 런레벨은 /lib/systemd/system 디렉터리의 runlevel?.target 파일을 확인하면 된다. 


/lib/systemd/system/runlevel?.target 파일은 실제로는 link 파일이라서 /etc/systemd/system/default.target 의 실제 모체를 바꾸면 바꾼 형태로 부팅이 된다. 


# ln -sf /lib/systemd/system/multi-user.target  /etc/systemd/system/default.target  


이라고 입력하면 graphical.target 이 사라지고 multi-user.target 이 명시되며 리부트시 텍스트모드로 부팅되게 된다. 

실험하다가 텍스트모드로 부팅되면 굉장히 난감한데


#startx


명령어를 사용하면 xwindow 모드로 부팅되니 안심하시길...




P.S 


Ctrl+Alt+2  Monitor 2    =    # chvt 2

Ctrl+Alt+3  Monitor 3    =    # chvt 3


가상콘솔, 즉 여러 작업화면을 변경하는 방법이다. Ctrl+Alt+2로 변경해되 되나 터미널에 빠질 분들을 위해 명령어를 적어둔다. 


# chvt 작업환경번호


ex) # chvt 3  -->  3번 작업환경으로


※ VMware Workstation 12 Player 에서 CentOS 64-bit Linux 7 을 대상으로 작성된 글입니다. 

   gnome version 3.14.2 

   memory 976.5MiB


VMware를 통해서 CentOS를 활용하는 실습을 해보려고 한다. 해당 내용은 '이것이 리눅스다' 저서의 커리큘럼대로 따라가고 있다. 


좋은 강좌는 www.inflearn.com 에서 '이것이 리눅스다' 저자분께서 직접 강의를 하고 있다. 강좌로만 보고 따라하던 것을 정리하고 계속 복습할 수 있도록 하는 것이 포스팅의 목적이다. 


(센토스 라고 할지 CentOS라고 할지는 써보면서 정하려고 한다)


Ubuntu를 본격적으로 사용하면서 동시에 멀티부팅으로 활용하는 Windows에서 vmware를 통한 CentOS 실습을 병행하고 있다.


처음에 CentOS를 설치하기 위한 기초 세팅을 하려고 한다. 



구분 

Server 

Server(B) 

Client 

Winclient 

주요 용도 

서버 전용 

서버 전용(텍스트모드) 

클라이언트 전용 

Windows클라이언트 전용 

OS 

CentOS 64-bit 

CentOS 64-bit 

CentOS 64-bit 

Windows 10 

 HDD

80GB 

40GB 

40GB 

20GB 

Memory(swap)

1GB 

1GB 

1GB 

2GB 

Network Type 

NAT 

NAT 

NAT 

NAT 

CD/DVD 

Floppy 

Audio 

USB 

Printer 



이렇게 기초세팅을 한다. 위의 기준은 '이것이 리눅스다' 라는 책을 참조하였다. 


가장먼저 기초세팅 전에 vmware에서 인터넷을 사용하기 위해서 network-setting 을 해줘야 한다. 일단 호스트 IP주소를 확인하기 위해 

cmd.exe 창을 열어서 IP주소를 확인한다. 


>>> ipconfig

VMNET8(Host IP Address) check




Vmware workstation>Network Editor>VMNET8 IP Address(192.168.111.100) 


DHCP는 xxx.xxx.xxx.254 고정되어 있어 server, server(b), client, winclient에 ip주소를 자동으로 할당한다. 




1. Server setting


01_Software : Workstation for developing & creating

02_HDD : General Partition ; swap(2GB) /(root;78GB;automatic set)

03_시스템도구>소프트웨어>최신패키지만, 전용패키지만 OFF>소프트웨어 공급원>업데이트확인취소

04_yum auto-update failed_

#cd /etc/yum/repos.d/

#gedit CentOS-Base.repo

[updates] 부분을 주석처리(#)

05_Network Setting

#cd /etc/sysconfig/network-scripts

#gedit ifcfg-ens32

BOOTPROTO="dhcp"-->"none"

IPADDR=192.168.111.100

NETMASK=255.255.255.0

GATEWAY=192.168.111.2

DNS1=192.168.111.2

ONBOOT="NO"-->"YES"

#systemctl restart network

#ifconfig

06_SELINUX

#gedit /etc/sysconfig/selinux

SELINUX=forcing-->disabled


2. Client


01_Software : gnome-desktop

02_HDD : auto-set

03_root log-in block

#gedit /etc/pam.d/gdm-password

auth required apm_succeed_if.so user 1=root quiet               --> 행 추가


3. Server(B)


01_Software : Minimal Install

02_02_HDD : General Partition ; swap(2GB) /(root;38GB;automatic set)

03_Network Setting

#cd /etc/sysconfig/network-scripts

#gedit ifcfg-ens32

BOOTPROTO="dhcp"-->"none"

IPADDR=192.168.111.200

NETMASK=255.255.255.0

GATEWAY=192.168.111.2

DNS1=192.168.111.2

ONBOOT="NO"-->"YES"

#systemctl restart network

#ifconfig

04_SELINUX

#gedit /etc/sysconfig/selinux

SELINUX=forcing-->disabled

05_yum -y install bind-utils *get unzip tar



별도의 설정 명령어들


system-config-date : 날짜 및 설정

nmtui : 네트워크 설정

firewall-config : 방화벽 설정

ntsysv : 서비스 설정


system-config-keyboard : 키보드설정

system-config-language : 언어설정

system-config-printer : 프린터설정

system-config-users : 사용자설정

system-config-kickstart : 네임 서버 설정











+ Recent posts