Inhaltsverzeichnis

System Administration

Hier findest du das nötige Handwerkszeug für die tägliche Arbeit als Sys-Admin. und Anwender.

Eine Sammlung von oft genutzten Kommandos, wichtigen System Einstellungen und Lösungs-Abläufe zur Beseitigung von Fehlern wird hier geboten. Diese Dokumentation war zu Beginn eine kleine Notiz in einer Text-Datei als Spick-Zettel für einige komplexere Aufgaben bestimmt, mit der Zeit wuchs die Datei an und ein anderes Format musste gefunden werden um eine übersichtliche Dokumentation beizubehalten.

Rückmeldungen können mir gerne jederzeit über meine XMPP Adresse pulsar@jabber.ccc.de oder an meine MATRIX Adresse @ronni:matrix.org mitgeteilt werden

Es gilt in dieser Dokumentation folgendes:

Text Editoren

Ein Text-Editor ist das wichtigste Werkzeug um Konfigurations-Dateien zu bearbeiten. Es gibt hier eine große Auswahl, hier werden zwei Editoren beschrieben welche man direkt auf der Kommandozeile/Text-Modus einsetzen kann.

Vi Vim

Bei Debian basierten Systemen ist oft Vim (Vi IMproved) vorinstalliert. Vi zeig den Text zunächst einmal nur an, erst durch Eingabe von speziellen Vi-Kommando erreicht man zum Beispiel den Eingabe/Insert Modus von wo aus der Text bearbeitet werden kann. Den Eingabe/Insert Modus aktiviert man mit dem Vi-Kommando „i“. Nachdem der Text bearbeitet ist lässt sich im Insert-Modus durch Angabe von :w speichern, :q beendet den Editor und die Kombination aus beiden :wq speichert und beendet den Editor. Beendet ohne zu speichern erfolgt mit einen angehängten ! also :q!

nano

Bei Suse Systemen ist der nano-Editor fast immer vorhanden. Nach dem öffnen einer Datei wird einem im unteren Bereich die entsprechende Tasten Kombinationen angezeigt, dabei bedeutet das Zeichen ^ Strg-Taste benutzen.

Vorgehen Debian System einrichten

Weigert sich die Tastatur mit grafischen Konfigurations-Programmen auf „de“ eingestellt zu werden hilft die Bearbeitung der Datei:

/etc/default/keyboard ---> XKBLAYOUT="de"

Benutzer anlegen und verwalten

Das Heimatverzeichnis des Hauptbenutzer auf Sicherungs-Partition verlegen. Die Verlinkungen können dann entfallen. Bis auf OpenSuse .kde4 und Ubuntu .kde Unterschied

Dann aus Kompatibilitäts-Gründen das Heimatverz. auf der Sicherungs-Partition mit dem Standard Heimatverzeichnis verlinken.

ln -s /media/BackupA/Backup/System/ronni /home/ronni
Neuen Gast Benutzer anlegen: gast (gast Konto auf SD Karte (256MB) o. USB Stick)
useradd -c Besucher -d /home/gast -m -s /bin/bash -u 1010 gast
useradd -c Testfeld -d /home/probe -m -s /bin/bash -u 1011 probe
Neuen Hauptbenutzer anlegen: ronni
useradd -c Multimedia -d /home/ronni -m -s /bin/bash -u 2511 ronni

groupadd -g 800 backup
usermod ronni -aG backup,video,audio  Ubuntu evtl. users und gast-Gruppe 
optional
adduser ronni backup
adduser ronni gast
adduser ronni probe
vipw und vigr			=zum sicheren anpassen von /etc/passwd und /etc/group
Passwort

Für Skripte, hash aus einem Passwort erzeugen:

python3 -c 'import crypt; print(crypt.crypt("meingeheimespw", crypt.mksalt(crypt.METHOD_SHA512)))'

Mit Eingabe des Passworts, hash erzeugen:

python3 -c 'import crypt,getpass; print(crypt.crypt(getpass.getpass(), crypt.mksalt(crypt.METHOD_SHA512)))'

In der Datei /home/gast/.profile den Wert „umask 002“ setzen oder eintragen.

chmod -R 774 /home/gast/
als Standard Benutzer

Symbolische links für Ordner im Heimatverz. anlegen. Ordner darf vorher nicht im Verkn. Verz. existieren. Am besten ist es den Ordner vorher ins Sicher Laufwerk zu verschieben und dann mit Verkn. Verz. Verknüpfen.

[SUSE] mit .kde4/share/apps/
ln -s /media/BackupA/backup/System/iglu/Desktop/ /home/ronni/
ln -s /media/BackupA/backup/System/iglu/kmail2/ /home/ronni/.kde/share/apps/
ln -s /media/BackupA/backup/System/iglu/knotes/ /home/ronni/.kde/share/apps/
ln -s /media/BackupA/backup/System/iglu/remoteview/ /home/ronni/.kde/share/apps/

Bei mehreren Linux Systemen auf der Festplatte auch auf einen gemeinsamen System-Virtualisierungs Order verlinken. Z.B. Alle Systeme nutzen /home/ronni/.aqemu/

[als root]
Symbolische links für oft verwendete Skripte anlegen.
ln -s /home/ronni/Desktop/Ablage/Programme/bootlog /usr/local/bin/
ln -s /home/ronni/Desktop/Ablage/Programme/sicher /usr/local/bin/
ln -s /home/ronni/Desktop/Ablage/Programme/wolpcwecker /usr/local/bin/
Switch User

Falls ein Nutzer keine Login-Shell hat(/etc/passwd /usr/sbin/nologin), kann man sich trotzdem einloggen mit dem su-Kommando wird noch der Parameter –shell=/bin/bash übergeben.

su - mysql --shell=/bin/bash
Numlock an

Ziffernblock soll dauerhaft aktiviert sein. Hierzu das Paket numlockx installieren:

apt install numlockx

Anschließend den folgenden Kommando ausführen:

numlockx on

Beim nächsten Neustart ist dann der Ziffernblock aktiv.

Sicherungs-Platte

Hard-Links für NFS-Freigabe verwenden um Platz zu sparen. Mit Hard-Links kann man einen weiteren oder mehrere verweise auf eine bestehende Datei erzeugen. Man kann einen Hard-link löschen und hat aber dann immer noch einen weiteren Verweis auf die Datei. Ein Hard-Link belegt praktisch keinen Speicherplatz, so kann man schnell Kopien machen zum Beispiel auf einem Sicherungs-Ordner und einen Ordner den man für alle frei gibt. Berechtigungen für neue Hard-Links nach dem kopieren evtl. erneut setzen.

Diese Operation muss auf dem NFS-Server direkt ausgeführt werden, da HardLinks nicht über Gerätegrenzen hinweg gesetzt werden können. HardLinks sind nur innerhalb der selben Festplatte möglich.

In das NFS-Freigabe Verzeichnis gehen wo die Daten aus Sicherungs-Platte hin sollen und mit cp -al QUELLE ZIEL das ganze Verzeichnis per Hard-Links in die NFS-Freigabe bringen:

ronald@nfsserver:/media/Sicherung/NFSFreigabe/Musik $ cp -al /media/SicherB/Sicher/Multimedia/Musik/* .

Mit ls -li lassen sich dann überprüfen ob die Inodes_Nummern der Dateien in beiden Verzeichnissen identisch sind - was sie sein sollten.

fstab passend bearbeiten so das auch Backup Laufwerke immer an der selben Stelle gemountet werden

chown -R ronni.backup Backup/
chmod -R 1770 Backup/	= (1)Sticky bit gesetzt für aktuelle Benutzer
chmod -R 2770 Backup/	= (2)Sticky bit gesetzt für aktuelle Gruppe

Sprachpakete für Programme

Ein Programm z.B. Claws-Mail meckert rum, das ein Wörterbuch für die Rechtschreibprüfung nicht gefunden werden kann: „can't find its dictionaries for spell checking“

Nun weiß man zunächst nicht welches Sprach-Paket von welchem Rechtschreibprüfungs-Programm von Claws-Mail genutzt wird. Es gibt z.B. aspell und hunspell Hier hilft ein Blick in die Paktverwaltung, um sich hier die Informationen zum Claws-Mail Paket anzeigen zu lassen.

apt show claws-mail

In der Ausgabe ist die Zeile Recommends: wichtig

Recommends: xfonts-75dpi | xfonts-75dpi-transcoded, aspell-en | aspell-dictionary

In der Ausgabe steht etwas von aspell, daher installieren wir das deutsche aspell Wörterbuch

apt install aspell-de

Ansible

Auto Konfiguration mit Ansible

Beispiele ohne Playbooks und Roles

Kommando als remote User ansible ausführen, ssh-key vom Remote Nutzer muss im ~/.ssh hinterlegt sein.

ansible all -u ansible -b -a "/usr/bin/zypper lr"

Mit Ansible Kommando nur auf einen bestimmten Host (hier moni2) ausführen:

ansible moni2.rodgau.ronni.de -u ansible -b -a "/usr/bin/zypper lr"

Nutzer Tux anlegen

ansible moni2.rodgau.ronni.de -b -a "/usr/sbin/useradd tux"

Desktop Debian einrichten

  1. WLAN Key eingegeben
sudo apt purge scratch2 scratch wolfram-engine minecraft-pi cups-client realvnc-vnc-server samba-common
sudo apt autoremove
sudo apt install kodi pidgin clipit

Vom Ansible Steuerungs-Server können per Ansible viele Informationen von entfernten Rechnern gesammelt werden:

ansible pc206.myhome.net -m setup

Diese Informationen lassen sich über Variablen abrufen und sich so auch in Ansible-Playbooks verwenden. Dies ermöglicht auch Verzweigungen mit when.

---
- hosts: web
  tasks:
    # Install and configure Apache on RedHat/CentOS hosts.
    - block:
        - yum: name=httpd state=installed
        - template: src=httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf
        - service: name=httpd state=started enabled=yes
      when: ansible_os_family == 'RedHat'
      sudo: yes
 
    # Install and configure Apache on Debian/Ubuntu hosts.
    - block:
        - apt: name=apache2 state=installed
        - template: src=httpd.conf.j2 dest=/etc/apache2/apache2.conf
        - service: name=apache2 state=started enabled=yes
      when: ansible_os_family == 'Debian'
      sudo: yes

Playbooks werden idR auf allen Hosts oder einer Gruppe von einem Inventory File angewendet. Es lässt sich aber auch auf einem einzelnen Host in einem Inventory File anwenden. Mit dem Schalter –limit hostname

ansible-playbook -i entwicklung --limit iglu1 second-network-interface.yml

Paketnamen in Variable speichern und ausgeben:

- name: Get packages
  shell: dpkg-query -f '${binary:Package}\n' -W
  register: packages

- name: Print packages
  debug:
    msg: "{{ packages.stdout_lines }}" 

Weitere ähnliche Beispiele:

To get a list of installed packages, you should use:

- name: yum_command 
  yum:
    list=installed
  register: yum_packages

- debug:
    var: yum_packages

It saves a list of dictionaries describing each package to a variable yum_packages.

You can then use a JSON Query Filter to get a single package (tar):

- debug: var=item
  with_items: "{{yum_packages|json_query(jsonquery)}}"
  vars:
    jsonquery: "results[?name=='tar']"

to get a result like this:

"item": {
    "arch": "x86_64",
    "epoch": "2",
    "name": "tar",
    "nevra": "2:tar-1.26-31.el7.x86_64",
    "release": "31.el7",
    "repo": "installed",
    "version": "1.26",
    "yumstate": "installed"
}

Or only its version:

- debug: var=item
  with_items: "{{yum_packages|json_query(jsonquery)}}"
  vars:
    jsonquery: "results[?name=='tar'].version"
"item": "1.26"

Auflisten der installierten Ghostscript Versionen aller Rechner die im Inventory eingetragen sind:

ansible all -a 'apt list ghostscript'

ansible all -a 'rpm -qa "ghostscript"'

Einen Patch auf allen Entwicklungssystemen ausrollen:

ansible all -i inventoryfiles/entwicklung -m shell -b -a 'zypper in -y -t patch SUSE-SLE-SERVER-12-SP4-2020-555=1'

Ansible Variablen

Variable mit dem Namen ticket. Mit debug: var=ticket wird sehr viel Information zurück gegeben. Möchte man nur die reine Variable, muss die Variable mit ticket.stdout_lines benannt werden.

...
- name: Get Icinga client ticket.
  shell: "/usr/lib64/icinga2/sbin/icinga2 pki ticket --cn {{ icinga_client_fqdn }} --salt dwj7363h410m"
  register: ticket

- debug: var=ticket.stdout_lines

Der Output des Abschnitts:

TASK [add-icinga-director-client : debug] *******************************************************************************************
ok: [eeexx.mgmt.rodgau.de] => {
    "ticket.stdout_lines": [
        "112c20f0e98dw2205fe432a1fb12feamcndf77"
    ]
}

Mit einer [0] holt man sich die Variable dann ohne newline.

  - debug: var=ticket.stdout_lines[0]

Der Output des Abschnitts:

TASK [add-icinga-director-client : debug] ********************************************************************************************
ok: [bise3.mgmt.example.de] => {
    "ticket.stdout_lines[0]": "b1ffc20f0e986d18205fe432a1fb12f0ea834f99"
}
  - name: Debug request
    debug:
      msg: "{{ ticket.stdout_lines[0] }}"

Der Output des Abschnitts:

TASK [add-icinga-director-client : Debug request] ********************************************************************************************
ok: [bise3.mgmt.example.de] => {
    "msg": "b1ffc20f0e986d18205fe432a1fb12f0ea834f99"
}

Ansible Role

Beispiele für Icinga2 Install & Konfiguration

ansible --version
ansible-galaxy init icinga2 --offline
ansible-galaxy init icinga2
ansible-galaxy -vvv init icinga
ansible-galaxy list
ansible-galaxy install icinga2
ansible-galaxy setup icinga2

Neues Icinga Modul in Ansible 2.5

https://docs.ansible.com/ansible/latest/modules/icinga2_host_module.html

Icinga Clients auto install & Konfiguration

https://monitoring-portal.org/woltlab/index.php?thread/35989-using-ansible-to-generate-the-icinga-client-certificates/

https://www.voja.de/2017/03/25/icinga2-mit-ansible-deployen/

Icinga-Role Icinga2agent install

ansible-icinga2-master.zip

Icinga API

Host Objekt anlegen über die Icinga API

   curl -k -s -u icinga-api:geheim -H 'Accept: application/json' -X PUT 'https://icinga2:5665/v1/objects/hosts/googledns' -d '{ "attrs": { "address": "8.8.8.8", "check_command": "hostalive" } }'
   {"results":[{"code":200.0,"status":"Object was created"}]}

Using ALT+SYSRQ Keyboard Sequences

Press ALT+SYSRQ+H (3 keys simultaneously) and check what's printed at the HN console, for example:

SysRq : HELP : loglevel0-8 reBoot tErm Full kIll saK showMem Nice powerOff showPc unRaw Sync showTasks Unmount

This output shows you what ALT+SYSRQ sequences you may use for performing this or that command. The capital letters in the command names identify the sequence. Thus, if there are any troubles with the machine and you're about to reboot it, please press the following sequences before pressing the Power button:

Strg-Alt-SysReq+K den X-Server beenden
ALT+SYSRQ+M to dump memory info;
ALT+SYSRQ+P to dump processes states;
ALT+SYSRQ+S to sync disks;
ALT+SYSRQ+U to unmount all mounted filesystems;
ALT+SYSRQ+E to terminate processes;
ALT+SYSRQ+I to kill all processes
ALT+SYSRQ+U to try to unmount once again;
ALT+SYSRQ+B to reboot.

If the computer is not rebooted after that, you can press the Power button.

weitere Tasten Kombinationen

Ausgabekanäle

Linux kennt zwei Ausgabekanäle. Kanal Nr. 1 ist die Standardausgabe und wird oft mit „STDOUT“ abgekürzt. Kanal Nr. 2 ist der Fehlerkanal oder auch „STDERR“. Dort werden i.d.R. die Fehlermeldungen ausgegeben.

Bei einer „normalen“ Ausführung deines Kommandos auf der Konsole erzeugen diese Kanäle keinen Unterschied. Beide erscheinen auf dem Bildschirm. Doch man kann diese Kanäle jeweils seperat in eine Datei (in deinem Fall der Mülleimer) mit dem Zeichen „>“ umleiten. Beispiele:

user@host:~> ping -c 1 www.t-online.de 1> /dev/null
user@host:~> ping -c 1 www.t-online.de > /dev/null
user@host:~> ping -c 1 www.asdfasdfasdf.de >/dev/null
ping: unknown host www.asdfasdfasdf.de
user@host:~>

Die Pingstatistik wird auf Kanal 1 ausgegeben. Und diese wandert in den Mülleimer. Beim Kanal Nr. 1 braucht man die Nummer übrigens nicht angeben; es reicht auch ein einfaches Umleitungszeichen. Kanal Nr. 2 haben wir nicht umgeleitet, und auf diesem wird in diesem Beispiel der Fehler ausgegeben. Diesen können wir mit

2> /dev/null

wegwerfen oder alternativ auf dem Kanal Nr. 1 leiten. Und das geschieht mit

2> &1

Zum Beispiel bedeutet die folgende Zeile:

/bin/date >> /home/pi/datum.log 2>&1

Schreibe das Datum in die Datei datum.log (das 1. > Zeichen) und hänge beim wiederholten ausführen (das 2. > Zeichen) das aktuelle Datum an die bestehende Datei an. Zum Abschluss bewirkt das 2>&1 das die Ausgabe nicht auf dem Bildschirm angezeigt wird und auch evtl. auftretende Fehler mit in die log-Datei geschrieben werden.

Ausgabe umleiten

to redirect the standard error stream to a file just use „2>“

/usr/bin/jolla-email 2> /path/to/file

use „1>“ to get the standard output or „&>“ to get both streams into one file

DBus

DBus für die Kommunikation und Bereitstellung von Informationen an verschiedene Anwendungen. Einsatz z.B. bei der Desktop-Kommunikation.

KDEConnect deaktivieren I'm not sure how to disable it on autostart, but I asked around on the kde forums and got:

qdbus org.kde.kde /modules/kdeconnect [start|stop]

You can use tab completion with qdbus

I think it's only per-session.

Cron

Wie /etc/crontab, so werden auch die Dateien in /etc/cron.d ständig überwacht, ob sich Änderungen ergeben haben. Cron erwacht dann jede Minute und überprüft alle gespeicherten Crontabs, ob sie Jobs enthalten, die in der aktuellen Minute ausgeführt werden sollen.

Die ersten 5 Spalten bedeuten:

  1. Minute [0,59]
  2. Hour [0,23]
  3. Day of the month [1,31]
  4. Month of the year [1,12]
  5. Day of the week ([0,6] with 0=Sunday)

Ein Stern * in der entsprechenden Spalte markiert das der Eintag jede Minute, jede Stunde usw ausgeführt werden soll.

In der nachfolgenden Spalte kann man nun den Nutzername angeben. Dieser ist Pflicht wenn der Cronjob System weit (unter /etc/cron.d) ausgeführt werden soll :!: Wird ein Cronjob als Standard Nutzer direkt mit dem Kommando crontab -e erstellt, so ist der Nutzername nicht erforderlich.

Beispiele

Es soll alle 15 Minuten das Datum in eine Datei geschrieben werden:

Die Datei /etc/cron.d/datumlog anlegen mit folgenden Inhalt:

### Alle 15 Minuten Datum in Datei schreiben ###
*/15 * * * * pi /usr/bin/date >> /home/pi/datum.log 2>&1

oder Alternativ als Nutzer der die Log-Datei schreiben soll mit dem Befehl crontab -e die Zeile oben eintragen aber den Nutzernamen dann weg lassen.

Eine etwas komplexere Crontab welche alle 15 Minuten in der Zeit von 6 Uhr - 18 Uhr ausgeführt wird:

# Synchronisiert zwischen Master und Slave DHCP
0,15,30,45 6,7,8,9,10,11,12,13,14,15,16,17,18 * * 1-5 ansible /bin/bash /usr/local/sbin/dhcpdns_sync.sh > /var/adm/log/dhcpdns_sync.lg 2>&1

Im unteren Abschnitt ein weiteres Beispiel für Cron Einträge in die Datei /etc/cron.d/suse-repos. Hier bedeutet die erste Zeile, jeden Dienstag (2=Dienstag) um 22:21 Uhr soll er das wget Kommando ausführen. Der zweite Eintrag, jeden Montag (1=Montag) um 22:26 Uhr soll er das wget Kommando ausführen. Usw. 6 steht für Samstag. Der vorletzte Eintrag sagt das 9:49 Uhr alle 3 Tage (*/3) der wget Befehl aufgerufen werden soll. Im letzten Eintrag sehen wir im Feld Day of the week eine 0, diese steht für Sonntag. Alle Einträge werden als Benutzer repo ausgeführt.

### oss ###
21 22 * * 2 repo wget --timeout=1200 --no-verbose -t6 --mirror -l2 -X /distribution/13.2/repo/oss/suse/i*86 -X /distribution/13.2/repo/oss/suse/setup -R "*.html" --no-host-directories -np http://download.opensuse.org/distribution/13.2/repo/oss/suse/ -P /srv/www/repo/ > /var/adm/log/repo-oss.log 2>&1

### oss-update ###
26 22 * * 1 repo wget --timeout=1200 --no-verbose -t6 --mirror -l2 -X /update/13.2/i*86 -R "*.html" --no-host-directories -np http://download.opensuse.org/update/13.2/ -P /srv/www/repo/ > /var/adm/log/repo-oss-update.log 2>&1

### non-oss ###
09 06 * * 6 repo wget --no-verbose -t6 --mirror -l2 -X /distribution/13.2/repo/non-oss/suse/i*86 -X /distribution/13.2/repo/non-oss/suse/setup -R "*.html" --no-host-directories -np http://download.opensuse.org/distribution/13.2/repo/non-oss/suse/ -P /srv/www/repo/ > /var/adm/log/repo-non-oss.log 2>&1

### non-oss-update ###
49 09 */3 * * repo wget --no-verbose -t6 --mirror -l2 -X /update/13.2-non-oss/i*86 -R "*.html" --no-host-directories -np http://download.opensuse.org/update/13.2-non-oss/ -P /srv/www/repo/ > /var/adm/log/repo-non-oss-update.log 2>&1

### php-applications-SLE_11_SP4 ###
2 22 * * 0 repo wget --no-verbose -t6 --mirror -l2 -X /pub/opensuse/repositories/server:/php:/applications/SLE_11_SP4/i*86 -R "*.html" --no-host-directories -np http://ftp.gwdg.de/pub/opensuse/repositories/server:/php:/applications/SLE_11_SP4/ -P /srv/www/repo/ > /var/adm/log/repo-php-app-SLE11.log 2>&1

Spezielle Optionen von Cron

Soll ein Skript direkt nach dem Rechner start als Autostart ausgeführt werden, dann muss das Schlüsselwort @reboot bei den Zeitparametern angegeben werden.

@reboot root /home/ts2/teamspeak2-server_startscript start >> /dev/null

Benutzer Crontab

Jeder Nutzer hat seine eigene crontab wo er eigene Programme eintragen kann. Diese können dann zu gewünschten Zeiten ausgeführt werden ohne das man root fragen muss.

Anzeigen lassen kann man sich deren Inhalt mit crontab -l. Editieren kann man den Inhalt mit crontab -e.

Bei besonders wiederborstigen Startskripten muss auch mal eine .profile oder .bashrc eingebunden werden, wenn das zu startende Programm bestimmte Umgebungsvariablen erwartet. Cron weiß nämlich nichts von den Werten die in diesen Userprofil-Dateien bzw. führt diese nicht beim Starten aus.

In der Benutzer Crontab braucht man keinen Nutzername angeben, da ja klar ist als welcher Nutzer es läuft.

# Dienste Start / Stop per Cron
40 13 * * * . $HOME/.profile; /usr/sap/T01/SYS/exe/nuc/linuxx86_64/stopsap >/var/adm/log/sap/saporaclestop.lg 2>&1
45 13 * * * . $HOME/.profile; /usr/sap/T01/SYS/exe/nuc/linuxx86_64/startsap >/var/adm/log/sap/saporaclestart.lg 2>&1

at-job

Der atd Dienst muss laufen systemctl start atd.service. Die Befehle werden als root zu der angegebenen Zeit ausgeführt. Soll der Befehl als ein bestimmter Nutzer ausgeführt werden so benötigt man den su Kommando.

su ansible -c 'ansible-playbook -i /home/ansible/Ronni-ansible/entwicklung /home/ansible/Ronni-ansible/setup-teamcity.yml'
su ansible -c 'scp -pr /xydata tux@iglu:/'

bewährtes Beispiel

Job für die Zukunft festlegen, hier z.B. ein synchronisierungs-Kommando mit rsync Nachts um 2 Uhr.

at 2:00
sshpass -p 'secure' /usr/bin/rsync -au -e ssh /prodata/db root@example.net:/prodata/ > /var/adm/log/transfer_INSP.log 2>&1

^D   (Ctrl+D)

Kontrolle mit

atq
at -c <Jobnr>

Datei mehrere Tage später verschieben

Zum Jahreswechsel soll eine Datei /opt/jboss/temp/kaeltemittel.odt in das Verzeichnis /var/spool/stammdaten/ verschoben werden.

at now + 48hour
mv /opt/jboss/temp/kaeltemittelkkn.csv /var/spool/stammdaten/
^D   (Ctrl+D)

Kontrolle mit

atq
at -c <Jobnr>

Befehle

  man command				=Hilfe über die Konsole zu Befehlen 
  info command				=Hilfe über die Konsole zu Befehlen
  apropos sens				=Zeigt alle Befehle die "sens" im Wort und Beschreibung enthalten
  apropos gpi				=Zeigt alle Befehle die "gpi" im Wort und Beschreibung enthalten

  hostnamectl                           =Infos über hostname, OS-Version, Maschine ID, Architektur und Kernel 
  timedatectl                           =Infos über Datum, Uhrzeit Zeitzone und NTP
  localectl                             =Infos über den verwendeten Zeichensatz und Tastatur Layout
  
  export PATH=/usr/local/sbin:$PATH	=PATH System-Variable bearbeiten und /usr/local/sbin hinzufügen
  gcc Quellcode.c -o fertig		=Programm kompilieren und gleich den passenden Namen geben.
 
  ls -la --sort=size -r                 =Sortiert den Inhalt von Verz. nach der Größe. Mit -r wird die Sortierung umgedreht und die größten Dateien stehen unten in der Liste.
  du -sh /var/log/*			=Zeigt die Größe der Dateien, ohne * Größe des Ordners selbst.
  lsof /dev/sda			        =Welche Programm greifen noch auf Gerät /dev/sda zu
  fuser -a -v -m /dev/sdf1              =Welche Programm greifen noch auf Partition /dev/sdf1 zu
  
  chown zatouser:zatogrg !(zato.conf)   =Alle Besitzer und Gruppen im Verzeichnis, bis auf zato.conf, ändern.

  mail					=Nachrichten abholen auf der Konsole und mit folgenden Befehlen emails senden:
					echo "Text" | mail -s "Betreff" main@adresse.tld
					mail -s "Betreff" ronald.hafer@meine.mail.de <<EOM mailtext  EOM
                                        mail -s "Betreff" your@mail.com <<< "hier steht ein Test Text"
                                        Nachfolgend, Inhalt einer Text-Datei versenden:
                                        cat /path/to/file | mail -s "your subject" your@email.com

Erstellungs-Datum und Zeit von Dateien verändern mit touch –time CCYYMMDDhhmm.

touch -t 201710261230 elements-violin.mp3

ulimit

Open Files Limit für Nutzer XY mit ulimt anzeigen:

:~> ulimit -Sn
1024
~> ulimit -Hn
4096

Systemweiter Limit für Dateien cat /proc/sys/fs/file-max 807463

~ # su - penguin
penguin@tux1:~> ulimit -n 64000
-bash: ulimit: open files: cannot modify limit: Die Operation ist nicht erlaubt
penguin@tux1:~> logout
Den Limit-Wert für Nutzer penguin erhöhen

Den Limit Wert in der Datei /etc/security/limits.conf festlegen Inhalt von /etc/security/limits.conf ist:

penguin         hard nofile 64000
penguin         soft nofile 32000
~ # vi /etc/security/limits.conf
~ # 
~ # su - penguin 
penguin@tux1:~> ulimit -n 64000
penguin@tux1:~> ulimit -Hn
64000
jboss@cibe1:~> ulimit -Sn
64000

Kommandos

date -s "2008-05-25 00:33:00"		=setzt Systemzeit auf angegebene Datum und Zeit
/sbin/hwclock				=Einstellungen zur Systemzeit/Hardware-Uhr
tzselect				=Zeitzone auswählen Einstellen
dpkg-reconfigure tzdata		=Zeitzone auswählen Einstellen
rm /etc/adjtime			=Diese Datei zu löschen kann evt.
				helfen wenn System und Hardware Uhr zu stark abweichen
/etc/default/rcS			Einstellungen betreffent UTC prüfen
su username				=anderen User anmelden

unlink /oradata2			=einen Link löschen, hier den Link/Verknüpfung /oradata2 entfernen

watch ifconfig ls ps -A		=überwacht die angegebenen Kommandos, aktualisiert alle 2s.
dmesg					=zeigt System Startprotokoll
vmstat				=einige kompakte Informationen über Speicher und CPU
vmstat -2                             =zeigt alle 2 Sekunden eine neue Zeile mit aktualisierten Infos
echo $((7*4))				=Rechnen direkt mit der Bash ohne Hilfsprogramm.
expr 2 + 3				=rechnen auf der Shell:
expr length ZEICHENKETTE       	=Länge der ZEICHENKETTE z.B. 200=3 aaaa=4 1=1
expr index ZEICHENKETTE I		=gibt hier 3 zurück, Index in ZKETTE, wo eines der ZEICHEN auftritt, sonst 0
expr substr ZEICHENKETTE 8 13		=gibt hier KETTE zurück, Bereich von bis aus ZEICHENKETTE

Kernel Module suchen:

find /lib/modules/$(uname -r) -iname "*kvm*" -print

Suchen nach SUID/SGUID Dateien:

find / -type f -perm +6000 -exec ls -l {} \;
find / -perm /4000

Suchen nach toten Links:

find -L . -type l

Modul-Datei *.ko aktivieren/laden:

insmod /lib/modules/$(uname -r)/kernel/net/ipv6/ipv6.ko

Es gibt insmod um Module hinzuzufügen und rmmod um Module zu entfernen Der modprobe Befehl vereinigt beide Befehle

modprobe --show-depends nvidia		=zeigt Abhängigkeiten vom nvidia Modul
modprobe -r modul			=Hinzufügen, und entfernen mit -r Modulname
lsmod					=listet die geladenen Module auf
modinfo usbhid				=zeigt Informationen über das angegebene Modul
depmod -a				=überprüft alle vorhandenen Module und aktualisiert die Einträge
udevinfo -ap /sys/PFAD-NAME		=gibt alles SYSFS_attributes für den gewählten Hardware-Pfad aus

Kombination, zeigt direkt die Informationen für eine Gerätedatei an.

udevinfo -a -p $(udevinfo -q path -n /dev/Gerätedatei)
tail -n+3				=zeigt in einer Datei erst ab der 3. Zeile an
tail -f /var/log/messages		=überwachen des Systemlog
tail -n 400 /var/log/auth.log		=System Sicherheit bei Servern, Authentifizierungs log
last					=zeigt an wer sich zuletzt und wann und wie lange eingeloggt hat
stat /etc/file.txt			=Info über Datei: Inode, letzte Änderung/Zugriff/Modifiziert/Benutzer
file /Desktop/e-Funktionen.svg		=/Desktop/e-Funktionen.svg: SVG Scalable Vector Graphics image
				file gibt Infos zum Dateityp an
/var/spool/cron/tabs/benutzer		=User Crontab, nur auf den Benutzer bezogen
/etc/cron.d/				=Systemweite Crontab, Benutzername mit angeben bei Befehlen
crontab -u wwwrun -l			=crontab vom Benutzer wwwrun anzeigen
/usr/local/etc/rotatelogs/		=Verzeichnis für logrotate Konfiguration, die zu individuellen Zeiten ausgeführt werden sollen.

In /etc/crontab kann das logrotate -f /usr/local/etc/rotatelogs/logkonfig ausgeführt werden mit den gewünschten Zeiten. Z.B.:

50 5 * * *     root  /usr/sbin/logrotate -f /usr/local/etc/rotatelogs/elan-process >/dev/null 2>&1
55 5 * * *     root  /usr/sbin/logrotate -f /usr/local/etc/rotatelogs/apache2-vhosts >/dev/null 2>&1
grep -ri Linux /boot/grub/*		=Durchsucht das Verz. /boot/grub/* rekursiv nach dem Wort "Linux"
grep -B2 -A2 slp			=grep zeigt mit -A2 die 2 darunter liegenden, mit -B2 die darüber liegenden Zeilen
grep -C2 slp				=Eine Kombination aus -B2 und -A2
grep -r Linux /boot/grub/*		=Durchsucht das gesamte Verz. /boot/grub/* nach dem Wort "Linux"
egrep 'EE|WW' /var/log/Xorg.0.log	=sucht in Datei Xorg.0.log nach EE und WW und zeigt die Zeilen an
dpkg -l | grep -e kde -e gnome		=gleichzeitig nach gnome und kde in der Auflistung der
				installierten Programme suchen.

Suche nach einer IPv4-Adresse, die mit 192 beginnt:

egrep '192\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}' *

Auf grafischer Oberfläche Programme als root starten; KDE mit „kdesu“ und Gnome mit „gksu“ z.B.:

gksu wireshark

wird auch oft standardmäßig mit gksu -u root /usr/bin/wireshark aufgerufen.

Konfiguration Rechner ausschalten

Ohne root Rechte ohne sudo

Adding suid mode to /sbin/shutdown oder in meinen test /sbin/halt By adding suid mode to shutdown command, you are allowing regular user to run shutdown command as root.

chmod u+s /sbin/halt

Verwendung von sudo

Mit sudo -l kann sich ein Nutzer anzeigen lassen welche Kommandos er mit sudo-Rechten ausführen darf

sudo -l =User tux may run the following commands on this host:

				(ALL) ALL
				(root) NOPASSWD: /sbin/ifconfig
				(root) NOPASSWD: /usr/sbin/brctl
				(root) NOPASSWD: /usr/sbin/openvpn

Das bearbeiten von eigenen angelegten sudo-Dateien geschieht mit dem Kommando:

visudo -f /etc/sudoers.d/dhcpdnsadm

Es kann z. B. ein einziger Befehl für einen oder mehrere Benutzer freigeben werden. Um das Ausschalten bzw. Rebooten /sbin/shutdown für den Account gast freizuschalten, trage in /etc/sudoers ein:

gast ALL = /sbin/shutdown

Auf ähnliche Weise räumt man einer ganzen Gruppe von Benutzern bestimmte Rechte ein. Dazu gebe zunächst eine durch Kommata getrennte Liste von Benutzernamen gefolgt von ALL ein, danach ein Gleichheitszeichen und als letztes das Kommando:

petronella,huhn ALL = /sbin/shutdown

Beispiele für Gruppe users

%users  ALL=/sbin/mount /cdrom,/sbin/umount /cdrom
%users  localhost=/sbin/shutdown -h now

Benutzer icinga für zwei Plugins mit sudo Rechten freischalten:

icinga ALL = NOPASSWD: /usr/lib/nagios/plugins/check_disk, /usr/lib/nagios/plugins/check_tcp
chmod 4711 /usr/bin/programm		=Setzt das setuid Bit
nano /etc/nanorc			=Color Setup Syntax
(s)diff datei1 datei2			=findet Unterschiede zwischen beiden Dateien und zeigt diese an.
comm					=compare two sorted files line by line

ldd programmname			=zeigt die vom Programm benötigten Biblioteken an.
vi /etc/ld.so.conf			=Konfig Datei fuer die Biblioteks Pfade
ldconfig				=configure dynamic linker run time bindings, neue Konfig-Pfade einlesen
ldconfig -p				=print cache, zeigt bereits eingelsenen Pfade zu den Biblioteken 

Strange library paths, are you sure those are in the standard library search paths? If not, try to add them to the LD_LIBRARY_PATH environment variable. Suchpfade für Biblioteken fest eingetragen in /etc/ld.so.conf

Dateien und Verz. suchen:

find . -iname *KDE*			=sucht ab aktuellen Verzeichnis nach kde, ignoriert Groß/Kleinschreibung
find / -xdev -iname *kde*		=durchsucht keine anderen Partitionen, xdev muss vorne stehen
find . -type f -mtime -1		=findet alle Dateien(-type f) keine Ordner die nicht älter als ein Tag sind
find . -type f -mtime +3 ls		= Alle Dateien im aktuellen Verz. finden die älter als 3 Tage sind und Auflisten mit allen Informationen
find /usr/ -print0 | grep -FzZ "tabular/reports"	=findet z.B. den Verz.-Baum /usr/tabular/reports
find . -wholename "*benutser/groupxyz*"          =findet z.B. den Verz.-Baum benutser/groupxyz

Dateien vom Typ jpg suchen die größer als 2MB sind

find /media/disk2 -type f -size +2M -iname "*.jpg"

Mehrere Dateinamen gleichzeitig suchen

find / \( -iname "*icinga*" -o -iname "*nagios*" \)

Mehrere file-Endungen gleichzeitig suchen +vorbereiten für Weiterverarbeitung

find Desktop/ -type f \( -name "*.pl" -o -name "*.py" \) -exec basename {} \;
cp -v `find Desktop/Ablage/ -type f \( -name "*.pl" -o -name "*.py" -o -name "*.sh" \)` /home/tux/Downloads/

Nach Dateien nur im aktuellen Verzeichnis suchen (ohne Unterverzeichnisse) und hier nur Dateien auflisten welche keine Dateiendung haben( Also Dateien ohne Punkt im Namen).

find . -maxdepth 1 -type f ! -name "*.*"
whereis programname			=Zeigt Pfad zum Programm oder Verknüpfung
which programname
updatedb				=locate Datenbank aktualisieren
locate dateiname			=sucht die Datei und zeigt den Pfad an
realpath [OPTION]... DATEI...         =Gibt den aufgelösten absoluten Dateinamen aus

Befehl als anderer Benutzer ausführen

Hin und wieder möchte man einen Befehl als anderer Benutzer als sich selbst oder dem Root ausführen. In diesem Falle hilft die folgende Zeile weiter.

sudo -u BENUTZER BEFEHL

Hat man kein sudo zur Verfügung geht auch die folgende Zeile.

su BENUTZER -c BEFEHL

System Informationen

Informationen über das verwendete System Abrufen. ComputerModel, SerienNr, OS-Version, Kernel…

hostid
hostnamectl
lsb_release -a			=zeigt OS Name und Version
cat /etc/os-release

Befehle für Prozess Verwaltung

Programm als user tux mit höherer CPU Priorität ausführen: Programm normal als user tux starten und nun als root: renice -15 -p <PID>

iglu:/home/tux# renice -19 -p 7181
7181: old priority 0, new priority -19

Befehl top interaktiv nutzen um bestimmte Spalten zu sortieren: top starten und Umschalt + F drücken, anschließend den Buchstaben für die zu sortierende Spalte wählen. Oder einfacher, groß M für Speicher- verbrauch, groß T für CPU-Time Sortierung.

dstat                                 =versatile tool for generating system resource statistics
top -b -n1                            =Batch-Modus gibt top auf der Konsole aus
ps -A r                               =alle aktiven Prozesse anzeigen
taskset                               =set or get the affinity of a process
chrt                                  =manipulate real-time attributes of a process
ionice                                =get/set program io scheduling class and priority
pmap                                  =report memory map of a process
nice
renice
sar -u 1 3                            =Misst CPU Nutzung über 3 Intervalle

Befehle weiterlaufen lassen

Nachdem starten einer Shell möchte man evtl. einen darin, mit einem & im Hintergrund laufenden Prozess, nach dem beenden weiterlaufen lassen. Hierfür gibt es die Kommandos disown und nohup mit denen die Prozesse von der Shell abgekoppelt werden können. Der Kommando disown beherrscht auch Autovervollständigen.

backup.sh &
disown /usr/local/bin/backup.sh

Weiß man vorher, dass der Prozess lange dauert und das Terminal schließen will, so kann man das der Shell über das Programm nohup mitteilen.

nohup ./backup.sh & 

Jetzt kann man das Terminal schließen, ohne dass ein Beenden-Signal abgesetzt wird. Man sollte dabei beachten, dass evtl. Ausgaben dann in eine Datei nohup.out geschrieben werden.

Ein weiteres Beispiel, das Update auf einem entfernten Rechner anstoßen. Die Shell kann anschließend geschlossen werden. Bei diesen Beispiel, mit apt ist es wichtig, das hier ein -y angehängt wird, damit er selbständig weiter macht und alle Fragen mit Yes/Ja beantwortet:

nohup sudo apt full-upgrade -y

Was genau gemacht wurde kann man später in der Datei nohup.out nachlesen.

Suse Linux spezifische Kommandos

SuSEconfig				=ließt System Konfigurationsdateien neu ein
a2 (tap drücken)			=mehrere Apache2 Kommandos
a2enmod php5				=lädt php5 Modul
a2enmod -l				=list Modules
httpd2 -M				=list Modules
apache2ctl -t -D DUMP_MODULES
apache2ctl -t				=Syntax check

Für ssl bzw https muss das Modul libapache2-mod-gnutls installiert werden und anschließend geladen werden mit:

a2enmod ssl

Flathub flatpak

Distributions übergreifender Appstore. Um Flatpak ohne Adminrechte zu nutzen, müssen Sie Flathub (oder eine andere Quelle) separat einrichten, diesmal als User-Installation: flatpak –user remote-add …. Bis auf die Option –user zwischen flatpak und dem Subkommando (remote-add, install, list) sind die Befehle identisch.

flatpak --user install wesnoth

Aufräumen

Software mit Flatpak deinstallieren. Geben Sie dazu flatpak uninstall gefolgt von der Anwendungskennung oder einem Namensbestandteil ein. Mit letzterem zeigt Flatpak Ihnen eine Liste von Anwendungen und Runtimes, die mit dem Suchwort übereinstimmen. Per Ziffer wählen Sie aus, was deinstalliert werden soll. Die persönlichen App-Daten entfernt Flatpak nicht automatisch. Wollen Sie diese gleich mit loswerden, ergänzen Sie die Option –delete-data.

Was Flatpak ebenfalls standardmäßig nicht entfernt, sind überflüssige Runtimes. Es könnte ja sein, dass Sie später eine andere App installieren wollen, die die Runtime braucht und Speicherplatz ist in der Regel üppig vorhanden, während das Warten auf einen Download lästig ist. Um die ungenutzten Runtimes rauszuwerfen, geben Sie flatpak uninstall –unused ein.

Paketverwaltung

openSUSE bzw SLE(SUSE)

zypper refresh					Repository Refresh
zypper up					System-Update
zypper dup					komplettes Systemupdate auf neue Version
zypper se ronnisdnsadm				suchen nach Pakete mit Namen "ronnisdnsadm"
zypper se -t patch kopete			Suchen nach einen Patch für das Programm Kopete
zypper se -s kopete				Zeigt auch das Repo zum Paket an, mit -i nur Installierte
zypper se -r, --repo <Alias|#|URI>              Nur Suche in dem angegebenen Repository.
zypper ve					Verify integrity of package dependencies.
zypper -r sa https://IP ZLM
zypper lr -u					Listet die Repositorys mit genauer URL auf
zypper modifyrepo --priority 90 plasma-active	erhöht die Priorität (niedrige Werte bedeuten höhere Priorität)
zypper mr -r firefox_up				Enable auto-refresh of the repository firefox_up
zypper mr -e SLE11-WebYaST-SP1-Updates		Aktiviert das Repository "SLE11-WebYaST-SP1-Updates"
zypper rr <alias|#|URI>                         Entfernt ein Repository

Adding repository Spring-Lobby:

zypper ar --refresh http://download.opensuse.org/repositories/home:/accAgon/openSUSE_11.3 Spring-Lobby

Folgender Befehl nutzt für die Installation des Pakets „rtl8192su-firmware“ ein zusätzliches Repository, welches nicht auf dem System eingetragen ist.

zypper -p http://download.opensuse.org/repositories/driver:/wireless/openSUSE_11.3/ in rtl8192su-firmware

Ein lokales Verzeichnis als Repository im System einbinden. Hier wurde zuvor das .iso Installations Medium in einem Verzeichnis als loop Device gemountet, dieses gemountete Device wird mit den folgenden Befehl nun zu den verfügbaren Repos hinzugefügt.

repo1:~ # zypper addrepo --check --refresh --name 'openSUSE-Leap-42.2-DVD' /data/install/openSUSE-Leap-42.2/sp2/cd1 openSUSE-Leap-42.2-DVDAdding repository 'openSUSE-Leap-42.2-DVD' ...............................................................................................................................................[done]
Repository 'openSUSE-Leap-42.2-DVD' successfully added
Enabled     : Yes                                           
Autorefresh : Yes                                           
GPG Check   : Yes                                           
URI         : dir:///data/install/openSUSE-Leap-42.2/sp2/cd1

Hat man viele Repositories eingebunden wo auch einige Pakete in beiden Repos vorkommen, dann kann es sein das er die Version des Original Repos einfach beibehält. Möchte man wirklich von alles Repos die aktuellste Version haben, so fügt man beim System-Update ein –allow-vendor-change mit an.

zypper up --allow-vendor-change

Distributions Upgrade

Ein Upgrade auf die nächste höhere Version z.B. von OpenSuse 15.1 auf 15.2 wird mit zypper dup durchgeführt. Vorher müssen aber zunächst alle alten Versions Nummern in den Repository Konfig-Dateien von openSuse 15.1 auf 15.2 mit einem Kommando abgeändert werden.

sed -i 's/15\.1/leap\/15\.2/g' /etc/zypp/repos.d/*

Update von 15.4 auf 15.5, testen! aus computerbase.de/forum

sudo zypper --releasever=15.5 dup

RPM Tool

rpm -qif /etc/named.d/rndc.conf			         =Welches Verzeichnis/Datei wurde von welchen Paket angelegt.
rpm -qa "*asc*"						 =sucht installierte Pakete die "asc" enthalten
rpm -qip groupwise					 =Informationen über das Paket groupwise
rpm -qlp groupwise                                       =Inhalt einer Paketdatei anzeigen
rpm -ql groupwise                                        =Inhalt eines installierten Pakets anzeigen
rpm -qf /usr/share/groupwise.txt			 =Zu welchen Paket gehört die Datei
rpm -qR paketname.rpm                                    =Alle Paket-Abhängigkeiten anzeigen
rpm -Uvh paketname.rpm				         =Installation von Paketen
rpm -Uvh http://download.linphone.com/linphone-suse.rpm  =Download und Installations übers Web
rpm -ev paketname.rpm					 =erase (uninstall) package
rpm -e --allmatches Ronnisdnsadm			 =löscht alle Pakete mit "ronnisdnsadm" im Namen

RPM Updates

Nach einem System Update erscheinen neben Konfigurations-Dateien möglicherweise auch die gleichen Konfigurations-Dateien mit der Endung .rpmnew und .rpmsave. Eine .rpmnew Datei enthält die neue Standard Konfiguration des RPM-Pakets und lässt die Original Datei unberührt. Ist nach einen Update hingegen eine .rpmsave Datei zu finden, enthält diese die Sicherung der ursprünglichen Original Datei, welche durch eine neue Konfiguration aus dem Update ersetzt wurde.

Suchen nach rpmsave und rpmnew Dateien

find / \( -iname "*.rpmsave" -o -iname "*.rpmnew" \)

Der folgende Bash Einzeiler kann hilfreich sein, um Änderungen zu finden und diese möglicherweise mit der ursprünglichen Konfiguration zu vereinen.

for a in $(find /etc /var -name '*.rpm?*'); do diff -u $a ${a%.rpm?*}; done

RPM Paket erstellen

RPM-Pakete im ~/src Verzeichnis entwickeln, ebenfalls svn check out in:

/home/ronald/src/RPMPaket-Projekt

Das *.spec file ebenfalls im /home/ronald/src/RPMPaket-Projekt Verz.

Group: RPM Pakete Kategorien

/usr/share/doc/packages/rpm/GROUPS

RPM bau Pfad beachten (obsolete):

~/.rpmmacros
~/Anwendungen/Programme/rpm-umgebung.sh  direkt in .spec file übernehmen

RPM Ziel-Paket Verz. überall vorhanden und beschreibbar:

/usr/src/packages/

Doku Verz. von PRM Paketen

/usr/share/doc/packages/

Doku Verz. fuer Manpages

/usr/share/man

Der eigentliche Bau des RPM-Pakets geschieht mit dem Kommando rpmbuild und dem .spec-File.

rpmbuild -bb namedesspecfiles.spec
rpmbuild -ba namedesspecfiles.spec

RPM Repository erstellen

Einen Ordner erstellen, alle RPM-Pakete welche zum Repo gehören sollen hinein verschieben. Anschließend den createrepo Kommando mit Angabe des Ordners ausführen.

 createrepo /srv/www/repo/

Paketverwaltung mit apt

Das Softwareverwaltungs Programm apt wird von Debian basierten Linux Distributionen verwendet und ist weit verbreitet.

suchen nach Debian-Paketen über die Konsole

Um eine Liste aller installierten Pakete zu bekommen: dpkg –get-selections „*“ > paketliste bei Bedarf kann man paketliste einfach wieder zurückspielen dpkg –get-selections < paketliste danach ein aptitude -f install oder aptitude deselect-upgrade

aktuell, der Kommando apt ersetzt apt-cache, apt-get usw.:

apt search paketname                                  =sucht auch in der Beschreibung nach ''paketname'' zeigt auch gleich Infos, ob das Paket bereits installiert ist.

apt list paketname                                    =sucht nur in den Paketen und zeigt ebenfalls an ob Paket bereits installiert ist
  
apt list --installed                                  =zeigt alle installierten Pakete
aptitude search paketname
aptitude download nagios-images                       =Paket nur herunterladen, nichts installieren
apt-get -d install nagios-images                      =Paket herunterladen nicht installieren

installieren von Paketen

Das Paket libreoffice-base installieren aber ohne vorgeschlagene zusätzliche Pakete. Also nur das installieren was wirklich pur für libreoffice-base benötigt wird.

apt install --no-install-recommends libreoffice-base

entfernen von Paketen

Entfernen von mehreren gleichnamigen Paketen Pakete entfernen welche mit kde-telepathy- anfangen:

aptitude purge kde-telepathy-?

dpkg Tool

dpkg-deb --extract nagios-images_0.3_all.deb /root/nagios/    =Paket entpacken ins angegebene Ziel-Verzeichnis
dpkg -l | more                                                =Liste aller installierten Pakete
dpkg -L paketname					=Liste der Dateien eines installierten Pakets
dpkg -S	/usr/share/groupwise.txt			=Zu welchen Paket gehört die Datei
dpkg -i paketname.deb						=Installation von Paketen
dpkg --audit                                                  =Falls es Probleme mit abgebrochenen Update gibt. Zeigt eine Auflistung der einzelnen Probleme.
dpkg --verify                                                 =PaketDB Verifizierung

Möchte man von einer Datei wissen zu welchen Paket dieser gehört und dieses Paket ist nicht installiert, benötigen wir das Paket apt-file, dies ist ein Kommando zum suchen von Dateien in Paketen welche nicht installiert sind. Beim ersten verwenden von apt-file muss dessen interne DB regelmäßig aktualisiert werden.

sudo apt install apt-file
sudo apt-file update

Um Pakete zu suchen in denen eine bestimmte Datei enthalten ist:

apt-file search date
apt-file search kvm-ok

Repositorys hinzufügen

Mit den Personal Package Archives - kurz PPA - hat Canonical eine Börse für fertige Ubuntu-Pakete geschaffen.

Auf der Website des PPAs findet man z.B. die PPA-ID „ppa:ubuntu-mozilla-daily/firefox-aurora“. Um das Paket zu installieren, gibt man daher im Terminal den folgenden Befehl ein: sudo apt-add-repository ppa:ubuntu-mozilla-daily/firefox-aurora

Repositorys entfernen

Das geht mit dem Befehl sudo apt-add-repository –remove ppa:ubuntu-mozilla-daily/firefox-aurora. Alternativ lässt sich die Aktualisierungsverwaltung starten. Dort wählt man Einstellungen… und löscht im Reiter Andere Software die beiden Häkchen beim Firefox-Aurora-PPA.

Neue Quelle in sources.list hinzufügen

Am Beispiel vom Programm Beryl/Compiz. In der Datei /etc/apt/sources.list hinzufügen:

# Beryl Compiz
deb http://debian.beryl-project.org/ etch main

dann eine root Konsole öffnen und folgende Zeile eingeben um den Schlüssel für diese Paket hinzuzufügen.

wget http://debian.beryl-project.org/root@lupine.me.uk.gpg -O- | sudo apt-key add -
wget http://devel.kamailio.org/debian/devel.openser.org.asc -O -|apt-key add -

Quelltext Paketen (tar.gz) sog. Linux Dreisatz

vorher tar.gz entpacken mit: tar xvzf dateiname.tar.gz und tar.bz2 entpacken mit: tar xvjf dateiname.tar.bz2

./configure	(wenn configure-Skript vorhanden)
make
make install

Neuer sauberer Kompiliervorgang, z.B. bei Konfigurations-Änderungen:

make clean
make dirclean
make distclean

Wenn ein Modul (Treiber usw) dann mit modprobe modulname einbinden.

Umwandeln von Paketen

aus einem rpm ein deb zu erstellen.

alien paket.rpm
deb Pakete erstellen

Hier eine einfache schnelle Übersicht passend für unser asc Spiel.

Zu Beginn folgende Pakete installieren: dh-make fakeroot build-essential. Dann zusätzliche Pakete installieren die nur für das Spiel benötigt werden:

libsdl-image1.2-dev
libsdl-mixer1.2-dev
libboost-dev
libboost-regex-dev
libsigc++-1.2-dev
libphysfs-dev
libbz2-dev

Es werden dazu meistens noch automatisch weiter Pakete installiert. Bei deinen Debian können auch noch einige Pakete fehlen. evt. auch noch libsdl-sound installieren würde aber auch ohne funktionieren.

/home/mhafer2/Desktop/asc-2.0.1.0.tar.bz2

entpacken mit:

tar xjvf asc-2.0.1.0.tar.bz2

in den entpackten Ordner wechseln.

cd /home/mhafer2/Desktop/asc-2.0.1.0
dh_make --createorig

Type of package: single binary —> s

fakeroot debian/rules binary

Nach Eingabe diesen Befehls wird das configure skript gestartet, es wird nach den Durchlauf zum schluss anzeigen ob noch Pakete fehlen. Fehlen keine Pakete dann wird die deb-Datei auf deinen Desktop erstellt.

Und installieren mit:

dpkg -i ../asc_2.0.1.0-1_i386.deb

System-Update

(debian-richtig wäre sudo apt-get dist-upgrade). Unter Ubuntu kann man für den Zweck

sudo update-manager -c
sudo update-manager --dist-upgrade

benutzen, damit wird auch /etc/apt/sources.list angepasst.

systemd

Systemd übernimmt eine Vielzahl an Funktionen. Es steuert u.a. das Verhalten der Dienste beim Start des Rechners. Mit systemd lassen sich Dienste beenden, neu starten und es lässt sich der aktuelle Dienst Status abfragen.

systemctl list-units
systemctl list-unit-files
systemctl status sshd.service
systemctl stop SuSEfirewall2_init.service

Es gibt Runlevel, also bei systemd sind dies spezielle Targets, in denen bestimmte Eigenschaften vorherrschen, wie zum Beispiel grafischer Modus, nur Netzwerk Modus ohne Grafik und Rescue Modus.

Der aktuelle Runlevel lässt sich wie folgt anzeigen:

systemctl list-units --type=target

bzw. auch mit:

systemctl list-units -t target --all

Der Standard Runlevel/Target kann mit folgenden systemctl get-default angezeigt werden:

# systemctl get-default 
graphical.target

Zum ändern des Standard Target folgenden Befehl ausführen:

systemctl set-default multi-user.target  

Zum wechseln des Standard Runlevel/Target folgenden Befehl ausführen:

systemctl isolate multi-user.target 

Nur fehlgeschlagene Dienste auflisten

systemctl --state=failed

Zur Analyse des Bootverhaltens lassen sich auch Grafiken zeichnen

systemd-analyze plot > plot.svg
 rcconf					=runlevel Konfiguration (Prog. Dienst aus-abwählen)
 update-rc.d				=install and remove System-V style init script links
					Hinzufügen oder entfernen von Diensten zu Runleveln
 update-rc.d nagios3 defaults		=bringt Dienste wieder in den default runlevel
 update-rc.d nagios defaults 30 18	=start an 30. und 18. Stelle?
 update-rc.d -f nagios3 remove		=die Verweise in den Runlevel-Ordnern noch zusätzlich entfernen,
					damit nach ein Reboot nicht automatisch wieder Nagios3 startet.
 invoke-rc.d nagios start		=startet nagios Dienst

Eigene Service Unit schreiben

Hier ein Beispiel einer kleinen Systemd Service Unit.

Die Zeile RemainAfterExit=yes sorgt dafür das die Service Unit weiter als Aktiv gekennzeichnet wird, auch wenn es eine Service Unit vom Type=oneshot ist.

[Unit]
Description=Ronnis DHCP Server
After=network.target remote-fs.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/sbin/dhcpd

Nach Änderungen oder Neuerstellen von ServiceUnits muss einmal systemctl daemon-reload ausgeführt werden.

Weiteres Beispiel:

[Unit]
Description=archiva-dienst
After=network.target

[Service]
Type=simple
ExecStart=/srv/archiva/bin/archiva.sh start
ExecStop=/srv/archiva/bin/archiva.sh stop
User=archiva
# Group=archiva - Gruppe muss auch existieren! Group=users könnte funktionieren

[Install]
WantedBy=multi-user.target

Nach Änderungen oder Neuerstellen von ServiceUnits muss einmal systemctl daemon-reload ausgeführt werden.

journalctl

Die folgende journalctl Option ist gut damit journalctl nicht alles jeweils per Seite anzeigt sondern alles komplett aufgelistet wird. So wie man es von einer Textdatei kennt. Das ist gut um besser nach bestimmten Schlüsselwörtern zu suchen, da so der gesamte Journal zu Verfügung steht.

journalctl --no-pager

Um nur zwischen zwei bestimmten Zeit Abschnitten zu suchen / Von - Bis:

journalctl --since="2022-07-08 11:17:01" --until="2022-07-08 11:47:01" --no-pager

ältere Vorgänger InitV

Füge Startlinks (die mit “S99…” beginnen) in /etc/rc4.d und /etc/rc5.d ein, füge außerdem Stoplinks (die mit “K01…” beginnen) in den anderen rc.xd-Verzeichnissen ein. Apache wird also bei Runlevel-Wechseln zuletzt gestartet und zuerst wieder beendet.

 update-rc.d apache2 start 99 4 5 stop 01 0 1 2 3 6

 insserv -r nagios3			=neu, das gleiche wie update-rc.d, entfernt nagios3 von allen runleveln
 insserv -d nagios3			=bringt Dienste wieder in den default runlevel
 insserv nagios3			=auch default runlevel

 service --status-all			=Listet alles Services und deren Status auf

 chkconfig autofs			=[SUSE]zeigt den Status on/off des Dienstes autofs an
 chkconfig autofs off			=[SUSE]schaltet den Dienst autofs auf "off" beim nächsten reboot
 chkconfig autofs reset			=[SUSE]stellt Ursprungs Zustand wieder her
 chkconfig -l autofs			=[SUSE]listet die runlevel für den Dienst autofs auf
 chkconfig -l				=listet alles Dienste mit runleveln auf + xinetd based Services

create the system startup links for libvirtd: z.B. nach der Installation einer Software kann man so chkconf nutzen.

chkconfig --add libvirtd 

Hardware

Treiber installieren

Bei jeder neuen Hardware, die man in den Rechner einbaut, muss natürlich der passende Treiber vorhanden sein. Sollte die jeweilige Hardware nicht automatisch erkannt werden, so schaut man als erstes nach, ob sie nicht vom Kernel unterstützt wird. Dazu wechselt man mit „cd“ in das /usr/src/linux Verzeichnis (Hinweis: die Kernel-Sources müssen natürlich installiert sein. Wenn nicht, nachholen!). Mit „make menuconfig“ kann man nun Einstellungen am Kernel vornehmen.

Zum Auflisten der verbauten Hardware ist lspci geeignet. Soll speziell die Grafikkarte angezeigt werden, kann lspci mit zusätzlichen Optionen in Verbindung mit grep aufgerufen werden:

lspci -nnk | grep -i -A2 vga

UDEV

Das Verhalten der Hardware wird vom udev Dienst geregelt.

Z.B. trägt man Änderungen in Datein (hier z.B. für Netzwerkkarten) wie 70-persistent-net.rules ein und liest die Regeln neu ein:

udevadm control --reload

RAM Arbeitsspeicher

cat /proc/meminfo
free -lm

SWAP Speicher

Ausgelagerter Speicher oder auch Notfall Speicher. Dieser wird oftmals auf einer separaten Partition oder in einer Datei auf der Festplatte oder SSD gelagert. Daher ist dieser Speicher sehr langsam im Vergleich zum physikalischen RAM Speicher. Auf einen normal ausgelasteten System sollte der SWAP-Speicher nicht in Anspruch genommen werden. Die Nutzung von SWAP verlangsamt das System, auch dadurch, das ein Kernel Prozess kswapd0 aktiv wird, dieser managed den SWAP-Speicher und verbraucht CPU-Ressourcen.

Den SWAP-Speicher an oder ausschalten

swapon -a
swapoff -a

Mit parted eine SWAP-Partition anlegen, hier ist als File system type linux-swap die Richtige Angabe.

Möchte man die SWAP-Partition vergrößern, funktioniert es genauso mit den Partitionierungs-Tools wie bei einem gewöhnliches Filesystem. Anschließend ist aber kein resize nötig, sondern lediglich das Kommando mkswap mit Angabe der swap Partition auszuführen.

Möchte man den Swap Speicher wieder freigeben, auf einen Rechner der kurzzeitig einen hohen Arbeitsspeicher bedarf hatte, so kann man den SWAP erst deaktivieren mit swapoff -a und anschließend auch noch den swappiness-Wert anpassen.

Der Standard Wert ist 60:

cat /proc/sys/vm/swappiness
60

Ist dieser Wert kleiner als 60, so wird die Swap-Partition weniger schnell/stark genutzt und auch schneller wieder freigegeben. Den Wert kann man mit folgenden Kommando verringern:

sudo sysctl vm.swappiness=30
cat /proc/sys/vm/swappiness
30

Bildschirm

Xorg -configure                               =schreibt eine neue xorg.conf ins aktuelle Verzeichnis
Strg+Alt+Backspace
Alt + Eingabe                                 =beendet Vollbildmodus bei vielen Spielen

Auflösung des X-Servers mit STRG + ALT +/- aenderbar.

dpkg-reconfigure xserver-xorg                 =X-Server neu konfigurieren auch Auflösung,
					ab Lenny nur für Tastatur und Maus
xrandr                                        =zeigt aktuelle & mögliche Auflösungen des Displays
xrandr -s 1440×900                            =Auflösung gewaltsam einstellen
xrandr --output DVI-0 --mode 1680x1050_75

Zwei Rechner an meinen TFT betreiben, Rechner 1 am Digitalen und Rechner 2 am Analogen. Monitor aus Signal (Grafikkarte vom TFT trennen) mit :

xset dpms force standby

oder

xset dpms force suspend

Fehlermeldung

amdcccle Invalid MIT-MAGIC-COOKIE-1 keyamdcccle: cannot connect to X server localhost:10.0 nach dem absetzen des Befehl „xhost“ funktionierte der Befehl.

[SUSE] Auf der Terminal-Konsole (Alt+Strg+F2) kann man mit der linken Windows-Taste die Terminals nach links blättern und mit der rechten Windows-Taste nach rechts. Auf Alt+Strg+F10 befindet sich ein log-Screen.

/dev Geräte-Dateien erstellen

mknod -m 644 /var/lib/named/dev/random c 1 3

BIOS-info
dmidecode =viele Informationen über das verwendete BIOS, siehe auch man dmidecode

zum Beispiel auch Serien NR. vom Board auslesbar:

dmidecode -t system

mit hwinfo ab SLES 11 auch als Standard Benutzer:

/usr/sbin/hwinfo|grep -i system.*.serial
Batterie Akku
cat /proc/acpi/battery/BAT0/state

present: yes capacity state: ok charging state: discharging present rate: 14135 mW remaining capacity: 39732 mWh present voltage: 11534 mV

cat /proc/acpi/battery/BAT0/info

present: yes design capacity: 4500 mAh last full capacity: 4079 mAh battery technology: rechargeable design voltage: 10800 mV design capacity warning: 300 mAh design capacity low: 163 mAh capacity granularity 1: 32 mAh capacity granularity 2: 32 mAh model number: AS07B51 serial number: 24812 battery type: LION OEM info: PANASONIC

Temperatur und Lüfter

sensors

Zeigt Temperatur und Schwellwerte. Möchte man nach weiteren Sensoren suchen kann man sensors-detect ausführen welches eine längere Abfrage und Suche durchführt. Anschließend zeigt der Kommando sensors ausführlichere Informationen.

iglu:~> sensors
radeon-pci-0100
Adapter: PCI adapter
temp1:        +49.5°C  (crit = +120.0°C, hyst = +90.0°C)

k10temp-pci-00c3
Adapter: PCI adapter
temp1:        +28.0°C  (high = +70.0°C)
                       (crit = +85.0°C, hyst = +83.0°C)

Nach Ausführung von sensors-detect:

iglu:~> sensors
f71869a-isa-0e80
Adapter: ISA adapter
+3.3V:        +3.34 V  
in1:          +1.00 V  
in2:          +0.00 V  
in3:          +0.00 V  
in4:          +0.00 V  
in5:          +0.86 V  
in6:          +1.08 V  
3VSB:         +3.25 V  
Vbat:         +3.30 V  
fan1:        2046 RPM
fan2:           0 RPM  ALARM
fan3:           0 RPM  ALARM
temp1:        +30.0°C  (high = +255.0°C, hyst = +251.0°C)  ALARM (CRIT)
                       (crit = +255.0°C, hyst = +251.0°C)  sensor = transistor
temp2:        +46.0°C  (high = +255.0°C, hyst = +247.0°C)  ALARM
                       (crit = +80.0°C, hyst = +72.0°C)  sensor = thermistor
temp3:        +39.0°C  (high = +255.0°C, hyst = +253.0°C)  ALARM (CRIT)
                       (crit = +255.0°C, hyst = +253.0°C)  sensor = transistor

radeon-pci-0100
Adapter: PCI adapter
temp1:        +48.5°C  (crit = +120.0°C, hyst = +90.0°C)

k10temp-pci-00c3
Adapter: PCI adapter
temp1:        +26.5°C  (high = +70.0°C)
                       (crit = +85.0°C, hyst = +83.0°C)

gibt den aktuellen Temperaturwert zurück:

cat /proc/acpi/thermal_zone/THRM/temperature
cat /sys/class/thermal/temp

Tastatur auf deutsch

Problem: Es kann passieren das im Startmanager GDM oder auch KDM die Tastaur in englisch ist. Obwohl man in Gnome oder KDE deutsch eingestellt hat. Auch das Grundsystem ist auf deusch eingestellt.

Lösung: Der Befehl dexconf schreibt eine neue /etc/X11/xorg.conf

Sonder-/Spezial-Zeichen AltGr + GroßschreibenTaste + Zahlen oder Buchstaben z.B.: bei 8=™, 9=±, q=Ω, 5=⅜ …usw oder nur AltGr + Buchstaben z.B.: bei W=ł, R=¶, A=æ, Z=← …usw

Audio

Ein guter graphischer Equalizer für das gesamt System, um alle Audio Programme zentral zu steuern. Bietet bereit verschiedene Presets für die Höhen und Tiefen Abstimmung.

pulseaudio-equalizer
amixer  zeigt die Sound/Regler-Einstellungen in Textform an
arecord -l				= Anzeige von Mikrophonen, welches Device ist ansprechbar
aplay -D default:CARD=Audio match5.wav	= Wiedergabe von RAW/Wav Dateien, kein OGG oder MP3
aplay -l				= Anzeigen von verfügbaren Sound Karten
aplay -L                              = Anzeigen von genauen Geräte Namen, z.B. für Verwendung mit mpg123
aplay ~/python_games/match1.wav
mpg123 -a default:CARD=Audio 01\ World\ Domination.mp3
omxplayer -o hdmi /home/pi/Mechwar08.ogg

Welche Programme greifen auf die ALSA Geräte Datei /dev/snd/ zu:

lsof /dev/snd/*
COMMAND    PID    USER   FD   TYPE DEVICE SIZE NODE NAME
amarokapp 4339 neutron  mem    CHR 116,16      4484 /dev/snd/pcmC0D0p
amarokapp 4339 neutron   16u   CHR  116,0      4510 /dev/snd/controlC0
amarokapp 4339 neutron   26r   CHR 116,33      4309 /dev/snd/timer
amarokapp 4339 neutron   27u   CHR 116,16      4484 /dev/snd/pcmC0D0p
amarokapp 4339 neutron   28u   CHR  116,0      4510 /dev/snd/controlC0
fuser /dev/snd/*
/dev/snd/controlC0:   3227  3281
/dev/snd/pcmC0D0p:    3285m
/dev/snd/timer:       3285
yeti@xs32~$ ps w 3227 3281 3285
  PID TTY      STAT   TIME COMMAND
3227 ?        Sl     0:01 /usr/lib/gnome-applets/mixer_applet2 --oaf-activate-iid=OAFIID:GNOME_MixerApplet_Factory --oaf-ior-fd=19
3281 ?        Sl    14:07 gnome-volume-control
3285 ?        SLl  256:08 rhythmbox

Drucker

1. apt install printconf —> 2. Sicherheitshalber sollten die Pakete foo2zjs und pnm2ppa auch installiert werden. 3. als root in Konsole printconf (informationen beachten) 4. http://localhost:631/ (genaue konfiguration des Druckers)

localhost:631 = html Seite mit Einstellungs Möglichkeiten mit /help = Hilfe

lpstat -t =Zeigt die Drucker Zustände lpstat -h <hostname> =Hostname angeben, zeigt Aufträge für Host an

CUPS

Häuft wird CUPS für die Drucker Verwaltung verwendet. Dieses ist ein Dienst der auch Netzwerkdrucker verwalten kann. CUPS lauscht auf Port :631 und bietet dort ein WebInterface zur Drucker Verwaltung.

umleiten von Druck-Jobs

Oft gibt es Anforderungen die Druck-Jobs von einem auf einem anderen Drucker umzuleiten Print01 –umleiten nach–> Print02

Drucker Print01 ist defekt, die User können nicht mehr auf diesen drucken. Ein weiterer Drucker, Print02, steht zwei Räume weiter, hier sollen nun die User ihre Drucke vorläufig herauslassen können. Beide Drucker sind unter CUPS auf dem DruckServer eingerichtet.

Wie kann ich nun also CUPS sagen, das Drucke die auf Print01 ankommen, ab sofort automatisch an Print02 weitergeleitet werden?

Geht dies umzusetzen? Und, besteht die Möglichkeit schon vorhandene Drucke in der Queue von PRT01 auf PRT02 zu schicken?

Bisher kamen mir nur die „classes“ unter. Dabei wird dann der Drucker der als erstes erreichbar ist, genommen und der druck erfolgt dort. Was prinzipiell nun funktionieren müsste, da ja PRT01 defekt ist und somit müssten die Drucke auf PRT02 landen (kommt nur bei der angelegten Klasse:„Unable to connect to IPP host: No such file or directory“). Auch die schon in der Queue vorhandenen Ausdrucke bleiben davon unberührt.

Die Lösung umleiten von Druck-Jobs

Eine manuelle Umleitung sollte recht bequem über das Webinterface laufen. Klicke bei PRT01 auf „Modify Printer“, wähle als Gerät „Internet Printing Protocol (ipp)“ und gebe als Device URI die von PRT02 an.

Wenn PRT01 aus der Reparatur zurückkommt, macht man die Änderungen wieder rückgängig.

Ob in der Queue hängende Jobs dann automatisch neu gestartet werden, weiß ich nicht. Eventuell muß man sie manuell restarten (geht ja auch bequem über das Webinterface).

Scanner einrichten

Problem: Das Kommandozeilen-Tool sane-find-scanner erkennt Ihren USB-Scanner zwar korrekt, der Funktionstest mit scanimage -L schlägt allerdings fehl - es erscheint dabei die Meldung [snapscan] Cannot open firmware file /path/to/your/firmware/ file.bin.

Lösung: Einige neuere USB-Scanner benötigen eine eigene Firmware, die zum Betrieb des Scanners eingelesen werden muss. Unter der Adresse http://snapscan.sourceforge.net/ finden Sie eine Liste der von Linux unterstützten Modelle und die Namen der jeweils passenden Firmware-Dateien. Die Firmware selbst finden Sie als BIN-Datei in dem Ihrem Scanner beiliegenden Windows-Treiberpaket. Meist ist sie in einer der CAB-Dateien versteckt - etwa in Data1.CAB. Falls Sie zusätzlich Windows auf Ihrem Rechner installiert haben und dort den Scanner bereits verwenden, suchen Sie nach der entsprechenden Datei in Ihrem Windows-Verzeichnis. Alternativ können Sie unter Linux das Kommandozeilen-Tool cabextract verwenden:

cabextract -filter '*.bin' data1.cab

Kopieren Sie die Firmware anschließend als Benutzer root in das Verzeichnis /etc/sane.d. Dort finden Sie auch die Konfigurationsdatei snapscan.conf, in die Sie - wiederum als root - in die Zeile, die mit „firmware“ beginnt, den Pfad und den Dateinamen der Firmware eintragen. Achten Sie hier auf die Groß- und Kleinschreibung. Danach sollte scanimage -L keine Fehler mehr melden.

USB

Neben dem bekannten lsusb Kommando gibt es nun auch den neueren lsusb.py. Dieser Kommando zeigt auch den benötigten Strom für die USB Komponenten.

Zeigt eine schöne Übersicht: mit -c für Farben -I display interface information und -e display endpoint info

lsusb.py -Ice

Programmierung

PERL

CPAN

Falls ein Proxy verwendet wird muss dieser zunächst unter Yast eingetragen werden. Dann cpan aufrufen, cpan fragt trotzdem noch nach User und PW aber dauerhafte Einstellungen lassen sich setzen mit:

o conf proxy_user your_username
o conf proxy_pass your_password
o conf init	= reconfigure cpan.

CPAN mit Proxy SLES11 Systemweiten Proxy konfigurieren und anschließend neustarten. Oder alternativ (ungetestet) in /usr/lib/perl5/5.10.0/CPAN.pm eintragen.

bei SLES10: cpan konfigurieren mit „no proxy“ wichtig hier auch proxy eintragen! .wgetrc in HOME legen mit Proxy-Einstellungen

in Perl-Skript „use lib“ Zeile evtl. anpassen setzen

=pod
Mit "=pod" und den "=cut" kann man einen Kommentar-Block
erstellen. Hierfür wird =pod an Anfang und =cut am Ende des Kommentar-
Blocks gesetzt, in der Mitte wird der Text dann als Kommentar verwendet. 
=cut

Es gibt in PERL 2 Funktionen die System-Befehle ausführen:

1. exec z.B. exec 'echo', 'Argumente folgen: ', @ARGV; 2. system ('syntax wie oben')

Unterschied: nach einem „system“-Befehl wird das programm weiter ausgeführt ; bei einem erfolgreichen „exec“ aufruf wird das programm beendet.

Bash Shell-Skripte

Grundlagen

Zur Anzeige aller Variablen dient der Befehl env.

Suchen ersetzen

Ersetzen in der Ausgabe(RAW_OUTPUT) von MULTIWERT durch REALWERT nacheinander wird jeder der 3 Werte in RAW_OUTPUT durch neue Werte ersetzt.

RESULT="${RAW_OUTPUT//$MULTIWERT/$REALWERT}"
RESULT2="${RESULT//$MULTIWARN/$REALWARN}"
RESULT3="${RESULT2//$MULTIKRIT/$REALKRIT}"

Eingabe Prombt shebang

Kleiner Spaß am Rande für Microsoft DOS/Windows Fans die Linux nutzen. ein PS1=„C:\ “ auf der Konsole schafft eine vertraute Atmosphäre, diesen Spuk kann man wieder leicht rückgängig machen mit:

PS1="${USER}@${HOST}:${PWD}> "
PS1="C:\> "		=PS1 Variable ändern in DOS-Style
PS1="\h:\w> "		=PS1 Variable Standard

Datums Differenz

Das Datum am besten zuvor im iso-8601 Format umwandeln

date --iso-8601

Dann das Datum berechnen in dem mit dem Schalter %s das angegebene Datum in die Sekunden seit 1970(Unix Startzeit) umgerechnet wird.

date_diff=$(( ($(date -d $DATUMSVARIABLE +%s) - $(date +%s)) / (60*60*24) ))
#!/bin/bash
 
echo erzeugt eine Ausgabe, Im Grunde kann nun auch jeder beliebige Befehl \
den wir von der Bash Kommandozeile her kennen hier eingegeben werden und wird \
ausgeführt beim starten des Shell-Skripts.
 
echo abspeichern ( am besten in /usr/local/bin ) und mittels chmod 755 <name> ausführbar machen. \
oder ausführbar machen = chmod +x script.sh
 
echo -e "\a" erzeugt einen Piep-Ton.
sleep 5 
echo sleep <Anzahl Sekunden> erzeugt Pause.
 
echo Doppelt vorkommende Programmblöcke in Funktionen auslagern.
 
echo Variablen Zuordnung immer ohne Leerzeichen geht einfach mit:
 
ZAHL=20
BUCHSTABEN=abc
 
echo Ausgabe der Variablen erfolgt mit einem $ vor der Variable:
 
echo $ZAHL
echo $BUCHSTABEN
 
 
echo Am Ende empfiehlt es sich 1x Enter zu drücken für eine "new line"

Schleifen mit Listen aus Dateien und Inhalten

Zur Bearbeitung von Listen, muss zunächst eine Variable mit den zu bearbeitenden Dateien oder Datei-Inhalten erstellt werden. Diese Variable enthält nun die Informationen und wird in der for-Schleife als Schlüsselwort benannt, z.B. „WDATEIEN“. Dieses Schlüsselwort welches die zu bearbeitenden Informationen enthält, wird mit beliebigen Befehlen zwischen den Schleifen Komponenten do und done verwendet.

Einzeiler um ganze Datei-Listen auf einmal zu bearbeiten

for WDATEIEN in $(ls -la liste*); do echo 123 >> $WDATEIEN; done

Ähnlich verhält es sich im folgenden Bsp. eine Liste an Dateien an den Konsolen Mediaplayer omxplayer zu übergeben:

for LIED in $(find /media/NFS/Musik/ScienceFiction/); do /usr/bin/omxplayer --vol -2200 ${LIED}; done

Ein weiteres Beispiel zur Bearbeitung und Ausgabe von Listen aus Dateien und Datei-Inhalten.

#!/bin/sh
 
while read inputline
do
  login="$(echo $inputline | cut -d: -f1,3,4)"
  fulln="$(echo $inputline | cut -d: -f4)"
  echo login = $login and fullname = $fulln
done < /etc/passwd
 
exit 0

Listen bearbeiten mit xargs

In diesem Beispiel wird eine Liste von .gz Dateien an xargs weiter gereicht. Im xargs Aufruf wird als Parameter der Kommando angegeben der auf jede Zeile der Liste angewandt werden soll. Die Option -i ist erforderlich, da Standardmäßig „{}“ als Ersatz-Zeichenkette verwendet wird, wie bei der Aktion -exec des Befehls find. xargs fügt dann die Dateiliste an der Stelle ein, wo die Ersatz-Zeichenkette steht. Dies kommt zur Anwendung wenn der Befehl die von xargs erzeugte Dateiliste nicht am Ende erwartet.

find /opt/xprogram/archiv/ -type f -iname "*.gz" | xargs -i gzip -d {}

SHELL Variablen bearbeiten

Im folgenden Beispiel wird innerhalb der Variablen VAR das Wort Kent durch Saajan ersetzt.

VAR="Eric and Kent are good friends."
RESULT="${VAR//Kent/Saajan}"
echo $RESULT 
Eric and Saajan are good friends.

Installationen

Die Betriebssystem Installation

GRUB Bootloader

Im Grub Menü kann mit der Taste c in den Kommando Modus geschalten werden, um somit Boot Parameter anzupassen: find /boot/vmlinuz =sucht vom Grub Menü aus nach Partition auf der vmlinuz ist grub-install hd0 =hd0 grub HD Bezeichnung

Bootloader wieder herstellen, z.B. nach der Installation von MS Windows. Rechner mit Linux Live CD starten. Die Linux-System Partition mounten mount /dev/sda4 /media/sda4 anschließend das /dev Verzeichnis in die System Partition mounten mount -o bind /dev /media/sda4/dev (sda4 kann auch anders heißen, je nachdem wo das Linux System installiert ist.). Dann die System Partition betreten chroot /media/sda4 und hier die beiden Befehle ausführen:

grub-install /dev/sda
update-grub
update-bootloader (Suse)

evtl. hilfreich von Live CD starten, dort in der Konsole grub eingeben. In der nun geöffneten Grub-Konsole: find /boot/grub/stage1 –> liefert z.B. (hd0,5) dann eingeben:

root (hd0,5)
setup (hd0)

alt In der Datei /boot/grub/menu.lst kann man hinter der kernel Zeile des Betriebsystems vga=791 = 1024×768 oder vga=794 = 1024 x 1280 für die Bildschirmauflöung einstellen, die wärend des bootens oder auf der System Konsole angezeigt wird.

neu Anpassungen grub2 werde nicht direkt an /boot/grub/grub.cfg vorgenommen, sondern durch das Anpassen der Datei /etc/default/grub. Anschließend wird update-grub ausgeführt.

GRUB Bootoptionen autoyast=INSTALL/http://172.16.19.73/INSTALL/servername der installiert wird

Live USB-Stick Boot

erstellen von bootfähigen USB-Sticks unter SUSE mit imagewriter SUSE Studio Imagewriter.

Alle OpenSuse und nun auch Ubuntu iso´s lassen sich mit dd auf einem USB-Stick schreiben, anschliessend booten und zum ausprobieren oder installieren verwenden. Somit sind Zusatztools nicht mehr erforderlich.

Erstellen von bootfähigen USB-Sticks unter Debian/Ubuntu mit unetbootin. Dies ist ein Installationsprogramm für Linux/BSD-Distributionen auf eine Partition oder ein USB-Laufwerk.

MultiBoot USB-Stick

Einzelne Partition auf Stick erstellen:

  1. Type fdisk -l (and note which device is your USB Drive)
  2. Type fdisk /dev/sdx (replacing x with your actual usb device)
  3. Type d (to delete the existing partition)
  4. Type n (to create a new partition)
  5. Type p (for primary partition)
  6. Type 1 (to create the first partition)
  7. Press Enter (to use the first cylinder)
  8. Press Enter again (to use the default value as the last cylinder)
  9. Type a (for active)
  10. Type 1 (to mark the first partition active „bootable“)
  11. Type w (to write the changes and close fdisk)
mkfs.vfat -n MULTIBOOT /dev/sdx1
mount /dev/sdx1 /mnt/
grub2-install --removable --boot-directory=/mnt/boot/ /dev/sdx

Software Versions Verwaltung

SVN

Zum Start wechselt man zunächst in das Verzeichnis der Arbeitskopie und holt sich die aktuelle Arbeitskopie vom SVN-Server:

cd /home/ronaldo/src/RPMProjekte
svn co https://nagios1.intranet.rodgau.de/svnlin/RONNISssh/trunk .

und kann hier nicht benötigte Einträge aus der Subversion Verwaltung entfernen:

svn remove debian/
svn remove Makefile

Anschließend kann man diese optional (wird beim commiten oder spätestens bei svn up auch entfernt) auch vom Dateisystem löschen:

rm -r debian/
rm -rf Makefile

nun können die Änderungen in Subversion bekannt gegeben werden:

svn commit -m "alte debian solaris Ordner geloescht"

Ein neues Verzeichnis und Dateien in die lokale Arbeitskopie kopieren:

cp -vr ~/Desktop/SOURCES/* .

Mit add Subversion bekannt machen:

svn add RPMProjssh.spec
svn add etc/
svn add usr/

Die Änderungen in Subversion wieder bekannt geben:

svn commit -m "neue Verz. hinzugefuegt"

Möchte man bestehende Daten verschieben gibt es den Befehl:

svn move SRC DEST

Säubern Aufräumen Löschen

Um nicht benötigte Projekte zu säubern, habe ich das ~/src/CLEAR Verzeichnis eingeführt. In diesen kann ein Repository ausgecheckt werden und gefahrlos teilweise oder komplett gelöscht werden.

Git

Ein bestehendes Verzeichnis unter Versionskontrolle stellen:

cd meinproj
git init
git add .
git commit -m "Initial"

Anschließend nun den Branch (oftmals main oder master) festlegen/ändern mit:

git branch -M main

Nun das Projekt auf dem Git-Server anlegen. Oftmals gibt es auf dem Git-Server ein Webinterface wo es einen Menü-Punkt New Repository oder New Project gibt. Hier sollte man am besten ein komplett leeres Projekt ohne Dateien anlegen. Denn sonst meckert git rum das schon Dateien vorhanden sind wenn man ein bestehendes Verzeichnis hoch laden möchte.

Auf der Konsole muss dann noch folgendes ausgeführt werden um die Dateien in die Versions Verwaltung zu integrieren.

git remote add origin https://git.example.net/ronni/teamcity-role.git
git push -u origin master

Alternativ legt man das Projekt mit Dateien auf dem Webinterface des Git-Servers an und clont sich das Projekt dann dorthin wo man es haben möchte.

Änderungen zu Git-Server Repository hochladen:

In das Projektverzeichnis wechseln

cd git_src/meinproj/

Dateien welche noch nicht unter der Git-Verwaltung stehen können zunächst mit git add aufgenommen und mit git commit -m „Kommentar text“ VeränderteDatei.txt ins Repository übertragen werden z.B. so:

git add icinga_pb.yml
git commit -m "Installation vom Paket monitoring-plugins-all" {Optional Datei}

Falls man viele Dateien geändert hat und möchte nur ein allgemeines Kommentar für alle Dateien commiten dann mit Stern:

git commit *

Anschließend noch folgendes ausführen um alle Änderungen zum Master Repository zu übertragen:

git remote add origin http://gitrepo.fritz.box/git/ronni/netmanexperi.git
git push -u origin master

oder einfach nur:

git push origin master

Falls er hier scheitert und meldet:

"fatal: repository https://gitrepo.fritz.box/git/ronni/netmanexperi.git/ not found"

so muss das Repository erst auf dem Git-Server angelegt werden.

Nutzername und Passwort wird abgefragt.

Änderung einer Remote Git-Url mit:

git remote set-url origin https://gitrepo.fritz.box/git/ronni/netmanexperi.git/

bestehendes Git Repo Clonen

Existiert ein Repo auf einen Server, welches per http oder ssh erreichbar ist, so kann man sich das entfernte Git Repo mit folgenden Befehl holen:

git clone http://gitrepo.fritz.box/git/ronni/ronnis_icinga-pb.git

Bei hinterlegten SSH-Key auch ohne PW Eingabe automatisierbar.

git clone git@gitrepo.fritz.box:ronni/ronnis_postfix.git

bestehendes Git Repo aktualisieren

Falls ein bestehendes Repo bereits im Dateisystem existiert, wird in das Verzeichnis gewechselt in dem sich der .git Ordner befindet und dann die folgenden Befehle ausgeführt um das existierende Git Repo auf dem lokalen Rechner zu aktualisieren.

git fetch 
git checkout
git pull

Falls zusätzlich Submodule verwendet werden, erkennbar am dependencies/ Ordner, dann noch den folgenden Befehl ausführen:

git submodule update

KDE

Plasma5 Oberfläche

bei Problemen

Falls z.B. die Taskleiste verschwunden ist und sich nicht neu hinzufügen lässt.

Kill alle laufenden KDE Anwendungen

/usr/bin/kquitapp

Startet alle erforderlichen KDE Anwendungen

/usr/bin/kstart

Ein Programm zum Starten von Modulen der Systemeinstellungen

/usr/bin/kcmshell5 --list

Mit dem Standard Dateimanager Dolphin ist es einfach auf anderen Rechner im Netzwerk zuzugreifen, zum Beispiel per SSH(sftp/fish). Beim Zugriff auf einem Netzwerkordners eines entfernten Server hatte ich eine Fehlermeldung „Communication with the local password server failed“. Mit dem folgenden Kommando kann man einen Überblick bekommen wo der Fehler her kommt:

dbus-monitor --session

Bei diesem Fehler hatte es geholfen mit dem Standard Nutzer den Benutzer Prozess neu-zustarten:

systemctl --user restart dbus.service 
systemctl --user restart dbus.socket

Knotes

Möchte man Notizen aus knotes wiederherstellen, findet man auf Dateiebene, im folgenden Pfad die in den Notizen gespeicherten Informationen.

/home/ronald/.local/share/akonadi/file_db_data/

Die Datei enthält auf diesen Weg allerdings ein paar zusätzlich eingefügte Zeichen. Für Leerzeichen sieht man dann z.B. ein =20 oder ähnliches. Wahrscheinlich ist ein Import und Export auch direkt per Akonadi Datenbank möglich. Mit kmail lässt sich die Datei korrekt darstellen.

Marble virtueller Globus

Proxy mit Authentifizierung in Marble eintragen, hierfür gibt es eine Konfigurationsdatei ~/.config/marblerc

[Cache]
proxyAuth=true
proxyPass=PW
proxyPort=8000
proxyUrl=8.8.8.8
proxyUser=tuxthepenguin
volatileTileCacheLimit=512

Firefox Browser

about:config
about:plugins
about:support
java

Datei Download und ausführen mit: sh jre-6u24-linux-i586-rpm.bin

S | Catalog | Type    | Name | Version      | Arch
--+---------+---------+------+--------------+-----
i |         | package | jre  | 1.6.0_24-fcs | i586
cd /usr/lib/firefox/plugins

oder

cd /usr/lib64/firefox/plugins
ln -s /usr/java/jre1.6.0_24/lib/i386/libnpjp2.so
libnpjp2.so -> /usr/java/jre1.6.0_24/lib/i386/libnpjp2.so

oder je nach version arch.

libnpjp2.so -> /usr/java/jre1.6.0_27/lib/amd64/libnpjp2.so

Evtl. Pfade beachten:

/usr/lib/browser-plugins
/usr/lib/firefox/searchplugins
/usr/lib/firefox/plugins
ln -s /usr/java/jre1.6.0_18 /usr/java/latest

Den Java Cache leeren und weitere Einstellungen:

javaws -viewer

Standard Programme wählen

sudo update-alternatives --config x-www-browser 

Danach erscheint eine Liste mit möglichen Alternativen, die man als neuen Standard wählen kann:

Es gibt 4 Auswahlmöglichkeiten für die Alternative x-www-browser (welche /usr/bin/x-www-browser bereitstellen).

  Auswahl      Pfad                       Priorität Status
------------------------------------------------------------
* 0            /usr/bin/chromium-browser   90        automatischer Modus
  1            /usr/bin/chromium-browser   90        manueller Modus
  2            /usr/bin/dillo              50        manueller Modus
  3            /usr/bin/epiphany-browser   85        manueller Modus
  4            /usr/bin/firefox-esr        70        manueller Modus

Drücken Sie die Eingabetaste, um die aktuelle Wahl[*] beizubehalten,
oder geben Sie die Auswahlnummer ein: 

Autostart

Im /etc/rc.local Skript können vor dem exit 0 Zeilen eingetragen werden, welche beim Systemstart abgearbeitet werden. Das gleiche bei Suse in die Datei /etc/init.d/boot.local

Systemweiter Autostart:
/usr/share/autostart

Für Debian mit LXDE, wird es in die Datei /etc/xdg/lxsession/LXDE-pi/autostart eingetragen. Eine Zeile pro Programm, evtl mit Zusatz-Optionen. Ein @ davor soll das Programm bei einem Crash neustarten.

Inhalt der Datei /etc/xdg/lxsession/LXDE-pi/autostart:

@lxpanel --profile LXDE-pi
@pcmanfm --desktop --profile LXDE-pi
@xscreensaver -no-splash
@point-rpi
Für standard Benutzer:
/home/neutron/.kde/Autostart

Für Debian mit LXDE wird es in die Datei .config/lxsession/LXDE-pi/autostart eingetragen. Eine Zeile pro Programm, evtl mit Zusatz-Optionen. Ein @ davor soll das Programm bei einem Crash neustarten.

Inhalt der Datei ~/.config/lxsession/LXDE-pi/autostart:

@lxpanel --profile LXDE-pi
@pcmanfm --desktop --profile LXDE-pi
@pidgin
@xscreensaver -no-splash
@point-rpi

Für eine grafische Bearbeitung das Paket lxsession-default-apps nachinstallieren:

sudo apt install lxsession-default-apps

Nach der Installation des Pakets kann man vom Dateimanager PCManFM aus über Orte –> Anwendungen –> Default applications for LXSession starten und im neuen Fenster Autostart anklicken, im Eingabefeld @pidgin eingeben - falls die Anwendung Pidgin automatisch beim Systemstart mit geladen werden soll - und auf Hinzufügen klicken.

Dateisystem

mkfs.ext4 /dev/sdk1    =ein neues ext4 Dateisystem anlegen auf der Partition /dev/sdk1
fsck		         =checkt Dateisystem nach Fehlern!
fsck.ext3	         =checkt ext2/ext3 Dateisysteme nach Fehlern und behebt diese.
e2fsck	         =checkt ext2/ext3 Dateisysteme nach Fehlern und behebt diese.

Informationen über die Massenspeicher Medien anzeigen

blkid /dev/sda3		--> /dev/sda3: LABEL="SicherA" UUID="265f37e3-be53-4d7b-84ff-b412674d385f" TYPE="ext3"

Viele Anzeige Möglichkeiten mit lsblk. Hier lassen sich die gesuchten Informationen mit –output filtern und nach Wunsch sortieren.

lsblk --output HCTL,PATH,MOUNTPOINT

Auch das Partitionslabel anzeigen welches ich immer bei der Erstellung einer neuen Partiton mit parted angebe. Nicht verwechseln mit dem LABEL, welches ich nicht gesetzt habe und daher die Spalte leer bleibt.

lsblk --output HCTL,PATH,MOUNTPOINT,LABEL,UUID,PARTLABEL

Oder nur speziel Informationen bezüglich scsi komptibler Geräte anzeigen, ähnlich dem lsscsi Kommando.

lsblk --scsi
NAME HCTL       TYPE VENDOR   MODEL                     REV SERIAL                   TRAN
sda  0:0:0:0    disk ATA      WL160GSA872B             3E01 WOCL25001237066          sata
sr0  3:0:0:0    rom  TSSTcorp TSSTcorpDVD-ROM SH-D163C SB02 TSSTcorpDVD-ROM_SH-D163C sata

Setze maximale Mount-Anzahl auf 60

tune2fs -c 60 /dev/sda6

Ausführliche Auflistung der angegebenen Partition.

tune2fs -l /dev/sdb3

Set the volume label of the filesystem.

tune2fs -L volume-label /dev/sdb3

Set the time the filesystem was last checked using e2fsck The keyword now is also accepted, in which case the last checked time will be set to the current time.

tune2fs -T time-last-checked

Partitionieren

cfdisk				(Interaktive Benutzung) Zum Anzeigen der Partitionstabelle aller angeschlossener Festplatten
cfdisk -P st			Ausgabe der Partitionstabelle auf der Konsole ähnlich wie fdisk
fdisk -l			Zum Anzeigen der Partitionstabelle aller angeschlossener Festplatten
parted -l                       Zum Anzeigen der Partitionstabelle aller angeschlossener Festplatten

Auf einem Webserver sollte man /var (Debian) ausgliedern, damit User die Root-Partition mit ihren Daten nicht vollschreiben. Für ein Desktop-System wäre dies irrelevant.

parted

Hier einige Beispiele, wenn eine Partition auf einer Festplatte angelegt werden soll und diese 100% der Kapazität nutzen soll.

Das Programm parted mit Angabe der entsprechenden Festplatte starten:

parted /dev/sdf

Auf der parted Kommando-Shell nun der Einzeiler:

(parted) mklabel gpt Yes mkpart TOSHIBA320G ext2 1 100%

parted von der Kommandozeile

Auch direkt von der Bash lassen sich alle Kommandos aus der parted Kommando-Shell als Parameter verwenden.

Überprüfen einer zuvor angelegten Partition auf der Festplatte /dev/sdf. Wir überprüfen mit print

parted /dev/sdf print
Model: TOSHIBA MK3263GSX (scsi)
Disk /dev/sdf: 320GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End    Size   File system  Name         Flags
 1      1049kB  320GB  320GB  ntfs         TOSHIBA320G

Weitere Beispiele direkt von der Bash/Kommandozeile, falls Partition Table: unknown: Option -a macht ein alignment der Partition

parted -a optimal /dev/sdb mklabel gpt mkpart var_lib_mysql  0% 100%

Die Angabe vom Dateisystem ist überflüssig: Die Angaben von der genauen Partition /dev/sdb1 bzw. /dev/sdb2 noch austesten: :!:

parted /dev/sdb1 mklabel gpt mkpart MONITORING 1MiB 429GB
parted /dev/sdb2 mklabel gpt mkpart GRAFANA 1 429GB

:!: Hier muss man auch beachten ob nicht schon bereits eine Partition Table existiert gpt/msdos. Falls schon eine Partitionstabelle existiert, dann verkürzt sich der Kommando wie folgt:

parted -a optimal /dev/sdb mkpart backup_hd 0% 100%
parted -a optimal /dev/sdk mkpart primary 0% 100%

Im folgenden das schrittweise Anlegen einer 300GB Partition mit parted auf die Festplatte /dev/sdb: Dieses schrittweise Vorgehen hilft auch wenn man vorher einen Fehler gemacht hat, z.B. bei Start/Anfang 0 eingegeben hat statt 1 :!:

parted /dev/sdb
(parted) mklabel oder mktable                                                        
New disk label type? msdos                                                
Warning: The existing disk label on /dev/sda will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? Yes
(parted) mkpart primary

oder:                                                             
                                              
New disk label type? gpt                                                  
(parted) mklabel SUSERepo                                                 
File system type?  [ext2]? xfs                                            
Start?                                                                    
Start? 1                                                                  
End? 300G                                                                  
(parted)                                                                                                                           

weiteres Beispiel:

(parted) mkpart
Partition name?  []? SUSERepo                                             
File system type?  [ext2]? xfs                                            
Start? 1                                                                  
End? 322GB                                                                
(parted)                                                                  
(parted) print
Model: VMware Virtual disk (scsi)
Disk /dev/sdb: 322GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End    Size   File system  Name      Flags
 1      1049kB  322GB  322GB  xfs          SUSERepo

(parted) quit                                                             

Partition umbenennen

Um den Namen einer Partition mit parted zu ändern, kannst du den Befehl name verwenden. Hier ist, wie du den Namen der Partition /oraexp in oraexp ändern kannst:

parted /dev/sdd name <partitionnummer> oraexp

Ersetze <partitionnummer> durch die Nummer der Partition, die du umbenennen möchtest. Du kannst die Partitionnummer mit dem Befehl print anzeigen:

parted /dev/sdd print

Dies wird eine Liste der Partitionen auf der Festplatte /dev/sdd anzeigen. Finde die Nummer der Partition /oraexp in der Liste und verwende dann diese Nummer im name-Befehl.

Partition vergrößern

Z.B. in einer VM wird eine virtuelle Festplatte (hier /dev/sdb) vergrößert. Diese Änderung muss nun auf dem Betriebssystem eingepflegt werden.

Mit print zunächst Informationen anzeigen lassen:

:!: Hier nun aufpassen das das komplette Device angegeben wird /dev/sdb statt /dev/sdb1 :!:

parted /dev/sdb
GNU Parted 3.1
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted)                                                                                                                           
(parted) print                                                            
Model: VMware Virtual disk (scsi)
Disk /dev/sdb: 644GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End    Size   File system  Name      Flags
 1      1049kB  322GB  322GB  xfs          SUSERepo

Die bestehende Partition entfernen:

(parted) rm 1
(parted) print                                                            
Model: VMware Virtual disk (scsi)
Disk /dev/sdb: 644GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start  End  Size  File system  Name  Flags

Eine neue Partition anlegen welche die volle neue Kapazität nutzt:

(parted) mkpart SUSERepo 1049kB 100%                                      
(parted) print
Model: VMware Virtual disk (scsi)
Disk /dev/sdb: 644GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End    Size   File system  Name      Flags
 1      1049kB  644GB  644GB  xfs          SUSERepo

(parted) quit  

Falls XFS als Dateisystem genutzt wird kann dem Dateisystem nun mitgeteilt werden die volle Kapazität zu nutzen:

xfs_growfs /mountpoint

Für BTRFS wird folgender Kommando genutzt um dem Dateisystem die neue Größe mitzuteilen:

btrfs filesystem resize max /

Die Partitionstabelle neu einlesen, nach anlegen einer neuen Partition.

blockdev --rereadpt /dev/sdi

Alternativ zum entfernen der Partition lässt sich auch parted rezise verwenden:

VM wird mit einem Livesystem gestartet
Mit parted print die verfügbaren Partitionen und verfügbare Diskgröße anzeigen lassen
Mit parted resize, die zu erweiternde Partition auswählen, in vielen Fällen die Nr.2 welches die Root Partition darstellt.
Die Partiton um x GB erweitern oder 100% eingeben
VM normal starten
mit btrfs filesystem resize max / die Festplatte vergrößern

parted rescue

Das partitionierungs Programm parted verfügt auch über eine rescue Option mit der sich verloren gegangene Partitionen suchen und wiederherstellen lassen. Der Aufruf kann direkt auf der Bash Kommandozeile mit parted /dev/sdc rescue 0 100% erfolgen oder innerhalb von parted.

BTRFS Kommandos

Allgemeine Info über die BTRFS Partitionen

btrfs filesystem show
btrfs subvol list /
btrfs fi usage /

Den belegten Speicherplatz einer BTRFS Partition, hier /var anzeigen

btrfs filesystem df /var

BTRFS Aufräumen/Wartung

btrfs filesystem defragment /var

Die Metadaten und Datei-Daten wieder optimiert auf dem Dateisystem anordnen

btrfs balance start /tmp

Man kann sich den aktuellen Status des balance Vorgangs auf einem 2. Terminal anzeigen lassen

btrfs balance status / eingeben.

BTRFS resize

Nach dem eine virtuelle Festplatte vergrößert wurde oder auf einer Festplatte eine Partition entfernt wurde und der freie Speicherplatz dem BTRFS zugerechnet werden soll, muss dann auch das BTRFS nachträglich in seiner Größe angepasst werden. Hierfür verwenden wir das Programm parted.

Ist das richtige System wieder gestartet, wird noch der folgende Kommando aufgerufen

btrfs filesystem resize max /

piCore

TinyCore gibt es auch für ARM CPU´s mit dem Namen piCore. Hiermit lassen sich auch sehr kleine USB-Datenträger oder SD-Karte noch brauchbar weiter verwenden. Ausserdem ist der Ressourcen Verbrauch dieses Mini Linux-System sehr gering.

Verwendung auf einen sehr kleinen 120MB USB-Stick Hier hatte ich die boot-Partition /dev/sdb1 von 60MB auf 45MB verkleinert, um dafür im Anschluss, die ext4 Daten-Partition entsprechend zu vergrößern:

Aufruf von parted

sudo parted /dev/sdb
GNU Parted 3.2
/dev/sdb wird verwendet
Willkommen zu GNU Parted! Rufen Sie »help« auf, um eine Liste der verfügbaren Befehle zu erhalten.
(parted) print                                                            
Modell: General UDisk (scsi)
Festplatte  /dev/sdb:  126MB
Sektorgröße (logisch/physisch): 512B/512B
Partitionstabelle: msdos
Disk-Flags: 

Nummer  Anfang  Ende    Größe   Typ      Dateisystem  Flags
 1      4194kB  71,3MB  67,1MB  primary  fat32        lba, type=0c
 2      71,3MB  126MB   54,5MB  primary  ext4         type=83

Befehl innerhalb von der parted Shell um Partition 1 zu verkleinern, auf 45MB:

(parted) resizepart 1
Ende?  [71,3MB]? 45MB

Warnung: Das Verkleinern einer Partition kann Datenverlust zur Folge haben, sind Sie sicher, dass Sie 
fortsetzen wollen?
Ja/Yes/Nein/No? Ja                                                        

Die Vergrößerung der ext4 Partition(sdb2) erfolgte dann mit dem grafischen Tool gpartet. Hier musste /dev/sdb als Geräte ausgewählt werden, nun werden alle Partitionen von /dev/sdb angezeigt. Auf die entsprechende Partition (sdb2) Rechtsklick und vergrößern/verschieben auswählen.

Mit Partet das Boot Flag wiederhestellen

(parted) set 1 boot on
FreeBSD Dateisystem nutzen

ufs2 Dateisystem mounten:

modprobe ufs
mount -t ufs -ro ufstype=ufs2 /dev/sda1 /media/sda1
infos fstab

Der erste Teil gibt das Gerät an, das eingehängt werden soll, hier kommt Ihr Eintrag aus dem Hardware-Browser hin. Der zweite Eintrag bezeichnet den Ort, an den das Gerät im Dateisystem einsortiert wird. vfat ist das Dateisystem, mit dem der USB-Stick formatiert ist. Die drei durch Kommata getrennten Optionen bewirken, dass normale Nutzer den USB-Stick mounten (users) und beschreiben (umask=0) durfen. noauto weist Linux an, das Gerät nicht automatisch beim Booten zu mounten, sondern nur, wenn ein Benutzer den Befehl dazu gibt. Die beiden Nullen sorgen dafuer, dass das Dateisystem nicht automatisch uberprueft und bei Backups mit dump nicht beachtet wird.

The fifth field is used for these filesystems by the dump command to determine which filesystems need to be dumped. If the fifth field is not present, a value of zero is returned and dump will assume that the filesystem does not need to be dumped.

The sixth field (fs_passno) is used by the fsck program to determine the order in which filesystem checks are done at reboot time. The root filesystem should be specified with a fs_passno of 1, and other filesystems should have a fs_passno of 2. Filesystems within a drive will be checked sequentially, but filesystems on different drives will be checked at the same time to utilize parallelism available in the hardware. If the sixth field is not present or zero, a value of zero is returned and fsck will assume that the filesystem does not need to be checked.

Berechtigungen eines Mount-Points (hier Ramdisk) innerhalb der /etc/fstab setzen:

tmpfs                   /opt/jboss/data tmpfs   rw,size=20G,mode=755,uid=440,gid=440    0       0

Limitierte Verzeichnisgröße in Linux

Filed under: admin, ubuntu linux — noborujs @ 11:19 pm

I wanted to limit the size of specific directories where output is written in a Linux server running Apache. I didn’t want to use quotas because it doesn’t really solve my problem. If www-data fills its partition, other www-data programs will still suffer from lack of disk space. So I really wanted to limit the size of one single directory.

The solution I found is to use a file as a filesystem, which I got from this thread http://www.justskins.com/forums/limit-directory-size-123005.html

Simply create a file with dd, format as ext3 and mount with -o loop as a directory. The file will have a maximum size given by dd.

Fortschrittsanzeige für dd
watch --interval=10 "pkill -USR1 dd"
dd if=/dev/zero of=/home/user/my_file bs=1024 count=5000000

bs specifies block size and count specifies the number of blocks, in the example above you’ll get 5Gb. Use anything you want.

Now format the file

mkfs.ext3 my_file

And mount

sudo mount my_file /mnt/my_file -o loop

Add an entry to /etc/fstab so it mounts on boot

/home/user/my_file    /mnt/my_file   ext3   loop

Disk quota

quota -u haferron					=Disk quotas for user haferron
setquota -u haferron 1000000 1100000 0 0 /home/		=Änderung der Schwellwerte 1GB für soft- hard- limits
repquota -v /home/					=Report for user quotas on device /dev/sdaX
quotacheck						=Prüfen und Reparieren von quota files

chkconfig -l boot.quota					=beim booten sollte hier on stehen: chkconfig boot.quota B

systemctl status quotaon.service                        =Checking for quota: running

-alt-
/etc/init.d/boot.quota status				=Checking for quota: running

Fehlerlog in /var/log/warn beachten:

Apr  7 08:38:07 ws19230 gconfd (haferron-12998): Die neue Status-Speicherdatei »/home/haferron/.gconfd/saved_state. tmp« konnte
nicht geschlossen werden: Der zugewiesene Plattenplatz (Quota) ist überschritten

XFS Filessystem bietet eigene angepasste Quota Kommandos:

xfs_quota -x -c 'report -h' /home                    =Report for user quotas on device /dev/sdaX

Backup und Imaging

Hast du die Quellpartition gemountet, als du dd ausgeführt hast ? Wenn ja, das führt zu einem Image, welches nicht bootbar ist.

problem erkannt problem gebannt.

dd if=/dev/sda2 of=/backup/image.img
dd if=/dev/sda of=/backup/boot.img bs=512 count=63

löst das problem zuverlässig. andersherum geht es dann auch! da scheinen noch irgendwelche daten zu liegen. sda2 ist übrigends nicht gemountet, ich habe von einer livecd (systemrescue-cd) gebootet… aber jetzt funktioniert es.

Du willst Deine Platte hda in eine Image-Datei speichern (auf hdb1) und später eventuell hda aus dieser Image-Datei heraus rekonstruieren.

1. Image erstellen:

dd if=/dev/hda of=/mnt/hdb1/myimage.img

2. Image zurückschreiben

dd if=/mnt/hdb1/myimage.img of=/dev/hda
cat ~/image_sda1.img.* | dd of=/dev/sda1

P.S.: Alternativ kann man auch partimage dafür verwenden … das komprimiert gleich mit …

oder ganz einfach mit cp:

cp -uR /media/sdb1 /media/sda3/Sicher	=Sicherung der ganzen Platte (-u für update)

Of course, you can also create an ISO image of the Debian Lenny Netinstall CD…

dd if=/dev/cdrom of=~/debian-500-amd64-netinst.iso
dd if=/dev/sr0 of=./EliteForce.iso

Oder aus Verzeichnissen eine ISO-Datei erstellen

mkisofs -l -iso-level 4 -o "Name der ISO Datei" "Name der Quelldatei"
mkisofs -l -iso-level 4 -exclude-list raus.txt -o Wolfenstein.iso /media/disk/

Soll eine iso-Datei zur Einsicht gemountet werden ist folgender Befehl anzuwenden:

mount -t iso9660 -o ro,loop=/dev/loop0 CEH4.iso /media/iso/
mount -o loop namederiso.iso /media/iso

Ein weiterer iso-mount benötigt ein anderes loop-device oder das zuvor gemountete iso muss vorher wieder entladen werden.

mount -t iso9660 -o ro,loop=/dev/loop1 CEH4.iso /media/iso02/
mount -o loop1 namederiso.iso /media/iso02

oder, wenn es mit dem obigen loop1 Kommando nicht geht, dann folgendes nutzen:

mount -o loop=/dev/loop0 /var/tmp/install_openft/openFT_CRYPTO_121B_2.iso 
mount -o loop=/dev/loop1 /var/tmp/install_openft/openFT_install.iso

komprimiertes Image schreiben

Ein komprimiertes Festplatten Abbild auf einem Datenträger schreiben:

XZ Archiv
xzcat openSUSE15-ARM-KDE-raspberrypi3.aarch64.xz | dd bs=4M of=/dev/sda iflag=fullblock oflag=direct; sync
Zip Archiv
unzip -p 2018-06-27-raspbian-stretch-lite.zip | sudo bs=4M dd of=/dev/sda iflag=fullblock oflag=direct; sync
gz Arciv
gzip -cd ~/image-compress_sda1.img.gz | sudo dd of=/dev/sda 

Vom Datenträger sichern:

dd if=/dev/sda1 | gzip > ~/image-compress_sda1.img.gz

Backup und Synchronisierung mit rsync

Sicherung vom lokal eingebundenen NFS Sicherungs-Verzeichnis auf externer USB Festplatte:

vereinfacht:

rsync -au /media/SicherNFS/ /media/tux/SicherC_USB/Sicher/

aus Platzgründen einige Sachen vom Backup ausschließen:

rsync -au --max-size=1000M --exclude=/ISO_Images --exclude=/Multimedia/Spiele --delete-excluded --delete --progress /media/hauptBackupdisk/ /media/tux/Hitachi01/Sicher_Hitachi01/
rsync -auv --exclude=/ISO_Images --exclude=/Multimedia/Spiele --exclude=/Multimedia/Musik --exclude=/Multimedia/Videos --exclude=/Multimedia/Freizeit/Ronald_bearbeitet --exclude=/Anwendungen --delete-excluded --delete --progress /srv/nfs/USBDisk/Sicher/ /mnt/Sicher
/

Hier wird nur das gesichert was ausdrücklich im rsync_include.file enthalten ist:

rsync -auv --delete --include-from=/srv/nfs/USBDisk/rsync_include.file --progress /srv/nfs/USBDisk/Sicher/ /mnt/Sicher/

Für besondere Fälle; Falls das Passwort mit übergeben werden muss. Z.B. wenn etwas Nachts automatisch als root Nutzer kopiert werden muss und man hier keinen SSH-key für konfigurieren mag. Den Kommando schon öfter genutzt in Verbindung mit at-jobs, wenn Nachts einmalig etwas kopiert/synchronisiert werden soll.

sshpass -p 'secret' /usr/bin/rsync -a -e ssh /prodata/ansoft root@example.net:/root/backup_config/
sshpass -p 'secret' /usr/bin/rsync -av --delete -e ssh root@db1:/prodata/db /prodata/ > /var/adm/log/sync_db.lg 2>&1

Neu erstellte Datei und Ordner -Rechte

Die Ausgabe von umask ist eine vierstellige Oktalzahl – allerdings verrät das Kommando nicht etwa, welche Rechte vergeben werden, sondern zeigt vielmehr an, welche Rechte entzogen werden. Die Zahl 0022 bedeutet also, dass neue Dateien die Zugriffsrechte rw-r–r– (644) und neue Verzeichnisse die Rechte rwxr-xr-x (755) erhalten (jeweils für die Gruppe und alle anderen wird 2, also „schreiben“, abgeschaltet).

Mit umask 022 die standard-Rechte der erstellten Datei an Benutzer anpassen.

0022 --> -rw-r--r--	weil 0666 - 0022 = 0644; Entspricht: rw-r--r--
0002 --> -rw-rw--r--	Dateien auch von Gruppenmitgliedern beschreibbar

Um bei Ordnern immer die selben Rechte zu setzen muss das Sticky bit gesetzt werden. Erste Zahl von der vier-stelligen:

chmod -R 2770 Sicher/	= (2)Sticky bit gesetzt für aktuelle Gruppe
chmod -R 1770 Sicher/	= (1)Sticky bit gesetzt für aktuelle Benutzer

Multimedia

Audio

Sound unter Linux mit KDE und ALSA
  1. alsa-base installieren
  2. alsaconf ausfuehren

Falls Probleme: etc/modules.conf ..use „update-modules force“ to force (re)generation

Video

3D Beschleunigung aktiv
glxinfo | grep rendering
glxgears
fgl_glxgears

Netzwerk

IPv6

Ein ping an localhost

ping6 -c3 ::1

Ein ping an ff02::1 ip6-allnodes multicast-Addresse, zum herausfinden wer noch im Netzwerk ist. Es wird die Link-Local Adresse zurück gegeben.

ping6 -I eth0 -c2 ff02::1
PING ff02::1(ff02::1) from fe80::e2cb:4eff:fe35:b162 eth0: 56 data bytes
64 bytes from fe80::e2cb:4eff:fe35:b162: icmp_seq=1 ttl=64 time=0.058 ms
64 bytes from fe80::213:d3ff:fef0:ec6c: icmp_seq=1 ttl=64 time=7.79 ms (DUP!)
64 bytes from fe80::e2cb:4eff:fe35:b162: icmp_seq=2 ttl=64 time=0.095 ms
Ein ping an ff02::fb MDNS Standard query
ping6 -I eth0 -c2 ff02::fb
PING ff02::fb(ff02::fb) from fe80::e2cb:4eff:fe35:b162 eth0: 56 data bytes
64 bytes from fe80::e2cb:4eff:fe35:b162: icmp_seq=1 ttl=64 time=0.051 ms
64 bytes from fe80::e2cb:4eff:fe35:b162: icmp_seq=2 ttl=64 time=0.061 ms

Eine IPv6 Adresse(site local address)=ist veraltete!!! an eth0 vergeben:

ip -6 addr add fec0::1/64 dev eth0
cat /proc/net/if_inet6
00000000000000000000000000000001 01 80 10 80       lo
fe8000000000000002044bfffe808003 02 40 20 80     eth1
die momentane IPv6 Routing Tabelle ausgeben
tux@iglu:~$ route -A inet6                                                                                                        
Kernel-IPv6-Routentabelle                                                                                                             
Destination                    Next Hop                 Flag Met Ref Use If                                                         
fe80::/64                      ::                       U    256 0     0 vmnet1                                                     
fe80::/64                      ::                       U    256 0     0 vmnet8                                                     
fe80::/64                      ::                       U    256 0     0 eth0                                                       
::/0                           ::                       !n   -1  1    49 lo                                                         
::1/128                        ::                       Un   0   1    65 lo                                                         
fe80::204:4bff:fe80:8003/128   ::                       Un   0   1     0 lo                                                         
fe80::250:56ff:fec0:1/128      ::                       Un   0   1     0 lo                                                         
fe80::250:56ff:fec0:8/128      ::                       Un   0   1     0 lo                                                         
ff00::/8                       ::                       U    256 0     0 vmnet1                                                     
ff00::/8                       ::                       U    256 0     0 vmnet8                                                     
ff00::/8                       ::                       U    256 0     0 eth0                                                       
::/0                           ::                       !n   -1  1    49 lo
iglu:~# ip -6 route show
fe80::/64 dev eth1  proto kernel  metric 256  mtu 1500 advmss 1440 hoplimit 0

nmap mit IPv6

iglu:~ # nmap -6 fe80::7ec5:37ff:fefc:e794%br0

Starting Nmap 6.25 ( http://nmap.org ) at 2013-09-23 12:47 CET
Stats: 0:00:13 elapsed; 0 hosts completed (1 up), 1 undergoing SYN Stealth Scan
Nmap scan report for fe80::7ec5:37ff:fefc:e794
Host is up (0.071s latency).
Not shown: 977 closed ports
PORT      STATE    SERVICE
555/tcp   filtered dsf
990/tcp   filtered ftps
1029/tcp  filtered ms-lsa
1039/tcp  filtered sbl
1044/tcp  filtered dcutility
1148/tcp  filtered elfiq-repl
1199/tcp  filtered dmidi
2008/tcp  filtered conf
3827/tcp  filtered netmpi
4899/tcp  filtered radmin
5100/tcp  filtered admd
5802/tcp  filtered vnc-http-2
5962/tcp  filtered unknown
6646/tcp  filtered unknown
7625/tcp  filtered unknown
7741/tcp  filtered scriptview
8194/tcp  filtered sophos
8333/tcp  filtered unknown
8701/tcp  filtered unknown
9999/tcp  filtered abyss
10628/tcp filtered unknown
40193/tcp filtered unknown
62078/tcp open     iphone-sync
MAC Address: 7C:C5:37:FC:E7:94 (Apple)

Nmap done: 1 IP address (1 host up) scanned in 865.68 seconds

Routing konfigurieren

default route löschen/hinzufügen:
route del -net default netmask 0.0.0.0 gw 192.168.3.1 dev eth0
route add -net default netmask 0.0.0.0 gw 192.168.3.1 dev eth0

route del default gw 192.168.1.1
route add default gw 192.168.1.1

link-lokal Route löschen

route del -net link-local netmask 255.255.0.0 dev eth0

wobei i.d.R. dev ethx auch weggelassen werden kann:

ip route del default via 192.168.1.1 dev eth0
ip route add default via 192.168.1.1 dev eth0

route löschen/hinzufügen über einen Gateway:

route del -net 192.168.3.0 netmask 255.255.255.0 gw 192.168.0.229 dev eth0
ip route del 192.168.3.0/24 via 192.168.0.229 dev eth0
ip route add 192.168.3.0/24 via 192.168.0.229

Es muss dann die Datei: /etc/network/interfaces editiert werden, dort einfach die IPv6 hinzufügen:

iface eth0 inet6 static
address 2001:41D0:1:218a::1
netmask 64

Für jede zusätzliche v6 IP-Adresse kann man folgendes am Ende der Datei hinzufügen:

post-up /sbin/ifconfig eth0 inet6 add 2001:41D0:1:218a::2/64
pre-down /sbin/ifconfig eth0 inet6 del 2001:41D0:1:218a::2/64

Und für die nächste dann:

post-up /sbin/ifconfig eth0 inet6 add 2001:41D0:1:218a::4/64
pre-down /sbin/ifconfig eth0 inet6 del 2001:41D0:1:218a::4/64

Kommando ip link zeigt die verfügbaren Netzwerk Schnittstellen

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether e0:cb:4e:35:b1:62 brd ff:ff:ff:ff:ff:ff
3: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc mq state DOWN qlen 1000
    link/ether 1c:4b:d6:56:83:4a brd ff:ff:ff:ff:ff:ff
Verbindung über IPv6

Eine SSH/SCP-Verbindung mit IPv6

ssh -6 tux@fec0::1
scp -6 tux@[fec0:a::10]:/media/extern/pmagic-5.10.iso /media/lokal
ssh -6 tux@fe80::21fb:fef6:72bc:b912%wlan0

Eine SSH-Verbindung über link-local unicast address, hier muss das Net-device angegeben werden.

ssh fe80::e2cb:4eff:fe35:b162%eth0
ssh fe80::213:d3ff:fef0:ec6c%br0

grafisch über Dolphin

sftp://root@[fec0:a::1]/

im Browser IPv6

http://[::1]:631/

SIP mit Linphone

sip:probe@[fec0:a::4]
Informationen IPv6

welche aktiven Dienste bieten IPv6 Unterstützung? (zeigt auch IPv4 Dienste mit an)

lsof -i -P -n|egrep -i "tcp|udp"

zeigt nur IPv6 Dienste an

lsof -i6 -n|egrep -i "tcp|udp"

welcher Dienst lauscht an Port 25

lsof -i :25
  ip -6 addr show lo
  1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
  ip -6 addr show eth0
  2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
    inet6 fec0::1/64 scope site 
       valid_lft forever preferred_lft forever
    inet6 fe80::204:4bff:fe80:8003/64 scope link 
       valid_lft forever preferred_lft forever
  ip -6 addr show vmnet8
  4: vmnet8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
    inet6 fe80::250:56ff:fec0:8/64 scope link 
       valid_lft forever preferred_lft forever

Gültigkeitsbereich:Standort bei fec0 Gültigkeitsbereich:Global bei fc80 und weitere

Netzwerk Informationen

Welche Rechner sind in meinem Netzwerk IP und MAC Adresse? Man kann ein Shell Skript schreiben, direkt auf der Konsole als Befehl:

iglu:~# for IP in $(seq 1 50); do
> ping -c1 -W2 192.168.1.$IP
> done

Dann mit arp -n oder ip neigh die Rechner anzeigen lassen ( ohne -n dauert es zu lange).

oder auch von der Konsole zu starten:

for ((i=1;i<20;i++));do ping -c2 172.16.19.$i;arp -a | tr "()" "  " | cut -d" " -f3,6 | sort; done

nmap

oder:

nmap -sP 192.168.0.1-100

oder:

fping -g 172.16.19.0 172.16.19.255

Operating System fingerprinting and port scanning:

nmap -P0 -O <IP address>
Starting Nmap 4.20 ( http://insecure.org ) at 2007-01-08 11:05 CET
Interesting ports on 192.168.2.1:
Not shown: 1693 closed ports
PORT   STATE SERVICE
22/tcp open  ssh
23/tcp open  telnet
53/tcp open  domain
80/tcp open  http
MAC Address: 00:13:xx:xx:xx:xx (Cisco-Linksys)
Device type: broadband router
Running: Linksys embedded
OS details: Linksys WRT54GS v4 running OpenWrt w/Linux kernel 2.4.30
Network Distance: 1 hop

Using the same tool, you can also do port scanning and service version discovery. For instance, the following command will report which IP-based services are running on the device, and which version of the service is being used:

nmap -P0 -sV <IP address>  
Starting Nmap 4.20 ( http://insecure.org ) at 2007-01-08 11:06 CET  
Interesting ports on 192.168.2.1:  
Not shown: 1693 closed ports  
PORT   STATE SERVICE VERSION  
22/tcp open  ssh     Dropbear sshd 0.48 (protocol 2.0)  
23/tcp open  telnet  Busybox telnetd  
53/tcp open  domain  ISC Bind dnsmasq-2.35  
80/tcp open  http    OpenWrt BusyBox httpd  
MAC Address: 00:13:xx:xx:xx:xx (Cisco-Linksys)  
Service Info: Device: WAP

The web server version, if identified, can be determining in knowing the Operating System. For instance, the BOA web server is typical from devices running an open-source Unix or Unix-like.

Die 5 meist genutzten Standard Ports scannen
nmap --top-ports 5 194.94.81.54
Informationen über einen speziellen Port
nmap -p T:15000 65.18.193.12

genauer:

nmap -P0 -sV -p T:80 77.92.77.11
PORT   STATE SERVICE VERSION
80/tcp open  http    Apache httpd 2.2.8 ((Ubuntu) PHP/5.2.4-2ubuntu5.10 with Suhosin-Patch)
nmap -p 55555-64444 -sV 192.168.11.4
Starting Nmap 5.00 ( http://nmap.org ) at 2010-03-09 22:46 CET
Interesting ports on fakehost.fakedomain.de (192.168.11.4):
Not shown: 2000 closed ports
PORT      STATE SERVICE VERSION
61281/tcp open  ssh     OpenSSH 5.1p1 Debian 5 (protocol 2.0)
Service Info: OS: Linux
UDP Scan
nmap -sU 192.168.1.2
Starting Nmap 5.00 ( http://nmap.org ) at 2010-03-10 21:47 CET
Interesting ports on 192.168.1.2:
Not shown: 994 closed ports
PORT     STATE         SERVICE
53/udp   open|filtered domain
67/udp   open|filtered dhcps
69/udp   open|filtered tftp
520/udp  open|filtered route
1900/udp open|filtered upnp
1901/udp open|filtered unknown
MAC Address: 00:06:25:ED:20:E3 (The Linksys Group)

speziellen Port Scannen:

nmap -sU -p U:69 172.18.10.80
Starting Nmap 4.00 ( http://www.insecure.org/nmap/ ) at 2011-01-25 10:30 CET
Interesting ports on 172.18.10.80:
PORT   STATE SERVICE
69/udp open  tftp
printf 'HEAD / HTTP/1.0\n\n' | nc -w 11 193.34.69.47 80
HTTP/1.1 301 Moved Permanently
Date: Sat, 13 Jun 2009 14:54:29 GMT
Server: Apache/2.2.11 (Unix) PHP/4.4.9
Location: http://www.partyfans.com/
Connection: close
Content-Type: text/html; charset=iso-8859-1

Oder auch mit dem gleichen Befehl möglich anderen Protokollen als HTTP zu lauschen

printf 'HEAD / HTTP/1.0\n\n' | nc -w 11 61.153.176.122 22
SSH-2.0-Sun_SSH_1.1
Protocol mismatch.
printf 'HEAD / HTTP/1.0\n\n' | nc -w 11 61.153.176.122 21
220 wzztenms FTP server ready.
530 Please login with USER and PASS.
printf 'HEAD / HTTP/1.0\n\n' | nc -w 11 196.15.143.106 25
220 cjcfw01 ESMTP Postfix (Ubuntu)

Oder einfacher mit netcat (nc)

netcat -v 172.18.10.80 1812
radius1.example.net [172.18.10.80] 1812 (radius) : Connection refused

Bei zwei Netzwerkkarten wird die default Route genutzt. Möchte man die Verbindung der anderen Karte prüfen, muss mit dem Schalter -s die Source IP gewählt werden:

netcat -s 172.19.30.12 -v 10.0.0.7 1547
Connection to 10.0.0.7 1547 port [tcp/laplink] succeeded!
nc -v suckup.de 80
Connection to suckup.de 80 port [tcp/www] succeeded!
nc -v 194.94.81.54 21
Connection to 194.94.81.54 21 port [tcp/ftp] succeeded!
220 ProFTPD 1.3.1 Server (TiFTP_Server) [::ffff:194.94.81.54]

oder UDP Ports mit der Option -u

netcat, weitere Möglichkeiten

1.) auf deinem PC: stellst du auf einem Port (3333) eine CD zur Verfügung

cat backup.iso | nc -l 3333

2.) und auf einen anderen PC im Netz: kann du die CD (ISO) nun empfangen

nc 192.168.0.1 3333 > backup.iso

Bei vielen aktuellen Distributionen gibt es statt dem nc Kommando den Befehl netcat. Damit einher benötigt man auch leicht abgeänderte Optionen:

Datei auf einem Server bereit stellen

cat test.mac.lst | netcat -l -p33333

Von einem anderen Server die bereit gestellte Datei abholen

netcat dhcp3 33333 > test.mac.lst_copy

netcat nc weitere Tricks

The simplest example of its usage is to create a server-client chat system. Although this is a very primitive way to chat, it shows how netcat works. In the following examples it is assumed that the machine that creates the listening socket (server) has the 192.168.0.1 IP address. So, create the chat server on this machine and set it to listen to 3333 TCP port:

nc -l 3333

On the other end, connect to the server with the following:

nc 192.168.0.1 3333

In this case, the keyboard acts as the stdin. Anything you type in the server machine’s terminal is transfered to the client machine and vice-versa.

Works as a Port Scanner too

A useful command line flag is -z. When it is used, netcat does not initiate a connection to the server, but just informs about the open port it has found. Also, instead of a single port, it can accept a port-range to scan. For example:

$ nc -z 192.168.0.1 80-90
Connection to 192.168.0.1 80 port [tcp/http] succeeded!

In this example, netcat scanned the 80-90 range of ports and reported that port 80 is open on the remote machine.

ss und netstat

einfach Informationen über aktuelle tcp Verbindungen:

socklist - Listet die geöffneten sockets
ss - socket statistics

ss ist vergleichbar mit netstat

Oft wird ss mit den folgenden Optionen verwendet -tar, t = TCP, a = Alle Socket anzeigen und -r löst Hostnamen auf.

ss -tar

Möchte man alle Verbindungen zu einem bestimmten Rechner mit ss im Auge behalten, so verwendet man die dst oder src Option:

watch ss dst 11.14.98.43

ss src 192.168.100.2

Die gleichen Optionen gehen auch für Port Nummern oder Port Namen z.B. ssh:

ss src :56750

Hier werden alle lauschenden https Ports aufgelistet:

ss -l src :https

Und sogar eine Kombination ist möglich:

ss -a dst :5228 or src :mysql

Weiter geht es mit netstat

Anzeigen aller tcp-Verbindungen ohne lauschende TCP-Ports

netstat -t

Sollte immer ausreichen:

netstat -tau
iglu:/home/harry# arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface
192.168.2.1              ether   00:1a:2a:24:28:68   C                     eth0

iglu:/home/harry# route -n
Kernel-IP-Routentabelle
Ziel            Router          Genmask         Flags Metric Ref    Use Iface
192.168.2.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
0.0.0.0         192.168.2.1     0.0.0.0         UG    0      0        0 eth0

Verbindungen auflisten mit lsof

Derzeit sehr übersichtlich :-)

lsof -i -n

tcpdump

Das Programm tcpdump gehört zu den sogenannten Netzwerk Sniffern.

Welche DNS Anfragen kommen von welchen Rechner ? z.B. auf einen DNS Server folgenden Befehl ausführen, -n Option bedeutet reine IP statt Namen anzeigen. Lausche an port 53 (DNS)

tcpdump -n port 53

Den DHCP Netzwerkverkehr auf beiden DHCP-Ports überwachen

tcpdump -i eth0 -pvn port 67 and port 68

Alle Verbindungen aus einem bestimmten Netz mitschneiden und in eine Datei schreiben, z.B. zur späteren Analyse mit Wireshark.

tcpdump -v net 172.29.3.0/24 -w zugriffe_dump

weitere Möglichkeiten:

tcpdump -v -n tcp port 443 -i bond0
tcpdump -i bond0 -n src host 172.16.19.230
tcpdump -v -n tcp port 22 and host 172.16.19.231 -i bond0

prüfen der ausgehende Verbindungen über 172.10.0.2, z.B. sehen, welcher Port vom Ziel Host verwendet wird. Mit dem Schalter -Q werden nur Ausgehende Verbindungen berücksichtigt:

tcpdump -i eth0 -Q out -n dst 172.10.0.2

prüfen ob Pakete vom Quell-Host an entfernten Host gesendet werden:

tcpdump -i eth1 -n dst host 172.10.0.2

Aus- und eingehenden Datenverkehr vom Host 172.10.0.2. Alles in eine Datei schreiben.

 
tcpdump -vv -i eth0 -Q inout host 172.10.0.2 -w smt1_suse_proxy_02

UDP Port:

tcpdump -n udp port 631 -i br0
tcpdump -v -n udp port 53 and not host 172.16.19.93 -i br0

Sniffer & Analyse Wireshark

Filter verwenden um nach einem bestimmten Netzwerk zu suchen:

ip.addr == 172.19.0.0/24

Oftmals sind schon Filter in einem Lesezeichen gespeichert, diese müssen dann nur noch nach aktuellen Wunsch angepasst werden.

Netzwerkinformationen bearbeiten

IP-Adressen aus Liste filtern

nmap -sP 172.16.3.1-254 | grep -Eo '([0-9]+\.){3}[0-9]+'

IP-Adressen welche zu einem bestimmten Netzwerk gehören aus Logdatei extrahieren. Den letzten Block(nach dem 3. Punkt) der IP-Adresse sortieren und doppelte IP´s verwerfen.

grep -ir "172.16.7" /var/log/messages|cut -f 6 -d " "|grep -Eo '([0-9]+\.){3}[0-9]+'|sort -t . -k 4,4n | uniq

MAC-Adressen Doppelpunkte hinzufügen

Vorausgesetzt, alle MAC-Adr. sind in einer Datei, eine MAC-pro-Linie.

sed -i 's/../&:/g;s/:$//' macadressen.txt

FIREWALL

Auch MAC Filter realisierbar:

iptables -A INPUT -m mac --mac-source 00:11:22:33:44:55 -j DROP

Rechner sperren alles IPv4:

iptables -A INPUT -s 172.16.19.232 -j DROP

Ganzes Netzwerk alle eingehenden Verbindungen sperren

iptables -i eth0 -A INPUT -s 172.16.1.0/24 -j DROP

Ganzes Netzwerk alle ausgehenden Verbindungen sperren

iptables -A OUTPUT -d 172.16.1.0/24 -j DROP

ICMP Echo Request(ping) auf betreffenden Rechner sperren

iptables -A INPUT -p icmp -j DROP

Rechner sperren für eingehende ssh Verbindung:

iptables -A INPUT -p tcp --dport 22 -s 172.16.19.232 -j DROP

Lokaler Rechner alles akzeptieren:

iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i bond0 -s 172.17.10.86 -d 172.17.10.86 -j ACCEPT

Akzeptiere TCP Pakete auf Ziel-Ports 6881-6890

iptables -A INPUT -p tcp --dport 6881:6890 -j ACCEPT

Auflisten der INPUT chain:

iptables -L INPUT
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
DROP       tcp  --  pc19231.intranet.rodgau.de  anywhere            tcp dpt:ssh
DROP       tcp  --  ws19232.intranet.rodgau.de  anywhere            tcp dpt:ssh
DROP       tcp  --  ws19233.intranet.rodgau.de  anywhere            tcp dpt:ssh

1. Regel aus der INPUT chain löschen:

iptables -D INPUT 1

Alle Regeln Löschen:

iptables -F

Netzwerkkarte einrichten:

Ein Netzwerk kann mit den Kommando ip temporär konfiguriert werden.

aus Arch Linux Wiki:

ip link set up dev eth0
ip link set eth0 up  <-- kürzer :)
ip addr add 139.96.30.100/24 dev eth0

aus eigener Erfahrung:

ip addr add 172.19.0.52/24 dev eth0

Anschließend muss dann mit dem ip Kommando die default Route konfiguriert werden:

ip route add default via 172.19.0.254 dev eth0

In Datei /etc/network/run/ifstate eintragen z.B. eth2=eth2 Nun Netzwerkkarte aktiv schalten:

ifconfig eth2 up

Nachricht mit Kommando tail -f /var/log/messages beobachten: link up/or down Kabel passend stecken

Beobachtung: Bei Einstellung der Netzwerkkarte hat geholfen:

ifdown eth0
ifup eth0

Netzwerkkarte deaktivieren auf DOWN setzen:

ip link set usb0 down

MAC Adresse einstellen

Einige Betriebssysteme verwalten Tabellen in denen MAC-Adressen den Netzwerk-Schnittstellen zugeordnet werden. Wird eine MAC-Adresse geändert, funktioniert die zugeordnete Netzwerkkarte nicht mehr. Eine andere MAC-Adresse ist auch der Grund, dass ein neues Interface - auch nach entfernen einer alten Schnittstelle - weiter durch nummeriert wird, also z.B. obwohl nur ein Interface vorhanden ist wird trotzdem die nummer eth3 vergeben. Dann ist die Zuordnungstabelle zu aktualisieren. Unter Ubuntu sind die MAC-Adressen in der Datei /etc/udev/rules.d/70-persistent-net.rules und unter SuSE in der Datei /etc/udev/rules.d/30-net_persistent_names.rules anzupassen. Ältere Ubuntu-Versionen speichern die MAC-Adressen in der Datei /etc/iftab. Diese Datei kann gelöscht werden.

MAC Adresse Vergeben
ip link set dev <Interface> addr <MAC-Adresse>

Es geht auch mit dem ifconfig-Kommando, und bei einigen Netzwerkkarten funktioniert es nur im Promiscuous Mode richtig, also

ifconfig <Interface> promisc

Anschließend:

ifconfig <Interface> hw ether <MAC-Adresse>

Beispiel für Änderung an der WLAN-Karte:

ifconfig wlan0 down
ip addr
ip link set dev wlan0 addr 1c:4b:d6:56:bb:aa
ifconfig wlan0 up
ifconfig 

BRIDGE einrichten

temporäre Einstellung

brctl addbr bridge
ifconfig bridge up

WLAN einrichten

Funktion überprüfen:

iwconfig
iwlist scan
iwspy
iwpriv
iwgetid
iwevent

gegebenenfalls W-Lan Karte einschalten:

ifconfig wlan0 up

besser/aktueller:

ip link set wlan0 up

Manchmal ist es nötig die WLAN Karte freizuschalten, da diese durch einen Software Schalter gesperrt sein kann.

rfkill --help
Usage:  rfkill [options] command
Options:
        --version       show version (0.4)
Commands:
        help
        event
        list [IDENTIFIER]
        block IDENTIFIER
        unblock IDENTIFIER
where IDENTIFIER is the index no. of an rfkill switch or one of:
        <idx> all wifi wlan bluetooth uwb ultrawideband wimax wwan gps fm

Verbindung zum AP mit wpa_supplicant

Benötigte Programme wpa_supplicant installieren und Konfigurationsdatei /etc/wpa_supplicant.conf prüfen oder erstellen.

wpa_passphrase mit SSID Leerzeichen und WLAN-Schlüssel aufrufen. Der Output kann direkt für die wpa_supplicant.conf verwendet werden.

wpa_passphrase EasyBox Zugangscodef.WLAN >> /etc/wpa_supplicant/wpa_supplicant.conf

INHALT:

ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=wheel

network={
        ssid="EasyBox"
        #psk="Zugangscodef.WLAN"
        psk=2a845b6fb1b94571b61ec6793fb5f64de1a506d5bcebbbea7878d99d2bd2d854
}

Prioritäten mit wpa_supplicant

Sind zwei WLANs in Reichweite, so lassen sich Prioritäten für beide setzen. Das Netz mit der höchsten Priorität wird für die Verbindung gewählt.

network={
    ssid="HomeOneSSID"
    psk="passwordOne"
    priority=1
    id_str="homeOne"
}

network={
    ssid="HomeTwoSSID"
    psk="passwordTwo"
    priority=2
    id_str="homeTwo"
}
Verbindung zum AP herstellen
wpa_supplicant -Dwext -iwlan0 -c/etc/wpa_supplicant.config

oder aktueller, da ich gelesen hatte das Dwext veraltet wäre:

wpa_supplicant -B -D nl80211 -c /etc/wpa_supplicant/wpa_supplicant.conf -i wlan0

oder:

wpa_action wlan0 stop
/sbin/ifup wlan0
dhclient wlan0
weitere WLAN Konfig-Programme
iwconfig <ETHX> mode ad-hoc key s:<DEINSCHLÜSSEL> channel <EINCHANNELDENDUMAGST>

Auf beiden Maschinen iwconfig ausführen, dann per ip Kommadno die IP setzen. Es kann Probleme mit ad-hoc Verbindungen geben. Dann kann man eine NIC in den master und den anderen in den managed mode setzen (vorausgesetzt eine der beiden karten kann master-mode)

iwconfig wlan0 ESSID home  # SSID setzen
iwconfig wlan0 mode managed  # Auf Infrastructure Mode setzen
iwconfig wlan0 rate 54M  # Übertragung einstellen
iwconfig wlan0 key s:dein Key
iwconfig wlan0 key s:0178-6101-286

Wer die IP-Adresse der WLAN-Karte per DHCP beziehen möchte, der kann sich zusätzlich noch dhcpcd installieren.

dhcpcd wlan0

bzw.

dhclient

WLAN Netzwerke in Reichweite scannen

iwlist scan

The Wireless interface can be set to one of the following different modes which impacts how the device operates:

managed - Node is a client connecting to an Access Point
master - Node acts as an Acces point
secondary - Node acts as a Secondary to a master Access point
ad-hoc - Operates in a One to One Ad-hoc connection to another Wireless device
monitor - Doesn’t connect to any Wireless network but sits and listens on all the packets on a frequency
repeater - Forwards packets between wireless nodes

The mode can be set as follows:

opensuse11:~ # iwconfig <interface> mode <managed|master|secondary|ad-hoc|monitor|repeater|auto>
tc - traffic controll

wpa_cli

Mit dem Kommando wpa_cli lassen sich Informationen sowie Einstellungen an der WLAN-Karte vornehmen.

wpa_cli status

Bluetooth

Konsolen Programm rfcomm für Bluetooth Konfiguration

RFCOMM configuration utility ver 5.23
Usage:
	rfcomm [options] <command> <dev>

Options:
	-i, --device [hciX|bdaddr]     Local HCI device or BD Address
	-h, --help                     Display help
	-r, --raw                      Switch TTY into raw mode
	-A, --auth                     Enable authentication
	-E, --encrypt                  Enable encryption
	-S, --secure                   Secure connection
	-M, --master                   Become the master of a piconet
	-L, --linger [seconds]         Set linger timeout
	-a                             Show all devices (default)

Commands:
	bind     <dev> <bdaddr> [channel]	Bind device
	release  <dev>                   	Release device
	show     <dev>                   	Show device
	connect  <dev> <bdaddr> [channel]	Connect device
	listen   <dev> [channel [cmd]]   	Listen
	watch    <dev> [channel [cmd]]   	Watch

Neueres Tool ist bluetoothctl ermöglicht das Anzeigen von Informationen über den Bluetooth Controllers und das Auflisten der Verbundenen oder sich in Reichweite befindlichen Bluetooths Geräten.

Neben bluetoothctl sind aktuell in Debian Bookworm auch noch diese Tools vorhanden:

GPG

Bei der Erstellung eines Schlüssels über eine SSH-Verbindung muss -Y gesetzt sein. Dabei bedeutet -Y Enables trusted X11 forwarding

ssh -Y root@server01

Wird -Y nicht beim SSH-Login verwendet bricht die Erstellung eines neuen Schlüssels mit „gpg-agent[29093]: command get_passphrase failed: Operation cancelled“ ab.

Eine gute Anleitung + ein Skript welches Repos signiert, findet man hier:

https://www.novell.com/communities/coolsolutions/how-digitally-sign-yum-repository-created-zcm11/

SSH

SSH das universelle Remote Protokoll. Auch als Datei-Server einsetzbar, mit den Datei-Managern Dolphin, Nautilus oder PCManFM lassen sich bequem Datei-Freigaben von entfernten SSH-Servern speicher, damit man schnell auf dies zugreifen kann.

Mit ssh lassen sich Befehle von der lokalen Konsole auf entfernten Serven ausführen. Im folgenden mit dem Beispiel an wget:

ssh root@192.168.1.21 'wget http://downloads.sourceforge.net/project/Jasper/jasperreports-4.0.bin'

Ein komplexeres Beispiel; Informationen von mehreren Rechnern über SSH abrufen. Dies ist dann sehr praktisch, wenn man einen Nutzer hat der sich auf allen Servern ohne Passwort einloggen kann. So wird, ohne das man ein Passwort eingeben muss, kurz darauf eine Liste der gewünschten Infos aller Rechner angezeigt.

for RECHNER in pc1 pc2 server1 server2; do ssh user@${RECHNER} zypper info ghostscript && echo "Auf Rechner $RECHNER ist ghostscript installiert"; done

oder etwas erweitert für Debian:

echo -e "\n\n\n"; for RECHNER in iglu2c antartica3a ; do ssh tux@${RECHNER} apt-cache show ghostscript|grep Version && echo -e "Auf Rechner $RECHNER ist ghostscript installiert \n\n"; done; echo -e "\n\n\n"

noch weiter erweitert, Es wird nun auch etwas gemeldet wenn auf den Rechner das Paket nicht installiert ist:

echo -e "\n\n\n"; for RECHNER in iglu2c antartica3a; do ssh tux@${RECHNER} apt-cache show ghostscript|grep Version && echo -e "Auf Rechner $RECHNER ist ghostscript installiert \n\n" || echo -e "Auf Rechner $RECHNER ist nichts mit Ghostscript installiert!"; done; echo -e "\n\n\n"

Auf allen Rechnern aus der Datei /etc/ansible/hosts, welche unter dem Satz „Alle Rechner aufgelistet“ untereinander stehen, sollen ein Patch installiert werden. Dies erreicht man mit folgender for-Schleife und dessen eingebetteten ssh-Aufruf.

for HOSTS in $(grep -A14 'Alle Rechner aufgelistet' /etc/ansible/hosts |egrep -v '^#|^testpc'); do ssh ${HOSTS} sudo zypper in -y -t patch SUSE-SLE-SERVER-12-SP3-2019-135 && echo "Auf Rechner $HOSTS ist Patch installiert"; done

Login ohne Passwort

Einen Schlüssel erstellen auf dem PC01 von wo aus der Login ohne pw möglich sein soll:

ssh-keygen -t rsa

Es werden 2 Dateien erstellt, die .pub-Datei wird auf den entfernten Rechner kopiert.

scp ~/.ssh/id_rsa.pub tux@PC2:/home/tux/.ssh/

Auf dem entfernten Rechner wird nun der pub-key in die Datei ~/.ssh/authorized_keys geschrieben. PC02 auf den sich ohne pw eingeloggt werden soll:

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

Falls man der Schlüssel-Datei einen anderen Namen gibt, muss beim Login die Schlüssel-Datei mit der Option -i angegeben werden.

ssh -i id_rsa_ronald_andererkey ronald@mond

oder um sich die zusätzliche Option -i dauerhaft zu sparren, kann man in die Datei /etc/ssh/ssh_config die folgende Zeile eintragen:

IdentityFile ~/.ssh/id_rsa_ronald_andererkey

Wenn der passwortlose Login scheitert, sollte man zuerst überprüfen, ob die Rechte für authorized_keys richtig gesetzt wurden. Weiterhin könnten die Rechte des Ordners ~/.ssh falsch sein. Dieser sollte keine Schreibberechtigung für 'group' und 'other' haben.

Probleme bei Verlust des public Keys

Falls der SSH public Key verloren geht, kann man sich diesen mit dem Kommando ssh-keygen neu erstellen lassen. Man benötigt dafür natürlich den private-Key.

ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub

Es kann dann manchmal noch erforderlich sein, dass man den neu generierten id_rsa.pub Key noch erweitern muss. Den Public-Key mit einem Editor öffnen und bis an Ende der Zeile springen, nun ganz am Ende ein Leerzeichen und den nutzer@rechnername eintragen.

Probleme bei SSH Login per WLAN

Beim Raspberry Pi und alten Routern kann es bei Problemen, mit einem SSH-Login bei WLAN Verbindung, erforderlich sein folgende Zeile in die /etc/ssh/sshd_config einzutragen:

IPQoS 0x00

sshpass

Zudem gibt es noch sshpass um Passwörter automatisch zu übergeben, welches mit vielen Tools zusammenarbeitet. Immer da wo ein ssh Passwort abgefragt wird lässt sich idR sshpass verwenden.

sshpass -p 'myPass' ssh -p 2122 tomcat@xxx.xxx.xx.xxx
sshpass -p 'myPass' scp -P 2122 ~/myDir/testPB.txt tomcat@xxx.xxx.xx.xxx:/chroot/tomcat/testPB
sshpass -p 'secret' /usr/bin/rsync -au -e ssh /prodata/ansoft root@example.net:/root/backup_config/

Zugriff auf Fileserver

Als normaler Benutzer einbinden, evtl. Mitgliedschaft in der Gruppe fuse:

sshfs loki@192.168.1.3:/media/archiv/Archiv/Musik /home/neutron/Musik/

Um das entfernte System wieder auszuhängen:

fusermount -u /home/neutron/Musik

mit Konqueror/Dolphin:

sftp://mhafer@192.168.1.2
fish://mhafer@192.168.1.2

Dolphin so einstellen das er nicht mehr als 3 FTP Verbindungen nutzt. Hierzu muss man die Datei: /usr/share/kde4/services/ftp.protocol bearbeiten und den Wert von 10 (so war es bei mir) auf 2 ändern: maxInstances=2 Abspeichern und alle Dolphin-Instanzen beenden. Absofort kann man auch die FreeWebhoster wie kilu.de gescheit nutzen.

Für X Programme von entfernten Rechner zu starten wie amarok kmix muss die Datei /etc/ssh/sshd_config angepasst werden –> X11Forwarding yes

ssh -X mhafer@192.168.1.2

1. Beispiel für das kopieren einer Datei mit scp von meinen Rechner auf einen entfernten Rechner:

neutron@thor:/$ scp eject fli4l@192.168.1.1:/usr/bin/eject
fli4l@192.168.1.1's password:
eject                                         100%   17KB  17.0KB/s   00:00

2. Beispiel für das kopieren einer Datei mit scp, von einen entferneten Rechner auf meinen Rechner:

Neutron@thor:/$ scp fli4l@192.168.1.1:/etc/inittab /home/Neutron/Desktop
fli4l@192.168.1.1's password:
inittab                                       100%  121     0.1KB/s   00:00

3. Beispiel für das kopieren eines kompletten Verzeichnis mit scp, von einen entferneten Rechner auf meinen Rechner:

neutron@thor:~$ scp -r fli4l@192.168.1.1:/boot /home/neutron/Desktop
fli4l@192.168.1.1's password:
ldlinux.sys                                   100% 7836     7.7KB/s   00:01
syslinux.cfg                                  100%  165     0.2KB/s   00:00
kernel                                        100%  559KB  25.4KB/s   00:22
rootfs.img                                    100%  216KB  27.0KB/s   00:08
rc.cfg                                        100% 3618     3.5KB/s   00:01
opt_tar.bz2                                   100%  333KB  23.8KB/s   00:14

NFS

File-Server NFS(NetworkFileSystem) ermöglicht eine performante Bereitstellung von Daten im Netzwerk. Auf dem File-Server das Paket nfs-kernel-server installieren. Anschließend die Datei /etc/exports wie folgt anpassen:

/media/massstorage/NFSpublic/	*(rw,async,no_subtree_check)

Die obige Zeile erlaubt allen entfernten Rechnern den Zugriff auf /media/massstorage/NFSpublic/, erkennbar an den „*“ vor den Netzwerkfreigabe Optionen. Soll nur den Rechnern hans und wurst Zugriff auf ein weiteres Verzeichnis, z.B. /media/massstorage/NFSprivat möglich sein, dann muss jeweils mit einem Leerzeichen getrennt der Rechnername vor den Netzwerkfreigabe Optionen gesetzt sein.

/media/massstorage/NFSpublic/	*(rw,async,no_subtree_check)
/media/massstorage/NFSprivat hans(rw,async,no_subtree_check) wurst(rw,async,no_subtree_check)

Hat ein Rechner(hans) zwei IP-Adressen, z.B. eth0 und wlan0, dann kann man jede IP-Adresse als einen eigenständigen Host betrachten und sollte auch die IP-Adressen statt den Hostnamen angeben.

/media/massstorage/NFSpublic/	*(rw,async,no_subtree_check)
/media/massstorage/NFSprivat  192.168.178.48(rw,async,no_subtree_check) wurst(rw,async,no_subtree_check)
/media/massstorage/NFSprivat  192.168.178.49(rw,async,no_subtree_check)

Damit der Server die Änderungen bei der Ersteinrichtung übernimmt, muss der NFS-Server zunächst neu gestartet werden:

systemctl restart nfs-kernel-server

Soll die Datei später nur erweitert werden sollte es schon reichen die NFS-Daten wie folgt neu einzulesen:

exportfs -a -r

Auf dem Server lassen sich die exportierten Verzeichnisse mit allen Optionen auflisten wie sie an die Clients übergeben werden:

showmount --exports

oder

exportfs -v

Mounten eines NFS-Dateisystems

Auf dem Client PC lassen sich die freigegebenen Verzeichnisse nun anzeigen. Der Dienst rpcbind sollte hierfür auf den Client PC laufen systemctl start rpcbind

showmount -e [IP oder Name des NFS-Servers]

Ein weitere Befehl um infos von den, per NFS-Server bereit gestellten Pfaden/Ordnern zu bekommen ist:

sudo nfsstat -m

Hier erfährt man dann auch die verwendetet NFS Version.

Wie gewohnt Befehl mount verwenden, um ein NFS-Dateisystem eines anderen Rechners zu mounten. Der Dienst rpcbind muss laufen, falls nicht, kann dieser mit systemctl start rpcbind gestartet werden.

mount nfsservername:/mnt/export /mnt/local

oder

mount.nfs4 nfs-home.intranet.rodgau.de:/media/massstorage/NFSpublic /home/tux/NFSpublic/

Beim booten automatisch einbinden durch einen Eintrag in die Datei /etc/fstab.

nfsservername:/media/massstorage/NFSpublic  /media/NFSpublic  nfs4  rw,nosuid 0 0

Automount - autofs.service

Die NFS Partition immer nur dann einhängen, wenn diese benötigt wird. Dies hat sich bisher super bewährt. Auch bei Problemen wenn das Netzwerk beim booten nicht zur Verfügung steht und sonst die NFS-Partition nicht eingebunden wird. Mit dem autofs.service und den entsprechenden Eintrag in der /etc/fstab wird die NFS-Partition eingehängt sobald auf diese zugegriffen wird.

Sicherstellen das der autofs.service läuft:

systemctl enable autofs.service

Einträge in der /etc/fstab setzen:

nfsserver:/media/massstorage/NFSpublic               /media/NFSpublic        nfs4   noauto,x-systemd.automount,x-systemd.idle-timeout=300,rw,user  0  0

Fehler vermeiden

Fehler / Problem, das regelmäßig das Mounten einer NFS Partition fehlschlägt:

mount.nfs: access denied by server while mounting 192.168.1.42:/home/rich/Documents

Hier ist darauf zu achten, das auf dem NFS-Server der NFS-Pfad z.B. /srv/nfs/FREIGABE bis zum freizugebenden Ordner, für den Nutzer unter den der NFS-Dienst läuft, betretbar ist.

Falls das nicht helfen sollte, klappt es mit der Option -o nfsvers=3

sudo umount.nfs4 -o nfsvers=3 nfsservername:/media/massstorage/NFSpublic  /media/NFSpublic
NFS Platte wird während des bootens nicht eingehängt

Oftmals möchte der NFS Mount vor der Verfügbarkeit der Namensauflösung bzw. des Netzwerks starten. Hier hilft es beim Raspberry Pi OS mit raspi-config Wait for Network at Boot zu aktivieren. Bei Suse hilft hier systemctl enable systemd-networkd-wait-online.service zu aktivieren oder einen Eintrag für den NFS-Server in die /etc/hosts zu setzen.

SAMBA

Erstellt einen neuen SAMBA-User. Dabei muss der username identisch sein mit einem Account auf dem Linux-System.

smbpasswd -a username

Aktiviert des neuen Samba Accounts.

smbpasswd -e maxmustermann

Samba authentifikations Problem mit Samba 3.3.4

ändere

obey pam restrictions = yes

zu

obey pam restrictions = no

oder:

systemctl stop apparmor.service

Die Samba Konfiguration überprüfen.

testparm /etc/samba/smb.conf
testparm -a

weitere Netzwerk Dienste

LDAP

Verzeichnis Dienst LDAP

Anzeigen der Benutzer Attribute:

ldapsearch -H ldaps://ldap.intranet.rodgau.de -x "(cn=ronaldo)"

Möchte man einen anderen basedn (Suchpfad im LDAP Baum) als den default nehmen, so kann man den Suchpfad mit der Option -b ändern.

ldapsearch -H ldaps://ldap.intranet.rodgau.de -x -b ou=Sysbenutzer,O=RODGAU "(cn=ansible)"

FTP

auf FTP-Server zugreifen

$ ftp
ftp> open diskspace.fh-frankfurt.de

Connected to dkw.dv.fh-frankfurt.de.
Name (diskspace.fh-frankfurt.de:proton): ronni
Password:
230 Login successful.
Remote system type is UNIX.
(hier gehen alle Linux Kommandos)
ftp> help			= zeigt alle moeglichen Kommandos an
ftp> recv File			= holt mir die Datei File, wenn ich im =Pfad bin

200 PORT command successful. Consider using PASV.
150 Opening BINARY mode data connection for leeren (455 bytes).
226 File send OK.
455 bytes received in 0.01 secs (54.4 kB/s)

WGET

Oder mit wget z.B. um etwas automatisch ablaufen zu lassen:

wget --user=ronald --password='passwort' ftp://194.94.81.54/Rechteverwaltung_mumble.pdf

Oben in der Zeile habe ich das pw in einfache Anführugszeichen geschrieben, da es bei Sonderzeichen zu Problemen kommen kann.

Downloads von Web-Servern

wget -r -l1 -nH -np --accept=jpg,gif $URL

Nur die Bilder laden, dann noch –accept dazunehmen.

wget -np -m

Fehlermeldungen

wget --no-check-certificate https://repo.example.net/smt.crt
--2020-03-16 14:27:23--  https://repo.example.net/smt.crt
Verbindungsaufbau zu 172.20.3.1:8080... verbunden.
Proxy-Tunneling fehlgeschlagen: Bad GatewayEs ist nicht möglich, eine SSL-Verbindung herzustellen.

Zur Behebung der obigen Fehlermeldung musste in der Umgebungsvariable no_proxy die Domain example.net hinzugefügt werden:

no_proxy="localhost, 127.0.0.1, .example.net"

curl

Ganz ähnlich wie wget ist das Programm curl. Bei hartnäckigen Fällen mit der Error Meldung Http Code 502. Hier helfen die Optionen -k no certificat und –noproxy hostnamexy.

curl -k --noproxy smt1.example.xy https://smt1.example.xy/smt.crt -o smt.crt

Http Code 502 weist auf einen falsch konfigurierten Proxy hin. Oft müssen die Domains, zum Server wohin man sich verbinden möchte, in die no Proxy ausnahmen eingetragen werden. Z.B. no_proxy=localhost, 127.0.0.1, .rodgau.ronni.de, .example.net

Postfix

Zeigt eine vollständige Übersicht aller Emails in den Warteschlangen

postqueue -p
mailq

Mailqueue zu Auslieferung bringen

Alle Emails in der deferred-Queue werden sofort wieder zur Auslieferung gebracht

postqueue -f

Einzelne E-Mail ausliefern

postqueue -i <QUEUE-ID>

Um alle Nachrichten aus der Mailqueu erneut zur Auslieferung zu bringen, erreichen wir durch:

postsuper -r ALL

Mails löschen

Löschen der eMail mit der <QUEUE-ID> aus der Warteschlange

postsuper -d <QUEUE-ID>

Alle Emails in der Queue löschen

postsuper -d ALL

Konfigurieren

Nach Änderungen an den Postfix Dateien muss der postmap Kommando auf die geänderte Datei angewandt werden der die Änderungen in eine entsprechende .db Datei überträgt.

postmap /etc/postfix/virtual

Sonstige Netzwerk Themen

mehrere IP´s an einer Netzwerkkarte

/sbin/ifconfig eth0:0 192.168.1.20
/sbin/ifconfig eth0:1 192.168.1.21

Befehle ausführen mit einlesen der /etc/networking/interfaces (Debian)

post-up route add -net 10.44.44.0 netmask 255.255.255.0 gw 10.22.22.1

Tftp Atftp

Der 1.dhcp-Server Überträgt per tftp die dhcp-Konfiguration an den 2.dhcp-Server. Um einen tftp-Server unter SLES10 zu betreiben, werden die beiden Pakete tftp und yast2-tftp-server benötigt. Die Konfiguration und Aktivierung des tftp-Server lässt sich über yast(2) erledigen.

Vorsicht! Viele TFTP Server laufen in einer chroot()-Umgebung (häufig im Verzeichnis /tftpboot. Alle Pfade die bzgl. TFTP angegeben werden sind dementsprechend relativ zu diesem Pfad!

Client --> Server

Datei vom Client-Rechner auf dem tftp-Server kopieren, die im Befehl angegebene Ziel Datei muss auf dem Ziel-Server existieren!

tftp -v 172.17.10.12 -c put /tmp/root/upload/pc.tmp pc.tmp

weiteres Bsp.: Datei /tftpboot/file2 zum Server in das Verzeichnis /tftpboot/ kopieren und dabei die Datei in file1 umbenennen. Die Datei /tftpboot/file1 muss bereits existieren.

tftp -v 192.168.1.101 -c put /tftpboot/file2 file1
Server --> Client

Soll eine Datei /tftpboot/file1 vom tftp-Server 192.168.1.101 geholt werden, betritt man auf dem Client Rechner den selben Pfad /tftpboot nun kann die Datei mit folgenden Kommando vom Server geholt werden:

tftp -v 192.168.1.101 -c get file1

Beobachtung, nachdem eine Datei /tftpboot/file3 auf dem Server erstellt wurde, ließ sich diese direkt auf dem Client überspielen, Befehl war wieder:

tftp -v 192.168.1.101 -c get file3

Ja, es funktioniert mit beliebigen weiteren Dateien.

ACHTUNG! Die Datei /etc/xinetd.d/tftp sollte als „user = root“ so voreingestellt bleiben wie sie ist.

Ähnlich verhält sich auch atftp

Server --> Client

Datei vom Server holen, mit -r gibt man den remote File auf dem Server an. Es ist egal in welchen Pfad der Kommando aufgerufen wird. Die Datei wird in den aktuellen Pfad übertragen, von wo aus der Befehl aufgerufen wurde.

atftp -g 172.18.10.80 -r sw065.cfg

Datei vom Server holen und dabei umbenennen. Mit -l gibt man den localen File an, indem die Daten vom remote File gespeichert werden sollen:

atftp -g 172.18.10.80 -r sw065.cfg -l localfile

wake on lan

Allgemein zu Beginn erst BIOS Einstellungen überprüfen und shutdown oder start Skript schreiben. In der Datei /etc/network/interfaces die Zeile für ethtool eintragen.

auto eth0
iface eth1 inet dhcp
post-up /sbin/ethtool -s eth0 wol g 

Das start-stop skript /etc/init.d/halt bearbeiten: auf —> „NETDOWN=no“ gesetzt!

Ab sofort startet der Rechner mit einer der Befehle:

wakeonlan 00:04:4b:80:80:03
ether-wake 00:10:dc:32:d4:73
wol 00:04:4b:80:80:03

Zusätzlich ist bei Problemen noch möglich:

ethtool -s eth0 wol g

Einstellungen prüfen mit ethtool eth0 Inhalt der Datei cat /proc/acpi/wakeup ACHTUNG: Manchmal startet der Rechner nur mit verdrehter mac-Adresse.

wakeonlan -i 192.168.1.0 03:80:80:4b:04:00
wakeonlan 03:80:80:4b:04:00
etherwake 03:80:80:4b:04:00

Zusatz:

/etc/init.d/networking skript anpassen
/ifupdown anpassen

Das Netzwerk Hardware nicht ausgeschaltet wird …evt sind diese Schritte aber nicht notwendig.

In /etc/init.d/reboot für reboot den Parameter -i entfernen. Dieser sorgt sonst für die Abschaltung aller Netzwerkschnittstellen.

shutdown oder start Skript einfügen —> ist schon vorhanden ..Ablage/Programme/wol

Proxy

Ein transparenter Proxy hat auch Nachteile. So ist wohl eine Authorisierung schwer oder gar nicht möglich. Wenn du die Firewall Richtung Internet richtig setzt kannst du ruhig einen normalen Proxy nutzen. Kein anderes System erlangt Zugriff zum Internet. Nutzt du den Proxy in einer DMZ ohne Routing zwischen Schulnetz und Internet, so brauchst du nicht mal Firewalls, da sämtliche Kommunikationen über die DMZ laufen müssen. Setzt du sinnvolle Client-Betriebssysteme (z.B. Linux) ein, so kannst du noch für normale Anwender die Proxy-Konfiguration sperren (/etc/iceweasel/pref/iceweasel.js) . Ist also nichts mit basteln an den Proxy-Einstellungen.

Umgehen kann man Proxy-Einschränkungen im übrigen immer. Suche z.B. mal nach SSH-VPN oder SSL-VPN. Aufgrund von Performance lohnen sich heute Proxies im übrigen auch fast nicht mehr. Zudem ist viel Content wie z.B. Streaming gar nicht mehr cachebar. Proxies lohnen sich vielleicht noch in Verbindung mit Virenfilterung, obwohl man meiner Meinung nach dem dem Windows-Client nach Viren scannen sollte (sonst Problem bei Viren über SSL).

Gerade in diesem Bereich geht es doch sicherlich auch um Contentfilterung oder? Bspw. mit Dansguardian oder Squidguard um das downloaden von Dateien, den Aufruf von Pornoseiten etc. zu verhindern. Tunneln ist sicherlich immer dann möglich wenn externe Datenträger verwandt werden können. Dann ist jeder mit einem Putty auf dem USB Stick das gesamte Netz zu tunneln solange verschlüsselte Verbindungen denn erlaubt sind.

Contentfilter: hilft nicht bei SSL-Verbindungen

Filterregeln: hilft nicht bei Tunneln

Tunneln auch ohne Zusatzsoftware, es reicht z.B. einigermaßen aktuelles JRE auf dem Client

Ich wollte nur sagen, dass ein Proxy ob nun transparent oder normal zwar die Sicherheit erhöhen, jedoch einen Missbrauch auch nicht ausschließen kann.

Man könnte alle SSL Verbindungen nach außerhalb verbieten und alles zum Proxy leiten, der widerrum die Verbindung aufbaut. Habe sowas persönlich noch nie gemacht, aber schon gesehen das das geht. Alternativ einfach alle SSL Verbindungen unterbinden. Dann kann man auch nicht mehr tunneln.

DHCP-Server

Der Client PC im Netzwerk nimmt von dem DHCP-Server die vergebene IP-Adresse an, der ihm als erstes antwortet.

Sich eine IP-Adresse von einem DHCP-Server geben lassen mit: dhclient oder dhclient3

router# cat dhcpd.conf
option domain-name "paymentbankgroup.com";
option domain-name-servers 192.168.1.1;
default-lease-time 600;
max-lease-time 7200;
authoritative;
ddns-update-style none;
log-facility local7;
subnet 192.168.1.0 netmask 255.255.255.0 {
  range 192.168.1.10 192.168.1.185;
  option domain-name-servers 192.168.1.1 , 195.49.137.34;
  option domain-name "paymentbankgroup.com";
  option routers 192.168.1.1;
  option broadcast-address 192.168.1.255;
  default-lease-time 600;
  max-lease-time 7200;
}

Bearbeiten um Netzwerk Interface hinzuzufügen:

/etc/default/dhcp3-server

Um Informationen über das Netzwerk und den verwendeten DHCP-Server heraus zu finden:

dhcpcd-test eth0

DNS

Den Zone-File Transfer auf Slave-DNS beschleunigen:

/usr/sbin/rndc reload intranet.rodgau.de
einige Namensserver für /etc/resolv.conf
nameserver 193.174.75.154
nameserver 193.174.75.126
nameserver 4.2.2.1

host Kommando

host -t ns example.net          =herausfinden welcher DNS-Server für angegebene Domain zuständig ist
dnsdomainname                 = gibt den aktuellen Domainnamen zurück
nscd -g                       = Name Service Cache Daemon gibt Informationen und weitere Statistiken zurück. Zusätzlich für die Steuerung von bind/named Dienst.
dns-browse                    = Front-ends für DNS search
whois 61.132.0.113            = Informationen über die angegebene IP
host -l meine.domain.de       = alle Rechner der angegebenen Domain auflisten

DNS Test:

dig www.whatismyip.com
nslookup www.whatismyip.com

Reverse Lookup:

host 66.11.119.69
nslookup 66.11.119.69
whois 61.132.0.113

Advanced Reverse Lookup:

dig -x 66.11.119.69
host -t AAAA www.heise.de
www.heise.de has no AAAA record
host -t AAAA www.google.de
www.google.de is an alias for www.google.com.
www.google.com is an alias for www.l.google.com.
host -t A www.google.de
www.google.de is an alias for www.google.com.
www.google.com is an alias for www.l.google.com.
www.l.google.com has address 74.125.43.105
www.l.google.com has address 74.125.43.103
www.l.google.com has address 74.125.43.147
www.l.google.com has address 74.125.43.106
www.l.google.com has address 74.125.43.104
www.l.google.com has address 74.125.43.99
nslookup dnsmasterserver01.intranet.rodgau.de

nslookup kann auch interaktiv aufgerufen werden und es kann mit „server servername“ ein neuer DNS-Server gewählt werden.

pceins:~ # nslookup
> server
Default server: 172.17.10.1
Address: 172.17.10.1#53
Default server: 172.17.10.2
Address: 172.17.10.2#53
> nds1
Server:         172.17.10.1
Address:        172.17.10.1#53
Name:   ldap1.intranet.rodgau.de
Address: 172.17.10.12

Einfacher gehts aber mit dem host Kommando, falls man einen anderen DNS-Server abfragen möchte wird eingegeben:

host rechnername dnsservername

Zum überprüfen der Syntax der DNS-Konfiguration gibt es den Befehl:

named-checkconf

Dieser Kommando kann ohne weitere Parameter aufgerufen werden.

Für die Überprüfung von Zonen-Dateien gibt es das Programm named-checkzone [-options] zonename filename

dnsmasterserver01:/usr/local/etc/dnswriter # named-checkzone rodgau.ronni.de /var/lib/named/master/rodgau.ronni.de 
/var/lib/named/master/rodgau.ronni.de:12: NS record '172.18.10.80.' appears to be an address
/var/lib/named/master/rodgau.ronni.de:13: NS record '172.18.10.81.' appears to be an address
/var/lib/named/master/rodgau.ronni.de:14: NS record '172.29.6.4.' appears to be an address
zone rodgau.ronni.de/IN: rodgau.ronni.de/MX 'mail.rodgau.ronni.de' has no address records (A or AAAA)
zone rodgau.ronni.de/IN: loaded serial 2016061600
OK

Bestehende Dateien mit named-compilezone zurück in TEXT-Format umwandeln:

convert raw zone file „example.net.raw“, containing data for zone example.net, to text-format zone file „example.net.text“

named-compilezone -f raw -F text -o example.net.text example.net example.net.raw

SRV Einträge prüfen

dnsmasterserver01:/var/lib/named/master # dig _vlmcs._tcp.win2k8.intranet.rodgau.de SRV
; <<>> DiG 9.6-ESV-R7-P1 <<>> _vlmcs._tcp.win2k8.intranet.rodgau.de SRV
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 59652
;; flags: qr aa rd; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;_vlmcs._tcp.sep1.intranet.rodgau.de. IN  SRV

;; AUTHORITY SECTION:
intranet.rodgau.de.       39600   IN      SOA     intranet.rodgau.de. root.intranet.rodgau.de. 2013031800 28800 7200 604800 39600

;; Query time: 1 msec
;; SERVER: 172.18.10.80#53(172.18.10.80)
;; WHEN: Mon Mar 18 08:53:08 2013
;; MSG SIZE  rcvd: 92

Beispiel eines SOA-Records in BIND

@ IN SOA master.example.com. hostmaster.example.com. (

  2014031700 ; serial
  3600       ; refresh
  1800       ; retry
  604800     ; expire
  600 )      ; ttl

In diesem Beispiel wird festgelegt, dass sich ein Slave alle 3600 Sekunden mit seinem Master per Zonentransfer synchronisiert. Ist sein Master nicht erreichbar, wird alle 1800 Sekunden ein neuer Versuch gestartet. Kann der Master innerhalb von 604800 Sekunden (einer Woche) nicht kontaktiert werden, so erklärt der Slave die Zone example.com als inaktiv und beantwortet keine diesbezüglichen DNS-Requests mehr. DNS cached auch fehlgeschlagene Request. Die TTL beträgt 600 Sekunden.

Weiterhin wird definiert, dass der Primary Master dieser Zone master.example.com ist und dass der Administrator über die E-Mail-Adresse hostmaster@example.com erreichbar ist. Das @ muss durch einen . ersetzt werden. Kommt ein . vor dem @, z. B. vorname.nachname@example.com, so wird dieser mit einem \ maskiert – also z. B. vorname\.nachname.example.com.

Die Seriennummer beträgt zur Zeit 2018031700. Bei der nächsten Änderung muss sie (manuell) auf mindestens 2018031701 erhöht werden. Dabei hat sich die Konvention eingebürgert, das Datum in der Form Jahr-Monat-Tag sowie einen nachfolgenden zweistelligen Versionszähler als Seriennummer zu verwenden.

Zertifikate Certificate

Hiermit das Zertifikat anzeigen lassen:

/etc/ssl/certs> openssl s_client -connect ldap2.rodgau.net:636 -showcerts -CAfile /etc/ssl/certs/myxyp.pem

Von einschließlich —–BEGIN CERTIFICATE—– bis einschließlich —–END CERTIFICATE—– ausschneiden und in einer Text Datei speichern z.B. certificat.txt

Zertifikat anzeigen/prüfen mit:

openssl x509 -in certificat.txt -noout -text

oder:

openssl x509 -in /var/lib/icinga2/certs/ca.crt -text

Leistung und Geschwindigkeit

Linux -Installation abspecken

Man erstellt eine kicklist, in der alle „unnützen“ Programme aufgelistet sind. Um dann mit

apt-get remove -y --purge $(< kicklist)

in wenigen Sekunden alles zu löschen.

Das –purge kann auch weggelassen werden. Es bewirkt, dass auch die Konfigurations-Dateien gelöscht werden. Nützlich ist eine weitere Option → -y. Dadurch muss nicht jedes Paket zum löschen bestätigt werden.

Kill Kick Entfernen -Paketliste

skype facebook apple ipod ipad iphone google laptop notebook vbox virtual vmware open-vm-tools samba chinese ndiswrapper telnet infrared lirc clamz choqok

Linux Kernel backen und hfs hfs+ support raus

Sprach Dateien unter /var/cache/man/

aufräumen & säubern

Partition nach Einträgen die zattoo enthalten durchsuchen und löschen. Hier eignet sich beim find Kommando der Schalter -print, denn dieser zeigt auch die gelöschten Dateien nach dem Löschen nochmal an.

find / -xdev -iname *zattoo* -print -delete
find /etc/zypa/conf.d/ ! -iname zypa.conf -print -delete        =Alles bis auf zypa.conf im Verz löschen

rm -rfv /etc/zypa/conf.d/!(zypa.conf|zypb.conf|zypc.conf)       =Alles bis auf die in Klammer angegebenen Dateien im Verz löschen

aptitude clean
aptitude autoclean

apt-get autoremove
apt-get clean
apt-get autoclean

/etc/inittab		=viele Einstellungen, Anzahl ttys, powersave, runlevel

hdparm -v /dev/hda	=zeigt momentanen Einstellungen von Gerät /dev/hda
15.09.2006
hdparm -T = /dev/sda: Timing cached reads:   1036 MB in  2.00 seconds = 518.07 MB/sec
hdparm -t = /dev/sda: Timing buffered disk reads:  156 MB in  3.02 seconds =  51.70 MB/sec
10.12.2006
Timing cached reads:   710 MB in  2.00 seconds = 354.13 MB/sec
Timing buffered disk reads:  192 MB in  3.01 seconds =  63.87 MB/sec
09.01.2007
Timing cached reads:   750 MB in  2.00 seconds = 375.08 MB/sec
Timing buffered disk reads:  190 MB in  3.00 seconds =  63.25 MB/sec
12.08.2009
hdparm -tT /dev/sda
/dev/sda:
 Timing cached reads:   680 MB in  2.00 seconds = 339.44 MB/sec
 Timing buffered disk reads:  196 MB in  3.01 seconds =  65.22 MB/sec

fdupes

Mit dem Kommandozeilen Tool fdupes lassen sich schnell doppelte Dateien aufspüren und entfernen.

Durchsucht rekursiv alle Unterverzeichnisse im angegebenen Pfad nach Duplikaten und listet sie auf.

fdupes -r /home/tux

Mit der Option -d ausgeführt, werden auch doppelte Dateien entfernt.

Logging

Als root kann man für eine oder auch mehrere neue zu rotierende Log-Datei eine neue Konfigurationsdatei unter /etc/logrotate.d/ anlegen, nennen wir sie z.B. apache-logs. In dieser Datei kann man nun die Konfiguration für eine oder aber auch mehrere Dateien vornehmen:

/var/log/apache2/meinweb1-access.log {
    size=100M
    rotate 52
    compress
    delaycompress
    missingok
    notifempty
    create 640 root root
    maxage 365
}
  
/var/log/apache2/meinweb1-error.log  {
    size=100M
    rotate 52
    compress
    delaycompress
    missingok
    notifempty
    create 640 root root
    maxage 365
}

Hier die Erklärung der einzelnen Parameter:

Sie können die Konfiguration testen mit:

logrotate -d /etc/logrotate.d/apache-wpad

Um die Konfiguration sofort anzuwenden:

logrotate -f /etc/logrotate.d/apache-wpad

Konfig für Nutzer ohne root-Rechte

Falls Nutzer, ohne root-Berechtigungen, ihre eigenen Log-Dateien mit logrotate steuern sollen kann man ein eigenes Verzeichnis für die Logrotate Konfig erstellen. Z.B. /usr/local/etc/rotatelogs/ Verzeichnis für logrotate Konfiguration, die zu individuellen Zeiten ausgeführt werden.

Der Nutzer kann sich mit crontab -e seine eigenen Zeiten einrichten ab wann die Logs zu rotieren sind. Oder als Systemweite Einstellung in /etc/cron.d/logging. Die Crontab könnte wie folgt aussehen:

50 5 * * *     root  /usr/sbin/logrotate -f /usr/local/etc/rotatelogs/jboss-process >/dev/null 2>&1
55 5 * * *     root  /usr/sbin/logrotate -f /usr/local/etc/rotatelogs/apache2-vhosts >/dev/null 2>&1

Archivierung und Komprimierung

schneller, besser: Bzip2, xz

Das Programm xz verwendet einen anderen Kompressionsalgorithmus und verkleinert daher die meisten Dateien deutlich besser. Listing 2 zeigt Gzip und Bzip2 im Vergleich. bzip2 besitzt einen so genannten Recovery-Modus: Beim Komprimieren zerlegt das Tool die Dateien in einzelne Blöcke. Ist eine Datei beschädigt, ist es eventuell noch möglich, Daten aus den intakt gebliebenen Bereichen zu retten – dazu entpacken Sie mit bzip2recover die unbeschädigten Teile.

Listing 2: „gzip“ und „bzip2“ im Vergleich

$ ls -l bild.bmp*
-rw-r--r--  1 huhn huhn 2313894 Sep  5 13:35 bild.bmp
-rw-r--r--  1 huhn huhn    2534 Sep  5 13:35 bild.bmp.bz2
-rw-r--r--  1 huhn huhn    9547 Sep  5 13:35 bild.bmp.gz

Abgesehen von einigen kleinen Unterschieden ähneln viele Bzip2-Optionen denen von Gzip. Auch hier geben Sie zum einfachen Komprimieren einer Datei nur deren Namen an:

bzip2 datei

Die komprimierte Datei trägt anschließend die Endung .bz2 und behält - genauso wie beim Packen mit Gzip - ihre ursprünglichen Dateieigenschaften. Anders als Gzip kennt Bzip2 eine Option, über die es eine Kopie des Originals anlegt. Geben Sie dafür einfach zusätzlich den Parameter -k (englisch „keep“ = „behalten“) an:

bzip2 -k datei

noch besser xz

vormals lzma

aptitude install xz

danach enpacken mit:

unlzma murmur-static_x86-1.1.8.tar.lzma

bzw.:

unxz murmur-static_x86-1.1.8.tar.xz

und dann:

tar xvf murmur-static_x86-1.1.8.tar
Mehrere Verz. in ein Archiv packen
tar cfvJ freetzbau.tar.xz /home/freetz-trunk/ /home/freetz-stable-1.2/ /home/speed-to-fritz/

Archiv in das Verzeichnis /srv/www/htdocs/ entpacken:

tar xvzf dokuwiki-2010-11-07a.tgz -C /srv/www/htdocs/

Ein Ordner mit mehreren rar-Archiven die alle durch nummeriert sind und zusammen gehören (erste Datei ist CEH4.part01.rar). Diese einzelnen Dateien ließen sich mit folgenden Befehl zusammensetzen:

unrar e -kb CEH4.part01.rar /home/tux/Desktop
Inhalt von tar.gz Archiv auflisten
tar -tf archiv.tar.gz
Einzelne Datei (z.B. quakenet.log) aus Archiv entpacken
tar xfvz archiv.tar.gz Pfad/zur/Datei/quakenet.log

oder wenn Datei Leerzeichen enthält:

tar xfvz archiv.tar.gz "logs/opensuse irc_#suse.log"

Komprimierte xz, tar.gz und tar.bz2 Dateien kann man sich mit xzless, zgrep bzw. bzless, bzgrep ansehen.

verschluesseltes zip-Archiv

zip -9e archiv2.zip datei1.pdf datei2.jpg