====== 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
))