#1 Le 28/08/2020, à 17:23
- john25
cp, mkdir, mv, scp, pour un débutant
Hello world,
tout débutant en script, j'essaie de "scripter" une sauvegarde des fichiers que je pense important avant de faire une ré-installation.
Je vais avancer par étape avec d'éventuelles bonnes âmes, et ne pas poser toutes mes questions d'un coup. Il y en a foule !
Je crée un fichier "~/Save.sh", mon "~/Bureau" est vide.
Dans "~/Save.sh", je dis, en français :
"créé le dossier "~/Bureau/Sur_le_Bureau",
s'il existe, continue ce que je vais te dire, sans m'afficher d'erreur,
créé le dossier "~/Bureau/Sur_le_Bureau/homme",
s'il existe, continue ce que je vais te dire, sans m'afficher d'erreur,
créé le dossier "~/Bureau/Sur_le_Bureau/femme",
s'il existe, continue ce que je vais te dire, sans m'afficher d'erreur. "
En bash, ça donne quelque chose comme :
mkdir ~/Bureau/Sur_le_Bureau/homme && mkdir ~/Bureau/Sur_le_Bureau/femme
(Où) est-ce que je me trompe ?
Merci par Avance !
Hors ligne
#2 Le 28/08/2020, à 17:30
- john25
Re : cp, mkdir, mv, scp, pour un débutant
Ensuite, toujours en français, je dis :
"si le fichier "/etc/fstab" existe,
copie-le dans "~/Bureau/Sur_le_Bureau/homme",
sinon ne m'affiche pas d'erreur et continue.
"si le fichier distant (ssh) "/etc/fstab" existe,
copie-le dans "~/Bureau/Sur_le_Bureau/femme",
sinon ne m'affiche pas d'erreur et continue. "
En bash, ça donne quelque chose comme :
cp /etc/fstab ~/Bureau/Sur_le_Bureau/homme && scp femme@192.168.0.1:/etc/fstab ~/Bureau/Sur_le_Bureau/femme
(Où) est-ce que je me trompe ?
Merci par Avance !
Hors ligne
#3 Le 28/08/2020, à 17:31
- nany
Re : cp, mkdir, mv, scp, pour un débutant
Bonjour,
Le répertoire Sur_le_Bureau n’existant pas, il y aura une erreur. Il faut utiliser l’option -p de mkdir pour le créer si besoin.
man mkdir
On pourrait donc avoir ceci :
mkdir -p ~/Bureau/Sur_le_Bureau/{homme,femme}
Hors ligne
#4 Le 28/08/2020, à 17:34
- john25
Re : cp, mkdir, mv, scp, pour un débutant
En fait, je voudrais que les erreur soient logguées dans un fichier "~/Bureau/Sur_le_Bureau/log.txt".
Dois-je ajouter ">> ~/Bureau/Sur_le_Bureau/log.txt" à la fin de chaque commande ?
genre :
mkdir ~/Bureau/Sur_le_Bureau/homme && mkdir ~/Bureau/Sur_le_Bureau/femme && cp /etc/fstab ~/Bureau/Sur_le_Bureau/homme && scp femme@192.168.0.1:/etc/fstab ~/Bureau/Sur_le_Bureau/femme >> ~/Bureau/Sur_le_Bureau/log.txt
où dois-je ponctuer mes commandes par un ";" genre
mkdir ~/Bureau/Sur_le_Bureau/homme;mkdir ~/Bureau/Sur_le_Bureau/femme;cp /etc/fstab ~/Bureau/Sur_le_Bureau/homme;scp femme@192.168.0.1:/etc/fstab ~/Bureau/Sur_le_Bureau/femme >> ~/Bureau/Sur_le_Bureau/log.txt
?
Merci par Avance !
Hors ligne
#5 Le 28/08/2020, à 17:39
- john25
Re : cp, mkdir, mv, scp, pour un débutant
je me doutais bien que j'allais écoper d'un rtfm
J'ai bien vu ce" -p". Par contre, les accolades, génial !
Plus mieux encore,
mkdir -p ~/Bureau/Sur_le_Bureau/{homme,femme}/{mon_enfant_voulu,son_enfant_que_je_supporte}
fait exactement ce que j'attendais, merci nany. Ça m'avance déjà un peu.
Dernière modification par john25 (Le 28/08/2020, à 17:43)
Merci par Avance !
Hors ligne
#6 Le 28/08/2020, à 17:50
- john25
Re : cp, mkdir, mv, scp, pour un débutant
Bon, les dossiers sont créés. Maintenant je voudrais les remplir de fichiers.
Par exemple, "/etc/fstab" local et distant, et, "~/Musique/Mon_Morceau.flac" local et distant.
mkdir -p ~/Bureau/Sur_le_Bureau/{homme,femme} && cp -r -p /etc/fstab ~/Bureau/Sur_le_Bureau/homme/ && scp -r -p femme@192.168.0.1:/etc/fstab ~/Bureau/Sur_le_Bureau/femme/ && cp -r -p ~/Musique/Mon_Morceau.flac ~/Bureau/Sur_le_Bureau/homme/ && scp -r -p femme@192.168.0.1:~/Musique/Mon_Morceau.flac ~/Bureau/Sur_le_Bureau/femme/
Je précise que mon script est lancé en sudo, pour pouvoir récupérer des fichiers root, toutefois à la copie, je souhaite que les permissions soient conservées
Dernière modification par john25 (Le 28/08/2020, à 17:52)
Merci par Avance !
Hors ligne
#7 Le 28/08/2020, à 17:53
- nany
Re : cp, mkdir, mv, scp, pour un débutant
Ensuite, toujours en français, je dis :
"si le fichier "/etc/fstab" existe,
copie-le dans "~/Bureau/Sur_le_Bureau/homme",
sinon ne m'affiche pas d'erreur et continue.
"si le fichier distant (ssh) "/etc/fstab" existe,
copie-le dans "~/Bureau/Sur_le_Bureau/femme",
sinon ne m'affiche pas d'erreur et continue. "
[[ -f /etc/fstab ]] && cp /etc/fstab ~/Bureau/Sur_le_Bureau/homme ; scp femme@192.168.0.1:/etc/fstab ~/Bureau/Sur_le_Bureau/femme 2>/dev/null ;
Hors ligne
#8 Le 28/08/2020, à 17:58
- john25
Re : cp, mkdir, mv, scp, pour un débutant
Rentre en jeu "mv" pour renommer.
Dans la commande précédente, j'ajoute
scp femme@192.168.0.1:/etc/fstab ~/Bureau/Sur_le_Bureau/femme & mv ~/Bureau/Sur_le_Bureau/femme/fstab ~/Bureau/Sur_le_Bureau/femme/fstab.old
J'ai bien conscience que tout est dans le manuel mais ça fait quelques heures (débutant hein !)
que je bataille à essayer de trouver les bons enchaînements et paramètres
sans que le terminal me réponde "erreur, je m'arrête, tu recommences !".
Merci par Avance !
Hors ligne
#9 Le 28/08/2020, à 18:00
- nany
Re : cp, mkdir, mv, scp, pour un débutant
En fait, je voudrais que les erreur soient logguées dans un fichier "~/Bureau/Sur_le_Bureau/log.txt".
Dois-je ajouter ">> ~/Bureau/Sur_le_Bureau/log.txt" à la fin de chaque commande ?
genre :mkdir ~/Bureau/Sur_le_Bureau/homme && mkdir ~/Bureau/Sur_le_Bureau/femme && cp /etc/fstab ~/Bureau/Sur_le_Bureau/homme && scp femme@192.168.0.1:/etc/fstab ~/Bureau/Sur_le_Bureau/femme >> ~/Bureau/Sur_le_Bureau/log.txt
où dois-je ponctuer mes commandes par un ";" genre
mkdir ~/Bureau/Sur_le_Bureau/homme;mkdir ~/Bureau/Sur_le_Bureau/femme;cp /etc/fstab ~/Bureau/Sur_le_Bureau/homme;scp femme@192.168.0.1:/etc/fstab ~/Bureau/Sur_le_Bureau/femme >> ~/Bureau/Sur_le_Bureau/log.txt
?
Là, ça se complexifie un peu. Si on ne veux que les erreurs :
mkdir ~/Bureau/Sur_le_Bureau/homme 2>>~/Bureau/Sur_le_Bureau/errors.txt ; mkdir ~/Bureau/Sur_le_Bureau/femme 2>>~/Bureau/Sur_le_Bureau/errors.txt ; cp /etc/fstab ~/Bureau/Sur_le_Bureau/homme 2>>~/Bureau/Sur_le_Bureau/errors.txt ; scp femme@192.168.0.1:/etc/fstab ~/Bureau/Sur_le_Bureau/femme 2>>~/Bureau/Sur_le_Bureau/errors.txt
Hors ligne
#10 Le 28/08/2020, à 18:02
- john25
Re : cp, mkdir, mv, scp, pour un débutant
Merci Nany, j'ai vu le "2>/dev/null" mais dans ce cas, je ne sais pas ce qui à été copié ou pas. J'aimerais que ça soit loggué, voir mon message #4, "blablabla >> ~/Bureau/Sur_le_Bureau/log.txt"
Merci par Avance !
Hors ligne
#11 Le 28/08/2020, à 18:05
- nany
Re : cp, mkdir, mv, scp, pour un débutant
J'ai bien conscience que tout est dans le manuel mais ça fait quelques heures (débutant hein !)
que je bataille à essayer de trouver les bons enchaînements et paramètres
sans que le terminal me réponde "erreur, je m'arrête, tu recommences !".
Pour continuer en cas d’erreur d’une commande, il faut séparer les commandes par des points-virgules.
Hors ligne
#12 Le 28/08/2020, à 18:06
- john25
Re : cp, mkdir, mv, scp, pour un débutant
Merci Nany, j'ai vu le "2>/dev/null" mais dans ce cas, je ne sais pas ce qui à été copié ou pas. J'aimerais que ça soit loggué, voir mon message #4, "blablabla >> ~/Bureau/Sur_le_Bureau/log.txt"
Edit : messages croisés Nany
Ça devient usine à gaz ! mais donc mes commandes doivent être séparées par ";" et non "&&" ?
Merci par Avance !
Hors ligne
#13 Le 28/08/2020, à 18:07
- john25
Re : cp, mkdir, mv, scp, pour un débutant
Re messages croisés.
Je vais faire quelques tests. Je reviens par là à la prochaine erreur.
Merci par Avance !
Hors ligne
#14 Le 28/08/2020, à 18:14
- nany
Re : cp, mkdir, mv, scp, pour un débutant
Sinon, tu devrais faire ton script sur plusieurs lignes pour y voir plus clair plutôt que de mettre toutes les commandes sur une seule ligne.
Exemple :
#!/bin/bash
commande1 >/chemin/log.txt
commande2 >>/chemin/log.txt
commande3 >>/chemin/log.txt
…
Hors ligne
#15 Le 28/08/2020, à 19:00
- john25
Re : cp, mkdir, mv, scp, pour un débutant
Ça me rend fou cette histoire !
Pourquoi quand je fais un test en créant un dossier "a" avec "b" qui n'existe pas, genre :
john@PC-Chambre:~$ sudo cp -r -p ~/Bureau/a ~/Bureau/b
john@PC-Chambre:~$
il me créé "b" et son contenu sans problème
alors que
john@PC-Chambre:~$ sudo cp -r -p /var/log/boot-info/ ~/Bureau/Postinstall/boot-info && mv ~/Bureau/Postinstall/boot-info ~/Bureau/Postinstall/boot-info_initial
cp: impossible de créer le répertoire '/home/john/Bureau/Postinstall/boot-info': Aucun fichier ou dossier de ce type
john@PC-Chambre:~$
= Erreur
Dernière modification par john25 (Le 28/08/2020, à 19:02)
Merci par Avance !
Hors ligne
#16 Le 28/08/2020, à 19:06
- john25
Re : cp, mkdir, mv, scp, pour un débutant
Il faut vraiment que je me cogne des "mkdir" à ne plus savoir lire le script ?
john@PC-Chambre:~$ sudo cp -r -p ~/Bureau/a ~/Bureau/b
john@PC-Chambre:~$
ça marche,
mais il faut absolument mkdir pour ça ?
john@PC-Chambre:~$ sudo mkdir ~/Bureau/b/ && cp -r -p ~/Bureau/a ~/Bureau/b/c
john@PC-Chambre:~$
Merci par Avance !
Hors ligne
#17 Le 28/08/2020, à 19:19
- nany
Re : cp, mkdir, mv, scp, pour un débutant
Oui, il faut effectivement créer les répertoire si tu changes d’arborescence.
Autrement, je ne sais pas si tu as vu ;
Sinon, tu devrais faire ton script sur plusieurs lignes pour y voir plus clair plutôt que de mettre toutes les commandes sur une seule ligne.
Exemple :
#!/bin/bash commande1 >/chemin/log.txt commande2 >>/chemin/log.txt commande3 >>/chemin/log.txt …
Hors ligne
#18 Le 28/08/2020, à 20:58
- pingouinux
Re : cp, mkdir, mv, scp, pour un débutant
Bonsoir,
Tu peux aussi regrouper les commandes ainsi :
( commande1; commande2; commande3 ) >/chemin/log.out 2>/chemin/log.err
Hors ligne
#19 Le 29/08/2020, à 04:04
- john25
Re : cp, mkdir, mv, scp, pour un débutant
Je m'aperçois que j'ai pas été très clair, ne sachant pas exactement ce que je voulais faire, mais ça prend forme, grâce à vos exemples.
Autrement, je ne sais pas si tu as vu ;
nany a écrit :
Sinon, tu devrais faire ton script sur plusieurs lignes pour y voir plus clair plutôt que de mettre toutes les commandes sur une seule ligne.
Exemple :
#!/bin/bash
commande1 >/chemin/log.txt
commande2 >>/chemin/log.txt
commande3 >>/chemin/log.txt
…
Sisi, merci j'avais vu, et c'est vers cette mise en forme que je me suis orienté.
Bon, je suis encore loin de la fin du script mais j'ai un souci.
Pour l'instant j'ai :
echo "##### SAUVEGARDE DES FICHIERS DE CONFIGURATION AVANT RÉ-INSTALLATION #####
Ce script permet d'automatiser la sauvegarde des fichiers de configuration avant ré-installation.
Il va créer un dossier ~/Bureau/Postinstall contenant les fichiers importants présent dans l'ordinateur.
Pendant l'exécution, merci de laisser la fenêtre du terminal ouverte."
read -p "Appuyer sur une touche pour continuer ..."
(mkdir -p ~/Bureau/Postinstall ; \
> ~/Bureau/Postinstall/log.erreur ; \
mkdir -p ~/Bureau/Postinstall/{femme,config} ; \
cp -r -p /var/log/boot-info ~/Bureau/Postinstall/boot-info_initial ; \
scp -r -p femme@192.168.0.1:/var/log/boot-info ~/Bureau/Postinstall/femme/boot-info_initial ; \
cp -p /etc/apcupsd/apcupsd.conf ~/Bureau/Postinstall/config/apcupsd.conf) 2>>~/Bureau/Postinstall/log.erreur
echo "c'est fini ! Consultez les logs"
quand je lance le script, le terminal me répond :
john@PC-Chambre:~$ bash ~/Bureau/Save_Conf_en_cours.sh
##### SAUVEGARDE DES FICHIERS DE CONFIGURATION AVANT RÉ-INSTALLATION #####
Ce script permet d'automatiser la sauvegarde des fichiers de configuration avant ré-installation.
Il va créer un dossier ~/Bureau/Postinstall contenant les fichiers importants présent dans l'ordinateur.
Pendant l'exécution, merci de laisser la fenêtre du terminal ouverte.
Appuyer sur une touche pour continuer ...
/home/john/Bureau/Save_Conf_en_cours.sh: ligne 46: /home/john/Bureau/Postinstall/log.erreur: Aucun fichier ou dossier de ce type
c'est fini ! Consultez les logs
john@PC-Chambre:~$
Pourquoi ne veut-il pas créer le fichier de log ? J'ai essayé sans
> ~/Bureau/Postinstall/log.erreur
en créant manuellement le fichier (vide) de log et ça fonctionne, il me retourne les erreurs.
J'ai essayer avec touch au lieu de > mais même résultat, pas de création de log...
Merci par Avance !
Hors ligne
#20 Le 29/08/2020, à 05:40
- pingouinux
Re : cp, mkdir, mv, scp, pour un débutant
Pourquoi ne veut-il pas créer le fichier de log ?
C'est parce qu'il essaye d'interpréter 2>>~/Bureau/Postinstall/log.erreur avant que le répertoire ~/Bureau/Postinstall ne soit créé.
Il faut créer ce répertoire avant la série de commandes.
Remarques :
- Il n'est pas nécessaire de créer au départ le fichier de log
- Les \ en fin de ligne sont inutiles
mkdir -p ~/Bureau/Postinstall/{femme,config} ;
(cp -r -p /var/log/boot-info ~/Bureau/Postinstall/boot-info_initial ;
scp -r -p femme@192.168.0.1:/var/log/boot-info ~/Bureau/Postinstall/femme/boot-info_initial ;
cp -p /etc/apcupsd/apcupsd.conf ~/Bureau/Postinstall/config/apcupsd.conf) 2>~/Bureau/Postinstall/log.erreur
Hors ligne
#21 Le 29/08/2020, à 08:12
- john25
Re : cp, mkdir, mv, scp, pour un débutant
Ça fonctionne tout de suite mieux !
Je n'arrive pas à échappé un espace dans un chemin de fichier concerné par scp.
Edit : j'ai trouvé
j'ai essayé de mettre le chemin entre guillemets double ("), simple ('), un antislash avant l'espace (\ ), là avec (%20), donc en copier/coller. Je sèche.
[s]john@PC-Chambre:~$ scp -r -p femme@192.168.0.1:~/.2018-09-20%2011h46m27s%20-%20Sumatra.jpg ~/Bureau/Postinstall/femme/config/.2018-09-20%2011h46m27s%20-%20Sumatra.jpg ;
scp: /home/femme/.2018-09-20%2011h46m27s%20-%20Sumatra.jpg: No such file or directory
[/s]
Sachant que ça ne va pas être le seul chemin avec espace...
Edit :le bon code est :
john@PC-Chambre:~$ scp -r -p femme@192.168.0.1:"~/.2018-09-20\ 11h46m27s\ -\ Sumatra.jpg ~/Bureau/Postinstall/femme/config/
Edit : Le problème n'était pas l'échappement mais la destination de la copie
Edit : D'autre part, comment rentrer un mot de passe sudo en ssh ?
La partie du script concernée :
Edit : j'ai changé entre temps, le code actuel :
# hosts
sudo /etc/cron.weekly/hosts-update ;
cp -r -p /etc/hosts ~/Bureau/Postinstall/config/ ;
cp -r -p /etc/cron.weekly/hosts-update ~/Bureau/Postinstall/config/ ;
ssh femme@192.168.0.1 << 'EOF' ;
sudo /etc/cron.weekly/hosts-update ;
'EOF' ;
scp -r -p femme@192.168.0.1:/etc/hosts ~/Bureau/Postinstall/femme/config/ ;
scp -r -p femme@192.168.0.1:/etc/cron.weekly/hosts-update ~/Bureau/Postinstall/femme/config/ ;
Edit : le retour à également changé
john@PC-Chambre:~$ bash ~/Bureau/Save_Conf_en_cours.sh
##### SAUVEGARDE DES FICHIERS DE CONFIGURATION AVANT RÉ-INSTALLATION #####
Ce script permet d'automatiser la sauvegarde des fichiers de configuration avant ré-installation.
Appuyer sur une touche pour continuer ...
/home/john/Bureau/Save_Conf_en_cours.sh: ligne 227: avertissement : « here-document » à la ligne 120 délimité par la fin du fichier (au lieu de « EOF »)
/home/john/Bureau/Save_Conf_en_cours.sh: ligne 228: erreur de syntaxe : fin de fichier prématurée
john@PC-Chambre:~$
Lorsque j'enlève "<<'EOF'" et "'EOF'", ça fonctionne. Pas comme je voudrais, mais le script se déroule.
Sans EOF, je suis obligé de me déconnectéer manuellement du ssh.
# hosts
sudo /etc/cron.weekly/hosts-update ;
cp -r -p /etc/hosts ~/Bureau/Postinstall/config/ ;
cp -r -p /etc/cron.weekly/hosts-update ~/Bureau/Postinstall/config/ ;
ssh naelle@192.168.1.11 ;
#<< 'EOF' ;
sudo /etc/cron.weekly/hosts-update ;
#'EOF' ;
scp -r -p naelle@192.168.1.11:/etc/hosts ~/Bureau/Postinstall/Cajou/config/ ;
scp -r -p naelle@192.168.1.11:/etc/cron.weekly/hosts-update ~/Bureau/Postinstall/Cajou/config/ ;
renvoie
[sudo] Mot de passe de john :
Welcome to Ubuntu 18.04.5 LTS (GNU/Linux 5.4.0-42-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
* Are you ready for Kubernetes 1.19? It's nearly here! Try RC3 with
sudo snap install microk8s --channel=1.19/candidate --classic
https://microk8s.io/ has docs and details.
* Canonical Livepatch is available for installation.
- Reduce system reboots and improve kernel security. Activate at:
https://ubuntu.com/livepatch
27 paquets peuvent être mis à jour.
21 mises à jour de sécurité.
Your Hardware Enablement Stack (HWE) is supported until April 2023.
Last login: Sat Aug 29 12:11:04 2020 from 192.168.1.9
femme@PC-Mezzanine:~$ déconnexion
hosts 100% 7285KB 98.5MB/s 00:00
hosts-update 100% 624 913.5KB/s 00:00
Le déconnexion, c'est moi qui le provoque avec un "CTRL+D" que je voudrais justement éviter.
Dernière modification par john25 (Le 29/08/2020, à 11:45)
Merci par Avance !
Hors ligne