Advertisement
Guest User

Untitled

a guest
Jun 24th, 2011
196
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 25.63 KB | None | 0 0
  1. http://sl-lab.it/dokuwiki/doku.php?id=sistop:lab#slide_28_marzo_2007
  2.  
  3. --------------------------------------------------------------------------------
  4. - Specificare l'occupazione totale di un utente in un sistema (somma delle dimensioni dei suoi file...)
  5.  
  6. #!/bin/sh
  7. if [ $# -ne 1 ]; then
  8. echo "syntax: user_size <user_name>"
  9. exit 1
  10. fi
  11. ID="$(grep "^$1" /etc/passwd | cut -f 3 -d :)"
  12. if [ "$ID" = "" ]; then
  13. echo "User \"${1}\" not found"
  14. exit 1
  15. fi
  16. echo "calculating..."
  17. SUM=0
  18. for ITEM in $(find / -user "$ID" -type f | xargs du | cut -f 1); do
  19. SUM=$(expr ${SUM} + ${ITEM})
  20. done
  21. echo "User \"${1}\" takes ${SUM} KB into the system"
  22. exit 0
  23.  
  24. --------------------------------------------------------------------------------------------------
  25. - Per ogni utente del sistema specificare qual è il suo file di dimensioni maggiori
  26.  
  27.  
  28. #!/bin/sh
  29. # Per ogni utente trovare il suo file di dimensione maggiore
  30. for UID in $(cut /etc/passwd -d : -f 3 | sort -n | uniq); do
  31. FILE=$(find / -type f -user $UID | xargs du | sort -nr | head -1)
  32. if [ "$FILE" != "" ]; then
  33. DIM=$(echo "$FILE" | cut -f 1)
  34. NOME=$(echo "$FILE" | cut -f 2)
  35. echo "UID: $UID => File: $NOME ($DIM KB)"
  36. else
  37. echo "UID: $UID => Nessun file trovato"
  38. fi
  39. done
  40.  
  41. --------------------------------------------------------------------------------------------------
  42.  
  43. 3) Stampare "MUOIO!" ogni volta che un processo termina
  44. /** sono Silvio
  45. io ho modificato solo sys_exit.c in /usr/src/lib/syslib aggiungendo una printf("MUOIO\n");
  46. giusto prima del return e funziona....
  47. BUNGA BUNGA**/
  48.  
  49. Personalmente ho solo aggiunto questa riga:
  50.  
  51. kprintf ("MUOIO!\n");
  52.  
  53. Nei file:
  54.  
  55. /usr/src/kernel/system/do_exit.c
  56. /usr/src/kernel/system/do_kill.c
  57.  
  58. nelle funzioni con il rispettivo nome [do_exit() e do_kill()]
  59.  
  60. C'era una postilla ovvero di far stampare ance il PID del processo.
  61. Era un problema perchè all'interno del kernel il proc_nr non è il PID
  62. della tabella dei processi di PM ma il numero del processo della tabella del Kernel che
  63. non sono lo stesso numero quindi pescare quello giusto era comlicato e l'ora si faceva tarda...
  64. quindi il prof mi ha detto che se non lo facevo non era importante e non mi ha penalizzato.
  65. (ma questo rimanga tra me e voi...)
  66.  
  67. In /usr/src/tools/
  68. make clean (per sicurezza ripartiamo da zero)
  69. make image
  70. make hdboot (credo sostituisca anche make image, provate...)
  71.  
  72. Ci sono poi due casi particolari
  73.  
  74. Modifica delle librerie: prima di make hdboot inserite anche
  75. make libraries (mooolto lento)
  76.  
  77. Esercizio Tasto F8 (vedi thread apposito): sempre prima di make hdboot scrivete
  78. make services
  79.  
  80. Il tuo problema sai che forse è nel reboot?!
  81. Prova a fare un bel shutdown e al riavvio quando sei al boot loader non fare nessuna scelta, lascia che il sistema parta dopo pochi secondi [A questo proposito me ne sono successe di tutte come a te...]
  82.  
  83. --------------------------------------------------------------------------------------------------
  84. - trovare il file più "grosso" sul sistema
  85.  
  86. find / -type f | xargs du | sort -nr | head -1
  87. find / -type f | xargs du | sort -n | tail -1
  88.  
  89. --------------------------------------------------------------------------------------------------
  90.  
  91. Modifica al kernel richiesta: impedire che vengano creati file il cui nome cominci con la lettera m.
  92.  
  93. Intervento individuato: nei sorgenti del pm, nel file open.c c'è una funzione do_creat()
  94.  
  95. Uno dei parametri sembra essere il nome.
  96. Basterebbe quindi inserire un if alla inizio della funzione che controlla il nome e se quest'ultimo comincia con m,
  97. terminare con errore.
  98. In realtà il Prof. Monga ha detto che quello non è proprio il nome del file ma una stringa che lo rappresenta (una specie di codifica interna di Minix).
  99. Ma la risposta andava bene ugualmente.
  100.  
  101. Ricordo che la tua domanda è stata fatta a lezione...
  102. Il nome di un file lo si trovava passando per:
  103. /usr/src/servers/fs/open.c -> do_creat() -> common_open() -> new_node()
  104. In questa funzione nella variabile string c'è il nome del file e basta aggiungere dopo la riga:
  105. *ldirp = parse_path(path, string, opaque ? LAST_DIR : LAST_DIR_EATSYM);
  106. Il seguente pezzo di codice:
  107.  
  108.  
  109. code:--------------------------------------------------------------------------------
  110. if (*string == 'M' || *string == 'm')
  111. {
  112. printf ("Niente nomi che iniziano con emme!!!\n");
  113. return (NIL_INODE);
  114. }
  115.  
  116. --------------------------------------------------------------------------------------------------
  117.  
  118. - Archiviare i files più grandi di 5k e più piccoli di 100k?
  119.  
  120. find / -type f -size +10 -a -size -200 | xargs tar cvf archivio.tar
  121.  
  122. --------------------------------------------------------------------------------------------------
  123.  
  124. Copiare i file da una directory all'altra senza cambiare i permessi:
  125. cp /directory/albero1/* /directory/albero2
  126.  
  127. --------------------------------------------------------------------------------------------------
  128.  
  129. Spostare tutti i files che iniziano per m da una directory (e sottodirectory) ad un'altra
  130. mv /directory/albero1/m* /directory/albero2
  131.  
  132. --------------------------------------------------------------------------------------------------
  133.  
  134. Trovare tutti i files eseguibili > 5k e evidenziando i 5 più grandi
  135. find / -type f -size +10 | xargs ls -lF | grep "\*$" | tr -s ' ' ' ' | cut -d ' ' -f 5,9 | sort -n | tail -5
  136.  
  137. --------------------------------------------------------------------------------------------------
  138.  
  139. Archiviare i files modificati nell'ultima settimana
  140. find / -type f -mtime -7 | xargs tar cvf archivio.tar
  141.  
  142. --------------------------------------------------------------------------------------------------
  143.  
  144. Trovare il processo che occcupa più memoria ram
  145. ps -axl | sort +7 -nr | head -1 | tr -s ' ' ' ' | cut -d ' ' -f 8,12
  146.  
  147. --------------------------------------------------------------------------------------------------
  148.  
  149. Trovare i tre files più grossi per ogni utente
  150.  
  151. #!/bin/sh
  152. for UID in $(cut /etc/passwd -d : -f 3 | sort -n | uniq); do
  153. echo "Utente $UID:"
  154. find / -type f -user $UID | xargs du | sort -nr | head -3
  155. done
  156.  
  157. #/usr/bin/sh
  158. cut -f 1 -d : /etc/passwd |while read user
  159. do
  160. file=$(find / -type f -user $user |xargs du |sort -nr |head -1|cut -f 2)
  161. dimensione=$(find / -type f -user $user |xargs du |sort -nr |head -1|cut -f 1)
  162. if [ "$file" != "" ];then
  163. echo "il file " $file " di dimensione "$dimensione " e'il piu' grosso per l'utente "$user
  164. else
  165. echo "l' utente " $user "non ha file"
  166. fi
  167. done
  168.  
  169. --------------------------------------------------------------------------------------------------
  170.  
  171. Archiviare tutti i files che contengono la parola "login"
  172.  
  173. find / -type f | xargs grep -l "login" | xargs tar -cvf archivio.tar
  174.  
  175. --------------------------------------------------------------------------------------------------
  176.  
  177. - Trovare tutti i file che includono la parola "login" ed archiviarli su di un file .txt
  178.  
  179. find / -type f | xargs grep -l "login" >> list.txt
  180.  
  181. --------------------------------------------------------------------------------------------------
  182.  
  183. ------------------------------------|
  184. owner (u) | group (g) | others (o)|
  185. +-----------+-----------+-----------+
  186. | r w x | r w x | r w x |
  187. | 4 2 1 | 4 2 1 | 4 2 1 |
  188.  
  189. find / -perm 666
  190. find / -perm a+rw (equivalente, a = all)
  191. trova tutti i file che sono leggibili e modificabili da ogni utente
  192.  
  193. find / -perm 755
  194. find / -perm u+rwx,g+rx,o+rx (equivalente)
  195. trova tutti i file che sono leggibili, modificabili ed eseguibili da parte del proprietario, e che sono leggibili ed eseguibili dal gruppo e dagli altri
  196.  
  197. find / -perm -XXX
  198. aggiungendo un meno prima dell'espressione ottale modifico il comportamento del find, indicando che voglio cercare tutti quei file il cui bit interessato è attivato, es:
  199.  
  200. find / -perm -111
  201. trova tutti i file che hanno il flag "eseguibile" settato per ogni utente
  202.  
  203. find / -perm -661
  204. trova tutti i file che hanno i flag "leggibile" e "modificabile" settati per il proprietario e il gruppo, e il flag "eseguibile" per gli altri
  205. (gli altri permessi non specificati possono essere settati o no)
  206.  
  207. --------------------------------------------------------------------------------------------------
  208.  
  209. Cercare tutti i file con SUID attivato
  210. find / -type f -perm -004000 (testato)
  211.  
  212. --------------------------------------------------------------------------------------------------
  213.  
  214. Kernel: Stampare il messaggio quando un processo termina
  215. Sufficiente che la printf sia all'interno della procedura pm_exit()
  216. ovviamente nei sorgenti del PM)
  217. che viene chiamata in qualsiasi caso: syscall exit() oppure SIGKILL o SIGTERM
  218.  
  219. NOTA: ho notato con un amico che qemu tende a crashare se il messaggio della exit non termina con un newline,
  220. quindi vi conviene che il messaggio sia sempre qualcosa del tipo
  221.  
  222. printf("\nMESSAGGIO\n");
  223.  
  224. che per inciso produce anche un output più leggibile (per quanto possa interessare leggere "MESSAGGIO" mille volte)
  225.  
  226. --------------------------------------------------------------------------------------------------
  227.  
  228. Kernel: Stampare un messaggio quando un processo viene killato
  229.  
  230. Modificare i seguenti file:
  231.  
  232. usr/src/servers/pm/forkexit.c
  233.  
  234. oppure se non si conosce il file:
  235.  
  236. cd /usr/src/servers/pm
  237. grep pm_exit *
  238.  
  239. 1)io vado in /usr/src/servers/pm/
  240. 2)forkexit.c
  241. 3) mi porto alla fine della funzione pm_exit()
  242. 4) metto il printf
  243. 5) vado in /usr/src/tools/
  244. 6) eseguo i comandi make clean, make image, make hdboot
  245. 7) shutdown
  246.  
  247. --------------------------------------------------------------------------------------------------
  248.  
  249. - Archiviare i files più piccoli di 100KB ma più grandi di 5KB:
  250.  
  251. find / -type f -size +10 -a -size -200 | xargs ar rc archive.a
  252.  
  253. Opzioni:
  254. r => sostituisci o aggiungi (nel caso un file non sia già presente)
  255. c => crea l'archivio (sopprime il noioso messaggio di notifica, non fa nulla se l'archivio esiste già)
  256. t => visualizza il contenuto (ar t archive.a)
  257.  
  258. --------------------------------------------------------------------------------------------------
  259.  
  260. - Trovare tutti i processi per ogni utente e fornirne l'occupazione in memoria???
  261.  
  262. #!/bin/sh
  263. SUM=0
  264. for UID in $(cat /etc/passwd | cut -d : -f 3); do
  265. for PROCSIZE in $(ps alx | tr -s ' ' ' ' | cut -d ' ' -f 4,8 | grep "^$UID" | cut -d ' ' -f 2); do
  266. SUM=$(expr $SUM + $PROCSIZE)
  267. done
  268. echo "Utente $UID : $SUM KB di processi in memoria"
  269. SUM=0
  270. done
  271.  
  272. ps alx => stampa tutti i processi in formato lungo
  273. tr -s ' ' ' ' => comprimo tutti gli spazi contigui in un solo spazio
  274. (fondamentale, altrimenti non funziona il cut)
  275. cut -d ' ' -f 4,8 => estrai la 4^ e l'8^ colonna (che dopo tr sono separate da un solo spazio)
  276. che sono l'UID del proprietario e la dimensione
  277. (le ho trovate osservando il comportamento dei comandi precedenti, non c'è un manuale su come farlo!)
  278. grep "^$UID" => cerca l'UID interessato a partire dall'inizio della riga
  279. (potrebbe confondersi con la dimensione di un processo)
  280. Ricordo che le colonne ora avranno il formato "0 689" ovvero UID + spazio + SIZE
  281. cut -d ' ' -f 2=> Una volta ristretto il campo dell'utente estraggo la sola colonna dei SIZE per poi sommarli tutti
  282.  
  283. --------------------------------------------------------------------------------------------------
  284.  
  285. - Trovare il processo con pid dispari che occupa più spazio in memoria?
  286.  
  287. #!/bin/sh
  288. MAXSIZE=0
  289. MAXPID=0
  290. for PROC in $(ps alx | tr -s ' ' : | cut -d : -f 5,8); do
  291. PID=$(echo $PROC | cut -d : -f 1)
  292. SIZE=$(echo $PROC | cut -d : -f 2)
  293. if [ $PID % 2 -eq 1 -a $SIZE -gt $MAXSIZE ]; then
  294. MAXPID=$PID
  295. MAXSIZE=$SIZE
  296. fi
  297. done
  298. echo "Processo con PID dispari più esoso: $MAXPID con $MAXSIZE KB"
  299.  
  300. Spiegazione:
  301. Dalla lista di tutti i processi comprimo tutti gli spazi contigui nel carattere ':'
  302. che userò come separatore di colonne (lo spazio faceva danno); estraggo le colonne 5 e 8 che sono PID e SIZE
  303. anche qui trovate osservando il comportamento dei comandi)
  304. Le righe ora sono della forma PID:SIZE (12:552)
  305.  
  306. Estraggo i PID come prima colonna dalla variabile PROC
  307. Estraggo i SIZE come seconda colonna dalla variabile PROC
  308. Se il PID % 2 è uguale a 1 (dispari) e SIZE è maggiore di MAXSIZE
  309. Aggiorno il PID e il SIZE massimi
  310.  
  311. --------------------------------------------------------------------------------------------------
  312.  
  313. -Calcolare la somma della dimensione di file eseguibili che hanno all'interno la parola copyright non sensitive
  314.  
  315. #! /bin/sh
  316.  
  317. SUM=0
  318. for SIZEFILE in $(find / -type f | xargs grep -il "copyright" | xargs ls -lF | grep "\*$" | tr -s " " : | cut -d : -f 5); do
  319. SUM=$(expr $SUM + $SIZEFILE)
  320. done
  321. echo "la somma è: $SUM"
  322.  
  323. le opzioni -il del grep mi consentono di:
  324. -i per il case insensitive
  325. -l per elencare il nome del file contente la parola copyright
  326. (altrimenti mi avrebbe stampato per ogni file la riga contenente la parola copyright)
  327.  
  328. --------------------------------------------------------------------------------------------------
  329.  
  330. -Trova il processo che occupa per ogni utente più memoria
  331.  
  332. #! /bin/sh
  333.  
  334. MAXSIZE=0
  335.  
  336. for USER in $(cat /etc/passwd | cut -d : -f 3 | uniq); do
  337.  
  338. for PROC in $(ps -axl | tr -s " " : | cut -d : -f 4,8 | grep -v "SZ"); do
  339. UID=$(echo $PROC | cut -d : -f 1)
  340. SIZE=$(echo $PROC | cut -d : -f 2)
  341.  
  342. if [ $UID -eq $USER -a $SIZE -gt $MAXSIZE ]; then
  343. MAXPROC=$PROC
  344. MAXSIZE=$SIZE
  345. fi
  346.  
  347. done
  348. echo "il processo dell'utente $USER + grande è: $MAXPROC"
  349. MAXPROC="nessun processo"
  350. MAXSIZE=0
  351. done
  352.  
  353. --------------------------------------------------------------------------------------------------
  354.  
  355. Copiare una directory mantenendo la struttura delle sottodirectory e i permessi,
  356. evitando però di copiare il contenuto delle cartelle(i file che all'interno che non sono directory)
  357.  
  358. #/bin/sh
  359. cpdir -p /directoryA /directoryB
  360. for file in $(find /directoryB -type f); do
  361. rm $file
  362. done
  363.  
  364. oppure
  365.  
  366. #! /bin/sh
  367. cpdir -pr /bin /bin2
  368. rm $(find /bin2 -type f)
  369.  
  370. --------------------------------------------------------------------------------------------------
  371.  
  372. - Quali e quante estensioni ci sono nel sistema?
  373. (per estensioni si intende qualsiasi cosa ci sia dopo il carattere “.”, es: archivio.gz)
  374.  
  375. La soluzione è questa:
  376.  
  377. find / | rev | cut -f 1 -d '.' | grep -v / | rev | sort | uniq -c | sort -n
  378.  
  379. Spiegazione:
  380.  
  381. find / trova tutto (files e directories) a partire dalla root dir
  382. rev inverte ogni riga dell'output
  383. cut -f 1 -d '.' estrae il primo campo di ogni riga usando il . come separatore
  384. grep -v / eliminazione delle sole directories
  385. rev inverte di nuovo ogni riga dell'output
  386. sort ordina l'output
  387. uniq -c elimina righe duplicate contandole, ora l'output è del tipo 123 gz
  388. sort -n (non necessario) ordina i risultati numericamente
  389.  
  390. Nota:
  391. Si può evitare il grep -v / usando cut -f 1 -d '.' -s.
  392.  
  393. Okkio che così trovi anche tutte le cartelle e file nascosti ( del tipo .cartella o .file).
  394. Ho fatto uno script simile al tuo, escludendo cartelle e file nascosti:
  395.  
  396. find / -type f -name *.* | tr -s '/' ' ' | rev | cut -d ' ' -f 1 | rev | grep -v "^\." | rev | cut -d '.' -f 1 -s | rev | sort | uniq -c
  397.  
  398. find / -type f -name *.* cerco tutti i file che contengono un punto nel nome del file
  399. (i file trovati sono completi di path ad es. /root/prova/file)
  400. tr -s '/' ' ' spazi al posto di /
  401. rev stampo il nome del file al contrario
  402. cut -d ' ' -f 1 estraggo il primo campo (è il nome del file al contrario). In questo
  403. modo ho il nome del file senza path
  404. rev ristampo il nome del file "dritto"
  405. grep -v "^\." escludo tutti i file che INIZIANO con un punto (sono quelli nascosti)
  406. rev non lo ripeto più
  407. cut -d '.' -f 1 -s estraggo il primo campo. Così ho l'estensione del file
  408. rev
  409. sort ordino le estensioni in ordine alfabetico, così posso eliminare le ripetizioni con uniq
  410. uniq -c per ogni estensione ho il numero di ripetizioni
  411.  
  412. --------------------------------------------------------------------------------------------------
  413.  
  414. - Qualcuno sa cosa significa fare la statistica dei file < 10k 100k 1000k ??????????
  415.  
  416. #! /bin/sh
  417. TOT=$(find / -type f | wc -l | tr -s ' ' : | cut -f 2 -d :)
  418. DIECIK=$(find / -type f -size -20 | wc -l | tr -s ' ' : | cut -f 2 -d :)
  419. CENTOK=$(find / -type f -size -200 | wc -l | tr -s ' ' : | cut -f 2 -d :)
  420. MILLEK=$(find / -type f -size -2000 | wc -l | tr -s ' ' : | cut -f 2 -d :)
  421. CENTO=100
  422. STAT=$(expr $DIECIK \* $CENTO)
  423. STAT1=$(expr $STAT / $TOT)
  424. STAT=$(expr $CENTOK \* $CENTO)
  425. STAT2=$(expr $STAT / $TOT)
  426. STAT=$(expr $MILLEK \* $CENTO)
  427. STAT3=$(expr $STAT / $TOT)
  428. echo "I file inferiori a 10k sono il ${STAT1}%"
  429. echo "I file inferiori a 100k sono il ${STAT2}%"
  430. echo "I file inferiori a 1000k sono il ${STAT3}%"
  431.  
  432. --------------------------------------------------------------------------------------------------
  433.  
  434. Per trovare ogni singolo file di testo che contiene la parola "copyright" basta fare:
  435.  
  436. find / -type f | xargs grep -l "copyright" | grep "\.txt$"
  437.  
  438. --------------------------------------------------------------------------------------------------
  439.  
  440. Somma delle dimensione di tutti i file di solo testo (non eseguibili) che contengono
  441. al loro interno la parola copyright
  442.  
  443. #!/bin/sh
  444.  
  445. SOMMA=0
  446. for VAR in $(find / -type f | xargs grep -l "copyright" | grep "\.txt$" | xargs du | cut -f 1); do
  447. SOMMA=$(expr $VAR + $SOMMA)
  448. done
  449. echo $SOMMA
  450.  
  451. --------------------------------------------------------------------------------------------------
  452.  
  453. per ecercare un eseguibile (però è stato detto più volte) fai così
  454.  
  455. find / -type f | xargs ls -lF | tr -s ' ' ' ' | cut -d ' ' -f 5,9 | grep "\*$"
  456.  
  457.  
  458. dove ls -F mette in fondo al nome del file alcuni simboli... mette un * se è eseguibile
  459. qunidi con tr ' ' ' ' comprimo tutti gli spazi
  460. con cut, con delimitatore lo spazio (-d ' ') selezioni i csmapi 5 e 9 (PID e SIZE)
  461. e poi estraggo le linee che hanno * alla fine (devo mette \ davanti a * per farlo interpretare bene...
  462. e il $ significa "cerca in fondo alla riga"
  463.  
  464. --------------------------------------------------------------------------------------------------
  465. - Trovare tutte le dir che abbiano meno di 5 sottodirs:
  466.  
  467. #!/bin/sh
  468. echo "Script per stampare le dir che hanno meno di 5 sottodir";
  469.  
  470. for dir in $(find / -type d);
  471. do
  472. ls -F -1 $dir | grep '/' | wc -w > a.tmp
  473. if [ $(cat a.tmp) -lt 6 ];
  474. then
  475. echo $dir;
  476. cat a.tmp;
  477. else
  478. echo '';
  479. fi;
  480. rm a.tmp;
  481. done;
  482.  
  483. --------------------------------------------------------------------------------------------------
  484.  
  485. - Trovare il file più grande di tipo testo che abbia un numero di righe pari
  486.  
  487. sizef=0
  488. for file in $(find / -type f -name '*.txt'); do
  489. nrrighe=$(wc -l $file | tr -d ' ' | cut -f 1 -d /)
  490. size=$(du $file | cut -f 1)
  491. if $(expr $(expr $nrrighe % 2) -eq 0 ); then
  492. if $(expr $size -gt $sizef); then
  493. sizef=$size
  494. filef=$file
  495. fi
  496. fi
  497. done
  498. echo "Il file di testo più grande con numero di righe pari è:
  499. echo $filef
  500.  
  501. --------------------------------------------------------------------------------------------------
  502.  
  503. Kernel:
  504. cambiare la politica di allocazione della memoria in best fit
  505.  
  506. Indovinato: si deve cambiare il file /usr/src/servers/pm/alloc.c più esattamente la funzione alloc_mem
  507. dove viene usato la politica firts fit.
  508.  
  509. --------------------------------------------------------------------------------------------------
  510.  
  511. - Calcolare per ogni utente il numero di file modificati nell'ultimo mese
  512.  
  513. for user in $(cut /etc/passwd -d : -f 3 | sort -n | uniq); do
  514. item=$(find / -type f -user $user -mtime -31 | wc -l | tr -d ' ' | cut -f 1)
  515. echo "L'utente $user ha modificato $item file nell'ultimo mese"
  516. done
  517.  
  518. --------------------------------------------------------------------------------------------------
  519.  
  520. - Per ogni utente del sistema stampare i gruppi a cui appartiene, senza utilizzare i comandi id e groups.
  521.  
  522. for x in $(cat /etc/passwd |cut -d ':' -f 1); do
  523. echo "$x: ""$(for y in $(cat /etc/group|grep -s $(cat /etc/passwd|grep -s "$x"|cut -d ':' -f 3)|cut -d ':' -f 1); do
  524. echo -n "$y ";done)";
  525. done
  526.  
  527. --------------------------------------------------------------------------------------------------
  528.  
  529.  
  530. Trovare tutti gli script del sistema, minori di 1 k, copiarli su /tmp/script/
  531. Aggiungerli tutti i file su un file.tar !
  532.  
  533. #!/bin/sh
  534. mkdir script;
  535. FILE=$(find / type -f -size +2 | xargs grep -l "#!/bin/sh" | cp * /tmp/script);
  536.  
  537. ----------------------------------------------------------------
  538.  
  539. - Trovare tutti i file modificati di venerdì
  540.  
  541. #!/bin/sh
  542.  
  543. find / -type f |while read line
  544. do
  545. giorno=$(stat -Mtime $line |awk '{$1 print $1}')
  546. if [ "$giorno" = "Fri" ]; then
  547. ls -l $line
  548. fi
  549. done
  550.  
  551. ----------------------------------------------------------------
  552.  
  553. - Memorizzare in un archivio .ar tutti i file creati negli ultimi 2 giorni di dimensione minore di 5k.
  554.  
  555. find / -type f -size -10 -ctime -2 |xargs ar rc filearc.ar
  556.  
  557. ----------------------------------------------------------------
  558.  
  559. - Calcolare per ogni utente il numero di file modificati nell'ultimo mese
  560.  
  561. cut -f 1 -d : /etc/passwd |while read line
  562. do
  563. conta=$(find / -type f -mtime -30 -user $line|xargs ls -l|wc -l)
  564. echo "lo user " $line "ha modificato " $conta "file negli ultimi 30 giorni "
  565. done
  566.  
  567. ----------------------------------------------------------------
  568.  
  569. - Calcolare la dimensione totale di tutti i file .c
  570.  
  571. #/usr/bin/sh
  572.  
  573. find / -type f -name *.c |
  574. while read line
  575. do
  576. conta=$(stat -size $line)
  577. tot=$(expr $conta + $tot)
  578. echo $tot > totale
  579. done
  580.  
  581. ----------------------------------------------------------------
  582.  
  583. - Memorizzare in un archivio .ar tutti i file creati negli ultimi 2 giorni di dimensione minore di 5k.
  584.  
  585. find / -type f -size -10 -ctime -2 |xargs ar rc filearc.ar
  586.  
  587. ----------------------------------------------------------------
  588.  
  589. Kernel: Ogni volta che viene cancellato un file che inizi per 'x' stampare un messaggio
  590.  
  591. inserire in /usr/src/servers/fs/link.c NELLA PROCEDURA UNLINK_FILE
  592.  
  593. if (file_name[0] == 'x') printf ("File rimosso");
  594.  
  595. ----------------------------------------------------------------
  596.  
  597. - Per ogni utente trovare i 3 file più vecchi del sistema..
  598.  
  599. #!\bin\sh
  600. USERS=$(cut -d : -f 1 | sort -f | uniq);
  601. for us in $USERS; do
  602. FILE=$(find / -type f -user $us | xargs ls -ltsT | tail -3);
  603. echo "FILE UTENTE: $us;
  604. echo $FILE;
  605. done
  606.  
  607. ----------------------------------------------------------------
  608.  
  609. - Calcolare il numero di righe totali che ha scritto sul filesystem un certo utente nell'ultimo mese
  610.  
  611. find / -mtime -30 |while read line ;
  612. do;
  613. awk '{ if ($(ls -l $linea)) $3 == 'root' print }';
  614. done;
  615.  
  616. find / -mtime -30 |while read line ;
  617. do;
  618. ls -l $line | awk '{ print $3": "$9}' | grep ^root
  619. done;
  620.  
  621. ----------------------------------------------------------------
  622.  
  623. calcolare la somma delle dimensioni dei file *.s.
  624. #/usr/bin/sh
  625.  
  626.  
  627. find / -name *.s | while read line;
  628. do;
  629. sum=$(ls -l $line| awk '{print $5}');
  630. #### pippo= $(ls -l $line| awk '{sum = sum + $5} END {print sum}'
  631. ###echo $sum;
  632. tot=$(expr $sum + $tot);
  633. echo $tot > tmp;
  634. done;
  635.  
  636. ----------------------------------------------------------------
  637.  
  638. - Trovare tutti i file che hanno il numero di blocchi pari
  639.  
  640. #/usr/bin/sh
  641. ###sum=0;
  642. find / |while read line;
  643. do;
  644. ls -l $line| awk '{if ($5%2==0) print }';
  645. done;
  646.  
  647. ----------------------------------------------------------------
  648.  
  649. kernel: scrivere un messaggio sullo schermo quando viene avviato un programma setuid root
  650.  
  651.  
  652. for file in $(find / -type f -name *.s); do
  653. sum=$(stat -size $file)
  654. tot=$(expr $sum + $tot)
  655. echo $tot
  656. done
  657.  
  658. ----------------------------------------------------------------
  659.  
  660. - Trovare i file più vecchi di un mese
  661.  
  662. find / -mtime -30 |while read line ;
  663. do;
  664. awk '{ if ($(ls -l $linea)) $3 == 'root' print }';
  665. done;
  666.  
  667. ----------------------------------------------------------------
  668.  
  669. - Mostrare, per ogni utente, il numero di file presenti sul sistema.
  670.  
  671. find / -f |xargs wc -l
  672.  
  673. -Calcolare il numero di righe totali che ha scritto sul filesystem un certo utente nell'ultimo mese
  674.  
  675. ----------------------------------------------------------------
  676.  
  677. - Stampare i file che finiscono per c con un numero di caratteri dispari e visualizzare la loro data
  678.  
  679. #/usr/bin/sh
  680.  
  681. find / -name *.c |while read line ;
  682. do;
  683. wc -c $line|awk '{if ($1%2 != 0 ) ls $2 print $2}'|xargs ls -l;
  684. done;
  685.  
  686. ----------------------------------------------------------------
  687.  
  688. Trovare tutti i file col numero dispari di righe (quindi sono i file di testo)
  689.  
  690. find / -f|while read line ; do wc -l $line| awk '{if (($1%2) !=0) print $line}' ;done;
  691.  
  692. ----------------------------------------------------------------
  693.  
  694. Trovare tutti i file modificati di venerdi' (sia un venerdi' particolare che di venerdi' in generale)
  695.  
  696. #/usr/bin/ksh
  697. find / -type f|while read line;
  698. do ; stat $line |awk '{if ($1 =="Mtime:" && $2 =="Fri") print "'${line}'" }' ;
  699. done;
  700.  
  701. ----------------------------------------------------------------
  702.  
  703. Trovare tutti i link simbolici presenti nel sistema.
  704. find / | while read line;do if test -h $line; then echo $line ok; fi; done
  705.  
  706. ----------------------------------------------------------------
  707.  
  708. Trovare tutti i file col numero dispari di righe (quindi sono i file di testo)
  709. find / -f|while read line ; do wc -l $line| awk '{if (($1%2) !=0) print $line}' ;done;
  710.  
  711. ----------------------------------------------------------------
  712.  
  713. Trovare gli utenti ed i gruppi distinti proprietari dei file nelle directory /bin, /sbin, /usr/bin e /usr/sbin.
  714. Riportare i comandi utilizzati.
  715. ls -l /bin /sbin /usr/bin /usr/sbin |awk '{print $3, $4}'|sort |uniq
  716.  
  717. ----------------------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement