Vous êtes sur la page 1sur 110

CommandesUNIX sousLINUX

DavidGorisse janv2009

Plan

Introduction Shell Gestiondesprocessus Systmedefichier listedecommandes ScriptShell MakeFile EditeurTexte

Introduction
DfinitionSystmed'exploitation HistoriqueUNIX LicenceLinux StructuredeLinux

Systmed'exploitation

Dfinition:Logicielquifournitunenvironnementd'excution pourlesprogrammesquivonts'excutersurunordinateur. Ildoitgrerlesressourcesquevontsepartagerles programmes:


Gestionduprocesseur Gestiondelammoirecentrale Gestiondusystmedefichiers Gestiondespriphriques

Unordinateurnepeutpasfonctionnersanssystme d'exploitation Unordinateurpeutfonctionneravecplusieurssystmes:Unix, Windows,...

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?

lafondationFSF(FreeSoftwareFoundation)a dveloppunprojetGNUpourpermettrela distributiondeprogrammesexemptsdedroits.

CommentprotgerLINUX? =>lesutilisateurGNUsontsoumisunelicence d'utilisation:GPL(GeneralPublicLicence)qui spcifielesdispositionslgalesvisvisde l'utilisation,ladistributionetlesmodifications.

ex:toutemodificationdoittrerendupublic

Compositiond'unsystmeLINUX
3composants:

lenoyau(Kernel):partiecentraled'Unix unserveurX:interfacegraphiquepermettant decrerdesapplicationsgraphiques. unenvironnementgraphique,comme:KDE, Gnome,...

LeNoyau

permetdefairelelienentrelesprogrammesetlematriel.
enmettantdispositiondesprocduresappelesprimitives ex:demandedeplusdemmoirevive

sechargedestchesessentielleslabonnemarchedu systme:

gestiondusystmedefichier duprocesseur delammoirecentrale deschangesentrel'unitcentraleetlespriphriques (entressorties)

partagelesressourcesrendantlesystmemultitche

Shell

Shell
Dfinition Gnralitsurlescommandes Raccourcis Caractresspciaux

Shell

pointduvuevisuel:crannoiravecen dbutdeligneunprompt.Onpeuttaper lasuitedeslignesdecommandes.

pointdevueinformatique:C'estlaliaisonlapluslmentaireentre l'utilisateuretlesystmed'exploitation.Ilpermetd'interprterles commandesquel'onentreetd'excuterdesapplications. leprompt:contientlenomdel'utilisateurcourantsuivitdunomdela machineetdunomdurpertoirecourant. ex:davigori@pif:davigori SynonymesdeShell:console,terminal

syntaxegnrale descommandesUnix

Lesargumentsindiquessurquelsobjetslacommandevaagir etlesoptionsdesvariantesdansl'excutiondelacommande.

Lesoptionssontprcdesd'untiret. L'ordredesoptionsestindiffrent. Sipasd'arguments,argumentpardfaut.

exemple: Pourconnatrel'utilisationd'unecommande:commdehelp Ouutiliserlemanuel:mancommande

syntaxegnrale descommandesUnix

Pourconnatrel'utilisationd'unecommande:

commdehelp

Ouutiliserlemanuel:mancommande

ouvreunepagedumanuel utiliserlesflchespour parcourirlapage spacepourpasserla fentresuivante gpourreveniraudbut Gpouratteindrelafin qpourquitteretrevenir auterminal

Raccourcis

laflcheduhautetcelledubas:
permetdenaviguerdansl'historiquedescommandes

latoucheTAB:
permetdecomplterlenomdufichierconditionquelenomsoitunique. Sinon,undeuximeappuiafficheralalistedespossibilits.

latoucheSHIFT+flchehautbas:
permetdefairedfilerlecontenu

latoucheCTRL:
+C:permetd'interrompreunecommandeencoursd'excution. +D:fermeleterminalencours. +Z:metenattenteledernierprocessus(metleprocessusensommeil)

Caractresspciaux

?et*sontdescaractresdessubstitutions.

?permetderemplacerunelettreunique. *permetderemplacerplusieurslettres. ex:uni*reprsentetouslesmotscommenantparuni

[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 tatdesprocessus Listerlesprocessus Interagiraveclesprocessus Gestiondesjobs Reprendrelamainsurlaconsole

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

montrelesprocessusenordredcroissantd'utilisationdu processeur indiquel'utilisationmmoire

=>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

Lejobn'estplusaccessible,ilestensommeil!!!onpeutlerveiller enlemettantenarrireplanaveclacommandebg.(inversementfg permetderappelerlejobaupremierplan)

Systmedefichiers

Systmedefichiers

Dfinition Arborescence Typesdefichiers Gestiondesdroits EspaceDisque

Dfinition

fichiersUnixsontenregistrsdansunensemblestructur hirarchiquementenarbre,appelsystmedefichiers. Unsystmedefichier:


uneracine:/. desnoeuds=fichiersrpertoires. desfichiersordinairescontenantdesdonnesoudes programmes.

Plusieurssystmesdefichierssontmontssurlesystme racine,celuiquicontientlerpertoire/.Cessystmessont enregistrssurdesdisquesphysiquesdiffrentsousurdespartitions diffrentes.Mais,touscessystmessontvusparl'utilisateurcomme unseulsystme.

Arborescence
/
laracine,contient lesrpertoiresprincipaux contientdesexcutablesessentielsausystme, employspartouslesutilisateurs contientlesfichierspermettantLinuxdedmarrer contientlepointd'entredespriphriques contientlescommandesetlesfichiersncessaires l'administrateurdusystme(fichiers:passwd,...) rpertoirepersonneldesutilisateurs

bin boot dev etc home

Arborescence
/
laracine,contient lesrpertoiresprincipaux contientdesbibliothquepartages contientlepointdemontagedespartitions temporaires(disquettes,cdrom,...) contientdespackagesd'application rpertoiredel'administrateurroot(superutilisateur) contientlesbinairessystmeessentiels

lib mnt opt root sbin

Arborescence
/
laracine,contient lesrpertoiresprincipaux contientlesfichierstemporaires hirarchiesecondaire

tmp usr

bin include lib

fichiersbinairesutilisateurs fichiersd'enttepourlesprogrammes CetC++ bibliothquespartagesdusystme

...

Commandespourparcourir l'arborescence

cd:changerderpertoire

cd.:restedanslerpertoirecourant cd..:retournerdanslerpertoirepre cd/:allerlaracine cd~:allerdanslerpertoiredel'utilisateur cd'rep'oucd./'rep'oucd./'rep'/permetderentrerdansle rpertoire'rep'setrouvantdanslerpertoirecourant ex:cd/utilisateurs/davigori/Documents/cours/UNIX

ls:listelecontenud'unrpertoire pwd:permetd'afficherl'arborescencedurpertoireactif

diffrentstypesdefichiers

fichiersordinaires:

contiennentdesdonnesoudesprogrammes.

3typesdefichiersordinaires:

fichiersbinairesexcutables,critsdanslecodedu processeurdelamachinequiontunestructurereconnue parlenoyauLinux lesfichierstextesquisontunesuitedecaractresASCII structursenlignes(onpeutlesouvriravecunditeur texte) autresfichiersbinairesquisontunesuited'octetsdontla structuren'estpasreconnueparLinux(maisquil'estpar leslogicielslesutilisant)

diffrentstypesdefichiers

rpertoire:

noeudsdelastructurearborescentedesfichiers.Ils contiennentlesidentificateurs(inodes)desfichiersqu'ils contiennent.


.:dsignelerpertoirecourant..:dsignelerpertoirepre

fichiersspciaux:

sontlisunpriphrique(/dev/tty01).Correspondedes programmes(pilotes,drivers)quigrentleschangesavecles priphriques

lienssymboliques:

contiennentlenomd'unautrefichieretpermettentdes indirections.

lancerunfichierExcutable

2faonsdelancerunfichierexcutable:

onsepositionnedanssonrpertoireetontapele nomduprogrammeprcdde./

ATTENTION:ondoitavoirlesdroitsd'excution(slidedroitsd'accs)

ontapeseulementlenomduprogrammedansun rpertoirequelconque.Danscecas,leterminalva rechercherleprogrammedanstouslesrpertoires dcritparlavariabled'environnementPATH

PATH

PATH:estunevariabled'environnementcontenantunelistede rpertoiresparepar:

C'estdanscettelistederpertoirequeleterminalrechercheles commandesquel'oncritauclavier.

ajouterlerpertoire'rep'auPATH:ajouterundesfichiers deconfiguration~/.bashrcou~/.bash_profile PATH=$PATH:$HOME/rep exportPATH onpeutremarquequelesfichiersdeconfigurationcommence parun.,cesontdesfichierscachs


ladiffrenceentrebashrcetbash_profileestquelepremierestappellors del'ouvertured'unterminaletl'autrelorsdel'ouverturedelasession

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

mkdir'rep':crerunrpertoireVIDE. rmdir'rep':supprimerunrpertoireVIDE. rmr'rep':supprimerlerpertoire'rep'etson contenu(ycomprislessousrpertoire) mv'rep''nvrep':renommelerpertoire'rep' cpr'rep'destination:copielerpertoire'rep'et soncontenuladestinationspcifie

crationdeliens

ilexiste2typesdeliensentrefichiers(Commande:ln'source''dest')

liensmatriels(ouphysiques) lienssymboliques(oulogiques)

lienmatriel:maniredenommerunfichier.Unfichierpeutavoir plusieursnoms.Iln'yapasdenotiondenomoriginal.Lefichierest rellementeffacunefoisquesonderniernom(lienmatriel)est dtruit.

=>Unlienmatrieldoitsetrouversurlapartitioncontenantrellement lefichier

liensymbolique(utiliserl'options):c'estunpetitfichierspcialqui contientunchemind'accs.Lorsquel'onsupprimeleliensymbolique (commande:unlink)seullelienestdtruitetnomlefichier. =>lelienpeutsetrouversuruneautrepartitionquelefichierpoint.

Droitsd'accs

Linuxestunsystmed'exploitationmultiutilisateur. Pourdesraisonsdescurit,lesfichiersnepeuventtrelus, modifisouexcutsuniquementparlespersonnes habilites.

=>lorsdelacrationd'unfichier,ondoitspcifieruncertain nombredepermissions Ilya3typesd'utilisateur:lepropritaire,legroupeetlereste dumonde +lesuperutilisateurouroot:utilisateur(administrateur) quiesthabilitmodifierlesystme(installationmatriel,ajout d'unutilisateur,...)


sulogin:permetdechangerl'utilisateurd'unterminal

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

Troiscaractresidentiqueauprcdentmaispourlerestedumonde Unchiffrepourlenombredeliens Lenomdupropritaire Lenomdugroupe Latailledufichier Ladateetl'heuredecration Lenomdufichier

Droitsd'accs
Seulslepropritaireetlesuperutilisateurpeuventmodifierlesdroits d'unfichier,aveclacommande:chmod. Ilexiste2modespourmodifierlesdroits:

lemoded'accsabsolue:

lesautorisationssontdonnessousformed'unnombreoctal composde3chiffres. Lepremierchiffrecorrespondauxautorisationsdupropritaire,le suivantaugroupeetledernierauxautresutilisateurs. Pourcalculerchaquechiffre,onajoutelesvaleursdes autorisationsencomptant4pourread,2pourwriteet1pour excute

Droitsd'accs
lemoded'accssymbolique:chmod[qui]oppermissions

quidsigneceluiouceuxquirecevrontcesautorisations:u (propritaire),g(groupe),o(lesautres),a(les3,pardfaut) opindiquesil'onveutajouter:+ouenlever: lespermissionssontdonnesparr,w,x ex:chmodug+wxfichier ex:chmodga+wxfichier

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:

Entrestandard(pardfautclavier);descripteur0 Sortiestandard(pardfautcran);descripteur1 Erreurstandard(pardfautcran);descripteur2 ./prog>'nomfichier'

redirectiondelasortiestandard>:

lasortieutiliseneseraplusl'cranmaislefichier'nomfichier', siilexisteilseracras

redirections

redirectiondelasortiestandard>>:

cettefoislasortiestandardestajoutelafindufichier

redirectiondufichierd'erreur2> redirectiondel'entrestandard< PIPE:lesdonnesdesortied'unecommandepeuvent tredirectementutilisescommedonnesd'entred'une autrecommandegrceausymbole|.

ScriptShell

ScriptShell
OnpeutregrouperunesquencedecommandeShellenun programmeappelscript.

Etapespourcrerunscript:

crerunfichieravecunditeurdetexteenymettantles commandessouhaites rendreleprogrammeexcutable (optionnel)placerleprogrammedansleHOME/bin

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

utilisateur:dfinisenminuscule(ex:toto) systme:enmajuscule(PATH,HOME) oprateurd'affectation= lacommanderead

affecterunevaleurunevariable:

Attention:pasd'espaceentrevariable,oprateuretvaleur

caractre$

lorsqueleShellrencontre$nom,ilremplacelavariablenom parsavaleur

Variables

oprateur=
Soitleprogrammeshell: #!/bin/bash x=saluty=david echo"yest$y" echo"$x$y"

rsultat: >yestdavid >salutdavid

Variables

commanderead

Soitleprogrammeshell: #!/bin/bash echo"veuillezcrire2mots" readab echo"vousavezsaisi$a$b"


rsultat: >veuillezcrire2mots >salutdavid >vousavezsaisisalutdavid

Sionutiliselacommandereadsansparamtre,la lignelueestenregistredanslavariableREPLY

Variables

Exercices

Ecrireunprogrammeshelldeuxfoisquiaffichelemessage "Entrezunmot:",litlemotsaisiparl'utilisateurpuisaffichece motdeuxfoissurlammeligne. Ecrireunprogrammeshelluntroisquidemandel'utilisateurde saisirunesuitedemotsconstitued'aumoinstroismotsetqui affichesurlammelignelepremieretletroisimemotsaisis.

Variables

chiffre=paramtredeposition

=>nepeutpastreutilisercommenomdevariable

paramtresdeposition=argumentspassslorsdel'appelduscript

=>$1remplacparlavaleurdupremierargument

paramtrespcial$#=nombredarguments paramtredeposition0=nomscript

#!/bin/bash echo"Nomduprogramme:$0" echo"Nbd'arguments:$#" echo"argument1:$1"


>prog.shtoto Nomduprogramme:toto Nbd'arguments:1 argument1:toto

Variables

commandeset
permetderedfinirlesargumentsdeposition

#!/bin/bash echo"$1$2" settatatoto echo"$1$2"

>prog.shbonjourpierre bonjourpierre tatatoto

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

Ex:repert=$(pwd)=>initialiselavariablerepertavec/home/davigori echo"monrepertoireest$repert" =>monrepertoireest/home/davigori

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

Lecodederetourd'unprogrammeshellestlecodederetour deladernirecommandequ'ilaexcute. $?contientlecodederetourdudernierprogramme. Sipasd'erreur$?=0

exit[n]:permetd'arrterleprogrammeenenvoyantlecodede retourn. Sinn'estpasprcisretournelecodederetourdeladernire commande.

choixmultiple:case
Syntaxe:casemotin [modle[|modle]...) suite_de_commandes;;]... esac

Exemple

Exercice Ecrireunprogrammeshell4argquivrifiequele nombred'argumentspassslorsdelappeldu programmeestgal4etcritsuivantlecasle messageCorrectoulemessageErreur.

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... >

programmefor_arg #!/bin/bash fori do echo$i echo"Passageal'argumentsuivant..." done

itrationFor

deuximesyntaxe:
forvarinliste_mots do suite_de_commandes done

varprendsuccessivementlavaleurdechaquemotsde liste_mots
programmefor_liste #!/bin/bash foraintototata do echo$a done

>for_liste toto tata >

itrationFor

Exercice:

Ecrireunprogrammeshelllsrepneprenantaucunargument,qui demandel'utilisateurdesaisirunesuitedenomsderpertoires (read)etquiafficheleurcontenurespectif.

Syntaxe: ifcommandes1

IF

then commandes2 [elifcommandes;thensuite_de_commandes]... [elsecommandes] fi

Sicommandes1retourne0=>commandes2seraexcut 1=>elifpuiselse

exemple: programmerm1

#!/bin/bash ifrm$1 thenecho$1aetesupprime elseecho$1n\'apasetesupprime fi

>echosalut>toto >rm1toto totoaetesupprime >rm1toto toton'apasetesupprime

testsurdesexpressions conditionnelles

syntaxe:

if[[expr_cond]]

Lesdeuxcaractrescrochetsdoiventtrecolls +espacedepartetd'autredeexpr_cond valuationdeexpr_condsiVRAIE=>retourne0 expr_condpeutportersurdiffrentsobjetstelsquedes chanesdecaractres,desfichiers,

expr_condpourfichiers

[[rentre]]

vraiesi entreexisteetestaccessibleen
lectureparleprocessuscourant.

[[wentre]] vraiesi entreexisteetestaccessibleen


critureparleprocessuscourant.

[[xentre]]

vraiesi lefichierentreexisteetest
excutableparleprocessus courantou lerpertoireentreexisteetle processuscourantpossdela permissiondepassage.

[[fentre]]

vraiesi entreexisteetestunfichierordinaire

[[ dentre]] vraiesi entreexisteetestunrpertoire

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

programmecmp_a #!/bin/bash if[[$1==a*]] thenechocommancepara elseechonecommancepaspara fi

combinaisond'expr_cond

()

vraiesi

silesexpressionsl'intrieursontvraies, permetderegrouperdesexpressionscond expestfausse

!exp vraiesi (exp1||exp2)

(exp1&&exp2)vraiesi lesdeuxexpr_condsontvraies. vraiesi l'unedesdeuxexpr_condestvraie.

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

\permetd'utiliserlescaractresspciaux commedescaractresnormaux(onprotgele caractre)


ex:echo\*=>affichera*

""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

initialisation:nomtab=(val0val1...) nomtab=([indice]=val...) readanomtab affectation:nomtab[3]=val accs:${nomtab[indice]} longueurd'unlment:${#nomtab[indice]} nombred'lments:${#nomtab[*]}

Tableaux

Exercice:Ecrireunprogrammeshelldistribquicreun paquetde5cartesdiffrentestiresauhasardparmiun jeude32cartesetaffichelecontenudupaquet.

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

>progundeuxtrois prog un deux f 2 un >

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:

lapremirerglerencontre,oulargledontle nomestspcifi,estvalue. Analysedesdpendances. Siunedpendanceestlacibled'uneautre rgle=>valuationdecettergle. Evaluationd'unergle:


L'valuationd'unerglesefaitenplusieurstapes:

Silaciblenecorrespondpasunfichier OuSifichierestplusrcentquelargle =>excutiondescommandes

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

Unmakefiledoitpermettredeforcerla regnrationintgraleduprojet =>doitcontenirles3rglessuivantes:

all:gnralementlapremiredufichier,elle regroupedanscesdpendancesl'ensemble desexcutablesproduire. clean:ellepermetdesupprimertoutles fichiersintermdiaires. mrproper:suppressiondesexcutables produire+appelclean

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

Dclaration:NOM=VALEUR utilisation:$(NOM) Intrt:permetdefaciliterlesvolutions. Ex:Dclarerlenomducompilateurdansune variablepermet,sionchangedecompilateur aucoursduprojet,denepasdevoirmodifier touteslescommandes.Seulelavariableest modifier.

Variables

Listedesvariablesusuellespourlacompilation d'unprojetenC:

CC:nomducompilateur CFLAGS:optionsdecompilation LDFLAGS:optionsdel'ditiondeliens. EXEC:nomdesexcutablesgnrer.

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

mrproper: clean rm -rf $(EXEC)

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

mrproper: clean rm -rf $(EXEC)

Rgled'infrence

Makefilepermetgalementdecrerdesrgles gnriquesquiseverrontappelespardfaut. (parexempleconstruireun.opartird'un.c) Syntaxe: Exemple:


%.o: %.c commandes %.o: %.c $(CC) -o $@ -c $< $(CFLAGS)

=>doitutiliserlesvariablesinternes ($@:nomdelacible;$<:premiredpendance)

Gnrationlisteobjets

Gnrationautomatiquedelalisted'objetspartirdela listedesfichierssources. Onabesoindedfinir2variables:

SRCquicontientlalistedesfichierssourcesdu projet. OBJpourlalistedesfichiersobjets.

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

@:permetdedsactiverl'affichedes messagesdescommandesprcdesdece caractre.


clean: @rm -rf *.o

Makefileconditionnel

Syntaxe:

ifeq($(VAR),valeur) cmd else cme endif

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:

Modeentre:onpeuttaperdutextecommeon leferaitsurunditeurquelconque. Modecommande:permetd'excuterdes commandesdemanipulationdutexte: dplacement,recherche,copie,sauvegarde.

Changementdemode

modecommande:[Echap] modeentre:

i:insrerdutextel'endroitducurseur(ou [Inser]) a:insrerdutexteaprslecurseur I:insrerdutexteendbutdeligne A:insrerdutexteenfindeligne o:commencerunenvelleligneaprslecurseur O:commencerunenvelleligneavantlecurseur

dplacement

Utilisationdesflches Enmodecommande:

w:avanced'unmot b:reculed'unmot $:avancejusqu'lafindelaligne

Onpeututiliserunargumentnumriquedevant unecommande.Ex:10w,avancerade10mots

Copier,couper,coller

yy:copielalignecourantedansletampon (5yy:copie5lignes) p:collelecontenudutamponaprslaligne courante P:collelecontenudutamponavantlaligne D:dtruitelerestedelalignedepuislecurseur dd:dtruitentirementlaligne dw:effacelemotdroiteducurseur


db:effacelemotgaucheducurseur

Charger/Sauver

:q:quittevimsansenregistrer :q!:forcequittervimsansenregistrer :w:sauvelefichiersouslenomcourant :wq:quitteensauvant :rfichier__inserer:insrelefichierl'endroit ducurseur :efichier__editer:chargeunnouveaufichier

VIM

Pourplusd'info,utiliserletutoriel:

vimtutor

Vous aimerez peut-être aussi