Was ist eine reguläre Datei?

11
$ rm foobar
rm: remove regular file `foobar'?

Was bedeutet es für eine Datei, "normal" zu sein, und warum wird rmeine solche Datei als Sonderfall behandelt?

Cory Klein
quelle

Antworten:

8

Testbefehl

Jede Datei, die den Test ( -f) besteht, ist eine reguläre Datei:

$ test -f afile.zip && echo regular
regular

Wenn Sie in der Manpage nachsehen, testsehen Sie alle verschiedenen Dateitypen.

stat Befehl

Sie können auch mit dem folgenden statBefehl überprüfen, ob eine Datei regulär ist :

$ stat afile.zip 
  File: `afile.zip'
  Size: 1512        Blocks: 8          IO Block: 4096   regular file
Device: fd02h/64770d    Inode: 10370668    Links: 1
Access: (0664/-rw-rw-r--)  Uid: (  500/    saml)   Gid: (  501/    saml)
Access: 2013-11-07 15:52:06.719632792 -0500
Modify: 2013-11-07 15:52:00.949760104 -0500
Change: 2013-11-07 15:52:00.949760104 -0500

stat () Funktion

Um mehr über den Unterschied zwischen einer regulären Datei und den anderen möglichen Typen zu erfahren, schauen Sie in der Manpage nach stat. Lesen Sie unbedingt die Manpage für das Programmierhandbuch und nicht die Manpage für den eigentlichen statBefehl.

$ man 2 stat

Dieser Abschnitt zeigt insbesondere die verschiedenen Dateitypen:

   The following flags are defined for the st_mode field:

       S_IFMT     0170000   bit mask for the file type bit fields
       S_IFSOCK   0140000   socket
       S_IFLNK    0120000   symbolic link
       S_IFREG    0100000   regular file
       S_IFBLK    0060000   block device
       S_IFDIR    0040000   directory
       S_IFCHR    0020000   character device
       S_IFIFO    0010000   FIFO
       S_ISUID    0004000   set UID bit
       S_ISGID    0002000   set-group-ID bit (see below)
       S_ISVTX    0001000   sticky bit (see below)
       S_IRWXU    00700     mask for file owner permissions
       S_IRUSR    00400     owner has read permission
       S_IWUSR    00200     owner has write permission
       S_IXUSR    00100     owner has execute permission
       S_IRWXG    00070     mask for group permissions
       S_IRGRP    00040     group has read permission
       S_IWGRP    00020     group has write permission
       S_IXGRP    00010     group has execute permission
       S_IRWXO    00007     mask for permissions for others (not in group)
       S_IROTH    00004     others have read permission
       S_IWOTH    00002     others have write permission
       S_IXOTH    00001     others have execute permission
slm
quelle
7

Ich rmdenke, es ist möglicherweise ein Alias rm -i. Der "normale" Teil bedeutet nichts Besonderes, sondern nur, dass es sich nicht um ein Rohr, ein Gerät, eine Buchse oder etwas anderes "Besonderes" handelt.

Alexander Janssen
quelle
Ah, du hast recht - es ist voreingenommen rm -i.
Cory Klein
5
Es bedeutet also etwas Besonderes. Eigentlich ist es ein sehr wichtiger Aspekt des zu entfernenden Objekts ...
Bananguin
Wie @alexander sagte, bedeutet dies, dass die Datei kein Symlink, Pipe, Rand, Null, CPU usw. ist. Vielleicht haben Sie die Linux-Philosophie "Alles ist eine Textdatei" gehört. Dies ist nicht wörtlich wahr, aber es deutet auf einen dominanten Betriebskontext hin, in dem Zeichenfolgenverarbeitungswerkzeuge direkt auf Dateisystemelemente angewendet werden können. In diesem Fall bedeutet dies wörtlicher. Um den Erfassungsschritt in Isolation zu sehen, die versuchen , den Befehl Datei , wie in file /etc/passwdoder file /dev/null.
Joe Atzberger