J'aimerais ouvrir une discussion qui accumulerait vos meilleures pratiques et astuces sur la ligne de commande Linux.
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 apprendre de cela.
Nous vous invitons à partager vos astuces Bash, grep, sed, AWK, / proc et tous les autres processus d’administration système Linux / Unix, ainsi que les meilleures pratiques de programmation shell dans l’intérêt de tous.
Réponses:
Use screen , un multiplexeur de terminaux libre développé par le projet GNU, vous permettra d’avoir plusieurs terminaux en un.
Vous pouvez démarrer une session et vos terminaux seront sauvegardés même en cas de perte de votre connexion. Vous pourrez ainsi les reprendre plus tard ou de chez vous.
la source
SSH!
SSH est le commandement divin - je pense que c'est le commandement global le plus précieux à 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 pensé 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 étonnantes.
Remarque: TOUTES ces opérations sont réalisables à distance sans configuration sur votre serveur, à l'exception du serveur ssh en cours d'exécution.
Monter un système de fichiers sur Internet
recherche sur le net pour SSHFS
Commandes en avant .
Le protocole SVN + SSH est Subversion d’un client distant à un serveur sur lequel NO DEAMON est exécuté! La commande SVN démarre le serveur via le shell ssh et fait passer les informations dans le canal existant. Le programme rsync fait la même chose, fonctionne sur un serveur sans démon rsync en en démarrant un lui-même via SSH. Il est facile d'écrire vos propres fichiers bash pour faire des trucs similaires.
Chaîne pour passer à travers les pare-feu
Je l’utilise tout le temps pour passer de mon serveur Linux à la maison à mon Mac.
Transférer des ports:
semble modérément utile jusqu’à ce que vous réalisiez que vous pouvez rebondir à travers votre pare-feu domestique et configurer votre routeur à la maison depuis votre bureau comme si vous le faisiez depuis votre réseau domestique).
Transférer les demandes X:
Ceci est un autre étonnant. Avec ou sans un serveur X s'exécutant sur votre système distant, vous pouvez exécuter un programme x-windows et la fenêtre apparaîtra sur votre écran local. Il suffit d'utiliser le commutateur -X, c'est tout!
Étant donné que vous n'avez pas besoin de faire fonctionner un serveur X 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 fonctionnant sous Windows et cygwin / X.
Bien sûr, VI et EMACS fonctionnent sur SSH, mais lorsque je cours à la maison, je veux parfois 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. Ne vous inquiétez donc pas de la charge du système.
Exécuter en batch
(ce qui signifie exécuter un fichier de commandes local qui "fait des choses" sur d'autres systèmes):
Deux choses se combinent pour rendre celui-ci cool. La première est que vous pouvez éliminer les invites de mot de passe en utilisant des clés de cryptage (plus sécurisées). La seconde est que vous pouvez spécifier une commande sur la CLI SSH. Je l'ai utilisé de manière intéressante - comme lorsqu'une compilation échoue sur le serveur distant, je l'aurais en SSH sur mon ordinateur et lirait un fichier son).
N'oubliez pas que vous pouvez rediriger la sortie de la commande distante et l'utiliser dans votre fichier de traitement par lots local. Vous pouvez donc également exécuter une compilation en cours d'exécution sur votre serveur.
Construit pour Mac
Le serveur et le client sont intégrés dans mac et linux. Dans le cas du Mac et de Ubuntu, l'activation d'un serveur est aussi simple que de trouver la bonne case à cocher.
Sur un ordinateur, 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, ça n'en vaut pas la peine. Demandez simplement à votre pare-feu de transmettre un port différent à votre serveur.
De nombreuses options de configuration vous permettent de simplifier considérablement vos commandes ssh. Voici un exemple de mon travail
Quand je tape "ssh home" (rien d’autre), c’est comme si j’avais tapé:
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:
de sorte que, une fois que j'ai fait une "maison ssh" et que la fenêtre est toujours ouverte, je peux taper "ssh mac" et l'ordinateur au travail essaiera en réalité de se connecter à son propre port 1025 qui a été transféré à "mac: 22 "par l’autre commande, il se connectera donc à mon Mac chez moi à travers le pare-feu.
Edit - script cool!
J'ai déterré un vieux script que j'aime vraiment - je devais revenir et le poster à quiconque ici serait intéressé. Le script s'appelle "authMe"
Si vous avez ce script dans votre répertoire personnel et si vous pouvez vous connecter à un hôte (via ssh), vous pouvez taper "./authMe hostName".
Si nécessaire, il créera une paire de clés publique / privée, puis ssh sur l'autre machine et copiera votre clé publique (la commande ssh vous demandera un mot de passe ...).
Après cela, la commande SSH ne devrait plus vous 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 devez envisager de définir une "phrase secrète" lorsque vous y êtes invité.
Vous pouvez également vouloir configurer le serveur ssh sur le serveur distant pour ne pas autoriser les mots de passe textuels (uniquement les clés) pour une sécurité supplémentaire.
la source
ssh-copy-id
, et c'est aussi simple quessh-copy-id user@someserver
J'aime utiliser
pour passer au répertoire précédent. Très utile!
la source
J'ai récemment découvert la
pv
commande (pipe viewer) qui ressemble à chat mais avec des détails de transfert.Donc au lieu de
Vous pouvez utiliser
Donc, au lieu de ne pas avoir la moindre idée du moment où votre opération se terminera, vous saurez maintenant!
Gracieuseté de Peteris Krumins
la source
tee(1)
.Relancez la commande précédente en tant que root.
[La commande actuellement en haut sur le site http://www.commandlinefu.com , un site sur le thème de cette question.]
la source
Appuyez sur Ctrl-R et commencez à taper une commande (ou une partie de celle-ci) - elle effectue une recherche dans l'historique des commandes. Appuyez à nouveau sur Ctrl-R pour passer au match suivant, enter exécute la commande actuellement affichée et une flèche vers la droite (au moins) vous permettra de l'éditer en premier.
J'avais utilisé Linux pendant environ 7 ans comme système d'exploitation principal avant d'apprendre cette technique, mais maintenant que je le sais, c'est assez pratique.
la source
stty -ixon
commencer par désactiver le sens du contrôle de flux XON / XOFF (cela rend également Ctrl-Q disponible. Par défaut, il est mappé de la même manière que Ctrl-V quoted-insert, mais vous pouvez le remplacer par autre chose. ). Voirman stty
etman readline
pour plus d'informations. Lastty
commande peut être ajoutée à votre~/.bashrc
La ligne de commande est une chose amusante. Je pense que vous ne pouvez apprendre que tant de choses 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 la coque pendant des années en tapant minutieusement les noms de répertoires à la main. Un jour, je regardais un ami bousiller un système et il continuait d'appuyer sur la touche de tabulation. J'ai demandé "pourquoi tu frappes l'onglet?". Réponse: il essaie de compléter le répertoire ou le nom du fichier. Qui l'aurait deviné - onglet achèvement! Tapez un morceau du fichier ou du répertoire, appuyez sur la touche Tab, et il essaiera de finir ce que vous avez tapé (le comportement dépend de quel shell).
Un jour, ledit ami me regardait sur la ligne de commande et me regardait taper quelque chose comme:
Qui aurait deviné!? Il n'a jamais su à propos de
popd
/pushd
. Devinez nous sommes même ...la source
Apprenez Vim.
C'est (sans doute) le meilleur éditeur, mais certainement le meilleur éditeur disponible sur un serveur Linux nu.
la source
Il est parfois utile de laisser un programme en cours même après votre déconnexion. J'ai vu des solutions qui utilisent nohup ou même l'écran à cette fin. Le plus simple que je connaisse est:
Vous pouvez également détacher un programme en cours d'exécution:
la source
Lorsque je veux m'assurer que j'utilise la commande réelle et non un alias, j'utilise une barre oblique inverse:
la source
builtin
".Cette astuce rendra votre interface de ligne de commande plus confortable (du moins cela me convient):
créer un fichier ~ / .inputrc avec le contenu suivant:
Rechargez bash (par exemple en tapant "exec bash"). Lorsque vous tapez le préfixe d'une commande et que vous appuyez sur la flèche dirigée vers le haut, vous parcourez les commandes commençant par votre préfixe. Par exemple, si vous tapez ssh, vos anciennes connexions seront affichées avec des shells distants. Si votre invite est vide, la flèche vers le haut parcourra l'historique de manière normale.
la source
exec bash
man readline
et de mémoriser ses raccourcis par défautbind -f ~/.inputrc
recharger le fichier inputrc sans avoir à démarrer une nouvelle bash et à effacer votre environnement actuel.Utilisez
&&
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:
la source
dosomething && echo "success" || echo "teh fail"
Lors de l'écriture de boucles sur la ligne de commande dans bash, je préfixe souvent les commandes risquées avec la commande 'echo'.
De cette façon, je peux voir le «quelque chose de risqué» dans son intégralité avant de m'engager à l'exécuter. Aide lorsque votre commande à risque inclut des extensions et des variables variables. Et 'set -x' est très utile pour écrire des scripts bash.
'set -x' active le débogage. Voir http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_02_03.html pour plus d'informations sur le débogage de bash.
la source
Exigence
Vous devez tester la bande passante maximale entre 2 serveurs.
Solution
Sur SERVEUR1 faire:
Sur SERVER2 faire:
Vous verrez des résultats tels que:
Le facteur intéressant ici est 117 Mo / s. Il indique la bande passante réelle du transfert réseau.
Explication :
Comme les paquets commenceront à 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 possible réelle entre les 2 serveurs.
Copie par UDP (pour éviter la surcharge de TCP).
Copier de la mémoire (/ dev / zéro) du serveur 1 à la mémoire (/ dev / null) du serveur 2, empêchant ainsi les entrées / sorties du disque de devenir le goulot d'étranglement.
la source
Voir les structures de répertoires de couleur est plus facile.
Modifier
la source
Quelques petits points concernant la consultation des journaux:
la source
tail -f
vous pouvez regarder plusieurs journaux à la fois! Exemple:tail -f log1.txt -f log2.txt
J'ai appris un tour depuis longtemps avec un ami pour changer facilement l'extension d'un fichier:
L’expansion de Shell étendra ceci à:
Cela peut également être utilisé pour renommer un fichier de différentes manières, par exemple en ajoutant quelque chose dans:
la source
ls -l /bin/c
puis appuyer sur Alt-Maj- {et cela complétera ceci pour quelque chose commels -l /bin/c{at,h{grp,mod,own,vt},p{,io},sh}
pour vous.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 avant les arguments. Vous gagnerez beaucoup de temps (plus d'un millénaire ;-)).
Mieux encore, utilisez unfoo pour extraire n'importe quelle archive avec une seule commande sans aucun argument inutile.
la source
alias ut="tar xf"
- facilite l'extraction des archives.Installez le package bash-completion. Il contient un certain nombre de règles d'achèvement prédéfinies pour le 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 terminer les fichiers distants après scp ssh: // serveur / XXX (si vous avez activé les connexions sans mot de passe).
la source
J'utilise constamment ceux-ci
ALT-. (ESC +. Dans certains terminaux) copie le dernier argument utilisé (super utile)
CTRL-W supprime le mot
CTRL-L terminal vide (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) avance d'un mot
CTRL-E saute à EOL
CTRL-A saute à BOL
Recherche CTRL-R dans l'historique
la source
En bash, je l' utilise ! $ Beaucoup. Il répète le dernier argument de la dernière commande:
Il lancera le ls, alors si vous voulez le modifier, vous n'avez pas à le retaper, utilisez simplement! $. Ceci 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 cela semble utile.
Je sais qu'ils ont été mentionnés, mais j'utilise beaucoup vim, screen et cd.
J'ai oublié noclobber:
De l' homme bash :
la source
Alt-.
.Passez de bash à zsh et constatez une amélioration de votre productivité:
Google vous en dira beaucoup plus.
la source
Vieille école, déplacer une arborescence de répertoires d'un endroit à un autre, en préservant les liens symboliques, les autorisations et tous ces bons éléments:
ou sur le réseau
Nouvelle école:
ou sur le réseau
la source
tar xvBpf - -C /destination
==(cd /destination; tar xvBpf -)
Un peu moins de frappe, et plus facile à utiliser sur ssh.rsync -avh
Il est préférable d'utiliser un seulh
ordinateur: il garantit que les liens physiques sont transférés correctement sans transformer chaque lien en un fichier séparé. Toutefois, si vous avez un nombre considérable de fichiers, vous pouvez utiliser beaucoup de mémoire.rsync -avzh . foo.com/destination
est l'équivalent pour le réseau, et généralement vous n'avez pas besoin de ce-e ssh
que rsync saura utiliser ssh.rsync -aSHuvrx --delete / --link-dest=/backup/$PREV /backup/$HOUR
Condition préalable : vous avez un répertoire contenant une longue liste de fichiers que vous souhaitez supprimer. rm -r va échouer!
exemple
Solution :
Explication :
Edit: Correction de l'explication après le commentaire @ephemient.
find fournira des arguments à rm par le nombre maximal 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 elle-même. C'est équivalent à
que vous pouvez trouver utile si votre
find
ne supporte pas-exec ... +
.la source
\;
par+
: thenfind
fera ce qu'ilxargs
faut par défaut, c'est-à-dire grouper les arguments autant que possible (sans dépasser la limite de la liste des arguments). Ou tout simplement utilisez-delete
intead de-exec rm
(GNU Findutils nécessaire pour les deux)find ... -delete
, si votre trouvaille est si douée.J'utilise ces deux astuces si souvent que j'ai pensé que ce serait une bonne idée de partager:
Lance la dernière commande de l'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 d'historique. Par exemple, lorsque je compile et teste un fichier, je fais toujours 3 ou 4 commandes, make, cd dans le répertoire du test, lance le test, cd dans le répertoire du fichier makefile. L'utilisation de Ctrl + O rend cette tâche beaucoup plus facile :)
J'espère que cette aide!
la source
Comment utiliser Subversion sous Linux sans l'aide d'interfaces graphiques sophistiquées qui pourraient ne pas être disponibles.
Cela empêche étrangement beaucoup de développeurs d’utiliser Linux.
la source
Commandement old school le plus négligé:
find
Hier, j'ai réparé un bug d'autorisations grossières:
la source
chmod 644 $(find . -type f)
,chmod 755 $(find . -type d)
-perm
option permettantfind
de localiser les fichiers disposant d'autorisations définies d'une certaine manière.Pour les shells tels que
bash
etksh
, vous pouvez faire en sorte que la ligne de commande réponde aux commandes de navigation telles que votre éditeur de texte:ou
vous permettra de rechercher dans votre historique et de vous déplacer sur la ligne de commande comme vous le faites habituellement dans les fichiers texte (par exemple, en mode vi, appuyer
ESC
puis taper/string
va rechercher dans les commandes précédentes la "chaîne" - vous pouvez utilisern
etN
déplacer entre les matchs)la source
grep est mon ami. Sérieusement.
Répertoriez les
.rb
fichiers contenant le texteclass foo
:Liste les
.rb
fichiers qui ne contiennent pas le texteclass foo
:Liste les
.rb
fichiers qui ne contiennent ni foo ni bar (vous pouvez utiliser n'importe quelle expression rationnelle avec -e, mais vous devez échapper aux opérateurs):la source
La substitution de shell est effectuée avec
^
:la source