? Čeština ∙ Deutsch ∙ Ελληνικά ∙ English ∙ Español ∙ Français ∙ Indonesia ∙ Italiano ∙ 日本語 ∙ 한국어 ∙ polski ∙ Português ∙ Română ∙ Русский ∙ Slovenščina ∙ Українська ∙ 简体中文 ∙ 繁體中文
Hinweis: Ich habe vor, dies zu überarbeiten und nach einem neuen Co-Autor zu suchen, um dies in einen umfassenderen Leitfaden auszubauen. Obwohl es sehr beliebt ist, könnte es breiter und etwas tiefer sein. Wenn Sie gerne schreiben und kurz davor sind, ein Experte für dieses Material zu sein und zu überlegen, helfen Sie mir bei Josh (0x40) Holloway.com eine Notiz. –JLEVY, Holloway. Danke schön!

Die Fließfähigkeit in der Befehlszeile ist eine Fähigkeit, die häufig vernachlässigt oder als arkan betrachtet wird, aber sie verbessert Ihre Flexibilität und Produktivität als Ingenieur sowohl auf offensichtliche als auch auf subtile Weise. Dies ist eine Auswahl von Notizen und Tipps zur Verwendung der Befehlszeile, die wir bei der Arbeit unter Linux als nützlich empfunden haben. Einige Tipps sind elementar und einige sind ziemlich spezifisch, raffiniert oder dunkel. Diese Seite ist nicht lang, aber wenn Sie alle Elemente hier verwenden und sich erinnern können, wissen Sie viel.
Diese Arbeit ist das Ergebnis vieler Autoren und Übersetzer. Einige davon erschienen ursprünglich in Quora, aber seitdem ist es nach Github gezogen, wo Menschen talentierter als der ursprüngliche Autor zahlreiche Verbesserungen vorgenommen haben. Bitte geben Sie eine Frage ein , wenn Sie eine Frage in Bezug auf die Befehlszeile haben. Bitte tragen Sie bei, wenn Sie einen Fehler oder etwas sehen, das besser sein könnte!
Umfang:
Anmerkungen:
apt , yum , dnf , pacman , pip oder brew (gegebenenfalls), um neue Programme zu installieren. Lernen Sie grundlegende Bash. Tatsächlich tippen Sie man bash und zumindest das Ganze überfliegen; Es ist ziemlich einfach zu folgen und nicht so lange. Alternative Muscheln können schön sein, aber Bash ist leistungsstark und immer verfügbar ( nur ZSH, Fisch usw. lernen und gleichzeitig auf Ihrem eigenen Laptop verlockend sind, beschränken Sie in vielen Situationen, z. B. vorhandenen Servern).
Lernen Sie mindestens einen textbasierten Editor gut. Der nano -Editor ist einer der einfachsten für die grundlegende Bearbeitung (Öffnen, Bearbeiten, Speichern, Suche). Für den Power-Benutzer in einem Textterminal gibt es jedoch keinen Ersatz für VIM ( vi ), den schwer zu larnenden, aber ehrwürdigen, schnellen und vollständigen Herausgeber. Viele Menschen verwenden auch die klassischen EMACs, insbesondere für größere Bearbeitungsaufgaben. (Natürlich ist es unwahrscheinlich, dass jeder moderne Softwareentwickler, der an einem umfangreichen Projekt arbeitet, nur einen reinen textbasierten Editor verwendet und auch mit modernen grafischen IDes und Tools vertraut sein sollte.)
Dokumentation finden:
man liest (für den Neugier, man man listet die Abschnittsnummern auf, z. B. ist "reguläre" Befehle, 5 sind Dateien/Konventionen und 8 für die Verwaltung). Finden Sie Mannseiten mit apropos .help und help -d von ihnen Hilfe erhalten können. Sie können herausfinden, ob ein Befehl eine ausführbare Datei, Shell integriert ist, oder einen Alias mit type command .curl cheat.sh/command gibt ein kurzes "Cheat Sheet" mit gemeinsamen Beispielen für die Verwendung eines Shell -Befehls. Erfahren Sie mehr über die Umleitung von Ausgang und Eingabe mit > und < und Pipes mit | . Kennen > Überschreibt die Ausgabedatei und >> addiert. Erfahren Sie mehr über Stdout und Stderr.
Erfahren Sie mehr über die Dateikugel -Erweiterung mit * (und vielleicht ? Und [ ... ] ) und Zitieren und den Unterschied zwischen Doppel- und ' " . (Weitere Informationen zur variablen Erweiterung unten.)
Seien Sie mit Bash Job Management vertraut: & , Strg-Z , Strg-C , jobs , fg , bg , kill usw.
Kennen Sie ssh und die Grundlagen der passwortlosen Authentifizierung über ssh-agent , ssh-add usw.
Grundlegende Dateiverwaltung: ls und ls -l (insbesondere lernen Sie, was jede Spalte in ls -l bedeutet), less , head , tail und tail -f (oder noch besser, less +F ), ln und ln -s (Lernen Sie die Unterschiede und Vorteile von Hard gegen Soft Links), chown , chmod , du (für eine Quick -Zusammenfassung der Disk Usage: du -hs * ). Für die Dateisystemverwaltung, df , mount , fdisk , mkfs , lsblk . Erfahren Sie, was ein Inode ist ( ls -i oder df -i ).
Grundlegende Netzwerkverwaltung: ip oder ifconfig , dig , traceroute , route .
Lernen und verwenden Sie ein Versionskontrollmanagementsystem wie git .
Kennen Sie regelmäßige Ausdrücke gut und die verschiedenen Flaggen zu grep / egrep . Die Optionen -i , -o , -v , -A , -B und -C -Optionen sind wissenswert.
Lernen Sie, apt-get , yum , dnf oder pacman (je nach Distribution) zu verwenden, um Pakete zu finden und zu installieren. Und stellen Sie sicher, dass Sie pip haben, um Python-basierte Befehlszeilen-Tools zu installieren (einige unten sind die am einfachsten zu installieren über pip ).
Verwenden Sie in Bash die Registerkarte , um Argumente zu vervollständigen oder alle verfügbaren Befehle und STRL-R aufzulisten, um den Befehlsverlauf zu durchsuchen (Drücken Sie nach dem Drücken der Suche nach Such, drücken Sie STRL-R wiederholt, um durch weitere Übereinstimmungen durchzuführen, drücken Sie die Eingabetaste , um den Befehl gefunden zu haben, oder drücken Sie den richtigen Pfeil, um das Ergebnis in die aktuelle Zeile für die Bearbeitung zu ermöglichen).
Verwenden Sie in Bash Strg-W , um das letzte Wort zu löschen, und Strg-U, um den Inhalt vom aktuellen Cursor zum Start der Zeile zurück zu löschen. Verwenden Sie Alt-B und Alt-F , um sich nach Word, Strg-A zu bewegen, um den Cursor auf den Beginn der Linie zu verschieben, Strg-E , um den Cursor auf das Ende der Linie zu bewegen, Strg-k, um sie bis zum Ende der Linie zu töten, Strg-L, um den Bildschirm zu löschen. Siehe man readline für alle Standard -Schlüsselbindungen in Bash. Es gibt viel. Zum Beispiel Alt-. Fahrt frühere Argumente durch und erweitert einen Globus.
Wenn Sie die Schlüsselbindungen im Stil von VI -Stil lieben, verwenden Sie alternativ set -o vi (und set -o emacs , um es zurückzugeben).
Für die Bearbeitung von Long-Befehlen öffnet Strg-X Ctrl-E nach dem Einstellen Ihres Editors (zum Beispiel export EDITOR=vim ) den aktuellen Befehl in einem Editor für die Multi-Line-Bearbeitung. Oder im vi-Stil, Escape-V .
Um die jüngsten Befehle zu sehen, verwenden Sie history . Folgen Sie !n (wobei n die Befehlsnummer ist) erneut auszuführen. Es gibt auch viele Abkürzungen, die Sie verwenden können, das nützlichste wahrscheinlich !$ Für das letzte Argument und !! Für den letzten Befehl (siehe "History Expansion" in der Mannseite). Diese sind jedoch oft leicht durch Strg-R und Alt- ersetzt. .
Gehen Sie mit cd in Ihr Heimverzeichnis. Greifen Sie mit dem ~ Präfix (z. B. ~/.bashrc ) auf Dateien zu Ihrem Home -Verzeichnis zu. In sh -Skripten bezeichnen das Home Directory als $HOME .
Um zum vorherigen Arbeitsverzeichnis zurückzukehren: cd - .
Wenn Sie zur Hälfte des Eingebens eines Befehls sind, aber Ihre Meinung ändern, klicken Sie auf Alt- # , um am Anfang ein # hinzuzufügen und ihn als Kommentar einzugeben (oder verwenden Sie Strg-A , # , geben Sie ein . Sie können dann später über den Befehlsgeschichte dorthin zurückkehren.
Verwenden Sie xargs (oder parallel ). Es ist sehr mächtig. Beachten Sie, dass Sie steuern können, wie viele Elemente pro Zeile ( -L ) sowie Parallelität ( -P ) ausgeführt werden. Wenn Sie sich nicht sicher sind, ob es das Richtige tut, verwenden Sie zuerst xargs echo . Auch -I{} ist praktisch. Beispiele:
find . -name ' *.py ' | xargs grep some_function
cat hosts | xargs -I{} ssh root@{} hostname pstree -p ist eine hilfreiche Anzeige des Prozessbaums.
Verwenden Sie pgrep und pkill um Prozesse mit Namen zu finden oder zu signalisieren ( -f ist hilfreich).
Kennen Sie die verschiedenen Signale, die Sie Prozesse senden können. Verwenden Sie zum Beispiel, um einen Prozess auszusetzen, um kill -STOP [pid] zu verwenden. Für die vollständige Liste siehe man 7 signal
Verwenden Sie nohup oder disown , wenn Sie einen Hintergrundprozess für immer laufen möchten.
Überprüfen Sie, welche Prozesse über netstat -lntp oder ss -plat (für TCP; -u für UDP hinzufügen) oder lsof -iTCP -sTCP:LISTEN -P -n (welche auch auf macOS funktioniert).
Siehe auch lsof und fuser für offene Sockets und Dateien.
Sehen uptime w wie lange das System ausgeführt wird.
Verwenden Sie alias , um Verknüpfungen für häufig verwendete Befehle zu erstellen. Zum Beispiel erzeugt alias ll='ls -latr' eine neue alias ll .
Speichern Sie Aliase, Shell -Einstellungen und Funktionen, die Sie üblicherweise in ~/.bashrc verwenden, und ordnen Sie an, dass Anmeldeschalen sie beschaffen. Dadurch wird Ihr Setup in all Ihren Shell -Sitzungen verfügbar.
Setzen Sie die Einstellungen von Umgebungsvariablen sowie Befehle ein, die ausgeführt werden sollten, wenn Sie sich in ~/.bash_profile anmelden. Für Shells, die Sie aus grafischen Umgebungsanmeldungen und cron -Jobs starten, werden separate Konfigurationen benötigt.
Synchronisieren Sie Ihre Konfigurationsdateien (z. B. .bashrc und .bash_profile ) zwischen verschiedenen Computern mit Git.
Verstehen Sie, dass Pflege erforderlich ist, wenn Variablen und Dateinamen Whitespace enthalten. Umgeben Sie Ihre Bash -Variablen mit Zitaten, z. B. "$FOO" . Bevorzugen Sie die Optionen -0 oder -print0 -Optionen, um Nullzeichen zu ermöglichen, um Dateinamen abzugrenzen locate -0 pattern | xargs -0 ls -al oder find / -print0 -type d | xargs -0 ls -al . Um auf Dateinamen mit Whitespace in a for Loop zu iterieren, stellen Sie Ihre IFS so ein, dass Sie nur mit IFS=$'n' eine neue Linie haben.
Verwenden Sie in Bash -Skripten set -x (oder den Varianten set -v , der die RAW -Eingaben abzeichnet, einschließlich nicht vervollständigter Variablen und Kommentare) zum Debuggenausgang. Verwenden Sie strenge Modi, es sei denn, Sie haben einen guten Grund, nicht: set -e zu verwenden, um auf Fehler abzubrechen (Code von ungleich Null). Verwenden Sie set -u um nicht festgelegte variable Verwendungen zu erkennen. Betrachten Sie auch set -o pipefail , um Fehler in Rohren abzubrechen (wenn Sie dies tun, da dieses Thema etwas subtil ist). Für weitere involvierte Skripte verwenden Sie auch trap für Exit oder ERR. Eine nützliche Angewohnheit ist es, ein solches Skript zu starten, wodurch es auf gemeinsame Fehler erfasst und abbricht und eine Nachricht druckt:
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 Beachten Sie in Bash, es gibt viele Arten von variabler Expansion. Überprüfen einer Variablen existiert: ${name:?error message} . Wenn beispielsweise ein Bash -Skript ein einzelnes Argument erfordert, schreiben Sie einfach input_file=${1:?usage: $0 input_file} . Verwenden eines Standardwerts, wenn eine Variable leer ist: ${name:-default} . Wenn Sie einem zusätzlichen (optionalen) Parameter zum vorherigen Beispiel hinzugefügt haben, können Sie so etwas wie output_file=${2:-logfile} verwenden. Wenn $2 weggelassen und so leer wird, wird output_file auf logfile eingestellt. Arithmetische Expansion: i=$(( (i + 1) % 5 )) . Sequenzen: {1..10} . Trimmen von Strings: ${var%suffix} und ${var#prefix} . Zum Beispiel, wenn var=foo.pdf , dann echo ${var%.pdf}.txt druckt foo.txt aus.
Die Ausdehnung der Klammer mit { ... } kann reduzieren, um ähnlichen Text neu zu typern und Kombinationen von Elementen zu automatisieren. Dies ist in Beispielen wie mv foo.{txt,pdf} some-dir (die beide Dateien verschiebt), cp somefile{,.bak} (was sich auf cp somefile somefile.bak ) oder mkdir -p test-{a,b,c}/subtest-{1,2,3} (was sich auf alle möglichen Mähungen auszieht, und A-Direktorien {1,2,3} (was möglich). Die Ausdehnung der Klammer wird vor einer anderen Expansion durchgeführt.
Die Reihenfolge der Erweiterungen lautet: Ausdehnung der Klammer; Tilde-Expansion, Parameter und variable Expansion, arithmetische Expansion und Befehlssubstitution (links nach rechts); Wortaufteilung; und Dateiname Expansion. (Zum Beispiel kann ein Bereich wie {1..20} nicht mit Variablen mit {$a..$b} ausgedrückt werden. Verwenden Sie stattdessen seq oder A for Loop, z. B. seq $a $b oder for((i=a; i<=b; i++)); do ... ; done
Die Ausgabe eines Befehls kann wie eine Datei über <(some command) behandelt werden (als Prozessersubstitution bezeichnet). Vergleichen Sie beispielsweise lokale /etc/hosts mit einem abgelegenen:
diff /etc/hosts <( ssh somehost cat /etc/hosts ){
# Your code here
} cat <<EOF
input
on multiple lines
EOF
In Bash sowohl die Standardausgabe als auch den Standardfehler über: some-command >logfile 2>&1 oder some-command &>logfile umleiten. Um sicherzustellen, dass ein Befehl kein geöffnetes Dateihandle für die Standardeingabe lässt und ihn an das Terminal zusammenbindet, in dem Sie sich befinden, ist es auch eine gute Praxis, </dev/null hinzuzufügen.
Verwenden Sie man ascii für eine gute ASCII -Tabelle mit Hex- und Dezimalwerten. Für allgemeine Codierungsinformationen sind man unicode , man utf-8 und man latin1 hilfreich.
Verwenden Sie screen oder tmux um den Bildschirm zu multiplexen, insbesondere nützlich bei Remote-SSH-Sitzungen und um eine Sitzung zu lösen und wieder einzusteigen. byobu kann den Bildschirm oder TMUX verbessern, indem er mehr Informationen und einfacheres Management bereitstellt. Eine minimalere Alternative für die Sitzungspannung ist nur dtach .
In SSH ist es nützlich, zu wissen, wie man Tunnel mit -L oder -D (und gelegentlich -R ) portiert.
Es kann nützlich sein, ein paar Optimierungen für Ihre SSH -Konfiguration vorzunehmen. Beispielsweise enthält diese ~/.ssh/config Einstellungen, um fallengelassene Verbindungen in bestimmten Netzwerkumgebungen zu vermeiden, die Komprimierung (was bei SCP über Verbindungen mit niedriger Bandbreite hilfreich ist) und Multiplex-Kanäle auf denselben Server mit einer lokalen Steuerdatei:
TCPKeepAlive=yes
ServerAliveInterval=15
ServerAliveCountMax=6
Compression=yes
ControlMaster auto
ControlPath /tmp/%r@%h:%p
ControlPersist yes
Einige andere Optionen, die für SSH relevant sind StrictHostKeyChecking=no sind sicherheitssensitiv und sollten durch Pflege, z ForwardAgent=yes
Betrachten Sie mosh als Alternative zu SSH, die UDP verwendet, abgelassene Verbindungen vermeiden und auf der Straße bequeme Einstellungen hinzufügen (erfordert das serverseitige Setup).
ls Sie so etwas wie
stat -c ' %A %a %n ' /etc/timezone Verwenden Sie für die interaktive Auswahl von Werten aus der Ausgabe eines anderen Befehls percol oder fzf .
Verwenden Sie für die Interaktion mit Dateien basierend auf der Ausgabe eines anderen Befehls (wie git ) fpp (Pathpicker).
Verwenden Sie für einen einfachen Webserver für alle Dateien im aktuellen Verzeichnis (und Subdirs), die jedem in Ihrem Netzwerk verfügbar sind: python -m SimpleHTTPServer 7777 (für Port 7777 und Python 2) und python -m http.server 7777 (für Port 7777 und Python 3).
Verwenden Sie sudo , um einen Befehl als einen anderen Benutzer auszuführen. Standardmäßig als root ausfällt; Verwenden Sie -u , um einen anderen Benutzer anzugeben. Verwenden Sie -i , um sich als Benutzer anzumelden (Sie werden nach Ihrem Passwort gefragt).
Verwenden Sie zum Umschalten der Shell auf einen anderen Benutzer su username oder su - username . Letzteres mit "-" erhält eine Umgebung, als ob ein anderer Benutzer gerade eingeloggt worden wäre. Durch die Auslassung des Benutzernamens standardmäßig root. Sie werden nach dem Passwort des Benutzer gefragt, auf den Sie wechseln .
Bescheid über die 128K -Grenze für Befehlszeilen. Dieser Fehler "Argumentliste zu lang" ist üblich, wenn der Wildcard eine große Anzahl von Dateien entspricht. (Wenn dies Alternativen wie find und xargs geschieht, können dies helfen.)
Verwenden Sie für einen Basisrechner (und natürlich den Zugang zu Python im Allgemeinen) den python -Dolmetscher. Zum Beispiel,
>>> 2+3
5
Um eine Datei mit Namen im aktuellen Verzeichnis zu finden, find . -iname '*something*' (oder ähnlich). Um eine Datei überall mit dem Namen zu finden, verwenden Sie locate something (denken Sie daran, updatedb , dass kürzlich erstellte Dateien möglicherweise nicht indiziert wurde).
Für die allgemeine Suche durch Quell- oder Datendateien gibt es mehrere Optionen erweiterter oder schneller als grep -r , einschließlich (in groben Reihenfolge von älter bis neuer) ack , ag ("The Silver Secker") und rg (RIPGREP).
Um HTML in Text umzuwandeln: lynx -dump -stdin
Für Markdown, HTML und alle Arten von Dokumentenkonvertierung versuchen Sie es pandoc . Zum Beispiel um ein Markdown -Dokument in das Word -Format umzuwandeln: pandoc README.md --from markdown --to docx -o temp.docx
Wenn Sie mit XML umgehen müssen, ist xmlstarlet alt, aber gut.
Verwenden Sie für JSON jq . Zur interaktiven Verwendung siehe auch jid und jiq .
Verwenden Sie für Yaml shyaml .
Für Excel- oder CSV -Dateien bietet CSVKIT in2csv , csvcut , csvjoin , csvgrep usw.
Für Amazon S3 ist s3cmd bequem und s4cmd schneller. aws und die verbesserten saws von Amazon sind für andere AWS-bezogene Aufgaben von wesentlicher Bedeutung.
Informieren Sie sich über sort und uniq , einschließlich der Optionen für -u und -d -UNIQ -siehe 1 -Liner unten. Siehe auch comm .
Beachten Sie über cut , paste und join , um Textdateien zu manipulieren. Viele Menschen verwenden cut , vergessen aber die join .
Bescheid über wc , um Newlines ( -l ), Zeichen ( -m ), Wörter ( -w ) und Bytes ( -c ) zu zählen.
Kennt man über tee , um von Stdin in eine Datei zu kopieren und auch nach Stdout zu kopieren, wie in ls -al | tee file.txt .
Für komplexere Berechnungen, einschließlich Gruppierung, Umkehrungsfelder und statistischer Berechnungen, sollten Sie datamash berücksichtigen.
Wissen Sie, dass das Gebietsschema auf subtile Weise viele Befehlszeilen -Tools betrifft, einschließlich Sortierreihenfolge (Zusammenstellung) und Leistung. Die meisten Linux -Installationen setzen LANG oder andere Gebietsschema -Variablen auf eine lokale Einstellung wie uns Englisch. Aber seien Sie sich bewusst, dass sich die Sortierung ändert, wenn Sie sich das Gebietsschema wechseln. Und wissen Sie, dass I18N -Routinen Sortier oder andere Befehle um ein Vielfaches langsamer laufen lassen können. In einigen Situationen (z. B. den folgenden Einzigartigkeitsvorgängen) können Sie langsame I18N-Routinen vollständig ignorieren und die traditionelle Byt-basierte Sortierreihenfolge unter Verwendung von export LC_ALL=C verwenden.
Sie können die Umgebung eines bestimmten Befehls festlegen, indem Sie seinen Aufruf mit den Umgebungsvariableneinstellungen wie nach TZ=Pacific/Fiji date vorfixieren.
Kennen Sie Basic awk und sed für einfache Datenmunding. Beispiele finden Sie unter Einzel: Beispiele.
So ersetzen Sie alle Vorkommen einer Zeichenfolge in einer oder mehreren Dateien:
perl -pi.bak -e ' s/old-string/new-string/g ' my-files- * .txtrepren . (In einigen Fällen ermöglicht der Befehl rename auch mehrere Umbenennen, aber seien Sie vorsichtig, da seine Funktionalität bei allen Linux -Verteilungen nicht gleich ist.) # 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 wirklich ein schnelles und außerordentlich vielseitiges Dateikopierwerkzeug. Es ist für die Synchronisierung zwischen Maschinen bekannt, ist jedoch lokal gleichermaßen nützlich. Wenn Sicherheitsbeschränkungen dies zulassen, ermöglicht die Verwendung von rsync anstelle von scp die Wiederherstellung einer Übertragung, ohne von Grund auf neu zu starten. Es gehört auch zu den schnellsten Möglichkeiten, um eine große Anzahl von Dateien zu löschen: mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir Verwenden Sie zur Überwachung des Fortschritts bei der Verarbeitung von Dateien pv , pycp , pmonitor , progress , rsync --progress , oder, für das Kopieren von Blockebene, dd status=progress .
Verwenden Sie shuf , um zufällige Zeilen aus einer Datei zu mischen oder auszuwählen.
Kennen Sie die Optionen von sort . Verwenden Sie für Zahlen -n oder -h für die Umgang mit menschlich -lesbaren Zahlen (z. B. von du -h ). Wissen Sie, wie Tasten funktionieren ( -t und -k ). Beachten Sie insbesondere, dass Sie -k1,1 schreiben müssen, um nur nach dem ersten Feld zu sortieren. -k1 bedeutet Sortier nach der gesamten Linie. Stabile Sortierung ( sort -s ) kann nützlich sein. Zum Beispiel können Sie zum ersten Mal nach Feld 2 sortieren, dann sekundär nach Feld 1, sort -k1,1 | sort -s -k2,2 .
Wenn Sie jemals eine Registerkarte in einer Befehlszeile in Bash schreiben müssen (z. B. für das Sortieren des -t -Arguments), drücken Sie Strg -V [Tab] oder schreiben Sie $'t' (letzteres ist besser, da Sie sie kopieren/einfügen können).
Die Standard -Tools zum Patch -Quellcode sind diff und patch . Siehe auch diffstat für zusammenfassende Statistiken eines Differnen und sdiff für einen Side-by-Side-Diff. Hinweis diff -r funktioniert für ganze Verzeichnisse. Verwenden Sie diff -r tree1 tree2 | diffstat für eine Zusammenfassung der Änderungen. Verwenden Sie vimdiff , um Dateien zu vergleichen und zu bearbeiten.
Verwenden Sie für binäre Dateien hd , hexdump oder xxd für einfache Hex -Dumps und bvi , hexedit oder biew für binäre Bearbeitung.
Mit Binärdateien können Sie auch für strings (plus grep usw.) Textbits finden.
Verwenden Sie für binäre Diffs (Delta -Komprimierung) xdelta3 .
Versuchen Sie iconv , um Textcodierungen zu konvertieren. Oder uconv für fortgeschrittenere Verwendung; Es unterstützt einige erweiterte Unicode -Dinge. Zum Beispiel:
# 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 Um Dateien in Stücke aufzuteilen, siehe split (nach Größe aufgeteilt) und csplit (um durch ein Muster aufgeteilt).
Datum und Uhrzeit: Um das aktuelle Datum und die aktuelle Uhrzeit im hilfreichen ISO 8601-Format zu erhalten, verwenden Sie date -u +"%Y-%m-%dT%H:%M:%SZ" (andere Optionen sind problematisch). Verwenden Sie Datum und Zeitausdrücke, um dateadd , datediff , strptime usw. von dateutils zu verwenden.
Verwenden Sie zless , zmore , zcat und zgrep , um komprimierte Dateien zu betreiben.
Dateiattribute sind über chattr und eine Alternative auf niedrigerer Ebene zu Dateiberechtigungen anbieten. Zum Beispiel zum Schutz vor versehentlicher Datei Löschung das unveränderliche Flag: sudo chattr +i /critical/directory/or/file
Verwenden Sie getfacl und setfacl um Dateiberechtigungen zu speichern und wiederherzustellen. Zum Beispiel:
getfacl -R /some/path > permissions.txt
setfacl --restore=permissions.txttruncate (erstellt spärliche Datei), fallocate (ext4, xfs, btrfs und ocfs2-Dateisysteme), xfs_mkfile (fast alle Dateisysteme sind in XFSPROGS-Paket), mkfile (für Unix-like-Systeme wie Solaris, Mac OS). Für Web -Debugging sind curl und curl -I praktisch oder deren wget -Äquivalente oder die modernere httpie .
Um den aktuellen CPU/Disk -Status zu kennen, sind die klassischen Tools top (oder das bessere htop ), iostat und iotop . Verwenden Sie iostat -mxz 15 für Basic CPU und detaillierte Diskettenstatistiken und Leistungseinblicke pro Tag.
Für Netzwerkverbindungsdetails verwenden Sie netstat und ss .
Für einen kurzen Überblick über das, was auf einem System passiert, ist dstat besonders nützlich. Für den breitesten Überblick mit Details verwenden Sie glances .
Um den Speicherstatus zu kennen, führen Sie die Ausgabe von free und vmstat aus und verstehen Sie. Beachten Sie insbesondere, dass der "zwischengespeicherte" Wert des Linux -Kernels als Datei -Cache Speicher wird und so effektiv zum "freien" Wert zählt.
Das Debuggen von Java -Systemen ist ein anderer Fischkessel, aber ein einfacher Trick bei Oracle und einigen anderen JVMs ist, dass Sie kill -3 <pid> und eine vollständige Stapelspur- und Haufenszusammenfassung (einschließlich Details zur Sammlung von Generationen Müll, die sehr informativ sein können) aus Stderr/Logs ausgeführt werden können. Die jps , jstat , jstack , jmap des JPS sind nützlich. SJK -Tools sind fortgeschrittener.
Verwenden Sie mtr als bessere Traceroute, um Netzwerkprobleme zu identifizieren.
Um sich zu befassen, warum eine Festplatte voll ist, spart ncdu Zeit für die üblichen Befehle wie du -sh * .
Versuchen Sie iftop oder nethogs , um herauszufinden, welcher Socket oder Prozess Bandbreite verwendet.
Das ab -Tool (mit Apache ausgestattet) ist hilfreich für die schnelle und schrägliche Überprüfung der Leistung des Webservers. Für komplexere Lasttests versuchen Sie siege .
Für ernsthafteres Netzwerkdebuggen, wireshark , tshark oder ngrep .
Bescheid über strace und ltrace . Diese können hilfreich sein, wenn ein Programm fehlschlägt, hängt oder abstürzt, und Sie wissen nicht warum oder wenn Sie eine allgemeine Vorstellung von der Leistung bekommen möchten. Beachten Sie die Profilerstellungsoption ( -c ) und die Möglichkeit, sich an einen Laufprozess ( -p ) anzubringen. Verwenden Sie die Trace Child Option ( -f ), um fehlende wichtige Anrufe zu vermeiden.
KNOW OFD ldd , um freigegebene Bibliotheken usw. zu überprüfen - führen Sie sie jedoch niemals auf nicht vertrauenswürdigen Dateien aus.
Wissen Sie, wie Sie mit gdb eine Verbindung zu einem Laufprozess herstellen und seine Stapelspuren erhalten.
Verwendung /proc . Es ist manchmal erstaunlich hilfreich, wenn Live -Probleme debuggen. Beispiele: /proc/cpuinfo , /proc/meminfo , /proc/cmdline , /proc/xxx/cwd , /proc/xxx/exe , /proc/xxx/fd/ , /proc/xxx/smaps (wobei xxx die Prozess -ID oder PID ist).
Beim Debuggen, warum in der Vergangenheit etwas schief gelaufen ist, kann sar sehr hilfreich sein. Es zeigt historische Statistiken zu CPU, Speicher, Netzwerk usw.
Sehen Sie sich bei tieferen Systemen und Leistungsanalysen stap (SystemTAP), perf und sysdig an.
Überprüfen Sie, welches Betriebssystem Sie mit uname oder uname -a (General Unix/Kernel Info) oder lsb_release -a (Linux -Distro -Info) sind.
Verwenden Sie dmesg , wenn etwas wirklich lustig handelt (es kann Hardware- oder Treiberprobleme sein).
Wenn Sie eine Datei löschen und nicht von du den erwarteten Speicherplatz freilegen, überprüfen Sie, ob die Datei mit einem Prozess verwendet wird: lsof | grep deleted | grep "filename-of-my-big-file"
Ein paar Beispiele für die Zusammensetzung von Befehlen:
sort / uniq festlegen können. Angenommen, a und b sind Textdateien, die bereits einig sind. Dies ist schnell und funktioniert bis zu vielen Gigabyte mit willkürlichen Größe. (Sortierung ist nicht durch den Speicher begrenzt. Möglicherweise müssen Sie möglicherweise die Option -T verwenden, wenn /tmp auf einer kleinen Stammpartition liegt.) Siehe auch den Hinweis zu LC_ALL oben und sort die Option -u (ausgelassen für Klarheit unten). 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
Verwenden Sie grep . * Um den Inhalt aller Dateien in einem Verzeichnis schnell zu untersuchen (so dass jede Zeile mit dem Dateinamen gepaart wird) oder head -100 * (so dass jede Datei eine Überschrift hat). Dies kann für Verzeichnisse nützlich sein, die mit Konfigurationseinstellungen wie denen /sys , /proc , /etc . gefüllt sind.
Summieren Sie alle Zahlen in der dritten Spalte einer Textdatei (dies ist wahrscheinlich 3x schneller und 3x weniger Code als äquivalente Python):
awk ' { x += $3 } END { print x } ' myfilels -l , ist jedoch leichter zu lesen als ls -lR : find . -type f -lsacct_id -Parameter, der in der URL vorhanden ist. Wenn Sie eine Bilanz haben möchten, wie viele Anfragen für jede acct_id : egrep -o ' acct_id=[0-9]+ ' access.log | cut -d= -f2 | sort | uniq -c | sort -rn Um Änderungen kontinuierlich zu überwachen, verwenden Sie watch , z. B. Änderungen der Dateien in einem Verzeichnis mit watch -d -n 2 'ls -rtlh | tail' oder zu Netzwerkeinstellungen, während Sie Ihre WLAN -Einstellungen mit watch -d -n 2 ifconfig beheben.
Führen Sie diese Funktion aus, um einen zufälligen Tipp aus diesem Dokument abzurufen (Parse Markdown und extrahiert ein Element):
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 .: Führen Sie Arithmetik- oder Boolesche Operationen durch oder bewerten Sie regelmäßige Ausdrücke
m4 : Einfacher Makroprozessor
yes : Drucken Sie viel eine Zeichenfolge aus
cal : Netter Kalender
env : Führen Sie einen Befehl aus (nützlich in Skripten)
printenv : Umgebungsvariablen ausdrucken (nützlich bei Debugging und Skripten)
look : Suchen Sie englische Wörter (oder Zeilen in einer Datei), beginnend mit einer Zeichenfolge
cut , paste und join : Datenmanipulation
fmt : Format Textabsätze
pr : Formattext in Seiten/Spalten formatieren
fold : Wickeln von Textzeilen
column : Formattextfelder in ausgerichtete Spalten oder Tabellen mit fester Breite
expand und unexpand : Konvertieren Sie zwischen Registerkarten und Räumen
nl : Zeilennummern hinzufügen
seq : Drucknummern
bc : Taschenrechner
factor : Faktor -Ganzzahlen
gpg : Verschlüsseln und Zeichendateien
toe : Tabelle der Terminfo -Einträge
nc : Netzwerkdebugging und Datenübertragung
socat : Socket Relay und TCP Port Spediteur (ähnlich wie bei netcat )
slurm : Netzwerkverkehrsvisualisierung
dd : Verschieben von Daten zwischen Dateien oder Geräten
file : Identifizieren Sie den Typ einer Datei
tree : Zeigen Sie Verzeichnisse und Unterverzeichnisse als Nistbaum an; wie ls aber rekursiv
stat : Dateiinformationen
time : Ausführen und Zeit einen Befehl
timeout : Führen Sie einen Befehl für die angegebene Zeitspanne aus und stoppen Sie den Vorgang, wenn die angegebene Zeit abgeschlossen ist.
lockfile : Erstellen Sie eine semaphorische Datei, die nur von rm -f entfernt werden kann
logrotate : Drehen, Komprimierungs- und Mail -Protokolle.
watch : Führen Sie einen Befehl wiederholt aus, zeigen Sie Ergebnisse und/oder Änderungen hervorheben
when-changed : Führen Sie einen Befehl aus, den Sie angeben, wenn die Datei geändert wird. Siehe auch inotifywait und entr .
tac : Drucken Dateien umgekehrt ausdrucken
comm : Vergleiche sortierte Dateienzeile nach Zeile
strings : Text aus Binärdateien extrahieren
tr : Charakterübersetzung oder Manipulation
iconv oder uconv : Konvertierung für Textcodierungen
split und csplit : Dateien teilen
sponge : Lesen Sie alle Eingaben vor dem Schreiben, nützlich für das Lesen von damals in dieselbe Datei, z grep -v something some-file | sponge some-file
units : Einheitenumwandlungen und Berechnungen; Konvertiert Furlongs pro vierzehn Tage in Wickel pro Blink (siehe auch /usr/share/units/definitions.units )
apg : Generiert zufällige Passwörter
xz : Hochverhältnis-Dateikomprimierung
ldd : Dynamische Bibliotheksinformationen
nm : Symbole aus Objektdateien
ab oder wrk : Benchmarking -Webserver
strace : System Call Debugging
mtr : Bessere Traceroute für das Netzwerkdebuggen
cssh : Visuelle gleichzeitige Hülle
rsync : Synchronisierungsdateien und Ordner über SSH oder im lokalen Dateisystem synchronisieren
wireshark und tshark : Paketaufnahme und Netzwerkdebugging
ngrep : GREP für die Netzwerkschicht
host und dig : DNS -Lookups
lsof : Prozessdateideskriptor und Socket -Info
dstat : Nützliche Systemstatistiken
glances : hoher Niveau, Multi-Subsystem-Übersicht
iostat : Festplattennutzungsstatistiken
mpstat : CPU -Nutzungsstatistiken
vmstat : Speichernutzungsstatistiken
htop : Verbesserte Version von Top
last : Anmeldehernung
w : Wer hat angemeldet
id : Benutzer-/Gruppenidentitätsinformationen
sar : Historische Systemstatistiken
iftop oder nethogs : Netzwerknutzung nach Socket oder Prozess
ss : Sockelstatistik
dmesg : Start- und Systemfehlermeldungen
sysctl : Ansicht und konfigurieren Sie Linux -Kernel -Parameter zur Laufzeit
hdparm : SATA/ATA Disk Manipulation/Performance
lsblk : List Block Devices: Eine Baumansicht Ihrer Festplatten und Festplattenpartitionen
lshw , lscpu , lspci , lsusb , dmidecode : Hardwareinformationen, einschließlich CPU, BIOS, RAID, Grafiken, Geräte usw.
lsmod und modinfo : Listen- und Zeigen Sie Details zu Kernel -Modulen.
fortune , ddate und sl : Ähm, na ja, es hängt davon ab, ob Sie Dampflokomotiven und flotte Zitate als "nützlich" betrachten, "nützlich".
Dies sind Elemente, die nur für macOS relevant sind.
Paketmanagement mit brew (Homebrew) und/oder port (MacPorts). Diese können verwendet werden, um auf macOS viele der oben genannten Befehle zu installieren.
Kopieren Sie die Ausgabe eines beliebigen Befehls in eine Desktop -App mit pbcopy und fügen Sie die Eingabe von einem mit pbpaste ein.
So aktivieren Sie die Optionsschlüssel in MacOS -Terminal als Alt -Taste (z .
open Sie, um eine Datei mit einer Desktop -App zu open -a /Applications/Whatever.app .
Spotlight: Durchsuchen Sie Dateien mit mdfind und listen Sie Metadaten (z. B. Foto exif info) mit mdls .
Be Areare MacOS basiert auf BSD UNIX, und viele Befehle (z. ps , ls , tail , awk , sed ) haben viele subtile Variationen von Linux, was weitgehend von den Unix- und GNU-Tools des Systems V-Stil und GNU beeinflusst wird. Sie können oft den Unterschied erkennen, indem Sie feststellen, dass eine Mannseite die Überschrift "BSD General Commands Manual" hat. In einigen Fällen können auch GNU -Versionen installiert werden (wie gawk und gsed für GNU awk und sed). Wenn Sie plattformübergreifende Bash-Skripte schreiben, vermeiden Sie solche Befehle (z. B. Python oder perl betrachten) oder testen Sie sorgfältig.
Um macOS -Release -Informationen zu erhalten, verwenden Sie sw_vers .
Diese Elemente sind nur unter Windows relevant.
Greifen Sie auf die Leistung der Unix -Shell unter Microsoft Windows zu, indem Sie Cygwin installieren. Die meisten in diesem Dokument beschriebenen Dinge werden nicht in der Box gelten.
Unter Windows 10 können Sie Windows Subsystem für Linux (WSL) verwenden, das eine vertraute Bash -Umgebung mit UNIX -Befehlszeilen -Dienstprogrammen bietet.
Wenn Sie hauptsächlich GNU -Entwickler -Tools (z. B. GCC) unter Windows verwenden möchten, sollten Sie Mingw und sein MSYS -Paket in Betracht ziehen, das Dienstprogramme wie Bash, Gawk, Make und Grep bietet. MSYS hat nicht alle Funktionen im Vergleich zu Cygwin. Mingw ist besonders nützlich, um native Windows -Ports von UNIX -Tools zu erstellen.
Eine weitere Option, um Unix -Look und Feel unter Windows zu bekommen, ist Bargeld. Beachten Sie, dass in dieser Umgebung nur sehr wenige UNIX-Befehle und Befehlszeilenoptionen verfügbar sind.
Sie können die meisten Windows -Systemverwaltungsaufgaben aus der Befehlszeile ausführen und skript, indem Sie wmic lernen und verwenden.
Native Befehlszeilen-Windows-Netzwerk-Tools, die nützlich finden, gehören ping , ipconfig , tracert und netstat .
Sie können viele nützliche Windows -Aufgaben ausführen, indem Sie den Befehl Rundll32 aufrufen.
Installieren Sie zusätzliche UNIX -Programme mit dem Paketmanager von Cygwin.
Verwenden Sie mintty als Befehlszeilenfenster.
Greifen Sie über /dev/clipboard auf die Windows -Zwischenablage zu.
Run cygstart to open an arbitrary file through its registered application.
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.