====== Links ====== Zur Unterscheidung zu [[symbolische Links|symbolischen Links]] werden die gewöhnlichen Links manchmal auch Hard Links genannt. ===== einfache Beispiele ===== cp /etc/passwd . ls -li passwd* ln passwd passwd-hardlink ls -li passwd* umbenennen, verschieben, editieren, löschen (Ursprungdatei), ... ausprobieren ls -li passwd* cp -l passwd passwd-hardlink-cp ls -li passwd* ===== Wo befinden sich auf meinem System Hardlinks? ==== find / -xdev -type f -links +1 -ls find / -xdev -type f -links +1 -printf '%h\n' | uniq -c ===== Datei umbenennen ohne Ausfallzeit ===== cd /etc/postfix/maps ln virtual_alias_maps.txt.db virtual_mailbox_maps.txt.db postconf -e 'virtual_mailbox_maps = hash:/etc/postfix/maps/virtual_mailbox_maps.txt' rm virtual_alias_maps.txt.db ===== Backup ===== (( Das Beispiel hier ist nicht sehr praxisnah. Eine bessere Variante beschreibe ich unter [[admin_grundlagen:rsync|rsync]] )) (( Todo: das selbe mit ''cp --reflink'' testen. Reflink-Kopien benötien ähnlich wenig Platz wie Hardlinks, haben aber ihre eignen Inodes inkl. Berechtigungen, Eigentümer usw. Reflinks benötigen BTRFS, ZFS oder eine aktuelle Version von XFS (xfsprogs 5.1 und Linux 5.4) )) === 1. Backup === mkdir /tmp/backup cp -a ~/ /tmp/backup/sonntag ---- Änderungen im Arbeitsverzeichnis (z.B. anlegen, löschen und bearbeiten von Dateien) === 2. Backup === cp -al /tmp/backup/sonntag /tmp/backup/montag rsync -a --del ~/ /tmp/backup/montag ---- Änderungen im Arbeitsverzeichnis (z.B. anlegen, löschen und bearbeiten von Dateien) === 3. Backup === cp -al /tmp/backup/montag /tmp/backup/dienstag rsync -a --del ~/ /tmp/backup/dienstag … ===== Verzeichnisse zusammenführen ===== |-- dir1 | |-- a | | |-- file1.txt | | `-- file2.txt | |-- b | | `-- file3.txt | `-- c | `-- file4.txt `-- dir2 |-- a | |-- file5.txt | `-- file6.txt |-- b | |-- file7.txt | `-- file8.txt `-- c |-- file10.txt `-- file9.txt (( mkdir -p {dir1,dir2}/{a,b,c} touch dir1/a/file1.txt touch dir1/a/file2.txt touch dir1/b/file3.txt touch dir1/c/file4.txt touch dir2/a/file5.txt touch dir2/a/file6.txt touch dir2/b/file7.txt touch dir2/b/file8.txt touch dir2/c/file9.txt touch dir2/c/file10.txt )) mkdir merge cp -rl dir1/. dir2/. merge rm -r dir* tree merge merge ├── a │ ├── file1.txt │ ├── file2.txt │ ├── file5.txt │ └── file6.txt ├── b │ ├── file3.txt │ ├── file7.txt │ └── file8.txt └── c ├── file10.txt ├── file4.txt └── file9.txt (( alternativ mit rsync: rsync -ax --link-dest=/tmp/dir1/ dir1/ merged/ rsync -ax --link-dest=/tmp/dir2/ dir2/ merged/ Achtung: link-dest muss absolut angegeben werden ))