Zaczynam pisać kilka skryptów bash dla mojego projektu i potrzebują one plików pośrednich lub zmiennych do napisania.
Chcę wiedzieć, do których folderów mam pewność, że mam dostęp, gdy ktoś uruchomi mój skrypt? Czy to powszechna praktyka /tmp/
? A może powinienem użyć czegoś innego?
scripting
filesystems
directory-structure
tmp
Programowanie Noob
źródło
źródło
Jeśli trzeba napisać niektóre pliki tymczasowe, które tylko ostatni tak długo, jak skrypt lub aplikacja jest uruchomiona, należy skorzystać z katalogu wskazanego przez
TMPDIR
zmienną środowiskową, lub jeśli ta zmienna nie jest zdefiniowana/tmp
./tmp
jest czyszczony w czasie rozruchu w niektórych systemach (czasami nawet w pamięci RAM, np. domyślnie w Solarisie i w niektórych instalacjach Linuksa), więc nie można go używać do plików, które muszą przetrwać awarię zasilania lub restart./var/tmp
może być używany do plików, które muszą przetrwać restart, ale które mogą być czyszczone przez administratora systemu od czasu do czasu. Jeśli aplikacja musi zapisywać pliki na stałe, zapisz je gdzieś w katalogu domowym użytkownika (w~/.programmingnoobsapp
lub~/.cache/programmingnoobsapp
) lub pod/var/lib/programmingnoobsapp
lub/var/cache/programmingnoobsapp
.Pamiętaj, że
/tmp
jest to wspólne dla wszystkich użytkowników, więc musisz zachować ostrożność podczas tworzenia pliku w tym miejscu. Musisz wybrać nazwę pliku, która jeszcze nie istnieje, i musisz uważać, aby nie dopuścić do wyścigu, w którym inny proces tworzy plik przed tobą z różnymi uprawnieniami, co może stanowić lukę bezpieczeństwa (jeśli inny proces działa jako inny użytkownik, może wtedy uzyskiwać dostęp do danych procesu i modyfikować je). Użyjmktemp
polecenia, aby utworzyć plik w/tmp
lub/var/tmp
. Domyślniemktemp
tworzy plik w$TMPDIR
, lub/tmp
jeśliTMPDIR
jest rozbrojony, co zwykle jest właściwym miejscem. Jeśli chcesz użyć wielu plików tymczasowych, a nawet jeśli potrzebujesz jednego, zalecamy utworzenie katalogu dla wszystkich plików tymczasowych za pomocąmktemp -d
i usuwając go na końcu skryptu.źródło
mktemp
. Dla mnie to poprawna odpowiedź: powierz zadanie bezpiecznego utworzenia pliku tymczasowegomktemp
(zobacz ten artykuł ). Chociaż jedna odpowiedź cytującaFHS
ma również wielką wartość.tmp_root
przed przypisaniem? Czy nie byłoby to dla niego bardziej naturalneunset
?set -u
, ale to rzadkie). Przed ustawieniem pułapki należy ją (od) ustawić na bezpieczną wartość, na wypadek gdyby skrypt został zabity tuż po ustawieniu pułapki.set -o errexit
, że jeślitmp_root
jest już ustawiony w środowisku tylko do odczytu, nie zniszczy niewłaściwego katalogu ...Tylko w celu uzupełnienia odpowiedzi, które zostały już opublikowane.
Istnieją również
/dev/shm
niektóre dystrybucje Linuksa, których można użyć do tymczasowego przechowywania. Tego magazynu należy używać tylko wtedy, gdy wydajność I / O pliku jest krytycznym czynnikiem podanym przy/dev/shm
korzystaniu ztmpfs
systemu plików. Należy go również używać do plików i danych o rozsądnych rozmiarach. Systemtmpfs
plików wykorzystuje systemową pamięć RAM jako pamięć, więc nie jest trwały od rozruchu do rozruchu.Jest dobry przegląd wszystkich opcji wymienionych tutaj na StackOverflow, a także w tym pytaniu zatytułowanym: / tmp vs. / dev / shm do tymczasowego przechowywania plików w systemie Linux? . Jest to dobrze omówione w tym pytaniu SuperUser zatytułowanym: Kiedy powinienem używać / dev / shm /, a kiedy powinienem / tmp? .
Bibliografia
źródło
Tak,
/tmp
głównie dla plików, które są wymagane tymczasowo. / Tmp ma lepki bit, co oznacza, że tylko właściciel elementu, właściciel katalogu lub administrator może zmieniać nazwy lub usuwać pliki. wiele programów używa tego do tworzenia plików blokady i do tymczasowego przechowywania danych. W niektórych dystrybucjach katalog ten jest czyszczony podczas uruchamiania lub zamykania.źródło