Что такое обычный файл?

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

Что означает, что файл является «обычным» и почему rmтакой файл рассматривается как особый случай?

Кори Кляйн
источник

Ответы:

8

тестовая команда

Любой файл, который проходит test ( -f), является обычным файлом:

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

Если вы посмотрите страницу справочника, testвы увидите все типы файлов.

команда stat

Вы также можете проверить, является ли файл обычным, используя statкоманду:

$ 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 ()

Чтобы понять, в чем разница между обычным файлом и другими возможными типами, взгляните на справочную страницу stat. Обязательно посмотрите справочную страницу для руководства для программистов, а не справочную страницу для самой statкоманды.

$ man 2 stat

Этот раздел, в частности, показывает различные типы файлов:

   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
источник
7

Я думаю, rmэто псевдоним, возможно rm -i. «Обычная» часть ничего особенного не означает, она лишь означает, что это не труба, устройство, сокет или что-то другое «особенное».

Александр Янссен
источник
Ах, вы правы - это псевдоним rm -i.
Кори Кляйн
5
Так что это означает что-то конкретное. На самом деле это очень важный аспект объекта, который будет удален ...
Bananguin
Как сказал @alexander, это означает, что файл не является символической ссылкой, pipe, rand, null, процессором и т. Д. Возможно, вы слышали философию linux «все - текстовый файл». Это не совсем верно, но это предлагает доминирующий операционный контекст, где инструменты обработки строк могут применяться непосредственно к элементам файловой системы. В данном случае это означает, что в более буквальном смысле. Чтобы увидеть шаг обнаружения изолированно, попробуйте командный файл , как в file /etc/passwdили file /dev/null.
Джо Ацбергер