Dateiverwaltung

Aus Mediawiki Ferdinand Gruber
Zur Navigation springen Zur Suche springen

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