Académique Documents
Professionnel Documents
Culture Documents
DavidGorisse janv2009
Plan
Introduction
DfinitionSystmed'exploitation HistoriqueUNIX LicenceLinux StructuredeLinux
Systmed'exploitation
HistoriqueUNIX
1969KenThompsoncritUnixenassembleurdansleslaboratoirede Bell(AT&T) 1973DennisRitchieetKenThompsonrcriveUnixenlangageC (seulement10%enassembleur) 1974Unixestdistribulibrementauxuniversitsamricaines 1977UnixBSD(BerkeleySoftwareDevelopment)1.0del'universitde BerkeleyauxEtatsUnis 1978BrianKernighanetRobPike(chercheursdeslaboratoiresBell) prsententlaphilosophiedeconceptiond'Unix 1979UnixVersion7.0Commercialisationd'unelicencebinaire(moins onreusequelalicencepourlecodesource) 1983UnixSystemVquiaservidebaselanormePOSIX
UNIXLIKE
1991LinusTorvaldscritLINUXens'inspirantdeUnixSytemVetde UnixBSD
LalicenceGPLdeGNU
CodeSourcedeLINUXestaccessiblegratuitement. QuiprotgeLINUX?
ex:toutemodificationdoittrerendupublic
Compositiond'unsystmeLINUX
3composants:
LeNoyau
permetdefairelelienentrelesprogrammesetlematriel.
enmettantdispositiondesprocduresappelesprimitives ex:demandedeplusdemmoirevive
sechargedestchesessentielleslabonnemarchedu systme:
partagelesressourcesrendantlesystmemultitche
Shell
Shell
Dfinition Gnralitsurlescommandes Raccourcis Caractresspciaux
Shell
syntaxegnrale descommandesUnix
Lesargumentsindiquessurquelsobjetslacommandevaagir etlesoptionsdesvariantesdansl'excutiondelacommande.
syntaxegnrale descommandesUnix
Pourconnatrel'utilisationd'unecommande:
commdehelp
Ouutiliserlemanuel:mancommande
Raccourcis
laflcheduhautetcelledubas:
permetdenaviguerdansl'historiquedescommandes
latoucheTAB:
permetdecomplterlenomdufichierconditionquelenomsoitunique. Sinon,undeuximeappuiafficheralalistedespossibilits.
latoucheSHIFT+flchehautbas:
permetdefairedfilerlecontenu
latoucheCTRL:
+C:permetd'interrompreunecommandeencoursd'excution. +D:fermeleterminalencours. +Z:metenattenteledernierprocessus(metleprocessusensommeil)
Caractresspciaux
?et*sontdescaractresdessubstitutions.
[chaine]reprsenten'importequelcaractrecomprisentre[]
[09]dsigneunchiffrequelconque. [^09]dsignen'importequelcaractrequin'estpasunchiffre. [!e]dsignen'importequelcaractrequin'estpasune. [f]dsigneouf [ac01AZ]dsigneaoucouunchiffreouunelettremajuscule ex:rm*[ab]effaceratoutfichierdurpertoirecourantfinissantparaou b
Gestiondesprocessus
Gestiondesprocessus
Dfinition
multitche:linuxpeutgrerplusieursprocessusenparallle processus:instancedeprogrammes'excutantuninstant
donnainsiquesoncontexte.
contexte:l'ensembledesressourcesutilisesparleprogramme
pourpouvoirsedroulercommeparexemplelammoireoules fichiersouverts.
PID:numrouniquedonnparlesystmepermettantd'identifierun
processus.Lepropritaireduprocessuspeutinteragiravecce derniergrcecetidentifiant.
tatdesProcessus
principauxtatsd'unprocessus:
Actif:processusralisantdesactions.Ilpossdeleprocesseur
etralisedesoprationsncessairessondroulement.
Excutable:processusencoursd'excutionmaisattendant
queleprocesseursoitlibrepourraliserdesoprations.Lemulti tchen'estqu'uneillusion,unemachinecontenantqu'un processeurnepeutraliserqu'uneoprationlafois.
Endormi:processusinactifattendantuneconditionpour
redevenirexcutable
Zombie:processusterminquin'aplusderaisond'exister.
Seulement,lesystmeconservedesinformationsconcernantse processuspourdiversraisons.Parexemplepourquele processusparentquil'acrpuissevoirqueceprocessusest fini.
Listerlesprocessus
PS:donneunevisioninstantanedes processuscourantdusystme
l'optionopermetdespcifierlesinformationsafficher
l'optionepermetd'afficherlesprocessusdupropritairesurlamachine
l'optionapermetd'afficherlesprocessusdetouslesutilisateurs
Listerlesprocessus
TOP:donneunaperutempsreldesprocessustournant surlesystme
=>permetdeconnatrelesprogrammesconsommateursderessources
Interagiraveclesprocessus
KILL:envoieunsignalunprocessuspermettantde
modifierlecomportementduprocessus syntaxe:killsignalPID unsignalpeuttredsignparsonnomousavaleur numrique
nom SIGINT SIGKILL SIGSEGV valeur 2 9 11 description met le processus en pause (CTRL+z) arrte le programme signal envoy un programme si le programme tente d'accder un endroit mmoire invalide
Gestiondesjobs
jobs:tchedemandparl'utilisateur.Unetchepeuttre
composedeplusieursprocessus.Cequilesregroupeestappelun tube.ex: ici2processussontcrsmaisquisontvucommeuntout:unjob
[]:numrodujob;+:jobleplusrcent;:avantdernierjob; Stopped:jobensommeil(nepeutplusraliseraucuneaction)
Reprendrelamainsurlaconsole
Quandunjobestlanc,onnercupreleterminalqu'unefoislejob terminoumisensommeil.
Onpeutlancerunjobenarrireplanenutilisant&
celapermetdegarderlamainsurlaconsoleetainsilancerd'autresjobs
Sionoubliele&,onpeutrcuprerlamainenmettantlejoben sommeil:CTRL+z
Systmedefichiers
Systmedefichiers
Dfinition
Arborescence
/
laracine,contient lesrpertoiresprincipaux contientdesexcutablesessentielsausystme, employspartouslesutilisateurs contientlesfichierspermettantLinuxdedmarrer contientlepointd'entredespriphriques contientlescommandesetlesfichiersncessaires l'administrateurdusystme(fichiers:passwd,...) rpertoirepersonneldesutilisateurs
Arborescence
/
laracine,contient lesrpertoiresprincipaux contientdesbibliothquepartages contientlepointdemontagedespartitions temporaires(disquettes,cdrom,...) contientdespackagesd'application rpertoiredel'administrateurroot(superutilisateur) contientlesbinairessystmeessentiels
Arborescence
/
laracine,contient lesrpertoiresprincipaux contientlesfichierstemporaires hirarchiesecondaire
tmp usr
...
Commandespourparcourir l'arborescence
cd:changerderpertoire
ls:listelecontenud'unrpertoire pwd:permetd'afficherl'arborescencedurpertoireactif
diffrentstypesdefichiers
fichiersordinaires:
contiennentdesdonnesoudesprogrammes.
3typesdefichiersordinaires:
diffrentstypesdefichiers
rpertoire:
fichiersspciaux:
lienssymboliques:
contiennentlenomd'unautrefichieretpermettentdes indirections.
lancerunfichierExcutable
2faonsdelancerunfichierexcutable:
onsepositionnedanssonrpertoireetontapele nomduprogrammeprcdde./
ATTENTION:ondoitavoirlesdroitsd'excution(slidedroitsd'accs)
PATH
PATH:estunevariabled'environnementcontenantunelistede rpertoiresparepar:
C'estdanscettelistederpertoirequeleterminalrechercheles commandesquel'oncritauclavier.
Commandesfichiers
rm'fichier':supprimerlefichier'fichier' mv'fichier''nvNom':modifielenomdufichier mv'fichier''rep/':dplacelefichierdansle rpertoire'rep' cp'fichier''destination':copielefichierla destinationmentionne file'fichier':permetdeconnatreletypedufichier. cat'fichier':affichelecontenudufichier(lefichier doittredetypetexte). more'fichier':affichelecontenudufichieravec despauses.
Commandesrpertoires
crationdeliens
ilexiste2typesdeliensentrefichiers(Commande:ln'source''dest')
liensmatriels(ouphysiques) lienssymboliques(oulogiques)
=>Unlienmatrieldoitsetrouversurlapartitioncontenantrellement lefichier
Droitsd'accs
Droitsd'accs
lsl:donnelesdroitsd'accsdesfichiersdurpertoire
Typedefichier(uncaractre): sicaractre'd',c'estunrpertoire
sicaractre'l',c'estunliensymbolique sicaractre'',c'estunrpertoire
Troiscaractresindiquantlesdroitsdupropritairedufichier: si'r',droitenlecture(''sinon)
si'w',droitencriture(''sinon) si'x',droitd'excution(''sinon)
Troiscaractresidentiqueauprcdentmaispourlegroupe
Droitsd'accs
Droitsd'accs
Seulslepropritaireetlesuperutilisateurpeuventmodifierlesdroits d'unfichier,aveclacommande:chmod. Ilexiste2modespourmodifierlesdroits:
lemoded'accsabsolue:
Droitsd'accs
lemoded'accssymbolique:chmod[qui]oppermissions
EspaceDisque
du:affichel'espaceoccuppartoutel'arborescenceplac souslerpertoireaffich
df:affichelesinformationsdusystmefichiersplacsousle rpertoireaffich
CommandesUNIX
Listedecommandes
commandesusuelles:
man,cd,ls,pwd,mkdir,rmdir,mv,cp,top,ps,chmod,ln,kill,su cat:visualiseouconcatnedesfichiers chown:changelepropritaired'unfichier find:recherchedefichierourpertoire grep:recherched'unechanedecaractredansunfichier head/tail:afficheledbutoulafind'unfichier sort:trileslignesd'unfichier wc:comptelenombredemots/lignes/caractresd'unfichier more:affichelecontenud'unfichier echo:affichelesmessagespasssenparamtre
manipulationfichiers:
autres:
redirections
avantdelancerunprocessusleShellluiassocie3 fichiers:
redirectiondelasortiestandard>:
lasortieutiliseneseraplusl'cranmaislefichier'nomfichier', siilexisteilseracras
redirections
redirectiondelasortiestandard>>:
cettefoislasortiestandardestajoutelafindufichier
ScriptShell
ScriptShell
OnpeutregrouperunesquencedecommandeShellenun programmeappelscript.
Etapespourcrerunscript:
Exempledescriptshell
Soitleprogrammeshellcopie: #!/bin/bash #copie echo"Nomduprogramme:$0" echo"Nbd'arguments:$#" echo"Source:$1" echo"Destination:$2" cp$1$2
#!suivitdutypeduShell(premire ligneobligatoire) #pourlescommentaires suitedecommande desvariables:$
Variables
unevariableestdfinieparunnom,unesuitedecaractre. Ilexiste2typesdevariables
affecterunevaleurunevariable:
Attention:pasd'espaceentrevariable,oprateuretvaleur
caractre$
lorsqueleShellrencontre$nom,ilremplacelavariablenom parsavaleur
Variables
oprateur=
Soitleprogrammeshell: #!/bin/bash x=saluty=david echo"yest$y" echo"$x$y"
Variables
commanderead
Sionutiliselacommandereadsansparamtre,la lignelueestenregistredanslavariableREPLY
Variables
Exercices
Variables
chiffre=paramtredeposition
=>nepeutpastreutilisercommenomdevariable
paramtresdeposition=argumentspassslorsdel'appelduscript
=>$1remplacparlavaleurdupremierargument
paramtrespcial$#=nombredarguments paramtredeposition0=nomscript
Variables
commandeset
permetderedfinirlesargumentsdeposition
Variables
Exercice
Ecrireunprogrammeshellcp2foisprenanttroisarguments:le premierdsignelenomdufichierdontonveutcopierlecontenu dansdeuxfichiersdontlesnomssontpassscommedeuximeet troisimearguments.Aucuncasd'erreurnedoittreconsidr.
Variables
suppressiond'ambigut
Pourviterlesambigutsdanslinterprtationdesrfrencesdeparamtres,on utiliselasyntaxe${paramtre}. Ex:$x=bon $x1=jour echo$x1 =>jour echo${x}1 =>bon1 Ex:setundeuxtroisquatrecinqsixsepthuitneufdixonzedouze echo$11 =>un1 echo${11} =>onze
Substitutiondecommandes
$(cmd):
excutecmd peutaffecterlersultatunevariableouparamtresdeposition
Substitutiondecommandes
Plusieurscommandespeuventtreprsentesentreles parenthses
Ex:pwd;who =>/home/davigori davigori:02009010508:53 set$(pwd;who) echo"$2:$1connectdepuis$4" =>davigori:/home/davigoriconnectdepuis20090105
EXERCICE:crireunprogrammejourquiaffichelejour courantdumois(enchiffre).
Codederetour
choixmultiple:case
Syntaxe:casemotin [modle[|modle]...) suite_de_commandes;;]... esac
Exemple
itrationWhile
Syntaxe:whilesuite_cmd1 do suite_cmd2 done
lacommandesuite_cmd2estexcutetantquesuite_cmd1vaut0 Exemple
Lecturedansunfichier
itrationWhile
Exercice
Crerunfichierpersonne:
davidm aurelief pierrem sophief lucief
Crerunprogrammequilitcefichieretaffiche uniquementlesprnomsfminins
itrationFor
premiresyntaxe:
forvar do suite_de_commandes done
varprendsuccessivementlavaleurdechaqueparamtre depositioninitialis
>for_argundeux un Passageal'argumentsuivant... deux Passageal'argumentsuivant... >
itrationFor
deuximesyntaxe:
forvarinliste_mots do suite_de_commandes done
varprendsuccessivementlavaleurdechaquemotsde liste_mots
programmefor_liste #!/bin/bash foraintototata do echo$a done
itrationFor
Exercice:
Syntaxe: ifcommandes1
IF
Sicommandes1retourne0=>commandes2seraexcut 1=>elifpuiselse
exemple: programmerm1
testsurdesexpressions conditionnelles
syntaxe:
if[[expr_cond]]
expr_condpourfichiers
[[rentre]]
vraiesi entreexisteetestaccessibleen
lectureparleprocessuscourant.
[[xentre]]
vraiesi lefichierentreexisteetest
excutableparleprocessus courantou lerpertoireentreexisteetle processuscourantpossdela permissiondepassage.
[[fentre]]
vraiesi entreexisteetestunfichierordinaire
expr_condpourchanedecaractres
[[zch]] [[nch]]
vraiesi vraiesi
chaneestvide chanenonvide
[[ch1>ch2]] vraiesi ch1prcdech2 [[ch1<ch2]] vraiesi ch1suitch2 [[ch==md]] vraiesi chcorrespondaumodlemd [[ch!=md]] vraiesi chnecorrespondpasaumodlemd
>cmp_aatoutdesuite! commancepara >cmp_asalutabientt! necommancepaspara
combinaisond'expr_cond
()
vraiesi
programmenotaccesRW #!/bin/bash if[[!(w/etc/at.deny||r/etc/at.deny)]] then >lsl/etc/at.deny echoOUI rwr1rootdaemon144jan32006/etc/at.deny else >notaccesRW/etc/at.deny echoNON OUI fi lefichiern'estniaccessibleenlecturenien criturepourl'utilsateurdavigoridugroupeMIDI
Chanesdecaractres
""permetdeprotgertouslescaractresde chanesauf$\`"
ex:echo"$toto*"=>afficheralavaleurdetotosuivit ducaractre*
''permetdeprotgertouslescaractres
execho'$toto'=>affichera$toto
Chanesdecaractres
longueurd'unechanedecaractres
Syntaxe:${#paramtre} ex:
modificateurdechane
suppressiondelapluscourtesouschanegauche Syntaxe:${paramtre#modle}
ex:set"12a34aB";echo${1#*a}=>34aB
suppressiondelapluslonguesouschanegauche Syntaxe:${paramtre##modle}
ex:set"12a34aB";echo${1##*a}=>B
modificateurdechane
suppressiondelapluscourtesouschanedroite Syntaxe:${paramtre%modle}
ex:set"12a34aB";echo${1%a*}=>12a34
suppressiondelapluslonguesouschanedroite Syntaxe:${paramtre%%modle}
ex:set"12a34aB";echo${1%%a*}=>12
modificateurdechane
Syntaxe:${paramtre:ind} Extractiondelasouschanepartirdel'indiceind
ex:set"12a34aB";echo${1:3}=>34aB
Syntaxe:${paramtre:ind:nb} Extractiondelasouschanedenbcaractrepartirdel'indiceind
ex:set"12a34aB";echo${1:3:2}=>34
ExpressionsArithmtiques
syntaxe:
((expr_arith))
onpeututiliserlesexpressionsarithmtiquesduC dclarationvariableentire:declareib(facultatif)
programmecompteur #!/bin/bash declareii=0 while((i<$1)) do echo$1 (($1=$1+1)) done
Exercice:Crerunprogrammedemain,quiafficherala datededemain.
FORpourExpressions Arithmtiques
Syntaxe:
for((expr_arith1;expr_arith2;expr_arith3)) do suite_cmd done
Exemple:
for((x=0;x<5;x++)) do echo$((x*2)) done
Tableaux
dclaration:declareanomtab
dclarationfacultative,ilsuffitd'initialiserundeseslments
Tableaux
PS:onutiliseralavariableRANDOMpourobtenirunevaleuralatoire
FonctionsShell
Syntaxe:
functionnom_fct { suite_de_commandes }
pourappelerunefonction,ilsuffitdementionnersonnom
functionf0 { echoBonjourtoutlemonde! } >f0 Bonjourtoutlemonde! >
fonctions:arguments
utilisationdesparamtresdeposition
#!/bin/bash #prog functionf { echo"Dansf:\$0:$0" echo"Dansf:\$#:$#" echo"Dansf:\$1:$1" } echo"Dansprog:\$0:$0" echo"Dansprog:\$1:$1" echo"Dansprog:\$2:$2" fundeux
MAKEFILE
Dfinition
Makefiles:fichiers,appelsmakefileou Makefile,utilissparleprogramme make(setrouvantdansusr/bin). =>fichiermakefilenonexcutable!! Fonction: excuterunensembled'actionspour compilationd'unprojet,archivagede documents,lamisejourdesite,... Nousprsenteronslefonctionnementdemakefileau traversdelacompilationd'unpetitprojetenC.
Rgles
UnMakefileestunfichierconstitudeplusieursrgles delaforme:
cible: dpendances commandes
Chaquecommandeestprcded'unetabulation.
makefile hello: hello.o main.o gcc -o hello hello.o main.o hello.o: hello.c gcc -o hello.o -c hello.c -W -Wall -ansi -pedantic main.o: main.c hello.h gcc -o main.o -c main.c -W -Wall -ansi -pedantic
Excutiondumake
Lorsappelaumakefilevialacommandemake:
L'valuationd'unerglesefaitenplusieurstapes:
Excutiondumake
makefile hello: hello.o main.o gcc -o hello hello.o main.o hello.o: hello.c gcc -o hello.o -c hello.c -W -Wall -ansi -pedantic main.o: main.c hello.h gcc -o main.o -c main.c -W -Wall -ansi -pedantic
But:crerlefichierhello Premiredpendancehello.oestlacibled'unedesrgles =>valuationdecettergle Aucunedpendancedehello.on'estunergle =>pasd'autrerglevaluerpourcompltercelleci. Excutedescommandesdehello.o? Silefichierhello.cestplusrcentquelefichierhello.o,Oui Sinon,Non Evaluationdelarglehello.oesttermine =>Lesautresdpendancesdehellosontexamines.
Rglescomplmentaires
Rglescomplmentaires
makefile all: hello hello: hello.o main.o gcc -o hello hello.o main.o hello.o: hello.c gcc -o hello.o -c hello.c -W -Wall -ansi -pedantic main.o: main.c hello.h gcc -o main.o -c main.c -W -Wall -ansi -pedantic clean: rm -rf *.o mrproper: clean rm -rf hello
Variables
Variables
Listedesvariablesusuellespourlacompilation d'unprojetenC:
Variables
makefile CC=gcc CFLAGS=-W -Wall -ansi -pedantic LDFLAGS= EXEC=hello all: $(EXEC) hello: hello.o main.o $(CC) -o hello hello.o main.o $(LDFLAGS) hello.o: hello.c $(CC) -o hello.o -c hello.c $(CFLAGS) main.o: main.c hello.h $(CC) -o main.o -c main.c $(CFLAGS) clean: rm -rf *.o
Variablesinternes
$@ :nomdelacible $< $^ $? $* :nomdelapremiredpendance :listedesdpendances :listedesdpendancesplusrcentesquelacible :nomdufichiersanssuffixe
Variablesinternes
makefile CC=gcc CFLAGS=-W -Wall -ansi -pedantic LDFLAGS= EXEC=hello all: $(EXEC) hello: hello.o main.o $(CC) -o $@ $^ $(LDFLAGS) hello.o: hello.c $(CC) -o $@ $< $(CFLAGS) main.o: main.c hello.h $(CC) -o $@ $< $(CFLAGS) clean: rm -rf *.o
Rgled'infrence
=>doitutiliserlesvariablesinternes ($@:nomdelacible;$<:premiredpendance)
Gnrationlisteobjets
Syntaxe:OBJ=$(SRC:.c=.o) rcuprelalistecontenuedansSRCetremplace.cpar.o
SRC= hello.c main.c OBJ= $(SRC:.c=.o)
GnrationlisteSRC
wildcard*.c:permetdercuprertousles fichiersd'extension.cdurpertoirecourant
SRC= $(wildcard *.c) OBJ= $(SRC:.c=.o)
Commandessilencieuses
Makefileconditionnel
Syntaxe:
Exemple:
makefile DEBUG=yes ifeq ($(DEBUG),yes) CFLAGS=-W -Wall -ansi -pedantic -g LDFLAGS= else CFLAGS=-W -Wall -ansi -pedantic LDFLAGS= endif
OptionsdelaCommademake
maken: Nepaslancerlacompilation,maisjustedirece quel'onferait. makek: Continuermmes'ilyadeserreurs. makej5: Onpeutlancerjusqu'5commandeslafois (pertinentsurlesmachinesmultiprocesseurs). makefMakefile.linuxall: permetdeprciserlenomdufichiermakefile
diteurTexte:VIM
VIM
Vimestunditeurditmodal =>2modesd'excution:
Changementdemode
modecommande:[Echap] modeentre:
dplacement
Utilisationdesflches Enmodecommande:
Onpeututiliserunargumentnumriquedevant unecommande.Ex:10w,avancerade10mots
Copier,couper,coller
Charger/Sauver
VIM
Pourplusd'info,utiliserletutoriel:
vimtutor