Linux 에서 라이브러리가 설치되었는지 확인하는 방법

LinuxBeginner
지금 연습하기

소개

이 랩에서는 특정 라이브러리가 Linux 시스템에 설치되어 있는지 확인하는 방법을 배우게 됩니다. ldconfig -p를 사용하여 사용 가능한 공유 라이브러리를 나열하여 어떤 라이브러리가 존재하고 어디에 있는지 이해하는 것부터 시작하여 다양한 방법을 탐구할 것입니다.

그 다음, dpkg -l 명령을 사용하여 특정 라이브러리와 관련된 패키지를 식별하여 시스템의 패키지 관리자 내에서 라이브러리가 어떻게 관리되는지 파악할 수 있습니다. 마지막으로, /usr/lib와 같은 일반적인 라이브러리 디렉토리를 직접 검사하여 라이브러리 파일의 존재 여부를 수동으로 확인하는 방법을 배우게 됩니다.

ldconfig -p 로 라이브러리 목록 확인

이 단계에서는 ldconfig 명령을 사용하여 Linux 시스템에서 사용 가능한 공유 라이브러리를 나열하는 방법을 배우게 됩니다.

공유 라이브러리는 여러 프로그램에서 사용할 수 있는 코드 모음입니다. 이렇게 하면 모든 프로그램에 코드를 중복할 필요가 없으므로 디스크 공간과 메모리를 절약할 수 있습니다.

ldconfig 명령은 주로 동적 링커 런타임 바인딩을 구성하는 데 사용됩니다. -p 옵션과 함께 사용하면 캐시된 디렉토리 및 후보 라이브러리 목록을 출력합니다.

아직 열려 있지 않은 경우 터미널을 엽니다. 데스크탑 왼쪽의 Xfce 터미널 (Xfce Terminal) 아이콘을 클릭하여 터미널을 열 수 있습니다.

이제 다음 명령을 입력하고 Enter 키를 누르십시오.

ldconfig -p

이 명령은 시스템에서 발견된 공유 라이브러리의 긴 목록을 출력합니다. 출력은 다음과 유사하게 보일 것입니다.

...
        libzstd.so.1 (libc6,x86-64) => /lib/x86_64-linux-gnu/libzstd.so.1
        libz.so.1 (libc6,x86-64) => /lib/x86_64-linux-gnu/libz.so.1
        libxml2.so.2 (libc6,x86-64) => /lib/x86_64-linux-gnu/libxml2.so.2
        libxml2.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libxml2.so
        libxslt.so.1 (libc6,x86-64) => /lib/x86_64-linux-gnu/libxslt.so.1
...

출력은 라이브러리 이름, 빌드된 아키텍처 (예: x86-64) 및 시스템의 라이브러리 파일 경로를 보여줍니다.

출력이 매우 길기 때문에 less와 같은 페이저로 파이프하여 화면별로 볼 수 있습니다. 이렇게 하려면 파이프 기호 |를 사용하십시오.

ldconfig -p | less

스페이스바를 눌러 한 페이지씩 아래로 스크롤하고, b를 눌러 위로 스크롤하고, q를 눌러 less를 종료합니다.

이 명령은 어떤 라이브러리를 사용할 수 있고 어디에 있는지 확인하는 데 유용합니다.

다음 단계로 진행하려면 **계속 (Continue)**을 클릭하십시오.

dpkg -l 로 라이브러리 패키지 확인

이전 단계에서 공유 라이브러리를 나열했습니다. 이제 dpkg 명령을 사용하여 특정 라이브러리가 어떤 패키지에 속하는지 알아보는 방법을 배우겠습니다.

dpkg는 Ubuntu 와 같은 Debian 기반 시스템의 패키지 관리자입니다. .deb 패키지를 설치, 제거 및 관리하는 데 사용됩니다. -l 옵션은 설치된 패키지를 나열합니다.

특정 패키지를 찾기 위해 dpkg -lgrep을 결합하여 출력을 필터링할 수 있습니다. ldconfig -p 출력에서 본 xml2 라이브러리와 관련된 패키지를 검색해 보겠습니다.

터미널에 다음 명령을 입력하고 Enter 키를 누르십시오.

dpkg -l | grep xml2

이 명령은 설치된 모든 패키지 (dpkg -l) 를 나열한 다음 해당 목록을 필터링하여 "xml2"를 포함하는 줄만 표시합니다 (grep xml2).

다음과 유사한 출력을 볼 수 있습니다.

ii  libxml2:amd64                      <version>                     amd64        GNOME XML library
ii  libxml2-dev:amd66                  <version>                     amd64        Development files for the GNOME XML library
...

출력은 패키지에 대한 정보를 제공합니다.

  • 처음 두 문자 (ii) 는 패키지 상태 (설치됨) 를 나타냅니다.
  • 패키지 이름 (예: libxml2:amd64).
  • 버전 번호.
  • 아키텍처 (예: amd64).
  • 패키지에 대한 간략한 설명.

이것은 특정 라이브러리 파일을 제공하는 소프트웨어 패키지를 식별하는 강력한 방법입니다. 이는 문제 해결 또는 종속성 이해에 매우 유용합니다.

다음으로 이동하려면 **계속 (Continue)**을 클릭하십시오.

/usr/lib 에서 라이브러리 파일 검사

이 마지막 단계에서는 많은 공유 라이브러리가 저장되는 디렉토리인 /usr/lib를 살펴보겠습니다.

Linux 의 /usr 디렉토리는 사용자 수준 프로그램과 데이터를 포함합니다. /usr/lib 하위 디렉토리는 시스템 부팅에 필수적이지 않지만 애플리케이션에 필요한 공유 라이브러리를 특별히 보관합니다.

먼저 현재 디렉토리를 /usr/lib로 변경해 보겠습니다. 이를 위해 cd 명령을 사용합니다.

다음 명령을 입력하고 Enter 키를 누르십시오.

cd /usr/lib

이제 /usr/lib 디렉토리 안에 있습니다. 이 디렉토리의 내용을 보려면 ls 명령을 사용하십시오. 이 디렉토리에는 많은 파일이 포함되어 있으므로 출력을 다시 less로 파이프합니다.

다음 명령을 입력하고 Enter 키를 누르십시오.

ls | less

파일과 디렉토리의 긴 목록이 표시됩니다. .so로 끝나는 많은 파일은 공유 라이브러리입니다. 아키텍처별 라이브러리를 포함하는 x86_64-linux-gnu와 같은 디렉토리도 볼 수 있습니다.

스페이스바를 눌러 아래로 스크롤하고 q를 눌러 less를 종료합니다.

이전 단계에서 논의한 libxml2 라이브러리 파일을 찾아보겠습니다. lsgrep을 사용하여 현재 디렉토리 (/usr/lib) 내에서 찾을 수 있습니다.

다음 명령을 입력하고 Enter 키를 누르십시오.

ls | grep libxml2

다음과 유사한 출력이 표시되어 libxml2 라이브러리 파일과 심볼릭 링크를 보여줍니다.

libxml2.so
libxml2.so.2
libxml2.so.2.<version>

.so 파일은 실제 공유 라이브러리이며, 버전 번호가 없는 파일 (예: libxml2.so) 은 종종 버전 번호가 있는 실제 라이브러리 파일을 가리키는 심볼릭 링크입니다.

readlink 명령을 사용하여 심볼릭 링크가 가리키는 위치를 확인할 수 있습니다. 예를 들어:

readlink libxml2.so

이렇게 하면 libxml2.so가 연결된 실제 파일이 표시되며, 여기에는 전체 버전 번호가 포함됩니다.

libxml2.so.2

이 단계에서는 일반적인 라이브러리 디렉토리로 이동하여 cd, lsgrep을 사용하여 내용을 검사하는 방법을 보여주었습니다. 라이브러리가 저장되는 위치를 이해하는 것은 시스템 관리 및 개발에 매우 중요합니다.

Lab 을 완료하려면 **계속 (Continue)**을 클릭하십시오.

요약

이 Lab 에서는 여러 가지 방법을 사용하여 Linux 에서 라이브러리가 설치되었는지 확인하는 방법을 배웠습니다. 먼저 ldconfig -p 명령을 사용하여 사용 가능한 공유 라이브러리와 해당 위치를 나열하여 동적 링커 바인딩을 관리하는 역할을 이해했습니다.

다음으로, Debian 패키지 관리를 위한 핵심 도구인 dpkg -l 명령을 사용하여 특정 라이브러리가 속한 패키지를 식별하는 방법을 살펴보았습니다. 마지막으로, /usr/lib와 같은 일반적인 라이브러리 디렉토리를 직접 검사하여 라이브러리 파일의 존재 여부를 수동으로 확인하는 방법을 배웠습니다. 이러한 단계는 Linux 시스템에서 라이브러리 설치 상태를 확인하는 포괄적인 접근 방식을 제공합니다.