Repository 32bit  Forum
Repository 64bit  Wiki

findpkg

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
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.

Re: findpkg

Messaggioda sardylan » gio set 04, 2008 16:03

Ecco quello che intendevo:

Codice: Seleziona tutto
#!/bin/sh
#
# Copyright 2008 Cavalleri Massimo and Luca Cireddu (luca@lucacireddu.it)
# All rights reserved.
#
# Redistribution and use of this script, with or without modification, is
# permitted provided that the following conditions are met:
#
# 1. Redistributions of this script must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
#
#  THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
#  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
#  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO
#  EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
#  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
#  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
#  OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
#  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
#  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
#  ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
# Last mods:
#  1. New -a option
#  2. Removing of temp count file
#  3. New queries system
#  4. Added Colors
#

ADM_DIR="$ROOT/var/log"
VER="0.4beta"

echo_help() {
   echo "Find installed or removed packages with a string"
   echo "Usage: $(basename $0) [ options ] string"
   echo "es. $(basename $0) kde"
   echo ""
   echo "If you add follow options:"
   echo "-a | --advanced  ---> Advanced output"
   echo "-F | --with-file ---> search on database the packages that include this"
   echo "                      in your entry"
   echo "-L | --last      ---> print last package install or removed"
   echo "-r | --removed   ---> search on database of removed packages"
   echo "-c | --color     ---> Colored output"
   echo "-h | --help      ---> Show this help"
   echo ""
}

get_info_pkg() {
   # $1 package full name
   PKG_FULL_NAME="$1"
   UNCOMPRESSED_PACKAGE_SIZE="$(cat $ADM_DIR/${REMOVED}packages/$PKG_FULL_NAME | \
                              grep "UNCOMPRESSED PACKAGE SIZE" | cut -d":" -f2 | awk -F" " '{print $1}')"
   PKG_DATE="$(ls -l $ADM_DIR/${REMOVED}packages/$PKG_FULL_NAME | cut -d" " -f6)"
   echo "$(echo $PKG_FULL_NAME | cut -d"-" -f -4) $PKG_DATE ${UNCOMPRESSED_PACKAGE_SIZE}K"
}

if [ $# = 0 ]; then
   echo_help
   exit
fi

COUNTER=$#
QUERIES=""
COLORED=""

while [ $COUNTER -gt 0 ]; do
   case "$1" in
      -H | -h | --help)
         echo_help
         exit
      ;;
      -F | --with-file)
         case "$2" in
            -v | --version)
               echo "$(basename $0) version $VER"
               exit
            ;;
            -*)
               echo_help
               exit
            ;;
            *)
               FDB="$2"
               ADVANCED="1"
               shift 2
            ;;
         esac
      ;;
      -L | --last)
         shift
         LAST="1"
         ADVANCED="1"
      ;;
      -v | --version)
         echo "$(basename $0) version $VER"
         exit
      ;;
      -a | --advanced)
         ADVANCED="1"
         shift
      ;;
      -c | --color)
         COLORED="--color"
         shift
      ;;
      -r | --removed)
         REMOVED="removed_"
         ADVANCED="1"
         shift
      ;;
      *)
         QUERIES="$QUERIES $1"
         shift
      ;;
   esac
   let COUNTER=$COUNTER-1
done

if [ -z $ADVANCED ]; then
   for ITEM in $QUERIES; do
      if [ -z $COLORED ]; then
         find $ADM_DIR/${REMOVED}packages/ -name "*$ITEM*" | cut -d/ -f5
      else
         find $ADM_DIR/${REMOVED}packages/ -name "*$ITEM*" | cut -d/ -f5 | grep $COLORED $ITEM
      fi
   done
else
   (
      echo "[Package] [Date] [SizeOnDisk]"
      echo
      if [ -z $FDB ] && [ -z $LAST ]; then
         ITEM=$(echo $QUERIES | cut -d" " -f1)
         PACKAGES_ITEM="$(find $ADM_DIR/${REMOVED}packages/ -name "*$ITEM*" -exec basename {} \; | grep -E "^.+\-.+\-.+\-.+$")"
         COUNT_PACKAGES=$(echo "$PACKAGES_ITEM" | wc --words)
         for PKG_FULL_NAME in $PACKAGES_ITEM; do
            get_info_pkg $PKG_FULL_NAME
         done
      elif [ ! -z $FDB ] && [ -z $LAST ]; then
         PACKAGES=$(ls $ADM_DIR/${REMOVED}packages/ | grep -E "^.+\-.+\-.+\-.+$")
         COUNT_PACKAGES=0
         for PKG_FULL_NAME in $PACKAGES; do
            if [ ! -z "$(cat $ADM_DIR/${REMOVED}packages/$PKG_FULL_NAME | grep $FDB)" ] || \
               [ ! -z "$(cat $ADM_DIR/${REMOVED}scripts/$PKG_FULL_NAME 2> /dev/null | \
               sed -n 's,^( *cd \([^ ;][^ ;]*\) *; *rm -rf \([^ )][^ )]*\) *) *$,\1/\2,p' | grep $FDB)" ]; then
               get_info_pkg $PKG_FULL_NAME
               let "COUNT_PACKAGES+=1"
            fi
         done
      elif [ ! -z $LAST ]; then
         get_info_pkg $(ls -t $ADM_DIR/${REMOVED}packages/ | grep -E "^.+\-.+\-.+\-.+$" | head -n 1)
      fi
      echo $COUNT_PACKAGES > /tmp/findpkg_count
   ) | column -t -c 3
   
   if [ -z $LAST ]; then
      echo "$(cat /tmp/findpkg_count 2>/dev/null) match found."
      rm /tmp/findpkg_count
   fi
   
   exit 0
fi


Ed ecco un esempio di normale ed avanzato:

Codice: Seleziona tutto
sardylan@achille:~$ ./find libc xorg
glibc-profile-2.7-i486-10
libcaca-0.99.beta11-i486-1
glibc-zoneinfo-2.7-noarch-10
libcdio-0.79-i486-1
glibc-solibs-2.7-i486-10
glibc-2.7-i486-10
libcmml-0.9.2-i486-3as
libcddb-1.3.0-i486-1
glibc-i18n-2.7-noarch-10
xorg-cf-files-1.0.2-noarch-1
xorg-server-1.4.0.90-i486-1
xorg-sgml-doctools-1.2-noarch-1
xorg-docs-1.4-noarch-1
xorg-server-xnest-1.4.0.90-i486-1
xorg-server-xvfb-1.4.0.90-i486-1


Codice: Seleziona tutto
sardylan@achille:~$ ./find libc -a xorg
[Package]                   [Date]      [SizeOnDisk]
glibc-profile-2.7-i486      2008-08-15  4150K
libcaca-0.99.beta11-i486-1  2008-08-15  2170K
glibc-zoneinfo-2.7-noarch   2008-08-15  3040K
libcdio-0.79-i486-1         2008-08-15  1060K
glibc-solibs-2.7-i486       2008-08-15  9730K
glibc-2.7-i486-10           2008-08-15  111430K
libcmml-0.9.2-i486-3as      2008-08-31  1170K
libcddb-1.3.0-i486-1        2008-08-15  300K
glibc-i18n-2.7-noarch       2008-08-15  89490K
9 match found.
sardylan@achille:~$


Come potete notare, il -a o il --advanced può essere inserito anche in mezzo alle query... Inoltre, se dopo il -F è presente un parametro che iniza per -, da errore e visualizza l'help!!

Con la visualizzazione avanzata viene cercato soltanto la prima voce...
Dovrebbe funzionare tutto...

Edit:: Ho aggiunto i colori
Edit2:: Ho postato la vers. sbagliata dello script... Ora è corretto
Avatar utente
sardylan
Linux 2.6
Linux 2.6
 
Messaggi: 993
Iscritto il: mar apr 24, 2007 8:21
Località: San Vito (Cagliari)
Nome Cognome: Luca Cireddu
Slackware: current 64bits
Kernel: 3.1.2
Desktop: KDE 4.5.5
Distribuzione: Debian - CLFS

Re: findpkg

Messaggioda Blizzard » gio set 04, 2008 16:37

sono fortemente d'accordo con l'avere la possibilità di scegliere la lista semplice perchè più usabile in uno script che la sfrutti o con pipe ecc...

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

Re: findpkg

Messaggioda sardylan » gio set 04, 2008 17:03

Blizzard ha scritto:sono fortemente d'accordo con l'avere la possibilità di scegliere la lista semplice perchè più usabile in uno script che la sfrutti o con pipe ecc...

Gio

Idem... Inoltre ho usato la versione con cut per la lista semplice, perché è risultata la più veloce nei test di Mario...
Avatar utente
sardylan
Linux 2.6
Linux 2.6
 
Messaggi: 993
Iscritto il: mar apr 24, 2007 8:21
Località: San Vito (Cagliari)
Nome Cognome: Luca Cireddu
Slackware: current 64bits
Kernel: 3.1.2
Desktop: KDE 4.5.5
Distribuzione: Debian - CLFS

Re: findpkg

Messaggioda Blizzard » gio set 04, 2008 17:15

infatti devo variare lo script per mettere la versione 'cut' (uso lo script semplice... per quel che mi serve è perfetto, spero di mettere lo script grande direttamente dal prossimo DVD di slack ;) )
Avatar utente
Blizzard
Master
Master
 
Messaggi: 1509
Iscritto il: mar gen 02, 2007 22:53
Nome Cognome: Giovanni Santostefano
Slackware: 12.2
Kernel: 2.6.27.7-smp
Desktop: Fluxbox

Re: findpkg

Messaggioda conraid » gio set 04, 2008 17:45

sardylan ha scritto:Idem... Inoltre ho usato la versione con cut per la lista semplice, perché è risultata la più veloce nei test di Mario...


Se volevi oltre al giochino ti pubblicavo i risultati ;-)
Avatar utente
conraid
Staff
Staff
 
Messaggi: 11987
Iscritto il: mer lug 13, 2005 23:00
Località: Livorno
Nome Cognome: Corrado Franco
Slackware: current

Re: findpkg

Messaggioda sardylan » gio set 04, 2008 19:46

Ok conraid!! :lol: :lol:
Anzi!! Provalo ora... Sicuramente sarà un po' più lento!!

Comunque speriamo che davero PJV lo accetti!!
Avatar utente
sardylan
Linux 2.6
Linux 2.6
 
Messaggi: 993
Iscritto il: mar apr 24, 2007 8:21
Località: San Vito (Cagliari)
Nome Cognome: Luca Cireddu
Slackware: current 64bits
Kernel: 3.1.2
Desktop: KDE 4.5.5
Distribuzione: Debian - CLFS

Re: findpkg

Messaggioda conraid » ven set 05, 2008 6:44

sardylan ha scritto:Ok conraid!! :lol: :lol:
Anzi!! Provalo ora... Sicuramente sarà un po' più lento!!


Un po'? é molto più lento, per questo dicevo punti di vista. Per me migliorare uno script significa anche velocizzarlo. Deve fare poco, bene e velocemente. Per questo avevo fatto quelle prove e segnalato la versione con cut, ma ognuno ha i suoi gusti.
Avatar utente
conraid
Staff
Staff
 
Messaggi: 11987
Iscritto il: mer lug 13, 2005 23:00
Località: Livorno
Nome Cognome: Corrado Franco
Slackware: current

Re: findpkg

Messaggioda Blizzard » ven set 05, 2008 10:09

Se proprio si vuole fare i pignoli sino a distruggere gli attributi, toglierei anche i commenti non necessari.
Notate che bash script è un linguaggi interpretato, quindi IMHO bash deve necessariamente parsare ogni linea e verificare se essa sia un commento (si tratta di controllare un carattere ma quando ce ne sono diverse decine in script grandi può accadere che si perdano svariati centesimi di secondo).
Ex:

Codice: Seleziona tutto
#
# Last mods:
#  1. New -a option
#  2. Removing of temp count file
#  3. New queries system
#  4. Added Colors
#

meglio metterli in un file di documentazione

# $1 package full name
PKG_FULL_NAME="$1"

il codice è gia chiaro di per se

Il tutto IMHO versione PIGNOLO OLTRE OGNI LIMITE DELL'UNIVERSO :lol:

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

Re: findpkg

Messaggioda puzuma » ven set 05, 2008 11:40

grazie a chi ha proposto lo script e a chi lo ha migliorato con un sacco di utili e flessibili feature, è veramente utile e spero che Pat lo prenda in considerazione per metterlo in pkgutils. =D>
The quiet ones are the ones who change the world. The loud ones only take the credit.
Avatar utente
puzuma
Linux 2.4
Linux 2.4
 
Messaggi: 479
Iscritto il: mar lug 04, 2006 16:14
Località: Udine
Nome Cognome: Stefano Salvador
Slackware: current
Kernel: 2.6.32.2
Desktop: KDE 4.4.0

Re: findpkg

Messaggioda targzeta » ven set 05, 2008 11:43

Blizzard ha scritto:Se proprio si vuole fare i pignoli sino a distruggere gli attributi, toglierei anche i commenti non necessari.
.....


Eh :), lo stesso ragionamento l'ho fatto io tempo fa con gli script di avvio, tutti i miei script di avvio si riducono nell'rc.S che è anche senza commenti. Ovviamente il sistema è molto più veloce perchè ci ho tolto tutto ciò che non serve, anche i vari 'if', elimando il ramo se il risultato era sempre false, oppure lasciandolo senza l'if se il risultato era sempre true.

Alla fine però ci perdi diaci anni ogni volta che vuoi cambiare qualcosa, visto che è difficile ricordarsi tutto, senza commenti :).

Spina
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6149
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

Re: findpkg

Messaggioda Mario Vanoni » ven set 05, 2008 13:18

Blizzard ha scritto:Se proprio si vuole fare i pignoli sino a distruggere gli attributi, toglierei anche i commenti non necessari.
Notate che bash script è un linguaggi interpretato, quindi IMHO bash deve necessariamente parsare ogni linea e verificare se essa sia un commento (si tratta di controllare un carattere ma quando ce ne sono diverse decine in script grandi può accadere che si perdano svariati centesimi di secondo).
Ex:

Codice: Seleziona tutto
#
# Last mods:
#  1. New -a option
#  2. Removing of temp count file
#  3. New queries system
#  4. Added Colors
#

meglio metterli in un file di documentazione

# $1 package full name
PKG_FULL_NAME="$1"

il codice è gia chiaro di per se

Il tutto IMHO versione PIGNOLO OLTRE OGNI LIMITE DELL'UNIVERSO :lol:

Gio


Giovanni
hai perfettamente ragione
ma pure
hai perfettamente torto!

Uno script.sh senza commenti e` piu` veloce,
ma con tanti commenti e` leggile anche tra tot anni.

Gia` >20 anni fa riducevo script.sh molto commentati a
script ridotto all'osso, macchina UNIX 32bit con 1MB di memoria!

Uso tutt'ora il mio programma cpsh.sh,
conosci il mio indirizzo, posso mandartelo.

cpsh findpkg.sh > findpkg
wc -cl findpkg*
125 2996 findpkg
162 4529 findpkg.sh

I programmi C li strip'po tutti e li compilo con solo le opzioni "-O2 -s -static".
Mario Vanoni
Iper Master
Iper Master
 
Messaggi: 3174
Iscritto il: lun set 03, 2007 20:20
Località: Cuasso al Monte (VA)
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey

Re: findpkg

Messaggioda puzuma » ven set 05, 2008 14:04

questa faccenda dei commenti mi ha incuriosito e ho provato a fare alcuni test.

ho creato uno script fatto così:

Codice: Seleziona tutto
#!/bin/sh

#0123456789012345678901234567890123456789012345678901234567890123456789012345678

echo "FATTO !!!"


poi ne ho creati altri identici in cui la riga di commento era ripetuta 10, 100 e 1000 volte

questi sono i risultati riportati da time:

1:
real 0m0.006s
user 0m0.004s
sys 0m0.004s

10:
real 0m0.006s
user 0m0.004s
sys 0m0.004s

100:
real 0m0.008s
user 0m0.004s
sys 0m0.004s

1000:
real 0m0.036s
user 0m0.020s
sys 0m0.008s

considerando che in tutti gli script d'avvio le righe di commento saranno alla peggio un migliaio, ripulendo tutti i commenti si guadagnano al massimo 0.030 secondi sul tempo di boot :lol: supponendo di metterci 30 minuti a fare il lavoro di pulizia prima di riguadagnare il tempo perso ci vogliono 30*60/0.03 = 60000 reboot del sistema. :roll:

penso che le ottimizzazioni da fare siano altre.
The quiet ones are the ones who change the world. The loud ones only take the credit.
Avatar utente
puzuma
Linux 2.4
Linux 2.4
 
Messaggi: 479
Iscritto il: mar lug 04, 2006 16:14
Località: Udine
Nome Cognome: Stefano Salvador
Slackware: current
Kernel: 2.6.32.2
Desktop: KDE 4.4.0

Re: findpkg

Messaggioda Mario Vanoni » ven set 05, 2008 14:32

@puzuma

sbagli, rifatto il tuo test con un commento unico di 600 caratteri

la prima volta, come ad un boot, 0m0.071s
le volte successive, e` in memoria, 0.006s
Mario Vanoni
Iper Master
Iper Master
 
Messaggi: 3174
Iscritto il: lun set 03, 2007 20:20
Località: Cuasso al Monte (VA)
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey

Re: findpkg

Messaggioda puzuma » ven set 05, 2008 15:07

Mario Vanoni ha scritto:@puzuma

sbagli, rifatto il tuo test con un commento unico di 600 caratteri

la prima volta, come ad un boot, 0m0.071s
le volte successive, e` in memoria, 0.006s


ok, hai ragione, i miei valori erano a regime.

concorderai però che il massimo che possono ottenere con questo tipo di attenzione è un decimo di secondo che nell'ambito in cui sono utilizzati gli script della shell è ridicolo. soprattutto a scapito della leggibilità di uno script.

IMHO: lasciate tutti i commenti e le opzioni nell'ottimo findpkg, a quanto pare il risultato di accontentare i gusti di tutti gli utenti e di avere uno script leggibile si ottiene con solo pochi centesimi di secondo persi dal processore, che per definizione è lì per lavorare al posto mio.
The quiet ones are the ones who change the world. The loud ones only take the credit.
Avatar utente
puzuma
Linux 2.4
Linux 2.4
 
Messaggi: 479
Iscritto il: mar lug 04, 2006 16:14
Località: Udine
Nome Cognome: Stefano Salvador
Slackware: current
Kernel: 2.6.32.2
Desktop: KDE 4.4.0

Re: findpkg

Messaggioda targzeta » ven set 05, 2008 15:19

Non vorrei essere stato frainteso, anche io penso che i commenti servano tutti!!

@puzuma:
se vuoi divertirti, prendi tutti gli script di avvio:
rc.S, rc.M, rc.modules, rc.local, etc..etc...
Intendo che devi partire dall'rc.S e poi seguire tutti vari script da esso richiamati. Poi prendi rc.M e fai la stessa cosa. Ora copia solo ciò che effettivamente ti serve da tutti questi script, elimina i rami if (a parte quello in cui verifichi se lo shutdown è stato fatto bene), e vedrai che alla fine il tutto si riduce ad un unico file di circa 80 righe al più. Soprattutto inserisci nello script di shutdown una riga come questa:
touch /etc/fastboot
poi riavvia tutto e vedrai se noti la differenza. Il mio PC in 5 secondi di orologio mi mostra il login.
Questo per dire che la rapidità ce l'hai, ma la paghi ben cara e, alla fine non ne vale la pena.

Spina
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6149
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

PrecedenteProssimo

Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite