web-dev-qa-db-fra.com

Meilleures pratiques et conseils en ligne de commande Linux?

Je voudrais ouvrir une discussion qui accumulerait vos meilleures pratiques et conseils en ligne de commande Linux (CLI).

J'ai cherché une telle discussion pour partager le commentaire ci-dessous mais je n'en ai pas trouvé, d'où ce post.

J'espère que nous pourrons tous en tirer des leçons.

Vous êtes invités à partager vos conseils Bash, grep, sed, AWK,/proc et toutes les autres administrations système Linux/Unix, les meilleures pratiques de programmation Shell pour notre bénéfice à tous.

112
Maxim Veksler

Utilisez écran , un multiplexeur de terminaux gratuit développé par le projet GNU qui vous permettra d'avoir plusieurs terminaux en un.

Vous pouvez démarrer une session et vos terminaux seront enregistrés même lorsque votre connexion sera perdue, vous pourrez donc reprendre plus tard ou depuis chez vous.

111
jeneriz

SSH!
SSH est la commande divine - je pense que c'est la commande globale la plus précieuse à apprendre. Les options peuvent être assez décourageantes, mais il semble que j'apprenne constamment à utiliser de nouvelles options de ligne de commande pour SSH que je n'aurais jamais cru nécessaires. Je les ai peut-être tous utilisés à ce stade.

Plus vous l'utilisez, plus vous en apprenez. Vous pouvez l'utiliser pour faire des choses incroyables.

Remarque: TOUTES ces choses sont réalisables à distance sans aucune configuration sur votre serveur, sauf pour faire fonctionner le serveur ssh.

Montez un système de fichiers sur Internet

rechercher SSHFS sur le net

Commandes avancées.

Le protocole SVN + SSH est Subversion d'un client distant vers un serveur sans NO DEAMON exécuté dessus! La commande SVN démarre le serveur via le shell ssh et transmet les informations dans les deux sens via le canal existant. Le programme rsync fait la même chose, s'exécute sur un serveur sans démon rsync en démarrant un lui-même via SSH. Il est facile d'écrire vos propres fichiers bash pour effectuer des astuces similaires.

Chaîne pour passer à travers les pare-fe

J'utilise cela tout le temps pour passer à travers mon serveur linux à la maison à mon mac.

Ports de transfert:
.

Transférer les requêtes X:

Ceci est un autre étonnant. Avec ou sans serveur X exécuté sur votre système distant, vous pouvez exécuter un programme x-windows et la fenêtre apparaîtra sur votre écran local. Utilisez simplement le commutateur -X, c'est tout!

Comme vous n'avez pas besoin d'avoir un serveur X en cours d'exécution sur votre serveur distant, l'impact du processeur sur votre serveur est minime, vous pouvez avoir un serveur TINY Linux qui sert d'énormes applications à votre puissant PC de jeu exécutant Windows et cygwin/X.

Bien sûr, VI et EMACS fonctionnent sur SSH, mais quand je cours à la maison, parfois j'en veux plus. J'utilise ssh -X pour démarrer une copie d'Eclipse! Si votre serveur est plus puissant que votre ordinateur portable, l'interface graphique est installée sur votre ordinateur portable, mais les compilations sont effectuées sur votre serveur, alors ne vous inquiétez pas de la charge du système.

Exécuter dans des fichiers batch

(ce qui signifie exécuter un fichier batch local qui "fait des choses" sur d'autres systèmes):

Deux choses se combinent pour rendre celle-ci cool. L'une est que vous pouvez éliminer les invites de mot de passe en utilisant des clés de chiffrement (plus sécurisées). La seconde est que vous pouvez spécifier une commande sur la CLI SSH. J'ai utilisé cela de plusieurs façons intéressantes - comme quand une compilation échoue sur le serveur distant, je l'aurais SSH dans mon ordinateur et jouerai un fichier son).

N'oubliez pas que vous pouvez rediriger la sortie de la commande distante et l'utiliser dans votre fichier de commandes local, afin que vous puissiez également suivre localement une compilation en cours d'exécution sur votre serveur.

Intégré à Mac

Le serveur et le client sont intégrés à la fois sur mac et linux. Dans le cas du Mac et d'Ubuntu, l'activation d'un serveur est aussi simple que de trouver la bonne case à cocher.

Sur un PC, installez cygwin ou cygwin/X (cygwin/X vous permettra de transférer votre sortie x-window de votre machine Linux vers votre PC Windows - il installe un serveur X)

Conseils importants/fichier de configuration

N'utilisez jamais le port 22 sur votre pare-feu. Vous aurez beaucoup de tentatives de piratage, cela n'en vaut pas la peine. Demandez à votre pare-feu de transmettre un port différent à votre serveur.

Il existe de nombreuses options de configuration qui vous permettent de simplifier considérablement vos commandes ssh. Voici un exemple du mien au travail:

Host home
    hostname billshome.hopto.org
    Port=12345
    user=bill
    LocalForward=localhost:1025 mac:22

Quand je tape "ssh home" (rien d'autre), ça fait comme si j'avais tapé:

ssh -p 12345 [email protected]

puis transmet mon port local 1025 à mon système "mac" à la maison. La raison en est que j'ai une autre entrée dans mon dossier:

Host mac
    hostname localhost
    port=1025

de sorte qu'une fois que j'ai fait un "home ssh" et que la fenêtre est toujours ouverte, je peux taper "ssh mac" et l'ordinateur au travail va essayer de se connecter à son propre port 1025 qui a été transmis à "mac: 22 "par l'autre commande, il se connectera donc à mon Mac à la maison via le pare-feu.

Modifier - script cool!

J'ai déterré un vieux script que j'adore - je devais revenir et le poster pour quiconque ici pourrait être intéressé. Le script s'appelle "authMe"

#!/bin/bash
if [ ! -f ~/.ssh/id_dsa.pub ]
then
    echo 'id_dsa.pub does not exist, creating'
    ssh-keygen -tdsa
fi
ssh $1 'cat >>.ssh/authorized_keys' <~/.ssh/id_dsa.pub

Si vous avez ce script dans votre répertoire personnel et qu'il existe un hôte auquel vous pouvez vous connecter (via ssh), vous pouvez taper "./authMe hostName".

Si nécessaire, il créera une paire de clés publique/privée pour vous, puis il sera transféré sur l'autre machine et copié votre clé publique (la commande ssh vous demandera un mot de passe ...)

Après cela, la commande SSH ne devrait plus demander votre mot de passe lors de la connexion à ce système distant, elle utilisera la paire de clés publique/privée.

Si votre ordinateur distant n'est pas toujours sécurisé, vous devriez envisager de définir une "phrase secrète" lorsque vous y êtes invité.

Vous pouvez également configurer le serveur ssh à l'extrémité distante pour ne pas autoriser les mots de passe de texte (uniquement les clés) pour une sécurité supplémentaire.

101
Bill K

J'aime utiliser

cd -

pour passer au répertoire précédent. Très utile!

73
Fortyrunner

J'ai récemment découvert la commande pv (visualiseur de tuyaux) qui est comme cat mais avec des détails de transfert.

Donc au lieu de

$ gzip -c access.log > access.log.gz

Vous pouvez utiliser

$ pv access.log | gzip > access.log.gz
611MB 0:00:11 [58.3MB/s] [=>      ] 15% ETA 0:00:59

Ainsi, au lieu de ne pas savoir quand votre opération se terminera, vous saurez maintenant!

Gracieuseté de Peteris Krumins

69
Nick Devereaux
Sudo !!

Réexécutez la commande précédente en tant que root.

[La meilleure commande actuelle sur le site http://www.commandlinefu.com , un site sur le thème de cette question.]

53
codeinthehole

Appuyez sur Ctrl-R et commencez à taper une commande (ou une partie de celle-ci) - il recherche l'historique des commandes. Appuyez à nouveau sur Ctrl-R pour passer à la correspondance suivante, entrer exécute la commande actuellement affichée et la flèche droite (au moins) vous permet de la modifier en premier.

$ (reverse-i-search)`svn': svn status

J'avais utilisé Linux pendant environ 7 ans comme mon système d'exploitation principal avant de l'apprendre, mais maintenant que je le sais, c'est assez pratique.

46
Jonik

La ligne de commande est une chose amusante. Je pense que vous ne pouvez apprendre beaucoup que par vous-même et le reste que vous apprenez par accident en regardant quelqu'un d'autre en utilisant une ligne de commande.

J'utilisais Shell depuis des années en tapant à la main les noms de répertoires. Un jour, je regardais un ami s'amuser sur un système et il a continué à appuyer sur la touche de tabulation. J'ai demandé "pourquoi frappez-vous tab?". Réponse: il essaie de compléter le répertoire ou le nom de fichier. Qui aurait pu deviner - tabulation complétée! Tapez un peu du fichier ou du répertoire, appuyez sur tab, et il essaiera de terminer ce que vous avez tapé (le comportement dépend du Shell cependant).

Un jour, un ami m'a regardé sur la ligne de commande et m'a regardé taper quelque chose comme:

coryking@cory ~/trunk/mozi $ pushd /etc
/etc ~/trunk/mozi
coryking@cory /etc $ popd
~/trunk/mozi
coryking@cory ~/trunk/mozi $

Qui aurait deviné!? Il n'a jamais connu popd/pushd. Je suppose que nous sommes même ...

45
Cory R. King

Apprenez Vim.

C'est (sans doute) le meilleur éditeur, mais certainement le meilleur éditeur disponible sur un serveur Linux nu.

41
Ali A

Il est parfois utile de laisser un programme en cours d'exécution même après votre déconnexion. J'ai vu des solutions qui utilisent Nohup ou même un écran à cet effet. Le plus simple que je connaisse est:

$ your_command_here & disown

Vous pouvez également détacher un programme en cours d'exécution:

$ your_command_here
# Press <Control-Z> to stop the program and bring it to background:
$ bg
$ disown
38
kyku

Lorsque je veux m'assurer que j'utilise la commande réelle et non un alias, j'utilise une barre oblique inverse de début:

\rm -rf ~/tmp
38
mouviciel

Cette astuce rendra votre CLI plus confortable (au moins ça me fait):

créer un fichier ~/.inputrc avec le contenu suivant:

"\e[A": history-search-backward
"\e[B": history-search-forward

Rechargez bash (par exemple en tapant "exec bash"). Lorsque vous tapez le préfixe d'une commande et appuyez sur la flèche vers le haut, vous parcourez les commandes commençant par votre préfixe, par exemple si vous avez tapé ssh, il affichera vos anciennes connexions avec des shells distants. Si votre invite est vide, la flèche vers le haut parcourra l'historique normalement.

38
kyku

Utilisation && au lieu de ; lors de l'exécution de plusieurs commandes à la fois. Il s'arrête lorsqu'une erreur se produit et n'exécute pas les autres commandes.

Exemple classique:

./configure && make && make install
36
x-way

Lors de l'écriture de boucles sur la ligne de commande en bash, je préfixe souvent les commandes risquées avec la commande 'echo'.

for item in items; do echo something-risky; done

De cette façon, j'arrive à voir le "quelque chose de risqué" dans son intégralité avant de m'engager à l'exécuter. Aide lorsque votre commande risquée comprend des extensions et des globes variables. Et 'set -x' est très utile lors de l'écriture de scripts bash.

'set -x' active le débogage. Voir http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_02_03.html pour des informations sur le débogage bash.

32
Jonathon Watney

Exigence

Vous devez tester la bande passante maximale entre 2 serveurs.


Solution

Sur SERVER1 faire:

nc -u -l 54321 > /dev/null

Sur SERVER2 faire:

dd if=/dev/zero bs=1MB | nc -u SERVER1 54321 &
pid=$(pidof dd)
while (( 1 )); do kill -USR1 $pid; sleep 2; done

Vous verrez une sortie telle que:

182682000000 bytes (183 GB) copied, 1555.74 seconds, 117 MB/s
182920+0 records in
182919+0 records out

117 Mo/s est le facteur intéressant ici, qui montre la bande passante de transfert réseau réelle.

Explication:

Comme le paquet commencera à circuler sur le réseau, vous pourrez voir les statistiques de bande passante sur SERVER2, ce qui est une assez bonne estimation de la bande passante maximale réelle possible entre les 2 serveurs.

Copie par UDP (pour éviter TCP surcharge).

Copie vers de mémoire (/ dev/zero) sur SERVER1 vers mémoire (/ dev/null) sur SERVER2, empêchant ainsi les E/S disque de devenir le goulot d'étranglement.

31
Maxim Veksler

Il est plus facile de voir les structures de répertoires de couleurs.

alias ls="ls --color=tty"

Modifier

alias ls="ls --color=auto"
23
Suroot

Quelques petits conseils concernant l'affichage des journaux:

  1. Vous pouvez utiliser tail -F pour continuer à regarder le journal après qu'il soit tronqué (par exemple log4j).
  2. Vous pouvez utiliser moins: ouvrez moins, cliquez sur MAJ + F pour émuler le comportement de la queue. Une combinaison également utile est - S pour désactiver le retour à la ligne. less vous permettra de rechercher dans les journaux.
20
Maxim Veksler

J'ai appris une astuce d'un ami il y a longtemps pour changer facilement l'extension d'un fichier:

mv my_filename.{old,new}

L'expansion de Shell étendra ceci à:

mv my_filename.old my_filename.new

Cela peut également être utilisé pour renommer un fichier d'une autre manière, par exemple en ajoutant quelque chose dans:

mv my_{,cool_}filename
20
Scotty Allen

Utilisez "tar xf" pour extraire les archives compressées. Les j pour bzip2 et z pour gzip ne sont pas nécessaires, car tar détectera le type de fichier de votre archive. Le signe "-" n'est pas non plus devant les arguments. Vous économiserez beaucoup de temps (sur un millénaire ;-)).

Mieux encore, utilisez nfoo pour extraire n'importe quelle archive avec une seule commande sans arguments inutiles.

19
kyku

Installez le paquet bash-complètement. Il contient un certain nombre de règles d'achèvement prédéfinies pour Shell. Activez-le en tapant "source/etc/bash_completion" si votre distribution ne le fait pas pour vous. Ensuite, par exemple, chaque fois que vous terminez après kpdf, vous ne verrez qu'une liste de répertoires et de fichiers PDF. C'est aussi intelligent que de compléter des fichiers distants après scp ssh: // server/XXX (si vous avez activé les connexions sans mot de passe).

17
kyku

J'utilise constamment ceux-ci

ALT-. (ESC +. Dans certains terminaux) copie le dernier argument utilisé (super utile)

CTRL-W supprime Word

Terminal clear CTRL-L (comme la commande clear mais plus rapide)

ALT-B (ESC + B dans certains terminaux) recule d'un mot

ALT-F (ESC + F dans certains terminaux) avancer d'un mot

CTRL-E saute vers EOL

CTRL-A saute à BOL

Recherche CTRL-R dans l'historique

17
Álvaro

En bash, j'utilise beaucoup ! $. Il répète le dernier argument de la dernière commande:

ls /really/long/command/argument/that/you/dont/want/to/repeat.txt
vi !$

Il exécutera le ls, puis si vous voulez le modifier, vous n'avez pas besoin de le retaper, utilisez simplement! $. C'est vraiment utile pour les noms de chemin/fichier longs. De plus, ! * répète tous les arguments de la commande précédente. Je ne l'utilise pas autant, mais ça a l'air utile.

Je savais qu'ils avaient été mentionnés, mais j'utilise vim, screen et cd - beaucoup.

J'ai oublié le noclobber:

set -o noclobber

De man bash :

S'il est défini, bash n'écrase pas un fichier existant avec les opérateurs de redirection>,> & et <>. Cela peut être remplacé lors de la création de fichiers de sortie à l'aide de l'opérateur de redirection> | au lieu de>.

16
gpojd

Passez de bash à zsh , et voyez votre productivité s'améliorer:

  • Achèvement de l'onglet vraiment intelligent et scriptable. Il complète non seulement les lignes de commande, mais toutes les options, les noms des pages de manuel, les noms des packages (pour apt-get/emerge, etc.) et ce que vous avez. Et fournit une explication utile des options lors de l'achèvement. Tout cela sans utiliser d'espace de défilement après l'émission de la commande.
  • Tabulation des caractères génériques; écrivez cat * .txt, appuyez sur tab et choisissez parmi les fichiers correspondant à l'expression.
  • Changez de répertoire en tapant simplement leurs noms.
  • Plusieurs modes d'édition de ligne. Peut se comporter comme vi ou emacs si vous le souhaitez.
  • Raccourcis clavier personnalisables pour faire ce que vous voulez.
  • Invites thématiques, y compris la possibilité de mettre des informations d'invite sur le côté droit de l'écran et de les masquer automatiquement lors de la saisie d'une commande longue

Google vous dira de nombreux autres avantages.

14
flodin

Old school, déplacer une arborescence de répertoires d'un endroit à un autre, en préservant les liens symboliques, les autorisations et toutes ces bonnes choses:

tar cBf - . | (cd /destination; tar xvBpf -)

ou sur le réseau

tar cBf - . | rsh foo.com "cd /destination; tar xvBpf -)

Nouvelle école:

rsync -urltv . /destination

ou sur le réseau

rsync -urltv -e ssh . foo.com:/destination
13
Paul Tomblin

Exigence: Vous avez un répertoire contenant une grande liste de fichiers que vous souhaitez supprimer. rm -r échouera!

exemple

find /var/spool/mqueue/ | wc -l
191545
rm -f /var/spool/mqueue/*
-bash: /bin/rm: Argument list too long

Solution:

find /var/spool/mqueue/ -xdev -exec command rm -f '{}' +

Explication:

Edit: Correction de l'explication suite au commentaire @ephemient.

find fournira des arguments à rm par le maximum d'arguments autorisés. Cela permettra à rm de supprimer des fichiers par lots, ce qui est la technique la plus rapide que je connaisse sans utiliser l'opération -delete de find. C'est équivalent à

find /var/spool/mqueue -xdev -print0 | xargs -0 rm -f

qui peut vous être utile si votre find ne prend pas en charge -exec ... +.

13
Maxim Veksler

J'utilise ces deux astuces si souvent que j'ai pensé que ce serait une bonne idée de partager:

!foo

Lance la dernière commande du fichier historique commençant par "foo" (je l'utilise souvent lors de la compilation, !gcc par exemple.)

L'autre est un raccourci clavier (Ctrl + O au lieu de Retour) qui exécutera la commande ET affichera la commande suivante dans le fichier historique. Par exemple, lorsque je compile et teste un fichier, je fais toujours 3 ou 4 commandes, fais, cd dans le répertoire du test, lance le test, cd dans le répertoire du makefile. L'utilisation de Ctrl + O rend cette tâche beaucoup plus facile :)

J'espère que cette aide!

11
claferri

Comment utiliser Subversion sous Linux sans l'aide d'interfaces graphiques fantaisistes qui peuvent ne pas être disponibles.

svn co <repo-url> . # Checks out project into current folder

svn update # Get latest changes from server

svn status # Shows what files have changed locally

svn add <path/filename> # Add some file to the repo

svn commit # Commit your changes to the repo

Cela empêche beaucoup de développeurs d'utiliser Linux, étrangement.

10
postfuturist

Commande old-school la plus négligée: find

Hier, j'ai réparé un bogue de grosses autorisations:

for u in nr dias simonpj; do
   Sudo -u $u find . -type d -exec chmod g+s '{}' ';'
done
10
Norman Ramsey

Pour les shells comme bash et ksh, vous pouvez faire répondre la ligne de commande aux commandes de navigation comme votre éditeur de texte:

set -o emacs

ou

set -o vi

vous permettra de rechercher votre historique et de vous déplacer sur la ligne de commande comme vous le faites d'habitude dans les fichiers texte (par exemple en mode vi, en appuyant sur ESC puis en tapant /string recherchera vos commandes précédentes pour "chaîne" - vous pouvez utiliser n et N pour vous déplacer entre les correspondances)

8
Tim Whitcomb

grep est mon ami. Sérieusement.

Liste .rb fichiers contenant le texte class foo:

grep -l "class foo" .rb

Liste .rb fichiers qui ne pas contiennent le texte class foo:

grep -L "class foo" *.rb

Liste .rb fichiers qui ne pas contiennent foo ou bar (vous pouvez utiliser n'importe quelle expression rationnelle avec -e, mais vous devez échapper aux opérateurs):

grep -L -e "foo\|bar" *.rb
8
Sarah Mei

La substitution de shell est effectuée avec ^:

/home/eugene $ ls foo.txt
foo.txt
/home/eugene $ ^ls^rm
rm foo.txt
/home/eugene $ ls foo.txt
ls: cannot access foo.txt: No such file or directory
8
Eugene Morozov

$_ est une variable d'environnement pour le dernier argument de la commande précédente

Donc, si je crée un nouveau répertoire

$ mkdir ~/newdir/

Pour entrer je vais simplement

$ cd $_

C'est pratique pour les textes complexes et volumineux tels que les URL, les répertoires, les noms de fichiers longs, etc.


Vous pouvez également faire référence à chaque argument de la commande précédente à l'aide de !:{number}

$ echo !:0 !:1 !:2

Notez que bash développera ceci avant de l'exécuter (pour voir cette pression vers le haut pour parcourir votre historique).

$ touch one two three
$ ls !:1 !:2 !:3 

Contrairement à $_ qui est une variable d'environnement, elle s'étendra à "ls one two three", effectuera l'action et imprimera la commande dans le shell. Cette méthode est beaucoup plus difficile (à mon avis) à utiliser que $_ que j'utilise beaucoup plus fréquemment.

Remarque: vous pouvez également utiliser! $ Au lieu de $ _ mais le premier se développera

7
Nick Devereaux

Il y avait une réponse sur l'utilisation de pushd/popd pour mémoriser les répertoires. Si vous souhaitez visiter temporairement un répertoire, vous pouvez enregistrer la saisie en utilisant cd - commande, comme ceci:

/home/eugene $ cd /etc
/etc $ cd -
/home/eugene $

De plus, une de mes commandes préférées est xargs. Je l'utilise très souvent avec find, mais il peut également être utile dans d'autres situations. Par exemple, pour trouver les arguments de ligne de commande qui ont été utilisés pour démarrer un processus, vous pouvez utiliser la commande suivante sur linux:

 $ xargs -0 echo < /proc/[PID]/cmdline

Dans certains cas (en particulier lorsque vous travaillez avec du code source) ack est plus pratique que grep car il recherche automatiquement récursivement et ignore les fichiers de sauvegarde et les répertoires de contrôle de version (comme .svn, .hg) . Plus besoin de taper de longues lignes de commande comme find . -name \*.c | xargs grep 'frobnicate'.

6
Eugene Morozov

Un joli que j'ai vu aujourd'hui d'un ami.

Nettoyez le journal de l'application (pour le prochain lancement et co.)

> /var/log/appname.log

(Notez que le > fait partie de la commande).

Cela revient à faire:

echo '' > /var/log/appname.log
6
Maxim Veksler

ici est une excellente collection de conseils que j'ai rencontrés sur digg aujourd'hui.

5
Satish

Je viens de terminer la lecture Astuces Linux que tout geek devrait connaître sur TuxRadar. Très beaux articles pour ceux qui en savent un peu mais qui veulent en savoir plus.

5
matpie

couper et grep sont une très bonne façon de gérer les fichiers texte brut. Vous pouvez récupérer ce que vous voulez. cut vous permet de diviser "verticalement" le fichier et grep vous permet de fractionner "horizontal" le fichier.

La phrase suivante divisera toutes les lignes pour ; an renvoie uniquement le 1 et le 3.

$cut -d ';' -f 1,3 hello.txt

Avec grep (une commande bien connue), vous pouvez faire de même pour les lignes. La phrase suivante ignorera les lignes qui ne vous intéressent pas:

$grep error hello.txt

grep peut également être utilisé pour inverser: ignorer les lignes ne correspondant pas au motif et vous pouvez également utiliser des expressions régulières.

Mais les plus puissants des deux utilisent des tuyaux. Par exemple:

$grep error hello.txt | cut d ':' -f1,3 | cut -d' ' -f1
5
FerranB

Si vous souhaitez combiner stdout et stderr dans une redirection, essayez d'utiliser 2>&1, un péché:

make > make.log 2>&1

4
Jared Oberhaus

Mon FAI a un plafond de bande passante, mais une fenêtre gratuite pour tous au démarrage à 2 ou 3 heures du matin. Je planifie donc d'énormes téléchargements pour cette fenêtre avec at:

$ echo aptitude -d -y dist-upgrade | at 3am
$ echo wget http://example.com/bigfile | at 3am

La chose qui m'a confondu à l'origine avec at est qu'il prend le script sur stdin, pas sur la ligne de commande.

4
bstpierre

Utilisez la commande watch pour répéter les commandes et observer les résultats. S'il n'est pas pris en charge (comme sur les systèmes Solaris), essayez ce qui suit (bash):

while [ 1 ] ; do
<cmd>
sleep <n> # n is # of seconds to repeat command
echo "" # meaningful output here can be helpful
        # I like to use ">>>>>>" `date` "<<<<<<<"
done
4
bedwyr
reset

ou

stty sane

au cas où vous ruineriez votre terminal en attrapant accidentellement un fichier binaire!

4
dogbane

Vous pouvez suivre plusieurs fichiers avec tail -f:

tail -f logfile1 logfile2

les mises à jour seront entremêlées selon l'ordre d'apparition:

==> logfile1 <==
event-a
event-b
==> logfile2 <==
event-p
event-q
==> logfile1 <==
event-c

Si vous voulez un affichage plus propre, utilisez la montre et omettez le -f de tail:

watch tail logfile1 logfile2

Mon favori personnel de tous les temps: Méta CLI et alias persistants .

avec ces alias, une simple commande (val) pour définir de nouveaux alias Shell, et les faire avancer. le concept peut être étendu à des "modes"/domaines plus petits par des fichiers ou des alias supplémentaires.

dans ~/.alias.sh (assurez-vous que cela provient de vos fichiers de démarrage Shell)

# bash format example
alias sal='. ~/.alias.sh; echo ~/.alias.sh was sourced'
alias val='vi ~/.alias.sh; sal'

ou ~/.alias.csh ( csh format-- assurez-vous qu'il est inclus dans vos fichiers de démarrage Shell)

# csh format 
alias sal 'source ~/.alias.csh; echo ~/.alias.csh was sourced'
alias val 'vi ~/.alias.csh ; sal'
3
popcnt

Mes commandes ls les plus courantes sont

ls -lSr
ls -ltr

pour trier les fichiers par ordre croissant de taille et de temps respectivement (pour trouver les fichiers les plus grands ou les plus récents). De plus, si vous n'avez pas de terminal couleur pour une raison quelconque, ou que vous n'aimez pas les couleurs (comme moi), alors ls -F vous donne le même type de métadonnées que les couleurs: '/' indique un dir, '*' un exécutable, etc.

Apprenez également à utiliser find et xargs: la puissance de la ligne de commande rassemble des commandes plus petites en quelque chose de plus puissant. Ces 2 commandes sont indispensables pour ça!

3
KarstenF

les documents ici sont amusants:

cat << EOF > /tmp/file.txt

The ${speed} ${color} ${animal} jumped over the ${structure}

EOF

Ou, si vous utilisez BASH .. amusant avec here-docs en boucles:

cat << EOF > /tmp/file.txt

The ${speed[i]} ${color[i]} ${animal[i]} jumped over the ${structure[i]}

EOF

Pratique pour générer du HTML, PHP, des fichiers de configuration, ou presque n'importe quoi d'autre à l'intérieur d'un script Shell .. même d'autres scripts Shell :)

3
Tim Post

Raccourcis clavier d'édition en ligne de commande que j'utilise dans bash:

CTRL- - Supprimer le texte de la position du curseur de retour à la maison. Idéal lorsque vous saisissez un mot de passe par erreur, et ne vous souvenez pas si votre terminal prend en charge DELETE ou BACKSPACE.

CTRL-A - Tout comme la touche HOME, même lorsque votre terminal n'envoie pas correctement HOME.

CTRL-E - Tout comme END

ALT-F - Déplacer le curseur vers l'avant d'un mot.

ALT-B - Déplacer le curseur vers l'arrière d'un mot.

3
Shalom Craimer

Je suis surpris que personne n'ait mentionné la commande fc intégrée de bash (fc signifie Fix Command).

Utilisez-le pour modifier votre commande précédente dans un éditeur (c'est-à-dire vim) plutôt que dans la ligne de commande, et exécutez-la lorsque vous quittez l'éditeur. Assez pratique.

fc [-e ename] [-nlr] [first] [last]
fc -s [pat=rep] [command]

En savoir plus ici

3
ArtBIT

Ajoutez ceci à ~/.bashrc

# expand things like !310:1 after spaces.
bind Space:magic-space

C'est un peu effrayant à utiliser

  • !: 0 (0ème argument de la dernière commande, c'est-à-dire le nom du programme)
  • !: 2 (2ème argument de la dernière commande)
  • !! (toute la dernière commande) (Sudo !!)
  • ! $ (dernier argument de la dernière commande)
  • ! * (tous les arguments de la dernière commande)
  • ! ssh (dernière commande commençant par ssh)
  • ^ chunky ^ bacon (dernière commande sauf le premier chunky est remplacé par bacon)
  • !: gs\chunky\bacon (... tout le chunky est remplacé par du bacon)

sans vérifier ce qui est substitué avant d'exécuter la commande.

Lorsque vous utilisez des caractères génériques comme * .txt ou des globes comme hello. {Txt, org}, vous pouvez vérifier au préalable ce qui est fait avec la commande echo.

echo rm *.bak
rm *.bak

Mais pour des choses comme!: 0, vous n'utilisez pas l'écho, car une fois l'écho terminé, la dernière commande est la commande écho. Vous avez peut-être entendu parler de ce phénomène comme étant le principe des "choses à vis d'observation" en mécanique quantique.

Au lieu de cela, vous ajoutez simplement "bind Space: magic-space" dans votre ~/.bashrc, puis, chaque fois que vous appuyez sur espace, les éléments comme!: 0 sont développés juste là.

3
RamyenHead

Rechercher dans un fichier compressé sans le décompresser au préalable:

gzcat someFile.gz | grep searchString
2
Millhouse

Quelques exemples utiles:

rsync -av old_location new_location

copiera une structure de répertoires et préservera les autorisations et les liens.

Sudo updatedb && locate filename

pour trouver des fichiers rapidement (nécessite findutils)

apropos term_or_terms

recherche les pages de manuel.

2
rlbond
alias rm='rm -i'
2
VirtualDevil

Si vous pensez "oh, je peux simplement écrire environ 15 lignes de Perl/Python/quoi que ce soit pour faire ce que je veux", jetez d'abord un coup d'œil à la coreutils .

2
Svante

Vous pouvez faire des substitutions de chemin pour changer de répertoire en utilisant 2 arguments avec cd:

$ pwd
/foo/bar/blah
$ cd bar bat
/foo/bat/blah
2
jpeacock

utiliser attendre! Cela rend les outils interactifs de script beaucoup plus faciles. Par exemple, vous pouvez créer un script pour une session telnet ou une session ftp.

Faites votre travail sur la ligne de commande, puis écrivez-le. Voici un exemple grossier, pour telnet sur une carte de développement, récupérer une image du noyau et la mettre en flash

#!/bin/bash
# scripted telnet
IP=$1
IMAGE="platform-AT91SAM9260/images/linuximage"
cp $IMAGE /home/cynove/public_html/
expect -b - <<EndOfTelnet
spawn telnet $IP
expect "login"
send "root\r"
expect "#"
set timeout -1
send "wget -O kimage http://192.168.10.2/~cynove/linuximage\r"
expect "#"
send "ls -al kimage\r"
expect "kimage"
send "flashcp -v kimage /dev/mtd1\r"
expect "Erasing"
expect "#"
send "exit\r"
EndOfTelnet
2
shodanex

J'aime les commandes suivantes qui vous donnent Google et Google books dans le terminal

#!/bin/sh

q=$1
w=$2
e=$3
r=$4
t=$5

open "http://www.google.com/search?q=$q+$w+$e+$r+$t&ie=utf-8&oe=utf-8:en-GB:official&client=firefox-a"

et Google livres dans le terminal

#!/bin/sh

q=$1
w=$2
e=$3
r=$4
t=$5

open "http://books.google.com/books?q=$q+$w+$e+$r+$t"

J'ai ce qui suit dans .bashrc

alias gb='/Users/Mas/bin/googlebooks'                                                                               

alias g='/Users/Mas/bin/google'

J'ai les autorisations 777 pour les scripts dans/bin/googleScripts /.

Exemples

gb Strang null space            // searches books which have the words

g Lordi Hard Rock Eurovision   // Googles websites which have the words

Ce serait cool d'avoir des titres de livres dans le terminal afin que vous n'ayez pas besoin d'un navigateur externe.

De même, il serait utile d'avoir les URL de recherche Google directement dans Terminal afin que vous puissiez traiter les données dans Terminal.

L'un de mes trucs cli préférés est de sortir de CLI.

xdg-open .

Cela ouvre un navigateur de fichiers GUI avec le répertoire actuel. C'est pour Linux. Utilisez "START". pour Windows et "ouvert". pour OS X)

Avant d'apprendre à utiliser echo, j'avais peur d'utiliser rm avec des caractères génériques, donc j'ouvrirais xdg le dossier actuel, puis supprimerais les fichiers dans l'interface graphique. J'avais aussi peur de la commande tar, une autre raison d'utiliser xdg-open.

Que diriez-vous d'un moyen de revenir au monde CLI?

Double-cliquez (ou triple-cliquez) sur la barre d'emplacement de votre navigateur de fichiers GUI et exécutez:

cd "$(xsel)"

c'est d'ici . (ou utilisez open-terminal-here avec nautilus)

2
RamyenHead

Sécurité sur la ligne de commande

Les administrateurs système expérimentés font des choses qui paraissent paresseuses ou idiosyncratiques au début, mais gardent leur bacon une fois dans une lune bleue.

Ne saisissez rien que vous puissiez coller

Préférez le copier-coller à la saisie, que vous copiiez à partir d'un livre d'exécution, d'un manuel ou tout simplement plus haut dans la fenêtre du terminal. Il est trop facile de taper le mauvais argument, le commutateur, la commande, le nom de fichier, etc., en particulier lorsque vous regardez simultanément des systèmes, signalez l'état d'une conférence téléphonique et essayez de déterminer la cause première d'un problème.

Coller la ligne de commande est une bonne habitude. Nous devrions l'activer en a) rendant tout scriptable et b) en mettant des commandes dans des manuels au lieu de captures d'écran.

Différencier Windows

"Oups, mauvais Shell!" Derniers mots célèbres. Trouvez un moyen de séparer les fenêtres qui se connectent à différents environnements. Donnez aux environnements de production une couleur d'arrière-plan différente ou placez-les sur un autre moniteur.

Ne faites pas confiance au chemin

Un ancien, mais bon, est de créer un script Shell appelé "ls" dans votre répertoire. Faites-en une racine suid, demandez-lui de créer une copie racine suid de/bin/bash dans votre propre répertoire caché, puis supprimez-le et exécutez le vrai/bin/ls. Tout ce que vous devez faire est alors d'obtenir un administrateur naïf pour exécuter "ls -la" dans votre répertoire et pouf , vous avez un shell racine.

Les vrais administrateurs n'ont jamais "." sur leur chemin, exactement pour éviter ce genre d'attaque sournoise. Vous ne devriez pas non plus. Ajouter "./" au début des exécutables à proximité est une bonne habitude.

Ne déplacez pas les fichiers. Copiez puis supprimez

"mv oldname newname" est dangereux. Il peut détruire deux fichiers à la fois. Il vaut mieux faire une séquence. Copiez le fichier d'origine vers la destination, vérifiez s'il est OK, puis supprimez l'original. Mieux encore, attendez que vous ayez complètement terminé l'ensemble du processus, puis supprimez le fichier d'origine. Mieux encore, faites une copie sécurisée du fichier que vous êtes sur le point de modifier. L'objectif est de tout rendre complètement réversible, afin que vous puissiez toujours revenir à un état connu.

2
user9495

Parfois, lorsque vous travaillez dans un terminal, vous devez ouvrir un fichier à l'aide d'une application graphique associée, comme pour les fichiers pdf ou mp3. Vous n'avez pas besoin de vous souvenir du nom exact de cette commande, utilisez simplement:

gnome-open some-file.pdf

BTW, l'alias le plus court que j'utilise est:

alias o=gnome-open

Très utile.

2
jackhab

Vérification simple et rapide de l'intégrité des données

n'utilisant rien de plus que bash et md5sum

Cela peut s'avérer inestimable en termes de problèmes de débogage lors du déplacement de fichiers binaires sur le réseau ... Vous devez adopter cette technique comme pratique courante pour chaque copie de données précieuses afin d'assurer l'intégrité des données à 100%.

Configurer certaines données de test ...

mkdir -p /tmp/mdTest/dir{1,2,3}
for i in `seq 1 3`; do echo $RANDOM > /tmp/mdTest/dir$i/file$i ; done

calcul du hachage md5 sur les données de test

cd /tmp/mdTest/
TMPMD5LIST=$(mktemp); (find  -type f -exec md5sum '{}' \;) > $TMPMD5LIST; mv $TMPMD5LIST list.md5sum

vérification de l'intégration des données à partir du hachage

cd /tmp/mdTest/
md5sum --check list.md5sum
./dir3/file3: OK
./dir1/file1: OK
./dir2/file2: OK

Test unitaire: cassons l'un des fichiers.

echo $RANDOM >> /tmp/mdTest/dir1/file1
md5sum --check list.md5sum
./dir3/file3: OK
./dir1/file1: FAILED
./dir2/file2: OK
md5sum: WARNING: 1 of 3 computed checksums did NOT match
2
Maxim Veksler

Les extensions de paramètres Bash sont super:

$ FOO=leading-trailing.txt

$ echo ${FOO#leading-} # remove leading match
trailing.txt

$ echo ${FOO%.txt} # remove trailing match
leading-trailing

$ echo ${FOO/-*/-following} # match a glob and substitute
leading-following.txt

Besoin de renommer un tas de fichiers? Combinez avec une boucle for:

$ for FILE in file*.txt; do mv -v $FILE ${FILE#file-}; done
file-01.txt -> 01.txt
file-02.txt -> 02.txt
file-03.txt -> 03.txt

Une fois que vous les maîtrisez, vous serez surpris de la fréquence à laquelle ils sont utiles.

2
markdrayton

Mon préféré et fréquemment utilisé:

Liste le contenu du fichier tar.gz

tar -tzf nomfichier.tar.gz

correspondra à la ligne contenant S1 OR S2 OR S3 OR S4

grep 'S1. * S2. * S3. * S4'

Liste tous les sous-répertoires du répertoire courant

ls -d * /

Taille totale du répertoire
du -sh

trouver une date:

TIMESTAMP = date '+%y%m%d%H%M'

déplace le processus du premier plan vers l'arrière-plan

Ctrl-z puis bg

Word entier en majuscules

écho "Word" | awk '{print toupper ($ 0)}'

Vérifie l'égalité entre les nombres

x -eq y Le chèque est x est égal à y

x -ne y Vérifiez si x n'est pas égal à y

x -gt y Vérifiez si x est supérieur à y

x -lt y Vérifiez si x est inférieur à y

Vérifie l'égalité entre les chaînes

x = y Vérifiez si x est identique à y

x! = y Vérifiez si x n'est pas identique à y

-n x Évalue à vrai si x n'est pas nul

-z x Évalue à vrai si x est nul

Paramètres de ligne de commande pour 'test'

-d vérifie si le fichier est un répertoire

-e vérifier si le fichier existe

-f vérifie si le fichier est un fichier normal

-g vérifier si le fichier a des autorisations SGID

-r vérifie si le fichier est lisible

-s vérifie si la taille du fichier n'est pas 0

-u vérifier si le fichier a des autorisations SUID

-w vérifie si le fichier est accessible en écriture

-x vérifie si le fichier est exécutable

imprime le premier champ de la dernière ligne "

awk '{field = $ 1}; END {print field} '

build important dans les variables

$ # Nombre d'arguments de ligne de commande. Utile pour tester no. d'arguments de ligne de commande dans le script Shell.

$ * Tous les arguments de Shell

$ @ Comme ci-dessus

$ - Option fournie à Shell

$$ PID de Shell

$! PID du dernier processus d'arrière-plan démarré (commencé par &)

1
Sasha

Je me dirige vers ne jamais taper "rm" à une invite de commande. Au lieu de cela, je tape "ls", et si j'aime la liste des fichiers supprimés, j'édite la commande (facilement possible avec bash et ksh).

Modifiez pour ajouter quelque chose dans les commentaires: "rm -i" demandera à chaque suppression, ce qui accomplit le même objectif. Merci!

1
David Thornley

Vous pouvez faire du réseautage simple avec bash (crédit à cela page et man bash):

cat < /dev/tcp/time.nist.gov/13

Oui, l'écriture et la lecture-écriture simultanées sont également possibles.

1
kyku

Surtout, comprenez tout ce que vous voyez dans Internetz avant de l'essayer dans votre boîte de développement.

1
DFectuoso

De temps en temps, ni l'un ni l'autre:

find . -exec ...
find . -print0 | xargs ...
for i in *.png; do ... done

fonctionne pour le traitement d'une liste de fichiers, car il faut la puissance combinée de find, des noms de fichiers séparés par NULL ainsi que des boucles Shell simples. La solution est ce petit bout de code bash:

find . -print0 | while read -r -d $'\0' filename; do echo $filename; done

Cela permet de traiter des fichiers séparés NULL dans une boucle normale.

1
Grumbel

Shell-f est un endroit pour stocker, modérer et propager des trucs et astuces en ligne de commande. Un peu comme StackOverflow, mais uniquement pour Shell. Vous y trouverez de nombreuses réponses à cette question.

1
Jean-Marc Liotier

Une autre astuce:

Lorsque je veux créer un alias bash, je crée simplement un script bash sur mon dossier bin utilisateur.

Par exemple, au lieu d'ajouter la ligne suivante à mon .bashrc,

alias make-symlink='ln -s -iv'

Je ferais le script suivant et l'enregistrer sous ~/bin/make-symlink

#!/bin/bash                                                                     
ln -s -iv "$@"

, une fois le script rendu exécutable (chmod + x), c'est comme si j'avais un nouvel alias.

Maintenant, make-symlink peut être utilisé dans xargs. Aussi lorsque vous utilisez un Shell différent (ZSH, FISH, IPYTHON, ...), make-symlink est là aussi.

Si vous utilisez emacs, vous souhaiterez peut-être ajouter ce qui suit à votre fichier init emacs.

;; Make scripts executable on save                                              
(add-hook 'after-save-hook 'executable-make-buffer-file-executable-if-script-p)
1
RamyenHead

La commande "tee" est vraiment utile lorsque vous effectuez une sortie vers un fichier et que vous souhaitez voir la progression en même temps. Cela est particulièrement utile lorsque vous enregistrez la sortie dans un fichier et que vous devez le regarder pendant sa progression.

Au lieu de faire quelque chose comme:

./program > file &
tail -f file

Vous pouvez utiliser la commande tee sur une seule ligne:

./program | tee file
1
Jeff Billimek

J'ai trouvé que le contrôle de version de Git était:

  • Snappy
  • Un plaisir à utiliser
  • Utile pour des projets de presque n'importe quelle taille (100K à 100GB; 1 à 100k fichiers)

Voici comment je le fais:

# Create new repository
# (for now, it will live in .git/ - a single directory)
git init

# Commit all I got so far
git add .
git commit

# Add new or modified files manually
git add *.c
git status
git commit

# Add all modified files
git status
git commit -a

# Redo last commit
git commit -a --amend

# View log
git log

# Reset everything (files and git history) back to 
# what it was at 96223554b3e3b787270b1f216c19ae38e6f83ca5
git branch this-was-a-mistake
git reset --hard 9622

# Everything is back in time
ls
git log
1
Aleksandr Levchuk

Sommes/moyennes/regroupement faciles avec awk:

cat tests
ABC 50
DEF 70
XYZ 20
DEF 100
MNP 60
ABC 30

cat tests | awk '{sums[$1] += $2; tot += $2; qty++}\
   END { for (i in sums) 
     printf("%s %s\n", i, sums[i]); 
     printf("Total: %d\nAverage: %0.2f\n", tot, tot/qty)} ' 
MNP 60
ABC 80
XYZ 20
DEF 170
Total: 330
Average: 55.00
1
ggiroux

Je n'ai pas ces commandes dans la liste ci-dessus ... !!!

  1. trouver . -nom .svn -type d | xargs rm -rf

    Supprimer tous les dossiers .svn

  2. bash -x script.sh

    imprimer la ligne et l'exécuter en BASH

  3. Ctrl + [

    le même que [Esc] dans vim

  4. shopt -s autocd

    CD automatiquement dans le répertoire

  5. df -i

    Afficher le nombre actuel d'inodes libres/utilisés dans un système de fichiers

  6. Sudo !!

    Exécutez la dernière commande en tant que root

  7. python -m SimpleHTTPServer

    Servir l'arborescence de répertoires actuelle à http: // $ HOSTNAME: 8000 /

  8. netstat -tlnp

    Répertorie tous les ports d'écoute avec le PID du processus associé

  9. Voici quelques façons de numéroter input.txt:

    chat -n

    $ cat -n input.txt 1123 2 3456 4 5789 6 7 8 abc 9 10 def 11 12 ghi

1
Jayakrishnan T
  • Pour des arborescences de répertoires plus petites avec documentation à parcourir

    find .
    
  • Pour vider un fichier de Shell

    > file.txt
    
  • Pour revenir à mon répertoire personnel

    cd
    
1
Dlf

J'aime garder une trace de tout ce que je fais. Une commande que j'ai apprise à l'université était le "script". Cela prend n'importe quelle sortie sur votre terminal et l'enregistre dans un fichier. Ce que je n'ai pas appris au collège, c'est comment faire de chaque terminal un script. Maintenant, j'ai ceci dans mon fichier .login:

exec script ~/.TypeScript/`date +%Y%m%d%H%M%S`.$$

Assurez-vous que ~/.TypeScript/existe avant de l'ajouter à la fin de votre fichier .login. :)

1
toppledwagon

À mon humble avis, * la commande la plus importante de nix est ... homme :)

Presque tout ce que l'on doit savoir peut être trouvé avec l'homme et utiliser l'homme nous empêche d'interrompre nos collègues. Et faire face aux interruptions est l'une de nos plus grandes préoccupations ...

1
Marco Ramos

CTRL +] x pour rechercher en avant un caractère "x" et Meta, CTRL +] x pour rechercher en arrière. Sur la plupart des systèmes, Meta peut être ESC ou ALT. Pour ESC, vous appuyez sur ESC puis relâchez, puis combinez CTRL et], puis appuyez sur le caractère à rechercher. Pour ALT, appuyez simultanément sur CTRL + ALT +], puis sur le caractère cible.

Je trouve que c'est utile lors de l'édition de la commande d'historique.

Pour une commande très longue et très compliquée. J'utilise fc pour ouvrir vi (probablement en fait vim sur linux) pour éditer la commande.

0
zhaorufei

Redirection de sortie. Lorsque vous exécutez quelque chose, ajoutez

pour capturer la sortie pour plus tard. Ajouter

> & error_and_log.text

for errors as well.

0
PaulHurleyuk

pushd et popd pour basculer temporairement vers différents répertoires.

Donc

pushd ~/tmp

vous déplacera vers ce répertoire, mais poussez votre emplacement actuel sur une pile (afin qu'il puisse être imbriqué).

Alors

popd

pour revenir à l'emplacement précédent.

0
Unsliced

Activez le mode en ligne pour terminer la tabulation pour Bash:

http://codesnippets.joyent.com/posts/show/169

0
bitshift

Pour ouvrir l'application X distante sur votre machine locale, procédez comme suit:

ssh -X remoteuser@removeHost
konsole

Cela permet de visualiser rapidement les applications graphiques exécutées sur l'hôte distant tout en utilisant votre machine comme serveur graphique.

0
Maxim Veksler

Copiez le texte sélectionné:

CTRL + SHIFT + C

... et collez-le:

CTRL + SHIFT + V
0

En bash pour fermer les descripteurs de fichiers: FD> & -

Fermer stderr:

$ function echostderr() { echo $1 >&2; }
$ echostderr "now you see me"
now you see me
$ echostderr "now you don't" 2>&-
$ 

Ou à l'intérieur d'un script:

$ function echostderr() { exec 2>&-; echo $1 >&2; }
$ echostderr "now you don't"
$ 
0
aless

Pour renommer plusieurs fichiers de la même manière, j'ai trouvé le script suivant très utile et robuste au fil des ans.

Il place simplement la sortie de ls dans votre éditeur de texte préféré. Vous venez de modifier le texte, enregistrez, fermez. Les fichiers sont renommés en conséquence.

C'est particulièrement bien lorsque vous combinez cela avec l'édition de colonnes Vi (Ctrl-v, sélectionnez un bloc, I à insérer avant ou A à insérer après, tapez texte, Esc).

#!/usr/bin/Ruby

RM = '/bin/rm'
MV = '/bin/mv'

from = Dir.entries('.').sort; from.delete('.'); from.delete('..')
from.sort!

from.delete_if {|i| i =~ /^\./} # Hidden files

tmp = "/tmp/renamer.#{Time.now.to_i}.#{(Rand * 1000).to_i}"

File.open(tmp, 'w') do |f|
  from.each {|i| f.puts i}
end

ENV['EDITOR'] = 'vi' if ENV['EDITOR'].nil?
system("#{ENV['EDITOR']} #{tmp}")

to = File.open(tmp) {|f| f.readlines.collect{|l| l.chomp}}
`#{RM} #{tmp}`

if to.size != from.size
  STDERR.puts "renamer: ERROR: number of lines changed"
  exit(1)
end

from.each_with_index do |f, i|
  puts `#{MV} -v --interactive "#{f}" "#{to[i]}"` unless f == to[i]
end

J'appelle ce script renamer.

0
Aleksandr Levchuk

Voici la collection de Linux, les commandes de gestion des utilisateurs UNIX http://www.linuxconfig.net/2009/11/16/linux-unix-user-management-commands.html

0
linuxconfig.net

Pour copier une partie d'un système de fichiers sur un nouveau disque dur, on peut utiliser

mkfs.ext4 /dev/sdb
mkdir /mnt/newhd
mount /dev/sdb /mnt/newhd/
rsync -av --hard-links --acls --one-file-system --xattrs /home/maxim/ /mnt/newhd/
echo '/dev/sdb /home/maxim ext4 defaults,user_xattr,noatime 0 1' >> /etc/fstab
0
Maxim Veksler

Meta +. en bash pour parcourir le dernier argument des commandes précédentes. Idéal pour courir queue et grep dans diverses combinaisons.

0
Jeremy M

TOUJOURS démarrer une commande ou un pipeline avec # (commentaire) et le supprimer lorsque vous avez terminé d'écrire la commande. Vous donne une 2e chance de repérer rm -rf/des choses similaires.

0
user23312