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 "Identification/Authentification"	Une question subsidiaire pourrait être "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 /etc/fstab)	fichiers spéciaux (survol rapide), [ 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 "exotiques".	-t FS (cd9660 pour les CD et DVD => 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 suffisamment de place.	df
				- [ ] Tant que nous y sommes, regarder quel volume occupent les documents à traiter	du
				- [ ] Opérer	cp -rp
		- [ ] ÉTAPE "fugitive" (dont l'apparition n'est pas clairement définie dans la chronologie) : adéquation du shell ?	Les principaux Shells Unix, comment en 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 documents).	ls -l
			- [ ] Avec un navigateur Web, en local, on vérifie ce qui marche et ce qui pose problème.	firefox ? mozilla ? lynx ? (e)links ?
			On se rend compte que certains liens semblent "cassés" !
				- [ ] PROBLÈME : pourquoi cela fonctionne sur Windows (le vérifier sur pièce) et pas sur Unix ?	Parler de la distinction 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 paraît de loin la plus simple car les noms apparaissent tous dans une casse homogène dans les fichiers HTML alors que c'est un joyeux "foutoir" sur le disque. Il sera plus simple de "normaliser" tout cela sur disque	find D(s) -type f \( -iname "*.html" -o -name "*.[hH][Tt][mM]" \) -exec|ok mv [-i] {} ... echo | tr 
						substitutions de commandes (si ça n'a pas déjà été vu, avec le traitement particulier de l'hypothétique retour chariot final)
		- [ ] ÉTAPE 5 : secondes manipulations.	
			- [ ] Intervention sur le contenu des fichiers.  (ce 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...).	grep, sed, détail des ER
			- [ ] Notre chef de service, à l'occasion d'une réunion hebdomadaire, nous félicite pour nos premiers résultats sur la modification automatique des fichiers fournis.	grep, sed
			Il nous exprime son souci quant à la réalisation, jusqu'ici manuelle, de pages d'index (il nous montre un exemple en parcourant le site) regroupant essentiellement les titres des pages contenues dans un dossier avec juste un lien associé sur chacune d'entre elles.	>> pour constituer les fichiers "listes"
			Il désire savoir si nous pouvons automatiser ce traitement.	MONTRER AUSSI LES LIMITES des outils "standard" Unix avec des cas complexes visibles avec le format HTML amenant à des lacunes dans le traitement (motif à trouver à cheval sur deux lignes, 2 "enregistrements") ou au contraire à avoir des "faux positifs" (informations entre balises "commentaire" du format HTML)
				     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 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.	sort
				- [ ] Nouvelle requête de sa part, concernant la mise en page cette fois, il aimerait que les titres n'apparaissent pas en une longue colonne mais plusieurs en 3 colonnes.	paste (on pourrait trouver plus approprié pour justifier l'emploi de cette commande, comme par exemple un ensemble de valeurs à IMPRIMER - le papier, ça coûte et c'est lourd - )
				- [ ] Au fait, il revient à nouveau sur ses pas et nous demande si l'on peut déplacer tous les documents relatifs au deux semestres du dossier "bilan" dans des sous-dossiers nommés respectivement semestre1 et semestre2.	permet de vérifier les limites des "classes de caractères".
					Parler aussi de l'alternative (du complément) que représentent les 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 par l'admin système) un groupe uniquement destiné aux deux personnes devant travailler sur les documents concernés.	(pour l'administrateur :
				Changer "globablement" les droits des fichiers concernés existants.	pw group add G ; pw user mod U -G G
					OU MIEUX :
					pw group add G ; pw group mod G -m U1,U2
					OU ENCORE MIEUX :
					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 bénéficient peut être pas de toutes les modifications entreprises ci-avant. 	newgrp (DÉFAUT de suid-bit sur la commande ! ), umask
					Évoquer aussi le sgid-bit pour les dossiers
				- [ ] AUTRE SOUCI ! Une troisième personne est "promue" pour rejoindre nos rangs. Seulement elle doit pouvoir travailler sur certains fichiers, ce que lui permettra une inclusion dans le groupe G MAIS l'on souhaite pouvoir moduler plus finement en fonction des différentes personnes. (On peut imaginer que la personne est déléguée par la direction pour actualiser certains documents "sensibles" et auquel le "stagiaire" ne doit pas avoir accès en écriture.)	ACLs, setfacl, getfacl, + (ls -l)
					
					Évoquer les aspects liés (option de montage du système de fichiers, qui incombe à l'administrateur) MAIS AUSSI et SURTOUT ici la "circulation" des ACLs avec les commandes de manipulation de fichiers (cp, tar, find, etc.)
		- [ ] ÉTAPE 6??"fugitive" : 	
			- [ ] on nous fournit "tardivement" un COMPLÉMENT DE 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.	file (/usr/share/misc/magic)
			- [ ] pour "ranger" les nouveaux documents, il va nous falloir préparer un peu le terrain	mkdir [-p]
				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 contiennent des caractères "spéciaux" (#, espace, etc)	parler des caractères de "protection" : délimiteurs de chaînes de caractères " 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 de notes accompagne les documents "Web" mais son format bien que seulement textuel, est mal représenté par les programmes less, more ou cat	Le codage des caractères diacritiques dans le document est probablement de type Mac OS 9 (Mac Roman)
				iconv -l|grep -i mac
				visualisateur lv
		- [ ] ÉTAPE "fugitive" : je n'arrive plus (ou alors c'est plutôt le chef, encore lui, tête en l'air) à remettre la main sur un document dont on m'a communiqué une partie du nom	locate [ -i ] (nécessite intervention de l'admin système pour "rafraîchir" l'index en utilisant /usr/libexec/locate.updatedb
		- [ ] ÉTAPE M : lors des manips dans les sources HTML, je découvre une importante redondance sur un document faisant office de page "par défaut" (index.gif) pour de nombreux dossiers juste pour en "masquer" le contenu (pour éviter un message d'erreur ET empêcher le listing). Je me demande si on ne pourrait pas éviter tous ces duplicatas qui prennent de la place pour rien ET rendent délicate toute modification (qui doit être répercutée sur l'ensemble des doublons).	find . -name X -size N<unité?>, évoquer les histoires de "bloc"
			voir les liens (en dur, symboliques), parler de leurs différences, avantages et inconvénients respectifs
			EN PROFITER POUR FAIRE UN LAÏUS PLUS COMPLET SUR LES SYSTÈMES DE FICHIERS UNIX et les histoires d'inodes (et le 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_..\\$__"`index.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 (upload) les documents...	ftp (en mode interactif, en mode CLI, 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 il préfère être embauché ailleurs). On veut "confier" ses documents à une tierce personne	find / -user (parler aussi de nouser) -exec chown {} \;
			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é 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.	wget
				- [ ] Problème 1 : après plusieurs tentatives, il 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.	curl -O -C -
				- [ ] Ce document enfin rapatrié, il nous faut l'acheminer rapidement vers les techniciens qui règlent les derniers détails sur le stand (celui-ci est à l'étranger, à plusieurs milliers de kilomètres). Le fichier est supérieur à 1 Go et les machines louées sur place ne disposent que de lecteur de CD (variante possible de ce point du scénario, le fichier fait 80 Mo et on ne peut raisonnablement transférer que par mail compte tenu des contraintes techniques liées à l'utilisation de l'Internet sur place ou plus simplement à cause des relais SMTP qui n'acceptent pas n'importe quelle taille de message) 	Évoquer SFU, Cygwin ou encore UnxUtils pour bénéficier d'outils de type Unix sur un environnement Windows. (Et PuTTy ou SSH Secure Shell pour la télémaintenance.)
					SI CD : mkisofs, cdrecord/burncd, isoinfo, 
					SI MAIL : uuencode (rappel historique sur uucp/uucico) ou le plus moderne b64encode (ou encore openssl base64
					       uuencode [ -o FIC_RES ] LABEL_DOC < FIC_SRC (même syntaxe pour b64encode, CECI DIT, l'option -m 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)|sha256|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 lequel nous travaillons mais il ne semble jamais être arrivé à destination. Mon poste ne me semblant pas directement être en cause, je soupçonne un blocage en amont sur les machines devant assurer le relais mais aussi le filtrage de ce qui entre et sort de la société.	logname
			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.	hostname
				who am i
				whoami
				id
				uname -...
		- [ ] ÉTAPE "fugitive" : interrogation légitime.	
			- [ ] Je reçois (en pièce jointe dans un mail) à quelques 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.	cmp, diff, vimdiff (implique vim)
			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 Communication souhaite que nous lui fournissions un rapport quotidien (mais uniquement les jours ouvrés de la semaine) du cumul de consultation de 2 fichiers bien précis (contenus dans le même dossier mais avec des noms complètement différents) ET AUSSI le nombre de processus httpd actifs (en notifiant une erreur S'IL N'Y EN A AUCUN ! )	Évocation (juste sur un survol) de la gestion des logs (syslogd, logs spécifiques d'une application comme Apache, newsyslog)
				grep -E | egrep (surtout ER avancées avec alternative OU multiplication option -e), zgrep (ou zcat) 
				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 voudraient bien compléter avec le calcul de la moyenne de consultation quotidienne (qu'ils doivent sinon régulièrement calculer à la main)	expr, (()), bc [ -l ], printf
		- [ ] ÉTAPE "fugitive" : travail collaboratif oral difficile sur un long document	
			- [ ] Nous n'arrivons pas à déterminer simplement la ligne sur laquelle se trouve le souci dont nous parle notre collègue au téléphone car le format du document se prête mal à ce "sport"	nl, view (avec :set nu), cat -n FIC | more, grep -n '' FIC
		- [ ] É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 machine après désarchivage est-il encore celui d'origine ?	Si ce n'est pas le cas, c'est probablement qu'il n'existe pas de 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 service FTP de notre serveur que celui-ci sera inaccessible mercredi prochain entre 14 et 18h.	man 5 passwd (pour connaître le format du fichier passwd)
			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 comportera mes coordonnées (mon téléphone professionnel) et que je ne veux pas être noyé dans la minute sous les appels des mécontents d'une si longue indisponibilité, je voudrais différer l'envoi de sorte que je sois sûr de ne plus être à mon bureau lors de sa réception.	at et ses options, atq, atrm, /var/at/at.{allow/deny}
				VARIANTE (idiote, je l'assume) : sleep N ; mail ...
				         -> permet de voir sleep et aussi le séquencement "alternatif" avec ; 
		- [ ] 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)
