Jump to content

[TOPIC] SOS : Trucs & Astuces en vrac


Recommended Posts

Ce topic présente quelques astuces pour gagner du temps ou résoudre des problèmes mineurs, mais parfois génants. La plupart sont en mode console ...

Affichage

:keskidit: Si une commande (exemple : cat d'un binaire) affiche des caractères cabalistiques qui laissent la console dans un état tout brouillé :

reset

va tenter de remettre la console ou le terminal en état.

Arborescence

:mad2: Pour indiquer le compte d'un utilisateur : utiliser ~utilisateur (sans nom d'utilisateur, c'est le home de l'utilisateur en cours). Exemples :

cd ~
cd ~sandeman
cp ~remy/.config-2.6.8-1 ~tuxxx/
scp doc_alex.html gauret@grouik:~gauret/a_lire/ 

:mdr: Pour revenir dans le répertoire précédent, suite à une commande cd :

cd -

Commandes

:-D Retrouver les derniers commandes tapées :

history

:mdr2: Relancer la dernière commande commençant par ... (bash) :

!ssh #lance la dernière commande commençant par SSH

Fichiers

:mdr: Effacer un fichier ayant un nom spécial : - ou ? par exemple : faire précéder par ./

rm ./-

:-D Retrouver rapidement, identifier un fichier

S'il est dans le PATH

which <fichier>
type<fichier>

rechercher sur tout le disque (il faut que locate soit installé)

locate <fichier>

pour mettre à jour la table de locate (la crontab le fait toutes les nuits à 6h)

updatedb

pour identifier ce que c'est

file <fichier>

Saisie

:-D Clavier dans une mauvaises configuration :

loadkeys fr

devrait charger la table de caractères "french"

:eeek2: L'affichage semble bloqué : vérifier que la touche "Arrêt Defil" n'est pas allumée. Un équivalent peut être obtenu avec Ctrl+Q. Appuyer sur Ctrl+S pour relancer.

Surveillance

:eeek2: Surveillance d'un fichier en affichant au fur et à mesure les nouvelles lignes :

tail -f <fichier>

:eeek2: Surveillande d'une commande : afficher le résultat d'une commande toutes les n secondes, éventuellement mettre en valeur les différences

watch <commande>

--

2004-08-20 : création, ajout "cd -"

2004-08-21 : ajout tail et watch

Link to comment
Share on other sites

nan !!!

export et set (ou rien), c'est pas pareil

export sert à "officialier" la variable

set sert à créer/modifier cette variable

si tu ne fais pas export, tes scripts/programme ne vont pas forcément tenir compte de cette variable si elle n'a pas déja été exportée.

Link to comment
Share on other sites

L'idée, c'est que si tu "exportes" ta variable, elle sera disponible dans les sous-shells. Sinon c'est juste pour le shell courant.

Si un jour vous faites de l'insomnie, lisez le man bash. Tout ce que vous aurez réussi à lire avant de sombrer dans les bras de Morphée vous sera très utile :)

A+

Gauret

Link to comment
Share on other sites

  • 11 months later...
:byebye: Effacer un fichier ayant un nom spécial : - ou ? par exemple : faire précéder par ./

rm ./-

Methode Alternative:

$ rm -- -

Pour interompre un process déclenché en mode interactif

$ sleep 10000
<ctrl+z>
[1]+  Stopped                 sleep 10000

Poursuivre l'éxecution de ce process en arrière plan

$ bg %1
[1]+ sleep 10000 &

Ou en interactif

$ fg %1
sleep 10000

Lister les jobs

$ jobs
[1]-  Running                 sleep 10000 &
[2]+  Running                 sleep 1999 &

Tuer le job n°1

$ kill %1
$ jobs
[1]+  Complété              sleep 10000
[2]-  Running                 sleep 1999 &

Activer le mode d'edition "à la vi" (pour les habitués du korn comme moi qui se mettent au bash)

$ set -o vi

Ensuite, echap pour passer en mode commande, puis

k = commande précédente

j = commande suivante

/ = rechercher dans l'historique

v = ouvrir vi pour editer la commande

+ toutes les commandes habituelles de vi...

Pour revenir en mode d'édition de la commande, i ou shift+a

Utiliser une seule fois rm pour effacer plusieurs fichiers trouvés avec find (utilisation de xargs).

$ find  /var/cache/apt -name *.deb -mtime +30 |xargs rm -f 

Lister les bibliothèques partagées utilisées par un programme

$ ldd `which cp`
       linux-gate.so.1 =>  (0xffffe000)
       libacl.so.1 => /lib/libacl.so.1 (0x40032000)
       libattr.so.1 => /lib/libattr.so.1 (0x40038000)
       libselinux.so.1 => /lib/libselinux.so.1 (0x4003c000)
       libc.so.6 => /lib/tls/libc.so.6 (0x4004b000)
       /lib/ld-linux.so.2 (0x40000000)

Tuer tous les process accédant au fichier /etc/fstab

# fuser -k /etc/fstab

(-v pour simplement lister ces process)

Link to comment
Share on other sites

$ find  /var/cache/apt -name *.deb -mtime +30 |xargs rm -f 

Quand on utilise find+xargs c'est encore mieux d'utiliser "print0" et le mode "-0" correspondant de xargs, cela permet de supprimer les fichiers avec des espaces.

Exemple :

% touch a\ b\ c d\ e
% ls -l
total 0
-rw-r--r--  1 damien users 0 aoû 20 10:49 a b c
-rw-r--r--  1 damien users 0 aoû 20 10:49 d e
% find -type f | xargs rm
rm: ne peut enlever `./c': Aucun fichier ou répertoire de ce type
rm: ne peut enlever `d': Aucun fichier ou répertoire de ce type
rm: ne peut enlever `./a': Aucun fichier ou répertoire de ce type
rm: ne peut enlever `b': Aucun fichier ou répertoire de ce type
rm: ne peut enlever `c': Aucun fichier ou répertoire de ce type
% ls -l
total 0
-rw-r--r--  1 damien users 0 aoû 20 10:49 a b c
-rw-r--r--  1 damien users 0 aoû 20 10:49 d e
% find -type f -print0 | xargs -0 rm
% ls -l
total 0
%

Link to comment
Share on other sites

Quand on utilise find+xargs c'est encore mieux d'utiliser "print0" et le mode "-0" correspondant de xargs, cela permet de supprimer les fichiers avec des espaces.

C'était simplement pour montrer le role de xargs. En temps normal, si je voulais n'utiliser qu'une fois rm, je ferais:

find . -type f -exec rm -f -- {} +

Car l'option -print0 n'est pas POSIX, ta commande ne fonctionne pas sur du solaris ni sur du AIX (par contre sur du freeBSD ca passe).

Enfin il faut toujours se méfier avec ce type de commande on risque de se prendre un "args list too long".

Link to comment
Share on other sites

un petit truc que j'utilise pour copier des répertoires en gardant les droits, la date, les ... :

tar cvf - my_liste | "(cd /home/new_dir ; tar xvf -)"

ou pour une copie réseau (avec les droits de copie) :

tar cvf - myliste | remsh machine2 "(cd /home/new_dir ; tar xvf -)"

attention, il y a un piège dans cette commande (ne pas l'utiliser comme ça) :

tar cvf resultat.tar *

le risque : le fichier resultat.tar peut se sauvegarder lui même avec une taille 0 et on perd le contenu de la sauvegarde lors de la restauration.

pour le find, j'utlise une des multiples possibilités, sans problème de "args list too long" :

find . -name "exemple*" -exec rm -f {} \;

Link to comment
Share on other sites

un petit truc que j'utilise pour copier des répertoires en gardant les droits, la date, les ... :

tar cvf - my_liste | "(cd /home/new_dir ; tar xvf -)"

ou pour une copie réseau (avec les droits de copie) :

tar cvf - myliste | remsh machine2 "(cd /home/new_dir ; tar xvf -)"

ou bien

tar cf - myliste|ssh user@hote tar xf - -C /home/user/rep

Sinon pour find, si je connais '+', tu te doutes que je connais ';'. La différence est que l'un invoque une seule fois la commande , l'autre l'invoque à chaque fois qu'un fichier vérifie les conditions du find (avec un argument à chaque fois donc).

Link to comment
Share on other sites

uhuhu on dirait des petits jeunes de l'Unix qui ne connaissent pas l'ancestrale commande ... bon ok tar c'est pas jeune, mais pour recopier une arborescence au plus propre, je penche plus pour un :

find <rep> | cpio -pvm <repdest>

sinon merci pour les contributions :-D, j'ai bien fait de le réuper on dirait :zarb: Je remets le premier post à jour dès que j'ai qq minutes ...

Link to comment
Share on other sites

uhuhu on dirait des petits jeunes de l'Unix qui ne connaissent pas l'ancestrale commande ... bon ok tar c'est pas jeune, mais pour recopier une arborescence au plus propre, je penche plus pour un :

find <rep> | cpio -pvm <repdest>

sinon merci pour les contributions :kimouss:, j'ai bien fait de le réuper on dirait :transpi: Je remets le premier post à jour dès que j'ai qq minutes ...

Si tu veux utiliser cpio, n'oublie pas le -d pour créer les répertoires

find <rep> | cpio -pvmd <repdest>

Options GNU pour prendre en compte les characyères spéciaux:

find <rep> -print0 -depth| cpio -p0vmd <repdest>

"-u" : mise à jour des fichiers de destionation même si plus récents

Link to comment
Share on other sites

moi j'aime pas le cpio (hihihi)

en fait j'utilise le tar car les gens avec qui je travaille l'utilisent tous (jusqu'au logiciel que j'utilise pour faire mes sauvegardes bootables).

mais j'avoue que j'utilisais un max cpio quand je travaillais sur AIX et ou avec des pro IBM.

c'est bien ce topic, il y a plein de façons différentes pour faire la même chose.

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...