`

[转载]Linux 的文件打开方式关联

阅读更多

转载自 : http://hi.baidu.com/bamboolsu/blog/item/a5e1d0452ca09442500ffe5f.html

 

从总体上讲 /etc/gnome/defaults.list 保存了全局的打开方式
~/.local/share/applications/mimeapps.list 保存了个人的打开方式
当两着不一致是,优先采用局部的个人设置。

例如,ubuntu8.04下多媒体文件默认是用Totem打开的,如果你想要改成用smplayer(本人比较喜欢用这个)来打开的话,可以按照以下步聚来进行:

1.进入/etc/gnome目录 命令 cd /etc/gnome
2.复制要改变打开方式的那些内容行到mimeapps.list文件 命令 grep “totem” defaults.list >> ~/.local/share/applications/mimeapps.list
3.进入~/.local/share/applications目录 命令 cd ~/.local/share/applications
4.编缉mimeapps.list文件 命令: sudo vim mimeapps.list
5.在vim中执行 命令:%s/totem/smplayer/g
6.然后执行保存命令:wq
7.完成

想要改其它类型的可照此类推,比如我就把音频文件换成了audacious来打开,文本文件用gvim来默认打开。
[leo@localhost /]$ sudo find . -name "defaults.list"
./usr/share/kde-settings/kde-profile/default/share/applications/defaults.list
./usr/share/applications/defaults.list
./usr/local/share/applications/defaults.list



Linux文件关联详解

Linux下的文件关联比较科学,并不是Windows下文件扩展名那么简单,所以你不用在意扩展名是什么

我们知道在Windows 下,双击一个可执行文件,文件管理器会自动运行这个应用程序。而双击一个数据文件时,文件管理器会用与之关联的应用程序打开它。数据文件与应用程序之间的 关联是通过注册表来实现的:文件管理器查询注册表,找到数据文件对应的应用程序,然后运行这个应用程序,并把数据文件的文件名作为命令行参数传给它。

这 种文件关联的方式非常好用,省去了先起动应用程序再打开文件的麻烦。Linux下的桌面环境也有类似的功能,而且实现方式更合理。最近负责开发一个资源管 理器,本来GNOME有一个功能强大的资源管理器Nautilus,只是它过于庞大,不但有超过 10万行的代码,还依赖于libgnome、gnome-vfs和CORBA等,故不适合于嵌入式应用。最终我们决定自己开发一个简化的资源管理器,但又 要尽量兼容现有的应用程序,这要了解相关标准,文件关联方式是其中之一。把这几天学到的知识做个笔记吧,供有兴趣的朋友参考:

首先让我们看 看文件关联要做些什么。

1.数据文件与应用程序的关联。一个应用程序通常只能打开一些特定的数据文 件,比如图片浏览工具可以打开PNG、BMP和JPEG等图片文件。打开一词的意义比较宽泛,这里包括:打开、播放、安装、编辑和打印等等。

2.文件类型信息。资源管理器把数据 文件列出来时,通常会用一个图标来标识这类文件,同时也会加上一个简短的名称,以便用户可以很容易把它与其它类型的文件区分开来。

下面我们 看看linux下是如何实现的。

1.判断文件类型。

文件的数量是无限的,我们只能按文件类型来处理。如何判断一个文件所 属的文件类型呢?可能有人会说,很简单,用扩展名区分就行了。没错,用扩展名可以做到,但这种方法有两个缺陷:一方面它不是很精确,相同扩展名的文件的类 型可能完全不同,比如dat文件,可能是一个视频文件,也可能是一个普通数据文件。另一方面它不是很准确,扩展名可以任何改动,为了某种目的,完全可以把 exe扩展名改为htm扩展名。
而且在Linux下扩展名只是一个可选项,很多文件根本没有扩展名,所以纯粹采用文件扩展名的方式来判断肯定是不行的。为了更好的判断文件类型,在 linux下同时采用两种方式:优先采用magic方式,其次才采用文件扩展名方式。所谓magic方式,就是根据文件内容来判断。绝大多数文件,内部都 有一些特定的标记,这些标记称为magic,比如BMP图片文件以BM两个字符开头,BM就是一个magic。虽然即使采用了双保险机制也有误判的可能, 但概率已经大大降低了。

2.文件类型的表示。
文件类型如何表示呢?我们说JPEG 是图片文件,说txt是文本文件,WML是XML文件。这种分类很直观,但也有几个问题:对JPEG文件来说,称它图片文件太笼统了。有的图片浏览工具虽 然能够打开大部分图片文件,但不一定能打开所有图片文件,它需要更详细的文件类型信息。对txt和WML来说,它们其实都是文本文件,有的编辑器可能以同 样的方式处理它们。为了避免分类太细或者太粗,linux采用了MIME(可以参考相关RFC)规范,它用一种层次型的方式来分类,如:
JPEG文件:image/jpeg
文本文件:text/plain
XML文件:text/xml
这种分类方式就可以粗细兼顾了。

3.文件类型的数据信息。
在linux下,关于文件类型的信息通常放在/usr/share/mime、/usr/local/share/mime和用户目录下,所有应用程序可 以共享这些信息。在该目录下,一般会有以下这些文件:
aliases:文件类型的别名。比如application/pdf 有时也称为application/x-pdf 。
magic:各种文件的内部标识,用于从文件内容来判断文件类型。如BMP图片文件以BM开头。
globs:扩展名与文件类型的对应关系。如*.cpp文件是text/x-c++src类型的。
packages目录:用于安装新文件类型用。
其它子目录及其下的文件:更详细的描述各种文件类型。比如image下的jpeg.xml文件描述了jpeg文件类型。为了方便国际化,这些描述信息有各 种语言版本。

4.图标文件与数据文件的关联。
在资源管理器中,通常用不同的图标来区分不同的文件类型。同时图标也是桌面主题相关的,主题不同,图标的大小和外观也不一样。图标文件通常存放在/usr /share/icons/主题/大小/mimetypes目录下。
文件类型与图标文件的对应关系是通过文件名来实现的。比如,JPEG文件对应的图标文件为gnome-mime-image-jpeg.png。
(这块不是很确定,有待进一步研究)

5.应用程序与数据文件的关联。
应用程序与数据文件的关联是通过.desktop文件来实现的。应用程序要出现在开始菜单中或者桌面上,它要提供一个desktop文件才行。应用程序安 装之后,desktop文件通常安装到/usr/share/applications下。
可以在desktop文件中,指明其可以操作的文件类型。如,软件包安装程序可以操作rpm文件,它的desktop文件(system- install-packages.desktop)内容为:

[Desktop Entry]
Name=Install Packages
GenericName=Install Packages
Comment=Install new packages on the system
MimeType=application/x-rpm;
Exec=/usr/bin/system-install-packages %F
Terminal=false
Type=Application
Icon=system-config-packages.png
Encoding=UTF-8
NoDisplay=true
MimeType项指明它可以操作rpm类型的文件。

 

 

 

----------------------EOF-------------

 

分享到:
评论

相关推荐

    linux打开文件数

    在Linux系统中,对文件的管理是其核心功能之一,其中“打开文件数”是一个重要的概念,涉及到系统资源管理和性能优化。本文将深入探讨Linux如何管理打开文件数,包括查看当前打开文件数的方法、理解系统限制以及如何...

    linux 实验报告 文件系统与文件管理.pdf

    读权限(r)允许指定的用户可以打开文件并阅读其内容。 写权限(w)允许指定的用户可以打开文件并修改其内容。 执行权限(x)允许指定的用户运行(即执行)一个二进制文件文件或者把一个 shell 脚文件当做命令来...

    Linux文件系统的模拟实现.pdf

    在内存中,Linux文件系统有系统打开文件表、活动索引节点表、用户打开文件表以及文件缓冲区等。 Linux文件系统的模拟实现可以分为三个部分:文件管理、目录管理和存储管理。文件管理包括文件的创建、打开、读写、...

    linux 文件系统 关系图

    4. **文件对象**:代表打开的文件实例,与进程关联,提供对文件的操作接口。 这四个对象之间紧密相连,共同构成了Linux文件系统的核心架构。超级块为文件系统的管理和维护提供了全局视图;索引节点则是文件属性和...

    Linux虚拟文件系统全面剖析——打开、读、写逻辑v0.1

    `do_sys_open`首先通过`build_open_flags`设置需要打开文件的标志(`open_flags`),然后通过`get_unused_fd_flags`获取一个未使用的文件描述符(`fd`)。接着,通过`do_filp_open`获取`file`对象,并通过`fd_...

    模拟LINUX文件系统及终端

    (7)cat …: 打开文件。 (8)copy …: 拷贝文件,除支持模拟Linux文件系统内部的文件拷贝外,还支持host文件系统与模拟Linux文件系统间的文件拷贝。 (9)del …: 删除文件:删除指定文件,不存在时给出出错信息。 (10)...

    模拟Linux文件系统

    7. **inode**:在Linux文件系统中,每个文件都关联有一个inode(索引节点),存储文件的元信息,如大小、修改时间、权限等。在模拟中,你需要设计一个结构来模拟inode。 8. **磁盘管理**:模拟文件系统需要模拟磁盘...

    Linux文件IO操作

    在 Linux 中,每一个打开的文件都与一个称为**文件描述符**的非负整数相关联。这个整数用于唯一标识该文件,并且可以在后续的文件操作中使用。默认情况下,每个程序都有三个预定义的文件描述符: - **标准输入** ...

    linux文件IO之整理笔记

    其中,path 是要打开或创建的文件的名字,oflag 是打开文件的方式,mode 是文件的存取许可权位。oflag 参数可以是以下几个常数的组合: * O_RDONLY:只读打开 * O_WRONLY:只写打开 * O_RDWR:读、写打开 * O_...

    linux下的文件过滤驱动

    VFS是Linux内核提供的一套接口,使得不同的文件系统可以共存并为用户提供统一的访问方式。文件过滤驱动通常通过以下几种方法介入VFS层: 1. **hooking系统调用**:通过替换或扩展内核中的系统调用表,使得在执行...

    Qt文件浏览器,Linux

    5. 链接到外部应用程序:可以关联文件类型,如双击打开文本文件用文本编辑器,播放音乐文件用音乐播放器等。 6. 多窗口支持:允许同时打开多个文件浏览器窗口,便于在不同目录间切换和比较。 7. 快捷菜单:右键点击...

    window 下打开linux 文件查看器

    描述中提到的情况就是这种情况的具体体现:在Linux环境下创建的文本文件,当使用Windows的记事本打开时,由于不兼容的编码或换行方式,内容可能呈现为乱码。 `nppInstaller`标签暗示了解决这个问题的一种工具——...

    linux下文件操作

    在Linux下进行文件操作时,通常会用到文件描述符,这是用于标示打开文件的一个整数,用于区分各种文件类型和进行各种文件操作。 1. 普通文件是存储在磁盘上的常规数据文件,它允许用户进行随机访问,即通过指针定位...

    linux内核中读写文件数据方式详解

    在Linux内核中打开文件主要通过`filp_open()`函数实现,其原型如下: ```c struct file *filp_open(const char *filename, int open_mode, int mode); ``` - **参数说明**: - `filename`: 需要打开或创建的文件名...

    linux 文件编程例子

    本教程将通过三个简单的实例——文件拷贝、打开文件以及创建文件,深入讲解Linux中的open()、read()和write()函数的用法。这些基本操作对于理解和编写与文件相关的任何程序都是必要的。 首先,我们来看`file_cp.c`...

    Linux虚拟文件系统对物理文件的管理

    这个结构中包含了代表打开文件的对象数组,每次进程调用文件操作函数(如`open`)时,都会返回一个文件描述符,这个描述符实际上是`files_struct`中`file`数组的一个下标,用于标识进程打开的文件。 综上所述,...

    linux 文件系统源码

    VFS处理文件操作的通用部分,如打开、关闭、读取和写入文件,同时管理和调度不同文件系统的具体操作。 2. **ext2**:扩展文件系统第二版,是Linux早期广泛使用的文件系统。它提供了良好的性能和稳定性,但不支持...

    修改linux进程可打开的文件数的限制open files

    修改linux进程可打开的文件数的限制open files linux中一切都是文件 默认linux一个进程可打开1024个文件 大并发需要达到5万个文件描述符FD,你必须修改该参数值才行

Global site tag (gtag.js) - Google Analytics