Dateiverwaltung
Berechtigungen
chmod
- Berechtigungen nur für Dateien bzw. Verzeichnisse ändern
find . -type f -exec chmod 444 {} \; # chmod auf Dateien find . -type d -exec chmod 555 {} \; # chmod auf Verzeichnisse
- Setzen des Set User Id Bit = SUID Bit
Vor die drei Ziffern wird eine 4 gestellt. Beispiel:
chmod 4755 filename
oder
chmod u+s /usr/sbin/exim4
ergibt
-rwsr-xr-x 1 root root 875104 Jan 2 2013 /usr/sbin/exim4
Das x beim Eigentümer wird durch s ersetzt. Diese Datei wird daraufhin immer unter der ID des Besitzers ausgeführt, egal von wem sie aufgerufen wurde.
- Rechte von Verzeichnissen
Betrachtet man ein Verzeichnis als Datei, dessen Inhalt eine Liste von Dateien ist, so erklärt sich die Wirkung der Zugriffsrechte von selbst.
- Ausführen heißt Öffnen des Verzeichnisses
- Schreiben heißt den Inhalt des Verzeichnisses verändern
- Lesen heißt in das Verzeichnis hineinschauen
Lesen ohne Ausführen ist also nicht möglich.
- Dateirechte, Benutzerrechte unter UNIX
Hervorragende Einführung Hier werden auch die Sonderrechte SUID, SGID erklärt.
http://www.linux-user.de/ausgabe/2003/12/066-acl/index.html
setuid
Durch das Setuid Bit wird eine ausführbare Datei mit den Rechten des Besitzers ausgeführt und nicht - wie sonst - mit den Rechten des aufrufenden Benutzers. Typischerweise gehört so eine Datei dem Administrator root.
Achtung: Das funktioniert angeblich nur mit Binärdateien, nicht mit einem Shellscript!
chmod +s Dateiname # oder chmod u+s Dateiname
Sticky Bit
Wird verwendet für das /tmp
Verzeichnis.
chmod +t /local/tmp
Anzeige der Berechtigungen
drwxrwxrwt 2 root root 4096 14. Feb 10:18 tmp
umask
Der Befehl ändert die Grundeinstellung der Zugriffsrechte bei neuen Dateien bzw. Verzeichnissen.
Standardwert für Dateien: 666
Standardwert für Verzeichnisse: 777
umask 0022
ergibt für Dateien: 666 - 022 = 644
ergibt für Verzeichnisse: 777 - 022 = 755
Man kann diesen Befehl in die Datei /etc/init.d/boot.local
eintragen, dann werden die Grundeinstellungen beim Systemstart gesetzt.
Anscheinend muss diese Einstellung für jeden Benutzer extra gesetzt werden. Also eintragen in ~/.bashrc
und ~/.profile
Datum vergleichen
$fileName=/tmp/backup_lock date_file=$(stat -c %Y $filename) date_jetzt=$(date +%s) date_diff=$(expr $date_jetzt - $date_file)
Fehlerhaft codierte Dateinamen
Zum Umbenennen muss eventuell das Tool convmv nachinstalliert werden.
zypper in convmv
Befehl zum rekursiven Umbenennen aller Dateien in einem Verzeichnis.
convmv -f iso-8859-1 -t utf-8 -r --notest *
cp
- Dateien kopieren
So kopiert man auch versteckte Dateien:
cp -dpR Quellverzeichnis/.[a-z,A-Z,0-9]* Zielverzeichnis
oder
cp -dpR Quellverzeichnis/.[^.]* Zielverzeichnis # .[^.] bedeutet: beliebiges Zeichen ausgenommen Punkt
- Eine Datei verteilen auf bestimmte Verzeichnisse
for dir in `ls joomla_* -d` ; do cp /www/joomla_fg/administrator/components/com_weblinks/config.xml $dir/administrator/components/com_weblinks done
ls
Dateien anzeigen. Es gibt unter Suse standardmäßig einen Aliasbefehl: dir
- Nur Verzeichnisse anzeigen
ls -ld * | grep "^d"
lsof
Offene Dateien werden aufgelistet
rsync
Leerzeichen im Zielverzeichnis
Wenn im Zielverzeichnis Leerzeichen enthalten sind, werden diese abgeschnitten. Das kann verhindert werden durch folgende Option
--protect-args
Mehrere Dateien/Verzeichnisse excluden
- Geschwungenen Klammern
rsync --exclude={/etc/fstab,/etc/default/grub,/boot/grub2/grub.cfg,/home,/root,/var,/srv}
- Exclude File
rsync --exclude-from=excluded.txt
- einzeln excluden
rsync --exclude=/etc/fstab --exclude=/etc/default/grub --exclude=/boot/grub2/grub.cfg ...
Sehr große Dateien
Rsync-Optionen
--inplace --partial
tar
- Ein Archiv erstellen ohne Ordnerpfade
pwd=$(pwd) cd /usr/local/bin/bak tar cfv /www/download/bak.tar * cd $pwd
- Dateien in einem Archiv anzeigen
tar -tvf bak.tar
- TAR Archiv entpacken
tar -xf bak.tar
- GZ Archiv entpacken
cd /var/log/apache2 gunzip ./access_log-20190617.xz tar -xf ./access_log-20190617
- XZ Archiv entpacken
XZ Archive sind verlustfrei gepackt.
cd /var/log/apache2 unxz ./access_log-20190617.xz tar -xf ./access_log-20190617