Sandeman Posted August 20, 2004 Share Posted August 20, 2004 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 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 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/ Pour revenir dans le répertoire précédent, suite à une commande cd : cd - Commandes Retrouver les derniers commandes tapées : history Relancer la dernière commande commençant par ... (bash) : !ssh #lance la dernière commande commençant par SSH Fichiers Effacer un fichier ayant un nom spécial : - ou ? par exemple : faire précéder par ./ rm ./- 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 Clavier dans une mauvaises configuration : loadkeys fr devrait charger la table de caractères "french" 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 Surveillance d'un fichier en affichant au fur et à mesure les nouvelles lignes : tail -f <fichier> 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 More sharing options...
Sandeman Posted August 20, 2004 Author Share Posted August 20, 2004 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 Link to comment Share on other sites More sharing options...
-rem- Posted August 20, 2004 Share Posted August 20, 2004 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 Link to comment Share on other sites More sharing options...
theocrite Posted August 20, 2004 Share Posted August 20, 2004 Merci Sandeman. 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. Link to comment Share on other sites More sharing options...
Poulpatine Posted August 20, 2004 Share Posted August 20, 2004 question conne : les variables d'environnement c'est pas export ? Je sais pas hein, mais c'est ce qu'il m'a parut Link to comment Share on other sites More sharing options...
theocrite Posted August 20, 2004 Share Posted August 20, 2004 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" Link to comment Share on other sites More sharing options...
-rem- Posted August 20, 2004 Share Posted August 20, 2004 et meme a X=Y pour certains shells... mais moi je disais ca plutot pour lister les variables d'nevironnement, plutot que de les defniir ! Link to comment Share on other sites More sharing options...
Angel Eyes Posted August 22, 2004 Share Posted August 22, 2004 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 More sharing options...
gauret Posted August 22, 2004 Share Posted August 22, 2004 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 More sharing options...
Poulpatine Posted August 22, 2004 Share Posted August 22, 2004 oky, bonne idée ;-) Link to comment Share on other sites More sharing options...
Sandeman Posted August 19, 2005 Author Share Posted August 19, 2005 Un petit up, au cas ou qq idées auraient ressurgi depuis ... un an :) Link to comment Share on other sites More sharing options...
djuke Posted August 20, 2005 Share Posted August 20, 2005 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 More sharing options...
tuXXX Posted August 20, 2005 Share Posted August 20, 2005 $ 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 More sharing options...
djuke Posted August 21, 2005 Share Posted August 21, 2005 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 More sharing options...
fozzie Posted August 21, 2005 Share Posted August 21, 2005 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 More sharing options...
fozzie Posted August 21, 2005 Share Posted August 21, 2005 vous aurez rectifé : rsh et non pas remsh (spécifique HP-UX) Link to comment Share on other sites More sharing options...
djuke Posted August 21, 2005 Share Posted August 21, 2005 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 More sharing options...
fozzie Posted August 21, 2005 Share Posted August 21, 2005 merci pour l'explication du plus, je ne savais pas. Link to comment Share on other sites More sharing options...
Sandeman Posted August 22, 2005 Author Share Posted August 22, 2005 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 , j'ai bien fait de le réuper on dirait Je remets le premier post à jour dès que j'ai qq minutes ... Link to comment Share on other sites More sharing options...
djuke Posted August 22, 2005 Share Posted August 22, 2005 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 , j'ai bien fait de le réuper on dirait 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 More sharing options...
fozzie Posted August 22, 2005 Share Posted August 22, 2005 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 More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.