Linux: bezpieczne usuwanie rekurencyjne w skryptach


0

Pracuję nad automatycznymi skryptami działającymi na Linux-ie (Debian). Te skrypty są uruchamiane z harmonogramu i manipulują plikami w ich własnych katalogach.

Na końcu skryptów muszę usunąć pliki tymczasowe.

Obecnie mam coś takiego:

#check that some variables are not empty
if [[ -z $var1 || -z $var2 || -z $var3 ]]; then
  echo "Some var is empty"
  exit 1
fi
workingdir=$var1/$var2
#some checks on working directory
if [[ ! -d $workingdir ]]; then
  echo "Directory error"
  exit 1
fi
cd $workingdir
if [[ $(pwd) != $workingdir ]]; then
  echo "Change directory error"
  exit 1
fi
#...here goes the main part of the script
#and at the end, the "cleaning"
if [[ -d $workingdir/temp/$var3 ]]; then
  find $workingdir/temp/$var3 -delete;
fi

Czy masz jakiś pomysł, którego mógłbym użyć, aby zmniejszyć ryzyko usunięcia czegoś niewłaściwego?

Dziękuję Ci.

pozdrowienia



Dziękuję za ten link. Od jakiegoś czasu szukam i nie jestem pewien, jak zacytować cudzysłów w cudzysłowiu w pętli for /? Czy powinienem używać podwójnych cudzysłowów tylko wokół zmiennej i pozostawić symbol wieloznaczny w ten sposób? for f in "$workingdir"*; do...
— lennelei

Nie widzę takiej składni w pytaniu. Nie powinieneś zadawać nowych pytań w komentarzach. Cytowany *nie zostanie rozwinięty. Dlaczego nie spróbujesz echo "$workingdir"*, echo "$workingdir*", echo "$workingdir"/*a echo "$workingdir/*"i zobaczyć na własne oczy?
— Kamil Maciorowski

Przepraszam za pytanie, otworzę nowy post.
— lennelei

Odpowiedzi:


1

Twój skrypt wie, jakie pliki są tworzone i gdzie się znajdują.

To ogólne stwierdzenie jest tutaj ważnym punktem. Jeśli naprawdę chcesz usunąć tylko utworzone przez siebie pliki, śledź, które pliki tworzysz. Więc zwykle robiłbyś:

TMP1=$(mktemp -t example.1.XXXXXX)
TMP2=$(mktemp -t example.2.XXXXXX)

aby utworzyć pliki tymczasowe (zobacz man mktempszczegóły) i wykonaj

rm -f "$TMP1" "$TMP2"

kiedy skończysz z plikami tymczasowymi. Alternatywnie możesz utworzyć katalog tymczasowy i go usunąć.

Czego nie powinieneś robić

rm -f /tmp/example.?.*

ponieważ spowoduje to usunięcie plików tymczasowych również dla innych uruchomionych instancji skryptu.


W rzeczywistości jest to trochę bardziej skomplikowane: skrypt uruchamia zadanie Java, które używa zmiennych $ workingdir i $ var3 do przechowywania danych tymczasowych w folderze $ workingdir / temp / $ var3. Nie chcę usuwać tego folderu z zadania Java, ponieważ może być potrzebny (na przykład w przypadku awarii). Właśnie dlatego szukałem pomysłów na zabezpieczenie skryptu.
— lennelei

Najważniejsze jest to, że musisz śledzić pliki tymczasowe tworzone przez skrypt (lub kod Java). Możesz zdecydować, które pliki usunąć, jeśli wiesz, jakie to pliki.
— Ljm Dullaart
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.