Terminal

Aus brainelectronics Wiki
Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

Grundlegendes

Dateien

Auflisten

Allgemein

   $ ls 

Größe

Um die Größe aller im aktuellen Verzeichnis befindlichen Dateien und Verzeichnisse anzuzeigen, verwendet man

   $ du -sh */

Um die Größe einer bestimmten Datei anzuzeigen, verwendet man

   $ du -sh Pfad/zur/Datei.pdf

Um die Größe eines bestimmten Verzeichnisses anzuzeigen, verwendet man

   $ du -sh Pfad/zum/Verzeichnis/

Rechte

   $ ls -la

Bewegen

Verzeichnis

   $ mv /home/ursprung/ /home/neues/Verzeichnis/

Dateien in Verzeichnis

Bewegt alle Dateien im Verzeichnis folderB in das aktuelle Verzeichnis

   $ cd /path/to/folderA
   $ mv folderB/* .
   $ rmdir folderB

Editieren

   $ nano die-Datei.txt

Existiert die-Datei nicht, so wird eine Datei mit dem angegebenen Namen und Format erstellt.

Spezielle Zeile editieren

Soll direkt zur Zeile z.B. 459 gewechselt werden beim öffnen der Datei verwendet man:

   $ nano +459 die-Datei.txt

Zeilen anzeigen

   $ nano /etc/nanorc   # global
   $ nano ~/.nanorc     # lokal

In Zeile ca. 45 die folgende Zeile einkommentieren

set const
 

Herunterladen

Von URL

   $ wget http://server-adresse.de/bild.png
   $ wget --user someUsername --password hisPassword http://server-adresse.de/bild.png

Damit wird das File so gespeichert wie in der Adresse angegeben, alternativ lässt sich mit '-O' ein Wunschname angeben

   $ wget http://server-adresse.de/bild.png -O Katze.png

oder mittels curl und einer (un-)verschlüsselten Verbindung, wichtig ist '-O', da die Datei sonst im Terminal Putput angezeigt wird.

   $ curl -O -u username:password "http://your-server-adress.de/owncloud/remote.php/webdav/finalFileName.zip"

Aus Server laden

Holt die Datei 'datei.txt' aus einem externen (eigenen) Server (your-domain.de), welche sich im Ordner 'Documents' befindet über den Benutzer (user) und dem Port (PortNummer)

   $ scp -P PortNummer user@your-domain.de:Documents/datei.txt ./

Holt den gesamten Ordner "project" aus dem Verzeichnis /pi/project und speichert diesen in das aktuelle Verzeichnus unter "projectFetched"

   $ scp -r /pi/project pi@192.168.178.216 ./projectFetched

Weitere Optionen

  • -p behält modification times, access times, and modes from the original file.
  • -C Komprimiert die Datei für die Übertragung
  • -o "StrictHostKeyChecking no"
Im Hintergrund

Soll das ganze im Hintergrund ausgeführt werden, damit auch von der Konsole abgemeldet werden kann, so wird nach dem obigen scp Befehl in den Hintergrund gebracht (CRTL+Z) und mit dem Befehlt

   $ bg

begleitet. Anschließend noch der Prozess "enteignet" und dann von der Konsole optional ausgeloggt.

   $ disown
   $ exit ####### optional

Fortgeführter SCP trotz geschlossener Shell

Hochladen

Dies gilt zumindest für OwnCloud

   $ curl -X PUT -u username:password "http://your-server-adress.de/owncloud/remote.php/webdav/finalFileName.zip" -F myfile=@"/Users/Jones/Documents/Some Subfolder/Eine Datei 2016.zip"

Bei der Angabe der Datei kann einfach mit Leerzeichen gearbeitet werden. Hierbei muss nicht über ein 'Some\ Subfolder' gearbeitet werden, allerdings muss der gesamte Pfad zur Datei angegeben werden.

Auf Server laden

Da nicht der Hauptuser wie z.B. 'pi' für den Upload genutzt werden will, ist ein neuer Benutzer nur für dieses Verzeichnis anzulegen. Dieser kann nur dort agieren.

   $ sudo adduser uploadUser --home /your/upload/directory
Ohne automatischem Kennwort
   $ scp -P 2106 ~/Documents/testText.txt user@your-server.de:/your/upload/directory
Mit automatischem Kennwort

Dafür muss sshpass installiert sein (nur bei Linux möglich, Mac verbietet installation von sshpass via brew)

   $ sudo apt-get install sshpass
   $ sshpass -p "dein-passwort" scp -P 2106 ~/Documents/testText.txt user@your-server.de:/your/upload/directory

Kopieren

Datei

   $ cp Datei.txt destination/to/new/location

Ordner

   $ cp -r [source folder] [destination directory]/[foldername]/
   $ cp -r meinOrdner home/pi/Documents/meinNeuerOrdner

Wenn meinOrdner die Dateien A.txt, B.jpg, C.py und den Ordner "Subfolder" enthält, so sind diese nach der Operation im Ordner "meinNeuerOrdner" enthalten.

Rechte erhalten

Soll der gesamte Inhalt mit Ordnern und Unterordner sowie deren Rechte des Ordners meinOrdner in den neuen Ordner NewFolder kopiert werden, verwendet man:

   $ cp -a meinOrdner/. ~/Documents/NewFolder/

Löschen

   $ rm Datei.jpg

Packen/Entpacken

TAR

Entpacken
   $ tar -zxvf data.tar.gz

Mit folgenden Möglichkeiten:

   -z : Uncompress the resulting archive with gzip command.
   -x : Extract to disk from the archive.
   -v : Produce verbose output i.e. show progress and file names while extracting files.
   -f data.tar.gz : Read the archive from the specified file called data.tar.gz.
   -C /Documents/aFolder : Extract files in /Documents/aFolder directory.
Verpacken

Alle Dateien im Verzeichnis folderToPack/

   $ tar -cvzf tarballname.tar.gz folderToPack/

Nur JPEG Dateien im Verzeichnis path/to/images/

   $ tar -cvzf jpegarchive.tar.gz path/to/images/*.jpg

ZIP

Installation

Dieser Befehl kann standardmäßig nicht installiert sein (Raspberry Jessy)

   $ sudo apt-get install zip unzip
Entpacken
   $ unzip file.zip -d destination_folder
Verpacken
   $ zip -r zipfile.zip directory

Soll ein Verzeichnis innerhalb der 'directory' nicht in das ZIP gepackt werden:

   $ zip -r zipfile.zip directory -x directory/ignoreDir1/**\* dir1/ignoreDir2/**\*

Suchen

Unter Linux kann folgender Befehl verwendet werden um alle Dateien systemweit zu finden, welche auf '.stl' enden

   $ find / -name "*.stl"

Lokal

Zeigt nur Dateien die auf '.php' enden an

   $ ls *.php

Zeigt nur Dateien mit Anfangsbuchstaben 'B' an

   $ ls B*

Global

   $ mdfind gesuchte-datei.png

Dies gibt alle Verzeichnisse aus in denen die Datei mit dem Namen "gesuchte-datei.png" existiert.
Dieser Befehl sucht unter Mac OS X auch im Library Verzeichnis. Dies ist besonders für die Suche nach installierten Libs unter Python nützlich.

Umbenennen

Einer Datei von 'alterName.php' auf 'neuerName.php'

   $ mv /home/user/alterName.php /home/user/neuerName.php

Eines Ordners von 'alterOrdner' auf 'neuerOrdner'

   $ mv /home/user/alterOrdner /home/user/neuerOrdner

Zählen

Zähle alle Dateien im Verzeichnis inklusive Unterverzeichnissen

   $ find ~/Downloads/ -print | wc -l

Fenster leeren

mit CTRL+L

Festplatte testen

Zum Testen der Schreib-/Lesegeschwindigkeit können die nachfolgenden Befehle verwendet werden.

Schreiben

   $ time dd if=/dev/zero bs=1024k of=tstfile count=1024

Dies schreibt eine Datei mit Block Size 1024kB und Namen 'tstfile' auf die Festplatte, das Ergebnis kann ähnlich diesem aussehen:

1024+0 records in
1024+0 records out
1073741824 bytes transferred in 7.601015 secs (141262956 bytes/sec)

real	0m7.607s
user	0m0.003s
sys	0m0.955s
 

Die 141262956 bytes/sec entsprechen in etwa 134,71 MB/s. Um korrekte Daten zu erhalten, sollten diese Vorgänge mehrmals durchgeführt und gemittelt werden

Lesen

Die zuvor geschriebene Datei wird hiermit wieder gelesen.

   $ dd if=tstfile bs=1024k of=/dev/null count=1024

1024+0 records in
1024+0 records out
1073741824 bytes transferred in 0.295370 secs (3635242081 bytes/sec)
 

History

Anzeigen

   $ history

liefert eine Ausgabe ähnlich

  ...
  650  sudo systemctl 
  651  ls -al
  652  nano test.txt 
  653  sudo reboot
  654  history
user@Computer:~ $ 
 

Löschen

Dieser Befehl löscht die History des aktuellen Users im geöffneten Terminal

   $ history -c

Die History ist weiter verfügbar/lesbar unter

   $ more .bash_history

Um auch dieses zu löschen und damit die History vollständig zu löschen

   $ history -c
   $ history -w

Packete

Installierte anzeigen

   $ dpkg -s <packet-name>

Installiertes deinstallieren

   $ sudo dpkg --remove thePackageName

Installiertes suchen

   $ apt-cache search thePackageName

Programm ausführen

Programme

Fürt das Programm aus und je nach Art des Programms gibt es zudem die Ausgaben aus.

   $ octoprint

Fürt das Programm aus und verschiedt es in den Hintergrund

   $ octoprint &

Bash Script

   $ sh fileName.sh

PHP Script

   $ php fileName.php

Python Script

   $ python fileName.py

Python/Verbindung verlassen

Wurde Python im Terminal geöffnet, kann Python dort mit exit() oder CRTL+D beendet werden.

Rechte erteilen

Für alle Dateien im aktuellen Verzeichnis

   $ chown username:groupname .

Für die Datei 'testDatei.py'

   $ chown username:groupname testDatei.py

Routing Tabelle anzeigen

   $ netstat -nr

Services anzeigen

Zeigt alle aktuellen Services an

   $ service --status-all

SSH

Keys anzeigen

   $ ls ~/.ssh

Key erzeugen

   $ ssh-keygen -t rsa -b 4096 -C "verknüpft-mail-adresse@example.com"

Dies generiert einen SSH Key und verknüpft diesen mit der angegebenen Mail Adresse.
Anschließend wird nach einem Namen für den eben generierten SSH Key gefragt. Wird dies mit Enter "übersprungen" so ersetzt dies den Default SSH Key. Wird ein Name angegeben, so wird der SSH Key unter dem Namen abgelegt und kann mit

   $ pbcopy < ~/.ssh/myKeyName.pub

in die Zwischenablage kopiert werden.

   $ ssh-add ~/.ssh/myKeyName

Fügt den SSH Key myKeyName zum SSH Agent hinzu

Key kopieren

   $ pbcopy < ~/.ssh/myKeyName.pub

Falls der Befehl pbcopy nicht verfügbar ist, kann hiermit der öffentliche Key ins Terminal codiert werden.

   $ cat ~/.ssh/myKeyName.pub 

Meist ist nur ein Key verfügbar, dessen default Name id_rsa lautet.

Verbingung herstellen

Allgemein

   $ ssh ip-oder-domain-des-server -l benutzername -p port-adress

Strato

Das Passwort ist das Masterpasswort!

   $ ssh www.deine-domain.de@ssh.strato.de

Shortcut

Um komfortabler auf einen Server zugreifen zu können, kann ein Shortcut für eine SSH Verbindung erstellt werden.

   $ nano ~/.ssh/config
Host MyServer
User mein-Benutzername
Port mein-Port
HostName IP-des-Server-oder-Domain
 

Damit kann nun einfacher verbunden werden

   $ ssh MyServer

Soll Autocpmplete mittels Tab unterstützt werden, so muss das bash file editiert werden

   $ nano ~/.bash_profile
complete -o default -o nospace -W "$(/usr/bin/env ruby -ne 'puts $_.split(/[,\s]+/)[1..-1].reject{|host| host.match(/\*|\?/)} if $_.match(/^\s*Host\s+/);' < $HOME/.ssh/config)" scp sftp ssh
 

Verwendeten Befehl suchen

Wurde ein Befehl verwendet und dieser soll nun erneut ausgeführt werden, so kann dieser mit CTRL+R gesucht werden.
Um durch die Liste der Befehle, welche zum eingegebenen Wort passen, zu wechseln, wird CTRL+R verwendet.

Verzeichnisse

Wechseln

Gegebenes

   $ cd directroy/to/change/to

Mit TAB kann ein Verzeichnis Name vervollständigt werden.

Neuestes

   $ cd "$(ls -td -- */ | head -n 1 | cut -d'/' -f1)"

Wechsellaufwerke

Diese befinden sich - sofern gemountet - bei Raspberry/Linux unter:

   $ cd /media/NAME-DES-DEVICE

Löschen

   $ rm -rf verzeichnis/

Sym Link

Allgemein

   $ ln -s /path/to/original /path/to/symlink

┌── ln(1) link, ln -- make links
│   ┌── Create a symbolic link.
│   │                         ┌── the path to the intended symlink
│   │                         │   can use . or ~ or other relative paths
│   │                   ┌─────┴────────┐
ln -s /path/to/original /path/to/symlink
      └───────┬───────┘
              └── the path to the original file/folder
                  can use . or ~ or other relative paths
 

Beispiel

Soll der Ordner images im Verzeichnis /var/www/html eigentlich auf mnt/usbDevice/ liegen, so wird der Ornder images in mnt/usbDevice/ angelegt und dann verlinkt

   $ ln -s /mnt/usbstorage/images/ /var/www/html/

Danach befindet sich folgender Sym Link in Verzeichnis /var/www/html

lrwxrwxrwx 1 root     root    23 Jan 16 01:48 images -> /mnt/usbstorage/images/
 

Speziell

Autostart

Im Verzeichnis /etc/init.d/ wird ein Skript hinterlegt über welches das Programm gestartet wird.

   $ sudo nano /etc/init.d/NameDesSkripts
#! /bin/sh
### BEGIN INIT INFO
# Provides: noip
# Required-Start: $syslog
# Required-Stop: $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: noip server
# Description:
### END INIT INFO

case "$1" in
    start)
        echo "noip wird gestartet"
        # Starte Programm
        /usr/local/bin/octoprint
        ;;
    stop)
        echo "noip wird beendet"
        # Beende Programm
        killall noip2
        ;;
    *)
        echo "Benutzt: /etc/init.d/noip {start|stop}"
        exit 1
        ;;
esac

exit 0
 

Die Rechte werden anschließend auf Lesen+Schreiben vergeben

   $ sudo chmod 755 /etc/init.d/NameDesSkripts

Nun kann es gestartet/gestoppt werden

   $ sudo /etc/init.d/NameDesSkripts start

Hinzufügen

Soll das Skript beim Booten aufgerufen werden, so benötigt man

   $ sudo update-rc.d NameDesSkripts defaults

Löschen

Soll das Skript beim Booten nicht mehr aufgerufen werden, so verwendet man

   $ sudo update-rc.d -f NameDesSkripts remove