Pagina 1 di 1

Script per trovare a quale pacchetto appartiene un file

Inviato: mar 16 giu 2009, 19:47
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

Re: Script per trovare a quale pacchetto appartiene un file

Inviato: mar 16 giu 2009, 20:13
da d4z_c0nf
Mmm,
ma perchè

Codice: Seleziona tutto

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

Re: Script per trovare a quale pacchetto appartiene un file

Inviato: mar 16 giu 2009, 20:50
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

Re: Script per trovare a quale pacchetto appartiene un file

Inviato: mar 16 giu 2009, 21:08
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.

Re: Script per trovare a quale pacchetto appartiene un file

Inviato: mar 16 giu 2009, 22:28
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

Re: Script per trovare a quale pacchetto appartiene un file

Inviato: mar 16 giu 2009, 22:40
da targzeta
Date un occhiata anche a fMANIFESTche esegue la ricerca nel file MANIFEST.bz2.

Emanuele

Re: Script per trovare a quale pacchetto appartiene un file

Inviato: mar 16 giu 2009, 23:06
da submax82
lo fà già findpkg ... script bash scritto tra gli utenti del forum

Re: Script per trovare a quale pacchetto appartiene un file

Inviato: mer 17 giu 2009, 10:28
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:

Re: Script per trovare a quale pacchetto appartiene un file

Inviato: mer 17 giu 2009, 11:08
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

Re: Script per trovare a quale pacchetto appartiene un file

Inviato: mer 17 giu 2009, 11:10
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

Re: Script per trovare a quale pacchetto appartiene un file

Inviato: mer 17 giu 2009, 11:10
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

Re: Script per trovare a quale pacchetto appartiene un file

Inviato: mer 17 giu 2009, 13:24
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.

Re: Script per trovare a quale pacchetto appartiene un file

Inviato: mer 17 giu 2009, 13:40
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