arthur.bebou

Le site arthur.bebou.netlib.re - retour accueil

git clone git://bebou.netlib.re/arthur.bebou
Log | Files | Refs |

index.sh (21778B)


      1 #! page
      2 title: Archélogie des commandes POSIX \(rédaction en cours\)
      3 author: Arthur Pons
      4 description: Explorons la raison d\'être des commandes les plus obscures des commandes POSIX
      5 publication: 2024-11-05
      6 
      7 sectionmd: main
      8 
      9 ***CET ARTICLE EST EN COURS DE REDACTION, IL EST PUBLIÉ EN AVANCE POUR
     10 FACILITER L'ÉCHANGE AVEC DES PERSONNES SUSCEPTIBLES DE POUVOIR L'AMÉLIORER***.
     11 
     12 En 2024 est sorti une nouvelle version de
     13 [POSIX](https://fr.wikipedia.org/wiki/POSIX) nommée [POSIX
     14 2024](https://pubs.opengroup.org/onlinepubs/9799919799/). C'est l'occasion
     15 parfaite de (re)découvrir la liste des commandes spécifiées dans son volume
     16 [XCU](https://pubs.opengroup.org/onlinepubs/9799919799/utilities/V3_chap01.html),
     17 décrivant le shell et les commandes associées. Pour les nouveautés de cette
     18 version 2024 je vous renvoie vers [ce super article]() malheureusement tout en
     19 anglais.
     20 
     21 Dans [la traduction française des principes du
     22 perma-computing](https://timothee.goguely.com/blog/pppermapublishing/) trouvable
     23 sur le site de Timothée Goguely on peut lire :
     24 
     25 > Il est bon d’expérimenter de nouvelles idées, de nouveaux concepts et de
     26 > nouveaux langages, mais en dépendre est généralement une mauvaise idée.
     27 > Appréciez les technologies matures, les idées claires et les théories bien
     28 > comprises lorsque vous construisez quelque chose qui est destiné à durer.
     29 >
     30 > * Vous pouvez aussi lire cela comme « faites pousser vos racines sur un sol
     31 > solide ». Apprenez des choses qui durent, enrichissez votre tradition locale,
     32 > connaissez l’histoire de chaque chose.
     33 
     34 Pour chaque commande je vais donc tenter, dans la limite de ce que je trouve
     35 publiquement sur internet et dans les cerveaux autour de moi, de comprendre
     36 son utilité, son histoire et les raisons de son éventuelle désuétude. Je
     37 remercie les contributeurices à wikipedia que je vais évidemment largement
     38 plagier.
     39 
     40 Évidemment ce que constitue une commande "obscure" ne sera pas identique pour
     41 moi ou pour vous. Les critères que j'ai utilisé pour intégrer une commande à cet
     42 article ou pas sont strictement personnels. Par exemple, j'y ajoute
     43 volontairement des commandes en réalité assez connues simplement parce que je les
     44 aime bien et je pense qu'elles gagneraient à l'être encore plus !
     45 
     46 La liste, surtout dans sa première version, ne sera pas complète. Si vous avez
     47 des informations supplémentaires ou des corrections à y apporter n'hésitez pas à
     48 me contacter. Je n'étais pas vivant ou ne pratiquait pas l'informatique durant
     49 la création et/ou l'usage de ces commandes donc il y en aura forcément.
     50 
     51 L'immense majorité des sources que je vais citer son anglais et je ne vais pas
     52 systématiquement les traduire.
     53 
     54 ## Les commandes
     55 
     56 [La liste
     57 complète](https://pubs.opengroup.org/onlinepubs/9799919799/idx/utilities.html)
     58 
     59 Je les prends par ordre alphabétique.
     60 
     61 ### admin, delta, get, prs, rmdel, sact, sccs, unget, val, what
     62 
     63 Fin 1972 le "Source Code Control System" (SCCS) est développé pour versionner le
     64 code d'un IBM System/370. Il est ensuite réécrit en C pour être utilisé sous
     65 Unix.[^1] Avec l'avènement de nouveaux logiciels de versionnages SCCS semble être
     66 tombé en désuétude[^2]. Son histoire commune avec Unix offre une place de choix à
     67 ses commandes.
     68 
     69 L'usage était d'utiliser la commande `sccs` comme "frontend" pour les autres.
     70 Par exemple
     71 
     72     sccs -d /x -p y get a/b
     73 
     74 devient
     75 
     76     get /x/a/y/s.b
     77 
     78 En plus des commandes implémentées indépendamment de `sccs`, il en existe tout
     79 un tas implémenté en tant que "built-in" de `sccs`[^3].
     80 
     81 ### ar
     82 
     83 `ar` est utilisé pour créer des archives. Aujourd'hui on utiliserait plutôt
     84 `tar`.`ar` précède `tar` de 8 ans. `ar` reste utilisé pour créer des
     85 bibliothèques statiques au format `.a`, l'idée étant de combiner tout ses
     86 fichiers objets `.o` en une seule archive plus facile à invoquer à la
     87 compilation. Il est également utilisé pour créer les paquets debian `.deb` dans
     88 lesquels on retrouve tout de même deux archives `.tar`[^5].
     89 
     90 Pourquoi `ar` n'est plus utilisé pour faire des archives en dehors de ces deux
     91 cas ? J'ai trouvé quatre raisons :
     92 
     93   1. Possiblement du fait d'un manque de standardisation du format, comme écrit
     94 dans la norme POSIX[^4] :
     95 
     96 > The archive format is not described. It is recognized that there are several
     97 > known ar formats, which are not compatible. The ar utility is included,
     98 > however, to allow creation of archives that are intended for use only on one
     99 > machine.
    100 
    101 A l'inverse `tar` venait avec un format spécifié et ouvert, permettant à
    102 l'outil d'être implémenté plus facilement et à différentes implémentations
    103 d'être compatibles.
    104 
    105   2. `ar` ne conserve pas l'arborescence de fichiers, les droits d'exécutions etc
    106 
    107 Si l'on a
    108 
    109     /tmp/test
    110     ├── A
    111     │   └── bidule
    112     └── truc
    113 
    114 que l'on ajoute ces fichiers à une archive en faisant
    115 
    116     $ ar rcs test.ar /tmp/test/A/bidule /tmp/test/truc
    117 
    118 puis que l'on extrait les fichiers de l'archive ailleurs :
    119 
    120     $ ar x test.ar
    121     $ tree
    122     /tmp/test2
    123     ├── bidule
    124     ├── test.ar
    125     └── truc
    126 
    127 On ne retrouve pas notre dossier `A`. Si `truc` avait été un exécutable, il ne
    128 le serait plus une fois décompressé non plus.
    129 
    130   3. `tar`, c'est à dire "**T**ape archive" gère mieux l'écriture sur bande
    131 
    132 Je ne suis pas certain de bien comprendre les détails mais il semblerait que
    133 `tar` permet de faciliter l'écriture sur bande[^7].
    134 
    135   4. La structure des archives `ar` permet aux routines contenues dans des
    136      fichiers objets de s'appeller rapidement entre elles
    137 
    138 D'après le manuel :
    139 
    140 > ar creates an index to the symbols defined in relocatable object
    141 > modules in the archive when you specify the modifier s.  Once created,
    142 > this index is updated in the archive whenever ar makes a change to its
    143 > contents (save for the q update operation).  An archive with such an
    144 > index speeds up linking to the library, and allows routines in the
    145 > library to call each other without regard to their placement in the
    146 > archive.
    147 
    148 Comme pour l'histoire des bandes je ne comprends pas les détails mais il
    149 semblerait que `tar` fonctionne suffisament différement pour que les tarballs
    150 ne puissent pas être utilisés de cette façon.
    151 
    152 Après ces recherches je réalise que l'association immédiate que je fais entre
    153 le concept d'archive numérique et les outils tels que `tar`, `zip`, `7zip` m'a
    154 rendu plus confus que je n'aurais du l'être. Le type d'archive créé par `ar` a
    155 été pensé pour faire des bibliothèques et, même si il peut dans une certaine
    156 mesure être utilisé comme celui de `tar`, ils ne devraient pas être considérés
    157 comme concurrents.
    158 
    159 [Cette réponse de "Clifford" sur Stack
    160 Overflow](https://stackoverflow.com/a/1551672) indique que sur d'autres
    161 systèmes l'utilitaire permettant de créer ce type d'archive est nommé
    162 "librarian"[^8], faisant donc spécfiquement référence à son usage principal.
    163 Je n'ai pas vérifié cette affirmation.
    164 
    165 [Cette réponse de Steve Kirkendall sur le newsgroup
    166 comp.os.linux.misc](https://narkive.com/5pVR8Y6S.12) résume bien tout ce que
    167 j'ai dit et termine sur :
    168 
    169 > So that's basically it. Tar archives are more portable, more
    170 > resiliant when damage occurs, and can handle odd block sizes.
    171 > Ar archives are easier to access and more compact.
    172 
    173 En français :
    174 
    175 > Les archives tar sont plus portables, plus résilientes aux erreurs et peuvent
    176 > gérer des tailles de blocs différents. Les archives Ar sont plus faciles
    177 > d'accès et plus compactes.
    178 
    179 ### asa
    180 
    181 Avant l'avènement des terminaux avec écran, l'interaction avec les ordinateurs
    182 se faisait via des téléscripteurs[^10].
    183 
    184 ![Un téléscripteur Teletype Model 33 ASR](https://upload.wikimedia.org/wikipedia/commons/thumb/d/df/ASR-33_at_CHM.agr.jpg/220px-ASR-33_at_CHM.agr.jpg)
    185 
    186 Ces téléscripteurs étaient munis (ou couplés avec ?) d'imprimantes permettant
    187 d'inscrire sur papier la sortie d'une commande. Afin de contrôler le comportement
    188 du chariot de l'imprimante et le mouvement du papier des caractères spéciaux
    189 sont nécessaires.Par exemple, début 1960 des caractères sont spécifiés pour
    190 le langage FORTAN[^11]. Par exemple un `-` en début de ligne indiquera que le
    191 papier doit être déroulé de 3 lignes avant de commencer l'impression[^12].
    192 
    193 Ces charactères seront ensuite standardisé par l'ASA (*A*merican *S*tandards
    194 *A*ssociation)[^13] dans un document nommé "ANSI X3.78-1981"[^9]. Ils seront donc
    195 connus sous le nom de "ASA carriage control characters".
    196 
    197 Sous Unix une commande nommé `asa` fera son introduction
    198 
    199 (quand ?)
    200 
    201 pour convertir les fameux charactère trouvés au début de chaque ligne en quoi
    202 que ce soit de nécessaire pour que l'imprimante utilisée derrière fasse ce
    203 qu'elle doit faire.  `asa` est donc généralement utilisé en amont d'une
    204 commande lançant l'impression, typiquement `lp`. La spécification POSIX
    205 mentionne par exemple que certaines implémentations remplacent le `+` par le
    206 caractère ASCII de retour chariot
    207 
    208 (pourquoi ne pas insérer directement le caractère, qu'est-ce
    209 qui vient avant l'autre ?)
    210 
    211 .
    212 
    213 Je me suis demandé pourquoi est-ce que les caractères ASCII n'étaient pas
    214 directement utilisés (`CR LF LF LF` plutôt que `-`). Je pense que l'explication
    215 vient du fait que l'ASCII a été publié en 1963[^14] et que le premier téléscripteur
    216 le supportant, le Teletype Model 33, a été commercialisé la même année. Les
    217 codes ASA et leurs usages pour FORTRAN prédateraient donc de quelques années
    218 l'ASCII.
    219 
    220 ### at
    221 
    222 Permet de programmer des commandes dans le futur un peu comme un crontab
    223 interactif non régulier. N'est pas vraiment obscure mais je ne la connaissais
    224 pas.
    225 
    226     $ echo "seq 10" | at now +2 minutes
    227 
    228 lancera `seq 10` dans deux minutes. Permet de créer des queues de commandes qui
    229 s'exécuteront les une derrière les autres. Pour une personne comme moi qui se
    230 retrouve rarement dans d'autres situations que :
    231 
    232   * lancer des commandes en direct hop hop hop
    233   * programmer des commandes à intervalles réguliers dans un crontab.
    234 
    235 l'utilité de `at` n'est pas évidente. On verra ça [dans la commande
    236 batch](/posix-archeo/#batch). En arrière plan `at` utilise `cron`[^15].
    237 
    238 ### batch
    239 
    240 Fortement corrélée à `at`, `batch` permet de lancer une suite de programmes les
    241 un derrière les autres dans une queue. C'est un alias pour la commande `at` avec
    242 les options de queues.
    243 
    244 Avant les systèmes d'exploitation tel qu'on les connaît aujourd'hui il existait
    245 des programmes ayant pour objectif de lancer des commandes les une derrière les
    246 autres.  Les commandes étaient regroupées dans des lots (ou batch en anglais
    247 roll credits). A l'époque ces lots étaient physiques, un tas cohérent de carte
    248 perforées. Les ordinateurs de l'époque étant généralement monotâche, lents et
    249 toujours multi-utilisateurs[^20], la concurrence pour les ressources était
    250 rude. Les systèmes de traitement par lots on gagné en intelligence pour
    251 prioriser le lancement des commandes et des lots en fonction de la charge de
    252 l'ordinateur et des périodes d'activité[^15]. Au delà du simple fait de
    253 programmer le lancement d'un autre programme, c'est cette logique qu'assurent
    254 les commandes `batch`, `at` et [`nice`](). Cette idée de lancer, dans un
    255 certain ordre, plusieurs tâches à l'avenir sans qu'une personne ne l'ait
    256 demandé sur le moment, était novatrice à l'époque. Dans le bouquin "Unix Power
    257 Tools" il est rapporté que Jeff Summler appelait ça des "software robots"[^29].
    258 
    259 Aujourd'hui si l'usage littéral de `batch` n'est plus très fréquent le concept
    260 perdure :
    261 
    262   * dans les scripts des langages haut niveau. Un script shell est une suite
    263     d'instruction et de programmes à lancer les un derrière les autres.
    264   * dans les environnements multi-utilisateurs[^21] contraints en ressource,
    265     typiquement les centres de calcul où l'on retrouve des systèmes de batch
    266     très sophistiqués tels que [`slurm`](https://github.com/SchedMD/slurm)
    267   * dans le langage courant où un `batch` est entendu comme toute opération
    268     programmatique répétée sur ensemble de donnée. Par exemple générer toutes
    269     les pages HTML d'un site catium
    270 
    271 ### cflow
    272 
    273 Fait parti des nombreuses commandes que je ne connaissais pas parce que lié
    274 au développement. `cflow` parcours un fichier source et affiche dans la sortie
    275 standard un graph sous la forme d'un arbre. Par exemple :
    276 
    277     $ cflow src/fzy.c src/options.c
    278     main() <int main (int argc, char *argv[]) at src/fzy.c:17>:
    279         options_parse() <void options_parse (options_t *options, int argc, char *argv[]) at src/options.c:96>:
    280             options_init() <void options_init (options_t *options) at src/options.c:69>:
    281             [...]
    282             sscanf()
    283             usage() <void usage (const char *argv0) at src/options.c:37>:
    284                 fprintf()
    285             atoi()
    286             strcmp()
    287             fprintf()
    288         choices_init()
    289         fprintf()
    290         [...]
    291         tty_interface_run()
    292         choices_destroy()
    293 
    294 L'outil permet donc d'étudier et d'analyser le flot d'exécution d'un programme
    295 en parcourant l'arbre sans avoir à le compiler et l'exécuter. Il ne me semble
    296 pas (plus) beaucoup utilisé à en croire le peu de résultats d'une recherche sur
    297 le web.
    298 
    299 La seule implémentation facilement accessible est celle de GNU[^16], débutée en
    300 2005[^17] depuis une version datant au plus tard de 1997[^18]. Sur wikipedia
    301 il est inscrit que `cflow` apparaît pour la première fois dans System V[^19]
    302 sans aucune référence pour le prouver. Cela placerait sa publication au plus
    303 tôt en 1983[^22] soit trois ans avant
    304 [GDB](https://en.wikipedia.org/wiki/GNU_Debugger).
    305 
    306 (Peut-être que ça l'a rendu obsolète ?)
    307 
    308 ### cksum
    309 
    310 `cksum` calcul et vérifie la somme de contrôle d'un fichier donnée.
    311 Pour calculer le hach `cksum` utilise un algorithme de contrôle de redondance
    312 cyclique utilisé par Ethernet et donc extrêmement répandu[^23]. Cette fonction
    313 de hachage n'est pas considérée comme cryptographiquement sécurisée[^24]. Elle
    314 est maintenue pour des raisons de portabilité mais n'est réservée que pour les
    315 cas où l'on veut, au mieux, vérifier si le transfert d'un fichier s'est passé
    316 sans erreur accidentelle[^25]. Tout modèle de menace plus sérieux requiert
    317 l'utilisation de [fonction de hachage cryptographique](
    318 https://fr.wikipedia.org/wiki/Fonction_de_hachage_cryptographique) telle que
    319 [SHA-2](https://en.wikipedia.org/wiki/SHA-2).
    320 
    321 La version GNU de `cksum` inclue la possibilité d'utiliser d'autres algorithmes
    322 qui sont par ailleurs accessibles autrement. Les deux commandes suivantes calculent
    323 le même hash :
    324 
    325     cksum -a sha256 fichier
    326     sha256sum fichier
    327 
    328 ### comm
    329 
    330 Une commande sur laquelle il n'y a pas grand chose à dire en terme d'historique
    331 mais que j'ai trouvé particulièrement utile une fois pour ma [gestion de
    332 playlist](/musique/#synchronisation). Je ne l'avais jamais envisagé comme cela
    333 mais l'article wikipedia [le compare à
    334 `diff`](https://en.wikipedia.org/wiki/Comm#Comparison_to_diff). Il est vrai que
    335 pour les usages courants de `diff` `comm` peut paraître obsolète. Pour un usage
    336 plus programmatique, dans des scripts et lorsque la sortie en TSV convient,
    337 `comm` peut être l'outil qu'il vous faut.
    338 
    339 ### ed
    340 
    341 `ed` est un éditeur de texte, le seul spécifié dans POSIX. De nombreux articles
    342 expliquent déjà l'histoire d'`ed` et ses liens avec des outils que nous
    343 connaissont aujourd'hui tels que `vi` et `vim`. Je recommande fortement [cet
    344 article de Gustavo Pezzi](https://pikuma.com/blog/origins-of-vim-text-editor).
    345 En plus du plaisir d'en apprendre plus sur des outils que l'on utilise, l'article
    346 rappelle habilement que, comme tout objet technique, la forme et les
    347 fonctionnalités des éditeurs de textes ont autant été informés par les
    348 conditions matérielles de leurs créations que par les idées des personnes les
    349 codant. Ainsi dans `vi` on se déplace avec `hjkl` entre autre parce que le
    350 clavier du développeur n'avait pas de flèches sur son clavier et `vi` est,
    351 encore jusqu'à aujourd'hui, plus "sobre" qu'Emacs parce que son développeur
    352 avait un modem extrêment lent.
    353 
    354 Je ne résiste pas à l'idée à vous partager cette fameuse blague de Patrick J.
    355 LoPresti, écrite à une époque où l'usage d'`ed` se faisait déjà rare en
    356 comparaison avec `vi` et `emacs` : https://www.gnu.org/fun/jokes/ed-msg.txt
    357 
    358 La blague du premier paragraphe, c'est à dire le fait de justifier l'usage
    359 d'`ed` par son adéquation avec un téléscripteurs déjà considéré obsolète pour
    360 l'époque, résonne en moi. Avec les copaines de Katzele nous utilisons parfois
    361 cet argument au premier degré pour justifier certains de nos usages ou suggérer
    362 des modifications : "Le site est cool mais je ne peux pas le consulter dans
    363 lynx sur mon raspberry 1 !".
    364 
    365 Cette blague a été postée sur le newsgroup `alt.religion.emacs` (ce qui est
    366 déjà drôle en soit) et on peut y trouver des réponses dans [cette archive tenue
    367 par Google](https://groups.google.com/g/alt.religion.emacs/c/nNdf_DRqKIU)
    368 (désolé). On y voit en particulier que la blague éternelle de ne pas savoir
    369 quitter `vim` était, en 1991, faite à propos d'`ed` :
    370 
    371 > James D. Oliver III :  
    372 > So how *do* you get out of ed? The only thing I could manage was to
    373 > Ctrl-Z and then kill the job.
    374 
    375 On peut voir dans [cette vidéo de la
    376 BBC](https://www.youtube.com/watch?v=b6URa-PTqfA&t=100s) un présentateur
    377 utiliser un programme du style d'`ed` pour faire une modification à l'aide
    378 d'une commande qui ressemblerait beaucoup à `s/Fred/Mary/g` dans `ed`[^28].
    379 
    380 Bien que, au delà de la blague, `ed` soit réellement l'éditeur de texte le
    381 *plus* standard dans le monde d'Unix, il n'est pas disponible par défaut sur
    382 de nombreuses distributions Linux y compris Debian[^26]. Il y a eu une tentative
    383 de l'ajouter à nouveau mais sans succès[^27], je vous laisse lire les arguments
    384 pour et contre. Cette absence ne concerne pas que `ed`. Beaucoup de commandes
    385 dans POSIX ne sont plus essentielles pour le bon fonctionnement des Unix modernes
    386 et puisque presque aucun ne cherche activement à obtenir la certification mais
    387 seulement en être proche[^30], ces commandes passent à la trappe. L'un des
    388 arguments en faveur du l'absence du paquet `ed` dans l'installation par défaut
    389 est la faible utilisation du paquet. A ce sujet un utilisateur pointe vers [les
    390 statisques maintenues par debian](https://qa.debian.org/popcon.php?package=ed).
    391 Ooooooh le beau graph généré avec gnuplot ! On reconnait là le style `w lp` et
    392 la belle couleur violette par défaut. Les tics de l'axe des abscisses pourrait
    393 être amélioré avec un petit `set xtics rotate by -45 offset 5,0`.
    394 
    395 ### ctags
    396 
    397 `ctags` parcourt du code C et créer un fichier indexant les fonctions, les
    398 structures etc.
    399 
    400 [^1]: citation needed
    401 [^2]: pourquoi ? trouver de vieilles discussions dessus
    402 [^3]: https://pubs.opengroup.org/onlinepubs/9799919799/utilities/sccs.html#tag_20_108_13
    403 [^4]: https://pubs.opengroup.org/onlinepubs/9799919799/utilities/ar.html#tag_20_03_18
    404 [^5]: https://en.wikipedia.org/wiki/Deb_(file_format)#Implementation
    405 [^6]: http://ftp.gnu.org/old-gnu/Manuals/tar/html_node/tar_130.html
    406 [^7]: https://en.wikipedia.org/wiki/Tar_(computing)#Rationale, la source provient de John Gilmore, connu entre pour avoir créé l'EFF et être un libertarien comme le monde du logiciel libre sait en créer. Souvent [pour le pire](https://en.wikipedia.org/wiki/Eric_S._Raymond#Political_beliefs_and_activism)
    407 [^8]: bibilothécaire
    408 [^9]: que je n'ai trouvé nul part
    409 [^10]: en anglais teleprinters ou teletyperiter ou teletype du nom d'une entreprise en fabriquant, simplifié en tty
    410 [^11]: https://bitsavers.trailing-edge.com/pdf/ibm/1401/C24-1455-2_Fortran_Specifications_and_Operating_Procedures_Apr65.pdf
    411 [^12]: un résumé sur la page wikipedia : https://en.wikipedia.org/wiki/ASA_carriage_control_characters#Operation
    412 [^13]: l'ancien nom de l'ANSI (*A*merican *N*ational *S*tandards *I*nstitute)
    413 [^14]: https://www.sensitiveresearch.com/Archive/CharCodeHist/X3.4-1963/page1.JPG
    414 [^15]: https://ibg.colorado.edu/~lessem/psyc5112/usail/automation/at.html
    415 [^16]: https://gnu.org/software/cflow/
    416 [^17]: https://git.savannah.gnu.org/cgit/cflow.git/commit/?h=initial_1997&id=e6b82b1e33b2a61353cd87b1a99b46ff05b93f5c
    417 [^18]: https://git.savannah.gnu.org/cgit/cflow.git/tree/src/main.c?h=initial_1997&id=e6b82b1e33b2a61353cd87b1a99b46ff05b93f5c#n3
    418 [^19]: https://en.wikipedia.org/wiki/List_of_POSIX_commands#List
    419 [^20]: dans le sens "utilisé par plusieurs personnes" et non pas "tournant sur un système d'exploitation pouvant avoir plusieurs comptes".
    420 [^21]: cette fois-ci au sens "utilisé par plusieurs personnes via plusieurs comptes".
    421 [^22]: https://unix.org/Posters/download/unix_posterA3_Screen.pdf
    422 [^23]: https://pubs.opengroup.org/onlinepubs/9799919799/utilities/cksum.html#tag_20_19_03
    423 [^24]: https://pubs.opengroup.org/onlinepubs/9799919799/utilities/cksum.html#:~:text=However,%20this%20comparison%20cannot%20be%20considered%20cryptographically%20secure
    424 [^25]: ce qui est le cas d'usage d'Ethernet qui veut vérifier qu'aucun bruit n'a corrompu les paquets
    425 [^26]: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=416585
    426 [^27]: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=776413, l'argument initial semble raisonnable mais mieux vaut éviter de trainer sur le site de son auteur au risque d'être confronté à certaines opinions tranchantes...
    427 [^28]: ou vim ce qui n'est pas surprenant si vous avez lu l'article sur son histoire
    428 [^29]: https://docstore.mik.ua/orelly/unix3/upt/ch25_01.htm, inclue d'autres éléments expliquant la nécessité d'utiliser `at` pour l'époque.
    429 [^30]: https://en.wikipedia.org/wiki/POSIX#POSIX-certified