728x90

CentOS를 비롯한 Redhat 계열에서는 Yum을 이용해 패키지를 관리합니다.
간혹 yum 으로 패키지를 설치하다 패키지 데이터베이스를 열 수 없다는 에러를 만날 수 있습니다.
영문 기준으로 rpmdb open failed 라는 메세지가 바로 그것이죠.

이런 상황을 해결하는 가장 쉬운 방법은 RPM DB 삭제입니다.
DB를 삭제한다고 뭔가 큰 일이 일어나는 것은 아닙니다. 
DB 자체에 뭔가 이슈가 생긴 경우이기 때문에 
DB 파일 삭제후 다시 생성하면 됩니다. 

rm -f /var/lib/rpm/_db*
rpm -vv --rebuilddb
728x90
728x90

서버를 운영할 때 중요한 것중 하나가 디스크가 꽉 차지 않도록 유지하는 것입니다. 
디스크가 꽉 차게 되면 여러 어플리케이션들이 오동작 할 수 있으며 
심각한 경우 로그인이 어려워질수도 있습니다. 

디스크 용량 확인

디스크가 꽉 찼는지 확인하기 위해서는 df 명령을 사용합니다. 

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda2        40G   40G  372M 100% /
devtmpfs        1.9G     0  1.9G   0% /dev

 

이제 용량을 많이 차지하는 파일을 찾아보겠습니다.

폴더별 용량 확인

루트 경로에서 du 명령을 사용해 폴더별 사용량을 체크해 볼 수 있습니다.
미쳐 캡쳐하기 전에 파일을 삭제, 정리하는 바람에 아래 예제에는 큰 용량의 파일이 보이진 않네요

$ sudo du -sh * | sort -hr
3.8G    usr
1.9G    var
1.6G    home
218M    opt
205M    boot
200M    run
35M     etc
764K    tmp
196K    root
0       sys
0       srv

파일 삭제 후에도 용량이 안늘어난다면?

간혹 파일 삭제 후에도 용량이 확보되지 않을때가 있습니다. 
이 경우 활성 프로세스나 좀비 프로세스가 파일 디스크립터를 들고 있어서일 가능성이 높습니다. 
이때는 lsof 명령을 이용해 문제가 되는 프로세스를 식별할 수 있습니다. 

$ /usr/sbin/lsof / | grep deleted
COMMAND     PID     USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
...

PID 컬럼에서 프로세스 ID를 확인한 후 ps 명령으로 재차 확인을 합니다. 
문제의 프로세스를 kill -9 #PID# 등의 명령으로 종료한뒤
lsof 명령을 다시 실행하면 문제의 FD 들이 삭제된 것을 확인할 수 있습니다. 

$ kill -9 12345
$ /usr/sbin/lsof / | grep deleted

이후 df 명령을 사용해서 디스크 용량을 확인하면
공간이 확보된 것을 확인할 수 있습니다. 

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda2        40G  7.8G   33G  20% /
devtmpfs        1.9G     0  1.9G   0% /dev

 

Udemy의 리눅스 커맨드라인 부트캠프 강의로 리눅스 기초 체력을 향상시켜 보세요!

 

【한글자막】 Linux Command Line 부트캠프: 리눅스 초보자부터 고수까지

커맨드 라인 고급 사용자로 거듭나기! 이 코스에서 배우는 커맨드를 통해 컴퓨터와 상호 작용하는 방식을 변경하여 모든 새로운 워크플로우와 전략을 사용하고, 컴퓨터를 다루는 데에 있어 여

www.udemy.com

 

본 포스팅은 제휴마케팅을 통해 소정의 수수료를 지급받을 수 있습니다.

728x90
728x90

다량의 데이터를 추출하면 필연적으로 정렬에 대한 필요성이 생깁니다. 정렬이 필요한 순간은 정말 다양하겠지만 대표적인 경우들을 들어보자면, 1) 특정한 조건에 만족하는 로그 라인의 갯수를 오름/내림 차순으로 정렬, 2) 시계열 순으로 로그가 추출되지 않은 경우, 시간 컬럼을 기준으로 로그 라인을 정렬과 같은 것이 있습니다. 1의 경우는 카운트를 위한 명령을 파이프로 연결후 쉽게 정렬할 수 있습니다.


$ cat domain.log | awk '{print $3}' | sort


위의 커맨드는 domain.log 파일을 핸들링하면서 세번째 열을 출력하고 이를 정렬하는 명령어 입니다. 여기에 파이프를 추가하여 유니크(Unique)한 이름을 발라내고, 다시 카운트된 갯수를 기준으로 정렬하려면 아래와 같은 명령을 생각할 수 있습니다.


$ cat domain.log | awk '{print $3}' | sort | uniq -c | sort -rn


그런데 특정한 컬럼을 기준으로 정렬하되 전체 데이터를 유지하려면 awk 명령으로는 왠지 좀 불편한 느낌입니다. 이때는 awk 를 이용하지 말고 sort 명령만으로 정렬하는 것이 더 유리합니다. 


$ cat domain.log | sort -k 3


이렇게 하면, 세번째 컬럼 (이때는 공백으로 각 컬럼이 나뉘어진 데이터라 가정했습니다) 을 기준으로 정렬후 데이터를 출력해 주게 됩니다. 자주 쓰는 명령인데 쓸때마다 자꾸 구글링하게 되어 블로그에 기록해 둡니다!



728x90
728x90

가끔 사용중인 리눅스 배포판의 버전과 커널의 버전 확인이 필요할때가 있습니다. 워낙에 배포판도 많고 커널의 버전도 다양하기 때문에 환경에 적합하게 구성된 패키지를 설치하지 않는 경우 이슈가 생길수도 있기 때문이지요. yum 이나 apt-get 으로 설치하는 경우에는 별 문제가 없겠지만 별도로 어플리케이션을 다운로드 받거나 빌드할 필요가 있을때는 버전을 잘~ 맞추어줄 필요가 있습니다.


Cent OS 를 이용하는 경우 아래와 같은 명령을 이용해서 운영체제의 버전과 커널의 버전을 확인할 수 있습니다. redhat 과 같은 다른 배포판 역시 비슷한 네이밍 컨벤션을 사용하고 있기 때문에 해당 폴더에서 어렵지 않게 관련된 파일을 확인할 수 있으니 참고하시기 바랍니다. 자꾸 까먹게 되어 블로그에 기록해 둡니다. 누군가에겐 또 도움이 되리라 믿으며..!!



#cat etc/centos-release

#uname -r 



728x90

+ Recent posts