Formation Unix Utilisation (FreeBSD) commande(s) ou concept(s) abordé(s) - [ ] Objectifs (modèle pédagogique de type "Objectif principal avec décomposition récursive") - [ ] PROPOSITION 1 (scénario - UN PEU COMME UN JEU DE RÔLE ! ) : "On me charge d'adapter des documents en vue de la migration de notre serveur Web actuellement sous Windows vers un système de type Unix (décision motivée par l'adoption d'un nouvel hébergeur aux conditions avantageuses mais dont les équipements sont sous Unix). Ce faisant, mes responsables, soucieux d'éprouver les avantages qui lui ont été tant et tant vantés des systèmes Unix, en profite pour lâchement me demander de mettre à jour des données dupliquées dans un grand nombre des fichiers concernés. - [ ] ÉTAPE 1 : prendre possession d'un poste de travail - [ ] Possibilité 1 : cas classique Une question subsidiaire pourrait être "Identification/Authentification" "oui c'est bien gentil mais si je veux (ou si je dois dans le cas d'un logiciel particulier) travailler avec une interface graphique. Une fois connecté en mode texte, comment fais-je pour obtenir cet environnement graphique ?" -> parler de X-Window, des gestionnaires de fenêtres, Xorg (et /etc/X11/xorg.conf), startx (et ~/.xinitrc), xdm (et ~/.xsession), xdm dans /etc/ttys (état on/off) et kill -HUP 1 (en profiter alors pour parler des signaux) Demander à l'administrateur (Service Informatique) quels nom de connexion et mot de passe ont été définis pour nous. - [ ] FACULTATIF : confrontation "brutale" avec la politique sécuritaire (si le mot de passe doit être modifié à la première connexion par exemple, ou s'il est programmé pour expirer au bout d'un certain nombre de jours). - [ ] Possibilité 2 : cas spécial "Autologin" (essentiellement en mode graphique) - [ ] ÉTAPE 2 : on récupère les documents "sources". (Via FTP, disquette - pas d'automount -, CD-ROM, clef USB, bande magnétique, ...) sur un support quelconque auprès du Service Communication qui les a créés à l'origine sur des machines sous Windows. - [ ] Problème : accéder aux données présentes sur le(s) support(s) fourni(s). - [ ] Possibilité 1 : cas moderne de l'automounter. évoquer juste pour l'instant les noms d'amd (avec ses fichiers de configuration /etc/amd.{conf/map}) et amq (cela peut valoir qu'on vérifie s'il est en cours d'exécution avec la commande ps et les options appropriées) Suivant la configuration de la machine ET du type de média. - [ ] Possibilité 2 : cas classique en "manuel". mount (dont on constatera que l'usage en est réservé à root ce qui nous vaudra un détour vers su -) - [ ] Possibilité 1 : options de montage déterminées "automagiquement". - [ ] Possibilité 2 : options à mentionner explicitement : - [ ] - avec 1 ou 2 arguments (suivant contenu fichiers spéciaux (survol rapide), [ /etc/fstab) devd ], /etc/fstab points de montage conventionnels (et ceux plus spécifiques à FreeBSD) /mnt[/sous-dossiers], /cdrom, /dist - [ ] - pour les supports en lecture seule, -r - [ ] - pour les systèmes de fichiers -t FS (cd9660 pour les CD et DVD => "exotiques". PEUT ÊTRE L'OCCASION pour parler de man : voir tout en bas pour les différents aspects à considérer), impact de la variable PAGER CONCLURE EN PARLANT DE L'IMPORTANCE DE umount (surtout quand l'éjection n'est pas détectable par le système d'exploitation et que l'on manipule des supports réinscriptibles comme des disquettes ou des cartouches magnéto-optiques non protégées en écriture) - [ ] Problème : recopier les données vers un espace de "travail" sur le disque dur. - [ ] Déterminer sur quels volumes nous disposons de df suffisamment de place. - [ ] Tant que nous y sommes, regarder quel volume du occupent les documents à traiter - [ ] Opérer cp -rp - [ ] ÉTAPE "fugitive" (dont l'apparition n'est pas clairement Les principaux Shells Unix, comment en définie dans la chronologie) : adéquation du shell ? changer - ponctuellement, - durablement "rétroactivement" (/etc/shells, chsh/chpass -s S, pw user mod U -s CHEMIN_S, vipw - À LA "HUSSARDE" - ) - durablement "pour les futurs usagers" (defaultshell=/bin/csh dans /etc/adduser.conf OU defaultshell=bash [ ET shellpath=/sbin:/usr/local/bin:/bin shells=sh:tcsh:bash:nologin:csh ] ) alias fichiers d'initialisation L'interpréteur de commandes est-il ergonomique et ses possibilités (navigation dans l'historique des expressions exécutées, édition de la ligne courante, "complétion", ...) sont-elles satisfaisantes (en terme de richesse mais aussi dans leur mise en œuvre) ? - [ ] ÉTAPE 3 : on fait un premier constat (sur l'état des ls -l documents). - [ ] Avec un navigateur Web, en local, on vérifie ce qui firefox ? mozilla ? lynx ? (e)links ? marche et ce qui pose problème. On se rend compte que certains liens semblent "cassés" ! - [ ] PROBLÈME : pourquoi cela fonctionne sur Windows Parler de la distinction (le vérifier sur pièce) et pas sur Unix ? case-preservative / case-sensitive entre les systèmes de fichiers FAT/NTFS et Unix - [ ] ÉTAPE 4 : premières manipulations. Intervention sur les métadonnées (attributs, caractéristiques) des fichiers. - [ ] Il y a un grand nombre de divergences entre la casse des noms sur le disque et les noms correspondant dans les fichiers HTML. 2 possibilités : - [ ] Solution 1 : modifier les références dans les fichiers HTML - [ ] Solution 2 : modifier directement les noms des fichiers sur le disque - [ ] Nous retenons cette seconde solution qui find D(s) -type f \( -iname "*.html" -o paraît de loin la plus simple car les noms -name "*.[hH][Tt][mM]" \) -exec|ok mv apparaissent tous dans une casse homogène [-i] {} ... echo | tr dans les fichiers HTML alors que c'est un substitutions de commandes (si ça n'a joyeux "foutoir" sur le disque. Il sera plus pas déjà été vu, avec le traitement simple de "normaliser" tout cela sur disque particulier de l'hypothétique retour chariot final) - [ ] ÉTAPE 5 : secondes manipulations. - [ ] Intervention sur le contenu des fichiers. (ce grep, sed, détail des ER pourrait être le nom d'un contact, d'un produit, d'une référence, etc. Ce pourrait être aussi une couleur de fond de page...). - [ ] Notre chef de service, à l'occasion d'une réunion grep, sed hebdomadaire, nous félicite pour nos premiers >> pour constituer les fichiers "listes" résultats sur la modification automatique des MONTRER AUSSI LES LIMITES des outils fichiers fournis. "standard" Unix avec des cas complexes Il nous exprime son souci quant à la réalisation, visibles avec le format HTML amenant à jusqu'ici manuelle, de pages d'index (il nous montre des lacunes dans le traitement (motif à un exemple en parcourant le site) regroupant trouver à cheval sur deux lignes, 2 essentiellement les titres des pages contenues dans "enregistrements") ou au contraire à un dossier avec juste un lien associé sur chacune avoir des "faux positifs" (informations d'entre elles. entre balises "commentaire" du format Il désire savoir si nous pouvons automatiser ce HTML) traitement. ET CE, malgré la richesse des expressions régulières ÉVOQUER alors les librairies spécialisées dans les formats sophistiqués utilisables avec la plupart des langages de programmation "à la mode" - [ ] Notre chef arrive en trombe dans notre bureau sort pour nous dire qu'il est très content de l'automate et repart aussi sec... Mais à la réflexion se ravise en émettant tout de même le regret que les titres de documents ne soient pas triés dans l'index que nous générons. - [ ] Nouvelle requête de sa part, concernant la mise paste (on pourrait trouver plus en page cette fois, il aimerait que les titres approprié pour justifier l'emploi de n'apparaissent pas en une longue colonne mais cette commande, comme par exemple un plusieurs en 3 colonnes. ensemble de valeurs à IMPRIMER - le papier, ça coûte et c'est lourd - ) - [ ] Au fait, il revient à nouveau sur ses pas et nous permet de vérifier les limites des demande si l'on peut déplacer tous les documents "classes de caractères". relatifs au deux semestres du dossier "bilan" Parler aussi de l'alternative (du dans des sous-dossiers nommés respectivement complément) que représentent les semestre1 et semestre2. accolades (dans ce contexte). Mentionner pour l'anecdote le côté anticonformiste de curl quant à l'emploi des crochets. - [ ] Surprise ! On nous colle dans les pattes un stagiaire en nous enjoignant de le faire participer à nos travaux (il sera affecté au Département Communication en charge de la gestion des documents électroniques sur l'Intranet maison si il est embauché). Cette arrivée impromptue nous amène à réviser notre politique de droits d'accès sur les documents. - [ ] Première solution trouvée : créer (faire créer (pour l'administrateur : par l'admin système) un groupe uniquement destiné pw group add G ; pw user mod U -G G aux deux personnes devant travailler sur les OU MIEUX : documents concernés. pw group add G ; pw group mod G -m U1,U2 Changer "globablement" les droits des fichiers OU ENCORE MIEUX : concernés existants. pw group add G -M U1,U2 pw group mod G -h 0 -> saisir un mot de passe pw group mod G -h - -> SUPPRIME le mot de passe) chgrp -R (ou avec chown), chmod - [ ] PROBLÈME ! Les fichiers nouvellement créés ne newgrp (DÉFAUT de suid-bit sur la bénéficient peut être pas de toutes les commande ! ), umask modifications entreprises ci-avant. Évoquer aussi le sgid-bit pour les dossiers - [ ] AUTRE SOUCI ! Une troisième personne est "promue" ACLs, setfacl, getfacl, + (ls -l) pour rejoindre nos rangs. Seulement elle doit pouvoir travailler sur certains fichiers, ce que Évoquer les aspects liés (option de lui permettra une inclusion dans le groupe G MAIS montage du système de fichiers, qui l'on souhaite pouvoir moduler plus finement en incombe à l'administrateur) MAIS AUSSI fonction des différentes personnes. (On peut et SURTOUT ici la "circulation" des imaginer que la personne est déléguée par la ACLs avec les commandes de manipulation direction pour actualiser certains documents de fichiers (cp, tar, find, etc.) "sensibles" et auquel le "stagiaire" ne doit pas avoir accès en écriture.) - [ ] ÉTAPE 6??"fugitive" : - [ ] on nous fournit "tardivement" un COMPLÉMENT DE file (/usr/share/misc/magic) DONNÉES SUR UN SECOND SUPPORT ! Histoire d'être confronté à d'autres "problématiques". On pourra justifier cette seconde source en expliquant que ça vient d'une boîte de production. De plus, le sous-traitant en question travaillant principalement sur Mac (OS 9 pour être précis) va nous donner du fil à retordre à cause notamment de l'absence des suffixes pour les noms de fichiers. - [ ] pour "ranger" les nouveaux documents, il va nous mkdir [-p] falloir préparer un peu le terrain rmdir (à la suite d'une fausse manipulation - on n'était pas dans le bon dossier source - ) - [ ] Nouveau problème : la manipulation de certains fichiers pose un problème. - [ ] On découvre que ce sont ceux dont les noms parler des caractères de "protection" : contiennent des caractères "spéciaux" (#, délimiteurs de chaînes de caractères " espace, etc) et ' et du \ mentionner leurs différences RAPPELER AUSSI QUE la concaténation ne nécessite pas d'opérateur avec les Shells Unix - [ ] Après coup, on constate un nouveau souci : un fichier Le codage des caractères diacritiques de notes accompagne les documents "Web" mais son dans le document est probablement de format bien que seulement textuel, est mal représenté type Mac OS 9 (Mac Roman) par les programmes less, more ou cat iconv -l|grep -i mac visualisateur lv - [ ] ÉTAPE "fugitive" : je n'arrive plus (ou alors c'est locate [ -i ] (nécessite intervention plutôt le chef, encore lui, tête en l'air) à remettre la de l'admin système pour "rafraîchir" main sur un document dont on m'a communiqué une partie du l'index en utilisant nom /usr/libexec/locate.updatedb - [ ] ÉTAPE M : lors des manips dans les sources HTML, je find . -name X -size N, évoquer découvre une importante redondance sur un document les histoires de "bloc" faisant office de page "par défaut" (index.gif) pour de voir les liens (en dur, symboliques), nombreux dossiers juste pour en "masquer" le contenu parler de leurs différences, avantages (pour éviter un message d'erreur ET empêcher le listing). et inconvénients respectifs Je me demande si on ne pourrait pas éviter tous ces EN PROFITER POUR FAIRE UN LAÏUS PLUS duplicatas qui prennent de la place pour rien ET rendent COMPLET SUR LES SYSTÈMES DE FICHIERS délicate toute modification (qui doit être répercutée sur UNIX et les histoires d'inodes (et le l'ensemble des doublons). rapport avec les informations que peut donner la commande ls avec les options -l, -i, -u, -o, etc.) Recherche empirique (SANS DOMMAGE, avec echo) : find . -depth +1 -name index.gif -type f -execdir sh -c 'echo -n `pwd` ": " ; echo -n rm index.gif ": " ; echo ln -s `pwd | sed "s_'`pwd`'__;s_[^/]*_.._g;s_..\\$__"`ind ex.gif' \; Exécution : find . -depth +1 -name index.gif -type f -execdir pwd \; -execdir sh -c 'rm -i {} ; ln -s `pwd | sed "s_'`pwd`'__;s_[^/]*_.._g;s_..\\$__"`{}' \; Alternative : find . -depth +1 -name index.gif -type f -execdir pwd \; -okdir sh -c 'rm {} ; ln -s `pwd | sed "s_'`pwd`'__;s_[^/]*_.._g;s_..\\$__"`{}' \; Vérification : find . -depth +1 -name index.gif -type l -ls * [ ] ÉTAPE N : les "adaptations" terminées, on transfère ftp (en mode interactif, en mode CLI, (upload) les documents... en mode texte, en mode image, SUIVANT le système d'exploitation de la machine de destination, hash, bell, prompt, mput, ...) - [ ] ÉTAPE N' : le stagiaire s'en va (stage terminé mais pas find / -user (parler aussi de nouser) il préfère être embauché ailleurs). On veut "confier" ses -exec chown {} \; documents à une tierce personne OU ALORS ré-appropriation par copie avec cp pour les usagers n'ayant pas les pouvoirs de l'utilisateur root PUIS suppression des fichiers originaux (aussi pour des questions de confidentialité), surtout ceux ne présentant plus d'intérêt pour quiconque, les fichiers temporaires que l'on retrouve dans les dossiers faisant office de files d'attente (/var/mail, /var/spool/{lpd/mqueue}, etc.) ou les dossiers temporaires (/tmp - EXPLIQUER À CE STADE leS politiqueS de nettoyage du dossier /tmp sur les différents Unix => retrouver le comportement propre à FreeBSD) - [ ] ÉTAPE "fugitive" : manipulation de fichiers volumineux via les protocoles standard de l'Internet - [ ] À l'occasion d'un salon sur lequel notre société wget exposera, le sous-traitant en communication nous invite à récupérer sur le service FTP de leur site un fichier vidéo qui servira de présentation statique pour une diffusion en boucle. Compte tenu de la nature du fichier, il ne sert à rien de vouloir le compresser, on ne gagner rien en taille. - [ ] Problème 1 : après plusieurs tentatives, il curl -O -C - apparaît que la communication entre nos deux sociétés est régulièrement victime de coupures qui interrompent le processus de récupération avant son terme. - [ ] Ce document enfin rapatrié, il nous faut Évoquer SFU, Cygwin ou encore UnxUtils l'acheminer rapidement vers les techniciens qui pour bénéficier d'outils de type Unix règlent les derniers détails sur le stand sur un environnement Windows. (Et PuTTy (celui-ci est à l'étranger, à plusieurs milliers ou SSH Secure Shell pour la de kilomètres). Le fichier est supérieur à 1 Go télémaintenance.) et les machines louées sur place ne disposent que SI CD : mkisofs, cdrecord/burncd, de lecteur de CD (variante possible de ce point isoinfo, du scénario, le fichier fait 80 Mo et on ne peut SI MAIL : uuencode (rappel historique raisonnablement transférer que par mail compte sur uucp/uucico) ou le plus moderne tenu des contraintes techniques liées à b64encode (ou encore openssl base64 l'utilisation de l'Internet sur place ou plus uuencode [ -o FIC_RES ] simplement à cause des relais SMTP qui LABEL_DOC < FIC_SRC (même syntaxe pour n'acceptent pas n'importe quelle taille de b64encode, CECI DIT, l'option -m message) employée avec uuencode est plus PORTABLE que l'utilisation de la commande b64encode - AVEC Cygwin par exemple) uudecode < FIC_RES (QUELQUE SOIT le mode de codage, uu ou b64 puisque c'est "noté") VOIR leS exempleS très représentatifS donnéS dans la page man de uuencode ET SINON openssl base64 < FIC_SRC > FIC_RES (ou openssl base64 -e -in FIC_SRC -out FIC_RES) puis openssl base64 -d -in FIC_RES -out FIC_DST DANS TOUS LES CAS : split -b, cat, md5(sum)(.exe)|cksum|sum|sha1(sum)|sha25 6|openssl sha1 FIC OU openssl sha1 FIC L'utilisation de cat sur un ensemble de fichiers (avec *) sera l'occasion de rappeler que le shell "garantit" le tri alphabétique des noms de fichiers qui correspondent à un motif. - [ ] ÉTAPE "fugitive" : introspection. - [ ] J'ai essayé d'envoyer un mail depuis le poste sur logname lequel nous travaillons mais il ne semble jamais être hostname arrivé à destination. Mon poste ne me semblant pas who am i directement être en cause, je soupçonne un blocage en whoami amont sur les machines devant assurer le relais mais id aussi le filtrage de ce qui entre et sort de la uname -... société. Par conséquent je téléphone à la DSI et obtient un ingénieur réseau spécialisé sur la partie messagerie et firewall. Avant toute chose, il me demande sur quel système d'exploitation je travaille, sur quelle version précise, sur quelle architecture, l'adresse IP et surtout MAC de ma machine pour son interface réseau principale. Dans le doute et pour éviter au maximum les allers-retours, mon identifiant de connexion (et pourquoi pas l'uid qui va avec) - il n'est pas sûr que ce soit indispensable mais comme il va remonter l'info à son collègue plus spécialiste, il préfère se munir d'un maximum d'informations. Ah oui aussi le nom FQDN de la machine. - [ ] ÉTAPE "fugitive" : interrogation légitime. - [ ] Je reçois (en pièce jointe dans un mail) à quelques cmp, diff, vimdiff (implique vim) heures d'intervalle, de deux interlocuteurs différents, un fichier de notes en provenance de notre sous-traitant, la maison de prod' pour la com'. Les fichiers portent le même nom, semblent avoir un contenu identique si ce ne sont des différences de blancs qui leur donnent des tailles différentes. Comment en être certain ? (Plutôt que de se fier à son impression ou à la chronologie des arrivée.) - [ ] ÉTAPE O : rapport d'activité régulier - [ ] Puisque tout marche bien, le Département Évocation (juste sur un survol) de la Communication souhaite que nous lui fournissions un gestion des logs (syslogd, logs rapport quotidien (mais uniquement les jours ouvrés spécifiques d'une application comme de la semaine) du cumul de consultation de 2 fichiers Apache, newsyslog) bien précis (contenus dans le même dossier mais avec grep -E | egrep (surtout ER avancées des noms complètement différents) ET AUSSI le nombre avec alternative OU multiplication de processus httpd actifs (en notifiant une erreur option -e), zgrep (ou zcat) S'IL N'Y EN A AUCUN ! ) crontab (commande ET fichier), impact de la variable d'environnement EDITOR, unset pour inhiber une variable, /var/cron/{allow/deny}, mail, redirections, script, shebang, which, vi, /usr/local/bin, groupement de commandes (s'inspirer de mon propre script "rapport_quotidien"), VARIABLE PATH ET PUIS parler de /usr/local/bin (par comparaison/opposition aux /bin, /usr/bin, /sbin, /usr/sbin) peut être l'occasion de passer en revue la hiérarchie globale des dossiers Unix ps, grep avec wc -l OU MIEUX grep -c test, echo - [ ] Eux aussi s'avouent très contents de nos travaux et expr, (()), bc [ -l ], printf voudraient bien compléter avec le calcul de la moyenne de consultation quotidienne (qu'ils doivent sinon régulièrement calculer à la main) - [ ] ÉTAPE "fugitive" : travail collaboratif oral difficile sur un long document - [ ] Nous n'arrivons pas à déterminer simplement la ligne nl, view (avec :set nu), cat -n FIC | sur laquelle se trouve le souci dont nous parle notre more, grep -n '' FIC collègue au téléphone car le format du document se prête mal à ce "sport" - [ ] ÉTAPE P : précautions tar, pax, gz|bz2, ... ET évoquer juste les autres outils tels que cpio, afio, etc. (Ces derniers seront plus de la partie Administration.) Reprendre la discussion sur les ACLs et regarder si scp les conserve sur la destination. find D(s) -user U pour retrouver tous ses fichiers [ | cpio ... ] Penser à archiver son travail (pas tant les documents Web dont on sait qu'il en existe maintenant des copies sur les serveurs hébergés chez les FAIs MAIS surtout les notes et aussi les scripts que l'on a laborieusement élaboré ces heures passées - [ ] PROBLÈME : le propriétaire des fichiers sur une autre Si ce n'est pas le cas, c'est machine après désarchivage est-il encore celui probablement qu'il n'existe pas de d'origine ? synchronisation entre les fichiers "passwd" des deux machines (source et destination) Évoquer (juste un rapide survol) les fichiers "à plat" (flat files), les annuaires (LDAP, NIS, Hesiod, NetInfo, ActiveDirectory) et les outils "simples" de synchronisation comme rsync, rsnapshot, unison, etc. - [ ] ÉTAPE Q : on nous demande d'avertir les usagers du man 5 passwd (pour connaître le format service FTP de notre serveur que celui-ci sera du fichier passwd) inaccessible mercredi prochain entre 14 et 18h. cut pour extraire la colonne des identifiants de connexion OU MIEUX, awk pour conditionner cette extraction aux seuls sont les uids sont compris dans un certain intervalle - [ ] Réflexion complémentaire : comme mon message at et ses options, atq, atrm, comportera mes coordonnées (mon téléphone /var/at/at.{allow/deny} professionnel) et que je ne veux pas être noyé dans VARIANTE (idiote, je l'assume) : sleep la minute sous les appels des mécontents d'une si N ; mail ... longue indisponibilité, je voudrais différer l'envoi -> permet de voir sleep et de sorte que je sois sûr de ne plus être à mon bureau aussi le séquencement "alternatif" avec lors de sa réception. ; - [ ] RESTANT A PLACER : man [ N | -k | -a ] [ évocation de makewhatis ] PAGER, comment sauver une page man dans un fichier texte (en vue d'une impression par exemple ou pour relire sous Windows) : man DOC | col -b > FIC kill head, tail for (et accessoirement while) RECUPERER illustrations (structure filesystem, etc.) dans d'autres supports de cours sous forme électronique (MUX, BUX, UPF, Linux l'essentiel, axis Unix/Linux Util., ma rubrique "Terminal" pour SVM)