Script per trovare a quale pacchetto appartiene un file

Se avete problemi con l'installazione e la configurazione di Slackware postate qui. Non usate questo forum per argomenti generali... per quelli usate Gnu/Linux in genere.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Slackware, se l'argomento è generale usate il forum Gnu/Linux in genere.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
Avatar utente
Blizzard
Master
Master
Messaggi: 1509
Iscritto il: mar 2 gen 2007, 22:53
Nome Cognome: Giovanni Santostefano
Slackware: 12.2
Kernel: 2.6.27.7-smp
Desktop: Fluxbox
Contatta:

Script per trovare a quale pacchetto appartiene un file

Messaggio da Blizzard »

Perdonate la lunghezza del titolo ma è quello che fa lo script che ho scritto per puro sfizio serale :)

esempi di output sono

Codice: Seleziona tutto

root@darkstar:~/findbasepkg# python filebelong.py /usr/lib64/libglib.a
/var/log/packages/glib-1.2.10-x86_64-3
root@darkstar:~/findbasepkg# python filebelong.py /usr/bin/lshal
/var/log/packages/hal-0.5.11-x86_64-5
root@darkstar:~/findbasepkg# python filebelong.py /bin/ls
/var/log/packages/coreutils-7.4-x86_64-1
root@darkstar:~/findbasepkg# python filebelong.py /bin/cat
/var/log/packages/coreutils-7.4-x86_64-1
root@darkstar:~/findbasepkg# python filebelong.py /usr/lib64/kde4/amarok_service_jamendo.so
/var/log/packages/amarok-2.1-x86_64-2
root@darkstar:~/findbasepkg# python filebelong.py /usr/lib64/vattelapesca.so
File /usr/lib64/vattelapesca.so not belongs to any package
root@darkstar:~/findbasepkg#
lo script è questo

Codice: Seleziona tutto

#! /bin/python 
# -*- coding: iso-8859-1 -*-


#Filebelong search to wich slackware package belongs a file
#Copyright (C) 2009  Giovanni Santostefano
#
#This program is free software; you can redistribute it and/or modify
#it under the terms of the GNU General Public License as published by
#the Free Software Foundation; either version 2 of the License, or
#(at your option) any later version.
#
#This program is distributed in the hope that it will be useful,
#but WITHOUT ANY WARRANTY; without even the implied warranty of
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#GNU General Public License for more details.
#
#You should have received a copy of the GNU General Public License along
#with this program; if not, write to the Free Software Foundation, Inc.,
#51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.


import sys
import os

c = 0
for arg in sys.argv:
  c=c+1
  
if c < 2:
  print "USAGE: python filebelong.py fullpath_of_file"
  sys.exit(1)

basefilename=sys.argv[1]
basefilename.strip(' ')


  
if basefilename == "--help":
  print "filebelong is a search utility for Slackware"
  print "developed by Giovanni Santostefano."
  print "filebelong search to wich slackware package belongs a file"
  print "USAGE: python filebelong.py fullpath_of_file"
  exit(1)

#basefilename = basefilename+"\n"
found = 0
packlist = os.walk("/var/log/packages/")
for root, dirs, filenames in packlist:
  for filename in filenames:
    if found == 1:
      break
    filelines = open("/var/log/packages/"+filename,"rU").readlines()
    flag = 0
    for line in filelines:
      line = "/"+line
      if (line.find("FILE LIST:") != -1):
	flag = 1
      if (flag == 0):
	continue
      if (line.find(basefilename) != -1 and len(line) == len(basefilename)+1):
	found=1
	print "/var/log/packages/"+filename
	break
      
if found == 0:
  print "File " + basefilename + " does not belongs to any package"
  exit(1)
  
exit(0)
ciao
Gio
Ultima modifica di Blizzard il mar 16 giu 2009, 22:30, modificato 2 volte in totale.

Avatar utente
d4z_c0nf
Packager
Packager
Messaggi: 1296
Iscritto il: mar 14 mar 2006, 18:07
Nome Cognome: Rocco Aliberti
Slackware: 14.2-current64
Kernel: 4.14.73
Desktop: awesomeWM
Località: Pinerolo

Re: Script per trovare a quale pacchetto appartiene un file

Messaggio da d4z_c0nf »

Mmm,
ma perchè

Codice: Seleziona tutto

grep "nome_file" /var/log/packages/*
Non fa la stessa cosa?
rock

Avatar utente
Blizzard
Master
Master
Messaggi: 1509
Iscritto il: mar 2 gen 2007, 22:53
Nome Cognome: Giovanni Santostefano
Slackware: 12.2
Kernel: 2.6.27.7-smp
Desktop: Fluxbox
Contatta:

Re: Script per trovare a quale pacchetto appartiene un file

Messaggio da Blizzard »

a me da

Codice: Seleziona tutto

# grep "/bin/cat" /var/log/packages/*
/var/log/packages/glibc-2.9-x86_64-3:usr/bin/catchsegv

# python filebelong.py /bin/cat
/var/log/packages/coreutils-7.4-x86_64-1
ho sbagliato qualcosa???

comunque sicuramente si può fare in qualche altro modo più... unix, solo che mi andava di fare un script python :D

Avatar utente
d4z_c0nf
Packager
Packager
Messaggi: 1296
Iscritto il: mar 14 mar 2006, 18:07
Nome Cognome: Rocco Aliberti
Slackware: 14.2-current64
Kernel: 4.14.73
Desktop: awesomeWM
Località: Pinerolo

Re: Script per trovare a quale pacchetto appartiene un file

Messaggio da d4z_c0nf »

Blizzard ha scritto:a me da

Codice: Seleziona tutto

# grep "/bin/cat" /var/log/packages/*
/var/log/packages/glibc-2.9-x86_64-3:usr/bin/catchsegv

# python filebelong.py /bin/cat
/var/log/packages/coreutils-7.4-x86_64-1
ho sbagliato qualcosa???

comunque sicuramente si può fare in qualche altro modo più... unix, solo che mi andava di fare un script python :D
No, è giusto. Perchè tu hai scritto /bin/cat e se vedi tutti i file di un pacchetto la / iniziale non c'è. Per trovare /bin/cat, devi scrivere bin/cat .
Poi ovviamente devi usare le opzioni di grep per dirgli di visualizzarti solo la corrispondenza esatta, mi pare che l'opzione sia -x, oppure usare le regex, purtroppo ora non sto con la slackware (mi si è rotto il pc-desktop) e non sono sicuro.
Prova.

Avatar utente
Blizzard
Master
Master
Messaggi: 1509
Iscritto il: mar 2 gen 2007, 22:53
Nome Cognome: Giovanni Santostefano
Slackware: 12.2
Kernel: 2.6.27.7-smp
Desktop: Fluxbox
Contatta:

Re: Script per trovare a quale pacchetto appartiene un file

Messaggio da Blizzard »

d4z_c0nf ha scritto:No, è giusto. Perchè tu hai scritto /bin/cat e se vedi tutti i file di un pacchetto la / iniziale non c'è.
È vero! che stupido #-o

ho provato così e va

Codice: Seleziona tutto

grep -x "^bin/ls" /var/log/packages/*
:thumbright:

mi linko da solo
http://www.catb.org/esr/writings/unix-k ... usand.html

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6643
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: Script per trovare a quale pacchetto appartiene un file

Messaggio da targzeta »

Date un occhiata anche a fMANIFESTche esegue la ricerca nel file MANIFEST.bz2.

Emanuele
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Avatar utente
submax82
Staff
Staff
Messaggi: 3202
Iscritto il: mer 31 ago 2005, 0:00
Desktop: xfce
Distribuzione: SalixOS
Contatta:

Re: Script per trovare a quale pacchetto appartiene un file

Messaggio da submax82 »

lo fà già findpkg ... script bash scritto tra gli utenti del forum

Avatar utente
Blizzard
Master
Master
Messaggi: 1509
Iscritto il: mar 2 gen 2007, 22:53
Nome Cognome: Giovanni Santostefano
Slackware: 12.2
Kernel: 2.6.27.7-smp
Desktop: Fluxbox
Contatta:

Re: Script per trovare a quale pacchetto appartiene un file

Messaggio da Blizzard »

submax82 ha scritto:lo fà già findpkg ... script bash scritto tra gli utenti del forum
ciao,
non ricordavo questa funzione di findpkg perchè lo utilizzo solo nella versione semplice.
In ogni caso si dovrebbe aggiungere anche un'opzione per trovare solo il pacchetto in cui il file è incluso (vedi sopra).

Beh! almeno il mio è un po più veloce :D

Codice: Seleziona tutto

bash-3.1# time findpkg -F bin/ls
coreutils-7.4-x86_64-1
e2fsprogs-1.41.4-x86_64-1
hal-0.5.11-x86_64-5
kdegames-4.2.4-x86_64-1
lsof-4.78-x86_64-1
lsscsi-0.22-x86_64-1
minicom-2.1-x86_64-3
module-init-tools-3.6-x86_64-2
pciutils-3.1.2-x86_64-1
pcmciautils-015-x86_64-2
procps-3.2.7-x86_64-3
syslinux-3.52-x86_64-1
usbutils-0.73-x86_64-3

real	0m9.073s
user	0m3.148s
sys	0m5.416s


bash-3.1# time python filebelong.py /bin/ls
/var/log/packages/coreutils-7.4-x86_64-1

real	0m0.542s
user	0m0.488s
sys	0m0.036s
Ma poi Pat ha risposto alle mail che gli avete mandato? Questo (insiema a slackyd) è sicuramente un software che vorrei vedere almeno in /extra

ciao
Gio

@spina: oggi che ho più tempo lo leggo, anche perchè non sono per niente agile con lo shell script. Grazie :thumbright:

Avatar utente
Blizzard
Master
Master
Messaggi: 1509
Iscritto il: mar 2 gen 2007, 22:53
Nome Cognome: Giovanni Santostefano
Slackware: 12.2
Kernel: 2.6.27.7-smp
Desktop: Fluxbox
Contatta:

Re: Script per trovare a quale pacchetto appartiene un file

Messaggio da Blizzard »

@spina:
letto lo script. Sempre pulito come al solito :thumbright:
tuttavia cercando in MANIFEST non dovrebbe ignorare i nuovi pacchetti? ad esempio quelli di slacky?

Gio

Avatar utente
conraid
Staff
Staff
Messaggi: 13631
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: Script per trovare a quale pacchetto appartiene un file

Messaggio da conraid »

Blizzard ha scritto:@spina:
letto lo script. Sempre pulito come al solito :thumbright:
tuttavia cercando in MANIFEST non dovrebbe ignorare i nuovi pacchetti? ad esempio quelli di slacky?
dovresti avere il MANIFEST di ogni repository, ma si aggiunge un nuovo problema, cioè che prende anche pacchetti che non hai installato nel sistema, io non faccio quasi mai una installazione full per esempio

la soluzione di rock mi sembra la migliore

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6643
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: Script per trovare a quale pacchetto appartiene un file

Messaggio da targzeta »

Blizzard ha scritto:@spina:
letto lo script. Sempre pulito come al solito :thumbright:
tuttavia cercando in MANIFEST non dovrebbe ignorare i nuovi pacchetti? ad esempio quelli di slacky?

Gio
Hai ragione :D

Emanuele
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Avatar utente
tigerwalk
Linux 3.x
Linux 3.x
Messaggi: 895
Iscritto il: lun 25 feb 2008, 22:08
Nome Cognome: Giuliano della Vecchia
Slackware: 13.37-14.2
Kernel: 3.10.17-tiger / 4.4.88-smp
Desktop: kde4/xfce4
Località: Napoli

Re: Script per trovare a quale pacchetto appartiene un file

Messaggio da tigerwalk »

conraid ha scritto:........................................................
dovresti avere il MANIFEST di ogni repository, ma si aggiunge un nuovo problema, cioè che prende anche pacchetti che non hai installato nel sistema, io non faccio quasi mai una installazione full per esempio

la soluzione di rock mi sembra la migliore
Però, se a me serve un file (libreria) che non ho installato, il metodo di rock, giustamente, non me lo trova. Credo invece che sarebbe utile poter utilizzare uno script che mi dice "quel file" in quale/i pacchetto/i lo posso trovare.

Avatar utente
Blizzard
Master
Master
Messaggi: 1509
Iscritto il: mar 2 gen 2007, 22:53
Nome Cognome: Giovanni Santostefano
Slackware: 12.2
Kernel: 2.6.27.7-smp
Desktop: Fluxbox
Contatta:

Re: Script per trovare a quale pacchetto appartiene un file

Messaggio da Blizzard »

tigerwalk ha scritto:
conraid ha scritto:........................................................
dovresti avere il MANIFEST di ogni repository, ma si aggiunge un nuovo problema, cioè che prende anche pacchetti che non hai installato nel sistema, io non faccio quasi mai una installazione full per esempio

la soluzione di rock mi sembra la migliore
Però, se a me serve un file (libreria) che non ho installato, il metodo di rock, giustamente, non me lo trova. Credo invece che sarebbe utile poter utilizzare uno script che mi dice "quel file" in quale/i pacchetto/i lo posso trovare.
non male come idea.
Magari Emanuele potrebbe modificare lievemente lo script per inserire (sotto altra opzione) un controllo che verifica se il pacchetto esiste e stampare INSTALLED/NOT INSTALLED

Gio

Rispondi