Tutoriel Linux

Een Linux-map kopiëren met verborgen bestanden en rechten

Débutant3 min de lecture

Een map kopiëren lijkt triviaal totdat de directory verborgen bestanden, symbolische links of nuttige data voor een script bevat. cp -r kopieert de boomstructuur, maar cp -a is vaak de beste keuze om een werkdirectory te dupliceren zonder de attributen te wijzigen.

Voordat u de bron verwijdert, maakt u een kopie, controleert u deze en opent u enkele bestanden. Een succesvolle opdracht bewijst niet dat u de juiste locatie heeft aangesproken.

Veilig kopiëren van twee mappen naar Linux-opslagen
Kopieer eerst, controleer daarna de bestanden, rechten en links.

Kiezen tussen cp -r en cp -a

cp -r gaat door de submappen. Invoeren die beginnen met een punt zijn goed opgenomen wanneer u de map zelf kopieert. Vermijd echter globbing zoals * als u ook verborgen bestanden verwacht: de shell negeert deze standaard.

cp -a activeert de archiefmodus. Het behoudt zoveel mogelijk de rechten, eigenaren, data, symbolische links en fysieke links. Voor een lokale back-up of een mapmigratie is dit meestal de te verkiezen opdracht. Het kan hogere rechten vereisen als u een eigenaar wilt behouden die uw account niet kan vaststellen.

cp -a -- /srv/app/ /srv/app-copie/

De -- scheidt de opties van de paden. Het voorkomt dat een bestand dat begint met een streepje als optie wordt geïnterpreteerd. De laatste slash van de bron betekent hier dat u de inhoud kopieert naar /srv/app-copie/. Als deze map al bestaat, controleer dan de verkregen structuur voordat u verdergaat.

Een bestemming voorbereiden zonder de verkeerde map te overschrijven

Maak eerst een duidelijk genaamde bestemming en lijst beide zijden op. Op een server, start geen recursieve kopie naar een handmatig construeret pad in een script zonder dat pad in de logs weer te geven.

mkdir -p -- /srv/app-copie
find /srv/app -maxdepth 1 -printf '%fn' | sort
find /srv/app-copie -maxdepth 1 -printf '%fn' | sort

Als u tijdens een eerste poging alle overschrijving wilt weigeren, voeg dan -n toe. Deze optie negeert al aanwezige bestanden, dus het is niet geschikt voor een volledige synchronisatie. Om bestaande gegevens te vervangen, maak een back-up of werk in een nieuwe map, en schakel dan de service over naar de gevalideerde kopie.

Bestanden, rechten en links controleren

Begin met het controleren van verborgen bestanden en rechten. ls -la toont de namen die met een punt beginnen. stat stelt u in staat om de rechten en data van een kritiek bestand te vergelijken.

ls -la /srv/app
ls -la /srv/app-copie
stat -c '%n %a %U:%G %y' /srv/app/config.ini /srv/app-copie/config.ini
find /srv/app-copie -type l -ls

De laatste opdracht lijst de symbolische links. Met cp -a blijft een link normaal gesproken een link. Met een minder geschikte kopie kunt u in plaats daarvan de inhoud van de doelbestemming krijgen of een link die ongeldigheid is geworden na verplaatsing.

  • tel de bestanden met find ... -type f | wc -l ;
  • open het belangrijkste configuratiebestand ;
  • test het programma tegen de kopie voordat u de bron verwijdert ;
  • bewaar de bron zolang de service of het script zijn functionele controle niet heeft doorstaan.

Om de inhoud van twee boomstructuren te vergelijken, diff -qr /srv/app /srv/app-copie meldt de bestanden die verschillen. Dit vervangt geen applicatievalidatie, maar detecteert snel een incomplete kopie.

Als u ook de rechten na een duplicatie moet corrigeren, legt de gids over recursief chmod onder Linux uit waarom een te snelle chmod -R executables kan breken. Om een bestand vóór de kopie te vinden, gebruikt u ook find onder Linux.

sudo apt update && sudo apt upgrade