Linux:桌面系统中的文件后缀和类型

锦通  金牌会员 | 2024-7-12 08:02:11 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 675|帖子 675|积分 2025

干系阅读
Linux
https://blog.csdn.net/weixin_45791458/category_12234591.html?spm=1001.2014.3001.5482


        Linux中的文件后缀与Windows系统有些差别,由于其似乎没有很紧张,一个文件是否可执行对后缀没有要求。但是,后缀依然可以用于表示文件类型,也可以据此选择差别类型文件的默认打开方式。
        在Linux系统中,MIME(多用途互联网邮件扩展)文件类型机制是用来识别和处置惩罚差别类型文件的一种方式。MIME类型,也称为互联网媒体类型,最初是为了在电子邮件系统中识别差别格式的文件而计划的,但厥后被广泛应用于HTTP传输中以及在利用系统如Linux中识别文件格式。
        MIME类型通常由两部门构成,类型(type)和子类型(subtype),用斜线分隔。例如,test/html表示HTML文档,image/jpeg表示JPEG图像文件。
        /usr/share/mime目录中有一些XML文件,它们是主动生成的,在安装或更新shared-mime-info包时由update-mime-database命令更新,它们规定了MIME类型、以及文件后缀和文件类型的映射关系。
        /usr/share/mime目录下的types文件中包罗了目前的全部MIME类型,如下所示。
  1. ***********************
  2. text/xmcd
  3. video/3gpp
  4. video/3gpp2
  5. video/annodex
  6. video/dv
  7. video/isivideo
  8. video/mp2t
  9. video/mp4
  10. video/mpeg
  11. video/ogg
  12. video/quicktime
  13. video/vnd.mpegurl
  14. video/vnd.rn-realvideo
  15. video/vnd.vivo
  16. video/wavelet
  17. video/webm
  18. video/x-anim
  19. video/x-flic
  20. ***********************
复制代码
        下面用/usr/share/mime/text目录下x-python.xml文件进行举例说明。
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <mime-type xmlns="http://www.freedesktop.org/standards/shared-mime-info" type="text/x-python">
  3.   <!--Created automatically by update-mime-database. DO NOT EDIT!-->
  4.   <comment>Python script</comment>
  5.   <comment xml:lang="ar">سكربت بايثون</comment>
  6.   <comment xml:lang="be@latin">Skrypt Python</comment>
  7.   <comment xml:lang="bg">Скрипт — Python</comment>
  8.   <comment xml:lang="ca">script Python</comment>
  9.   <comment xml:lang="cs">skript Python</comment>
  10.   <comment xml:lang="da">Pythonprogram</comment>
  11.   <comment xml:lang="de">Python-Skript</comment>
  12.   <comment xml:lang="el">Δέσμη ενεργειών Python</comment>
  13.   <comment xml:lang="en_GB">Python script</comment>
  14.   <comment xml:lang="eo">Python-skripto</comment>
  15.   <comment xml:lang="es">secuencia de órdenes en Python</comment>
  16.   <comment xml:lang="eu">Python script-a</comment>
  17.   <comment xml:lang="fi">Python-komentotiedosto</comment>
  18.   <comment xml:lang="fo">Python boðrøð</comment>
  19.   <comment xml:lang="fr">script Python</comment>
  20.   <comment xml:lang="ga">script Python</comment>
  21.   <comment xml:lang="gl">Script en Python</comment>
  22.   <comment xml:lang="he">תסריט Python</comment>
  23.   <comment xml:lang="hr">Python skripta</comment>
  24.   <comment xml:lang="hu">Python-parancsfájl</comment>
  25.   <comment xml:lang="ia">Script Python</comment>
  26.   <comment xml:lang="id">Skrip Python</comment>
  27.   <comment xml:lang="it">Script Python</comment>
  28.   <comment xml:lang="ja">Python スクリプト</comment>
  29.   <comment xml:lang="kk">Python сценарийі</comment>
  30.   <comment xml:lang="ko">파이썬 스크립트</comment>
  31.   <comment xml:lang="lt">Python scenarijus</comment>
  32.   <comment xml:lang="lv">Python skripts</comment>
  33.   <comment xml:lang="ms">Skrip Python</comment>
  34.   <comment xml:lang="nb">Python-skript</comment>
  35.   <comment xml:lang="nl">Python-script</comment>
  36.   <comment xml:lang="nn">Python-skript</comment>
  37.   <comment xml:lang="oc">escript Python</comment>
  38.   <comment xml:lang="pl">Skrypt Python</comment>
  39.   <comment xml:lang="pt">script Python</comment>
  40.   <comment xml:lang="pt_BR">Script Python</comment>
  41.   <comment xml:lang="ro">Script Python</comment>
  42.   <comment xml:lang="ru">сценарий Python</comment>
  43.   <comment xml:lang="sk">Skript Python</comment>
  44.   <comment xml:lang="sl">Skriptna datoteka Python</comment>
  45.   <comment xml:lang="sq">Script Python</comment>
  46.   <comment xml:lang="sr">Питонова скрипта</comment>
  47.   <comment xml:lang="sv">Pythonskript</comment>
  48.   <comment xml:lang="tr">Python betiği</comment>
  49.   <comment xml:lang="uk">скрипт мовою Python</comment>
  50.   <comment xml:lang="vi">Văn lệnh Python</comment>
  51.   <comment xml:lang="zh_CN">Python 脚本</comment>
  52.   <comment xml:lang="zh_TW">Python 指令稿</comment>
  53.   <sub-class-of type="application/x-executable"/>
  54.   <sub-class-of type="text/plain"/>
  55.   <glob pattern="*.py"/>
  56.   <glob pattern="*.pyx"/>
  57.   <glob pattern="*.wsgi"/>
  58. </mime-type>
复制代码
        XML文件中类似<comment>ython script</comment>的字段,规定了在桌面系统下,text/x-python类型文件在进行查询时表现的类型。最后的<glob pattern="*.py"/>字段,规定了哪些后缀的文件会被识别为text/x-python类型,不加说明后缀是大小写不敏感的,即.py、.PY、.pY和.Py都会被识别为text/x-python类型。
        下面给出了一个大小写敏感的例子,出如今x-c++src.xml中,其中的<glob pattern="*.C" case-sensitive="true"/>字段说明白只有大写C后缀的文件才会被识别为text/x-c++src类型。
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <mime-type xmlns="http://www.freedesktop.org/standards/shared-mime-info" type="text/x-c++src">
  3.   <!--Created automatically by update-mime-database. DO NOT EDIT!-->
  4.   <comment>C++ source code</comment>
  5.   <comment xml:lang="ar">شفرة مصدر سي++</comment>
  6.   <comment xml:lang="be@latin">Kryničny kod C++</comment>
  7.   <comment xml:lang="bg">Изходен код — C++</comment>
  8.   <comment xml:lang="ca">codi font en C++</comment>
  9.   <comment xml:lang="cs">zdrojový kód C++</comment>
  10.   <comment xml:lang="da">C++-kildekode</comment>
  11.   <comment xml:lang="de">C++-Quelltext</comment>
  12.   <comment xml:lang="el">Πηγαίος κώδικας C++</comment>
  13.   <comment xml:lang="en_GB">C++ source code</comment>
  14.   <comment xml:lang="eo">C++-fontkodo</comment>
  15.   <comment xml:lang="es">código fuente en C++</comment>
  16.   <comment xml:lang="eu">C++ iturburu-kodea</comment>
  17.   <comment xml:lang="fi">C++-lähdekoodi</comment>
  18.   <comment xml:lang="fo">C++ keldukota</comment>
  19.   <comment xml:lang="fr">code source C++</comment>
  20.   <comment xml:lang="ga">cód foinseach C++</comment>
  21.   <comment xml:lang="gl">código fonte de C++</comment>
  22.   <comment xml:lang="he">קוד מקור של C++‎</comment>
  23.   <comment xml:lang="hr">C++ izvorni kod</comment>
  24.   <comment xml:lang="hu">C++-forráskód</comment>
  25.   <comment xml:lang="ia">Codice-fonte C++</comment>
  26.   <comment xml:lang="id">Kode program C++</comment>
  27.   <comment xml:lang="it">Codice sorgente C++</comment>
  28.   <comment xml:lang="ja">C++ ソースコード</comment>
  29.   <comment xml:lang="ka">C++-ის საწყისი კოდი</comment>
  30.   <comment xml:lang="kk">C++ бастапқы коды</comment>
  31.   <comment xml:lang="ko">C++ 소스 코드</comment>
  32.   <comment xml:lang="lt">C++ pradinis kodas</comment>
  33.   <comment xml:lang="lv">C++ pirmkods</comment>
  34.   <comment xml:lang="ms">Kod sumber C++</comment>
  35.   <comment xml:lang="nb">C++-kildekode</comment>
  36.   <comment xml:lang="nl">C++-broncode</comment>
  37.   <comment xml:lang="nn">C++-kjeldekode</comment>
  38.   <comment xml:lang="oc">còde font C++</comment>
  39.   <comment xml:lang="pl">Kod źródłowy C++</comment>
  40.   <comment xml:lang="pt">código origem C++</comment>
  41.   <comment xml:lang="pt_BR">Código-fonte C++</comment>
  42.   <comment xml:lang="ro">Cod sursă C++</comment>
  43.   <comment xml:lang="ru">исходный код C++</comment>
  44.   <comment xml:lang="sk">Zdrojový kód jazyka C++</comment>
  45.   <comment xml:lang="sl">Datoteka izvorne kode C++</comment>
  46.   <comment xml:lang="sq">Kod burues C++</comment>
  47.   <comment xml:lang="sr">Ц++ изворни ко̂д</comment>
  48.   <comment xml:lang="sv">C++-källkod</comment>
  49.   <comment xml:lang="tr">C++ kaynak kodu</comment>
  50.   <comment xml:lang="uk">вихідний код мовою C++</comment>
  51.   <comment xml:lang="vi">Mã nguồn C++</comment>
  52.   <comment xml:lang="zh_CN">C++ 源代码</comment>
  53.   <comment xml:lang="zh_TW">C++ 源碼</comment>
  54.   <sub-class-of type="text/x-csrc"/>
  55.   <glob pattern="*.cpp"/>
  56.   <glob pattern="*.cxx"/>
  57.   <glob pattern="*.cc"/>
  58.   <glob pattern="*.C" case-sensitive="true"/>
  59.   <glob pattern="*.c++"/>
  60. </mime-type>
复制代码
        下图展示了在桌面系统GNOME中,一个.py后缀文件的类型查询结果。 

        可以看出首先根据系统语言(这里是默认),表现了<comment>字段规定的类型名,并且在小括号中表现了MIME类型。
        差别的桌面系统的表现结果可能有差异,下面是桌面系统XFCE中,一个.py后缀文件的类型查询结果。

        其中根据系统语言(这里是zh_CN),表现了<comment>字段规定的类型名,即Python 脚本。
        需要注意的是,一个有后缀的文件,表现出来的类型是由后缀决定的,这可能与文件真实类型不符合。如一个可执行二进制文件,如果重定名以.py为后缀,则其表现出来的类型会是错误的Python 脚本。所以一个文件的后缀只是对其类型的一个暗示,但并不确保其准确性。如果要准确识别一个文件的类型,可以利用file命令,它是通过文件的魔术头识别文件类型的,因此更为准确,如下所示。
  1. $ file test.py
  2. test.py: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=8c8cfe14852611f912f695c4ff7fae0b6607382d, not stripped
复制代码
        对于没有后缀的文件,桌面系统会根据文件内容尝试推断其类型,即如果他是一个二进制文件,则可能推断为executable (application/x-executable)类型。下面是一个例子展示了一个没有后缀的jupyter+json格式的文件被精确识别为了Jupyter Notebook (application/x-ipynb+json)类型。
  1. {
  2. "cells": [
  3.   {
  4.    "cell_type": "markdown",
  5.    "metadata": {},
  6.    "source": [
  7.     "# 简单的Jupyter Notebook"
  8.    ]
  9.   },
  10.   {
  11.    "cell_type": "code",
  12.    "execution_count": 1,
  13.    "metadata": {},
  14.    "outputs": [],
  15.    "source": [
  16.     "print('Hello, world!')"
  17.    ]
  18.   }
  19. ],
  20. "metadata": {
  21.   "kernelspec": {
  22.    "display_name": "Python 3",
  23.    "name": "python3"
  24.   }
  25. },
  26. "nbformat": 4,
  27. "nbformat_minor": 2
  28. }
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

锦通

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表