리눅스 라이브러리보기 / 실행 가능한 버전 정보


37

Windows에서 EXE 및 DLL에는 최소한 다음 필드를 포함하여 버전 정보가 있습니다.

  1. 파일 버전
  2. 제품 버전
  3. 내부 이름
  4. 상품명
  5. 저작권

Linux 라이브러리 / 실행 파일에서 :

  • 어떤 분야가 존재합니까?
  • 그러한 정보를 보는 방법?
  • 읽을 도구 / 라이브러리는 무엇입니까?

나는 좀 더 상황이 지금 .. 확인하시기 바랍니다 업데이트 한
라훌 파틸

ldconfig에 루트가 필요합니까? 특정 libxxx.so 파일을 확인하고 --version을 사용하여 exe를 실행하고 싶지 않은 경우 (실패 할 수 있음)
linquize

/ sbin / 경로는 일반 사용자 환경에서 설정되지 않기 때문에 루트가 필요하지 않습니다. 절대 경로를 사용하여 실행할 수 있습니다. /sbin/ldconfig -p
Rahul Patil

답변:


36

버전 정보 는 ELF 파일 에 명시 적으로 저장되지 않습니다 . soname여기에는 주요 버전이 포함 된 라이브러리 이름이 있습니다. 정식 버전은 일반적으로 라이브러리 파일 이름의 일부로 저장됩니다.

예를 들어 라이브러리가 libtest.so있으면 일반적으로 다음을 갖습니다.

  • libtest.so.1.0.1 -정식 버전을 포함하는 라이브러리 파일 자체
  • libtest.so.1- libtest.so.1.0.1와 동일한 이름을 가진에 대한 심볼릭 링크soname
  • libtest.so- libtest.so.1링크 에 사용되는 Symlink .

라이브러리 파일 libtest.so.1.0.1에는 SONAME동적 섹션에서이 라이브러리가라고 하는 항목 이 있습니다 libtest.so.1. 이 라이브러리에 대해 프로그램을 링크하면 링크 된 프로그램이 동적 섹션의 항목 soname아래에 라이브러리의 라이브러리를 저장합니다 NEEDED.

정확히 어떤 ELF 파일에 있는지 확인하려면 다음을 실행하십시오.

readelf -a -W elffile

여기서 elffile실행 파일의 라이브러리 일 수 있습니다.

라이브러리 버전을 얻으려면 다음을 수행하십시오.

readelf -d  /path/to/library.so |grep SONAME

AFAIK, 실행 파일에는 그러한 정보가 없습니다 (적어도 기본적으로는 아님).

또는 Rahul Patil이 작성한 것처럼 프로그램 자체 또는 패키징 시스템에 의존 할 수 있습니다.


좋은 정보, 그것은 나에게 새로운 readread 사용하지 않습니다, 당신이 상관 없어, 내가 어디에서 왜 readelf를 사용하는지 물어봐도 될까요
Rahul Patil

elf 파일 내부를 보려고 할 때 Readelf (및 유사한 도구)가 유용합니다. :). 주로 프로그래밍하여 라이브러리에서 기호를 찾거나 (작동하지 않는 경우) 또는 라이브러리에 문제가있을 때 사용합니다. ( man readelf )
v154c1

13

당신은 ldconfig -v | grep libraryname또한 옵션을 가지고 명령을 사용할 수 있습니다 command -V또는binaryfile --version

예 :

test@ubuntukrb12:~# ls --version
ls (GNU coreutils) 8.13
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

또한 당신은 당신이 사용하는 배포판에 따라 yu 또는 적성을 사용할 수 있습니다.

RHEL5 / CENTOS5 / Fedora에서 사용할 수 yum info packagename있거나 설치된 경우rpm --version packagename

 [root@ldap1 ~]# yum info bind97
    Loaded plugins: downloadonly, fastestmirror, security
    Loading mirror speeds from cached hostfile
     * base: mirrors.sin3.sg.voxel.net
     * epel: mirror.imt-systems.com
     * extras: mirrors.sin3.sg.voxel.net
     * updates: mirrors.sin3.sg.voxel.net
    Installed Packages
    Name       : bind97
    Arch       : i386
    Epoch      : 32
    Version    : 9.7.0
    Release    : 10.P2.el5_8.4
    Size       : 6.3 M
    Repo       : installed
    Summary    : The Berkeley Internet Name Domain (BIND) DNS (Domain Name System) server
    URL        : http://www.isc.org/products/BIND/
    License    : ISC
    Description: BIND (Berkeley Internet Name Domain) is an implementation of the DNS
               : (Domain Name System) protocols. BIND includes a DNS server (named),
               : which resolves host names to IP addresses; a resolver library
               : (routines for applications to use when interfacing with DNS); and
               : tools for verifying that the DNS server is operating properly.

우분투에서는 aptitude show pkgname또는dpkg --version pkgname

root@ubuntukrb12:~# aptitude show bind9utils
Package: bind9utils
State: installed
Automatically installed: yes
Version: 1:9.8.1.dfsg.P1-4ubuntu0.4
Priority: optional
Section: net
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Architecture: amd64
Uncompressed Size: 306 k
Depends: libbind9-80, libc6 (>= 2.14), libdns81, libisc83, libisccc80, libisccfg82
Conflicts: bind9utils
Replaces: bind9 (<= 1:9.5.0~b2-1), bind9 (<= 1:9.5.0~b2-1)
Description: Utilities for BIND
 This package provides various utilities that are useful for maintaining a working BIND installation.

를 들어 rpm, 당신이 원하는 것 같아 rpm --query pkgname버전 문자열을 나열 ( rpm --version버전 인쇄합니다 rpm자체를, 동일에 대한 사실 수 있습니다 dpkg)
hoc_age

5

Redhat 기반 시스템의 경우 다음을 수행하십시오.

ldd [file you want to run] | > needed-packages

필요한 패키지 파일을 확인하고 라이브러리 파일 이름에 경로 이름이 없는지 확인하십시오. 제거하면 "/bin/lib/libx.so.1"이 "libx.so.1"로 변경됩니다.

라이브러리에 포함 된 패키지 찾기

yum -y provides [lib name]

또는 이것을 스크립트에 넣거나 cmd 행에서 실행하십시오.

for lib in `cat libs.txt`;
do
   yum -y provides $lib | head -2 | grep " : " >> packages.list
done

다음 스크립트를 작성하거나 cmd 행에서 실행하십시오.

for package in `cat packages.list | awk '{ print $1 }'`;
do
    yum -y install $package
done

완료, 프로그램을 실행하십시오. 실행할 때 GUI 오류가 발생하는 경우 그것들을 복사해서 그것들이 라이브러리 참조라면 그것들을위한 패키지를 찾아 같은 방법으로 설치하십시오.


2

버전 정보를 얻으려면 이것을 실행하십시오- strings libssl.so.1.0.0 | grep "1\.0"

SSLv3 part of OpenSSL 1.0.2p-fips  14 Aug 2018
OpenSSL 1.0.2p-fips  14 Aug 2018
TLSv1 part of OpenSSL 1.0.2p-fips  14 Aug 2018
DTLSv1 part of OpenSSL 1.0.2p-fips  14 Aug 2018
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.