精华内容
下载资源
问答
  • Linux下的文件类型及文件后缀名详解

    千次阅读 2013-11-19 14:29:51
    Linux下的文件类型及文件后缀名详解 1、Linux文件的扩展名; 一谈到文件类型,大家就能想到Windows的文件类型,比如file.txt、file.doc、file.sys、file.mp3、file.exe等,根据文件的后缀就能判断文件的类型。但在...

    Linux下的文件类型及文件后缀名详解

    1、Linux文件的扩展名;

    一谈到文件类型,大家就能想到Windows的文件类型,比如file.txt、file.doc、file.sys、file.mp3、file.exe等,根据文件的后缀就能判断文件的类型。但在Linux一个文件是否能被执行,和后缀名没有太大的关系,主要看文件的属性有关。但我们了解一下Linux文件的后缀名还是有必要的,特别是我们自己创建一些文件,最好还是加后缀名,这样做的目的是仅仅是为了我们的在应用时方便。

    现在的Linux桌面环境和Windows一样智能化,文件的类型是和相应的程序关联的。在我们打开某个文件时,系统会自动判断用哪个应用程序打开。如果从这方面来说,Linux桌面环境和Windows桌面没有太大的区别。

    在Linux中,带有扩展名的文件,只能代表程序的关联,并不能说明文件是可以执行,从这方面来说,Linux的扩展名没有太大的意义。

    file.tar.gz file.tgz file.tar.bz2 file.rar file.gz file.zip ... ... 这些大家都熟悉,是归档文件。要通过相应的工具来解压或提取;

    file.php 这个大家都知道吧,是能用php语言解释器进行解释,能用浏览器打开的文件;

    file.so 这类是库文件;

    file.doc file.obt 这是OpenOffice 能打开的文件;

    ... ...

    用一些工具创建的文件,其后缀也不相同,就看我们用什么工具了,比如 Gimp,gedit,OpenOffice 等工具,创建出来的文件后缀名也不一样。


    2、Linux 文件类型;

    Linux文件类型和Linux文件的文件名所代表的意义是两个不同的概念。我们通过一般应用程序而创建的比如file.txt、file.tar.gz ,这些文件虽然要用不同的程序来打开,但放在Linux文件类型中衡量的话,大多是常规文件(也被称为普通文件)。

    Linux文件类型常见的有:普通文件、目录、字符设备文件、块设备文件、符号链接文件等;现在我们进行一个简要的说明;


    2.1 普通文件;

    [root@localhost ~]# ls -lh install.log
    -rw-r--r-- 1 root root 53K 03-16 08:54 install.log

    我们用 ls -lh 来查看某个文件的属性,可以看到有类似 -rw-r--r-- ,值得注意的是第一个符号是 - ,这样的文件在Linux中就是普通文件。这些文件一般是用一些相关的应用程序创建,比如图像工具、文档工具、归档工具... .... 或 cp工具等。这类文件的删除方式是用rm 命令;


    2.2 目录;

    [root@localhost ~]# ls -lh
    总计 14M

    -rw-r--r-- 1 root root     2 03-27 02:00 fonts.scale
    -rw-r--r-- 1 root root   53K 03-16 08:54 install.log
    -rw-r--r-- 1 root root   14M 03-16 07:53 kernel-2.6.15-1.2025_FC5.i686.rpm
    drwxr-xr-x 2 1000 users 4.0K 04-04 23:30 mkuml-2004.07.17
    drwxr-xr-x 2 root root  4.0K 04-19 10:53 mydir
    drwxr-xr-x 2 root root  4.0K 03-17 04:25 Public

    当我们在某个目录下执行,看到有类似 drwxr-xr-x ,这样的文件就是目录,目录在Linux是一个比较特殊的文件。注意它的第一个字符是d。创建目录的命令可以用 mkdir 命令,或cp命令,cp可以把一个目录复制为另一个目录。删除用rm 或rmdir命令。


    2.3 字符设备或块设备文件;

    如时您进入/dev目录,列一下文件,会看到类似如下的;

    [root@localhost ~]# ls -la /dev/tty
    crw-rw-rw- 1 root tty 5, 0 04-19 08:29 /dev/tty
    [root@localhost ~]# ls -la /dev/hda1
    brw-r----- 1 root disk 3, 1 2006-04-19 /dev/hda1

    我们看到/dev/tty的属性是 crw-rw-rw- ,注意前面第一个字符是 c ,这表示字符设备文件。比如猫等串口设备;

    我们看到 /dev/hda1 的属性是 brw-r----- ,注意前面的第一个字符是b,这表示块设备,比如硬盘,光驱等设备;

    这个种类的文件,是用mknode来创建,用rm来删除。目前在最新的Linux发行版本中,我们一般不用自己来创建设备文件。因为这些文件是和内核相关联的。


    2.4 套接口文件;

    当我们启动MySQL服务器时,会产生一个mysql.sock的文件。

    [root@localhost ~]# ls -lh /var/lib/mysql/mysql.sock
    srwxrwxrwx 1 mysql mysql 0 04-19 11:12 /var/lib/mysql/mysql.sock

    注意这个文件的属性的第一个字符是 s。我们了解一下就行了。


    2.5 符号链接文件;

    [root@localhost ~]# ls -lh setup.log
    lrwxrwxrwx 1 root root 11 04-19 11:18 setup.log -> install.log

    当我们查看文件属性时,会看到有类似 lrwxrwxrwx,注意第一个字符是l,这类文件是链接文件。是通过ln -s 源文件名 新文件名 。上面是一个例子,表示setup.log是install.log的软链接文件。怎么理解呢?这和Windows操作系统中的快捷方式有点相似。

    符号链接文件的创建方法举例;

    [root@localhost ~]# ls -lh kernel-2.6.15-1.2025_FC5.i686.rpm
    -rw-r--r-- 1 root root 14M 03-16 07:53 kernel-2.6.15-1.2025_FC5.i686.rpm
    [root@localhost ~]# ln -s kernel-2.6.15-1.2025_FC5.i686.rpm  kernel.rpm
    [root@localhost ~]# ls -lh kernel*
    -rw-r--r-- 1 root root 14M 03-16 07:53 kernel-2.6.15-1.2025_FC5.i686.rpm
    lrwxrwxrwx 1 root root  33 04-19 11:27 kernel.rpm -> kernel-2.6.15-1.2025_FC5.i686.rpm


    3、关于本文;

       在Linux环境下一个文件是否能被执行,和后缀名没有太大的关系,主要看文件的属性有关。但我们了解一下Linux文件的后缀名还是有必要的,特别是我们自己创建一些文件,最好还是加后缀名,这样做的目的是仅仅是为了我们的在应用时方便。

         现在的Linux桌面环境和Windows一样智能化,文件的类型是和相应的程序关联的。在我们打开某个linux文件时,系统会自动判断用哪个应用程序打开。如果从这方面来说,Linux桌面环境和Windows桌面没有太大的区别。
         在Linux中,带有扩展名的文件,只能代表程序的关联,并不能说明文件是可以执行,从这方面来说,Linux的扩展名没有太大的意义。

     

    Linux下常见的文件扩展名


    *.php ------这个大家都知道吧,是能用php语言解释器进行解释,能用浏览器打开的文件;
    *.so -------这类是库文件;
    *.doc  *.obt --------这是OpenOffice 能打开的文件;

    .bz2 ------bzip2的压缩文件

    .gz ------gzip的压缩文件

    .tar ------tar打包文件(是包文件不是压缩文件)

    .tbz------tar打包并用bzip压缩文件

    .tgz-----tar打包并用gzip压缩的文件

    .au -----audio文件

    .gif -----gif图象文件

    .html/.htm-----HTML文件

    .jpg-----JPEG图象文件

    .pdf------电子文档(PDF格式的)

    .png-----PNG图象文件

    .ps------postscinpt文件(打印格式文件)

    .txt------纯文本文件

    .wav-----audio文件

    .xpm-----图象文件

    .conf-------配置文件

    .lock-------LOCK文件(用来判断一个文件或设备是否被使用)

    .rpm------REDHATPackage.Manager文件(套件包或软件包)

    .c -------C源程序代码文件

    .cpp------C++源程序代码文件

    .h -------C或C++程序的头文件

    .o------程序目标文件

    .pl------perl脚本文件

    .so-----类库文件

     

    以下是部分后缀的详细解释:

    1.*.sh

      sh是linux,unix命令,  用途:调用缺省 shell。  语法:请参阅 ksh 命令的语法。将 /usr/bin/sh 文件链接到 Korn shell。  描述:sh 命令调用缺省 shell 并使用它的语法和标志。链接到 /usr/bin/sh 路径的 shell 是缺省的 shell。操作系统的标准配置把 /usr/bin/sh 路径链接到 Korn shell。关于 Korn shell 功能的具体信息,请参阅《AIX 5L V5.2 系统用户指南:操作系统与设备》中的『Korn Shell 或 POSIX Shell 命令』。  标志:请参阅 Korn shell(ksh 命令)的标志。

      文件:/usr/bin/sh 包含 sh 命令。

     

    2.*.cfg

         这只是一个为开发及使用方便而"发明"的一个后缀名。这种文件没有固定的格式,用途也仅仅是保存用户的设置。一般为只读,也可以用于读写。

         同样,为了方便起见,里面的内容大多数时候也确实是文本。可以用任何文本编辑器打开。本例中用Source insight。

         智能手机中的文件:CFG 是一个引导文件, CFG 和TFS文件放在同一文件夹中,相当于程序里的头文件。tfs的cfg文件,可以用resource manager 生成。

          CFG(Config)脚本文件,一般用于程序读取指定值,以下为常见格式:
    例:

    102 (Home)
    115 (VolumeUp)
    114 (VolumeDown)
    248 (Reading)
    158 (Back)
    139 (Menu)
    end

    3. *.ko

       是Linux 2.6内核使用的动态连接文件的后缀名,也就是模块文件,用来在Linux系统启动时加载内核模块,一般是驱动程序。

       加载:

       modprobe module-name       or          insmod /path-to/module-name.ko
       但要注意的是,该模块在跟你系统环境类似的库及内核版本下编译才可以使用,否则会出错。

     

    4. *.conf

        程序配置文件 ,启动netmeeting

        应用系统中的配置文件,在类unix系统使用广泛,大多数同时有windows和类unix系统版本的软件也使用

     

    5. *.allow和*.deny

    /etc/hosts.allow和/etc/hosts.deny
         这两个文件是tcpd服务器的配置文件,tcpd服务器可以控制外部IP对本机服务的访问.这两个配置文件的格式如下:
        #服务进程名:主机列表:当规则匹配时可选的命令操作
        server_name:hosts-list[:command] 

         /etc/hosts.allow控制可以访问本机的ip地址,

         /etc/hosts.deny控制禁止访问本机的IP.

         如果两个文件的配置有冲突,以/etc/hosts.deny为准.下面是一个/etc/hosts.allow的示例:
    ALL:127.0.0.1 #允许本机访问本机所有服务进程
    smbd:192.168.0.0/255.255.255.0 #允许192.168.0.网段的IP访问smbd服务
    ALL关键字匹配所有情况,EXCEPT匹配除了某些项之外的情况,PARANOID匹配你想控制的IP地址和它的域名不匹配时(域名伪装)的情况.

     

    6. *.types

       在遇到有2个后缀的文件时,在该文件中检查这个有2个后缀的文件是否被定义了,以便选择合适的文件处理方法。

       This file controls what Internet media types are sent to the client for given file extension(s).

        每遇到一种后双重后缀名(如xxx.php.rar)的文件,Apache都会去conf/mime.types 文件中检查最后一个后缀, 如果最后一个后缀并没有在mime.types文件中定义, 则使用前一个后缀来解释 , 因为在默认情况下,rar并未在mime.types中定义, 故Apache会使用php后缀来解释文件。(这就是漏洞的原因所在)

     

    7. *.rc

        VC中以rc为扩展名的文件称为资源脚本文件, 其中包含了应用程序中用到的所有的windows资源, rc文件可以直接在VC集成环境中以可视化的方法进行编辑和修改。

    8. *.so

       在linux环境下,c++编译得到库文件后缀包括:.so or .a or .la,当然,linux下文件的类型是不依赖于其后缀名的,后缀及其含义:
    .so 为共享库 : 动态库(shared library/shared object/dynamic link library)

    .so.1, .so.6等:后边的是表示版本而已,这都是动态运行库,大部分属于基础库,即glibc。

    .a为静态库 : archive / static library
    .la为libtool自动生成的一些共享库,可以用vi编辑查看,主要记录了一些配置信息。可以用如下命令查看*.la文件的格式   file *.la

     

    展开全文
  • Python的几种文件类型

    千次阅读 2019-04-25 21:46:58
    Python的几种文件类型 Python有以下几种类型的文件: py:Python控制台程序的源代码文件 pyw:Python带用户界面的源代码文件 pyx:Python包源文件 pyc:Python字节码文件 pyo:Python优化后的字节码文件 pyd...

    Python的几种文件类型

    Python有以下几种类型的文件:

    • py:Python控制台程序的源代码文件
    • pyw:Python带用户界面的源代码文件
    • pyx:Python包源文件
    • pyc:Python字节码文件
    • pyo:Python优化后的字节码文件
    • pyd:Python的库文件(Python版DLL)、在Linux上是so文件

    pyc和pyo的生成方法

    pyc的作用是用来跨平台使用的,和Java中的Class文件类似。pyc文件是一种字节码文件,可以加快Python解释器的加载速度,当然也可以用来做简单的防源码泄露保护。

    pyo则是优化过后的字节码文件,不过pyo更像编译型语言里的中间文件。

    我们可以通过Python提供的py_compile模块来进行源代码的编译。

    py_compile模块只提供3个方法,分别是有关编译异常PyCompileError、有关编译compile、有关程序入口main

    我们要用到的是compile方法,compile原形如下:

    compile(file, cfile=None, dfile=None, doraise=False, optimize=-1)

    有5个参数:

    1. file:必选参数,要编译的源文件
    2. cfile:编译后的文件,默认在源文件目录下的__pycache__/源文件名.解释器类型-python版本.字节码类型 ###例如:__pycache__/abc.cpython-34.pyo
    3. dfile:错误消息文件,默认和cfile一样
    4. doraise:是否开启异常处理,默认False
    5. optimize:优化字节码级别

    这里分为4个等级,文档中是这样写的:

    optimize级别

    param optimize: The optimization level for the compiler. Valid values are -1, 0, 1 and 2. A value of -1 means to use the optimization level of the current interpreter, as given by -O command line options.

    optimize为1时,优化字节码级别为最高

    -1和0:设置pyc优化级别

    1和2:设置pyo优化级别

    数字越小,优化级别越高

    准备源文件a.py和b.py,内容相同,就是一句print("python")代码

    编写编译脚本:

    import py_compile

    py_compile.compile(file = "a.py",cfile = "a.pyc",optimize=-1)

    py_compile.compile(file = "b.py",cfile = "b.pyo",optimize=1)

    编译脚本代码

    运行后可以看到已经成功编译成字节码文件了,分别为a.pyc和b.pyo

    用文本编辑器打开a.pyc和b.pyo,如图

    打开字节码文件,尝试运行这2个字节码文件。

    运行效果

    可见,字节码文件成功运行。

    也可以直接通过Python加载模块来运行:

    #编译成pyc

    python -m py_compile 源代码

    #编译成pyo

    python -O -m py_compile 源代码

    这确实可以简单地保护我们的代码,同时似乎看起来像是加密的效果,但是要注意,这不是加密,只是把源码变成优化后的字节码而已,如果想要获得源码,我们一样可以通过逆向编译来得到源码,目前有专门逆向Python字节码的工具存在。

    如果需要编译整个目录内的所有源代码,请参考Python compileall

    pyd可以让我们的代码更安全

    如果真的想要保护代码,为何不考虑把它变成python扩展模块?(目前还没有pyd被反编译的消息)

    pyd是Python中的扩展模块,相当于windows的dll,不同的是pyd只供python调用而已。

    实际上,大部分的包、小模块都是以pyd形式发布的。

    如果特别感兴趣的小伙伴可以深入研究下setuptools和distutils

    在把源代码转换成功pyd之前,我们需要用到Cython包。

    pip list | findstr "Cython"

    检查Cython包

    检查是否安装了Cython,没有请pip install Cython安装即可

    编译pyd步骤1:生成C代码

    import Cython.Build

    #导入Build模块

    Cython.Build.cythonize("a.py")

    #a.py转换成C代码

    cythonize运行完成之后,无异常的情况下会在a.py的目录下创建一个a.c文件,同时会返回一个distutils.extension.Extension对象列表

    一定要注意的是:如果在Python Shell测试,一定要用绝对路径,否则会ValueError异常,cythonize不会从sys.path中读路径。

    编译pyd步骤2:利用distutils生成pyd扩展模块

    此时我们可以用distutils包来编译成我们要的pyd模块

    编译a.py成pyd

    import Cython.Build

    import distutils.core

    a = Cython.Build.cythonize("a.py")

    #返回distutils.extension.Extension对象列表

    distutils.core.setup(

    name = 'pyd的编译',#包名称

    version = "1.0",#包版本号

    ext_modules= a,#扩展模块

    author = "百家号——斌哥说Python",#作者

    author_email='binnlzeng@163.com'#作者邮箱

    )

    代码

    python 执行编译的脚本 build

    python 执行编译的脚本 build_ext

    执行编译脚本编译

    此时会在编译脚本所在目录生成一个build目录,里面存着C语言的.def文件和.o文件,还有我们要的pyd文件

    生成的C文件

    生成的pyd文件

    批量编译pyd文件的误区

    此时我们已经生成了1个pyd文件,如果我们是扩展包/模块的开发者,怎么批量编译呢?

    总有人会犯错,例如以下2个例子:

    a = Cython.Build.cythonize("a.py")

    b = Cython.Build.cythonize("b.py")

    distutils.core.setup(

    ...,

    ext_modules= [a,b]

    )

    这样做吗?NO......

    a = Cython.Build.cythonize("a.py")

    a.append(Cython.Build.cythonize("b.py"))

    distutils.core.setup(

    ...,

    ext_modules= a

    )

    还是这样?

    犯这样的错原因却是因为:

    a = Cython.Build.cythonize("a.py")

    type(a)

    提示<class 'list'>

    没错,Cython.Build.cythonize返回的是一个列表,里面有只有1个distutils.extension.Extension对象

    报错如下:

    异常信息

    需要1个Extension或者是2个元组

    批量编译pyd

    方法1:提取我们要的Extension对象

    import Cython.Build

    import distutils.core

    a = Cython.Build.cythonize("a.py")[0] #提取Extension对象

    b = Cython.Build.cythonize("b.py")[0]

    distutils.core.setup(

    name = 'pyd的编译', #包名称

    version = "1.0", #包版本号

    ext_modules= [a,b], #被扩展的模块

    author = "百家号——斌哥说Python", #作者

    author_email='binnlzeng@163.com' #作者邮箱

    )

    方法2:转换成C代码后再进行Extension对象实例化

    import Cython.Build

    import distutils.core

    Cython.Build.cythonize("a.py")

    Cython.Build.cythonize("b.py")

    distutils.core.setup(

    name = 'pyd的编译', #包名称

    version = "1.0", #包版本号

    ext_modules= [distutils.core.Extension('a',["a.c"]),distutils.core.Extension('b', ['b.c'])], #被扩展的模块

    #[

    #distutils.core.Extension('a',["a.c"]),

    #distutils.core.Extension('b', ['b.c'])

    #]

    author = "百家号——斌哥说Python", #作者

    author_email='binnlzeng@163.com' #作者邮箱

    )

    pyc和pyo相对而言安全性较低,pyd是目前解决Python开发中代码安全性最优的一个方案。

    但是要注意一点:无论是pyc还是pyo、pyd,都是跟着Python版本走的,不要指望Python2.7的东西在Python3上完美运行。

    PS:如果遇到running build...提示,删掉build目录重新编译即可。

    展开全文
  • 在Mime配置config文件类型

    千次阅读 2008-08-28 13:28:00
    一、MIME及其类型1、数据处理方式 当浏览器通过各种请求方法,试图从服务器获得数据的时候,服务器就必须将正确的数据返回给浏览器。浏览器并不关心服务器是如何进行处理的,服务器可以返回一个预先编辑好的HTML...

    一、MIME及其类型

    1、数据处理方式

      当浏览器通过各种请求方法,试图从服务器获得数据的时候,服务器就必须将正确的数据返回给浏览器。浏览器并不关心服务器是如何进行处理的,服务器可以返回一个预先编辑好的HTML文档,也能根据请求动态生成返回的数据。而WWW的一大特点就是能用来传送多媒体数据,并且这些数据的传送是完全透明的,通过同样的HTTP连接,可以传送不同格式的声音、图象等数据。当服务器仅仅用于返回静态的HTML文档的时候,浏览器能够很容易的识别其数据类型,但当服务器不但用于返回静态的HTML文档,还可以动态返回各种类型的多媒体信息时,浏览器就不能仅仅从URL请求本身上判断服务器将会返回何种数据了。


      服务器和浏览器之间是采用了另外的方式来标识数据的类型,这种方式下通过在传输真正的数据之前,预先传输一个数据的MIME类型的方法,来标识数据类型。

    2、多媒体文件格式MIME

      最早的HTTP协议中,并没有附加的数据类型信息,所有传送的数据都被客户程序解释为超文本标记语言HTML 文档,而为了支持多媒体数据类型,HTTP协议中就使用了附加在文档之前的MIME数据类型信息来标识数据类型。


      MIME意为多目的Internet邮件扩展,它设计的最初目的是为了在发送电子邮件时附加多媒体数据,让邮件客户程序能根据其类型进行处理。然而当它被HTTP协议支持之后,它的意义就更为显著了。它使得HTTP传输的不仅是普通的文本,而变得丰富多彩。


      每个MIME类型由两部分组成,前面是数据的大类别,例如声音audio、图象image等,后面定义具体的种类。


    常见的MIME类型:

    • 超文本标记语言文本 .html,.html text/html
    • 普通文本 .txt text/plain
    • RTF文本 .rtf application/rtf
    • GIF图形 .gif image/gif
    • JPEG图形 .ipeg,.jpg image/jpeg
    • au声音文件 .au audio/basic
    • MIDI音乐文件 mid,.midi audio/midi,audio/x-midi
    • RealAudio音乐文件 .ra, .ram audio/x-pn-realaudio
    • MPEG文件 .mpg,.mpeg video/mpeg
    • AVI文件 .avi video/x-msvideo
    • GZIP文件 .gz application/x-gzip
    • TAR文件 .tar application/x-tar



      Internet中有一个专门组织IANA来确认标准的MIME类型,但Internet发展的太快,很多应用程序等不及IANA来确认他们使用的MIME类型为标准类型。因此他们使用在类别中以x-开头的方法标识这个类别还没有成为标准,例如:x-gzip,x-tar等。事实上这些类型运用的很广泛,已经成为了事实标准。只要客户机和服务器共同承认这个MIME类型,即使它是不标准的类型也没有关系,客户程序就能根据MIME类型,采用具体的处理手段来处理数据。而Web服务器和浏览器(包括操作系统)中,缺省都设置了标准的和常见的MIME类型,只有对于不常见的 MIME类型,才需要同时设置服务器和客户浏览器,以进行识别。


      由于MIME类型与文档的后缀相关,因此服务器使用文档的后缀来区分不同文件的MIME类型,服务器中必须定义文档后缀和MIME类型之间的对应关系。而客户程序从服务器上接收数据的时候,它只是从服务器接受数据流,并不了解文档的名字,因此服务器必须使用附加信息来告诉客户程序数据的MIME类型。服务器在发送真正的数据之前,就要先发送标志数据的MIME类型的信息,这个信息使用Content-type关键字进行定义,例如对于HTML文档,服务器将首先发送以下两行MIME标识信息,这个标识并不是真正的数据文件的一部分。


      Content-type: text/html



      注意,第二行为一个空行,这是必须的,使用这个空行的目的是将MIME信息与真正的数据内容分隔开。

    3、MIME类型可参见IANA的MIME类型

    二、配置Config类型文件

    1、启用锁定文件扩展名的下载

    IIS(Internet 信息服务)会保护某些文件类型,例如 .config 文件和 .mdb 文件。如果应用程序有锁定的文件,请执行以下操作启用对此类文件的下载:

    • 在 inetmgr 中打开 vroot 的“属性”页。

    • 在“虚拟目录”选项卡上单击“配置”。

    您将看到一个应用程序映射列表。删除 .config 扩展名的映射以启用 .config 文件下载。对此列表中希望作为应用程序一部分下载的所有其他扩展名重复此操作。

    2、添加Config类型
       

    MIME 类型映射

    在 HTTP 上发布时,.application 文件的 MIME 类型应为“application/x-ms-application”。如果服务器上安装有 .NET Framework 2.0,该类型将自动设置。如果没有安装,则需要为 ClickOnce 应用程序 vroot(或整个服务器)创建 MIME 类型关联。

    在 IIS 中执行此操作:

    • 运行 inetmgr 并打开 vroot(或整个服务器)的“属性”页。

    • 单击“HTTP 标头”选项卡。

    • 单击“Mime 映射”部分中的“文件类型”按钮。

    • 单击“新建类型”添加一个新类型。在“相关扩展名”中键入 config;在“内容类型 (MIME)”中键入 text/xml

    • 重新启动 IIS。


    三、ClickOnce 部署的疑难解答 

    本主题介绍服务器必备条件,并提供 ClickOnce 部署中遇到的常见问题的指南。

    <script type=text/Javascript> var ExpCollDivStr=ExpCollDivStr; ExpCollDivStr = ExpCollDivStr + "ctl00_LibFrame_ctl02a5a85b4,"; var ExpCollImgStr = ExpCollImgStr; ExpCollImgStr = ExpCollImgStr + "ctl00_LibFrame_ctl02img,"; </script> 服务器配置

    启用锁定文件扩展名的下载

    IIS(Internet 信息服务)会保护某些文件类型,例如 .config 文件和 .mdb 文件。如果应用程序有锁定的文件,请执行以下操作启用对此类文件的下载:

    • 在 inetmgr 中打开 vroot 的“属性”页。

    • 在“虚拟目录”选项卡上单击“配置”。

    您将看到一个应用程序映射列表。删除 .config 扩展名的映射以启用 .config 文件下载。对此列表中希望作为应用程序一部分下载的所有其他扩展名重复此操作。

    出于安全原因,有些 Web 服务器的配置会阻止不常用于 Web 内容的文件。例如,具有以下扩展名的文件可能会被阻止:.dll、.config、.mdf。基于 Windows 的应用程序通常包含带有其中一些扩展名的文件。如果用户尝试运行的 ClickOnce 应用程序要访问 Web 服务器上被阻止的文件,将产生一个错误。无需取消对所有文件扩展名的阻止,默认情况下,每个应用程序文件都使用“.deploy”文件扩展名发布。如果使用此选项,Web 服务器只需配置为允许以下三种文件扩展名即可:

    • .application

    • .manifest

    • .deploy

    但是,可以禁用此选项,方法是清除“发布选项”对话框上的“使用‘deploy’文件扩展名”选项,这时必须配置 Web 服务器以允许应用程序中使用的所有文件扩展名。

    有时您必须配置 .manifest、.application 和 .deploy,例如在使用未安装 .NET Framework 的 IIS 的情况下,或在使用其他 Web 服务器(例如,Apache)的情况下。

    配置过期设置

    通过 URL 启动应用程序时,Internet Explorer 执行 .application 文件的下载。因此,所有通知浏览器缓存文件的过期设置都将有效。客户端会因此而不检测新的更新,而是使用 IE 缓存中的 .application。若要确保客户端在每当更新可用时都立即检测更新,请启用 IIS 中的“立即过期”选项。

    在 IIS 中执行此操作:

    • 运行 inetmgr 并打开 vroot(或整个服务器)的“属性”页。

    • 单击“HTTP 标头”选项卡。

    • 单击“启用内容过期”。

    • 单击“立即过期”。

    • 重新启动 IIS。

    不支持 FTP 协议

    ClickOnce 支持从任何 HTTP 1.1 Web 服务器或文件服务器上安装应用程序。FTP 协议不受支持。可以使用 ftp:// 协议发布应用程序,但必须使用 http://、https:// 或 file:// 协议执行安装。

    正确配置服务器

    使用 ClickOnce 时的一个最常见的问题就是 ClickOnce 因配置问题而无法从网络服务器下载文件。如果在 ClickOnce 安装过程中遇到下载文件的问题,请尝试使用 Internet Explorer 下载相同的文件。这样将把问题范围缩小到 ClickOnce 问题,而不是普通的服务器/网络问题。

    需要管理员特权

    如果使用 HTTP 发布,则您必须具备目标服务器上的管理员特权(IIS 需要此特权级别)。如果不使用 HTTP 发布,则只需具备目标路径上的写权限。

    必须启用匿名访问

    向关闭了“匿名访问”的远程服务器发布时,您将收到下面的警告:

    "The files could not be downloaded from http://<remoteserver>/<myapplication>/.  The remote server returned an error: (401) Unathorized."

    若要解决此问题,请在 Windows 资源管理器中右击“我的电脑”,然后选择“管理”。在“计算机管理”对话框中,依次打开“服务和应用程序”节点、“Internet 信息服务”、“网站”,然后右击“默认网站”。在“默认网站属性”对话框中,单击“目录安全性”选项卡,然后单击“编辑”按钮。在“身份验证方法”对话框中,选择“匿名访问”复选框。

    Windows XP SP2:Windows 防火墙

    默认情况下,Windows XP SP2 启用 Windows 防火墙。如果在安装有 Windows XP 的计算机上开发应用程序,仍能从本地 IIS 服务器发布和运行 ClickOnce 应用程序。但是,如果不打开 Windows 防火墙,则无法从其他计算机访问该 IIS 服务器。若要管理 Windows 防火墙,请从“控制面板”中选择“Windows 防火墙”。

    Windows Server 2003:启用 FrontPage 服务器扩展

    使用 HTTP 将应用程序发布到 Windows Web 服务器需要 FrontPage 服务器扩展 (FPSE)。

    默认情况下,Windows Server 2003 不安装 FPSE。如果希望使用 Visual Studio 通过具有 FPSE 的 HTTP 将应用程序发布到 Windows Server 2003 Web 服务器,必须先安装 FPSE。可以使用 Windows Server 2003 中的“管理您的服务器”管理工具完成此工作。

    MIME 类型映射

    在 HTTP 上发布时,.application 文件的 MIME 类型应为“application/x-ms-application”。如果服务器上安装有 .NET Framework 2.0,该类型将自动设置。如果没有安装,则需要为 ClickOnce 应用程序 vroot(或整个服务器)创建 MIME 类型关联。

    在 IIS 中执行此操作:

    • 运行 inetmgr 并打开 vroot(或整个服务器)的“属性”页。

    • 单击“HTTP 标头”选项卡。

    • 单击“Mime 映射”部分中的“文件类型”按钮。

    • 单击“新建类型”添加一个新类型。在“相关扩展名”中键入 application;在“内容类型 (MIME)”中键入 application/x-ms-application

    • 重新启动 IIS。

    Windows Server 2003:锁定的 MIME 类型

    Windows Server 2003 上的 IIS 会锁定除某些已知类型(例如 .htm、.html、.txt 等)以外的所有文件类型。要使用此服务器部署 ClickOnce 应用程序,需要更改 IIS 设置以允许下载 .application、.manifest 以及应用程序使用的所有其他自定义文件类型的文件。

    在 IIS 中执行此操作:

    • 运行 inetmgr 并打开该计算机节点的“属性”页。

    • 单击“MIME 类型”按钮。

    • 单击“新建”按钮,然后添加新的扩展名和必要的 MIME 类型。

      对于 .application 和 .manifest 扩展名,MIME 类型应为“application/x-ms-application”。对于其他文件类型,MIME 类型应为“application/octet-stream”。

      如果创建带有扩展名“*”且 MIME 类型为“application/octet-stream”的 MIME 类型,将允许下载未阻止的文件类型的文件。(但是不能下载阻止的文件类型,例如 .aspx 和 .asmx)。

    • 重新启动 IIS。

    <script type=text/Javascript> var ExpCollDivStr=ExpCollDivStr; ExpCollDivStr = ExpCollDivStr + "ctl00_LibFrame_ctl04760e619,"; var ExpCollImgStr = ExpCollImgStr; ExpCollImgStr = ExpCollImgStr + "ctl00_LibFrame_ctl04img,"; </script> 疑难解答指南

    使用 ClickOnce 错误日志

    • 发生 ClickOnce 错误时,通常会显示一个带有“详细信息”按钮的错误对话框。单击此按钮将打开该应用程序的 ClickOnce 日志文件。请在此日志文件中查找特定错误信息,该信息将指出何处出错。如果其中的信息不足以帮助诊断和解决问题,请参考本疑难解答指南中的以下内容。

    • ClickOnce 为每个应用程序维护一个日志文件。该文件存储在 wininet 缓存中,因此适用于自动清理机制。

    • 指定自定义日志位置:要使 ClickOnce 将日志写入到特定位置,请将注册表项 [HKCU/Software/Microsoft/Windows/CurrentVersion/Deployment] "LogFilePath" (STRING) 设置为一个文件,例如“c:/logs/ClickOnceLog.txt”。确保计算机上存在此目录 (c:/logs)。所有应用程序的全部 ClickOnce 日志消息都将写入此文件。

    手动更改清单或应用程序时的注意事项

    Visual Studio 发布负责设置应用程序和清单。但是,如果在 Visual Studio 以外更新部署(例如使用 MAGE),则需注意一些问题:

    • 如果更新应用程序中的文件,则必须更新应用程序清单中对该文件的引用,因为该文件将更改。

    • 如果以任何方式更新应用程序清单,则必须在部署清单中更新应用程序清单引用。当使用 MageUI 在部署清单中更新应用程序清单引用时,请确保基本代码指向您的应用程序清单。MageUI 始终假定应用程序清单是一个带有版本的子目录,而这一假定不一定总是正确的。

    • 如果以任何方式更新清单,则必须再次对它签名。

    使用部署提供程序的注意事项

    这里介绍当您在客户端发现 ClickOnce 应用程序出现意外行为时应注意的问题。ClickOnce 部署清单具有一个 deploymentProvider 属性,该属性指向安装应用程序和为应用程序提供服务的源位置的完整路径。

    在部署清单中查找下面一行:

    <deploymentProvider codebase="http://myserver/myapp.application" />

    这行内容是在创建 ClickOnce 应用程序时设置的,对于“安装的”应用程序,这是必需的设置。该设置中的位置是一个标准位置,ClickOnce 安装程序从该位置安装应用程序和查找更新。所有应用程序文件都将从相对于此路径的位置安装。

    因此,如果使用 xcopy 命令将 ClickOnce 应用程序复制到不同位置,但不更改 deploymentProvider 属性,则尝试下载应用程序时 ClickOnce 仍将引用原始位置。

    如果希望移动或复制应用程序,则必须也更新 deploymentProvider 路径,这样客户端才能确实从新位置安装。对“安装的”应用程序来说这是个普遍问题。对于始终通过原始 URL 启动的联机应用程序,deploymentProvider 为可选设置。如果设置了 deploymentProvider,则使用该属性,否则将使用用于激活应用程序的 URL 作为基 URL 下载应用程序文件。

    请记住:每次更新清单时,必须再次对它签名。

    <script type=text/Javascript> var ExpCollDivStr=ExpCollDivStr; ExpCollDivStr = ExpCollDivStr + "ctl00_LibFrame_ctl061383e5f,"; var ExpCollImgStr = ExpCollImgStr; ExpCollImgStr = ExpCollImgStr + "ctl00_LibFrame_ctl06img,"; </script> 常见问题

    应用程序启动和更新问题

    问题:浏览至一个 .application 文件时无任何反应,或者 XML 呈现在 IE 中,或者出现“运行/另存为”对话框

    解决方法:很可能是因为 MIME 类型未在服务器或客户端上正确注册。

    首先进行检查,以确保服务器配置为将 .application 扩展名与 MIME 类型“application/x-ms-application”相关联(请参见上面的“服务器配置”了解详细信息)。如果服务器配置正确,则检查以确保计算机上安装了 .NET Framework 2.0。如果已安装 dnprdnlong 但仍出现该问题,请尝试卸载并重新安装 Framework,以在客户端重新注册 MIME 类型。

    问题:错误对话框显示“无法检索应用程序。部署中缺少文件”或“应用程序下载中断,请检查网络错误并稍后再试”

    解决方法:这表示无法下载 ClickOnce 清单所引用的一个或多个文件。调试此问题最简单的方法是尝试下载 ClickOnce 指出其无法下载的 URL。可能的原因如下:

    • 如果日志文件显示“(403) Forbidden”或“(404) Not found”,请检查以确保 Web 服务器配置为不阻止此文件的下载(请参见上面的“服务器配置”部分)。

    • 如果服务器阻止了 .config 文件,请参见下面的“问题:安装具有 .config 文件的 ClickOnce 应用程序时发生下载错误”。

    • 请检查是否由于部署清单中的 deploymentProvider URL 指向的位置不是用于激活应用程序的 URL 而导致了此问题(有关更多信息,请参见上面的“使用部署提供程序的注意事项”)。

    • 请检查服务器以确保所有文件都存在;ClickOnce 日志会指出找不到的文件。

    • 检查是否存在网络连接问题;如果下载期间客户端计算机脱机,您将收到此消息。

    问题:安装具有 .config 文件的 ClickOnce 应用程序时发生下载错误

    基于 Visual Basic Windows 的应用程序默认包含一个 app.config 文件。当用户尝试从安装有 Windows Server 2003 的 Web 服务器安装时将出现问题,原因是该操作系统会出于安全原因而阻止安装 .config 文件。要允许安装 .config 文件,请单击“发布选项”对话框中的“使用‘.deploy’文件扩展名”。

    还需要相应地设置 MIME 类型。如果在使用 IIS,请在 Windows 资源管理器中右击“我的电脑”,再选择“管理”。依次打开“服务和应用程序”、“Internet 信息服务”,再右击“网站”,然后选择“属性”。

    单击标签为“MIME 类型”的按钮。在“MIME 类型”对话框中,为 .application、.manifest 和 .deploy 文件添加 MIME 类型。

    有关更多信息,请参见上面的“服务器配置”部分中的“启用锁定文件扩展名的下载”。

    问题:错误信息“应用程序格式不正确”;日志文件包含“XML 签名无效”

    解决方法:确保更新了清单文件并再次对它签名。使用 Visual Studio 重新发布应用程序,或使用 Mage 再次对该应用程序进行签名。

    问题:安全警告“应用程序已被阻止,因为它会对计算机造成很高的安全风险”

    解决方法:如果 Internet 上未签名的应用程序请求升级的信任,通常会出现此对话框。若要允许安装和运行此应用程序,请将该 URL 添加到受信任站点列表。可以在 Internet Explorer 中使用“Internet 选项”对话框中的“安全”选项卡完成此操作。

    问题:我在服务器上更新了应用程序,但客户端不下载更新

    解决方法:可能存在以下原因之一

    • 请检查部署清单中的 deploymentProvider URL。您是否确定更新内容所在的位置与 deploymentProvider 指向的位置相同?(有关更多信息,请参见上面的“使用部署提供程序的注意事项”。)

    • 请检查部署清单中的更新间隔。如果设置的间隔为阶段性间隔(例如每六小时一次),ClickOnce 会一直等到此间隔过后才检查更新。可以更改清单,使之在每次应用程序启动时检查更新。在开发时可以使用这一选项方便地验证是否正在安装更新,但这会减慢应用程序的激活速度。

    • 尝试从“开始”菜单重新启动应用程序。ClickOnce 可能已在后台检测到更新,但将在下次激活时提示您安装。

    问题:更新期间遇到错误,日志项记录“部署中的引用与应用程序清单中定义的标识不匹配”

    解决方法:发生问题的原因可能是 ClickOnce 当前使用的是 Internet Explorer 缓存的较旧版本的部署清单,而该版本与服务器上的最新应用程序清单不匹配。为避免此问题,建议将服务器 vroot(或部署清单)上的 IIS 设置更改为立即过期,此设置会强制在每次激活时检查服务器。若要在 inetmgr 中进行此操作,请选择 vroot“属性”页上的“HTTP 标头”选项卡,然后选中“启用内容过期”框,并设置为“立即过期”。

    或者,可以先重新启动 Internet Explorer 或清除 Internet Explorer 的“Temporary Internet Files”文件夹,然后再次运行该应用程序,这将导致一次服务器重新同步。

    问题:首次从本地磁盘(或 CD-ROM)激活成功,但之后从“开始”菜单激活失败

    解决方法:ClickOnce 使用部署提供程序 URL 获取应用程序的更新。请检查以确保该 URL 指向的位置正确。(有关更多信息,请参见上面的“部署提供程序”。)

    问题:错误“无法终结应用程序”

    解决方法:此错误信息通常表示将该应用程序安装到 ClickOnce 存储区时出错。要么是应用程序出错,要么是存储区损坏。日志文件对出错位置可能会有更好的指示。

    要检查的内容:

    • 检查部署清单的标识、应用程序清单的标识和主应用程序 EXE 的标识是否都唯一。

    • 如果应用程序包含的文件路径过长(超过 100 个字符),则可能超出了存储区的最大路径限制。请尝试缩短路径并重新安装。

    问题:应用程序配置文件中的 PrivatePath 设置不起作用

    解决方法:要使用 PrivatePath(合成探测路径),应用程序需要获得完全信任权限。请尝试将应用程序清单更改为请求完全信任,然后重试。

    问题:卸载期间出现对话框“未能卸载应用程序”

    解决方法:这通常表示应用程序已经删除或存储区已损坏。单击“确定”后,“添加/删除程序”项将被删除。

    问题:安装期间出现对话框,提示没有安装平台依赖项

    解决方法:GAC(全局程序集缓存)中缺少应用程序运行所需的一个必备项。

    使用 Visual Studio 发布

    问题:在 Visual Studio 中发布时失败

    请确保您具备面向目标服务器的发布权限。例如,如果您作为普通用户而不是管理员登录到终端服务器计算机,则您可能没有权限发布到本地 Web 服务器。

    如果使用 URL 发布,请确保目标计算机上启用了 FrontPage 服务器扩展。

    使用 Mage

    问题:我尝试使用证书存储区中的证书进行签名,但收到一个空白消息框

    您需要在“签名”对话框中执行以下操作:

    • 选择“使用存储的证书进行签名”,然后

    • 从列表中选择一个证书;不会自动选择第一个证书。

    问题:单击“不签名”按钮时导致异常

    这是一个已知 bug。所有 ClickOnce 清单都需要进行签名。只需选择其中一个签名选项,然后单击“确定”即可。



    展开全文
  • linux文件系统类型

    万次阅读 2018-01-09 20:27:38
     Linux 支持多种文件系统,包括ext2、ext3、vfat、ntfs、iso9660、jffs、romfs和nfs等,为了对各类文件系统进行统一管理,Linux引入了虚拟文件系统VFS(Virtual File System),为各类文件系统提供一个统一的操作界面...

     

            Linux 支持多种文件系统,包括ext2、ext3、vfat、ntfs、iso9660、jffs、romfs和nfs等,为了对各类文件系统进行统一管理,Linux引入了虚拟文件系统VFS(Virtual File System),为各类文件系统提供一个统一的操作界面和应用编程接口。

            Linux启动时,第一个必须挂载的是根文件系统;若系统不能从指定设备上挂载根文件系统,则系统会出错而退出启动。之后可以自动或手动挂载其他的文件系统。因此,一个系统中可以同时存在不同的文件系统。

      不同的文件系统类型有不同的特点,因而根据存储设备的硬件特性、系统需求等有不同的应用场合。在嵌入式Linux应用中,主要的存储设备为 RAM(DRAM, SDRAM)和ROM(常采用FLASH存储器),常用的基于存储设备的文件系统类型包括:jffs2, yaffs, cramfs, romfs, ramdisk, ramfs/tmpfs等。

     

    1、基于Flash的文件系统

     

     

            Flash(闪存)作为嵌入式系统的主要存储媒介,有其自身的特性。Flash的写入操作只能把对应位置的1修改为0,而不能把0修改为1(擦除Flash就是把对应存储块的内容恢复为1),因此,一般情况下,向Flash写入内容时,需要先擦除对应的存储区间,这种擦除是以块(block)为 单位进行的。

      闪存主要有NOR和NAND两种技术。Flash存储器的擦写次数是有限的,NAND闪存还有特殊的硬件接口和读写时序。因此,必须针对Flash的硬件特性设计符合应用要求的文件系统;传统的文件系统如ext2等,用作Flash的文件系统会有诸多弊端。

      在嵌入式Linux下,MTD(Memory Technology Device,存储技术设备)为底层硬件(闪存)和上层(文件系统)之间提供一个统一的抽象接口,即Flash的文件系统都是基于MTD驱动层的(参见上面的Linux下的文件系统结构图)。使用MTD驱动程序的主要优点在于,它是专门针对各种非易失性存储器(以闪存为主)而设计的,因而它对Flash有更好的支持、管理和基于扇区的擦除、读/写操作接口。

      顺便一提,一块Flash芯片可以被划分为多个分区,各分区可以采用不同的文件系统;两块Flash芯片也可以合并为一个分区使用,采用一个文件系统。即文件系统是针对于存储器分区而言的,而非存储芯片。

            支持在Flash上运行的常用文件系统有cramfs、jffs、jffs2、yaffs、yaffs2等。

            如果想在Flash上实现读写操作,通常在NorFlash上我们会选取jffs及jffs2文件系统,在NandFlash上选用yaffs或yaffs2文件系统。Yaffs2文件系统支持大页(大于512字节/页)的NandFlash存储器。

    它们也都是基于文件系统+mtd+flash设备的架构。linux-2.6.27后,内核加入了一种新型的flash文件系统UBI(Unsorted Block Images)。

     

    (1) jffs2

      JFFS文件系统最早是由瑞典 Axis Communications公司基于Linux2.0的内核为嵌入式系统开发的文件系统。JFFS2是RedHat公司基于JFFS开发的闪存文件系统,最初是针对RedHat公司的嵌入式产品eCos开发的嵌入式文件系统,所以JFFS2也可以用在Linux, uCLinux中。

      Jffs2: 日志闪存文件系统版本2 (Journalling Flash FileSystem v2)

      主要用于NOR型闪存,基于MTD驱动层,特点是:可读写的、支持数据压缩的、基于哈希表的日志型文件系统,并提供了崩溃/掉电安全保护,提供“写平衡”支持等。缺点主要是当文件系统已满或接近满时,因为垃圾收集的关系而使jffs2的运行速度大大放慢。

      目前jffs3正在开发中。关于jffs系列文件系统的使用详细文档,可参考MTD补丁包中mtd-jffs-HOWTO.txt。

      jffsx不适合用于NAND闪存主要是因为NAND闪存的容量一般较大,这样导致jffs为维护日志节点所占用的内存空间迅速增大,另外,jffsx文件系统在挂载时需要扫描整个FLASH的内容,以找出所有的日志节点,建立文件结构,对于大容量的NAND闪存会耗费大量时间。

     

    (2)yaffs/yaffs2

     

     

            yaffs/yaffs2是专为嵌入式系统使用NAND型闪存而设计的一种日志型文件系统。与jffs2相比,它减少了一些功能(例如不支持数据压缩),所以速度更快,挂载时间很短,对内存的占用较小。另外,它还是跨平台的文件系统,除了Linux和eCos,还支持WinCE, pSOS和ThreadX等。

      yaffs/yaffs2自带NAND芯片的驱动,并且为嵌入式系统提供了直接访问文件系统的API,用户可以不使用Linux中的MTD与VFS,直接对文件系统操作。当然,yaffs也可与MTD驱动程序配合使用。

      yaffs与yaffs2的主要区别在于,前者仅支持小页(512 Bytes) NAND闪存,后者则可支持大页(2KB) NAND闪存。同时,yaffs2在内存空间占用、垃圾回收速度、读/写速度等方面均有大幅提升。

     

    yaffs制作工具:mkyaffsimage

    yaffs2制作工具:mkyaffs2image(适合64M)、mkyaffs2image-128(适合128M以上)

     

    命令:

    生成yaffs2镜像文件:./mkyaffs2image-128M rootfs/ rootfs.yaffs2   

    生成yaffs镜像文件:./mkyaffsimage rootfs/ rootfs.yaffs

     

    烧写:

     

     

     tftp 0x30008000 rootfs.yaffs2

      nand erase 0x580000 7a80000

      nand write.yaffs 0x30008000 0x580000 dbb040

     

    设置内核启动参数:

     

     

     setenv bootargs "noinitrd root=/dev/mtdblock3 rootfstyle=yaffs2 console=ttySAC0,115200 init=/linuxrc mem=64M"

     setenv bootcmd "nand read 0x30008000 0x80000 0x500000;bootm 0x30008000" 

     

     

    (3) Cramfs:Compressed ROM File System

      Cramfs是Linux的创始人Linus Torvalds参与开发的一种只读的压缩文件系统。它也基于MTD驱动程序。

      在cramfs文件系统中,每一页(4KB)被单独压缩,可以随机页访问,其压缩比高达2:1,为嵌入式系统节省大量的Flash存储空间,使系统可通过更低容量的FLASH存储相同的文件,从而降低系统成本。

      Cramfs文件系统以压缩方式存储,在运行时解压缩,所以不支持应用程序以XIP(eXecute In Place,芯片内执行)方式运行,所有的应用程序要求被拷到RAM里去运行,但这并不代表比Ramfs需求的RAM空间要大一点,因为Cramfs是采用分页压缩的方式存放档案,在读取档案时,不会一下子就耗用过多的内存空间,只针对目前实际读取的部分分配内存,尚没有读取的部分不分配内存空间,当我们读取的档案不在内存时,Cramfs文件系统自动计算压缩后的资料所存的位置,再即时解压缩到RAM中。

      另外,它的速度快,效率高,其只读的特点有利于保护文件系统免受破坏,提高了系统的可靠性。

      由于以上特性,Cramfs在嵌入式系统中应用广泛。

      但是它的只读属性同时又是它的一大缺陷,使得用户无法对其内容对进扩充。Cramfs映像通常是放在Flash中,但是也能放在别的文件系统里,使用loopback 设备可以把它安装别的文件系统里。

     

      (4) Romfs

      传统型的Romfs文件系统是一种简单的、紧凑的、只读的文件系统,不支持动态擦写保存,按顺序存放数据,因而支持应用程序以 XIP(eXecute In Place,片内运行)方式运行,在系统运行时,节省RAM空间。uClinux系统通常采用Romfs文件系统。

     

        (5)ubifs

     

    UBIFS:基于UBI的FLASH日志文件系统。

     

     

    a)配置内核支持UBIFS

         Device Drivers  --->Memory Technology Device (MTD) support  --->UBI - Unsorted block images  --->Enable UBI
           配置mtd支持UBI接口
           File systems  --->Miscellaneous filesystems  --->UBIFS file system support 
           配置内核支持UBIFS文件系统

    b)将一个MTD分区4挂载为UBIFS格式

       ● flash_eraseall /dev/mtd4 //擦除mtd4 
           ● ubiattach /dev/ubi_ctrl -m 4 //和mtd4关联 
           ● ubimkvol /dev/ubi0 -N rootfs -s 100MiB //设定volume 大小(不是固定值,可以用工具改变)及名称 
           ● mount -t ubifs ubi0_0 /mnt/ubi或mount -t ubifs ubi0:rootfs /mnt/ubi

    c)制作UBIFS文件系统

    在制作UBI镜像时,需要首先确定以下几个参数:

       MTD partition size; //对应的FLASH分区大小 
           flash physical eraseblock size; // FLASH物理擦除块大小 
           minimum flash input/output unit size; //最小的FLASH输入输出单元大小 
           for NAND flashes - sub-page size; //对于nand flash来说,子页大小 
           logical eraseblock size.//逻辑擦除块大小

    参数可以由几种方式得到

    a)如果使用的是2.6.30以后的内核,这些信息可以通过工具从内核获得,如:mtdinfo –u。

    b)之前的内核可以通过以下方法:

       ● MTD partition size:从内核的分区表或cat /proc/mtd获得
           ● flash physical eraseblock size:从flash芯片手册中可以得到FLASH物理擦除块大小,或cat /proc/mtd
           ● minimum flash input/output unit size: 
               1)nor flash:通常是1个字节 
               2)nand falsh:一个页面 
           ● sub-page size:通过flash手册获得 
           ● logical eraseblock size:对于有子页的NAND FLASH来说,等于“物理擦除块大小-1页的大小”

    c)也可以通过ubi和mtd连接时的产生的信息获取,如:

    #modprobe ubi mtd=4 //ubi作为模块加载

    #ubiattach /dev/ubi_ctrl -m 4 //通过ubiattach关联MTD 
        UBI: attaching mtd4 to ubi0
        UBI: physical eraseblock size: 131072 bytes (128 KiB)
        UBI: logical eraseblock size: 129024 bytes
        UBI: smallest flash I/O unit: 2048
        UBI: sub-page size: 512
        UBI: VID header offset: 512 (aligned 512)
        UBI: data offset: 2048
        UBI: attached mtd4 to ubi0

    更详细的解释参见http://www.linux-mtd.infradead.org/doc/ubi.html#L_overhead

    #mkfs.ubifs -r rootfs -m 2048 -e 129024 -c 812 -o ubifs.img
        #ubinize -o ubi.img -m 2048 -p 128KiB -s 512 /home/lht/omap3530/tools/ubinize.cfg

    -r:制定文件内容的位置 
        -m:页面大小 
        -e:逻辑擦除块大小 
        -p:物理擦除块大小 
        -c:最大的逻辑擦除块数量
        对我们这种情况,文件系统最多可以访问卷上的129024*812=100M空间 
        -s:最小的硬件输入输出页面大小,如:k9f1208为256(上下半页访问)

    其中,ubinize.cfg的内容为:

    [ubifs]
        mode=ubi
        image=ubifs.img
        vol_id=0
        vol_size=100MiB 
        vol_type=dynamic
        vol_name=rootfs
        vol_flags=autoresize

    利用uboot烧写、启动UBIFS镜像

    a)烧写UBIFS镜像

    OMAP3 DevKit8000 # mmcinit
        OMAP3 DevKit8000 # fatload mmc 0:1 81000000 ubi.img
        reading ubi.img
        12845056 bytes read
        OMAP3 DevKit8000 # nand unlock
        device 0 whole chip
        nand_unlock: start: 00000000, length: 268435456!
        NAND flash successfully unlocked
        OMAP3 DevKit8000 # nand ecc sw
        OMAP3 DevKit8000 # nand erase 680000 7980000
        NAND erase: device 0 offset 0x680000, size 0x7980000
        Erasing at 0x7fe0000 -- 100% complete.
        OK
        OMAP3 DevKit8000 # nand write.i 81000000 680000 $(filesize)
        NAND write: device 0 offset 0x680000, size 0xc40000
        Writing data at 0x12bf800 -- 100% complete.
        12845056 bytes written: OK

    烧写过程和烧写内核镜像的过程一致,所以UBI文件系统应该不像yaffs文件系统那样用到了nand的OOB区域。

    b)设置UBIFS文件系统作为根文件系统启动的参数

    OMAP3 DevKit8000 # setenv bootargs console=ttyS2,115200n8 ubi.mtd=4 root=ubi0:rootfs
        rootfstype=ubifs video=omapfb:mode:4.3inch_LCD
        OMAP3 DevKit8000 # setenv bootcmd nand read.i 80300000 280000 200000\;bootm 80300000

    其他文件系 统:fat/fat32也可用于实际嵌入式系统的扩展存储器(例如PDA, Smartphone, 数码相机等的SD卡),这主要是为了更好的与最流行的Windows桌面操作系统相兼容。ext2也可以作为嵌入式Linux的文件系统,不过将它用于 FLASH闪存会有诸多弊端。

     

            2. 基于RAM的文件系统

      (1) Ramdisk

      RamDisk 就是将内存中的一块区域作为物理磁盘来使用的一种技术。它并非一个实际的文件系统,而是一种将实际的文件系统装入内存的机制,并且可以作为根文件系统。将一些经常被访问而又不会更改的文件(如只读的根文件系统)通过Ramdisk放在内存中,可以明显地提高系统的性能。在Linux的启动阶段,initrd提供了一套机制,可以将内核映像和根文件系统一起载入内存。

            为了能够使用RamDisk 你的内核必须要支持:在编译内核时,要选中RAM disk support这一选项,会在配置文件中定义CONFIG_BLK_DEV_RAM。

            为了让内核有能力在内核加载阶段就能装入RAMDISK,并运行其中的内容,要选中initial RAM disk(initrd) support 选项,会在配置文件中定义CONFIG_BLK_DEV_INITRD。

            RamDisk是临时性的,所以没有带日志的文件系统的必要,所以我们一般做 ext2 就可以了。制作方式:

            genext2fs -b 81920 -d rootfs ramdisk

            gzip -9 -f ramdisk

            mkimage -A arm -O linux -T ramdisk -C none -a 0x88080000 -n "ramdisk" -d ramdisk.gz ramdisk.img

            在设置启动参数时:

    setenv bootargs console=${console} ${optargs} root=/dev/ram0 rw ramdisk_size=81920 initrd=${rdaddr},80M rootfstype=${ramrootfstype}

            其中,ramdisk_size=N这个参数告诉RAM磁盘驱动将RAM磁盘的大小设置为N k。RAM磁盘的大小会根据需要动态的增长,因此其大小有个上限加以限制以免它用光所有可用的内存而坏事。ramdisk_size这个参数实际是设置这个上限值的。

           我们可以通过命令:dmesg | grep RAMDISK来查看这个上限值。要注意的是,这个值在系统运行阶段是不能再被修改的。尽管RAM磁盘的大小有个最大值,但我们可以指定需要使用的RAM磁盘的容量。当我们没有指定需要使用的RAM磁盘的容量,而直接在其上挂载文件系统时,它的容量是其上限值。

      (2)ramfs/tmpfs

      Ramfs是Linus Torvalds开发的一种基于内存的文件系统,工作于虚拟文件系统(VFS)层,不能格式化,可以创建多个,在创建时可以指定其最大能使用的内存大 小。(实际上,VFS本质上可看成一种内存文件系统,它统一了文件在内核中的表示方式,并对磁盘文件系统进行缓冲。)

      Ramfs/tmpfs文件系统把所有的文件都放在RAM中,所以读/写操作发生在RAM中,可以用ramfs/tmpfs来存储一些临时性或经常要修改的数据,例如/tmp和/var目录,这样既避免了对Flash存储器的读写损耗,也提高了数据读写速度。

      Ramfs/tmpfs相对于传统的Ramdisk的不同之处主要在于:不能格式化,文件系统大小可随所含文件内容大小变化。

      Tmpfs的一个缺点是当系统重新引导时会丢失所有数据。

      3. 网络文件系统NFS (Network File System)

      NFS是由Sun开发并发展起来的一项在不同机器、不同操作系统之间通过网络共享文件的技术。在嵌入式Linux系统的开发调试阶段,可以利用该技术在主机上建立基于NFS的根文件系统,挂载到嵌入式设备,可以很方便地修改根文件系统的内容。

     

      以上讨论的都是基于存储设备的文件系统(memory-based file system),它们都可用作Linux的根文件系统。实际上,Linux还支持逻辑的或伪文件系统(logical or pseudo file system),例如procfs(proc文件系统),用于获取系统信息,以及devfs(设备文件系统)和sysfs,用于维护设备文件。

     

    展开全文
  • 个文件夹许多子文件,想传到某云方便日后换电脑时也能便捷查看,殊不知等资源传上去之后某云不支持预览。无奈只下只能将所有文件批量修改完txt格式,再重新传一遍,几百个文件,一秒搞定,哈哈哈!!! 源文件...
  • MFC应用程序类型:单文档、多文档与基于对话框

    千次阅读 多人点赞 2013-03-03 21:48:53
    单文档:记事本类程序的标准模式,有菜单栏、工具栏等,只能进行一份文档的操作,即不能同时在同一个应用程序中打开两个文件 多文档:WORD类或浏览器程序的标准模式,可多个窗口显示不同的信息,进行不同的任务,有...
  • 三种存储类型比较-文件、块、对象存储

    万次阅读 多人点赞 2016-07-26 09:09:28
    块存储和文件存储是我们比较熟悉的两种主流的存储类型,而对象存储(Object-based Storage)是一种新的网络存储架构,基于对象存储技术的设备就是对象存储设备(Object-based Storage Device)简称OSD。  首先...
  • 前段时间在工作过程,需要对压缩包集中的某一类文件进行批量解压。如果手动解压压缩包,解压完成后还需要手动删除不同目录下的其它文件。而且当压缩包数量较大时,操作起来更为费劲。因此,为了偷懒,便随手写了这...
  • 一不小心把文件打开方式改...以下都以.cpp文件为例(因为我就是改了cpp文件的打开方式),其他类型的只要把cpp改为相应类型名就行了。 1.win+R,然后输入regedit,打开注册表。   2.找到HKEY_CLASSES_ROOT键,在该...
  • 前言 在 Android 手机文件管理,点击某个文件的时候,会弹出选择打开文件的方式,那么,如果在我们自己的软件要实现这种效果该...首先来看看以下代码,原文地址在这里,我在此技术上多添加了一些文件类型。代...
  • “ppt无法打开“XXX.docx”代表的文件类型“ 解决方案: 打开应用和功能,找到office,点击修改。 点击继续。 点开office共享功能对应的左边那个图标的倒三角,点第二个“从本机运行全部程序”。 安装之后再...
  • 微信小程序-05-详解介绍.js 逻辑层文件 宝典官方文档: https://developers.weixin.qq.com/miniprogram/dev/framework/MINA.html 今天开始深度学习编程语法,虽然大部分是拷贝官方文档,代码类都是我自己敲的,...
  • Linux 文件系统类型 磁盘文件系统。 包括硬盘、CD-ROM、DVD、USB存储器、磁盘阵列等。常见文件系统格式有:autofs、coda、Ext(Extended File sytem,扩展文件系统)、Ext2、Ext3、VFAT、ISO9660(通常是CD-ROM...
  • 错误提示:「文件系统的类型是RAW,CHKDSK无法供RAW驱动器使用」?这篇文章将教您如何从RAW文件系统下恢复资料,尝试在未格式化前修复RAW驱动器且不丢失文件。 适用于:本机/外置硬盘、USB移动盘、SD卡、记忆卡... ...
  • 几种简单的文件上传漏洞类型

    千次阅读 2018-08-19 19:38:19
    1. 绕过前端js: ...2. 文件类型绕过: 上传"c.php"时,通过burpsuite抓包: 把"Content-Type:"修改为“image/jpeg”的图片类型,成功上传 3. php文件后缀名绕过: php...
  • 提示获取音乐、视频、图片、文档等文件是需要有读取SD卡的权限的,如果是6.0以下的系统,则直接在清单文件中声明SD卡读取权限即可;如果是6.0或以上,则需要动态申请权限。FileManager的使用FileManager是封装好的...
  • vim、gvim添加不识别的文件类型

    万次阅读 2007-09-24 09:46:00
    查阅了vim文档,总结了以下几种让增加vim不识别的文件类型的方法:一、使用命令.ks和.hip其实是python文件,.pih其实是html文件,在编辑的时候可以使用set filetype=python或set filetype=html来让vim调用相应的语法...
  • input file accept限制文件上传类型

    万次阅读 2019-06-04 10:43:52
    通过input file accept属性实现,在accept以逗号分隔开【图一】,便可以实现选择文件时,默认只可选择设定格式的文件【图二】,需要说明的是,MIME格式image/jpeg对应.jpg,.jpeg等几种格式,不能达...
  • 常用文件的mine类型

    千次阅读 2014-06-25 20:14:14
    MIME, 全称为“Multipurpose Internet Mail Extensions”, ...-在把输出结果传送到浏览器上的时候,浏览器必须启动适当的应用程序来处理这个输出文档。这可以通过多种类型MIME(多功能网际邮件扩充协议)来完成。在HT
  • linux 修改默认文件关联打开程序 从总体上讲 /etc/gnome/defaults.list 保存了全局的打开方式 /.local/share/applications/mimeapps.list 保存了个人的打开方式 当两着不一致是,优先采用局部的个人设置。 ...
  • 此文发给一些遇到此种... 在返回信息当中显示,“找不到文件:”(PS:上图创建源文件时,因为中间空了一个空格,所以在返回错误信息,所显示的找不到文件为“World.java”。作为新手,这一点需要留意一下)  ...
  •  无法提供此类型的页。   说明: 由于已明确禁止所请求的页类型,无法对该类型的页提供服务。扩展名“.cshtml”可能不正确。 请检查以下的 URL 并确保其拼写正确。
  • 单文档:记事本类程序的标准模式,有菜单栏、工具栏等,只能进行一份文档的操作,即不能同时在同一个应用程序中打开两个文件 多文档:WORD类或浏览器程序的标准模式,可多个窗口显示不同的信息,进行不同的任务,有...
  • 今天在用vs2010打开一个之前做的Web项目时提示:无法打开项目文件,此安装不支持该项目类型解决方法网上查了很多资料,都是说:原因是vs2010需要把mvc升到3,默认的vs2010的mvc是2。vs2010 mvc 3 下载地址:...
  • C语言文件操作

    千次阅读 多人点赞 2021-09-29 21:31:38
    但是在程序设计,我们一般谈的文件有两种:程序文件、数据文件程序文件: 包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可执行程序(windows环境后缀为.exe)。 数据文件文件的内容不一定...
  • 微信小程序配置文件 .json详解

    千次阅读 2016-11-30 21:32:54
    我们使用app.json文件来对微信小程序进行全局配置,决定页面文件的路径、窗口表现、设置网络超时时间、设置多 tab 等……
  • Java程序如何生成Jar、exe及安装文件

    万次阅读 多人点赞 2012-06-03 14:45:25
    Java程序如何生成Jar、exe及安装文件   一、用Eclipse生产Jar文件 首先,看一下我的项目的目录结构: 1,项目名字上面点右键,选择Export,在选择java\JAR file,下一步;如下图: (2),选择,src文件夹,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 968,260
精华内容 387,304
关键字:

以下文件类型中程序类型