Pagina 1 di 1

Strano comando.. spiegazioni?

Inviato: ven 11 giu 2010, 15:50
da Darkstar89
Salve.. ultimamente stavo lavorando presso un call-center.. (che schifo!).. comunque almeno c'era Linux, qualche strana distribuzione modificata, ma basata su Slackware...
Spesso con la shell guardavo i file di avvio come rc.M ecc...
In uno (non ricordo quale), ho trovato:

grep MemFree: < /proc/meminfo | sed s/MemFree://|sed s/kb

Cosè?..

è utile per svuotare la ram come drop_cache?

Re: Strano comando.. spiegazioni?

Inviato: ven 11 giu 2010, 16:02
da conraid
bah... non sembra terminato, quel sed finale è incompleto
e prima mostra semplicemente la MemFree, e quella ridirezione è inutile

Codice: Seleziona tutto

grep MemFree: /proc/meminfo | sed s/MemFree://
avrebbe prodotto lo stesso risultato

probabilmente l'ultimo sed toglie anche kb mostrando solo il valore numerico, così che in base a quello viene decisa un'operazione seguente, ma è solo una ipotesi

Re: Strano comando.. spiegazioni?

Inviato: ven 11 giu 2010, 16:09
da robbybby
grep serve per cercare del testo (delle espressioni regolari, per essere più precisi) all'interno di un file di testo, secondo un pattern che gli dai. Se cerchi con google, espressioni regolari, oppure regular expressions tutto ti sarà più chiaro.
Tanto per fare una prova, prova questo:

Codice: Seleziona tutto

dmesg | grep -i cpu 
/proc/meminfo è semplicemente un file virtuale che contiene aclune informazioni sullo stato del sistema.
Prova a leggerlo con:

Codice: Seleziona tutto

cat /proc/meminfo
sed serve invece per eleborare delle stringhe (prova con man sed, per saperne di più).
Quel comando cerca la stringa MemFree nel file /proc/meminfo e poi la dà in pasto a sed, per farne non so che, dato che non uso sed, e il tuo comando, sulmio sistema, mi dà un errore di sed.

@conraid: ci siamo incrociati :)

Dopo aver letto ilpost di Conraid aggiungo: quel comando mostra il contenuto della riga MemFree del file meminfo, dopo aver tolto la stringa MemFree: e kb (che dovrebbe essere kB, però).

Re: Strano comando.. spiegazioni?

Inviato: ven 11 giu 2010, 16:59
da Mario Vanoni
Darkstar89 ha scritto:Salve.. ultimamente stavo lavorando presso un call-center.. (che schifo!).. comunque almeno c'era Linux, qualche strana distribuzione modificata, ma basata su Slackware...
Spesso con la shell guardavo i file di avvio come rc.M ecc...
In uno (non ricordo quale), ho trovato:

grep MemFree: < /proc/meminfo | sed s/MemFree://|sed s/kb

Cosè?..

è utile per svuotare la ram come drop_cache?
grep MemFree: < /proc/meminfo | sed s/MemFree:// | sed s/kB//
come dice Corrado ritorna la sola cifra trovata,
sulla mia macchina e`
339732
con
grep MemFree: < /proc/meminfo | sed s/MemFree:// | sed s/kB// | sed 's/ //g'
diventa
339732
senza spazi a sinistra.

Se il comando finisce li`, nessuna azione, solo info,
se il valore e` "pipato" su altro ...

Re: Strano comando.. spiegazioni?

Inviato: ven 11 giu 2010, 17:26
da targzeta
E al solito io dico che fare una pipe tra grep e sed è sbagliato:

Codice: Seleziona tutto

sed -n /MemFree/'{s/MemFree: *\([0-9]*\).*/\1/;p}' /proc/meminfo
Emanuele

Re: Strano comando.. spiegazioni?

Inviato: ven 11 giu 2010, 17:41
da Mario Vanoni
spina ha scritto:E al solito io dico che fare una pipe tra grep e sed è sbagliato:

Codice: Seleziona tutto

sed -n /MemFree/'{s/MemFree: *\([0-9]*\).*/\1/;p}' /proc/meminfo
Emanuele
Concordo al 100%, fa` vedere solo il numero richiesto.

Re: Strano comando.. spiegazioni?

Inviato: sab 12 giu 2010, 0:07
da j0kers
Beh non poteva essere semplicemente cosi:

Codice: Seleziona tutto

grep MemFree /proc/meminfo | awk '{print $numero}'
Dove numero è la posizione del testo che si vuole stampare

Re: Strano comando.. spiegazioni?

Inviato: sab 12 giu 2010, 1:35
da targzeta
Offtopic:
j0kers ha scritto:Offtopic: Beh non poteva essere semplicemente cosi:

Codice: Seleziona tutto

grep MemFree /proc/meminfo | awk '{print $numero}'
Dove numero è la posizione del testo che si vuole stampare
Certo, ognuno fa quello che gli pare ma anche questo è brutto da vedere e a mio parere è anche più brutto che mettere grep in pipe con sed.
  • awk così come sed hanno come argomento il nome del file da processare, quindi non vedo perchè metterli in pipe con grep:

    Codice: Seleziona tutto

    awk '/MemFree/{print $2}' /proc/meminfo
  • la pipe consuma risorse poichè si devono avviare due processi e collegarli.
  • Tra sed e awk il secondo è più "pesante" e sinceramente lo trovo del tutto sprecato per fare questo misero lavoro.
Sia chiaro j0kers che ognuno poi fa quello che vuole, ma la mia impressione è che molti usano i comandi senza conoscerli, magari solo perchè l'hanno visto fare su internet.

Emanuele[/offtopic]

Re: Strano comando.. spiegazioni?

Inviato: sab 12 giu 2010, 12:58
da j0kers
Infatti poi è a piacere dell'utente.comunque come giustamente dici questo

Codice: Seleziona tutto

awk '/MemFree/{print $2}' /proc/meminfo
comando è molto più elegante di quello scritta in precedenza 8)