센토스 리눅스에서는 일반적으로 gedit과 vi 에디터라는 기본 텍스트모드로 사용가능한 에디터를 제공한다.


gedit은 쉽게 생각해서 windows의 notepad(메모장)과 동일하게 사용할 수 있다. 


터미널에서 


# gedit 


입력하면 아래와 같은 화면이 나온다. 메모장과 굉장히 동일하다. 



적고 싶은 명령이나 메모를 위의 화면에 입력하고 저장하고 빠져나오면 된다. 


하지만 vi 에디터는 visual 한 에디터라지만 생각보다 굉장히 비주얼적이지 않다. 


vi 에디터는 사용법을 별도로 익혀야 한다. 


vi 에디터를 통해 mytext1.txt 이라는 파일을 만들어보자.



다음과 같이 입력하면 mytext.txt 라는 파일이 생성되는데 여기서 주의할점은 그냥 mytext 라고만 적으면 자동으로 txt 파일을 생성하지는 않는다는 점이다. 원하는 확장자 명이 있다면 그 확장자명을 적어서 만들어주어야 한다. 



# vi mytext.txt


를 땅~ 쳐서 들어오면 위와 같은 화면이 열린다. 


이 화면에서는 바로 편집이 불가능하다.(키보드를 눌러도 입력이 되지 않는다)


편집을 위해서는 편집모드로 들어가야 되는데 키보드에서 i 를 눌러서 Insert Mode 라는 입력형 모드로 진입해야한다. 


i 를 누르면



위의 그림과 같이 -- INSERT -- 라는 문구가 생기면서 입력이 가능해진다. 


이제 아래와 같이 텍스트를 입력하고 파일을 저장해보자. 



vi 에디터에서는 gedit에서처럼 별도로 저장버튼이 있지 않기 때문에 명령어를 통해 저장해주어야 한다. 


일단 INSERT 모드를 빠져나와야 하므로 esc를 누르고 shift + ; 를 누른다( : 를 입력하라는 말이다)


<esc를 눌렀을 때>


< : 을 입력했을 떄>


다음과 같이 맨 아랫줄에 : 라는 표시가 뜨면 명령모드로 바뀐 것이다. 해당 명령모드에서 


wq 라고 입력하면 write and quit 로 저장한채로 vi 에디터에서 빠져나오게 된다. 


# ls 명령으로 확인해보면



아래와 같이 mytext.txt 파일이 생성된 것을 확인할 수 있다. 


# vi 


로만 입력을 한 다음 작성할 내용을 입력하고


esc

:

w myfile.txt

q


이런 형식으로 작성할 수도 있지만 앞서 정리했듯이 미리 파일이름을 지정하고 작성하는 방식이 더 편하므로 각자의 편의에 맞게 사용하시면 되겠다. 


똑같이 기본 작성해둔 파일을 수정할 수 도 있는데 


앞서 생성한 mytext.txt 파일을 수정하고 싶으면


# vi mytext.txt 


로 들어가면 기존에 저장된 mytext.txt 에 들어가서 작성한 내용을 수정하고 동일한 방식으로 저장하고 빠져나오면 된다. 


가끔 잘못입력해서 저장하지 않고 빠져나오려면


명령모드 ( : 를 입력하고 q! 를 입력해서 입력한 부분을 무시하고 빠져나올 수 있다.)


vi 에디터에서 파일을 작성하다가 오류로 인해 터미널이 종료되거나 문제가 생겨서 컴퓨터가 껴질 경우 


작성하던 파일은 임시파일로 저장된다. 


예를 들어 


# vi mytext.txt 


를 입력해서 해당 파일을 수정하다가 터미널을 강제 종료한 후 


다시 터미널을 열어 


# vi mytext.txt 


를 입력하면 다음과 같은 화면이 나온다. 



해당 화면이 뜨는 이유는 임시파일이 생성되었기 때문인데 space를 눌러 


입력화면으로 돌아간 다음 q로 무시하고 빠져나오면 된다. 


임시파일을 확인하려면 숨김옵션이 적용되어 있으므로


# ls -a


명령으로 모든 파일을 확인할 수 있는데 아래에 화면에서 .mytext.txt.swp 파일이 임시파일이다


swap 메모리에 저장된 파일인 것이다. 



해당 파일을 지우면 mytext.txt를 다시 열어도 임시파일이라는 경고메시지가 뜨지 않는다.


# rm .mytext.txt.swp

y


를 입력해서 임시파일을 지우면 아래와 같이 문제 없이 해당 파일이 열리게 된다. 



vi의 나머지 기능들을 요약하자면


명령모드 -> 입력모드


i : 현재 커서의 위치부터 입력

I : (대문자 i) 현재 커서 줄의 맨 앞에서부터 입력 

a :  현재 커서의 위치 다음칸부터 입력

A :  현재 커서 줄의 맨 마지막부터 입력


명령모드에서 커서를 이동


h : 커서를 왼쪽으로 한 칸이동 (← 과 동일하다)

j  : 커서를 아래로 한 칸 이동(↓ 와 동일하다)

k  : 커서를 위로 한 칸 이동(↑ 와 동일하다)

l  : 커서를 오른쪽으로 한 칸이동(→ 와 동일하다)


명령모드에서 삭제, 복사, 붙여넣기


x : 현재커서가 위치한 글자 삭제(delete 키와 동일)

X : 현재 커서가 위치한 앞 글자 삭제(backspace와 동일)

dd : 현재 커서의 행 삭제

숫자 dd : 현재 커서부터 숫자만큼의 행 삭제

yy : 현재 커서가 있는 행을 복사

숫자 yy : 현재 커서부터 숫자만큼의 행을 복사

p : 복사한 내용을 현재 행 이후에 붙여넣기

P : 복사한 내용을 현재 행 이전에 붙여넣기


명령모드에서 내용복구


u : 원래의 내용복구

nu : n단계까지의 명령을 복구


명령모드에서 찾기


/요 : 현재위치에서 아래방향으로 '요'라는 단어를 찾는다

?요 

/ : 단어찾기를 반복(위 -> 아래)

n : 단어찾기를 반복(아래-> 위)


명령모드에서 치환


:%s/기존문자열/새문자열


새로운 파일이름으로 저장하기


: w 새로운파일이름

: w %.new : 현재파일이름에 .new를 붙여서 새로운 파일로 저장


set number : vi 에디티 상에서 행 번호를 표시한다




 

기능들은 훨씬 더 많지만 위의 기능정도만 익혀두면 편집하는데 큰 문제는 없을 것이다. 








파이프, 필터, 리다이렉션


오늘은 센토스 리눅스에서 서버를 구축할 때 꼭 알아야 할 필수 개념들과 명령어를 알아보려고 합니다. 


파이프(pipe)


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

"|" 문자를 사용함


# ls -l /etc/ | more


필터(filter)

필요한 것만 걸려 주는 명령어


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

주로 파이프와 함께 사용


 # ps -ef | grep bash    

--> ps -ef 는 현재 작동중인 프로세스들을 보여주는 명령어, grep 은 bash에 관련된 명령어만 걸러주는 명령어


  # rpm -qa | grep gedit

 --> gedit 관련된 설치 파일만 골라서 보여주는 명령어


리다이렉션(redirection)

표준 입출력의 방향을 바꿔 줄 때 사용하는 명령어


# ls -l 의 결과를 파일로 만들고 싶을 때


# ls -l > file.txt 

라고 적으면 터미널에 해당 결과가 출력되는 게 아니라 file.txt 폴더에 결과가 저장된다. 


# ls -l >> file.txt 


라고 적으면 기존에 file.txt는 유지하고 밑에 덧붙여지게 되는데 

# ls -l > file.txt 라고 적으면 최근의 기록으로 해당 파일이 이미 존재하는 경우 덮어쓰게된다. 


# sort < file.txt > out.txt


sort 는 정렬을 시키는 명령어로 결국 file.txt를 정렬해서 out.txt 파일을 만들어내라는 명령이다. 


이제는 프로세스데몬에 대해서 이해할 차례다.


프로세스란 하드디스크에 저장된 실행코드(프로그램)가 메모리에 로딩되어 활성화된 것을 의미합니다. 

Window OS에서 작업관리자 창을 통해 현재 실행 중인 프로세스를 확인하는데 그 프로세스를 의미합니다. 


포그라운드 프로세스(foreground process)

실행을 하면 화면에 나타나서 사용자와 상호작용을 하는 프로세스로 대부분의 응용프로그램입니다.


백그라운드 프로세스(background process)

실행은 되었지만 화면에는 나타나지 않고 실행이 되는 프로세스로 백신이나 서버 데몬(서비스) 등과 같은 프로그램이 이에 해당합니다. 


각각의 프로세스는 고유한 프로세스 번호를 가집니다.

또한 현재 실행되고 있는 백그라운 프로세스에는 작업번호가 순차적으로 붙게 됩니다. 


# ps -ef 


명령을 통해 현재 실행중인 프로세스를 확인할 수 있으며 프로세스 번호는 실행할 때마다 랜덤된 번호를 부여하므로 프로세스 번호는 계속 바뀌게 된다. 


모든 프로세스는 부모(상위) 프로세스가 있으며 


# ps -ef | grep bash 


에서 


(picture) 

root 60637 60630 0 19:26 pts/0 00:00:00 bash 

에서 60637은 자식프로세스, 60630은 부모프로세스이다. 

자식을 부모에 종속되므로 자식프로세스를 킬(kill)하더라도 부모프로세스는 킬되지 않는다. 


명령어로는


ps

현재 프로세스의 상태를 확인하는 명령어


# ps -ef | grep process_name 


kill

프로세스를 강제로 종료하는 명령어


# kill -9 process_number

# kill process_number --> 역시 강제종료지만 -9 명령어보다 약하다


pstree

부모 프로세스와 자식 프로세스의 관계를 트리 형태로 보여준다


그렇다면 이제 배운 명령어를 가지고 실험을 해보자.

아래 명령어를 입력해서 무한 루프 y를 생성해보자. 중단하려면 Ctrl+C를 누르면 된다.


# yes 

^C(Ctrl+C)

# yes > /dev/null

# ps -ef | grep yes


grep --color=auto 프로세스는 반복되는 프로세스로 무시하면 된다.


# kill -9 64198


포그라운드 -> 백그라운드 -> 포그라운드


아래명령을 다시 실행시킨다음 Ctrl+Z로 일시중지 시키고 명령어 bg를 입력하면 포그라운드에서 돌던 프로세스가 백그라운드에서 돌기 시작한다. 

다시 포그라운드로 돌리려면 fg를 입력하면 된다.


# yes > /dev/null

^Z

[1] + Stopped  yes > /dev/null

# bg

# fg  process_number

^C



# gedit

# gedit  &  


명령어 뒤에 &를 넣으면 백그라운드로 돌린다는 의미이다. 해당 명령어는 명령어를 입력했을 때 포그라운드로 출력물이 보이는 경우에 효과적이다. 

그래서 보통 압축을 할때 (tar 명령) 포그라운드에서 진행 상황을 보지 않고 tar .... & 이라고 입력해서 백그라운드에서 압축을 실행시킬 수 있다. 



이번엔 서비스이다.

서비스는 시스템과 독자적으로 구동되어 제공하는 프로세스를 일컫는다. 예를 들자면 웹 서버(httpd), DB 서버(mysqld), FTP서버(vsftpd) 등이 있다.

실행 및 종료는 대게 


# systemctl start/stop/restart service_name


으로 사용한다

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


서비스는 항상 가동되지만 소켓이란 것이 있다. 소켓은 외부에서 특정 서비스를 요청할 경우에 systemd가 구동시킨다. 그리고 요청이 끝나면 소켓도 종료된다. 따라서 소켓으로 설정된 서비스를 요청할 때는 처음 연결되는 시간이 앞에서 설명한 서비스에 비교했을 때보다 약간 더 걸릴 수 있다. 왜냐하면 systemd가 서비스를 새로 구동하는 데 시간이 소요되기 때문이다. 이와 같은 소켓의 대표적인 예로 텔넷(Telnet)이 있다. 쉽게 말해 서비스는 항상 가동되어 있어 요청하면 바로 반응하고 소켓은 서비스를 새로 가동시켜야 하기 때문에 반응이 서비스에 비해 느리다. 

예전 centos 에서는 소켓과 비슷한 개념으로 xinetd 데몬이 주로 사용되었다고 하는데 centos 7에 들어와서 여전히 xinetd 데몬을 지원하긴 하지만 많은 서비스들이 xinetd 대신 소켓을 사용하는 추세이다. 


이렇게 오늘은 센토스 리눅스에서 서버를 구축할 때 알아뒀으면 하는 개념들과 명령어에 대해 정리해보았다.

필자도 공부중이지만 모르는 부분은 물어가면서 구글링해가면서 하나씩 배워가는 재미가 쏠쏠한 센토스 리눅스이다. 

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


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


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


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


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


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 : 네임 서버 설정











초보 리눅서의 비애


윈도우의 잔고장과 바이러스에 질린 나머지 이제 막 Linux를 접하기 시작한 초보 Linuxer 이자 대표적인 Fast-Korean 감성의 소유자로써 컴퓨터가 조금이라도 느려져 버벅이는 현상을 끔직하게 싫어한다. 


이러한 현상이 나타나는 대표적인 이유가 RAM 사용량 때문이다. 


윈도우와 마찬가지로 Ubuntu Linux에서 프로그램을 사용하다보면 계속 캐쉬 사용량이 늘어나게 된다. 


캐쉬는 RAM에 저장되므로 프로그램을 동시다발적으로 많이 사용하거나 한 번에 RAM을 많이 돌리는 프로그램을 사용하게되면 RAM사용량, 메모리 사용량이 급격히 많아지게 되면서 메모리 용량을 초과하는 과부하가 걸리게 된다. 이는 곧 컴퓨터가 느려지거나 다운되는 현상을 유발하는 주범이 된다. 


일단 현재 캐쉬된 메모리 사용량을 확인해보자


# free -m


캐쉬 메모리를 지우는 명령어는 다음과 같다. 


#sync && echo 3 > /roc/sys/vm/drop_caches 


#free -m


캐쉬 메모리 용량이 떨어진 것을 확인할 수 있다. 


체감상으로 느껴질만큼 빨라진 건 당연히 아니다. 하지만 눈에서 받아들이는 Linux 화면의 모습은 조금이라도 빨라졌길 바라는 마음을 반영하듯이 아주 조금 빨라진 것 같다. 


P.S 매 시간마다 캐쉬 메모리를 지우는 설정은 다음과 같다. 


#crontab -e

0 **** sync && echo 3 > /proc/sys/vm/drop_caches


'Work-udy > Linux' 카테고리의 다른 글

[Ubuntu 16.04 LTS] 02. vim 에디터 사용하기  (0) 2017.06.12

※본 글은 Ubuntu 16.04 LTS version 을 사용합니다. 참고바랍니다. 

※ Ubuntu를 처음 설치하고 나서 root 관리자의 초기 비밀번호를 직접 설정해 주어야 한다. 

sudo passwd root 

를 입력하면 비밀번호를 설정할 수 있다

1234!

1234!  (!와 같은 특수문자 사용이 불가한 운영체제도 있다)

와 같이 비밀번호를 입력하고 root 비밀번호를 설정해주어야 이후에 root 권한으로 터미널에 접속할 수 있다. 

--


앞선 글에서 말했다시피 윈도우보다 바이러스 없는 깨끗한 환경과 Customizing에 매력을 느껴 Linux를 시작하게 되었다. 


CentOS는 서버 구축용도가 강하다고 들어 (누가 그랬는지는 모르겠다...) 그냥 또다른 범용적인 linux인 Ubuntu를 설치하게 되었다. 



Linux에서는 바탕화면 테마부터 터미널 테마까지 별의 별것들을 취향에 맞게 설정할 수 있다.


테마와는 무관하지만 이번에는 vi에디터를 vim에디터로 변경해보려고 한다. 


가장 먼저 우분투(ubuntu)를 설치하고 터미널을 열고 Ctrl+Alt+T 


vi 에디터의 정보를 확인하면 


$ vi 


아래와 같이 vi 에디터의 정보를 화면을 통해 볼 수 있다. 


-- 사진 vi 에디터 --


하지만 기존의 vi 에디터는 set number 부터 syntax 까지 불편한 부분이 있다.

:set number 를 통해 행 넘버 지정

syntax는 소스색상 구별(vi 에디터에서 지원하지 않음)


그래서 vi 에디터의 상위 호환인 vim 에디터를 사용하시는 분들이 많다(는 얘기를 들었다).


설치를 위해서 가장 먼저 


sudo apt-get update


를 통해서 apt 버전을 최신버전으로 업데이트를 진행해 주어야 한다. 


sudo apt-get install vim 


을 입력한다. root(관리자) 권한으로 vim 패키지를 설치하는 명령어이다. 


비밀번호를 입력하라고 나오면 root 관리자 비밀번호를 입력하면 된다. 


Y를 누르고 설치를 완료하고 나면 설정을 수동으로 진행해 주어야 한다. 


vi ~/.vimrc


vi 에디터를 통해 vimrc라는 숨김폴더를 생성한다. 


그리고 insert 모드로 변경 후 


set autoindent

set smartindent

set cindent

set number

set showmatch

set tabstop=3

set shiftwidth=3

syntax enable

syntax on 


의 편의사항을 직접 입력해주면 된다. 


적용을 위해 


vi ~/.bashrc 


입력 후 엔터를 치면 bashrc를 실행시키고 적용이 된다. 


실행이 되고 나면 inser mode로 #주석처리가 없는 부분에 


alias vi='vim'


-- 위치 사진 --


을 입력하고 저장을 하고 종료한다. 


마지막으로


source ~/.bashrc


로 설정을 동기화하여 마무리해주면 된다. 


이렇게 vim 에디터 설정이 완료되었다.


P.S 모든 사용자가 이용하게 하려면 


/etc/bashrc 에 해당 명령어를 추가해주면 된다. 


vim 에디터에 대한 더 상세한 정보는 http://movenpick.tistory.com/26 에서 참고할 수 있다. 


-- vim 에디터 테스트화면 --





      소개글



주로 다룰 주제는 



1.    IT News 및 동향


2.    일상 

    - 집사일기

    - 영화일기

    - 주부일기


3.    디자인 

    - 디자인 툴 도전기


4. Work-udy 는 Work+Study 의 약자로 회사에서 일하면서 느끼고 배운점을 정리하는 장입니다.



매일 업데이트 되진 않겠지만(당연히) 쓸만한 정보를 얻어가실 수 있기를 바랍니다. 


혹자는 블로그를 운영하는 것이 21세기의 산물인 인터넷을 제대로 이용하는 방법이라고 하였기에 써보려는 마음도 있습니다 :-)


P.S 댓글로 질문달아주시는 분들을 위해 덧붙입니다. 일반적으로 매일 댓글을 확인하지만 부득이하게 확인하지 못하는 경우가 있어서 급하게 문의하실 사항이 있으시다면


jerrystyle@tistory.com 으로 메일 보내주시면 됩니다 ~:)





'소개' 카테고리의 다른 글

JK St. Who  (0) 2017.04.20



지난달부터 가입해보려던 티스토리를 오늘에서야 초대장을 받아 가입에 성공했습니다. 


비록 지금은 찾는 사람도, 보는 사람도 없는 허허벌판이지만 

누군가에게는 필요한 정보를, 

누군가에게는 소소한 정보를 

줄 수 있는 공간으로 만들려고 합니다. 


대단한 블로거가 되고 싶은 욕심도, 눈에 띌 욕심도 없지만 소소하게 배움을 정리하는 공간이 될 수 있기를 바라봅니다. 


더불어 매일같이 노력하는 사랑스런 부인과 밥만 축내는 우리 고양이들 대철이, 소철이, 가루, 커피에게 고맙다고 전합니다.


읽어주셔서 감사합니다. (꾸벅...)



2017. 04. 20

'소개' 카테고리의 다른 글

주제  (0) 2017.04.20

+ Recent posts