Linux Befehle für die Konsole

Diese Informationen sind nur für Leute die genau wissen, was sie tun.

Arbeiten auf der Kommandozeile von Routern

Die Kommandozeile ist ein Eingabebereich für die Steuerung des Routers das im Textmodus abläuft. Damit eröffnen sich für den WRT Möglichkeiten jenseits der Grenzen der Weboberfläche.

Auf der Kommandozeile

Hat man sich schließlich per SSH eingeloggt, lassen sich zahlreiche Befehle nutzen.

Informationen zum Freifunknetz

Die Funktion batctl

In der ersten Zeile Anzeige der B.A.T.M.A.N.-ADV Version

batctl o

Traceroute für B.A.T.M.A.N. advanced operates on layer 2.

batctl tr <MAC_address|bat-host_name|host_name|IP_address>

Ping für B.A.T.M.A.N. advanced operates on layer 2.

batctl p <MAC_address|bat-host_name|host_name|IP_address>

Übersetzung für B.A.T.M.A.N. advanced operates on layer 2.

batctl t <MAC_address|bat-host_name|host_name|IP_address>

Statistik für B.A.T.M.A.N. advanced operates on layer 2.

batctl s

Zeigt alle Gateways mit aktueller Bandbreite im Freifunknetz

batctl gwl

Auflisten aller Nutzer im Freifunknetz

batctl tg

Anzahl aller WIFI Nutzer im gesamten Netzwerk anzeigen

batctl tg |grep W |wc -l

Auflistung localer Nutzer

batctl tl

Anzahl localer Clients anzeigen

batctl tl |grep W |wc -l

Schlüssel für ssh

sind auf dem Freifunkrouter in /etc/dropbear/authorized_keys hinterleg.
mit cat kann man diese anzeigen und mit vi bearbeiten. Je Zeile ein Schlüssel.

cat /etc/dropbear/authorized_keys
vi /etc/dropbear/authorized_keys

Anpassen der Einstellungen in OpenWrt

UCI ist das Kommandozeilentool, welches in OpenWRT genutzt wird, um Einstellungen auszulesen oder zu ändern. Über UCI lassen sich alle Einstellungen, die auch über die Konfigurationsoberfläche möglich sind, sowie einige weitere Einstellungen vornehmen.

Einstellungen anzeigen

Alle gesetzten Einstellungen auflisten:

uci show

Eine bestimmte Einstellung suchen:

uci show|grep Suchwort

Eine bestimmte Einstellung anzeigen:

uci show [Einstellung]

Beispiel:

uci show autoupdater.settings.enabled

Oder für eine Einstellungsgruppe:

uci show autoupdater.settings

Einstellungen setzen

uci set [Einstellung]=[Wert]

Beispiel:

uci set autoupdater.settings.enabled=1

Wichtig: Wenn du Einstellungen via UCI gesetzt hast, müssen diese via uci commit am Ende aktiviert werden!

Einstellungen sichern

Bevor man an Einstellungen herum fummelt kann es sinnvoll sein, diese zunächst zu sichern um sie problemlos wieder herzustellen. Dies lässt sich für alle Einstellungen via uci export oder auch nur für einen Abschnitt machen, wie im folgenden Beispiel:

uci export network > network.uci

Und der Import geht dann so:

cat network.uci | uci import

Einstellungen von Gluon ändern

Gluon ist eine OpenWrt-basierte Freifunk-Firmware, die von vielen, aber nicht allen Communities im Freifunk-Umfeld benutzt wird.

Bitte beachte, dass diese deutschen Anleitungen veraltet sein können, die aktuelle Dokumentation (auf Englisch) findet sich im GitHub Wiki des Gluon-Projektes.


Autoupdater Branch festlegen

Wenn der Router nach dem Reboot wieder oben ist könnt ihr den Branch für den Autoupdater noch festlegen:

uci set autoupdater.settings.enabled='1'
uci set autoupdater.settings.branch='stable'
uci commit autoupdater

Das Update kann man dann manuell anstoßen.

autoupdater -f 

Das stable Release ist immer die jüngste stabile Version der Firmware für Produktivsysteme. Seit der Version 0.5 ist der Autoupdater mit dem stable Branch automatisch bei Installation aktiviert, so dass die Router sich automatisch aktuell halten. Sollte dies nicht gewünscht sein, so muss dies explizit deaktiviert werden.

Neustart im Configmode

Manchmal ist es Notwendig in den Configmode zu starten. Dies beinhaltet die Weboberfläche des Systems zum ersten Einrichten eines Freifunk-Routers. Für gewöhnlich hält man ein paar Sekunden lang die Reset Taste gedrückt. Folgende Ausführung würde den gleichen Effekt erzielen:

uci set gluon-setup-mode.@setup_mode[0].enabled=1
uci commit gluon-setup-mode
reboot

Routernamen ändern

Wenn ihr bspw. den *Namen* des Router ändern möchtet geht dies wie folgt in der SSH Shell:

uci set system.@system[0].hostname='FF-OB-SAMPLE-01'  << Name anpassen
uci commit system

Danach ist ein Reboot erforderlich.

Kontaktdaten ändern

uci set gluon-node-info.@owner[0]='owner'
uci set gluon-node-info.@owner[0].contact='Mustermann muster@freifunk-ruhrgebiet.de 02453434434'  << Daten anpassen
uci commit gluon-node-info

Geodaten ändern

uci set gluon-node-info.@location[0]='location'
uci set gluon-node-info.@location[0].share_location='1'
uci set gluon-node-info.@location[0].latitude='51.484943'   << anpassen
uci set gluon-node-info.@location[0].longitude='6.880250'  << anpassen 
uci commit gluon-node-info

Falls die Daten sich nicht zeitnah aktualisieren, kann man das mit

/etc/init.d/alfred restart

anschieben.

Bandbreitenbegrenzung ändern

Alt:

uci set gluon-simple-tc.mesh_vpn='interface'
uci set gluon-simple-tc.mesh_vpn.ifname='mesh-vpn'
uci set gluon-simple-tc.mesh_vpn.enabled='1'
uci set gluon-simple-tc.mesh_vpn.limit_ingress='50000'  << download anpassen
uci set gluon-simple-tc.mesh_vpn.limit_egress='10000'   << upload anpassen
uci commit gluon-simple-tc

Neu:

uci set simple-tc.mesh_vpn=interface
uci set simple-tc.mesh_vpn.ifname='mesh-vpn'
uci set simple-tc.mesh_vpn.enabled='1'
uci set simple-tc.mesh_vpn.limit_ingress='16000' << download anpassen
uci set simple-tc.mesh_vpn.limit_egress='1000' << upload anpassen
uci commit simple-tc

Mesh VPN aktivieren

Mesh VPN bezieht sich auf das Meshen mit anderen Routern über das Internet. Es ist auch Voraussetzung für die Internetfreigabe der Clients am eigenen Knoten.

uci set fastd.mesh_vpn.enabled=1
uci commit fastd
/etc/init.d/fastd start

Sofern noch kein Schlüssel generiert wurde, muss das ebenfalls geschehen:

/etc/init.d/fastd generate_key mesh_vpn
18fa75d1808692f04770bedf30c42dac24585d331560c545d70dd27f22a05648

Dieser Schlüssel muss dann in der jeweiligen Domäne angemeldet werden.

Meshing über WAN-Schnittstelle (Mesh on wan) aktivieren

Wenn du die WAN-Schnittstelle nicht nur für einen Internetzugang verwenden möchtest, sondern über diese auch das Meshing-Protokoll aktivieren willst, um z.B. andere, evtl. langsamere Freifunk-Router mit dem Freifunk-Netz zu versorgen, gehst du wie folgt vor:

uci set network.mesh_wan.auto=1
uci commit network
/etc/init.d/network restart

Meshing über WAN-Schnittstelle deaktivieren

uci set network.mesh_wan.auto=0
uci commit network
/etc/init.d/network restart

Private WLAN

Es ist möglich ein privates WLAN anzulegen, das mit dem WAN-Port gebridged und separat zum Mesh Netzwerk ist. Bitte beachte, dass Mesh on Wan nicht zeitgleich aktiviert werden sollte. Effekt: Dieses private WLAN ist nun Teil des am WAN-Port anliegenden Heimnetzes. Gibt man ihm die gleichen Zugangsdaten (SSID & Passwort) wie dem bestehenden Heim-WLAN, so wird dieses effektiv erweitert. Zeitgleich fungiert der Router als Freifunk-Router. Freifunk und privates Netz bleiben dabei voneinander getrennt.

Das private WLAN kann im Config-Modus aktiviert werden, alternativ auch über die Konsole wie folgt:

uci set wireless.wan_radio0=wifi-iface
uci set wireless.wan_radio0.device=radio0
uci set wireless.wan_radio0.network=wan
uci set wireless.wan_radio0.mode=ap
uci set wireless.wan_radio0.encryption=psk2
uci set wireless.wan_radio0.ssid="$SSID"
uci set wireless.wan_radio0.key="$KEY"
uci set wireless.wan_radio0.disabled=0
uci commit wireless
wifi

Bitte ersetze $SSID mit dem Namen deines Heimnetzwerks und $KEY mit deinem bisher üblichen Key (der vom privaten Router). Bei einem Dualband-Gerät (das 2.4 und 5 Ghz für WLAN verwendet), gibt es neben radio0 auch radio1; letzteres sollte genauso konfiguriert werden.

Zum deaktivieren des Ganzen wie folgt vorgehen:

uci set wireless.wan_radio0.disabled=1
grep radio1 /etc/config/wireless
if [ $? ]; then # disable auch das 5GHz radio
   uci set wireless.wan_radio1.disabled=1
fi
uci commit wireless
wifi

Meshing on LAN

Eigentlich wird nur der WAN Anschluss zum Betreiben eines Freifunk Routers benötigt. Die anderen Ports jedoch bleiben ungenutzt. Das Meshing ist über diese (meist gelben) LAN Ports abgeschaltet. Diese sind für Clients, neben WLAN, eine zusätzliche Verbindungsmethode. Man kann diese Ports jedoch auch dafür benutzen um mit weiteren Routern zu "meshen":

uci set network.client.ifname='bat0'
uci set network.mesh_lan=interface
uci set network.mesh_lan.ifname="$(cat /lib/gluon/core/sysconfig/lan_ifname)"
uci set network.mesh_lan.mesh=bat0
uci set network.mesh_lan.proto=batadv
uci set network.mesh_lan.auto=1
uci commit network
reboot

Nur 2015.1.x:

# activate
uci set network.client.ifname="bat0"
uci set network.mesh_lan.auto=1
uci commit network
/etc/init.d/network restart
# deactivate
uci set network.client.ifname="bat0 $(cat /lib/gluon/core/sysconfig/lan_ifname)"
uci set network.mesh_lan.auto=0
uci commit network
/etc/init.d/network restart


Testen (funktioniert nur, wenn auch ein Kabel eingesteckt ist):

batctl if

sollte nun u.A. eth1: active anzeigen

ubus call network.interface.mesh_lan status

Sollte "up": true anzeigen

batctl if add eth0 # anpassen

Netzwerkport zu bat0 hinzufügen.

batctl if del eth0 # anpassen

Netzwerkport aus bat0 entfernen.

Abrufen an welchen Ports Kabel eingesteckt sind

am Freifunk-Router

swconfig dev switch0 show | grep 'link:'

am Linux PC

mit netstat -i ermitteln welche Netzwerkschnittstellen es gibt.

mit ethtool den Status der Schnittstelle anzeigen lassen.

ethtool <Netzwerkschnittstelle> | grep Link 

Gateways im Router an-/abschalten

uci set fastd.mesh_vpn_backbone_peer_<<COMMUNITY-NAME>>_vpn<<NR-DES-GATEWAYS>>.enabled=0/1
uci commit
/etc/init.d/fastd restart

<<COMMUNITY-NAME>> muss durch das Kürzel eurer Community ersetzt werden, z.B. ffnord

<<NR-DES-GATEWAYS>> wird durch die Zahl des Gateways ersetzt (i.d.R. 0-3)

Clientnetz zeitgesteuert an-/abschalten

vi /usr/lib/micron.d/wifioff
i (um den Schreibmodus zu aktivieren)

Für tägliche Abschaltung von 21 bis 7 Uhr:

0 21 * * *  uci set wireless.ibss_radio0.disabled='1'; uci set wireless.mesh_radio0.disabled='1'; uci set wireless.client_radio0.disabled='1'; uci set wireless.wan_radio0.disabled='1';uci set wireless.ibss_radio1.disabled='1'; uci set wireless.mesh_radio1.disabled='1'; uci set wireless.client_radio1.disabled='1'; uci set wireless.wan_radio1.disabled='1';wifi
0  7 * * *   uci set wireless.ibss_radio0.disabled='0'; uci set wireless.mesh_radio0.disabled='0'; uci set wireless.client_radio0.disabled='0'; uci set wireless.wan_radio0.disabled='0';uci set wireless.ibss_radio1.disabled='0'; uci set wireless.mesh_radio1.disabled='0'; uci set wireless.client_radio1.disabled='0'; uci set wireless.wan_radio1.disabled='0';wifi
ESC dann :wq
Erläutertung:
wireless.ibss - wird nur benötigt, wenn Mesh via IBSS aktiv ist
wireless.mesh - wird nur benötigt, wenn Mesh via 802.11s aktiv ist
wireless.client - schaltet das Client Netz ab
wireless.wan - wir benötigt, wenn eine private WLAN SSID ausgestrahlt wird
radio0 - 2,4GHz WLAN Modul
radio1 - 5GHz WLAN Modul

Fastd Uplink sofort für ein paar Stunden ausschalten

Manchmal braucht man die gesamte Bandbreite für eine Zeit für sich. In dem Fall braucht man nicht gleich den Stecker zu ziehen, sondern mit diesem Script kann man direkt von seinem Rechner aus auf der Konsole den Uplink für eine Zeit ausschalten:

SECONDS=3600 # one hour
ssh root@your:ipv6::addr:ess '(/etc/init.d/fastd stop && sleep '$SECONDS' && /etc/init.d/fastd start)&'

Statusseite partiell ausblenden - Privacy (2016.1.x) (-x blendet aus und +x machtes wieder sichtbar)

Nachbarknoten (alles)

chmod -x /lib/gluon/status-page/www/cgi-bin/interfaces

Nachbarknoten (dBm)

chmod -x /lib/gluon/status-page/www/cgi-bin/dyn/stations

Statistik (alles)

chmod -x /lib/gluon/status-page/www/cgi-bin/dyn/statistics

WAN auf allen Netzwerkports

 uci set network.client.ifname=bat0
 uci set network.wan.ifname='eth0 eth1'
 uci commit network

Achtung! Je nach Router sind auch andere Befehle notwendig. Zuerst sollte man mit

 uci show network.client.ifname
 uci show network.wan.ifname

sich den Altzustand anzeigen lassen und notieren. Der WDR4300 hat z.B. statt eth0 und eth1 die Interface eth0.1 und eth0.2. Zur Änderung werden folglich folgende Befehle benötigt.

 uci del_list network.client.ifname=eth0.1
 uci add_list network.wan.ifname=eth0.1

Danach die Änderung erneut prüfen. Und mit

 uci commit 

bestätigen.

ReBroadcast Mesh-on-WAN/LAN abschalten (Default on 2016.2.x)

With this option set incoming multicast payload frames on <iface> are not being rebroadcasted on <iface> again.
This option should be set on links which are known to be transitive and symmetric only, for instance point-to-point wifi longshots or wired links.
-- Linus Lüssing

uci set network.mesh_wan.mesh_no_rebroadcast='1'
uci set network.mesh_lan.mesh_no_rebroadcast='1'
uci commit network
reboot && exit

Weiterleitungs-Kosten des Mesh-Hop (Knoten) festlegen (2011.0.0 <= batman-adv < 2014.1.0)

A higher hop penalty will make it more unlikely that other nodes will choose this node as intermediate hop towards any given destination.
EX: Mobile nodes could choose a value of 255 (maximum value) to avoid being chosen as a router by other nodes.

1. Anzeigen (Default: 15)

cat /sys/class/net/bat0/mesh/hop_penalty 

2. Temporär ändern, z.B. 100

echo 100 > /sys/class/net/bat0/mesh/hop_penalty

3. Persistent abspeichern, z.B. 100

uci set batman-adv.bat0.hop_penalty='100'
uci commit batman-adv
# reboot oder Schritt 2. zum Anwenden

Sendeleistung reduzieren

Mögliche Werte:

iwinfo phy0 txpower

Sendeleistung z.B. auf 12dBm reduzieren:

uci set wireless.radio0.txpower=12
uci commit
wifi

Hinweis: seit 2016.2.3 ist dort ein ungelöster Bug, weshalb das z.Z keine Wirkung hat. Workaround:

iw phy0 set txpower fixed 1200 # $wert mal 1000

POE Passthrough auf TP-Link CPE

Ab Gluon 2016.2:

uci set system.poe_passthrough=gpio_switch
uci set system.poe_passthrough.name='PoE Passthrough'
uci set system.poe_passthrough.gpio_pin='20'
uci set system.poe_passthrough.value='1'
uci commit system

http auf WAN Port verfügbar machen

uci set firewall.wan_http=rule
uci set firewall.wan_http.dest_port=80
uci set firewall.wan_http.src=wan
uci set firewall.wan_http.name=wan_http
uci set firewall.wan_http.target=ACCEPT
uci set firewall.wan_http.proto=tcp
uci commit

/etc/init.d/firewall reload

Nützliche Befehle für Freifunkfirmware und OpenWRT

Befehl Beschreibung
ls Verzeichnisinhalt listen
cd Verzeichnis wechseln
cp Kopieren
rm Datei/Verknüpfung/Link löschen
vi Textdateieditor (verlassen mit ESC,!,q,RETURN). Befehlsübersicht
date Anzeigen und Einstellen des Datums und der Uhrzeit
uptime zeigt die Gerätelaufzeit seit dem letzten Neustart an
df -h Speicherauslastung der Dateisysteme anzeigen
free Arbeitsspeicherauslastung anzeigen
top Systemauslastung/Prozesse anzeigen (wird mit "q" wieder beendet). Manpage
logread System-Logs anzeigen
ip Das "Schweizer Messer" zur Netzwerkkonfiguration. Wesentliche Varianten: ip link show, ip address show, ip route show. Manpage
mtr Paketverfolgung und Anzeige der Zwischenstationen. Eine Kombination aus ping und traceroute. Manpage
horst Ein kleines Programm, welches u.a. die empfangenen WLAN-Netzwerkpakete mit der dazugehörigen Signalstärke anzeigt. Muss ggf. per opkg nachinstalliert werden.
opkg Paketmanagement. Dokumentation
busybox Kombi-Binary für alle wesentlichen Utilities. Die Manpage ist lesenswert; sollten Symlinks fehlen, per busybox cmd aufrufen.

nützliche One-Liner

Befehl Beschreibung
arp | grep br-batman | wc -l Gibt die der ARP-Tabelle bekannte Zahl an MAC-Adressen auf dem br-batman Device zurück.
arp | sort -n ARP-Tabelle, erhöhte Lesbarkeit.
ip a | grep inet | sort Filtert die ip a Ausgabe nach IP-Adressen.
Enter, dann ~ (Tilde), dann . (Punkt) Remoteterminal hängt? Diese Sequenz bringt dich zurück.

ausführliche Beispiele

cd /VERZEICHNIS
wget http://SERVER/VERZEICHNIS/DATEI
scp datei1 datei2 user@server:/zielverzeichnis/

scp benutzerx@server1:datei1 datei2 benutzery@server2:

scp user@server:/verzeichnis/datei /lokales/zielverzeichnis/
ssh root@ff-router

cd /tmp

wget <link zum image>

sysupgrade -nv <heruntergeladenes image>

oder

ssh root@ff-router

scp benutzerx@server1:datei.bin /tmp/

cd /tmp

sysupgrade -nv datei.bin

tar -xf *.tar oder tar -xzf *.tar.gz
./go
opkg install PAKET.ipk
ln -s /verzeichnis/datei /verzeichnis/link
ip addr show wlan0
wget -q -O - http://127.0.0.1:2006/neigh
traceroute www.freifunk.net
mtr www.freifunk.net
export EDITOR=/usr/bin/nano
echo 'export EDITOR=/usr/bin/nano' >> /etc/profile ;exit
echo 'export EDITOR=/usr/bin/nano' >> ~/.bashrc ; exit
crontab -e

crontab als root bearbeiten und neue Zeile einfügen, zB. ( für täglich 4 Uhr):

    0 4 * * * sync ; reboot
top
kill PID
cd /VERZEICHNIS
wget http://SERVER/VERZEICHNIS/DATEI
scp datei1 datei2 user@server:/zielverzeichnis/

scp benutzerx@server1:datei1 datei2 benutzery@server2:

scp user@server:/verzeichnis/datei /lokales/zielverzeichnis/
ssh root@ff-router

cd /tmp

wget <link zum image>

sysupgrade -n <heruntergeladenes image>

oder

ssh root@ff-router

scp benutzerx@server1:datei.bin /tmp/

cd /tmp

sysupgrade -n datei.bin


tar -xf *.tar oder tar -xzf *.tar.gz
./go
opkg install PAKET.ipk
ln -s /verzeichnis/datei /verzeichnis/link
ip addr show wlan0
wget -q -O - http://127.0.0.1:2006/neigh
traceroute www.freifunk.net
mtr www.freifunk.net
export EDITOR=/usr/bin/nano
echo 'export EDITOR=/usr/bin/nano' >> /etc/profile ;exit
echo 'export EDITOR=/usr/bin/nano' >> ~/.bashrc ; exit
crontab -e

crontab als root bearbeiten und neue Zeile einfügen, zB. ( für täglich 4 Uhr):

    0 4 * * * sync ; reboot

batman Befehle für die Konsole

Noch mehr Linux Befehle für die Konsole

nützliche One-Liner
Befehl Beschreibung
arp | grep br-batman | wc -l Gibt die der ARP-Tabelle bekannte Zahl an MAC-Adressen auf dem br-batman Device zurück.
arp | sort -n ARP-Tabelle, erhöhte Lesbarkeit.
ip a | grep inet | sort Filtert die ip a Ausgabe nach IP-Adressen.
Enter, dann ~ (Tilde), dann . (Punkt) Remoteterminal hängt? Diese Sequenz bringt dich zurück.
Befehl Beschreibung
clear Konsole leeren
ls Verzeichnisinhalt listen
cd Verzeichnis wechseln
cp Kopieren
rm Datei/Verknüpfung/Link löschen
vi Textdateieditor (verlassen mit ESC,!,q,RETURN). Befehlsübersicht
date Anzeigen und Einstellen des Datums und der Uhrzeit
uptime zeigt die Gerätelaufzeit seit dem letzten Neustart an
df -h Speicherauslastung der Dateisysteme anzeigen
free Arbeitsspeicherauslastung anzeigen
top Systemauslastung/Prozesse anzeigen (wird mit "q" wieder beendet). Manpage
logread System-Logs anzeigen
ip Das "Schweizer Messer" zur Netzwerkkonfiguration. Wesentliche Varianten: ip link show, ip address show, ip route show. Manpage
mtr Paketverfolgung und Anzeige der Zwischenstationen. Eine Kombination aus ping und traceroute. Manpage
iptraf Ein kleines Programm welches den aktuellen Datenverkehr anzeigt. Läuft in der Konsole.
horst Ein kleines Programm, welches u.a. die empfangenen WLAN-Netzwerkpakete mit der dazugehörigen Signalstärke anzeigt. Muss ggf. per opkg nachinstalliert werden.
opkg Paketmanagement. Dokumentation
busybox Kombi-Binary für alle wesentlichen Utilities. Die Manpage ist lesenswert; sollten Symlinks fehlen, per busybox cmd aufrufen.

Wichtige Linux Befehle

Benutzerverwaltung

Befehl Beschreibung
adduser Hinzufügen eines Benutzers
chsh Änderung der Standard-Shell des Benutzers ("change shell")
deluser Löschung eines Benutzers ("delete user")
groupadd Hinzufügen einer Gruppe ("add group")
groupdel Löschung einer Gruppe ("add group")
groupmod Bearbeitung einer Gruppe ("modify group")
id Anzeige der Benutzer- und Gruppenkennung (ID)
newgrp Änderung der Gruppe des aktuellen Benutzers ("new group")
passwd Änderung des Passworts eines Benutzers ("password")
usermod Bearbeitung eines Benutzerkontos ("modify user")
chfn erweiterte Benutzerinformationen anpassen

Grundkommandos

Befehl Beschreibung
cat Verknüpfung von Dateien ("concatenate")
cd Wechsel des Arbeitsverzeichnisses ("change directory")
cp Kopie von Dateien oder Verzeichnissen ("copy")
date Anzeige von Datum und Zeit
echo Anzeige eines Textes
exit Ende der Sitzung
info Anzeige einer Hilfe-Datei
ln Link zu einer Datei oder einem Verzeichnis ("link")
ls Auflistung von Dateien ("list")
man Ausgabe der Handbuchseite zu einem Befehl oder einer Anwendung ("manual")
mkdir Erzeugung von Verzeichnissen ("make directory")
mmv Multiple move (Datei-Mehrfachoperationen mit Hilfe von Wildcard-Mustern)
mv Kopieren einer Datei und Löschen der Ursprungsdatei ("move");
mv im aktuellen Verzeichnis ausgeführt: Umbenennung einer Datei
pwd Anzeige des aktuellen Verzeichnisses ("print working directory")
rm Löschen von Dateien und Verzeichnisse ("remove")
rmdir Löschen eines leeren Verzeichnisses ("remove directory")
sudo Root-Rechte für den Benutzer ("substitute user do")
touch Änderung der Zugriffs- und Änderungszeitstempel einer Datei oder eines Verzeichnisses (auch: Erstellen von Dateien)
unlink Löschen einer Datei

Netzwerk

Befehl Beschreibung
dig Namensauflösung (DNS)
ifconfig Anzeigen und Konfiguration von Netzwerkgeräten ("interface configuration")
iwconfig Werkzeug für WLAN-Schnittstellen
ip der Nachfolger von ifconfig
iw der Nachfolger von iwconfig
netstat Auflistung offener Ports und bestehender Netzwerkverbindungen ("network statistics")
ping Prüfen der Erreichbarkeit anderer Rechner über ein Netzwerk
route Anzeige und Änderung der Route (Routingtabelle)
traceroute Routenverfolgung und Verbindungsanalyse

Dateiwerkzeuge

Befehl Beschreibung
basename Rückgabe des Dateinamens
blkid Anzeige der UUID angeschlossener Laufwerke (siehe auch lsblk)
comm Zeilenweiser Vergleich sortierter Dateien
cut Spaltenweise Manipulation von Textdaten
dd Bit-genaues Kopieren von Datenträgern
diff Vergleich des Inhalts zweier Dateien (siehe auch patch für das Anwenden eines "Diffs")
dirname Rückgabe des Pfades
find Suche nach Dateien
grep Durchsuchen von Dateien
locate Suche nach Dateien mit Hilfe der Datenbank locatedb
lsblk Anzeige von Informationen zu Speichermedien ("list block devices")
lsof Anzeige offener Dateien ("list open files")
md5sum Ermittlung und Überprüfung der MD5-Prüfsumme von Dateien
mount Einhängen eines Dateisystems
umount Aushängen eines Dateisystems
rename Umbenennung von Dateien
rsync Datensynchronisation
shred Sicheres Löschen von Daten
sort Sortieren von Dateien nach vorgegebenen Kriterien
split Aufteilung großer Dateien in mehrere kleine
tre-agrep Werkzeug zur "unscharfen" Suche mit regulären Ausdrücken
tree Verzeichnishierarchie rekursiv als Baumstruktur anzeigen
uniq Ausgabe einer sortierten Datei ohne doppelte Zeilen
updatedb Aktualisierung der locate-Datenbank ("update database")

Pager

Befehl Beschreibung
head Ausgabe der ersten Zeilen einer Datei
less Scrollfähige Anzeige einer Textdatei
more Wie less, aber ohne die Fähigkeit, rückwärts zu scrollen
tail Ausgabe der letzten Zeilen einer Datei

Prozesssteuerung

Befehl Beschreibung
nice Vorgabe der Priorität eines Prozesses
nohup Lösung eines Prozesses aus der Sitzung, die ihn aufruft
pgrep Anzeige der Prozessidentifikationsnummer(n) zu gegebenen Prozessnamen/regulärem Ausdruck
pidof Anzeige der Prozessidentifikationsnummer(n) zu gegebenen Prozessnamen
renice Änderung der Priorität eines Prozesses zur Laufzeit
schedutils Befehle für die fortgeschrittene Prozesskontrolle

Rechte

Befehl Beschreibung
chattr Veränderung von Datei-Attributen und Rechten auf ext2- und ext3-Dateisystemen ("change attributes")
chgrp Festlegung der Gruppenzugehörigkeit von Dateien ("change group")
chmod Veränderung der Zugriffsrechte von Dateien ("change mode")
chown Festlegung des Besitzers und der Gruppenzugehörigkeit von Dateien ("change ownership")

Systemüberwachung

Befehl Beschreibung
dmesg Kernelmeldungen auf den Bildschirm ausgeben lassen; nützlich bei der Fehlersuche
at Einstellung von einmalig durchzuführenden zeitgesteuerten Skript-/Befehlsaufrufen
crontab Einstellung von zeitgesteuerten Skript-/Befehlsaufrufen
df Ausgabe des Speicherplatzes aller eingehängten Laufwerke ("disk free")
du Ausgabe des Speicherverbrauchs von Verzeichnissen ("disk usage")
free Ausgabe der Arbeitsspeicherauslastung
kill Beendigung eines durch die Prozess-ID gekennzeichneten Prozesses
killall Beendigung von nach dem Prozessnamen gekennzeichneten Prozessen
pkill Beendigung eines nach seinem Namen/durch einen regulären Ausdruck gekennzeichneten Prozesses
service service DIENSTNAME [OPTION] (start, stop, restart, status usw.)
ps Ausgabe aller laufenden Prozesse ("process status")
pstree Ausgabe aller laufenden Prozesse in Baumform
script Terminalsitzungen mitschneiden (siehe auch scriptreplay)
stat Zeitstempel von Dateien und Ordnern anzeigen
top Ausgabe der Prozessorauslastung
uptime Angabe der Laufzeit und Auslastung des Computers
vmstat erste Analyse von Engpässen

Nützliche Befehle ohne Kategorie

Befehl Beschreibung
alias Vergabe von Kurznamen an Kommandos
apropos Anzeige von Hilfe-Themen zu einem Stichwort
chroot Ausführung eines Kommandos/einer interaktiven Shell in einem angegebenen Wurzelverzeichnis
clear Löschen des momentanen Bildschirminhalts
dircolors Anpassung der Farben von ls
logger Einträge in /var/log/syslog erstellen
lscpu Anzeige von Prozessor-Informationen ("list cpu")
lshw Anzeige von Hardware-Informationen ("list hardware")
lspci Anzeige von Informationen zur PCI-Hardware ("list pci")
lsusb Anzeige von Informationen zur USB-Hardware ("list usb")
pinfo Anzeige einer Hilfe-Datei an (ähnlich wie info)
pv Ein Programm zum Betrachten des Fortschritt von Operationen durch Pipes
reboot Rechner neu starten
rtcwake Rechner automatisch Starten bzw. Herunterfahren
sed Nicht-interaktiver Editor
seq Sequenzen von Zahlen im Terminal erzeugen
shutdown Herunterfahren des Systems
sleep Pausieren von Prozessen
tasksel Installationshilfe für die Kommandozeile
tee Eingaben auf mehrere Ausgaben verteilen
time Messung der Laufzeit von (Shell-)Befehlen
tr Lesen, Umwandeln und Neuausgabe von Zeichenkombinationen ("translate"/"transliterate")
uname Ausgabe von Systeminformationen ("unix name")
wall Mitteilung an alle auf dem System eingeloggten Nutzer senden
watch Periodischer Aufruf anderer Kommandos
wc Zählung von Wörten, Zeilen und Zeichen in Textdateien ("word count")
whatis Anzeige der Kurzbeschreibung eines Programms
whereis Sucht das Binary (ausführbare Datei), den Quellcode und die man-Page eines Programms
which Anzeige der Datei, die bei Eingabe eines Befehls ausgeführt wird
who Anzeige von Informationen über angemeldete Benutzer
whoami Anzeige des Benutzer, unter dem gerade gearbeitet wird
xargs Anwendung eines Kommandos auf eine Liste von Dateien/Parametern, die von der Standardeingabe oder einer Datei kommen

Unnütze Befehle

Befehl Beschreibung
ddate Ausgabe des Datums im discordischen Format
fortune Ausgabe kurzer Sinnsprüche
sl Spaßprogramm (bei versehentlich verdreht eingegebenem ls)

vi - der Standard-Editor unter Linux/Unix

Beschreibung

vi ist ein konsolenbasierter Texteditor. Er ist gut konfigurierbar und arbeitet sehr effektiv. Da seine Benutzbarkeit sich nicht intuitiv erschließt, ist es erforderlich, die wichtigsten Kommandos zu kennen.

Einige Vorteile von vi

  1. vi ermöglicht ein schnelles und effektives Editieren von Text-Dateien.
  2. Ein zeichengenaues Editieren ist möglich. Auch Sonderzeichen können dargestellt werden.
  3. vi ist als Standard-Editor auf jedem Unix/Linux-System vorhanden.
  4. Der Editor kann grundsätzlich beliebig große Text-Dateien bearbeiten.
  5. Für die Nutzung ist keine grafische Benutzeroberfläche notwendig.

Im vi sind die beiden Modi command und insert zu unterscheiden. Im command-Modus können Positionier-, Lösch-, Such- und viele andere Operationen vorgenommen werden. Das Editieren von Text ist nur im insert-Modus möglich. Das Umschalten vom insert- in den command-Modus erfolgt immer mit der ESC-Taste.

Start der Anwendung

Der Editor wird durch die Eingabe des Kommandos vi dateiname entweder auf einem Konsolbildschirm oder in einem Kommandoeingabefenster aufgerufen.
Für dateiname sollte natürlich der gewünschte Dateiname gewählt werden.

Beispiel

vi brief

Aufgerufen in einem Eingabefenster würde nun folgendes Bild erscheinen.

vi1

Der Cursor befindet sich in der linken oberen Ecke, in der letzten Zeile stehen Statusinformationen wie Dateiname und Zeilen/Spaltennummer. Der Editor startet grundsätzlich immer im command-Modus. Will man nun Text schreiben, muss der vi in den insert-Modus umgeschaltet werden. Das Umschalten erfolgt immer durch Eingabe bestimmter Zeichen.

Umschalten in den insert-Modus

aEinfügen nach dem Cursor
iEinfügen vor dem Cursor
AEinfügen am Zeilenende
IEinfügen am Zeilenanfang
oEinfügen einer neuen Zeile nach der aktuellen Zeile
OEinfügen einer neuen Zeile vor der aktuellen Zeile

Erst nach Eingabe eines der obigen Kommandos wird der Editor in den insert-Modus geschaltet. Danach kann Text eingegeben werden. Um wieder auf den command-Modus zu kommen, muss die ESC-Taste gedrückt werden.

Positionieren des Cursors und Scrolling

hCursor ein Zeichen nach links
lCursor ein Zeichen nach rechts
jCursor eine Zeile nach unten
kCursor eine Zeile nach oben
wCursor zum nächsten Wort oder Sonderzeichen
bCursor zum vorhergehenden Wort oder Sonderzeichen
^Cursor zum Anfang der Zeile (erstes sichtbares Zeichen)
$Cursor zum Ende der Zeile
GCursor zum Ende der Datei
1GCursor zum Anfang der Datei
Strg fScrollen vorwärts
Strg bScrollen rückwärts

Suchen von Textstellen

/musterSuche des Textmusters vorwärts
?musterSuche des Textmusters rückwärts
nSuche wiederholen
NSuche in umgekehrter Richtung wiederholen

Kopieren und Einfügen

ywKopiert das Wort auf dem der Cursor steht
yyKopiert die ganze Zeile in der der Cursor steht
pFügt den zuvor kopierten Text nach der aktuellen Cursorposition ein
PFügt den zuvor kopierten Text vor der aktuellen Cursorposition ein

Löschen von Text

xLöscht genau das Zeichen unter dem Cursor
dhLöscht das Zeichen links vom Cursor
dlLöscht das Zeichen rechts vom Cursor
dwLöscht das Wort auf dem der Cursor steht
ddLöscht die gesamte Zeile
dGLöscht von der Cursorposition bis zum Datei-Ende

Speichern und Beenden

:wSpeichern des Textes in der Datei (Editor wird nicht verlassen)
:wqSpeichern des Textes und Beenden des Editors
:xSpeichern des Textes und Beenden des Editors
:qBeenden ohne Abspeichern (falls Text nicht geändert wurde)
:q!Beenden ohne Abspeichern

Sonstige nützliche Kommandos

.Wiederholung der letzten Aktion
uundo der letzten Änderung
Uundo aller Änderungen in der aktuellen Zeile
:r dateiEinfügen einer Datei an der Cursorposition

Durch das Setzen diverser Parameter kann die Arbeitsweise des vi-Editors modifiziert werden. Diese Parameter können interaktiv während des Editierens eingegeben werden. Sollen die Parameter bei jedem Aufruf von vi zur Verfügung stehen, so sind sie in die Datei .exrc einzutragen.

Beispiele

:set number

Obiges Kommando veranlasst den Editor, die Zeilennummern anzuzeigen.

:set list

Durch dieses Kommando werden im Editor auch nicht sichtbare Zeichen angezeigt (z.B. wird ein Linefeed durch $ gekennzeichnet, ein Tabulatorzeichen mit ^I). Mit einem vorangestellten no werden diese Modifikationen wieder rückgängig gemacht (z.B. :set nolist)