Tutoriel Linux

Skopiować katalog Linux z plikami ukrytymi i prawami

Débutant3 min de lecture

Kopiowanie folderu wydaje się trywialne, aż do dnia, gdy katalog zawiera ukryte pliki, dowiązania symboliczne lub daty przydatne dla skryptu. cp -r klonuje strukturę, ale cp -a jest często najlepszym wyborem do duplikacji folderu roboczego bez zmiany jego atrybutów.

Przed usunięciem źródła, utwórz kopię, sprawdź ją i otwórz kilka plików. Udana komenda nie dowodzi, że celowałeś w właściwą ścieżkę.

Bezpieczne kopiowanie dwóch folderów na przechowalniach Linux
Najpierw skopiuj, potem sprawdź pliki, prawa i dowiązania.

Wybór między cp -r a cp -a

cp -r wchodzi do podfolderów. Elementy, które zaczynają się od kropki, są również włączane podczas kopiowania samego folderu. Unikaj zatem globbingu w stylu *, jeśli oczekujesz także na ukryte pliki: powłoka ignoruje je domyślnie.

cp -a włącza tryb archiwizacji. Zachowuje jak najwięcej uprawnień, właścicieli, dat, dowiązań symbolicznych i dowiązań fizycznych. W przypadku lokalnej kopii zapasowej lub migracji katalogu, zwykle jest to komenda, którą należy preferować. Może wymagać wysokich uprawnień, jeśli musisz zachować właściciela, którego twoje konto nie może ustawić.

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

W -- oddziela opcje od ścieżek. Zapobiega to interpretacji pliku zaczynającego się od myślnika jako opcji. Ostatni ukośnik źródła oznacza tutaj, że kopiujesz jego zawartość do /srv/app-copie/. Jeżeli ten katalog już istnieje, sprawdź uzyskaną strukturę przed kontynuowaniem.

Przygotowanie celu bez nadpisywania niewłaściwego katalogu

Najpierw utwórz jasno nazwaną destynację, a następnie wypisz obie strony. Na serwerze nie uruchamiaj rekurencyjnej kopii do ścieżki zbudowanej ręcznie w skrypcie, nie pokazując tej ścieżki w logach.

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

Jeśli chcesz odmówić nadpisania podczas pierwszej próby, dodaj -n. Ta opcja ignoruje już istniejące pliki, więc nie nadaje się do pełnej synchronizacji. Aby zastąpić istniejące dane, wykonaj kopię zapasową lub pracuj w nowym katalogu, a następnie przełącz usługę na zatwierdzoną kopię.

Kontrola plików, praw i dowiązań

Zacznij od sprawdzenia ukrytych plików i praw. ls -la wyświetla nazwy zaczynające się od kropki. stat pozwala porównać uprawnienia i daty wrażliwego pliku.

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

Ostatnia komenda wyświetla dowiązania symboliczne. Z cp -a, dowiązanie zwykle pozostaje dowiązaniem. Przy mniej odpowiednim kopiowaniu, możesz skończyć z zawartością jego celu lub dowiązaniem, które stało się nieaktualne po przeniesieniu.

  • policz pliki za pomocą find ... -type f | wc -l ;
  • otwórz najważniejszy plik konfiguracyjny ;
  • przetestuj program na kopii przed usunięciem źródła ;
  • zachowaj źródło, dopóki usługa lub skrypt nie przejdą testu funkcjonalnego.

Aby porównać zawartość dwóch drzew katalogów, diff -qr /srv/app /srv/app-copie zgłasza pliki, które się różnią. Nie zastępuje to weryfikacji aplikacji, ale szybko wykrywa niekompletną kopię.

Jeśli musisz również poprawić uprawnienia po duplikacji, przewodnik po chmod rekurencyjny w systemie Linux wyjaśnia, dlaczego zbyt szybkie uruchomienie chmod -R może uszkodzić pliki wykonywalne. Aby znaleźć plik przed skopiowaniem, użyj również find w systemie Linux.

sudo apt update && sudo apt upgrade