? Čeština ∙ Deutsch ∙ Ελληνικά ∙ English ∙ Español ∙ Français ∙ Indonesia ∙ Italiano ∙ 日本語 ∙ 한국어 ∙ polski ∙ Português ∙ Română ∙ Русский ∙ Slovenščina ∙ Українська ∙ 简体中文 ∙ 繁體中文
Remarque: Je prévois de réviser cela et de chercher un nouveau co-auteur pour aider à développer cela dans un guide plus complet. Bien qu'il soit très populaire, il pourrait être plus large et un peu plus profond. Si vous aimez écrire et que vous êtes sur le point d'être un expert de ce matériel et que vous envisagez d'aider, veuillez me laisser une note à Josh (0x40) Holloway.com. –Jlevy, Holloway. Merci!

La maîtrise de la ligne de commande est une compétence souvent négligée ou considérée comme un arcan, mais elle améliore votre flexibilité et votre productivité en tant qu'ingénieur de manière évidente et subtile. Il s'agit d'une sélection de notes et de conseils sur l'utilisation de la ligne de commande que nous avons trouvée utile lorsque vous travaillez sur Linux. Certains conseils sont élémentaires et certains sont assez spécifiques, sophistiqués ou obscurs. Cette page n'est pas longue, mais si vous pouvez utiliser et rappeler tous les éléments ici, vous en savez beaucoup.
Ce travail est le résultat de nombreux auteurs et traducteurs. Une partie de cela est apparue à l'origine sur Quora, mais elle a depuis déménagé à Github, où les gens plus talentueux que l'auteur original ont apporté de nombreuses améliorations. Veuillez soumettre une question si vous avez une question liée à la ligne de commande. Veuillez contribuer si vous voyez une erreur ou quelque chose qui pourrait être mieux!
Portée:
Notes:
apt , yum , dnf , pacman , pip ou brew (le cas échéant) pour installer de nouveaux programmes. Apprenez Basic Bash. En fait, tapez man bash et au moins parcourez le tout; C'est assez facile à suivre et pas si long. Des obus alternatifs peuvent être bien, mais Bash est puissant et toujours disponible (n'apprendre que Zsh, Fish, etc., tout en tentant sur votre propre ordinateur portable, vous restreint dans de nombreuses situations, comme l'utilisation de serveurs existants).
Apprenez bien au moins un éditeur de texte. L'éditeur nano est l'un des plus simples de l'édition de base (ouverture, édition, enregistrement, recherche). Cependant, pour l'utilisateur de puissance dans un terminal de texte, il n'y a pas de substitut à VIM ( vi ), l'éditeur difficile à apprendre mais vénérable, rapide et complet. Beaucoup de gens utilisent également les EMAC classiques, en particulier pour les tâches d'édition plus importantes. (Bien sûr, tout développeur de logiciels moderne travaillant sur un vaste projet est peu susceptible d'utiliser uniquement un éditeur de texte pur et devrait également être familier avec les ides et les outils graphiques modernes.)
Recherche de documentation:
man (pour l'inquisitive, man man répertorie les numéros de section, par exemple 1 est des commandes "régulières", 5 sont des fichiers / conventions et 8 sont pour l'administration). Trouvez des pages d'hommes avec apropos .help et help -d . Vous pouvez savoir si une commande est un exécutable, une coquille intégrée ou un alias en utilisant type command .curl cheat.sh/command donnera une brève "feuille de triche" avec des exemples courants de la façon d'utiliser une commande shell. Découvrez la redirection de la sortie et des entrées en utilisant > et < et les tuyaux en utilisant | . Connaissez > écraser le fichier de sortie et >> ajout. Découvrez Stdout et Stderr.
Découvrez l'expansion du Fichier Glob avec * (et peut-être ? Et [ ... ] ) et la citation et la différence entre Double " et Single ' Quotes. (Voir plus sur l'expansion variable ci-dessous.)
Soyez familier avec la gestion de l'emploi Bash: & , Ctrl-Z , Ctrl-C , jobs , fg , bg , kill , etc.
Connaissez ssh , et les bases de l'authentification sans mot de passe, via ssh-agent , ssh-add , etc.
Gestion de base des fichiers: ls et ls -l (en particulier, découvrez ce que chaque colonne en ls -l ), less , head , tail et tail -f (ou encore mieux, less +F ), ln et ln -s du apprenez les chown et chmod avantages de l'utilisation dure contre le disque dur: du -hs * ). Pour la gestion du système de fichiers, df , mount , fdisk , mkfs , lsblk . Apprenez ce qu'est un inode ( ls -i ou df -i ).
Gestion du réseau de base: ip ou ifconfig , dig , traceroute , route .
Apprenez et utilisez un système de gestion du contrôle de version, comme git .
Connaissez bien les expressions régulières et les différents drapeaux de grep / egrep . Les options -i , -o , -v , -A , -B et -C méritent d'être connus.
Apprenez à utiliser apt-get , yum , dnf ou pacman (selon la distribution) pour trouver et installer des packages. Et assurez-vous d'avoir pip pour installer des outils de ligne de commande basés sur Python (quelques-uns ci-dessous sont les plus faciles à installer via pip ).
Dans Bash, utilisez l'onglet pour compléter les arguments ou répertorier toutes les commandes disponibles et Ctrl-R pour rechercher l'historique des commandes (après appuyer sur, tapez pour rechercher, appuyez sur Ctrl-R à plusieurs reprises pour parcourir plus de correspondances, appuyez sur Entrée pour exécuter la commande trouvée ou appuyez sur la flèche droite pour mettre le résultat dans la ligne actuelle pour permettre l'édition).
Dans Bash, utilisez Ctrl-W pour supprimer le dernier mot et Ctrl-U pour supprimer le contenu du curseur actuel au début de la ligne. Utilisez Alt-B et Alt-F pour passer par mot, Ctrl-A pour déplacer le curseur vers le début de la ligne, Ctrl-e pour déplacer le curseur à la fin de la ligne, Ctrl-K pour tuer jusqu'à la fin de la ligne, Ctrl-L pour effacer l'écran. Voir man readline pour toutes les clés par défaut dans Bash. Il y en a beaucoup. Par exemple alt-. cycles à travers les arguments précédents et alt- * élargit un glob.
Alternativement, si vous aimez les éléments de clé de style VI-style, utilisez set -o vi (et set -o emacs pour le remettre).
Pour l'édition de commandes longues, après avoir défini votre éditeur (par exemple export EDITOR=vim ), Ctrl-X Ctrl-E ouvrira la commande actuelle dans un éditeur pour l'édition multi-lignes. Ou dans le style VI, Escape-V .
Pour voir les commandes récentes, utilisez history . Suivez avec !n (où n est le numéro de commande) à exécuter à nouveau. Il y a aussi de nombreuses abréviations que vous pouvez utiliser, la plus utile étant probablement !$ Pour le dernier argument et !! pour la dernière commande (voir "Expansion de l'histoire" dans la page Man). Cependant, ceux-ci sont souvent facilement remplacés par Ctrl-R et Alt-. .
Allez dans votre répertoire domestique avec cd . Accès aux fichiers par rapport à votre répertoire domestique avec le ~ préfixe (par exemple ~/.bashrc ). Dans sh les scripts se réfèrent au répertoire domestique comme $HOME .
Pour revenir au répertoire de travail précédent: cd - .
Si vous êtes à mi-chemin en tapant une commande mais modifiez votre avis, appuyez sur alt- # pour ajouter un # au début et entrez-le comme commentaire (ou utilisez Ctrl-A , # , entrez ). Vous pouvez ensuite y revenir plus tard via l'historique des commandes.
Utilisez xargs (ou parallel ). C'est très puissant. Remarque Vous pouvez contrôler le nombre d'éléments exécuter par ligne ( -L ) ainsi que le parallélisme ( -P ). Si vous ne savez pas si cela fera la bonne chose, utilisez d'abord xargs echo . Aussi, -I{} est pratique. Exemples:
find . -name ' *.py ' | xargs grep some_function
cat hosts | xargs -I{} ssh root@{} hostname pstree -p est un affichage utile de l'arborescence de processus.
Utilisez pgrep et pkill pour trouver ou signaler les processus par nom ( -f est utile).
Connaissez les différents signaux que vous pouvez envoyer des processus. Par exemple, pour suspendre un processus, utilisez kill -STOP [pid] . Pour la liste complète, voir man 7 signal
Utilisez nohup ou disown si vous voulez un processus de fond pour continuer à fonctionner pour toujours.
Vérifiez quels processus écoutent via netstat -lntp ou ss -plat (pour tcp; add -u pour udp) ou lsof -iTCP -sTCP:LISTEN -P -n (qui fonctionne également sur macOS).
Voir également lsof et fuser pour les prises et les fichiers ouverts.
Voir uptime ou w pour savoir combien de temps le système est en cours d'exécution.
Utilisez alias pour créer des raccourcis pour les commandes couramment utilisées. Par exemple, alias ll='ls -latr' crée un nouvel alias ll .
Enregistrer les alias, les paramètres du shell et les fonctions que vous utilisez couramment dans ~/.bashrc , et organisez des coquilles de connexion pour la trouver. Cela mettra votre configuration disponible dans toutes vos séances de coquille.
Mettez les paramètres des variables d'environnement ainsi que les commandes qui doivent être exécutées lorsque vous vous connectez dans ~/.bash_profile . Une configuration séparée sera nécessaire pour les shells que vous lancez à partir des connexions de l'environnement graphique et des travaux cron .
Synchronisez vos fichiers de configuration (par exemple .bashrc et .bash_profile ) entre divers ordinateurs avec Git.
Comprenez que les soins sont nécessaires lorsque les variables et les noms de fichiers incluent les espaces blancs. Entourez vos variables bash avec des devis, par exemple "$FOO" . Préférez les options -0 ou -print0 pour permettre aux caractères nuls de délimiter les noms de fichiers, par exemple, locate -0 pattern | xargs -0 ls -al ou find / -print0 -type d | xargs -0 ls -al . Pour itérer sur des noms de fichiers contenant des espaces blancs dans une boucle pour une boucle, définissez vos ifs pour être une nouvelle ligne uniquement en utilisant IFS=$'n' .
Dans Bash Scripts, utilisez set -x (ou la variante set -v , qui enregistre l'entrée brute, y compris les variables et les commentaires non exploités) pour le débogage de la sortie. Utilisez des modes stricts sauf si vous avez une bonne raison de ne pas: utiliser set -e pour abandonner les erreurs (code de sortie non nul). Utilisez set -u pour détecter les usages de variables unst. Envisagez également set -o pipefail , pour abandonner les erreurs dans les tuyaux (bien que lisez-le davantage si vous le faites, car ce sujet est un peu subtil). Pour des scripts plus impliqués, utilisez également trap à la sortie ou à l'erreur. Une habitude utile consiste à démarrer un script comme celui-ci, ce qui le fera détecter et abandonner les erreurs courantes et imprimer un message:
set -euo pipefail
trap " echo 'error: Script failed: see failed command above' " ERR # do something in current dir
(cd /some/other/dir && other-command)
# continue in original dir Dans Bash, notez qu'il existe de nombreux types d'expansion variable. La vérification d'une variable existe: ${name:?error message} . Par exemple, si un script bash nécessite un seul argument, écrivez simplement input_file=${1:?usage: $0 input_file} . Utilisation d'une valeur par défaut si une variable est vide: ${name:-default} . Si vous souhaitez avoir un paramètre supplémentaire (facultatif) ajouté à l'exemple précédent, vous pouvez utiliser quelque chose comme output_file=${2:-logfile} . Si $2 est omis et donc vide, output_file sera défini sur logfile . Expansion arithmétique: i=$(( (i + 1) % 5 )) . Séquences: {1..10} . Taille des chaînes: ${var%suffix} et ${var#prefix} . Par exemple, si var=foo.pdf , alors echo ${var%.pdf}.txt imprime foo.txt .
L'expansion de l'opportage à l'aide de { ... } peut réduire le fait de redéfinir du texte similaire et d'automatiser les combinaisons d'éléments. Ceci est utile dans des exemples comme mv foo.{txt,pdf} some-dir (qui déplace les deux fichiers), cp somefile{,.bak} (qui se développe à cp somefile somefile.bak ) ou mkdir -p test-{a,b,c}/subtest-{1,2,3} (quels expansions sont les combinaisons possibles. L'expansion de l'attelle est effectuée avant toute autre expansion.
L'ordre des extensions est: l'extension de l'attelle; Expansion Tilde, paramètre et expansion variable, expansion arithmétique et substitution de commande (réalisée de gauche à droite); MOTS SPARTING; et l'expansion du nom de fichier. (Par exemple, une plage comme {1..20} ne peut pas être exprimée avec des variables en utilisant {$a..$b} . Utilisez seq ou A for LOOP à la place, par exemple, seq $a $b ou for((i=a; i<=b; i++)); do ... ; done
La sortie d'une commande peut être traitée comme un fichier via <(some command) (appelée substitution de processus). Par exemple, comparez local /etc/hosts avec un éloigné:
diff /etc/hosts <( ssh somehost cat /etc/hosts ){
# Your code here
} cat <<EOF
input
on multiple lines
EOF
Dans Bash, redirigez à la fois la sortie standard et l'erreur standard via: some-command >logfile 2>&1 ou some-command &>logfile . Souvent, pour s'assurer qu'une commande ne laisse pas de poignée de fichier ouverte à l'entrée standard, en l'attachant au terminal dans lequel vous vous trouvez, il est également une bonne pratique d'ajouter </dev/null .
Utilisez man ascii pour une bonne table ASCII, avec des valeurs hexadécimales et décimales. Pour les informations d'encodage général, man unicode , man utf-8 et man latin1 sont utiles.
Utilisez screen ou tmux pour multiplexer l'écran, particulièrement utile sur les sessions SSH distantes et pour détacher et reattacher une session. byobu peut améliorer l'écran ou TMUX en fournissant plus d'informations et une gestion plus facile. Une alternative plus minimale pour la persistance de la session n'est que dtach .
Dans SSH, savoir à porter le tunnel avec -L ou -D (et occasionnellement -R ) est utile, par exemple pour accéder aux sites Web à partir d'un serveur distant.
Il peut être utile de faire quelques optimisations à votre configuration SSH; Par exemple, ce ~/.ssh/config contient des paramètres pour éviter les connexions supprimées dans certains environnements réseau, utilise la compression (qui est utile avec SCP sur des connexions à faible bande passante) et les canaux multiplexes sur le même serveur avec un fichier de contrôle local:
TCPKeepAlive=yes
ServerAliveInterval=15
ServerAliveCountMax=6
Compression=yes
ControlMaster auto
ControlPath /tmp/%r@%h:%p
ControlPersist yes
Quelques autres options pertinentes pour SSH sont sensibles à la sécurité et doivent être activées avec soin, par exemple par sous-réseau ou hôte ou dans des réseaux de confiance: StrictHostKeyChecking=no , ForwardAgent=yes
Considérez mosh une alternative à SSH qui utilise UDP, en évitant les connexions abandonnées et en ajoutant la commodité sur la route (nécessite la configuration côté serveur).
Pour obtenir les autorisations sur un fichier sous forme octale, qui est utile pour la configuration du système mais non disponible en ls et facile à bungle, utilisez quelque chose comme
stat -c ' %A %a %n ' /etc/timezone Pour une sélection interactive de valeurs à partir de la sortie d'une autre commande, utilisez percol ou fzf .
Pour l'interaction avec les fichiers en fonction de la sortie d'une autre commande (comme git ), utilisez fpp (pathpicker).
Pour un serveur Web simple pour tous les fichiers du répertoire actuel (et sous-dimes), disponible pour toute personne sur votre réseau, utilisez: python -m SimpleHTTPServer 7777 (pour le port 7777 et Python 2) et python -m http.server 7777 (pour le port 7777 et Python 3).
Pour exécuter une commande en tant qu'un autre utilisateur, utilisez sudo . Par défaut est en cours d'exécution en tant que racine; Utilisez -u pour spécifier un autre utilisateur. Utilisez -i pour vous connecter comme cet utilisateur (il vous sera demandé votre mot de passe).
Pour passer le shell à un autre utilisateur, utilisez su username ou su - username . Ce dernier avec "-" obtient un environnement comme si un autre utilisateur se connectait. On vous demandera le mot de passe de l'utilisateur vers lequel vous basculez .
Connaître la limite 128k sur les lignes de commande. Cette erreur de "liste d'arguments trop longue" est courante lorsque le tableau générique correspond à un grand nombre de fichiers. (Lorsque cela se produit des alternatives comme find et xargs peuvent aider.)
Pour une calculatrice de base (et bien sûr l'accès à Python en général), utilisez l'interpréteur python . Par exemple,
>>> 2+3
5
Pour localiser un fichier par nom dans le répertoire actuel, find . -iname '*something*' (ou similaire). Pour trouver un fichier n'importe où par son nom, utilisez locate something (mais gardez à l'esprit updatedb n'a peut-être pas indexé les fichiers récemment créés).
Pour la recherche générale via des fichiers source ou de données, il existe plusieurs options plus avancées ou plus rapides que grep -r , y compris (en ordre approximatif de l'ancien à plus récent) ack , ag ("The Silver Searcher") et rg (Ripgrep).
Pour convertir HTML en texte: lynx -dump -stdin
Pour Markdown, HTML et toutes sortes de conversion de documents, essayez pandoc . Par exemple, pour convertir un document Markdown au format Word: pandoc README.md --from markdown --to docx -o temp.docx
Si vous devez gérer XML, xmlstarlet est vieux mais bon.
Pour JSON, utilisez jq . Pour une utilisation interactive, voir également jid et jiq .
Pour Yaml, utilisez shyaml .
Pour les fichiers Excel ou CSV, CSVKIT fournit in2csv , csvcut , csvjoin , csvgrep , etc.
Pour Amazon S3, s3cmd est pratique et s4cmd est plus rapide. aws d'Amazon et les saws améliorées sont essentielles pour d'autres tâches liées à l'AWS.
Connaissez-vous sur sort et uniq , y compris les options -u et -d d'Uniq - voir les one-liners ci-dessous. Voir aussi comm .
Connaître cut , paste et join pour manipuler les fichiers texte. Beaucoup de gens utilisent cut mais oublient de join .
Connaître wc pour compter Newlines ( -l ), les caractères ( -m ), les mots ( -w ) et les octets ( -c ).
Connaître tee pour copier de stdin à un fichier et aussi à stdout, comme dans ls -al | tee file.txt .
Pour des calculs plus complexes, y compris le regroupement, l'inversion des champs et les calculs statistiques, envisagez datamash .
Sachez que les paramètres régionaux affectent de nombreux outils de ligne de commande de manière subtile, y compris l'ordre de tri (collation) et les performances. La plupart des installations Linux définiront LANG ou d'autres variables locales dans un paramètre local comme Us English. Mais soyez conscient que le tri change si vous changez de lieu. Et savoir que les routines i18n peuvent faire fonctionner les tri ou d'autres commandes plusieurs fois plus lentes. Dans certaines situations (telles que les opérations définies ou les opérations d'unicité ci-dessous), vous pouvez ignorer en toute sécurité les routines I18N entièrement et utiliser l'ordre de tri basé sur les octets traditionnels, en utilisant export LC_ALL=C .
Vous pouvez définir l'environnement d'une commande spécifique en préfixant son invocation avec les paramètres de variable d'environnement, comme dans TZ=Pacific/Fiji date .
Connaître Basic awk et sed pour les données simples. Voir les doublures pour des exemples.
Pour remplacer toutes les occurrences d'une chaîne en place, dans un ou plusieurs fichiers:
perl -pi.bak -e ' s/old-string/new-string/g ' my-files- * .txtrepren . (Dans certains cas, la commande rename permet également plusieurs renoms, mais soyez prudent car sa fonctionnalité n'est pas la même sur toutes les distributions Linux.) # Full rename of filenames, directories, and contents foo -> bar:
repren --full --preserve-case --from foo --to bar .
# Recover backup files whatever.bak -> whatever:
repren --renames --from ' (.*).bak ' --to ' 1 ' * .bak
# Same as above, using rename, if available:
rename ' s/.bak$// ' * .bakrsync est vraiment un outil de copie de fichiers rapide et extraordinairement polyvalent. Il est connu pour être synchronisé entre les machines mais est tout aussi utile localement. Lorsque les restrictions de sécurité le permettent, l'utilisation rsync au lieu de scp permet la récupération d'un transfert sans redémarrer à partir de zéro. Il est également parmi les moyens les plus rapides de supprimer un grand nombre de fichiers: mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir Pour surveiller les progrès lors du traitement des fichiers, utilisez pv , pycp , pmonitor , progress , rsync --progress ou, pour la copie au niveau du bloc, dd status=progress .
Utilisez shuf pour mélanger ou sélectionner des lignes aléatoires dans un fichier.
Connaissez les options de sort . Pour les nombres, utilisez -n ou -h pour gérer les nombres lisibles par l'homme (par exemple de du -h ). Sachez comment fonctionnent les clés ( -t et -k ). En particulier, attention que vous devez écrire -k1,1 pour trier uniquement le premier champ; -k1 signifie trier en fonction de toute la ligne. Le tri stable ( sort -s ) peut être utile. Par exemple, pour trier d'abord par le champ 2, puis secondairement par le champ 1, vous pouvez utiliser sort -k1,1 | sort -s -k2,2 .
Si jamais vous avez besoin d'écrire un onglet littéral dans une ligne de commande dans Bash (par exemple pour que l'argument -t puisse trier), appuyez sur Ctrl-V [Tab] ou écrivez $'t' (ce dernier est meilleur comme vous pouvez le copier / coller).
Les outils standard pour correction du code source sont diff et patch . Voir aussi diffstat pour les statistiques sommaires d'un Diff et sdiff pour un diff de côte à côte. Remarque diff -r fonctionne pour des répertoires entiers. Utilisez diff -r tree1 tree2 | diffstat pour un résumé des changements. Utilisez vimdiff pour comparer et modifier des fichiers.
Pour les fichiers binaires, utilisez hd , hexdump ou xxd pour des vidages hexagonaux simples et bvi , hexedit ou biew pour l'édition binaire.
Aussi pour les fichiers binaires, strings (plus grep , etc.) vous permet de trouver des bits de texte.
Pour les diffs binaires (compression Delta), utilisez xdelta3 .
Pour convertir les encodages de texte, essayez iconv . Ou uconv pour une utilisation plus avancée; Il prend en charge certaines choses Unicode avancées. Par exemple:
# Displays hex codes or actual names of characters (useful for debugging):
uconv -f utf-8 -t utf-8 -x ' ::Any-Hex; ' < input.txt
uconv -f utf-8 -t utf-8 -x ' ::Any-Name; ' < input.txt
# Lowercase and removes all accents (by expanding and dropping them):
uconv -f utf-8 -t utf-8 -x ' ::Any-Lower; ::Any-NFD; [:Nonspacing Mark:] >; ::Any-NFC; ' < input.txt > output.txt Pour diviser les fichiers en morceaux, voir split (pour diviser par taille) et csplit (pour se séparer par un motif).
Date et heure: Pour obtenir la date et l'heure actuelles dans le format ISO 8601 utile, utilisez date -u +"%Y-%m-%dT%H:%M:%SZ" (les autres options sont problématiques). Pour manipuler les expressions de date et d'heure, utilisez dateadd , datediff , strptime etc. à partir de dateutils .
Utilisez zless , zmore , zcat et zgrep pour fonctionner sur des fichiers compressés.
Les attributs de fichiers sont établis via chattr et offrent une alternative de niveau inférieur aux autorisations de fichiers. Par exemple, pour protéger contre la suppression accidentelle des fichiers, l'indicateur immuable: sudo chattr +i /critical/directory/or/file
Utilisez getfacl et setfacl pour enregistrer et restaurer les autorisations de fichiers. Par exemple:
getfacl -R /some/path > permissions.txt
setfacl --restore=permissions.txttruncate (crée un fichier clairsemé), fallocate (EXT4, XFS, BTRFS et OCFS2 FileSystems), xfs_mkfile (presque tous les systèmes de fichiers, sont disponibles dans le package XFSProgs), mkfile (pour des systèmes de type UNIX comme Solaris, Mac OS). Pour le débogage Web, curl et curl -I sont pratiques, ou leurs équivalents wget , ou le httpie plus moderne.
Pour connaître le statut actuel du processeur / disque, les outils classiques sont top (ou le meilleur htop ), iostat et iotop . Utilisez iostat -mxz 15 pour le processeur de base et les statistiques de disque par partition détaillées et les informations sur les performances.
Pour les détails de la connexion réseau, utilisez netstat et ss .
Pour un aperçu rapide de ce qui se passe sur un système, dstat est particulièrement utile. Pour un aperçu le plus large avec des détails, utilisez glances .
Pour connaître l'état de la mémoire, exécutez et comprenez la sortie de free et vmstat . En particulier, sachez que la valeur "mise en cache" est la mémoire détenue par le noyau Linux en tant que cache de fichier, il compte donc efficacement la valeur "libre".
Le débogage du système Java est une marge de poisson différente, mais une simple astuce sur les Oracle et certains autres JVM est que vous pouvez exécuter kill -3 <pid> et un résumé de trace et de tas complet (y compris les détails de la collection de déchets générationnels, qui peuvent être très informatifs) seront jetés à Stderr / Logs. Le jps , jstat , jstack , jmap est utile. Les outils SJK sont plus avancés.
Utilisez mtr comme un meilleur traceroute pour identifier les problèmes de réseau.
Pour voir pourquoi un disque est plein, ncdu gagne du temps sur les commandes habituelles comme du -sh * .
Pour trouver la prise ou le processus utilise la bande passante, essayez iftop ou nethogs .
L'outil ab (est livré avec Apache) est utile pour la vérification rapide et difficile des performances du serveur Web. Pour des tests de charge plus complexes, essayez siege .
Pour un débogage de réseaux plus sérieux, wireshark , tshark ou ngrep .
Connaître strace et ltrace . Ceux-ci peuvent être utiles si un programme échoue, suspendra ou s'écrase, et que vous ne savez pas pourquoi, ou si vous voulez avoir une idée générale de performance. Notez l'option de profilage ( -c ) et la possibilité de se connecter à un processus en cours ( -p ). Utilisez l'option Trace Child ( -f ) pour éviter de manquer des appels importants.
Connaître ldd pour vérifier les bibliothèques partagées, etc. - mais ne l'exécutez jamais sur des fichiers non fiables.
Sachez comment se connecter à un processus en cours avec gdb et obtenir ses traces de pile.
Utilisation /proc . C'est incroyablement utile parfois lors du débogage des problèmes en direct. Exemples: /proc/cpuinfo , /proc/meminfo , /proc/cmdline , /proc/xxx/cwd , /proc/xxx/exe , /proc/xxx/fd/ , /proc/xxx/smaps (où xxx est l'ID de processus ou PID).
Lors du débogage de la raison pour laquelle quelque chose a mal tourné dans le passé, sar peut être très utile. Il montre des statistiques historiques sur le processeur, la mémoire, le réseau, etc.
Pour les systèmes plus profonds et les analyses de performances, regardez stap (SystemTap), perf et sysdig .
Vérifiez quel système d'exploitation vous êtes avec uname ou uname -a (Info General Unix / Kernel) ou lsb_release -a (Linux Distro Info).
Utilisez dmesg chaque fois que quelque chose agit vraiment drôle (il peut s'agir de problèmes matériels ou de pilotes).
Si vous supprimez un fichier et qu'il ne libére pas l'espace disque attendu comme indiqué par du , vérifiez si le fichier est utilisé par un processus: lsof | grep deleted | grep "filename-of-my-big-file"
Quelques exemples de commandes de rassemblement:
sort / uniq . Supposons que a et b soient des fichiers texte qui sont déjà uniques. Ceci est rapide et fonctionne sur des fichiers de taille arbitraire, jusqu'à de nombreux gigaoctets. (Le tri n'est pas limité par la mémoire, bien que vous puissiez utiliser l'option -T si /tmp est sur une petite partition racine.) Voir également la note sur LC_ALL CI-DESSUS ET OPTION DE sort -u (LORT DE LA CLACTITÉ CI-DESSOUS). sort a b | uniq > c # c is a union b
sort a b | uniq -d > c # c is a intersect b
sort a b b | uniq -u > c # c is set difference a - b diff <(jq --sort-keys . < file1.json) <(jq --sort-keys . < file2.json) | colordiff | less -R
Utilisez grep . * Pour examiner rapidement le contenu de tous les fichiers dans un répertoire (de sorte que chaque ligne est associée au nom de fichier), ou head -100 * (de sorte que chaque fichier a un titre). Cela peut être utile pour les répertoires remplis de paramètres de configuration comme ceux de /sys , /proc , /etc
Résumer tous les nombres dans la troisième colonne d'un fichier texte (c'est probablement 3x plus rapide et 3x moins de code que Python équivalent):
awk ' { x += $3 } END { print x } ' myfilels -l récursif mais est plus facile à lire que ls -lR : find . -type f -lsacct_id qui est présent dans l'URL. Si vous voulez un décompte du nombre de demandes pour chaque acct_id : egrep -o ' acct_id=[0-9]+ ' access.log | cut -d= -f2 | sort | uniq -c | sort -rn Pour surveiller en continu les modifications, utilisez watch , par exemple, vérifiez les modifications dans les fichiers dans un répertoire avec watch -d -n 2 'ls -rtlh | tail' ou paramètres réseau lors du dépannage de vos paramètres WiFi avec watch -d -n 2 ifconfig .
Exécutez cette fonction pour obtenir une astuce aléatoire de ce document (analyse Markdown et extrait un élément):
function taocl() {
curl -s https://raw.githubusercontent.com/jlevy/the-art-of-command-line/master/README.md |
sed ' /cowsay[.]png/d ' |
pandoc -f markdown -t html |
xmlstarlet fo --html --dropdtd |
xmlstarlet sel -t -v " (html/body/ul/li[count(p)>0])[ $RANDOM mod last()+1] " |
xmlstarlet unesc | fmt -80 | iconv -t US
} expr : Effectuer des opérations arithmétiques ou booléennes ou évaluer les expressions régulières
m4 : Macro Processeur simple
yes : imprimez beaucoup une chaîne
cal : Beau calendrier
env : Exécutez une commande (utile dans les scripts)
printenv : Imprimez des variables d'environnement (utile dans le débogage et les scripts)
look : Trouvez des mots en anglais (ou des lignes dans un fichier) commençant par une chaîne
cut , paste et join : manipulation de données
fmt : paragraphes de texte de format
pr : format le texte en pages / colonnes
fold : enveloppez les lignes de texte
column : Format des champs de texte dans des colonnes ou tables alignées à largeur fixe
expand et unexpand : convertir entre les onglets et les espaces
nl : Ajouter des numéros de ligne
seq : Numéros d'impression
bc : calculatrice
factor : facteurs entiers
gpg : crypte et signer des fichiers
toe : Tableau des entrées Terminfo
nc : débogage du réseau et transfert de données
socat : relais de socket et transfert de port TCP (similaire à netcat )
slurm : Visualisation du trafic réseau
dd : Déplacement des données entre les fichiers ou les appareils
file : identifier le type d'un fichier
tree : afficher les répertoires et les sous-répertoires comme un arbre de nidification; comme ls mais récursif
stat : Informations sur le fichier
time : exécuter et chronométrer une commande
timeout : Exécutez une commande pour une durée spécifiée et arrêtez le processus lorsque la durée spécifiée se termine.
lockfile : Créez un fichier sémaphore qui ne peut être supprimé que par rm -f
logrotate : Rotation, comprimez et par courrier.
watch : exécutez une commande à plusieurs reprises, en montrant les résultats et / ou en surlitant les modifications
when-changed : exécute n'importe quelle commande que vous spécifiez chaque fois qu'il voit le fichier modifié. Voir inotifywait et entr également.
tac : Imprimez les fichiers à l'envers
comm : Comparez les fichiers triés ligne par ligne
strings : extraire le texte des fichiers binaires
tr : Traduction ou manipulation du caractère
iconv ou uconv : conversion pour les encodages de texte
split et csplit : Fichiers de division
sponge : lisez toutes les entrées avant de l'écrire, utile pour lire à partir de là, écrivant dans le même fichier, par exemple, grep -v something some-file | sponge some-file
units : conversions et calculs unitaires; convertit les perlants par quinzaine en Twips par clignotement (voir aussi /usr/share/units/definitions.units )
apg : génère des mots de passe aléatoires
xz : compression de fichiers élevé
ldd : Informations sur la bibliothèque dynamique
nm : Symboles des fichiers d'objets
ab ou wrk : les serveurs Web d'analyse comparative
strace : débogage des appels système
mtr : Meilleur traceroute pour le débogage du réseau
cssh : Shell simultanée visuelle
rsync : SYNC Fichiers et dossiers sur SSH ou dans le système de fichiers local
wireshark et tshark : capture de paquets et débogage du réseau
ngrep : grep pour la couche réseau
host et dig : recherche DNS
lsof : le descripteur de fichiers de processus et les informations sur socket
dstat : statistiques système utiles
glances : Présentation de haut niveau, multi-subsystème
iostat : statistiques d'utilisation du disque
mpstat : statistiques d'utilisation du processeur
vmstat : statistiques d'utilisation de la mémoire
htop : version améliorée du top
last : History de connexion
w : qui est connecté
id : Informations sur l'identité utilisateur / groupe
sar : statistiques du système historique
iftop ou nethogs : utilisation du réseau par socket ou processus
ss : Statistiques de socket
dmesg : Messages d'erreur de démarrage et système
sysctl : afficher et configurer les paramètres du noyau Linux au moment de l'exécution
hdparm : manipulation / performance du disque SATA / ATA
lsblk : Liste des appareils de blocs: une vue d'arbre de vos disques et partitions de disque
lshw , lscpu , lspci , lsusb , dmidecode : informations matérielles, y compris le CPU, le BIOS, le raid, les graphiques, les appareils, etc.
lsmod et modinfo : listez et affichez les détails des modules de noyau.
fortune , ddate et sl : Um, eh bien, cela dépend si vous considérez les locomotives à vapeur et les citations zippy "utiles"
Ce sont des éléments pertinents uniquement sur macOS.
Gestion des packages avec brew (Homebrew) et / ou port (Macports). Ceux-ci peuvent être utilisés pour installer sur macOS de nombreuses commandes ci-dessus.
Copiez la sortie de n'importe quelle commande dans une application de bureau avec pbcopy et collez l'entrée de celle avec pbpaste .
Pour activer la touche d'option dans le terminal macOS en tant que touche ALT (comme celle utilisée dans les commandes ci-dessus comme Alt-B , Alt-F , etc.), ouvrez les préférences -> Profils -> Clavier et sélectionnez "Utiliser l'option comme méta-clé".
Pour ouvrir un fichier avec une application de bureau, utilisez open open -a /Applications/Whatever.app .
Spotlight: Recherchez des fichiers avec mdfind et répertoriez les métadonnées (telles que Photo Exif Info) avec mdls .
Soyez conscient que macOS est basé sur BSD UNIX, et de nombreuses commandes (par exemple ps , ls , tail , awk , sed ) ont de nombreuses variations subtiles de Linux, qui est largement influencée par les outils Unix et GNU de style V système V System. Vous pouvez souvent faire la différence en notant qu'une page homme a le titre "BSD General Commands Manual". Dans certains cas, les versions GNU peuvent également être installées (comme gawk et gsed pour GNU AWK et SED). Si vous rédigez des scripts de bash de plate-forme multiplate, évitez ces commandes (par exemple, envisagez Python ou perl ) ou testez attentivement.
Pour obtenir des informations de publication de macOS, utilisez sw_vers .
Ces éléments sont pertinents uniquement sur Windows.
Accédez à la puissance du shell Unix sous Microsoft Windows en installant Cygwin. La plupart des choses décrites dans ce document fonctionneront hors de la boîte.
Sur Windows 10, vous pouvez utiliser le sous-système Windows pour Linux (WSL), qui fournit un environnement de bash familier avec les utilitaires de ligne de commande UNIX.
Si vous souhaitez principalement utiliser les outils de développeur GNU (tels que GCC) sur Windows, considérez Mingw et son package MSYS, qui fournit des services publics tels que Bash, GAWK, Make et Grep. MSYS n'a pas toutes les fonctionnalités par rapport à Cygwin. Mingw est particulièrement utile pour créer des ports Windows natifs d'outils UNIX.
Une autre option pour obtenir un apparence Unix sous Windows est de l'argent. Notez que seulement très peu de commandes UNIX et d'options de ligne de commande sont disponibles dans cet environnement.
Vous pouvez effectuer et scripter la plupart des tâches d'administration du système Windows à partir de la ligne de commande en apprenant et en utilisant wmic .
Outils de réseautage Windows en ligne de commande natifs que vous pouvez trouver utile, notamment ping , ipconfig , tracert et netstat .
Vous pouvez effectuer de nombreuses tâches Windows utiles en invoquant la commande Rundll32 .
Installez des programmes UNIX supplémentaires avec le gestionnaire de packages de Cygwin.
Utilisez mintty comme fenêtre de ligne de commande.
Accédez au Presse-papiers Windows via /dev/clipboard .
Exécutez cygstart pour ouvrir un fichier arbitraire via sa demande enregistrée.
Access the Windows registry with regtool .
Note that a C: Windows drive path becomes /cygdrive/c under Cygwin, and that Cygwin's / appears under C:cygwin on Windows. Convert between Cygwin and Windows-style file paths with cygpath . This is most useful in scripts that invoke Windows programs.
With the exception of very small tasks, code is written so others can read it. With power comes responsibility. The fact you can do something in Bash doesn't necessarily mean you should! ;)
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.