Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 wink
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

john25 a écrit :

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

john25 a écrit :

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

john25 a écrit :

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

john25 a écrit :

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 ;

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
…

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.

Nany a écrit :

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

john25 a écrit :

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 ! smile
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 roll


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