pour adresser vos commentaires ou questions cliquez ici
Base de données, Data base
Gestion de l'AS/400, Sous-Systèmes, travaux
Impressions
Internet, TCP/IP
Programmation
Sauvegardes
Transferts de fichier
[TFRJOB dans le programme initial en
choisissant un autre sous-système par l'intermédiaire d'une JOBQ.
Remarque:
Le sous-système d'arrivée doit avoir une JOBQ Entry à *NOMAX et une Work
Station Entry à *ENTER]
[CPYF FROMFILE(NOMFICHIER) TOFILE(*PRINT) avec OUTFMT(*HEX) pour avoir les valeurs hexadécimales (pratique pour les zones packées ou binaires) ]
[Sauvegarde:
1°/ CRTPF d'un
fichier BD pour recevoir les données de spoule;
2°/ CPYSPLF du
fichier spoule dans le fichier créé en 1°, avec le paramètre
CTLCHAR(*FCFC);
3°/ Sauvegarde du fichier sur le support voulu,
SAVOBJ;
Restauration:
1°/ Restauration du fichier,
RSTOBJ;
2°/ CPYF FROMFILE(NOMFICHIER) TOFILE(QSYSPRT)
Remarque: Tout cela peut être automatisé par programmes en langage de contrôle]
[En essayant les commandes ADDRPYLE ou WRKRPYLE vous pourrez sans doute résoudre votre problème.]
[Tout d'abord, les modules et programmes
liés doivent être compilés avec DBGVIEW(*all).
Ainsi, les programmes
peuvent être débuguer par la commande STRDBG un peu comme ce que permettait
STRISDB.
Remarque: Un programme peut être débuguer
en BATCH également.
1° Le travail soumis doit être retenu en JOBQ.
2°
Notez les attributs du travail (DSPJOB option 1)
3° STRSRVJOB avec les
attributs du travail notés en 2.
4° STRDBG du programme, puis libérer le
travail en attente.
5° F10, puis DSPMODSRC pour afficher le source du
programme et placer les points d'arrêt.
6° F12, F3 puis ENTREE et F12 pour
revenir à l'exécution du programme après le point d'arrêt.]
[Il est possible de transférer le fichier
soit par FTP, soit par Client Acces (CA) en permettant l'exécution de commande
sur un système éloigné, et en démarrant un fichier batch sur le PC qui
utilisera soit FTP, soit CA pour copier le fichier. Une icône peut être créée
sur le bureau (du PC) pour faciliter le transfert.
D'autre part, si le PC
dispose d'un lecteur réseau (disque virtuel sur l'AS/400) le fichier peut
simplement être déplacé vers l'AS/400 par un simple copié/collé dans
l'explorateur Windows.
Enfin, le CL peut utiliser la commande
COPYTOPCD.]
[Voici quelques éléments:
Nombre
d'octets par enregistrement : 32.766 octets
Nbre de
champs par format
: 8000
champs
Nbre de zones clé dans un fichier: 120
zones
Taille de la clé d'un fichier PF ou LF: 2000 caractères
Nbre
d'enreg. dans un membre
: 2.147.483.646
enregistrements
Taille d'une zone caractère
: 32.766
octets
Taille d'une zone décimale ou packée: 31 digits
Nbre
de triggers par fichier PF : 6
triggers
Pour les limites complémentaires voir la documentation IBM
suivante:
DB2 for AS/400 Database Programming (SC41-5701-02)]
[Voici un exemple de programme tiré des utilitaires TAATOOL:
Le source de la commande:
0001.00 /*
TAASPLD - DUP A SPOOL FILE TO ANOTHER OUTQ - DUPSPLF */
0002.00 /*
*/
0003.00 /* */
0004.00 /* LA COMMANDE COPIE UN FICHIER
SPOULE D'UNE OUTQ DANS UNE AUTRE */
0005.00 /* CERTAINES RESTRICTIONS
EXISTENT */
0006.00 /* */
0007.00 /* THE CPP IS TAASPLDC.
*/
0008.00 /* */
0009.00 CMD PROMPT('Copie de fichier
spoule')
0010.00
0011.00 PARM KWD(FILE) TYPE(*NAME) LEN(10)
MIN(1) +
0012.00 EXPR(*YES) PROMPT('Nom du fichier
spoule')
0013.00
0014.00 PARM KWD(JOB) TYPE(QUAL1) DFT(*)
SNGVAL((*)) +
0015.00 PROMPT('Nom du
travail')
0016.00
0017.00 PARM KWD(PRTFILE) TYPE(QUAL2)
PROMPT('Nom du +
0018.00 fichier
d''impression')
0019.00
0020.00 PARM KWD(OUTQ) TYPE(QUAL3)
PROMPT('Nom de l''OUTQ')
0021.00
0022.00 PARM KWD(SPLNBR)
TYPE(*CHAR) LEN(6) DFT(*ONLY) +
0023.00 RANGE(0001 9999)
SPCVAL((*ONLY) (*LAST)) +
0024.00 PROMPT('N° du fichier
spoule')
0025.00
0026.00 PARM KWD(COPIES) TYPE(*DEC) LEN(3
0) DFT(1) +
0027.00 RANGE(1 255) PROMPT('Nbre de
copies')
0028.00
0029.00 PARM KWD(NEWNAME) TYPE(*NAME)
LEN(10) +
0030.00 DFT(*PRTFILE) SPCVAL((*PRTFILE) (*FILE))
+
0031.00 EXPR(*YES) PROMPT('Nouveau nom de
spoule')
0032.00
0033.00 PARM KWD(DLTOLDSPLF) TYPE(*CHAR)
LEN(4) +
0034.00 RSTD(*YES) DFT(*NO) VALUES('*YES' '*NO')
+
0035.00 PROMPT('Supprime ancien
spoule')
0036.00
0037.00 QUAL1: QUAL TYPE(*NAME) LEN(10)
MIN(1) EXPR(*YES)
0038.00 QUAL TYPE(*NAME) LEN(10) MIN(0) EXPR(*YES)
+
0039.00 PROMPT('Nom Utilisateur')
0040.00 QUAL TYPE(*CHAR)
LEN(6) RANGE(000000 999999) +
0041.00 MIN(0) FULL(*YES) PROMPT('N° de
travail')
0042.00
0043.00 QUAL2: QUAL TYPE(*NAME) LEN(10)
DFT(QSYSPRT) EXPR(*YES)
0044.00 QUAL TYPE(*NAME) LEN(10) DFT(*LIBL)
+
0045.00 SPCVAL((*LIBL)) EXPR(*YES) +
0046.00
PROMPT('Bibliothèque')
0047.00
0048.00 QUAL3: QUAL
TYPE(*NAME) LEN(10) DFT(*PRTFILE) +
0049.00 SPCVAL((*PRTFILE))
EXPR(*YES)
0050.00 QUAL TYPE(*NAME) LEN(10) DFT(*LIBL)
+
0051.00 SPCVAL((*LIBL)) EXPR(*YES) +
0052.00
PROMPT('Bibliothèque')
Le source du CL:
0001.00 /* TAASPLDC -
DUPLICATE SPOOL FILE - CPP FOR DUPSPLF */
0002.00 PGM PARM(&FILE
&FULLJOB &PRTFILE &OUTQ &SPLNBR +
0003.00 &COPIES
&NEWSPLF &DLTOLDSPLF)
0004.00 DCL VAR(&FULLJOB)
TYPE(*CHAR) LEN(26)
0005.00 DCL VAR(&JOB) TYPE(*CHAR)
LEN(10)
0006.00 DCL VAR(&USER) TYPE(*CHAR)
LEN(10)
0007.00 DCL VAR(&JOBNBR) TYPE(*CHAR)
LEN(6)
0008.00 DCL VAR(&FILE) TYPE(*CHAR)
LEN(10)
0009.00 DCL VAR(&NEWSPLF) TYPE(*CHAR)
LEN(10)
0010.00 DCL VAR(&NEWNAME) TYPE(*CHAR)
LEN(10)
0011.00 DCL VAR(&PRTFILE) TYPE(*CHAR)
LEN(20)
0012.00 DCL VAR(&PRTFILEN) TYPE(*CHAR)
LEN(10)
0013.00 DCL VAR(&PRTFILEL) TYPE(*CHAR)
LEN(10)
0014.00 DCL VAR(&OUTQ) TYPE(*CHAR)
LEN(20)
0015.00 DCL VAR(&OUTQN) TYPE(*CHAR)
LEN(10)
0016.00 DCL VAR(&OUTQL) TYPE(*CHAR)
LEN(10)
0017.00 DCL VAR(&SPLNBR) TYPE(*CHAR)
LEN(6)
0018.00 DCL VAR(&COPIES) TYPE(*DEC) LEN(3
0)
0019.00 DCL VAR(&DLTOLDSPLF) TYPE(*CHAR)
LEN(4)
0020.00 DCL VAR(&ERRORSW) TYPE(*LGL) /* STD ERR
*/
0021.00 DCL VAR(&MSGID) TYPE(*CHAR) LEN(7) /* STD ERR
*/
0022.00 DCL VAR(&MSGDTA) TYPE(*CHAR) LEN(100) /* STD ERR
*/
0023.00 DCL VAR(&MSGF) TYPE(*CHAR) LEN(10) /* STD ERR
*/
0024.00 DCL VAR(&MSGFLIB) TYPE(*CHAR) LEN(10) /* STD ERR
*/
0025.00 DCL VAR(&KEYVAR) TYPE(*CHAR) LEN(4) /* STD ERR
*/
0026.00 MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(STDERR1)) /*
+
0027.00 STD ERR */
0028.00 CHGVAR VAR(&PRTFILEN)
VALUE(%SST(&PRTFILE 1 10)) /* +
0029.00 EXTT FILE
*/
0030.00 CHGVAR VAR(&PRTFILEL) VALUE(%SST(&PRTFILE 11 10))
+
0031.00 /* EXT LIB */
0032.00 CHGVAR VAR(&OUTQN)
VALUE(%SST(&OUTQ 1 10)) /* +
0033.00 EXTRACT OUTQ
*/
0034.00 CHGVAR VAR(&OUTQL) VALUE(%SST(&OUTQ 11 10)) /*
+
0035.00 EXTRACT LIB */
0036.00 CHGVAR VAR(&JOB)
VALUE(%SST(&FULLJOB 1 10)) /* +
0037.00 EXTRACT JOB
*/
0038.00 CHGVAR VAR(&USER) VALUE(%SST(&FULLJOB 11 10)) /*
+
0039.00 EXTRACT USER */
0040.00 CHGVAR VAR(&JOBNBR)
VALUE(%SST(&FULLJOB 21 6)) /* +
0041.00 EXT JOB NBR
*/
0042.00 CHGVAR VAR(&NEWNAME) VALUE(&NEWSPLF) /* ASSUME
DIFF +
0043.00 NAME */
0044.00 IF COND(&NEWSPLF *EQ
'*PRTFILE') THEN(DO) /* IF +
0045.00 SAME NAME */
0046.00
CHGVAR VAR(&NEWNAME) VALUE(&PRTFILEN)
0047.00 ENDDO /* IF
SAME NAME */
0048.00 IF COND(&NEWSPLF *EQ '*FILE') THEN(DO) /*
USE +
0049.00 FILE NAME */
0050.00 CHGVAR VAR(&NEWNAME)
VALUE(&FILE)
0051.00 ENDDO /* USE FILE NAME */
0052.00
CHKOBJ OBJ(QTEMP/DUPSPLP) OBJTYPE(*FILE) /* CHECK +
0053.00 FOR TEMP
PF */
0054.00 MONMSG MSGID(CPF9801) EXEC(DO) /* DOES NOT EXIST
*/
0055.00 RCVMSG MSGTYPE(*EXCP) /* REMOVE ESCAPE MESSAGE
*/
0056.00 CRTPF FILE(QTEMP/DUPSPLP) RCDLEN(199) SIZE(*NOMAX)
+
0057.00 /* CREATE FILE */
0058.00 ENDDO /* DOES NOT EXIST
*/
0059.00 IF COND(&FULLJOB *EQ '*') THEN(CPYSPLF
+
0060.00 FILE(&FILE) TOFILE(QTEMP/DUPSPLP) +
0061.00
SPLNBR(&SPLNBR) CTLCHAR(*FCFC)) /* COPY +
0062.00 TO TEMP PF
*/
0063.00 ELSE CMD(DO) /* SPECIFIC JOB NAME USED */
0064.00
IF COND(&USER *EQ ' ') THEN(CHGVAR VAR(&USER) +
0065.00
VALUE('*N'))
0066.00 IF COND(&JOBNBR *EQ ' ') THEN(CHGVAR
+
0067.00 VAR(&JOBNBR) VALUE('*N'))
0068.00 CPYSPLF
FILE(&FILE) TOFILE(QTEMP/DUPSPLP) +
0069.00
JOB(&JOBNBR/&USER/&JOB) SPLNBR(&SPLNBR) +
0070.00
CTLCHAR(*FCFC) /* COPY TO TEMP PF */
0071.00 ENDDO /* SPECIFIC JOB
NAME USED */
0072.00 /* USE NAMED OUTQ, FCFC AND COPIES
*/
0073.00 IF COND(&OUTQN *EQ '*PRTFILE') THEN(DO) /*
+
0074.00 *PRTFILE */
0075.00 OVRPRTF FILE(QSYSPRT)
TOFILE(&PRTFILEL/&PRTFILEN) +
0076.00 CTLCHAR(*FCFC)
COPIES(&COPIES) +
0077.00 SPLFNAME(&NEWNAME)
0078.00
ENDDO /* *PRTFILE */
0079.00 ELSE CMD(DO) /* NOT *PRTFILE
*/
0080.00 OVRPRTF FILE(QSYSPRT) TOFILE(&PRTFILEL/&PRTFILEN)
+
0081.00 CTLCHAR(*FCFC) OUTQ(&OUTQL/&OUTQN)
+
0082.00 COPIES(&COPIES) SPLFNAME(&NEWNAME)
0083.00
ENDDO /* NOT *PRTFILE */
0084.00 CPYF FROMFILE(QTEMP/DUPSPLP)
TOFILE(QSYSPRT) /* +
0085.00 DUP FILE */
0086.00 IF
COND(&DLTOLDSPLF *EQ '*NO') THEN(DO) /* NO +
0087.00 DELETE
*/
0088.00 SNDPGMMSG MSG('Fichier spoule ' *CAT &FILE *TCAT '
+
0089.00 copié.') MSGTYPE(*COMP)
0090.00 ENDDO /* NO DELETE
*/
0091.00 IF COND(&DLTOLDSPLF *EQ '*YES') THEN(DO) /* DLT
+
0092.00 OLD */
0093.00 IF COND(&FULLJOB *EQ '*')
THEN(DO) /* SAME JOB */
0094.00 DLTSPLF FILE(&FILE) JOB(*)
SPLNBR(&SPLNBR)
0095.00 ENDDO /* SAME JOB */
0096.00
ELSE CMD(DO) /* QUALIFIED JOB NAME */
0097.00 DLTSPLF FILE(&FILE)
JOB(&JOBNBR/&USER/&JOB) +
0098.00
SPLNBR(&SPLNBR)
0099.00 ENDDO /* QUALIFIED JOB NAME
*/
0100.00 SNDPGMMSG MSG('Fichier spoule ' *CAT &FILE *TCAT '
+
0101.00 copié et ancien fichier supprimé.') +
0102.00
MSGTYPE(*COMP)
0103.00 ENDDO /* DLT OLD */
0104.00 RETURN /*
NORMAL END OF PROGRAM */
0105.00 STDERR1: /* STANDARD ERROR HANDLING
ROUTINE */
0106.00 IF COND(&ERRORSW) THEN(SNDPGMMSG
MSGID(CPF9999) +
0107.00 MSGF(QCPFMSG) MSGTYPE(*ESCAPE)) /* FUNC
+
0108.00 CHK */
0109.00 CHGVAR VAR(&ERRORSW) VALUE('1')
/* SET TO FAIL IF +
0110.00 ERROR OCCURS */
0111.00 STDERR2:
RCVMSG MSGTYPE(*DIAG) RMV(*NO) KEYVAR(&KEYVAR) +
0112.00
MSGDTA(&MSGDTA) MSGID(&MSGID) MSGF(&MSGF) +
0113.00
SNDMSGFLIB(&MSGFLIB)
0114.00 IF COND(&KEYVAR *EQ ' ')
THEN(GOTO +
0115.00 CMDLBL(STDERR3))
0116.00 RMVMSG
MSGKEY(&KEYVAR)
0117.00 SNDPGMMSG MSGID(&MSGID)
MSGF(&MSGFLIB/&MSGF) +
0118.00 MSGDTA(&MSGDTA)
MSGTYPE(*DIAG)
0119.00 GOTO CMDLBL(STDERR2) /* LOOP BACK FOR ADDL
+
0120.00 DIAGNOSTICS */
0121.00 STDERR3: RCVMSG
MSGTYPE(*EXCP) MSGDTA(&MSGDTA) MSGID(&MSGID) +
0122.00
MSGF(&MSGF) SNDMSGFLIB(&MSGFLIB)
0123.00 SNDPGMMSG
MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) +
0124.00
MSGDTA(&MSGDTA) MSGTYPE(*ESCAPE)
0125.00 ENDPGM ]
[Oui, pour cela il faut créer un écran (DSPF) appelé QDSIGNON avec l'apparence souhaitée, en respectant les zones d'entrées/sorties (noms et structures) de l'écran initial QDSIGNON se trouvant dans le fichier QDDSSRC de QGPL.
IMPORTANT: Avant tout, faites une sauvegarde (source et objet) de l'écran que vous allez remplacer.
Une fois l'écran créé, il suffit de
modifier le sous-système (par exemple QINTER) pour indiquer où se trouve le
fichier écran à utiliser au niveau du paramètre SGNDSPF de la commande
CHGSBSD.
Remarque: Vous pouvez attribuer un écran d'ouverture différent à
chaque sous-système interactif décrit sur votre système.]
[La commande RTVCLSRC permet l'extraction du source du programme de contrôle à partir de l'objet. ATTENTION: L'extraction n'est possible que si le programme n'a pas été compilé avec le paramètre ALWRTVSRC = *NO ou l'observabilité du programme enlevée.]
[La commande CHGCMDDFT permet la
modification des valeurs par défaut.
Pour une commande donnée, il suffit
d'indiquer le paramètre et la valeur souhaitée
'MOTCLE(valeur)']
[Oui, mais seulement de façon séquentielle. Voici un petit exemple :
/* Exemple de lecture séquentielle dans
un CL */
PGM
DCLF
FILE(fichier)
LECTURE:
RCVF
MONMSG MSGID(CPF0864)
EXEC(GOTO ENDPGM) /*End Of
File*/
/*****************************************/
/* traitement pour chaque enregistrement
*/
/*****************************************/
GOTO LECTURE /* Boucle de lecture */
ENDPGM: ENDPGM]
[Voici la liste des codes d'édition utilisés sur l'AS/400 :
Code
Point Virgule Signe
Affiche Suppression
Exemple
négatif nuls 0 de gauche
1
Oui
Oui Non
Oui
Oui 1.234,56
2 Oui
Oui Non
Non
Oui 1.234,56
3 Non
Oui Non
Oui
Oui 1234,56
4 Non
Oui Non
Non
Oui 1234,56
A Oui
Oui CR
Oui
Oui 1.234.56CR
B Oui
Oui CR
Non
Oui 1.234,56CR
C Non
Oui CR
Oui
Oui 1234,56CR
D Non
Oui CR
Non
Oui 1234,56CR
J Oui
Oui *-
Oui
Oui 1.234,56-
K Oui
Oui *-
Non
Oui 1.234,56-
L Non
Oui *-
Oui
Oui 1234,56-
M Non
Oui *-
Non
Oui 1234,56-
N Oui
Oui -*
Oui
Oui -1.234,56
O Oui
Oui -*
Non
Oui -1.234,56
P Non
Oui -*
Oui
Oui -1234,56
Q Non
Oui -*
Non
Oui -1234,56
Y Non
Non date
Non
Oui 12/34/56
Z Non
Non Non
Non
Oui
123456
Remarque: Il est possible de se créer
ses propres codes d'édition (5 maximum) par la commande WRKEDTD ]
[Le plus simple est d'utiliser la
commande WRKOBJLCK.
Ceci est, entre autres, valable pour les fichiers base
de données ou les menus.
Remarque: la commande DSPOBJD donne la date de dernière utilisation.]
[En RPGIII, le code opération ACQ permet
d'envoyer des écrans dans un traitement BATCH. Mais attention aux restrictions
des droits et des verrouillages d'objet.
Remarque: dans la commande CRTDSPF
le paramètre MAXDEV=1 par défaut, on peut le modifier pour ouvrir plusieurs
sessions.]
[A l'écran, la commande CHKTAP en indiquant le nom de l'unité de bande (par exemple TAP01) donne l'information assez rapidement avec le message CPC6778.
En programmation, il faudra alors récupérer le nom dans le message par la commande RCVMSG]
[Il y a plusieurs possibilités en fonction des besoins. Voici deux cas:
[Pour cela, il faut utiliser
l'application FTP. Sur le PC on a généralement un FTP client de base (par ex.
avec W98) sur l'AS/400 FTP est client et serveur.
Envoi de fichier du
PC vers l'AS/400:
1 - FTP NOMAS ou FTP 11.22.33.44 (adresse IP de
l'AS/400)
2 - Saisie du profil AS400 et du mot de passe
3 - CD NOMBIB
bibliothèque résultat sur l'AS/400
4 - LCD pour changer le répertoire local
de départ sur le PC
5 - PUT NOMFIC le nom du fichier à transfrérer
6 -
QUIT pour terminer la session)
Réception de fichier sur le PC venant de
l'AS/400:
1 - FTP NOMAS ou FTP 11.22.33.44 (adresse IP de l'AS/400)
2 -
Saisie du profil AS400 et du mot de passe
3 - CD NOMBIB bibliothèque de
départ sur l'AS/400
4 - LCD pour changer le répertoire local d'arrivée sur
le PC
5 - GET NOMFIC le nom du fichier à transfrérer
6 - QUIT pour
terminer la session
Important: Pour le transfert de fichier de sauvegarde (*savf) vers l'AS/400, il est fortement conseillé de créer le fichier AVANT de faire le transfert et d'utiliser le mode BINARY (avant la commande GET ou PUT)]
Q00210 - Quel est le moyen de changer l'état des indicateurs U1 à U8 dans un CL ?
[Pour cela, il faut utiliser la commande
CHGJOB SWS(XXXX0101). Les huit caractères indiquent le positionnement des
indicateurs:
X - état inchangé (dans l'exemple U1 à U4)
1 - ON (dans
l'exemple U6 et U8)
0 - OFF (dans l'exemple U5 et U7)]
[Par la commande RGZPFM, il est possible aussi de réorganiser les données en fonction d'un chemin d'accès, celui du physique ou d'un logique.]
[Oui, par la commande CHGPF, il est possible d'ajouter (ou de modifier) en indiquant les DDS à prendre en compte dans les paramètres SRCFILE et SRCMBR. Par exemple CHGPF FILE(MABIB/MONFIC) SRCFILE(MABIB/MONSRC) SRCMBR(MONMBR). Et il ne reste plus qu'à répondre au message pour valider la modification.]
[Les solutions sont différentes suivant
la version de l'OS/400 utilisée sur les AS/400.
Avant la
V3R2:
- Sauvegarde (SAVOBJ) des fichiers dans un SAVF créé au
préalable (CRTSAVF), ne pas oublier de compacter les données;
- Envoi du
SAVF vers l'AS/400 souhaité (SNDNRTF)
- Création du SAVF sur l'AS/400
d'arrivée (CRTSAVF)
- Réception du SAVF sur l'AS/400 de destination
(WRKNETF)
- Restauration des fichiers (RSTOBJ)
A partir de la V3R2
(sur l'AS/400 de départ et d'arrivée)
- SAVRSTOBJ ou SAVRSTLIB
directement (les opérations précédentes sont faites automatiquement !)
Pour
cela, il faut toutefois disposer de l'option ObjectConnect de
l'OS/400.
Pour le vérifier, GO LICPGM et option 10.
Sinon, il faut
l'installer (c'est gratuit) à partir des bandes ou des CD ROMs.]
[Par la commande CHGCMDDFT.
La
nouvelle valeur doit être indiquée par le mot clé et entre ( ) la nouvelle
valeur entre '.
par exemple:
Dans la commande SIGNOFF, le paramètre
'historique du travail', mot clé LOG, a la valeur *NOLIST par défaut. Si vous
voulez qu'un historique du travail soit imprimé à chaque fermeture de session,
il faut faire la modif suivante:
CHGCMDDFT CMD(SIGNOFF)
NEWDFT('LOG(*LIST)')
Important:
Il est utile de copier les commandes
avant modification afin de pouvoir revenir en arrière.
Il est aussi utile
de copier les commandes après modification afin de se rappeler ce qui a été
fait et ainsi pouvoir reporter les modifications en cas de changement de
système ou de version, par exemple. ]