====== 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: * ''sudo'' wurde oftmals weggelassen um es übersichtlich zu halten. Bei entsprechenden administrativen Kommandos, z.B. bei Installation/Deinstallation/Systemupdate also ein ''sudo'' voran stellen. ==== 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!'' * Innerhalb einer Datei suchen mit ''/suchwort'' und mit ''n'' oder ''N'' vorwärts/Rückwärts suchen. * Mit dem Befehls-Aufruf ''vi +170 /var/tmp/textdatei'' wird erreicht, das der Cursor direkt an der Zeile 170 steht. * Nach dem öffnen einer Textdatei kann man mit dem Cursor direkt auf ein Wort gehen, anschließend drückt man die Taste ''#'' und der Cursor springt zum nächsten gleichen Wort. === 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. * Strg W = zum Suchen nach bestimmten Zeichenketten * Strg O = zum speichern * Strg K = zum Ausschneiden ===== 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 === - 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"}]} * https://monitoring-portal.org/woltlab/index.php?thread/41006-call-icinga2-api-with-ansible/ * https://github.com/Icinga/icinga2-api-examples/blob/master/paw/api_calls.sh ==== 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 == * **Shift + Bild hoch** lassen sich auf der Konsole die davor liegenden Seiten anzeigen * **Alt + Pfeil links/rechts** ist es möglich zwischen den Konsolen zu wechseln * **Strg + R + suchname** Suchen im Befehlsspeicher nach "suchname" mit Wiederholung von **Strg + R** lässt sich weiter suchen. * **suchname + Bild hoch/runter** In der history nach "suchname" blättern ==== 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: - Minute [0,59] - Hour [0,23] - Day of the month [1,31] - Month of the year [1,12] - 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. 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 === 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 ==== 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 < 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 =Informationen über Datei: Inode, letzte Änderung/Zugriff von welchen 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/ 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 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 ===== 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 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 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/* ==== 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 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 ausführbar machen. \ oder ausführbar machen = chmod +x script.sh echo -e "\a" erzeugt einen Piep-Ton. sleep 5 echo sleep 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 = 1024x768 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: - Type **fdisk -l** (and note which device is your USB Drive) - Type **fdisk /dev/sdx** (replacing x with your actual usb device) - Type **d** (to delete the existing partition) - Type **n** (to create a new partition) - Type **p** (for primary partition) - Type **1** (to create the first partition) - **Press Enter** (to use the first cylinder) - **Press Enter** again (to use the default value as the last cylinder) - Type **a** (for active) - Type **1** (to mark the first partition active "bootable") - 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 ===== 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 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 ==== Man kann es ganz kurz machen und auf der ''parted'' Kommando-Shell alles in einer Zeile eingeben. Hier ein Beispiel, 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:** parted -a optimal /dev/sdb mklabel gpt mkpart var_lib_mysql 0% 100% Die Angabe vom Dateisystem ist überflüssig: parted -a optimal /dev/sde mklabel gpt mkpart backup ext4 0% 100% parted /dev/sdb1 mklabel gpt mkpart P1 ext4 1MiB 429GB parted /dev/sdb1 mklabel gpt mkpart ZCM42 ext4 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 ext4 0% 100% Beim folgenden Befehl funktioniert es nicht, wenn ich 100% hinten anhänge, dann fragt er nochmal nach wegen Partitionsgröße: parted /dev/sdc mklabel gpt mkpart usr_sap xfs Eine neue Partition anlegen, es muss hier noch mit ''mkfs.ext4 /dev/sdk1'' ein neues Dateisystem angelegt werden, die Option -a macht ein alignment der Partition: 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 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. * https://wiki.ubuntuusers.de/Befehle_Btrfs-Dateisystem/ * https://linuxhint.com/defragment-btrfs-filesystem/ === 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''. * Server oder VM wird mit einem Livesystem gestartet * Das Programm ''parted'' starten mit den Aufruf ''parted /dev/xpy'' * Innerhalb von ''parted'' mit **print** die verfügbaren Partitionen und verfügbare Diskgröße anzeigen lassen * Mit **resize**, die zu erweiternde Partition auswählen, in meinem Fall die Nr.2 welches die Root Partition darstellt. * Die Partiton um x GB erweitern oder 100% eingeben * VM normal starten 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 == - alsa-base installieren - alsaconf ausfuehren Falls Probleme: etc/modules.conf ..use "update-modules force" to force (re)generation * Inhalt aus /etc/modules.conf u. aus /etc/modprobe.d/sound gelöscht. * "alsaconf" ausgefuehrt * "alsactl store" ausgefuehrt ..dann neustarten! * alsa force-reload ==== 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) 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: mtu 16436 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: eth0: 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: 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: mtu 16436 inet6 ::1/128 scope host valid_lft forever preferred_lft forever ip -6 addr show eth0 2: eth0: 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: 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 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 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 * -e erweiterte User Informationen * -p Programm welches Verbindung benötigt, wird gezeigt. * -a alle Server Verbindungen anzeigen(Dienste die nach aussen hin angeboten werden) * -u udp Verbindungen anzeigen * -n Namensauflösung aktivieren * -l Empfangsbereite Serversockets auflisten 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 addr Es geht auch mit dem ifconfig-Kommando, und bei einigen Netzwerkkarten funktioniert es nur im Promiscuous Mode richtig, also ifconfig promisc Anschließend: ifconfig hw ether 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: 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 mode ad-hoc key s: channel 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 mode 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] 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 [channel] Bind device release Release device show Show device connect [channel] Connect device listen [channel [cmd]] Listen watch [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: * bluemoon * hcitool ===== 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(**N**etwork**F**ile**S**ystem) 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 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 aus der Warteschlange postsuper -d 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. ===== 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