Question Meilleures pratiques et astuces en ligne de commande Linux?


J'aimerais ouvrir une discussion qui accumule 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.


112
2018-03-02 21:23


origine


Pourquoi Linux uniquement? De nombreux conseils peuvent être utiles sur presque tous les goûts d'Unix. - mouviciel
Cette question pourrait être un peu large - il y a assez de bonnes pratiques de ligne de commande Linux / Unix pour remplir des livres entiers ... - Jonik
Je conviens que les astuces Unix pouvant être appliquées à Linux sont également les bienvenues, j’ai écrit Linux parce que A. C’est ce avec quoi nous travaillons ici. B. parce qu’il gagne une plus grande visibilité auprès du public qu’unix ces dernières années. - Maxim Veksler
Je pense que c’est une bonne idée de dresser une liste des commandes les plus utiles et les plus intéressantes que les gens utilisent.
Est-ce que certains d'entre eux sont pertinents? refspecs.freestandards.org


Réponses:


Utilisation écran, un multiplexeur de terminal libre 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 sauvegardés même en cas de perte de votre connexion. Vous pourrez ainsi les reprendre plus tard ou de chez vous.


111
2018-03-02 22:52



Les commutateurs les plus courants que j'utilise sont 'screen -D -R' pour détacher et reprendre ma dernière session d'écran et 'screen -x' pour afficher la même session d'écran à partir de plusieurs connexions. Aussi, procurez-vous un joli .screenrc de dotfiles.org/.screenrc - Nick Devereaux
Une autre bonne chose à propos de screen est que vous pouvez partager un terminal avec d'autres personnes lorsque vous souhaitez collaborer sur quelque chose, en utilisant screen -x - gareth_bowles


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 forward.

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.

Ports en avant:
Cela ne semble être que modérément utile jusqu’à ce que vous réalisiez que vous pouvez rebondir à travers votre pare-feu domestique et configurer votre routeur à partir du 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 des applications énormes à 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

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

Quand je tape "ssh home" (rien d’autre), c’est comme si j’avais tapé:

ssh -p 12345 bill@billshome.hopto.org

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 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 pour tous ceux qui pourraient être intéressés. 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 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 à l'extrémité distante pour ne pas autoriser les mots de passe textuels (uniquement les clés) pour une sécurité supplémentaire.


101



+1 très joli et compact post - Karsten
Petite remarque sur SSH sur le port 22: à condition d’avoir un bon mot de passe root et que vos utilisateurs n’ont pas de mots de passe terribles, il suffit d’exécuter fail2ban (ou quelque chose de similaire) est suffisant pour éviter les tentatives de crack. Je trouvais vraiment ennuyeux de garder SSH sur un autre port. - David Wolever
Cela peut parfois être irritant, mais le volume de connexions était effrayant. Je sais qu'ils ne sont pas censés passer à travers, mais c'est un peu comme si vous aviez quelqu'un qui se promenait chez vous et qui tripotait votre poignée de porte à chaque minute - juste énervant.
Il existe une version intégrée de votre dernière commande dans la plupart des versions de ssh de nos jours, elle s'appelle ssh-copy-idet c'est aussi simple que ssh-copy-id user@someserver - JamesHannah
Une autre façon de faire votre astuce "ssh mac" consiste à utiliser une directive ProxyCommand dans votre fichier .ssh / config. Hôte mac ProxyCommand ssh -q home "nc% h% p" Ceci exécutera netcat (nc) à la maison et redirigera votre connexion ssh directement vers mac. Je trouve cela plus facile à chaîner (par exemple, si vous devez vous connecter à "home" pour accéder à "work bastion" pour accéder à "work web server". - toppledwagon


J'aime utiliser

cd -

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


73



Je n'ai jamais su ça! Merci! Sur une note connexe, pushd et popd font quelque chose de similaire, en construisant une pile de répertoires. Ces astuces vous aident lorsque vous naviguez dans une structure de dir profonde.
C'est l'illumination pure. - Manuel Ferreria


J'ai récemment découvert le pv commande (pipe viewer) qui ressemble à chat 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 avoir la moindre idée de la date à laquelle votre opération se terminera, vous saurez maintenant!

Gracieuseté de Peteris Krumins 


69



$ gzip -c access.log> access.log.gz Pourquoi pas simplement: $ gzip access.log
Oh ça marche :) Je viens de prendre l'exemple du site Web de Peteris. - Nick Devereaux
Ça a l'air bon vieux tee(1). - Daniel C. Sobral
Utilité extrêmement utile, que j'oublie toujours :-( - Patrick


sudo !!

Relancez la commande précédente en tant que root.

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


53



Divulgation - J'exécute commandlinefu.com - codeinthehole
Cela aurait sauvé ce gars 16 personnages: xkcd.com/149


presse Ctrl-R et commencez à taper une commande (ou une partie de celle-ci) - elle cherche dans l'historique des commandes. Appuyez à nouveau sur Ctrl-R pour passer au match suivant, enter exécute la commande actuellement affichée et la flèche vers la droite (au moins) vous permettra de l'éditer en premier.

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

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.


46



Merci. J'ai utilisé la recherche inversée, mais je n'ai pas été en mesure de trouver comment passer au prochain match. - Adam
Ctrl-S passe au match suivant. Vous devrez peut-être faire stty -ixon d'abord pour désactiver la signification 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 changer.). Voir man stty et man readline pour plus d'informations. le stty commande peut être ajouté à votre ~/.bashrc - Dennis Williamson


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

J'utilisais la coquille 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 du shell).

Un jour, ledit ami me regardait sur la ligne de commande et me regardait 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 su popd / pushd. Devinez nous sommes même ...


45



Pour moi, la complétion des onglets semble quelque chose d '"évident", très basique, mais je n'ai jamais rien su de popd / pushd. C'est vraiment drôle. :) - Jonik
Voir aussi cette réponse pour pouvoir compléter beaucoup plus par des tabulations que des commandes, des fichiers et des répertoires: stackoverflow.com/questions/603696//603919#603919 - Jonik
C'est tellement vrai. J'ai appris sur la recherche en arrière de l'histoire de bash (ctrl-r) en regardant quelqu'un. J'ai par la suite réalisé qu'il s'agissait d'une fonctionnalité readline et fonctionnait de la même manière dans d'autres programmes intégrant readline (mysql, gdb, python -i, clisp, etc.). - sigjuice
Comment pouvez-vous utiliser "la coquille" pendant des années sans savoir comment remplir les onglets? - prestomation
Lorsque vous utilisez pushd / popd, n'oubliez pas de mentionner la commande dirs. Il montre ce qu'il y a sur la pile pushd / popd. - slm