ошибка в определении типа файла

Для новичков как вообще в Linux, так и в конкретной теме, к которой относится вопрос.

Модератор: Bizdelnick

Ответить
Аватара пользователя
olecya
Сообщения: 901
ОС: debian, fedora (i3-wm)

ошибка в определении типа файла

Сообщение olecya »

Fedora 35
При работе в файловом менеджере ranger заметила что нет предпросмотра в некоторых текстовых файлах, а сам менеджер не может определить в какой программе отрывать исходные файлы с расширением .desktop .mod .go .rs и без расширения.
По выходе из менеджера получаю ошибку:

Код: Выделить всё

xdg-open: unexpected option '--'
Try 'xdg-open --help' for more information.
Скопировала все конфиги в пользовательскую директорию:

Код: Выделить всё

ranger --copy-config=all
Открываю scope.sh и нахожу функцию:

Код: Выделить всё

handle_fallback() {
    echo '----- File Type Classification -----' && file --dereference --brief -- "${FILE_PATH}" && exit 5
    exit 1
}
Ну и естественно делаю выборку из последней в командной строке:

Код: Выделить всё

file --dereference --brief -- main.go
2022/03/06 14:36:57 open text.txt: no such file or directory
Сокращаю:

Код: Выделить всё

file main.go
2022/03/06 14:37:55 open text.txt: no such file or directory
Проверяю от рута:

Код: Выделить всё

sudo file --dereference --brief -- main.go
C source, ASCII text
Захожу в файловый менеджер от рута, так же все начинает работать.
Создаю нового пользователя. Все работает в его окружении. Сравниваю вывод домашней директории:

Код: Выделить всё

ls -ld /home/nez
drwx------. 39 nez nez 4096 Mar  6 15:03 /home/nez
su vacya -c 'ls -ld /home/vacya'
Password: 
drwx------ 14 vacya vacya 4096 Mar  6 15:11 /home/vacya
Видно, последний вывод без точки на конце. Проверяю selinux и acl:

Код: Выделить всё

getenforce
Disabled
getfacl $HOME
getfacl: Removing leading '/' from absolute path names
# file: home/nez
# owner: nez
# group: nez
user::rwx
group::---
other::---
Ничего лишнего.
Селинукс отключала сразу после установки системы. Проверяю на всякий случай атрибуты:

Код: Выделить всё

ls -ldZ /home/nez
drwx------. 39 nez nez unconfined_u:object_r:user_home_dir_t:s0 4096 Mar  6 15:16 /home/nez
lsattr -d /home/nez
--------------e------- /home/nez
su vacya
ls -ldZ /home/vacya
drwx------ 14 vacya vacya ? 4096 Mar  6 15:22 /home/vacya
lsattr -d /home/vacya
--------------e------- /home/vacya
С селинуксом не знакома, просто сразу после установки системы изменяю конфиг и перезагружаюсь:
cat /etc/selinux/config:

Код: Выделить всё

SELINUX=disabled
SELINUXTYPE=targeted
Боюсь усугубить, ищу совета
Спасибо сказали:
Аватара пользователя
olecya
Сообщения: 901
ОС: debian, fedora (i3-wm)

Re: ошибка в определении типа файла

Сообщение olecya »

Извиняюсь, по-моему, где-то бинарник создала с именем file.
Добавлено (15:54):
Удалила ~/go/bin/file
Перезагрузилась и все заработало. Как можно было не обратить внимание на лог команды file. Ведь видела же формат логирования golang, а то что он пытается открыть явно другой файл(обычное имя для теста text.txt) осталось без внимания.
Одно радует, хоть невнимательность меня держит в тонусе. :)
Добавлено (16:01):
Дико извиняюсь за беспокойство
Добавлено (16:44):
Да вот фиг там. main.go стал открываться, файлы без расширения тоже, но .mod .rs нет. Как то странно. Без расширения файловый менеджер определяет что внутри текст, а с расширением нет. Проверяю через тулзу file и xdg-open все выводится и открывается.
Я как-то пробовала писать свой ranger на си https://gitlab.com/nezowu/pix c библиотекой libmagic вот все открывается корректно. Это же я понимаю просто библиотека разработчика использующаяся так же и в file:

Код: Выделить всё

ldd $(which file)
	linux-vdso.so.1 (0x00007ffe31774000)
	libmagic.so.1 => /lib64/libmagic.so.1 (0x00007f1fa20d3000)
	libc.so.6 => /lib64/libc.so.6 (0x00007f1fa1ec9000)
	libz.so.1 => /lib64/libz.so.1 (0x00007f1fa1eaf000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f1fa211e000)
Вот вывод моего рейнджера:

Код: Выделить всё

ldd $(which pix)
	linux-vdso.so.1 (0x00007ffc72b16000)
	libncursesw.so.6 => /lib64/libncursesw.so.6 (0x00007f884219c000)
	libtinfo.so.6 => /lib64/libtinfo.so.6 (0x00007f884216d000)
	libmagic.so.1 => /lib64/libmagic.so.1 (0x00007f884213f000)
	libc.so.6 => /lib64/libc.so.6 (0x00007f8841f35000)
	libz.so.1 => /lib64/libz.so.1 (0x00007f8841f1b000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f88421f1000)
Добавлено (16:54):
При открытии файла go.mod получаю по выходу из менеджера в стдер:

Код: Выделить всё

Failed to recognize file format.
При открытии файлов с расширением .rs получаю:

Код: Выделить всё

xdg-open: unexpected option '--'
Try 'xdg-open --help' for more information.
На всякий случай загружалась в гном-ксорг, все тоже.
Это похоже нужно попытать редхатовскую багзилу пока она еще доступна.
Спасибо сказали:
Аватара пользователя
olecya
Сообщения: 901
ОС: debian, fedora (i3-wm)

Re: ошибка в определении типа файла

Сообщение olecya »

Пока применила костыль в rifle.conf, в двух секциях добавила расширения, а в третьей xdg-open убрала метку окончания опций --:

Код: Выделить всё

#!mime ^text, label editor, ext xml|json|csv|tex|py|pl|rb|js|sh|php = ${VISUAL:-$EDITOR} -- "$@"
!mime ^text, label editor, ext xml|json|csv|tex|py|pl|rb|js|sh|php|mod|rs = ${VISUAL:-$EDITOR} -- "$@"

#label open, has xdg-open = xdg-open -- "$@"
label open, has xdg-open = xdg-open "$@"

#              !mime ^text, !ext xml|json|csv|tex|py|pl|rb|js|sh|php  = ask
              !mime ^text, !ext xml|json|csv|tex|py|pl|rb|js|sh|php|mod|rs  = ask
#label editor, !mime ^text, !ext xml|json|csv|tex|py|pl|rb|js|sh|php  = ${VISUAL:-$EDITOR} -- "$@"
label editor, !mime ^text, !ext xml|json|csv|tex|py|pl|rb|js|sh|php|mod|rs  = ${VISUAL:-$EDITOR} -- "$@"
Спасибо сказали:
Аватара пользователя
olecya
Сообщения: 901
ОС: debian, fedora (i3-wm)

Re: ошибка в определении типа файла

Сообщение olecya »

Даже так файл определяется корректно (что судя по регулярке именно так и происходит):

Код: Выделить всё

xdg-mime query filetype go/src/ml-pat/go.mod
text/plain
Это обычный sh скрипт:

Код: Выделить всё

grep 'file --brief --dereference' $(which xdg-mime)
        DEBUG 1 "Running file --brief --dereference --mime-type \"$1\""
        /usr/bin/file --brief --dereference --mime-type "$1" 2> /dev/null
Спасибо сказали:
Ответить