Sikker Oprydning af /tmp: Undgå Forstyrrelse af Langvarige Processer

Hvordan kan /tmp sikkert ryddes op for forældreløse filer uden at påvirke langvarige processer, og findes der et program eller script, der kombinerer sidste ændringstidspunkt med betingelsen om, at ingen processer har en filhåndtag for filen? Tillader Linux/Unix en filåbningsmetode, hvor den oprettede fil slettes ved procesafslutning, selv ved et crash?

For at rydde op i /tmp-mappen uden at påvirke langvarige processer kan cron jobs, tmpreaper og kontrol af åbne filer anvendes. Værktøjer som tmpwatch og lsof kan kombineres i scripts for at sikre, at filer slettes korrekt.

Hvordan kan /tmp sikkert ryddes op for forældreløse filer uden at påvirke langvarige processer?

For at rydde op i /tmp-mappen uden at påvirke langvarige processer, kan følgende metoder anvendes:

  • Brug af cron jobs til regelmæssig oprydning baseret på filens alder.
  • Kontroller, om filer er åbne af nogen processer, før de slettes.
  • Brug af tmpreaper eller lignende værktøjer, der kan slette filer baseret på sidste ændringstidspunkt.

Findes der et program eller script, der kombinerer sidste ændringstidspunkt med betingelsen om, at ingen processer har en filhåndtag for filen?

Ja, der findes værktøjer og scripts, der kan kombinere disse betingelser:

  • tmpwatch: Et værktøj, der kan slette filer baseret på deres sidste adgangs- eller ændringstidspunkt.
  • lsof: Kan bruges til at kontrollere, om filer er åbne af nogen processer.
  • Custom scripts: Kombination af find og lsof kan bruges til at oprette et script, der opfylder begge betingelser.

Eksempel på et script, der kombinerer find og lsof:


#!/bin/bash
# Find filer ældre end 7 dage og ikke åbne af nogen processer
find /tmp -type f -mtime +7 -print0 | while IFS= read -r -d '' file; do
  if ! lsof "$file" &> /dev/null; then
    rm "$file"
  fi
done

Tillader Linux/Unix en filåbningsmetode, hvor den oprettede fil slettes ved procesafslutning, selv ved et crash?

Ja, Linux/Unix tillader en sådan metode:

  • O_TMPFILE flag: Når en fil oprettes med O_TMPFILE flaget, bliver den automatisk slettet, når den sidste filhåndtag lukkes.
  • Unlinking efter åbning: En fil kan oprettes og derefter slettes (unlinked) umiddelbart efter åbning. Filen vil forblive tilgængelig for processen, men vil blive slettet fra filsystemet, når processen afsluttes.

Eksempel på brug af O_TMPFILE i C:


#include <fcntl.h>
#include <unistd.h>

int main() {
  int fd = open("/tmp", O_TMPFILE | O_RDWR, S_IRUSR | S_IWUSR);
  if (fd == -1) {
    perror("open");
    return 1;
  }
  // Filen vil blive slettet, når fd lukkes
  write(fd, "Hello, World!", 13);
  close(fd);
  return 0;
}

Ved at bruge disse metoder kan du sikre, at midlertidige filer håndteres korrekt og slettes automatisk, når de ikke længere er nødvendige.