Jump to content

Archived

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

Sandeman

[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

Share this post


Link to post
Share on other sites

Toute contribution bienvenue

ce n'est pas un manuel des commandes de base, non plus (j'ai hésité à mettre ps, kill/killall ...) mais juste les trucs qui décoincent

Share this post


Link to post
Share on other sites

si je peux me permettre sandeman :

1. merci pour nous avoir fait de la pub !

2. j'aurais rajouter set/env pour s'assurer qu'une variable d'environnement est correcte

3. J'ai parle de $LANG

Share this post


Link to post
Share on other sites

Merci Sandeman. :transpi:

Je ne connaissait pas history, mais je ne vois pas vraiment l'avantage par rapport à un (less|tail|head|vim) ./bash_history

Peut être peut tu rajouter les apropos/whereis etc.

Share this post


Link to post
Share on other sites

question conne : les variables d'environnement c'est pas export ?

Je sais pas hein, mais c'est ce qu'il m'a parut

Share this post


Link to post
Share on other sites

C'est ce que je pensait aussi. En fait un "#export" et un "#env" font (presque) la même chose. Je suppose que "#set X=Y" equivaut à un "#export X=Y"

Share this post


Link to post
Share on other sites

et meme a X=Y pour certains shells... :reflechis:

mais moi je disais ca plutot pour lister les variables d'nevironnement, plutot que de les defniir !

Share this post


Link to post
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.

Share this post


Link to post
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

Share this post


Link to post
Share on other sites
: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)

Share this post


Link to post
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
%

Share this post


Link to post
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".

Share this post


Link to post
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 {} \;

Share this post


Link to post
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).

Share this post


Link to post
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 ...

Share this post


Link to post
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

Share this post


Link to post
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.

Share this post


Link to post
Share on other sites

×
×
  • Create New...