Melihat Linux Library / Info versi yang dapat dijalankan

38

Di Windows, EXE dan DLL memiliki info versi, termasuk setidaknya bidang berikut:

  1. versi file
  2. versi produk
  3. nama internal
  4. nama Produk
  5. hak cipta

Di Linux Library / Executable:

  • Bidang mana yang ada?
  • Bagaimana cara melihat info tersebut?
  • Alat / perpustakaan apa yang harus dibaca?
linquize
sumber
Saya telah memperbarui beberapa hal lagi, silakan cek sekarang ..
Rahul Patil
ldconfig perlu root? Bagaimana dengan memeriksa file libxxx.so tertentu dan tidak ingin mengeksekusi exe dengan --version (mungkin gagal)
linquize
tidak perlu root, karena / sbin / path tidak disetel di Lingkungan pengguna normal, Anda dapat mengeksekusi yang menggunakan path absolut misalnya. /sbin/ldconfig -p
Rahul Patil

Jawaban:

36

Info versi di tidak secara eksplisit disimpan dalam file ELF . Apa yang Anda miliki di sana adalah nama perpustakaan soname, yang mencakup versi utama. Versi lengkap biasanya disimpan sebagai bagian dari nama file perpustakaan.

Jika Anda memiliki perpustakaan, katakanlah libtest.so, maka biasanya Anda memiliki:

  • libtest.so.1.0.1 - File perpustakaan itu sendiri, berisi versi lengkap
  • libtest.so.1- Symlink to libtest.so.1.0.1, memiliki nama yang sama dengansoname
  • libtest.so- Symlink untuk libtest.so.1digunakan untuk menghubungkan.

Dalam file perpustakaan libtest.so.1.0.1, akan ada entri yang disebut SONAMEdi bagian dinamis, yang akan mengatakan perpustakaan ini disebut libtest.so.1. Saat Anda menautkan program ke perpustakaan ini, program yang ditautkan akan menyimpan sonameperpustakaan di bawah NEEDEDentri di bagian dinamis.

Jika Anda ingin memverifikasi, apa sebenarnya file ELF itu, Anda dapat mencoba menjalankannya:

readelf -a -W elffile

di mana elffilebisa berupa perpustakaan yang dapat dieksekusi.

Jika Anda hanya ingin mendapatkan versi pustaka, Anda dapat bermain dengan:

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

AFAIK, tidak ada info seperti itu (setidaknya tidak secara default) dalam file yang dapat dieksekusi.

Atau Anda dapat mengandalkan program itu sendiri atau sistem pengemasan Anda, seperti yang ditulis Rahul Patil.

v154c1
sumber
info yang bagus, ini baru bagi saya tidak pernah digunakan sendiri, jika Anda tidak keberatan, boleh saya bertanya di mana & mengapa menggunakan diri sendiri
Rahul Patil
Readelf (dan alat serupa) berguna, ketika Anda ingin melihat ke dalam file elf :). Saya menggunakannya sebagian besar ketika pemrograman untuk mencari simbol di perpustakaan (ketika sesuatu tidak berfungsi), atau ketika ada beberapa masalah dengan perpustakaan. ( man readelf )
v154c1
13

Anda dapat menggunakan ldconfig -v | grep libraryname, juga perintah memiliki opsi command -Vataubinaryfile --version

contoh:

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.

Anda juga dapat menggunakan yum atau aptitude berdasarkan distro yang Anda gunakan misalnya.

di RHEL5 / CENTOS5 / Fedora Anda dapat menggunakan yum info packagenameatau jika diinstal kemudian gunakanrpm --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.

Di Ubuntu, Anda dapat menggunakan aptitude show pkgnameataudpkg --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 <[email protected]>
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.
Rahul Patil
sumber
Karena rpm, saya pikir Anda akan ingin rpm --query pkgnamemembuat daftar versi string ( rpm --versionakan mencetak versi rpmsendiri; hal yang sama mungkin berlaku untuk dpkg)
hoc_age
5

Untuk sistem berbasis Redhat, lakukan ini:

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

Periksa file paket yang diperlukan, pastikan tidak ada nama jalur di nama file perpustakaan. Jika demikian hapus, jadi "/bin/lib/libx.so.1" ubah menjadi "libx.so.1"

Cari tahu paket apa yang berisi perpustakaan

yum -y provides [lib name]

Atau letakkan ini di skrip atau jalankan dari cmd line:

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

Selanjutnya, buat skrip berikut atau jalankan dari cmd line:

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

Anda sudah selesai, jalankan program Anda. Jika Anda mendapatkan kesalahan GUI saat menjalankan. Salin ke bawah dan jika itu adalah referensi perpustakaan, temukan paket untuk itu dan instal dengan cara yang sama.

JMirabile
sumber
2

Jalankan ini untuk mendapatkan informasi versi - 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
yarick
sumber