Wie man ein Befehlszeilen-Assistent wird

Der nützlichste Informatikkurs, den Sie wahrscheinlich noch nie besucht haben

Bild erzeugt mit Stable Diffusion

OWas ich im Laufe meiner Karriere immer wieder beobachtet habe, ist, dass die produktivsten Datenwissenschaftler und -ingenieure normalerweise eines gemeinsam haben: Sie sind es Befehlszeilen-Assistenten. Sie können im Dateisystem ihres Computers navigieren, nach Mustern in Protokolldateien suchen und Jobs, Quellcode und Versionskontrolle verwalten – alles über die Befehlszeile, ohne auf langsame Navigation mit der Maus und grafische Benutzeroberflächen angewiesen zu sein.

Doch diese Befehlszeilen-„Zauberei“, wie sie jemandem erscheinen mag, der mit Shell-Tools nicht vertraut ist, ist normalerweise nicht Teil der Standardlehrpläne für Informatik. Ein MIT-Kurs rund um die Beherrschung Ihrer Befehlszeile trägt den treffenden Namen „Das fehlende Semester Ihrer CS-Ausbildung".

Bei diesem Beitrag handelt es sich um meinen persönlichen, 10 Lektionen umfassenden Kurs „Befehlszeilenzauberei 101“, der sich an Leser richtet, die mehr mit der Befehlszeile und weniger mit grafischen Benutzeroberflächen arbeiten möchten. Wir behandeln Grundlagen rund um die Shell und die Pfadvariable, Aliase, Dateiberechtigungen, Streaming und Piping, effiziente Jobverwaltung, tmux, ssh, git und vim.

Lass uns anfangen. Willkommen bei CLW 101.

1. die Muschel

Wenn Sie Ihr Terminal öffnen, sehen Sie ein Schale, wie zum Beispiel Bash (Borne Again Shell) oder ZSH (Z-Shell). Die Shell ist eigentlich eine vollständige Programmiersprache mit Zugriff auf bestimmte Standardprogramme, die die Navigation im Dateisystem und die Datenbearbeitung ermöglichen. Sie können herausfinden, welche Shell Sie ausführen, indem Sie Folgendes eingeben:

Echo $ SHELL

In Bash lädt die Shell jedes Mal, wenn Sie eine neue Shell starten, eine Folge von Befehlen, die in der angegeben sind .bashrc Datei, die sich normalerweise in Ihrem Home-Verzeichnis befindet (wenn Sie einen Mac verwenden, gibt es normalerweise eine .bash_profile Datei stattdessen). In dieser Datei können Sie nützliche Dinge wie Ihre Pfadvariable oder Aliase angeben (mehr dazu weiter unten).

2. Die Pfadvariable

Wenn Sie den Namen bestimmter Programme in Ihre Shell eingeben, z python, cat, oder ls, woher weiß die Shell, woher sie dieses Programm bekommt? Das ist der Zweck des Pfadvariable. Diese Variable speichert eine durch Doppelpunkte getrennte Liste aller Pfade, in denen die Shell nach Programmen sucht. Sie können Ihre Pfadvariable überprüfen, indem Sie Folgendes eingeben:

echo $PFAD

Mit diesem Befehl können Sie Ihrer Pfadvariablen weitere Verzeichnisse hinzufügen:

export PATH="my_new_path:$PATH"

Am besten fügen Sie diesen Befehl zu Ihrer bashrc-Datei hinzu, damit sich Ihr zusätzliches Verzeichnis immer in Ihrem Pfad befindet, wenn Sie eine neue Shell starten.

3. Aliase

Aliases sind benutzerdefinierte Befehle, die Sie definieren können, um zu vermeiden, dass Sie immer wieder langwierige Befehle eingeben müssen, wie zum Beispiel:

Alias ​​ll="ls -lah"
alias gs="git status"
alias gp="git push origin master"

Aliase können auch verwendet werden, um Schutzmaßnahmen für Ihren Entwicklungsworkflow zu schaffen. Zum Beispiel durch Definieren

Alias ​​mv="mv -i"

Ihr Terminal warnt Sie, wenn die Datei, die Sie verschieben möchten, bereits im neuen Verzeichnis vorhanden ist, damit Sie nicht versehentlich Dateien überschreiben, die Sie nicht überschreiben wollten.

Sobald Sie diese Aliase zu Ihrer bashrc-Datei hinzugefügt haben, sind sie immer verfügbar, wenn Sie eine neue Shell starten.

4. Dateiberechtigungen und Sudo

Wenn mehrere Benutzer einen Computer gemeinsam nutzen, ist es wichtig, dies festzulegen Dateiberechtigungen die bestimmen, welcher Benutzer welche Vorgänge mit welchen Daten durchführen kann. Wenn Sie tippen ls -l, sehen Sie die Dateien in Ihrem aktuellen Verzeichnis zusammen mit ihren Berechtigungen in der folgenden Form:

-rwxrwxrwx

Hier

  • rwx stehen jeweils für Lese-, Schreib- und Ausführungsrechte
  • die 3 rwx Blöcke sind für (1) Benutzer, (2) Benutzergruppe und (3) alle anderen. Im gegebenen Beispiel verfügen alle drei dieser Entitäten über Lese-, Schreib- und Ausführungsberechtigungen.
  • Der Bindestrich zeigt an, dass es sich um eine Datei handelt. Anstelle des Bindestrichs ist auch ein zu sehen d für Verzeichnis bzw l für einen symbolischen Link.

Sie können Dateiberechtigungen mit bearbeiten chmod. Wenn Sie beispielsweise eine Datei für sich selbst ausführbar machen möchten, geben Sie Folgendes ein

chmod u+x my_program.py

👉 Wenn eine Datei ausführbar ist, woher weiß die Shell, wie sie ausgeführt wird? Dies wird mit einem „Hashbang“ in der ersten Zeile der Datei angegeben, z #!/bin/bash für ein Bash-Skript oder #!/bin/python für ein Python-Skript.

Schließlich gibt es einen speziellen „Superuser“, der über alle Berechtigungen für alle Dateien verfügt. Sie können jeden Befehl als Superuser ausführen sudo vor diesem Befehl. Sie können auch eine eigenständige Sudo-Shell starten, indem Sie Folgendes ausführen

sudo su

⚠️ Verwenden Sie sudo mit Vorsicht. Mit sudo können Sie Änderungen am Code vornehmen, der die Hardware Ihres Computers steuert, und ein Fehler könnte Ihren Computer unbrauchbar machen. Denken Sie daran, mit großer Macht geht große Verantwortung einher.

5. Streaming und Rohrleitungen

Das Streaming Operator > Leitet die Ausgabe eines Programms in eine Datei um. >> macht das Gleiche, hängt jedoch an eine vorhandene Datei an, anstatt sie zu überschreiben, falls sie bereits vorhanden ist. Dies ist nützlich, um Ihre eigenen Programme wie folgt zu protokollieren:

python my_program.py > Protokolldatei

Ein weiteres nützliches Konzept ist Rohrleitungen: x | y führt Programm x aus und leitet die Ausgabe von x in Programm y. Zum Beispiel:

  • cat log.txt | tail -n5 : druckt die letzten 5 Zeilen aus log.txt
  • cat log.txt | head -n5 : druckt die ersten 5 Zeilen von log.txt
  • cat -b log.txt | grep error : zeigt alle Zeilen in log.txt an, die die Zeichenfolge „error“ enthalten, zusammen mit der Zeilennummer (-b)

6. Jobs verwalten

Wenn Sie ein Programm über Ihre Befehlszeile ausführen (z. B. python run.py), wird das Programm standardmäßig im ausgeführt Vordergrund, und hindern Sie Sie daran, irgendetwas anderes zu tun, bis das Programm fertig ist. Während das Programm im Vordergrund läuft, können Sie:

  • Geben Sie Strg + C ein, wodurch ein SIGINT-Signal (Signal Interrupt) an das Programm gesendet wird, das die Maschine anweist, das Programm sofort zu unterbrechen (es sei denn, das Programm verfügt über eine Möglichkeit, diese Signale intern zu verarbeiten).
  • Geben Sie Strg+Z ein, um das Programm anzuhalten. Nach dem Anhalten kann das Programm entweder fortgesetzt werden, indem man es in den Vordergrund bringt (fg), oder indem Sie es an den Hintergrund senden (bg).

Um Ihren Befehl sofort im Hintergrund zu starten, verwenden Sie die & Operator:

Python run.py &

👉 Woher wissen Sie, welche Programme gerade im Hintergrund laufen? Verwenden Sie den Befehl jobs. Dadurch werden die Namen der ausgeführten Jobs sowie deren Prozess-IDs (PIDs) angezeigt.

Schließlichkill ist ein Programm zum Senden von Signalen an im Hintergrund laufende Programme. Zum Beispiel,

  • kill -STOP %1 sendet ein STOP-Signal und pausiert Programm 1.
  • kill -KILL %1 sendet ein KILL-Signal und beendet Programm 1 dauerhaft.
Vier Terminalfenster auf dem Terminal meines persönlichen MacBook mit tmux (Bild vom Autor).

7. tmux

tmux („Terminal-Multiplexer“) ermöglicht Ihnen die einfache Erstellung neuer Terminals und die Navigation zwischen ihnen. Dies kann äußerst nützlich sein. Sie können beispielsweise ein Terminal zum Navigieren in Ihrem Dateisystem und ein anderes Terminal zum Ausführen von Jobs verwenden. Mit tmux können Sie beides sogar nebeneinander nutzen.

👉 Ein weiterer Grund, tmux zu lernen, ist die Remote-Entwicklung: Wenn Sie sich von einem Remote-Computer abmelden (entweder absichtlich oder versehentlich), werden alle Programme, die aktiv in Ihrer Shell ausgeführt wurden, automatisch beendet. Wenn Sie Ihre Programme hingegen in einer tmux-Shell ausführen, können Sie einfach das tmux-Fenster entfernen, sich abmelden, Ihren Computer schließen und später zu dieser Shell zurückkehren, als wären Sie nie abgemeldet worden.

Hier sind einige grundlegende Befehle, die Ihnen den Einstieg in tmux erleichtern:

  • tmux new -s run Erstellt eine neue Terminalsitzung mit dem Namen „run“
  • Control-BD: Trennen Sie dieses Fenster
  • tmux a : An das letzte Fenster anhängen
  • tmux a -t run : An Fenster mit dem Namen „Ausführen“ anhängen
  • „Control-B“: Fügen Sie unten ein weiteres Terminalfenster hinzu
  • Control-B%: Fügen Sie rechts einen weiteren Terminalbereich hinzu
  • Strg-B➡️: Zum Terminalbereich nach rechts bewegen (ähnlich für links, oben, unten)

8. SSH und Schlüsselpaare

ssh ist ein Programm zum Anmelden bei Remote-Rechnern. Um sich bei Remote-Rechnern anzumelden, müssen Sie entweder einen Benutzernamen und ein Passwort angeben oder Sie verwenden ein Schlüsselpaar, bestehend aus einem öffentlichen Schlüssel (auf den beide Rechner Zugriff haben) und einem privaten Schlüssel (auf den nur Ihr eigener Rechner Zugriff hat). hat Zugriff darauf).

ssh-keygen ist ein Programm zur Generierung eines solchen Schlüsselpaares. Wenn du läufst ssh-keygen, wird standardmäßig ein öffentlicher Schlüssel mit dem Namen erstellt id_rsa.pub und einen privaten Schlüssel mit dem Namen id_rsa, und legen Sie beide in Ihr ~/.ssh Verzeichnis. Sie müssen den öffentlichen Schlüssel zum Remote-Rechner hinzufügen, was Sie, wie Sie inzwischen wissen sollten, durch eine gemeinsame Pipeline tun können cat, ssh, und ein Streaming-Betreiber:

cat .ssh/id_rsa.pub | ssh user@remote 'cat >> ~/.ssh/authorized_keys'

Jetzt können Sie SSH in der Ferne verwenden, indem Sie einfach Ihren privaten Schlüssel angeben:

ssh remote -i ~/.ssh/id_rsa

Eine noch bessere Vorgehensweise besteht darin, eine Datei zu erstellen ~/.ssh/config die alle Ihre SSH-Authentifizierungskonfigurationen enthält. Zum Beispiel, wenn Ihr config Datei lautet wie folgt:

Host-Entwickler
Hostname remote
Identitätsdatei ~/.ssh/id_rsa

Anschließend können Sie sich durch einfaches Eingeben bei Remote anmelden ssh dev.

9. Git

git ist ein Versionskontrollsystem, mit dem Sie von der Befehlszeile aus effizient durch den Versionsverlauf und die Verzweigungen Ihres Codes navigieren können.

👉 Beachten Sie das git ist nicht dasselbe wie GitHub: git ist ein eigenständiges Programm, das die Versionierung Ihres Codes auf Ihrem lokalen Laptop verwalten kann, während GitHub ein Ort ist, an dem Sie Ihren Code remote hosten können.

Hier sind einige wichtige Git-Befehle:

  • git add : Gibt an, welche Dateien Sie in den nächsten Commit einschließen möchten
  • git commit -m 'my commit message' : Überträgt die Codeänderung
  • git checkout -b dev : Erstellt einen neuen Zweig mit dem Namen „dev“ und checkt diesen Zweig aus
  • git merge dev : Fügt Entwickler in den aktuellen Zweig ein. Wenn dadurch Zusammenführungskonflikte entstehen, müssen Sie diese Konflikte manuell beheben und dann ausführen git add file_that_changed; git merge --continue
  • git stash : macht alle Änderungen rückgängig und git stash pop bringt sie zurück. Dies ist nützlich, wenn Sie Änderungen am Hauptzweig vorgenommen haben und dann entscheiden, dass diese Änderungen tatsächlich ein separater Zweig sein sollen.
  • git reset --hard : Macht alle Änderungen dauerhaft rückgängig

Und hier sind einige wichtige Git-Befehle für den Umgang mit einem Remote-Host (z. B. GitHub):

  • git clone : Klont eine Kopie des Code-Repositorys auf Ihren lokalen Computer
  • git push origin master : Überträgt die Änderungen an den Remote-Host (z. B. GitHub)
  • git pull : Ruft die neueste Version von der Fernbedienung ab. (Das ist dasselbe wie Laufen git fetch; git merge;).

👉 Bevor Sie einen Befehl ausführen können, z git push origin master, müssen Sie sich mit einem SSH-Schlüsselpaar authentifizieren (siehe Lektion 8). Wenn Sie GitHub verwenden, können Sie den öffentlichen Schlüssel einfach unter Ihren Profileinstellungen einfügen.

10. vim

Vim ist ein leistungsstarker befehlszeilenbasierter Texteditor. Es ist eine gute Idee, zumindest die grundlegenden Befehle in vim zu lernen:

  • Von Zeit zu Zeit müssen Sie sich möglicherweise bei einem Remote-Computer anmelden und dort eine Codeänderung vornehmen. vim ist ein Standardprogramm und daher normalerweise auf jedem Computer verfügbar, auf dem Sie arbeiten.
  • beim Laufen git commit, standardmäßig öffnet Git vim zum Schreiben einer Commit-Nachricht. Sie möchten also zumindest wissen, wie man eine Datei schreibt, speichert und schließt.

Das Wichtigste, was Sie über vim verstehen müssen, ist, dass es verschiedene Betriebsmodi gibt. Sobald Sie vim starten, sind Sie drin Navigationsmodus, mit dem Sie durch die Datei navigieren. Typ i zu starten Bearbeitungsmodus, in dem Sie Änderungen an der Datei vornehmen können. Schreib die Esc Mit der Taste verlassen Sie den Bearbeitungsmodus und kehren zum Navigationsmodus zurück.

Das Nützliche am Navigationsmodus ist, dass Sie mit Ihrer Tastatur schnell durch die Datei navigieren und sie bearbeiten können, zum Beispiel:

  • x löscht ein Zeichen
  • dd löscht eine ganze Zeile
  • b (zurück) geht zum vorherigen Wort, n (next) geht zum nächsten Wort
  • :wq speichert Ihre Änderungen und schließt die Datei
  • :q! ignoriert Ihre Änderungen und schließt die Datei

Weitere (viel mehr!) Vim-Tastaturkürzel finden Sie hier Dieses Vim-Spickzettel.

Photo by Wassili Koloda on Unsplash

Abschließende Gedanken

Herzlichen Glückwunsch, Sie haben „Befehlszeilenzauberei 101“ abgeschlossen. Allerdings haben wir hier nur an der Oberfläche gekratzt. Betrachten Sie zur Inspiration das folgende Problem:

„Gegeben sei eine Textdatei und eine Ganzzahl k, drucken Sie die kDie häufigsten Wörter in der Datei (und die Anzahl ihres Vorkommens) in abnehmender Häufigkeit.“

Als Datenwissenschaftler könnte mein erster Impuls sein, ein Jupyter-Notebook zu starten, die Daten vielleicht in Pandas zu laden und dann eine Funktion wie Pandas zu verwenden agg. Für einen erfahrenen Befehlszeilen-Assistenten gilt jedoch: das ist ein Einzeiler:

tr -cs A-Za-z '' | tr A-Z a-z | sortieren | uniq -c | sort -rn | sed ${1}q

Dies unterscheidet sich nicht allzu sehr von der Vorstellung von Stable Diffusion, die am Anfang dieses Artikels gezeigt wurde. Wahrlich, Zauberei.

So werden Sie ein Befehlszeilen-Assistent. Neu veröffentlicht von der Quelle https://towardsdatascience.com/how-to-become-a-command-line-wizard-5d78d75fbf0c?source=rss—-7f60cf5620c9—4 über https://towardsdatascience. com/feed

<!–

->

Zeitstempel:

Mehr von Blockchain-Berater