Ich möchte eine Diskussion eröffnen, in der Best Practices und Tipps für Ihre Linux-Befehlszeile (CLI) zusammengefasst werden.
Ich habe nach einer solchen Diskussion gesucht, um den folgenden Kommentar zu teilen, habe aber keinen gefunden, daher dieser Beitrag.
Ich hoffe, wir alle konnten daraus lernen.
Sie sind herzlich eingeladen, Ihre Bash-Tipps, grep, sed, AWK, / proc und alle anderen verwandten Best Practices für die Linux / Unix-Systemadministration und Shell-Programmierung zum Nutzen von uns allen mitzuteilen.
Antworten:
Verwenden Sie screen , einen freien Terminal-Multiplexer, der vom GNU-Projekt entwickelt wurde und es Ihnen ermöglicht, mehrere Terminals in einem zu haben.
Sie können eine Sitzung starten und Ihre Terminals werden gespeichert, auch wenn die Verbindung unterbrochen wird, sodass Sie später oder von zu Hause aus weitermachen können.
quelle
SSH!
SSH ist der Befehl Gottes - ich denke, es ist der wertvollste Befehl, den man lernen kann. Die Optionen können ziemlich entmutigend sein, aber es scheint, als würde ich ständig lernen, neue Befehlszeilenoptionen für SSH zu verwenden, die ich nie für notwendig gehalten hätte. Vielleicht habe ich sie zu diesem Zeitpunkt alle benutzt.
Je mehr Sie es verwenden, desto mehr lernen Sie darüber. Sie können es verwenden, um einige erstaunliche Dinge zu tun.
Hinweis: ALLE diese Dinge können per Fernzugriff ohne Einrichtung auf Ihrem Server ausgeführt werden, es sei denn, der SSH-Server läuft.
Hängen Sie ein Dateisystem über das Internet ein
Durchsuchen Sie das Netz nach SSHFS
Befehle weiterleiten .
Das SVN + SSH-Protokoll ist Subversion von einem Remote-Client zu einem Server, auf dem NO DEAMON ausgeführt wird! Der SVN-Befehl startet den Server über die ssh-Shell und leitet die Informationen über die vorhandene Pipe hin und her. Das rsync-Programm führt dasselbe aus: Es wird auf einem Server ohne rsync-Deamon ausgeführt, indem es selbst über SSH gestartet wird. Es ist einfach, eigene Bash-Dateien zu schreiben, um ähnliche Tricks auszuführen.
Kette um durch Firewalls zu kommen
Ich benutze dies die ganze Zeit, um von meinem Linux-Server zu Hause zu meinem Mac zu springen.
Forward-Ports:
Scheint nur mäßig nützlich zu sein, bis Sie feststellen, dass Sie von zu Hause aus über Ihre Heim-Firewall springen und Ihren Router so konfigurieren können, als würden Sie dies von Ihrem Heimnetzwerk aus tun.
X-Anfragen weiterleiten:
Dies ist ein weiterer erstaunlicher. Mit oder ohne einen X-Server, der auf Ihrem Remote-System ausgeführt wird, können Sie ein x-windows-Programm ausführen, und das Fenster wird auf Ihrem lokalen Bildschirm angezeigt. Benutze einfach den Schalter -X, das ist alles!
Da auf Ihrem Remote-Server kein X-Server ausgeführt werden muss, ist die CPU-Belastung auf Ihrem Server minimal. Sie können einen TINY Linux-Server verwenden, der auf Ihrem leistungsstarken Spiel-PC mit Windows und Cygwin / X riesige Apps bereitstellt.
Natürlich funktionieren VI und EMACS über SSH, aber wenn ich zu Hause laufe, möchte ich manchmal mehr. Ich benutze ssh -X, um eine Kopie von Eclipse zu starten! Wenn Ihr Server leistungsstärker ist als Ihr Laptop, befindet sich die grafische Benutzeroberfläche direkt auf Ihrem Laptop. Die Kompilierung wird jedoch auf Ihrem Server ausgeführt. Sorgen Sie sich also nicht um die Systemlast.
In Batch-Dateien ausführen
(was bedeutet, dass Sie eine lokale Batch-Datei ausführen, die auf anderen Systemen "Sachen macht"):
Zwei Dinge verbinden sich, um dieses cool zu machen. Zum einen können Sie Passwortabfragen mit (sichereren) Verschlüsselungsschlüsseln umgehen. Der zweite ist, dass Sie einen Befehl in der SSH-CLI angeben können. Ich habe dies auf einige interessante Arten verwendet: Wenn eine Kompilierung auf dem Remote-Server fehlschlägt, würde ich sie über SSH auf meinem Computer speichern und eine Sounddatei abspielen.
Denken Sie daran, dass Sie die Ausgabe des Remote-Befehls umleiten und in Ihrer lokalen Batch-Datei verwenden können, sodass Sie möglicherweise auch eine auf Ihrem Server ausgeführte Kompilierung lokal überwachen können.
Eingebaut in Mac
Sowohl Server als auch Client sind in Mac und Linux integriert. Im Falle von Mac und Ubuntu ist das Aktivieren eines Servers so einfach wie das Finden des richtigen Kontrollkästchens.
Auf einem PC Cygwin oder Cygwin / X installieren (Mit Cygwin / X können Sie Ihre X-Window-Ausgabe von Ihrem Linux-Computer auf Ihren Windows-PC weiterleiten - es installiert einen X-Server)
Wichtige Tipps / Konfigurationsdatei
Verwenden Sie niemals Port 22 in Ihrer Firewall. Sie werden eine Menge Hackversuche bekommen, es lohnt sich einfach nicht. Lassen Sie Ihre Firewall einfach einen anderen Port an Ihren Server weiterleiten.
Es gibt umfangreiche Konfigurationsoptionen, mit denen Sie Ihre ssh-Befehle erheblich vereinfachen können. Hier ist ein Beispiel von mir bei der Arbeit:
Wenn ich "ssh home" eingebe (sonst nichts), verhält es sich so, als hätte ich Folgendes eingegeben:
und leitet dann meinen lokalen Port 1025 an mein System "mac" zu Hause weiter. Der Grund dafür ist, dass ich einen anderen Eintrag in meiner Datei habe:
Wenn ich ein "ssh home" gemacht habe und das Fenster noch geöffnet ist, kann ich "ssh mac" eingeben, und der hier arbeitende Computer versucht tatsächlich, eine Verbindung zu seinem eigenen Port 1025 herzustellen, der an "mac" weitergeleitet wurde: 22 "über den anderen Befehl, damit er zu Hause über die Firewall eine Verbindung zu meinem Mac herstellt.
Bearbeiten - cooles Skript!
Ich habe ein altes Drehbuch ausgegraben, das ich einfach liebe - musste zurückkommen und es für jeden hier posten, der interessiert sein könnte. Das Skript heißt "authMe"
Wenn Sie dieses Skript in Ihrem Home-Verzeichnis haben und einen Host haben, zu dem Sie eine Verbindung herstellen können (über ssh), können Sie "./authMe hostName" eingeben.
Bei Bedarf wird ein öffentliches / privates Schlüsselpaar für Sie erstellt, dann wird ssh auf den anderen Computer übertragen und Ihr öffentlicher Schlüssel kopiert (der Befehl ssh fordert Sie zur Eingabe eines Kennworts auf ...).
Danach sollte der SSH-Befehl nicht mehr nach Ihrem Kennwort fragen, wenn Sie eine Verbindung zu diesem Remote-System herstellen. Er verwendet das öffentliche / private Schlüsselpaar.
Wenn Ihr Remotecomputer nicht immer sicher ist, sollten Sie nach Aufforderung eine Passphrase festlegen.
Möglicherweise möchten Sie auch den SSH-Server am anderen Ende so konfigurieren, dass aus Sicherheitsgründen keine Textkennwörter (nur Schlüssel) zugelassen werden.
quelle
ssh-copy-id
und ist so einfach wiessh-copy-id user@someserver
Ich benutze gerne
um zum vorherigen Verzeichnis zu wechseln. Sehr hilfreich!
quelle
Ich habe vor kurzem den
pv
Befehl (Pipe Viewer) entdeckt, der wie cat ist, aber Übertragungsdetails enthält.Also statt
Sie können verwenden
Anstatt also keine Ahnung zu haben, wann Ihre Operation beendet sein wird, wissen Sie es jetzt!
Mit freundlicher Genehmigung von Peteris Krumins
quelle
tee(1)
.Führen Sie den vorherigen Befehl erneut als root aus.
[Das aktuelle oberste Kommando auf der Website http://www.commandlinefu.com , eine Website, die im Sinne dieser Frage gestaltet ist.]
quelle
Drücken Sie Strg-R und geben Sie einen Befehl (oder einen Teil davon) ein - es durchsucht den Befehlsverlauf. Wenn Sie erneut die Strg-R-Taste drücken, wird zum nächsten Treffer gesprungen und der aktuell angezeigte Befehl ausgeführt. Mit dem Rechtspfeil (mindestens) können Sie ihn zuerst bearbeiten.
Ich hatte Linux 7 Jahre lang als mein Hauptbetriebssystem verwendet, bevor ich davon erfuhr, aber jetzt, da ich es kenne, ist es recht praktisch.
quelle
stty -ixon
zuerst die XON / XOFF-Flusskontrollbedeutung ausschalten (dies macht auch Strg-Q verfügbar, standardmäßig entspricht es dem in Anführungszeichen gesetzten Strg-V-Einfügen, Sie können es jedoch auch in etwas anderes ändern ). Sieheman stty
undman readline
für weitere Informationen. Derstty
Befehl kann zu Ihrem Befehl hinzugefügt werden~/.bashrc
Die Kommandozeile ist eine lustige Sache. Ich denke, dass Sie nur so viel alleine lernen können und den Rest lernen Sie zufällig, wenn Sie jemand anderem über eine Befehlszeile zuschauen.
Ich habe die Shell jahrelang benutzt, um Verzeichnisnamen mühsam von Hand einzugeben. Eines Tages beobachtete ich, wie ein Freund auf einem System herumspielte und drückte die Tabulatortaste. Ich fragte "warum schlägst du Tab?". Antwort: Es wird versucht, das Verzeichnis oder den Dateinamen zu vervollständigen. Wer hätte das gedacht - Tab-Vervollständigung! Geben Sie einen Teil der Datei oder des Verzeichnisses ein, drücken Sie die Tabulatortaste, und es wird versucht, die Eingabe zu beenden (das Verhalten hängt jedoch von der Shell ab).
Eines Tages beobachtete mich ein Freund auf der Kommandozeile und sah zu, wie ich etwas eintippte wie:
Wer hätte das gedacht? Er wusste nie über
popd
/pushd
. Vermutlich sind wir sogar ...quelle
Lerne Vim.
Es ist (wohl) der beste Editor, aber mit Sicherheit der beste Editor, der auf einem reinen Linux-Server verfügbar ist.
quelle
Es ist manchmal nützlich, ein Programm laufen zu lassen, auch wenn Sie sich abgemeldet haben. Ich habe einige Lösungen gesehen, die zu diesem Zweck nohup oder sogar screen verwenden. Das einfachste, das ich kenne, ist:
Sie können auch ein laufendes Programm trennen:
quelle
Wenn ich sicherstellen möchte, dass ich einen tatsächlichen Befehl und keinen Alias verwende, verwende ich einen führenden Backslash:
quelle
builtin
".Dieser Tipp macht Ihre CLI komfortabler (zumindest für mich):
erstelle ~ / .inputrc Datei mit folgendem Inhalt:
Laden Sie die Bash neu (z. B. indem Sie "exec bash" eingeben). Wenn Sie ein Präfix eines Befehls eingeben und den Aufwärtspfeil drücken, durchsuchen Sie Befehle, die mit Ihrem Präfix beginnen. Wenn Sie beispielsweise ssh eingeben, werden Ihre früheren Verbindungen mit Remote-Shells angezeigt. Wenn Ihre Eingabeaufforderung leer ist, durchsucht der Aufwärtspfeil den Verlauf wie gewohnt.
quelle
exec bash
man readline
die Standardverknüpfungen zu lesen und auswendig zu lernenbind -f ~/.inputrc
den inputrc auch neu laden, ohne eine neue Bash starten und Ihre aktuelle Umgebung löschen zu müssen.Verwenden Sie diese
&&
Option,;
wenn Sie mehrere Befehle gleichzeitig ausführen. Es stoppt, wenn ein Fehler auftritt und führt die anderen Befehle nicht aus.Klassisches Beispiel:
quelle
dosomething && echo "success" || echo "teh fail"
Wenn ich in bash Schleifen in die Befehlszeile schreibe, stelle ich riskanten Befehlen häufig den Befehl 'echo' voran.
Auf diese Weise kann ich das "etwas Gefährliche" vollständig erkennen, bevor ich mich dazu entscheide, es auszuführen. Hilft, wenn Ihr riskantes Kommando variable Erweiterungen und Globs enthält. Und 'set -x' ist sehr nützlich, wenn Sie Bash-Skripte schreiben.
'set -x' aktiviert das Debuggen. Informationen zum Bash-Debugging finden Sie unter http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_02_03.html .
quelle
Anforderung
Sie müssen die maximale Bandbreite zwischen zwei Servern testen.
Lösung
Auf SERVER1 machen Sie:
Auf SERVER2 machen Sie:
Sie sehen Ausgaben wie:
Hier ist 117 MB / s der interessante Faktor, der die tatsächliche Netzwerkübertragungsbandbreite angibt.
Erklärung :
Sobald das Paket über das Netzwerk übertragen wird, können Sie Bandbreitenstatistiken für SERVER2 anzeigen. Dies ist eine ziemlich gute Schätzung der tatsächlich maximal möglichen Bandbreite zwischen den beiden Servern.
Kopieren mit UDP (um TCP-Overhead zu vermeiden).
Kopieren vom Speicher (/ dev / zero) auf SERVER1 in den Speicher (/ dev / null) auf SERVER2, um zu verhindern, dass die Datenträger-E / A zum Engpass wird.
quelle
Das Anzeigen von Farbverzeichnisstrukturen ist einfacher.
Bearbeiten
quelle
Einige kleine Hinweise zur Protokollanzeige:
quelle
tail -f
Sie mehrere Protokolle gleichzeitig ansehen! ZB:tail -f log1.txt -f log2.txt
Ich habe vor langer Zeit von einem Freund einen Trick gelernt , um die Dateierweiterung einfach zu ändern:
Die Shell-Erweiterung erweitert dies auf:
Dies kann auch verwendet werden, um eine Datei auf andere Weise umzubenennen, z. B .:
quelle
ls -l /bin/c
Alt-Shift- {drücken, um die Eingabe zu vervollständigenls -l /bin/c{at,h{grp,mod,own,vt},p{,io},sh}
.Verwenden Sie "tar xf", um komprimierte Archive zu extrahieren. Das j für bzip2 und das z für gzip sind nicht erforderlich, da tar den Dateityp Ihres Archivs erkennt. Weder steht '-' vor Argumenten. Sie sparen viel Zeit (über ein Jahrtausend ;-)).
Besser noch unfoo verwenden , um ein Archiv mit einem einzigen Befehl ohne unnötige Argumente zu extrahieren.
quelle
alias ut="tar xf"
- macht das Extrahieren von Archiven noch einfacher.Installieren Sie das Bash-Completion-Paket. Es enthält eine Reihe vordefinierter Abschlussregeln für die Shell. Aktivieren Sie es, indem Sie "source / etc / bash_completion" eingeben, wenn die Distribution dies nicht für Sie erledigt. Wenn Sie beispielsweise nach kpdf fertig sind, wird nur eine Liste von Verzeichnissen und PDF-Dateien angezeigt. Es ist so klug wie, entfernte Dateien nach scp ssh: // server / XXX zu vervollständigen (wenn Sie kennwortlose Anmeldungen aktiviert haben).
quelle
Ich benutze ständig diese
ALT-. (ESC +. In einigen Terminals) kopiert das zuletzt verwendete Argument (super nützlich)
STRG-W löscht das Wort
CTRL-L clear terminal (wie clear command, aber schneller)
ALT-B (ESC + B in einigen Terminals) bewegt sich ein Wort zurück
ALT-F (ESC + F in einigen Terminals) rücken ein Wort vor
STRG-E springe zu EOL
STRG-A Sprung zu BOL
STRG-R Suche im Verlauf
quelle
In der Bash verwende ich ! $ Viel. Es wiederholt das letzte Argument des letzten Befehls:
Es wird das ls ausführen. Wenn Sie es dann bearbeiten möchten, müssen Sie es nicht erneut eingeben. Verwenden Sie einfach! $. Dies ist sehr nützlich für lange Pfad- / Dateinamen. Außerdem wiederholt ! * Alle Argumente des vorherigen Befehls. Ich benutze das nicht so oft, aber es sieht nützlich aus.
Ich wusste, dass sie erwähnt wurden, aber ich benutze vim, screen und cd - sehr oft.
Ich habe noclobber vergessen:
Von Mann Bash :
quelle
Alt-.
.Wechseln Sie von bash zu zsh und sehen Sie, wie sich Ihre Produktivität verbessert:
Google wird Ihnen viele weitere Vorteile mitteilen.
quelle
Alte Schule, einen Verzeichnisbaum von einem Ort zum anderen verschieben, Symlinks, Berechtigungen und all das Gute bewahren:
oder über das Netzwerk
Neue Schule:
oder über das Netzwerk
quelle
tar xvBpf - -C /destination
==(cd /destination; tar xvBpf -)
Ein bisschen weniger tippen und einfacher zu benutzen als ssh.rsync -avh
ist am besten auf einem einzelnen Computer - diesh
stellt sicher, dass harte Links korrekt übertragen werden, ohne dass jeder Link in eine separate Datei umgewandelt wird.rsync -avzh . foo.com/destination
ist das Äquivalent für das Netzwerk, und normalerweise brauchen Sie das nicht,-e ssh
da rsync wissen wird, um ssh zu verwenden.rsync -aSHuvrx --delete / --link-dest=/backup/$PREV /backup/$HOUR
Voraussetzung : Sie haben ein Verzeichnis mit einer großen Liste von Dateien, die Sie löschen möchten. rm -r wird scheitern!
Beispiel
Lösung :
Erklärung :
Edit: Fehlerbehebung nach @ephemient Kommentar.
find liefert Argumente an rm mit den maximal zulässigen Argumenten. Dies ermöglicht es rm, Dateien in Stapeln zu löschen, was die schnellste mir bekannte Technik ist, ohne die -delete-Operation von find selbst zu verwenden. Es ist gleichbedeutend mit
was Sie vielleicht nützlich finden, wenn Ihr
find
nicht unterstützt-exec ... +
.quelle
\;
durch+
: Dannfind
wirdxargs
standardmäßig die Funktion ausgeführt, bei der die Argumente so oft wie möglich zusammengefasst werden (ohne das Argumentlistenlimit zu überschreiten). Oder benutze einfach-delete
intead of-exec rm
(GNU Findutils benötigt für beide)find ... -delete
, wenn Ihr Fund so dotiert ist.Ich verwende diese beiden Tipps so oft, dass ich dachte, es wäre eine gute Idee, sie zu teilen:
Startet den letzten Befehl in der Verlaufsdatei, der mit "foo" beginnt (ich verwende ihn
!gcc
beispielsweise häufig beim Kompilieren .)Die andere ist eine Tastenkombination (Strg + O anstelle von Return), mit der der Befehl ausgeführt und der nächste Befehl in der Verlaufsdatei angezeigt wird. Wenn ich zum Beispiel eine Datei kompiliere und teste, mache ich immer 3 oder 4 Befehle, mache, cd in das Verzeichnis des Tests, führe den Test aus, cd in das Verzeichnis des Makefiles. Mit Strg + O wird diese Aufgabe viel einfacher :)
Ich hoffe das hilft!
quelle
So verwenden Sie Subversion unter Linux ohne die Hilfe ausgefallener grafischer Oberflächen, die möglicherweise nicht verfügbar sind.
Dies hält viele Entwickler seltsamerweise davon ab, Linux zu verwenden.
quelle
Meist übersehenes Kommando der alten Schule:
find
Gestern habe ich einen Bruttoberechtigungsfehler behoben:
quelle
chmod 644 $(find . -type f)
,chmod 755 $(find . -type d)
-perm
,find
nach Dateien zu suchen, für die bestimmte Berechtigungen festgelegt wurden.Bei Shells wie
bash
undksh
können Sie die Befehlszeile auf Navigationsbefehle wie Ihren Texteditor reagieren lassen:oder
Damit können Sie Ihren Verlauf durchsuchen und sich in der Befehlszeile bewegen, wie Sie es von Textdateien gewohnt sind (z. B. im vi-Modus, wenn Sie drücken und
ESC
dann tippen,/string
werden Ihre vorherigen Befehle nach "string" durchsucht - Sie könnenn
undN
zum Bewegen verwenden zwischen den Spielen)quelle
grep ist mein Freund. Ernsthaft.
Listen Sie die
.rb
Dateien auf, die den Text enthaltenclass foo
:Listen Sie
.rb
Dateien auf, die keinen Text enthaltenclass foo
:Listen Sie
.rb
Dateien auf, die weder foo noch bar enthalten (Sie können mit -e einen beliebigen regulären Ausdruck verwenden, müssen sich aber den Operatoren entziehen):quelle
Die Shell-Substitution wird durchgeführt mit
^
:quelle