|
GiKappa |
ho una domanda:
... |
12-07-2007 10:20 |
|
|
GiKappa |
Dubbioso a Progetto
Registered: Oct 2004
Posts: 1800 (0.25 al dì)
Location: Brescia
Corso: Informatica
Anno: Laureato Triennale
Time Online: 9 Days, 22:39:19 [...]
Status: Offline
Edit | Report | IP: Logged |
ho una domanda:
ho letto il manuale di xargs, ma non riesco a capire quando va usato e quando no! ho visto che viene usato dopo una pipeline per comandi come tar o ls, ma perchè non si usa con comandi come sort o tail?
qualcuno mi può spiegare (anche in due righe) a cosa serve esattamente?
grazie!
|
12-07-2007 10:20 |
|
|
| |
|
n3o |
[B]xargs[/B] è un comando utile per evitare l'err ... |
12-07-2007 10:49 |
|
|
n3o |
tanto c'è SPASS...
Registered: Oct 2005
Posts: 134 (0.02 al dì)
Location: Brescia
Corso: Informatica Magistrale
Anno: 1°
Time Online: 1 Day, 19:26:05: [...]
Status: Offline
Edit | Report | IP: Logged |
xargs è un comando utile per evitare l'errore Out of space che a volte compare se si utilizza il find.
La shell ha un limitato spazio per gestire un comando (credo 256 caratteri...) quindi se un input di un comando (rediretto anche con un pipe) supera tale limite sorge l'errore di cui sopra.
Per evitarlo si utilizza xargs che non fa altro che spezzare l'output del comando precedente in righe, e passare ogni riga al comando successivo, una alla volta.
Più importante, xargs cambia profondamente il comportamento dei comandi:
find / -type f | grep login
Questo comando cerca tra la lista dei file del sistema, un file il cui nome contenga la parola login
find / -type f | xargs grep login
In questo esempio xargs spezza la listona dei file del sistema e passa una riga per volta (quindi un nome di file per volta) a grep
(grep viene eseguito più volte, una volta per ogni riga).
Notate che il comportamento cambia moltissimo!!!
In questo caso il comando stampa tutti i file di sistema che contengono al loro interno la parola login
Nella maggior parte degli esempi sort e tail vengono usati sulle liste di file che genera find o in passi successivi, per questo non viene utilizzato xargs.
__________________
The answer is blowing in the wind...
|
12-07-2007 10:49 |
|
|
| |
|
GiKappa |
ok, grazie!
... |
12-07-2007 11:05 |
|
|
GiKappa |
Dubbioso a Progetto
Registered: Oct 2004
Posts: 1800 (0.25 al dì)
Location: Brescia
Corso: Informatica
Anno: Laureato Triennale
Time Online: 9 Days, 22:39:19 [...]
Status: Offline
Edit | Report | IP: Logged |
ok, grazie!
ho ancora un paio di dubbi:
ho provato a modificare un esercizio (quello di trovare tutti i file con all'interno la parola "login"), facendo in modo che invece che mettermeli in un archivio, me li scriva su un file .txt
allora ho provato a sostituire il comando del tar con > login.txt ma non mi ha inserito niente se non la riga "<stdio.h>"
dove ho sbagliato?
un'altra cosa: se ho un file .txt, che comando posso usare per farmelo vedere a video senza usare elvis?
grazie ancora
|
12-07-2007 11:05 |
|
|
| |
|
n3o |
Prova con:
... |
12-07-2007 12:08 |
|
|
n3o |
tanto c'è SPASS...
Registered: Oct 2005
Posts: 134 (0.02 al dì)
Location: Brescia
Corso: Informatica Magistrale
Anno: 1°
Time Online: 1 Day, 19:26:05: [...]
Status: Offline
Edit | Report | IP: Logged |
Prova con:
find / -type f | xargs grep -l "login" >> list.txt
Il simbolo >> concatena ogni riga al termine del file, mentre > sovrascrive il file prima di aggiungere del contenuto
Per vedere un file senza elvis puoi:- cat file.txt
- more file.txt (output paginato)
__________________
The answer is blowing in the wind...
|
12-07-2007 12:08 |
|
|
| |
|
NoWhereMan |
[QUOTE][i]Originally posted by n3o [/i]
... |
12-07-2007 13:34 |
|
|
NoWhereMan |
.illuminato.
Registered: Jul 2003
Posts: 222 (0.03 al dì)
Location: Segrate (MI)
Corso: Dottorato in Informatica
Anno:
Time Online: 1 Day, 21:56:46 [...]
Status: Offline
Edit | Report | IP: Logged |
Originally posted by n3o
[B]@NoWhereMan: Si si basta anche la semplificazione che hai fatto.
Io ho solo estratto gli unici due campi di interesse, ma è una formattazione in più che in sede di esame serve forse ad avere il massimo dei punti.
be', tecnicamente la domanda è "trovare il processo che occupa più memoria ram", non "trovare il PID e il nome del processo ecc ecc"
Ho poi controllato ciò che hai detto e in effetti contrariamente a ciò che dice il manuale sembra funzionare anche il nome dell'utente come parametro dell'opzione user del find
Ovvio che se ti chiede di scorrere tutti gli utenti devi comunque lavorare sul file /etc/passwd
Il comando uniq è fondamentale visto che in sede di esame c'erano più utenti con l'UID 0 (e si potrebbe creare anche più utenti con lo stesso nome mettendo mano a quel file, quindi è utile in ogni caso...)
anche qui, se vuoi è pignoleria da parte mia (e probabilmente hai comunque più ragione tu di me ); molte volte ho fatto notare queste cretinate in altri frangenti, e ovviamente con professori che a domande precise non richiedono risposte puntuali (al contrario, le domande di questi vanno interpretate, come forse in questo caso)
Il punto è che se mi si chiede di trovare $informazione per ogni utente, allora anche se due utenti hanno lo stesso UID, sono comunque distinti (potrebbero comunque avere home e probabilmente username diversi)
d'altro canto usare anche 'uniq' dovrebbe mostrare di conoscere ulteriormente l'ambiente;
in definitiva la risposta corretta forse potrebbe essere fornire entrambe le alternative, motivandole.
grazie per i consigli!
|
12-07-2007 13:34 |
|
|
| |
|
GiKappa |
[QUOTE][i]Originally posted by n3o [/i]
... |
12-07-2007 13:55 |
|
|
GiKappa |
Dubbioso a Progetto
Registered: Oct 2004
Posts: 1800 (0.25 al dì)
Location: Brescia
Corso: Informatica
Anno: Laureato Triennale
Time Online: 9 Days, 22:39:19 [...]
Status: Offline
Edit | Report | IP: Logged |
Originally posted by n3o
Prova con:
find / -type f | xargs grep -l "login" >> list.txt
Il simbolo >> concatena ogni riga al termine del file, mentre > sovrascrive il file prima di aggiungere del contenuto
Per vedere un file senza elvis puoi:- cat file.txt
- more file.txt (output paginato)
grazie! appena sono a casa provo a controllare!
ho come l'impressione che da perfetto coglione invece di cat facevo cut!
ma ho i permessi per controllare il file /ect/passwd?
|
12-07-2007 13:55 |
|
|
| |
|
n3o |
[QUOTE][i]Originally posted by GiKappa [/i]
... |
12-07-2007 14:22 |
|
|
n3o |
tanto c'è SPASS...
Registered: Oct 2005
Posts: 134 (0.02 al dì)
Location: Brescia
Corso: Informatica Magistrale
Anno: 1°
Time Online: 1 Day, 19:26:05: [...]
Status: Offline
Edit | Report | IP: Logged |
Originally posted by GiKappa
ma ho i permessi per controllare il file /ect/passwd? Se ti autentichi come root non hai problemi di permessi (probabimente saranno rw-r--r--)
Originally posted by NoWhereMan
Il punto è che se mi si chiede di trovare $informazione per ogni utente, allora anche se due utenti hanno lo stesso UID, sono comunque distinti (potrebbero comunque avere home e probabilmente username diversi) In un sistema non possono coesistere due utenti con UID uguale, credo sia stato un mageggio sul file /etc/passwd dei prof per gestire il sistema dei tempi dell'esame...
In una situazione normale non credo ci sia il problema.
In definitiva in sede di esame la situazione che mi sono trovato era di avere tre utenti diversi con UID 0 e lo script stampava lo stesso risultato per tre volte (ovviamente, il possessore di un file è localizzato tramite UID non username) e non era carino, quindi ho sistemato la situazione nel modo secondo me più efficiente... (ed è andata bene! ).
Sta ad ognuno risolvere i problemi estemporanei che si troverà all'esame come meglio crede (per non parlare di tutta la gente a cui si è bloccato il terminale Salvate spesso e sperate che il demone scarichi sul disco il vostro lavoro!!!)
__________________
The answer is blowing in the wind...
|
12-07-2007 14:22 |
|
|
| |
|
antares85 |
@n3o(o chi mi sa risp): riguardo ai comandi messi ... |
13-07-2007 17:04 |
|
|
antares85 |
.illuminato.
Registered: Oct 2005
Posts: 197 (0.03 al dì)
Location: milano
Corso: informatica
Anno: 2
Time Online: 1 Day, 6:16:58 [...]
Status: Offline
Edit | Report | IP: Logged |
@n3o(o chi mi sa risp): riguardo ai comandi messi in prima pagina di questo thread, non riesco a capire bene:
-esercizio trovare i file eseguibili >5k ecc... sono indispensabili i comandi xargs ls -l ; tr -s ' ' ' ' ?(questo nn ho capito bn cosa vuol dire...) ; e in cut si potrebbe eliminare -d ' '? (anche qst nn mi è chiaro)
-esercizio trovare processo che occupa + mem, non capisco perchè +7 in sort, se sia indispensabile il ps -axl (e se si perchè) all'inizio e ancora l'intero comando tr e cut che credo siano un lontano dialetto arabo/cinese per me
GRAZIE ANCORA!
|
13-07-2007 17:04 |
|
|
| |
|
antares85 |
visto che ci siamo, nel primo dei 2 listati lunghi ... |
13-07-2007 17:25 |
|
|
antares85 |
.illuminato.
Registered: Oct 2005
Posts: 197 (0.03 al dì)
Location: milano
Corso: informatica
Anno: 2
Time Online: 1 Day, 6:16:58 [...]
Status: Offline
Edit | Report | IP: Logged |
visto che ci siamo, nel primo dei 2 listati lunghi, mi si può spiegare il significato di
if [ $# -ne 1 ]; then
echo "syntax: user_size <user_name>"
exit 1
fi
?
|
13-07-2007 17:25 |
|
|
| |
|
n3o |
[QUOTE][i]Originally posted by antares85 [/i]
... |
13-07-2007 20:09 |
|
|
n3o |
tanto c'è SPASS...
Registered: Oct 2005
Posts: 134 (0.02 al dì)
Location: Brescia
Corso: Informatica Magistrale
Anno: 1°
Time Online: 1 Day, 19:26:05: [...]
Status: Offline
Edit | Report | IP: Logged |
Originally posted by antares85
visto che ci siamo, nel primo dei 2 listati lunghi, mi si può spiegare il significato di
if [ $# -ne 1 ]; then
echo "syntax: user_size <user_name>"
exit 1
fi
? Se non passi un parametro in linea di comando genera un errore ed esce...
$# = numero argomenti in linea di comando
-ne 1 = not equal 1
La sintassi è: ./<nome_scipt> <nome_utente>
Ma in ogni caso l'ho messo se vuoi il massimo, altrimenti credo tu possa saltarlo tranquillamente.
Originally posted by antares85
esercizio trovare i file eseguibili >5k ecc... sono indispensabili i comandi xargs ls -l ; tr -s ' ' ' ' ?(questo nn ho capito bn cosa vuol dire...) ; e in cut si potrebbe eliminare -d ' '? (anche qst nn mi è chiaro) Ho già analizzato il problema in un post precedente:
1) Per me un file è eseguibile se lo è per tutti (altrimenti farsi tutti i casi possibili è una macello...)
2) find / -type f -size +5 => tutti i file maggiorni di 5KB
3) xargs ls -l => per ogni file stampa le sue informazioni estese
4) grep "^-..x..x..x" => mantieni solo i file che all'inizio della riga di ls hanno il matching richiesto (. vuol dire qualsiasi carattere e ^ vuol dire inizio riga)
4) tr -s ' ' ' ' => comprimi tutti gli spazi tra le colonne in uno solo (' ' è uno spazio!)
5) cut -d ' ' -f 5,9 => estrai le colonne 5 e 9 (separate da spazio)
In toto:
find / -type f -size +5 | xargs ls -l | grep "^-..x..x..x" | tr -s ' ' ' ' | cut -d ' ' -f 5,9
Anche qui credo tu ti possa fermare al grep, magari aggiungi un more
find / -type f -size +5 | xargs ls -l | grep "^-..x..x..x" | more
Originally posted by antares85
esercizio trovare processo che occupa + mem, non capisco perchè +7 in sort, se sia indispensabile il ps -axl (e se si perchè) all'inizio e ancora l'intero comando tr e cut che credo siano un lontano dialetto arabo/cinese per me sort +7 -n vuol dire "ordina numericamente (non alfabeticamente) considerando la settima colonna"
ps -alx => per far stampare più processi possibile (guarda il man)
Anche in questo caso gli ultimi comandi puoi saltarli, alla fine:
ps -alx | sort +7 -n | tail -1 oppure
ps -alx | sort +7 -nr | head -1 [Ho un'avversione personale ed immotivata per tail ]
Ragazzi per ogni esercizio controllate come funziona passo per passo e poi valutate; se un comando in pipe o più servono solo per formattare meglio l'output considerate se mantenere lo stile o la semplicità!
__________________
The answer is blowing in the wind...
|
13-07-2007 20:09 |
|
|
| |
|
antares85 |
ecco non capisco come si fa a sapere da quali colo ... |
13-07-2007 20:37 |
|
|
antares85 |
.illuminato.
Registered: Oct 2005
Posts: 197 (0.03 al dì)
Location: milano
Corso: informatica
Anno: 2
Time Online: 1 Day, 6:16:58 [...]
Status: Offline
Edit | Report | IP: Logged |
ecco non capisco come si fa a sapere da quali colonne prendere le info desiderate (sort +7 e -f 5,9, perchè proprio quelle?). c'è un qualche standard sempre uguale sul quale basarsi dove si vede ad ogni colonna quali info corrispondono?
|
13-07-2007 20:37 |
|
|
| |
|
NoWhereMan |
[quote]1) Per me un file è eseguibile se lo è pe ... |
13-07-2007 22:03 |
|
|
NoWhereMan |
.illuminato.
Registered: Jul 2003
Posts: 222 (0.03 al dì)
Location: Segrate (MI)
Corso: Dottorato in Informatica
Anno:
Time Online: 1 Day, 21:56:46 [...]
Status: Offline
Edit | Report | IP: Logged |
1) Per me un file è eseguibile se lo è per tutti (altrimenti farsi tutti i casi possibili è una macello...)
ecco una regex:
ls -l | grep '^[rw-]*x'
o anche (tenuto presente che x non compare mai all'inizio)
ls -l | grep '^[rw-]\+x' # non chiedetemi perché bisogna fare escape del + e non di *
trova tutti gli elementi della lista in cui all'inizio c'è una permutazione qualsiasi di (r,w,-) N volte seguita da un x. Il match è ovviamente al primo x trovato
naturalmente, 20 minuti solo per trovare la regex, quindi impossibile durante l'esame (e tra l'altro se non avessi detto tu la cosa del ls -l io starei ancora qui a smanettare con find . -perm che non va non mi vengono in mente altri sistemi...).
non per altro, è che ogni comando ha la sue particolari necessità di escaping quindi uno devi fare \+ un altro \{ mah...
peccato che nell'esame di LFA non ci sia un bel test di regex pratico
@antares85: in teoria le conti, ma occhio, perché nell'output di ps le colonne non sono sempre nello stesso numero (anche se sembra dalla formattazione) in alcuni casi hai (ad es)
code:
10 S 0 1 5 1 16 (wait) pm ? 0:00 init
(intuitiv. 10 colonne, in realtà (wait) pm sono DUE!)
in altri:
code:
10 W 0 26 5 1 16 pm ? 0:00 /usr/sbin/inet
10 colonne
o, peggio
code:
10 W 0 26 5 1 16 fs co 0:00 ps alx
intuitivamente 10 colonne, ma in realtà 11 (ps alx)
insomma una porcheria.
su linux che ho (ma stando a man sembrerebbe un'implementazione moderna comune immagino ad altri unix), ps è un po' meglio perché i campi vuoti sono contrassegnati almeno da un trattino;
nel nostro caso a parte estrarre il field del PID e in generale i primi 7 campi, dall'8 in poi si rischia :/
forse quello di minix è custom (e/o vecchio)
|
13-07-2007 22:03 |
|
|
| |
|
n3o |
pensate che in linux quel diavolo di programma per ... |
13-07-2007 22:44 |
|
|
n3o |
tanto c'è SPASS...
Registered: Oct 2005
Posts: 134 (0.02 al dì)
Location: Brescia
Corso: Informatica Magistrale
Anno: 1°
Time Online: 1 Day, 19:26:05: [...]
Status: Offline
Edit | Report | IP: Logged |
pensate che in linux quel diavolo di programma per trovare i file eseguibili maggiori di 5k si risolve solo così:
find / -type f -size +5 -perm /111 o
find / -type f -size +5 -perm +111 (per versioni vecchie di find)
FINE!!! Ma il find del minix è uno scandalo
@NoWhereMan: buona la regexp, ma effettivamente non è da parte dei prof molto corretto farcele usare perchè non sono state spiegate!!!
Io sono convinto che l'esercizio incriminato loro sono convinti si possa fare con il find (ma in Minix non è vero! )
__________________
The answer is blowing in the wind...
|
13-07-2007 22:44 |
|
|
| |
|
NoWhereMan |
[QUOTE][i]Originally posted by n3o [/i]
... |
14-07-2007 08:15 |
|
|
NoWhereMan |
.illuminato.
Registered: Jul 2003
Posts: 222 (0.03 al dì)
Location: Segrate (MI)
Corso: Dottorato in Informatica
Anno:
Time Online: 1 Day, 21:56:46 [...]
Status: Offline
Edit | Report | IP: Logged |
Originally posted by n3o
Io sono convinto che l'esercizio incriminato loro sono convinti si possa fare con il find (ma in Minix non è vero! )
mi sa che hai ragione...
|
14-07-2007 08:15 |
|
|
| |
|
All times are GMT. The time now is 13:30. |
|
|
|
|
|
|
|
| |
Forum Rules:
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
|
HTML code is OFF
vB code is ON
Smilies are ON
[IMG] code is ON
|
|
|
|
|
|