Catégorie : Mémo

15 juin 2015 /

La commande source permet de lire et d’exécuter les commandes contenues dans un fichier passé en argument avec l’environnement du shell en cours, puis renvoie le code de retour de la dernière commande exécutée dans le fichier.

En gros, de base, un processus ne peut pas modifier l’environnement de son parent. Il ne peut modifier que son propre environnement. Il peut aussi choisir quel environnement transmettre lors d’un exec.

Quand tu exécutes un script de cette façon « ./script.sh », ton shell devient un fork dans lequel un nouveau shell va exécuter le script. Les variables du script sont placés dans l’environnement du processus fils, pas dans le processus père.

Alors que quand on « source » un fichier, cela demande au shell courant d’interpréter le script qui est passe en argument. Cela ne crée pas de sous-shell. Donc dans ce cas le script modifie bien l’environnement du shell courant.

Note que « .  » est équivalent à « source ».
Au lieu de faire « source script.sh », on peux faire « . ./script.sh ».

Exemple:

. ./script.sh

ou

source ./script.sh

Avec cette commande, on « source » le fichier script.sh contenant des fonctions ou des variables; c’est à dire que les variables contenues dans le fichier « sourcé » deviennent connues pour le shell courant, idem pour les fonctions.

Rappel:

Faites attention,  « ./  » et source ne font pas la même chose.

./script.sh lance le script comme un fichier executable, lancant un nouveau shell pour son execution.
source script.sh lis et execute les commandes/paramètres du fichier passé en argument dans le shell courant

Donc « ./script.sh » n’est pas comme « . script.sh », mais « . script.sh » est pareil que « source script.sh »

 

14 juin 2015 /

Le signe « – » n’est pas en lui-même un opérateur lorsqu’un nom de fichier est attendu, c’est plutôt une option reconnue par certains Unix et Linux. Cela écrit dans la sortie standard (stdout) ou lit dans l’entrée standard (stdin), comme par exemple tar ou cat, mais il y en a d’autre

Voici un exemple avec cat:

echo "salut" | cat -

Cela affichera:

salut

Voici un exemple avec tar:

tar -cvf - /home/starmate | ssh sauvegarde@sauvegarde.home "cat > sauvegarde.tar"

Ici tar va envoyer la création de l’archive dans la sortie standard, qui sera pipée ( | ) via SSH sur le serveur « sauvegarde.home ». Puis son affichage via cat sera redirigé dans un fichier sauvegarde.tar dans le répertoire personnel de l’utilisateur local « sauvegarde ».

Un  » –  » redirige donc la sortie vers stdout ou accepte une entrée de stdin, plutôt qu’un fichier.
Cette méthode est utilisé principalement lorsque l’on juge utile de manipuler des fichiers à travers des tubes.

14 juin 2015 /

Si, par mégarde, vous avez édité un fichier en oubliant de l’avoir ouvert avec sudo, et que donc vous pouvez pas sauvegarder. Ne paniquez pas à l’idée de tout recommencer.
Normalement, il faudrait quitter le ficher et tout recommencer en mettant sudo cette fois.

Pour contourner ce problème sans avoir à quitter votre édition, il suffit de saisir ça :

:w !sudo tee %

Ça peut faire gagner pas mal de temps…

13 juin 2015 /

Créer une image ISO avec la commande dd :

dd if=/dev/cdrom of=/tmp/monImage.iso bs=2048 conv=notrunc

Créer une image ISO avec la commande cat :

cat /dev/cdrom > /tmp/monImage.iso

Pour vérifier le contenu de l’image créée :

mkdir /media/iso
sudo mount -o loop -t iso9660 /tmp/monImage.iso /media/iso/

Pour faire un montage l’image au démarrage:

vi /etc/fstab

Puis on y ajoute ça s’en oublier de changer le chemin de l’image:
/chemin/monImage.iso /media/iso iso9660 rw,user,noauto 0 0

12 juin 2015 /

[pastacode lang= »bash » manual= »tree%20-L%201%20%2Fetc%20%3E%20arborescence.txt » message= »Si la commande tree est disponible (1 pour 1er niveau, etc…) » highlight= » » provider= »manual »/]

[pastacode lang= »bash » manual= »find%20%2F%20%7C%20sed%20’s%2F%5B%5E%2F%5D*%5C%2F%2F%7C%20%2Fg%3Bs%2F%7C%20*%5C(%5B%5E%7C%20%5D%5C)%2F%2B—%20%5C1%2F’%20%3E%20arborescence.txt » message= »Pour lister une arborescence intégrale » highlight= » » provider= »manual »/]

[pastacode lang= »bash » manual= »find%20.%20-maxdepth%203%20%7C%20sed%20’s%2F%5B%5E%2F%5D*%5C%2F%2F%7C%20%2Fg%3Bs%2F%7C%20*%5C(%5B%5E%7C%20%5D%5C)%2F%2B—%20%5C1%2F’%20%3E%20%2Fhome%2Fstarmate%2Farborescence_bis.txt » message= »Pour lister une arborescence jusqu’au niveau 3″ highlight= » » provider= »manual »/]

[pastacode lang= »bash » manual= »alias%20tree%3D’pwd%3Bfind%20.%20-path%20.%2Fnode_modules%20-prune%20-o%20-print%20%7C%20sort%20%7C%20sed%20’%5C »1d%3Bs%2F%5E%5C.%2F%2F%3Bs%2F%5C%2F%5C(%5B%5E%2F%5D*%5C)%24%2F%7C–%5C1%2F%3Bs%2F%5C%2F%5B%5E%2F%7C%5D*%2F%7C%20%2Fg’%5C »' » message= »Un autre exemple via un alias » highlight= » » provider= »manual »/]