강좌
클라우드/리눅스에 관한 강좌입니다.
리눅스 분류

특정 데몬의 실행에 필요한 라이브러리파일 확인하는 방법(ldd)

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

특정 데몬의 실행에 필요한 라이브러리파일 확인하는 방법(ldd)

 

 

 

 

 

리눅스에서 공유라이브러리파일의 확장자는 *.so이다.

 

 

 

 여기서 so“shared object”의 약어이며, *so형태로 된 파일들은 거의 대부분 라이브러리파일이라고 보면 된다.

 

 

 

 리눅스의 모든 실행파일들은 시스템에서 제공하고있는 공유라이브러리들을 사용한다.

 

 

 

 즉 컴파일 되어 생성이 될 때와 생성된 후에 실행이 될 때에도 공유라이브러리는 필요하다.

 

 

 

 ldd는 컴파일시에 어떤 라이브러리들이 사용되었는가를 확인하기 위한 명령어이다.

 

 

 

 즉 실행파일을 생성하기 위하여 컴파일 과정에서 어떤 라이브러리들을 사용하였는가를 확인하여 실행파일을 분석하기 위한 도구로 사용되는 명령어이다.

 

 

 

 주로 프로그래머들의 프로그램분석도구로 사용된다.

 

 

 

 

 

어떤 실행파일이 생성될 때에는 자체 라이브러리나 또는 시스템에서 제공하는 공유라이브러리를 사용하여 컴파일을 수행한다.

 

 

 

 또한 이 실행파일이 컴파일되어 실행될 때에도 공유라이브러리는 필요하다.

 

 

 

 , ldd라는 것은 어떤 실행파일에게 필요한 공유라이브러리들이 어떤 것이 있는가를 확인하는 것이다.

 

 

 

 그리고 ldd ldconfig라는 명령어와 반드시 함께 알아 두어야 한다.

 

 

 

  , ldd ldconfig와 다음 사항에 대해서 알아두어야 한다.

 

 

 

 

 

- /lib/ld.so        : 런타임 링커/로더(run-time linker/loader)

 

- /etc/ld.so.conf   : 라이브러리파일들의 위치가 지정된 파일

 

- /etc/ld.so.cache : 라이브러리들의 순서리스트를 저장하고 있는 파일

 

 

 

먼저  ldd의 버전을 확인하는 간단한 방법부터 소개한다.

 

 

 

  현재 리눅스 시스템에서 사용하는 ldd의 버전을 확인하려면 “ldd  --version”이라고 하면 된다.

 

 

 

 여러분들이 직접 확인해 보기 바란다.

 

 

 

 

 

다음은 ldd로 특정 실행파일의 컴파일시에 사용되었던 라이브러리 확인하는 방법이다.

 

 

 

 필자가 사용하고 있는 리눅스 시스템에 ps라는 로그데몬파일이 존재한다.

 

 

 

 이 로그데몬파일이 실행되기 위하여 필요한 공유라이브러리들은 어떤 것들이 있는가를 확인해 보도록하겠다.

 

 

 

 먼저 ps데몬파일의 위치를 다음과 같이 확인해보았다.

 

 

 

 

 

[root@RockyLinux01 ~]# which ps

/usr/bin/ps

[root@RockyLinux01 ~]#

 

 

 

ps데몬파일의 위치가 /usr/bin/ps임을 확인하였다.

 

 

 

 이제 /usr/bin/ps데몬파일이 정상적인 작동을 하기 위해서 필요한 라이브러리들이 어떤 것들이 있는가를 확인해보겠다.

 

 

 

 

 

[root@RockyLinux01 ~]# ldd /usr/bin/ps

        linux-vdso.so.1 (0x00007ffc227aa000)

        libprocps.so.8 => /lib64/libprocps.so.8 (0x00007efd201ff000)

        libc.so.6 => /lib64/libc.so.6 (0x00007efd1fff6000)

        libsystemd.so.0 => /lib64/libsystemd.so.0 (0x00007efd1ff18000)

        /lib64/ld-linux-x86-64.so.2 (0x00007efd2028d000)

        liblzma.so.5 => /lib64/liblzma.so.5 (0x00007efd1feec000)

        libzstd.so.1 => /lib64/libzstd.so.1 (0x00007efd1fe15000)

        liblz4.so.1 => /lib64/liblz4.so.1 (0x00007efd1fdf1000)

        libcap.so.2 => /lib64/libcap.so.2 (0x00007efd1fde5000)

        libgcrypt.so.20 => /lib64/libgcrypt.so.20 (0x00007efd1fcac000)

        libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007efd1fc91000)

        libgpg-error.so.0 => /lib64/libgpg-error.so.0 (0x00007efd1fc6b000)

[root@RockyLinux01 ~]#

 

 

 

 

, 위의 예와 같이ps라는 데몬이 정상적으로 작동되기 위해서는 위의 공유라이브러리들이 모두 필요하다.

 

 

 

 당연한 얘기겠지만 위의 공유라이브러리 파일들 가운데 하나라도 존재하지 않거나 비정상적이라면 ps데몬은 정상적인 실행되지 않을 것이다.

 

 

 

 

 

그리고 다음은 ldd로 특정 실행파일의 컴파일 시에 사용되었던 라이브러리 모두를 상세히 확인하는 방법에 대한 예이다.

 

 

 

 , 위의 예에서는 ps데몬의 컴파일시에 사용되었던 기본적인 라이브러리 정보들 만을 확인한 것이다.

 

 

 

 ldd사용시에 -v옵션을 함께 사용한다면 아래의 예와 같이 실행파일의 컴파일 시에 사용된 상세한 라이브러리 정보들을 확인할 수 있다.

 

 

 

 

 

다음은 /usr/bin/ps실행파일의 컴파일시에 사용되었던 라이브러리들의 상세한 정보를 확인한 것이다.

 

 

 

 

 

[root@RockyLinux01 ~]# ldd -v /usr/bin/ps

        linux-vdso.so.1 (0x00007ffcfa33a000)

        libprocps.so.8 => /lib64/libprocps.so.8 (0x00007fee3d563000)

        libc.so.6 => /lib64/libc.so.6 (0x00007fee3d35a000)

        libsystemd.so.0 => /lib64/libsystemd.so.0 (0x00007fee3d27c000)

        /lib64/ld-linux-x86-64.so.2 (0x00007fee3d5f1000)

        liblzma.so.5 => /lib64/liblzma.so.5 (0x00007fee3d250000)

        libzstd.so.1 => /lib64/libzstd.so.1 (0x00007fee3d179000)

        liblz4.so.1 => /lib64/liblz4.so.1 (0x00007fee3d155000)

        libcap.so.2 => /lib64/libcap.so.2 (0x00007fee3d149000)

        libgcrypt.so.20 => /lib64/libgcrypt.so.20 (0x00007fee3d010000)

        libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fee3cff5000)

        libgpg-error.so.0 => /lib64/libgpg-error.so.0 (0x00007fee3cfcf000)

 

        Version information:

        /usr/bin/ps:

                libc.so.6 (GLIBC_2.3) => /lib64/libc.so.6

                libc.so.6 (GLIBC_2.14) => /lib64/libc.so.6

                libc.so.6 (GLIBC_2.33) => /lib64/libc.so.6

                libc.so.6 (GLIBC_2.4) => /lib64/libc.so.6

                libc.so.6 (GLIBC_2.34) => /lib64/libc.so.6

                libc.so.6 (GLIBC_2.3.4) => /lib64/libc.so.6

                libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6

                libprocps.so.8 (LIBPROCPS_0) => /lib64/libprocps.so.8

        /lib64/libprocps.so.8:

                libsystemd.so.0 (LIBSYSTEMD_209) => /lib64/libsystemd.so.0

                libc.so.6 (GLIBC_2.7) => /lib64/libc.so.6

                libc.so.6 (GLIBC_2.14) => /lib64/libc.so.6

                libc.so.6 (GLIBC_2.33) => /lib64/libc.so.6

                libc.so.6 (GLIBC_2.34) => /lib64/libc.so.6

                libc.so.6 (GLIBC_2.4) => /lib64/libc.so.6

                libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6

                libc.so.6 (GLIBC_2.3.4) => /lib64/libc.so.6

                libc.so.6 (GLIBC_2.3) => /lib64/libc.so.6

        /lib64/libc.so.6:

                ld-linux-x86-64.so.2 (GLIBC_2.2.5) => /lib64/ld-linux-x86-64.so.2

                ld-linux-x86-64.so.2 (GLIBC_2.3) => /lib64/ld-linux-x86-64.so.2

                ld-linux-x86-64.so.2 (GLIBC_PRIVATE) => /lib64/ld-linux-x86-64.so.2

        /lib64/libsystemd.so.0:

                liblzma.so.5 (XZ_5.0) => /lib64/liblzma.so.5

                ld-linux-x86-64.so.2 (GLIBC_2.3) => /lib64/ld-linux-x86-64.so.2

                libgcc_s.so.1 (GCC_3.0) => /lib64/libgcc_s.so.1

                libgcc_s.so.1 (GCC_3.3.1) => /lib64/libgcc_s.so.1

                libgcrypt.so.20 (GCRYPT_1.6) => /lib64/libgcrypt.so.20

                libc.so.6 (GLIBC_2.30) => /lib64/libc.so.6

                libc.so.6 (GLIBC_2.28) => /lib64/libc.so.6

                libc.so.6 (GLIBC_2.25) => /lib64/libc.so.6

                libc.so.6 (GLIBC_2.27) => /lib64/libc.so.6

이하생략

 

 

 

 

위의 예와 같이 ldd에서 -v옵션을 사용하여 지정한 파일에 관한 라이브러리 파일정보를 확인하면 가능한 모든 정보를 상세히 보여준다.

 

 

 

 

 

이상으로 리눅스시스템의 데몬과 프로세스관리에 대한 설명을 모두 마친다.

 

 

 

 다소 쉬운면도 없지않으나 결코 만만하게 봐서는 안된다.

 

 

 

 결국 리눅스시스템에서 제공되는 모든 서비스들은 데몬과 프로세스들에 의해서 제공되기 때문에 이들을 관리한다는 의미는 결국 서비스를 관리한다는 의미와 상통한다.

 

 

 

 백번 말보다 한번 겪어보는 것이 가장 좋은 학습법이다.

 

 

 

 

 

 

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,035 명
  • 현재 강좌수 :  35,798 개
  • 현재 접속자 :  118 명