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. 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.
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!
/suchwort
und mit n
oder N
vorwärts/Rückwärts suchen.vi +170 /var/tmp/textdatei
wird erreicht, das der Cursor direkt an der Zeile 170 steht.#
und der Cursor springt zum nächsten gleichen Wort.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.
Weigert sich die Tastatur mit grafischen Konfigurations-Programmen auf „de“ eingestellt zu werden hilft die Bearbeitung der Datei:
/etc/default/keyboard ---> XKBLAYOUT="de"
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
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
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
adduser ronni backup adduser ronni gast adduser ronni probe vipw und vigr =zum sicheren anpassen von /etc/passwd und /etc/group
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/
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/
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
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.
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
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
Auto Konfiguration mit Ansible
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"
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'
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" }
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
https://www.voja.de/2017/03/25/icinga2-mit-ansible-deployen/
Icinga-Role Icinga2agent install
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"}]}
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.
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.
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 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.
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:
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.
Es soll alle 15 Minuten das Datum in eine Datei geschrieben werden:
Die Datei /etc/cron.d/datumlog
anlegen mit folgenden Inhalt:
### Alle 15 Minuten Datum in Datei schreiben ### */15 * * * * pi /usr/bin/date >> /home/pi/datum.log 2>&1
oder Alternativ als Nutzer der die Log-Datei schreiben soll mit dem Befehl crontab -e
die Zeile oben eintragen aber den Nutzernamen dann weg lassen.
Eine etwas komplexere Crontab welche alle 15 Minuten in der Zeit von 6 Uhr - 18 Uhr ausgeführt wird:
# Synchronisiert zwischen Master und Slave DHCP 0,15,30,45 6,7,8,9,10,11,12,13,14,15,16,17,18 * * 1-5 ansible /bin/bash /usr/local/sbin/dhcpdns_sync.sh > /var/adm/log/dhcpdns_sync.lg 2>&1
Im unteren Abschnitt ein weiteres Beispiel für Cron Einträge in die Datei /etc/cron.d/suse-repos
. Hier bedeutet die erste Zeile, jeden Dienstag (2=Dienstag) um 22:21 Uhr soll er das wget
Kommando ausführen. Der zweite Eintrag, jeden Montag (1=Montag) um 22:26 Uhr soll er das wget
Kommando ausführen. Usw. 6 steht für Samstag. Der vorletzte Eintrag sagt das 9:49 Uhr alle 3 Tage (*/3) der wget Befehl aufgerufen werden soll. Im letzten Eintrag sehen wir im Feld Day of the week eine 0, diese steht für Sonntag. Alle Einträge werden als Benutzer repo ausgeführt.
### oss ### 21 22 * * 2 repo wget --timeout=1200 --no-verbose -t6 --mirror -l2 -X /distribution/13.2/repo/oss/suse/i*86 -X /distribution/13.2/repo/oss/suse/setup -R "*.html" --no-host-directories -np http://download.opensuse.org/distribution/13.2/repo/oss/suse/ -P /srv/www/repo/ > /var/adm/log/repo-oss.log 2>&1 ### oss-update ### 26 22 * * 1 repo wget --timeout=1200 --no-verbose -t6 --mirror -l2 -X /update/13.2/i*86 -R "*.html" --no-host-directories -np http://download.opensuse.org/update/13.2/ -P /srv/www/repo/ > /var/adm/log/repo-oss-update.log 2>&1 ### non-oss ### 09 06 * * 6 repo wget --no-verbose -t6 --mirror -l2 -X /distribution/13.2/repo/non-oss/suse/i*86 -X /distribution/13.2/repo/non-oss/suse/setup -R "*.html" --no-host-directories -np http://download.opensuse.org/distribution/13.2/repo/non-oss/suse/ -P /srv/www/repo/ > /var/adm/log/repo-non-oss.log 2>&1 ### non-oss-update ### 49 09 */3 * * repo wget --no-verbose -t6 --mirror -l2 -X /update/13.2-non-oss/i*86 -R "*.html" --no-host-directories -np http://download.opensuse.org/update/13.2-non-oss/ -P /srv/www/repo/ > /var/adm/log/repo-non-oss-update.log 2>&1 ### php-applications-SLE_11_SP4 ### 2 22 * * 0 repo wget --no-verbose -t6 --mirror -l2 -X /pub/opensuse/repositories/server:/php:/applications/SLE_11_SP4/i*86 -R "*.html" --no-host-directories -np http://ftp.gwdg.de/pub/opensuse/repositories/server:/php:/applications/SLE_11_SP4/ -P /srv/www/repo/ > /var/adm/log/repo-php-app-SLE11.log 2>&1
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
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
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:/'
Job für die Zukunft festlegen, hier z.B. ein synchronisierungs-Kommando mit rsync
Nachts um 2 Uhr.
at 2:00 sshpass -p 'secure' /usr/bin/rsync -au -e ssh /prodata/db root@example.net:/prodata/ > /var/adm/log/transfer_INSP.log 2>&1 ^D (Ctrl+D)
Kontrolle mit
atq at -c <Jobnr>
Zum Jahreswechsel soll eine Datei /opt/jboss/temp/kaeltemittel.odt in das Verzeichnis /var/spool/stammdaten/ verschoben werden.
at now + 48hour mv /opt/jboss/temp/kaeltemittelkkn.csv /var/spool/stammdaten/ ^D (Ctrl+D)
Kontrolle mit
atq at -c <Jobnr>
man command =Hilfe über die Konsole zu Befehlen info command =Hilfe über die Konsole zu Befehlen apropos sens =Zeigt alle Befehle die "sens" im Wort und Beschreibung enthalten apropos gpi =Zeigt alle Befehle die "gpi" im Wort und Beschreibung enthalten hostnamectl =Infos über hostname, OS-Version, Maschine ID, Architektur und Kernel timedatectl =Infos über Datum, Uhrzeit Zeitzone und NTP localectl =Infos über den verwendeten Zeichensatz und Tastatur Layout export PATH=/usr/local/sbin:$PATH =PATH System-Variable bearbeiten und /usr/local/sbin hinzufügen gcc Quellcode.c -o fertig =Programm kompilieren und gleich den passenden Namen geben. ls -la --sort=size -r =Sortiert den Inhalt von Verz. nach der Größe. Mit -r wird die Sortierung umgedreht und die größten Dateien stehen unten in der Liste. du -sh /var/log/* =Zeigt die Größe der Dateien, ohne * Größe des Ordners selbst. lsof /dev/sda =Welche Programm greifen noch auf Gerät /dev/sda zu fuser -a -v -m /dev/sdf1 =Welche Programm greifen noch auf Partition /dev/sdf1 zu chown zatouser:zatogrg !(zato.conf) =Alle Besitzer und Gruppen im Verzeichnis, bis auf zato.conf, ändern. mail =Nachrichten abholen auf der Konsole und mit folgenden Befehlen emails senden: echo "Text" | mail -s "Betreff" main@adresse.tld mail -s "Betreff" ronald.hafer@meine.mail.de <<EOM mailtext EOM mail -s "Betreff" your@mail.com <<< "hier steht ein Test Text" Nachfolgend, Inhalt einer Text-Datei versenden: cat /path/to/file | mail -s "your subject" your@email.com
Erstellungs-Datum und Zeit von Dateien verändern mit touch –time CCYYMMDDhhmm
.
touch -t 201710261230 elements-violin.mp3
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 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
date -s "2008-05-25 00:33:00" =setzt Systemzeit auf angegebene Datum und Zeit /sbin/hwclock =Einstellungen zur Systemzeit/Hardware-Uhr tzselect =Zeitzone auswählen Einstellen dpkg-reconfigure tzdata =Zeitzone auswählen Einstellen rm /etc/adjtime =Diese Datei zu löschen kann evt. helfen wenn System und Hardware Uhr zu stark abweichen /etc/default/rcS Einstellungen betreffent UTC prüfen
su username =anderen User anmelden unlink /oradata2 =einen Link löschen, hier den Link/Verknüpfung /oradata2 entfernen watch ifconfig ls ps -A =überwacht die angegebenen Kommandos, aktualisiert alle 2s. dmesg =zeigt System Startprotokoll vmstat =einige kompakte Informationen über Speicher und CPU vmstat -2 =zeigt alle 2 Sekunden eine neue Zeile mit aktualisierten Infos
echo $((7*4)) =Rechnen direkt mit der Bash ohne Hilfsprogramm. expr 2 + 3 =rechnen auf der Shell: expr length ZEICHENKETTE =Länge der ZEICHENKETTE z.B. 200=3 aaaa=4 1=1 expr index ZEICHENKETTE I =gibt hier 3 zurück, Index in ZKETTE, wo eines der ZEICHEN auftritt, sonst 0 expr substr ZEICHENKETTE 8 13 =gibt hier KETTE zurück, Bereich von bis aus ZEICHENKETTE
Kernel Module suchen:
find /lib/modules/$(uname -r) -iname "*kvm*" -print
Suchen nach SUID/SGUID Dateien:
find / -type f -perm +6000 -exec ls -l {} \; find / -perm /4000
Suchen nach toten Links:
find -L . -type l
Modul-Datei *.ko aktivieren/laden:
insmod /lib/modules/$(uname -r)/kernel/net/ipv6/ipv6.ko
Es gibt insmod
um Module hinzuzufügen und rmmod
um Module zu entfernen Der modprobe
Befehl
vereinigt beide Befehle
modprobe --show-depends nvidia =zeigt Abhängigkeiten vom nvidia Modul modprobe -r modul =Hinzufügen, und entfernen mit -r Modulname lsmod =listet die geladenen Module auf modinfo usbhid =zeigt Informationen über das angegebene Modul depmod -a =überprüft alle vorhandenen Module und aktualisiert die Einträge udevinfo -ap /sys/PFAD-NAME =gibt alles SYSFS_attributes für den gewählten Hardware-Pfad aus
Kombination, zeigt direkt die Informationen für eine Gerätedatei an.
udevinfo -a -p $(udevinfo -q path -n /dev/Gerätedatei)
tail -n+3 =zeigt in einer Datei erst ab der 3. Zeile an tail -f /var/log/messages =überwachen des Systemlog tail -n 400 /var/log/auth.log =System Sicherheit bei Servern, Authentifizierungs log last =zeigt an wer sich zuletzt und wann und wie lange eingeloggt hat stat /etc/file.txt =Info über Datei: Inode, letzte Änderung/Zugriff/Modifiziert/Benutzer file /Desktop/e-Funktionen.svg =/Desktop/e-Funktionen.svg: SVG Scalable Vector Graphics image file gibt Infos zum Dateityp an /var/spool/cron/tabs/benutzer =User Crontab, nur auf den Benutzer bezogen /etc/cron.d/ =Systemweite Crontab, Benutzername mit angeben bei Befehlen crontab -u wwwrun -l =crontab vom Benutzer wwwrun anzeigen /usr/local/etc/rotatelogs/ =Verzeichnis für logrotate Konfiguration, die zu individuellen Zeiten ausgeführt werden sollen.
In /etc/crontab
kann das logrotate -f /usr/local/etc/rotatelogs/logkonfig
ausgeführt werden mit den gewünschten Zeiten. Z.B.:
50 5 * * * root /usr/sbin/logrotate -f /usr/local/etc/rotatelogs/elan-process >/dev/null 2>&1 55 5 * * * root /usr/sbin/logrotate -f /usr/local/etc/rotatelogs/apache2-vhosts >/dev/null 2>&1
grep -ri Linux /boot/grub/* =Durchsucht das Verz. /boot/grub/* rekursiv nach dem Wort "Linux" grep -B2 -A2 slp =grep zeigt mit -A2 die 2 darunter liegenden, mit -B2 die darüber liegenden Zeilen grep -C2 slp =Eine Kombination aus -B2 und -A2 grep -r Linux /boot/grub/* =Durchsucht das gesamte Verz. /boot/grub/* nach dem Wort "Linux" egrep 'EE|WW' /var/log/Xorg.0.log =sucht in Datei Xorg.0.log nach EE und WW und zeigt die Zeilen an dpkg -l | grep -e kde -e gnome =gleichzeitig nach gnome und kde in der Auflistung der installierten Programme suchen.
Suche nach einer IPv4-Adresse, die mit 192 beginnt:
egrep '192\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}' *
Auf grafischer Oberfläche Programme als root starten; KDE mit „kdesu“ und Gnome mit „gksu“ z.B.:
gksu wireshark
wird auch oft standardmäßig mit gksu -u root /usr/bin/wireshark
aufgerufen.
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
Mit sudo -l kann sich ein Nutzer anzeigen lassen welche Kommandos er mit sudo-Rechten ausführen darf
sudo -l =User tux may run the following commands on this host:
(ALL) ALL (root) NOPASSWD: /sbin/ifconfig (root) NOPASSWD: /usr/sbin/brctl (root) NOPASSWD: /usr/sbin/openvpn
Das bearbeiten von eigenen angelegten sudo-Dateien geschieht mit dem Kommando:
visudo -f /etc/sudoers.d/dhcpdnsadm
Es kann z. B. ein einziger Befehl für einen oder mehrere Benutzer freigeben werden. Um das Ausschalten bzw.
Rebooten /sbin/shutdown
für den Account gast freizuschalten, trage in /etc/sudoers
ein:
gast ALL = /sbin/shutdown
Auf ähnliche Weise räumt man einer ganzen Gruppe von Benutzern bestimmte Rechte ein. Dazu gebe zunächst eine durch Kommata getrennte Liste von Benutzernamen gefolgt von ALL ein, danach ein Gleichheitszeichen und als letztes das Kommando:
petronella,huhn ALL = /sbin/shutdown
Beispiele für Gruppe users
%users ALL=/sbin/mount /cdrom,/sbin/umount /cdrom %users localhost=/sbin/shutdown -h now
Benutzer icinga für zwei Plugins mit sudo Rechten freischalten:
icinga ALL = NOPASSWD: /usr/lib/nagios/plugins/check_disk, /usr/lib/nagios/plugins/check_tcp
chmod 4711 /usr/bin/programm =Setzt das setuid Bit
nano /etc/nanorc =Color Setup Syntax (s)diff datei1 datei2 =findet Unterschiede zwischen beiden Dateien und zeigt diese an. comm =compare two sorted files line by line ldd programmname =zeigt die vom Programm benötigten Biblioteken an.
vi /etc/ld.so.conf =Konfig Datei fuer die Biblioteks Pfade ldconfig =configure dynamic linker run time bindings, neue Konfig-Pfade einlesen ldconfig -p =print cache, zeigt bereits eingelsenen Pfade zu den Biblioteken
Strange library paths, are you sure those are in the standard library search paths? If not, try to add them to the LD_LIBRARY_PATH environment variable. Suchpfade für Biblioteken fest eingetragen in /etc/ld.so.conf
Dateien und Verz. suchen:
find . -iname *KDE* =sucht ab aktuellen Verzeichnis nach kde, ignoriert Groß/Kleinschreibung find / -xdev -iname *kde* =durchsucht keine anderen Partitionen, xdev muss vorne stehen find . -type f -mtime -1 =findet alle Dateien(-type f) keine Ordner die nicht älter als ein Tag sind find . -type f -mtime +3 ls = Alle Dateien im aktuellen Verz. finden die älter als 3 Tage sind und Auflisten mit allen Informationen find /usr/ -print0 | grep -FzZ "tabular/reports" =findet z.B. den Verz.-Baum /usr/tabular/reports find . -wholename "*benutser/groupxyz*" =findet z.B. den Verz.-Baum benutser/groupxyz
Dateien vom Typ jpg suchen die größer als 2MB sind
find /media/disk2 -type f -size +2M -iname "*.jpg"
Mehrere Dateinamen gleichzeitig suchen
find / \( -iname "*icinga*" -o -iname "*nagios*" \)
Mehrere file-Endungen gleichzeitig suchen +vorbereiten für Weiterverarbeitung
find Desktop/ -type f \( -name "*.pl" -o -name "*.py" \) -exec basename {} \; cp -v `find Desktop/Ablage/ -type f \( -name "*.pl" -o -name "*.py" -o -name "*.sh" \)` /home/tux/Downloads/
Nach Dateien nur im aktuellen Verzeichnis suchen (ohne Unterverzeichnisse) und hier nur Dateien auflisten welche keine Dateiendung haben( Also Dateien ohne Punkt im Namen).
find . -maxdepth 1 -type f ! -name "*.*"
whereis programname =Zeigt Pfad zum Programm oder Verknüpfung which programname updatedb =locate Datenbank aktualisieren locate dateiname =sucht die Datei und zeigt den Pfad an realpath [OPTION]... DATEI... =Gibt den aufgelösten absoluten Dateinamen aus
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
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
Programm als user tux mit höherer CPU Priorität ausführen: Programm normal als user tux starten und nun als root: renice -15 -p <PID>
iglu:/home/tux# renice -19 -p 7181 7181: old priority 0, new priority -19
Befehl top interaktiv nutzen um bestimmte Spalten zu sortieren: top starten und Umschalt + F drücken, anschließend den Buchstaben für die zu sortierende Spalte wählen. Oder einfacher, groß M für Speicher- verbrauch, groß T für CPU-Time Sortierung.
dstat =versatile tool for generating system resource statistics top -b -n1 =Batch-Modus gibt top auf der Konsole aus ps -A r =alle aktiven Prozesse anzeigen taskset =set or get the affinity of a process chrt =manipulate real-time attributes of a process ionice =get/set program io scheduling class and priority pmap =report memory map of a process nice renice sar -u 1 3 =Misst CPU Nutzung über 3 Intervalle
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.
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
Distributions übergreifender Appstore.
Um Flatpak ohne Adminrechte zu nutzen, müssen Sie Flathub (oder eine andere Quelle) separat einrichten, diesmal als User-Installation: flatpak –user remote-add
…. Bis auf die Option –user
zwischen flatpak und dem Subkommando (remote-add, install, list) sind die Befehle identisch.
flatpak --user install wesnoth
Software mit Flatpak deinstallieren. Geben Sie dazu flatpak uninstall gefolgt von der Anwendungskennung oder einem Namensbestandteil ein. Mit letzterem zeigt Flatpak Ihnen eine Liste von Anwendungen und Runtimes, die mit dem Suchwort übereinstimmen. Per Ziffer wählen Sie aus, was deinstalliert werden soll. Die persönlichen App-Daten entfernt Flatpak nicht automatisch. Wollen Sie diese gleich mit loswerden, ergänzen Sie die Option –delete-data
.
Was Flatpak ebenfalls standardmäßig nicht entfernt, sind überflüssige Runtimes. Es könnte ja sein, dass Sie später eine andere App installieren wollen, die die Runtime braucht und Speicherplatz ist in der Regel üppig vorhanden, während das Warten auf einen Download lästig ist. Um die ungenutzten Runtimes rauszuwerfen, geben Sie flatpak uninstall –unused
ein.
zypper refresh Repository Refresh zypper up System-Update zypper dup komplettes Systemupdate auf neue Version zypper se ronnisdnsadm suchen nach Pakete mit Namen "ronnisdnsadm" zypper se -t patch kopete Suchen nach einen Patch für das Programm Kopete zypper se -s kopete Zeigt auch das Repo zum Paket an, mit -i nur Installierte zypper se -r, --repo <Alias|#|URI> Nur Suche in dem angegebenen Repository. zypper ve Verify integrity of package dependencies. zypper -r sa https://IP ZLM zypper lr -u Listet die Repositorys mit genauer URL auf zypper modifyrepo --priority 90 plasma-active erhöht die Priorität (niedrige Werte bedeuten höhere Priorität) zypper mr -r firefox_up Enable auto-refresh of the repository firefox_up zypper mr -e SLE11-WebYaST-SP1-Updates Aktiviert das Repository "SLE11-WebYaST-SP1-Updates" zypper rr <alias|#|URI> Entfernt ein Repository
Adding repository Spring-Lobby:
zypper ar --refresh http://download.opensuse.org/repositories/home:/accAgon/openSUSE_11.3 Spring-Lobby
Folgender Befehl nutzt für die Installation des Pakets „rtl8192su-firmware“ ein zusätzliches Repository, welches nicht auf dem System eingetragen ist.
zypper -p http://download.opensuse.org/repositories/driver:/wireless/openSUSE_11.3/ in rtl8192su-firmware
Ein lokales Verzeichnis als Repository im System einbinden. Hier wurde zuvor das .iso Installations Medium in einem Verzeichnis als loop Device gemountet, dieses gemountete Device wird mit den folgenden Befehl nun zu den verfügbaren Repos hinzugefügt.
repo1:~ # zypper addrepo --check --refresh --name 'openSUSE-Leap-42.2-DVD' /data/install/openSUSE-Leap-42.2/sp2/cd1 openSUSE-Leap-42.2-DVDAdding repository 'openSUSE-Leap-42.2-DVD' ...............................................................................................................................................[done] Repository 'openSUSE-Leap-42.2-DVD' successfully added Enabled : Yes Autorefresh : Yes GPG Check : Yes URI : dir:///data/install/openSUSE-Leap-42.2/sp2/cd1
Hat man viele Repositories eingebunden wo auch einige Pakete in beiden Repos vorkommen, dann kann es sein das er die Version des Original Repos einfach beibehält. Möchte man wirklich von alles Repos die aktuellste Version haben, so fügt man beim System-Update ein –allow-vendor-change
mit an.
zypper up --allow-vendor-change
Ein Upgrade auf die nächste höhere Version z.B. von OpenSuse 15.1 auf 15.2 wird mit zypper dup
durchgeführt. Vorher müssen aber zunächst alle alten Versions Nummern in den Repository Konfig-Dateien von openSuse 15.1 auf 15.2 mit einem Kommando abgeändert werden.
sed -i 's/15\.1/leap\/15\.2/g' /etc/zypp/repos.d/*
Update von 15.4 auf 15.5, testen! aus computerbase.de/forum
sudo zypper --releasever=15.5 dup
rpm -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
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-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
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/
Das Softwareverwaltungs Programm apt
wird von Debian basierten Linux Distributionen verwendet und ist
weit verbreitet.
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
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 mehreren gleichnamigen Paketen Pakete entfernen welche mit kde-telepathy- anfangen:
aptitude purge kde-telepathy-?
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
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
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.
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 -
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.
aus einem rpm ein deb zu erstellen.
alien paket.rpm
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
(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 ü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
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.
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
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
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
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
cat /proc/meminfo free -lm
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
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
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.
mknod -m 644 /var/lib/named/dev/random c 1 3
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
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
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
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
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
1. apt install printconf —> 2. Sicherheitshalber sollten die Pakete foo2zjs und pnm2ppa auch installiert werden. 3. als root in Konsole printconf (informationen beachten) 4. http://localhost:631/ (genaue konfiguration des Druckers)
localhost:631 = html Seite mit Einstellungs Möglichkeiten mit /help = Hilfe
lpstat -t =Zeigt die Drucker Zustände lpstat -h <hostname> =Hostname angeben, zeigt Aufträge für Host an
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.
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.
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).
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.
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
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.
Zur Anzeige aller Variablen dient der Befehl env
.
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}"
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
Das Datum am besten zuvor im iso-8601 Format umwandeln
date --iso-8601
Dann das Datum berechnen in dem mit dem Schalter %s das angegebene Datum in die Sekunden seit 1970(Unix Startzeit) umgerechnet wird.
date_diff=$(( ($(date -d $DATUMSVARIABLE +%s) - $(date +%s)) / (60*60*24) ))
#!/bin/bash echo erzeugt eine Ausgabe, Im Grunde kann nun auch jeder beliebige Befehl \ den wir von der Bash Kommandozeile her kennen hier eingegeben werden und wird \ ausgeführt beim starten des Shell-Skripts. echo abspeichern ( am besten in /usr/local/bin ) und mittels chmod 755 <name> ausführbar machen. \ oder ausführbar machen = chmod +x script.sh echo -e "\a" erzeugt einen Piep-Ton. sleep 5 echo sleep <Anzahl Sekunden> erzeugt Pause. echo Doppelt vorkommende Programmblöcke in Funktionen auslagern. echo Variablen Zuordnung immer ohne Leerzeichen geht einfach mit: ZAHL=20 BUCHSTABEN=abc echo Ausgabe der Variablen erfolgt mit einem $ vor der Variable: echo $ZAHL echo $BUCHSTABEN echo Am Ende empfiehlt es sich 1x Enter zu drücken für eine "new line"
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
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 {}
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.
Die Betriebssystem Installation
Im Grub Menü kann mit der Taste c in den Kommando Modus geschalten werden, um somit Boot Parameter anzupassen: find /boot/vmlinuz =sucht vom Grub Menü aus nach Partition auf der vmlinuz ist grub-install hd0 =hd0 grub HD Bezeichnung
Bootloader wieder herstellen, z.B. nach der Installation von MS Windows. Rechner mit Linux Live CD
starten. Die Linux-System Partition mounten mount /dev/sda4 /media/sda4
anschließend das /dev
Verzeichnis in die System Partition mounten mount -o bind /dev /media/sda4/dev
(sda4 kann auch anders heißen, je nachdem wo das Linux System installiert ist.).
Dann die System Partition betreten chroot /media/sda4
und hier die beiden Befehle ausführen:
grub-install /dev/sda update-grub update-bootloader (Suse)
evtl. hilfreich von Live CD starten, dort in der Konsole grub
eingeben. In der nun geöffneten
Grub-Konsole: find /boot/grub/stage1
–> liefert z.B. (hd0,5) dann eingeben:
root (hd0,5) setup (hd0)
alt
In der Datei /boot/grub/menu.lst
kann man hinter der kernel Zeile
des Betriebsystems vga=791 = 1024×768 oder vga=794 = 1024 x 1280
für die Bildschirmauflöung einstellen, die wärend des bootens oder auf der
System Konsole angezeigt wird.
neu
Anpassungen grub2 werde nicht direkt an /boot/grub/grub.cfg
vorgenommen, sondern durch das Anpassen
der Datei /etc/default/grub
. Anschließend wird update-grub
ausgeführt.
GRUB Bootoptionen autoyast=INSTALL/http://172.16.19.73/INSTALL/servername der installiert wird
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.
Einzelne Partition auf Stick erstellen:
mkfs.vfat -n MULTIBOOT /dev/sdx1 mount /dev/sdx1 /mnt/ grub2-install --removable --boot-directory=/mnt/boot/ /dev/sdx
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
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.
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.
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/
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
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
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
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.
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
about:config about:plugins about:support
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
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:
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
/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
/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.
mkfs.ext4 /dev/sdk1 =ein neues ext4 Dateisystem anlegen auf der Partition /dev/sdk1 fsck =checkt Dateisystem nach Fehlern! fsck.ext3 =checkt ext2/ext3 Dateisysteme nach Fehlern und behebt diese. e2fsck =checkt ext2/ext3 Dateisysteme nach Fehlern und behebt diese.
blkid /dev/sda3 --> /dev/sda3: LABEL="SicherA" UUID="265f37e3-be53-4d7b-84ff-b412674d385f" TYPE="ext3"
Viele Anzeige Möglichkeiten mit lsblk
. Hier lassen sich die gesuchten Informationen mit –output
filtern und nach Wunsch sortieren.
lsblk --output HCTL,PATH,MOUNTPOINT
Auch das Partitionslabel anzeigen welches ich immer bei der Erstellung einer neuen Partiton mit parted
angebe. Nicht verwechseln mit dem LABEL, welches ich nicht gesetzt habe und daher die Spalte leer bleibt.
lsblk --output HCTL,PATH,MOUNTPOINT,LABEL,UUID,PARTLABEL
Oder nur speziel Informationen bezüglich scsi komptibler Geräte anzeigen, ähnlich dem lsscsi
Kommando.
lsblk --scsi NAME HCTL TYPE VENDOR MODEL REV SERIAL TRAN sda 0:0:0:0 disk ATA WL160GSA872B 3E01 WOCL25001237066 sata sr0 3:0:0:0 rom TSSTcorp TSSTcorpDVD-ROM SH-D163C SB02 TSSTcorpDVD-ROM_SH-D163C sata
Setze maximale Mount-Anzahl auf 60
tune2fs -c 60 /dev/sda6
Ausführliche Auflistung der angegebenen Partition.
tune2fs -l /dev/sdb3
Set the volume label of the filesystem.
tune2fs -L volume-label /dev/sdb3
Set the time the filesystem was last checked using e2fsck The keyword now is also accepted, in which case the last checked time will be set to the current time.
tune2fs -T time-last-checked
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.
Hier einige Beispiele, wenn eine Partition auf einer Festplatte angelegt werden soll und diese 100% der Kapazität nutzen soll.
Das Programm parted
mit Angabe der entsprechenden Festplatte starten:
parted /dev/sdf
Auf der parted Kommando-Shell nun der Einzeiler:
(parted) mklabel gpt Yes mkpart TOSHIBA320G ext2 1 100%
Auch direkt von der Bash lassen sich alle Kommandos aus der parted
Kommando-Shell als Parameter verwenden.
Überprüfen einer zuvor angelegten Partition auf der Festplatte /dev/sdf
. Wir überprüfen mit print
parted /dev/sdf print
Model: TOSHIBA MK3263GSX (scsi) Disk /dev/sdf: 320GB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1049kB 320GB 320GB ntfs TOSHIBA320G
Weitere Beispiele direkt von der Bash/Kommandozeile, falls Partition Table: unknown: Option -a macht ein alignment der Partition
parted -a optimal /dev/sdb mklabel gpt mkpart var_lib_mysql 0% 100%
Die Angabe vom Dateisystem ist überflüssig: Die Angaben von der genauen Partition /dev/sdb1 bzw. /dev/sdb2 noch austesten:
parted /dev/sdb1 mklabel gpt mkpart MONITORING 1MiB 429GB parted /dev/sdb2 mklabel gpt mkpart GRAFANA 1 429GB
Hier muss man auch beachten ob nicht schon bereits eine Partition Table existiert gpt/msdos. Falls schon eine Partitionstabelle existiert, dann verkürzt sich der Kommando wie folgt:
parted -a optimal /dev/sdb mkpart backup_hd 0% 100%
parted -a optimal /dev/sdk mkpart primary 0% 100%
Im folgenden das schrittweise Anlegen einer 300GB Partition mit parted
auf die Festplatte /dev/sdb
: Dieses schrittweise Vorgehen hilft auch wenn man vorher einen Fehler gemacht hat, z.B. bei Start/Anfang 0 eingegeben hat statt 1
parted /dev/sdb
(parted) mklabel oder mktable New disk label type? msdos Warning: The existing disk label on /dev/sda will be destroyed and all data on this disk will be lost. Do you want to continue? Yes/No? Yes (parted) mkpart primary oder: New disk label type? gpt (parted) mklabel SUSERepo File system type? [ext2]? xfs Start? Start? 1 End? 300G (parted)
weiteres Beispiel:
(parted) mkpart Partition name? []? SUSERepo File system type? [ext2]? xfs Start? 1 End? 322GB (parted) (parted) print Model: VMware Virtual disk (scsi) Disk /dev/sdb: 322GB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1049kB 322GB 322GB xfs SUSERepo (parted) quit
Um den Namen einer Partition mit parted
zu ändern, kannst du den Befehl name verwenden. Hier ist, wie du den Namen der Partition /oraexp in oraexp ändern kannst:
parted /dev/sdd name <partitionnummer> oraexp
Ersetze <partitionnummer> durch die Nummer der Partition, die du umbenennen möchtest. Du kannst die Partitionnummer mit dem Befehl print anzeigen:
parted /dev/sdd print
Dies wird eine Liste der Partitionen auf der Festplatte /dev/sdd
anzeigen. Finde die Nummer der Partition /oraexp in der Liste und verwende dann diese Nummer im name-Befehl.
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
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
.
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 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.
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
.
parted
starten mit den Aufruf parted /dev/xpy
parted
mit print die verfügbaren Partitionen und verfügbare Diskgröße anzeigen lassenIst das richtige System wieder gestartet, wird noch der folgende Kommando aufgerufen
btrfs filesystem resize max /
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.
(parted) set 1 boot on
ufs2 Dateisystem mounten:
modprobe ufs mount -t ufs -ro ufstype=ufs2 /dev/sda1 /media/sda1
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
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.
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
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
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
Ein komprimiertes Festplatten Abbild auf einem Datenträger schreiben:
xzcat openSUSE15-ARM-KDE-raspberrypi3.aarch64.xz | dd bs=4M of=/dev/sda iflag=fullblock oflag=direct; sync
unzip -p 2018-06-27-raspbian-stretch-lite.zip | sudo bs=4M dd of=/dev/sda iflag=fullblock oflag=direct; sync
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
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
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
Falls Probleme: etc/modules.conf ..use „update-modules force“ to force (re)generation
glxinfo | grep rendering glxgears fgl_glxgears
Ein ping an localhost
ping6 -c3 ::1
Ein ping an ff02::1 ip6-allnodes multicast-Addresse, zum herausfinden wer noch im Netzwerk ist. Es wird die Link-Local Adresse zurück gegeben.
ping6 -I eth0 -c2 ff02::1 PING ff02::1(ff02::1) from fe80::e2cb:4eff:fe35:b162 eth0: 56 data bytes 64 bytes from fe80::e2cb:4eff:fe35:b162: icmp_seq=1 ttl=64 time=0.058 ms 64 bytes from fe80::213:d3ff:fef0:ec6c: icmp_seq=1 ttl=64 time=7.79 ms (DUP!) 64 bytes from fe80::e2cb:4eff:fe35:b162: icmp_seq=2 ttl=64 time=0.095 ms
Ein ping an ff02::fb MDNS Standard query ping6 -I eth0 -c2 ff02::fb PING ff02::fb(ff02::fb) from fe80::e2cb:4eff:fe35:b162 eth0: 56 data bytes 64 bytes from fe80::e2cb:4eff:fe35:b162: icmp_seq=1 ttl=64 time=0.051 ms 64 bytes from fe80::e2cb:4eff:fe35:b162: icmp_seq=2 ttl=64 time=0.061 ms
Eine IPv6 Adresse(site local address)=ist veraltete!!! an eth0 vergeben:
ip -6 addr add fec0::1/64 dev eth0
cat /proc/net/if_inet6 00000000000000000000000000000001 01 80 10 80 lo fe8000000000000002044bfffe808003 02 40 20 80 eth1
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
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
default route löschen/hinzufügen: route del -net default netmask 0.0.0.0 gw 192.168.3.1 dev eth0 route add -net default netmask 0.0.0.0 gw 192.168.3.1 dev eth0 route del default gw 192.168.1.1 route add default gw 192.168.1.1
link-lokal Route löschen
route del -net link-local netmask 255.255.0.0 dev eth0
wobei i.d.R. dev ethx auch weggelassen werden kann:
ip route del default via 192.168.1.1 dev eth0 ip route add default via 192.168.1.1 dev eth0
route löschen/hinzufügen über einen Gateway:
route del -net 192.168.3.0 netmask 255.255.255.0 gw 192.168.0.229 dev eth0 ip route del 192.168.3.0/24 via 192.168.0.229 dev eth0 ip route add 192.168.3.0/24 via 192.168.0.229
Es muss dann die Datei: /etc/network/interfaces
editiert werden, dort einfach die IPv6 hinzufügen:
iface eth0 inet6 static address 2001:41D0:1:218a::1 netmask 64
Für jede zusätzliche v6 IP-Adresse kann man folgendes am Ende der Datei hinzufügen:
post-up /sbin/ifconfig eth0 inet6 add 2001:41D0:1:218a::2/64 pre-down /sbin/ifconfig eth0 inet6 del 2001:41D0:1:218a::2/64
Und für die nächste dann:
post-up /sbin/ifconfig eth0 inet6 add 2001:41D0:1:218a::4/64 pre-down /sbin/ifconfig eth0 inet6 del 2001:41D0:1:218a::4/64
Kommando ip link
zeigt die verfügbaren Netzwerk Schnittstellen
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether e0:cb:4e:35:b1:62 brd ff:ff:ff:ff:ff:ff 3: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc mq state DOWN qlen 1000 link/ether 1c:4b:d6:56:83:4a brd ff:ff:ff:ff:ff:ff
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]
welche aktiven Dienste bieten IPv6 Unterstützung? (zeigt auch IPv4 Dienste mit an)
lsof -i -P -n|egrep -i "tcp|udp"
zeigt nur IPv6 Dienste an
lsof -i6 -n|egrep -i "tcp|udp"
welcher Dienst lauscht an Port 25
lsof -i :25
ip -6 addr show lo 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 inet6 ::1/128 scope host valid_lft forever preferred_lft forever
ip -6 addr show eth0 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000 inet6 fec0::1/64 scope site valid_lft forever preferred_lft forever inet6 fe80::204:4bff:fe80:8003/64 scope link valid_lft forever preferred_lft forever
ip -6 addr show vmnet8 4: vmnet8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000 inet6 fe80::250:56ff:fec0:8/64 scope link valid_lft forever preferred_lft forever
Gültigkeitsbereich:Standort bei fec0 Gültigkeitsbereich:Global bei fc80 und weitere
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
oder:
nmap -sP 192.168.0.1-100
oder:
fping -g 172.16.19.0 172.16.19.255
Operating System fingerprinting and port scanning:
nmap -P0 -O <IP address> Starting Nmap 4.20 ( http://insecure.org ) at 2007-01-08 11:05 CET Interesting ports on 192.168.2.1: Not shown: 1693 closed ports PORT STATE SERVICE 22/tcp open ssh 23/tcp open telnet 53/tcp open domain 80/tcp open http MAC Address: 00:13:xx:xx:xx:xx (Cisco-Linksys) Device type: broadband router Running: Linksys embedded OS details: Linksys WRT54GS v4 running OpenWrt w/Linux kernel 2.4.30 Network Distance: 1 hop
Using the same tool, you can also do port scanning and service version discovery. For instance, the following command will report which IP-based services are running on the device, and which version of the service is being used:
nmap -P0 -sV <IP address> Starting Nmap 4.20 ( http://insecure.org ) at 2007-01-08 11:06 CET Interesting ports on 192.168.2.1: Not shown: 1693 closed ports PORT STATE SERVICE VERSION 22/tcp open ssh Dropbear sshd 0.48 (protocol 2.0) 23/tcp open telnet Busybox telnetd 53/tcp open domain ISC Bind dnsmasq-2.35 80/tcp open http OpenWrt BusyBox httpd MAC Address: 00:13:xx:xx:xx:xx (Cisco-Linksys) Service Info: Device: WAP
The web server version, if identified, can be determining in knowing the Operating System. For instance, the BOA web server is typical from devices running an open-source Unix or Unix-like.
nmap --top-ports 5 194.94.81.54
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
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)
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
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
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.
einfach Informationen über aktuelle tcp Verbindungen:
socklist - Listet die geöffneten sockets
ss - socket statistics
ss
ist vergleichbar mit netstat
Oft wird ss
mit den folgenden Optionen verwendet -tar, t = TCP, a = Alle Socket anzeigen und -r löst Hostnamen auf.
ss -tar
Möchte man alle Verbindungen zu einem bestimmten Rechner mit ss
im Auge behalten, so verwendet man die
dst oder src Option:
watch ss dst 11.14.98.43 ss src 192.168.100.2
Die gleichen Optionen gehen auch für Port Nummern oder Port Namen z.B. ssh:
ss src :56750
Hier werden alle lauschenden https Ports aufgelistet:
ss -l src :https
Und sogar eine Kombination ist möglich:
ss -a dst :5228 or src :mysql
Weiter geht es mit netstat
Anzeigen aller tcp-Verbindungen ohne lauschende TCP-Ports
netstat -t
Sollte immer ausreichen:
netstat -tau
iglu:/home/harry# arp -n Address HWtype HWaddress Flags Mask Iface 192.168.2.1 ether 00:1a:2a:24:28:68 C eth0 iglu:/home/harry# route -n Kernel-IP-Routentabelle Ziel Router Genmask Flags Metric Ref Use Iface 192.168.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 0.0.0.0 192.168.2.1 0.0.0.0 UG 0 0 0 eth0
Derzeit sehr übersichtlich
lsof -i -n
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
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.
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
Vorausgesetzt, alle MAC-Adr. sind in einer Datei, eine MAC-pro-Linie.
sed -i 's/../&:/g;s/:$//' macadressen.txt
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
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
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.
ip link set dev <Interface> addr <MAC-Adresse>
Es geht auch mit dem ifconfig-Kommando, und bei einigen Netzwerkkarten funktioniert es nur im Promiscuous Mode richtig, also
ifconfig <Interface> promisc
Anschließend:
ifconfig <Interface> hw ether <MAC-Adresse>
Beispiel für Änderung an der WLAN-Karte:
ifconfig wlan0 down ip addr ip link set dev wlan0 addr 1c:4b:d6:56:bb:aa ifconfig wlan0 up ifconfig
temporäre Einstellung
brctl addbr bridge ifconfig bridge up
Funktion überprüfen:
iwconfig iwlist scan iwspy iwpriv iwgetid iwevent
gegebenenfalls W-Lan Karte einschalten:
ifconfig wlan0 up
besser/aktueller:
ip link set wlan0 up
Manchmal ist es nötig die WLAN Karte freizuschalten, da diese durch einen Software Schalter gesperrt sein kann.
rfkill --help Usage: rfkill [options] command Options: --version show version (0.4) Commands: help event list [IDENTIFIER] block IDENTIFIER unblock IDENTIFIER where IDENTIFIER is the index no. of an rfkill switch or one of: <idx> all wifi wlan bluetooth uwb ultrawideband wimax wwan gps fm
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 }
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" }
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
iwconfig <ETHX> mode ad-hoc key s:<DEINSCHLÜSSEL> channel <EINCHANNELDENDUMAGST>
Auf beiden Maschinen iwconfig
ausführen, dann per ip
Kommadno die IP setzen. Es kann Probleme
mit ad-hoc Verbindungen geben.
Dann kann man eine NIC in den master und den anderen in den managed mode setzen
(vorausgesetzt eine der beiden karten kann master-mode)
iwconfig wlan0 ESSID home # SSID setzen iwconfig wlan0 mode managed # Auf Infrastructure Mode setzen iwconfig wlan0 rate 54M # Übertragung einstellen iwconfig wlan0 key s:dein Key iwconfig wlan0 key s:0178-6101-286
Wer die IP-Adresse der WLAN-Karte per DHCP beziehen möchte, der kann sich zusätzlich noch dhcpcd installieren.
dhcpcd wlan0
bzw.
dhclient
WLAN Netzwerke in Reichweite scannen
iwlist scan
The Wireless interface can be set to one of the following different modes which impacts how the device operates:
managed - Node is a client connecting to an Access Point master - Node acts as an Acces point secondary - Node acts as a Secondary to a master Access point ad-hoc - Operates in a One to One Ad-hoc connection to another Wireless device monitor - Doesn’t connect to any Wireless network but sits and listens on all the packets on a frequency repeater - Forwards packets between wireless nodes
The mode can be set as follows:
opensuse11:~ # iwconfig <interface> mode <managed|master|secondary|ad-hoc|monitor|repeater|auto>
tc - traffic controll
Mit dem Kommando wpa_cli
lassen sich Informationen sowie Einstellungen an der WLAN-Karte vornehmen.
wpa_cli status
Konsolen Programm rfcomm
für Bluetooth Konfiguration
RFCOMM configuration utility ver 5.23 Usage: rfcomm [options] <command> <dev> Options: -i, --device [hciX|bdaddr] Local HCI device or BD Address -h, --help Display help -r, --raw Switch TTY into raw mode -A, --auth Enable authentication -E, --encrypt Enable encryption -S, --secure Secure connection -M, --master Become the master of a piconet -L, --linger [seconds] Set linger timeout -a Show all devices (default) Commands: bind <dev> <bdaddr> [channel] Bind device release <dev> Release device show <dev> Show device connect <dev> <bdaddr> [channel] Connect device listen <dev> [channel [cmd]] Listen watch <dev> [channel [cmd]] Watch
Neueres Tool ist bluetoothctl
ermöglicht das Anzeigen von Informationen über den Bluetooth Controllers und das Auflisten der Verbundenen oder sich in Reichweite befindlichen Bluetooths Geräten.
Neben bluetoothctl sind aktuell in Debian Bookworm auch noch diese Tools vorhanden:
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 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
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.
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.
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
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/
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
File-Server NFS(NetworkFileSystem) ermöglicht eine performante Bereitstellung von Daten im Netzwerk.
Auf dem File-Server das Paket nfs-kernel-server
installieren. Anschließend die Datei /etc/exports
wie folgt anpassen:
/media/massstorage/NFSpublic/ *(rw,async,no_subtree_check)
Die obige Zeile erlaubt allen entfernten Rechnern den Zugriff auf /media/massstorage/NFSpublic/
, erkennbar
an den „*“ vor den Netzwerkfreigabe Optionen. Soll nur den Rechnern hans und wurst Zugriff auf ein weiteres
Verzeichnis, z.B. /media/massstorage/NFSprivat
möglich sein, dann muss jeweils mit einem Leerzeichen getrennt
der Rechnername vor den Netzwerkfreigabe Optionen gesetzt sein.
/media/massstorage/NFSpublic/ *(rw,async,no_subtree_check) /media/massstorage/NFSprivat hans(rw,async,no_subtree_check) wurst(rw,async,no_subtree_check)
Hat ein Rechner(hans) zwei IP-Adressen, z.B. eth0 und wlan0, dann kann man jede IP-Adresse als einen eigenständigen Host betrachten und sollte auch die IP-Adressen statt den Hostnamen angeben.
/media/massstorage/NFSpublic/ *(rw,async,no_subtree_check) /media/massstorage/NFSprivat 192.168.178.48(rw,async,no_subtree_check) wurst(rw,async,no_subtree_check) /media/massstorage/NFSprivat 192.168.178.49(rw,async,no_subtree_check)
Damit der Server die Änderungen bei der Ersteinrichtung übernimmt, muss der NFS-Server zunächst neu gestartet werden:
systemctl restart nfs-kernel-server
Soll die Datei später nur erweitert werden sollte es schon reichen die NFS-Daten wie folgt neu einzulesen:
exportfs -a -r
Auf dem Server lassen sich die exportierten Verzeichnisse mit allen Optionen auflisten wie sie an die Clients übergeben werden:
showmount --exports
oder
exportfs -v
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
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 / 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
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.
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
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)"
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)
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.
wget -r -l1 -nH -np --accept=jpg,gif $URL
Nur die Bilder laden, dann noch –accept dazunehmen.
wget -np -m
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"
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
Zeigt eine vollständige Übersicht aller Emails in den Warteschlangen
postqueue -p mailq
Alle Emails in der deferred-Queue werden sofort wieder zur Auslieferung gebracht
postqueue -f
Einzelne E-Mail ausliefern
postqueue -i <QUEUE-ID>
Um alle Nachrichten aus der Mailqueu erneut zur Auslieferung zu bringen, erreichen wir durch:
postsuper -r ALL
Löschen der eMail mit der <QUEUE-ID> aus der Warteschlange
postsuper -d <QUEUE-ID>
Alle Emails in der Queue löschen
postsuper -d ALL
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
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
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!
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
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
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
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
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.
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
Den Zone-File Transfer auf Slave-DNS beschleunigen:
/usr/sbin/rndc reload intranet.rodgau.de
nameserver 193.174.75.154 nameserver 193.174.75.126 nameserver 4.2.2.1
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
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
@ 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.
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
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.
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/
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
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.
Als root kann man für eine oder auch mehrere neue zu rotierende Log-Datei eine neue Konfigurationsdatei unter /etc/logrotate.d/
anlegen, nennen wir sie z.B. apache-logs. In dieser Datei kann man nun die Konfiguration für eine oder aber auch mehrere Dateien vornehmen:
/var/log/apache2/meinweb1-access.log { size=100M rotate 52 compress delaycompress missingok notifempty create 640 root root maxage 365 } /var/log/apache2/meinweb1-error.log { size=100M rotate 52 compress delaycompress missingok notifempty create 640 root root maxage 365 }
Hier die Erklärung der einzelnen Parameter:
Sie können die Konfiguration testen mit:
logrotate -d /etc/logrotate.d/apache-wpad
Um die Konfiguration sofort anzuwenden:
logrotate -f /etc/logrotate.d/apache-wpad
Falls Nutzer, ohne root-Berechtigungen, ihre eigenen Log-Dateien mit logrotate steuern sollen kann man ein eigenes Verzeichnis für die Logrotate Konfig erstellen. Z.B. /usr/local/etc/rotatelogs/
Verzeichnis für logrotate Konfiguration, die zu individuellen Zeiten ausgeführt werden.
Der Nutzer kann sich mit crontab -e
seine eigenen Zeiten einrichten ab wann die Logs zu rotieren sind. Oder als Systemweite Einstellung in /etc/cron.d/logging
. Die Crontab könnte wie folgt aussehen:
50 5 * * * root /usr/sbin/logrotate -f /usr/local/etc/rotatelogs/jboss-process >/dev/null 2>&1 55 5 * * * root /usr/sbin/logrotate -f /usr/local/etc/rotatelogs/apache2-vhosts >/dev/null 2>&1
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
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
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
tar -tf archiv.tar.gz
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.
zip -9e archiv2.zip datei1.pdf datei2.jpg