热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Linux上的文件类型与默认图标

linux,上,的,文件

引言

也许小伙伴们对 Linux 已经有一定程度的了解,或者已经是一名能够在工作和生活中活用它的 Linux 用户了。随着桌面环境的不断发展,Linux 系统已经不再仅仅是一个面向极客和开发者的操作系统了,在 PC 上,上手 Linux 桌面已经可以变得像上手Windows 桌面一样简单。

本篇文章是一篇纯黑的技术软文,讲的是我们平时一般不会在意的东西,而且不会涉及具体编程方面的知识,所以小伙伴们不用担心文章过于晦涩难懂,尽情的一边喝茶一边涨知识吧!

Windows上的文件类型与默认图标

在Windows上,文件类型基于唯一后缀名进行区分,比如——文本类型的后缀名是”.txt”,而Win32应用程序的后缀名是“.exe”。在win10系统中,这些后缀名默认被隐藏,在文件管理器的选项中更改设置为显示,就能够看到每个文件的后缀名了。

对于每一种文件类型,Windows上都有一个默认图标(一般exe的图标不是默认的,而是应用自己定制的),它的默认图标可以由默认打开它的应用决定,比如——使用winrar作为默认应用打开”.zip”压缩文件,那么所有的”.zip”类型文件默认图标都会变成winrar的图标;而使用2345好压作为默认打开应用,默认图标又会改变。

Linux与Windows并不完全相同

在Linux系统上,有一些文件没有后缀名,比如Linux上的文本文件,即使不加txt后缀,一样的能够作为文本文件存在并被正确地显示和打开。

我们右键文本文件图标,打开属性窗口,可以看到“类型”: 

我们可以推测:默认图标的显示是与这个类型属性相关的。

让我们做一个实验

为了验证这个结论,我们需要做一个小实验。

  • 实验系统:Ubuntu Kylin 18.10

  • 实验对象:doc、docx类型文件

  • 实验方法:安装/卸载wps

也许大家没有注意过,在安装或者卸载了系统上的wps以后,doc和docx等类型文件的默认图标也改变了(如果没有,刷新或者重启一下)。

一般从优麒麟官网上下载的增强版自带了wps,我们打开一个目录,创建一个doc和docx文档: 

打开属性窗口: 

可以看到它们的文件类型,那么接下来我们打开终端(Ctrl+Alt+T),输入:

sudo apt remove wps-office 

卸载wps,接下来回到刚才创建的doc和docx所在的目录,刷新一下:

这个时候的默认图标类型已经变了,接着再打开属性: 

同样的文件,文件类型改变的同时图标也跟着改变,所以,之前所提出的推论是对的。 

那么,我们在安装/卸载wps的时候,它究竟做了什么?

MIME-Info database

我们可以看到,在卸载wps的时候,出现了一些mime相关的配置,事实上,Linux上的文件类型标准就是这个MIME-Info database,所有文件类型相关的配置,包括默认图标,都是在这个database中定义的。

大家如果有兴趣,可以参考:https://specifications.freedesktop.org/shared-mime-info-spec/shared-mime-info-spec-0.18.html

‘/usr/share/mime/packages’目录下存放着相关配置文件,其中freedesktop.org.xml 是 Linux 默认的文件类型基准。在这里,我们先找到 wps-office-wps.xml,并打开: 

其中,comment、mime-type就是属性窗口中的文件类型;

alias type,顾名思义,是mime-type的别名,所以这些文件类型就被wps-office.doc覆盖了;

generic-icon name,即文件类型的默认图标名;

glob partten,如果文件名中有匹配,则认为是该类型。

在/usr/share/icons目录下存放着默认图标: 

Linux的判断文件类型的最优先基准往往是通过文件名中的字段,如果字段和MIME-database匹配,则认为是该文件类型。然而,并非所有文件类型都规定了匹配字段,它们依旧能够确定类型,但是如果重命名后包含了MIME-database的匹配字段,则会优先使用对应类型覆盖原有的类型。

实际上,在之前举出的本文件创建的例子中,不需要后缀名的原因是文本类型的文件在创建的时候已经被赋予了MIME type,只要文件名不与其它MIME type的基准冲突,这个文本文件就能正常的显示和打开。

DIY一个文件类型的图标

小伙伴们也许现在还有点一头雾水,没关系,接下来的干货才是重头戏;前面的看不懂?没关系,自己动手做一次,马上就理解了。

可以看到,命名为.so的文件的默认图标已经被小编改成了自己的图案,那么究竟是怎么做到的呢?接下来我们一步一步的完成。

1、准备图标

首先,我们需要准备自己的文件类型图片,一般使用png格式即可,文件图标可以在网上下载自己喜欢的,也可以使用GIMP自己绘制然后导出,小编这里为了方便,就自己简单的画了一下。GIMP可以在开始菜单中搜索gimp得到:

关于GIMP的使用,小编也是小白所以就不罗嗦了,大家有兴趣的话自行百度一下吧。

我们打开/usr/share/icons/ukui-icon-theme目录:

我们把准备好的图标放进对应尺寸文件夹的mimetypes目录下,比如48x48的png放到/usr/share/icons/ukui-icon-theme/48x48/mimetypes目录下。

由于在/usr/share目录下操作需要管理员权限,所以建议以管理员身分运行文件管理器,优麒麟18.10上,在终端输入:

sudo peony

就可以以管理员身分运行文件管理器,当然小伙伴们也可以使用sudo cp在终端操作。

还有,这里一定要注意,我们不同尺寸目录下的图标文件名必须一样,不然等会儿图片会找不全。

2、编写自己的配置文件

就像wps做的那样,我们也需要自己写一个.xml文件来覆盖原有的文件类型,这同样需要管理员权限。

我们在/usr/share/mime/packages目录下创建一个文本文件,命名为XXX.xml(这里小编的是sharedlib.xml),输入以下内容。

   kylin shared lib     

    最关键的是alias type、generic-icon name和glob pattern三项。保存退出。 

3、更新

现在我们的.so文件还没有变,因为我们还需要手动更新它。

依次执行:

sudo gtk-update-icon-cache /usr/share/icons/ukui-icon-theme/ sudo update-mime-database -V /usr/share/mime

第一条命令将我们的自定图片更新到cache中,使得文件管理器能够通过cache找到我们的icon;

第二条命令将我们对配置的更改更新至MIME-database中,这样我们的自定义配置就生效了。

我们刷新一下在看看,.so文件是不是变了?打开.so文件的属性,发现它的内容和mime-type也已经变成了我们自己写的类型。

也许有小伙伴们会问,为什么只有.so文件变了,.so.1.2.3之类的文件没有变呢?这就是glob参数的作用了,大家有兴趣可以研究一下freedesktop.org.xml文件,里面有对于application/x-sharedlib原来glob的标注,不光是.so,也能够识别类似.so.1.2.3的类型。

不知到大家是否有所收获呢?本篇文章虽然没有涉及代码编程,但是不同的人看,一定会有不同的体会和收获吧,在行文中小编凸显了一些细节,也略写了一些细节,希望大家看完这篇软文以后能够有所精进,让我们在Linux的道路上共同进步吧。


推荐阅读
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • Redis底层数据结构之压缩列表的介绍及实现原理
    本文介绍了Redis底层数据结构之压缩列表的概念、实现原理以及使用场景。压缩列表是Redis为了节约内存而开发的一种顺序数据结构,由特殊编码的连续内存块组成。文章详细解释了压缩列表的构成和各个属性的含义,以及如何通过指针来计算表尾节点的地址。压缩列表适用于列表键和哈希键中只包含少量小整数值和短字符串的情况。通过使用压缩列表,可以有效减少内存占用,提升Redis的性能。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 本文讨论了在Linux系统中,使用chown命令将django项目目录下的static目录的拥有者从root改为eureka的问题。作者尝试了多种命令,包括chown和sudo chown等,但都没有成功修改拥有者。文章提供了相关目录的权限信息,并补充了项目所在磁盘和操作系统的信息。 ... [详细]
  • 本文介绍了在Python中使用zlib模块进行字符串的压缩与解压缩的方法,并探讨了其在内存优化方面的应用。通过压缩存储URL等长字符串,可以大大降低内存消耗,虽然处理时间会增加,但是整体效果显著。同时,给出了参考链接,供进一步学习和应用。 ... [详细]
author-avatar
手机用户2502886695
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有