Grimoire-
Command
.es

GNU+Linux command memo

Memo_11 : Liens, dates et patches

D’après l’édition 11 des travaux d’Alain Leaper, 2018-04-10
Licence GPL

$ ln nomCible nomLien (1)
1 nomCible peut être un fichier ou un répertoire

L’option -s permet de créer des liens symboliques, c’est l’utilisation la plus courante (au contraire des liens dits "en dur", comme on vient de le voir, sans cette option).

$ ln -s /home/ftp/memo_ed1.tar.gz memoLien
$ ls -l
lrwxrwxrwx  1 alain alain      25 jun 18 10:45 memoLien -> /home/ftp/memo_ed1.tar.gz

Remarques:

  • Le créateur du lien est propriétaire de son lien, pas du fichier / répertoire vers lequel il pointe. Celui-ci conserve les droits du propriétaire…​

  • La destruction du lien (rm memoLien) n’altère pas la cible.

  • La commande cp réalise une copie locale de la cible

    $ cp memoLien copieLocale (1)
    1 crée le fichier copieLocale avec les droits utilisateur
  • La commande mv renomme le lien

    $ mv memoLien nouveauLien (1)
    1 remplace memoLien par nouveauLien qui pointe sur la même cible
  • Un lien peut pointer vers un autre lien, récursivement, et ainsi de suite.

    $ ln -s nomLien autreLien (1)
    1 autreLien pointe sur nomLien, qui lui-même pointe sur …

2. date : utilisation pour récupérer la date (création/modification) d’un fichier

$ date -r nomFichier (1)
jeudi 27 mai 2010, 16:01:05 (UTC+0200)
1 L’option -r permet de réaliser cette opération.
$ date -ru nomFichier (1)
jeudi 27 mai 2010, 14:01:05 (UTC+0000)
1 L’option -u permet d’avoir la date en Temps Universel.

2.1. Formats particuliers avec +%format

Par exemple, pour obtenir la date "unix", soit le nombre de secondes depuis le 1er janvier 1970 (date dite EPOCH) :

$ date -u -r nomFichier +%s
1274968865

Quelques autres formats :

  • %V → semaine (01 à 53)

  • %y → année (00 à 99)

  • %H → heure (00 à 23)

  • %M → minute (00 à 59)

  • %S → seconde (00 à 60)

  • %m → mois

  • %d → jour

  • etc, (cf man date)

Autres formats notables :

  • %F est équivalent à %Y-%m-%d

  • %T est équivalent à %H:%M:%S

Exemple, pour afficher la date actuelle avec un "petit baratin" autour :

$ echo "il est `date +'%F%T'` et tout va bien"
il est 2011-07-1311:37:30 et tout va bien

2.2. date : utilisation pour mettre à jour l’heure du système

# date -s 11:46
mercredi 13 juillet 2011, 11:46:00 (UTC+0200)

3. diff : différences entre deux fichiers, création d’un fichier patch

L’option -s permet de savoir si 2 fichiers sont identiques (ou non) :

$ diff -s fichier_1 fichier_2

Une utilisation très courante de diff est la création d’un fichier représentatif des modifications apportées à un fichier. Dans l’exemple suivante, le fichier ficOrigine a été modifié pour donner ficModif.

Les modifications sont repérées par un + ou un > s’il s’agit d’un ajout et par un - ou un < dans le cas contraire. La granularité de la détection est au niveau de la ligne.

$ diff ficOrigine ficModif
2c2
< Contenu original
---
> Contenu modifié

On préfère en général rediriger la sortie vers un fichier représentatif des modifications.

$ diff ficOrigine ficModif > ficPatch

L’option -r étend le champ d’analyse à plusieurs fichiers, de manière récursive (sous-répertoires et leurs fichiers).

Autres options :

  • -u : Afficher n lignes de contexte unifié (3 lignes par défaut)

  • -b : Ne pas tenir compte du nombre d’espaces entre les mots

  • -B : Ne pas tenir compte des lignes formées uniquement d’espaces (ligne vide)

  • -N : <nombre de lignes> = <numéro de la première ligne> - <numéro de la dernière ligne> + 1

Souvent utilisé sur des répertoires et sous répertoires :

$ diff -urbNB repertOrigine repertModif > ficPatch

Dans le cas où diff s’applique à des répertoires, la commande lsdiff permet de localiser les fichiers impactés :

$ lsdiff ficPatch

4. patch : application de modifications à un fichier (ou ensemble de fichiers)

On dispose du fichier ficOrigine, on désire lui appliquer toutes les modifications apportées dans le fichier ficModif, et contenues dans le ficPatch.

$ patch -p0 ficOrigine < ficPatch

ficOrigine est maintenant identique à ficModif.

Selon les répertoires impliqués et le répertoire de travail, il peut être nécessaire de modifier le chemin. C’est l’object de l’option -pN : N pour supprimer le N e / et tout ce qu’il y a devant.

Exemple de chemin: /dirx/diry/dirz/fic1

  • -p0 : /dirx/diry/dirz/fic1 (ne supprime rien)

  • -p1 : dirx/diry/dirz/fic1 (supprime le 1er /, il n’y a rien devant)

  • -p2 : diry/dirz/fic1 (supprime le 2e / et tout ce qu’il y a devant)

  • -p3 : dirz/fic1