[LINUX] Können Sie diese Datei löschen?

Wenn Sie eine unnötige Datei auf dem Server löschen müssen und fragen: "Mit welcher Berechtigung können Sie die Datei löschen?", Machen einige Leute einen Fehler.

Lassen Sie uns die richtige Antwort auf diese Frage sehen und warum.

Was ist das Löschen einer Datei?

Informationen zum Löschen der Datei

Betrachten Sie die beiden Muster von. Wenn ich "Datei löschen" sage, denke ich normalerweise an Letzteres, aber wenn ich nach dieser Bedingung frage, mache ich oft den Fehler, die letztere Bedingung zu beantworten.

Lassen Sie uns zunächst den erwarteten Wert des Zustands klären, der durch jede Operation erhalten wird.

Wenn Sie den Inhalt der Datei löschen, ist der erwartete Wert, dass der Inhalt der Datei leer ist:

$ ls -s path/to/file 
0 path/to/file
$ wc -c path/to/file 
0 path/to/file
$ file path/to/file 
path/to/file: empty

Wenn Sie andererseits den Dateipfad löschen, ist der erwartete Wert, dass Sie nicht mehr mit dem vorhandenen Pfad auf die Datei zugreifen können:

$ ls path/to/file 
ls: cannot access 'path/to/file': No such file or directory
$ cat path/to/file 
cat: path/to/file: No such file or directory

Spezifische Betriebsbeispiele, um jedes zu erreichen, werden gezeigt:

Schauen wir uns die Beziehung zwischen Berechtigungen an und ob diese Operationen möglich sind.

Können Sie den Inhalt der Datei löschen?

Sie benötigen eine Schreibberechtigung für die Datei, um den Inhalt der Datei zu löschen. Wenn Sie die Schreibberechtigung entfernen

$ cat path/to/file 
hello
$ ls -li path/to/file 
161504 -rw-r--r-- 1 yoichinakayama yoichinakayama 6 May 31 11:55 path/to/file
$ chmod -w path/to/file 
$ ls -li path/to/file 
161504 -r--r--r-- 1 yoichinakayama yoichinakayama 6 May 31 11:55 path/to/file
$ echo -n > path/to/file 
-bash: path/to/file: Permission denied

Und der Inhalt der Datei kann nicht gelöscht werden. Mit Schreibberechtigung

$ chmod +w path/to/file 
$ ls -li path/to/file 
161504 -rw-r--r-- 1 yoichinakayama yoichinakayama 6 May 31 11:55 path/to/file
$ echo -n > path/to/file 
$ ls -li path/to/file 
161504 -rw-r--r-- 1 yoichinakayama yoichinakayama 0 May 31 11:56 path/to/file
$ wc -c path/to/file 
0 path/to/file
$ file path/to/file 
path/to/file: empty

Und der Inhalt der Datei kann gelöscht werden. Sie bearbeiten den Inhalt einer Datei, daher benötigen Sie Schreibberechtigungen für diese Datei.

Können Sie den Dateipfad löschen?

Sie benötigen eine Schreibberechtigung für das übergeordnete Verzeichnis, um den Dateipfad zu löschen. Wenn Sie die Schreibberechtigung entfernen

$ ls -l path/to/file 
-rw-r--r-- 1 yoichinakayama yoichinakayama 0 May 31 12:00 path/to/file
yoichinakayama@penguin:~$ ls -ld path/to
drwxr-xr-x 1 yoichinakayama yoichinakayama 8 May 31 11:55 path/to
yoichinakayama@penguin:~$ chmod -w path/to
yoichinakayama@penguin:~$ ls -ld path/to
dr-xr-xr-x 1 yoichinakayama yoichinakayama 8 May 31 11:55 path/to
yoichinakayama@penguin:~$ rm path/to/file 
rm: cannot remove 'path/to/file': Permission denied

Und der Dateipfad kann nicht gelöscht werden. Mit Schreibberechtigung

$ chmod +w path/to
$ ls -ld path/to
drwxr-xr-x 1 yoichinakayama yoichinakayama 8 May 31 11:55 path/to
$ rm path/to/file 
$ ls path/to/file
ls: cannot access 'path/to/file': No such file or directory

Und der Dateipfad kann gelöscht werden.

Zeigen Sie den Inhalt des Verzeichnisses an

Um herauszufinden, warum Sie eine Schreibberechtigung für ein Verzeichnis zum Löschen einer Datei benötigen, überprüfen Sie, welche Informationen im Verzeichnis gespeichert sind. Wenn Sie im folgenden C-Sprachprogramm den Pfad eines Verzeichnisses als Argument angeben, wird der Inhalt dieses Verzeichnisses ausgegeben. Verwenden Sie diesen.

$ cat sample.c 
#include <sys/types.h>
#include <dirent.h>
#include <stdio.h>

int main(int argc, char *argv[])
{
	DIR *dir = opendir(argv[1]);
	struct dirent *ent;
	if (dir == NULL) {
		return 1;
	}
	while ((ent = readdir(dir)) != NULL) {
		printf("d_ino=%d, d_name=%s\n", ent->d_ino, ent->d_name);
	}
	closedir(dir);
	return 0;
}
$ gcc sample.c 

Versuchen Sie zunächst, es mit den Dateien im Verzeichnis auszuführen.

$ touch path/to/file
$ ./a.out path/to
d_ino=161394, d_name=.
d_ino=161393, d_name=..
d_ino=161598, d_name=file
$ ls -li path/to/file 
161598 -rw-r--r-- 1 yoichinakayama yoichinakayama 0 May 31 12:14 path/to/file

Sie können sehen, dass die Inode-Nummer der Zieldatei und der Dateiname "Datei" im Verzeichnis gespeichert sind.

Als nächstes wollen wir sehen, was passiert, wenn Sie den Dateipfad löschen.

$ rm path/to/file
$ ./a.out path/to
d_ino=161394, d_name=.
d_ino=161393, d_name=..

Die im Verzeichnis gespeicherte direkte Struktur wurde um eins reduziert. Das heißt, das Verzeichnis hat sich geändert. In diesem Beispiel wird beim Löschen des Dateipfads path / to / file der Inhalt des Verzeichnisses geändert (Inode-Nummer 161394). Daher benötigen Sie eine Schreibberechtigung für dieses Verzeichnis.

Zusammenfassung

Was bearbeiten Sie mit dieser Operation? Wenn Sie wissen, welche Informationen wo gespeichert sind, wissen Sie, welche Berechtigungen beim Löschen des Inhalts einer Datei und beim Löschen des Dateipfads erforderlich sind.

Bestätigungsumgebung

Ich habe es auf dem Terminal des Chromebooks bestätigt.

$ uname -a
Linux penguin 4.19.113-08528-g5803a1c7e9f9 #1 SMP PREEMPT Thu Apr 2 15:16:47 PDT 2020 aarch64 GNU/Linux
$ gcc --version
gcc (Debian 6.3.0-18+deb9u1) 6.3.0 20170516
Copyright (C) 2016 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Recommended Posts

Können Sie diese Datei löschen?
Löschen Sie den Teilstring
Bis Sie das Fehlerprotokoll lesen können
Führen Sie den Komponententest aus, sobald Sie die Datei speichern
Bis Sie die Google Speech API verwenden können
In Bash "Löschen Sie die Datei, falls vorhanden".
Das Ablesen des analogen Messgeräts kann am Beispiel MNIST erfolgen.
Das Ablesen des analogen Messgeräts kann am Beispiel MNIST erfolgen.
[Python] Sie können ein Objekt mithilfe des Pickle-Moduls in einer Datei speichern.
Können Sie die Sportplanung lösen?
Einführung in Websites, auf denen Sie Trends im Rahmen von 2019 sehen können
Was können Sie mit den Standardstatistiken der Python-Bibliothek tun?
Entpacken Sie die Internet-Zip-Datei
Dateizugriff unter dem Verzeichnis
Analysieren Sie die Antwort, damit Sie Wantedlys eigene Geschichte abkratzen können
Versuchen Sie, iptables zu lernen, bis Sie im Internet surfen können
Überlegen Sie im Qiita-Artikel, was Sie mit Python tun können
Sie können virtualenv auch über das Python-Plug-In von IntelliJ IDEA verwenden
"CheckiO", wo Sie Python studieren und gleichzeitig Probleme lösen können
Einführung in Websites, auf denen Sie Trends im Rahmen von 2019 sehen können
Können Sie diese Datei löschen?
Kalman Filter, den Sie verstehen können
Extrahieren Sie die xz-Datei mit Python
Speichern Sie die Binärdatei in Python
Folgen Sie der Dateihierarchie mit fts
"Obake" kann von "dir" gesungen werden
Zeigen Sie einfach die Jupyter-Notizbuchdatei an
Laden Sie die mit appcfg.py bereitgestellte Datei herunter
Die Geschichte des "Lochs" in der Akte
Die minimalen Zementinformationen, die Sie benötigen
Extrahieren Sie die Targz-Datei mit Python
Datei mit Standard-App öffnen
Wenn Sie Titanic fahren ... sterben Sie.
Teilen Sie die Pyramiden-Framework-INI-Datei
Holen Sie sich den Dateipfad mit Pathlib
Python | Was Sie mit Python machen können
Löschen Sie Tweets für einen bestimmten Zeitraum
Überprüfen Sie den Dateinamen, wenn Sie durch Python-Import nicht informiert werden
Lesen Sie die Datei mit Python und löschen Sie die Zeilenumbrüche [Hinweise zum Lesen der Datei]
Ab Django 1.8 können Sie Jinja2 als Template-Engine #djangoja auswählen