Post on 07-Dec-2021
ì
FabioDelVigna- fabio.delvigna@for.unipi.it
Sistemi operativiCorso di Laurea Triennale in Ingegneria Informatica
Lezione 4• Cenni a Xserver• Patch, diff• Tar, gzip, bzip• Find, grep
Domande sulle lezioni passate?
FabioDelVigna- fabio.delvigna@for.unipi.it
Soluzione esercizi passati (permessi 1/3)
ì cdì mkdir –p visibile/segretaì echo 'vero' > visibile/notizia.txtì cp visibile/notizia.txt
visibile/segreta/cronaca.txt
ì chmod u-x visibileì chmod u+x visibile
ì Supponendo che i diritti del gruppo e di others siano solo di lettura ed esecuzione ma non di scrittura:
ì chmod 655 visibile
FabioDelVigna- fabio.delvigna@for.unipi.it
Soluzione esercizi passati (permessi 2/3)
ì Risposte alle domande1. Si riesce a vedere il contenuto di visibile (al
proprietario è consentito l'accesso in lettura).2. Non si può vedere il file notizia.txt dentro visibile (non
si può attraversare visibile).3. Non si può vedere il contenuto di segreta .4. Non si può vedere il notizia.txt dentro segreta .
ì adduser utente21. supponendo che la maschera di default sia rwxr-xr-x,
utente può vedere il contenuto della home di utente2 .2. supponendo che la home di utente2 abbia un gruppo
diverso da utente:chmod o-r ~
FabioDelVigna- fabio.delvigna@for.unipi.it
Soluzione esercizi passati (permessi 3/3)
groups root
adduser utente3 (login root)
mkdir /home/utente3/temp (root)
ls –l /home/utente3/temp (l’utente proprietario è root e il gruppo proprietario è wheel)
chown utente3:utente3 /home/utente3/templs –l
chgrp admin /home/utente3/temp
rmuser utente2rmuser utente3
FabioDelVigna- fabio.delvigna@for.unipi.it
Soluzione esercizi passati (utenti 1/3)l Login con root
adduser –s (pippo)
l vipw : aggiungere la riga (es.):
l pluto::1002:1002::0:0:Pluto:/tmp/pluto:/bin/sh
l Attenzione: scegliere come ID di utente e gruppo un valore non in uso
l vi /etc/group : aggiungere la riga (es.): (vigr)
l pluto:*:1002:
l Attenzione: scegliere come ID di gruppo lo stesso indicato nel punto 1.
l mkdir /tmp/pluto
l cp /etc/skel/* /tmp/pluto
l chown -R pluto:pluto /tmp/pluto
l chmod –R u+rwx,g+rx,o+rx /tmp/pluto
l loggarsi con pluto e cambiare password (comando passwd).
FabioDelVigna- fabio.delvigna@for.unipi.it
Soluzione esercizi passati (utenti 2/3)
l pluto non può creare file nella home di pippo con i permessi default. Quindi, dato che non appartengono allo stesso gruppo, bisogna aggiungere il permesso in scrittura per la sezione others
l chmod o+w /home/pluto
l chmod o+w /home/pippo
l Una soluzione migliore consiste nel definire un gruppo a cui appartengono pluto e pippo e assegnare tale gruppo alle home dei due utenti e abilitare il diritto di scrittura (group owner) sulle due cartelle. l su root (oppure logout, login con root) l vi /etc/group : aggiungere la riga (es.):l floppyusr:*:1003:pluto
FabioDelVigna- fabio.delvigna@for.unipi.it
Soluzione esercizi passati (utenti 3/3)
l Le nuove impostazioni sui gruppi diventano effettive al nuovo login, come si può osservare dalla seguente sequenza di comandi:l idl logoutl login con plutol id
l L'output prodotto dal comando id è diverso nei due casi (solo nel secondo viene mostrato il gruppo al quale pluto è stato aggiunto).
l su root (oppure logout, login con root) l mkdir /tmp/floppyl chown :floppyusr /tmp/floppyl chmod g+rwx,o-rwx /tmp/floppy
FabioDelVigna- fabio.delvigna@for.unipi.it
X Window System
ì creato dalMITnel 1984.
ì fornisce l'ambiente ei componenti dibaseperleinterfaccegrafiche:ì disegno espostamento delle finestre sullo schermoì l'interazione conil mouseelatastiera
ì nongestisce l'interfaccia grafica utente olostilegrafico delleapplicazioniì questi aspetti sono gestiti direttamente daogni singola
applicazione
ì trasparenza direte
FabioDelVigna- fabio.delvigna@for.unipi.it
X Window System (2)
ì Xusa unmodello client/server:ì il serverXcomunica congli altri programmi (client)ì Ilserveraccetta richieste peroutputgrafici (finestre)
einputdall'utente (dalla tastiera,il mouseodaltouchscreen).
ì IlserverXpuò essere:ì unprogramma disistema che controlla l'output
videodiunPCì uncomponente hardwarededicatoì un'applicazione che mostra dati su una finestra diun
altro sistema grafico.
FabioDelVigna- fabio.delvigna@for.unipi.it
X Window System (3)
ì Ilprotocollo dicomunicazione tra servereclientoperainmodo trasparente rispetto alla rete:ì entrambi possono risiedere sulla stessa
macchina osu altre,anche conarchitettureesistemi operativi differenti
ì il servered il clientpossono anchecomunicare inmodo sicuro attraverso laretesfruttando untunnelcifrato (SSH).
FabioDelVigna- fabio.delvigna@for.unipi.it
Patch, Diff e Make
ì Nei sistemi Unixsono disponibili strumenti perlosviluppo diprogetti software:ì Make,percostruire programmi apartire daun
insieme disorgentiì Patch eDiff,perconfrontare emodificare (patchare)
filetestualiì Programmi pergestire losviluppo concorrente di
codice (SVN,CVS,Git esimili)
FabioDelVigna- fabio.delvigna@for.unipi.it
Diff e Patch
FabioDelVigna- fabio.delvigna@for.unipi.it
Patch
ì Siutilizza permodificare codice inmanieraautomatizzata.
ì Esempio diuso:ì Unsoftware,sottoformadicodice sorgente,non
gira su unsistema .ì Lemodifiche sono distribuite sottoformadi“patch”
alcodice originale.ì Conpatchsi può patchare il codice originale.
FabioDelVigna- fabio.delvigna@for.unipi.it
Esempio di uso patch
patch [options] [originalfile [patchfile]]
patch < file.patch →patch“unified”
patch file.txt < file.patch
patch -R < file.patch
Attenzioneailivelli(gerarchiacartelle)delfiledipatchchesihannonelcasosiapplichinopatchainterecartelle(opzione-p[level]).
FabioDelVigna- fabio.delvigna@for.unipi.it
diff 1/2
ì Diff serveperconfrontarefile.
ì Confronto“manuale”visivo
ì Generazionefilepatch.
FabioDelVigna- fabio.delvigna@for.unipi.it
diff 2/2
ì diff file1 file2 ì differenze (riga perriga)tra i duefile
FabioDelVigna- fabio.delvigna@for.unipi.it
Esempio di uso diff
diff -u file_orig.c file_nuov.c > orig.patch
diff -ruN cart_orig/ cart_nuov/ > orig.patch
ì L'opzione -u creailfilepatchinformatounificato(unified).
FabioDelVigna- fabio.delvigna@for.unipi.it
diff
ì Nelcasopiùsemplice,l’outputprodottodadiffusaFROM-FILEeTO-FILEpergenerareunfiledidifferenze
ì ‘-’staperstandardinput
ì diff3 confronta3fileallavolta
ì sdiff side-by-sidemergedeifile
ì $ info diff
FabioDelVigna- fabio.delvigna@for.unipi.it
Archiviazione e compressione
FabioDelVigna- fabio.delvigna@for.unipi.it
Archiviazione -tar
ì tar=TapeARchive
ì Unfiletar è una raccolta difilee/odirectory
ì tar [azione][switch] [archivio] [file]
ì tar compresso (.tgz o.tar.gz)è diventatostandardperil passaggio didati tra sistemi Unix.
FabioDelVigna- fabio.delvigna@for.unipi.it
tar - Opzioni
ì Azione/funzioneì c:creaì x:estraeì t:visualizza il contenuto diunarchivio
ì switchì v:verboseì z:comprime congzipì j:comprime conbzip2ì f:file
ì comeultima opzioneì n:comportamento nonricorsivo
FabioDelVigna- fabio.delvigna@for.unipi.it
tar - Creazione
ì tar –cvf archivio.tar sorgente
ì tar -czvf archivio.tar.gz ~/archivio/*
ì archivio.tar:filedacreare
ì sorgente:contenuto dell'archivio
FabioDelVigna- fabio.delvigna@for.unipi.it
tar - Visualizzazione
ì tar -tvf filename.tar
ì Elenca il contenuto difilename.tar
FabioDelVigna- fabio.delvigna@for.unipi.it
tar - Estrazione
ì tar –xvf archivio.tar destinazione
ì tar -xzvf archivio.tar.gz
ì Nonrimuove l'archivio,macrea copie delsuocontenuto
FabioDelVigna- fabio.delvigna@for.unipi.it
gzip and gunzip
ì Programma dicompressione
ì gzip archivio archivio.gz
ì gzipì Utilitydicompressione
ì gunzipì Utilitydidecompressione
FabioDelVigna- fabio.delvigna@for.unipi.it
bzip2 and bunzip2
ì bzip2ì Utilitydicompressione
ì bunzip2ì Utilitydidecompressione
ì bzip2 archivio archivio.bz2
ì Rapporto dicompressione migliore digzip
FabioDelVigna- fabio.delvigna@for.unipi.it
Archivi - path
ì Ifilevengonomemorizzaticolpath
ì Non vengonoeffettuaticontrollidioverwrite
ì -C nome_directory:estraeidatinelladirectoryspecificata
ì Senonsispecificaladestinazionesiusaladirectorycorrenteedilpath nell’archivio
FabioDelVigna- fabio.delvigna@for.unipi.it
Ricerca di file
FabioDelVigna- fabio.delvigna@for.unipi.it
find
ì Ricercaall’internodipercorsiifilesecondolecondizioniindicate
ì Lecondizionisonolegateall’apparenzaesternaenonalcontenuto
FabioDelVigna- fabio.delvigna@for.unipi.it
find
ì find [percorso…] [espressione]
ì percorso…ì insieme dipercorsi separati daspazi
ì espressioneì insieme ditesteazioni separati daoperatori
FabioDelVigna- fabio.delvigna@for.unipi.it
Espressioni
[opzione…] [condizioni]
ì Opzioneì Alterail comportamento delprogramma
ì Condizioniì Espressioni conrisultati logici
ì Perconcatenare più condizioni si usano gli operatori booleani
ì defaultè l’AND logico (-and)
FabioDelVigna- fabio.delvigna@for.unipi.it
Condizioni
ì -nameschemaì TRUEseil nome delfilecorrispondeì si possono utilizzare i caratteri *e?
ì -size[+|-]n[b|c]ì TRUEseladimensione delfileè uguale (maggiore +
ominore -)anunità dispazio
ì -typetì TRUEseil fileè deltipo specificato (d,f,l)
FabioDelVigna- fabio.delvigna@for.unipi.it
Condizioni
ì -userutenteì TRUEselarisorsa appartiene autente
ì -groupgruppoì TRUEseappartiene algruppo ”gruppo”
ì -perm[-/+]modelloì TRUEsei permessi corrispondono esattamente al
modello specificato (informaottale osimbolica)
FabioDelVigna- fabio.delvigna@for.unipi.it
Operatori booleani di find
ì (espressione)ì Precedenza nell’esecuzione dei test
ì !espressioneì nega un’espressione
ì espressione [-and]espressioneì ANDlogico tra espressioni (può essere omesso)
ì espressione -orespressioneì ORlogico tra espressioni
Usare i caratteri diescapeperproteggere dall’espansione della shell
FabioDelVigna- fabio.delvigna@for.unipi.it
Azioni di find
ì Operazioni dacompiere perogni risultato dellascansione.ì -print
ì stampa i nomi dei filetrovati
ì -execcomando [{}][;|+]ì esegue comando suirisultati della ricercaì esegue una istanza delcomando perogni file
trovato (lariga terminata da;)ì con{}i filetrovati vengono passati acomando come
lista (lariga terminata da+)
FabioDelVigna- fabio.delvigna@for.unipi.it
Esempi find
find . –name prova\* -print
Cerca i nomi che iniziano conprova
find / -name “lib*” -print
Ricerca in/i nomi iniziano perlib
“\”protegge i metacaratteri
FabioDelVigna- fabio.delvigna@for.unipi.it
Esempi find
find /home –name “pro*” ! –type d
ì Escluse ledirectory
ì Ricerca apartire da/homei nomi che iniziano conpro
ì Virgolette usate perevitare che lashelltrasformi pro*inqualcosa didiverso
FabioDelVigna- fabio.delvigna@for.unipi.it
Ricerca con locate
locate “nomefile”
ì Esegue una ricerca delfile“nomefile”all'interno di
undatabase
ì Ildatabaseva popolato etenutoaggiornato conil
comando:updatedb
FabioDelVigna- fabio.delvigna@for.unipi.it
Ricerca nei file
FabioDelVigna- fabio.delvigna@for.unipi.it
grep
§ grep [opzioni] “stringa” nome_file ...§ Cercalerighecontenentistringa
§ grep “pippo” pluto§ Visualizzalepartidelfilepluto incuicomparela
parolapippo.
§ grep pippo *§ Cercalaparolapippo intuttiifiledelladirectory
corrente.
FabioDelVigna- fabio.delvigna@for.unipi.it
Ilcomandogrep è casesensitive.
grep
ì Èpossibileutilizzareespressioniregolariperlericerche(generalized regularexpression printer)
ì grep 'ri.*o' pluto
ì Cercalestringhecheinizianoperri eterminanocono all'internodelfilepluto.
ì .* indica0(zero)opiùcaratteriqualunque
FabioDelVigna- fabio.delvigna@for.unipi.it
Opzioni grep
-i (ignore case)ignoraledistinzionitraminuscoleemaiuscole
-vmostralelineecheNONcontengonol’espressione
-nmetteilnumerodirigadavantiadognirigacheriporta
-criportasoloilconteggiodellelinee
-wverificasoloparoleintere
-x controllalecorrispondenzedilineeintere
FabioDelVigna- fabio.delvigna@for.unipi.it
Metacaratteri (1 di 2)
ì ^ Iniziorigagrep '^d' ls.out
ì $ Finerigagrep '\.c$' ls.out
ì Aggiungereancheilmetacarattere'\'perchéancheilcarattere'.'èunmetacarattere
ì '\'neutralizzailvaloredimetacaratteredelcaratterechelosegueì Percitareletteralmenteilcarattere'\'ènecessarioquindiscriverlo
duevolte:'\\'
FabioDelVigna- fabio.delvigna@for.unipi.it
metacaratterijollywild-cards
Metacaratteri (2 di 2)
. unoedunsolocaratterequalunque* zeroopiùoccorrenzedell’espressionecheloprecede
Esempi:ì Ricercareunarigacostituitadallasolastringa
"riga completa":'^riga completa$'
ì Individuaretuttelerighevuotedelfile:'^$'
FabioDelVigna- fabio.delvigna@for.unipi.it
Insiemi di caratteri
[s]ì '['e']'sonometacaratteri
ì 's'elencodicaratteriammessi.
ì L'insieme'[s]'soddisfaUNSOLOqualunquecaratterecompresonell'elencos.
ì Negliinsiemi'[s]'sipossonospecificareintervallidicaratteriusandoilcarattere'-’
FabioDelVigna- fabio.delvigna@for.unipi.it
Esempio
grep '1[2,3]:[0-5][0-9]' ls.out
ì ilprimocaratteredellastringacercatadeveessereletteralmenteun’1’
ì ilsecondopuòessereun'2' oun'3’
ì ilterzodeveessereletteralmenteun':’
ì ilquartopuòessere'0' o'1' o'2' o'3' o'4' o'5’
ì ilquintodeveessereunacifracompresatra'0' e'9' (estremicompresi).
FabioDelVigna- fabio.delvigna@for.unipi.it
Esercizio
FabioDelVigna- fabio.delvigna@for.unipi.it
Esercizio 1
ì Creareduefileditesto,concontenutodialmeno5righe(chiamarliargv1.sheargv2.sh).
ì Diffì Creareunfilepatchchepermetta,seapplicatoa
argv1.shdiottenerelostessocontenutodiargv2.sh
ì Patchì Applicarelapatchcreatacondiff alfileargv1.shì Rimuoverelapatchdaargv1.sh
FabioDelVigna- fabio.delvigna@for.unipi.it
Esercizio 2
ì Archiviazione ecompressioneì creare nella home unarchivio compresso informato gzip dinome
config.tgz contenente i fileconestensione conf presenti nellacartella /etc
ì mostrare i filecontenuti nell’archivioì decomprimere l’archivio congunzipì estrarre i filecontenuti conil comando tar
ì Ricerca dei fileì cercare dentro lacartella /etc tutti i fileil cuinome contiene la
stringa sys elacuidimensione è superiore a10 byteì cercare nella root tutti i fileche hanno il bitSUID oSGID attivoì concatenare emostrare avideotutti i file(apartire dalla root)il
cuinome contiene lastringa tabì Ricerca nei file
ì cercare dentro lacartella /etc tutti i fileche contengono lastringafstab
FabioDelVigna- fabio.delvigna@for.unipi.it
Riferimenti
ì http://www.x.org/- OfficialsiteoftheXorgfoundation
ì http://www.linfo.org/x.html – introductiontoX
ì http://tools.ietf.org/html/rfc1198– RFC
FabioDelVigna- fabio.delvigna@for.unipi.it