일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Linux
- 개발자 회고록
- java 백준 1차원 배열
- 연습문제
- 반복문
- 리눅스
- 문자열
- 백준 java
- 자바
- 자바스크립트 코딩의 기술
- 카카오
- Memoir
- 프로그래머스
- Kotlin
- 스프링 빈
- Java
- 코딩테스트
- 리눅스마스터 1급 정리
- 명령어
- GoingBus
- 리눅스마스터 3과목
- 리눅스마스터1급
- toCharArray
- 스프링 컨테이너
- 고잉버스
- map
- JavaScript
- 월간코드챌린지
- 코테
- 백준 javascript
- Today
- Total
hoon's bLog
리눅스 시스템관리 | 일반 운영관리 3 본문
3. 프로세스 관리
프로세스의 제어
프로세스 우선순위
- 명령행에서 'ps -l'
- PRI와 BNI가 있고, 이 두 항목이 프로세스의 우선순위와 연관
- PRI는 운영체제에서 참고하는 우선순위 값으로 낮은 값일수록 우선순위가 높다.
- 인위적인 조작이 되지 않고, 시스템 상황에 따라 적절히 부여된다.
- NI 값은 root나 사용자가 조작하는 우선순위 값으로 -20부터 19까지 설정 가능하다.
- 이 값 역시 낮은 값일수록 우선순위가 높고, root만이 값을 낮출 수 있다.(관련 명령어로 nice, renice)
프로세스와 /proc 디렉터리
/proc 개요
- 가상 파일 시스템.
- 동작중인 프로세스 상태 정보 시스템 및 하드웨어 정보 확인
- ps 명령 시 이 디렉터리 사용
- 프로세스 생성시 이 디렉터리에 PID와 동일한 서브 디렉터리가 생성. 그 안에 정보가 저장.
/proc 디렉터리의 주요 정보 파일 및 디렉터리
- acpi : 전원 관련 정보가 있는 디렉터리
- bus(디렉터리)
- cmdline : 부팅 시에 실행되는 커널 관련 옵션에 대한 정보
- cpuinfo
- devices : 현재 커널에 설정된 디바이스 드라이버의 리스트 정보
- dma : 시스템에서 사용 중인 DMA 정보
- filesystems : 커널에 설정된 파일 시스템의 리스트 정보
- interrupts : 시스템에서 사용 중인 인터럽트 정보
- iomem : 메모리 번지별로 할당된 리스트 정보
- ioports : 시스템에서 사용 중인 I/O 주소
- kcore : 시스템에 장착된 물리적 메모리의 이미지
- loadavg : 최근 1, 5, 15분 동안의 평균 부하율을 기록
- meminfo : 물리적 메모리 및 스왑 메모리 정보
- misc : 기타 장치에 대한 정보
- mounts : 시스템에 마운트된 정보가 기록
- net : Network 관련 정보 파일이 있는 디렉터리
- partitions : 현재 활성화된 파티션 정보를 기록
- scsi : 디렉터리
- swaps : 스왑 파티션 관련 정보
- sys : 커널과 관련된 정보가 있는 디렉터리 sysctl 명령으로 제어
- sysvipc : SysV IPC 자원 정보인 Messages Queues, Semaphores, Shared Momory 정보가 있는 디렉터리
- uptime : 시스템 가동 시간에 대한 정보를 기록
- version : 커널 버전 정보
- mdstat : RAID 사용시에 관련 정보
프로세스 스케줄링
스케줄링 이란 특정한 시간에 특정한 작업을 수행하게 하는 것.
at은 한번만 실행 시 사용, cron은 주기적으로 프로세스를 실행 시 사용.
at
- 보통 한번 실행되는 경우에 사용
- atd 데몬에 의하여 실행
- 지정한 작업은 큐에 저장
- 저장한 작업들은 /var/spool/at/ 디렉터리 아래 파일로 저장
- Ctrl + d 누르면 해당 작업 예약
[사용법]
$ at [option] 시간
옵션
- -q 큐 이름 : 작업의 대기 큐 지정
- -c 작업 : 작업 정보 출력
- -d : 예약한 작업 삭제
- -l : 큐에 있는 작업 출력
- -m : 실행한 결과 메일
- -f : 지정한 파일로부터 작업 읽어옴
atq : 큐에 저장된 작업을 보여주는 명령. 'at -l'과 같음.
atrm : 예약된 작업을 취소할 때 사용. 'at -d'와 같음.
at 사용자 제한
- /etc/at.allow 파일이 존재하는 경우에는 /etc/at.deny 파일 존재 유무에 상관없이 /etc/at.allow 파일에 등록된 사용자만 가능.
- /etc/at.deny 파일만 존재하는 경우에는 /etc/at.deny 파일에 등록된 사용자만 사용 불가능
- root만 사용가능
cron
7개의 필드로 구성
- munute : 0~59
- hour : 0~23
- day of month : 1~31
- month : 1~12
- day of week : 0, 7 일요일. 1~6 월~토. 아니면 직접 sun, mon……
- user-name : 보통 생략
- command
관련 명령어 : crontab
- '/var/spool/cron/사용자아이디' 파일로 저장.
[사용법]
$ crontab [option] 파일명
옵션
- -l : 설정된 내용 출력
- -e : 작성, 수정
- -r : 저장된 파일 삭제
- -u : root가 다른 사용자 crontab 다룰 때
cron 사용자 제한
/etc/cron.allow, /etc/cron.deny. at과 같은 원리로 제한이 동작.
프로세스 관련 명령어
PS
동작 중인 프로세스의 상태를 출력. System V, BSD, GNU에 따라 결과가 다르게 나타남.
System V 계열은 -를 사용. BSD 계열은 - 사용 x. GNU 에서는 --를 사용.
[사용법]
$ ps [option]
옵션
- a : 터미널과 연관된 프로세스를 출력(BSD). x와 연게해서 씀.
- u : 프로세스의 소유자를 기준으로 출력
- x : 데몬 프로세스처럼 터미널에 종속되지 않는 프로세스를 출력. a와 연계해서 씀
- l : 프로세스의 정보를 길게 보여주는 옵션 우선순위와 관련된 PRI와 NI 값을 확인
- e : 해당 프로세스에 관련된 환경 변수 정보를 함께 출력
- f : 프로세스간의 상속관계를 트리 구조로 보여줌
- p : 특정 PID를 지정할 때 사용(BSD)
- -A : 모든 프로세스를 출력(-e, System V)
- -a : 세션 리더를 제외하고 터미널에 종속되지 않은 모든 프로세스를 출력
- -f : 유닉스 스타일로 출력. PID, UID, PPID 표시.
- -C 프로세스명 : 지정한 프로세스 보여줌
- -o 값 : 출력 포맷 지정. pid, tty, time, cmd 등
- -p : 특정 PID 지정 (SysV)
- -u : 특정 사용자의 프로세스 정보 확인
ps 주요 출력 항목
- VSZ : 가상 메모리 사용량
- RSS : 실제 메모리 사용량
- TIME : 총 CPU 사용 시간
- C, CP : 짧은 기간 동안의 CPU 사용률
- F : 프로세스 플래스
- PRI : 실행 우선순위
- NI : nice 우선순위 번호
pstree
프로세스의 상태를 트리 구조로 출력
[사용법]
$ pstree [option]
옵션
- -a : 각 프로세스의 명령행 인자까지 보여줌
- -h : 현재 프로세스와 그것의 조상 프로세스르 하이라이트로 강조
- -n : 프로세스 이름 대신 PID로 정렬해서
- -P : PID도 같이 보여줌
top
동작중인 프로세스의 상태를 실시간으로 화면에 출력. CPU, 메모리, 부하 상태 확인. 실행 상태에서 다양한 명령 입력.
[사용법]
$ top [option]
옵션
- -d 갱신 시간
- -p : 특정 PID 값을 갖는 프로세스를 모니터링
kill
프로세스에 특정한 시그널을 보내는 명령. 옵션 없이 실행 시 프로세스에 종료 신호(15, TERN, SIGTERM)를 보냄.
[사용법]
$ kill [option] [signal] PID or %job_number
옵션
- -l : 시그널의 종류
- -s signal : 시그널의 이름을 지정
killall
같은 데몬의 여러 프로세스를 한 번에 종료시킬 때 사용하는 명령. 프로세스명을 사용.
[사용법]
$ killall [option] 프로세스명
옵션
- -l
- -w : 시그널을 받은 프로세스들이 종료될 때까지 기다림
- -v : 시그널이 전송된 결과를 출력
- -s signal
- -u 사용자명 : 특정 사용자의 프로세스를 지정 시에 사용.
jobs
백그라운드로 실행 중인 프로세스나 현재 중지된 프로세스의 목록을 출력해 주는 명령
[사용법]
$ jobs [option]
옵션
- -l : 프로세스 번호를 추가로 출력
fg
백그라운드 프로세스를 포어그라운드 프로세스로 전환
[사용법]
$ fg [job_number or % job_number]
bg
포어그라운드 프로세스를 백그라운드 프로세스로 전환하는 명령. 포어그라운드로 실행 중인 프로세스에 Ctrl + z를 눌러 작업을 일시 중지시킨 후에 bg 명령을 사용해서 백그라운드로 전환
nice
프로세스의 우선순위를 변경하는 명령으로 NI 값을 설정할 때 사용. 프로세스 기본 NI는 0. 지정 가능한 값의 범위는 -20 ~ 10. 값이 작을수록 우선순위 높음. 일반 사용자는 NI 값을 증가만 가능하고, root만 낮출 수 있음.
[사용법]
$ nice [option] 프로세스명
옵션
- -n 값, -값, --adjustment=값 : NI 값 수정. 지정 x, 기본 10.
renice
실행 중인 프로세의 우선순위를 변경할 때 사용. PID, username, GID 이용. renice는 기존의 NI 값에 상관없이 지정한 NI 값이 바로 설정. 낮추는건 root만 됨.
[사용법]
$ renice [option] NI 값 PID
옵션
- -p : PID
- -u : username
- -g : GID
nohup
사용자가 로그아웃하거나 작업 중인 터미널 창이 닫혀도 실행중인 프로세스를 백그라운드 프로세스로 작업될 수 있도록 해주는 명령.
표준 출력, 에러는 'nohup.out' 파일을 생성하여 기록. 사용자가 명령행 뒤에 &를 명시해야 백그라운드로 돌아감.
[사용법]
$ nohup 명령
pgrep
프로세스 이름 기반으로 검색하는 명령으로 PID 값을 출력.
[사용법]
$ pgrep [option] pattern
옵션
- -u : 특정 사용자가 실행시킨 프로세스 PID 출력
- -U : 특정 UID를 갖는 사용자가 실행시킨 프로세스 PID 출력
- -g : 특정 그룹이 실행시킨 프로세스 PID 출력
- -G : 특정 GID를 갖는 그룹이 실행시킨 프로세스의 PID를 출력
- -t : 특정 터미널에 실행 중인 프로세스의 PID 출력
pkill
프로세스명을 사용해서 특정 프로세스에 시그널을 보내는 명령. 기본 시그널은 15 TERM.
[사용법]
$ pkill [option] pattern
옵션
- pgrep와 같다.
4. 소프트웨어 설치 및 관리
패키지를 통한 소프트웨어 설치
프로그램 설치 개요
- c언어로 된 소스 파일은 tar로 묶은 후에 압축하여 배포
- 계층적인 디렉터리 구조로 만들고, 소스 컴파일을 위한 Makefile과 관련 문서들을 포함시킴
- 압축을 풀고, 데렉터리 이동 후 configure, make, make install의 작업을 거쳐야 하는데 초보자에게 쉬운 방법이 아님.
- 따라서 리눅스 배포판에서는 쉬운 프로그램의 설치, 삭제, 관리 등을 위해 독자적인 패키지 관리기법을 만듦. 레드햇의 RPM, 데비안의 dpkg, 수세의 YaST 등이 있음.
배포판별 패키지 관리 기법
- RPM : yum
- Dpkg : apt-get
- YaST : zypper
RPM(Red Hat Package Manager)
배포되는 rpm 파일의 형식
- 패키지 이름-버전-릴리즈-아키텍처.rpm
rpm 사용법
[사용법]
$ rpm [option] 패키지_파일명
설치 및 갱신 모드
옵션
- -i : 새로운 패키지설치. 이전 버전의 같은 패키지 존재 시 설치가 안됨(--install)
- -U : 패키지 업그레이드
- -F : 이전 버전이 설치되어 있는 경우에만 설치
- -v : 메시지를 자세히 보여줌(--verbose)
- -h : 설치 상황을 '#'으로 표시(--hash)
- --force : 강제 설치
- --nodeps : 의존성 무시 설치
- -vv : 메시지를 자세하게 볼 때
- --test : 설치되는지 테스트할 때
- --rebuilddb : rpm 설치했는데 검색 안될 때 rpm DB 업데이트할 때
제거모드
옵션
- -e : 설치된 패키지 삭제
- --nodeps : 의존성을 갖는 패키지가 존재 시 그것도 삭제
- --test
- --allmatches : 동일한 이름을 갖는 패키지 모두 다 제거
질의모드
옵션
- -q : 질의 시 꼭 사용. 패키지 이름과 버전만 표시
- -i : 설치된 패키지의 정보를 출력
- -l : 패키지에서 설치한 모든 파일 정보를 출력
- -a : 설치된 모든 패키지 목록
- -p 패키지 파일명 :
- -f 파일명 : 지정한 파일을 설치한 패키지 이름
- -c : 해당 패키지의 설정 파일이나 스크립트 파일을 출력
- -d : 해당 패키지의 문서 파일을 출력
- -R : 어떤 패키지에 의존하는지 보여줌
- --changelog : 특정 패키지의 바뀐 내역을 보여줌
- --scripts : 설치 및 제거 관련 스크립트를 보여줌
- --filesbypkg : 파일 앞에 패키지명을 붙임
- --queryformat : 질의의 결과를 원하는 형태로 출력
검증모드
- rpm 데이터베이스에 저장되어 있는 패키지의 메타데이터 정보를 이용하여 변경된 정보를 찾아내는 모드. 파일의 크기, 허가권, 소유권, 파일 형식 등에 대한 변경 정보를 출력.
옵션
- -V : 검증 기본 옵션
- -a : 모든 패키지 검사
리빌드 모드
rpm 소스파일인 .src.rpm 파일을 패키지 파일로 만드는 모드로서 rpmbuild라는 명령어를 사용
[사용법]
$ rpmbuild [option] 소스패키지
옵션
- --rebuild
YUM(Yellowdog Updater, Modified)
rpm 기반의 시스템에서 패키지를 손쉽게 설치해 주고 자동으로 업데이트를 수행하는 명령행 기반 유틸리티. 의존성 문제 자동 해결.
yum 관련 파일 및 디렉터리
- 환경 설정 파일 : /etc/yum.conf
- 설치 및 업데이트를 위한 저장소 : /etc/yum.repos.d
- 작업과 관련된 정보 : /var/cache/yum/x86~/6/base
- yum 관련 작업의 로그 : /var/log/yum.log
yum 사용법
[사용법]
$ yum [option] [command] 패키지_파일명
옵션
- -y : 모든 질의에 yes
- -v : 자세한 정보
command
- list [항목] : 전체 패키지 정보 항목 값은 installed, updates. 항목 기본 값 all
- info [패키지명]
- check-update : 업데이트 필요한 패키지 업데이트
- update [패키지명]
- install [패키지명]
- serarch [문자열..]
- remove, erase [패키지명]
- grouplist : 패키지 그룹에 대한 정보를 출력
- groupinfo 패키지그룹명
- groupupdate 패키지그룹명
- groupinstall 패키지그룹명
- groupremove 패키지그룹명
- whatprovides : 특정한 파일이나 기능과 관련된 패키지 정보를 검색
- clean [값] : yum 관련 저장된 정보 삭제할 때 사용. 설정 값에는 all, packages, rpmdb, dbcache 등이 있음
- history
데비안 패키지 관리
데비안 패키지 관리의 개요
dpkg라는 데비안 패키지 관리 도구를 사용, .deb 형태의 파일로 배포하여 설치, 삭제 등의 관리를 함.
파일 형식 : 패키지 이름_버전-릴리즈-아키텍처.deb
데비안 패키지 관리 프로그램에는 추가로 dselect, alien이 있음. dselect는 curses 메뉴 방식의 유틸리티. alien은 다른 종류의 리눅스 패키지 형식을 상호 변환해주는 유틸리티.
dpkg
[사용법]
$ dpkg [option] 패키지명 패키지_파일명
옵션
- -i 패키지 파일명 : 패키지 설치 시(--install)
- -R 디렉터리명 : 지정 디렉터리 안의 패키지 설치
- -l : 설치돼있는 패키지 출력(--list)
- -c 패키지 파일명 : 패키지 파일 정보(--contents)
- -L 패키지명 : 패키지가 설치한 파일 목록 (--listfiles)
- -r 패키지명 : 패키지를 제거하는데, 환경 설정 파일 남겨둠(--remove)
- -P 패키지명 : 환경 설정 파일까지 전부 제거 (--purge)
- -S 파일명 : 해당 파일을 설치한 패키지 이름(--search)
- -C : 완전히 설치되지 않은 패키지에 대한 검사(--audit))
- --unpack 패키지 파일명 : 환경 설정은 하지 않고, 패키지를 풀기만 함
- --configure 패키지명 : --unpack 옵션 풀린 패키지를 환경 설정할 때 사용.
- -a : --configure 시 패키지명 대신에 이 옵션 사용하면 언팩 된 패키지들에 대한 환경 설정을 함.
- -s 패키지명 : 패키지 상태(--status)
apt-get
데비안 리눅스 배포판에서 패키지 관리를 쉽게 하기 위해 제공되는 명령행 기반의 유틸리티.
[사용법]
$ apt-get [option] command 패키지명
옵션
- -y
- --purge
소스 코드 컴파일
소스 설치법의 개요
압축 풀기, 디렉터리 이동, configure, make, make install의 5단계를 거침.
소스 설치의 주요 3단계
configure
- 소스 프로그램의 환경 설정을 하는 스크립트.
- 사용자들이 자신의 환경에 맞도록 손쉽게 수정하도록 제공되는 스크립트.
- 이 스크립트는 사용자 시스템에 적당한 스프트웨어 패키지가 생성되도록 Makefile을 만듦
make
- 소스 코드에서 실행 가능한 프로그램과 라이브러리를 자동으로 빌드하는 자동화 도구
- 보통 configure에 의해 변경된 내용을 반영하고, 타깃과 의존성 관련 작업을 한 후에 최종적으로 실행파일을 만든다.
make install
- 컴파일된 실행 파일을 지정한 속성으로 지정된 디렉터리에 설치
cmake
cmake의 개요
- 소스 컴파일 시 사용되는 Make의 대체프로그램 멀티 플랫폼을 지원하기 위한 목적으로 등장한 오픈소스 프로젝트.
- cmake를 사용하는 대표적인 프로그램에는 mysql이 있음.
cmake의 특징
- 독자적인 설정 스크립트를 이용
- 유닉스 계열, Mac OS X 윈도우 계열 등 다양한 운영체제 지원
- C, C++, Java, Fortran에 대해서는 자체적으로 의존 관계를 분석할 수 있음
- SWIG, Qt, FLTK 등을 지원
- MS Visual Studio, .Net 을 지원
- 이클립스용 빌드 파일 생성 가능
- 타임스탬프를 통해 파일 내용 변화 알 수 있음
- 평행 빌드 지원
- 크로스 컴파일
- Dart, CTest, CPack 등을 포함
cmake를 채택한 프로젝트
KDE, MySQL, LMMS, OpenLieroX, OpenSceneGraph, VTK
tar 압축 관련 유틸리티
tar(tape archive)
- 여러 파일들을 하나의 파일로 묶어주는 명령.
- GNU tar은 옵션을 이용해서 파일로 묶거나 풀 때 압축 관련 작업을 동시에 진행 가능.
- 지원되는 압축 형식에는 compress(tar.Z), gzip(tar.gz), bzip2(tar.bz2), xz(tar.xz) 등이 있음.
[사용법]
$ tar [option] 파일명
'-' 기호 사용 안 해도 됨. 인자 있는 옵션 여러 개 사용 시에는 해야 됨.
옵션
- -v : 어떤 명령을 실행할 때 대상이 되고 있는 파일들을 보여줌
- -f 파일명 : 작업 대상이 되는 tar 파일의 이름을 지정. 기본적으로 쓰는 옵션
- -r : 기존의 tar 파일 뒤에 파일을 추가
- -t : tar 파일 안에 묶여 있는 파일의 목록을 출력
- -h : 심볼릭 링크가 가리키고 있는 원본 파일을 저장
- -C : 디렉터리를 변경할 때 사용
- -p : 파일이 생성되었을 때의 권한을 그대로 유지
- -Z : compress 관련 옵션. 예전 UNIX계열 표준 압축 파일인 tar.Z에 사용
- -z : gzip 관련 옵션으로 압축 파일인 tar.gz에 사용
- -j : bzip 관련 옵션. tar.bz2
- -J : xz관련 옵션 tar.xz
compress, uncompress
전통적으로 유닉스에서 사용했던 압축 프로그램. 압축률이 낮아 현재는 안 씀.
[사용법]
$ compress, uncompress [option] 파일명
옵션
- -c : 표준 출력을 지정
- -v : 압축 관련 정보 출력
gzip, gunzip
GNU에서 만듦
[사용법]
$ gzip, gunzip [option] 파일명
옵션
- -d : 압축 풀 때
- -1 : 압축 시간 줄이고. 압축률은 떨어짐
- -9 : 파일을 최대로 압축
- -c : 결과를 표준 출력으로 보낼 때, tar과 병행해서 작업 시
- -l : 압축 파일에 대한 정보를 출력
- -r : 대상이 디렉터리인 경우 하위 디렉터리까지 찾아서 처리
- -v : 진행 과정을 이름, 퍼센트와 함께 자세히 보여줌
bzip2, bunzip2
버로우즈-휠러 변환이라는 블록 정렬 알고리즘과 허브만 부화화를 사용하여 줄리안 시워드가 만듦.
[사용법]
$ bzip2, bunzip2 [option]
옵션
- -d : 압축 풀 때
- -1 : 파일의 압축 시간을 줄임
- -9 : 파일을 최대로 압축
- -c : 결과를 표준 출력으로 보낼 때
- -f : 이 옵션 주면 덮어쓰기가 가능해짐
xz, unxz
LZMA2라는 알고리즘을 이용하여 만든 데이터 무손실 압축 프로그램. 매우 높은 압축률을 자랑.
[사용법]
$ xz, unxz [option] 파일명
옵션
- -z : 기본 옵션. 사용 안 해도 됨
- -d : 풀 때 사용.
zip, unzip
DOS/Windows 계열 운영체제에서 많이 사용
[사용법]
$ zip [option] 압축 파일명 파일명
$ unzip 압축 파일명
옵션
- -r : 디렉터리인 경우 하위 디렉터리 포함
gcc(GNU Compiler Collection)
gcc는 GNU 프로젝트에 의해 만들어진 일종의 컴파일러 모음으로 C, C++, Objective-C, Fortran, Java, Ada, Go 등 다양한 프로그래밍 언어를 지원
[사용법]
$ gcc [option] 파일명
옵션
- -o : 컴파일 시 실행 파일 이름 지정
- -c : 링크는 하지 않고 목적 파일만을 만들어 낼 때 사용
라이브러리 관리
라이브러리의 개요
- 프로그램에서 특정한 기능을 하는 루틴들을 모아 놓은 것.
- 하나 이상의 서브루틴, 함수, 클래스로 만듦.
- 이러한 라이브러리들은 프로그램을 개발할 때 사용자의 프로그램과 링크되어 실행 가능한 형태로 완성됨.
정적 링크 라이브러리 : 프로그램을 컴파일할 때 실행 파일에 포함되어 배포되는 방식
동적 링크 라이브러리 : 실행 프로그램에 항상 라이브러리를 포함하는 것이 아니라 필요할 때만 라이브러리를 메모리에 적재하는 방식
- 운영체제에서도 수많은 명령어가 같은 루틴을 공유하는 것을 공유 라이브러리라고 함.
- 실행 파일 내부에 넣어두지 않고 프로그램을 실행할 때 가져다 사용하므로 메모리의 효율성이 좋음.
공유 라이브러리의 개요
운영체제에서는 많은 응용 프로그램에 동적으로 링크되어 공유되는 라이브러리를 공유 라이브러리라 부른다.
공유라이브러리의 특징
의존성 : 동적으로 링크된 프로그램은 적어도 하나 이상의 공유 라이브러리가 필요. 없다면 실행되지 않음.
링크 : 동적으로 링크된 실행 파일은 실행 시에 공유 오브젝트에 대한 동적 링커인 ld.so에 의해 검사 됨
공유 라이브러리 관련 디렉터리 및 파일
개요 및 관련 디렉터리
- 공유 라이브러리는 파일명 뒤에 .so라고 덧붙여져 있음
- 특정 디렉터리의 위치를 라이브러리 관련 디렉터리로 등록하려면 /etc/ld.so.conf 파일을 사용
- Cent OS 8 버전부터는 대부분 공유 라이브러리 파일들을 /lib64 디렉터리 안에 두고 같이 관리.
관련 파일
- /etc/ld.so.conf : 추가로 다른 디렉터리를 등록할 시 사용하는 환경 설정 파일. ldconfig라는 명령을 수행해서 관련 정보를 갱신.
- CentOS 7 버전에서는 include 지시자를 이용해서 /etc/ld.so.conf.d 디렉터리 안에 있는 *.conf 파일에 설정된 정보를 추가로 읽음.
- /etc/ld.so.conf 파일에 등록할 라이브러리 경로를 추가한 후 ldconfig 명령을 실행
- /etc/ld.so.cache : (/lib, /usr/lib) = (/lib64) 디렉터리뿐만 아니라 /etc/ld.so.conf 파일에 명시한 디렉터리에서 찾을 수 있는 라이브러리 파일 목록 정보를 담고 있는 파일
공유 라이브러리 관련 명령어
ldconfig
공유 라이브러리 관련 정보를 갱신하고 설정하는 명령
[사용법]
$ ldconfig [option] 라이브러리
옵션
- -p : 현재 캐시에 저장되어 있는 공유 라이브러리 목록 정보를 출력
- -v : 명령 실행과 관련된 자세한 정보를 출력
- -f : /etc/ld.so.conf 파일 대신에 다른 환경 설정 파일을 지정할 때 사용.
ldd
현재 캐시에 저장되어 있는 공유 라이브러리 목록 정보를 출력
[사용법]
$ ldd [option] 파일명
옵션
- -v : 관련 라이브러리 정보를 버전 등과 함께 자세히 출력
- -f : /etc/ld.so.conf 파일 대신에 다른 환경 설정 파일을 지정할 때 사용.
공유 라이브러리 관련 환경 변수
LD_LIBRARY_PATH. 특정 프로그램 실행 시 라이브러리 등록이 필요하면 이 변수에 디렉터리 경로를 등록하면 됨.
'IT > Linux Master 1급' 카테고리의 다른 글
리눅스 시스템관리 | 시스템 및 보안 관리 (1) | 2023.03.09 |
---|---|
리눅스 시스템관리 | 장치관리 (0) | 2023.03.08 |
리눅스 시스템관리 | 일반 운영관리 2 (1) | 2021.08.26 |
리눅스 시스템 관리 | 일반 운영관리 1 (0) | 2021.08.24 |
리눅스 실무의 이해 | 리눅스 시스템의 이해 3 (0) | 2021.08.13 |