Archive for Le Bash !

Ptite boucle en shell pour tout dézipper ?

En effet pour dézipper plein d’archive vite en 1 seul fois, il est impossible de faire « unzip * » !

Donc pour cela, il faut prendre tout les fichiers zip d’un répertoire, et pour chaque faire un unzip.

Voici comment faire en une petite boucle de commande.En effet pour dézipper plein d’archive vite en 1 seul fois, il est impossible de faire « unzip * » !

Donc pour cela, il faut prendre tout les fichiers zip d’un répertoire, et pour chaque faire un unzip.
La petite boucle en question :

for fichiers in `ls *.zip`;
do unzip $fichiers;
done;

Article lu 2293 fois

TAR via SSH

J’oublie toujours la commande, donc je la note ici !! très pratiques pour backuper à distance via ssh :pJ’oublie toujours la commande, donc je la note ici !! très pratiques pour backuper à distance via ssh :pVoici le contexte, très très simple :p

Donc je suis sur mon PC et je veux sauvegarder mon /home sur le serveur de backup, qui a pour IP 192.168.1.1 par exemple.

Je vais mettre la sauvegarde dans le répertoire /home/backup/ du serveur de sauvegarde.

un serveur SSH doit tourner et être accessible par le réseaux.

Il faut également disposer d’un compte sur le serveur (ici : root !! pas bien !! :p)

Le fichier de backup s’appellera « home.tar.bz2 »

Voici comment faire :


# tar jcv /home | ssh root@192.168.1.1 'cat > /home/backup/home.tar.bz2'

Easy hein !!!


Article lu 1060 fois

[ Bash ] Ne pas logger les commandes bash

Voici une petite astuce histoire de rester discret et de ne pas historiser les quelques commandes faites !Voici une petite astuce histoire de rester discret et de ne pas historiser les quelques commandes faites !Afin de ne pas logger temporairement les diverses commandes tapées dans la page noir (dans la console quoi…), il suffit de renseigner la variable d’environement correctement.

Voici la ligne à tapoter dans le shell :


HISTFILE="/dev/null"

Cette commande va modifier le fichier ou est stocké l’historisation des commandes. Par défaut il s’agit du fichier ~/.bash_history

Ici le principe est simple : on indique un nouveau fichier d’historisation qui est tout simplement /dev/null !

Ainsi, rien n’est historisé durant la session.

Cette astuce fonctionne pour le BASH et le DASH


Article lu 1056 fois

[ Shell ] Envoyer un mail en ligne de commande

Voici comment envoyer rapidement un mail en ligne de commande.Voici comment envoyer rapidement un mail en ligne de commande.{{Pour envoyer un mail en mode console :}}

mail -s « Le sujet » destinataire@domaine.com

Vous tapez votre texte et pour finir :

ctrl + d

{{Pour envoyer un fichier :}}

cat fichier | mail -s « Le sujet » destinataire@domaine.com

Vous tapez votre texte …. ;)


Article lu 986 fois

Séparer un nom de fichier de son répertoire

Un jour, où j’ai voulu adapter un script shell existant, j’ai eu besoin de séparer le nom d’un fichier du répertoire dans lequel il se trouvait :
/home/tata/toto => /home/tata + toto

D’ailleurs, il existe peut être une commande qui fait ça toute seule comme une grande ^_^

Ce que fait le script :
# ./toto.sh /home/tata/toto
DIR /home/tata/
FILE toto

Ce qu’il y a dedans :

#!/bin/bash

DEBUG= » »
DIR= » »
FILE= » »

new=$1
[ « x$new » = « x » ] && exit 0

while [ « x$FILE » = « x » ]
do
if [ « x$new » != « x » ]
then
taille=`expr length $new`
slash=`expr index $new « / »`
if [ « x$slash » = « x1 » ]
then
[ $DEBUG ] && echo « Supression premier slash »
slash=`expr $slash + 1 `
new=` expr substr $new $slash $taille`
DIR=’/’
fi
slash=`expr index $new « / »`
if [ « x$slash » = « x0″ ]
then
FILE=$new
else
[ $DEBUG ] && echo  » un / dans $new au $slash caractere »
dir=`expr substr $new 1 $slash`
DIR=${DIR}${dir}
slash=`expr $slash + 1`
new=` expr substr $new $slash $taille`
[ $DEBUG ] && echo « dir : $dir »
fi
else
FILE=$DIR
fi
[ $DEBUG ] && sleep 1
done

if [ ${FILE} = ${DIR} ]
then
FILE= » »
fi
echo « DIR $DIR »
echo « FILE $FILE »


Article lu 1601 fois

Tite fonction FTP

Ce script est une fonction permettant le rappatriement d’un fichier en perl.

Il liste également les fichiers présents dans un répertoire donné.

Note : Les variables sont à définir !! ;)
# Fonction de connexion FTP
sub connect_ftp {
my $fichier = @_[0];
if ($ftp = Net::FTP->new("$adresseftp",Debug => 0)) {
print "--> Connection OK\n";
}
else {
print "--> Connection ERR\n$@";
}

# on envoi le login et mdp
if ($ftp->login(« $login », »$passwd »)) {
print « –> Login OK\n »;
}
else {
print « –> Login ERR\n »;
}

# on se met dans le bon rep
if ($ftp->cwd (« $rep_distant »)) {
print « –> Dossier distant OK\n »;
}
else {
print « –> Erreur le chemin du dossier distant n’existe pas\n »;
}

# on liste le rep
my @liste=$ftp->ls();
foreach my $liste(@liste) {
print « –> $liste\n »;
}

# On rappatri le fichier donne en argument � la fonction
if ($ftp->get($fichier, »$rep_local/$nom_fichier »)) {
print « –> rappatriement de $nom_fichier reussi\n »;
$ftp->close();
}
else {
print « –> ECHEC ! rappatriement de $fichier \n »;
}
}

 


Article lu 940 fois

Transfert SFTP

Petit bout de script qui permet d’automatiser un transfert sftp.Ce petit script shell permet de rappatrier par exemple une sauvegarde d’un pc à un autre un utilisant le {{sftp}} (ftp sécurisé). Il est également possible de faire du {{scp}} ou même du {{ssh}} !

Bien sur, remplacez {USER} et {LE_MOT_DE_PASS} ainsi que {LEFICHIERVOULU} par vos paramètres.

{{!! WARNING !!}} => le mots de passe est écrit en dure ! Ne pas utiliser le compte root !!!


spawn /usr/local/bin/sftp USER@xx.xx.xx.xx
expect "USER@xx.xx.xx.xx's password: "
send "LE_MOT_DE_PASSE\r"
expect "sftp> "
send "get /LEFICHIERVOULU\r"
expect {
eof { exit; }
}
send "exit\r"

{{Note}} : Lors de la 1ere connexion, si vous ne vous êtes jamais connecté, il vous sera demandé d’accepter l’empreinte de l’hôte distant.

Une autre méthode pour l’authentification consiste à utilisé les échanges de clé.

@ suivre…


Article lu 949 fois

Personalisation du shell

{{{P’tite histoire du shell}}}

Le Shell est un interpréteur de commande.

Il a été créé en 1969, par Dennis Ritchie et Ken Thompson lors du dévellopement d’unix afin de permettre à l’utilisateur d’interagir avec le système.

Ils écrivent un système de gestion de fichier, quelques petits programmes (tel cp ou rm) et un interpreteur de commande : le {{shell}}.

——-

{{{Les différents shells}}}

Plusieurs shells existent ont vu le jour et se sont dévellopés.
Le plus répandu étant le fameux bash.

{{sh :}} Le shell des année70. L’origine ;)

{{Bash :}} C’est le shell utilisé par défaut sous Linux la plupart du temps: Bourne Against Shell.
Il fut créé par la FSF (Free Software Fondation) afin d’avoir un shel libre et gratuis.
Ce shell permet l’édition des lignes de commande et conserve un historique.

{{csh :}} Le C shell. Ne permet pas l’édition de la ligne de commande

{{ksh :}} Le Korn shell. Il est plus connu sur les systèmes UNIX.

{{tcsh :}} C’est une version améliorée du C shell. Il possède et conserve également un historique des commandes

{{zsh :}} Le plus récent de shell

—–

{{{Liste des commandes incluse dans le bash :}}}

alias, bg, bind, break, builtin, case, cd, command, continue, declare, dirs, disown, echo, enable, eval, exec, exit, export, fc, fg, for, getopts, hash, help, history, if, jobs, kill, let, local,logout, popd, pushd, pwd, read, readonly, return, set, shift, shopt, source, suspend, test, times, trap, type, typeset, ulimit, umask, unalias, unset, until, wait, while.

——–

{{{Modification commune à tous les utilisateurs}}}

Le fichier /etc/profile permet de configurer le comportement du shell et est commun à tous les utilisateurs.

Ce fichier structuré se compose de :

– Des variables du shell telles que HOME, PATH, …
– Le type de terminal et la variable TERM qui lui est attribuée.
– Une partie relatif au prompt du Shell.
– Et la définition des couleurs de la commande ls.

Chaque shell peut être personnalisé par chaque utilisateur en utilisant le fichier .bash_profile situé dans son répertoire HOME.

Mais l’administrateur de la machine veut peut-être personalisé un prompt à tout ses utilistaeurs en y mettant des couleurs, le nom de la machine, le nom de l’utilisateur, etc.

La variable PS1 permettant de réalisé cette opération ce trouve dans le fichier /etc/profile :

 

if [ « $PS1 » ]; then
if [ « $BASH » ]; then
PS1=’\u@\h:\w\$ ‘
else
if [ « `id -u` » -eq 0 ]; then
PS1=’# ‘
else
PS1=’$ ‘
fi
fi
fi

 

Vous devez vous reconnecter afin de prendre en compte les modifictations.

Voici la définition des différentes variables possible :

– \h pour ajouter le nom de la machine
– \u pour ajouter le nom de l’utilisateur
– \r pour un retour à la ligne
– \w pour ajouter le chemin complet du répertoire courant
– \W pour ajouter le répertoire courant
– \d pour ajouter la date (format anglais)
– \t pour ajouter l’heure (HH:MM:SS)

Le changement de couleurs est également possible.
Nous utilisons encore la variable PS1 pour réaliser cette fonction :

PS1=’\[\033[num_couleurm]prompt_voulu\033[0m]’

Voici la liste des numéros de couleurs :

– Noir 0;30
– Rouge 0;31
– Vert 0;32
– Brun 0;33
– Bleu 0;34
– Violet 0;35
– Cyan 0;36
– Gris Clair 0;37
– Gris 1;30
– Rose 1;31
– Vert Clair 1;32
– Brun Clair 1;33
– Bleu Clair 1;34
– Violet Clair 1;35
– Cyan Clair 1;36
– Blanc 1;37
– Et pour réinitialisé : [0m]

L’exemple suivant indique la date suivie du nom de l’utilisateur en violet clair :

PS1=’\d \[\033[1;32m]\u\033[0m]’

———–

{{{Modification pour l’utilisateur (y compris root)}}}

Étant donnée que le fichier de configuration personnel du shell a priorité sur le /etc/profile (du moins pour la prise en charge de la colorisation), il faut modifier le fichier ~/.bashrc

Ici vous pourrez ajouter des alias de commande :

 

# Alias du rm (remove=supprimer)
# afin qu’il demande une confirmation avant la suppresion

alias rm=’rm -i’

 

La coloration syntaxique du shell :

 

export LS_OPTIONS=’–color=auto’
eval `dircolors`
alias ls=’ls $LS_OPTIONS’
alias ll=’ls $LS_OPTIONS -l’
alias l=’ls $LS_OPTIONS -lA’

 


Article lu 895 fois

Surveillance des ressources

Les systèmes de types Unix ne sont pas à l’abri de problèmes liés aux ressources : un disque plein, une mémoire défaillante, et tout le système peut s’éffondrer.

Mémoire, disque, processeur, entrées/sorties : les outils pour permettre à un administrateur de diagnostiquer les problèmes possibles de son systèmes ont assez nombreux.{{{ps}}}

Probablement la commande la plus utilisée, elle permet d’afficher une foule d’information sur les processus en cours (équivalent du gestionnaire des tâches de Windows…). Elle regorge d’options permettant de cibler les informations : limiter aux applications d’un utilisateur donné, afficher la mémoire utilisée…
ps dispose d’un petit frère, pstree, qui affiche l’arbre des processus selon leurs filiations.

{{{top}}}

Affiche en permanence les infos sur les processus, les plus gourmands en ressources étant placés en haut de la liste.

{{{uptime}}}

Affiche simplement les statistiques des charges du système depuis les minutes passées.

{{{free}}}

Affiche la quantité de mémoire vive et de swap disponible et totale.

{{{vmstat}}}

Affiche les principales statistiques sur les processus, le processeur et la mémoire.
Egalement, iostat affiche les statistiques d’activité des disques, et netstat se charge des statistiques réseau (interfaces, ports, sockets…).


Article lu 855 fois

Le shell

Tout d’abort, il faut avoir quelques petites notions avant de commencer.

– Linux et autres unix tiennent compte de la casse.
C’est à dire qu’ils font la différence entre les majuscules et les minuscules. Autrement dit, le répertoire site n’est pas le meme que le répertoire Site de meme que la commande ls (liste les fichier d’un répertoire) n’est pas la meme que LS ni que Ls.
D’ailleurs essayer, cela ne marchera pas.

– Le répertoire principal de l’utilisateur est représenté par le caractère ~
Ainsi la commande ls ~ listera les fichiers et répertoire du dossier principale de l’utilisateur.

– Le dossier parent est représenté par ..
Par ex, pour remonter l’arborescence d’un niveau( c-a-d aller dans le dossier parent) la commande sera cd ..
Tandis que le dossier courant sera représenté par un .

– Dans l’univers Unix, lorsque vous avez un doute sur un nom, par ex si vous ne savez pas comment ce termine le nom du répertoire cours, le ? peut remplacer le dernier caractère. Il s’agit d’une sorte de joker. Bien entendu, il peut se placer n’importe ou dans le nom.
le * lui remplace plusieurs caractères (une chaine de caractère).
Ainsi vous vouler lister les fichiers contenu dans le répertoire cours la commande ls cour? devrait le lister. le ? sera interprété par le shell

– Le shell est un outil pour faignant. Grace à la touche tab, s’il n’existe qu’une possibilité de fichier ou répertoire, il la complètera automatiquement.

– Les fichiers cachés existe aussi. Ils commence par un .
Par exemple, le fichier .kde est un dossier caché de kde qui est dans le répertoire utilisateur

Maintenant, une fois ces quelques notions en tete, vous pouvez passer à la suite….

Bon courage…Vous apprendrez ici à executer les commandes de base tel que ce déplacer dans une arborescence, copier un fichier, un répertoire, etc…Pour commencer, nous allons étudier les déplacements dans l’arborescence, la creation de répertoire, le déplacement de fichier…enfin tout ce que vous faites avec votre souris dans l’explorateur de fichier.
Si vous ne connaissez pas très bien l’arborescence des système unix, reportez vous ici.

{{{=============== cd ===============}}}

Pour aller dans un répertoire, la commande cd remplira parfaitement cette fonction.

ex : pour aller dans le répertoire src qui ce trouve lui meme dans le répertoire usr, il faudrat écrire :

cd /usr/src

De meme, lorsque vous etes dans le répertoire /src et que vous voulez aller dans le dossier parent, (c-a-d ici le dossier /usr qui contient le dossier /src) la commande sera :

cd ..

Il faut savoir qu’il y a 2 type de chemin (/usr/src est un chemin)

{{1. Le chemin absolu :}}

On prend en considération le répertoire racine, c’est à dire / et on construit le chemin à partir de là.

ex : je veux aller dans mon répertoire personnel :

cd /home/wimpy

{{2. Le chemin relatif :}}

Le chemin relatif lui tient compte du répertoire dans lequel je me trouve.

ex : je suis dans le répertoire /usr et je veux également aller dans mon répertoire personnel. Il faut donc que je remonte d’un niveau pour me retrouver dans le répertoire racine qui contient le répertoire /home/wimpy (cf l’arborescence sous linux)

cd ../home/wimpy

{{3. Autre exemple :}}

mon dossier personnel (wimpy) contient 2 dossiers : video et musique
Je suis dans le dossier video et je souhaite aller dans le dossier musique.

<doc20|center>

Le chemin absolu est : /home/wimpy/musique.
Le chemin relatif est : ../musique. qui est dans ce cas beaucoup plus rapide à écrire.

{{{=============== ls ===============}}}

Pour lister le contenu d’un répertoire, nous nous servirons de la commande ls

Commençons par lister le contenu de notre répertoire personnel :

ls /home/wimpy ou ls ~

La console me retourne ceci :

ls /home/wimpy

<doc21|center>

Tout mes dossiers et fichiers sont listés. Sauf les fichiers cachés. Pour cela il faudra ajouter l’option -a

ls -a /home/wimpy

<doc22|center>

Il y a également une option qui permet d’avoir un affichage détaillé des fichiers et répertoires :

Il s’agit de l’option -l

ls -l /home/wimpy

<doc23|center>

– La 1ère colone indique les permissions du fichier ou répertoire
– La 3ème et 4ème renseigne l’appartenance de l’utilisateur et du groupe
– La 4ème colone indique le poid du fichier ou dossier
– Les colones suivantes concernent la date et l’heure de création du fichier ou répertoire
– Et enfin la dernière colone renseigne sur le nom.

Pour distinguer les répertoires et fichiers, il faut regarder la 1ère colone : si elle commence par d comme directory, il s’agit d’un répertoire.

Il existe une autre astuce pour les différencier du 1er coup d’oeil :

ls -lF /home/wimpy

ajoutera un slash « / » à la fin du nom des répertoires, une astérisque pour les executables, un -> pour les liens symbolique

Mais il y a encore mieux !!! l’option –color va utiliser une autre couleur pour les répertoires :

ls -l –color /home/wimpy

et admirez…

Vous pouvez bien sur cummuler toutes ces options :

ls -lF –color /home/wimpy

{{Autres options:}}

vous pouvez également trier les fichiers et répertoires par date :

– du plus ancien au plus récent : ls -t
– du plus récent au plus ancien : ls -tr

D’autres options de ls sont utiles :

– ls -m : Affiche les fichiers en les séparant par une virgule au lieu de les présenter en colonnes.

– ls -t : Affiche les fichiers par date, c’est-à-dire en les classant du récent au plus ancien.

– ls -lu : Affiche les fichiers par date de dernier accès et indique cette date.

– ls -F : Affiche les fichiers par type. Ainsi un fichier suivi d’un slash (/) est un répertoire, un fichier suivi d’une étoile est un fichier exécutable et un fichier suivi d’un « @ » est un lien (nous reviendrons sur les liens dans la section consacrée à ln).

– ls -S : Affiche les fichiers triés par ordre de taille décroissante.

– ls -X : Affiche les fichiers par type d’extension.

– ls -r : Affiche les fichier en ordre alphabétique inverse.
Cette option à la particularité d’inverser l’effet de tous les tris requis. Par exemple, la commande ls -tr affichera les fichiers par date en commençant par les plus anciens pour finir par les plus récents.

{{{============== mkdir & rm & rmdir ==============}}}

Maintenant nous allons voir comment créer et supprimer des répertoires et supprimer des fichiers.

1. Pour créer un répertoire, nous disposons de la commande mkdir
Créons un répertoire test dans notre dossier utilisateur wimpy :

mkdir /home/wimpy/test

Un répertoire test va etre créé dans le dossier wimpy.
Vous pouvez bien sur le visualiser grace à la commande ls

2. Pour supprimer un répertoire, nous utiliserons la commande rm -r ou rmdir.
Pour supprimer un fichier, rm seul suffit.
Allons d’abord dans le répertoire test que nous venons de créer précedement :

cd /home/wimpy/test

Créons un répertoire image par exemple :

mkdir image

vérifiez que tout est bon avec ls :

<doc25|center>

Pour supprimer le répertoire musique avec la commande rm il faut utiliser l’option -r :

rm -r musique
ou bien
rmdir musique

Pour supprimer un fichier :

rm le_fichier_en_question

NB : Vous pouvez supprimer plusieurs fichiers ou plusieurs répertoire en séparant le nom des fichiers ou répertoires par un espace :

rm -r toto1 toto2 tata

suprimera les dossiers toto1, toto2 et tata

rm toto* tata

supprimera les fichiers commençant par toto et le fichier tata

rm *

supprimera tout les fichiers dans le dossier courant

{{{=============== cp & mv ===============}}}

Maintenant nous allons voir comment copier et dupliquer des fichiers ou répertoires.

1. Commençons par la copie des répertoires :

Allons dans le répertoire test précédement créé et créons-en 2 autres :toto1 et toto2

Nous allons maintenant déplacer le répertoire toto2 et tout ce qu’il contient dans le répertoire toto1. Assurer vous que vous etes dans le bon répertoire grace à la commande pwd

cp -r toto2 toto1

-r pour indiquer qu’il s’agit d’un répertoire,

La structure est cp -r /chemin/répertoire_source /chemin/répertoire_destination

cp -r toto2 toto1

<doc26|center>

2. Voyons maintenant la copie de fichier dans un autre répertoire :

Nous avons tous dans notre répertoire utilisateur un fichier caché nommé.bash_history.

Déplaçons le dans le répertoire test :
cp /home/wimpy/.bash_history /home/wimpy/test
ou
cp ~/.bash_history ~/test

puis vérifions grace à ls -a que tout c’est bien déroulé.

L’option -a est nécéssaire car nous avons déplacé un fichier caché.

cp ~/.bash_history ~/test

<doc27|center>

Pour copier tout les fichiers du répertoire courant dans le répertoire test par ex :

cp * /home/test

3. La copie de fichier :

Nous avons vu plus haut comment copier des fichiers dans un répertoire, mais vous pouvez aussi copier un fichier sur un autre fichier exisatant ou n’existant pas encore…

Je m’explique : vous voulez éditer le fichier de configuration de XFree par exemple. Avant de le toucher, vous voulez en faire une copie de sauvegarde appelé XF86config_ancien par exemple

Vous devez donc copier le fichier XF86config dans le fichier XF86config_ancien (qu’il existe ou non, peut importe, le shell le créera si nécessaire) :

cp /etc/X11/XFree86config /etc/X11/XFree86config_ancien

Vous pouvez donc dupliquer des fichiers en le renommant si vous le copier dans le meme répertoire ou sans changer de nom si vous le déplacez dans un autre dossier :

cp /etc/x11/XFree86config /home/wimpy/XFree86config

{{Comment déplacer des fichiers ou les renommer :}}

1. Déplacer un fichier ou répertoire :

La, il n’y pas de différence, que ce soit un fichier ou un répertoire c’est la meme chose :

mv /chemin/le_fichier_ou_rértoire_source /chemin/répertoire_destination

Ex : je veux mettre le répertoire toto2 dans le répertoire toto1 :

mv ~/test/toto2 ~/test/toto1

<doc28|center>

Pour déplacer tout les fichiers qui sont dans un répertoire dans un autre répertoire :
mv /chemin/répertoire_contenant_les_fichiers/* /chemin/répertoire_destination

Dans l’exemple suivant, je vais déplacer tout les fichiers du répertoire musiques dans le répertoire wav :

2. Renommer un fichier ou un répertoire :

Pour renommer un fichier ou répertoire c’est très simple, nous utiliserons la commande mv !!

ex : je vais renommer le répertoire toto1 en yoyo1

mv ~/test/toto1 ~/test/yoyo1

Vous pouvez également le renommé et le mettre dans un autre répertoire :

mv ~/test/toto1 ~/yaya

le dossier toto1 sera renommé yaya et mis dans le répertoire maison de l’utilisateur.

{{{=============== find & locate ===============}}}

Consacrons nous à la recherche de fichiers ou répertoires.

{{1. locate}}

Pour localiser un fichier d’après son nom, la commande locate est très utile :

Par exemple, vous devez édité le fichier lilo.conf et vous ne savez pas ou il se trouve !

Qu’a cela ne tienne !! locate est là !!!
locate lilo.conf

Et le shell de vous répondre :
/etc/lilo.conf

Notez que si vous faites juste un locate lilo, vous aurez la localisation de tout les fichiers et répertoires contenant la chaine de caractére « lilo »

Prenons un autre exemple : Cherchons les dossiers contenant la chaine de caractère « toto » :

locate toto

<doc29|center>

Tout les fichiers et dossiers contenant la chaine de caractère « toto » apparaissent.

{{2. find}}

La commande find est plus complète et doit etre complété d’option

Par exemple vous recherchez un fichier d’après son nom, l’option -name est là.

D’après son poid ? l’option -size est là..
D’après son utilisateur ? l’option -user est là..

Pour avoir toutes les options disponible, consulter le manuel de find :
man find


Article lu 1080 fois