Anda di halaman 1dari 237

LaConsole

MmoiresurlapratiquedushellBashsousGnuLinux 1.LaConsole 2.LesServices 3.LeNetworking

ParPatrickHautrive2010 http://hautrive.free.fr

LaConsolePatrickHautrive!;~)2010

Table des matires UNIX......................3 LINUX....................6 SOURCE................8 LICENCE...............9 SYSTEM..............13 DESKTOP............24 INFORMATION. .26 SOCIETY.............32 GNUGPL..............38 STRATEGY.........41 INSTALL.............44 PARTITION.........48 LOADER..............55 BOOT...................57 LILO.....................61 GRUB...................64 INITRD................69 INITTAB..............70 SERVICES...........74 WRAPPERTCP....77 LOGIN..................83 SHELL..................87 VARIABLE..........99 LANGUAGE......113 PROCESS...........120 TERMINAL.......132 HIERARCHY.....139 PERMISSION....150 PASSWORD......157 ROOT.................168 PACKAGE.........178 SCRIPTS............180 OPERATOR.......184 EXAMPLES.......196 TOOLS...............232 FILES.................233 CARACTERS....234 DEFINITIONS...235 FORMULES.......236

Copyright 2010PatrickMarceauLouisHAUTRIVE Permissionisgrantedtocopy,distributeand/ormodifythisdocumentunderthetermsofthe GNUFreeDocumentationLicense,Version1.3oranylaterversionpublishedbytheFree SoftwareFoundation;withnoInvariantSections,noFrontCoverTexts,andnoBackCover Texts.Acopyofthelicenseis includedinthesection entitled "GNUFreeDocumentation Licence".Foralltheexamplesofcommandsandallthescripts,pleaserefertotheGNUGeneral PublicLicenseaspublishedbytheFreeSoftwareFoundation. http://www.gnu.org/licenses/fdl.html Copyright2010PatrickMarceauLouisHAUTRIVE Thisprogramisfreesoftware:youcanredistributeitand/ormodifyitunderthetermsofthe GNUGeneralPublicLicenseaspublishedbytheFreeSoftwareFoundation,eitherversion3 ofthelicense,oranylaterversion.Thisprogramisdistributedinthehopethatitwillbeuseful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITYorFITNESSFORAPARTICULARPURPOSE.SeetheGNUGeneral PublicLicenseformoredetails.YoushouldhavereceivedacopyoftheGNUGeneralPublic Licencealongwiththisprogram.Ifnot,see: http://www.gnu.org/licenses/

LaConsolePatrickHautrive!;~)2010

UNIX Lachronologiedessystmes 1968 MULTIX Projetd'unsystmed'exploitationmultitche(AT&T,MIT,GeneralElectrics) DveloppementsurDECPDP7parBrianKernighanetKenThomsom Programmed'unjeuSpaceTravel 1970 UNICS 1972 Unix 1977 BSD4.4 TimeSharing(BellLaboratorychezAT&T) ConceptiondulangageCetrcritureducodeparDenisRitchie BerkeleyuniversitysouslicencelibreBSD(BerkeleySoftwareDevelopment) TCPIP FreeBSD NetBSD OpenBSD 1981 UNICES SYSTEMV SOLARIS AIX ULTRIX HPUX TRUE64 IRIX VENIX XENIX 1984 GnuGPL 1987 MINIX 1989 Internet 1991 Linux 1999 MacOSX (RseauArpanetduDARPA) (Multiplateforme) (Optimisation) (Scurisation) (AT&T) (SunMicrosystems) (IBM) (DigitalEquipmentCorporation) (HewletPackard) (Compaq) (SiliconGraphicInc.) (Venture) (MicrosoftetSantaCruzOperation)

Fermetureethtrognisationducodeparl'industrieinformatique

ProtectionducodesourcesouslicencelibreparRichardM.StallmanduMIT CrationdelaFSF(FreeSoftwareFoundation)etduprojetGnuHurd Minisystmemonolithiquepourl'apprentissageparAndrewTannenbaum Dveloppementdel'hypertexte(HTML)parTimBernersLeeduCERN Ouverturedurseauetduprotocoled'changededonnes(WorldWideWeb) LancementduprojetcommunautairesurInternetparLinuxTorwalds Rappropriationducode(NoyauBSDMachpatch)parApple

http://en.wikipedia.org/wiki/Linux

LaConsolePatrickHautrive!;~)2010

Lecontextehistorique LesystmeUNIXfutconupourfairetournerdepetitsprogrammes,excutantdesimplestches, maispouvantcommuniquerentreeux.LalignedecommandetaitlaseuleinterfaceouCLI (CommandLineInterface). La socit AT&T distribua gracieusement son systme UNIX (sans royalties exorbitantes, ni contraintes pnalisantes) auprs des universits amricaines afin d'en favoriser la mise au point, d'encouragerlesdveloppementsetdesusciterlesvocations,maisaussipourseprmunircontrelaloi AntiTrust(monopoledestlcommunicationsetdel'informatique). Les universits amricaines furent, ds le dpart, associes au dveloppement d'un systme d'exploitation multitches, et contriburent dvelopper de nombreux outils et fonctionnalits. L'universit de Berkeley en Californie intgra la pile TCPIP au noyau, et l'universit du MIT dveloppaleserveurgraphiqueX. La socit SUN Microsystem finana le dveloppement de la suite bureautique Open Office. Le CERN(CentreEuropendeRechercheNuclaire)dveloppal'internetpourl'changededonnes.De nombreux tudiants, chercheurs universitaires et professionnels poursuivent toujours leurs contributionspourunmondenumriquelibre. LasocitAT&Tetl'universitdeBerkeleyfurentlongtempsenprocspourlapropritducodeBSD. LasocitAT&Testpropritairedusigle UNIXetleSYSTEMV(SVR4)eststandardis.Les systmesunicespropritairesproviennentdelammesouchecommuneetlibre(BSD4.4).Chaque systmedivergeaensuitejusqu'l'incompatibilit,devenantdeplusenplusdpendantdumatrielpour lequeliltaitconuetdesutilitairespropritairesquipermettaientdes'enservir.L'harmonisationdes unicesestorchestreparleConsortiumOSF(OpenSoftwareFoundation). RichardM.Stallmanesten1971ingnieursystmeaulaboratoired'intelligenceartificielleduMIT, etilabesoinducodesourcedupiloted'uneimprimantelaserXeroxinstalledansuneautrepiceafin deprogrammerunealerteencasdepanne.Pourdesraisonsdelicencerestreinte,cecodesourceluiest refus,etiln'acceptepascettesituation... Lesystmedefichierdesunixlikeestunearborescencehirarchiqueenformed'arbreinversavec uneseuleetuniqueracine(root),maisopeuventsegrefferd'autresarborescences,d'autressystmes defichiers,locauxoudistants,etcorrespondantdenombreuxtypesdesupportdestockage. Lesuperutilisateuroul'administrateurdusystme(l'utilisateurroot)possdetouslesdroitsettous lesprivilgessurtoutlesystme.L'utilisateurrootestresponsabledusystme,delamaintenance,de ladisponibilit,delaperformanceetdesonvolution.

LaConsolePatrickHautrive!;~)2010

Lemultitche GnuLinuxestunsystmemultitches(multithreading),c'estdirequ'ilestconupourfairetourner indpendammentplusieursprogrammesenmmetemps(multitasking).C'estgalementunsystme multiutilisateurs, c'estdire qu'ilpeuttreutilissimultanmentparplusieurspersonnesenmme temps.L'utilisationduprocesseurou CPU (CentralProcessingUnit)estgreparunordonnanceur (sheduler). Le temps processeur, est divis en petites units rparties quitablement entre chaque programme(timesharing).C'estlarapiditdecalculquidonnel'illusiondelasimultanitl'chelle humaine. Unsystmemonotchen'excutequ'unseulprogrammelafois.Unsystmemultitchecollaboratif peutexcuterplusieursprogrammesenmmetemps,maisc'estchaqueprogrammequidcidequandil rend la main aux autres. Un systme multi tche premptif rpartit galitairement le temps processeurallouchaqueprogramme. Latopologiedessystmesd'exploitation Monotches: Multitchescollaboratifs: Multitchespremptifs: MSDOS Windows3.x,MacintoshOS7(multifinder) Unix *BSD Windows95(couche32bits) WindowsNT(mmoirenonprotge) MacintoshOSX GnuLinux

LaConsolePatrickHautrive!;~)2010

LINUX LaphilosophieUnix LesystmeGnuLinuxestun unixlike etsaconceptionestconformeauxcritresretenusparles fondateursd'Unixetilrpondauprincipedesparationdestraitements(instruction)etdesdonnes (data)deVonNeumann. Dansunsystmeunice,toutestfichier(stockorflow),touslesprocessussonttraits defaon galitaireparlemultitche(sheduler),touslesprocessussontindpendantslesunsdesautres,maisils peuventcommuniquerentreeux(I/O),touteslesapplicationssontconuesdanslemodeclientset serveurs,touslesprogrammessontcritsdansunlangageportable (portablelanguage)ettoutesles spcificationsdesprotocolessontclaires,disponiblesetuniverselles(tcpip).Touslesutilitaires(tools) remplissent une seule fonction, mais sont compatibles entre eux, ce qui permet l'enchainement complexedescommandes,aveclacirculationetlaredirectiondesentresetdessorties(pipeline).Les systmesunicessontdessystmesd'exploitationmultitchesetmultiutilisateurs,etsontconus pourdistinguernettementlesespaces desutilisateurs (userzone)etla mmoiredunoyau(kernel zone). Les systmes unices intgrent au niveau des fichiers la gestion des droits d'accs (permission). LesprincipesetlesvaleursprnsparlesacteursdelacommunautdesLogicielsLibressontlalibert etlaresponsabilit,lasimplicitetl'efficacit.Issuducourantdela cyberntique aprslaseconde guerremondiale,letraitementautomatiquedel'informationreposesurla numrisation (codageen unitbinaire,unouzro)etsurla systmatisation desprocdures(lavitessedelalumire).La conceptiondessystmesunicestaitaudpartimprgnedecettephilosophie,avantquelesapptits commerciauxn'altrentlastratgied'ouverture. Le mondenumrique estunenouvelle TerraIncognita etlesacteursdelascnedulibreont consciencedecesenjeux,etaffirmentleurvolontd'yparticiperetd'ydfendrelalibertnumrique. Allisfile Justforfun Freeasfreedom Youcandoityourself Onefunction,oneprogram Small,simpleandbeautiful Doithere,doiteverywhere

LaConsolePatrickHautrive!;~)2010

Lacommunautdulibre GnuLinuxestlefruitd'unecollaborationdeplusieursmilliersdevolontairestraverslemonde,allant de l'expert aficionados, du passionn au nophyte. Cette communaut internationale multi culturellecommuniqueparInternet.Chacunmetencommungratuitementsaproductionpourlebien duplusgrandnombre.GnuLinuxestunLogicielLibre. LesLogicielsLibresreprsententunmodledecroissanceconomiquealternatifquisecaractrisepar une trs forte indpendance, un gout prononc pour l'lgance du code et le raffinement des algorithmes,etunediversitprolifique,voirechaotique.Paressence dmocratique et pratique,un bonprogrammeestrapidementadoptetamliorparlacommunaut.L'accsl'informationestla basedelalibertetdelaresponsabilitindividuelle. Les hackers sont considrs comme des virtuoses par leurs pairs (valuation des comptences techniques)etcommedespiratesanarchiques(projectiond'intentionsmalveillantes)parlesmasses mdia avides de sensationnel et de messages caricaturaux. Pourtant, s'il existe rellement une communautinternationaledanslemonded'aujourd'hui,c'estcelledesacteursdulibre. LacommunautdesLogicielsLibresafaitl'objetd'tudesociologique,voireanthropologique.Des similitudesetdespointsdecomparaisonseretrouventdanslessocitstribalesausensethnologique. Parexemple,l'influenceextrieureestfaible,ilestncessairedefairepartiedugroupepouravoirson motdire.C'estenparticipantqu'unindividufaitpartidugroupeetdevientreconnuparsespairs.Ily auraitpeuttrecommeunechevaleriedesLogicielsLibres,etl'effervescencedesactivitssurle rsauInternetn'estpeuttrequelerefletdenotrehumanit... LamorphologiesociologiquedelacommunautdesLogicielsLibres Unroyaume : Desterritoires : Deshros : Desacteurs : Unlangage : Desvaleurs : Uneculture : Unfolklore : Unmythe : Desrgles : Desflaux : Internet,levirtuel,labandepassante,letempsprocesseur,lecryptage Lessitescommunautaires,lesNews,lescanauxIrc,lesMailingListes RichardM.Stallman,LinusTorvalds, Leshackers,crackers,gurus,geeks,scriptkiddies,newbies,avatars Lejargon,lescodes,lescommunicationsasynchrones,lesscripts Lalibert,lepartage,latransparence,l'lganceducode,l'anonymat Lasciencefiction,lesvoyagesinterstellaires,lesjeuxderle,lessushis Lesblogs,lesCMS,lesabrviations(IMHO,RTFM),lessmileys;) Lasocitgalitaireetfuturistedel'information,lepouvoirdesmasses LalicenceGnuGPL,L'thiquedesHackers,l'autoritdelaFSF Lesspam,virus,logicalbomb,popup,hoax,exploits,flames,trolls

LaConsolePatrickHautrive!;~)2010

SOURCE Lecodesource Lecodesourceestlamatired'unprogrammeuretlersultatdesontravail.Lecodesourceestun texteordonnquirassemblelesinstructionscritesparl'informaticienprogrammeur.Cetexteestcrit dansunlangagedeprogrammationcomprhensibleparuntrehumain.Cetexteseratransformpour devenirutilisableparunordinateur. Le code source est la transcription lisible et oprationnel d'un algorithme (une suite squentielle d'instructionslogiquespermettantd'obtenirunrsultatcertainpartird'hypothsesconnues).L'accs aucodesourcepermetdecontrlerlaqualitd'unprogramme,etlacapacitdeletransformerconduit son amlioration. L'laboration de l'algorithme et sa transcription en code source sont rgies par l'imagination,laconceptionetlarflexionhumaine,touteslesautresphases,dontlacompilationdu codesource,sontaccompliespardestraitementsautomatiquesprogrammspourlamachine. Lelangagemachine Lecodesourceesttraduiten langagemachine parunoutilquis'appleun compilateur afintre excutparunordinateur.Lecompilateurutilis(gnuGCC)dpenddulangagedeprogrammation utilis(langageC)etdel'architectureduprocesseurpourlequelilestdestin(processeurIntel32bits parexemple).Cetteoprationdetransformationdulangagedeprogrammationenlangagemachine s'applelacompilation. Ainsi,l'algorithme(l'ide)setransformepetitpetit,toutd'abordenprogrammesource(letextecrit dansunlangagedeprogrammation),puisenprogrammecompil(unesuited'instructionscritesdans un langage machine), puis en excutable (avec le droit d'excution x attribu au fichier), et en commande(quandl'utilisateurlanceleprogramme,endoublecliquantsuruneicne,ouenvalidantla lignedecommandesaisiedansuninterprteurdecommande),ensuiteenprocessus(quirassemblent lesinstructionsdecode,etquisontgres,enmmoire,parl'ordonnanceurdusystmed'exploitation), etenfinenbinaire(unesuitedebits,abrviationdel'anglaisbinarydigit,reprsentspardeszros,et desunsetquitraverserontlescircuitsd'unprocesseur). Lecycledevied'unprogramme(frommindtopapertodigit) Algorithme CodeSource Compilation Excutable Binaire Commande Processus Rsultat

LaConsolePatrickHautrive!;~)2010

LICENCE Lalicenceouverte La licence Gnu GPL est une licence dite ouverte parce qu'elle octroie l'utilisateur l'accs et la transformationducodesourced'unprogramme.Acontrario,leslicencesdtesfermesn'autorisentque l'utilisationduprogrammecompil(traduitetcompactenlangagemachineetillisiblepouruntre humain). Leslicencesditesfermesnepermettentpasdesavoircequefaitrellementunprogramme,etne permettentaucunemodification.Ceslicencesditesfermesimposentunsecretobscur,tandisqueles licencesditesouvertesproposentuneclairefranchise.Leslicencesditesfermesneprotgentqueles intrtsdesditeurs,etcellesciinstaurentunedpendancedel'utilisateurvisvisdesonfournisseur. L'diteurcontrleainsiindirectementl'utilisationdesonproduitetlesbesoinsdesaclientle.Ildispose deplusd'unmoyendepressionfinancierparlamcanismedefacturationlilaventedeslicences. Enfin,lesformatsdefichierspropritairesdontlesspcificationssontabusivementcachesetsouvent arbitrairementmodifis(pourcontraindrel'achatdesnouvelleslicences)entraventlacirculationetla duredeviedel'information. Lalibertnumrique LesystmeGnuLinuxestunlogicielquipeuttrelibrementetgratuitementtlchargdepuisInternet, soitsouslaformed'unearchivesource,soitsouslaformed'unearchivecompile.LesystmeGnu Linuxestlivrsouslaprotectionjuridiqueinternationaled'unelicenced'utilisation,la licenceGnu GPLdelaFSF(FreeSoftwareFoundation). RichardM.StallmanaffirmequelesLogicielsLibresdfendentlesprincipesdelibert,d'galitetde fraternit. Les Droits de l'Homme Numriques (homo digitalus) pour tous sans distinction, sans conditionetsanslimitation. Lesquatreliberts LalicenceGnuGPL(GeneralPublicLicence)estunelicencedteslibrequiprotgeetgarantieles droits lgitimes des utilisateurs. Ces droits sont formaliss dans l'expression de quatre liberts numriques fondamentales. Ces quatre liberts sont indissociables et permettent d'identifier, de qualifieretdeprenniserunprogrammedtlibre. Ilexistedenombreuseslicencesdteslibresquidiffrentlesunesdesautres,maistoutessatisfont cesquatreliberts,cequipermetenautresderendre compatible leslignesdecode,d'intgrerles projetslesunsauxautres,etdemutualiserainsiletravaildechacundansladure.
LaConsolePatrickHautrive!;~)2010

LesquatrelibertsdelalicenceGnuGPL Lalibertd'explorerlecodesource Lalibertd'adapterlecodesource Lalibertd'excuterlecodesource Lalibertdeconservercesliberts Lapositionstratgique Toutd'abord,unecertitude,sansLogicielsLibres,iln'yauraitpasd'Internet.Statistiquement,lenoyau GnuLinuxreprsentaitenl'an2000unepositionstratgiquedanslemondedel'industrieinformatique. LapositionstratgiquedeGnuLinuxdanslemonde 30Millionsdelignedecode 30annesderechercheetdveloppement Plusde8000heuresdetravailpourunevaleurestime1milliarddedollars 10millionsd'utilisateursetdesmilliersdecontributeursofficielsdanslemonde 2%dumarchmondialdesordinateurset70%desserveursInternet L'acronymercursifGnu Gnu est un acronyme rcursif signifiant Gnu is Not Unix en opposition aux pratiques propritairesetmercantilistesdessystmesUnix.Lesystmed'exploitationGnuLinuxestconstitu dunoyauLinuxetdesoutilsGnu. Une distributionGnuLinux estunedistributionentirementcompatibleaveclalicenceGnuGPL, c'estdire quetouslesoutils,touslesprogrammesettouslespilotessontlibres.Parexemple,la distributionDebiandfendunepositionpure,etalarputationd'tre100%Gnuet100%libre. LesdistributionsLinux Unedistributionestunensembleregroupantunnoyau(quipeuttrepatch,c'estdiremodifipour les besoins de la distribution), les outils Gnu (Gnu tools) et les outils propres la distribution, l'installeur (installer), une slection de Logiciels Libres (applications) et un gestionnaire pour l'installation,lamisejouretladsinstallationdesprogrammes(packagemanager). Unedistributionestuneslectiondeprogrammes(packages)dontlebutestdeprsenterunensemble cohrentetdirectementoprationnel.Cespackagespeuventfairel'objetd'unecommercialisationen magasinouparl'intermdiairedesocitquivendentleurpersonnalisation,leursavoirfaire,etles servicesdemaintenance. (read) (write) (execute) (sticky)

LaConsolePatrickHautrive!;~)2010

10

Les distributions Linux ne sont pas toutes intgralement compatibles avec la licence Gnu GPL. Souvent,lesgrandesdistributionsintgrentgalementdesoutilsdeconfiguration(configurationtools) oudespilotesbinairespropritaires(privatebinarydrivers). LesdistributionsGnuLinux GnuLinux LesoutilsGnu Les outils, les utilitaires et les commandes Gnu sont nombreux parce qu'ils sont dvelopps individuellementpourrempliruneseulefonction.Grceaumcanismederedirection(redirection)des entres(STDIN)etdessorties (STDOUT&STDERR)d'unprocessus (process),lescommandes peuventtreenchaineslesunes aprslesautres,l'unereprenantlesrsultatsdelaprcdente.Ces trainsdecommandesconstituentdslorsdestraitementscomplexes. Parexemple,l'interprteurdecommandeBash quicontientdes commandes internes(builtin) et qui permetdelancerdes scriptsexcutables (scripts),lecompilateurGCCoul'diteurEMACSsontdes outilsGnudistribussouslicenceGnuGPL.Leslibrairiesdynamiquesoupartages(sharedlibraries) fontgalementpartiesintgrantesd'unsystmeGnuLinuxdebase. Lesoutilssontclasssendeux catgories.Ilyalesoutilsutilisablesparl'ensembledesutilisateurs,etilyalesoutilsrservspour l'administrationdusystme(protgsparlemotdepasserootpours'enservir).Cesdeuxcatgories d'outilssontinstallesgnralementdansdesrpertoiresdiffrents. L'emplacementdesoutilsGnu Pourlesutilisateurs Pourlesuperutilisateur Pourlesprogrammes /bin/* /sbin/* /lib/* /usr/bin/* /usr/sbin/* /usr/lib/* /usr/local* /boot/* $HOME/bin/* /root/* = Kernel+Modules+Pilotes+Tools+Shell+XServer+Softwares

Lesavantagesdelatransparence Lesavantagesdelatransparencevontaudeldelasimplecuriosit.Lesquatrelibertsnumriques d'accsaucodesourceontdesconsquencespratiquesquitendentversl'indpendanceetl'efficacitdu traitementdel'information. Aprs les phases de conception et de lancement les nouveaux projets libres aboutissent des programmesquisontpluslisibles,plustudis,pluscritiqusetplusremisenquestion.Lalibert laisselibrecourtl'imaginationdechacun,etl'mulationfavoriselarecherchedelaperfection.Enfin decompte,lesprogrammeslibressontplusdiversifisetplusperformants.

LaConsolePatrickHautrive!;~)2010

11

Ce sont toutes ces qualits induites par les quatre liberts numriques fondamentales qui sont intressantespourtouslesutilisateursd'ordinateuretd'Internet.Deplus,lesacteursquicontribuentse sententresponsablesdesprogrammesqu'ilslaborent,etlesuivi(updates)etlacorrectiondeserreurs (bugs)sontdefaitbeaucoupplusrapidesetprcisquedanslemondefermetpropritaireochacunes desactionsestgouvernesparlecritredelarentabilitimmdiate(objectifdemaximisationdes profits). Lesavantagesdelalibertetdelatransparence Complet Propre Robuste Vrifiable volutif Indpendant Modulaire Puissant Normalis Rapide Scuris Ractif Portable Souple

LaConsolePatrickHautrive!;~)2010

12

SYSTEM L'interfacesystme LesystmeGnuLinuxestunlogicielquiapourfonction defairel'interface entrel'utilisateuret l'ordinateur.L'ordinateurestconstitudel'unitcentrale,despriphriquesetdelogiciels.Unsystme d'exploitationouOS(OperatingSystem)estunprogrammed'instructioninformatiquepermettantaux personnels (user) de configurer et de piloter le matriel (hardware), les quipements rseaux (middleware)etleslogiciels(software).LesystmeGnuLinuxestunsystmed'exploitationrseau (network) multi tches (multi thread) compatible avec de multiples architectures processeurs (architectures)etconviviale(userfriendly). L'IHM (Interface Homme Machine) tend vers l'ergonomie, la transparence, la convivialit et l'automatisation. Les interfaces doivent tre tailles humaines. La formulation des messages du systmeetleschoixproposspourlaconfigurationdoiventtrecomprhensibles parunindividu moyenetquin'estpasinformaticien. L'utilisateurdevraitpouvoirseservird'unordinateurgrcesaseuleintuition.C'estlamachinedese mettrelaportedel'trehumain,etnonl'inverse.L'ordinateurestunoutilauservicedel'utilisateur. Lerledelamachineestdelibrerdutempspourlacrativit,nond'asservirleshommesdansles mandresindigestesetlestortueuxlabyrinthesdelamalhonntetetdel'incomptence. L'interfaceentrel'hommeetlamachine User XServer OperatingSystem Shell Software Hardware Middleware

L'onparleindiffremmentdeprogramme,d'applicationoudelogiciel.Quandils'agitd'uneapplication professionnellepropreuncorpsdemtierspcifique,l'onemploieletermedeprogiciel.Lesystme d'exploitation est un programme particulier, en cela qu'il a pour fonction de faire l'interface entre l'utilisateur,lesapplications,lesmatrielsconstituantsl'unitcentrale,lespriphriquesetlerseau. Leszonesdetravail Lammoiredetravailou RAM (RandomAccessMemory) estscindeendeuxzonesdistinctes,la zonerserveauxactivits dunoyau(KernelZone),etles zones rservespourles activits des programmes lancs par les utilisateurs (User Zone). Chaque programme est identifi (id) par l'utilisateurquil'alanc.

LaConsolePatrickHautrive!;~)2010

13

Lamultiplicitdutraitement Lamultiplicittaitl'undesobjectifsprincipauxlorsdelaconceptiond'unsystmed'exploitationmulti tches.Afindetraiterplusieursrequtessimultanment,chacunedevaienttreconupartirdecritres d'indpendance, et la gestion de la multitude de ces requtes impliquait un quilibre dans la rpartitiondesressourcesetletraitementdesinstructions. Savoirfaireunechosebienconduitpouvoirfairepleindechoses. Freeforthemany Lamultiplicit,l'indpendanceetl'quilibredestraitements Multitches I/O,ordonnancement,sheduler,processus,modepremptif,priorit,threads Multiutilisateurs 16bits=65535login,password,quota,nice,crontab Multiprocesseurs Core,SMP,Cluster,Grid Multiplateformes Intel ix86 compatible IBM PC, Pentium, AMD, PowerPC, 68000 Motorola, SPARC,ALPHA,Itanium64bits,ARM,MIPS,IBMS/390,SuperH C,C++,Assembler,Basic,Pascal,Delphi,Fortran,Php,HTML,Java,SQL,Tcl Multilangages tk,Perl,Python,Lisp,Ada,Calm,Shell Multiprotocoles TCPIP,FTP, HTTP, TELNET,SSH,SMB,NFS,DNS,DHCP,PPP, ADSL, POP,IMAP,SMTP,CVS,IRC,NEWS,JABBER,PEARtoPEAR Ext, Ext2, ext3, Reiserfs, NFS, Proc, Devfs, MSDOS, VFAT, NTFS, HPFS, Multifichiers RAID,LVM,ISO9660,Joliet serveurinternet,routage,filtrage,parefeu,hautedisponibilit,tempsrel,station Multiusages bureautique, poste ludique, jeux rseaux, lectronique embarqu, domotique, appareillectromnager,calculscientifique,effetsspciauxcinmatographiques, dcryptage,encodage,mixage,modelage Lesspcificationsdunoyau LesspcificationsdunoyauGnuLinux(kernel)sontmultiplesetparmilesmeilleursdumarchetde l'tatdel'art.Lescaractristiquesdelaconceptionetdudveloppementlibreetprotgparlalicence GnuGPLparticipentdecetteexcellence.

LaConsolePatrickHautrive!;~)2010

14

LesspcificationsdunoyauGnuLinux Noyaumonolithiquemodulairecompilable Adressage32bitset64bits Allocationmmoireenmodeprotg Paginationvirtuelle(SWAP) StandardPOSIX,ANSIC,IEEE,OSI,IETF NormalisationinternationaleRFC(RequestForComment) ConventiondenommagedesfichiersdeconfigurationLSB(LinuxStandardBase)etASCII Conventiondelahirarchiedel'arborescenceFHS(FilesystemHierarchyStandard) ServeurgraphiquedportableXWINDOWduMIT(MassachusettsInstituteofTechnology) CompatibleRAID5(RedundantArrayofInexpensiveDisks) PiledeprotocolerseauIPV4etIPV6 TraitementparallledestchesSMP(SymetricalMultipleProcessors) Processusasynchrone(background)etdtachable(nohup) Tempszro:1erjanvier197000h00GMT(GreenwichMeanTime) Lesversionsdunoyau Lesnumrosdeversiondunoyaucomportentplusieurschiffresquiindiquentlabranche(Major)etla phase(Minor)dedveloppement,maisaussilacorrectiondebug(Rvision)etletyped'architecture processeur(Arch). Lesnumrosdeversiondunoyau Kernelversion Stable Development(unstable) Exemple:2.6.105686 = = = = MAJOR + MINOR + + Pair(even) + + Impair(odd) + . 6 . REVISION + + + ARCH

1005

686

LesnumrosMajorsontespacsdeplusieursannesetreprsententdegrandesmodificationsdansla conception du noyau. Les numros Minor sont espacs de quelques mois ou quelques annes et reprsententdesavancesdanslesfonctionnalitsdunoyau.Cesavancessontdestapesdevalidation du travail collaboratif, les numros Minor pairs sont attribus aux versions dtes stables, et les numros Minor impairs sont attribus aux versions encore en dveloppement, c'estdire o les dysfonctionnementspeuventtreimportants,dufaitdelamiseaupoint. Lesversionsstablessontcellesquipeuventtreutilisesdansunenvironnementdeproduction.

LaConsolePatrickHautrive!;~)2010

15

Lalignedecommande L'interfacegraphique (graphicalinterface) n'estpasindispensablepourseservird'unsystmeGnu Linux.Quandunsystmeestddiuneutilisationbienprcise,commeunserveur,unrouteurouun parefeu,ilpeutmmetreplusjudicieuxdenepasinstallerleserveurgraphique,quioccuperaitdes ressourcesinutilement.L'administrationdusystmepassealorsparl'emploidelalignedecommande (commandline)etdesscriptsshell(bashscripts). Cemoded'utilisationestpresquelemmepourtouteslesdistributions.L'administrationenlignede commandeestunmoded'administrationuniversel,pourlesdiffrentesdistributionsGnuLinuxetentre lessystmesdelafamilleUnix.UnsystmeGnuLinuxpeuttrsbienfonctionneravecseulement quelquescentainesdeMgaOctetsdemmoireviveouRAM(RandomAccessMemory),etquelques GigaOctetsd'espacedestockagesurledisquedur(PermanentMemory). Pour une utilisation en poste de travail, l'interface graphique est bien sr indispensable pour le traitementetlavisualisationdesimagesoudesvidos,etdenombreuxoutilsdeconfigurationexistent pouradministrerlesystme.CesoutilsgraphiquessontconstruitssurlabasedescommandesGnu. Connaitrel'utilisationdelalignedecommandepermetdes'affranchirdel'interfacegraphiqueetdes spcificitsdechacunedesdistributions. Enoutre,laconnaissancedushell,delalignedecommande,desscriptsetdesfichiersdeconfiguration permetl'utilisateuravertinonseulementd'affinerleparamtrageetlesperformances(tuning),mais aussid'assurerefficacementlamaintenance(hotline).L'interprteurdecommande(shell)permetde piloter le noyau (kernel) et de lancer des outils (tools) et des programmes (binaries), et des excutables (scripts) en mode ligne de commande. Les outils rseaux (network) permettent d'administrerdistancesdesserveurs(remote). Lesmodesd'utilisation LesystmeGnuLinuxs'utiliseselonplusieursmodes.Lemoded'utilisationpeuttreslectiondansla phasededmarrageavecl'invite(prompt)duchargeurdedmarrage(loader),oupendantl'utilisation dusystmeaveclacommandeinitquipermetdechangerdeniveaud'initialisation(runlevel). Lesmodesd'utilisationdeGnuLinux(runlevel) Lemodemonoutilisateur Lemodesansinterfacerseau Lemodeavecinterfacerseau Lemodeenlignedecommande Lemodeavecinterfacegraphique Lesmodesconfigurablesparl'administrateur single standalone network terminal serveurX inittab

LaConsolePatrickHautrive!;~)2010

16

L'activitdusystme L'activitdusystmeestenregistredanslesfichiers journaux (log).Laprocdured'initialisationne drogepaslargle,ettouslesvnementssignificatifssontconsignsdansunfichier(journal). Pendantcettephased'initialisation,denombreusescommandesetscriptssontinvoqus.Unefoisle systmedmarr,denombreusescommandespermettentdeconnaitrel'tatdusystme,etdemodifier saconfiguration.L'initialisationdusystmeenmode monoutilisateur(single)lancelesystmepour desoprationsdemaintenanceaveclacommandesulogin(singleuserlogin)quiprsenteunshell pourlesuperutilisateur(root). Pendant toute la dure d'utilisation du systme, le systme de fichiers virtuels /proc permet de connaitre directementlesparamtresquisontutilissparlenoyau.Lerpertoire/procdonneune imagephotographiqueducontenudelammoirevive.Lesdonnesdurpertoire/procsontles donnesrellesetinstantanesdunoyau,etnesontcalculsqu'aumomentdel'affichage. Certainescommandessontdesoutilsstandards (tools) quifigurentdanstouteslesinstallationsGnu Linux.Cesoutils standardsportentparfoislemmenomquelesoutilsUnixpropritaires,mais porterlemme nomnesignifiepas treidentique, nifairelammechose.Ainsi,lecontenudes programmes et des scripts excutables (executables) peut diffrer selon les systmes unices, de mmelesoptionsdisponibles(options)nesontpastoujourslesmme.Parailleurs,denombreuxoutils sontspcifiquesladistributionpourlaquelleilsonttdvelopps. Lescommandessystmes Lescommandessystmespermettentd'interrogerlesystmepourconnaitresaconfiguration,ouobtenir desinformationssurlesfichiers,lesprocessus,lesservices,lamachine,lerseau,lescommandes,le systmedefichier,lespriphriques,lenoyauousurlesutilisateurs.Lescommandessystmesqui permettentdemodifierlaconfigurationdusystmenesontaccessiblesqu'aveclesdroits dusuper utilisateur(root).CescommandessontlesmmepourtouslessystmesUnixlike(unices).

LaConsolePatrickHautrive!;~)2010

17

Lescommandesdenavigationdansl'arborescence pwd ls cd vi cat less head tail cp ln mv rm mkdir rmdir chown chmod lynx eog xterm afficherlerpertoireencours(printworkingdirectory) listerlesfichiersdurpertoireencours(list) changerderpertoireencours(changedirectory) diterunfichiertexteenmodelignedecommande(visual) lirelecontenud'unfichier(concatenate) afficherunfichier(moreorless) afficherlespremireslignesd'unfichier afficherlesdernireslignesd'unfichier copierunfichier(copy) crerunliensymbolique(link) dplacerunfichieroulerenommer(move) supprimerunfichier(remove) crerunrpertoire(makedirectory) supprimerunrpertoire(removedirectory) changerl'appartenanced'unfichier(changeownership) changerlespermissionsd'unfichier(changemode) chargerunepageinternetenmodelignedecommande visualiseruneimage(eyeofgnome) lancerunterminalgraphique(xterminal) Lescommandesdegestiondescommandesetdesprocessus ps pstree top jobs bg fg nice strace time kill history alias exit logout reboot halt listerlesprocessusenactivit(process) afficherlahirarchiedesprocessusencours(processtree) afficherunrsumdel'activitdesprocessus(tableofprocess) afficherlesprocessusdel'utilisateurentchedefond(background) placerentachedefondleprocessusencours(background) placerenavantplanunprocessus(foreground) changerlaprioritd'unprocessus afficherlesappelssystmesd'unecommandepasseenparamtre(systemtrace) afficherl'utilisationdesressourcessystmesd'unecommande envoyerunmessageunprocessus afficherl'historiquedescommandes(bashbuiltin) afficherlesaliasencours sortird'unesessionshell fermeruneconnexionsurunterminalvirtuel redmarrerlesystmed'exploitation teindrelesystme

LaConsolePatrickHautrive!;~)2010

18

Lescommandesd'informationsurlesystme dmesg hostname arch hwclock date cal tzconfig locale loadkeys uptime uname runlevel init telinit grub chkconfig sysctl env chsh lirelesmessagessystmesdesyslogd(message) afficherlenomd'htedelamachine afficherl'architectureduprocesseur(architecture) afficherl'horlogedelacartemre(hardwareclock) afficherl'horlogedusystme afficheruncalendrier(calendar) afficherlazonegographiquedusystme(timezoneconfiguration) affichelalanguedusystme chargerunelanguepourlesystme afficherladured'utilisationdusystme afficherlesprincipauxparamtresdusystme(unixname) afficherleniveaud'initialisation changerleniveaud'excution changerdeniveaud'initialisation changerlaconfigurationduchargeurdedmarrage(grandunifiedbootmanager) configurerlesservicesdesniveauxd'initialisation(checkconfiguration) modifierlesparamtresdunoyauchaud(systemcontrol) affichelesvariablesd'environnementdushell(environment) changerleshell(changeshell) Lescommandesd'informationsurlesutilisateursetlesgroupes id logname last lastlog finger who su passwd usermod chage useradd groups groupadd groupmod sg chgrp afficherl'identitdel'utilisateurencours(identity) afficherlenomdel'utilisateurencours(loginname) listerlesderniresconnexionsdesutilisateurs listerladernireconnexiondetouslesutilisateurs(lastlogin) listerlesinformationssurlesutilisateursconnects listerlesutilisateursconnects changerdecompteutilisateur(switchuser) changerlemotdepassedans/etc/passwdou/etc/shadow(password) modifierlesparamtresdecompted'unutilisateur(usermodification) changerlesinformationsd'gesdesmotsdepasse(changeage) ajouterunnouvelutilisateur afficherlesgroupesdel'utilisateur ajouterungroupedans/etc/group modifierlenometleGIDd'ungroupe changerdegroupeprincipal(switchgroup) changerlegroupepropritaired'unoudeplusieursfichiers

LaConsolePatrickHautrive!;~)2010

19

Lescommandesd'informationsurlesfichiers man info apropos locate whereis find file ulimit umask stat lsof lsattr chattr hd shred rpm dpkg aptcache aptadd aptget lp lpq cups afficherl'aideenlignesurlescommandes(manual) afficherl'aideenlignecompltesurlescommandes(information) afficherlesinformationsproposdunomdelacommandepassenparamtre afficherlescheminsdesfichierscorrespondantsaumotifpassenparamtre afficherlecheminabsolud'unecommande rechercherunfichierdansl'arborescence afficherletypedefichierpassenparamtregrceaumagicnumber afficherleslimitesquantitativesd'utilisation(bashbuiltin) afficherlemasquedespermissionspourlesnouveauxfichiers(bashbuiltin) afficherlesstatutsdesfichiersoudusystmedefichiers(status) listerlesfichiersouverts(listopenfiles) listerlesattributsdesfichiers(listattributes) changerlesattributsd'unfichier(changeattributs) afficherlecontenud'unfichierbinaire(hexadump) supprimerdfinitivementlecontenud'unfichier grerlespackagesauformatrpm(redhatpackagemanager) grerlespackagesauformatdeb(debianpackagemanager) interrogerlabasededonnesdespackagesdebian ajouterunesourcedepackagesDebiandans/etc/apt/sources.list installeretdsinstallerlespackagesdebian(advancedpackettool) envoyerunfichierl'impression(lineprinter) grerlafiled'attented'uneimprimante(lineprinterqueue) grerlesystmed'impression(commonunixprintingsystem)

LaConsolePatrickHautrive!;~)2010

20

Lescommandesdemanipulationdesfichiers cat less vi find grep diff uniq sort wc nl patch awk sed tr cut col groff expand unexpand lirelecontenud'unfichier(concatenate) afficherunfichier diterunfichiertexte(visual) rechercherunfichierdansl'arborescence slectionnerdeslignesquicontiennentuneoccurrencedansunfichier comparerlignelignedeuxfichiers(difference) carterlesdoublonsl'intrieurd'uneliste classerdeslistesdelignesdansunordrealphanumrique compterleslignes,lesmotsoulescaractres(wordcount) numroterleslignesd'unfichier(numberedline) insrerdesmisesjourdansunfichier manipuleretformaterdesexpressionsavecunlangagedeprogrammation d'extraireouderemplacerdesmotifsunfluxdetexte(streameditor) traduireuncaractre,leremplacerparunautreoul'effacer(translate) slectionnerunecolonnedansuneligneenfonctiond'unsparateurconnu renverserl'ordred'unflux formaterunfluxdesortie convertirlestabulationsenespace convertirlesespacesentabulation Lescommandesdegestiondurseau ifconfig route ping host exports ssh rsync wget ftp tcpdump inetd2xinetd nmap netstat nslookup iwconfig traceroute dig afficheretmodifierlaconfigurationdesinterfacesrseaux(networkinterface) afficherlatablederoutagedunoyau(routingtable) demanderunerponsedelapartd'unhtesurlemmerseau(protocolicmp) interrogerunserveurdenomsdedomaineouDNS(DomainNameService) partagerunsystmedefichierssurunrseauNFS(NetworkFileSystem) demanderuneconnexiondistantescuriseunserveur(secureshell) copierdesfichiersenmodescurissurunautreserveur(remotesynchronisation) tlchargerdesfichiersdepuisinternet(webget) demanderuneconnexionpourtransfrerdesfichiers(filetransferprotocol) afficherlespaquetstcppassantsurlerseau changerdesuperserveurinternet(tcpwrapper) scannerlesportsouvertsd'unserveur(networkmapper) afficherlesinformationssurlerseau(netstatistics) interrogerlesserveursdenomdedomaine(nameserverlookup) configureruneinterfacerseausansfils(wificonfiguration) afficherlecheminparcouru(hops)pardespaquetsversunserveur(timetolive) interrogerlesserveursdenomdedomaine(domaininformationgroper)

LaConsolePatrickHautrive!;~)2010

21

Lescommandesdegestiondusystmedefichiers rdev mount umount fdisk fsck mkfs tune2fs hdparm df du sync afficherlapartitionracinedusystmedefichier(rootdevice) afficherlessystmesdefichierquisontmontsdansl'arborescenceprincipale dmonterlessystmesdefichierquisontmonts afficherlatabledespartitionsd'unpriphriquepassenparamtre vrifierlesystmedefichier(filesystemcheck) crerunsystmedefichiersurunepartition(makefilesystem) ajusterlesparamtresd'unsystmedefichiersext2(tunefilesystem) paramtrerlagomtried'undisque(harddiskparameters) afficherl'occupationdel'espacedestockage(diskfree) afficherlatailledesfichiers(diskusage) forcerl'crituredestamponssurledisque(synchronisation) Lescommandesd'informationsurlematriel free vmstat lspci lsusb lsmod insmod modprobe tty stty setleds kbdrate eject afficherl'occupationdelammoire,delapartitiondeswapetdescaches afficherlesstatistiquesdelapagination(virtualstatistics) listerleschipsetsbranchsaubusPCIdelacartemre(listpci) listerlespriphriquesUSB(listusb) listerlesmodules(listmodules) chargerdesmodules(insertmodules) installeroudsinstallerdesmodulesdanslenoyau(modulesprobe) affichelechemindupriphriquepourleterminalencours(terminaltype) affichelescapacitsduterminalencours(settingterminal) afficherlaconfigurationdeslumiresduclavier(settingleds) affichelarapiditdetransmissiondescodesduclavier(keyboardrate) ouvrirletiroird'unlecteurdecdrom

LaConsolePatrickHautrive!;~)2010

22

Lesappelssystmes Lesappelssystmes(systemcalls)dunoyausontlesfonctionsquiremplissenttouteslestches l'intrieurdusystmed'exploitation.Lacommandestracepermetdesuivrelesappelssystmesd'un programme. Lesappelssystmes exec() fork() read() write() wait() return() open() listen() receive() send()

LaConsolePatrickHautrive!;~)2010

23

DESKTOP L'interfacegraphique L'interface graphique n'est pas indispensable pour se servir d'un systme Gnu Linux. L'interface graphiquen'estgnralementpasinstalledanslecadred'unsystmeddil'usaged'uneapplication serveur. Une interface graphique se compose de plusieurs lments et fonctionne en mode client serveur.Leserveurgraphiques'occupedel'affichagedesfentresdesclientssurl'cran.Lesclients graphiquessonttouteslesapplicationsdveloppesseloncemode. Unenvironnementgraphiquecompletestconstituduserveur(/usr/X11R6/bin/X),d'ungestionnairede sessionpourlaconnexiondesutilisateurs(login manager),d'ungestionnairedefentres(window manager)pourgrerlepointeurdelasourisetleplacementdesfentresactives,d'ungestionnaire d'affichage(displaymanager)pourpersonnaliseretuniformisertousleslmentsdubureausousune mmechartegraphique,commelescouleurs,latailleetl'aspectdesfentres,desboutons,desicnes, desbarres,desascenseursetdesautresmenus,etenfind'applicationsclientesquiserontplusoumoins intgresaubureau(desktop). L'interfacegraphique GraphicalEnvironment Lesbureauxintgrs LesdeuxprincipauxenvironnementsdetravailgraphiquessontGnomeetKDE.Cesdeuxbureaux n'utilisentpaslesmmes bibliothquesgraphiques.Lebureaude Gnome emploi GTK quiat distribusouslicencelibredsledpart,tandisqueKDEsesertdeQTquitaitpropritaireetquiest devenulibreparlasuite. Cesdeuxenvironnementsgrentlebureau,lesicnes,lesmenus,etilsproposentchacundenombreux outilspropres.Ilfautenchoisirunselonsesgoutsetsesprfrences.Toutefois,unutilisateurde GnomepeuttrsbienseservirdesapplicationsdeKDE,etviceversa.Cesdeuxbureauxsontdes environnementsintgrs,etilsrequirentquelquescentainesdemgaoctetdemmoirevivepourun usagesouple.Lesautresinterfacesgraphiquessontbeaucouppluslgresetmoinsgourmandes. = XServer+Session+Window+Display+Desktop+XClients

LaConsolePatrickHautrive!;~)2010

24

Lesbureaux(Desktop) Lesenvironnementsgraphiquesintgrs LebureauGnome LebureauKDE Lesenvironnementsgraphiqueslgers Enlightenment BlackBox WindowMaker SawFish TWM LebureauGnome LebureauGnomeestunenvironnementgraphiqueintgretcomplet. LaconfigurationdubureauGnome man1gnome man8gnome gdm gdmchooser gnomewm gdmlogin gnomesession xsessionmanager default.session eog gconfigger gnomecontrolcenter gnomedesktopitemedit gnomedoc gnomepanel nautilus Bibliothquesgraphiques (GTK) (QT) AfterStep FluxBox FVWM

LaConsolePatrickHautrive!;~)2010

25

INFORMATION Lessourcesd'information Lessourcesd'informationetdetlchargementsontdisponiblesprincipalementsur Internet.L'ony trouveplthoredesources,etilfautsavoirchercher,trieretsemfier.Internetregorged'information qu'il est possible de retrouver avec un bon moteur de recherche, et une bonne syntaxe pour la formulationdelarequte.Lesdocumentations,lesimagesISO(prtlagravuresurCDROM)etles archives des programmes (fichier compact contenant le programme et sa documentation) sont abondammentdisponiblessurInternet. Leslibrairiesspcialisesetlesmagazinespermettentdes'informerdel'actualitdesLogicielsLibres. Les sites spcialiss dans Gnu Linux et les sites gnralistes comme Wikipdia prsentent de nombreuses informations accessibles avec un simple navigateur. Les serveurs USENET (news), l'abonnementauxlistesdediffusion(mailinglists),laparticipationauxblogs,lacollaborationdes sitesdepartagedecontenuCMS(ContentManagementSoftware),constituentdesmoyensoriginaux pourparticiperauxdbatsdelacommunautdesLogicielsLibres.Lescanaux(chanel)desserveurs IRC(InternetRelayChat)proposentquanteuxundialogueendirectoilestrecommanddefaire preuvedepolitesse(netiquette). Lorsd'untlchargement(download),ilestimportantdevrifierl'adresseetlanotoritdusitesource, afindes'assurerquelesprogrammessontbienlesoriginauxetqueletransfertdefichiers'estbien droul.LecalculdelasommeMD5permetaprsuntlchargementdecontrlerl'intgritdufichier (integrity).Lacommande md5sum permet degnrerunesomme identifiant unfichieretd'en vrifierl'intgritencomparantlersultatducalculavecl'empreintedufichier(fingerprint). LescartesdesLogicielsLibres LaLSM(LinuxSoftwareMap)prsenteunecartedesLogicielsLibresregroupsparfonctionnalit.Il n'existepasundomained'activitquinesoitpascouvertparlesLogicielsLibres.Delabureautiquela conception assiste par ordinateur, de l'administration rseau la conception graphique en trois dimensions,touteslesfonctionsquipeuventtrerempliesparunordinateur,peuventtreralises l'aidedeLogicielsLibres.LesLogicielsLibress'utilisentnativementsurunsystmeGnuLinux,mais de nombreuses applications populaires sont disponibles pour d'autres plateformes (Unix, Windows,MacOSX). UnecartedeLUG(LinuxUserGroup)enFranceprsentelesassociationsrgionalesdesutilisateurs de Gnu Linux. Ces associations proposent des runions d'information, des runions d'installation (installparties)etuneentraideprcieusepourlesdbutantsquisouhaitentprogresserrapidementdans l'apprentissagedeGnuLinux.
LaConsolePatrickHautrive!;~)2010

26

Ladocumentation Chaqueapplicationpeutprsentersadocumentation,etchaquedistributionpeutprsenterlesystme GnuLinux.Lespagesmanquis'affichentenlignedecommandesontlepremierendroitpourchercher l'usage d'une commande et de ses options. La commande man cmd dcrivent l'utilisation des programmesinstalls.Certainespagesmannesontplusmaintenuesquedansleformattexinfodela commandeinfocmd. La documentation HOWTO est une rfrence qui existe en de nombreuses langues et dans de nombreuxformat(TEXT,HTML,SGML,DOCBOOK,PDF,LATEX,...).LesFAQ(FrequentlyAsk Questions)etlesMETAFAQsontdebonspointsdedpartpourchercherunerponseunequestion.Il est d'usage de chercher soimme une rponse avant de demander de l'aide, et de lire le manuel d'instruction(RTFM).IlestfrquentdetrouversurInternetlarponsequel'oncherche,parcequ'il estrared'trelepremierseposerlaquestion. Lespagesman Les pages man sont gnralement installes en mme temps que le programme. Les pages man prsententunedescriptionsuccinctemaiscompltedel'utilisationd'unprogrammeainsiquetoutesses options.Lespagesmansonttoutesformatesselonlammestructureetprsentesdansunafficheur enlignedecommande.Ilexistedestraductionsdansdenombreuseslangues. Lesfichiersdespages mansontformatsetportentuneextensionparticulire(.mo) Leschapitresdespagesman NAME SYNOPSIS DESCRIPTION RETURN VALUE OVERVIEW DEFAULTS OPTIONS USAGEEXEMPLESFILESEXITSTATUSERRORHANDLINGERRORSENVIRONMENT DIAGNOSTICSHISTORYSECURITYCONFORMINGTOAUTHORREPORTINGNOTES BUGSCOPYRIGHTSEEALSO Lacommande man reprsentelasourced'information laplus directepourconnaitrel'utilisation d'unecommandeoud'unfichierdeconfiguration.Lacommandemans'emploiedansunterminal, etlespagesmansontgnralementautomatiquementinstalles avecleprogramme.Lacommande manmanpermetdeconnaitrel'utilisationdel'aideenligne,etlacommandemancmdpermetde connaitrel'utilisationdelacommandepasseenparamtre.LatoucheQduclavierpermetdequitter l'afficheur(quit)etdereveniraupromptdushell. Leprogrammexmanmontrel'arbredetouteslesmanpagedisponibles. Lacommandemankpatternpermetdefaireunerecherchedanslespagesmaninstallesselonun certainmotif(pattern),c'estl'quivalentdelacommandeapropos.

LaConsolePatrickHautrive!;~)2010

27

Lessectionsdespagesman Lespagesmansontclassesen9sections.Lessectionspermettentd'organiserlesdiffrentstypes d'information(commands,system,libraries,devices,formats,games,others,administrationand kernel).Lesdiffrentessectionssontclassesdansunordre.Lorsdulancementdelacommandeman, c'estlapremireoccurrencecorrespondantlarecherchequiestaffiche. L'ordrederecherchedecessectionspeuttreconfigur.Lenumrodelasectionafficheparlapage manestindiquenhautdel'afficheur(pager).Parexemple,lacommande man8passwd dsigne explicitementd'afficherlapagemandesmotsdepassedelahuitimesection.Lacommandemana cmdaffichetouteslessectionslesunesaprslesautres. Lessectionsdespagesman(manacmd) 1Commandes 2Systme 3Bibliothques 4Fichiersspciaux 5Formatdefichiers 6Jeux 7Autres 8Administration 9Noyau Laconfigurationdespagesman Laconfigurationdespagesmanestimmdiate,puisquelespagesmansontautomatiquementinstalles enmmetempsqueleprogrammeouquelepackage.Lespagesmansontreconstruitespartirde fichierscompresss,etellessontgnralementaffichesenanglais,moinsquelestraductionsn'aient tgalementinstalles. Lavariabled'environnement MANPATH renseignesurl'emplacementdespagesman.Lavariable MANSECT permetdepersonnaliserl'ordrederecherchedessectionsdespagesman.Desbasesde donnes(mandb,makewhatisetupdatedb)permettentd'acclrerlarecherched'information.

LaConsolePatrickHautrive!;~)2010

28

Ladocumentationenlignedecommande Commands man1man mank"" (apropos) manaintro mankman mankpasswd manfpasswd man7undocumented man7man man8passwd mankman manwman (path) xman mandb manpath catman lexgrog info makewhatis updatedb locate slocate apropos whatis whereis whois set export Files /usr/man/ /usr/local/man/ /usr/share/man/ /usr/doc/ /usr/share/doc/ /usr/src/linux/Documentations /var/log/message /etc/man.conf /etc/manpath.config /usr/share/mandb/chconfig /var/cache/man/index.db /etc/whois.conf /etc/apt/sources.list

Lescommandesd'information Larecherched'informationenlignedecommande catman makewhatis updatedb man1man man7man manaintro mankpattern manwman apropospattern whichcmd whatispattern whereiscmd locatecmd locale whoisuser infoinfo infocoreutils aptcachesearchdoc aptcacheshowpkg mancmd cmdhelp gnrel'indexdespagesman(mandb) construitl'indexpourlacommandewhatis scannel'arborescence,classeetenregistrelescheminspourlocate prsenteunedescriptiondespagesman prsenteleformatagedespagesmanavecl'outilgroff prsenteunedescriptiondel'utilisationdelalignedecommande effectueunerecherchedanslespagesmanselonlemotifdsign affichelecheminabsoluousetrouvelapagemandsigne affichetoutesleslignesdeSYNOPSISquicontiennentlemotif affichelecheminabsoludelacommande montrelessectionsdespagesmanquicorrespondentaumotif affichelesprincipauxcheminsabsolusquicontiennentlemotif affichetouslescheminsabsolusdel'arborescencequicontiennentlemotif. affichelesvaleurslocalespourlesvariablesd'environnementdelangage interrogeunannuairerseaupours'informersurlesnomsdesserveurs prsentel'utilisationdel'aideenligneTextinfo,complteetintgre prsentel'utilisationdescommandesdebasedeGnuLinux interrogelabasededonnesdespackagesDebian afficheladescriptiondupackageoudel'archivesousDebian affichelapagemand'unecommande afficheunrsumdeprincipaleoptiond'unecommande

LaConsolePatrickHautrive!;~)2010

29

Lesexemples del'aideenligne echo$MANPATH exportMANPATH=/usr/man:/usr/local/man exportMANSECT=2:3:1:5:4:6:7:8:n:9 setenvMANPATH/usr/man/usr/local/man manman|less whatisprintf man3printf manaintro;manwhatis infoinfo|colb>info.txt infoless;whereisgcc manwman /usr/share/man/fr/man1/man.1.gz manaman mandman manh;manhelp whichls;whereisbash;locateapache LadocumentationDebian LadistributionDebianproposedenombreusesdocumentationsettraductionssursonsitedebian.org. LesCDROMd'installationetlesmiroirsdepackages(mirrors)contiennentgalementunflorilgede documentationsquel'onpeutinstallersurunsystmeGnuLinux.Lacommande aptcachesearch doc rpertorielespackagesdedocumentations (dontladescription comportelemotifdoc).La commandeaptcacheshowarchiveexplicitel'utilisationduprogrammeoudel'archivedonneen argument. LadocumentationDebian(debian.org) docdebian doclinuxtext doclinuxhtml docdebianfr doclinuxfrtext debianinstallermanual debianreferencecommon debianreferenceen debianpolicy debianhistory ubuntudocs ubuntuquickguide docbase manpagesfr manpagesdev infolinuxinfo texinfo juniordocnewbiedoc bashdoc linuxdoc debiandocsgml debmake dwww doxygen docbookutils dhelp docbookdefguide doc++ docgnomehig doccentral usermodelinuxdoc sysadminguide maintguide binutilsdoc bug developersreference hardenenvironment hardentools hardenclients hardendoc

LaConsolePatrickHautrive!;~)2010

30

Lessitesdedocumentation Documentation pathname.com linuxdoc.org fr.tldp.org audamooka.org metalab.unc.edu abcdrfc.free.fr rfc.editor.org gnulinux.com Lessitesd'information GeneralInformation Wikipdia Google GoogleGroups Howto UsenetNews IRC Gopher InfoSheet MetaFaq fr.wikipedia.org google.com/linux groups.google.com freenix.fr fr.comp.os.linux.* irc.freenode.net gopher.ens.fr eu.undernet.org faq.org Organisation w3c.org gnu.org fsf.org aful.org cnil.fr internic.net nic.fr april.org Association orbis.yale.edu net.guru.com ploug.eu.org Guide framasoft.net traduc.org tutoriel.com commentcamarche.net linuxfromscratch.org formatsouverts.org freestandards.org linuxbase.org Help counter.li.org lealinux.org minet.net linuxcare.com ldh.datapower.com fr.lolix.org savannah.gnu.org missioncriticallinux.com News toolinux.com theregister.co.uk linuxhq.com sans.org linuxsecurity.com root66.net

Lessitesdetlchargement Download ftp.lip6.fr kernel.org www.tucows.com linuxiso.org distrowatch.com slashdot.org freshmeat.net Paquetage rpmfind.net sourceforge.net blackdown.org rpm.org linuxapps.com plf.zarb.com rootlinux.org Distribution debian.org ubuntu.org demolinux.org yellowdoglinux.com slackware.com redhat.com suze.com CdromLive Tomsrtbt Knoppix Gnuwin CDRescue Shynux Gentoo Slax Dlx Dsl Floppyfw Router Bitdefender Sme Trustx

LaConsolePatrickHautrive!;~)2010

31

SOCIETY Lesproductionsintellectuelles Laproductiondedonnesintellectuellesestgnralementrglementeparlesdroitsd'auteur.Les lgislations dpendentdechaquepays.A l'origine, l'objectif des droits d'auteurestdegarantir un revenuauxauteurs(artistes,peintres,crivains,compositeurs,dcouvreurs,inventeurs,...).Leslogiciels sontdesproductionsintellectuelles quifontpartiesdesactivitsdeservicedu secteurtertiaire de l'conomie.Lemodededistributiond'uneproductionintellectuelledpendduchoixdesonauteur. Beaucoup d'artistes dans l'histoire culturelle des civilisations occidentales ont dplors les consquencescatastrophiquesdescontraintesfinanciresquileurtaientimposesdansl'exercicede leurtalent. LesauteursdeLogicielsLibresconsententlibrementdedistribuerleurcodesourcesouslalicenceGnu GPL.Ilsfontainsipartiedefaitde lacommunautdescontributeurs,etprofitentgalementdela miseencommundecesressources,soitdanslecadred'uneutilisation professionnelle (etlleurs comptencessontrmunres),soitdanslecadred'uneutilisationprive. Ladistributiongratuite LesLogicielsLibressontgnralementd'accsgratuit,ilsuffitdelestlchargersurinternet,sans contreveniraurespect,nidelalicenceGnuGPL,nideslois.Aucontraire,l'espritdesLogicielsLibres et la communaut des contributeurs encouragent la copie et la distribution de leurs programmes. Toutefois,aucunerestrictionn'eststipulequandlavente,etcertainesdistributionscommercialisent lesmodificationsqu'ellesapportentauxprogrammesenmmetempsqueleurscomptencestechniques etleurserviceaprsvente.LalicenceGnuGPLestspcifiqueetsedistinguedesautrestypesde distributionparl'accsaucodesource. Legratuiciel(freeware)estunmodededistributiongratuit,maisquinegarantiepasncessairement l'accs au code source. Le partagiciel (shareware) est un mode de distribution participatif. Les programmes sont distribus gratuitement, et une faible participation financire est demande postriori.Laussi,iln'yaaucunegarantiesurl'accsaucodesource. Le DomainePublic estunmodededistributionlibre.C'estunstatutparticulierquiconcerneles uvres intellectuelles d'un certain age. En France, les uvres sont protges par le droit d'auteur pendantles70premiresannes,ensuite,ellestombentdansledomainepublic,cequipermettous d'enavoirl'usagelibrement etrespectueusement (lesmodifications caricaturales sontinterdites par exemple).

LaConsolePatrickHautrive!;~)2010

32

Lemodededistribution Le choix d'un mode de distribution est stratgique pour une uvre. La licence qui rglement la distributionetl'utilisationd'uneproductionintellectuelledterminel'universdanslequelellevavoluer (son mode de vie, son aura, et son entourage) et anticipe sur son cycle de vie et sa capacit d'intgrationoudemixitavecsonenvironnement.Decechoixdcouleles contraintesjuridiques, lesintentionsdesintervenants,lesperspectivescommerciales. Parexemple,lecodesourceduserveurgraphiqueXfreeatrefermpardessocitscommerciales, c'estpourquoi,lacommunaut aragie enlanantleprojet Xorg quidsormais quipetoutes les distributionsdeGnuLinux.LeformatMP3estunformatpropritairedontlesdroitsappartiennent Thompson Multimdia, et cette socit a fait valoir ses droits pour toucher des royalties sur les quipementspermettantdelireceformat. LalicenceBSDestenquelquesortelaxisteouultralibertaireparcequ'ellepermetdes'approprier lecodeetdelerefermer,c'estdiredelediffusersousuneautrelicence,quelqu'ellesoit.Iln'yapas decontinuitdansletemps,lescontributionslibrespeuventchangerdelicence.Uncodesouslicence BSDlaisselapossibilitdesel'appropri,etpeutn'tremmeplusaccessiblesparceuxlammequi ontcontribuauxpremiresgnrations. Ilestimpossible deprouverjuridiquement qu'unutilisateur acliquersurun bouton j'accepteles termesdelalicence.Biensouventmme,raressontlespersonnesquiprennentletempsdelireetde comprendre les tenants et les aboutissants d'un tel engagement. La plupart du temps, les licences propritaires sont des dcharges anticipes des responsabilits du producteur, et une acceptation prsumedelaculpabilitdesutilisateurs. Lalibertdel'information Lalibertdel'informationestunpilier fondamental delalibert.Lalibertdepenser,lalibertde s'informer,lalibertd'analyseretlalibertd'expressionsontdescaractristiquesessentiellesdel'tre humain.Ledroitlaparole,ledroitl'coute,ledroitausilence,ledroitaudsaccord,etledroitde rponse sont des parties constituantes et indivisibles de cette libert. La libert de l'information prsuppose galement que l'information soit accessible, comprhensible, comparable, vrifiable, interprtable,critiquableetcontestable. L'exercicedecettelibertncessitedelacuriosit,delasensibilit,del'intelligence,delaculture,dela rflexion,del'organisation,desmoyens,dutemps,delammoireetdelavigilance,delaperspective etdurecul.Lespointsdevuessontdiffrentsaussiparcepersonnen'aenttelesmmeinformations. Lalibertdel'informationnepeutexistersansavoirunaccslibreettransparentaux sources,aux contextesetauxtechniquespsychologiquesetmdiatiques.Enfin,laprsentation,larputationet lesintentionsdel'informateursontdterminantesdansleprocessusd'valuationetd'intgrationd'une
LaConsolePatrickHautrive!;~)2010

33

information. L'internationalisationdel'information Latendancelaconcentrationdesmdiasatconcomitantedel'internationalisationdeschanges. La nature de l'information s'est bouleverse au 20ime sicle avec les techniques audio visuelles, numriquesetinformatiquesquisontdeplusenpluscomplexesetdeplusenpluscouteuses.Denos jourssonacclration,sadensit,etsamultiplicitrendentdeplusenplusdifficilesonapprhension. Siuneconomiedel'informations'estconstruite,c'estqu'ilyaunmarch,unretoursurinvestissement, desprofitsattendusetdesfortunesamasser. Ainsi,letraitementdel'informationn'apuchapperlaprdationducapitalisme.Lesrflexesetles habitudesonttsanalyssetconfortes,lescodesonttsrcuprsetdtourns,lesenss'estperdu encoursderoute,etlesmessagessesontparsd'unhabillagequiestdevenulecontenumme. Lastandardisationdel'information L'informationsecachederrireunechatoyanteetrassurantestandardisation,quin'estquelacoquille vided'unebanaleethideuseuniformisation.Ilyaunphnomnedeprivatisation,d'industrialisation, de marchandisation,de normalisation etdemdicalisationdel'information.Lesmessagessontles mme pourtous sousl'apparenced'unepersonnalisation. Lecompos molculaire delapilule est identique,ilnousresteencorepourquelquetempslechoixdelacouleur. Lesgenssontconsidrscommedesclientsfidliser,desciblesverrouiller,despartsdemarch cder.Lesproduitssontprsentscommedesvaleursd'appartenanceetdessignesdereconnaissance. D'ailleurs,leproduits'estd'abordtransformenemballage,etc'estlecontratquimaintenantprendsa place.L'entreprisecapitalistenesesuffitpasd'avoirdescommandesetdesclients,illuifautunavenir planifi,etunecroissanceassure.Etdanscesconsidrationsfinanciresdeduration,lapersonnedu clientn'estpasvraimentprisenecompte.Lesentreprisesnesontpasdesassistantessociales,elles travaillentlamargepourdesintrtsprivs. Laprivatisationdel'information Pour atteindre ces objectifs, dicts par les investisseurs, l'entreprise est contrainte d'apporter des certitudes.Illuifautsecomposerunprofilaffable,optimisteetpaternaliste.Illuifautchafauderses meilleuresprvisions,minimisersesrisquesetmaximisersesbnfices,augmentersespartsdemarch etabsorbersesconcurrents.Derrirelasatisfactiondesaclientle,secachelaconservationdeses profits.Enralit,c'estsarentabilitellequiluiestindispensableetdontelledoitrendrecompte. Ainsi,presquemcaniquement,l'entreprisetentedescurisersaposition,etdes'approprierunavenir quin'estpaslesien,maisceluid'individusquijuridiquementsontdespersonnalitsdistinctes.Nous n'achetonspasdesservices,nousvendonsdutempsdetravail,souslaformedecrditsrevolving,
LaConsolePatrickHautrive!;~)2010

34

d'abonnementsannuels,decartesdemembres,d'assurancesvietoutcompris. Nenousinquitonspas,cesontdesprofessionnels,ilsvonts'occuperdetout,c'estgaranti,nousne seronspasdus.Unepetitesignature,etnousvoilpartiesprantlemeilleuretoccultantlepire.Les engagementssontprvussurlelongtermepourprofiterdesconomiesd'chelle,etlespnalitsde sortiesontdissuasives.Ensuite,quandlesystmepyramidalsefissurepuiss'effondre,lafactureprive est nationalise. L'conomie maffieuse de la drogue et de la prostitution est un modle tellement performant... L'accsl'information Etpourtant,laconnaissancen'ajamaistaussiprcise,aussiprofondeetaussidiversifie.L'homme universel,encyclopdiqueetomniscientdusicledeslumires,laisseleflambeauaux spcialistes. Commesilebondictateurclairprfraitdsormaissedissimulerdansl'ombre.Lesrelationsetles interactionshumainessontpackagesparlesintermdiaires,lesprsentateurs,lesreprsentants,les portesparolesetlesavocats. L'avisdel'expertdevientincontournableetc'estluiquidevientleresponsabledsign.Lesmandres, les lenteurs et les dysfonctionnements des administrations publiques sont jugs comme des maux ncessaires,qu'ilfautpardonneravecunejovialitdebonaloi,etassumeravecuneindulgencede rigueur.Certainsprofitentdecetloignementcognitifpourserfugierderrirecetteapparenteopacit. Les jargons deviennent mthodiques et folkloriques. Les discours deviennent rhtoriques et catgoriques,polmiquesetpartisans. Lacirculationdel'information L'accs l'informationestbiensrindispensable,mais aussisacomprhension,parcequec'estla connaissance, la culture qui donne du sens l'information. C'est la circulation de l'information, l'change,lepartage,laconfrontation,etlalibertd'expressionquidonnel'informationlestatutde vritconsensuelle. Lamanipulationdel'information La masse critiquedel'information,laplacedela rptition dansladiffusiondesmessages,etles techniques subtiles decommunication, deconditionnement, d'imprgnation etde sublimation sont largement suprieures aux capacits individuelles d'absorption, de perception, de slection et de comprhension.Lescerveauxhumainsarriventsaturation,etparaissentbienfragilesetvulnrables, faceauprogrsdelamachine. LapreuvesymboliquedecechangementdeparadigmefutapporteparlavictoiredeDeepBlue,la machined'IBM,surlechampiondes checs Kasparov.Mais,ilyatoujoursquelqu'underrireune machine.Cen'estplusl'aiguilledanslabottedefoin,maisl'aiguilledansunemontagned'aiguillesque
LaConsolePatrickHautrive!;~)2010

35

chacundoittrouverpours'yretrouver.Danscettenouvellesocit,toutlemondenepeutseprvaloir d'treunfakir,unlama,unavatarouungourou. Laproductiond'information L'effortindividuelquicherchesefaireunpointdevue,indpendantdesstratgiescommercialeset mercantiles,reprsenteuncombatingal,faceauxtatsouauxmultinationalesquicherchentimposer leur emprise et accroitre leur empire. Le public est devenu une masse indiffrencie, mallable, orientable,influenable,voireamorpheetindiffrenteouamuseetdivertieparlespectacledesgrands quilesdpassent.Laproductiondel'information, dansuntelcontexte, risquededevenirunilatrale, avecun seul producteur,un seul metteur, unseul message,et unemasse de consommateurs.Le divertissement,lespectaculaire,larumeuretleconformeviennentcomblerlesbesoinspulsionnels,et remplacentpetitpetit,lesdsirsd'apprendreetlesvolontsd'mancipation. Lessatellites,lesradars,lesscanners,lessystmesexperts,lesaroports,lescentraleslectriques,la montique,larobotique,ladomotique,lesindicesstatistiques,lesbasesdedonnes,lestlphones portables,lesimagesvirtuellesetles rseaux mondiauxparticipentdecenouvel univers etdeces nouvellesformesd'changesetdecommunication.L'informationestnumrique,nomadeetmondiale. Lesparticuliersdoivents'appropriercessupports,cescodesetcesnouvellestechniquesafindenepas trelesdupesconsentant,nilesvictimessubmergesparletsunamidel'information.Denouvelles techniquesd'analyse(websemantic)permettentdeconstruiredesbasesdedonnes(datamining)trs prcises sur les agissements et les proccupations des internautes qui naviguent sur le web, et s'enregistrentvolontairesurdessitesquiconserventetparfoisvendentleursdonnesdesentreprises tierces. L'humanisationdel'information Laproductiondel'informationnedoitpastombersouslesseulscritresdelarentabilisationetdela respectabilit.Lesartistesnesontpluslesseulss'inquiterdelacensure.Lacrativitdelamultitude doitfairefacelacupiditdequelquesuns.L'informationn'estpasseulementunatoutstratgiqueou unavantageconomique,c'estavanttoutlaspcificitdelaracehumaineetdudevenirdel'humanit. Les Logiciels Libres expriment cette volont de librer l'espace numrique. Ils reprsentent une contribution historique majeure pour qui souhaite s'approprier son propre espace informationnel, assurersonindpendanceintellectuelle,etconserverunpeud'anonymatetdevieprive.Lesrseaux sociaux manifestent cet effort collectif pour crer un autre monde, un monde participatif, communautaire, un autre monde que celui dans lequel certains privilgis voudraient nous faire basculerpourtoujours.

LaConsolePatrickHautrive!;~)2010

36

Laqualitdel'information Le CopyLeft estunjeudemotavecl'expressionanglophonedeCopyRight,etpeutsetraduireen franaispargauched'auteur.LeCopyLeftassurelaprennitdelalibertsurtoutelesgnrations decodequisuivent.UnecopiedesLogicielsLibresestlaisseladispositiondesgnrationsfutures. Ainsi,uncodesourcelibrepeutlerester.Ilestbiensrquestiondelibert,maisilestsurtoutquestion de qualit.Eneffet,seull'accsaucodesourcepermetdevrifierles fonctionnalits rellesd'un programme,etseulelapossibilitdeletransformerlibrementpermetvritablementdel'amliorer. Lalibertoulaqualitdel'information,c'estunchoixquotidien,unmodedevie,c'estunevritable qualitdevie,peuttremmeunemoraledelavrit. Lasocitdel'information Lascienceadetouttempsprogresspartirdesavancesdeprcurseurs,etlaculturen'estquelefruit des changes volontaires entre personnes. Le progrs et la richesse intellectuelle ne peuvent se concevoirsanslalibrecirculationdel'information.Aujourd'hui,lasocitindustriellesetransformeen socitdel'information.C'estdoncdutypedesocitquenousvoulonsdontils'agit. LesLogicielsLibressontlebienetlaresponsabilitdescitoyensdumonde.LesLogicielsLibressont uneaffairesocitale,etilsconstituentlacldevoutedelalibertnumrique.D'ailleurs,lesystme GnuLinuxfaitl'objetd'unedemanded'incorporationaupatrimoineintellectuelmondialdclarpar l'Unesco.

LaConsolePatrickHautrive!;~)2010

37

GNUGPL LalicenceGnuGPL QuatrelibertssontgarantiesparlalicenceGnuGPL(GeneralPublicLicence). LalicenceGnuGPL(GeneralPublicLicence)(fsf.org)(gnu.org) 1.Lalibertd'utilisationetd'excutiondesLogicielsLibres 2.Lalibertd'tudierlecodesourcedesLogicielsLibres 3.Lalibertd'adapterlecodesourcedesLogicielsLibres 4.LalibertderedistribuersesmodificationssouslicenceGnuGPL execute read write stickybit

Iln'yapasd'obligationconcernantunventuelprixdevente.Cequiestessentieletprincipaldansun LogicielLibre,c'estl'accsaucodesource,nonpasl'aspectmontairequiestlaisslaresponsabilit dechacun. Lestermesdelalicencesontdisponiblescetteadresse:http://www.gnu.org/copyleft/gpl.html LalicenceGnuGPLversion2surunsystmeGnuLinux:/usr/share/commonlicenses/GPL2 Freeasfreedom Laquatrimelibertestenfaituneobligation,elleestqualifiedecontaminante,parcequetout programmeutilisantducodesouslicenceGnuGPLdoitobligatoirementtredistribusousunelicence garantissantcesquatreliberts.C'estcettequatrimelibertquidonneautravailcollaboratiflavaleur d'untravailcommunautaire. Ainsiles programmes souslicenceGnuGPLparticipent l'accumulation dufondcommun, etne peuvent pas tre rcuprs. C'est cette quatrime libert qui manque la licence BSD. Cette diffrenceestunpartiprisstratgique,ellenesparepaslesdeuxtypesdelicencequisonttoutesles deuxfondamentalementlibres,maiselleinstaureunecontraintequin'estpasngligeable.Cepoint estprimordialequandl'onconsidrelaproductiondesLogicielsLibressurlelongterme. Freetobe Freetobe Freetochange Freetouse Freetomake Freetohave Freetogive Freetostay Freetogo Freetosay Freetoshare

LaConsolePatrickHautrive!;~)2010

38

Leslicenceslibres Leslicencesdteslibressontcompatiblesentreellesetgarantissentl'accsaucodesource(lestrois premires liberts).Lesitedela FSF (FreeSoftwareFoundation) conserveuneliste detoutesles licencescompatiblesetlivrelesexplicationscompltessurcespointsjuridiquesetphilosophiques.Les diverseslicenceslibresmatrialisentlaconvergenceetlacommunautd'espritdesnombreuxacteurs quicontribuentauxLogicielsLibres. Leslicenceslibres LeDomainePublic(proposeunaccslibre,maissansdroitdemodification) XConsortium Artistic CreativeCommon BSD(sauflaquatrimelibertsurlaconservationdelalicence) GnuGPL(GarantedPublicforLife) LesserGPL Mozilla CopyLeft MPL QPL Libpng Zlib MIT FreeMusicPublicLicence Lemodleconomique LemodleconomiquedesLogicielsLibresestdiffrentdesautresmodlesconomiquesgnrateurs deprofits.Lasparationn'estplusentreceuxquipossdent(quienontlesmoyensmontaires)etceux quinepossdentpas,maisentreceuxquisavent(quiontprisletempsd'acqurirlaconnaissance)et ceuxquinesaventpas.L'actedepayeretceluid'tudiernereposentpassurlesmmes conditions pralables.Avoiretsavoirreprsententdesprivilgesfondamentauxetfondamentalementdiffrents.Et cechangementdeperspectiven'estquelaconsquencedelalibrecirculationdel'informationquiva bienaudeldelalibreaccumulationdescapitaux. Lamatiredelaplanteetlaconnaissancedel'espcehumainesontlebiendetous,laresponsabilitde chacun,etenprincipe,n'appartiennentpersonne.Lapropritn'estqu'uncritred'organisationpour hirarchiserlesindividusd'unesocit.Cetteloioucettevaleuratinstaureparceuxquise sontarrogcedroitparlaforce,etquisesontapproprislesressourcescommunespouraccroitreleur bientreetrenforcerleurpuissance.Cettergleestdevenuelacontrainte,leconditionnementdontse serve les gnrations de nantis pour imposer leur volont aux autres. Il n'y a de richesse que
LaConsolePatrickHautrive!;~)2010

39

d'hommes.L'histoiredumondeenrcapitulelespripties.Cettefrontireestdevenuepetitpetitun modedevie,unmodedepens,unemotivationpremireetunecivilisation. LemodleconomiquedesLogicielsLibresestbassurl'accsaucodesource,lamiseencommundes ressourcesetlamutualisationdeseffortsetdesrsultats.LesLogicielsLibressontlefruitd'untravail de collaboration,chacuncontribue,etlaproductionconstituelebien communautaire.C'estcette contrainte(la redistribution etlepartage)quidevientunavantage conomiqueparlamasseetla diversitdescontributionsquiprofitenttoutelacommunaut.Qualifisgalementd'conomiedu don,lesLogicielsLibresbnficientdesqualitsquidcoulentdeslibertsqu'ilsgarantissent.Les LogicielsLibressontlibresd'accs,maislescomptencespourlesmettreenuvresontrtribues. Lesavantagesdelalibert Ilestintressantd'approfondirsaproprerflexionsurlesavantagesdelalibertetdelatransparence. Lesavantagesdelalibertetdelatransparence Lacontinuationdelachainenumrique(gnrations)etlaportabilit(plateformes). Lacoopration,lepartageetl'mulation,etlareconnaissancedumriteparlacommunaut. Latransparenceetl'indpendanceetdonclaqualitetlaprennitdel'accsducodesource. Lesfaiblescoutsdeproductionetd'utilisation,etlamutualisationdescoutsdemaintenance. Lasouplesseetlaractivitdelacommunautpourdiffuserlesamliorationsoulescorrectifs. Lacrativitdanslaproductionetladanslaralisationd'idesindividuellesoucollectives. Laconnaissanceexactedesalgorithmes,desprotocolesetdesformatsdefichiers. Ladcentralisationdesacteursetlacentralisationdesressourcesavecinternet. Lapluralitdelaproductiondecodesanscontrainte,sanshirarchie,sanscompromis. Larcuprationd'uncodeprexistantpourlancerunprojetdansunenouvelledirection(fork). Laprisedeconscienced'appartenirunecommunautpourlebienduplusgrandnombre.

LaConsolePatrickHautrive!;~)2010

40

STRATEGY Lesstratgiesd'installation Quandl'oncommences'intresserauxLogicielsLibresetausystmeGnuLinux,ilestrecommand delefaireprogressivement.Commetoutestaccessible,ilestfaciledeselaissersubmergerparla diversitetlacomplexit. LesLogicielsLibrespeuventsetlchargsgratuitementdepuisinternetsousdiffrentesformes.Ilya lesprogrammescompilspourWindows,lescdromliveetlescdromsd'installation. Lesstratgiesd'installationdesLogicielsLibres(framasoft.net) Freesoftware CDROMlive Multiboot Grub,Ubuntu Dedicate Debian,RedHat Virtual [GnuLinux[Linux]] FreeOS,WinLibre ImagesISO,USB Lesautresplateformes De nombreux Logiciels Libres sont disponibles pour d'autres plateformes comme Windows ou Macintoshou*BSD,etilsreprsententunbonmoyenpoursefamiliariseraveclacommunautdu libre.D'autanplusqu'ilssonttrscomptitifs,tantdupointdevuedesfonctionnalitsqueduprix. LesLogicielsLibresneplacentpasenportefauxlesutilisateursquitlchargentillgalementdes versionspiratesdesprogrammesquin'ontpaslesmoyensd'acheter. L'installationdeLogicielsLibresdisponiblespourd'autresplateformesqueGnuLinuxestfacile.La plupartdessitesddisaudveloppementd'unLogicielLibreproposentdesversionscompilespour, entre autres, les API win32, et ils sont tlchargeables sous la forme d'excutable (.exe) qui automatisentl'installation.Denombreuxsitesproposentuneversiondeleurapplicationcompatible avecWindows. DescompilationsdeLogicielsLibrespourWindows,tlchargeableenimageISOsontdisponibles enfranaissurinternet(BureauFreeOS,WinLibre).Cescompilationssetlchargent,puissegravent surunCDROMviergel'aided'ungraveuretd'unlogicieldegravure.Desoutilslibresdegravuresur CDROM pour Windows sont galement tlchargeables sur Internet. Certains sites comme framasoft.netprsententlesLogicielsLibresetproposentdesliensverslesprogrammesetlesimages. CDROM Les live LesCDROMlivepermettentd'avoirunaperudesfonctionnalitsd'unsystmeGnuLinuxsansrien installeretdoncsansdangerd'craserquoiquecesoitsurunautresystme.LesimagesISOdeCD ROM live sont galement tlchargeable depuis internet. Certains magazines spcialiss proposent rgulirementdesgalettesincluesdansl'ditionpapier.
LaConsolePatrickHautrive!;~)2010

41

L'installationen mmoire avecunCDROMlivepermetd'essayerunedistributionsanstoucherau disquedur.Enplaantun CDROM livedanslelecteuretenchoisissantdansle BIOS lelecteur comme prioritaire audmarrage.LesystmeGnuLinuxsechargeenmmoire viveainsiqueles applicationsutilises.Une cl USB,parexemple,permetdesauvegarderlesfichierssurunsupport externe.IlsuffitderebootersansleCDROMlivepourretrouverledmarragedusystmeinstallsur ledisquedur. Lemultiboot L'installationd'unsystmeGnuLinuxsurlemmedisquedurousurundisquedursparconstitue l'tapelogiquesuivante.L'installationenmultibootpermetdepouvoirpasserd'unsystmel'autre,et d'opreruntransfertprogressifdeshabitudesetdesfichiers.LesystmeGnuLinuxreconnaitenlecture etencritureles partitions etlessystmes defichiersdesautressystmes d'exploitation(comme WindowsouMacintosh,maislarciproquen'estpastoujoursvalable). L'installationenmultibootpermetdepasserd'uneinstallationuneautreenpartageantledisquedur. Plusieurssystmessontalorsinstallssuccessivementsurleoulesdisquesdurs.Ungestionnairede dmarrage(bootmanager)proposelorsdudmarragedelamachinelechoixd'undessystmessousla formed'unmenu. Lesdiffrentssystmessontinstallssurdespartitionsdiffrentesduoudesdisquesdurs.Lesecteurde bootdupremierdisque dur(MBR)estluetexcutparleBIOS.Lecodedu MBR (MasterBoot Record)permetdechargerenmmoirelegestionnairedeboot(BootLoader). L'installationddie L'installationclassiquepermetderservertoutledisquedurpourGnuLinux.Unseulsystmeest install,etceluiciestchargenmmoireaudmarragedirectementdepuisledisquedur.L'installation ddiepeutounoncomporteleserveurgraphique(Xwindow). L'installationvirtuelle L'installationvirtuellerequiertl'installationd'uneapplicationdevirtualisationsurlesystmeprincipal (quipeuttreGnuLinux,WindowsouMacintoshOSX),puisdel'installationdessystmessur lesespacesvirtualiss.DenombreuxsystmesGnuLinuxserventdesoclepourfairetournerd'autres systmesd'exploitationoummed'autressystmesGnuLinuxdansunespacerobusteetstable. La virtualisation (virtual machine) simule ou mule le comportement d'un autre systme d'exploitation.Unemachinevirtuelleestunespaceddiunautresystmequitournel'intrieur maisdefaonindpendante.

LaConsolePatrickHautrive!;~)2010

42

Lareconnaissancematrielle Lareconnaissancematrielleestun dfi pourlacommunautdesLogicielsLibresparcequ'elledoit gnralementfournirparellemmelespilotesquivontfonctionnersousGnuLinux,etcepourtousles matriels. Engnral,c'estle fabricant dematrielquimetladispositiondesaclientlelepilotepourson produit.LapartdemarchdeGnuLinuxtaittrsngligeablepourlesfabricantsgrandspublics,aussi le dveloppement de pilote pour Gnu Linux n'tait pas une de leur priorit. Les fabricants ont longtempsconsidrqu'iltaitdansleurintrtdeconserverlesecretsurleursinnovationstechniques notammentpourlescartesgraphiquesindispensablespourlesjeuxvidos.Deplus,legrandpublictait habitu ne pas rencontrer ce genre de problme avec Windows, parce que des accords commerciauxtaientconclusenamont,quelespilotestaientintgrslaplupartdutempsavecle systmed'exploitation,etquelepublicn'avaitpaslechoix(lesmachinessontcommercialisesd'office aveclesystmed'exploitationWindows,cequicaractriseuneventelieillgale). Pour la communaut des Logiciels Libres, la difficult provenait de la non divulgation des spcificationstechniques exactesdechaquematriel. Desingnieursenrtro engineeringfaisaient leurpossiblepoursuivrelacoursel'innovationetdistribuerrapidementlespilotesfiablesetcomplets compatiblesGnuLinux.Ainsi,lapluspartdespilotespourGnuLinuxtaientdisponiblesquelques moisaprslasortiedumatriel. AveclesuccsdeGnuLinuxdanslesentreprises,danslesadministrationsetchezlesparticuliers,les fabricantsprennentdeplusenplusconsciencedeleurintrtdveloppergalementlespilotesqui feront fonctionner leur matriel sous Gnu Linux. L'abandon des ententes monopolistiques, des stratgiesdeclientlisme,despolitiquesdelaventeforceetdesmanuvresdelobbyismesontdes avantagespourlesclientsfinauxquipeuventdslorsfairefonctionnerunevritableconcurrenceet choisirlibrementleursystmeetleurmatriel.Deplusenplusdefabricantdematrielpourvoient cettencessite,maisl'accsaucodesourcedecespilotesn'estpasencoresystmatique. Dessitesfontl'inventairedescompatibilitsetproposentdespiloteslibres.Certainssitessontmme spcialiss dans tel ou tel type de matriel. Toutefois, la vrification de la HCL (Hardware CompatibilityList)n'estplusdsormaisaussiindispensablequ'auparavant,parcequedsormais,laplus partdesmatrielssontreconnusetfonctionnentparfaitementsousGnuLinux(etsansinterventionde l'utilisateur qui dispose d'un systme oprationnel complet ds l'achvement de la procdure d'installation).

LaConsolePatrickHautrive!;~)2010

43

INSTALL L'installationdeGnuLinux L'installationdeGnuLinuxestdevenueaufildutempsdeplusenplusfacileetrapide,nonseulement parcequelesmachinessontplusperformantesetquipesdeplusdemmoirevive,maisaussiparce quelesprocduresd'installationdesprogrammessontdeplusenplusstandardises(installer)etparce quel'installationetlamisejoursdesapplications(packages)recourentdesmiroirssurinternet. Lestypesd'installation Plusieurs types d'installation sont possibles afin de satisfaire le plus grand nombre de situations. L'installationd'unsystmeGnuLinuxpeutsefaireparduplicationdel'imaged'undisque(ghost),ou enpassantparuneprocdured'installationstandardquivareconnaitreetconfigurerlematriel,etqui vainstallerlesprogrammes. La procdure d'installation standard peut se faire partir d'une source locale ou d'une source distante.L'installationlocalepeuts'effectueravecdesdisquettes,un CDROM d'installationouune copielocaledecesfichiers.L'installationdistantepeututiliserdiffrentsprotocolesrseaux. FreeSoftwareInstallation GnuSoftware GnuLinuxSystem Binaries Sources Duplication Local win32 Mac Unix Ghost Floppy Cdrom Live Usb/Flash HTTP Laduplication Laduplicationd'installationconsisteenunecopiebitbitd'uneimaged'undisquedurprinstall (ghost). Cette procdure requiert de disposer de machines qui ont les mme caractristiques techniques afindenepersonnaliserqueles adresses rseaux,parexemple.Laduplication estune procdure qui n'effectue aucune configuration, mais qui permet, par exemple, de faire une rinstallationidentiqued'unmmepostetrsrapidement. L'installationlocale L'installation localeestlaprocdured'installation standardd'unsystme GnuLinux. Laprocdure d'installationpeuttrelanceaudmarragedelamachine(boot)oumanuellementpartird'unsystme entatoprationnel.Lessourceslocalespeuventtredediffrentessortes,commelesdisquettes,les CDROM oulesDVDquisontdesimagesISOquipeuventtrelibrementtlchargessurInternet puisgraves,oudessupportscommedesdisquesUSBFlashDrive,ouunepartitionlocale.
LaConsolePatrickHautrive!;~)2010

Network NFS FTP

SMB

44

Les installations standards suivent la procdure mise en place par la distribution choisie. Les distributionsdfinissentleurpropreprocdure(installer). L'installationrseaux L'installationdistance,vialerseau,quirequiertuneprconfigurationdel'interfacerseauavecle pilotedelacarterseau,etlelancementd'un client rseau(netinstall).Unefoisdmarrleclient d'installationvarechercherleserveursurlerseauLAN(LocalAreaNetwork).Lesserveurspeuvent vhiculerlesfichiersl'aidedediffrentsprotocolesrseaux(HTTP,NFS,FTP,SMB). Lesinstalleursdesdistributions Chaquedistributiondisposedesonoutild'installation(installer)etdecespropresprocdures.Par exemplepourDebian,l'installationsepoursuitaurebootsuivantpourdcompacterlesapplications. TandisqueRedHatproposeunoutildeprconfiguration(Kickstart)pourautomatiseretpersonnaliser lesinstallations.Engnral,unseulrebootestncessairepourl'installation,cequirendlaprocdure beaucoupplussimpleetdirectequesousd'autressystmes. LesinstalleursdesdistributionsLinux Distribution Debian RedHat Laprocdured'installation Lesinstalleursprocdentl'installationplusoumoinsautomatisedetoutlesystmed'exploitation. Chaquedistributionsuituneprocdurequiluiestpropre. Laprocdured'installationpasseenrevuelestapesfondamentalesquesontlemoded'installation,le chargementd'un noyauprovisoirepourl'installation,lareconnaissancedumatriel,laconfiguration delalangueetdupays,le partitionnement etlechoixd'unsystmedefichier.l'installationd'un chargeur,laslectionetlacopiedesapplications,etlaconfigurationdurseau,dumotdepasseroot etdel'interfacegraphique. setup Anaconda Installer Kickstart Rules

LaConsolePatrickHautrive!;~)2010

45

Lestapesdelaprocdured'installationd'unsystmeGnuLinux Lemode Lalangue(locales) Lepays(timezone) Lespriphriquesd'entres(mouse) text frlatinloadkeys Europe KeyboardAZERTY(generic105touches) LiaisonCOM1(/dev/cua0ou/dev/ttyS0) LiaisonCOM2(/dev/cua1ou/dev/ttyS1) LeportPS/2(miniDINrondesur/dev/psaux) kernel fdsikext2 cp grubmbr ifconfigroute passwd useradd gdm Lebalayagehorizontal(31.538Khz) Lerafraichissementvertical(5090Hertz)

Lechargementd'unsystme Lepartitionnementetformatage Laslectionetlacopiedesapplications L'installationduchargeurdedmarrage Laconfigurationdurseau Lacrationdumotdepasseroot Lacrationd'unutilisateur Laconfigurationdel'interfacegraphique Lepriphriquedesortie(cran)

Lesmodesd'installation Lesdiffrentsmodesd'installationsontplusoumoinscomplexes. Lesmodesd'installationd'unsystmeGnuLinux Lemodegraphique(pardfaut) Lemodetexte(quandleserveurgraphiquen'estpasoprationnel) Lemoderescue(pourlamaintenance,leMBRetlemotdepasseROOT) Lemodeexpert(procdured'installationdtaille) Lemodelignedecommande(quiproposeunpromptsurunshelldebase) LescransF1F12(quiaffichentdespagesd'aideetd'exemple) LemodeCDROMlive(quichargeunsystmesansinstallation) Lesoutilsd'installation Lesoutilsd'installationd'unsystmeGnuLinuxsontlesoutilsstandardsquel'utilisateurretrouveune foisl'installationtermine.D'ailleurs,ilestpossibled'installerLinux,soitmme,manuellementpartir
LaConsolePatrickHautrive!;~)2010

46

despackagesoriginaux.LadocumentationLFS(LinuxFromScratch)donnepaspaslaprocdure suivre. Et comme pour une installation normale, l'utilisateur averti doit passer par les phases incontournablesdetouteinstallation,maisenlignedecommandeetletoutenanglais. C'estdire,chargerunnoyauprovisoire(boot),partitionnerledisque(fdisk),yinstallerunsystmede fichiers(mkfs),crerlapartitiond'change(mkswap)etl'activer(swapon),crerlesrpertoiresde l'arborescence(mkdir)etlesfichiersspciauxpourlespriphriques(mknod),installerlechargeurde dmarrage sur le secteur de boot (grub), copier les utilitaires, les outils de base (coreutils), les bibliothques(libc6)etlesdpendances(cp),dcompresserlespackages(tar)etlesinstaller,dansle bonordre,aubonendroit(mv)etaveclesbonnespermissions(chmod),compilerunnoyau(make), configurer les interfaces rseaux (ifconfig) et la passerelle par dfaut (route), installer le serveur graphique(xorg)etlegestionnaired'affichage(gdm),etenfincrerl'utilisateurrootetluiadministrer unmotdepasse(passwd). InstallationTools Partitioning&Filesystem fdisk cfdisk sfdisk DiskDruide Qparted Parted Partimage PartitionMagic Paragen fdformat hdparm rdev dmesg mount umount fsck dd mkfs mke2fs mkfs.ext2 mkfs.ext3 mkfs.vfat mkreiserfs mkswap swapon swapoff Packages rpm rpmdrake urpmi up2date yum autorpm rpm2cpio gnorpm alien apt4rpm aptget dpkg emerge Journal /tmp/install.log /root/anaconda.ks.cfg /mnt/cdrom/images/boot.img /mnt/cdrom/images/bootnet.img /mnt/cdrom/images/rescue.img /var/log/installer/messages

LaConsolePatrickHautrive!;~)2010

47

PARTITION L'espacedestockage L'espacedestockageestlelieuouserontenregistrestouteslesdonnesdusystme,desapplicationset des utilisateurs. C'est un espace de mmoire qui conserve la valeur des bits aprs l'extinction de l'alimentationlectrique.Cetespacepeuttreunedisquette,uneclefUSB,unCDROM,unDVDou un disque dur. Chacun de ces dispositifs possde des caractristiques techniques qui lui sont spcifique(taille,capacit,vitesse,dure,nergie,fragilit,prix).Lesdisquesdurssontlessupportsqui proposentlesmeilleurescaractristiquespouruneutilisationintensive. Lastructuredepartitionnementetlestypesdesystmedefichiersinstallssurchaquepartitionsont enregistrs dans untableauquel'onappleune tabledepartition.Les supports peuventtrede plusieurs sortes (IDEATAPI, SATA, SCSI, USB, FLOPPY, FLASH DISK, SOLID STATE DRIVE). L'organisationdel'espace Avanttouteinstallation,lesupportquireoitlesfichiers,doittreprpar.Le disque durdoittre structurenpartitions,dansunpremiertemps,etdansundeuximetemps,laoulespartitionsdoivent treformates.Le formatage estuneprocdurequiconsisteinstallerunsystmedefichierpour organiserl'espacedestockage.Lespartitionssontaussiappelesdesvolumesoudestranches(slice). Ainsi,deuxphasesdistinctessesuccdentpendantlaprocduredeprparationd'undisque.Lapremire concerne le disque dans son entier, c'est le partitionnement de l'espace de stockage du disque (partitioning) qui va crer la table de partition (partition table). La seconde phase concerne l'organisationlogiquedechacunedespartitionsdudisque.Chaquepartitionseraformateselonles rglesd'unsystmedefichiers(filesystem)quipeuttrediffrentd'unepartitionl'autre. Touslesdisquesdurspossdentunsecteurdeboot,leMBR(MasterBootRecord)quiestplacsurles 512premiersoctetsdudisque.C'estleMBRquienregistrelatabledespartitionsetlecodepourle chargeurdedmarrage.Lagestiondesvolumesd'undisquepeuttregreparunecouchelogique supplmentaire qui virtualise l'espace de stockage comme le systme LVM (Logical Volume Manager). Latabledespartitions Lacrationdelatabledepartitiondudisquedurestlapremirephasedeprparationd'undisque. L'espacedestockageeststructurlogiquementenpartitions,encylindres,ensecteursetenbocksen fonctiondunombrede ttedelecture dudisque(heads),dunombrede plateaux,etdes adresses physiques.Lataille minimaled'une unitphysique destockagepeutvarier d'undisquel'autre.
LaConsolePatrickHautrive!;~)2010

48

Chacunedecesunitsconstitueensemblecequel'onapplelagomtried'undisque. Latabledepartitiond'undisqueestenregistresurle MBRetdansd'autressecteursdudisque.Des copiesdelatabledepartitionsontstockesrgulirementsurd'autressecteursdudisque. Quandle secteurdebootd'undisqueestendommag,cescopiespermettentundernierrecourspourractiverla tabledepartition. Leformatage L'installationd'unsystmedefichierpourchaquepartitionestindispensablepourpouvoircrireetlire des donnes sur le support. L'installation du systme de fichier est le formatage proprement dit. L'installationd'unsystmedefichierssurchaquepartitionpermetdeconditionnerlespartitions,qui sontdslorsprtesrecevoirdesfichiers.Chaquepartitionpeutavoirsonpropresystmedefichiers. Les fichiers systmes et les programmes sont copis sur une ou plusieurs partitions pendant la procdured'installation. Le systme Gnu Linux requiert au moins deux partitions, la partition de pagination (swap) et la partitionsystmeoupartitionracine(root)quiaccueillel'arborescenceprincipale,etpartirdelaquelle peuttremontesd'autrespartitionscontenantsd'autressystmesdefichiers. Lestypesdepartitions Undisquedurpeutcontenirdiffrentstypesdepartitions.Ledisquepeuttrestructuravecplusieurs partitionsprimairesetunepartitiontenduequicontiendrauneouplusieurspartitionslogiques.Les partitionsprimairesetlespartitionslogiquesformentlespartitionsquirecevrontunsystmedefichiers. Chacunedecespartitionsestidentifiedanslatabledepartitionparuneadressephysiquededbutet defin,etchacunecomporteunsecteurdeboot.Les512premiersoctetsdelapartitionquiconstituent lesecteurdebootdelapartitionoulePBR(PartitionBootRecord). Lacommandefdsikl/dev/hdapermetd'afficherlastructuredespartitionsdupremierdisquemaitre du premier contrleur de disque IDE (hard disk) et de connaitre les partitions actives qui sont marquesparunastrisque(bootflag).LespartitionsactivesindiquentauBIOSquedesfichiersde dmarrages'ytrouventpourlancerlechargementd'unsystme. Partitiontable(fdiskl/dev/hda) DiskBootSector MBR(512Octets) Loader(446) Table(64) MagicNumber(2) Primary(1) Primary(2) Primary(3) PBR hda3 Mounting Ext2 /usr Primary(4) Extended(hda4) Logical Logical PBR hda5 PBR hda6 /home /var Freespace PBR hda1 PBR hda2 PartitionActive(*) Pagination Filesystem(root) Swap (/)(/boot)

LaConsolePatrickHautrive!;~)2010

49

Lespartitionsprimaires Lespartitionsprimairessontaunombredequatreaumaximumcomptetenudelataillefixede512 octetsduMBR.Ellessontnumrotesde14.Auminimum,ledisquedurdoitcontenirunepartition primairequipeutounonoccupertoutl'espacedestockage. L'unedespartitionsprimairesestchoisiecommelapartition active dudisquedur(spcifieparla prsenced'undrapeau(flag)danslatabledepartition,etlesecteurdeboot(PBR)decellecipeuttre lancautomatiquementparleBIOS.Lapartitionactiveestaussiunepartitionsystme, c'estdire qu'ellecontientlesfichiersd'unsystmed'exploitationquisontchargsenmmoirelorsdudmarrage. Lapartitiontendue La partition tendue correspond l'une des partitions primaires. Celleci contiendra un certain nombredepartitionslogiques.Lapartitiontenduepermetdedpasserlarestrictiondes4partitions primairesetd'tendrelenombremaximumdepartitionsurundisquedur63. Lespartitionslogiques Lespartitionslogiques sontrpartiesl'intrieurdel'espacedlimitparlapartitiontendue.Les partitionslogiquessontnumrotespartirdunumrod'ordre5etpeuventcontenirindiffremment, commetoutesautrespartitions,desfichierssystmes,desapplicationsoudesdonnes. LemodeLBA DanslesanciensBIOS,prvalaitunelimitedansl'adressagedel'espacedisque,etiltaitncessaire d'installerlesfichiersdeboot(/boot)dansunepartitionspareetsitueendessousdu1024cylindre (quicorrespondaitapproximativement8GigaOctetsd'espace).Lapremirepartitiondetaillerduite, etprocheduMBR,servaitaccueillirlesfichiersdeboot.Le modeLBA permitdedpassercette contraintequandlatailledesdisquesdursdpassrentleGigaOctet. Lessecteursdeboot Lesdisquesetlespartitionscontiennenttoutesunsecteurdebootquiestconstituparles512premiers octets.Lessecteursdeboot(bootsectors)sontlespremierssecteurscorrespondants,soitaudisque (MBR),soitauxpartitionssurcedisque(PBR).Les disquettesdeboot contiennentgalementun secteurdeboot. LeMBR(MasterBootRecord)estlesecteurdebootmaitredudisque.LatailleduMBRestde512 octets. L'espace du MBR contient, le code du chargeur de dmarrage (446 octets), la table de partition (64octets)etle MagicNumber AA55(2octets).Le PBR (PartitionBootRecord)estle
LaConsolePatrickHautrive!;~)2010

50

secteurdebootdechaquepartition. Ladisquettedeboot Ladisquettede dmarrage (disquettedebootoude ramorage)estenregistrependantouaprs l'installation.Ladisquettedebootpeuttreinsrelorsdudmarragedelamachinepourlancerun systme.Laconfigurationdela squencedebootdu BIOS doittredansunordrederecherche adquate(1Floppy2Cdrom3HardDisk). Unedisquettedebootcontientunchargeurdedmarrageetunecopiedelatabledepartition,qui permettentdeslectionnerunepartitionsurledisqueetdelancerlechargementd'unsystme.La disquettedebootpeuttreutilequandl'onnesouhaitepasinstallerlechargeursurleMBRetquand l'on procde une maintenance. Des images prpares pour les disquettes 1,44 Mo (boot.img, bootnet.imgetrescue.img)sontgnralementdisponiblessurlesCDROMd'installation.Lescdroms d'installationpermettentgalementd'accderaudisqueetdeprocderdestchesadministratives. Lesdisquettesdebootpermettentdedmarreretdedpannerlesystme.Lacommande mkboot permetdecrerunedisquettedebootquicontientlenoyauetlatabledepartition.Selonlaplace disponible, il est possible de rajouter des utilitaires sur une disquette de boot personnalise. Des disquettes de dpannage prpares sont tlchargeables depuis Internet comme TOMSRBT (Tom Ocher'sRootBootDisk). Lespartitionsactives Unepartitionactiveestmarqueparundrapeau,lebootflagquiindiqueauBIOSquedesfichiers dedmarrages'ytrouventpourlancerlechargementd'unsystme.Lacommande fdisk permetde positionnerlesdrapeauxdeboot. Unepartitionactiveestsouventla partitionsystme parcequ'ellecontientlesfichierssystmesqui permettent le dmarrage du systme (boot) et son administration (tools). Toutefois, une partition active,peutn'trequ'unepartition deboot.La partition deboot (/boot)peutnecontenirqueles fichierssystmesquipermettentledmarragedusystme(l'imageRamdisketlenoyau).Lapartition racinedeGnuLinuxestlapartitionquicontientlaracinedel'arborescencedesfichiers. Larpartitiondusystme Larpartitiondusystmeenplusieurspartitionsdpenddutyped'utilisationdelamachine(serveurou postedetravail).Enfait,celadpenddel'activitetdel'volutiondecertainsrpertoires.Unsystme defichierestcomposd'uneseuleracine,maissurcellecipeutsegrefferplusieurspartitionsselonles besoins.Danscecas,lesespacessontsegmentsetchacunpeutdisposerdesonpropresystmede fichiers.

LaConsolePatrickHautrive!;~)2010

51

Parexemple,unsystmepeutrequrirplusieursespacesdeswapparcequel'utilisationdelammoire esttrsfluctuante.Unautresystmepeutexigerdesparerl'espacepourles binaires,parcequeles misesjourdesapplicationssonttrsfrquentes.Unautresystmepeuttrevulnrablesilapartition contenantlesfichierstemporaireset variables estamene stockerdegrandequantitdefichiers, commepourunserveurInternetouunProxyparexemple.Unautresystmepeutobligatoirementtre construitdelammefaonqu'unautre,parcequedesprocduresderinstallationautomatiquesont prvues,quelesmachinessontdupliques(ghost),ouparcequelespostessontstandardiss.Enfin,un autre systme peut comporter plusieurs partitions pour les utilisateurs, parce que ceuxci sont nombreuxetqueleursdonnespersonnellessontvolumineuses. Lesbesoinsdpendentdessituationsetdescontraintes,etlerledel'administrateurestdechoisirla configurationquiseralaplusadapteetlaplusconformeaubudgetallou,auxperformancesattendues etauniveaudescuritretenu(sachantquelesbesoinssonttrsrapidementexponentiels). Laracine/(root)dusystmedefichieretsespointsdemontage Swap /boot /home /root /usr /etc /var /tmp Lapaginationsurunepartition Lenoyau(vmlinuz)etlechargeurdedmarrage(gruboulilo) Lerpertoiredesutilisateurs Lerpertoirepourl'administrateurrootquirserve5%del'espace Lerpertoiredesprogrammes,utilitairesetoutilsGnu LerpertoiredesfichiersdeconfigurationASCII Lerpertoireduserveurinternet(httpd)etdesjournauxdebord(log) Lerpertoiretemporaireetcommuntous

Lesoutilsdepartitionnement Les outils de partitionnement sont plus oumoins complexes, mais ils sont tous manipuler avec prcaution, parcequ'uneerreurpeutprovoquerlapertedelatabledes partitions, cequirendtrs difficileparlasuitel'accsauxdonnessurledisquedur!CesoutilspermettentdesupprimerleMBR, delirelatabledes partitions, deformaterledisquedur,decrerunepartition supplmentaire, et ventuellementdemodifierlatailleoulaplacedespartitions(redimensionnement)sansdtruireles fichiersqu'ellescontiennent. Certainsdecesoutilssontpropritairesetcommercialissavecdesversionsd'valuation.Engnral,le partitionnementd'undisqueduresteffectueuneseulefoislorsdel'installationdusystmeoulorsde l'installationd'unnouveaudisquedur.C'estpourquoi,ilestncessairedeprvoirl'avancelenombre etlatailledespartitions.Lacommandefdiskpermetdepartitionnerundisque. SousGnuLinuxdeuxpartitionssontauminimumncessaires.Lapartitionracinedusystmedefichier quicontientlesystme(root).Lapartitiondeswap(swap)quipermetdepaginerlammoiresurle disquedur.
LaConsolePatrickHautrive!;~)2010

52

Lemenudelacommandefdisk Lacommande/sbin/fdisk/dev/hdapermetdepartitionnerlepremierdisquedurATAPI(master)de lapremirenappeIDE.Unmenuprsentelesdiffrentescommandesinternesdefdiskenappuyantsur latoucheM. Lemenudelacommandefdisk m p d q w n t a l menu print delete quit write new type active list (showthismenu) (showpartitiontable) (suppresstheselectedpartition) (exitwithoutsavingchanges) (changesthepartitiontable) (createanewpartition) (selectthefilesystemtype) (markthebootableflagforthepartition) (showallthefilesystemtype) 83forLinuxNative 82forLinuxswap 85forLinuxextented (checkthepartitiontable) (showanotherexpertmenu)

v x

verify extra

Unexempledetabledepartition Voiciunexempledetabledepartitionmontreavecfdisk. Unexempledetabledepartition(fdisk/dev/hda) Command(mforhelp):p Disk/dev/hda:6495MB,6495068160bytes 15heads,63sectors/track,13424cylinders Units=cylindersof945*512=483840bytes DeviceBootStartEndBlocksIdSystem /dev/hda1*131841504408+6FAT16 /dev/hda2318533166237082Linuxswap/Solaris /dev/hda3*33178483244140683Linux Partition3doesnotendoncylinderboundary. /dev/hda484841342423345925Extended /dev/hda510551134241357933+83Linux /dev/hda684841054097190183Linux Partitiontableentriesarenotindiskorder

LaConsolePatrickHautrive!;~)2010

53

Lesexemplesdepartitionnement mounta;fdiskl fdisk/dev/hda mkswapc/dev/hda3;swapon/dev/hda3 mke2fsc/dev/hda2;mountav ddif=/mnt/cdrom/images/boot.imgof=/dev/fd0 aproposdisk e2fsckfb8193/dev/hda2 /sbin/dump2fs/dev/hda|more fsck/dev/hda lilou vi/boot/grub/menu.lst vi/boot/grub/grub.cfg lsl/boot/vmlinuz2.6.105686 dmesg|head7 dmesg|tail1f LesoutilssousWindows delpart.exe killhd.com msd.exe fdisk.exe/MBR dirX:\dosutils\autobat.bat X:\dosutils\raw.exeboot.img rawrite.exeD:\images\boot.img dirX:\dosutils\fips.exe dirX:\dosutils\fips.doc Leredimensionnementavecfips.exe formatA:/s cdX:\dosutils\fips.exe xcopyrestorb.exefips.exeerror.txtA: attribRHSC: scandisk defrag.exe delete(Fichierd'changedeWindows) panel(Dsactivationdelammoirevirtuelle) Ctrl+Alt+Del(Reboot) fips.exe

LaConsolePatrickHautrive!;~)2010

54

LOADER Lechargeurdedmarrage Lechargeurdedmarrage(bootloader)estunprogrammedepetitetaillequipermetdeprsenter,au dmarragedelamachine,lesdiffrentssystmesinstallssouslaformed'unmenu.Quandlamachine estmisesoustension,leBIOSdelacartemreprocdeunevrification(POST),puisrechercheet chargeenmmoirelesinstructionsetlesinformationsdusecteurdebootquiseprsenteenpremier (1floppy,2cdrom,3disk). LechargeurdedmarragepeuttreinstallsurleMBRdudisque,surlesecteurdebootdelapartition systme(PBR),oubiensurunedisquettedeboot.Grcelatabledepartition,lechargeurconnait lesadressesphysiquesdesdiffrentes partitions dudisquedur,etlesquelles sontactives.Ainsi,le chargeurpeutprsenterl'utilisateurunmenu,puischargerenmmoirelesfichiersdedmarragedela partitionsystmecorrespondantausystmequel'utilisateuraurachoisit.Achaquedmarragedela machine,l'utilisateurpourrachoisirlesystmequ'ilsouhaitedmarrer. Lemenudedmarrage Lorsdelamisesoustensiond'unemachine,lechargeurdedmarrageprsentel'utilisateuruncran avecunmenuproposantengnraltouslessystmesinstalls.Enfait,lechargeurprsentelesentres quiluionttindiques.Unefoislechoixvalid,lechargeurlancelesfichiersdedmarragedu systme(l'imageRamdiskoulenoyau). Parfois,deuxmenuscorrespondantsdeuxchargeursdiffrentssesuccdent(chainloading). L'enchainement deschargeurs Parfois,unchargeurprincipalprsenteunmenusuccinctquipermetdelancerundeuximechargeur plus consquent, c'est ce qui s'apple l'enchainement des chargeurs (chain loading). Ainsi, par exemple,le chargeurprimaire (NTLOADER)peuttreinstallsurleMBR(pourdesraisonsde compatibilit avec un systme Windows qui exige d'occuper le MBR), tandis que le chargeur secondaire(LILO)estinstallsurlePBR. Lestypesdechargeurs Il existe de nombreux chargeurs diffrents et ils dpendent de la plateforme sous laquelle ils fonctionnent.Certainssontmmedesproduitscommercialisspourcomblerlescarencesdecertains diteurs. Les chargeurs de dmarrage comme Lilo (LInux LOader) et Grub (Grand Unified Boot manager)deGnuLinuxreconnaissentlespartitionsdesautressystmesd'exploitation,etproposentles entrescorrespondantesdanslesmenusdedmarrage,maiscen'estpasforcmentlecaspourlesautres
LaConsolePatrickHautrive!;~)2010

55

gestionnaires de dmarrage des autres systmes d'exploitation qui excluent la prsence des autres systmes. Lestypesdechargeursdedmarrage(bootloader) GnuLinux OS/2 Macintosh Windows Lilo(LinuxLoader) Grub(GrandUnifiedBootManager) BootManager XOSL Syscom.sys Syslinux Loadlin.exe SystemCommander BootMagic NTLOADER

WindowsNT

LaConsolePatrickHautrive!;~)2010

56

BOOT Laprocdured'initialisationd'unsystmeGnuLinux RESET BIOS POST BOOT LOADER RAMDISK KERNEL MODULES FILESYSTEM PROTOCOLS INIT SYSINIT RUNCOMMAND SINGLEMODE SERVICES Alimentation BasicInputOutputSystem PowerOnSelfTest Lesecteurdebootdudisque(MBR) Lechargeurdedmarrageetchanage Lechargementdel'imagedisque Lenoyaudusystme Lesmodulesetpilotesdunoyau Lesystmedefichiersracine(/) Lapilerseauintgreaunoyau Leprocessusinitial(PID=1) L'initialisationdusystme Lesscriptsd'initialisation(Initdefault) L'initialisationenmodesingle Lesserveursduniveaud'excution INTERNET(wrappertcpd) NETWORK(interfaces) HOSTNAME(DNS) MEMORY(/proc) HARDWARE(PCI,IDE,SCSI) DEVICES(/dev) CLOCK LIMITS PAGING BINARIES SYSLOGD POLICES Lesinitialisationslocalesspcifiques LesconsolesvirtuellesCtrl+Alt+F1F6 LOGIN(prompt&authentification) SHELL(deconnexion) LeserveurgraphiqueCtrl+Alt+F7(X) Power PressDelorF2(PROMonCMOS) SquencedebootduBios(1cdrom2disk) Disquettedeboot(floppy)Partition(PBR) (lilogrub) (initrd) (/boot/vmlinuz*) (kerneldkmod) fsckmount/etc/fstab Tcpip&Adsl(pppppoeppoa) /etc/inittabCtrl+Alt+DelPowerfail /etc/init.d/rcS==>/etc/rcS.d/* /etc/init.d/rc(runlevel)>/etc/rc5.d/[KS??]* /sbin/sulogin /etc/init.d/*(daemon) Lesuperdmoninternet(inetdxinetd) Lerseau(eth0@ipnetmaskroutegv) Lamachine(hostname/etc/host.conf) L'imagedelammoire(pseudofilesystem) Ladtectionmatrielle(hotplug) Lesfichierspriphriques(MAKEDEV) L'horlogedusystme(date) Lesrestrictions(quotaulimitumask) Lapaginationdelammoire(swap) Lescheminsdesexcutables($PATH) Lesfichiersjournauxdusystme(/var/log) Lespolicesdecaractre(fonts) /etc/rc.d/rc.local/etc/rc2.d/s99local Terminauxvirtuels(/etc/tty) L'invitedeconnexion(/etc/passwd) L'interprteurdecommande(/bin/bash) startxxinitxinitrcxdmxmodmapxorg

LOCAL GETTY

XWINDOW

LaConsolePatrickHautrive!;~)2010

57

LasquencedebootduBIOS LemenudeconfigurationduBIOS(setupmenu)estaccessible,selonlestypesdeBIOS,enappuyant dsledmarragesurlatoucheDELouF2.Lenomdelatoucheapproprieestindiqusurlepremier cranaffich.LasquencedebootduBIOS,ousquenced'amorage,peuttremodifiel'intrieur dumenuduBIOS.Unesquenceconventionnellevarechercherlessecteursdebootetlaprsenced'un chargeurdedmarragesuccessivement danslelecteurdedisquette(floppy),lebus USB (usb),le lecteurdeCDROM(cdrom)etenfinsurledisquemasterdelapremirenappeIDE(disk). Parfois,lesmenusduBIOSsontprotgsparunmotdepassequipermetjustementd'empcherles utilisateursd'enmodifierlesparamtres.Laseulemthodepourcontournerlemotdepasse(quipeut treoubli)estd'enleverlapilerondesurlacartemre,afinderinitialiserleBIOS. Lasquenced'amorageduBIOS BIOSBootSectorSequence(PressDelorF2) 1floppy Lesnappesdesdisquesdurs DeuxdisquesdursATAPIpeuventtrebranchssurlammenappeIDE(oulecordonSATA),l'un estconsidrcommeledisquemaitreetl'autrecommeledisqueesclave.Descavalierssurlesdisques oucotdescontrleursdedisquespermettentdeconfigurerlarelation(auto,master,slave)desdeux dispositifssurlammenappe.Ledisquemasterestprioritairepourlecontrleurdedisque,aussiles transfertsdedonnes(enlectureetencriture)sontplusefficient,quandlesdeuxdisquessontinstalls commemastersurlesdeuxnappes(parexemplepourunRAID1mirroring). LesdisquesSCSIsontbranchssurunechaineSCSIdeseptdispositifsquidoittretermineparun bouchon(terminator),etquiestgreparlescontrleursSCSI. En gnral, une carte mre (mother board) prsente deux contrleurs de disques, et donc quatre disquespeuventtreinstallssurlesdeuxnappes.Lescartescontrleursdedisquessupplmentaires sontbranchessurlesbusPCIdelacartemre.Cescartesd'extensionsontdisponiblessurlemarch pourventuellementaugmenterlacapacitdestockage. Laprocdured'initialisation Lasquencedebootouprocdured'initialisationd'unemachinepeutsuivredeuxmthodes.Voici dtailles,lestapesdudmarraged'unsystmeGnuLinux.Cestapesconsistentenunesuccession d'excution,dechargementenmmoire,decontrleetd'affichage.Lersultatdetoutecetteprocdure peuttrevrifidansdesfichiersjournauxetl'aidedecommandes.Lescommandesman7bootet man7bootscriptsprsententunedescriptiondelasquencededmarragedusystmeGnuLinux. LadocumentationHOWTOBOOTPROMPTdtaillelaprocdured'initialisationdusystme.
LaConsolePatrickHautrive!;~)2010

2usb

3cdrom

4disk

58

Lesmthodesoulesprocduresd'initialisationdusystme(mthodesaujourd'huiunifie) LamthodeUNIXSYSTEMVd'AT&T LamthodepourlessystmesdelafamilleBSD Lasquenced'initialisationestlanceparlechargeurdedmarrageetsedrouleexclusivementdansla KernelZone.C'estunpseudoprocessusdePIDgalzroquieffectuelechargementdunoyauetle montage de la racine du systme de fichier. Ce pseudo processus est aussi appelle le swapper (kswapd)ouprocessusnoyau(kernelprocess).Lacommandeman7bootparamdcritlesoptions quipeuventtrepassesaunoyauavantlelancementdel'initialisation. Laprocdured'initialisationdusystmeGnuLinux Bios Post Boot Loader Ramdisk Kernel Init Sysinit Services Internet getty passwd Window phnix reset mbr grub initrd vmlinuz inittab sulogin syslogd xinetd login bash gdm Parexemple,lamachinedmarre,le BIOS chargele MBR quicharge GRUB quichargel'image RamdiskINITRDquichargeVMLINUZquilanceINITquilanceSYSINITetlescriptRC,lesquels lancentlesSERVICESdontlesuperserveurINTERNETetl'interfacegraphiqueX,etquilanceles consolesvirtuellesTTY. Lessquencesdebootrseauxsontutilesquandlespostesnedisposentpasdeleurpropredisquedur. CessquencesutilisentunprotocolerseaupourrecevoiruneadresseIPettrouverleserveurquileur enverratouslesfichiersd'initialisation(DHCP,TFTP,PXE,Etherboot). LerescuebootavecunCDROMd'installation LerescuebootavecunCDROMd'installation(chroot) Reboot PressF1 Rescue PromptShell fdiskl mkdir/mnt/hda5 mount/dev/hda5/mnt/hda5 cat/mnt/hda5/etc/lilo.conf chroot/mnt/hda5 vi/etc/lilo.conf lilo reboot

LaConsolePatrickHautrive!;~)2010

59

lesfichiersd'initialisation Lesfichiersd'initialisationsystme Logging /etc/syslog.conf /etc/logrotate.conf /tmp/install.log /var/log/sulog /var/log/boot.msg(Suze) /var/log/boot.log(RedHat) /var/log/dmesg(Debian) /var/log/message /boot/bootmsg.txt /proc/kmsg /var/log/installer/messages HowtoBootPrompt Lesexemplesdeboot pspid1 ls/etc/init.d;ls/etc/rc* ls/etc/rc.d/init.d runlevel;telinit3 killHUP1 init6 whor man8inetd lsla/etc/rc2.d/S20inetd lsla/etc/rc.d/rc5.d/S99local cat/etc/init.d/inetd|less ls/etc/rc.d/init.d/inetd ls/usr/sbin/in.fingerd ls/usr/sbin/in.ftpd ls/proc shxrc.inet1 ntsysvlevel23 rctabl manhosts_access /etc/init.d/networkingrestart /etc/rc.d/init.d/networkrestart Init /dev/initrd /etc/inittab /etc/init.d/rc /etc/rc.d/rc.local /etc/default/rcS /etc/initlog.conf /etc/init.d/netbase /etc/rc.d/rc.sysinit /etc/rc.config Network /etc/inetd.conf /etc/xinetd.conf /etc/services /etc/protocols /etc/hosts /etc/host.conf /etc/host.allow /etc/host.deny /etc/nsswitch.conf /etc/security /etc/network/interfaces Environnement /etc/sysctl.conf /etc/fstab /etc/mtab /etc/modules.conf /etc/environment /etc/manpath.config /etc/locale.alias /etc/locale.gen /etc/gdm/locale.conf /etc/localtime /etc/timezone /etc/X11/xdm/xdm.config

LaConsolePatrickHautrive!;~)2010

60

LILO LechargeurLILO LechargeurLILO(LinuxLoader)peuttreinstallsurleMBR,surlePBRdelapartitionsystme (racine)ousurunedisquettededmarrage.QuandlechargeurLILOestinstallsurleMBR,iloccupe toutleMBR,ettoutemodificationdelaconfigurationrequirederelancerlacommandelilopourle rinstaller. Lacommande /sbin/lilo permetdercriresurleMBRlecodeduchargeurquandle fichierdeconfiguration/etc/lilo.confatmodifi.LacommandeliloC/etc/lilo.confpermetde spcifierlefichierdeconfiguration. Lorsdulancementduchargeur,leslettresLILOs'affichentprogressivementl'cranpourattesterdu bondroulementdelaprocdure.Quandcen'estpaslecas,certaineslettresseulementapparaissent, indiquant letypededifficults rencontres (LIsignifie,parexemple,quelalimite du1024ime cylindreestatteinte).CescodeserreurssontdocumentssurInternet. LaconfigurationdeLILO LaconfigurationdeLILO Files /etc/lilo.conf /boot/lilo.conf /etc/lilo/lilo.conf /boot/map /boot/boot.b /boot/chain.b /boot/boot.0300MAJOR+MINOR(MBRIDE) /boot/boot.0800MAJOR+MINOR(MBRSCSI) /boot/boot.message.txt /boot/message /usr/share/doc/lilo*/doc/ L'invitedeLILO Desoptionspeuventtrepassesaunoyaulorsdudmarrage,partirdupromptliloboot.L'invite deparamtragedeliloestprsenteaveclestouchesShift+Ctrl+Tab.Cesoptionspeuventgalement trerenseignesdanslefichierdeconfigurationdelilo. lilobootlinuxsingle lilobootlinux3 Pourdmarrerenmodesingle. Pourdmarrerdansleniveau3d'init.
LaConsolePatrickHautrive!;~)2010

Commands lilovt lilob/dev/hda1 liloC/etc/lilo.conf lilou/dev/hda lilor/mnt ddif=/boot/boot0300of=/dev/hdabs=446count=1 mkinitrd/boot/initrd.img

61

lilobootrescue lilobootlinuxbemergency lilobootlinuxether=10,0x210,eth0 lilobootlinuxverbose=5 lilobootmediacheck LesoptionsdeLILO

Pourdmarrerenmodededpannageavecunshellroot. Pourdmarrerenmodesecours. Pourdmarrerenparamtrantunecarterseau. Pourdmarrerenaffichanttouslesmessages. Pourvrifierl'tatduCDROMd'installation(RedHat).

Lesoptionsdelilosontnombreuses,ellespeuventtrerenseignesl'invitedelilooudanslefichierde configuration/etc/lilo.conf. Lesoptionsdelilo(/etc/lilo.conf)etlepromptdelilo(liloboot) rw Pourmonterunsystmedefichierenlecture/criture(readwrite). ro Pourmonterunsystmedefichierenlectureseule(readonly). mem=128M Pourfixer128MgaOctetlammoirevive(memory). append=mem=128M Pourfixer128MgaOctetlammoirevive(memory). append=mem=130496K Pourfixer128MgaOctetlammoirevive(memory). root=/dev/hda5 Pourindiquerlapartitionpourlesystmedefichierracine(root). boot=/dev/hda2 Pourindiquerlapartitionsystmeactiver. ether=9,0x300,0,1,eth0 Pourparamtrerlapremirecarterseau(IRQ,I/O,,,aliaseth0). append=ether=10,0x210,eth0Pourparamtrerlapremirecarterseau(IRQ,I/O,aliaseth0). append=single Pourdmarrerenmodesingleuser. append=hd=683,16,38 Pourfixlesparamtresdudisque(cylinders,heads,sectors). append=hd=64,32,202 Pourfixlesparamtresdudisque(cylinders,heads,sectors). password=secret Pourdemanderunmotdepasseaudmarrage. init=/bin/bash PourlancerleshellBashaprsledmarrage. append=init=/bin/zsh PourlancerunshellZaprsledmarrage. initrd=/boot/initrd.img Pourindiquerlefichierdel'imagedisque(initrd). ramdisk_size Pourfixerlatailledel'imagedisque(initrd). ramdisk=1024ko Pourfixerlatailledel'imagedisque(initrd). panic=30 Pourindiquerleniveaudepanique debug Pourafficherlesinformationsdedbogagedudmarrage. nosmp Pourdsactiverletraitementparalllemultiprocesseurs. prompt Pourproposerl'inviteliloboot. lba32 Pourgrerlesdisquesdegrandecapacit. vga=normal Pourindiquerlacapacitd'affichage. vga=extended Pourindiquerlacapacitd'affichage. linear compact rescue verbose

LaConsolePatrickHautrive!;~)2010

62

Lefichierlilo.conf Le fichier /etc/lilo.conf est compos de deux parties, la premire partie rassemble les options gnrales pour toutes les images, et la seconde partie est constitue des diffrentes images qui apparaitronsdanslemenudedmarrage. Unexempledefichierdeconfigurationdelilo(/etc/lilo.conf) boot install map timeout delay default message verbose password image label root vga initrd append append readonly other label table loader = = = = = = = = = = = = = = = = = = = = /dev/hda /boot/boot.b /boot/map 100 20 linux /boot/message 5 secret /boot/vmlinuz2.4.2 linux /dev/hda5 ask /boot/initrd.img devfs=mount verbose=5 /dev/hda1 windows /dev/hda /boot/chain.b

LaConsolePatrickHautrive!;~)2010

63

GRUB LechargeurGRUB LechargeurGRUB(GrandUnifiedBootLoader)estlechargeurdelagnrationsuivantepourGnu Linux.critparricBoeymen1995.Danslecasd'unemise jour,ilestconseilldeprvoirla dsinstallation de l'ancien Grub et de surtout sauvegarder le fichier de configuration /boot/grub/menu.1st.LechargeurGrubestenpartieinstallsurleMBR,maisleschangementsde configurationsontautomatiquementprisencomptelorsd'unredmarragedelamachine(reboot). Le gestionnaire de dmarrage Grub est compatible avec de nombreux systmes de fichiers qu'il reconnaitetproposespontanmentdanssonmenudedmarrage(MSDOS,FAT16,FAT32,MINIX, EXT2,REISERFS,JFS,XFS,UFS)etilgreparfaitementlechainagesdeschargeurs.Enfin,Grub proposeuneinvitedecommandesinteractivesaudmarragequipermetdemodifierlaconfiguration avantl'initialisationdusystme(#grub+TAB). Lesfichiersdeconfigurationsontplacsdanslerpertoire /boot/grub/*.Lesnumrosde volume identifiant les disques et les partitions commencent partir de zro. Les modifications qui sont apportes au fichier de configuration seront automatiquement prises en compte lors du prochain redmarragedelamachine. LacorrespondanceentrelesnomenclaturesdespriphriquesdesdisquesetcelledeGrub /dev/hda1==>hd0,0 /dev/hda2==>hd0,1 /dev/hda3==>hd0,2 Laconfigurationdegrub Laconfiguration degrubs'effectue,soit enutilisant lacommande grub quiprsentel'invite de commande,soitenmodifiantdirectementl'undesfichiersdeconfiguration/boot/grub/menu.1stou /boot/grub/grub.conf. Lacommande grubinstall permetd'installerlechargeurdedmarrage surleMBR.

LaConsolePatrickHautrive!;~)2010

64

LaconfigurationdeGrub Files /boot/grub/menu.1st /boot/grub/grub.conf /usr/share/doc/grub /usr/share/doc/grub/* */examples/menu.lst /boot/grub/stage1 /boot/grub/stage2 Prompt grub> help kernel(hd0,0) root(hd0,0) boot chainloader(hd0,0)+1 quit grubinstall/dev/hda Commands locategrub /sbin/grub updategrub grubinstall grubfloppy grubmd5crypt locate/grub/i386pc Installation tarxzvfgrub0.5.96.1.tar.gz cdgrub0.5.96.1 ./configure make makeinstall updatedb cp/boot/vmlinuz/floppy/boot

Lefichiergrub.conf Lefichierdeconfigurationestsoit/boot/grub/menu.1st(lirel'extensionfirstaveclechiffreun),soit /boot/grub/grub.conf. UnexempledefichierdeconfigurationdeGrub(/boot/grub/grub.conf) defaults0 timeout10 splashimage=(hd0,4)/boot/grub/splash.xpm.gz colorwhite/blueblue/green # title linux root (hd0,4) kernel /boot/vmlinuz2.4root=/dev/hda5roquietsplashdevfs=nomount initrd /boot/initrd.img savedefault boot # title linuxinitrd root (hd0,0) kernel /boot/bzImageroot=/dev/loop0initrd=/initdisk.gz initrd /initdisk.gz # title Otheroperatingsystems: root title dos root (hd0,0) makeactive savedefault chainloader +1

LaConsolePatrickHautrive!;~)2010

65

Unexemplegrub.conf UnautreexempledefichierdeconfigurationdeGrub(/boot/grub/grub.conf) # defaults0 timeout10 splashimage=(hd0,4)/boot/grub/splash.xpm.gz colorwhite/blueblue/green # title linux root (hd0,4) kernel /boot/vmlinuz2.4root=/dev/hda5roquietsplashdevfs=nomount initrd /boot/initrd.img savedefault boot # title win98 hide (hd0,0) hide (hd0,1) unhide (hd0,2) hide (hd0,3) root (hd0,2) makeactive chainloader +1 # title windows2000 hide (hd0,0) hide (hd0,1) hide (hd0,2) unhide (hd0,3) root (hd0,3) makeactive chainloader +1 # title floppy root (fd0) chainloader +1 # LepromptdeGrub LepromptdeGrub(grub>)s'obtientdansunterminalvirtuelenlanantlacommandegrubouen
LaConsolePatrickHautrive!;~)2010

66

pressantlatoucheCquandlemenuduchargeurseprsentel'cranlorsdudmarragedusystme.Les commandesinternesGrubsontaffichesenpressantlatoucheTaboul'aidedelacommandeinterne grub>helpall. #Lacrationd'unedisquettedebootpourWindowsavecGrub. reboot #PressCditingtheGrubcommandline hide(hd0,0) hide(hd0,1) #InsertFloppyforBoot chainloader(fd0)+1 reboot #L'installationdelapartitionWindowsdansGrub reboot root(hd0,2) makeactive chainloader+1 boot reboot #L'installationduchargeurGrubsurlePBRaprsl'installationd'unnouveauGnuLinux reboot PressCfortheGrubprompt root(hd0,4) kernel/boot/vmlinz2.4.19root=/dev/hda5 boot quit reboot #Rebootsurl'ancienGnuLinuxpourmodifierlefichierdeconfiguration/boot/grub/menu.1st. vi/boot/grub/menu.1st title linuxnew root (hd0,4) kernel /boot/vmlinuz2.4.19root=/dev/hda5roquiet chainloader (hd0,4)+1 LadisquettestagedeGrub Lestage1correspondausecteurdebootdeladisquette(les512premiersoctets)etlestage2 s'installelasuitepourconstituerunedisquettedebootavecuneimageprpare.Lesstagessont aussiprsentdanslerpertoirededmarragedeGrub/boot/grub/stage1et/boot/grub/stage2.La commandesetupdeGrubinstallelechargeursurleMBR.

LaConsolePatrickHautrive!;~)2010

67

locate/grub/i386pc cd/lib/grub/i386pc hd/boot/grub/stage2|less ddif=stage1of=/dev/fd0bs=512count=1 ddif=stage2of=/dev/fd0bs=512seek=1 reboot grub helpall find/boot/grub/stage1 root(hd0,0) setup(hd0) reboot fdiskl LadisquettedebootdeGrub Ladisquettedebootestcre,puislaconfigurationdeGrubestreplacdansl'tatinitial. mke2fs/dev/fd0 mkdir/mnt/floppy;mount/dev/fd0/mnt/floppy mkdirp/mnt/floppy/boot/grub cp/lib/grub/i386pc/stage1/mnt/floppy/boot/grub cp/lib/grub/i386pc/stage2/mnt/floppy/boot/grub grub root(fd0) setup(fd0) quit reboot grub root(hd0,0) kernel/boot/vmlinuzroot=dev/hda1roquiet boot quit

LaConsolePatrickHautrive!;~)2010

68

INITRD LedmarrageINITRD Ledmarragedusystmepeuttreacclrenchargeantenmmoireuneimagedisque(RamDisk) contenantunnoyauprovisoire,uneracineetlesmodulesapproprispourpiloterlesdisques(SCSI)ou lessystmesdefichiers(EXT3).Lechargeurdedmarrageestconfigurpourretrouversurledisque cetteimageetlachargerenmmoire.C'estlaprocdureinitrd(InitRamDisk)quiensuitechargeen mmoirelevritablenoyauetmontelevritablesystmedefichieretprsentel'invitedeconnexion. LedmarragedusystmeavecInitrduneimagediskenmmoire(RamDisk) Lefichierspcialdepriphrique/dev/initrd. L'imageinitrd/boot.initrd.img2.6.105686. Lacartedusystme/boot/System.map2.6.105686. Laconfigurationdesoptionsdecompilationpourlenoyau/boot/config2.6.105686. LenoyauGnuLinux/boot/vmlinuz2.6.105686. Lerpertoire/usr/share/initrdtoolsrassembledesfichiers. Lacommandemkinitrdpermetdecrerl'imageinitrdavec/etc/mkinitrd/mkinitrd.conf. Lacommandemkcramfspermetdecrerunsystmedefichierscompressspourlammoire. Lesfichierspourinitrdsontplacsdanslerpertoirededmarrage. LeMapInstallerrenseignelechargeursurlesadressesphysiquesdesblocsdudisque.Cesadresses physiquesdpendentdelagomtrieetdupartitionnementdudisque. Lesexemplesinitrd mkdir/ramdisk cat/etc/lilo.conf image=/boot/vmlinuz label=linuxramdisk ramdisk=60 lsl/dev/ram* mke2fs/dev/ram1 mount/dev/ram1/ramdisk;mount df/ramdisk

LaConsolePatrickHautrive!;~)2010

69

INITTAB Lepseudoprocessus LeprocessusinitestlancparlepseudoprocessusdePIDzroquiaprislamainaprslechargeurde dmarrage(grub)etquiadjchargenmmoirelesbasesdusystmeGnuLinux,dontlenoyau (vmlinuz),lesmodulesetlespilotesintgrsaunoyau(kmod),lesystmedefichierprincipal(root)et lapiledeprotocolerseau(tcpip). C'estdonclepseudoprocessusquis'estoccupduchargementdunoyau(kernel),etquipasselerelais enlanantleprocessusinitpourlaphased'initialisationdusystme.Leprocessusinitconsulteson fichierdeconfiguration/etc/inittabetpoursuitl'installationetlaconfigurationdusystme. L'initialisationdusystme L'initialisation du systme utilise largement les scripts pour la configuration et le lancement d'excutable.Touslesprocessusdusystmesontlancspartirduprocessusinitquiportetoujours lePID1.Leprocessus/sbin/initestenquelquesorteleparentdetouslesautresprocessus.Comme lesprocessusenfantssontinterrompusquandleprocessusparentquilesagnrsestarrt,sile processusiniteststopp,alorstouslesystmeeststopp. Selonlesdistributions,lesscriptsd'initialisationetlesfichiersdeconfigurationnesontpastoujours placsaummeendroit(/etc,/etc/init.d,/etc/rc.dou/etc/rc.d/init.d),maisilsfigurenttoujoursdansle rpertoiredeconfiguration(/etc).Eneffet,chaquedistributioncrel'arborescencequiluisemblela plusapproprie,etsouventlesfichiersnesontquedes liens symboliquesversd'autresfichiersdans d'autresrpertoires. Leprocessusinit Le processus init lance le script sysinit (/etc/init.d/rcS) qui lance les scripts systmes (/etc/rcS.d/*), puis, il lance ventuellement le mode single user (sulogin), ou les scripts Run Commandcorrespondantauniveaud'initialisation,etenfinillancelaprocduredeconnexion(getty) quiprsenteraunpromptdeloginsurlesterminauxvirtuels(Ctrl+Alt+F1Ctrl+Alt+[F6F12]). Lefichier /etc/inittab dfinit leniveaud'initialisation (initdefault),lasquencedecontrledes touchesCtrl+Alt+Delquirenvoilacommande/sbin/shutdown,lecomportementencasdeperte d'alimentation(power)etlebasculementversuneventuellealimentationdesecours(onduleur).

LaConsolePatrickHautrive!;~)2010

70

Laprocdured'initialisationdusystmeGnuLinux init sysinit single runcommand services Ctrl+Alt+Del powerwait TTY /etc/inittab /etc/init.d/rcS /etc/init.d/rc powerfailnow getty initdefault /etc/rcS.d/* sulogin /etc/rc5.d/[KS]??* /etc/init.d/* sbin/shutdown powerokwait login Lesmthodesinittab Les mthodes inittab permettent de configurer le comportement des commandes dfinies dans /etc/inittab.Lesmthodessontplacesdanslatroisimecolonned'unelignedeconfiguration. Lesmthodesdufichier/etc/inittab initdefault sysinit ctrlaltdel respawn once boot bootwait wait kbrequest powerfail powerwait powerokwait powerfailnow ondemande off Silavaleurestabsente,leprocessusinitdemanderaleniveauaappliquer Lamthodepourlancerlescriptsysinit LamthodepourconfigurerlecomportementdestouchesCtrl+Alt+Del Lacommandeestrelancequandcellecis'esttermine(promptdelogin) Lacommanden'estexcutqu'uneseulefoischaqueinitialisation Lacommanden'estexcutqu'audmarragedusystme Lacommanden'estexcutqu'audmarrageetinitattendlesignaldefin Lacommandeestexcutetleprocessuspreattendlesignaldefin Lacommandequipermetdeconfigurercertainestouches(KeyboardMagicKeys) LamthodepourenvoyerlesignalSIGPWRinitencasdeperted'alimentation Lamthodepourbasculerl'alimentationsurunonduleur(UPS) Lamthodepourbasculerdenouveaul'alimentationenmodenormal

Lefichierinittab Lefichier/etc/inittabestlefichierdeconfigurationduprocessusinit.Cefichierfonctionneligne ligne,c'estdirequ'chaquelignecorresponduneconfiguration.Leslmentsd'unemmelignesont sparsparlecaractresparateurconventionneldudeuxpoints(:),dterminantainsidescolonnes. Chaquecolonneestconstituedummetypededonnes. Dans la premire colonne, un ou deux caractres forment un identifiant unique pour la ligne (identificator). Dans la deuxime colonne, les chiffres correspondent aux niveaux d'initialisation concerns(runlevel).Quandcettedeuximecolonneestvide,celasignifiequetouslesniveauxsont concernsparcetteligne.Danslatroisimecolonne,figurelesmthodesappliques(method).Dansla
LaConsolePatrickHautrive!;~)2010

71

quatrime colonne s'inscrit ventuellement le chemin absolu de la commande (command). L'administrateur peut dfinir d'autres lignes de configuration, afin d'automatiser certaines tches chaquedmarrage. LacommandetelinitQpermetunerelecturedufichier/etc/inittab. Lefichier/etc/inittab Identificator id si 0 c1 1 T1 ~~ l5 z6 ca cx pf pn po pr px ud x runlevel 3 S 0 12345 2345 23 S 5 6 12345 12345 method initdefault sysinit wait respawn respawn respawn wait wait respawn ctrlaltdel ctrlaltdel powerwait powerfailnow powerokwait powerokwait powerfail once respawn command /etc/init.d/rcS /etc/rc.d/rc /sbin/mingettytty1 /sbin/getty38400tty1 /sbin/gettyLttyS19600vt10 /sbin/sulogin /etc/init.d/rc5 /sbin/sulogin /sbin/shutdownt1arnow /sbin/shutdownt3Rfnow /etc/init.d/powerfailstart /etc/init.d/powerfailnow /etc/init.d/powerfailstop /sbin/shutdownc /sbin/shutdonwhf+2 /sbin/update /etc/X11/prefdm

12345

Lesniveauxd'excution Le niveau d'initialisation ou niveau d'excution est choisi au boot ou dfinit dans le fichier /etc/inittab.Lacommande runlevel permet deconnaitrele niveauencours.Les commandes initettelinitpermettentdechangerleniveaud'initialisation,sansrebooter,alorsquelesystmea djdmarr.Achaqueniveaucorrespondunecertaineconfigurationdusystmeetdesservicesqui sontgnralementdesserveursouDAEMON(DiskAndExecutionMonitor). Laconfigurationdesniveauxd'initialisationpeutchangerd'unedistributionl'autre,maisengnral, leniveau0estceluidel'arrtdusystme(shutdown),leniveau1estddiaudpannage(single),le niveau5estceluidumodegraphique(xserver),etleniveau6celuiduredmarragedelamachine

LaConsolePatrickHautrive!;~)2010

72

(reboot).Lesniveaux4,7,8et9sontlaissslibrespourlapersonnalisationdel'initialisation,etles niveauxcorrespondantsdeslettres(S,s,a,b,c)sontdespseudoniveaux. Lesniveauxd'initialisation(runlevel)/etc/inittab(initdefault) 0 1 2 3 4 5 6 7 8 9 S,s a b c shutdown single multiuser network xwindow reboot Pourarrterlesystme Pourdmarrerenmodesingleusersansmontagedefilesystem(console) Pourdmarrerenmodemultiutilisateurs,maissanslerseau(console) Pourdmarrerenmodemultiutilisateurs,maisaveclerseau(console) Pourlancerleserveurgraphiqueenmodemultiutilisateuraveclerseau Pourredmarrerlamachine

single

Synonymeduniveau1pourdmarrerenmodesingleuser(console)

Lesexemplesinit uptime;update;runlevel updatedb ls/etc/init.d;ls/etc/rcS.d;ls/etc/rc5.d find/etcname"*boot*" find/etcname"*rc*"|less find/etcname"*S*"|less find/etcname"*K*"|less /etc/init.d/rc2 init2 telinit2 chkconfiglisthttpdstart sysctlA telinitt103 telinitQ grep^id:/etc/inittab shutdownr6;shutdownhnow

LaConsolePatrickHautrive!;~)2010

73

SERVICES Leniveaud'initialisation Chaqueniveaud'initialisation(1,2,3,4,5)estconfigurpourlancerdesscripts(Start ou Kill).Le scriptrcrcupreleniveaud'initialisation(initdefault)etlesnomsdesfichiersdanslerpertoire d'initialisationcorrespondant(/etc/rc5.d/*),puisillancelesdiffrentsservicesquis'ytrouvedans l'ordrealphabtique.L'excutionduscriptrcconduitaulancementdes services correspondants au niveaud'initialisation. Ainsi,chaqueniveaucorrespondunecertaineconfigurationdusystmeetdesservices(daemon). Selonleniveaud'initialisation,choisitaubootaveclepromptduchargeurouparamtrdanslefichier /etc/inittab, le systme ne prsentera pas les mmes caractristiques, et certains services seront automatiquementlancstandisqued'autresneleserontpas. Lesscriptsd'initialisation Lecomportementduprocessusinitestdfinidanslefichier/etc/inittabquipermetdeconfigurer le niveau d'initialisation du systme (runlevel). Le fichier /etc/inittab, dfinit le lancement des scriptsd'initialisation(sysinit, rc et rc.local)quivonts'occuperduchargementdesdiffrents services,etaussi,lelancementdelaprocduredeconnexiondel'utilisateurausystme. Lesscriptsd'initialisationsontaussiappelslesscriptsRC(ScriptsRunCommand)parcequecesont essentiellementdesscriptsquipermettentdeslectionnerlescommandesquivonttrelancespourle niveaud'initialisationchoisit.Parmilesdiffrentsservicesquisontlancsparlesscriptsd'initialisation setrouventventuellement,lesuperserveurinternet(inetdorxinetd)etl'interfacegraphique(xinit). Lacentralisationdesscripts Les scripts d'initialisation sont centraliss dans un seul rpertoire (/etc/init.d/*). Chaque niveau d'initialisation possde sont propre rpertoire, identifi par le chiffre correspondant son niveau (/etc/rc5.d/*).Al'intrieurdechacundecesrpertoiresd'initialisationfigurentdesliens(link)qui pointentverslescriptd'initialisationquiluicorrespond. C'estleprocessusinitquilancelescript/etc/init.d/rc,lequelenfonctionduniveaud'initialisation choisit(initdefault),valancerlesunsaprslesautreslesscriptsd'initialisationsetrouvantdansle rpertoired'initialisation.

LaConsolePatrickHautrive!;~)2010

74

Lescriptruncommand Lesnomsdesliensquifigurentdanschacundesrpertoiresd'initialisationcommencentsoitparunK (kill), soit par un S (start) pour indiquer au script Run Command (/etc/init.d/rc) si le service correspondantdoittre,pourceniveaud'initialisation,respectivementarrteroudmarrer. Ensuite,lenomdesliensestcomposdedeuxchiffresindiquantlaprioritd'excution.Parexemple, dansleniveauzrod'unedistributionDebian(/etc/rc0.d/*),lescriptcorrespondantaugestionnaire d'affichage(gnomedisplaymanager)K01gdmserastoppenpremier,etlescriptcorrespondant l'arrtdusystme(/sbin/halt)S90haltseralancendernier. Engnral,lesscriptsdedsactivationd'unservice(K)sontplacsavantlesscriptsd'activationd'un service(S).Ilfautprendreenconsidrationquel'administrateurpeutchangerleniveaud'initialisation aveclacommande init.Lepassaged'unniveaul'autredoitsuivrelalogiquequelesservicesdu niveauprcdentsontd'aborddsactivs(aveclesscriptsK),etqu'ensuiteseulement,sontactivsles servicescorrespondantsauniveaudemand(aveclesscriptsS). L'enchainementdesscriptsd'initialisation init RunCommand Services > /etc/init.d/* /etc/inittab > initdefault5 > /etc/init.d/rc > /etc/rc5.d/* > K01S99 L'emplacementdesscripts Selon les distributions, l'organisation des scripts Run Command est diffrente. Les chemins des rpertoires d'initialisation, contenant les liens et l'ordre dans lequel sont lancs les services sont susceptiblesdevarierselonlesdistributions. L'emplacementdesscripts(RunCommand) /etc/rc.d/* /etc/rc.d/init.d/* /sbin/init.d/* /etc/init.d/* Lelancementdesservices Lesscriptsdechaqueniveaud'initialisationnesontlancsqu'uneseulefois,lorsdudmarrageoulors du changement de niveau. Chaque script va lancer une commande, correspondant au service qu'il propose, et cette commande peut tre, soit une commande de configuration du systme, soit une commandelanantunserveurentchedefond.Lesservices oules serveurs(daemon)sontaussi appelsdessoussystmes(subsystem),etilsattendentdepouvoirrendreserviceausystmeouaux
LaConsolePatrickHautrive!;~)2010

Slackware RedHat SuSEupto7 Debian,SuSE8

75

utilisateurs. LelancementdesservicesutilisentlesscriptsRunCommandquiacceptentselonlescasplusoumoins de paramtres (start, stop, status,restart,reload, forcereload).Les scripts Run Command sont lancsl'initialisationavecleparamtrestopquandlenomcommenceparunK(kill),etavecle paramtrestartquandlenomcommenceparunS(start).Ainsi,lacommande/etc/init.d/networking restartpermetd'arrterlerseau(stop)etdelerelancer(start)toutdesuite,prenantenconsidration lanouvelleconfigurationdesinterfacesrseaux.Lacommande chkconfig permetdeconfigurerle dmarragedesservices.LacommandeservicechezRedHatpermetgalementdegrerl'activation desservices.Lacommande redhatconfigserviceschezRedHatpermetdegrerlaconfiguration desservices.ChezSuSEchaqueservicepeuttrerelancouarrtavecunscriptddiquisetrouve dans un rpertoire spcialis, lequel figure dans le PATH de l'utilisateur root (/usr/sbin/rcnfs restart).

LaConsolePatrickHautrive!;~)2010

76

WRAPPERTCP LeserviceInternet Leserviceinternetestlancparlescriptruncommandduprocessusinit.Leserviceinternetestaussi appel le dmon internet. Un dmon (francisation de l'anglais daemon) est un serveur qui en permanenceestl'couted'unedemandedeservice.C'estunprogrammequitourneenpermanenceen tchedefond(background)etquivrifiergulirementsiunedemandeluiestadresse. Ledmoninternetestunserveurquirestel'coutedetouteslesdemandesdeconnexionrseauetqui surveillelesportsdesrequtestcpprovenantdetoutes lescartesrseaux.Quandunedemandede connexion est dtecte, le serveur internet l'examine et la redirige vers le service appropri, en l'occurrence,versunautreserveurspcialisdansletypedeconnexionenquestion.Ainsi,leservice internetestaussiappellewrappertcp,parcequ'ilcoutetouteslesconnexionstcpetlesredirigevers leserveurapproprienfonctionduportetduprotocoledelademande. Lesserveursrseauxquinesontpasgrsparledmoninternetdoiventtreprotgsparunparefeu (firewall)comme iptables quiassureunfiltragedes requtes auniveaudes ports (STATEFULL INSPECTION).Unserveurrseaupeutavoirplusieursnumrosdeportetplusieursprotocoles,etles numros de port des services standards peuvent tre changs (/etc/services). Les conventions d'attributiondesnumrosdeportsauxservicesrseauxsontmaintenuesparl'organisationIANA. Lewrappertcp Leserviceinternet(internetdaemon)estaussiappellewrappertcp.LedmonInternetestappel wrapper TCP parce qu'il enveloppe toutes les demandes de connexion de la pile de protocoles rseaux TCP (TransportControlProtocol).Ledmoninternetsurveillelesdemandesdeconnexion provenantsdel'extrieuretlesredistribuentauxservicesouserveursrseauxcorrespondants.Uneliste descorrespondancesentreletypedeservicesrseauxetlenumrodeportestconsultedanslefichier /etc/services. Par exemple, le dmon internet est l'coute sur une interface rseau et capte une demande de connexionFTP,illancealorsuneinstancedeserveurFTPenmmoire,puis,ilrpercutelademandede connexionauserveurFTPquilatraite.Ainsi,unseuldmonestperptuellementenattentededemande deconnexion(unseulprocessus),etlesserveursnesontlancsquequandilssontncessaires.

LaConsolePatrickHautrive!;~)2010

77

LemcanismedeWrappertcp LeWrappertcpgrelaplupartdestypesdeconnexionprovenantdel'extrieur.Enfait,celadpendsile serviceatintgrauWrappertcp,ous'ilestlancsparment.Lesconnexionsdistantespermettent deseconnecterunservicesurunsystmedistance(remote),vialerseau.C'esttrspratiquepour l'administrationetlaconfigurationpartird'unseulposte,sanssedplacerphysiquement. LemcanismedeWrappertcp Socket+Port (Requteclient) Inetd WrapperTCP Service Exif (Ecouteserveur) (Redirection) (Lancementdudmon) (Findeconnexion)

Lescommunicationsrseaux LescommunicationsrseauxutilisentlessocketetlesRPC.Lessocketssontdesfichiersspciauxqui permettent l'change de donnes dans une connexion rseau entre un client et un serveur (communicationinterprocessusdistant).Les RPC (RemoteProcedureCall)quiutilisentleformat XDRpermettentgalementunchangededonnesrseaux.Parexemple,leserviceNFS(NetworkFile System)departagedefichiersutilisentlePortmapperetemploientlesRPC. Lescommunicationsrseaux RPC(formatXDR) Socket(remoteprocess) TCPIP(piledeprotocoles)

Lacommanderpcinfopermetd'interrogerlesserveursRPC. Lefichier/etc/rpcestunfichierquiassocielesnomsetlesnumrosdesprogrammesRPC. Lefichier/etc/portmap L'initialisationdesinterfaces Audmarragedusystme,l'initialisationdesinterfacesrseauxs'effectuejusteavantlelancementdu serviceInternet.Lacommande ifconfig permetlaconfigurationdesinterfacesrseaux(lescartes rseauxEthernetquiportentlenomdeeth0,eth1). LesfichiersdeconfigurationdesinterfacesrseauxdiffrentselonlesdistributionsGnuLinux.Par exemple, la configuration des interfaces rseaux peut provenir du script /etc/rc.d/rc.inet1 et le lancementdudmoninternetinetdpeutprovenirduscript/etc/rc.d/rc.inet2.

LaConsolePatrickHautrive!;~)2010

78

Lesinstancesdeserveur Selonlesconfigurations,ledmonInternetpeuttremultithread,c'estdirequ'unedemandede connexioncorrespondlelancementd'uneinstanceduservice(unprocessuspardemande). Acontrario,ledmonInternetpeuttreconfigurensinglethreadpourlanceruneinstancelorsdela premiredemande,puistransmettrelammeinstance,lesdemandessuivantes (unprocessuspar service). Lesdmonsinternet Deuxdmonsinternetsesontsuccds,ledmon inetd quiestcommunmentappelleserveur internet,etledmonxinetd,quiestplusrcent,etquiestaussiappellesuperserveurinternet.Les deux services internet proposent le mme principe d'coute et de redirection des demandes de connexion(wrappertcp). Ledmoninternetinetd Ledmoninternetinetdestunservicequilanceleserveurtcpd,lequels'occupederedirigerles demandesdeconnexions(wrappertcp).Lefichierdeconfigurationdeinetdest/etc/inetd.conf. Lacommandemaninetddonneunedescriptionduserviceinternet. Lacommandemanupdateinetdexpliquecommentajouterdesservicesrseauxaudmoninternet. LaconfigurationdudmonInternetInetd Commands /usr/sbin/inetd /usr/sbin/tcpd updateinetd Files /etc/inetd.conf /etc/init.d/inetd

Lesuperdmoninternetxinetd Lesuperdmoninternetxinetd(extendedinetd)estunservicequiredirigeluimmelesrequtes tcp,etquiintgrelewrappertcp,ilestcompatible IPV6 etilgrelesjournaux(log).Lefichierde configurationdexinetdestxinetd.conf. Lacommandeinetd2xinetdpermetd'voluerdudmoninternetverslesuperdmon.

LaConsolePatrickHautrive!;~)2010

79

LaconfigurationdudmonInternetInetd Commands xinetd inetd2xinetd Lefichierservices Lefichier/etc/servicesfaitlacorrespondanceentrelenomduservicerseauetlenumrodeportqui luiestattribuofficiellementparl'IANA(InternetAssignedNumbersAuthority).Lesrequtespeuvent utiliserlesprotocolestcpouudp. Files /etc/rc.d/xinetd.conf /etc/rc.d/xinet.d/*

LaConsolePatrickHautrive!;~)2010

80

Lesprincipauxservicesrseauxtcpetleurnumrodeportattribusparl'IANA(/etc/services) daytime netstat ftpdata ftp ssh telnet smtp time nameserver whois domain bootps bootpc gopher finger www link kerberos hostnames rtelnet pop3 sunrpc auth sftp uucppath nntp ntp imap2 mailq irc ipx imap3 rpc2portmap clearcase ldap https isakmp 13/tcp 15/tcp 20/tcp 21/tcp 22/tcp 23/tcp 25/tcp 37/tcp 42/tcp 43/tcp 53/tcp 67/tcp 68/tcp 70/tcp 79/tcp 80/tcp 87/tcp 88/tcp 101/tcp 107/tcp 110/tcp 111/tcp 113/tcp 115/tcp 117/tcp 119/tcp 123/tcp 143/tcp 174/tcp 194/tcp 213/tcp 220/tcp 369/tcp 371/tcp 389/tcp 443/tcp 500/tcp ipp exec biff login who shell syslog printer talk ntalk route timed tempo courier conference netnews netwall gdomap uucp klogin kshell nntps ldaps webster rsync ftpsdata ftps telnets imaps ircs pop3s 631/tcp 512/tcp 512/udp 513/tcp 513/udp 514/tcp 514/udp 515/tcp 517/udp 518/udp 520/udp 525/udp 526/tcp 530/tcp 531/tcp 532/tcp 533/udp 538/tcp 540/tcp 543/tcp 544/tcp 563/tcp 636/tcp 765/tcp 873/tcp 989/tcp 990/tcp 992/tcp 993/tcp 994/tcp 995/tcp socks kazaa nessus lotusnote ingreslock kermit radius unixstatus logserver remoteping cvspserver venus mon dict mysql nut radminport rfe xmppclient xmppserver postgresql x11 gnutellasvc fontservice hkp 1080/tcp 1214/tcp 1241/tcp 1352/tcp 1524/tcp 1649/tcp 1812/tcp 1957/tcp 1958/tcp 1959/tcp 2401/tcp 2430/tcp 2583/tcp 2628/tcp 3306/tcp 3493/tcp 4899/tcp 5002/tcp 5222/tcp 5269/tcp 5432/tcp 6000/tcp 6346/tcp 7100/tcp 11371/tcp kerberos4 swat linuxconf poppassd spamd xtel frox fax hylafax rplay nsca mrtd canna sane ircd zopeftp webcache tproxy xinetd zope amanda xpilot 750/tcp 901/tcp 98/tcp 106/tcp 783/tcp 1313/tcp 2121/tcp 4557/tcp 4559/tcp 5555/tcp 5667/tcp 5674/tcp 5680/tcp 6566/tcp 6667/tcp 8021/tcp 8080/tcp 8081/tcp 9098/tcp 9673/tcp 10080/udp 15345/tcp

LaConsolePatrickHautrive!;~)2010

81

Lesexemplesdeinetd less/etc/services man8inetd man8tcpd man8updateinetd man8xinetd man5xinetd.conf man5xinetd.log man5host_access less/etc/init.d/inetd lsl/usr/sbin/in.telnetd itox echoALL:ALLEXCEPTlocalhost>/etc/hosts.deny cat/etc/hosts.allow grep^ftp/etc/inetd.conf /etc/rc.d/init.d/inetrestart echotelnetstreamtcpnowaitroot/usr/bin/tcpdin.telnetd>>/etc/inetd.conf tailf/var/log/secure telnetlocalhost echoin.telnetd:ALLEXCEPTLOCAL>>/etc/host.deny echoin.telnetd:.free.org>>/etc/host.allow pingc1W2xxx.xxx.xxx.xxx Lesliens http://aplawrence.com/Troubles/network_troubleshooting.html

LaConsolePatrickHautrive!;~)2010

82

LOGIN L'invitedeconnexion A l'issue de l'initialisation, le systme prsente en gnrale une invite de connexion. L'invite de connexion peut tre, soit une invite de connexion sur un terminal, soit l'affichage graphique d'ouverture de session. L'utilisateur renseigne alors son login (le nom de connexion ou de son comptefigurantdanslefichier/etc/passwd),puislemotdepasseassoci(conservdanslefichier /etc/shadow). Quand c'est toujours le mme utilisateur qui se sert de la mme machine, le gestionnairedesessiongraphiquepeuttreconfigurdetellesortequel'ouverturedesasessionsoit automatique,etquelebureaus'affichedirectement. Lesmodesdeconnexion Lesmodesdeconnexiondpendentduniveaud'initialisationetdelalocalisationdusystme.Aulogin, le noyau ouvre automatiquement les fichiers spciaux pour le clavier et l'cran (respectivement l'entreetlasortiepardfautdesprocessus). Lesmodesdeconnexion(login) Laconnexionenmodeterminalaveclacommandegetty LaconnexionenmodegraphiqueavecleDisplayManager(gdm) Laconnexiondistante(remote)enmodeclientserveuraveclacommandessh Laconnexionenmodeterminal Audmarrage,leprocessusinitiallancetouslesscripts quisontattachsauniveaud'initialisation (runlevel).Laconduiteduprocessusinit(PID=1)estdfiniedanslefichier/etc/inittab.Enfin de parcours, le processus init lance la procdure de connexion avec la commande getty qui prsentel'invitedeconnexion. Leprocessusdelacommandegettyseraautomatiquementrelancpourproposerdenouveaul'invite de connexion si celleci choue ou si l'utilisateur se dconnecte (directive respawn du fichier /etc/inittab). La commande getty passe la main la commande login qui procdera l'authentificationdel'utilisateur,etquiellemmepasseralamainaushell(leshelldel'utilisateur dfinitdanslefichier/etc/passwd). Lacommandeloginrcuprelenomdel'utilisateuretlemotpassesaisiqu'ellevacrypteravecla commandecryptpourlecompareravecceluiquicorrespondaunomdel'utilisateur(/etc/shadow) l'aidedelacommandediff.Silavrificationestprobante(etpassslesautrescontrlessurl'accs auterminal,commelesfichiers/etc/securetty,/etc/nologinet/etc/login.defs;),lacommande
LaConsolePatrickHautrive!;~)2010

83

login continue en affichant le message du jour (/etc/motd pour message of the day et /etc/issue),l'avertissementmailsilaboitecontientunmessagenonlu,etenfin,s'ilsexistent,la commande login interprte l'environnement contenu dans le fichier de profile standard (/etc/profile)etlesfichiersdeprofilepersonnelsdel'utilisateur(~/.profile,~/.bash_profileet ~/.bashrc). Leshellbashprendlerelaisenaffichantl'invite(prompt)dontl'aspectestdfinidanslesvariables d'environnement$PS1,$PS2et$PS3.LeshellbashestleshellpardfautdeGnuLinux.Leshell resteenattentedescommandesdel'utilisateurjusqu'cequeceluicifrappeCtrl+Dpourinterrompre leprocessusdushellousaisisselacommandeexitquiproduitlemmeeffet.Touteslescommandes validesparl'utilisateursontdesgrespardesprocessusenfantsdeshell,ettouslesprocessusenfants dushellsontstoppssileprocessusdushelleststopp. Laprocdured'authentificationlabasedescomptes init /etc/inittab getty /etc/passwd login /etc/shadow crypt /etc/motd bash ~/.profile exit ~/.bashrc

Lecontrledesconnexions Le contrle des connexions va bien audel de l'authentification la base des comptes et de la vrificationdumotdepassedanslesfichiers/etc/passwdet/etc/shadow.D'autrescontrlesont ventuellementlieuselonlaconfiguration. Enfait,souventdescontrlessupplmentairesseproduisentquandlefichiercorrespondantestprsent aubonendroitdansl'arborescence.Quandlefichiern'existepas,lecontrlen'estpaseffectu.La procdured'authentification est galement lemoment propicepourconfigurer l'environnement de l'utilisateur. Laprocduredeconnexionetdeconfigurationdel'environnementdel'utilisateur Password /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/netgroup /etc/nologin /etc/login.access /etc/porttime /etc/pam.d/login /etc/security/* Terminal /etc/securetty /etc/usertty /etc/terminfo /etc/termcap /etc/gettydefs /etc/ttytab /etc/issue /etc/motd /boot/bootmsg.txt /usr/games/fortune Environment /etc/shells /etc/bash_completion /etc/login.defs /etc/environment /etc/sysctl /etc/profile /etc/bash.bashrc /etc/limits /etc/skel /etc/aliases /etc/sudoers 84 Locale /etc/locale.alias /etc/locale.gen /etc/gdm/locale.conf /etc/profile.d/lang.sh /etc/localtime /etc/alternatives /etc/magic /etc/timezone Profile ~/.login ~/.profile ~/.bash_profile ~/.bash_login ~/.bash_history ~/.bashrc ~/.Xsession ~/.Xdefaults ~/.Xinitrc ~/.signature ~/.bash_logout

LaConsolePatrickHautrive!;~)2010

Lesjournauxdeconnexion Lesjournauxdeconnexionsontengnralenregistrsdanslerpertoire/var/log/*.Ilspermettentde conserver une trace des tentatives de connexion et devraient tre rgulirement consults par l'administrateur du systme. Lors d'une premire connexion, la suite d'une installation, l'administrateur peut profiter de la consultation des journaux qui retracent le droulement de la procdure d'installation. De mme, chaque dmarrage du systme, des journaux de boot ont enregistrslesvnementsdelaprocdured'initialisationdusystme. Lesjournauxd'installation,dedmarrageetdeconnexion Installation /var/log/installer/messages /tmp/install.log /root/anaconda.ks.cfg /proc/kmsg Boot /var/log/message /var/log/boot.msg /var/log/boot.log /var/log/dmesg GnuLinux Suze RedHat Debian Login /var/log/wtmp /var/log/secure /var/log/lastlog /var/log/sulog /var/log/dmesg /var/log/utmp /var/log/btmp (last) (login) (lastlog) (su) (dmesg) (who) (lastb)

Lesparamtreslocaux Lesparamtreslocauxsontletemps,l'heureouladate,lazonegographique TZ (Time Zone),la langue(locales)... Lescommandespourlesparamtreslocaux Commands date timeadmin times clock hwclock cal Zone tzconfig tzfile tzsetup tzselect zdump zic Time ntp ntpkeygen ntpdate ntpdc ntpq ntpsweep Language echo$TZ loadkeyfr Profile

Lesexemplesdelogin loadkeyfr unamea;runlevel echo$SHELL;echo$PS1;echo$BASH_ENV chsh env


LaConsolePatrickHautrive!;~)2010

85

logname;id;who;lastlog sync umounta free init6& touchfile;echohelloworld>file cpfilecopy cpffilecopy (forcereplacement) cpifilecopy (interactivecopy) cpRdirectorydirectorycopy (recursivecopy) cppdirectory/*directorycopy/ (permissionpreserved) mkdirpdir/subdir (parentdirectorycreation) rmffile (forceremove) rmifile (interactiveremove) rmddirectory (deletenonemptydirectory) rmRdirectory (recursiveremove) echogoodbyeworld>>file diffhfilecopy wc<file dfh;duh;ps$$ umask;ulimit;exit wall%messagetoallusers (writeall)

LaConsolePatrickHautrive!;~)2010

86

SHELL L'interfaceaveclenoyau Leshellestl'interfaceprivilgieentrel'utilisateuretlenoyau.C'estleshellquireoitlescommandes del'utilisateursursonentrestandard(KEYBOARD)etquirestituelesrsultatssursasortiestandard duterminal(DISPLAY0.0).Lasortiestandardcorrespondengnralaupremiercrandel'ordinateur, maiscellecipeuttreredirigeversl'entred'unautreprocessusouversunfichier. C'estleshellquianalyselasyntaxedescommandesetquilancelesappelssystmes(systemcalls).Les appels systmes sont les fonctions du noyau. Le shell est un processus qui est lanc, soit par la procdured'initialisation,soitparl'utilisateur. L'interprteurdecommande Leshellestuninterprteurdecommande.Leshellestunprogrammequiinterprtelescommandes passesparl'utilisateur.Leshellestl'interfaceentrel'utilisateuretlenoyau.Leshellpeuttreunshell deconnexionquiestlancl'issuedelaprocdured'initialisation,ouunshellinteractifquiestlanc parl'utilisateurdepuisl'interfacegraphique. Aprslavalidationd'unelignedecommande,leshellencontrlelasyntaxeetlancelesdiffrents processus enfants qui seront grs par le noyau et qui accompliront les tches demandes par l'utilisateur.Lesprocessusenfantssontdesprocessusclonssurlemodlequeleprocessusparent, c'estdirequ'ilspartagentlemmeenvironnementdetravail(lesdroits,lesvariablesd'environnement, etc.). Lesprocessussontengnrallancsavecl'identit(user)etlesdroitsdel'utilisateur(permissions). LeshellBash LeshellBash(BourneAgainShell)estleshellpardfautdesdistributionsGnuLinux.C'estunshell complet,fonctionnel,performantetpersonnalisable.LeshellBashestconformelanormePOSIX.Par dfaut,c'estleshellBourne(/bin/sh)quiestattribuunnouvelutilisateur(useradd)quine possdepasderpertoirepersonnel. Lacommandeecho$affichelesoptionsactivesdushellBash. LacommandemanbashprsentelesdiffrentesoptionsdushellBash(optionflags). http://en.wikipedia.org/wiki/Bash_%28Unix_shell%29

LaConsolePatrickHautrive!;~)2010

87

LesoptionsdushellBash Leshellbashestlancaubootcommeunshelldeconnexion(loginshell),etdemanireinteractive (interactiveshell)lorsqu'unterminalgraphiqueestlanc.Lacommandemanbashprsentelafaon d'invoquerunshellbash(invocation)demanirenonineractive.Unshellnoninteractifnelirapasles fichiershabituelspourlesprofiles,maislesfichiers/etc/bash.bashrcet~/.bashrc.Lacommande bashnorccmdpermetdelancerunshelldemanirenoninteractivesansaucunelecturedefichier d'environnement. Lacommandeecho$montrelesoptionsactivespourleshellencours(activebashoption). Lacommandebashhelpmontreunrsumdesoptionsdushellbash(bashoption). Lacommandebashchelpprsentelescommandesinternesaushellbash(builtincommands) Lacommandebashc"helpset"prsentelasignificationdesdiffrentesoptions(bashoptions). Lacommandebashccmdpermetdelancerunecommandedansunnouveaushellnoninteractif. LacommandebashbugpermetdefaireunrapportdebugauprsdesdveloppeursdeBash. Lacommandebashrcfilebashconfigfilepermetdelancerunshellnoninteractifavecpourseule configurationlefichierpassenargument.

LaConsolePatrickHautrive!;~)2010

88

LesoptionsdushellBash(manbash) Options c i l r s v x D [+]O debugger Fonction Lancerunshelldefaonnoninteractive(noninteractiveshell) Lancerunshelldemanireinteractive(interactiveshell) Lancerunshelldeconnexion(loginshell) Lancerunshelldansunenvironnementrestreint(restrictedshell) Lancerunshellquireoitsescommandesdepuisl'entrestandard(stdin) Lancerunshellquiaffichelescommandesqu'ilreoitdepuisl'entrestandard (printstdin) Lancerunshellpourledbogagequiaffichelescommandesquandellessont excutes(printexec) Lancerunshellafind'extrairedeschainesdecaractrespourlestraduire(non interactiveshell) LancerunshellavecousanslescommandesinternesBash(builtinoptions shopt) Lancer un shell en indiquant la fin des options et le commencement des arguments Lancerunshellenmodersolutionavecl'optionfunctiontracing(extdebug option) EquivalentD Affichelesprincipalesoptions(help) Lancerunshellnoninteractifavecpourseuleconfigurationlefichierpassen argument(configurationfile) Equivalentl(loginshell) LancerunshellinteractifsansutiliserlalibrairieGnureadlinepourlireles commandes(noreadlinegnulibrary) Lancerunshellsansaucunelecturedefichierdeprofile(no/etc/profile, ~/.bash_profile,~/.bash_login,or~/.profile) Lancerunshellinteractifsansaucunelecturedeprofile(no~/.bashrc) Lancerunshellaveclecomportementd'unshellPOSIX(posixmode) Equivalentr(restrictedshell) Equivalentv(verbose) AffichelaversiondushellBash(bashversion)

dumppostrings EquivalentDavecleformatGnugettext(portableobject) dumpstrings help initfilefile rcfilefile login noediting noprofile norc posix restricted verbose version

LaConsolePatrickHautrive!;~)2010

89

L'environnementdushell L'environnementdushell(variablesetcaractristiques)estdfinieaveclacommandeset.Toutesles variables d'environnement du shell ne sont pas exportes lorsque le shell lance l'excution d'une commande.Lacommandeenvpermetdeconnaitrelesvariablesquiserontexportesparleshelllors du lancement d'une commande. La commande export, sans argument affiche les variables d'environnementquisontexportes.Lacommandeexport,suiviedunomd'unevariable,permetde dfinir des variables exportes, mais celleci ne le seront que pour la session du shell en cours (session), et que tant que l'instance du shell sera active (parent process). Les variables qui sont dfiniesdanslesfichiersd'initialisation(profile)serontactiveslorsdulancementd'unautreshell.Les variablesquisontdfiniesetexportesdanslesfichiersd'initialisationd'unutilisateur,serontactives pourtouteslescommandesqueceluicilancera(heritage). Pour que l'environnement d'un utilisateur soit chang chaque session, il faut en modifier les caractristiques,soitaveclacommandesetpourtouteslesprochainesinstancesdushell(instance), soitl'intrieurdesfichiersd'initialisationpropresunutilisateur(profile).Al'intrieurd'unscript,les variables d'environnement peuvent tre spcifies explicitement, afin de s'assurer du contexte d'excution(script). L'environnement du shell correspond en gnral l'environnement de l'utilisateur. Toutefois, l'environnementd'unutilisateurpeuttrerestreintunepartiedusystmeseulement(rbash),limit une partie de l'arborescence (chroot) et une partie des commandes. Ces environnements particuliers(nesting)sontparfoisdesleurrespourtromperl'ennemi(honeypot).Lorsd'uneconnexion distance,unutilisateurseconnecteunserveursurlequelildisposed'uncompte(loginetpassword) quiluidonneaccsunshelldistant(remoteshell).Toutefois,lescaractristiquesdushelllocaletdu shelldistantpeuventtretrsdiffrents. Unshelldeconnexionestgnralementattach(attached)unterminal(tty).Unshellinteractif estattachunpseudoterminal.Lesterminauxsontdespriphriquesquisontutilisspourcapter lesentresduclavier(STDIN)etafficherlessortiessurl'cran(STDOUTetSTDERR).

LaConsolePatrickHautrive!;~)2010

90

Leshellestl'interprteurdecommandes Laconnaissancedelalignedecommande Laconnaissancedel'environnement Laconnaissancedesvariablesd'environnement L'affichagedesvariablesd'environnementdushell Lechangementdesvariablesd'environnementdushell L'affichagedesvariablesd'environnementexportes L'exportationdesvariablespourlesprocessusenfants Laconnaissancedelatabledecodage Laconnaissancedessignauxenvoysauxprocessus Lalistedescommandesinternes(builtin) Larecherched'unmotifdansl'afficheurdespagesman L'environnementshellrestreint L'arborescencelimite LesshellsPOSIX La norme POSIX permet d'uniformiser les fonctionnalits des shells et de rendre compatibles les scripts.LesshellsquisatisfontlanormePOSIX(PortableOperatingSystemInterface)remplissent uncahierdeschargesencommun,cequirendlesscriptscompatibles. LeshellGnuBashestcompatiblePOSIX.LanormePOSIXdfinitdescritresfonctionnelsprcis pourlardactiond'unelignedecommande,ladfinitiondel'environnementetlescommunications entrelesprocessus. (manaintro) (manenviron) (infocoreutilsenv) (set) (unset) (env) (export) (manascii) (mansignal) (manbash) (/motif) (rbash) (chroot)

LaConsolePatrickHautrive!;~)2010

91

LescaractristiquesdushellBashetlanormePOSIX L'ditiondelalignedecommande(prompt,historique,colorisation,compltion) L'analysesyntaxiquedelalignedecommande(mots,variables,chemins,validation) Letraitementsquentiel(nohup,background) L'expansiondesvariables(internal,environment) L'interprtationdessquences(escape,control) L'valuationdesexpressions(special,meta,separator,operators,jokers,regex,octal,hexa,expr) Laprogrammation(structures,fonctions,passageparvaleurs,l'interaction,scripts) L'hritagedel'environnement(variables,permission,root,pwd,tty) Lafiliationdesprocessus(descriptor,PPID) Lescommandesetlesvariablesinternes(cheminsabsolusetrelatifs,commandesbuiltin,alias) Lesvariablesd'environnement(env,export,set,unset) Lecontrledespermissions(specialbits) Lapersonnalisationet/oularestrictiondel'environnement(rbash,profile) Lacommunicationinterprocessus(signal) LesI/Ostandard(stdin,stdout,stderr,redirections,concatnation) Lecontrledestchesetdespriorits(jobs,fg,bg,nice) Leshelldeconnexion Leshelldeconnexion(loginshell)estleshellquiestproposl'utilisateurlorsdesaconnexionau systmeGnuLinuxenmodeterminal.Leshelldeconnexionestissuedelaprocdured'initialisation (init)etdelacommandelogin,quinefonctionnequ'aveclesterminauxvirtuels(Ctrl+Alt+F1 F6). A l'issue de la procdure d'initialisation du systme (/etc/inittab), un prompt de login est prsent l'utilisateur. Commence alors, la procdure de connexion (/etc/passwd). Quand l'authentification a russie, un shell de connexion est lanc, lequel prsente son prompt dans le rpertoiredeconnexiondel'utilisateur($HOME,~/). Parcontre,quandlaprocdured'initialisationdusystmelanceautomatiquementl'interfacegraphique (Xserver),l'utilisateurs'authentifiedansunefentredesession,ets'illanceunshelldansunpseudo terminal(xterm),cen'estpasunshelldeconnexion,c'estunshellinteractif.Leshelldeconnexion esttoujoursliunterminalvirtueldusystme(/dev/tty4)dontilestpossibledeconnaitreles caractristiquesaveclacommandetty. La commande bash noprofile invoque le shell sans la lecture des fichiers de lancement. Les fichiersdelancement,deconfigurationoudepersonnalisationdushelldeconnexionsontlusdansun ordretrsprcis,ledernierpouvantannuleruneconfigurationantrieure.

LaConsolePatrickHautrive!;~)2010

92

Leshelldeconnexion(login) Laprocdured'initialisation (initet/etc/inittab) Lepromptdeconnexion (loginet/etc/passwd) Leterminaldushelldeconnexion (tty) Lesfichiersdelancementdushelldeconnexion (/etc/profile) Leshelldeconnexionrecherchedanscetordrelesfichiersd'initialisationpersonnelsetexcutele premierqu'iltrouve,s'ilexiste: (~/.bash_profile) (~/.bash_login) (~/.profile) (~/.bash_logout) Lelancementdushelldeconnexionvierge (bashnoprofile) Leterminald'unshelldeconnexion (/dev/tty4) Leshellinteractif Leshellenmodeinteractif(interactiveshell)n'estpasunshelldeconnexion,leshellbashestlancau coursdesessionetnelitquelesinstructionscontenuesdanslefichier/etc/bash.bashrc,puiscelles contenuesdanslefichier~/.bashrc(siceluiciexisteaveclespermissionsadquatespourlelire).Le shellinteractifestliun pseudoterminal (/dev/pts/0)dusystmequisimulelaprsenced'un terminal. L'ordredelectureetlesfichiersdeconfigurationdeBashenmodeinteractifnesontpaslesmmeque pourleshelldeconnexion.Lacommandebashnorcinvoqueleshellinteractifsanslalecturedes fichiers delancement. Les fichiers d'initialisation dushell (profile)peuvent contenir des variables d'environnement,desaliasetdescommandes. Leshellinteractif(session) Lesfichiersdelancementdushellinteractif (/etc/bash.bashrc) Le shell interactif recherche le fichier d'initialisation personnel de l'utilisateur et l'xcute s'il existe: (~/.bashrc) Lelancementdushellinteractifvierge (bashnorc) Lepseudoterminald'unshellinteractif (/dev/pts/0) Lecheminabsoluetrelatif Lecheminabsolud'unfichiers'critenentierdepuislaracinedusystmedefichier.Lecheminrelatif d'unfichiernecommencejamaisparleslash(/)indiquantlaracinedel'arborescence.Lechemin relatif s'crit en tenant compte de l'emplacement de travail en cours (pwd). Ainsi, depuis son rpertoirepersonnel(cd),unutilisateurpeututiliserlecheminrelatifpourfairerfrenceunfichier
LaConsolePatrickHautrive!;~)2010

93

(ls../.bashrc). Danschaquerpertoiresetrouventdesliensindestructiblespointantverslerpertoireparent(..)et vers le rpertoire courant (.). Le caractre tilde (~ ou Altgr+2) est synonyme du rpertoire personnel de l'utilisateur ($HOME). Les liens dans chaque rpertoire permettent de remonter l'arborescence(../../).CescaractresspciauxontunesignificationparticulirepourleshellBash. Lescheminsabsolusetrelatifsaurpertoirecourant Lerpertoiredetravail(printworkingdirectory) Lecheminabsoludepuislaracine Lecheminrelatifaurpertoirecourant Leliensymboliqueverslesrpertoiresparents Leliensymboliqueverslesrpertoirescourants Lerpertoirepersonneldel'utilisateur L'imbricationdesshells L'imbricationdeshellconsisteouvrirunshelll'intrieurd'unautreshell(unsousshelldontle processus est le fils). La commande echo $SHLVL permet de connaitre la profondeur des imbrications. Chaque niveau est dot de son propre environnement et se comporte de faon indpendante.Ilconvientdeclorechaqueniveaumthodiquementlesunsaprslesautres. Larestrictiondushell La restriction du shell permet de lancer un shell comportant de nombreuses restrictions dans les fonctionnalits.Unshellrestreintpermetdecontrlerauplusjustel'environnementd'unprocessusou d'unutilisateur.Unshellrestreintestlancaveclacommanderbashoulacommandebashr.A l'intrieurd'unshellrestreintcertainesoprationsnesontalorsplusautorises. Larestrictionetl'imbricationdeshell L'imbricationdeshell Larestrictiondushell Lechangementderpertoire Lamodificationdevariables Lescommandescontenantlaracine L'utilisationdesfonctionsdusystme Lechangementdesoptionsautorises Laredirectiondesentressorties L'utilisationdelacommandeinterned'excution Lamodificationdescommandesinternes Lecontournementdesrestrictions echo$SHLVL (rbashoubashr) (cd) (SHELLPATHENVBASH_ENV) (/) (systemcalls) (SHELLOPTS) (pipe) (exec) (builtin) (set+retset+o) (pwd) (/) (../..et./script) (..) (.) (cd,$HOME,~ouAltgr+2)

LaConsolePatrickHautrive!;~)2010

94

Lesprincipauxshell Ilexistediffrentstypesdeshelletchacunpossdesescaractristiquespropres(syntaxe,caractres spciaux, interprtation, expansion, valuation, commandes internes, variables d'environnement, fichiers d'initialisation, prompt). Tous les shells peuvent tre utiliss sous GNU/Linux, et les utilisateurspeuventpasserdel'unl'autresansdifficult.Toutefois,chaqueutilisateurpeutavoirses propreshabitudes,etn'utiliserqueleshellqu'ilouelleaffectionneenparticulier.Leshelldeconnexion d'unutilisateurestdfinidanslefichier/etc/passwd. Pourtant, deux familles se distinguent, les shells qui sont trs influencs par le langage de programmationC,etlesshellsdescendantdeBourne.Ainsi,l'affichagedupromptpourlesutilisateurs n'estpaslemmeselonlafamilledeshellquel'onutilise.LesbinairesdeBash(/bin/bash)etdu shelldeBourne(/bin/sh)peuventtreretrouvsl'aidedelacommandewhereisbash,etsouvent unlienredirigeleplusancienversleplusrcent. Chaqueshellpossdedescaractristiquesquilediffrenciedesautres,etchaqueshellreconnaitune syntaxequiluiestpropre,ainsiquedesfichiersdeconfigurationoud'initialisationparticuliers.Les promptsprimairesetsecondairessontgalementdiffrents,selonlesshells,cequipermetd'identifierle shellactifdansunterminal.Quandlesshellssontlancs,chacunhrited'unenvironnementprdfinit, etexcutelescommandesquisetrouventl'intrieurdufichierd'initialisationprincipaldushell,ainsi quecellesquisetrouventdansleoulesfichiersdepersonnalisationqu'ilpeutprendreencomptes'ils existent(~/.loginet~/.profile). Lesprincipauxshell Shell csh tcsh ksh sh bash zsh vsh Name CShell TCShell KornShell Prompt % ~/.login # Root Profile Environnement $VAR=VAL set(variablesd'environnementdushell) unset printenv env(variablesexportesparleshell) export

BourneShell $ BashShell ZShell VisualShell

~/.profile

Lessquencesdecontrle Les squences de contrle permettent de grer le shell et le terminal virtuel avec le clavier. Les squencesdecontrlesonteffectuesenmaintenantdeuxtouches(parfoistrois)appuyesenmme temps.Cessquencescommencent par latouche de contrle(CTRL)suivied'uneautretouchedu clavier.Toutefois,d'autrestypes de squences,commenantparlestouches SHIFT, MAJ ou ALT
LaConsolePatrickHautrive!;~)2010

95

(anciennement META) peuvent tre configures, comme les touches magiques (Magic Keys), et deviennentsignificativespourlesystme. Ces squences forment des raccourcis au clavier qui permettent de grer la ligne de commande, d'appelerdesmenuscontextuelsoud'envoyercertainssignauxcertainsprocessus.Lesprocessusqui peuventtreconcernsparles squences decontrlesontleprocessusencoursouenavantplan (foreground),leprocessusinitial(init)oulesprocessusquigrentl'affichagedesterminauxvirtuelset celuidel'interfacegraphique. Lesapplicationsgraphiquesacceptentgalementdessquencesdecontrlequipermettentd'viterde navigueraveclasourisdanslesmenus.Lescommandesmansttyetmanconsole_codesdonnent unedescriptiondessquencesdecontrlepourleterminal. LessquencesdecontrledushellBash(sttyconsole_code) Ctrl+A Ctrl+B Ctrl+C Ctrl+D Ctrl+E Ctrl+F Ctrl+H Ctrl+K Ctrl+L Ctrl+M Ctrl+N Ctrl+O Ctrl+P Ctrl+R Ctrl+T Ctrl+U Ctrl+V Ctrl+W Ctrl+Y Ctrl+Z Ctrl+Alt+F1F6 Ctrl+Alt+F7F8 Ctrl+Alt+Del Ctrl+Backspace Alt+> Alt+< Alt+D Curseurendbutdeligne (HOME) Curseursurlecaractreprcdent(Backward) (ARROWLEFT) Interruptionduprocessusencours (SIGHUP) Terminaisonduprocessusshell (SIGTERM) Curseurenfindeligne(End) (EOL) Curseursurlecaractresuivant(Forward) (ARROWRIGHT) Effaceenarrire (BACKSPACE) Effacetoutelaligneaprslecurseur Effacel'cran (clear) Validation (RETURN) Lacommandesuivantedansl'historique(Next) (ARROWDOWN) Validation (RETURN) Lacommandeprcdente(Previous) (ARROWUP) Historiquealphabtique (REPRINT) Swaplecaractreprcdentavecceluiducurseur Effacelaligneavantlecurseur Nouvellepagedansunafficheur Effacelederniermotavantlecurseur Colleletamponconservaprsuneffacement Suspensionduprocessusencours (SIGINT) Affichagedessixterminaux (TTY1to6) Affichagedel'interfacegraphique (DISPLAY0and1) Suppressionduprocessusinitial (INIT) Suppressionduserveurgraphique (X) Navigationdansl'historiquedepuisledbut Navigationdansl'historiquedepuislafin(pardfaut) Effacelafind'unmot

LaConsolePatrickHautrive!;~)2010

96

Lesexemplesdushell vi~/.profile noclobber=1 exportPATH=$PATH:$HOME/bin aliasll=lsla echoHelloworld,thedatetodayis$(date) !1 shxscriptdebug aliasX=`{startx>/dev/null&};clear;logout` LesexemplesduCshell vi~/.login setnoclobber setenvPATH${PATH}:${HOME}/bin setPATH=($PATH~/bin) aliasll=lsla Lesexercicesdushell Voiciquelquesexercicespourpratiquer... scriptfileforstudy.txt mansignal manenv manenviron manbash ps psaux echo$SHELL chsh Crtl+D bash logout exit Ctrl+Alt+5 (login+password) logout pwd cd/ pwd su (rootpassword) pwd cd pwd exit cd~ id cd.. pwd cd touchone.txt ls lnone.txttwo mkdirTEXT lsla mvtwoTEXT lsTEXT cd/usr/bin ls;cd env|grepHOME lsla$(HOME)/one.txt echo$PATH echoHello? echoHello?>one.txt catone.txt echoHow?>>one.txt catone.txt lsld aliasld=lsld ld unaliasld ld lsR/ lsid~ lsid/ mkdirtictactoe ls rmdirtictactoe mkdirpbring/my/wife cdbring/my/wife mkdirpwon/der/full cd lsR rmRfbring lsR echocinq>newline lslnewline wclnewline cpnewlinesaveline lsi*line mvsavelineoldline lsi*line rmi*line touchlink lnlinkhardlink lnslinksymlink lsi*link lsl*link ls*/* rmf*link

LaConsolePatrickHautrive!;~)2010

97

mkdirtmp;cdtmp mansudo touch.hiden su ls id rmRf* pwd lsa exit rm.* su lsa id cd pwd rmdirtmp exit touchfile1file2file3 touchpaper touchFile4file4 lslapaper rmfile[23] chmodgo+rwpaper ls lsla ls[Ff]ile? chmod700paper ls[AZaz]* lslapaper touchfile{0123456789} chmodarw ls lslapaper touch chownnoonepaper file{0,1,2,3,4,5,6,7,8,9} rmpaper !! echo$PATH !$ cd history mkdir~/bin HI=Helloworld lsbin echo$HI PATH=$PATH:~/bin echoundeuxtrois|wc exportPATH lss|sortn STAY=stay lsR/ FOLLOW=follow lsR|sort|uniq|wcl exportFOLLOW headn5/etc/hosts echo$STAY cat /etc/passwd | grep echo$FOLLOW $USER bash tailn5/var/log/message echo$STAY su echo$FOLLOW addusernoone exit exit unsetFOLLOW passwdnoone echo$STAY cat /etc/passwd | grep echo$FOLLOW noone bash sunoone echo$STAY id echo$FOLLOW pwd exit cd unsetSTAY pwd echo$SHELL

FOO= set|grep^FOO exit su find/usernoone userdelrnoone find/usernoone cd echo$? top& jobs fg nicen7xeyes psu|grepxeyes renicepPID renice+9PID infocoreutilsenv env tty stty vi/etc/inittab cat/etc/shells ls/etc/skel CTRL+D (endingfileforstudy.txt) catfileforstudy.txt kill91 ls/|tee$HOME/root.txt cprp$HOME/backup/

LaConsolePatrickHautrive!;~)2010

98

VARIABLE Lesvariables Lesvariablespeuventtredeplusieurstypesettrequalifiesdediffrentespithtes.Lesvariables internessontintgresaushell,etellesserventgrerlesparamtresd'unelignedecommande.Les variablesd'environnementsontpropresl'environnementdushell,oul'environnementdel'utilisateur ouceluid'unprocessus.Lesvariablesd'environnementexportablessonttransmisesd'unprocessus l'autre. Les variables prdfinies sont les variables d'environnement d'un shell qui sont attribues automatiquementlorsdulancementd'unshell.L'onparledevariableslocalesquandellessontpropres un seul environnement, et de variables globales, quand elles sont partages par un groupe de processus. Lesutilisateurspeuventdfinirleurspropresvariablesquandilsouvrentunesession.Cellescipeuvent treenregistresdansleursfichiersdepersonnalisation(~/.profile). Lesvariablesinternes,prdfinies,d'environnement,interactives,exportables L'affectationdirectedansunenvironnement L'affectationparsubstitutiondecommande(reversequote) Latransmissionavecpassageparfonction Latransmissionavecpassageparvaleur L'expansiondelavaleurd'unevariable L'chappementdel'expansiond'unevariable Laprotectionparl'apostrophe(singlequote) Laprotectionparlesguillemets(doublequote) L'invitationinteractivelasaisie Lesvariablesd'environnementduprocessus Lesvariablesinternesdushell Lesvariablesprdfiniesdushell Lesvariablesexportes Lavisualisationdesvariablesd'environnement Lavisualisationdesvariablessystmes Ladfinitiondevariabled'environnement Lesvariableslocales Lesvariablesglobales Lavaleurd'unevariable Lesvariablessontdesmotsauxquelssontaffectsunevaleur(VAR=VAL).L'onparled'affectation quandunevaleurestaffecteunevariable.Lacommande echo$VAR permetdeconnaitrela valeurd'unevariable.Al'intrieurd'unscriptoud'unecommande,l'onparled'expansiond'unevariable
LaConsolePatrickHautrive!;~)2010

(VAR=VAL) (VAR=`cmd`) (FONCTION(VAR)) (scriptVAR) (echo$VAR) (echo\$VAR) (echo'$VAR') (echo''$VAR'') (readVAR) (env) ($0) (set) (exportPATH=$PATH:~/bin) (env) (set) (typeset)

99

quandc'est,nonpaslenom,maislavaleurdelavariablequiestprisencompte.L'expansionpeuttre annuleavecl'apostrophe(')oulesguillemets(),etempchavecl'chappement(\). L'exportationdesvariables Lesvariablesconstituentunmoyendepasserdesinformationscommunesd'unprocessusparentun processusenfant.Parexemple,lesvaleursdesvariablesd'environnementsonthritesd'unprocessus l'autre. D'autre part, les variables peuvent tre exportes d'un environnement l'autre avec la commandeexport.Lavaleurdecesvariablescommunesnechangepas. Lesvariablesinternes Lesvariablesinternes(specialparameters)aushellsontdesvariablesutilisesparleshellpourgrer les diffrents lments delaligne decommande.Uneligne decommande simple est engnrale constituedelacommandesuiviedesesparamtres(paramtres,arguments,options,swithches, flags). Une ligne de commande plus complique sera constitue de plusieurs commandes relies ou imbriquesentreellespardescaractresspciaux(jokers,sparateur,mtacaractres,oprateursde contrle, squence d'chappement, expressions, structures de contrle,...). Le shell interprte ces diffrentslmentsetenvrifielasyntaxeavantd'enlancerl'excution.Lacommande manbash donneunedescriptiondesvariablesinternes. LesvariablesinternesdushellBash(manbash) Lalignedecommande(lenomdushell,duscriptoudufichierplacenargument) Lavaleurdesparamtresdepositionnement(positionalparameters) Lavaleurdesparamtresdepositionnementpartirde10(positionalparameters) Lenombredeparamtrescontenusdanslalignedecommande(commandeincluse) Lenombredeparamtrepassunscriptparlalignedecommande Lachainedesparamtresdelalignedecommande(stringpositionalparameters) Lalistedesparamtresdelalignedecommande(tablepositionalparameters) Lecoderetourdeladernirecommandeexcuteenavantplan(fg) Lenumrodeprocessusdushell(PID) Lenumrodeprocessus(PID)deladerniretchedefond(bg) Lesoptionsdushellpassunscript(optionflags) Ledernierargumentdelacommandeprcdente Lesvariablesd'environnement Les variables d'environnement sont aussi appeles variables prdfinies. Un certain nombre de
LaConsolePatrickHautrive!;~)2010

$0 $1$9 ${10} $# ${#*}${#@} $* $@ $? $$ $! $ $_

100

variablesprdfiniessontplusoumoinsprsentesdansl'environnementd'unprocessus.Dansunshell restreint,ellesnepeuventtremodifies.Parconvention,lesnomsdesvariablesd'environnementsont critesenmajuscule.Lacommandeenvpermetd'afficherlesvariablesd'environnementactivesetla commande set permet d'afficher toutes les variables. La variable d'environnement BASH_ENV permetdegrerl'environnementpourlesnouvellesinstancesdeshell. Lesvariablesd'environnementdushellBash(manbash)
ALIAS BASH BASHOPTS BASHPID BASH_ALIASES BASH_ARGC BASH_ARGV BASH_CMDS BASH_COMMAND BASH_ENV BASH_EXECUTION_STRING BASH_LINENO BASH_SOURCE BASH_SUBSHELL BASH_VERSINFO BASH_VERSION BASH_XTRACEFD CDPATH COLUMNS COMPREPLY COMP_CWORD COMP_KEY COMP_LINE COMP_POINT COMP_TYPE COMP_WORDBREAKS COMP_WORDS DESKTOP_SESSION DIRSTACK DISPLAY EDITOR ENV EMACS EUID FCEDIT FIGNORE FORWARD FUNCNAME GDMSESSION GID GLOBIGNORE GROUPS HISTCHAR HISTCMD HISTCONTROL HISTFILE HISTFILESIZE HISTIGNORE HISTSIZE HISTTIMEFORMAT HOME HOSTFILE HOSTNAME HOSTTYPE IFS IGNOREEOF INPUTRC LANG LANGUAGE LC_ALL LC_COLLATE LC_CTYPE LC_MESSAGES LC_NUMERIC LESSCLOSE LESSOPEN LINENO LINES LOGNAME LS_COLORS MACHTYPE MAIL MAILCHECK MAILPATH MAILTO OLDPWD OPTARG OPTERR OPTIND OSTYPE PAGER PATH PIPESTATUS POSIXLY_CORRECT PPID PRINTER PROMPT PROMPT_COMMAND PROMPT_DIRTRIM PS1 PS2 PS3 PS4 PWD RANDOM REPLY SECONDS SHELL SHELLOPTS SHLVL SSH_AGENT_PID SSHAUTH_SOCK TERM TIMEFORMAT TIMOUT TMPDIR TTY TZ UID UMASK ULIMIT USER USERNAME VISUAL WINDOWID XAUTHORITY auto_resume histchars

LaConsolePatrickHautrive!;~)2010

101

Latransmissiondevaleurs Lavaleurd'unevariablepeuttremodifieencoursdesession.Lavaleurd'unevariablepeut tre diffrente d'un processus l'autre. Pour transmettre automatiquement une valeur qui change d'un processusl'autre,ilexistedeuxmoyens,le passageparfonction (lavaleurestlersultatd'une fonction)etlepassageparvaleur(lavaleurestundesparamtresd'unscript). L'invitationinteractive Uneinvitationinteractivepermetgalementdercuprerlavaleursaisieauclavier(STDIN)avecla commanderead.

LaConsolePatrickHautrive!;~)2010

102

COMMAND Lescommandesinternes Les commandes internes sont intgres dans leshell (builtin).Ainsi,la commande cd (change directory)oulacommandepwd(printworkingdirectory)sontdescommandesintgresaushell Bash.Lescommandesinternessontlancesl'intrieurdummeprocessusqueleshell.Leshellne crepasdeprocessusfils,ilexcutelesinstructionswait()etread(),ets'occupeluimmedelatche. Engnral,les commandes internesnedisposentpas depagemanuel puisquecenesont pas des commandesindpendantesdushell.Lesconditionsd'utilisationsontspcifiesdanslapagemandu shellaveclacommandemanbashdanslaquelleilestfaciledefaireunerechercheavecl'oprateur /motifl'intrieurdel'afficheur. LescommandesinternesdushellBash(builtin)(manbash) source command disown fg local read times coproc alias compgen echo getops logout readonly trap bg complete enable hash mapfile return type bind comptopt eval help readarray set ulimit break continue exec history popd shift umask builtin declare exit jobs printf shopt unalias caller typeset export kill pushd suspend unset cd dirs fc let pwd test wait

Lescommandesexternes LescommandesexternessonttoutescellesquipeuventtrelancesdansunsystmeGnuLinux.Les commandes externes sont des excutables ou des scripts avec le droit d'excution (x). Les commandesexternespeuventtreinvoquesenspcifiantlecheminabsolu(/bin/bash)oulechemin relatif(./script)dansl'arborescencedusystmedefichier.Quandlecheminn'estpasspcifi,le shellrecherchel'emplacementdelacommandedanslesrpertoiresspcifisdanslavariablePATH,et seulementdanscesrpertoires(echo$PATH). Lescommandesexternessontlancesdanslecadred'unprocessusenfantdushell.Leprocessuspre (leshell)excutelesinstructionsfork()etwait(),tandisqueleprocessusfils(lacommandel'intrieur d'unsousshell)excutel'instructionexec(). Cettefiliationdesprocessusimpliquel'hritagedel'environnementdushell(executionenvironment). Les commandes externes sont dfinies par opposition aux commandes internes, et concernent par
LaConsolePatrickHautrive!;~)2010

103

consquenttoutcequipeuts'excutersurunsystme.Lescommandesexternessontlesoutilsetles utilitairesGnu,lesscriptsexcutablesquisontinterprtsetquipeuventcontenirunesuccessionde commandes,lesprogrammescompilsetautresapplicationssourcesinstalles. Lescommandesexternesaushell L'affichagedesdroitsetdestypesdefichiers Lescommandes,lesoutilsetlesutilitairesGnu Lesscriptsexcutablesinterprts Lesprogrammescompils Lesapplicationssourcesinstalles L'valuationd'unelignedecommande http://linux.about.com/cs/glossaries/a/aglossary.htm L'analysed'unecommande Leshellanalyselasyntaxeetprocdel'valuationdesexpressionsdelalignedecommande,puisil lancel'excutiondelacommande,soitl'intrieurdesonpropreprocessus(builtin),soitdanslecadre d'unprocessusfils(sousshell). Danslecadred'uneexcutionparunprocessusfils,leshellouvreventuellementlesdescripteursde fichierpourlesredirections,etsemetenattentedusignalqueluienvoileprocessusfilsquandila terminsatche(saufquandlacommandeestlanceen tchedefond(background) auquelcas,le shellreprsenteimmdiatementlepromptl'utilisateur).Quandlesousshellatermin,leshellpeut alorslancerunautresousshellettraitersquentiellementunesuccessiondecommandes. La commande interne type permet de vrifier l'valuation par le shell des mots d'une ligne de commande. 1. Leshellrcuprelalignedecommandeavecl'instructionread() 2. Leshellanalyselasyntaxeetvaluelesmotsdelalignedecommande Oprateurdecontrle Substitutiondesjokers Expansiondesvariables Traductiondesalias Placementdesmtacaractres valuationdessquencesd'chappement 3. Leshellrecherchelescommandesdanslescheminsdesbinairespardfaut(/binet /usr/bin),puisdanslescheminsdelavariablePATHdel'utilisateur 4. LeshellexcutelescommandesinternesBUILTIN 5. Leshelllancelacommandeexternedansunsousshell Crationduprocessusfilsavecl'instructionfork()
LaConsolePatrickHautrive!;~)2010

(lsla/bin/bash) (echo$PATH) (./script) (gcc) (./configure;make;makeinstall) (typecmd)

104

Ouverturedesfichiersdescripteursavecl'instructionopen() Dcalagedesfichiersdescripteursencasderedirection(3>0et4>1) Attenteduprocessuspre(leshell)avecl'instructionwait() Excutionparleprocessusfilsdelacommandeavecl'instructionexec() Communicationderedirectionaveclesinstructionswrite()etread() Communicationinterprocessusdufilsaupreavecl'instructionreturn() Terminaisonduprocessusfils(sousshell)avecl'instructionexit() 6. Leshellenchanelesblocsdecommandeentraitementsquentiel 7. Rgulationdesfluxparlepipelineetlesfiltres L'analyse,l'valuationetl'excutiond'unecommande Analysesyntaxique Excutioninterne space operator escape chain tty bloc pipe quote control background rwxst variable alias meta bin root path regex expr boulean wheel display builtin special export env set link host ascii nohup fonction valuationdesmots joker

Lancementsousshell fork() open()

wait() read() for nice suid octal sticky descriptor signal substitution prompt

Excutionextrieure exec() write() return() exit() if test case while until L'excutiondtacheduterminal

L'excutiond'unecommandepeuttredtacheduterminalduprocessusparentquilagnre.La commandenohupcmd(nohangup)permetauprocessusfilsdenepashriterduterminaldeson pre.Lescommandesdtachesduterminalneserontpasinterrompuesquandlasessiondel'utilisateur serastoppe.Unfichierspcialseracrpourstockertouteslessortiesnohup.out. L'excutiondtacheduterminal Leterminalattachaushell L'excutiondtachedu Lagestiondesalias Lagestiondesaliasaveclescommandesinternesaliasetunaliaspermetdedonnerdesnoms deslignesdecommandeslonguesetsouventutilises.Lesaliassontgnralementgnrespourune seulesession,c'estpourquoileurdfinitionsontsouventplacesdansunfichierdelancementdushell. LagestiondesaliasdansleshellBash L'activationd'alias Ladsactivationd'alias Ladfinitiondesaliasdesession (alias) (unalias) (~/.profileet~/.bashrc) (ttyetstty) (nohupcmdetnohup.out)

LaConsolePatrickHautrive!;~)2010

105

Letraitementsquentiel Le traitement squentiel permet d'enchainer l'excution de plusieurs commandes. Le traitement squentieldescommandespermetdelancerplusieurscommandessurunemmelignedecommande. L'enchainementd'unecommandepeutnepastreconditionnlarussitedelaprcdente.Danslecas d'enchainementdecommandesinconditionnelles,leshellattendlafindel'excutiondelapremire commande avant de lancer la suivante (fifo). Dans le cas d'enchainement de commandes conditionnelles,leshellvrifiele coderetour delaprcdentecommande(returncode),avantde lancer,ounon,lasuivante. Unecommandeestjugerussiequandsoncoderetourestgalezro (true),etunecommandeestprsumerate,quandsoncoderetourestdiffrentdezro(untrue).Le coderetourd'unecommandepeuttreconnueaveclacommandeecho$?. Lestrainsdecommandespouruntraitementsquentielsonttoutessurlammelignedecommande, spareslesunesdesautres,par unoprateurd'enchainement.Cetoprateurd'enchainementestle pointvirgule pour le traitement squentiel inconditionnel (cmd ;cmd ), ainsi les commandes s'excutentlesunesaprslesautres,mmesilaprcdenteretourneuncoderetourdiffrentdezro (fail). Tandisquelescommandesreliesparl'oprateurlogiqueAND(cmd&&cmd)requirentquela prcdente commande est russie (true). Avec l'oprateur d'enchainement logique AND, si une commande choue, les autres commandes qui suivent ne sont pas excutes. Inversement, les commandesreliesparl'oprateurlogiqueOR(cmd||cmd)nes'excutentjamaisquetoutes,carla commandesuivanterequirentquelaprcdentecommandeestchoue(untrue). Letraitementsquentieldescommandes L'oprateurd'enchainementinconditionneldescommandes L'oprateurd'enchainementconditionnelAND(previousmustbetrue) L'oprateurd'enchainementconditionnelOR(previousmustbeuntrue) Lecoderetourzropourlarussitedelacommandeprcdente (cmd;cmd) (cmd&&cmd) (cmd||cmd) (echo$?)

LaConsolePatrickHautrive!;~)2010

106

Laformulationd'unecommande Lelancementd'unecommandeprendunemultitudedeformesselonlesbesoinsoulessituations. Laformulationd'unecommande:cmdargoptionsourcetarget Commands cmd cmd;cmd cmd|cmd cmd`cmd` cmd$(cmd) cmd& cmd&&cmd cmd||cmd !cmd timecmd cmd;\\ncmd nohupcmd typecmd echotext echo'$VAR' echo\$HOME echo'`cmd`' echoe\120 batch(Ctrl+D) atnow(Ctrl+D) crontab cmd|tee>cmd cmd|tee>file !! !num /usr/bin/cmd Fonction Validation(enter) Traitementsquentiel(train) Redirection(pipe) Substitutionensousshell SubstitutionPOSIX Background(jobs) ConditionnementVrai(AND) ConditionnementFaux(OR) Inversionducoderetour Minutagedel'excution chappementEol(Escape) Dtachementduterminal(tty) valuationdelasyntaxe(test) Protectionlittrale(sauf`,\,$) Annulationdetouteexpansion chappementd'uncaractre Protectiondel'valuation valuationEscapeSequence Executionsquentielle(FIFO) Executionprogramme(atd) Executionrgulire(crond) Duplicationredirection(fork) Duplicationenregistrement Executionlastcommand Executionfromhistory Cheminabsolu(AbsolutPath) Commands (cmd;cmd) {cmd;cmd} cmd>file.txt cmd>>file.txt cmd<file.txt cmd2>error.txt cmd1&2>ouput.txt cmd2>&1 cmd1>&2 cmd;echo$? aliascmd=cmdoption unaliascmd find/|xargscmd surootccmd shccmd sshvuser@hostcmd lns/bin/bash~/myshell echo$? batch<script.txt sourcescript.sh .script.sh ./script.sh declarefunction Fonction Sousshell(filsdistincts) Bloc(unseulprocessus) crasement Concatnation Lecturedufichierversstdin Dviationstderr Dviationdessorties Dviationstderrversstdout Dviationstdoutversstderr Affichageducoderetour Dfinitiond'unalias Suppressiond'unalias Excutionmultiplestdout Lancementenroot Lancementensousshell Lancementdistance Liensymbolique(link) Derniercoderetour Executiond'unscript ExecutionshellBash ExecutionshellBash ExecutionsubshellBash Dclarationd'unefonction

L'ditiondescommandes L'ditiondescommandespermetdecirculerl'intrieurd'unelignedecommandeafind'enmodifier
LaConsolePatrickHautrive!;~)2010

107

unepartie(aveclestouchesFLECHEGAUCHEetFLECHEDROITEduclavier). L'historiquedescommandes L'historiquedescommandespermetderappelerauprompttouteslescommandesquiont tsdj valides(aveclestouchesFLECHEHAUTetFLECHEBASduclavier).Lescommandes quisont mmorises dans l'historique sont enregistres dans un fichier cach (~/.bash_history) dans le rpertoirepersonneldel'utilisateur(echo$HOME).Lescommandeshistorypermetdevisualiser lescommandesquisontenregistresdansl'historiqueetclassesparnumros. Lacommande !! estunsynonyme de !1,qui permet derelancer ladernirecommande. La commande !4 permet de relancer la quatrime commande de l'historique. La configuration de l'historiqueestpersonnalisablel'aidedesvariablesadquates(HISTFILE,HISTSIZE,HISTCMD, HISTCONTROL, HISTFILESIZE, HISTIGNORE, HISTTIMEFORMAT, HISTCHAR). La commandehistory|grepcmdpermetdeslectionnerlemotifcmddansl'historique. L'historiquedescommandes(manhistory)(infohistory)(manbash) Commands manhistory history !! !2 !4 !string !?string? ^old^new !!:s/old/new/ afficherlapagemandelacommandehistory afficherl'historiquedescommandesclassesparnumro relancerladernirecommande relancerl'avantdernirecommande relancerlaquatrimecommandedel'historique relancerladernirecommandecommenantparstring relancerladernirecommandequicontientlemotstring remplacerdansladernirecommandeoldparnew remplacerdansladernirecommandeoldparnew Variables ~/.bash_history histappend HISTCHAR HISTCMD HISTCONTROL HISTFILE HISTFILESIZE HISTIGNORE HISTSIZE HISTTIMEFORMAT

http://www.markusgattol.name/ws/bash.html http://linux.about.com/od/commands/Linux_Commands_and_Shell_Commands.htm Lacolorationsyntaxique Lacolorationsyntaxique(colour)permetdecolorierdansleterminallesrponsesdushellenfonction dutypedefichierparexemple. Lacompltiondescommandes La compltion des noms de commande permet de ne saisir que le dbut d'une commande, et de complterlaformulationaveclatouchedetabulation(TAB).Leshellcomplteautomatiquementles
LaConsolePatrickHautrive!;~)2010

108

lmentsmanquantsouproposeunelistedescommandesoudesfichiersquicorrespondentavecla saisie.LalistedescommandesproposesdpenddesrpertoiresdclarsdanslavariablePATHpour larecherchedesexcutables,etlalistedesfichierspropossdpenddurpertoirecourantouduchemin absolu.LacompltiondesoptionsdescommandesestparticulieraushellZetsaconfiguration. L'dition,lacompltionetl'historiquedescommandesLacolorationsyntaxiquedesfichiers L'ditiondelalignedecommande Lacirculationdansl'historiquedescommandes L'historiquedescommandes Lelancementd'unecommande Lelancementdeladernirecommandelance Lefichierdestockagedel'historique Lesvariableshistoriques Lacolorationsyntaxique Lacompltiondescommandes Lescheminsderecherchedesexcutables Lacompltiondesoptions Laredirectiondecommande Laredirectiond'unecommandes'effectueaveclesoprateursderedirection(pipe). Lacommandecmd|teefile.txtpermetdedupliquerlasortiestandard(stdio)etdelaredirigervers unfichierouuneautrecommande. Lesexpressionsrgulires Lesexpressionsrgulires(regex)permettentdeformerdesexpressionscomplexes.Lesexpressions rgulires ou ERE (ExtentedRegularExpression) sontutilisespourregrouperplusieursensembles d'occurrence.Uneexpressionrgulireconstitueunedfinitiond'uncertainensemble,dontchacundes lmentspartagentlesmmescaractristiques.Lesexpressionsrguliressontutilisespourformerdes motifs (pattern).Unmotifpeuttreutilisepourfaireunerechercheparticuliredansunensemble plusvaste (matching), poursubstituerunmotifparunautre(substitution), oupourappliquerune commandeauxseulslmentsquisatisfontlescritresdfinisparl'expressionrgulire(execution). Lesjokers(globbing)sontunexempled'utilisation desexpressionsrgulires.Lescommandesde traitement de flux (grep, cut, col, tr, sed, groff, awk) sont idales pour faire une utilisation performantedesexpressionsrgulires,parcequ'ellesacceptentdepuisleurentrestandard(stdin)un fluxdedonnes(dataflow),qu'ellestraitentlavole.Ainsi,lalectured'unfichierpeuttredonne comme flux d'entre une commande qui va traiter le fichier, ligne par ligne (line by line). La commande awk est en soi un langage de programmation trs performant. Le langage de programmationPerl(perl)permetl'utilisationdesexpressionsrgulires.
LaConsolePatrickHautrive!;~)2010

ARROWSLEFTRIGHTHOMEEND ARROWSUPDOWN (history) (!NUMCMDHIST) (!!) (~/.bash_history) (HISTFILEetHISTFILESIZE) (color) (TAB) (echo$PATH) (shellZ)

109

Dansunpremiertemps,ilconvientdedfinirl'expressionrgulire(regex),puis,dansundeuxime tempsdedfinirl'ensembleocelleciseraapplique(chain).Ensuite,unefoislacommandelance, l'expressionestrecherchedansl'ensemble,etchaqueoccurrence,estsoitidentifie,soitremplace, soit l'objet d'une commande. Dans une expression rgulire, chaque caractre est reconnu trs prcisment,etunelettreminusculeestdiffrented'unelettremajuscule(case). Lescaractresdesexpressionsrgulires Lesexpressionsrguliressontbasessurl'emploidescaractresspciauxoumtacaractredushell (specialcaracters): Lescaractresd'chappementdushell:echoe\n\t. Lescaractreschappsparlecaractred'chappement(antislash):/,\,|,(,),[,[,{,},^,$,*,+,?. Lesmtacaractresquisparentourelientlescommandes (shell):|?*&;(){}[]<>IFS. Lasyntaxepourunerechercheestsouventdelaforme/motif/ Lasyntaxepourunesubstitutionestsouventdelaformes/old/new/. Lesintervallesdecaractres(ASCII),lesjokers(.,?,*,[,]),lescomplmentaires/[09]file.tx?/ Lasyntaxedesquantificateursstandards: /ab*/ pour(ab,abb,abbb) /(ab)*/ pour(ab,abab,ababab) /L.nux/ pour(Linux,Lxnux,Lonux) /*/ noneormore /+/ oneormore /?/ noneoronce /{n}/ exactlyntimes /{n,}/ atleastntimes /{,n}/ atthemostntimes /{m,n}/ betweenmtimesandntimes Lesdbutsetfindechainesdecaractres: /pattern/ pourledbutdechaine /pattern$/ pourlefindechaine /pattern*pattern$/ pourledbutetlafindechaine L'alternativedechoixemploiel'oprateurpipe/(Free|Open|Net)BSD/. Lesensemblesprdfinisdanslesexpressionsrgulires: /d [09] Numbers /D [09] Nonnumbers /w [09azAZ_] Alphanumerical /W [09azAZ_] NonAlphanumerical /s [\n\t\r\f] Space(Newline,Tabulation,CariotReturn,FormFeed)
LaConsolePatrickHautrive!;~)2010

110

/S

[^\n\t\r\f]

NonSpace(Newline,Tabulation,CariotReturn,FormFeed)

Lesoptionsdegrep grepE interprtelesexpressionsrgulires(regex) grepc comptelenombredersultat(count) grepi insensiblelacassedescaractres(case) grepn numrotelesoccurrences(linenumber) grepv affichetouteslesoccurrencesquinecorrespondentpasaumotif(inverse) greph occulteleprfixeduchemindesfichierstrouvs grep'#' affichelescommentairesd'unfichier grep[az_][az09_]* contrlesilenond'uncompteutilisateurestvalid Lesoptionsdesed Lacommandesedpermetdemanipulerlecontenudesfichiers(streameditor). Lesfonctionsdesedsontd'afficher,d'ajouter,desupprimer,deremplacer. Lesexpressionsrgulirespeuventutiliserlessparateurs/,@ou#. Lesactionsprdfinies: /motif/d delete /motif/p print s/old/new/action substitute s/old/new/g substitutealloccurrences(general) s/motif/&plus/ adding s/old/new/wfile saving sed[option]'cmd'file syntaxedelacommandesed /regex/action syntaxed'uneexpressionrgulire sedn afficheleslignescorrespondantesaumotif sedfscript.sh utiliseunscriptcommeinput sedecmdcmd utiliseplusieurscommandes sedn1,4p/etc/passwd afficheles4premireslignes /Hello/d supprimelesoccurrencesdumotifHello /^[Ll]inux/!d supprimeleslignesnecommenantpaspar"Linux"ou"linux" /[azAZ09]$/p afficheleslignesseterminantparuncaractrealphanumrique s/[Uu]nix/Linux/ remplacelapremireoccurrencede"Unix"ou"unix"parLinux s/[09]//g supprimetouteslesoccurrencesdechiffres s/motif/&plus/ ajoutechaqueoccurrencel'expressionplus s/old/new/wfile enregistreaprsleremplacement s/^#[^!].*$/&v1\.0/gwfile ajoute'v1.0'toutesleslignesdecommentaire('#'saufleShaBang'!#') s/\/usr\/src\/linux/\$SRC/g remplacelenomd'unrpertoireparlavaleurd'unevariable s@/usr/src/linux@\$SRC@g(idemquelacommandeprcdenteavecl'arrobasecommesparateur)

LaConsolePatrickHautrive!;~)2010

111

Lasyntaxedelacommandesedutilisantunscript: sed[options]fscriptfichier Lacommandesedpeuttreutilisedansunscript: viemacstovi.sh #!/usr/bin/sednf s/emacs/vi/g /[Gg][Aa][Tt][Ee][Ss]/d

LaConsolePatrickHautrive!;~)2010

112

LANGUAGE Lelangagedeprogrammation Leshellcontientunlangagedeprogrammation.Celangageestditinterprtetpermetlardactionde scriptscomplexes. Le langage de programmation inclue l'valuation des expressions et l'interprtation des caractres spciaux(mta,joker,separator,operator,special,escape,octal,hexa),l'affectation,ladclaration, l'expansion,etl'exportationdevariables,ladfinitiondefonctionsetlatransmissiondevaleurd'un environnement l'autre, la substitution du rsultat d'une commande, l'utilisation de structures de contrlecommel'itration(loop)etlesdcisions(test),etl'interactionavecl'utilisateur. Lesstructuresdecontrle Les structures de contrle du langage de programmation du shell Bash sont, soit des structures dcisionnellesoudecontrles(tests),soitdesstructuresitrativesetconditionnelles(boucles). Les structures dcisionnelles (if, case)permettent d'orienter le cheminement d'unscript, tandis que les structures itratives (for, while, until) permettent de rpter un certain nombre de fois la mme oprationsurdeslmentsdiffrents. Les boucles sont gnralement gres par une condition, contrle au dbut en dbut de chaque itration. Toutefois, certaines commandes internes au shell Bash (builtin) peuvent en modifier le comportement. La commande interne break permet d'interrompre la boucle. La commande continuepermetdepasserimmdiatementlaprochaineitration.Chacunedecescommandesde gestiondesbouclespeutavoircommeargumentunchiffrereprsentantleniveau(looplevel)auquelle scriptdoitretourner.Cettefonctionnalitpeuttreutile,lorsqueplusieursbouclessontimbriquesles unesdanslesautres.Lacommandeexitpermetd'interromprelescriptetunevaleurdesortiepeut treattribueaucoderetour(returncode). LesstructuresdecontrledulangagedeprogrammationinterprtdushellBash Lesstructuresdcisionnelles(branchementoutests) Letest Lechoixmultiples Lesstructuresconditionnelles Lesstructuresdcisionnelles(branchementettests) Laboucleconditionnellecompteurvariableaudbutdetour Lesbouclesconditionnellescompteurvariableenfindetour (Ifthenelseifelsefi) (caseinesac) (forindodone) (whiledodone) (untildodone)

LaConsolePatrickHautrive!;~)2010

113

Letestif if elif else COMMANDS fi Letestcase LeshellBashversion4acceptelesterminators;&pourvrifierleprochainblocet;;&pour forcerlavrificationdetoutelesblocsdemotifsuivant. case WORD in [(]PATTERN1) [(]PATTERN2) [(]PATTERN3|PATTERN4) [(]PATTERNn) [(]*) COMMANDES COMMANDES COMMANDES COMMANDES COMMANDES ;; ;& ;;& ;; [;;] CONDITION ; COMMANDS CONDITION ; COMMANDS then then

esac Labouclefor for done for done for done Labouclewhile while CONDITION ; COMMANDS done do ((x=1;x<=10;x++)) COMMANDS ; do NAME in WORDS COMMANDS ; do ((EXPR1;EXPR2;EXPR3)) COMMANDS ; do

LaConsolePatrickHautrive!;~)2010

114

Laboucleuntil until done L'valuationdesexpressions LeshellBashvrifietoutd'abordlasyntaxed'unelignedecommandes,puiseffectuel'interprtation, l'expansionoul'valuationdesexpressions,etenfinsechargedel'excutiondesinstructions. Le shell assure l'valuation des expressions arithmtiques et alphanumrique. Ces valuations permettentdenepasindiquerdevaleurprciseendurl'intrieurd'unscript,maisdeconstruireune expressionquiseravalueet/oucalculelemomentvenu. LeshellBashassure ladclarationdes variables(leta=x ,VAR=VAL), l'valuationdesexpressionsarithmtiques(((ab))) et l'expansiondesexpressionsarithmtiques($((a+b)),$[a*b],expr(a/b)). Leshell Bash assurel'expansiondes paramtres ($VAR,$1,$*, ${PARAMETER}), desfonctions(declare), desregroupements desensembles((az),[a,b,c]),deslistesdemots ({onetwothree})sparspardesespaces(wordspliting),descheminsrelatifs(pathname),des caractresspciaux(tilde,brace,jokers,mta,special)etdesexpressionsrgulires(regex).Leshell assureaussilasubstitutiondecommandes(`cmd`,$(cmd))etlesredirections(stdin0,stdout1, stderr2,filedescriptors[39]). LeshellBashassurelavrificationdesexpressions utilisesdanslesstructures conditionnelles ou itratives(((A==B)),[WORD==STRING],[eFILE],[XgtY]).Lacondition peutgalementportersuruneoptiondushell([oSHOPT]).Lasyntaxed'uneconditiondansles branchements (test) oules boucles (loop) est en gnral delaforme [[XoperatorY]]. Les doublescrochets (brackets) permettent l'expansiondesjokers(gobbling), lacombinaisonavecdes oprateurslogiques(logicaloperator)etl'utilisationdesexpressionsrgulires(regex).Toutefois,les doublescrochetsrequirentd'tresparsparunespacedelacondition(space),etilsnepermettentpas l'expansiondesnomsdefichiers(filename),nil'expansiondeslistes(wordspliting)oudelavariable degauchequandcelleciestentoured'apostrophes(quotes). L'valuationdelaconditionconsistedterminersil'expressionestvraie(true)oufausse(false). Lesmtacaractres Lesmtacaractressontdescaractresspciauxquisparentetrelientlescommandesentreelles.Les mta caractres comprennent, les jokers, le sparateur interne des mots (IFS) et les oprateurs de contrle.
LaConsolePatrickHautrive!;~)2010

CONDITION ; COMANDS

do

115

L'valuationdesexpressionsetdesmtacaractresparleshellBash L'valuationdesexpressions arithmtiques Lesmtacaractresquisparentourelientlescommandes Lesjokersouexpressionsrationnellesourgulires(regex) Lesparateurinterne (IFS) Lesoprateursdecontrle L'oprateurde(BACKGROUND) L'oprateurlogique(AND) L'oprateurlogique(OR) L'oprateurd'enchainementdescommandes(DOTCOMA) L'oprateurderedirection(PIPE) L'oprateurdeconcatnation(SUPERIORINFERIOR) L'oprateurderegroupementdansunsousshell L'oprateurderegroupementdansunblocshell L'oprateurd'valuationd'expression(BRACKETS) L'oprateurdefindelignedescript L'oprateurdepassagelaligne Lesjokers Le shell assure galement la traduction des expressions rationnelles ou des expressions rgulires (regex)quiestunecontractionpourERE(ExtendedRegularExpression).Cesexpressionsemploient lescaractresspciauxdushell(specialcaracters)etpermettentdedfinirdesensemblesdevaleurs l'intrieurd'uneformulationcourteetgnrique (pattern).L'utilisationdes jokers (wildcards) par exemple(.,?,*,[,])remplacedansunmotoudansuneexpression,unouplusieurscaractresprsents maisinconnus.Lesjokers(globbing)sontdescaractresspciauxqui,commed'autrescaractressont significatifspourleshell.Cescaractresspciauxpeuventtrecompriscommedesraccourcispour dsignerunensembledevaleur. Lesparateurinterne Parconvention,lesparateurinterneouIFS(InternalFieldSeparator)estlecaractred'espacefrapp aveclabarred'espace(SPACE)oulatouchedetabulation(TAB).Lesparateurinterneestunmta caractrequipermetdedistinguerlesoptionsentreelles. Lesoprateursdecontrle Lesoprateursdecontrlesontdesmtacaractresquioprentunefonctiondecontrledelalignede commande. Unoprateurdecontrle termine toujours uneligne decommande.Les oprateurs de contrle permettent de relier deux commandes entre elles et d'effectuer des contrles avant leur excution.
LaConsolePatrickHautrive!;~)2010

(expr) (|?*&;(){}[]<>IFS) (?,*,[,]) (SPACETAB) (&&&|||;;;<><<>>CRNL) (cmd&) (cmd&&cmd) (cmd||cmd) (cmd;cmd) (cmd|cmd) (cmd>>file) ((cmd;cmd)) ({cmd;cmd}) ([cmd;cmd]) (;;) (RETURNetNEWLINE)

116

Lescaractresspciaux Lesshellreconnaitunensembledecaractresspciaux.Lescaractresspciauxdsignenttousles caractresvisiblesduclavier(figurantl'intrieurdelatabledecodagedescaractresASCII)quiont pourleshelletlesscriptsunesignificationparticulire. L'ensembledecescaractresspciauxfontl'objetd'unestandardisation.Lesmtacaractresquise composentdesjokers,dusparateurinterne(IFS),etdesoprateursdecontrlesontdescaractres spciaux,auxquelss'ajoutentlescaractresd'chappementquiprotgentuneexpressiondel'valuation parleshellouunevariabledesonexpansion,commel'antislash,lesguillemetssimples(apostrophe)ou doubles.Leguillemetinvers(Altgr+7,reversequote,backquote,backtick)estlecaractrespcial desubstitutiondursultatd'unecommande. LescaractresspciauxdushellBash Lesparateurinterne(IFS) Lejokercaractre ? Lejokermultiple * Lesparateurdevaleur [a,c] L'intervalledevaleur [az] Lesvaleursextrieuresunintervalle [^az] Lesintervallesdecaractresspcials(dbutoufin) [aZ] Lasubstitutiondursultatd'unecommande ` Laredirectiondelasortieenentre | L'chappementdupassagelaligne \ Lelancementdecommandesensousshell () Leregroupementdecommandesenblocshell {} Leregroupementd'expression [] Laprotectioncontretoutevaluation L'chappementd'unmtacaractre \ Laprotectioncontrel'expansiondesvariables ' L'enchainementdecommandes ; Lelancemententchedefond & Lessquencesd'chappement Lessquencesd'chappementsspcialespermettent d'inscrireuncaractreassociunetouchedu clavierouunevaleurdelatabledecodagedescaractresASCIIsur8bitsdontlalisteestdonne aveclacommande manbash.Lacommande manascii donneunedescriptiondelatablede codageASCII.Lessquencesd'chappement(escape sequence)sontinterprtesavec lacommande echoe. (barred'espaceettabulation) (interrogation) (toile) (virgule) (hyphen) (carat) (startingorendingtheinterval) (Altgr+7ouquote) (Altgr+6oupipe) (backslash) (parenthse) (accolade) (crochet) (guillemet) (backslash) (apostrophe) (pointvirgule) (esperluette)

LaConsolePatrickHautrive!;~)2010

117

Lessquencesd'chappement(escape)(echoe)(manascii) Lescaractresspciauxchappsavecl'antislash /,\,|,(,),[,[,{,},^,$,*,+,?,. L'interprtationdessquencesd'chappement echoe"\120\115\114\110" Laclochette \a (alertbell) LatoucheRetourArrire \b (backspace) Dsactivationdel'affichagedumessage \c (producenofurtheroutput) Unespace \e (escapecharacter) Latouche \f (formfeed) LecaractreASCIInouvelleligne \n (newline) LatoucheENTRE \r (carriagereturn) Latabulationhorizontale \t (horizontaltab) Latabulationverticale \v (verticaltab) L'chappementdusymboled'chappement \\ (backslash) L'chappementdel'apostrophe \ (singlequote) L'chappementduguillemet \ (doublequote) L'chappementdel'apostropheinverse \` (reversequote) Lavaleuroctaled'uncaractreASCII8bits \NNN (octalvalue) Lavaleurhexadcimaled'uncaractreASCII \HHH (hexadcimalvalue) Lecaractredecontrle \cx (controlxcharacter) Lesoptionsdelacommandeecho(manecho) L'interprtationdessquencesd'chappement Ladsactivationdel'affichagenouvelleligne Ladsactivationdel'interprtation(bydefault) Lesscriptsshell Les scripts shell sont des fichiers excutables contenants des commandes. Les scripts permettent d'automatiser les tches d'administration. Un script shell sera interprt par le shell dans lequel il s'excute.Lesscriptsdoiventavoirledroitd'excution(x)pourl'utilisateurquisouhaitel'excuter.A l'intrieurd'unscript,lecaractredisepermetd'afficherdescommentaires.L'excutiond'unscript peutfairel'objetd'uneinterprtationspcifique.Letyped'interprtationestalorsindiquendbutde scriptparlarfrenceauchemindubinairedel'interprteurdecommande. Lesscriptsshell L'attributiondudroitd'excution Lescommentairesl'intrieurd'unscript LesscriptsBourneShell LesscriptsBourneAgainShell LesscriptsCshell LesscriptsPerl LesscriptsPhp
LaConsolePatrickHautrive!;~)2010

e n E

(echoe\nHello) (echoneHello\n) (echoE\t\n\cHELLO)

(chmod+xscript) (#avecAltgr+3) (#!/bin/sh) (#!/bin/bash) (#!/bin/csh) (#!/usr/bin/perl) (#!) 118

L'interactionavecl'utilisateur L'interaction entrel'utilisateur et le processus peut s'effectueravecl'appel systme read() ou la commandeinterneaushellreadquipermettentderedonnerlamainl'utilisateurafinqu'ilsaisisse unedonne,laquelleserastockedansunevariableinterneetutiliseparlasuiteparlafonctionoule script. L'interactionavecl'utilisateur L'interactionaveclacommandeinterne L'interactionaveclafonctiondusystme (read) (read())

LaConsolePatrickHautrive!;~)2010

119

PROCESS Lesprocessus Les processus reprsentent les commandes, les applications ou les serveurs en mmoire vive (memory).Tous les excutables quitournent surunsystme GnuLinux sontidentifiables parun processus.Lesprocessusportentlenomdelacommandeavecsesoptions.Lesystmeattribueun numrosquentieluniquechaqueprocessus,pouvantallerde230000.Lenumrod'identification d'unprocessusouPID(ProcessIdentification)permetdefairerfrenceauprocessusetdeluienvoyer dessignaux(signal).Lesprocessus peuventcommuniquerentreeuxet changerdes donnes,soit localement,parlemcanismedesIPC(InterProcessCommunication)etdesredirectionsdesentres sortiesouI/O(InputOutput),soitdistance,vialerseau,parl'intermdiairedessocketsTCP/IPou desRPC(RemoteProcedureCall). Touslesprocessussontlesdescendantsd'unautreprocessus,etformentainsiunefiliation(pstree)qui remontejusqu'auprocessusinit.Leprocessusinitestlepremierprocessusdusystme.Leprocessus initatlancparlenoyaulorsdelaprocdured'initialisation,etportelenumrod'identifiantun.Les processus hritent de leur processus parent le mme environnement (variables, droits, racine). Par exemple, tous les processus d'un utilisateur qui s'est connect sur un terminal virtuel, sont les descendantsdesonshelldeconnexion.Touslesprocessusappartiennentunutilisateurdusystme.Le propritaire d'un processus est gnralement l'utilisateur qui a lanc la commande. Les processus partagentlespermissionsdel'utilisateuretdugroupequiensontlespropritaires. Lesprocessuspeuventtreexcutsenavantplan(foreground)ouenarrireplan(background).Le contrledestches(jobcontrol)consistegrerlesprocessus.Lesprocessuspeuventtredtachsdu terminalauxquelsilssontrelis(nohup).Unprocessusdtachn'aplusdeliendefiliationavecson processusparent.Lesserveursou DAEMON (DiskAndExecutive Monitor)sontdesprocessusqui tournententchedefond,quisontdtachsdeleurterminal,etquirestentl'couted'unvnement grceunestructuredecodeenboucleinfinie.Laprocdured'initialisationdusystme(init)dmarre denombreuxservicesouserveurs,dontlesuperdmoninternet(xinetd).Lesprocessussontregroups pargroupesdeprocessus.Lesshellsdeconnexionsontinitialissavecunnouveaunumrodegroupe (SESSION). Lescommandesps,topetpstreepermettentdevisualiserlesprocessusencours. Lavied'unprocessus Lavied'unprocessussedrouleenmmoirevive.Lenoyaurserveunespaceenmmoirevivepour chaqueprocessus(coreimage),etl'ordonnanceurdunoyau(sheduler)distribueletempsprocesseur (timesharing)chacundesprocessusenfonctiondeleurpriorit(nice).Lesprocessusexcutentainsi tourderlelestches,lesinstructions oulecodequ'ilscontiennent.Parexemple,unprocessus
LaConsolePatrickHautrive!;~)2010

120

remplitl'espacemmoirequiluiestattribuparlecodebinairedelacommandequ'ilreprsente,etle codebinaireestrgulirementcharg,puisexcutparleprocesseur.L'excutiondestchesdechaque processuss'effectueaufuretmesure,etenfonctiondelarpartitiondestchesparl'ordonnanceur (multithreads). C'estl'ordonnanceurquidcide,quandetquelprocessuss'excute(multitchespremptif). Lesactivitsdesprocessussontcontrlesparlesystme.L'espacemmoiredesprocessusestprotg, etlesprocessusnepeuventfairequecequiestautorisparleurspermissions.Siunprocessustentede fairequelquechosequeneluipermetpassespermissions,alorsunmessaged'erreurestenvoyla sortiestandardpourprvenirl'utilisateurdel'arrtdesacommande.Toutefois,ilestpossiblequ'un processussoitprogrammpourchangerlecodequ'ilcontient.Quandtoutsedroulebien,leprocessus faitexcutertoutessestchesparleprocesseuretsetermine. Laterminaisond'unprocessus Laterminaisond'unprocessuspeuttredueunarrtbrutaldesonexcution,soitparcequ'ilnedtient paslespermissionssuffisantes,soitparcequ'undysfonctionnementl'empchedecontinuer(bug).En gnral,unprocessusseterminequandilafaitexcutertoutessestchesparleprocesseur.Quandun processusenfantsetermine,ileninformesonprocessuspreenluienvoyantsoncoderetour(return code). Le code retour d'un processus est toujours gal zro quand sa tche s'est droule sans encombre,etquesonexcutionfutunerussite(success).Laterminaisond'unprocessuslibrelePID. Lesprocessusconstituentdes groupes deprocessusquiontlemmeanctre.Laterminaisond'un processusentrainelaterminaisondetouscesdescendants.Ainsi,laterminaisondushelldeconnexion d'unutilisateurentrainelaterminaisondetoussesprocessus,saufceuxquionttdtachs(nohup)et pourlesquelsleliendefiliationatrompu. Lacommandeps Lacommandepspermetdevisualiserl'activitdesprocessus.Lacommande psestcommunea touslessystmesUnices,maisl'emploidesesoptionspeutlgrementvarierd'unsystmel'autre.Par exemple,lesUnixAT&Tpropritairesutilisentlesoptionsenplaantdevantuntiret(hyphenor dash),lessystmeslibresBSDutilisentlesoptionssansprfixe,etlessystmesGnuLinuxutilisentles optionslonguesetexplicites(gnulongoption)enplaantdevantdeuxtiretscontinus(doubledashes). LessystmesGnuLinuxacceptentgalementlesoptionsformuleslafaondesautressystmes.En gnral,lesoptionsdescommandesGnusontbeaucoupplusnombreuses,parcequelesprogrammes sontdveloppslibrementpardesmembresdelacommunautdesLogicielsLibres(freesoftware). Lacommandemanpsdonneunedescriptioncompltedesoptionsdelacommande,desattributset descodesd'tatdesprocessus,descorrespondancesavecd'autressystmesUnices,ainsiquelenom desvariablessusceptiblesd'enmodifierlecomportementoul'aspect(personality).Parexemple,le
LaConsolePatrickHautrive!;~)2010

121

champSESSIONcorrespondungroupedeprocessus.LechampSTATindiquel'tatd'activitd'un processus.Lechamp RSS (ResidentSetSize)correspondlatailledel'espacerservenmmoire vive.Certainesoptionspossdentplusieursalias. Lesoptionsdelacommandepsetlesattributsdesprocessus(manps) %cpu command fgroup ni psr sgi_p start_time tpgid %mem cp flag nice rgid sgid stat tt args cputime flags nlwp rgroup sgroup state tty blocked egid fname nwchan rss sid suid ucmd bsdstart egroup fuid pcpu rssize sig suser ucomm bsdtime c eip esp fuser gid pending pgid rsz rtprio sigcatch sigignore svgid svuid uid uname caught etime group pgrp ruid sigmask sz user class euid ignored pid ruser size thcount vsize cls euser label pmem s spid tid vsz cmd f lstart policy sched stackp time wchan comm fgid lwp ppid sess start tname

Lestatsd'unprocessus Selonl'ordonnancementdesprocessus(sheduler),lesprocessuspassentd'untatl'autre(STAT).Les processussontcrsparunprocessusparent(fork),puispassentsuccessivementdanslestatsd'attente (sleeping), de rveil et d'lection au processeur (running), d'arrt (stopped), de pagination (swapping),etdesemiterminaisonaprsavoirenvoyunsignalleurpre(zombie). Lestatsd'activitdesprocessus(manps) Code D R S T W X Z < N L s 1 + Meaning Damned Running Sleeping Stopped Swapping Dead Zombie English French Uninterruptiblesleep(usuallyIO) Dormance Runningorrunnable(onrunqueue) Processeur Interruptiblesleep(waitingforaneventtocomplete) AttenteCPU Stopped,eitherbyajobcontrolsignalorbecauseitisbeingtraced ArrtCtrl+Z Paging(notvalidsincethe2.6.xxkernel) Pagination Dead(shouldneverbeseen) Mort Defunct("zombie")process,terminatedbutnotreapedbyitsparent Zombie FormatBSD

Notnice Highpriority(notnicetootherusers) Nice Lowpriority(nicetootherusers) Locked Pageslockedintomemory(forrealtimeandcustomIO) Session Sessionleader Multithread Multithreaded(CLONE_THREAD,NPTLpthreads) Foreground Processisintheforegroundprocessgroup

LaConsolePatrickHautrive!;~)2010

122

Letempsprocesseur Letempsprocesseursemesuredediffrentesfaons.Lacommandetimecmdexposetroistemps,le tempsrelcoul(REAL),letempsd'utilisationduprocesseurenzoneutilisateur(USER)etletemps d'utilisationduprocesseurenzonekernel(SYS). Lacommunicationinterprocessus La communication inter processus est un mcanisme global de communication des processus. La communication inter processus ou IPC (Inter Process Communication) utilise le concept de smaphores(sem.h)etdefichiersdescripteurs(filedescriptor) pourtransmettredesdonnesd'un processus l'autre. La communication inter processus comprend galement l'envoi de signal un processus. Par exemple, un processus enfant peut envoyer un signal son processus parent lui indiquantqu'ilaterminsatche(SIGTERM).Parailleurs,unutilisateurpeutenvoyerunsignall'un desesprocessusaveclacommandekill.Enfin,deuxprocessuspeuventcommuniquerentreeuxpar l'intermdiairedesentressorties(pipe)oudeleursfichiersdescripteursrespectifs(filedescriptor). Chaque processus possde son propre environnement de communication. L'environnement de communicationd'unprocessusestconstitudefichiersdescripteurs(filedescriptor),quipeuventtre ouverts,fermsouredirigs.Lestroisprincipauxfichiersdescripteursd'unprocessus(I/Ostandard) correspondentauxEntres/Sorties(Input/Output).Touslesprocessusdisposentd'uneentre(input) et de deux sorties (output), mais d'autres fichiers descripteurs peuvent tre ouverts. Certains programmes sont appels des filtres (filter) parce qu'ils rcuprent un flux de donnes qu'ils transformentetrestituentensortie. Lacommunicationinterprocessus(smaphoresIPC) L'envoid'unsignalunecommande L'envoid'unsignalladernirecommandelance LaconnaissanceduPIDd'unecommande L'envoid'unsignalSIGKILLunprocessus L'informationsurlessignauxetlacommunicationIPC Lesfichiersdescripteurs Tous les processus sont dots d'une entre (STDIN) et de deux sorties standards, la sortie pour l'affichagenormal(STDOUT)etlasortiepourl'affichagedeserreurs(STDERR).Lesentresetles sortiesstandardsd'unprocessustransitentpardesfichiersspciauxappelsdesfichiersdescripteurs (filedescriptor).Lesfichiersdescripteursdechaqueprocessussontidentifisparunnumro,dezro quatreouplus.Commechaquecommandeestexcutedanslecadredesonpropreprocessus,chaque commandedisposedesmoyensdecommunicationstandardspourrecevoirdessignauxetchangerdes donnesavecd'autresprocessus.Lessortiespeuventtreredirigesversunfichier,versunecommande
LaConsolePatrickHautrive!;~)2010

(killNUMSIG%cmd) (kill%%) (psaux|grepcmd) (kill9NUMPID) (mansignaletmanipc)

123

ouversunpseudofichier,commelefichiersansfond(/dev/null). Quandilyauneredirection,lesdeuxderniersfichiersdescripteurs(3et4)desdeuxprocessussont ouverts pour recevoir ou dispenser les donnes. Les redirections utilisent les fichiers spciaux /dev/stderr,/dev/stdinet/dev/stdoutpourtransmettrelesflux.Parexemple,leprocessuspre (leshell)transmetauprocessusfils(lacommande)cescinqfichiersdescripteursenhritage(numrots dezro4),maisundcalageestoprquandilyauneredirectionentrelesdeux. Lesredirectionsdesentressortiesentreprocessus(pipeline) L'entrestandardd'unprocessus(clavier) Lasortiestandardd'affichagedesrsultats(cran) Lasortiestandardd'affichagedeserreurs(cran) Lescommunicationsentrefichiersdescripteurs Lescommunicationsentrefichiersdescripteurs Lespipelines Deuxprocessuspeuventtrerelisentreeuxparl'intermdiaired'untunnel(pipeline).Uneconnexion esttablieentredeuxprocessusquandlasortiestandarddel'unestreliel'entrestandarddel'autre. Un flux de donnes transite del'un l'autre. Leflux sortant (STDOUT) d'un processus alimente l'entrestandard(STDIN)del'autre. Cemcanismederedirectionestappelpipelineetpermetdeformerdestrainsdecommandes.Les oprateursderedirection(pipe,|,Altgr+6)tablissentlestunnelsotransitelefluxd'information (stream)entreunesortieetuneentre. Lesoprateursderedirection Lesoprateursderedirectionsontdescaractresspciauxdushell,cesontdesmtacaractresquiont lafonctiond'oprateursdecontrle.Lesoprateursderedirectionpeuvents'utiliserversunfichierou vers un fichier descripteur (file descriptor) correspondant l'entre d'un processus ou d'une commande. Unoprateurderedirectionsimple(<,<<,>,>>)utiliselecontenud'unfichiercommeEntrepourune commande, ou redirige la Sortie d'une commande vers un fichier qui enregistre le rsultat. La redirectionversunfichierpeut craser (clobber) etremplacer touteinformationprexistante,tandis qu'unoprateurde concatnation (concatenate), permetdeplacer, en finde fichier,le rsultatd'une commande (stock). Les oprateurs de redirection simples crent le fichier si celuici n'existe pas (create). Quand la redirection concerne deux processus (pipe), l'on dit que les oprateurs de redirection
LaConsolePatrickHautrive!;~)2010

0=STDIN (/dev/stdin) 1=STDOUT (/dev/stdout) 2=STDERR (/dev/stderr) 3==> 0(sortiedupreversl'entredufils) 4==> 1(entreduprereoitlasortiedufils)

124

tablissentdestunnels(pipeline)oudescanauxdecommunicationentrelesdeuxprocessus.Untunnel permetdefairetransiterlefluxdesortied'unprocessus(stream)versl'entred'unautreprocessus. Lesoprateursderedirection(manbash)(manstdin)(manstdout)(manstderr)(manstdio) Lesoprateursdecontrlederedirectionsimples Lesoprateursdecontrledeconcatnation Laredirectiondel'entrestandardSTDIN0(clavier) LaredirectiondelasortiestandardSTDOUT1(cran) LaredirectiondelasortiedeserreursSTDERR2(cran) LaredirectiondessortiesstandardSTDOUTetSTDERR LaredirectiondessortiesstandardSTDOUTetSTDERR Lesexemplesderedirection Les oprateurs de redirection peuvent employer l'oprateur logique AND (&) pour cumuler la redirection de plusieurs fichiers descripteurs (file descriptor). La commande tee permet de dupliqueruneSortieStandard(output)etdelaredirigerverslesfichiersplacsenargument. Lesexemplesderedirection(manbash)(manstdin)(manstdout)(manstderr)(manstdio) cmd>file cmd1>file cmd1>>file cmd2>file cmd2>>file cmd>file2>&1 cmd>>file2>&1 cmd>fileout2>fileerr cmd>>fichier cmd<fichier cmd|teefile RedirigerSTDOUTdansunfichier RedirigerSTDOUTdansunfichier RedirigerSTDOUTenfindefichier(concatenation) RedirigerSTDERRdansunfichier RedirigerSTDERRenfindefichier(concatenation) RedirigerSTDERRetSTDOUTdanslemmefichier RedirigerSTDERRetSTDOUTenfindefichier(concatenation) RedirigerSTDOUTdansfileoutetSTDERRdansfileerr RedirigerSTDOUTlasuitedefichiersanscraser(concatnation) LacommandereoitlecontenudufichiercommeEntre(STDIN) Lacommandeteedupliquelasortieetl'enregistredanslefichier (>,<,etlepipe|avecAltgr+6) (>>,<<) (0>) (1>) (2>) (2>&1) (>&)

L'envoidesignalauxprocessus L'envoidesignauxauxprocessuspermetdegrerl'activitdesprocessusenmmoire.Lalistedes signaux disponibles est donne avec la commande man signal. Les signaux sont envoys aux processusaveclacommandekillSIGPIDquiprendpourparamtresletypedesignaladressetle numrod'identificationduprocessus(PID). Chaqueprocessusestidentifiparunnumrod'ordreuniquequiluiestattribuaulancementdeson excution,lePID(ProcessusIdentifier).LesnumrosdePIDdesprocessusenactivitsontindiqus dans la commande ps aux. Les signaux SIGKILL(9) et SIGSTOP(17) ne peuvent tre ni
LaConsolePatrickHautrive!;~)2010

125

intercepts,nibloqus,niignorsparlesprocessusquilesreoivent. Lamortd'unprocessus(parent)entraineautomatiquementlamortdesprocessusqu'ilagnr(child). Unprocessusappelzombien'anipre,nifils. Lessignauxenvoysunprocessuspeuventtre interceptsparlacommandetrap. L'envoidesignalauxprocessus(mansignal)(killl) SIGHUP SIGINT SIGQUIT SIGILL SIGTRAP SIGABRT SIGFPE SIGKILL SIGSEGV SIGPIPE SIGALRM SIGTERM SIGUSR1 SIGUSR2 SIGCHLD SIGCONT SIGSTOP SIGTSTP SIGTTIN SIGTTOU 1 2 3 4 5 6 8 9 11 13 14 15 30,10,16 31,12,17 20,17,18 19,18,25 17,19,23 18,20,24 21,21,26 22,22,27 (hangupordeathprocess) (reload) (interrupt) (Ctrl+Alt+Del) (quit) (core) (illegalinstruction) (trap) (abortsignal) (floatingpointexception) (killsignalnointerception) (invalidmemoryreference) (segment) (brokenpipe) (timeralarm) (termination) (default) (userdefined) (userdefined) (childstoppedorterminated)(SIG17nointerception) (continueifstopped) (stopwithnointerception) (stoptypedattty) (stopttyinput) (stopttyoutput)

L'hritagedel'environnement Tous lesprocessus engendrs hritent del'environnementdeleurprocessuspre.Comme tous les processus dpendent du processus initial (init), tous disposent apriori du mme environnement. L'environnementd'unprocessusestconstitudetouteslesinformationsqueluiatransmisessonpre (PPID),commelesvariablesetlesfonctionsd'environnement(env). Toutefois, une commande peuttre lance dans un environnement spcifique. Les variables d'environnementsontditesglobalesquandellessontexportesd'unprocessusl'autre,etsontdites localesquandleurs influences restent confines l'intrieurd'unseulprocessus.Unedescriptionde l'environnementestdonneparlescommandesmanenviron,manenv,infocoreutilsenv. Lafiliationdesprocessus

LaConsolePatrickHautrive!;~)2010

126

L'hritagedel'environnementreprsentetouscequ'unprocessusprelguesesprocessusfils.Cette transmissionentreprocessusestunpartageetuneattributiondesmmesinformations.Cettefiliationse matrialiseaveclacommandepstreequilisteetclassetouslesprocessus. Pourlancerunecommande,leprocessusdushellva,enrglegnrale,demanderaunoyaudecrerun clonedeluimme(fork).Lesystmevacrerenmmoireunprocessussparmaisayantlemme environnement que le shell, et va lancer la commande l'intrieur de ce nouveau processus. Le processusprenes'occupepasdelaralisationdestchesrelativeslacommande.C'estleprocessus filsquiralisedefaonindpendantelestchesdelacommande.Quandlefilsaterminsontravail,il rendcomptesonpre(SIGTERM).L'arrtd'unprocessus(parent)entrainelaterminaisondetous cesprocessusenfants(child). Quandlacommandeaaccompliesontravail,cellecitransmetaushelllesrsultatsquilesaffiche l'cran.C'est pourquoi parfois le prompt dushell nerapparait pas tout desuite. Quandcertaines commandesprennentuncertaintempspourterminerlestchesquileurincombent,alorsleshellattend pourafficherlesrsultatsetprsenterdenouveauleprompt.Parcontrequandunecommandeest lancedirectemententchedefond(background),leshelln'attendpaslafindel'excutiondecelleci etprsentelepromptimmdiatement. Danscertaincas,letravailestralisl'intrieurmmeduprocessusdushell,commeparexemple l'excutiond'unecommandeinterneaushell. L'hritagedel'environnemententrelesprocessus Laconnaissancedesfiliationsdesprocessus Lerpertoirecourant(printworkingdirectory) Lesvariablesd'environnementissuesduprocessusinitial Lesvariablesexportablesduprocessuspre Laplacedelaracinedanslesystmedefichiervisible Lemasquedecrationdesfichiers Leslimitesquantitativesd'usagedesressources Lespermissionsdel'utilisateurparent(rwx) Lenumrod'identificationduprocessuspre(PPID) Lesvariableslesfonctionsglobales Ladfinitiondesalias Lapositiondubitquiempchel'crasementdedonnes Leterminals'iln'yapasdedtachement(TTY) Lecontrledestches Le contrle des tches (job control) permet de grer l'avant et l'arrire plan des processus. La commande jobs. Les jobs sont ordonns par numros. Les commandes peuvent tre lances en arrireplan(ouautrementditentchedefond)l'aidedel'oprateuresperluette(cmd&)etl'aide
LaConsolePatrickHautrive!;~)2010

(pstree) (pwd) (init) (export) (chroot) (umask) (ulimit) (lsla) (psaux) (env) (alias) (noclobber=1setnoclobber) (tty)

127

del'interruptionauclavier(Ctrl+Z)quipermetd'interrompreleprocessusencours,puisdelebasculer entchedefondaveclacommandebg(background). Untravailentchedefondpeuttrerebascull'avantplanaveclacommande fg (foreground). Pour le lancement d'une commande en tche de fond, le shell (le processus pre) n'excute pas l'instructionwait()afind'afficherlepromptimmdiatement. Lecontrledespriorits Lecontrledesprioritspermetderalentiroud'acclrerl'excutionrelatived'unetche(nice et renice).Lesprocessussontlancspardfautaveclaprioritzro,c'estdirequ'ilssonttoustraits surlemmepiedd'galit.Toutefois,laprioritd'unprocessuspeuttremodifie(de+1920).Un processus gentil (nice) est un processus qui laisse la priorit aux autres pour l'accs au temps processeur.Lesvaleurspositivesralentissentletravaild'unprocessus,tandisquelesvaleursngatives (notnice!)acclrentletraitementdestchesd'unprocessus.Seull'administrateur(root)peutallouer des valeurs ngatives des processus (negative values). Par contre tous les utilisateurs peuvent changerlesprioritspositivesdeleurprocessus(positivevalues). Lecontrledestchesetdespriorits Lelancementd'unecommandeBACKGROUND L'affichagedestchesenBACKGROUNG LebasculementenBACKGROUND LebasculementenFOREGROUND L'envoidesignalunetche L'interruptionduprocessusencours L'attributiond'unepriorit Lamodificationd'unepriorit L'identitdesprocessus L'identit dupropritaire d'un processus est renseigne parla variable UID (UserID) etl'identit effectivesouslaquelleseraexcutleprocessusestrenseigneparlavariableEUID(EffectiveUID). Gnralement,cesdeuxidentitssontlesmme,maisl'utilisationdesbitsSUIDetSGIDpermettent l'usagedecettedistinction.L'identitdel'utilisateurpeuttremodifieafindelancerunecommande aveclesdroitsd'unautreutilisateur. Lechangementd'identit Lechangementd'identitpeuts'oprerponctuellement(sudocmd) oubienpouruncertaintemps aveclacommandesupourswitchuser.Danslepremiercas,ilfautfairepartiedesutilisateurs
LaConsolePatrickHautrive!;~)2010

(cmd&) (jobs) (bg) (fg%NUMJOB) (killNUMSIG%NUMJOB) (Ctrl+Z) (nicede+1920) (renice)

128

autoriss(/etc/sudoers),etdansledeuximecas,ilfautconnaitrelemotdepassedel'utilisateur(le motdepasserootquandlacommandesuestlancesansparamtres). Lacommandesupermetdebasculerdansl'environnementdel'utilisateurroot.Lesutilisateursqui fontpartiedugroupewheelpossdentlesmmesdroitsquelesuperutilisateur.Lacommandeid permetdeconnaitrel'identitdel'utilisateurencours. Lespermissionsspciales Dansd'autrescas,lescommandessontprvuespours'excuteraveclesdroitsdeleurspropritaireset non pas les droits de l'utilisateur qui lance la commande. Par exemple, pour la commande /usr/bin/passwddontlebitSUIDestactiv,cetteprocdureestindispensableafindepermettreaux utilisateursdechangerleurmotdepasse.Toutefois,d'unpointdevuescuritaire,laprolifrationdes binairesayantlebitSUIDouSGIDn'estpasconseille. LesbitsSUIDetSGIDsontrespectivementlesbitsattribusaupropritaireetaugroupepropritaire d'un binaire. Ces binaires seront respectivement lancs automatiquement avec les droits de leur propritaireouavecceuxdeleurgroupepropritaire.Demme,lesStickyBitssontattachsauxdroits des rpertoires et permettent de conserver la proprit de tous les fichiers qui y sont crs sous l'identitdupropritairedurpertoire.UnStickyBitattachunfichierbinairestipuleausystmede conserversoncodeexcutableenmmoire. Les bits SUID et SGID sont reprsents avec un S majuscule (quand il n'y a pas le droit x d'excution)ouavecunsminuscule(quandilyaledroitd'excution).Pourtreexcutunbinaire doitpossderledroitd'excution,maisceluicin'apasbesoind'treplacpartout(ugo).Pareillement, lesStickyBitsontreprsentsavecunTmajuscule(quandiln'yapasledroitxd'excution),et avecuntminuscule(quandilyaledroitd'excution). Lespermissionsspcialesetlechangementd'identit L'identitdel'utilisateurencours(UIDetEUDI) Lebasculementdansl'environnementd'unutilisateur Lechangementd'identit Lelancementd'unecommandeavecd'autresdroits Lesutilisateurshabilitspoursudo LesbitsSUIDetSGIDdesbinaires LesStickyBitsdesrpertoiresoudesbinaires Legroupedesutilisateurshabilitsroot Laconfigurationdesprocessus (id) (suroot) (su) (sudocmd) (/etc/sudoers) (Sous) (Tout) (wheel)

LaConsolePatrickHautrive!;~)2010

129

Laconfigurationdesprocessus Commands ps top pstree pgrep ls env umask ulimit manps manbash mansignal manenviron manenv infocoreutils manipc pidof id jobs nice fuser bg renice lsof fg nohup watch kill su time killall sudo init pkill alias pwd cmd& set xargs at atq atrm batch crontab cron export chroot /proc/* /proc/kcore /dev/mem /etc/sudoers /etc/toprc ~/.toprc /dev/stderr /dev/stdin /dev/stdout Files Packages /etc/at.allow procps /etc/at.deny psmisc /etc/cron.d/cron.allow coreutils /etc/cron.d/cron.deny /var/spool/cron/atjobs /var/spool/cron/crontabs /usr/include/asm/signal.h

Lesexemplesdeprocessus pse (systemprocess) psf (fullinformation) psuUID (userprocess) topb2 (refresh2second) killPID (SIG15bydefault) killl (listallsignals) killallhttpd (killallprocess) hd/proc/kcore pseouid,pid,ppid,session,%mem,nice,stat,tty,cmd psaux|grephttpd|grepvgrep|awk'{print$2}'|xargskill9 find/var/lognameapachetypef|xargs/bin/rmf psaux;ls/proc/1;pstreep;urpmiprocps;pswax;psChttpd pidofbash;nicen15bash;nicen10emacs& jobs;gedit;Ctrl+Z;bg;fg1;Ctrl+C;gedit&;jobs;fg1 psalux;pspid1;killHUPPIDNUM;kill9PIDNUM;killSIGHUP'cat/var/run/syslogd.pid' renice10PIDNUM;pst"12";timegzipfile psuroot(GnuLinux);psfuroot(UnixSystemV) crontabtodo.txt at1:23 lp/usr/* echoprogrammes|mailsJobOKroot Ctrl+D at10:00<todo.txt;atl;atrmATNUM nohupls|nohupsort setignoeof(Ctrl+D) batch sort/usr/*|lp echoyes|mailxsJobOKroot
LaConsolePatrickHautrive!;~)2010

130

Ctrl+D bg%numjob fg%numjob

LaConsolePatrickHautrive!;~)2010

131

TERMINAL Lestypesdeterminal Les terminaux sont soit physiques, soit logiques. Les terminaux physiques (pupitres) sont des quipementsmatrielsconstitusd'unclavieretd'uncranreliunordinateurcentral.L'onparlede terminauxpassifsquandaucuntraitementnes'ydrouleetquel'uniquefonctiondontilssontchargs estdetransmettreetderecevoirlesdonnes.Tandisquelesterminauxlogiques(mulateurs)sontdes logicielsquiimitentlecomportementd'unterminalphysique.Lesterminauxlogiquespeuventtrede plusieurssortes,notammentlesterminauxvirtuels(consoles)accessiblesaveclestouchesCtrl+Alt+1 6 etlespseudoterminaux(fentres)quisontaffichsparleserveurgraphique.L'onparlealorsde terminalX. Lestypesdeterminal Lesterminauxphysiques Lesterminauxlogiques Lesterminauxvirtuels(Ctrl+Alt+F1) Lespseudoterminaux(xterm)outerminauxX L'mulationdeterminal Les systmes Gnu Linux sont capables d'muler de nombreux types de terminaux dont ceux qui correspondentlanormeANSI.Lesterminauxd'unsystmeGnuLinuxsontdes mulations d'un antiqueterminalvidodetypeTltype(d'ol'appellationdelacommande tty).Unemulation signifie quelecomportement duterminal physiquehistorique quipermettait deseconnecter un ordinateurcentraldistant(leterminalDecVT100)estimitparlesterminauxdusystmeGnuLinux. Lacommande xterm estunmulateurdeterminalpourleserveurgraphique. Lacommande ls la/usr/share/terminfo/permetdevisualiserlesterminauxreconnusparGnuLinux. IBM3101 IBM3270 HPterm DecVT52 DecVT100 DecVT102 DecVT220 Tektronix4014 (pupitres) (mulateurs) (consoles) (fentres)

LaConsolePatrickHautrive!;~)2010

132

Lesterminauxvirtuels Lesterminauxvirtuelssontlesterminauxprsentsl'issuedelaprocdured'initialisationenmode lignedecommande(sansinterfacegraphique).Lessixterminauxvirtuelspardfautsontaccessibles aprsledmarragedusystmeaveclestouchesCtrl+Alt+1Ctrl+Alt+6.Depuisunterminalvirtuel, lestouchesAlt+FLECHEDROITEetAlt+FLECHEGAUCHEpermettentdebasculerd'unterminal l'autre.Lestouches Ctrl+Alt+7(DISPLAY=0)etCtrl+Alt+8 (DISPLAY=1)permettentderevenir l'interfacegraphique.UnsystmeGnuLinuxpeutavoirjusqu'douzeterminauxvirtuels. Les terminaux virtuels sont aussi appels consoles. Le premier terminal virtuel (/dev/tty1 ou Ctrl+Alt+1)estleterminalpardfautosontenvoyspardfautlesmessagesdusystme.Lepremier terminalvirtuelestaussiappellaconsolemaitressequiestgnralementrservel'administration dusuperutilisateur(root).Uneconsoledistantedsigneleterminalvirtueld'uneconnexiondistance. Laconsole Laconsoleestunterminalvirtuelpourl'administrateurroot. Lespseudoterminaux Lespseudoterminauxsontdesterminauxprsentsdanslecadred'unefentreafficheparleserveur graphique Xwindow. L'on parle de fentre de terminal ou de terminal graphique. La commande xtermaffichedansunefentreunpseudoterminal. Lespriphriquescaractres Unterminal estunpriphriquedetypecaractre.Lespriphriquesdetypecaractre(character device) sont des priphriques qui acceptent la transmission d'un flux de donnes, caractre par caractre.Tandisquelespriphriquesdetypebloc(blocdevice)acceptelatransmissionparbloc entier.Lacommandelsla/dev/indiquelestypesdefichiersetpermetdoncdevisualisertousles priphriquesprvusparlesystme.Lespriphriquescaractressontdistingusparlalettrecetles priphriquesblocsparlalettreb. Les fichiers spciaux des priphriques (device) sont gnralement automatiquement crs par le systmeetilssetrouventdanslerpertoire/dev/*.L'administrateurpeuttoutefoislesgnrerl'aide du script /sbin/MAKEDEV ou de la commande mknod. Un numro MAJOR et un numro MINORsontattribuschaquefichierspcial.LesystmeGnuLinuxpeutgrerjusqu'63consoles virtuelles.Cespriphriquesdetypecaractrereoiventlenumro4pourleMAJORetunnumro allantde163pourleMINOR.Lesconsolesvirtuellesportentlenomde/dev/tty*.Laconsoleen coursd'utilisationportelenomde/dev/tty0(MAJOR4etMINOR0).

LaConsolePatrickHautrive!;~)2010

133

Lesterminauxfonctionnentenmodefifo(firstinfirstout),c'estdirequelescaractrestransmis enpremierarriventenpremier. Lefluxdetransmissiondescaractrespeutallerjusqu'9600baud (unit de vitesse de transmission approchant le bit par seconde), et chaque flux comporte un bit d'amorage,unbitdeparitetunbitd'arrt.Lorsdesonactivation,unterminalsignalesasquence d'chappement quiluiestpropre(^]ouCtrl+]).Lesterminauxutilisentlabibliothque ncurses pourgrerl'affichagedescaractres. Lafentreactived'unterminalpeutmontrerlecurseursoitensurbrillance,soitenclignotement.La chassedelapolicedecaractrepeuttrefixeouvariable.Lepointd'insertiondescaractrespeuttre avantouaprslecurseur.Uneslectionpeuts'effectuerl'aidedelasourisavecundoubleclicpour unmot,etuntriple clic pourtoutelaligne.Uncopiercollerpeuttreralis(paste)partird'une slectionensurbrillanceenutilisantleclicdumilieu(oudfautdemolette,unclicsimultansurles boutonsgaucheetdroit).

LaConsolePatrickHautrive!;~)2010

134

Lesfichiersduterminal Lesfichiersduterminal(libraryncurses) Commands xterm uxterm kvt rxvt gnometerminal konsole fgconsole xconsole screen tty stty set reset export installkeymap codebreaker mknod MAKEDEV tic loadkeys dumpkeys showkey showrgb xev setkeycodes setleds setmetamode xmodmap charmap setxkbmap setterm tset resize chvt hexdump hd od xcolor dircolors codepag Configuration Information Variables /etc/secutty infocoreutils echo$TERM /etc/usertty mantermcap echo$TERMCAP /etc/terminfo mancurses echo$LS_COLOR /etc/termcap manterminfo /etc/gettydefs manterm /etc/login.defs mantermios /etc/issue manconsole /etc/motd manconsole_code /usr/games/fortune manconsolechars ~/.signature mancharset /dev/console manstty /dev/error mantermwrap /usr/share/terminfo/ manbaseconfig /usr/lib/X11/app manascii defaults/XTerm mancharsets /usr/lib/terminfo/ manutf8 / manunicode usr/lib/kbd/keymaps/i386/azert manlatin1 y/frlatin1.map.gz manlocale / manstty usr/share/keymaps/i386/azerty/f rlatin1.map.gz /etc/profile.d/lang.sh /etc/rc.config /etc/console/boottime.kmap.gz /usr/X11R6/lib/X11/rgb.tx

Lestablesdecaractres Unetabledecaractres(tablecode)estuntableauquidonnelacorrespondanceentrelesvnements du clavier (la pression sur les touches) et les caractres alphanumriques. Les caractres alphanumriquessontl'ensembledescaractresdel'alphabetenmajuscule(deAZ)etenminuscule (de a z), mais aussi, les chiffres dcimaux (de 0 9), la ponctuation (de la virgule au point d'interrogation),les oprateurs numriques(duplusausuprieur),lesunits montaires (commele dollaroulalivresterling),lescaractresspciaux(commeleslash,ledise,l'espaceoulepipe),les touchesdefonction(deF1F12),lestouchesdenavigation(PAGEUP,PAGEDOWN,HOME,END etARROWS),lestouchesdegestiondel'cran(commel'impressioncranoulapausedudfilement),
LaConsolePatrickHautrive!;~)2010

135

lestouchesdegestionduclavier(commelatoucheVERNUMetlestouchesCtrl,AltetMaj)etles caractresattribuscertainessquencesspciales(commelatouchedevalidationoudetabulation). Lescaractresalphanumriquessontclasssl'intrieurd'unetable,etilssontordonnsselondes codesquipermetdelesidentifier(dezro127pourunchiffragesur7bitscommelatableASCII). Cescodespeuventtrecritsenoctal,endcimalouenhexadcimal.Lecodagedescaractrespeut treralissur7bitsou8bits(ASCII),voiresurplusieursoctets,selonl'ampleurdelatabledecodage et le nombre de caractres diffrents prendre en compte. La table de caractres dpend bien videmmentdelalanguechoisiepourlesystme,puisquecertaineslanguesutilisentd'autrescaractres queceuxdumondeoccidental.L'affichagedescaractresestcompltparlapolicedecaractresqui permetdechoisirlestyledel'critureetlerendu(gras,italique,soulign). Lesvnementsduclavieretdelasourissontcaptsgrceauxinterruptionssystmes(IRQ).L'on parledecl(keycode)pourindiquerlatraductiondechaquecaractreendcimal(base10),enoctal (critavec3chiffres)etenhexadcimal(base16),etl'onparledemappage(mapping)pourindiquer latranslationdecesclsverschaquecaractredelatabledecode(keymap).Lestablesdecaractres (charmap) sont propres chaque langue. Les commandes charmap et zcat /usr/share/i18n/charmaps/ISO88591.gzpermetdevisualiserlatabledecodeISOLatin1quiest latabledecaractreutilisepardfautparlesystmeGnuLinux.Lacommandelocalepermetde dfinirlalanguedusystme. Latabledecodedebaseestlatable ASCII (AmericanStandardCodeforInformationInterchange) codesur7bits(pour128caractres)etsur8bits(pour256caractres).Seulslestablescodessur8 bitspeuventafficherlescaractresaccentusdeslanguesnonanglophones. Latabledecodeuniverselestl'Unicode(universalcode)quipermetdereprsentertouslescaractres detousleslangages,maisellerequiertunencodagesurdesentiersde32bit(oudeuxfoisUTF16).La tabledecodeISOestunstandardinternational.LatableISO10646correspondlatableUnicode.La tableISO88591oulatin1estdefactolatablequiremplacelatableASCIIetdontles256premiers caractressontidentiqueslatableUnicode. Latabledecode UTF8 (UnicodeTransformationFormatsur8bits)reprsentepourGnuLinuxle standard pour l'affichage des caractres. L'encodage UTF8 utilise un octet (byte) pour coder un caractrede7bits(0xxxxxxx),deuxoctetspourcoderuncaractrejusqu'11bits(lesdeuxpremiers bitsdupremieroctetsontannonciateursd'unesuitededeuxoctets:110xxxxx10yyyyyyestassembl en00000xxxxxyyyyyy),etc.AinsilepassagedelatableASCIIlatableUTF8nefaitprogresserla tailledesfichiersquede2%enmoyenne,parcelapluspartdeslanguesseserventprincipalementdes 128premierscaractres(sauflerusseetlegrecdontlesfichiersdoublentdetaille).LecodeUTF8est traduitenUnicodeetpuisleglyphecorrespondanteststockenmmoirevidoavantd'treaffich.

LaConsolePatrickHautrive!;~)2010

136

Lestablesdecode ASCII Unicode ISO UTF8 manascii manunicode (ISO10646) manlatin1 (ISO88591) manutf8

Lescommandesmanasciietmanunicodeetmanlatin1etmanutf8dcriventlestables decodagedescaractres. http://www.asciitable.com/ Lessquencesdecontrle Les squences d'interruption sont des squences de touches maintenues qui ont une signification spciale.Lescommandes manstty et manconsole_codes et infocoreutilsstty donnentune descriptiondessquencesdecontrle.Lacommande sttya affichelesvaleursdessquencesde contrle. Lessquencesdecontrleduterminal(sttya) suspintreofeoleraseeol2flushstartrprntstopkilllnextwerasequitswtchdsusp Sequence Name Ctrl+Z Ctrl+A Ctrl+C Ctrl+D Ctrl+E Ctrl+H Ctrl+K Ctrl+L Ctrl+M Ctrl+O Ctrl+R Ctrl+U Ctrl+V Ctrl+W flush rprnt kill lnext ClearScreen FlushLine Reprint KillLine LineNext intr eof eol erase Interruption EndOfFile EndOfLine susp Signification Suspension Fonction Stopleprocessusenavantplan Curseurendbutdeligne Abandonneleprocessusencours Termineleprocessusencours Curseurenfindeligne Effacetoutlaligneaprslecurseur Effacel'cran Validationdelaligne Historiquealphabtiqueinvers Nouvellepagedansunafficheur Effacelederniermotdelaligne sttyflush^O sttyrprnt^R sttylnext^V sttywerase^W CarriageReturn Validationdelaligne sttyintr^C sttyeof^D sttyeol^E sttyerase^H SIGTERM Commande sttysusp^Z Signal

EraseCharacter Effacelecaractre(backspace)

Effacetoutlaligneavantlecurseur sttykill^U

werase WordErase

LaConsolePatrickHautrive!;~)2010

137

personnalisation La duterminal Lapersonnalisationduterminalpermetdemodifierlaconfigurationpardfaut. Lapersonnalisationduterminal Lestouchesmagiques Lestouchesmortes Lessquencesdecontrle Leprompt Lescouleurssyntaxiques Lapolicedecaractre Latabledecodedescaractres Lesexemplesdeterminal sttya loadkeysfr setovi setonoclobber xtermIsl2000 xtermfgred xtermgeometry80x40+10+100fggreenbgredfn7x13bold QUOTE=Leschaneslibres;PS1="$QUOTE\a\n[\u@\h:\w]" Ctrl+L sttyerase'^?'kill'~x' hd/usr/share/terminfo/x/xterm|less straceechoe"\120" number555 clear numlock ls/usr/lib/magic zcat/usr/share/i18n/charmaps/LATINGREEK1.gz

LaConsolePatrickHautrive!;~)2010

138

HIERARCHY L'espacedestockage L'espacedestockagedusystmeestordonndetellesortequ'iln'yaitaucuneambigit.Ilnefautpas confondrel'arborescence(tree)quiprsentelahirarchiedesfichiers,etlesystmedefichiers(file system)quiorganiselesupportdestockage(disk).Souslaformed'unarbreinvers,lahirarchiedu systmedefichiernecomportequ'uneseuleracine(root).Laracineestsonproprerpertoireparent (..).Parcontre,denombreuxpointsdemontagepeuventytregreffs,soitenlocal(partition),soit distance(nfs),etchacunpeutdisposerdesonpropre formatage ouautrementditdesonpropre systmedefichiers.Cespointsdemontagepeuventtreautomatiquementmontslorsdel'initialisation dusystme(mount) aveclefichierdeconfiguration /etc/fstab.Lathoriedes graphes explique qued'autrestypesd'organisationsontenvisageables,maisquecelleciestrapideetsouple. Le FHS 2.3 (File System Hierarchy Standard) correspond unevolont d'harmoniser la structure hirarchique des fichiers l'intrieur de l'arborescence d'un systme Gnu Linux. Le LSB (Linux StandardBase)marquelavolontdeconserveruneseuleconventiondenommagepourlesfichiersde configurationdusystmeGnuLinux.Cesvolontssontlesignedubesoindeconvergencequandles distributionsLinuxs'loignentpetitpetitlesunesdesautres(dusimplefaitdel'indpendancedeleur dveloppement).Engnrale,lacompatibilitestmaintenue,maisiln'estpasrarededevoirrechercher etidentifierunfichier,puisdevrifiersoncontenu.Souventunsystmedelienssymboliquespermet desatisfaireauxexigencesdechacun. Lespartitionsdeswap Lespartitionsswapsontdesespacessparesdel'espacedestockagedesfichiers.Lespartitionsswap permettentdelibrerdela mmoire vive(ram)encopiantsoncontenu.Ceprocddetransfertde pagesentiresdelammoireversledisque,etdudisqueverslammoires'applelapagination. Laswapestgnralementenregistredansune partition,c'estlecaslepluscourant,leplusrapide aveclesaccsdisquesetleplussrparcequ'ils'agitd'unepartitionspare.Toutefois,ilestgalement possibledegrerlaswapl'intrieurd'unfichierdansunepartitiondusystmedefichier.Lataillede laswapdpenddesbesoinsetdutyped'utilisation,maisunebonnemoyenneestledoubledelataille delammoire. Commepourlesautrespartitions,lespartitionsdeswapsontgnralementcrependantlaphase d'installationdusystme,mais,l'administrateurpeuttoutmomentajouter,modifierousupprimerdes partitions. Les commandes fdisk, mkswap, swapon et swapoff permettent de grer les partitionsswap. L'arborescence
LaConsolePatrickHautrive!;~)2010

139

L'arborescencepeuttrerpartiedansplusieurspartitionsdeplusieursdisquesdurs,montsenlocalou parlerseau.Lacommande lsR/|less permetdevisualiserrcursivementtoutel'arborescence. L'outilMidnightCommanderquiselanceaveclacommandemcproposeuneinterfacesuccincte pournaviguerl'intrieurdel'arborescencedepuisleshellenmodeterminal. L'arborescencedusystmedefichierd'unsystmeGnuLinux / Laracinedel'arborescence(rootfilesystem,fdiskl) /bin Lesoutils,commandesetutilitairesdebase(basictools,commands,binaries) /boot Lesfichiersd'amoragedusystmeetlenoyau(grub,lilo,vmlinuz,maps,initrd) /dev Lesfichiersspciauxdepriphriques(device) /etc Lesfichiersdeconfigurationdusystmeetdesapplications(ASCII) /etc/skel Lemodlederpertoirepourlesnouveauxutilisateurs(useraddm) /etc/rc3.d Lesliensverslesservicesduniveaud'initialisationdusystme(KilletStart) /etc/init.d Lesscriptsd'initialisationdesservicesdetouslesniveauxd'initialisation(init) /etc/X11 Lesfichiersdeconfigurationduserveurgraphique(xorg.conf) /home Lesrpertoirespersonnelsdesutilisateurs($HOME) /lib LesbibliothquesdefonctionspourlecompilateurC(sharedlibrary) /lib/modules Lesmodulesdunoyau(modprob) /lost&found Lerpertoireosontplacslesfichiersperdusouleslienscasss(orphan) /media Lerpertoirepourlemontagedeslecteurs(cdrom,floppy) /mnt Lerpertoirepourlemontagedesautressystmesdefichiers(mount) /opt Lesapplicationstierces(optionnel) /proc Lerpertoirepermettantd'interrogerl'imagevolatiledunoyau(process) /pub Lerpertoirepublic,tlchargementsetconnexionsanonymes(chmod1777) /root Lerpertoirepersonneldusuperutilisateur(root) /sbin Lescommandesd''initialisationdusystmerservesausuperutilisateur(rootboot) /tmp Lerpertoiredesfichierstemporairesaccessiblestous(chmodo=r+w) /usr Lesapplicationsinstallesetaccessiblestous(usersystemressources) /usr/bin Lesbinaires(chmodo=x) /usr/doc Ladocumentation /usr/games Lesjeux /usr/include LesenttesdeprogrammationC(headers*.het#include) /usr/lib Lesbibliothquespartagesdesapplications(*.so) /usr/local Lesapplicationsinstallespourleposte /usr/sbin Lescommandesd'administrationdusystmerservesausuperutilisateur(root) /usr/share Lesfichierspartagsdesapplicationscommedesimagesoudeladocumentation /usr/share/manLespagesman(manual) /usr/src Lesfichierssourcesdunoyau(kernelsource) /usr/X11R6 Lesfichiersduserveurgraphique(Xwindow) /var Lerpertoiredesfichierstaillevariable(log,httpd,mail,spool,daemonpid)

LaConsolePatrickHautrive!;~)2010

140

Lenommagedesfichiers L'arborescenceestrpartieenrpertoires,enfichiersstandardsetenfichiersspciaux.Pourtant,l'on ditquedansunsystmeGnuLinux,toutestfichier.C'estparcequeunrpertoireestunfichierdans lequelestenregistrlalistedesfichiersqu'ilcontient.Lesrpertoiressontdesfichiersconteneurs. Les noms de fichiers ne peuvent contenir certains caractres spciaux (/, ., ..) qui ont une significationparticulirepourl'arborescence.Lesnomsderpertoires,lesnomsdecommandesoules motsrservssontsujetsambigitspourlenommagedesfichiers.Ilfautgarderl'espritqueles nomsdefichierspeuventtreamensfairepartied'unelignedecommande,etqu'ilsdevronttre valusetinterprtsparleshell.Pourtant,lecaractred'chappement(backslash)permetlacration defichiersquicommencentpardescaractresspciaux. Iln'yapasdergle,nideconvention,maislebonsensetl'anticipationsuggrentd''viterlesaccents, lesespacesetlescaractresspciauxpourassureraismentlagestion,laportabilitetlamigration. Une nomenclature explicitantlecontenudesfichierspeutenoutrefaciliterle traitement engrand nombre.LesnomsdefichiersdespremierssystmesUnixnepouvaientcomporterque14caractres, etlesnomsdespremierssystmesBSDtaientlimits64caractres.LesystmeGnuLinuxaccepte lesnomslongsde256caractres. Le systme Gnu Linux tient compte de la casse (minuscules ou majuscules), et n'exige pas une extensionpourlesnomsdefichier.Lesfichierscachsdontlenomcommencentparunpointnesont pasrpertorisparlacommandelssansl'optiona.Enrglegnrale,lesfichierssonttrisselon l'ordrealphabtiquedelatabledecodeASCII,c'estdirequeleschiffress'affichentenpremier,puis lesmajusculesquiprcdentlesminuscules. Lenumrod'inoded'unfichier DansunsystmeGnuLinux,toutlesfichierssontidentifisparunnumrod'inodeettouslesfichiers portentdes droits d'appartenancel'undesutilisateursdusystme.La tabled'inode rfrenceles adressesphysiquesdel'espacedestockage,etestpropreausystmedefichierinstallsurlapartition. La suppression d'un fichier libre son numro d'inode, mais n'crit rien sur le disque. La taille maximaled'unfichierdpendbiensrdelatailledelapartition,maiscellecidpendgalementdu systmedefichiersemploysetdelatailledesessecteurs(sectors). Lestypesdefichiers L'arborescenceestconstituedefichiersdetypesdiffrents.Lerpertoireracinesesituetoutenhautde lahirarchieetsonnomestunslash/.Placendbutdecheminabsolu,leslashindiquelaracinede l'arborescence,parcontre,quandilestplacailleurs,leslashestuninterprtcommelecaractre sparateurdesrpertoires.Lacommandelslapermetdevisualiserlestypesdefichiersetlesdroits
LaConsolePatrickHautrive!;~)2010

141

affrantchacund'entreeux. Lestypesdefichiers(lsla) Lesrpertoires Lesfichiersstandards Lesfichiersspciauxdeslienssymboliquesetdesalias Lesfichiersspciauxdespriphriquesenmodebloc Lesfichiersspciauxdespriphriquesenmodecaractre LesfichiersspciauxdessocketsTCPIP Lesfichiersspciauxtubesnomms(pipe)pourlesredirections (directory) (file) (symlink) (blocdevice) (caracterdevice) (socket) (fifo) d l b c s |

LacommandelsFpermetd'afficherlesfichiersavecuneextensionsymbolique(append)indiquant unecaractristique.Lacolorationsyntaxique(LS_COLORS)permetdeconfigurerlacommandels afindevoirlestypesdefichiersapparaitreavecunecertainecouleur.Lacommandereadlinkpermet desuivrelesliens. Laclassificationdestypesdefichiers(lsF) Lesfichiers Lesliensbriss Lesrpertoires Lesliens Lesexcutablesetlesimages Lespipes(fifo) Lessockets Lesmagicnumber Certainsfichierssontparticulierscommelefichier /dev/null quiesttoujoursvide,oulesfichiers /dev/zero ou /dev/random. La commande file value le type de format d'un fichier en examinant le formatage qu'il contient. Les fichiers peuvent tre identifis l'aide d'un identifiant numriquemagique(magicnumber).Lacommande manmagic etlesfichiers /etc/magic et /usr/share/mime/magicdonnentunedescriptiondel'utilisationdecesidentifiants. Leslienssymboliques Unlien (link)peut tre,soit unraccourci (soft),soit unsynonyme(hard).Dans lecas d'unlien symbolique(symlink),lefichierpointeversunautrefichier.Lefichierestdetypel,lelienestun lienverslenomdufichieretquandlacibleestsupprime,lelienestcass,etlefichierestdtorphelin (orphan),ilyadeuxnomsdefichiers,maislefichiersymboliqueestpresquevidepuisqu'ilnecontient quelenomauquelilfaitrfrence,etchacundesfichiersestrfrencsurledisqueavecsonpropre numrod'inode.Leslienssymboliques peuventfairerfrenceunfichierappartenantunautre
LaConsolePatrickHautrive!;~)2010

/ @ * | =

(blanc) (rouge) (blue) (turquoise) (green) (blanc) (violet)

142

systmedefichiers. Dans le cas d'un lien en dur (hardlink), les deux fichiers sont reprsents par le mme numro d'inode.Lefichierestdummetype,lelienestunlienverslemmenumrod'inodeetquandl'unest supprim, l'autre existe toujours, et il est toujours possible d'accder au fichier, les fichiers sont identiquesetdemmetaille,toutefois,l'intrieurd'unemmepartition,l'espacedestockagen'estpas doublpuisquec'estlemmenumrod'inodequilesidentifie. Lacommandels Lacommande lsla indiquedansl'ordreletype,lespermissions, lenombrede liens physiques (hardlink),l'utilisateurpropritaire,legroupepropritaireprincipal,latailleexprimeenoctets,ladate etl'heuredeladerniremodification(mtime),etlenomdufichier. Leschampsdel'affichagelongdelacommandelsl type permission hardlink user group size date mtime name

Latabledesinodesgardeenmmoirelesdatesdecration(ctime),d'accs(atime)etdemodification (mtime) pour toutes ses entres. Les commandes ls time=status et ls time=use montrent respectivementunaffichageprcisenfonctiondustatutoudeladated'accsdesfichiers,l'affichage pardfauttantladatedeladerniremodification.Desrecherchesciblesquiprennentencompteces paramtrespeuventtreentreprisesavecl'outilfind.Lacommandetouchpermetd'actualiserles datesd'accsetdemodificationdufichier. Larechercheavecfind L'outilfindpermetd'effectuerdesrecherchesciblessurdesfichiersdel'arborescenceetd'enchainer unecommandequis'appliquerapourchaqueoccurrence. find/namepatternmaxdepth4print find/namecoreexecrm{}\; find.name*doc*execlsla{}\; find/nameREADME*okless{}\; find.name"*.jpg"execls>ls.txt{}\; find.\(name"*.jpg"oname"*.png"\)|eog find/etcatime1size8print find$HOMEmtime3 find/tmpatime2execrm{}\; find/usr/bintypel|less sudofind/\(\(perm04000aperm+011\)o\(perm02000aperm+011\)\)print find.name\*mtime0 find.mtime+0mtime3
LaConsolePatrickHautrive!;~)2010

143

find/typefsize50cexeclsl{}\; find/typefsize500kexeclsl{}\; Lesalternativesdedebian LesalternativesdeDebiansontunsystmedelienssymboliquespermettantdefairecorrespondredes nomsgnriquesdeprogrammeverslesbinairesassocis.Par,exemple,plusieursditeursdetexte peuventtreinstallssurunsystmeetlesvariables EDITOR peuventnepastrerenseignespour touslesutilisateurs,nonobstant,certainsprogrammesproposentlafonctionnalitd'diteruntextedans unditeur,maisalorsdoiventfaireunchoixparmitousceuxquisontinstalls.Leprogrammepourra systmatiquementfairerfrenceunliensymboliquelequelrenverraverslebinairechoisitpardfaut. Leslienssymboliquessontcrsdanslerpertoire /etc/altenatives.Lacommande manupdate alternativesdonneunedescriptiondecettemthode. Lesexercicesdenavigation unamea;uptime;runlevel;hostname;echo$SHELL;stty;ps;id;echo$PATH;date;pwd lsR/;vi/ lsla$HOME cd;cd~;cd.. cd/pub;morewine touchblanc;lnsonetwo;lsil;touchone;lsil;lnonezerosameinode;lsil echoWhatisit?>??;cat?? xeyescentergreen;xclockfggreenbgblue&;jobsl;psauxforest >empty;echoHelloworld>notempty echo"1233454637"|tr1234567helowrd stat*empty;hdnotempty;odnotempty;mc whouH statf/ trdaeiouy<file.txt>consonnes.xxx trd\015<dos.txt>unix.txt grep^#/etc/fstab;grep^//etc/fstab dates11:20:00 dates070211201963 history50|grepman cat~/.bash_history touchI\love\you grepibash/etc/passw cat/etc/passwd|grepbash cat>>file.txt CTRL+D

LaConsolePatrickHautrive!;~)2010

144

Larecherchesurinternet Larecherchesurinternetpeuttrecibleenformulantjudicieusementsesrequtessurunmoteurde recherche. Laformulationd'unerequtedansunmoteurderecherchesurInternet(google.com) LesnomspropresenMASJUSCULE LesphrasesexactesentreGUILLEMET LesmotsacceptsavecunPLUS LesmotsrefussavecunMOINS Lesinclusionsavecl'oprateurAND Lesensemblesavecl'oprateurOR Langationavecl'oprateurNOT LesgroupesdemotsentrePARENTHESES LesadressesURL Lesadressesinternet URL (UniformRessourceLocator)sontgnralementformulesenindiquant dansl'ordre,lenomduprotocolerseau,lenomduserveur,lenomdedomaine,lenomduTLD,puis lenumrodeportoptionnel,etenfinlecheminabsoluverslefichierdansl'arborescenceduserveur. UneadresseinternetcriteenextensionestconformeauFQDN(FullQualifiedDomainName). Laformulationdesadressesdesserveursinternet URL(UniformRessourceLocator) protocol://name.host.server.domain.tld:port//path/to/file Leprotocolehypertextedespagesweb Leprotocolehypertextescuris Leprotocoledetransfertdefichiers Leprotocolegopher LeprotocoledeUsenet Leprotocoledeconnexionnonscuris Leprotocolerfrenantl'arborescencelocale Leprotocolepourindiqueruneadressemail FQDN(FullQualifiedDomainName) http:// https:// ftp:// gopher:// news:// telnet:// file:/// mailto: LesdomainesTLD Les TLD (TopLevelDomain)sontles nomsdedomaine quiformentlacimedela hirarchie sur Internet.LesTLDindiquentsoitlanaturedel'activitdel'organisation,soitlepaysosetrouvela diteorganisation.

LaConsolePatrickHautrive!;~)2010

145

Lesnomsdedomainedelahirarchied'internet TLD(TopLevelDomain) .org .gouv .com .mil .asso .net .fr .uk .de Lesorganisations Lesgouvernements Lessocitscommerciales Lesadministrationsmilitaires Lesassociations Lessocitsinternet L'extensionpourlaFrance L'extensionpourleroyaumeuni(UnitedKingdom) L'extensionpourl'Allemagne(Deutchland)

LeformatUnix Lesfichierstextesn'ontpastouslemmeformatselonlesystmesurlequelilssontlabors.Le formatUnixsesertducaractreLF(LineFeed)pouroprerunpassagelaligne,tandisquele formatDos de WindowsemploilesdeuxcaractresLF(LineFeed)etCR(CarriageReturn). Ainsi,quandl'onvisualiseunfichierUnixdansunenvironnementWindows,letextesemblecrit suruneseuleligne. LesformatstextechezUnixetDos LeformatUnix LeformatDos (LF) (LF+CR) codeasciienoctal\012 codeasciienoctal\012et\015

Desutilitaires(recode,flip,d2u,u2u,dos2unix,unix2dos,fromdos,todos)permettentdefairela conversionentrelesdeuxformats.Lacommande recodeibmpc.latin1<dos.txt>unix.txt opre cette conversion. Le package mtools contient les outils pour manipuler les fichiers DOS (Disk OperatingSystem). Les formateurs de fichiers et autres convertisseurs (troff, nroff, groff, ngroff, pr) permettent d'extrairedescaractresl'intrieurdesfichiers.CertainsditeursdetextesousGnuLinuxproposent laconversion.Les mulateurs (dosemu,wine,wabi)etlessystmesde virtualisation permettent galementd'accderauxfichiersDos. Lesformatsdefichiers Lesfichierstextes(ascii)sontaussiappelsdesfichiersdetextesbruts(raw).Ilssonttrslargement utilisdanslessystmesUnices,parcequec'estunformatsimple,direct,natif,etstandard.C'estle format pour les scripts interprts dans un shell. C'est le format qui facilite les manipulations du contenud'unfichier(extraction, replacement, modification).Touslesfichiersdeconfigurationdu rpertoire/etcsontdansleformattexte.Lesfichierstextes(plaintext)sontlesplussimplesetles plus lgers des formats de fichier. Avec un simple diteur, l'on peut faire du copier coller, de la
LaConsolePatrickHautrive!;~)2010

146

rechercheetduremplacementdemotif. Unfichiertextenecomportequetrspeutdeformatage(tabulation,case,indentation),contrario d'unfichier RTF (RichTextFormat)quiproposebeaucoupplusdeformatage (polices, size, bold, underline, italic, line number, justification, table) ou d'un traitement de texte qui proposent de nombreuses fonctionnalits (insertion d'images, de desseins, de feuilles de calcul, colorisation, stylisation,correcteurorthographique,pieddepage,numrotationdespages,sommaire,bibliographie, macrocommandes,etc.). Unfichiertextepeuttrevisualisenlignedecommandedansunafficheur(pager),tremanipulavec unformateur(processor)ettreditdansunditeur(editor)commevi(visual).Enmodegraphique, lemmefichiertextepeuttrevisualisenlectureseule(readonly),enmodeWYSIWYG(WhatYou SeeIsWhatYouGet),treditdansunditeurgraphique(gedit),tretravailldansuntraitementde texte(openoffice)ettrefinalisdansunlogicieldemiseenpage(scribus). Les formats de fichiers sont trs nombreux. Ces formats de fichiers peuvent tre libres, ouverts, universelsetgratuits,tandisqued'autrespeuventtrepropritaires,ferms,spcifiquesetpayants.La communautdesLogicielsLibresprivilgiel'utilisationdesformatsconnusetdiffusssouslicence libre,parcequ'ilspermettentainsideprenniserl'accsauxdocumentsdansletemps. Souvent,leformatageutilisdpenddelafonction(image,sons,vido,archive,impression,etc.)oude la plateforme (Unix,Windows,Macintosh, etc.)oudu programme quilagnr.Enrgle gnrale,lesnomsdefichierssontdotsd'uneextensionquicorrespondl'application.Cependant,de nombreux Logiciels Libres sont compatibles avec d'autres formats que les leurs. Ainsi, l'on parle d'archivesZIPautoextractibles,detextesenRTF(RichTextFormat),dedocumentsimprimablesen PDF(PortableDocumentFormat),delivresenLATEX,d'imagesauformatPNG(PortableNetwork Graphic), de musique enregistre en MIDI, de vido en OGG VORBIS, de feuilles de calcul (spreadsheets)delasuitebureautique(openoffice),dedistributiondistribueenimage ISO prte pour la gravure sur cdrom, de package RPM ou DEBIAN, de fichiers sources, de binaires ou d'excutables... Lesfichiersjoints Lesfichiersjointsaveclesmailssontappelsdespicesjointes.Cesfichierssonttransportsdansun format spcial afin d'tre reconnus par les lecteurs de mail. Les formats UUENCODE et MIME (MultipurposeInternetMailExtension)onttsuccessivementutiliss. Lescaractresspciaux Lesshellreconnaitetinterprteunensembledecaractresspciaux.Lescaractresspciauxdsignent touslescaractresduclavierqui figurentl'intrieurdelatabledecodagedescaractres ASCII,et
LaConsolePatrickHautrive!;~)2010

147

quiontpourleshelletlesscriptsunesignificationparticulire.Lescaractresspciauxsontenquelque sortetouslescaractresquinesontpasalphanumriques.L'ensembledecescaractresspciauxfont l'objet d'une standardisation. Les jokers, le sparateur interne (IFS), les mta caractres et les oprateursdecontrleetlesoprateurslogiquessontdescaractresspciaux. N'importequelcaractrepeutsesubstituerunjoker(wildcardglobbing).L'ordrederechercheoude remplacement correspond l'ordre de la table de codage ASCII: les chiffres en premier, puis les majusculesetlesminusculesdansl'ordrealphabtique. Lesexemplesd'utilisationdescaractresspciauxjokers(wildcards) ? ?? * [14] [14] [AZ] [az] [AZ]&[az] Remplaceunetunseulcaractre(un) Remplacedeuxcaractres(deux) Remplaceunechainedecaractresquipeuttrenulle(zro,unOUplusieurs) Remplacedeuxvaleurs(unETquatre) Remplacequatrevaleurs(deunAquatre) Remplacetoutesleslettresmajuscules Remplacetoutesleslettresminuscules Remplacetoutesleslettres

Lamanipulationdesfichiers Lescaractresspciauxsontabondammentemploysdanslesscripts etlesrecherchesl'aidedes jokersetdesexpressionsrgulires(regex).Lescaractresspciauxpermettentdeformerdesmotifs (pattern)derecherchequiserontvalusparleshell.L'outilgrepouGREP(GlobalyResearchfor RegularExpression)peuttrecombind'autres(find,diff,cut,sort,uniq,wc,awk, sed,tr,groff,...)poureffectuerdesrecherchesciblesetextrairedel'arborescencedesfichiers, puisdeslignes,etenfindescolonnes.Deslignesdecommandescomplexespeuventtreenchainesles unesauxautrespourformerdestrainsdecommandesquisontrelispardespipes,chacunerecevanten fluxd'entre,lefluxdesortiedelaprcdente.

LaConsolePatrickHautrive!;~)2010

148

Lescommandesdemanipulationdesfichiers(filter) cat less vi find grep diff uniq sort wc nl patch awk sed tr cut col groff expand unexpand lirelecontenud'unfichier(concatenate) afficherunfichier diterunfichiertexte(visual) rechercherunfichierdansl'arborescence slectionnerdeslignesquicontiennentuneoccurrencedansunfichier comparerlignelignedeuxfichiers(difference) carterlesdoublonsl'intrieurd'uneliste classerdeslistesdelignesdansunordrealphanumrique compterleslignes,lesmotsoulescaractres(wordcount) numroterleslignesd'unfichier(numberedline) insrerdesmisesjourdansunfichier manipuleretformaterdesexpressionsavecunlangagedeprogrammation d'extraireouderemplacerdesmotifsunfluxdetexte(streameditor) traduireuncaractre,leremplacerparunautreoul'effacer(translate) slectionnerunecolonnedansuneligneenfonctiond'unsparateurconnu renverserl'ordred'unflux formaterunfluxdesortie convertirlestabulationsenespace convertirlesespacesentabulation

Lesexemplesderecherche cmpfile1file2 difffile1file2 sortfile>filealpha sortfileo sortbfileofilealpha sortdfile>filedico sortnr grephda[18]/etc/fstab grep^#/etc/iftab wgetlimitrate=96khttp://server.org/image.iso http://pathname.com/fhs/ splitbMplougpresentation.pdfplougpresentation.pdf_ cat`echoplougpresentation.pdf_a*`|sort>plougpresentunsplit.pdf catplougpresentation.pdf_a*>plougpresentunsplit.pdf diffsplougpresentation.pdfplougpresentunsplit.pdf xpdfplougpresentunsplit.pdf

LaConsolePatrickHautrive!;~)2010

149

PERMISSION Lesattributsdesfichiers Touslesfichierspossdentdesattributs.Cesattributssontdescaractristiquespropreschaquefichier et ces caractristiques sont consultables l'aide des commandes ls et lsattr (nom, inode, hardlink,permission,user,group,dates,tiquettes).Lesattributspeuventtrecompatiblesavecles ACL(AccessControlList).Lorsqu'unfichieresttransfrsurunautresystmedefichier(filesystem), lefichiercopipeutperdrecertainsdecesattributsparcequ'ilsnesontpasgrs. Lenomd'unfichierestunique l'intrieurd'unmmerpertoire,mais ilpeutexisterdesfichiers diffrents, situs des endroits diffrents, mais portant le mme nom. Les numros d'inode sont uniques,ilsidentifientunemplacementphysiquesurledisque,maisplusieursnomsdiffrentspeuvent pointerverslemmenumrod'inode,c'estleprincipedesliens(hardlink). Lespermissionssurunfichierindiquentlesoprationspossiblespourl'utilisateurpropritaire,pourle groupepropritaire,etenfinpourtouslesautresutilisateursquinesont,nilespremiers,nilesseconds. Lespermissionsnormalessontappelesindiffremmentles droits etlespermissionsspcialessont qualifiesdedroitsd'endossement. Pardfaut(bydefault),lesdroitssurlesfichierssontde666ou644,etlesdroitssurlesrpertoires sontde777ou755. Lacommandechmodpermetdemodifierlespermissionsd'unfichieroudetoutunrpertoireavec l'optionR(recursive). Les commandes lsattr, chattr et attr permettent de connaitre et de modifier les attributs spcifiquesd'unfichier. Lecontrledespermissions Lespermissionssontlesattributsd'appartenanced'unfichier.Touslesfichiersdusystme,quelsqu'ils soient,appartiennentunutilisateurouunautre,etungroupe.CommelesystmeGnuLinuxestun systmemultitches (multitasking)etmultiutilisateurs (multiusers),touteslesoprationssurles fichiers sont contrles par le noyau afin de dterminer si ces oprations sont conformes aux permissionsdel'utilisateurquilesdemandes.LanormePOSIXimposequelesdroitsd'accsun fichiersoienttoujourscomparsauxdroitsdel'utilisateursurlefichier. Les fichiers appartiennent des utilisateurs et les commandes sont lances sous l'identit d'un utilisateur(UID,EUID)etd'ungroupe(GID,EGID).Lacomparaisonentrelesdroitsdel'utilisateur (effective)etlesdroitsdufichierouceuxd'unecommandepermetdecontrlersilesoprationssont permises.Laprocduredecontrledesdroits,passeparplusieurstapes,etendernierressort,quand
LaConsolePatrickHautrive!;~)2010

150

lesdroitspourl'utilisateuretceuxpourlesgroupesonttexamins,cesontlesdroitspourlesautres utilisateursquis'appliquent. Lescatgoriesdesutilisateurs Les permissions d'un fichier sont prsentes par la commande ls l (listing long format). Les permissionssontrpartiesentroiscatgoriesdepopulation,celledel'utilisateur(user),celledugroupe (group) et celle des autres utilisateurs (others).Les permissions qui sont attribues pourtous les utilisateurs(all)valentgalementpourl'utilisateurpropritaire. Uneautrecatgoriepeuttreajoutepourdsignerlesdroitsspciaux(special).Dansl'ordre,lesdroits sontaffichsenoctalavec quatrechiffres (from 0000 to 7777)etdansleurformesymbolique,les droitssontaffichsavecneuflettres(rwxrwSrsT). Les utilisateurs peuvent faire partie d'un groupe ou de plusieurs groupes (group), auquel cas, ils possdent indirectement les droits du groupe auquel ils appartiennent. Les droits de l'utilisateur propritaire(owner)primentsurceuxdugroupepropritaire.Lesuperutilisateuroul'administrateurdu systme(root)possdetouslesdroitsettouslesprivilgessurl'intgralitdusystme,ilpeutdonc accdertouslesfichiers,etenmodifierlesdroitsn'importequelmoment. Unutilisateurnepeutchangerlesdroitsquedesfichiersdontilestl'utilisateur propritaire (user). Aucunutilisateur,hormisl'administrateur(root),nepeutchangerlesdroitsd'unfichierappartenant unautreutilisateur.Lesmembresd'unmmegroupe(groupmember)partagentlesmmesdroitssur lesfichiersquiappartiennentaugroupepropritaire. Pours'octroyerlesdroitssurunfichier,lemoyenleplussimpleconsistealorsessayerd'endevenir propritaire,etparexempledefaireunecopiedufichier,sic'estpossible,puisdechangerlesdroitssur lacopie.Lesfichiers(file)quisontcopis(copy)parunutilisateur(user),appartiennentl'utilisateur quilesacopis.Lesdroitssemodifientaveclacommandechmod. Lestypesdepermissions Lespermissionssontdeplusieursordres.Unutilisateurpeutavoirsurunfichierlapermissiondelire (read)etdoncdelecopier,lapermissiond'ycrire(write)etdoncdelemodifier,et/oulapermission del'excuter(execute)etdoncdelancerlesinstructionsqu'ilcontient. Ilexistegalementdespermissionsquiontunefonctionspciale,commelesbitsd'excutiond'une commandesousl'identitdesonpropritaire(suid)oudesongroupepropritaire(sgid),etlesbitsde conservation(sticky)quipermettent,pourlesrpertoiresderesterpropritairedetouslesfichiersqui s'ytrouvent,etpourlesprogrammesderesterenmmoireaprsleurpremireexcution.

LaConsolePatrickHautrive!;~)2010

151

Lespermissionsspcialesdoiventtrerservesauxbinairesetauxprogrammescompils(binaries), etnedoiventjamaistreattribuesdesscripts(script),parcequel'insertiondeshelloudecommande seraientautorisepourn'importequelutilisateur. Lespermissionsetlesattributsdesfichiers Permission r w x s/S s/S nothing read write execute special SUID SGID t stickybit Directories Binaries File Directory Owner Operators AttributsEtiquette(ACL) = + A S a s c d i u e J T D Accestime Synchronefile(sync) Appendmodewriting DataatZeroifdestroy Compressedbykernel Nodump Immutable(locknolink) Undelete(rcupration) Extentsdiskmapping Ext3journalfirst Tophierarchydirectory Synchronedir(dirsync) u(user) Copy List g(group) Modify&Erase Create&delete o(other) Run Browsable a(all) Endossement s(special) EUID=owner EUID=group Conservation Heritage Memory

Lespermissionsdesfichiers LesfichiersquipossdentleStickybit(sticky)resterontenmmoireviveunefoisqu'ilsonttchargs unepremirefois.Lesexcutables quipossdentlebit SUID(suid)oulebitSGID(sgid)seront excuts,respectivementaveclesdroitseffectifsdel'utilisateurpropritaire(user)dufichier,oules droitseffectifsdugroupepropritaire(group)dufichier. Lespermissionsdesrpertoires Lesrpertoiressontgalementdesfichiersetdesdroitsysontattachs.Pourunrpertoire,ledroitde lecture(read)signifieledroitdevisualiserlalistedesfichiersdurpertoire,ledroitd'criture(write) signifieledroitd'ycrer(create),d'ysupprimer(delete)oud'yrenommeruneentre(rename),c'est dire un fichier dans le rpertoire, et le droit d'excution (execute) signifie le droit de parcourir (browsable)l'arborescenceentraversantcerpertoire(aveclacommandecdparexemple). Ainsi,unutilisateurquialedroitd'crituredansunrpertoire(write)peutsupprimerunfichieralors qu'iln'aaucundroitsurlefichierluimme.Les stickybitssontdes droitsquis'appliquentpourles rpertoiresquandunfichieryestplac.Parexemple, dansun rpertoireconteneurquipossdentle droit spcial Stickybit (sticky), tous les fichiers qui y seront crs, appartiendront l'utilisateur propritairedurpertoire.
LaConsolePatrickHautrive!;~)2010

152

L'expressiondespermissions Lespermissionspeuvents'exprimerdansuneformeabsolue,aveclanumrotationoctale (octal), ou relative,avecuneexpressionsymbolique(symbolic).Laformeabsolueestlanumrotationoctalequi fixe tous les droits (7777) pour toutes les catgories (ugo). La forme relative est l'expression symbolique(rwxst)quipermet,grcedesoprateurs(+=),denemodifierquelesdroitsquichangent pourunecertainecatgorie. Parexemple,lacommandechmod777fileattribuetouslesdroitstouteslescatgories,tandisque lacommandechmodorwxfilepermetdesupprimersurcefichiertouslesdroitstouslesautres utilisateurs, sans spcifier les autres droits pour les autres catgories, et sans prvaloir des droits antrieurspourlacatgorieconcerne. Pourchangerlesdroitsd'unfichier,l'utilisateurdoitenavoirlapermission,c'estdirequ'ildoitentre lepropritaireoupasserparl'identitdusuperutilisateur(root).L'utilisateurquicopie(cp)unfichier doitpossderledroitenlecture(read)surlefichier,maiscommeildevientpropritairedelacopie,il peutdonclamodifier(write)ouenchangerlesdroits(chmod). L'expressiondespermissions Octale 3bits Values 111 110 101 100 011 010 001 000 SUID 4 s s s S Endossement SGID 2 s S s S Stickybit 1 t t t t Dcimale 1digit 07 7 6 5 4 3 2 1 0 read 4 r r r r Permission write 2 w w w w execute 1 x x x x

Lanumrotationoctale La numrotation octale permet d'exprimer les droits d'un fichier sous une forme numrique (numerical).Lanumrotationoctaleestunebase8(xbase8).C'estdirequelavaleurdespermissions (srwx)dechacunedestroiscatgoriesd'utilisateur(ugo)peutprendrehuitvaleurs(zerotoseven).Il faudradouzebitspourexprimerentirementlesdroitsd'unfichierenoctal(u=srwx,g=srwx,o=srwx), c'estdire3x4bits=12bitspourexprimertouteslesvaleurspossibles(from0000to7777).Lesdroits

LaConsolePatrickHautrive!;~)2010

153

spciaux(SUID,SGID,stickybits)s'exprimentenmilliers(thousends),lesdroitsdesutilisateursen centaines (hundreds), les droits de groupes en dizaines (tens), et les droits des autres en units (unities). Laseulecatgoriedupropritaire(user)peutprendrelesvaleursdeO7,cequipeuttreexprime l'aidedetroisbitsseulement(111base2=7base10),aulieud'unoctet(byte).Lanumrotationenoctale permetdoncd'conomiserdesbits(2**3=8). Lanumrotationoctaledespermissions user r 400 w 200 x 100 SUID S(sansx) s(avecx) 4000 S/s r 40 group w 20 x 10 SGID S(sansx) s(avecx) 2000 S/s r 4 other w 2 x 1 Stickybit special T(sansx) t(avecx) 1000 T/t

L'quivalencedespermissions L'quivalenceentrelesexpressionssymboliquesetlanumrotationoctaledespermissions Lesdroitsrwxrwxrwx Lesdroitsrwx Lesdroitsrwxxx Lesdroitsrwrr Lesdroits Lesdroitsrwsrxrx LesdroitsrxrSrx Lesdroitsrwrwrwt Lesdroitsrwsrwsrwt LesdroitsrwSrwSrw Lesdroitsrsrrt Lemasquedesfichiers Lorsdeleurcration,lesfichierspeuventtregnrs(create)outrecopis (copy).Quandilssont copis,lesnouveauxfichiershritentdesdroitsquitaientattribusaufichiersource,maisdansla limitedesdroitspossiblesselonlemasquedel'utilisateurquifaitl'opration (mask).Quandilssont gnrs, les fichiers sont crs selon le masque de l'utilisateur, mais sans tenir compte des droits d'excution (execution),moinsqu'ilsnesoientdes rpertoires (directory),parcequ'unrpertoirea
LaConsolePatrickHautrive!;~)2010

sontgaux0777 sontgaux0700 sontgaux0711 sontgaux0644 sontgaux0000 sontgaux4755 sontgaux2545 sontgaux1667 sontgaux7777 sontgaux6666 sontgaux5555

154

besoindudroitd'excutionpourpouvoirlistersoncontenu(browsable).Danstouslescaslemasque del'utilisateurprvaut,saufpourlacrationdelienssymboliques(symlink). Cesdroitsquisontattribusautomatiquementsontcalculsenfonctiondumasquedel'utilisateur.Le masquedel'utilisateurestindiquaveclacommandeumask.Engnral,lavaleurdumasqueestde 0022,maislepremierdigitquicorrespondauxdroitsspciauxneserapasprisencompte.Seulsles troisderniersdigitsserontappliqus.Cettevaleurde022pourlemasquedel'utilisateursignifiequeles fichiersquiserontgnrsseverrontattribuerlesdroitscomplmentaireslavaleurmaximalepossible de777,maissanstenircomptedudroitd'excutiondanslecasdesfichiersstandards(file). Ainsi,avecunmasquede022,lesdroitsserontde644pourunfichierstandard(file): 644=(rwrr)=(777022111)=(666022) Ainsi,avecunmasquede022,lesdroitsserontde755pourunrpertoire(directory): 755=(rwxrxrx)=(777022) La commande umask 0022 peut tre insre dans le fichier de personnalisation de l'utilisateur ~/.profilepourquecetteconfigurationsoitpriseencomptechaqueconnexiondel'utilisateur. Lesexemplesdepermission lsla$HOME umask023;umaskp;umaskS;ulimita touchfile;lslfile chmod754file;lslfile chmodugo=rwx;lslfile chmodrfile;lslfile chownR$USER:noone$HOME;lsl/home/noone lsofu500,501,502,1000 ps|grepbash;lsofpPID lsofap$$d0,1,2 lnsfilefilesoft;lslfile chfn;finger;manusermod lsl/etc/passwd;lsl/usr/bin/passwd;lsl/bin/bash cutd':'f1/etc/passwd id;whoami;groups groupsrootdaemonwheel chmod+xscript.sh chmodu+sscript.sh chmod+tDIR
LaConsolePatrickHautrive!;~)2010

155

su mkdir/home/groupspace;groupaddmygroup useraddnoone;usermodGmygroupnoone;groupsnoone chgrpRMYGROUP/home/groupspace;chmodg+s/home/groupspace chmodg+wgroupspace/;lsld/home/groupspace sunoone id;pwd;touch/home/groupspace/filenoone;lsl/home/groupspace/filenoone exit id;pwd;chmod1775/home/groupspace sunoone touch/home/groupspace/filenoonetwo;lsl/home/groupspace/filenoone* exit chmod3775/home/groupspace/;sunoone sunoone touch/home/groupspace/filenoonethree;lsl/home/groupspace/filenoone* lsattrfile.txt chattrfile.txt chattr+Ssscript.sh chattrSsscript.sh manattr

LaConsolePatrickHautrive!;~)2010

156

PASSWORD L'authentification Laprocdured'authentification (authentication)surunsystmeinformatique est essentielle, parce c'estellequioctroiel'utilisateursonidentitpourlesystme,etparconsquentsesdroitsetses permissions.Lecontrledel'identitestassureparlavrificationdumotdepasse(password)pourle compte(login).SurunsystmeGnuLinux,ilfautavoiruncompteutilisateurpourseconnecterau systme.Lafonctiongetpass()rcuprelemotdepassesaisieparl'utilisateur. Parfois, des comptes gnriques pour les invits (guest et wild), pour les utilisateurs anonymes (anonymous),oupourlesinconnus(nobody)sontdisponiblepourseconnecter.Normalement,ces comptespossdentdesdroitsrestreintsetn'ontaccsqu'unepartiedusystme. LessystmesGnuLinuxutilisentdeplusenplusPAM(PluggableAuthenticationModules)pourgrer l'authentificationdesutilisateurs.Lesautressystmesd'authentificationlespluscourantsutilisentdes bases de comptes plus sophistiques, comme NIS (Network Information Service), LDAP, ACL, KERBEROS,RADIUS. Lestypesd'authentification Ilexistedeuxtypesd'authentification,l'uneestbasesurlecomptedel'utilisateur,etl'autreestbase surlaressource.Danslepremiercas,lavrificationalieulorsdelaconnexionaveclemotdepassede l'utilisateur,etl'authentificationestvalabletoutletempsdelasessiondel'utilisateur.Dansledeuxime cas,lavrificationalieulorsdechaquetentatived'accslaressourceaveclemotdepasseattachau fichierparexemple. Lescomptesdesutilisateurs LesutilisateursquipossdeuncomptesurunsystmeGnuLinuxpeuventseconnecterenprsentantle nom du compte (login) au prompt de connexion, et en saisissant le mot de passe (password) correspondant. Le compte de l'utilisateur (UID, GID) renseigne le systme sur ces droits, son appartenancedesgroupes,saconfigurationetsesprfrences. Unutilisateurpeutappartenirplusieursgroupes,maisl'und'entreeuxseradsigncommelegroupe principalougroupeprimaire.Laconfigurationdesrglesdescomptesutilisateursestdfiniedansle fichier/etc/login.defs.LessystmesDebianutilisentlacommandeshadowconfigonpouractiver lesmotsdepassequisontcachs(shadowing). Lesutilisateurslancentlacommandepasswdpourchangerdemotdepasse.

LaConsolePatrickHautrive!;~)2010

157

Lesbasesdecomptes Lesfichiersd'administrationdescomptes,desgroupesetdesmotsdepassedesutilisateursconstituent ce que l'on apple la base de donne des comptes utilisateurs. Les fichiers /etc/passwd et /etc/groupsontlesdeuxfichiersprincipauxd'administration,auxquelspeuts'adjoindredeuxautres fichiers pourcacher(shadowing) lesmotsdepasse/etc/shadowet/etc/gshadow.Lessystmes Debian conservent une copie de ces fichiers dans /usr/share/basepasswd/passwd.master et /usr/share/basepasswd/group.master. L'accsausystmepeuttrerglementenfonctiondel'htedans/etc/login.access,etenfonction deladateetdel'heuredeconnexionaveclefichier/etc/porttime. Certainsautresfichierssontimportantspourlesutilisateursparcequ'ilsdfinissentl'environnementde connexion comme /etc/login.defs, /etc/environment, /etc/skel et /etc/default/useradd. D'autres fichiers de configuration sont plutt optionnels et permettent l'automatisation de l'administrationdescomptescommeadduser.confetdeluser.conf. Leserviced'authentificationPAMparmodulessegnralisesouslessystmesGnuLinux.Lesfichiers deconfigurationdePAMest /etc/pam.conf,maiscesontlesfichiersdans /etc/security/*etles scripts dans /etc/pam.d/* qui sont privilgis pour affiner la configuration. Ainsi, le fichier /etc/pam.d/login.Lacommandeman7pamdonneunedescriptiondel'utilisationdePAM. Lesfichiersdeconnexion Denombreuxautresfichierspeuventtreconsultslorsdelaprocduredeconnexion. Lesfichiersdeconfigurationd'uneconnexion Password Host Network Configuration Message Profile ~/.login ~/.bash_profile ~/.bash_login ~/.bash_history ~/.profile ~/.bashrc ~/.Xsession ~/.Xdefaults ~/.Xinitrc ~/.signature ~/.rhosts ~/.bash_logout /etc/passwd /etc/inittab /etc/shadow /etc/fstab /etc/group /etc/securetty /etc/gshadow /etc/usertty /etc/login.defs /etc/terminfo /etc/nologin /etc/termcap /etc/login.access /etc/gettydefs /etc/porttime /etc/ttytab /etc/limits /etc/shells /etc/environment /etc/skel /etc/pam.d/login /etc/sysctl /etc/security/* /etc/services /etc/aliases /boot/bootmsg.txt /etc/protocols /etc/sudoers /etc/issue /etc/hosts /etc/locale.alias /etc/motd /etc/host.allow /etc/locale.gen /etc/profile /etc/host.deny /etc/gdm/locale.conf /etc/bash.bashrc /etc/host.equiv /etc/profile.d/lang.sh /var/log/boot.log /etc/netgroup /etc/localtime /var/log/dmesg /root/.rhosts /etc/alternatives /tmp/install.log /etc/ftpusers /etc/magic /proc/kmsg /etc/dialups /etc/timezone /var/log/secure /etc/dpasswd /etc/bash_completion /var/log/sulog /etc/modules.conf /var/log/dmesg

LaConsolePatrickHautrive!;~)2010

158

L'administrationdesutilisateurs L'administrateuretlesutilisateursutilisentcescommandespourgrerlescomptesdesutilisateurs. Lescommandesd'administrationdesutilisateurs USERPASSUIDGIDGROUPSINFOHOMESHELLLOCKUNLOCKSTOPDELAY vipw passwd chage useradd userdel su usermod diterlefichier/etc/passwd changerlesmotsdepasse changerlesinformationsd'gesdesmotsdepasse(changeage) ajouterunnouvelutilisateur(HOME,SHELL,GROUP,STOP) supprimeruncompte(ladsactivationestmoinsdur!) changerd'utilisateur(switchuser) administrerlescomptesutilisateurs

L'administrationdesgroupes L'administrateuretlesutilisateursutilisentcescommandespourgrerlesgroupesdesutilisateurs. La commande gpasswd permet d'administrer le fichier /etc/group, et indirectement le fichier /etc/gshadowsilavariableSHADOWGRPexiste. Lescommandesd'administrationdesgroupes GROUPPASSGIDADMINUSERS vigr groupadd groupdel groupmod sg newgrp chgrp gpasswd diterlefichier/etc/group ajouterungroupedans/etc/group supprimerungroupedans/etc/group administrerlenometleGIDd'ungroupe changerdegroupeprincipal(switchgroup) changerdegroupeprincipal changerlegroupepropritaired'unoudeplusieursfichiers changer/etc/groupet/etc/gshadowsiSHADOWGRP

L'administrationdushadowing Leshadowingconsisteplacerlesmotsdepassecryptsdescompteset/oudesgroupesdansdes fichierssparsinaccessiblesenlecturepourlesutilisateurs.

LaConsolePatrickHautrive!;~)2010

159

Lescommandesd'administrationdushadowing pwck pwconv pwunconv grpck grpconv grpunconv shadowconfig updatepasswd vrifierlaconformitetlaconcordancedepasswdetdeshadow convertirlechampPASSdufichier/etc/passwden/etc/shadow enleverleshadowingetrintgrerlesmotsdepassecrypts vrifierlaconformitetlaconcordancedegroupetdegshadow convertirlechampPASSdufichier/etc/groupen/etc/gshadow enleverleshadowingetrintgrerlesmotsdepassedansgroup activerleshadowingdescomptessousDebian gnrerdescopiesdelabasedesmotsdepassesousDebian.

Lesgroupesdesutilisateurs Lacrationdesgroupesestrserveausuperutilisateur(root).Lenomd'ungroupedoittreunnom unique(uniqname),commel'identifiant(GID).Lesutilisateurspossdentengnraletousaumoins ungroupe,parfoisplusieurs.Quandl'utilisateurfaitpartideplusieursgroupes,l'und'entreeuxestle groupeprincipal,legroupeprimaireoulegroupeinitial(initialgroup). Lesgroupespeuventtreadministrsparunadministrateurdegroupe,quin'apasbesoindefairepartie dugroupe.Ungroupepeuttreprotgparunmotdepasse,danscecaslesutilisateursquin'enfont paspartie,maisquiconnaissentlemotdepasse,peuventutiliserlacommandenewgrpafindefaire partiedugroupetemporairement. La commande newgrp permet de changer le groupe principal de l'utilisateur, moyennant l'appartenanceaugroupeoulaconnaissancedumotdepassedugroupes'ilestdfini.Lacommande sg(switchgroup)permetdelancerunecommandeavecl'identitd'unautregroupe. Lesmotsdepasse Lesmotsdepassesontadministrsaveclacommande passwd quiappartientausuperutilisateur (root)etquiportelebitspciald'endossementdupropritairepourlesutilisateursquilalance(SUID). Lesdonnesdesutilisateurssontenregistresdanslefichier /etc/passwd.Lesmotsdepassesont cryptsetstocksdanslefichier /etc/shadow quinedoitpastreaccessibleauxutilisateurspour prvenirlesattaquespardictionnaires.Lacommandeman5passwddcritlefonctionnementdela commandepasswd. L'appartenanceauxgroupesestadministredanslefichier /etc/group.Lesmotsdepasseaffrant auxgroupess'ilsexistentsontconservsdanslefichier/etc/gshadow.Lacommandeman3crypt prsentelesmthodesdecryptagedesmotsdepasse.

LaConsolePatrickHautrive!;~)2010

160

Lesmotsdepasseetl'appartenanceauxgroupes /etc/passwd /etc/shadow /etc/group /etc/gshadow USER USER GROUP GROUP PASS PASS PASS PASS UID 1970 GID ADMIN, GID INFO HOME SHELL LIVE DELAY ALERT STOP 1970STOP USERS, USERS,

Certainesanciennesapplicationsrseauxfontpasser lesnomsdeloginetlesmotsdepasseenclair (rshd,telnetd,ftpd).Unanalyseurdetramesrseaux(sniffer)permettraitainsidelesrcuprer.Ilest biensrconseilld'utiliserlesapplicationsscurises(htpps,ssh)quicryptentlesmotsdepasseetles communications.Lesutilisateurssontinvitschoisirunbonmotdepasse(strongpassword)etle renouvelerfrquemment(renew).Deplus,ilsdoiventleconserverpoureuxseuls,etnejamaisl'crire surunpostitcolll'cran,nideledivulguerquiquecesoitetcequelquessoientlescirconstances. Lesmotsdepassesontpersonnelsetilsengagentlaresponsabilitdel'utilisateur(responsability). Leshadowing Leshadowingconsiste stockerlesmots depassecryptsdansunfichierspar.Lesfichiersde shadowingnesontpasaccessiblesauxutilisateurs,afind'empcherl'ventualitd'uneattaque(brute force)avecundictionnairedemotsdepasse(dictionnary).Seulsl'administrateur(root)etlegroupe propritaire(groupshadow)ontlapossibilitdelirelesfichiers/etc/shadowet/etc/gshadow. Les commandes pwck et grpck doivent tre lances avant d'effectuer un changement de shadowing.Lescommandes pwconv et grpconv permettentdepasserausystmedesmotsde passe quisont cachs,respectivementdans /etc/shadow pourlescomptesdesutilisateursetdans /etc/gshadow pour les groupes des utilisateurs. Tandis que les commandes pwunconv et grpunconvpermettentderevenirenarrire,malgrlapertedesinformationssurlesgesdesmots depasse. La fonctionnalit du shadowing est disponible avec l'installation des outils correspondants ( shadowutils). Leschampsdepasswd /etc/passwd USER PASS UID GID INFO HOME SHELL

LechampUSERcontientlenomdecomptedel'utilisateur(login). LechampPASSdufichier/etc/passwdpeuttrerenseigndeplusieursfaons. LechampPASSestprsentsouslaformed'unesuitedecaractres(cryped). LechampPASSestvide(empty)quandlemotdepasseestunechainenulle(emptystring). LechampPASSestunecroix(x)quandlemotdepasseestdans/etc/shadow.


LaConsolePatrickHautrive!;~)2010

161

LechampPASSestunetoile(*)quandilyaunverrousurlecompte(lock). LechampPASSest2pointsd'exclamation(!!)quandiln'yapasdemotdepasse(nopassword). LechampUIDcontientl'identifiantuniquedel'utilisateur. LechampGIDcontientl'identifiantuniquedugroupeprincipaldel'utilisateur. LechampINFOestunchamplibreoupeuventseretrouverlesinformationsGECOS(GeneralElectric ComprehensiveOperatingSystem)utilisesparlescommandesfingeretchfn,etladfinitiondes caractristiques(nice,umask,ulimit)del'utilisateur.Lesquotas(quota)sontsparsparunevirgule (pri=,umask=,ulimit=).Lesquotaspeuvent tregalementdfinisdanslesvariablesdufichier /etc/login.defs. LechampHOMEcontientlerpertoirepersonneldel'utilisateuretlavaleurdelavariable$HOME. LechampSHELLproposel'excutablelancdslaconnexion,souventleshell/bin/bash,maispour lescomptesquinesontpasautorissseconnecter,cepeuttre/bin/falseou/bin/nologin. Leschampsdeshadow /etc/shadow USER PASS 1970 LIVE DELAY ALERT STOP 1970STOP RESERVE

Lefichier/etc/shadowcontientlesinformationsdedureetdevaliditdescomptes(age). LechampUSERcontientlenomdeconnexiondelutilisateur(login). LechampPASScontientlemotdepassechiffrenalphanumriqueaveclacommandecrypt. LechampPASScommenceparunpointd'exclamation(!)avecpasswdluser(lock). Lechamp1970contientlenombredejoursdepuisle1erjanvier1970etledernierchangement. LechampLIVEcontientlenombredejourspendantlesquelslechangementestinterdit(forbidden). Le champ DELAY contient le nombre de jours aprs lesquels le changement est obligatoire (mandatory).Ladatedudernierchangement1970pluslechampDELAYdonneladated'expiration (expirationdate).QuandlechampLIVEestsuprieurauchampDELAY,l'utilisateurnepeutpas changersonmotdepasse. LechampALERTcontientlenombredejoursd'avertissementavantl'expiration(alert). LechampSTOPcontientlenombredejoursderpitaprsladated'expiration(margin),cequifixela datededsactivationducompte(stop). Lechamp1970STOPcontientlenombredejoursdepuisle1erjanvier1970dedsactivation(disable). LechampRESERVEestunchampquin'estpasutilis(unused). Leschampsdegroup /etc/group GROUP PASS GID USERS,

LechampGROUPcontientlenomuniquedugroupe. LechampPASSdufichier/etc/grouppeuttrerenseigndediffrentesfaons. LechampPASSestvide(empty)pourindiquerqu'iln'yapasdemotdepasse(grouppassword). LechampPASSestunecroix(x)pourindiquerquelemotdepasseestdans/etc/gshadow.


LaConsolePatrickHautrive!;~)2010

162

LechampPASSestunpointd'exclamation(!)pourindiquerquelegroupeestverrouill(lock). LechampGIDcontientl'identifiantuniquedugroupe. LechampUSERScontientlesnomsdescomptesmembresdugroupe,sparsparunevirgule(coma). Leschampsdegshadow /etc/gshadow GROUP PASS ADMIN, USERS,

LechampGROUPcontientlenondugroupeuniqueetenaccordaveclefichier/etc/group. LechampPASScontientlemotdepassecryptpourlegroupe,s'ilexisteunmotdepasse(password). LechampADMINcontientlesadministrateursdugroupeavecgpasswdAusergroup. LechampUSERScontientlesutilisateursmembresdugroupe,sparsparunevirgule(coma). L'environnementdeconnexion Lefichier/etc/login.defsdonnelesparamtresdfinispourlesutilisateurslorsdelaconnexion.La commande man login.defs donne une description de la configuration de l'environnement de l'utilisateur,etdesmcanismesdegestiondesduresdesmotsdepasse.Laconfigurationdesmotsde passeconsisteaffecterdesvaleurspourlesvariablesquivontdterminerlecomportementdesmots de passe. Le module PAM (Pluggable Authentication Modules) prend le relais pour configurer l'environnementdel'utilisateurquiseconnecte. MAIL_DIR /var/mail #Dfinitionobligatoiredelavariable$MAIL MAIL_FILE .mail #Fichiercontenantlesmailsdel'utilisateur FAIL_DELAY 3 #Nombredeseconded'attenteaprschecdelaconnexion FAILLOG_ENAB yes #Acceptationdeschecsetlogdans/var/log/faillog LOG_UNKFAIL_ENAB no #Acceptationdeschecsaveclogininconnus(unknown) LOG_OK_LOGINS no #Enregistrementdanslesjournauxdesconnexionsrussies QUOTAS_ENAB yes #Acceptationdesquotas(umask,ulimit,nice)(Gecos) SYSLOG_SU_ENAB yes #Logavecsyslogdelacommandesu SYSLOG_SG_ENAB yes #Logavecsyslogdescommandesnewgrpetsg SULOG_FILE /var/log/sulog #Logdelacommandesu TTYTYPE_FILE /etc/tty #Typedeterminal FTMP_FILE /var/log/btmp #Logdeschecsdeconnexionlastb SU_NAME su #Affichagedusupourlacommandeps HUSHLOGIN_FILE .hushlogin #Acceptationduhushmode NOLOGIN_STR nologin #Refusdeconnexion ENV_TZ /etc/timezone #Dfinitiondelavariabled'environnementTZ ENV_HZ HZ=100 #DfinitiondelavariableHZ ENV_SUPATH PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/bin/X11:/usr/local/sbin:/usr/local/bin ENV_PATH PATH=/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games TTYGROUP tty #Legroupepropritairepourlepriphriqueterminal
LaConsolePatrickHautrive!;~)2010

163

TTYPERM 0600 #Lespermissionsattribuesaupriphriqueterminal ERASECHAR 0177 #Caractred'effacement(backslash)poursystemV KILLCHAR 025 #Caractredesuppressiondeligne(Ctrl+U)poursystemV UMASK 022 #Dfinitiondumasquepardfautdecrationdesfichiers ULIMIT 2097152 #Leslimites(file,size,process,user,cpu,memory) PASS_MAX_DAYS 99999 #Nombremaximaldejoursvalidespourunmotdepasse PASS_MIN_DAYS 0 #Nombreminimaldejourentredeuxchangements PASS_WARN_AGE 7 #Nombredejourd'alerteavantl'expiration UID_MIN 1000 #Numrod'ordreminimalpourl'attributiondesUID UID_MAX 60000 #Numrod'ordremaximalpourl'attributiondesUID GID_MIN 100 #Numrod'ordremaximalpourl'attributiondesGID GID_MAX 60000 #Numrod'ordremaximalpourl'attributiondesGID LOGIN_RETRIES 5 #Nombremaximaldetentativedeconnexion LOGIN_TIMEOUT 60 #Nombremaximaldesecondepourseconnecter PASS_MAX_LEN 8 #Nombredecaractrespourlecryptagedumotdepasse CHFN_AUTH yes #Motdepassepourlescommandeschfnetchsh CHFN_RESTRICT rwh #Champdechfn(fullname,room#,work#,home#) LOGIN_STRING %spassword: #Promptpourlademandedemotdepasse DEFAULT_HOME yes #Acceptationdesconnexionssanscd$HOME USERDEL_CMD /usr/sbin/userdel_local #Commandeautomatiqueaprsuserdel NO_PASSWORD_CONSOLEtty1:tty2:tty3:tty4:tty5:tty6 #Loginsansmotdepasse GETPASS_ASTERISKS 1 #Nombred'astrixaffichlaplacedescaractressaisis USERGROUPS_ENAB yes #AcceptationdeumaskUIDpourlesGIDgauxauxUID FAKE_SHELL /bin/fakeshell #Lancementd'unscriptavantlelancementdushell CLOSE_SESSIONS no #Acceptationdepam_close_session()depam_unix.so Les variables suivantes sont obsoltes et sont maintenant gres par les fichiers de PAM qui se trouventdanslerpertoire/etc/pam.d/*. MOTD_FILE DIALUPS_CHECK_ENAB LASTLOG_ENAB MAIL_CHECK_ENAB OBSCURE_CHECKS_ENAB PORTTIME_CHECKS_ENAB SU_WHEEL_ONLY CRACKLIB_DICTPATH PASS_CHANGE_TRIES PASS_ALWAYS_WARN MD5_CRYPT_ENAB CONSOLE_GROUPS ENVIRON_FILE NOLOGINS_FILE
LaConsolePatrickHautrive!;~)2010

164

ISSUE_FILE PASS_MIN_LEN Lechoixd'unmotdepasse Lechoixd'unmotdepasseestlaclefd'unebonnescurit.Souventlessystmessontinfiltrscause d'unmanquedediscipline dans la gestion des mots depasse.Pourseconnecter,pourouvrirune session,oupourutiliserlacommandesudo,lemotdepasseserademandl'utilisateur.Silemotde passeestdivulgu,siunecompromissionestsuspect,ousil'utilisateurnes'ensouvientplus,alorsseul l'administrateur(root)dusystmeseraenmesured'oprerlechangementindispensabledumotde passe. Lesmotsdepassedoiventavoirenprincipeunedurede validit etunecertaine complexit.En gnral,unmotdepassedoittrechangrgulirement,afindenepaslaissersuffisammentdetemps pour le trouver. L'usage des mots du dictionnaire ou des codes personnels de l'utilisateur sont proscrire.Ilestconseilld'utiliserlapalettedelatabledescaractres(letters,minuscule,majuscule, ponctuation, numbers, special caracters) avec un minimum de huit caractres pour agrandir le champd'investigation. Lebonusageestdenejamaiscrireunmotdepasse,denejamaislerutiliser,etdeneleconfier personne,quelquesoientlessituationsouledegrd'intimit.Certainsprogrammesgnrentdesmots depassealatoire.D'autresprogrammes,commecrackoujohn(JohntheRipper)essayedecasser unmotdepasse.Cepeuttreunbonmoyeneninternepourmettrel'preuvelasoliditdesmotsde passe. Le mot de passe peut tre galement appel pass phrase. Il existe diffrents moyens mnmotechniques pourtrouverunbonmotdepassequel'onnevapasoublier.Parexemple, un utilisateurpeutchoisirunephrase,etneconserverquecertaineslettresdechaquemot. Lechoixd'unnomdecompte Ilestprfrabledechoisirdesnomsdecomptequiparleetcorrespondentl'utilisateurquiilest confi.Cepeuttreunecombinaisondesonprnom(firstname)etdesonnomdefamille(last name).Lesnomsdecompte(user)commenceparunelettre(letter),etlesnomsdesgroupes(group) sontconventionnellementcritenmajuscule(majuscule). Lesnomsdescomptes(user)quicorrespondentlanormedelaclasseportablePOSIX: ([AZaz_][AZaz09_.]*[AZaz09_.$]) Lesnomsdesgroupes(group)quicorrespondentlanormedelaclasseportablePOSIX: ([AZaz_][AZaz09_.]*)

LaConsolePatrickHautrive!;~)2010

165

Lesexemplesdepassword whoami who cutd":"f1/etc/passwd fmtw12/etc/passwd prrhn/etc/passwd nlt/etc/passwd wcl/etc/passwd cat/etc/passwd|tr"/bin/sh""/bin/bash" pasted':'name.txtphone.txt>name:phone.txt lsl/etc/passwd;lsl/etc/group;lsl/etc/shadow chownroot:root/etc/passwd chmod4444/etc/passwd chmod755/dev chmod700/lost+found chmodo+t/tmp sudopasswdroot passwdi3user passwdluser passwduuser groupaddg1010PMLH usermodGPMLHuser sudoechonoone:x:1020:1040:Misternowhat:/home/noone:/bin/bash>>/etc/passwd sudoechowild:x:99:99:SpecialAccount::/bin/false>>/etc/passwd sudoechonoone:1qGrl9GtVwy/QoG/Re3xVRTjkwpuW01:14637:0:99999:7:::>>/etc/shadow sudoechoNOONE:x:1040:noone>>/etc/group vipws vigrs lsla/etc/skel mkdir/home/noone chownnoone.NOONE/home/noone chmodorwx/home/noone chfn;finger chageM15w3joe aproposmd5 dpasswd npasswd yppasswd john crack useraddu1010U0022k/etc/skelm/home/users/bin/bash useraddgMAINGROUP (definemainMAINGROUPfortheuser)
LaConsolePatrickHautrive!;~)2010

166

useraddd/home/mainuser useraddGOTHERGROUPuser useraddrsysadmin useraddppasworduser useradde19991231user usermodluser usermodRREMOVEGROUPuser usermodLuser usermodUuser userdelruser passwdluser passwduuser passwdduser passwdfuser su suuser suuser succmd groupaddg500GROUP groupaddrGROUP groupaddppasswordGROUP groupdelGROUP groups grouspuser

(definenewHOMEfortheuser) (addtheusertonewGROUPS) (defineasystemuser) (definethepasswordfortheuser) (definetheexpiredateoftheaccount) (newloginname) (removeuserfromgroup) (lockuseraccount) (unlockuseraccount) (removeuserhomedirectory) (lockuseraccount) (unlockuseraccount) (deleteuserpassword) (forceusertochangepasswordatnextlogin) (loginasroot) (loginasuser) (loginasuserwithhisenvironment) (launchthecommandeasroot) (defineanewGIDfortheGROUP) (defineasystemGROUP) (definethepasswordfortheGROUP) (deletetheGROUP) (printcurrentuser'sGROUP) (printuser'sGROUP)

LaConsolePatrickHautrive!;~)2010

167

ROOT L'administrateursystme L'administrateur(root) estlepremierutilisateurdusystme(UID=0,GID=0). L'administrateurdu systme est aussi appel le super utilisateur (super user). Les collaborateurs de l'administrateur travaillentsoussaresponsabilit.Lesutilisateursquiappartiennentaugroupe wheel ouquiontle droitd'utiliserlacommandesudo,ontparfoislesmmesdroitsquelesuperutilisateursansdemande demotdepasse.Unepersonnequial'accsphysiqueunemachine,peutenavoirtrsfacilementle contrle,soitendbranchantlamachine,cequilarendinoprante,soitenredmarrantlesystme (reboot),enmodemaintenance(rescue),oul'aided'unCDROMlive. Lesresponsabilitsdel'administrateur Le super utilisateur est la personne responsable du systme. L'administrateur est omnipotent et possdent tous les droits sur tous les fichiers du systme. L'administrateur est charg de la planification,del'installation,delaconfiguration,del'volutionetdelascurisationdusystme.Il est responsable de la disponibilit des services (access), de l'intgrit des fichiers (data), de l'authentification des utilisateurs (permission) et de la confidentialit des changes (privacy). L'administrateurdoitrespecterleslgislationsenvigueuretlavieprivedesgens. Lesdonnesbinairesn'ontd'intrtquesiellespeuventtretraitesparunsystmebinaire,c'estdire parunlogicieletunsystmed'exploitationquisontinstallssurunemachine.Lacontinuitdusystme etdulogicielpourlire,modifierouexcuterleformatd'unfichiersauvegard,estaussiimportanteque lasauvegardedufichiersurunsupportexterneausystme. Lasauvegardedesdonnes(backup) System=Hardware+Driver+OperatingSystem+Software+Format Backup=Full+Removable+Offline+Offsite+Tested Lascurit Lascuritd'unsystmed'informationpeuttreabordedeplusieurspointsdevue.Lascuritdu point de vue de l'intrieur du systme d'information concerne essentiellement les utilisateurs (insiders),tandisquelascuritdupointdevuedel'extrieurconcernetouteslesautrespersonnesqui nefontpaspartiedel'organisation(internet).Ensuite,lascuritpeuttreenvisageselonquela ressourceestdetypematrielle(hardware),logicielle(software),rseau(middleware)oupersonnelle (userware). Personne ne peut garantir l'invulnrabilit, ni l'inviolabilit d'un systme d'information. Ce n'est
LaConsolePatrickHautrive!;~)2010

168

qu'aprscoup,quel'onpeutattesterqu'uneinfractions'estproduite.Etquandaucuneintrusionn'est dcele, cela ne prouve pas qu'il n'y en ait pas eu. La seule scurit absolue, c'est que tout soit accessibletous.C'estcequifaitlaforceetlafiabilitdesLogicielsLibres. Aucunsecretnepeuttredcouvertquandlavritestconnuedetousetquelatransparenceprvaut. L'obscuritdusecretneprotgequeceuxquineveulentpasvoirouquinesouhaitentpastrevu.La transparencenesignifiepaslaperfection,maiss'enestuneconditiondesinquanone.LaRFC2196 etladocumentationLinuxSecurityHOWTOprsententlesenjeuxdelascurit. Lagographiedel'administrationsystme World People Association Hacker Cracker Politician Company Admin Robot Internet Provider Software System Kernel Program Scripts Tools Virus Power Industry Hardware Processor Router Cable Firewall Network Bios Lesattaques Les attaques sur un systme d'information peuvent tre de plusieurs formes. A chaque attaque correspondunedfenseetchaqueparadecorresponduneriposte.Danstouslescas,ilestpossible demettreenplacedes solutions qui,soitrpondentauproblme,soitenpermet ladtection. Un attaquantpeutchercherobtenirl'identitd'unutilisateur(usurpation),ilpeutchercherexploiterla failled'unprogrammepourentrerdanslesystmeaveclesprivilgesdel'administrateur(intrusion),il peutcherchercouterlesmissionssurlerseau(captation)oujouerlesintermdiairesdansles communications(interception),ilpeutcherchercopierdesfichiers(indiscrtion)ouenmodifierle contenu(falsification),ilpeutchercherintroduireunprogrammemalicieux(insertion)oupropager ducodemalveillant(inoculation),ilpeutaussichercherbloquerl'accsausystme(saturation).Les attaques quisont perptrespar descasseurs decode (crackers)ou pardesjeunesmalintentionns (scriptskiddies)sontappelesdesexploits. Lesattaquesetlesvulnrabilitsd'unsystmed'information Dictionary Logger Force Social Trojan Rootkit Spoofing Middle Sniffing Xforwarding Dos Flood Defacing Cracking Spamming Bombs Virus Vorms User Data Disk

Lesorganisationsdergulation De nombreuses organisations, nationales ou internationales, publiques ou prives se donnent pour objectif l'organisation etle contrle desrseauxinformatiques.Cesorganisationspeuventjouerle rled'uneinstancedergulationouceluiderfrencequandl'usageouladfinitiondenormes.

LaConsolePatrickHautrive!;~)2010

169

Lesorganisationsdergulationdessystmesd'informationetdesrseaux LaCNIL(CommissionNationaleInformatiqueetLiberts) LeSCSSI(ServiceCentraldelaScuritdesSystmesd'Information) Lesauditsdescurit Lesadministrateursindpendants(freelance)spcialissdanslascuritdessystmesetdesrseauxse fontparfoisappelsdessamouras.Desoutilspeuventtremiseenplacepoursurveillerunsystmeet faireunauditdesvulnrabilits(nmap,saint,nagios,satan,cops,nessus,ethereal,ipsec,tripwire, cryptographic,pgp,courtney,johntheripper,crack,rootkit,swatch,gshield, etc.).Le SUSHI (SuperUserShellInteractive)estunshellinteractifpourroot. Lesauditsdescuritsontditsblancs(whitehacking)quandl'expert,quisimuledesattaques,une connaissanceaupralabledel'organisationinterneetdel'architecturedusystmeaudit. Lesaudits blancs peuvent rechercher toutes les failles potentielles, qu'elles soient matrielles, logicielles ou personnelles,etseconcentrersurlesvulnrabilitsquirequirentunaccsausitedepuisl'intrieur.Les auditsblancs peuventselimiterl'utilisation desoutilsautoriss parlalgislationenviveurdansle pays.Lesauditsdescuritsontditsnoirs(blackhacking)quandl'expert,quisimuledesattaquesavec leconsentementdesonclient,n'aaucuneconnaissancedusystmeetdel'organisationquil'hberge,et qu'ilessayed'ypntrerdepuisl'extrieuravectouslesoutilsconnus,qu'ilssoientlgauxouillgaux. Lesauditsnoirssontaxssurlesrisquesdesmalveillancesextrieuresotouslescoupssontpermis. Les outils de scurit peuvent tre employs avec de bonnes ou de mauvaises intentions. Il est indispensabled'obteniruneautorisationcriteofficielled'unresponsablereconnuetenactivitavant deselancerdansl'tuded'unsystmed'information.Parfois,lasimpleutilisationdecertainsdeces outilsestconsidrecommeuneattaquesusceptibledeprovoquerdescontresmesuresetd'engendrer despoursuitesjudiciaires. Lesoutilsd'auditetdescuritdessystmesd'informationenrseaux nmap, tcpdump, saint,nagios,satan,cops,nessus,ethereal,ipsec,tripwire,cryptographic,pgp, courtney,johntheripper,crack,rootkit,swatch,gshield,rootkit Lecontextedel'administration Une machine informatique fait ce qu'on lui demande et de la faon dont on lui demande. Les programmesneprvoientpasforcmenttouslescaspossibles,etlaconfigurationd'unsystmen'est pasforcmentlaplusoptimise.Deplus,lesapplicationsvoluent,ellesdoiventtremisejours,mais lesmisesjoursnesontpasforcmentencoreaupoint.D'autrepart,lesutilisateursnesonttoujours formsauxoutilsqu'ilsutilisent.Enfin,l'onnesaitjamaiscequipeutsepasserdansunrseau,l'autre boutd'uncble.

LaConsolePatrickHautrive!;~)2010

170

Unemachineragittoujoursdelammefaonunemmesituation,c'estqu'ellenedisposepasde libertdechoix,elleexcutelesinstructionsprvuesparleprogramme.Unemachinepeutplanter, maisjamaiselleneferaquelquechosequ'onneluiapastransmis.Tandisqu'untre humain peut ragir dediffrentes faons une mme situation, c'est le facteurhumain qui est imprvisible et incontrlable,etquipeutengendrerdes consquences colossales,parcequele levier estceluidela machinequipeutrpterimperturbablementdesmilliardsdefoislammeerreur,etlapropagerla vitessedelalumire.Ainsi,lasensibilisationdesutilisateursaubonusagedel'outilinformatiqueest primordiale. L'arbitragedel'administration L'objectifprincipald'unadministrateurestd'assurerla disponibilit dusystmepourlesutilisateurs autorissetl'intgritdesfichiersdesutilisateurs.Leschoixdescuritsonttoujourslersultatd'un arbitrage,etl'administrateurdoittoujoursprendreenconsidration,lasensibilitdesdonnes,lecot delarparation(engnrallasauvegardeplusletempsdetravailperdu)etlecoutdesinfrastructures descurit.Laqualitdeserviced'unsystmesemesureenQOS(QualityOfService). Un systme qui est scuris se doit galement de rester la porte des utilisateurs, et trop de contraintespeutnuirel'objectifdedpart.Lesutilisateursrecherchentlafacilit,etc'estcequedoit leurapporterlesystme.Parailleurs,uneconfigurationtropsouplepeuttreinsuffisantepourl'objectif fix.Iciaussi,l'arbitrageestderigueur,etc'esttoutle talent del'administrateur,demettrel'outil informatiquelabonnehauteurpoursesutilisateurs. L'arbitragedesobjectifs,descontraintes,descoutsetdesrisques System Disponibility Files Intgrity Network Scurity Secrets Sensibility Users Identity Adminsitrator Registry People Confidentiality

L'activitd'administration Lerledel'administrateurestenquelquesortemultipleetambivalent.Ilpossdetouslesdroitssurle systme,etenmmetemps,ilsedoitderesterneutreetdiscret,visvisdesactivitsdesutilisateurs. Et en mme temps, l'administrateur doit tre mthodique et vigilant. Un bon administrateur est invisibleetsembleinactif.Sonrleestdepourvoirauxbesoinsetdeprvoirlessituationsd'urgences. Lerledel'administrateurn'estpasdesatisfairetouteslesexigencesdesutilisateurs,commelebesoin de formation ou le soutient psychologique, ni de pallier toutes les situations. Les systmes d'informationsonttellementintgrsauxactivitshumaines,qu'unesimplepannedecourantpourrait fairevacillerlacivilisation. L'administrateurdoitsavoirresterfermesurcesprrogatives,etenmmetemps,ildoitsavoirtre souplepours'adapterenpermanenceauxcirconstances.Parexemple,l'aideauxutilisateurs(hotline)
LaConsolePatrickHautrive!;~)2010

171

n'estpasduressortdel'administrateur.Parcontre,l'administrateurdoitcontrlerpriodiquementle renouvlementdesmotsdepasseainsiqueleniveaudepermissiondesutilisateurs.Unadministrateur nerpondrajamaisauxquestionsd'uninconnuautlphone(socialengeenering),etconserveraen permanencesonobligationderserve. Lesobjectifsdel'administration L'administrateur travaille tous les jours l'amlioration du systme (audit), il envisage mthodiquement les besoins futurs (innovation), il value objectivement les performances (benchmark), il gre scrupuleusement les sauvegardes l'extrieur du site (backup) et vrifie rgulirementleurutilit(restauration),ilsurveillel'activitdusystme(log),ilcontrlel'utilisation etlacapacitdesmachines(ressources),ilvrifielesbranchementsrseaux(cable),ilsetientinform desnouveauts paruneveilletechnologique (internet)etdelacommunaut(patch),ilplanifieles implmentations (test) et les mises jours (update), il protge les infrastructures (firewall) et segmente les rseaux (dmz), il configure le noyau (kernel) et les services (server), il conduit le dploiementetledpannagedesmatriels(hardware),ildirigel'installationdesapplicationsetdes pilotes(software),ilvaluelescomptencesdesutilisateurs(formation),ilorganiselepartagedes fichiers(share)etdespriphriques(printer),ilautomatisel'administration(script),ildocumentela configuration (register) pour un ventuel successeur administre les utilisateurs (users) et ses collaborateurs(management),ilconseilleetilrendcomptesessuprieurs(consulting),enfin,ildoit savoirredirigerlespersonnesquiluisoumettentdesproblmes(organisation)etildoitanticiperles situations d'urgence (anticipation) avec la mise en place de rgles strictes (rules), de procdures rigoureuses(procedures)etdesauvegardedespreuvesd'intrusionsoudefalsifications(proofs). Lesprincipesdel'administration Pourfairebiensontravail,l'administrateurdoitfairepreuvedebonsensetderigueur.L'administrateur doit raliser enpermanenceuneveille technologique, faire les tests appropris avant unemise en production,etmettreenplacelesparadesquiconviennentavantqueneseproduisentlessituations d'urgences.Iln'estpasfaciledegardersonsangfroidetdeproduiredesidesinnovantesensituation destress,aussi,cerlepeuttredvoluungroupequiseraspardesautresauseind'unecellule d'urgence. Quandtoutvabien,l'administrateursemblen'avoirpasgrandchosefaire,pourtant,c'estcemoment lqu'ilfautrflchiretdiscuterdesamliorationsdusystme(tuning).Parcontre,quandtoutvamalet queles alertes retentissent,la priorit absolueestdertablirlesystmedanslesplusbrefsdlais. L'administrateur doit avoir prvu les dispositions adquates et il doit sans attendre lancer les procdurespourragirlasituation.Lesmeilleurssystmessontceuxquirestentstables,fiableset robustes,etpourlesquels les modifications sonttoujours souhaites etjamais imposes.Letemps d'utilisationd'unemachinepeuttreunindicedecettequalit,MTBF(MeanTimeBetweenFailure).

LaConsolePatrickHautrive!;~)2010

172

Certains informaticiens considrent souvent qu'il vaut mieux ne pas toucher quelque chose qui fonctionne, parceque l'interventionhumaine est laprincipalesourcedengligences,d'erreursetde dysfonctionnement.Toutefois,lessystmesd'informationvoluentperptuellement,etpluttversune complexification, aussi, l'attentisme et le conformisme ne sont pas des attitudes efficaces, et l'administrateurnedoitpasattendrequelafaillesurviennent.Tousleschangementsdeconfiguration devraienttreconsignsdansunregistreettouslesjournauxdesurveillancedevraittresauvegards dansunlieuspar. L'administrationdesprogrammes Lesprogrammesetlenoyauconstituentleslmentsde code quisontenactivitdanslamachine. Moins,ilyauradecode,moinsilyauradesourced'erreurs.Ainsi,undesprincipesdel'administration d'unsystmeestd'interdiretoutcequin'estpasindispensable,etden'autoriserexplicitementquece quiestrigoureusementncessaire. L'administrateurchoisiradeprendresontempspour valuerles besoinsetlesrisques,etden'installerqueleminimumd'applications,deservicesetdeserveurs,etil prvoiradedsinstallerlespackagesobsoltes. Toutefois, les mises jour de scurit font parties des priorits, parce que lorsqu'une faille est divulgue,ilexisteuntempsde latence entrelemomentdesadcouverteetlemomentotousles systmes sont mis jours. Et pendant ce temps d'adaptation, la faille est connue, la solution est disponible,maissonapplicationn'estpasencoremisenplace. Unautreprincipeestden'octroyerquelesdroitssuffisantspourl'excutiond'unetche.Ainsi,iln'est pasncessairequecesoitl'administrateur(root)quilanceleserveurgraphique(xwindow).D'autre part,laprsenceetl'usagedesdroitsSUIDetSGIDdoiventtrelimitsaustrictncessaire.Unebonne connaissanceducoded'unprogrammeestunfacteurdterminantpourunbonusage.C'estpourquoi, les Logiciels Libres quipermettent l'accs aucodesourceest primordial pourl'administration des systmesd'information. Lasegmentationdel'administration Lasegmentationdel'administrationconsistesparerleschoses(nonpasdiviserpourrgnermais pluttlasparationdespouvoirs).Eneffet,pluslesactivitssontdissocies,etplusilestfaciledeles hirarchiser,delessuperviseretdelescontrler.Lessousrseauxpermettentdesparerleslieuxetles communications depaquets TPCIP.L'interposition deparefeuetdezones dmilitarises (DMZ) permetdefiltrerlesconnexionsetleschanges. Lacrationdegroupespermetderassemblerlesutilisateursautourd'unemmetche,aveclesmme droits, et en mme temps d'en exclure les autres. L'attribution de fonctions prcises certains utilisateurs permet de savoir exactement qui fait quoi, o, quand et pourquoi. La sparation des vnements systmes dans des fichiers journaux spcifiques permet de remonter l'information directement.
LaConsolePatrickHautrive!;~)2010

173

Le compte root doit tre rserv un seul utilisateur, clairement identifi (clearance). Le super utilisateurdoitveillersedconnecterquandsatched'administrationestaccomplie.Lemotdepasse del'administrateurdoittretenusecret(avecuneoudeuxcopiesdescurit),etildoittremodifi rgulirement.L'identificationdesutilisateursdoittreuniqueetchaquecomptedoitavoirsonpropre identifiant(UIDetGID).L'authentificationdesconnexionsdechaqueutilisateurdoittrecontrlpar unmotdepasserobuste(password).Lespermissionsdoiventtrelesplusrestrictivespossibles.Les scriptsshellnedoiventjamaisporterunbit spcial (SUIDetSGID).Lesutilisateursquin'ontplus accs au systme doit avoir leur compte dsactiv. Les serveurs doivent volus dans un environnementprotg(chroot).Les applications inutiles doiventtredsinstalles.Lesmachines doiventtreinstallesdansdessallesfermescls.Lessauvegardesdoiventtregardesdansunou plusieursautreslieuxl'abridesincendiesetdesvols. Lecryptage Lecryptagedesdonnesconsiste enuncalculeffectusurunedonne.Gnralement,lecryptage permetderendre desdonnesillisiblespourunepersonnenepossdantpaslaclefpermettantdeles dcoder. Le cryptage apporte les avantages de la discrtion (la confidentialit des donnes et des messages,l'authenticitdesinterlocuteurs,etl'intgritdesdonnes). Lesbonnespratiques Lesbonnespratiquesdansl'administrationd'unsystmed'informationconsistelimiterlesrisqueset n'accepterquecequiestexplicitementautoris. Lasegmentationdesrseaux(subnet). Lasurveillancedutraficrseau(monitor). Lefiltragedesaccsparunparefeu(firewall). Lajournalisationdeserreursetdesmodifications(log). Lasparationdesdisquesenplusieurspartitions(fdisk). Lalimitationdunombreetdestaillesdefichiers(quota). Laprotectionphysiquedesinfrastructuresetdesserveurs(rooms). L'authentificationdesutilisateursavecdesmotsdepasse(passwd). Lasparationdesservicesinstallssurdesserveursddis(servers). Lamisejourdescuritdessystmesetdesapplications(upgrade). L'installationuniquementdesapplicationsncessaires,testes(install). Lavrificationdespicesjointesparunantivirusperformantetjour(virus). Lecryptagedescommunicationsetventuellementdesdonnesstockes(ssh). Lasauvegardesystmatiquedesfichiersetlavrificationdesprocduresderestauration(backup). Lacommandesudo
LaConsolePatrickHautrive!;~)2010

174

Lacommandesudopermetd'octroyerdesprivilgesdel'administrateurcertainsutilisateursetpour certaines commandes.Lacommande sudo estcompatible avecPAM.Ilestconseilldenepas inclured'outilsinteractifs,nidescripts(chappementdushell)danslesexcutablesautorisstre lanc avec les droits root. La commande, excute une fois, donne une estampille temporelle (timestamp)decinqminutes (ticket),c'estdirequel'utilisateurpeutlancerles commandes qu'il souhaitesansavoirfournirchaquefoissonmotdepasse. C'estlefichier /etc/sudoers quidfinielesutilisateursautorissetleursprivilges.Lacommande mansudoersdonneunedescriptiondelasyntaxedecefichieretdelagrammaireEBNF(Extended BackusNaur Form). La commande sudoedit montre comment ajouter un utilisateur parmi les membres privilgis. Les activits de sudo peuvent tre enregistres dans le journal /var/log/sudo.log. Lefichiersudoers Unexempledefichier/etc/sudoers defaultsinsult #login commande root ALL #%groupe commande %usersALL User_Alias ENSEMBLE Host_Alias MACHINE Cmd_Alias ARRETER CmdAlias MONTER joe ALL %mygroup ENSEMBLE noone ENSEMBLE %wheel ALL defaults joe!authenticate Lesexemplesroot ntpdate cd/root chmodR700/root chmodR700/var/log chmodow/etc/aliases chmod700/usr/sbin/chroot cat/etc/crontab vi/etc/profile
LaConsolePatrickHautrive!;~)2010

=(machine) identitdel'utilisateur(runasotheruser) =(ALL) ALL =(machine) identitdel'utilisateur(runasotheruser) =() ALL =joe,noone,phil =localhost =/usr/sbin/halt =/sbin/mount,/sbin/umount =HALT =ARRETER,MONTER =MONTER =(ALL) NOPASSWD:ALL

175

umask077 find/usrtypefperm+6000xdevexeclsl{}\; find/homename.rhostsexeccat{}\; find/userrootperm4000execlsla{}\; sudofind/nouseronogroupprint echo>/etc/nologin echo$PATH timels/ ulimita cat/etc/hosts.allow cat/etc/hosts.equiv less/var/log/messages|greproot cat/etc/group|grepwheel useraddu0oadmin cat/etc/group|greproot echoroot:x:0:root,wheel,admin>>/etc/group passwdadmin suadmin;id;groups visudoc;visudos tarxvzfsudo.tar.gz cdsudo ./configure withlogpath=/var/log/sudo.log withtimeout=10 withenveditor usepam disableshadow cat/proc/cpuinfo sudocat/proc/kcore|less cat/proc/meminfo cat/proc/version ls/proc/sys/net/ipv4/tcp* vi/etc/sysctl.conf net.ipv4.tcp_fin_timeout =30 net.ipv4.tcp_keepalive_time =1800 net.ipv4.tcp_window_scaling=0 net.ipv4.tcp_sack =0 net.ipv4.tcp_timestamps =0 /etc/rc.d/init.d/networkrestart cat/proc/sys/net/ipv4/tcp_fin_timeout cat/proc/sys/net/ipv4/tcp_keepalive_time cat/proc/sys/net/ipv4/tcp_window_scaling cat/proc/sys/net/ipv4/tcp_sack cat/proc/sys/net/ipv4/tcp_timestamps
LaConsolePatrickHautrive!;~)2010

176

faillog awkF:'($2==""){print}'/etc/shadow chageM60m7W7userName awkF:'($3=="0"){print}'/etc/passwd find/dirxdevtyped\(perm0002a!perm1000\)print find/perm+4000 find/perm+2000 find/dirxdev\(nouseronogroup\)print

LaConsolePatrickHautrive!;~)2010

177

PACKAGE L'installationdespackages Unefoislesystmeinstalletdmarr,l'utilisateurpeutinstalleroudsinstallerlesapplicationsqu'il souhaite.Les distributionssediffrencientselonletypedepackagequ'ellesutilisent.Lespackages sontdesarchives(Rpm,DebianouTarball)quicontiennentlesfichiersbinairespouruneapplication. Ces archives sont prpares spcialement pour un type de distribution (Red Hat, Debian). Les packagesstandardisentl'installationdesapplicationsquis'intgrentalorsparfaitementaveclerestedu systme. Des gestionnaires graphiques (packet manager) permettent la rcupration des archives depuis Internet,etl'automatisationdel'installationetdeladsinstallationdesapplications.Lesgestionnaires depaquetsgrentgalementlesdpendancesd'uneapplication. Parfois,unprogrammen'estdisponiblequesouslaformedessources.Lacompilationdessources permetd'installeruneapplicationquelquesoitletypededistributionLinux.Toutefois,l'installationdes applications par l'intermdiaire des gestionnaires de packages est toujours prfrables quand c'est possible. L'installationdesapplications Distribution Archive RedHat Debian BSD GnuLinux Rpm Deb Bsd Tarball Gestionnaire AdvancedPacketTool PortBSD Compilationdessources ./configure;make;makeinstall .tar.gzou.tar.bz2 Commande .rpm .deb aptgetinstallarchive.deb Format RedHatPacketManager rpmiarchive.rpm

Lesdpendancesdesapplications Lesdpendancesd'uneapplicationsontlesbinaires(binaries)etlesbibliothques(libraries)dontse sertl'applicationpourfonctionner.Lesdpendancespeuventtrecommunesplusieursapplications. Lammebibliothquepeutservirplusieursapplications.Legestionnairedepaquetd'unedistribution vrifie la prsence de ces dpendances avant d'installer une application. Les dpendances ne sont gnralementpasinclusesdanslesarchivespourunequestiondeplaceetdetempsdetlchargement, maisellessontindispensablesaufonctionnementdel'application. Les applications sont gnralement compiles avec des liens dynamiques pour les bibliothques. Ainsi,lesbibliothquessontsparesduprogramme,maissontchargesenmmoireenmmetemps

LaConsolePatrickHautrive!;~)2010

178

queleprogramme.La compilation d'unprogrammeavecdes liensstatiques pourlesbibliothques permetd'inclurelesbibliothquesl'intrieurdubinaire,celarendleprogrammeplusautonome,mais aussiplusvolumineux.Engnral,lesdpendancesdoiventtreinstallesavantl'applicationafinque cellescipuissenttreconfiguresdanslafoule. C'estpourquoi,ilesttoujoursprfrabledeprivilgierl'installationd'uneapplicationsouslaforme d'archive,correspondantautypededistribution(RedHatouDebian).Toutefois,l'installationmanuelle d'uneapplicationesttoujourspossiblesurunsystmeGnuLinux,maisrequiredescomptencesplus approfondiesparcequ'ilfautalorsgrersoimmelesdpendances. Lacompilationdessources Lacompilationdessourcespermetuneconfigurationplusprcisedel'application.Lacompilationdes sourcesd'unLogicielLibrepermetd'installerunprogrammequelquesoitletypededistribution.La compilation des sources d'une application est relativement simple et rptitive. Toutefois, tout programmedpenddeschoixduprogrammeur. Les conventions et les rgles d'usage ne sont pas toujours suivies, aussi la lecture des fichiers INSTALL,README,HELPouMAKEFILEquipeuventaccompagnerlecodesourcesontparfois salutairespourrsoudredesproblmesdedpendance.Unefoisl'archivetlcharge,laprocdurede configuration,decompilationetd'installationeststandard. L'exempledecompilation ftparchive.tar.gz tarxvfzarchive.tar.gz cdarchive ./configurePrefix=/usr/archive make makeinstall

LaConsolePatrickHautrive!;~)2010

179

SCRIPTS L'environnementdesscripts Lesscriptssontcritsdanslasyntaxedel'environnementquilesinterprtera.Lesenvironnementsshell (Bourne,C)sontdiffrentslesunsdesautres,etilssedistinguentencoreplusdesenvironnements d'autreslangagesd'interprtation(Php,Python,Perl).Ainsi,unscriptshellestcritpouruntypede shell.UnscriptshelldetypeBourne(Bash),neserapasforcmentcompatibledansunshelldetypeC shell (TCSH).Cesdeuxtypesdeshell possdenteneffetdes particularits quileursontpropres. Toutefois,lesscriptsshellquiremplissentlesconditionsdelanorme POSIX doiventpouvoirtre compatible et portable. A contrario, les scripts rdigs pour d'autres langages d'interprtation, commelesscriptsPhp,PythonouPerlsontfoncirementdiffrentsparcequeleur grammaire est particulire. Lescommandesl'intrieurd'unscriptserontexcutesdansl'environnementquiestindiquendbut de script. Cet environnement est stipul par le chemin du binaire. Pour un script shell, cet environnementseraindiquparlecheminversleshell(#!/bin/bash).Pourunscriptpropreunautre langage,l'environnementseraindiquparlecheminverslelangageinterprt(#!/usr/bin/perl).Bien sr,lepackagedulangaged'interprtationdoittreinstallsurlesystme. Chaqueligned'unscriptconstitueunelignedecommande,etchaqueligneserainterprte,analyseet excuteparlelangagedel'environnementdansl'ordred'apparition. Touslesscripts sontplus ou moinscapablesderemplirlesmmesfonctionnalits,maisleurcritureseraplusoumoinsfacileselon le contexte et le rsultat attendu. Les environnements peuvent tre adapts selon les besoins. Les commentairesl'intrieurd'unscriptsonttrsutilespourledocumenter.Lescommentairessonttoutes leslignesquicommencentparundiseetellesnesontpasinterprtes.Lecoderetour(echo$?) permetdesavoirsitouts'estbiendroul. L'excutiondesscripts Lesscriptssontdesfichierstextescontenantsdescommandes.Lesscriptspermettentd'automatiserles tchesrptitives.Cescommandespeuventtredesoutils,d'autresscripts,oudesapplications.Pour treexcuts,lesscriptsdoiventpossderledroitd'excution(chmodu+xscript.sh).Lelancement d'unscriptobitauxmmesrglesquelescommandes,c'estdirequel'environnementquiexcutele scriptdoitconnaitrelechemindesexcutables. Lechemindesexcutablesestdonn,soitparlavariablePATH(echo$PATH),soitparlechemin absolu(/home/$USER/script.sh),soitparlecheminrelatifaurpertoirecourant(./script.sh),soit parlavaleurd'unlien(link)oucelled'unalias.Mais,iln'estpasrecommanddeplacerlerpertoire courant(.)danslavariabled'environnementPATH,parcequecelapermettraitdepouvoirexcuter touslesexcutables,simplementenseplaantdansleurrpertoire.L'appeld'unscriptparlepoint
LaConsolePatrickHautrive!;~)2010

180

(./script)excutelescriptdansl'environnementcourant,aveclesdroitsdel'utilisateurencours. Lelancementdesscripts Unscriptestgnralementlancdepuisunterminalvirtuel,dansunsousshell,aumoyend'unappel implicite(./script.sh),oud'unappelexpliciteenspcifiantleshelld'excution(bashscript.sh)ou enutilisantlacommandesourcescript.Laformulationd'unecommandeappelantunscriptobit aux mmes rgles que pour les commandes, c'estdire que les scripts peuvent tre lancs en backgound(./script.sh&)oudtachsduterminal(nohupshscript.sh).Lesscriptspeuventtre lancsrgulirement,dansunetablecron(crontab),etaveclesdroitsd'unutilisateurspcifique. Lesscriptsshellutilisentlescaractristiquesdushell,commel'interprtationdesexpressionsrgulires (regex),lesvariablesd'environnement(setenv),lesfonctionsetlesvariablesinternes(echo$0), lesredirectionsdel'entreetdessortiesduterminal(stdin,sdtoutetstderr),lacommunicationinter processusavecl'envoidesignal(kill),maisaussilelangagedeprogrammationdel'interprteurde commande.C'esttoutcelaquienfaitunoutilsoupleetpuissant. Unscriptcommencetoujours parun ShaBang,expression(#!)suiviedu chemin absolude l'interprteurdecommande(#!bin/bash)quiinterprteralescript.L'excutiond'unscriptavecleSha Bang#!/bin/bashxvpermetdevoirl'excutionligneparligneparleshellBash,etdevisualiserles valeursdesvariableslorsdeleurinterprtation. Lardactiondesscripts Les scripts shell fonctionnent dans l'environnement d'un shell et peuvent donc utiliser toutes les capacits de leur environnement. Ces capacits (l'hritage de l'environnement, les variables, l'interprtationdescaractresspciaux,lesfonctions,lesstructuresdeprogrammation,lesredirections, l'envoiedesignal,lesappelssystmes,lesoutilsgnu,lesautresscriptsetlesapplicationslocales,...) sont tellement riches et complexes, qu'il y a toujours plusieurs faons d'crire un script. La diffrenciationd'unscriptd'unautre,nes'effectueplus,dslors,surl'objectifatteindre,maissur l'conomiedesressourcesdontilabesoin,enterme,denombredelignes,denombredeprocessusou denombredefichiersouverts. Lesscripts utilisentabondammentlesoutilsGnu,quipermettentderechercheretdeconsulterdes fichiersetd'enextrairedesvaleurs.Chaquecommandepeutagircommeunfiltreetredirigerson rsultatverslacommandesuivante.Ilestimportantdeprendreletempsdedocumenterunscript,c'est dire de placer des commentaires pour expliquer son fonctionnement, afin de faciliter sa comprhensionparunetiercepersonneetsamodificationparlasuite. Lesscriptspeuventtreinteractifs,c'estdirequ'ilspeuventattendrelesrponsesdel'utilisateuravec lescommandesinternesaushell(echo,wait,read).Ilspeuventtremodulablesaveclesinstructions internesaushell(true,sleep,continue,break).Ilspeuvents'adapterauxcirconstancesenutilisantles
LaConsolePatrickHautrive!;~)2010

181

structuresdecontrle. Enfin, les scripts reconnaissent les oprateurs logiques (AND, OR, NOT, TRUE, FALSE), les oprateursarithmtiquespourlecalculd'entiersnumriquesl'intrieurdeformules(integer)etles oprateursalphanumriquespourlacomparaisondechainesdecaractres(string). Lescommandesdemanipulationdesfichiers(filter) find grep diff uniq sort wc patch awk sed tr cut col groff expand unexpand paste rechercherunfichierdansl'arborescence slectionnerdeslignesquicontiennentuneoccurrencedansunfichier comparerlignelignedeuxfichiers carterlesdoublonsl'intrieurd'uneliste classerdeslistesdelignesdansunordrealphanumrique compterleslignes,lesmotsoulescaractres(wordcount) insrerdesmisesjourdansunfichier manipuleretformaterdesexpressionsavecunlangagedeprogrammation d'extraireouderemplacerdesmotifsunfluxdetexte(streameditor) traduireuncaractreoul'effacer(truncate) slectionnerunecolonnedansuneligneenfonctiond'unsparateurconnu renverserl'ordred'unflux formaterunfluxdesortie convertirlestabulationsenespace convertirlesespacesentabulation regrouperencolonneleslignesdediffrentsfichiersdansunautrefichier

Lesstructuresdecontrle Les structures de contrle des scripts peuvent tre des structures dcisionnelles ou des structures itratives.Lesstructuresdecontrlesontdesmcanismespropresau langagedeprogrammation interprtdushell. Lesstructuresdcisionnellessontaussiappelesdesbranchementsconditionnelsoudestests,etelles permettentd'orienterl'excutionduscriptselonlescirconstancesversteloutelblocd'instruction. Les structures itratives sont aussi appeles des boucles, et elles permettent de rpter un certain nombredefoislemmeblocd'instructions.Lesbouclestournentselonlavaleurd'uncompteurquiest incrmentchaquetourselonunpasspcifique(engnralei++,c'estdirelavaleurprcdente plus une unit). En gnral, un compteur est modifi l'issue d'un traitement, la fin d'un bloc d'instruction.

LaConsolePatrickHautrive!;~)2010

182

Lesstructuresdecontrle Lesstructuresdcisionnelles(branchementsettests) MinimumofTours Lacondition ifthenelsethenfi one Lechoixmultiple caseindefaultesac one Lesstructuresitratives(boucles,compteursetpasd'incrmentation) Lecompteurdetoursestfixendbutdeboucle Lecompteurdetoursestcontrlenfindeboucle Lestoursdeboucles Lesbouclespeuventtournerunnombredefois,fixl'avance,ouuncertainnombredefoisquipeut trevariablemaisquivadpendredursultatd'untraitementl'intrieuredelaboucle.Lenombrede toursd'unebouclepour(for)peuttrevariable,maisilestconnuetfixendbutdeboucle. Lenombredetoursd'uneboucletantque(while)estvariable,etlaconditionestcontrleendbut deboucle,c'estdirequelabouclepeutnepass'excuter,silaconditiond'entren'estpasremplie,ou autrementdit,silecoderetourdel'expressionestdiffrentdezro.Labouclepeutgalementtourner indfinimentsilaconditiondesortien'estjamaisralise,c'estdiresilecoderetourdel'expression est toujours gal zro (true). C'est le cas des serveurs qui restent l'coute d'une demande de connexion,etquitournententchedefond. Lenombredetoursd'unebouclejusqu'ceque(until)estgalementvariable,maislecompteurest contrlenfindeboucle, c'estdire quelaboucles'excutetoujoursaumoinsunefois. Laboucle untilcontinuesilaconditiondesortien'estpasralise,c'estdiresilecoderetourdel'expressionest diffrentdezro(untrue).Laboucleuntils'arrtequandlaconditionn'estplusralise. fordodone untildodone =>fixed =>zero =>one Lecompteurdetoursestcontrlendbutdeboucle whiledodone

LaConsolePatrickHautrive!;~)2010

183

OPERATOR S Lesoprateurs Lesoprateurspermettentd'attribuerdesvaleursdesvariables(assignment),d'effectuerdestests (control, comparaison) ou des oprations sur des expressions (operation). Les oprations sont effectues,soitsurdesexpressions numriques(calculation), soit surdesexpressionsalphabtiques (concatenation). Il faut distinguer les oprateurs arithmtiques des oprateurs alphabtiques. Les oprateurs arithmtiques concernent la valeur numrique d'une variable (integer), tandis que les oprateurs alphabtiquesconcernentunechainedecaractre(string),laquellepeutcontenirunouplusieursmots (word). L'oprateurd'affectationsimple L'oprateurd'affectationsimpleestlesignegal(equal),etilestvalablepourl'attributiond'unevaleur numriqueoualphabtique.Unevariablepeuttredfiniecommenumrique(integer),auquelcas, cellecin'accepteraquedesvaleursnumriques. L'utilisationdesapostrophes(parenthesis)permet d'attribuerunevariablealphabtiquelavaleurd'unephrase(string)oudeplusieursmotssparspar desespaces(space). L'affectationd'unevaleurunevariabledoits'effectuersansespace(nospace) entrelenomdelavariable(identity)etsavaleur(value). L'oprateurd'affectationsimplepeuttregalementreprsentpardeuxsignesgaux(doubleequal), notammentl'intrieurdetestscontenantdesexpressionsarithmtiques. Lesoprateursarithmtiques Les oprateurs arithmtiques permettent le calcul d'entiers numriques l'intrieur de formules. Il existeunordredeprvalencepourlecalculdesesformules.Amoinsd'expliciterl'ordrel'aidede parenthsequiestinterprtenpriorit,lesoprateurssuiventuncertainordre. L'ordredeprsancedesoprateursestlesuivant:leregroupement((expr2expr2)),l'exponentiel (a**b), lamultiplication(a*b),ladivision(a/b),lemodulo (a%b)quirenvoilereste d'une division, c'estdire la premire dcimale ou le premier chiffre aprs la virgule, l'addition (a+b),etlasoustraction(ab).Laprsance(precedence)del'valuationdesexpressionspeut tre contourne en utilisant les parenthses. Par exemple, la formule (a+bxc) est quivalente ((a+b)xc). L'expansiondesvariablesd'uneformuleesteffectueavantl'valuationdel'expression.
LaConsolePatrickHautrive!;~)2010

184

Lesoprateursd'affectationarithmtique Lesoprateursd'affectationarithmtiqued'unevariablepermettentd'attribuerunevariableunevaleur arithmtique(assignment).Lavaleurarithmtiqueattribuepeuttreunesimplevaleur(numerical), une incrmentation par une constante (increment), ou une valeur calcule l'intrieure d'une expression(expression). Lesoprateursd'affectationarithmtique(manbash)(let)(expr) Lesoprateursd'affectationarithmtique(assignment)(numerical) VAR=expr VAR*=expr VAR/=expr VAR%=expr VAR+=expr VAR=expr VAR<<=expr VAR>>=expr VAR&=expr VAR^=expr VAR|=expr Lesoprateursdetest LesoprateursdelacommandeinternetestdushellBashs'appliquentsurlesattributsdesfichiersou surdesquantitsalphanumriques.Lesoprateursdetestdesattributsd'unfichiervonteffectueruntest ou une comparaison sur la valeur d'un attribut (permission, type, size). Les oprateurs alphanumriquespermettentdetesteroudecomparerdesvaleursnumriques(numericaltest)oudes valeurs alphabtiques, c'estdire de chaines de caractres. Une valeur numrique reprsente un nombreentier,etunechainedecaractrereprsenteunensembledecaractresdelatabledescaractres (ASCII)placslesunslasuitedesautres.Unechainedecaractrepeutformerunmot,unephrase,ou reprsenterlenomd'unevariable.Unechainedecaractrespeuttrenulle. Lestestsutilisentlacommandeinternetestdushellquirenvoilavaleurzrosiletestestvrifiet valide,ourenvoiuneautrevaleur,mmengative,souvent galel'unit, quandletestn'estpas probant.Lacommandeecho$?renvoizroquandladernirecommandes'estraliseavecsuccs. Lacommande testcondition peuttreremplacepardescrochets [condition].L'expression (keyword)estalorsvalueparleshell,etretournelecoderetour(returncode)galzro(zero)sila conditionestremplie,etdiffrentdezro(nonzero)silaconditionn'estpasremplie(untrue). Affectationsimple quivalentVAR=($VAR*expr) quivalentVAR=($VAR/expr) quivalentVAR=($VAR%expr) quivalentVAR=($VAR+expr) quivalentVAR=($VARexpr) quivalentVAR=($VAR<<expr) quivalentVAR=($VAR>>expr) quivalentVAR=($VAR&expr) quivalentVAR=($VAR^expr) quivalentVAR=($VAR|expr)

LaConsolePatrickHautrive!;~)2010

185

Lacommandemanbashexpliquel'utilisationdescommandesinternesaushellbash(builtin). Lacommandeinfocoreutils'testinvocation'donnedesexemplesd'utilisationdestests. Lacommandemantestexpliquel'utilisationdesoprateursconditionnels. http://tldp.org/LDP/abs/html/index.html Lesoprateurs detests arithmtiques Lesoprateurs detests arithmtiques ouoprateursdetestdesvariablesnumriquespermettentde comparerdeuxvaleursnumriques(integer). Lesoprateursdetestsarithmtiques(mantest)([condition]) Lesoprateursdetestssurlesvaleursarithmtiques(binary)(integer) testAeqB testAneB testAleB testAgeB testAgtB testAltB equal(==) notequal(!=) lessorequal(<=) greaterorequal(>=) greaterthan(>) lessthan(<) Testesil'expressionAestgaleB(equal) Testesil'expressionAn'estpasgaleB Testesil'expressionAestinfrieureougaleB Testesil'expressionAestsuprieureougaleB Testesil'expressionAeststrictementsuprieureB Testesil'expressionAeststrictementinfrieureB

Lesvaluationsarithmtiques LesvaluationsarithmtiquesdansBashconsistenteffectuerdescalculsnumriques.Lesexpressions arithmtiquescomportentdesvariablesnumriquesoudesvaleursnumriquesentires.Lesnombres peuvent tredes entiers (integer)ou des dcimales (decimal), des nombres naturels (natural) ou signs(signs),ngatifsoupositifs. Lecalculdesexpressionss'effectue l'intrieurdeparenthsesouaveclacommande expr,et l'affectationdesrsultatss'effectueavecl'oprateurgal(equal).Plusieursvaleursl'intrieurd'une listepeuventtresparespardesvirgules(comma)etlivresuneboucle(loop)quieffectueuncycle pourchacuned'entreelles.

LaConsolePatrickHautrive!;~)2010

186

LesvaluationsarithmtiquesdansBash(manbash)(let) Lesoprationssurlesexpressionsarithmtiques(expr) L'exponentiel Lamultiplication Ladivision Lemodulo(remainder) L'addition Lasoustraction L'valuationconditionnelle(ternary) L'affectationdevaleur(assignment) Listedevaleur(comma) L'encadrementd'uneexpression Lessignesunitaires Lavaleurpositive Lavaleurngative ** * / % + expr?expr:expr =*=/=%=+==<<=>>=&=^=|= expr1,expr2,expr3 (expr) +

Lesoprateursdecomparaison arithmtique Lesoprateursdecomparaisonarithmtiquepermettentdecomparerdeuxvaleursnumriques,afinpar exemple,defaireunchoixdansunestructureconditionnelle(branches)oudeprendreunedcision quantlacontinuationd'unestructureitrative(loop). LesoprateursdecomparaisonarithmtiquedansBash(manbash) Lesoprationsdecomparaisonarithmtique(integer) Lacomparaisonstrictementsuprieure Lacomparaisonstrictementinfrieure Lacomparaisonsuprieureougale Lacomparaisoninfrieureougale L'galit(equality) L'galit(equality) Ladiffrence(inequality) Lesoprateurslogiques Lesoprateurslogiquespermettentdecomparerdeuxexpressionsselonlavaleurdeleurcoderetour (returncode).Uneexpressionestconsidrecommevrai(true),sisavaleurestgalzro,oufaux (false),sisavaleurestdiffrentedezro.Lesoprateurslogiquesutilisentles tablesdevrit de l'algbredeBoole.Lesoprationslogiqueseffectuessurplusieursexpressionspermettentl'intrieur destructuresdecontrled'orienterledroulementd'unscript. ((A>B)) ((A<B)) ((A>=B)) ((A<=B)) ((A=B)) ((A==B)) ((A!=B))

LaConsolePatrickHautrive!;~)2010

187

LesoprateurslogiquesdansBash(manbash) Lesoprationslogiques(tabledevrit) Langationlogique(NOT) Laconjonctionlogique(AND) Ladisjonctionlogiqueinclusive(OR) Lesoprateurs detestslp qus a habti e Lesoprateursalphabtiquesouoprateursdetestsurleschainesdecaractrespermettentdecomparer deuxchainesalphabtiquesoumots(string). Lors de l'emploi de simple crochet, le caractre spcial suprieur ou infrieur, pour comparer les positionsdechainesdecaractresdansl'ordredelatableASCII,doittreprcdd'unchappement (escape)aveclecaractred'chappementantislash(baskslach). Danslaversion2del'interprteur Bash,lesdoublescrochets (doublebrackets) onttimplmentspoursatisfaireauxhabitudesdes programmeurs des autres langages de programmation. Avec l'utilisation des doubles crochets [[condition]],lescaractressuprieursouinfrieursn'ontplusbesoind'trechapps(\). Lesoprateursdetestdesvariablesalphabtiques(mantest) LesoprateurssurleschainesdecaractresASCII(sortstring)(numbersletterscapitals) testA=B testA!=B testA=~REGEX testA\<B testA\>B testnA testzA same different match before after notempty isempty LachaineAestidentiqueB LachaineAn'estpasidentiqueB Lachainecorrespondl'expressionrgulireREGEX LachaineAapparaitavantBdanslalistetrieASCII LachaineAapparaitaprsBdanslalistetrieASCII LachaineAn'estpasvide LachaineAestvide ! && ||

' L expansionalphabtique L'expansiondesparamtresalphabtiques,commelesvariables (variables)oulesvariablesinternes (builtin bash special parameters) peut s'effectuer de diffrentes manires. En gnral, il est recommandd'employerlesguillemets(doublequote)pourspcifierexplicitementaushellquece sont des variables, mais parfois, dans certaines expressions, l'emploi des guillemets empche l'valuationdel'expression. L'expansion des paramtres alphabtiques permet d'effectuer des tests (test) et des affectations (affectation) sur les variables alphabtiques (string). Les expressions qui utilisent les parenthses (curlybraquets)sontvaluesenprioritparleshellBash.

LaConsolePatrickHautrive!;~)2010

188

Lesoprateursd'expansionalphabtique(manbash)(string) Lesoprateursd'expansionalphabtique(ifthevariableisset,itisexpanded$VAR=VALUE) $VAR ${VAR} ${VARDEFAULT} ${VAR:DEFAULT} ${VAR=DEFAULT} ${VAR:=DEFAULT} ${VAR+OTHER} ${VAR:+OTHER} ${VAR?ERROR_MSG} ${VAR:?ERROR_MSG} ${!valprefix*} ${!valueprefix@} Lesoprationsalphabtiques L'expansion des paramtres alphabtiques permet d'effectuer des tests (test), des extractions (extraction)etdesremplacements(replacement)surlesvariablesalphabtiques(string). Lesoprationsalphabtiques(manbash)(string)(regex) Lesoprationssurleschainesalphabtiques(thesubstringisaregularexpression) ${#VAR} Evaluatethelengthofthevariable$VAR ${VAR:position} Extractsubstringfrom$VARat$position ${VAR:position:length} Extract$lengthcharacterssubstringfrom$VARat$position ${VAR#substring} Stripshortestmatchof$substringfromfrontof$VAR ${VAR##substring} Striplongestmatchof$substringfromfrontof$VAR ${VAR%substring} Stripshortestmatchof$substringfrombackof$VAR ${VAR%%substring} Striplongestmatchof$substringfrombackof$VAR ${VAR/substring/other} Replacefirstmatchof$substringwith$other ${VAR//substring/other} Replaceallmatchesof$substringwith$other ${VAR/#substring/other} If$substringmatchesfrontendof$VAR,replace$otherfor$substring ${VAR/%substring/other} If$substringmatchesbackendof$VAR,replace$otherfor$substring exprmatch"$VAR"'$substring' Lengthofmatching$substring*atbeginningof$VAR expr"$VAR":'$substring' Lengthofmatching$substring*atbeginningof$VAR exprindex"$VAR"$substring Numericalpositionin$VARoffirstletterthatmatches$substring exprsubstr$VAR$position$length Extract$lengthcharactersfrom$VARstartingat$position exprmatch"$VAR"'\($substring\)' Extract$substring*atbeginningof$VAR expr"$VAR":'\($substring\)' Extract$substring*atbeginningof$VAR exprmatch"$VAR"'.*\($substring\)'Extract$substring*atendof$VAR expr"$VAR":'.*\($substring\)' Extract$substring*atendof$VAR
LaConsolePatrickHautrive!;~)2010

$VAR(expansionofthevariabletoitsVALUE) $VAR(expansionofthevariabletoitsVALUE) $VARor$DEFAULT(IfVARisnotset) $DEFAULT(ifVARisnotsetorisempty) $DEFAULT(ifVARisnotset,then$DEFAULTissettoVAR) $DEFAULT(ifVARisnotset,then$DEFAULTissettoVAR) $OTHER(ifVARisset)orasnullstring(ifVARisnotset) $OTHER(ifVARisset)orasnullstring(ifVARisnotset) $ERROR_MSG(ifVARisnotset) $ERROR_MSG(ifVARisnotset) Matchesallpreviouslydeclaredvariablesbeginningwithvalprefix Matchesallpreviouslydeclaredvariablesbeginningwithvalprefix

189

Laconstructiondesexpressions Laconstructiondesexpressionsutilisentdiffrentscaractresspciaux(specialcaracters),lesquels sontinterprtsparleshellBash. Laconstructiondesexpressions(manbash) Crochets (brackets) if[CONDITION]then; if[[CONDITION]]then; ARRAY[1]=element1 [az] ${VAR} Accolades ${!VAR} (braces) {cmd1;cmd2;cmd3;} {string1,string2,string3,...} {a..z} {} (cmd1;cmd2) Parenthses ARRAY=(onetwothree) (parenthesis) VAR=$(cmd) >(cmd) <(cmd) DoublesParenthses ((VAR=X)) (doubleparenthesis) VAR=$((X+Y)) ((VAR++)) ((VAR)) ((VAR1=VAR2<X?Y:Z)) "$VAR" Guillemets 'string' (quotes) Substitution (backticks) VAR=`cmd` BasicTestConstruction ExtendedTestConstruction ArrayInitializationoftheSecondElement RangeofCaractersinaRegularExpression ParameterSubstitution IndirectVariableReference BlockofCommands ListofVariables ExtendedBraceExpansion InputReplacementafterfindandxargs CommandGroupExecutedinaSubshell ArrayInitializationofDifferentElement AffectationoftheOuputofaCommand ForwardRedirectionofaCommand BackwardRedirectionofaCommand AssignmentofanArithmeticExpression AssignmentoftheResultofaCalculation IncrementCStyle DecrementCStyle TrinaryOperationCStyle WeakDoubleQuoteofaVariable(Enable`,$,\) StrongSingleQuote(NoExpansion) Affectation of the Ouput of a Command (Altgr+7)

LaConsolePatrickHautrive!;~)2010

190

Lesoprateurs detestssurles attribut sdesfichiers Lesoprateursd'attributdesfichiersouoprateursdetestsurlestypesdefichierspermettentdetester l'existenced'unfichieretlepositionnementd'unattributparticulier,comme letypedefichier(file, directory, pipe, socket, symlink, block device, caracter device), ses droits (permissions), son appartenance(owner),sataille(size)ousadatedederniremodification(mdate),etdecomparerdeux fichiersselonleurinode(hardlink)ouleursdatesd'criture(mdate). Lesoprateursdetestsurlesattributsdesfichiers(mantest)([[condition]]) Lesoprateurssurlesattributsdesfichiers(file) testafile testefile testffile test!efile testddir testhsymlink testLsymlink testbblock testcblock testppipe testSsocket testtfile testN file testOfile testGfile testrfile testsfile testwfile testxfile testgfile testufile testkfile testfile1ntfile2 testfile1otfile2 testfile1effile2 exist exist exist donotexist exist exist exist exist exist exist exist terminal modified EUID EGID read notempty write execute SGID SUID STICKYBIT newer older samehardlink Existencedufichier(fileexists) Existencedufichier(fileexists) Existenced'unfichiernormal(regularfile) Nonexistencedufichier(filedoesnotexist) Prsencedurpertoire(directory) Prsenced'unliensymbolique(symlink) Prsenced'unliensymbolique(symlink) Prsenced'unfichierbloc(blockdevice) Prsenced'unfichiercaractre(characterblockdevice) Prsenced'unfichierFIFO(pipe) Prsenced'unfichierdeconnexionrseau(socket) Lefichierestassociunterminal(filedescriptoropen) Lefichieratmodifidepuisladernirelecture(new) Lefichierappartientl'utilisateureffectif(EUID) Lefichierappartientaugroupeeffectif(EGID) Lefichieraledroitenlecturepourl'utilisateur(read) Lefichiern'estpasvide(sizenotempty) Lefichieraledroitd'criturepourl'utilisateur(write) Lefichieraledroitd'excutionpourl'utilisateur(exe) LefichieraledroitSGID(sgidflag) LefichieraledroitSUID(suidflag) Lefichieraledroitt(stickyflag) Lefichierestplusrcentqueledeuxime(mdate) Lefichierestplusvieuxqueledeuxime(mdate) Lesdeuxfichierspointentverslammeinode(hardlink)

LaConsolePatrickHautrive!;~)2010

191

oprationsparticulires Les Certainesoprationsarithmtiquesnesontpastrsutilises,commelesoprationssurlesbits(bitwise) oulesoprationsd'incrmentationdevariablesnumriques. LesoprationsparticuliresdansBash(manbash) Lesoprationssurlesbits(bitwise) L'inversiondubit(NOT) ~ Lebasculementversladroitedesbits >> (rightshifting) Lebasculementverslagauchedesbits << (leftshifting) Lebasculementgauched'unevariable <<= (leftshiftequal)(letVAR<<=2) Lebasculementdroitd'unevariable <<= (rightshiftequal)(letVAR>>=2) Laconjonctionlogiquededeuxbits(AND) & &= Ladisjonctionlogiquededeuxbits(OR) | |= L'exclusionlogiquededeuxbits(XOR) ^ ^= Lesoprationssurl'incrmentationdesvariablesnumriques Lapostincrmentation Lapostdcrmentation Laprincrmentation Laprdcrmentation Lesoprations spciales Lesoprationshexadcimalespermettentd'effectuerdescalculssurunebase12(hexadecimale).Les oprationssurd'autresbasessontgalementpossiblesdansBashavecl'expressionXbaseY. Lesoprationsspciales(base,hexadcimale,octal) echo$((x)) echo$((10#$x)) echo$((2#$x)) valuationOctaledunombrex valuationdelaBase10dunombrex valuationdelaBase2dunombrex id++ id ++id id

LaConsolePatrickHautrive!;~)2010

192

Laprsance Lesoprateurs,quandilssontassocisensembles,formentdesgroupesd'expression,quisontvalus selon un ordre de prsance (precedence). L'ordre naturel de prsance correspond au sens de la lecture,delagaucheversladroite.Lorsqueilyaindcision,commedansuneexpressionaop1bop2 cop3d,leshellvalueenpremierlesoprationsdontl'oprateurlaplusgrandeprsance.Quand aucuneparenthse(parenthesis)n'organiselesgroupesd'expression,l'ordredeprsancedterminela prioritd'unevaluationparrapportuneautre. 1. Postfix(id++,id) 2. Prefix(++id,id) 3. Unaryminusandplus(,+) 4. Logicalandbitwisenegation(!,~) 5. Exponentiation(**) 6. Multiplication,division,remainder(*,/,%) 7. Addition,subtraction(+,) 8. Bitwiseshifts(<<,>>) 9. Comparison(<,>,<=,>=) 10. Equality,inequality(==,!=) 11. BitwiseAND(&) 12. BitwiseXOR(^) 13. BitwiseOR(|) 14. LogicalAND(&&) 15. LogicalOR(||) 16. Ternaryoperator(<EXPR>?<EXPR>:<EXPR>) 17. Assignments(=,*=,/=,%=,+=,=,<<=,>>=,&=,^=,|=) 18. Expressionlistoperator(<EXPR>,<EXPR>)

LaConsolePatrickHautrive!;~)2010

193

Lescodes erreurs des Certains codesdeserreurs(errorcodes)sontprdfinisetcorrespondentunvnementparticulier. Unutilisateurpeutdfinirdansunscriptlescodesdesortiequiluiconvient,toutefoisilestprfrable denepasemployerceuxquisontprdfinis,puisqu'ilsontunesignificationconvenue.Lescodesdes erreursprdfinissontcomprisentre0et255,maisilestpossibled'attribueraveclacommandeinterne aushelBashexituncoded'erreurendehorsdecetintervalleoud'unevaleurngative.Lescodes deserreurssontcalculsaprsl'excutiond'unecommandeoud'unscript(exitcode). Lescodesdeserreurssontdfiniesdanslefichier/usr/include/sysexits.h. Lacommandeecho$?affichelecodedesortiedeladernirecommandelance(returncode). Lescodesdeserreurs(echo$?)(/usr/include/sysexits.h) Code 0 1 2 126 127 128 Success Miscellaneouserrors(impermissibleoperations) Misuseofshellbuiltins(seldom,defaulttoexitcode1) Commandcannotexecute(nopermissionornotexecutable) Commandnotfound(notfoundinthe$PATH,wrongtypo) Invalidargumenttoexit(onlyintegerintherangefrom0to255) exit3.14159 Meaning Example EchoHelloWorld let"var1=1/0" empty_function(){}

128+n Fatalerrorsignal(n=thenumberofthesignalsenttotheprocess) kill9$PPID ($?=137=128+9) Ctrl+C 130 ScriptterminatedbyControlC(fatalerrorsignal2) ($?=130=128+2) exit1 255 Exitstatusoutofrange Lesexemplesdescripts date>file;who>>file nlnumfile.txt sortnnumfile.txt sort<file>>filealphanum sortfile|lp;catfile|sort|lp mailuser<file echo"$PATH";exportPATH=$PATH:.;echo"$?" visuppr rmi$* chmodu+xsuppr lslsuppr
LaConsolePatrickHautrive!;~)2010

194

./supprfilefool vi.profile #AliasdansleShellKorn rm() { /bin/rmi$* } vi$HOME/.cshrc #AliasdansCshell aliasrm'rmi$*' viprompt if[!$PS1]; then PS1=\h:\w%; fi vianswer echoPleasetypeyouranswerA,BorC readANSWER case$ANSWERin A|a) echoYoutypedAora;; B|b) echoYoutypedBorb;; C|c) echoYoutypedCorc;; *) echoYouranswerisoutofrange;; esac viplusdate JOUR=`date+%m%d%y` mv$1$1.$JOUR foriin*.txt;docp$i/tmp/$i;done forFILEin$(find.typefname*.html);dosede's/old/new/g'$FILE;done vicopytmp foriin$* do cp$i/tmp/$i done sort<<END MacosX Linux OpenBsd Windows END .script.sh

LaConsolePatrickHautrive!;~)2010

195

A EX MPLES .Goodpractice 3 L'indentation(indentation)deslignesdecodesetlerespectdecertainesrgles(rules)permettentde qualifierunscriptd'lgant,voired'intellectuellementesthtique(beauty).Cesbonneshabitudes(good practice) et ces conventions permettent de fournir un code lisible et facile maintenir pour l'exploitationenproduction. Lafonctiond'unevariabledevraittrebienidentifie,etneservirqu'unseuldessein(purpose),afin d'viterlesconfusions.Lenomquiestattribuunevariabledevraitrefltersafonction(naming).La conventiondenommagedesvariablesenmajuscule(capitalletter)estbienutilepourlarelecturedes scripts. Le choix de variables et de fonction gnralistes permet de faire voluer le code (evolution),etl'crituredepetitsscriptssimplespermetdelesutiliserensembles,avecdesredirections oudesappels(call). L'crituredescriptdevraittoujoursprivilgierlesnormesofficielles(posix)etprendreenconsidration la portabilit (portability) d'un script vers un autre interprteur de commandes ou vers un autre systmed'exploitation. 2.Errors Lesvariablesdevraienttoujourstreencadresd'apostrophe(doublequote)afind'viterl'ambigit desinterprtationsparleshellBash (particulirementdanslestestsdesboucles). Ladclarationdes variablesetdestableauxrequireimprativementquelesignegal(equal)soitaccolaunom(name) etlavaleur(value).Lesstructuresconditionnelles(test)etlesbouclesitratives(loop)requirentun pointvirgule(semicolon)aprsletestd'entredanslaboucle(entrytest).Lescrochets(brackets)qui entourentlesconditionsrequirentunespacedepartetd'autredel'expressionconditionnelle. Lorsqu'unscriptestlanc,leserreursqueleshellBashrenvoisontgnralementindiquesavecle numrodelalignecorrespondl'erreur(linenumber)danslescript,etavecuncoded'erreur(error code)quipermetdefairedesrecherchessurinternetpourentrouverlasignificationetlasolution. Quanduneapostrophe(quote)manquequelquepart,alorsl'interprtationduscriptparleshellBashest dcale. Lacolorationsyntaxique(syntaxcolour)desterminaux(terminal)oudesditeurs(editor)descripts shellpermetdevisualiserrapidementlesvariables,lesexpressions,lescommentaires,lesstructureset lescaractresspciaux. LeShaBang #!/bin/shxv montre l'excution d'un script,ligneparligne, avecchaquemomentlavaleurdesvariablesquisontinterprtesparleshellBash.

LaConsolePatrickHautrive!;~)2010

196

. 1Warnings Attention,lacopieouledplacementcraselefichiercible,s'ilexistedj,etlaredirectionsimplevers unfichiercrasesontcontenu(moinsqueleverrounoclobbernesoitfix).Lacopiedetextepar slectionensurbrillanceetclicaveclamolette(middleclic)ouclicdroitpuiscoller(rightclicand paste)dansunterminalnecopiepastoujourslesmmescaractres(caractersmapping),spcialement lesapostrophes(quotes). Ilestimportantdetesteraupralablelesscriptssurunemachined'essai(textbox).Avantd'appuyersur la touche d'enter du clavier, il est toujours judicieux de relire sa commande attentivement, et de visualisercequ'elleestcenseaccomplir(?areyousure?)... LesLogicielsLibres(freesoftware)sontdesoutilstrsbienconus,etquis'amliorentgrcel'accs aucodesource,etautravaildelacommunaut.LalicenceGNU/GPLprotgelesutilisateurs des Logiciels Libres, en gardant libres toutes les modifications et/ou amliorations qui peuvent tre apportesunprogramme(freelicense).Toutefois,ceslogicielsnesontpasresponsablesdelafaon dontonlesemploi,etsontlivrsgratuitementsurinternet,maissansaucunegarantied'utilisationoude fonctionnement(nowarranty)... 0.Links http://bashshell.net/category/bashshell/ http://www.gnu.org/manual/manual.html http://bash.cyberciti.biz/guide/Main_Page http://www.linuxtutorialblog.com/category/tutorials http://www.linuxconfig.org/Bash_scripting_Tutorial http://tldp.org/HOWTO/BashProgIntroHOWTO.html#toc7 http://www.linuxselfhelp.com/gnu/bash/html_chapter/bashref_toc.html http://www.linuxdoc.org/HOWTO/BashProgIntroHOWTO.html http://www.livefirelabs.com/sample_course/index.htm http://www.gnu.org/software/bash/manual/html_node/ http://www.commandlinefu.com/commands/browse http://www.linuxtopia.org/online_books/index.html http://www.faqs.org/docs/abs/HTML/index.html http://techpatterns.com/forums/index.php http://tldp.org/LDP/abs/html/index.html http://mywiki.wooledge.org/BashFAQ http://www.shelldorado.com/scripts/ http://wiki.bashhackers.org/start http://www.faqs.org/docs/artu/ http://www.linuxforums.org/ http://www.tiddlywiki.com/
LaConsolePatrickHautrive!;~)2010

197

L'expansion 1. touchscript.sh lslih script.sh VAR="ls" echo"$VAR" ls echo"\"$VAR\"" "ls" echo"VAR=$VAR" VAR=ls echo"VAR=\$VAR" VAR=VAR echo"VAR=\\\\" VAR=\\ echo'VAR=$VAR' VAR=$VAR echo"VAR="`$VAR` VAR=script.sh echo$VAR ls echoe"\t$VAR" ls L'affectation 2. readp"PleasegiveavaluetothevariableVARandpresstheENTERkey?"VAR PleasegiveavaluetothevariableVARandpresstheENTERkey? VariableLocalandTemporary echoe"\nThevariableVARis:\t$VAR" ThevariableVARis: i=1 echoi 1 echo"i=$(($i+1))" i=2 echoi 1 leti=1 echoi
LaConsolePatrickHautrive!;~)2010

VariableLocalandTemporary

198

0 a=5 echo$a 5 b=7 echo$b 7 a=a+5 echo$a a+5 a=5 let'a=a+5' echo$a 10 let'a=a+b' echo$a 17 L'exportationdesvariables 3. echo$USER$HOME$SHELL env env|grepOSTYPE OSTYPE=linux exportOSTYPE=GNU/Linux echo$OSTYPE GNU/Linux bash echo$OSTYPE GNU/Linux exit CTRL+D echo$OSTYPE linux Lesalias 4. alias ls script.sh ll=lsl ll rwrr1patusers02011033114:59script.sh
LaConsolePatrickHautrive!;~)2010

199

unaliasll ll commandnotfound cnfnagios ll=lsl exit CRTL+D ll commandnotfound Lesprofiles 5. bashlogin lsl/etc/profile rwrr1rootroot91542010060817:58/etc/profile lsl~/.bash_profile lsl~/.bash_login lsl~/.profile rwrr1patusers10272011031721:38/home/pat/.profile echo$SHLVL 3 bashi lsl/etc/bash.bashrc rwrr1rootroot86922010060817:58/etc/bash.bashrc lsl~/.bashrc rwrr1patusers11772011030612:57/home/pat/.bashrc echo$SHLVL 4 exit echo$SHLVL 4 exit L'environnement 6. vi~/.bashrc EDITOR="/usr/bin/vim" PATH="/opt/bin/:$PATH" exportEDITORPATH aliasls='lslih' echo"Chargementdelaconfigurationtermin." echo"Bienvenue"`whoami` bashi
LaConsolePatrickHautrive!;~)2010

200

Chargementdelaconfigurationtermin. Bienvenuepat echo$EDITOR$PATH /usr/bin/vim echo$PATH /opt/bin/:/home/pat/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/X11R6/bin: ls 1705429rwrr1patusers02011033114:59script.sh echo$SHLVL 3 exit echo$SHLVL 2 ls script.sh . 7HelloWorld manbash viscript.sh #!/bin/bash #script.sh echoHelloWorld VAR=LocalEnvironment echo"ThevariableVARis:$VAR" echo$VAR chmod+xscript.sh lslscript.sh rwxrxrx1patusers322011033116:03script.sh ./script.sh HelloWorld ThevariableVARis:LocalEnvironment echo$VAR sourcescript.sh HelloWorld ThevariableVARis:LocalEnvironment echo$VAR LocalEnvironment exportVAR=LocalEnvironmentInitialShell echo$VAR LocalEnvironmentInitialShell echo$SHLVL
LaConsolePatrickHautrive!;~)2010

201

2 bash echo$SHLVL 3 viscript.sh #!/bin/bash #script.sh echoHelloWorld VAR=LocalEnvironmentNewShell echo"ThevariableVARis:$VAR" ./script.sh HelloWorld ThevariableVARis:LocalEnvironmentNewShell echo$SHLVL 3 echo$VAR LocalEnvironmentInitialShell unsetVAR echo$VAR env|grepVAR exit echo$SHLVL 2 echo$VAR LocalEnvironmentInitialShell unsetVAR echo$VAR Lesparamtres 8. manbash viscript.sh #!/bin/bash #script.sh echoe"\n\tHelloWorld\n" VAR=LocalEnvironment echo"ThevariableVARissetto:$VAR" #exportVAR #Printthescriptparameters# echoe"\n\tHerearethescriptparameters\n" echo$0$1$2$3$4$5$6$7$8$9 echoe"\n\tHereareothershellbuiltinparameters\n"
LaConsolePatrickHautrive!;~)2010

202

echo"\$#issetto:"$# echo"\$*issetto:"$* echo"\$@issetto:"$@ echo"\$?issetto:"$? echo"\$$issetto:"$$ echo"\$!issetto:"$! echo"\$issetto:"$ echo"\$_issetto:"$_ chmod+xscript.sh ./script.shonetwothreefourfivesixseveneightnineten HelloWorld ThevariableVARissetto:LocalEnvironment Herearethescriptparameters ./script.shonetwothreefourfivesixseveneightnine Hereareotherparameterbuiltin $#issetto:10 $*issetto:onetwothreefourfivesixseveneightnineten $@issetto:onetwothreefourfivesixseveneightnineten $?issetto:0 $$issetto:5819 $!issetto: $issetto:hB $_issetto:hB 9.Ledebugging killl sttya manbash mantrap viscript.sh #!/bin/bash #script.sh echoe"\n\tHelloWorld\n" VAR=LocalEnvironment echo"ThevariableVARissetto:$VAR" #exportVAR
LaConsolePatrickHautrive!;~)2010

203

#InfiniteLoopandexitwithCTRL+C echoe"\n\tInfiniteLoop\"whiletrue\"(noexitwithCTRL+C)Pleaseuse:kill9PID" #TraptheSIGNALS2&15(killl) trapechoYouhavepressedCtrlCbeforetheloopSIGINTSIGTERM sleep3 whiletrue; do echo"TheprocesssignalCTRL+CwillnotstoptheLoop(usekill9PID)" COUNTER=0 while["$COUNTER"lt10]; do echoThecounteris$COUNTER letCOUNTER=COUNTER+1 trap'echo"YouhavepressedCtrlCinsidetheloop"'SIGINTSIGTERM sleep2 done sleep3 #trap'echo"YouhavepressedCtrlCaftertheloop"'SIGINTSIGTERM done #trapTheEXITSIGNALhasbeentrappedEXIT #trapThisistotrapfordebuggingDEBUG #echo"Theexitcodeis(137isforSIGINTorCTRL+C):$?" #exit0 #return7 xtermesourcescript.sh& [1]7064 psaux|grepscript.sh pat 7064 18.7 1.2 11976 6548pts/0 S 16:14 0:08xtermesourcescript.sh pat 7068 43.7 0.2 4516 1380pts/3 Rs+ 6:14 0:19bashcsourcescript.sh pat 7119 0.0 0.1 3628 788pts/0 S+ 16:15 0:00grepscript.sh kill27064 [2]+ Exit2 xterme"sourcescript.sh" echo"Theexitcodeofthelatestforegroundprocesswas:$?" xterm& [3]7023 psaux|grepscript.sh pat 7023 44.7 0.2 4516 1224pts/3 R+ 16:11 0:18/bin/bash./script.sh pat 7027 0.0 0.1 3628 784pts/0 S+ 16:11 0:00grepscript.sh kill27023 kill157023 kill97023 echo"Theexitcodeofthelatestforegroundprocesswas:$?" echo"Theexitcodeofthelatestforegroundprocesswas:$?"
LaConsolePatrickHautrive!;~)2010

204

xterm& [4]8804 ./script.sh>pipescript.txt ^C^C^C psaux|grepscript.sh pat 8804 83.3 0.2 4512 1224pts/4 pat 8806 0.0 0.1 3628 788pts/0 kill98804 Processusarrt catpipescript.txt|grep"loop" YouhavepressedCtrlCintheloop YouhavepressedCtrlCintheloop 10.Lescommandes

R+ S+

18:19 0:10/bin/bash./script.sh 18:19 0:00grepscript.sh

pwd;id;who;users;groups;hostname;uptime;unamea;lsb_releasea {ls;duh;dfh;date}>/tmp/my_log;less/tmp/my_log;fdiskl ls/R;lsla~/|wcl;cat~/.bashrc;less/etc/passwd;cat/etc/group|grep$USER touchnewfile.txt;vinewfile.txt;echoAnotherlineattheendofthefile>>newfile.txt ifconfig;route;tcdump;nmapAT5localhost;nmapAT3scanme.org psaux|grep$USER|greptty;stty;killl;manbash;manascii;stty;killl emacs&;nohupemacs& emacs&top emacs||echoEmacsdidnotstart! emacs&&echoEmacsisstarting... KERNEL1=`unamesr`;KERNEL2=$(unamesr);echoe$KERNEL1\n$KERNEL2 !!;history;echoeTheerrorcodeZEROshowsthelastcommandwassuccessfull\n\t;echo$? Lesoprateurs 11. mantest test1gt2&&echoyes yes test1gt2;echo$? 0 [10eq7];echo$? 1 [[10lt11&&100gt99]];echo$? 0 Lesexpressions 12. expr$((4+3))
LaConsolePatrickHautrive!;~)2010

205

7 let$[12/3] 4 echo3+2=$[3+2] 3+2=5 Lasauvegarde 13. vibackuphome.sh #!/bin/bash #Tounzipandextractatarball,gotothedirectoryofextractionandlaunchthetarcommand tarczf$HOME/backup$USER$(date+%d%b%Y).tar.gz$HOME chmod+xbackuphome.sh ./backuphome.sh lslih mkdir$HOME/backup cd$HOME/backup;pwd tarxzvf$HOME/backuppat04avril2011.tar.gz mv$HOME/backuppat04avril2011.tar.gzbackup cdbackup gunzipbackuppat04avril2011.tar.gz tarxvfbackuppat04avril2011.tar ls Leslocales 14. vilocale.sh #!/bin/bash #Declarationofglobalvariable VAR="globalvariable" echoThevariableVARissetGLOBALLYandworth:$VAR #Creationofafonctioncalledlocalvar #TheBashfunctionlocaldefinesthelocalvariableforlocalvar functionlocalvar { localVAR="localvariable" echoThevariableVARissetLOCALYandworth:$VAR } #Thelocalfunctionlocalvarislaunchedinthescript localvar echoThevariableVARhasreturnedtoitsGLOBALLYvalue:$VAR chmod+xlocale.sh ./locale.sh ThevariableVARissetGLOBALLYandworth:globalvariable
LaConsolePatrickHautrive!;~)2010

206

ThevariableVARissetLOCALYandworth:localvariable ThevariableVARhasreturnedtoitsGLOBALLYvalue:globalvariable 15.Lesarguments viargument.sh #!/bin/bash #argument.sh #Topasseargumentstothescript.Example:"./argument.shonetwothree" echoe"\nThefirstnineargumentspassedtothescriptline(Bashspecialparameters)." echoe"\tThefirstnineargumentsare:\n\t$1$2$3$4$5$6$6$7$8$9" echoe"\nThecommandline(\$0\$*)withallthespecialpamameterspassedasarguments." echoe"\bThecommandlinewas:\n\t$0$*" echoe"\tThecommandlinecontained$#parameters(\$#)." #Argumentscanbestoredinanarray args=("$@") echoe"\nTheargumentspassedtothescriptcommandlinecanbestoredinanarray:" echoe"\t${args[0]}\t${args[1]}\t${args[2]}\t${arg[3]}\t${args[4]}\t${args[5]}" echoe"\t${args[6]}\t${args[7]}\t${args[8]}\t${arg[9]}\t${args[10]}\t${args[11]}" echoe"\nThevaluesofallthelinesofthearrayare:" echoe"\t'args=("$@")'\n" chmod+xargument.sh ./argument.shonetwothreefourfivesixseveneightnineteneleventwelve ThefirstnineArgumentspassedtothescriptcommandline(Bashspecialparameters). Thefirstnineargumentsare: onetwothreefourfivesixsixseveneightnine Thecommandline($0$*)withallthespecialpamameterspassedasarguments. ./argument.shonetwothreefourfivesixseveneightnineteneleventwelve Thecommandlinecontained12parameters($#). Theargumentspassedtothescriptcommandlinecanbestoredinanarray: one two three five six seven eight nine eleven twelve Thevaluesofallthelinesofthearrayare: 'args=(onetwothreefourfivesixseveneightnineteneleventwelve)' 16.Ledveloppement viexpand.sh #!/bin/bash
LaConsolePatrickHautrive!;~)2010

207

#Thecaracterbackticksorbackquote'`cmd`'executeashellcommandandgivetheoutput echoe"Theresultofthecommand'unameo'is:\t`unameo`" chmod+xexpand.sh ./expand.sh GNU/Linux 17.Lesrponses viresponse.sh #!/bin/bash #Theinteractivitywithascriptwhenitislaunchedallowtheusertoenterinput. echoe"Welcome,pleaseenteronewordofyourchoice:" readword echo"Thankyou,youhavetypedtheword:$word" echoe"Please,enternowtwowords,separatedbyaspace:" readfirstsecond echo"Thankyou,youhavetypedthewords\"$first\"and\"$second\"" #Theresponsecanbestoredintothedefaultbuildinvariable$REPLY echoe"Pleasetellmeyourfirstname:" read echo"Thankyou$REPLY,I'mgladtomeetyou..." #Thereadaoptionennableyoutostoretheanswersoftheuserintoanarray echoe"$REPLY,canyoutellmeinfourwords,whythelicenceGNU/GPLisimportant?" readaanswers echo"Ok,$REPLY,Thankyouforyouranswers." echo"IunderstoodthatforyoutheGNU/GPLlicencestandfor:" echoe"\n\t${answers[0]},${answers[1]},${answers[2]}and${answers[3]}:)\n" Ltrap 18. a pe vitrap.sh #!/bin/bash #trap.sh #Thecommand/usr/bin/clearisusedtoclearthescreenoftheterminal clear #ThetrapbuiltinBashcommandwillintercepttheprocesssignalssendtothescript echoThesignalCTRL+Cisdisabled #Thetrapcommandwillexecutethelocaltrapfunctionwhenreceivingthesignal traptrapfunctionINT #Thetrapfunctionwillprintontheterminalscreenamessageeverytimethesubrutineiscalled trapfunction() { echo"YouhavepressedCTRL+C,yoursignalhasbeenintercepted!"
LaConsolePatrickHautrive!;~)2010

208

} #Theloopwillcounttotenandexit #Theloopusesthe/usr/bin/seqcommandtogetthesequenceofnumberofcycles echoYoucanpressCTRL+C,butitwillnotstoptheloopoftenseconds... forcounterin`seq110`; do echo"Counting$counter/10beforeExit..." sleep1; done echoe"\n\tThe'trapfunction'hasworkedsuccessfully" chmod+xtrap.sh ./trap.sh ThesignalCTRL+Cisdisabled YoucanpressCTRL+C,butitwillnotstoptheloopoftenseconds... Counting1/10beforeExit... Counting2/10beforeExit... Counting3/10beforeExit... ^CYouhavepressedCTRL+C,yoursignalhasbeenintercepted! Counting4/10beforeExit... Counting5/10beforeExit... Counting6/10beforeExit... Counting7/10beforeExit... ^CYouhavepressedCTRL+C,yoursignalhasbeenintercepted! Counting8/10beforeExit... ^CYouhavepressedCTRL+C,yoursignalhasbeenintercepted! Counting9/10beforeExit... Counting10/10beforeExit... The'trapfunction'hasworkedsuccessfully Lestableaux 19. viarray.sh #!/bin/bash #array.sh #Declarationofanarraywith7elementsintoit ARRAY=('DebianGNU/Linux''RedHatCentOS'FreeBSDUbuntuOpenSuSESlackware 'LinuxFromScratch') #Declarationofavariablethatcontentsthenumberoflinesintothearray ELEMENTS=${#ARRAY[@]} #Theloopwillextracteachelementofthearrayandprintit #Thecounteris"i",theloopincrementby1andstopwiththelastelementofthearray echoe"\n" for((i=0;i<$ELEMENTS;i++));
LaConsolePatrickHautrive!;~)2010

209

do echoe"\t${ARRAY[${i}]}" done echoe"\n" chmod+xarray.sh ./array.sh DebianGNU/Linux RedHatCentOS FreeBSD Ubuntu OpenSuSE Slackware LinuxFromScratch 20.L'extraction ./array.sh>list.txt viextract.sh #!/bin/bash #extract.shlist.txt #Thescriptislaunchedwithanargument:afilethatcountainsthelinestobestoredinthearray #DeclararationofthearraywiththebuiltinBashcommanddeclare declareaARRAY #Linkthestandardinputstdin(0)withfiledescriptor10,andopeningfiledescriptor10 #ThelinkismadewiththebuiltinBashcommandexec exec10<&0 #Withtheredirectionofstdin,alltheinputwillcomefromthefileputinargumentofthescript #Thefilewillbereadlinebyline,andeachlinewillbestoredintothearray #Theargumentofthescriptisthefirstinternalvariable$1(list.txt) #Thisfileissettobetheinputstdinforthescript(extract.sh) exec<$1 #InitialisationofacounterfortheloopatZERO,incrementby1whilethereisstillanewline #EachcycleoftheloopwillstoreonenumberedlineintothevariableLINEandintothearray #ThearraystartsatZERO letcounter=0 whilereadLINE; do ARRAY[$counter]=$LINE ((counter++)) done echoe"\n\tTheNumberofelementsinthearrayis:${#ARRAY[@]}"
LaConsolePatrickHautrive!;~)2010

210

echoe"\n\tTheElementsofthearrayare:\n\t${ARRAY[@]}\n" #Restorationofstdinfromfiledescriptor10andreleaseoffiledescriptor10(10<&) exec0<&1010<& 21.Laboucle viloop.sh #!/bin/bash #loop.sh sleep1 echoe"\n\tCountingalistofpredefinenumbers" foriin102030405060708090100 do echoe"\tCountingby10s:\t$i" done sleep2 echoe"\n\tCountingarangeofnumberswithincurlybracketss" foriin{0..100} do echoe"\tCountingbyones:\t$i" done sleep2 echoe"\n\tCountingasequenceofnumbersbyincrementwiththecommand'seq'" foriin$(seq12100) do echoe"\tCountingbysequenceof2:\t$i" done chmod+xloop.sh ./loop.sh 22.Leban issement n vibannish.sh #!/bin/bash #bannish.sh #Thefilewithknownzombienetworksismaintainedathttp://www.spamhaus.org/xbl/ #ThebannedfileisalistofIpsaddressesbyexample:41.206.45.202or58.0.0.0/8 #ThescriptwillinputthoseIpsadressesintothefirewalliptablesanddropthem #Thisscriptrequirestobelaunchedwithrootprivileges #ThevariableIPreferstothefilethatcountainsthezombienetworks IP=/opt/scripts/banned foriin$(awk'{print}'<"$IP") do
LaConsolePatrickHautrive!;~)2010

211

echo$i iptablesAINPUTptcps$ijDROP done exit0 chmod+xbannish.sh su ./bannish.sh iptablesLn ChainINPUT(policyACCEPT) targetprotoptsourcedestination RHFirewall1INPUTall0.0.0.0/00.0.0.0/0 DROPtcp41.206.45.2020.0.0.0/0 DROPtcp58.0.0.0/80.0.0.0/0 23.Lesexcutables viexecutables.sh #!/bin/bash #executables.sh #Thescriptwilloutputthefileswithexecutablespermissionsinthedirectoryitislaunched echoe"\n\tThoseexecutablefileswherefoundinthisdirectory:`pwd`" foriin* do if[f"$i"ax"$i"] then echo"$i" fi done chmod+xexecutables.sh ./executables.sh Thoseexecutablefileswherefoundinthisdirectory:/home/pat/script argument.sh array.sh executables.sh expand.sh extract.sh locale.sh loop.sh response.sh script.sh test.sh trap.sh
LaConsolePatrickHautrive!;~)2010

212

Lacondition 24. vidirectory.sh #!/bin/bash #test.sh$HOME #Thescriptdeclareavaraiblethatcontainadirectory(firstargumentofthescript) #Thescriptcheckifthisdirectoryexists DIRECTORY="$1" if[d"$DIRECTORY"];then echo"Thedirectorydoesexist" else echo"Thedirectorydoesnotexists" fi chmod+xdirectory.sh ./directory.sh Thedirectorydoesnotexists ./directory.sh$HOME Thedirectorydoesexist 25.L'imbrication vinest.sh #!/bin/bash #nest.sh #Thescriptpresentalistofchoicesinacascademenu echoe"\n\tWelcometotheMenu" echoe"\n\tPleasechoosebetween[1,2or3]\n" echoe"\t1.Youwishtogoouttonigth" echoe"\t2.Youprefertostayathome" echoe"\t3.Youwanttoexitthemenu" readCHOICEPLACE #bashwhileloop while["$CHOICEPLACE"ne3]; do if["$CHOICEPLACE"eq1]; then echo"Youhavechosentogoout" PLAN="Youhavechosentogoout" echoe"\t1.Doyouwanttogodancing?" echoe"\t2.Doyouwanttogotothecinema?" echoe"\t3.Youwanttoexitthemenu" readCHOICEACTION
LaConsolePatrickHautrive!;~)2010

213

if["$CHOICEACTION"eq1]; then echoe"\n\t$PLAN" echoe"\tOk,swellwewillgodancingtonight" CHOICEPLACE=3 #exit0 else if["$CHOICEACTION"eq2]; then echoe"\n\t$PLAN" echoe"\tOk,greatwewillgotothecinematonight" CHOICEPLACE=3 #exit0 else echoe"\n\t$PLAN" echoe"\tOhwell,youwillknowlaterwheretogo tonight..." CHOICEPLACE=3 #exit0 fi fi else echo"Youhavechosentostayathome" PLAN="Youhavechosentostayathome" echoe"\t1.Doyouwanttorelax?" echoe"\t2.Doyouwanttoread?" echoe"\t3.Youwanttoexitthemenu" readCHOICEACTION if["$CHOICEACTION"eq1]; then echoe"\n\t$PLAN" echoe"\tOk,coolwewillstayzentonight" CHOICEPLACE=3 #exit0 else if["$CHOICEACTION"eq2]; then echoe"\n\t$PLAN" echoe"\tOk,nicewewillreadagoodbooktonight" CHOICEPLACE=3 #exit0 else echoe"\n\t$PLAN"
LaConsolePatrickHautrive!;~)2010

214

echoe"\tOhwell,youwillfindlaterwhattodoat home..." CHOICEPLACE=3 #exit0 fi fi fi done chmod+xnest.sh ./nest.sh Lacomparaison 26. vicompare.sh #!/bin/bash #compare.sh #Declarationoftheintegersnumberstobecomparedoneanother NUM1=2 NUM2=3 if["$NUM1"eq"$NUM2"]; then echo"Thetwonumbersareequal" elif["$NUM1"gt"$NUM2"]; then echo""$NUM1"isgreaterthen"$NUM2"" else echo""$NUM2"isgreaterthen"$NUM1"" fi chmod+xcompare.sh ./compare.sh Leclavier 27. vikeybord.sh #!/bin/bash #keybord.sh echo"PleasepressonekeyofthekeybordandthenpressENTER" readKEY case"$KEY"in [az] )echo"Youhavepressedoneminusculeletter:"$KEY"";; [AZ] )echo"Youhavepressedonemajusculeletter:"$KEY"";; [09] )echo"Youhavepressedonenumber:"$KEY"";;
LaConsolePatrickHautrive!;~)2010

215

* esac chmod+xkeybord.sh ./keybord.sh 28.L'expiration

)echo"Youhavepressedakeythatisnotaletter,neitheranumber:"$KEY"";;

viexpiration.sh #!/bin/bash #expiration.sh #Thescriptrequirestwointegerasarguments #Thefirstargumentmustbelowerthanthesecond i="$1" j="$2" echoe"\n\tThetwoargumentsofthescriptare"$1"and"$2"" #Theloopwillrunwhilethefirstislessthanthesecondnumber while["$i"lt"$j"]; do echoe"\t"$i"" i=`expr"$i"+1` done chmod+xexpiration.sh ./expiration.sh412 29.Leschaines vistring.sh #!/bin/bash #string.shwordstring #Thescriptrequirestwostringsasarguments #ThetestcheckiftheoneofthetwoBashinternalvariableareempty("||"isORcondition) if[[z"$1"||z"$2"]]; then echoe"\n\tPleasegivetwostringsargumentswhenyoulaunchthescript!\n" exit5 fi #Declarationofthetwovariableswiththescripttwostringarguments FIRST="$1" SECOND="$2" #Comparisonofthetwostrings if[$FIRST=$SECOND]; then echo"Thetwostringsarethesame:"$FIRST"equals"$SECOND""
LaConsolePatrickHautrive!;~)2010

216

exit5 else #Withoneonlybrackettheescapesuperiororinferiorsignneedtobeescape if[$FIRST\<$SECOND]; then echo"Thetwostringsaredifferent:"$FIRST"before"$SECOND"" exit5 else #Withtwobracketdonotneedtoescapethesuperiororinferiorsign #[[$FIRST>$SECOND]]; echo"Thetwostringsaredifferent:"$FIRST"after"$SECOND"" exit5 fi fi chmod+xstring.sh ./string.shlinuxdebian 30.Letank viwhile.sh #!/bin/bash #while.sh #Thewhilelooptestsiftheconditionistrueandrunswhiletheconditionremainstrue COUNTER=1 LIMIT=25 #Thewhileloopmusthaveasemicolonaftertheconditionandbeforethedoonthesameline #Thewhileloop: # "while[condition];do" # "cmd" # "done" while["$COUNTER"le"$LIMIT"];do echoe"\t"$COUNTER"/"$LIMIT"" let"COUNTER+=1" #COUNTER=$(($COUNTER+1)) done chmod+xwhile.sh ./while.sh 31.La prsence vipresence.sh #!/bin/bash #presence.shfile.txt
LaConsolePatrickHautrive!;~)2010

217

#Thescriptchecksthepresenceofthefilethatisgivenasargument FILE=$1 #Checkingifthefileallreadyexist if[e"$FILE"]; then echoe"\t\nThefile\""$FILE"\"allreadyexist!" echoe"\n\t`lslih"$FILE"`" fi #Thelooptocreatethefile while[!e"$FILE"]; do echoe"\n\t...Thefile\""$FILE"\"doesn'texist..." sleep1 echoe"\tDoyouwanttocreatethefile\""$FILE"\"in`pwd`?(yesorno)" readANSWER echo"ANSWERis:"$ANSWER"" echo"FILEis:"$FILE"" if[[$ANSWER=="yes"]]; then /bin/touch"$FILE" echoe"\n\t`lslih"$FILE"`" echoe"\n\tThefile\"`pwd`/"$FILE"\"nowexist\n" else echoe"\n\tThefile\""$FILE"\"willnotbecreated!" fi done chmod+xpresence.sh ./presence.shfile 32.Les innombrables vilisting.sh #!/bin/bash #listing.shdirectory #Thescriptlistthefilesintothedirectoryputasargument DIRECTORY=$1 echoe"\n\tThefilesinthedirectory\""$DIRECTORY"\"are:\n" forFILESin$(ls"$DIRECTORY"); do echoe"\t$FILES" done chmod+xlisting.sh ./listing.sh/
LaConsolePatrickHautrive!;~)2010

218

33.Laminuterie vicountdown.sh #!/bin/bash #countdown.sh #Thescriptwillcountdownfromtensecondandstop #Thewhileloopkeepsrunningwhentheconditionistrue(returncodeiszero) COUNTER=10 echoe"\n\tThisscriptwillstopintenseconds\n" while[["$COUNTER"gt0]]; do echoe"\t"$COUNTER"" sleep1 letCOUNTER=COUNTER1 done chmod+xcountdown.sh ./countdown.sh 34.Laprogression viprogressing.sh #!/bin/bash #progressing.sh #Thescriptwillcountnumberfromzerototenseconds #Theuntilloopkeepsrunningwhentheconditionisfalse(returncodeisnonzero) COUNTER=0 echoe"\n\tThescriptwillcountfrom0to10\n" until[["$COUNTER"gt10]]; do echoe"\t"$COUNTER"" sleep1 letCOUNTER=COUNTER+1 #COUNTER=$(($COUNTER+1)) done chmod+xprogressing.sh ./progressing.sh 35.Lasubstitution viunderspace.sh #!/bin/bash #underspace.sh
LaConsolePatrickHautrive!;~)2010

219

#Thescriptwilllocatethefileswithaspaceinthenameandreplacethespaceswithunderscore DIRECTORY="." #Theloopconditioniscontrolledwiththebash"read"command #Thecommand"find"redirectsitsSTDOUTtotheSTDINofthewhileloop #Thecommand"tr"truncatesthefilesfoundinthelocaldirectorybysubstituting""with"_" #Theresultofthecommand"tr"ispipedintothe"rename"command find"$DIRECTORY"typef|whilereadFILE;do #ThePOSIXclass[:space:]isusedtofindspaceinthefilename if[["$FILE"=*[[:space:]]*]]; then #Eachfilesarerenamedandeach""issubstituewith"_"caracter mv"$FILE"`echo$FILE|tr'''_'` #Asemicolonisputattheendof"if"structuretogetbacktothe"while"loop fi; done chmod+xunderspace.sh touch"filewithspace" ./underspace.sh lsfile_with_space 36.Lesfonctions vifunction.sh #!/bin/bash #TheBash"function"commandisusedtodeclarealocalfunctionintothescript functionfn_echo { echoe"\n\tThefunction\"fn_echo\"printoutthatoutput\n" } functionfn_echo_arguments { echo$* } functionfn_ls { ls$1 } #Thefunctioncanbecalledwithparameters fn_echo fn_echo_argumentshowmanyargumentsarepassedtothefunction\"fn_echo_arguments\"? echoe"\n\tThefunction\"fn_ls\"liststhefilesfromthedirectory\"\$HOME\"" fn_ls$HOME fn_echo
LaConsolePatrickHautrive!;~)2010

220

chmod+xfunction.sh ./function.sh 37.Laslection viselection.sh #!/bin/bash #selection.sh #TheBashvariable"PS3"isusedtochangethedefaultpromptwiththe"select"Bashcommand PS3='Chooseoneword:' #TheBash"select"commandusesalistofwordstoproposeinanorderedmenu selectWORDin"linux""bash""scripting""tutorial" do echoe"\n\tThewordyouhaveselectedis:$WORD" #TheBash"break"commandisusedtogooutoftheendlessloop break done exit0 chmod+xselection.sh ./selection.sh Lemenu 38. vichoices.sh #!/bin/bash #choices.sh #Thescriptpresentalistofchoiceinamenu echoe"\n\tWelcometotheMenu" echoe"\n\tPleasechoosebetween[1,2,3,4or5]\n" echoe"\t\t1.Launchaterminal" echoe"\t\t2.GetsomeinformationsabouttheOperatingSystem" echoe"\t\t3.ReadtheManPages" echoe"\t\t4.Seethelogs" echoe"\t\t5.Exit" readCHOICE; case$CHOICEin 1) echoe"\tYouhavechosentolaunchateminal..." sleep1 /usr/bin/xterm& ;; 2) echoe"\tYouhavechosentogetsomeinformationsabouttheOS:" echoe"\tThedateis:\t\t`date`" echoe"\tThehostnameis:\t`hostname`"
LaConsolePatrickHautrive!;~)2010

221

3) 4) 5) esac chmod+xchoices.sh ./choices.sh 39.Lescodes

echoe"\tTheprocessoris:\t`unamemp`" echoe"\tThememoryis:\t\t`cat/proc/meminfo|grepMemTotal`" echoe"\tThesystemis:\t\t`unameo`" echoe"\tThekernelis:\t\t`unamer`" echoe"\tThe`lsb_releasea|grepDescription`" echoe"\tThesystemisupsince:`uptime`" echoe"\tThediskusageis:\t`dush$HOME`" echoe"\tYouareloggedinas:\t`id`" ;; echoe"\tYouhavechosentoreadtheManPages..." /bin/bashc'xtermemanman' ;; echoe"\tYouhavechosentoseethelogs" /bin/dmesg|less ;; echoe"\tYouhavechosentoExit...bye..." exit ;;

viansic.sh #!/bin/bash #ansic.sh #Thescriptevaluatesthecodenumbers"\x40"hexvaluefor"@",and"\56"octalvaluefor"." #The"echo"commandinterpretsthespecialcaracter"\n"foranewline echo$'web:www.linuxconfig.org\nemail:web\x40linuxconfig\56org' chmod+xansic.sh ./ansic.sh web:www.linuxconfig.org email:web@linuxconfig.org 40.L'addition viaddition.sh #!/bin/bash #addition.shnumber1number2 #Thescriptshowsthreedifferentwaystocalculatetheadditionofthetwoarguments letRESULT1=$1+$2 echo$1+$2=$RESULT1'Thisistheresultof:letRESULT1=$1+$2'
LaConsolePatrickHautrive!;~)2010

222

declareiRESULT2 RESULT2=$1+$2 echo$1+$2=$RESULT2'Thisistheresultof:declareiRESULT2;RESULT2=$1+$2' echo$1+$2=$(($1+$2))'Thisistheresultof:$(($1+$2))' chmod+xaddition.sh ./addition.sh1288 12+88=100Thisistheresultof:letRESULT1=$1+$2 12+88=100Thisistheresultof:declareiRESULT2;RESULT2=$1+$2 12+88=100Thisistheresultof:$(($1+$2)) 41.L'arithmtique viarithmetics.sh #!/bin/bash #arithmetics.sh echo'CalculationwiththeBash"let"command:' #Thebashaddition letADDITION=3+5 echo"3+5="$ADDITION #Thebashsubtraction letSUBTRACTION=78 echo"78="$SUBTRACTION #Thebashmultiplication letMULTIPLICATION=5*8 echo"5*8="$MULTIPLICATION #Thebashdivision letDIVISION=4/2 echo"4/2="$DIVISION #Thebashmodulus letMODULUS=9%4 echo"9%4="$MODULUS #Thebashpoweroftwo(exponential) letPOWEROFTWO=3**2 echo"3^2="$POWEROFTWO echo'CalculationwiththeBashExpansion"$((num1opnum2))"or"$[num1opnum2]"' #Thetwoformatsareequivalent:"$[expression]"or"$((expression))" echo4+5=$((4+5)) echo77=$[77] echo4x6=$((3*2)) echo6/3=$((6/3)) echo8%7=$((8%7)) echo2^8=$[2**8]
LaConsolePatrickHautrive!;~)2010

223

echo'CalculationwithBash"read"and"Declare"command:' echoe"Pleaseentertwonumbers,separatedbyaspace:\c" #Thespecialescapecaracter"\c"ofthe"echoe"commanddisablestherepetitionoftheinput readnum1num2 declareiresult result=$num1+$num2 echo"$num1+$num2=$result" echo'ConversionwithBashofthebinarynumber"10001"inbase2(2#1001)' result=2#10001 echo$result echo'ConversionwithBashoftheoctalnumber"16"(8#16)' result=8#16 echo$result echo'ConversionwithBashofthehexnumber"0xE6A"(16#E6A)' result=16#E6A echo$result chmod+xarithmetics.sh ./arithmetics.sh 42.L'arrondit virounding.sh #!/bin/bash #rounding.sh #Thescriptwillusesthe"printf%.Of"Bashcommandtoroundthefloatingpointnumber floating_point_number=3,1415926535897932384626433832795028841971 #TheFrenchcaractertableoftheterminalmaynotunderstandthe"point"asdecimalseparator! #TheFrenchcomputerLOCALESvariablesmayrequirea"coma"andtranslateitintoa"point" echoe"\n\tTheapproximatevalueof\"pi\"is:\t\t"$floating_point_number"" #Theloopwillrunonceandroundthefloatingpointnumber forbash_rounded_numberin$(printf%.0f$floating_point_number); do echoe"\tTheroundednumberof\"pi\"withbashis:\t"$bash_rounded_number done chmod+xrounding.sh ./rounding.sh Theapproximatevalueof"pi"is: Theroundednumberof"pi"withbashis: 3,1415926535897932384626433832795028841971 3

LaConsolePatrickHautrive!;~)2010

224

Lavrification 43. vichecking.sh #!/bin/bash #checking.sh$TMPDIR iftest$#eq0 then echo"PleaseEnterthenameofavaliddirectoryasargumentofthescript" exit1 fi iftestd"$1" then lsl"$1" else echo"Thenameyouenteredisnotavaliddirectory..." bashc"`pwd`\/checking.sh" readDIRECTORY lsl"$DIRECTORY" exit0 fi chmod+xchecking.sh ./checking.sh echo$? 44.Lacalculatrice vicalculator.sh #!/bin/bash #calculator.sh27/5 #Thescriptcalculatetheformulawiththebccommandanditsinternalvaraiblescale echo"Pleaseenteramathematicalformulatobecalculatedwiththecommandbc:" readFORMULA echo"Youhaveenteredtheformula:$FORMULA" echo"Theresultsofyouformulawith10digitsafterdecimalpointis:" echo"scale=10;${FORMULA}"|bc echo"Theresultwith2digitsafterdecimalpointis:" echo"scale=2;${FORMULA}"|bc echo"Theresultasroundedintegeris:" echo$FORMULA|bc chmod+xcalculator.sh ./calculator.sh27/5

LaConsolePatrickHautrive!;~)2010

225

45.Lesfactoriels vifactorialing.sh #!/bin/bash #factorialing.sh20 COUNTER=$1 FACTORIAL=1 echoe"\n\tCalculatingthefactorialofthenumber"$1":" while[$COUNTERgt0];do echo""$1":"$COUNTER"x"$FACTORIAL"=$(($COUNTER*$FACTORIAL))" sleep1 FACTORIAL=$(($FACTORIAL*$COUNTER)) COUNTER=$(($COUNTER1)) done echo"Theresultoffactorial$1is:$FACTORIAL" chmod+xfactorialing.sh ./factorialing.sh5 46.L'infinie viendless.sh #!/bin/bash #endless.sh while: do echo"infiniteloops[hitCTRL+Ctostop]" echo"" sleep1 done chmod+xendless.sh ./endless.sh CTRL+C 47.Lesdescripteurs videscriptors.sh #!/bin/bash #descriptors.shlist.txt FILE=$1 #The"stdin"ismovedtofiledescriptor"3" #read$FILEusingthefiledescriptors exec3<&0 #Thefileputasargumentofthescriptisgivenasinput"stdin"
LaConsolePatrickHautrive!;~)2010

226

exec0<$FILE #Theloopisreadingeachlinesofthefileonebyone #Eachlinesofthefileisstoredintothevariable"LINE" whilereadLINE do echo$LINE done #Thefiledescriptor"3"(originatlythekeyboardinput)isputbackto"stdin" exec0<&3 chmod+xdescriptors.sh ./descriptors.shlist.txt 48.L'vasion vibreaking.sh #!/bin/bash #breaking.sh #ThescriptwillexittheendlessloopwiththeBashbuiltincommand"break" while: do readp"Pleaseentertwonumbers(or"1"toquit):"NUM1NUM2 if[$NUM1eq1] then break fi SUM=$((NUM1+NUM2)) echo"Thesum$NUM1+$NUM2is:$SUM" done chmod+xbreaking.sh ./breaking.sh 49.Lamultiplication vimultiplication.sh #!/bin/bash #multiplication.sh i=1 y=1 while[$ile10] do echoe"\nThemultiplicationtableof$i:" while[$yle10] do
LaConsolePatrickHautrive!;~)2010

227

echoe"$i\t*\t$y=$(($i*$y))" ((y++)) done y=1 ((i++)) done chmod+xmultiplication.sh ./multiplication.sh 50.Lapersvrance vicontinue.sh #!/bin/bash #continue.sh #ThescriptshowstheuseoftheBashbuiltin"continue"command KEY="a" while[[$KEY!="k"]]; do echoe"\n\tPleasepressonekeyofthekeyboard[orpress"z"toexit]" readKEY sleep1 if[[$KEY=="z"]]; then echoe"\tYouhavepressedthekey\"$KEY\"toexit...!~\..." sleep1 echoe"\tSorry,youshouldpressthekey\"k\"toexit...;)..." continue else echoe"\tYouhavepressedthekey:\"$KEY\"" fi done echoe"\n\tWell,youhavefinallypressedthe\"k\"key.\n" sleep1 chmod+xcontinue.sh ./continue.sh .Laredirection 51 viredirect.sh #!/bin/bash #redirect.sh #Thescriptredirectsthe"stdout"to"stderr" echoe"...Redirectionof\"stdout\"to\"stderr\"...1>&2
LaConsolePatrickHautrive!;~)2010

228

chmod+xredirect.sh ./redirect.sh ...Redirectionof"stdout"to"stderr"... ./redirect.sh>stdout.txt ...Redirectionof"stdout"to"stderr"... catstdout.txt (nothinginstdout.txt) ./redirect.sh2>stderr.txt catstderr.txt ...Redirectionof"stdout"to"stderr"... echo"">stdout.txt echo"">stderr.txt vicatredirect.sh #!/bin/bash #catredirect.sh/etc/shadow #Thescripttriestoreadafilewithoutpermission,andredirect"stderr"to"stdout" cat$12>&1 chmod+xcatredirect.sh ./catredirect.sh/etc/shadow cat:/etc/shadow:Permissionnonaccorde ./catredirect.sh/etc/shadow>stdout.txt catstdout.txt cat:/etc/shadow:Permissionnonaccorde ./catredirect.sh/etc/shadow2>stderr.txt cat:/etc/shadow:Permissionnonaccorde catstderr.txt (nothinginstderr.txt) 52.L 'coute vitrafic.sh #!/bin/bash #http://bash.cyberciti.biz/softwarebuildscripts/installvnstatnetworktrafficmonitor/ #AShellScriptToBuildvnstatsoftwarewhichisactasaconsolebased #networktrafficmonitorwithoutusing3rdpartyrepo. # #TestedunderCentOS/RHEL/FedoraLinuxonly. # #Copyright(c)2008nixCraftproject<http://cyberciti.biz/fb/> #ThisscriptislicensedunderGNUGPLversion2.0orabove #
LaConsolePatrickHautrive!;~)2010

229

#ThisscriptispartofnixCraftshellscriptcollection(NSSC) #Visithttp://bash.cyberciti.biz/formoreinformation. # #LastupdatedonMar/05/2010 # #SoftwareHomepage:http://humdi.net/vnstat/ # VERSION="1.10" URL="http://humdi.net/vnstat/vnstat${VERSION}.tar.gz" FILE="${URL##*/}" DLHOME="/opt" SOFTWARE="vnstat" DEST="${FILE%.tar.gz}" ETH="eth0" [["$2"!=""]]&&ETH="$2" [[`idu`ne0]]&&{echo"$0:Youmustberootusertorunthisscript.Runitas'sudo$0'";exit1;} case"$1"in download) wget$URLO"${DLHOME}/$FILE" ;; build) echo"Building${SOFTWARE}...." [[!f"${DLHOME}/$FILE"]]&&wget$URLO"${DLHOME}/$FILE" cd"${DLHOME}" tarzxvf$FILE cd"$DEST" make makeinstall [[!f/etc/cron.d/vnstat.cron]]&&/bin/cpfexample/vnstat.cron/etc/cron.d/vnstat foriin$ETH do /usr/bin/vnstatui"$i" done ;; *)echo"Usage:$0{download|build}[eth0|eth1|eth2|ppp0]" esac ./trafic.shdownload ./trafic.shbuild vnstat 53.Lamoyenne
LaConsolePatrickHautrive!;~)2010

230

viaverage.sh #!/bin/bash #average.sh #Thescriptcalculatetheaverageofaseriesofnumbersinputbytheuser SCORE="0" AVERAGE="0" SUM="0" NUM="0" whiletrue;do echon"Pleaseenteryourscores[0100%]andtype'q'toquitandgettheaverage:" readSCORE if(("$SCORE"<"0"))||(("$SCORE">"100")); then echo"Pleasetypeanumberfromzerotoonehundred,tryagain:" elif["$SCORE"=="q"]; then echoe"\n\tAverageratingis:$AVERAGE%" break else SUM=$[$SUM+$SCORE] NUM=$[$NUM+1] AVERAGE=$[$SUM/$NUM] fi done echoe"\t\nExiting....\n" chmod+xaverage.sh ./average.sh

LaConsolePatrickHautrive!;~)2010

231

TOOLS
Inventaireinexhaustifdesprincipalescommandes(manman) Init:inittelinitrunlevel Info:maninfoxmancatman Window:xinitstartxXgdm Environnement:envset inetd2xinetdmsginitmkinitrd helpmandbmanpathupdatedb xdmkdeinitxevxloadxosview unsetprintenvexportreset typesetdeclare Host:unameuptimehostname aproposmakewhatiswhatis mcookiezenety whereislocateslocatewich Devices:lsusblspcihotplug Control:Ctrl+[C,D,L,Z,U] dmesgarchhostid Tools:findgrepegrepfgrep MAKEDEVmknodmkfifo Ctrl+Alt+[F1F12,Del] Times:clockhwclockdate Ctrl+S+QCtrl+Backspace ntpdatetimescaltzconfigzic looksorttsortuniqcommdiff Partition:syncfscke2fsck Shift+Ctrl+Tab tzfiletzselecttzsetupzdump diff3mergesdiffprcompcmp mountumountmountpoint Terminal:gettyagettytty Login:loginsuloginlogname patchawksedtrcutcolcolrm mkfsmke2fsmkreiserfs sttyopenvtscreentic lastlastblastlogloggergetty columnpastejoinfoldfmtnl tune2fsmkisofsreiserfsck agettymingettyaclastcomm expandunexpandtroffnroff debugreiserfsdebugfsdump2fs settermtsetresizechvttput Shell:shbashchshwishfish grofftbleqnlexyaccptxm4 badblocksfdiskcfdisksfdisk infocmpresetcleargetopt Users:wwhowhoislogname Archives:gzipgunzipbzip2 hdparmrdevdfdudddiscus Console:xtermuxtermkvt ddrescuetestdiske2label gnometerminalkonsole idchfnusersfingerwhoami tarmd5sumsumcksum chksumsha1sumgpgarshar e2imageresize2fssysfs fgconsolexconsolerxvt useradduserdelusermodfalse compressuncompresssqzip Memory:freemkswapvmstat Locales:localelocalegen nologinvrfymesgpinkywall unzipunarcunarjunrarlzma swaponswapoffprocinfoiostat localedefgettextmsgfmt Groups:groupsgroupadd unlzmalzcat Process:pspstreetopjobsbg iconvrecode groupdelgroupmodchgrp Network:ifconfigiwconfigip fgpmapteedesownkillkillall Keys:loadkeysdumpkeys newgrpsglid routehostnetstatpingiptables skillnicerenicetimepidof showkeyinstallkeymap Shadowing:shadowconfig tcpdumpnmblookupnslookup pkillpgrepsuspendionicesar setkeycodesgetkeycodes pwckpwconvpwunconv ncnetcatnmaptripwireiwlist htopatopiotop setxkbmapsetmetamode grpckgrpconvgrpunconv exportslosetupopensslipcalc Kernel:stracebootparam xmodmapcharmapsetleds updatepasswd traceroutebindiptraftrafshow ltracelttngstapisagblktrace showrgbdircolorskbdrate Commands:commandhistory Journal:klogdsyslogdfaillog Fonts:xfsinfo aliasunaliasscriptnohup& trafmonnfsstatvnstatifstat dstatmtrnagiosbmonssdig logrotateswatchlogwatch Images:eoguuencode watchbuiltinenabletruefalse nethogsjnettopiftopntop Modules:lsmoddepmodldd uudecodemimencode Permissions:passwdgpasswd ethstatustctcnghtbethtool rmmodinsmodmodprobe mmencode vipwvigrchagevisudo rrdtoolnetsnmpdnmonngrep modinfoupdatemodules Sound:soxsndconfig sudoeditsusudo etherapewiresharkksysguard usbmodules Mail:mailmailtomailstats Root:lspwdlnlndirunlink opennmsiptstatebandwidthd Packages:rpmurpmiyumapt vacation typemccdmvcprmmkdir darkstatmonitmrtgftptop getaptcacheaptadddpkg Games:xeyesfortunepom rmdirchrootulimitumask dumpcapsumonloadsnort alienapt4rpmrpmdrake quotasetquotarename codebreakercorewars Remote:sshscprsyncftp up2date basenamedirnamepathchk Logout:exitlogouthalt wgettelnetrloginrshrcprwho Scripts:echoexprreadsleep vdirmktemptmpwatchfamd rebootshutdownreset rdistkermitvmwarerpcinfo usleepexecwaitwriteclear Files:filestatlsoffuserlsattr poweroff tipprocommminicomsxrxsz continueexitbreaktypetoe chattrattrchownchmodcrypt Screensaver:munch rzuucpuuxcu xargsrunpartsyesbanner cryptdirdos2unixflocknewer mismunch Services:chkconfigsysctl xmessagedialogautoloadhash Floppy:mkbootfdformat lockfilefilefragtouchgetfacl ntsysvservicetcpdchk Hardware:lsdevalsasane setfaclreadlinkwcshredftop mkbootdisksuperformat tcpdmatchnetconfigdtrace mouseconfigscsi_infoeject Editing:lessmorecatzcattac mformat pcpapachetopzenoss hotplugdiscoverrecover revvipiconanoemacsgedit Printing:cupslplpd Configuration:linuxconf setserialmpstat tailheadsplitcsplitstrings Programs:makegcc drakconfyast2lisasetupchef Loader:lilogrub vimxpdfgvgstextexexec installnmreadelfsize webminswatredhatconfig Format:hexdumphdod enscriptmultitailacctail expectstripdoexecbtrace controlpanelcfenginegnome objdumpcodepagerecode Internet:lynxw3cwget Backup:cdrecorddump systemmonitorphpsysinfo Math:factorbcdcsequnits cactiosmiusxosviewcollecti Cron:croncrontabbatchat restorecpiorpm2cpiopax atqatrmlncron calcnumberrandommorsesc zabbixsaidarauditd
LaConsolePatrickHautrive!;~)2010

232

FILES
Inventaireinexhaustifdesprincipauxfichiersdeconfiguration Man /etc/man.conf /etc/manpath.config /usr/man/ /usr/local/man/ /usr/share/man/ /usr/share/mandb/chconfig /var/cache/man/index.db Documentation /usr/doc/ /usr/share/doc/ /usr/src/linux/ Log /var/log/message /var/log/sulog /var/log/boot.msgSuze /var/log/boot.logRedHat /var/log/dmesgDebian /var/log/installer/messages /tmp/install.log /root/anaconda.ks.cfg /proc/kmsg /var/log/wtmp(last) /var/log/secure(login) /var/log/lastlog(lastlog) /var/log/sulog(sulog) /var/log/dmesg(dmesg) /var/log/utmp(who) /var/log/btmp(lastb) Locale /etc/environment /etc/locale.alias /etc/locale.gen /etc/gdm/locale.conf /etc/profile.d/lang.sh /etc/localtime /etc/alternatives /etc/magic /etc/timezone Init /etc/inittab /etc/init.d/rc /etc/initlog.conf /etc/rc.d/rc.sysinit /etc/rc.d/rc.local /etc/default/rcS /etc/syslog.conf /etc/sysctl /etc/sysctl.conf /etc/inetd.conf /etc/rc.config /etc/rc.d/rc.inet1 /etc/rc.d/rc.inet2 /etc/rc.d/xinetd.conf /dev/initrd /etc/mkinitrd.conf Pam /etc/pam.d/login /etc/security/pam_env.conf /etc/security/group.conf /etc/security/time.conf /etc/security/access.conf /etc/security/limits.conf Window /etc/X11/xinit /etc/X11/xinit/xinitrc /etc/X11/xdm/xdm.config /usr/lib/X11/xinit/.Xinitrc /usr/X11R6/lib/X11/xinit /etc/X11/xdm/xdm.config Modules /etc/modules.conf Floppy /images/boot.img /images/bootnet.img /images/rescue.img Partition /etc/fstab /etc/mtab Terminal /etc/securetty /etc/usertty /etc/terminfo /etc/termcap /etc/gettydefs /etc/ttytab Device /dev/null /dev/zero /dev/random /dev/console /dev/error Variables PS1PS2PS3 BASH_ENVPATH SHELLLOGNAME MANPATHTERM TERMCAP LS_COLOR Network /etc/services /etc/protocols /etc/exports /etc/hosts /etc/host.allow /etc/host.deny /etc/host.equiv /root/.rhosts /etc/ftpusers /etc/dialups /etc/dpasswd /etc/rpc /etc/portmap manhosts_access Boot HowtoBootPrompt /etc/crontab Halt /etc/shutdown.allow /etc/powerstatus Password /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/netgroup /etc/login.defs /etc/nologin /etc/login.access /etc/porttime /etc/environment /etc/limits /etc/pam.d/login /etc/security/* Login /etc/issue /etc/motd /boot/bootmsg.txt /etc/profile /etc/bash.bashrc Shell /etc/shells /etc/bash_completion /bin/bash /bin/false /bin/nologin User /etc/skel /etc/aliases /etc/sudoers Profile ~/.login ~/.bash_profile ~/.bash_login ~/.bash_history ~/.profile ~/.bashrc ~/.Xsession ~/.Xdefaults ~/.Xinitrc ~/.signature ~/.rhosts ~/.bash_logout

LaConsolePatrickHautrive!;~)2010

233

CARACTERS
LescaractresspciauxASCIIAZERTY Fonction Lesparateurinterne(IFS) L'indentation L'affectationdevariable Lejokercaractre Lejoker(multiplication) Lescommentaires Lasparationdevaleurs L'intervalledevaleur Lasubstitutiondecommande Laredirection L'chappementcaractre Lesparateurderpertoire Lelancementensousshell Lelancementenunblocshell Leregroupementd'expression Laprotectionl'valuation Laprotectionl'expansion Lasuccessiondecommandes Lelancementenbackground L'oprateurlogique(AND) L'oprateurlogique(OR) L'oprateurlogique(NOT) Lelienrpertoireparent Lelienrpertoirecourant Lerpertoirepersonnel Lesparateur Leprfixedesjobs Ladernirecommande Laredirectionversladroite Laredirectionverslagauche Laconcatnation Lessquencesdecontrle L'expansiondevariables L'attributiondesdroits L'identificationd'uncompte Octal Char French English spacebar tabulation Equalsign questionmark star,asterisk diaresis,hash comma hyphen,dash backquote pipe backslash slash openingparenthesis closingparenthesis curlybracketleft curlybracketright squarebracketleft squarebracketright doublequote simplequote semicolon ampersand doubleampersand doublepipe exclamationmark doubledot,dotdot fullstop,period tilde colon percentage doublepercentage rightanglebracket leftanglebracket concatenation circumflex dollar plussign atsign Clavier SPACE TAB VAR=value lsh?l? cp*. #!/bin/bash ls[a,c]* ls[az]* cmd`cmd` ls|less echo\ rmrf/ Exemple Labarred'espace Latouchedetabulation = Lesignegalaccol ? Lepointd'interrogation * L'toile # Ledise , Lavirgule Letiret ` L'apostropheinvers | Labarreverticale \ Labarreobliquegauche / Labarreobliquedroite ( Laparenthseouvrante ) Laparenthsefermante { L'accoladeouvrante } L'accoladefermante [ Lecrochetouvrant ] Lecrochetfermant Leguillemet ' L'apostrophe ; Lepointvirgule & L'esperluette && Ladoubleesperluette || Ladoublebarre ! Lepointd'exclamation .. Deuxpointssuccessifs . Lepoint ~ Letilde : Ledoublepoint % Lepourcentage %% Ledublepourcentage > Lesignesuprieur < Lesigneinfrieur >> Ledoublesuprieur ^ Latouchecontrle $ Lesignedudollars + Lesigneplus @ arrowbase

Altgr+3

Altgr+7 Altgr+6 Altgr+8

Altgr+5 Altgr+ aliasll=lsl cmd;cmd cmd& ls&&cd ls||cd !cmd cd.. ./configure Altgr+2 /etc/passwd fg%NUM kill%% >file cat>>file CTRL+^ echo$HOME chmodu+x Altgr+0 sshuser@host

Maj+<

LaConsolePatrickHautrive!;~)2010

234

DEFINITIONS
MAIL_DIR MAIL_FILE FAIL_DELAY FAILLOG_ENAB LOG_UNKFAIL_ENAB LOG_OK_LOGINS QUOTAS_ENAB SYSLOG_SU_ENAB SYSLOG_SG_ENAB SULOG_FILE TTYTYPE_FILE FTMP_FILE SU_NAME HUSHLOGIN_FILE NOLOGIN_STR ENV_TZ ENV_HZ ENV_SUPATH ENV_PATH TTYGROUP TTYPERM ERASECHAR KILLCHAR UMASK ULIMIT PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE UID_MIN UID_MAX GID_MIN GID_MAX LOGIN_RETRIES LOGIN_TIMEOUT PASS_MAX_LEN CHFN_AUTH CHFN_RESTRICT LOGIN_STRING DEFAULT_HOME USERDEL_CMD NO_PASSWORD_CONSOLE GETPASS_ASTERISKS USERGROUPS_ENAB FAKE_SHELL CLOSE_SESSIONS /var/mail .mail 3 yes no no yes yes yes /var/log/sulog /etc/tty /var/log/btmp su .hushlogin nologin /etc/timezone HZ=100 PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/bin/X11:/usr/local/sbin:/usr/local/bin PATH=/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games tty 0 177 25 22 0 99999 0 7 1000 60000 100 60000 5 60 8 yes rwh %s'spassword: yes /usr/sbin/userdel_local tty1:tty2:tty3:tty4:tty5:tty6 1 yes /bin/fakeshell no #Legroupepropritairepourlepriphriqueterminal #Lespermissionsattribuesaupriphriqueterminal #Caractred'effacement(backslash)poursystemV #Caractredesuppressiondeligne(Ctrl+U)poursystemV #Dfinitiondumasquepardfautdecrationdesfichiers #Leslimites(file,size,process,user,cpu,memory) #Nombremaximaldejoursvalidepourunmotdepasse #Nombreminimaldejourentredeuxchangements #Nombredejourd'alerteavantl'expiration #Numrod'ordreminimalpourl'attributiondesUID #Numrod'ordremaximalpourl'attributiondesUID #Numrod'ordremaximalpourl'attributiondesGID #Numrod'ordremaximalpourl'attributiondesGID #Nombremaximaldetentativedeconnexion #Nombremaximaldesecondepourseconnecter #Nombredecaractrespourlecryptagedumotdepasse #Motdepassepourlescommandeschfnetchsh #Champdechfn(fullname,room#,work#,home#) #Promptpourlademandedemotdepasse #Acceptationdesconnexionssanscd$HOME #Commandeautomatiqueaprsuserdel #Loginsansmotdepasse #Nombred'astrixaffichlaplacedescaractressaisies #AcceptationdeumaskUIDpourlesGIDgauxauxUID #Lancementd'unscriptavantlelancementdushell #Acceptationdepam_close_session()depam_unix.so #Dfinitionobligatoiredelavariable$MAIL #Fichiercontenantlesmaildel'utilisateur #Nombredeseconded'attenteaprschecdelaconnexion #Acceptationdeschecsetlogdans/var/log/faillog #Acceptationdeschecaveclogininconnus(unknown) #Enregistrementdanslesjournauxdesconnexionsrussies #Acceptationdesquotas(umask,ulimit,nice)(Gecos) #Logavecsyslogdelacommandesu #Logavecsyslogdescommandesnewgrpetsg #Logdelacommandesu #Typedeterminal #Logdeschecsdeconnexionlastb #Affichagedusupourlacommandeps #Acceptationduhushmode #Refusdeconnexion #Dfinitiondelavariabled'environnementTZ #DfinitiondelavariableHZ

Obsoltes:DIALUPS_CHECK_ENABENVIRON_FILENOLOGINS_FILELASTLOG_ENABMOTD_FILEMAIL_CHECK_ENABOBSCURE_CHECKS_ENABPASS_MIN_LEN PORTTIME_CHECKS_ENABPASS_CHANGE_TRIESPASS_ALWAYS_WARNMD5_CRYPT_ENABISSUE_FILESU_WHEEL_ONLYCRACKLIB_DICTPATHCONSOLE_GROUPS

LaConsolePatrickHautrive!;~)2010

235

FORMULES Laformulationd'unecommande:cmdargoptionsourcetarget Commands cmd cmd;cmd cmd|cmd cmd`cmd` cmd$(cmd) cmd& cmd&&cmd cmd||cmd !cmd timecmd cmd;\\ncmd nohupcmd typecmd echotext echo'$VAR' echo\$HOME echo'`cmd`' echoe\120 batch(Ctrl+D) atnow(Ctrl+D) crontab cmd|tee>cmd cmd|tee>file !! !num /usr/bin/cmd Fonction Validation(enter) Traitementsquentiel(train) Redirection(pipe) Substitutionensousshell SubstitutionPOSIX Background(jobs) ConditionnementVrai(AND) ConditionnementFaux(OR) Inversionducoderetour Minutagedel'excution chappementEol(Escape) Dtachementduterminal(tty) valuationdelasyntaxe(test) Protectionlittrale(sauf`,\,$) Annulationdetouteexpansion chappementd'uncaractre Protectiondel'valuation valuationEscapeSequence Executionsquentielle(FIFO) Executionprogramme(atd) Executionrgulire(crond) Duplicationredirection(fork) Duplicationenregistrement Executionlastcommand Executionfromhistory Cheminabsolu(AbsolutPath) Commands (cmd;cmd) {cmd;cmd} cmd>file.txt cmd>>file.txt cmd<file.txt cmd2>error.txt cmd1&2>ouput.txt cmd2>&1 cmd1>&2 cmd;echo$? aliascmd=cmdoption unaliascmd find/|xargscmd surootccmd shccmd sshvuser@hostcmd lns/bin/bash~/myshell echo$? batch<script.txt sourcescript.sh .script.sh ./script.sh declare_function hashcmd Fonction Sousshell(filsdistincts) Bloc(unseulprocessus) crasement Concatnation Lecturedufichierversstdin Dviationstderr Dviationdessorties Dviationstderrversstdout Dviationstdoutversstderr Affichageducoderetour Dfinitiond'unalias Suppressiond'unalias Excutionmultiplestdout Lancementenroot Lancementensousshell Lancementdistance Liensymbolique(link) Derniercoderetour Executiond'unscript ExecutionshellBash ExecutionshellBash ExecutionsubshellBash Dclarationd'unefonction HashtablePATHdecmd

LaConsolePatrickHautrive!;~)2010

236

PatrickHautrive2010 http://hautrive.free.fr

LaConsolePatrickHautrive!;~)2010

237

Anda mungkin juga menyukai