Tipps & Tricks für die Konsole

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hier könnte man allgemein ein paar Tipps und Tricks für doe Konsole posten...


    Zum entpacken verschiedenster Archive kann man folgenden Trick anwenden um nicht jedesmal den vollständigen Befehl eingeben zu müssen:

    Dazu bearbeitet ihr die .bashrc Datei in eurem Homedir: nano ~/.bashrc
    Und fügt ans Ende folgendes ein:

    Anschließend meldet/loggt ihr euch neu an oder die ~/.bashrc neu einlesen lassen:

    Code
    . ~/.bashrc

    Und dann braucht ihr künftig, zum entpacken eines Archives, nur noch folgendes eingeben:

    Code
    ent archive.tar.gz


    Noch eine weitere nützliche Angelegenheit für Anfänger -> http://linuxwiki.de/UnDelete -> http://wiki.linux-club.de/opensuse/Verlo…ellen_ext3_ext4


    Nützliche Tools Erweiterung durch das Paket moreutils

    Beispiel:

    Code
    apt-get update | ts
  • Um das System "halbautomatisch" mit einem Wort zu aktualisieren, kann man ebenfalls in die ~/.bashrc folgendes einfügen:

    Code
    alias update-system='apt-get update && apt-get upgrade'


    Wenn das alles vollautomatisch passieren soll:

    Code
    alias update-system='apt-get update && apt-get -y upgrade'



    Wer aus "Privatsphäre"-Gründen die letzten Kommandos (history) nicht gespeichert haben will, kann folgende Zeile in die ~/.bash_logout im Heimatverzeichnis anfügen:

    Code
    cd && rm -rf ~/.bash_history && touch ~/.bash_history

    Dies löscht beim Abmelden des Benutzers die .bash_history und legt eine leere Datei mit gleichem Namen an.

  • Sehr gute Idee,
    Ein paar Tricks kann ich auch beisteuern und freue mich über neue Ideen.
    Das Entpakscript wurde gleich mal übernommen.:danke_ATDE:

    Grundlegendes:
    Mit <Tab> vervollständigt die Konsole angefangene Ordner- und Dateinamen
    <cd> kann mehr als man denkt, z.B.

    Code
    cd ordner1/ordner2


    geht direkt in den Unterordner, das sollten aber die meisten wissen, jetzt die etwas interessanteren Dinge:

    Code
    cd -


    geht in den Ordner in dem man sich vorher befunden hat, dafür ist es gut sich anzugewöhnen nicht mit cd .. cd .. cd .. cd ordner zu navigieren sondern immer mit einem cd ../../../ordner

    Code
    cd


    Ohne Argumente bringt einen <cd> sofort zurück in das Home-Verzeichnis


    Anderes Thema
    Wenn man ein Programm geöffnet hat, aber noch etwas anderes tun möchte, aus irgendeinem Grund (und wenn es nur Faulheit ist) keine zusätzliche Konsole öffnen möchte, dann kann man mit <strg-z> das aktuell laufende Programm Anhalten und mit <bg> in den Hintergrund schieben (wo es dann weiterläuft). Mit <fg> holt man es wieder in den Vordergrund (nicht nur nach einem <bg> sondern auch in angehaltenem Zustand). Das funktioniert bei fast allen Programmen, einige Programme wie z.B. nano verwenden strg-Kombinationenkannjedoch selber und dadurch bekommt die bash (das Konsolenprogramm) die Befehle garnicht mit und kann es auch nicht umsetzen.

    Ich bin nicht sicher ob dieser Tipp auch unter Windows funktioniert, aber wenn ihr mit Desktop auf dem Pi arbeitet oder mit ssh von einem Linux-Rechner aus, dann könnt ihr mit der mittleren Maustaste zuletzt markierte Texte an der aktuellen Curserposition einfügen.
    Das verwende ich in der Konsole sehr gerne um in (von einem Konsolenprogramm) angezeigte Ordner zu springen oder die DAteien zu öffnen.
    Beispiel:

    Code
    Logfile: /var/log/tolles_programm/error/debug.log

    Jetzt kann man mit Doppelklick die Datei inklusive Pfad markieren, muss nur noch <less> tippen und die mittlere Maustaste (oder beide Maustasten) drücken und <enter> drücken, schon ist die Datei offen. Auf meinem Laptop mit der mittleren Maustaste direkt unter der Leertaste geht das ein ganzes Stück schneller als mit <strg-c> + <strg-v>. Außerdem habe ich so quasi zwei Zwischenablagen, eine im den Dateinamen nicht abschreiben zu müssen, eine zweite um irgendetwas in die Datei hinein zu kopieren oder so.

    Ich hoffe das eine oder andere hilft jemandem ein bisschen.
    Christian

    Kleiner Nachtrag: Ihr könnt in der .bashrc (von meigrafd und eBiBy schon eingeführt) beliebige Programme starten um z.B. den Zustand eures Pi beim anmelden zu sehen. Idealerweiße sollten die Programme nicht "in schleife laufen" also nach dem Befehl sich auch schnell wieder beenden, ansonsten wird das ziemlich schnell nervig.
    Wenn ihr zum Beispiel ein Programm <gpio_status.py> habt, dass einmal den Zustand aller GPIOs ausgibt, dann könnt ihr in die .bashrc einfahc
    gpio_status.py
    schreiben und das wird bei jeder Anmeldung einmal ausgeführt und ihr seht die Ausgabe.

    Einmal editiert, zuletzt von Horroreyes (12. Januar 2014 um 15:27)

  • Wer logfiles kontinuierlich "mitlesen" möchte:

    Code
    tail -f /var/log/apache2/error.log

    STRG-C beendet das ganze dann wieder.

  • Kleine Zusammenstellung der Standart-Tools, Liste definitiv unvollständig, kann gerne ergänzt werden.
    (Achtung, hier wird nicht zwischen Build-In-Function und Programm unterschieden, wem das nichts sagt, dem kann es egal sein)

    cd - Ordner wechseln
    rm (-r) - Datei (Ordner) löschen
    mv - Datei verschieben oder umbenennen (wenn Ort gleich bleibt, Name aber nicht)
    ls - Inhalt eines Ordners ausgeben
    cat - Inhalt einer Datei ausgeben
    less - "Reader" für Textdateien mit Scrollen, Suche etc. (oft heißt es "more ist aber besser!" less ist schon seit langem standardmäßig ein Verweis auf more)
    nano - einfacher Text-Editor, lässt sich intuitiv bedienen
    vim - mächtiger aber komplexer Text-Editor, als ich mal versehentlich drin gelandet bin hab ich es nicht geschafft ihn zu schließen also Vorsicht, inzwischen schwöre ich drauf
    grep - sucht einen Text in einem angegebenen Medium (grep "test" tolles.log sucht den Text "test" in der Logdatei grep "test" tolles_programm gibt nur die zeilen der Ausgabe von "tolles_programm" aus, die "test" enthalten)
    pwd - PrintWorkingDirectory, gibt das aktuelle Verzeichnis aus
    ps - gibt alle laufenden Prozesse dieses Terminals aus, hat unglaublich viele Optionen, sinnvoll ist oft ps alleine oder "ps aux | grep programmname" wenn ich ein spezielles Programm finden will das IRGENDWO läuft
    kill - beendet das Programm mit der angegebenen ProzessID (herauszufinden mit ps) ohne weitere Argumente ist das ein "Liebes Programm beende dich bitte" und sollte das Programm ohne Inkonsistente Dateien etc. schließen wenn es vernünftig geschrieben ist, ein kill -9 schreit dagegen "stirb du ***" und das Programm wird gekillt. Funktioniert ziemlich IMMER.
    df - diskfree, wieviel Platz ist noch auf den Platten (die Option -h macht auch schöne Größenangaben)
    du - Wie groß sind die Dateien/Ordner in und unterhalb des aktuellen Ordners

  • Programme ausführen

    Standardmässig sind 2 Benutzer vorhanden - einmal der "überalles stehender und mächtigster" Benutzer root, das ist quasi der Administrator... Und einmal der normale Benutzer " pi ", der "sudo" benutzen muss wenn er root-Befehle (wie zB "reboot" oder "apt-get install") ausführe will

    Wenn man mit dem Terminal (oder auch Konsole genannt) unter " startx " arbeitet und zum Beispiel ein Python Script ausführen will gibt es 3 bzw 4 Möglichkeiten dies zu tun:

    • Vorher in das Verzeichnis wechseln wo die Datei liegt und dann mit vorangestelltem " ./ " die Datei ausführen, also:
      Code
      cd /home/pi/Desktop
      ./python_skript.py
    • Vorher in das Verzeichnis wechseln wo die Datei liegt und anstatt " ./ " den zu verarbeiteten Interpreten (SheBang) gefolgt von einem Leerzeichen vorranstellen, also:
      Code
      cd /home/pi/Desktop
      python python_skript.py
    • Den Vollständigen Pfad zur Datei eingeben:
      Code
      /home/pi/Desktop/python_skript.py
    • Den Vollständigen Pfad zur Datei eingeben, mit vorangestelltem Interpreten (SheBang):
      Code
      python /home/pi/Desktop/python_skript.py


    Varianten 1 und 3 funktionieren nur wenn das Script ausführbar ist und besonders wichtig: Ein SheBang in der ersten Zeile des Scripts eingetragen ist.
    Ausführbar mach man eine Datei wie folgt:
    Entweder chmod +x python_skript.py oder chmod 755 python_skript.py
    (x = execute)

    Der Unterschied ist der, dass man entweder den Interpreter aufruft und ihm die Datei als Argument übergibt (Varianten 2+4),
    oder die Datei einfach ausführt und über den Shebang dann erkannt wird welcher Interpreter den Code ausführen soll (Varianten 1+3)

    Den Interpreten angeben brauch man i.d.R. nur wenn das Script entweder nicht ausführbar ist, oder in der ersten Zeile des Scripts nicht sowas wie " #!/bin/python " (der SheBang) steht - das gibt dem System darüber Auskunft welcher Interpret das nachstehende verarbeiten soll - oder man temporär Parameter an den Interpreten übergeben möchte zum Beispiel zum debuggen des Codes...


    Programme mit root-Rechten ausführen

    Vorweg: Wird ein Script/Programm mit root-Rechten ausgeführt werden auch alle daran gekoppelten Befehle (die zB in dem Script stehen) ebenfalls mit root-Rechten ausgeführt

    Standardmässig und auch aus Sicherheitsgründen wird generell dazu geraten als normaler Benutzer " pi " zu arbeiten aber manches benötigt root-Rechte.
    Das wiederum geht so wie bereits erwähnt, entweder mit vorangestelltem " sudo " oder das Script direkt als root-Benutzer ausführen.. Ersteres wäre vermutlich einfacher, also mit sudo.

    Nun käme es darauf an wo man sich befindet nachdem man das Terminal / Konsole aufgemacht hast, vermutlich direkt in seinem Homedir ( /home/pi ) aber da liegt das Script nicht unbedingt, also kannt man auch kein " sudo ./python_script.py " ausführen weil dann selbstverständlich "No such File" als Fehlermeldung kommen würde..

    Also muss man eins von den 1-4 Beispielen von oben anwenden:

    • Code
      cd /home/pi/Desktop
      sudo ./python_script.py
    • Code
      cd /home/pi/Desktop
      sudo python python_script.py
    • Alternativ, wenn man tatsächlich im " /home/pi " startet, ginge auch:
      Code
      sudo Desktop/python_script.py
    • oder vollständigen Pfad angeben:

      Code
      sudo /home/pi/Desktop/python_script.py

    Um herauszufinden in welchem Verzeichnis man sich aktuell befindet:

    Code
    pwd


    Programme ohne Angabe des Verzeichnisses ausführen

    Führt man einen Befehl wie zum Beispiel "cd" aus, sucht Linux in den sog. PATH Verzeichnissen. PATH ist eine sog. Umgebungsvariable, alle Umgebungsvariablen lassen sich mit dem Befehl env betrachten. Als Trennzeichen wird " : " verwendet.
    Möchte man also ein Script ausführen ohne den Pfad anzugeben, legt man das Script am besten in einer der PATH Verzeichnisse ab, wobei man /usr/local/bin oder /usr/local/sbin/ bevorzugen sollte... Dateien in sbin/ können zudem normalerweise nur "Admins" ausführen also root aber keine normalen Benutzer.

    Voraussetzung für ein Script:
    - Shebang
    - Ausführbar (chmod +x)

    raspi-config ist zum Beispiel auch nur ein sh Script. Die Dateiendung dient nur der Übersicht, entscheidend ist der Shebang.
    "sh" ist älter als "bash", hat also eigentlich auch nichts mit der Dateiendung zu tun.

  • Wenn ihr jemandem einen Code oder ein Logfile zeigen wollt, aber nicht die Möglichkeit habt copy&paste zu machen zum Beispiel weil ihr Tastatur+Monitor direkt angeschlossen und kein SSH machen könnt ... Dann gibt es einen einfachen Trick - Voraussetzung ist allerdings eine Internetverbindung:

    Code
    cat /path/to/log | curl -F 'sprunge=<-' http://sprunge.us

    Oder:

    Code
    cat index.php | curl -F 'sprunge=<-' http://sprunge.us


    sprunge.us ist so ähnlich wie pastebin.com oder codepad.org nur ohne Syntax Highlight.


    Man kann sich dafür auch ein Alias einrichten sodass man nur noch den Alias mit der Datei ausführen brauch:

    Code
    echo "alias spaste=\"curl -F 'sprunge=<-' http://sprunge.us\"" >> ~/.bashrc

    Datei einlesen damit Alias auch ohne neu anmelden wirksam wird:

    Code
    . ~/.bashrc


    Der Aufruf wäre dann nur noch

    Code
    cat index.php | spaste


    Es gibt aber auch ein Programm was nicht nur pastebin.com verwenden kann:

    Code
    apt-get install pastebinit


    Verfügbare Plattformen die damit verwendet werden können, können mit folgendem Befehl angezeigt werden:

    Code
    pastebinit -l


    Anwendungsbeispiel wäre:

    Code
    pastebinit -i /path/to/log -a test -b http://slexy.org

    Oder:

    Code
    cat my.php | pastebinit -f php -a test -b http://paste.debian.net

    Oder:

    Code
    cat prog.cpp | pastebinit -a test -b http://cpp.pastebin.com


    Mehr zu den verfügbaren Parametern findet man wie immer über die manual-pages:

    Code
    man pastebinit


    Auch hierfür kann man ein Alias einrichten:

    Code
    echo "alias paste=\"pastebinit -a test -b http://paste.debian.net\"" >> ~/.bashrc

    Datei einlesen damit Alias auch ohne neu anmelden wirksam wird:

    Code
    . ~/.bashrc


    Der Aufruf wäre dann nur noch

    Code
    cat index.php | paste

    Oder:

    Code
    cat index.php | paste -f php


    Wer es aber noch komfortabler haben möchte kann das Beispiel aus dem ersten Beitrag zweckentfremden und folgendes in ~/.bashrc anstelle des Alias eintragen:

    Anwendung wäre dann nur noch:

    Code
    paste index.php

    und er setzt - sofern die Dateiendung (extension) erkannt bzw im Script eingetragen ist - auch gleich den richtigen Syntax Highlight ;)

  • Mit dem Befehl script hat man eine sehr einfache Möglichkeit in Linuxsystemen, Eingaben bzw. Programmausgaben festzuhalten. Zum Aufzeichnen einfach

    Code
    script Logfile

    starten. Beenden kann man die Aufzeichnung mit

    Code
    exit oder Strg + D

    Programmausgaben kann man auch in eine Datei mit

    Code
    ./Programm > Logfile

    umlenken, bzw. damit der Inhalt nicht mit neuen Daten überschrieben wird, diese an das Logfile mit

    Code
    ./Programm >> Logfile

    anhängen. Das Logfile kann man dann per LAN o. USB Stick kopieren.

  • Häufig möchte man gleiche oder ähnliche Befehle wieder in der Konsole ausführen. Mit

    Code
    <strg> <shift> R

    Sucht man rückwärts in der Eingabehistory nach Text, der die eingegebenen Zeichen enthält.

    Beispiel:

    Irgendwann vorher sah ich mir das logfile /var/log/syslog mit less an. Anstatt wieder den gesamten Befehl neu einzugeben tippe ich <strg> <shift> R und sysl und schon kann ich das Logfile wieder untersuchen. Diese Methode ist auch sehr hilfreich wenn man häufig in diversen Verzeichnissen rumstöbert. Einfach ein paar eindeutige Zeichen des Verzeichnisses eingeben :)

    Ist mein am am häufigsten genutzer Shortcutkey in der Konsole neben !$. Weitere NavigationsLieblinge von mir habe ich hier beschrieben.


  • Wer aus "Privatsphäre"-Gründen die letzten Kommandos (history) nicht gespeichert haben will, kann folgende Zeile in die ~/.bash_logout im Heimatverzeichnis anfügen:

    Code
    cd && rm -rf ~/.bash_history && touch ~/.bash_history

    Dies löscht beim Abmelden des Benutzers die .bash_history und legt eine leere Datei mit gleichem Namen an.

    Einfach die history ausschalten.

    Code
    echo "unset HISTFILE" >> ~/.bashrc

    Alternative falls man sie beim aktuellen arbeiten doch braucht wäre sie zu löschen beim logout:

    Code
    echo "history -c" >> ~/.bash_logout; chmod +x ~/.bash_logout


    Mit dem Befehl script hat man eine sehr einfache Möglichkeit in Linuxsystemen, Eingaben bzw. Programmausgaben festzuhalten. Zum Aufzeichnen einfach

    Code
    script Logfile

    starten.

    script ist ein nettes Tool. Wer es öfters benutzt sollte sich das Teil mal genauer angucken.

    mkfifo foo; script -af foo

    mit cat auf das File foo kann man dann schön zugucken. Interessant wenn man anderen etwas zeigen will. Könnte man auch per screen -x .... machen. Wenn man aber verhindern will das andere dazwischen funken und andere Sachen auf dem System veranstalten ist script besser.

    Zusätzlich ist auch noch -t bzw. --timing interessant. Damit kann man die Zeiten mitschneiden und später das File foo von Script wie eine Aufzeichnung abspielen lassen.
    Screencapturing fällt dann weg. Man muss nicht erst die funktionierende Lösung suchen, sondern macht einfach. :)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!