Что такое «странный файл»?

38

Приложение, которое я использую, не запустится с этим сообщением пользователя: [Errno 13] Permission denied: '/home/sleblanc/.config/app/.config

Когда я использовал ls, файл обнаружился так:

?--------- 1 root root     0 Dec 31  1969 .config

Запуск stat в файле дает мне это:

% stat .config
  File: .config
  Size: 0           Blocks: 0          IO Block: 4096   weird file
Device: 2dh/45d Inode: 9799944     Links: 1
Access: (0666/?rw-rw-rw-)  Uid: ( 1000/     sleblanc)   Gid: ( 1000/         sleblanc)
Access: 1969-12-31 19:00:00.000000000 -0500
Modify: 1969-12-31 19:00:00.000000000 -0500
Change: 2018-04-07 23:40:22.549653691 -0400

Самым удивительным является упоминание о «странном файле».

Что за странный файл?

sleblanc
источник
Что stat -c '%f' .configпечатает? (Вы должны получить четырехзначное шестнадцатеричное число.) Кроме того, что stat -f .configпечатает? (Это сообщает информацию о файловой системе, содержащей .config.)
zwol
4
Файл имеет владельца / группу root, идентификатор которого равен нулю. Это поддерживает предположение @ peterh о том, что некоторые метаданные были обнулены.
CSM
Вы используете eCryptfs?
kasperd

Ответы:

39

(Предполагая, что GNU ...) Если statне мог сказать, что это за тип (каталог, (пустой) обычный файл, ссылка, сокет, ...), он говорит weird file. Я бы догадался о повреждении файловой системы и предложил бы fsck.


В 2014 году в GNU coreutils были добавлены дополнительные распознанные типы файлов. Таким образом, если ваша версия старше этой, это может быть приемлемый файл для некоторых особых обстоятельств, но приложение, скорее всего, сохранит свою конфигурацию в обычном файле.

Мур
источник
Тем не менее, некоторые программы могут использовать сокет или ссылку какого-то странного типа с именем .config ...
rackandboneman
1
@rackandboneman statиз GNU coreutils в моей системе радостно сообщает о сокете как socket. Симлинки сообщаются как symbolic link. Жесткие ссылки неотличимы от «обычных» файлов и сообщаются как regular file(в конце концов, так и есть), за исключением того, что количество ссылок> 1.
CVn
«какого-то странного типа» - я имел в виду другие десятки типов sockety или linky, найденных в этом супер-подробном разделе кода на C (безусловно, есть веская причина не просто индексировать массив строк с помощью номера типа файла. .. Я думаю ...) :)
rackandboneman
@rackandboneman Base POSIX не предоставляет какого-либо способа извлечения «номера типа файла» из структуры статистики, только макросы S_ISxxx (). Некоторые Unix-системы предлагают набор расширений "XSI", которые включают способ сделать это, но coreutils пытается не зависеть от XSI, или сделал это в последний раз, когда я посмотрел в любом случае.
Звол
ААА понятно. Я ошибочно предполагал, что coreutils более ориентирован на GNU / linux, чем он должен быть :)
rackandboneman