LinuxForum.Fans
Тема

Как графические файловые менеджеры открывают файлы.

Автор: Fat-Zer 14 сообщений 1885 просмотров
#241404
"drBatty" написал:
во вторых этот бегинер таки будет открывать файл в гуёвом ФМ, и таки у него вайн поставлен... в вайне и откроется...

с чего бы это? файлы же не по расширению классифицируются... другое дело, что в таком случае он ничего не увидит т.к. прога всё же консольная.

#241516
"Fat-Zer" написал:
с чего бы это? файлы же не по расширению классифицируются...

по имени. например файлы с именем *.exe это файлы wine
это верно для ls, mc, и гуёвых ФМ.

"Fat-Zer" написал:
другое дело, что в таком случае он ничего не увидит т.к. прога всё же консольная.

угу.

#241529
"drBatty" написал:
по имени. например файлы с именем *.exe это файлы wineэто верно для ls, mc, и гуёвых ФМ.

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

ЗЫ: на изменение репутации у меня оказывается прав не хватает...

#241637
"Fat-Zer" написал:
гм... не скажу за остальные, но конкверор, например, не только по расширению определяет формат... что там точно - сейчас сказать не берусь...

ну да, ещё права и тип файлов учитывается: каталог как папка, текстовый файл с правом исполнения часто не текст, а скрипт. Однако сейчас написал helloworld, переименовал в helloworld.exe, "открыл", попыталась открыть в wine. И иконка стала как для DOS-исполняемых файлов. На самом деле, что-бы определить тип файла так, как это делает file необходимо немереное количество времени, причём результат часто неправильный, а если файлов 100? А если больше?

У меня dolphin из KDE4.7.4

"Fat-Zer" написал:
на изменение репутации у меня оказывается прав не хватает...

ну отпишитесь одмину, что-то я сгоряча минусанул. Хотя по уму - всех надо за это минусовать :p

#241725
"drBatty" написал:
это, кстати неважно.

ну вообще-то я шутил, ясен пень, что неважно.

"Fat-Zer" написал:
не скажу за остальные, но конкверор, например, не только по расширению определяет формат... что там точно - сейчас сказать не берусь...

magicnumbers?

#241776
"NoXi0uZ" написал:
ну вообще-то я шутил, ясен пень, что неважно.

кроме шуток - не всегда это неважно. Беда в том, что исполняемые маздайные файлы кроме как по имени и не определить... У них же нет право использования...

#241789
"drBatty" написал:
У меня dolphin из KDE4.7.4

действительно... четвёртокеды такие тупые=)

text
alexander@goblin /tmp/exes $ ls -l
итого 2236
-rw-r--r-- 1 alexander users    3498 Мар 29 01:49 cpp.exe
-rwxr-xr-x 1 alexander users  796725 Мар 29 01:47 elf.exe
-rw-r--r--  1 alexander users  796725 Мар 29 01:57 elf-nox.exe
-rw-r--r-- 1 alexander users  139711 Мар 29 01:48 jpg.exe
-rw-r--r-- 1 alexander users 1343372 Мар 29 01:48 png.exe

конкверор 3.5.10 вот такой набор правильно открывает... только elf-nox.exe не знает, чем открыть... а 4-й что долфин, что конкверор - всё в вайн пихает >_<

"drBatty" написал:
что-бы определить тип файла так, как это делает file необходимо немереное количество времени, причём результат часто неправильный, а если файлов 100? А если больше?

не сказал бы...

Показать
text

alexander@goblin /tmp/exes $ time file * >/dev/null

real 0m0.017s user 0m0.009s sys 0m0.005s alexander@goblin /usr/bin $ ls |wc -l 3663 alexander@goblin /usr/bin $ time file * >/dev/null

real 0m27.854s user 0m1.489s sys 0m0.502s # повторно alexander@goblin /usr/bin $ time file * >/dev/null

real 0m1.531s user 0m1.337s sys 0m0.187s alexander@goblin ~/Desktop $ ls |wc -l 64 alexander@goblin ~/Desktop $ time file * >/dev/null

real 0m0.406s user 0m0.053s sys 0m0.014s alexander@goblin /usr/kde/3.5/share $ find . -type f |wc -l 18932 alexander@goblin /usr/kde/3.5/share $ time file $(find . -type f) >/dev/null

real 0m36.273s user 0m14.914s sys 0m1.198s # повторно alexander@goblin /usr/kde/3.5/share $ time file $(find . -type f) >/dev/null

real 0m16.723s user 0m16.261s sys 0m0.397s

памяти под кеш ~1Г. ЦП - коре2
более чистый тест(свободной памяти ~3Г):

Показать
text

alexander@goblin /usr/kde/3.5/share $ find . -type f >/tmp/list
alexander@goblin /usr/kde/3.5/share $ wc -l /tmp/list
18932 /tmp/list
alexander@goblin /usr/kde/3.5/share $ time file $(cat /tmp/list) >/tmp/types

real 0m37.569s user 0m14.625s sys 0m1.039s alexander@goblin /usr/kde/3.5/share $ wc -l /tmp/types 18932 /tmp/types alexander@goblin /usr/kde/3.5/share $ time file $(cat /tmp/list) >/dev/null

real 0m13.824s user 0m13.512s sys 0m0.304s alexander@goblin /usr/kde/3.5/share $ time file $(cat /tmp/list) >/dev/null

real 0m13.830s user 0m13.581s sys 0m0.244s alexander@goblin /usr/kde/3.5/share $ cd /usr/portage/distfiles/ alexander@goblin /usr/portage/distfiles $ ls|wc -l 9407 alexander@goblin /usr/portage/distfiles $ time file * >/dev/null

real 1m44.844s user 0m4.562s sys 0m1.763s alexander@goblin /usr/portage/distfiles $ time file * >/dev/null

real 0m3.854s user 0m3.342s sys 0m0.509s

#241801

"Fat-Zer" написал:
не сказал бы...
ну это пока дело не дойдёт до текстовых документов (а их у меня очень много). Естественно, что-бы отличить два исполняемых файла, достаточно первых 4х байт. Когда речь заходит о куче текста... Там приходится довольно значительную часть текста обрабатывать. Правил (они в /etc/file/magic/) довольно много, и они довольно сложные. Конечно вторая корка вытягивает, но просто имя прочитать с правами и атрибутами как минимум в 100 раз быстрее. Ну и право чтения файла не нужно.
#241808
"drBatty" написал:
ну это пока дело не дойдёт до текстовых документов (а их у меня очень много).

простым смертным, которые текст в блокнотах открывают в общем то пофиг... так что для текстовых распознавание можно просто отключить - libmagic умный, он это дело позволяет настраивать... а там уж и по расширению...

кроме того одно дело для 100500-т файлов определять, какую иконку поставить и совсем другое - определить какой прогой один файл открывать... у последнего оверлоад минимальный...

"drBatty" написал:
(они в /etc/file/magic/)

такого нет, есть только /usr/share/misc/magic.mgc
ну и тест с текстом:

text

alexander@goblin /usr/src/linux $ find . -type f >/tmp/list
alexander@goblin /usr/src/linux $ wc -l /tmp/list
47306 /tmp/list
alexander@goblin /usr/src/linux $ time file $(cat /tmp/list) >/dev/null

real 4m47.689s user 4m45.847s sys 0m1.554s alexander@goblin /usr/src/linux $ time file -e encoding -e ascii $(cat /tmp/list) >/dev/null

real 0m10.675s user 0m9.867s sys 0m0.767s

#241811
"Fat-Zer" написал:
простым смертным, которые текст в блокнотах открывают в общем то пофиг...

они просто не знают о существовании других файлов.

"Fat-Zer" написал:
кроме того одно дело для 100500-т файлов определять, какую иконку поставить и совсем другое - определить какой прогой один файл открывать... у последнего оверлоад минимальный...
открывать файл - оно понятно, но ведь перед этим надо папку открыть, и обычно не одну. Это вам не линуксовая консоль - тут щёлкать и щёлкать ;)
"Fat-Zer" написал:
такого нет, есть только

если нет, то надо ВАШ мануал читать, сколько повторять-то можно? :(
у меня так:

FILES
/etc/file/magic.mgc Default compiled list of magic.
/etc/file/magic Directory containing default magic files.

у вас видно в один собрали...

#241812

"Fat-Zer" написал:
ну и тест с текстом:
так а толку? я говорил, что "более чем в 100 раз дольше", вы мне тут доказываете, что "быстро". Ну я рад за вас, что у вас "быстро" с вашими файлами и на вашем железе.
#243871

Не понял темы. Но есть MIME типы, есть стандарты,
Shared MIME-info Database - http://standards.freedesktop.org/shared-mime-info-spec/shared-mime-info-spec-latest.html
XDG Base Directory Specification - http://standards.freedesktop.org/basedir-spec/latest/

Есть переменные которые хранят пути где лежат файлы настройки mime (mimeapps.list) типа $XDG_DATA_DIRS.
Предпочтения пользователей пишутся в /home/user/.local/share/applications/mimeapps.list (как минимум для гном).
Есть например файлы .десктоп, типа /usr/share/applications/deluge.desktop в которых указывается mime тип.
Есть еще /etc/gnome-vfs-mime-magic как определить тип по внутреностям файла.
Вы про это?

#243876
"drBatty" написал:
так а толку? я говорил, что "более чем в 100 раз дольше", вы мне тут доказываете, что "быстро". Ну я рад за вас, что у вас "быстро" с вашими файлами и на вашем железе.

просто как подтверждение того, что если не лезть внутрь текстовых файлов, то получается в 30 раз быстрее.

"mogul82" написал:
Вы про это?

как fm определяет mime тип, по шаблону из /usr/share/mime (или откуда там...) или с помощью libmagic (аналогично file).

#243878
"Fat-Zer" написал:
как fm определяет mime тип, по шаблону из /usr/share/mime (или откуда там...) или с помощью libmagic (аналогично file).

Парсятся файлы о которых я говорил. File им не нужен.
Вот в мане нашел, что file парсит файлы типа magic.mgc.

Войдите или зарегистрируйтесь, чтобы ответить.