2013年5月31日星期五

X11,FVWM,GNOME,KDE的区别

X11 、XFree86 、KDE、GNOME、窗口管理器等相关概念
  1. 什么是 X11?
  X Window 系统版本 11,简称 X11,是一个对网络透明的客户/服务器架构的图形显示系统。它支持应用程序在你的屏幕上绘制象素,线条,文字,图象等等。 X11 还包括一些其它的辅助的函数库,使得它可以容易地绘制用户界面,例如:按钮,文本输入区等等。
  X11 是 Unix 事实上的图形系统标准。 Linux,各种 BSD 版本和多数的商用 Unix 都采用它。类似 CDE,KDE 和 GNOME 等桌面环境都运行在它之上。
  2. 什么是 XFree86?
  XFree86 是对 X11 的一个开放源码的实现。最初它开发运行在 Intel x86 PC 上,因此得名。现在,它可以运行在主要的硬件架构和操作系统上,包括 OS/2,Darwin,Mac OS X 和 Windows。
  3. 什么是窗口管理器?
  在多数图形环境中,窗口边框的外观(标题栏,关闭按钮,等)是由系统定义的。 X11 则不是这样。在 X11 中,窗口的框架(也称为"装饰")是由一个称为窗口管理器的单独程序提供的。一般认为,窗口管理器只是另外一个客户程序;它用通常的办法启动,并与 X 服务器按同样的方法通信。
  由很多不同的窗口管理器供我们选择。 xwinman.org有一个详细的清单。多数常见的窗口管理器都允许用户定制称为主题的窗口外观。许多窗口管理器还提供额外的功能,象在根窗口上的弹出菜单,docks,或程序启动按钮。
  4. 什么是 Gnome 和 KDE?
  他们都是桌面环境,另外还有很多类似的环境。他们的用途是给应用程序提供额外框架,使得他们的外观,使用感觉和行为在视觉上保持一致。例如:
  图形引擎:X11
  窗口管理器: sawfish
  桌面:Gnome
  图形显示引擎,窗口管理器和桌面之间的界限是模糊的,因为有些类似或相同的功能,会被其中之一或多个所同时实现。这也是为什么某个特定的窗口管理器可能不可以被另外一个特定的桌面环境所使用的原因。
  许多的程序会针对特定的桌面环境开发。多数程序可以在安装对应的桌面环境的函数库(以及相应的更底层的函数库)后,能够不减损或有限减损功能地运行。其中的例子是越来越多的 GNOME 程序精选 可以在不运行 GNOME 的情况下安装和运行。 不幸的是,对 KDE 应用程序却还没有取得类似的进展 。


X Windows与GNOME,KDE的关系 
   接触linux有一段时间了,最近在尝试debian,下了CD1之后不知道怎么进不了图形界面,在网上google了半天,原来自己没有装 GNOME,也就是桌面环境,安装的时候碰到几个概念没搞清:X Window是什么?X,X11,以及XFree86跟GNOME,KDE之间都是什么关系,最后终于在一个论坛上找到一个结果,感觉说的很有道理,回帖者也都认为是正解,所以把内容转载过来,希望能够对有同样疑问的人有所帮助:
 
关于linux图形界面的基本知识  
  很多LINUX初学者分不清楚linux和X之间,X和Xfree86之间,X和KDE,GNOME等之间是什么关系.常常混淆概念,我想以比较易于理解的方式说明一下X,X11,XFREE,WM,KDE,GNOME等之间的关系.由于本人水平有限可能存在错误,请高手指正.      
   
  一,linux本身没有图形界面,linux现在的图形界面的实现只是linux下的应用程序实现的.      
  图形界面并不是linux的一部分,linux只是一个基于命令行的操作系统,linux和Xfree的关系就相当于当年的DOS和WINDOWS3.0 一样,windows3.0不是独立的操作系统,它只是DOS的扩充,是DOS下的应用程序级别的系统,不是独立的操作系统,同样XFree只是 linux   下的一个应用程序而已.不是系统的一部分,但是X的存在可以方便用户使用电脑.WINDOWS95及以后的版本就不一样了,他们的图形界面是操作系统的一部分,图形界面在系统内核中就实现了,没有了图形界面windows就不成为windows了,但linux却不一样,没有图形界面linux还是   linux,很多装linux的WEB服务器就根本不装X服务器.这也WINDOWS和linux的重要区别之一.      
   
  二,X是协议,不是具体的某个软件:      
  X   是协议,就像HTTP协议,IP协议一样.这个概念很多初学者甚至学习LINUX有一定时间的人都混淆,一个基于X的应用程序需要运行并显示内容时他就联接到X服务器,开始用X协议和服务器交谈.比如一个X应用程序要在屏幕上输出一个圆那么他就用X协议对X服务器说:喂!我需要在屏幕上画一个圆.X应用程序只负责告诉X服务器在屏幕的什么地方用什么颜色画一个多大的圆,而具体的"画"的动作,比如这个圆如何生成,用什么显卡的驱动程序去指挥显卡完成等等工作是由X服务器来完成的.X服务器还负责捕捉键盘和鼠标的动作,假设X服务器捕捉到鼠标的左键被按下了,他就告诉X应用程序:亲爱的应用程序先生,我发现鼠标被按下了,您有什么指示吗?如果X应用程序被设计成当按下鼠标左健后再在屏幕上画一个正方形的话,X应用程序就对X服务器说:请再画一个正方形,当然他会告诉服务器在什么地方用什么颜色画多大的正方形,但不关心具体怎么画--那是服务器的事情.      
  那么协议是需要具体的软件来实现的,这就是下面我要讲的:      
   
  三,X和XFree86的关系.      
  有了协议就需要具体的软件来实现这个协议.就好比我们有了交通法规就需要交警去根据法规维护交通秩序一样.Xfree86就是这样一个去根据法规实现协议的   "交警".他按照X协议的规定来完成X应用程序提交的在屏幕上显示的任务.当然不仅仅是某个特定的交警才可以去维护和实现这个法规,比如还可以由交通协管员来实现交通法规,必要的时候警察也可以介入,当然前提是他们都要懂得交通法规,也就是要懂得协议.所以实现X协议的软件也并不只有XFree86,   XFree86只是实现X协议的一个免费X服务器软件.商业上常用MOTIF,现在还有XORG,还有很多很小的由爱好者写的小的X服务器软件.甚至可以在WINDOWS上有X服务器运行,这样你可以在linux系统上运行一个X应用程序然后在另一台windows系统上显示.多么神奇.你可以用   google找到这样的X服务器软件.只不过在LINUX上最常用的是XFree86.(现在的linux发行版都用Xorg了)顺便说一句,苹果电脑的图形界面用的也是X协议,而且被认为是做的最好的X协议图形界面,并且他对X协议的实施是做在系统内核里的,所以性能明显好很多,这就是为什么很多大型三维图形设计软件都是在苹果平台上的原因.      
  为了便于理解拿HTTP协议来比较:      
  协议是HTTP   (hyper   text   transmission   protocol)      
  实现这个协议的常用服务器有:apache   IIS   等      
  请求这些服务器传输文件的客户有:IE   ,MOZILLA   ,NETSCAPE等.      
  协议是X      
  实现这个协议的常用服务器有Xfree86   ,Xorg   ,Xnest等      
  请求这些服务器来完成显示任务的客户:所有的X应用程序.      
  只不过HTTP协议的服务器和客户端通常都在两台不同的电脑(服务器和客户机)之间来实现,所以一般人对这个比较容易理解.而X协议的服务器和客户端程序通常在同一台电脑上,因此很多用户都感到对此很难理解.既然是协议,那么肯定和平台无关的,因此可以让X应用程序显示在任何装有X服务器的远程计算机上. 甚至显示在装有Xnest服务器的windows系统上.只不过在大多数情况下,X应用程序都用本机的X服务器,然后X服务器将显示结果输出到本机的显示器.这也是很多人不理解X是一种协议的原因.      
   
  四,X和X11R6又是什么关系?      
  不知道初学者有没有注意到/usr/X11R6这个目录,这是XFree的默认安装目录      
  X11R6   实际上是   X   Protocol   version   11   Release   6      
  (X协议第11版第六次发行)的意思,就是说目前用的X协议是第11版的,然后经过了6次小的修正.不同版本的X协议是不能通信的.就象我们现在IPV4和IPV6不能通信一样,不过不用担心,现在的X服务器软件和X应用程序都遵循X11R6.      
  另外XFree86   3.3.6   XFree86   4.3.6   等这些版本是实现X协议的软件XFree86的版本号.这是初学者经常高混淆的概念.      
  协议版本和实现协议的软件的版本--这两个概念的区别你分清楚了吗?      
   
  五,X服务器和WM(window   manager   窗口管理器)之间是什么关系.      
  平时大家起动图形界面是怎么启动的呢?      
  如果你是一开己就进入图形界面那就太遗憾了.应为你错过了了解X服务器起动过程的好时机.不过没关系.你打开一个XTERM输入:      
  init   3      
  就可以安全的回到字符界面.      
  好了,等做完以下实验你就完全明白X和WM(window   manager   窗口管理器)之间是什么关系了.      
  先输入以下命令:      
  #startx      
  起动图形界面,你看到的是一个和平时使用一样的完整的图形界面操作环境.      
  你可以最大化,最小化,移动,关闭窗口等.      
  按ctrl+alt+backspace反回字符界面.      
  输入:      
  #xinit      
  再次启动图形界面,你看到了什么,你看到一个XTERM.而且不能移动.但是你可以在这个XTERM中输入命令打开X应用程序,如果我输入:      
  #mozilla      
  打开浏览器,你看到的浏览器和平时有什么不同吗?他在屏幕中间,不能移动,不能最小化,不能最大化,没有边框.      
  为什么同样一个X应用程序会有这样的不同呢?因为我们用startx起动图形界面的时候同时也启动了一个WM(即窗口管理器),如果你用KDE就起动了 KDE,如果你用GNOME就起动了GNOME.但是你用xinit起动图形界面的时候却没有起动WM.      
  现在你明白窗口管理器的作用了吗?他的作用就是最大化,最小化,移动,关闭窗口等.而这些不是X服务器来负责完成的.      
  如果你用xinit起动图形界面并在xterm中输入twm,看看会有什么?      
  xterm被加上了一个边框,你可以通过这个边框移动,最大化,最小化这个xterm,twm就是XFree86中自带的窗口管理器,是一个比较简陋的最简单的窗口管理器,但是他具有窗口管理器的全部特征.      
  如果你不输入twm而输入gnome-session就可以起动GNOME      
  或者输入startkde起动KDE.      
  通过以上的实验你就可以清楚的明白他们之间的关系.      
     
  六,关于KDE和GNOME      
  KDE   和GNOME是LINUX里最常用的图形界面操作环境,他们不仅仅是一个窗口管理器那么简单,   KDE是K   Desktop   Environment   的缩写.他不仅是一个窗口管理器,还有很多配套的应用软件和方便使用的桌面环境,比如任务栏,开始菜单,桌面图标等等.      
  GNOME是GNU   Network   Object   Model   Environment   的缩写.和KDE一样,也是一个功能强大的综合环境.      
  另外在其它UNIX系统中,常常使用CDE作为这样一个环境.      
  其它的小型窗口管理器有:      
  window   maker,after   step,blackbox,fvwm,fvwm2,等等都是常用的优秀窗口管理器.REDHAT9中有   window   maker   但是默认不安装,大家可以装来试试.只要xinit再wmaker&就可以用windowmaker了.      
  七,linux图形界面层次关系总结      
  linux本身-->X服务器<-[通过X协议交谈]->窗口管理器(综合桌面环境)-->X应用程序. 


X11,FVWM,GNOME,KDE的区别

我用Linux也有一段时间了,但是在看一些老鸟们的文章时经常看到一些WM啊,桌面啊,X11啊之类的词,我模模糊糊的知道这些都是关于图形介面的名词,但是具体什么区别就不知道了。

今天抽空稍微查了一下,终于知道了他们的区别。

X Window System
X Window 系统版本 11,简称 X11,是一个运行于UNIX上的对网络透明的客户/服务器架构的图形显示系统。X并不是UNIX核心的一部分,而是在核心之上的一个应用程序。X提供一种协议,用来产生图形用户界面GUI。X不会负责很多事情,它只负责绘制(Drawing),移动窗口(Moving windows),和鼠标、键盘交互。X11 是 Unix 事实上的图形系统标准。Linux,各种 BSD 版本和多数的商用 Unix 都采用它,类似 CDE,KDE 和 GNOME 等桌面环境都运行在它之上。但是Linux使用的是一个叫XFree86的免费X11实现来提供相同的功能。不过由于一些License的问题,现在 X11的实现已经变成XOrg了。在Linux里面可以到/etc/X11/xorg.conf看到其配置文件。

Window Manager
在多数图形环境中,窗口边框的外观(标题栏,关闭按钮,等)如何显示是由系统定义的。 X11 则不是这样。在 X11 中,窗口的框架(也称为"装饰")是由一个称为窗口管理器的单独程序提供的。一般认为,窗口管理器只是另外一个客户程序;它用通常的办法启动,并与 X 服务器按同样的方法通信。有很多不同的窗口管理器供我们选择。 xwinman.org有一个详细的清单。多数常见的窗口管理器都允许用户定制称为主题的窗口外观。许多窗口管理器还提供额外的功能,象在根窗口上的弹出菜单让用户启动程序,docks,或程序启动按钮,提供一个或多个虚拟桌面。有一些WM还提供与桌面环境(A Desktop Environment)交互接口。

WM的功能可以用简单的一个词来概括--中转。比如一个程序要求X11绘制一个窗口,这个请求会首先被重定向到WM,WM来确定如何绘制窗口的标题栏(caption)和边框(Frame),在X系统中,这两个元素是由WM决定的。因此用户在窗口上拖拉和缩放也是由WM来做出反应。大多数WM还支持窗口最小化,也就是变成一个在窗口底部的图标。这项工作不属于X系统核心协议之列,因此是一些WM自己实现的。

大多数WM还处理一些其他的任务,比如显示根窗口(root window),这个就是Linux里面的桌面,和windows的桌面是topmost window同样的概念。WM还处理在根窗口上的键盘和鼠标操作,比如Alt-F4关闭窗口之类的功能。


GNOME,KDE,xFce等
这些都是桌面环境(Desktop Envrionment),他们运行于WM之上,提供更完善的桌面集成功能,更自由的定制操作系统使用方式。X上面的桌面环境与windows,Mac OS X等不同,它可以自由组合,自由更改。大多数的DE由窗口管理器(WM),文件管理器(FM),一组主题(Theme)与其他用来管理桌面的程序和库组成。所有这些组件都可以单独调换,随意组合成自己想要的桌面环境。不过现在很多Linux发行版都有一个预先固定的组合比如GNOME,KDE等(这两个已经成为最流行,最成熟的DE了)。


x window是图形界面的基础,使机器能显示图形界面。
gnome KDE是建立在X window上的两种桌面环境
说白了,x windows是基础,他可以建立窗体
而这些窗体不可能同时的出于前台
这样就需要一个窗体管理起
gnome和kde一开始都是窗体管理器
后来慢慢的发展起来,成为了一个桌面环境了




IceWM , FVWM , Blackbox 这些是窗口管理器
KDE , Gnome 这些是桌面环境

桌面环境 = 窗口管理器 + 文件管理器 + 图形化桌面配置工具 + 浏览器 + 桌面应用程序 + 办公软件 等等


X 做的事情是在屏幕上画点、画线、写字
Window Manager 做的事情管理窗口的标题栏的样子、窗口之间如何重叠、如何提升、最小化等等
Desktop Environment 做的事情是提供一整套图形界面下使用的程序,如浏览器、邮件客户端等等

十个招数帮你轻松保护Linux系统

无论你是Linux的普通桌面用户还是管理多个服务器的系统管理员,你都面临着同样的问题:日益增加的各种威胁。Linux是一个开放式系统,可以在网络上找到许多现成的程序和工具,这既方便了用户,也方便了黑客,因为他们也能很容易地找到程序和工具来潜入Linux系统,或者盗取Linux系统上的重要信息。不过,只要我们仔细地设定Linux的各种系统功能,并且加上必要的安全措施,就能让黑客们无机可乘。

  一般来说,对Linux系统的安全设定包括取消不必要的服务、限制远程存取、隐藏重要资料、修补安全漏洞、采用安全工具以及经常性的安全检查等。本文教你十种提高Linux系统安全性的招数。虽然招数不大,但招招奏效,你不妨一试。

  1.部署防火墙

  这听起来像一条最“明显”的建议(就像使用健壮密码一样),但令人惊奇地是,很少有人真正去设置防火墙。即使你使用的路由器可能内置了防火墙,但是在Linux系统中部署一个软件防火墙是一件非常轻松的事情,你能够从中受益匪浅。

  图形防火墙,例如最近比较流行的Firestarter,非常适合定义口转发和监测活动规则。

  2.禁用不必要的网络

  般来说,除了http、smtp、telnet和ftp之外,其他服务都应该取消,诸如简单文件传输协议tftp、网络邮件存储及接收所用的imap/ipop传输协议、寻找和搜索资料用的gopher以及用于时间同步的daytime和time等。

  还有一些报告系统状态的服务,如finger、efinger、systat和netstat等,虽然对系统查错和寻找用户非常有用,但也给黑客提供了方便之门。例如,黑客可以利用finger服务查找用户的电话、使用目录以及其他重要信息。因此,很多Linux系统将这些服务全部取消或部分取消,以增强系统的安全性。

  3.使用更加安全的传输替代方式

  SSH是安全套接层的简称,它是可以安全地用来取代rlogin、rsh和rcp等公用程序的一套程序组。SSH采用公开密钥技术对网络上两台主机之间的通信信息加密,并且用其密钥充当身份验证的工具。

  由于SSH将网络上的信息加密,因此它可以用来安全地登录到远程主机上,并且在两台主机之间安全地传送信息。实际上,SSH不仅可以保障Linux主机之间的安全通信,Windows用户也可以通过SSH安全地连接到Linux服务器上。

  4.取消非root访问

  开始你可能对此感觉有些不方便,但你应确保正常用户不能访问系统工具---即使fsck和ifconfig等几乎“无害”的功能。达到这一效果的最好方法是使用sudo,Sudo程序允许一般用户经过组态设定后,以用户自己的密码再登录一次,取得超级用户的权限,但只能执行有限的几个指令。例如,应用 sudo后,可以让管理磁带备份的管理人员每天按时登录到系统中,取得超级用户权限去执行文档备份工作,但却没有特权去作其他只有超级用户才能作的工作。 Sudo不但限制了用户的权限,而且还将每次使用sudo所执行的指令记录下来,

  不管该指令的执行是成功还是失败。

  5.经常查看和拷贝日志

  网络管理人员要经常提高警惕,随时注意各种可疑状况,并且按时检查各种系统日志文件,包括一般信息日志、网络连接日志、文件传输日志以及用户登录日志等。在检查这些日志时,要注意是否有不合常理的时间记载。黑客往往会对日志进行修改已掩盖自己的痕迹,所以你要在一个非常规的地方保存一个日志的副本。最好能将日志单独房子一个远程服务器上。

  6.使用口令老化(password aging)

  口令老化一种增强的系统口令生命期认证机制,虽然它会一定程序的削弱用户使用的便利性,但是它能够确保用户的口令定期更换,这是一种非常好的安全措施。因此,如果一个帐户受到了黑客的攻击并且没有被发现,但是在下一个密码更改周期,他就不能再访问该帐号了。

  7.对root登录进行严格限制

  利用“root”身份登录不是一个好主意。安全的做法是你以普通用户的身份登录,然后利用su或sudo取得超级用户的权限,然后进行相应的工作。

  8.物理保护

  虽然大多数的攻击是依靠网络实施的,而黑客取得物理访问你的计算机的机会也非常渺茫,但这并不意味你无需设防。

  给引导程序加上密码保护,确保在你离开电脑时它总是处于锁定状态。并且你应该完全肯定没有人可以从外部设备启动你的服务器。

  9.安装最新的安全更新

  所有流行的Linux发行版除了定期发布更新外,只要遇到安全漏洞,研发人员也会很快发布相应得更新和补丁,你要做的就是经常关注有没有安全更新和补丁包发布,并及时安装。

  10.留意打开的文件

  很多Linux发行版都包含一些非常使用的小工具,lsof就是其中一个。Lsof能列出当前系统打开的所有文件。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。通过lsof工具能够查看哪些进程正在使用哪些端口,它的进程ID以及是谁在运行它。如果你从中发现了一些异常,那么你肯定值得仔细检查一番。

VIM 文件编码识别与乱码处理

在 Vim 中,有四个与编码有关的选项,它们是:fileencodingsfileencodingencodingtermencoding。在实际使用中,任何一个选项出现错误,都会导致出现乱码。因此,每一个 Vim 用户都应该明确这四个选项的含义。下面,我们详细介绍一下这四个选项的含义和作用。

1 encoding

encoding 是 Vim 内部使用的字符编码方式。当我们设置了 encoding 之后,Vim 内部所有的 buffer、寄存器、脚本中的字符串等,全都使用这个编码。Vim 在工作的时候,如果编码方式与它的内部编码不一致,它会先把编码转换成内部编码。如果工作用的编码中含有无法转换为内部编码的字符,在这些字符就会丢失。因此,在选择 Vim 的内部编码的时候,一定要使用一种表现能力足够强的编码,以免影响正常工作。
由于 encoding 选项涉及到 Vim 中所有字符的内部表示,因此只能在 Vim 启动的时候设置一次。在 Vim 工作过程中修改 encoding 会造成非常多的问题。如果没有特别的理由,请始终将 encoding 设置为 utf-8。为了避免在非 UTF-8 的系统如 Windows 下,菜单和系统提示出现乱码,可同时做这几项设置:
set encoding=utf-8
set langmenu=zh_CN.UTF-8
language message zh_CN.UTF-8

2 termencoding

termencoding 是 Vim 用于屏幕显示的编码,在显示的时候,Vim 会把内部编码转换为屏幕编码,再用于输出。内部编码中含有无法转换为屏幕编码的字符时,该字符会变成问号,但不会影响对它的编辑操作。如果 termencoding 没有设置,则直接使用 encoding 不进行转换。
举个例子,当你在 Windows 下通过 telnet 登录 Linux 工作站时,由于 Windows 的 telnet 是 GBK 编码的,而 Linux 下使用 UTF-8 编码,你在 telnet 下的 Vim 中就会乱码。此时有两种消除乱码的方式:一是把 Vim 的 encoding 改为 gbk,另一种方法是保持 encodingutf-8,把 termencoding 改为 gbk,让 Vim 在显示的时候转码。显然,使用前一种方法时,如果遇到编辑的文件中含有 GBK 无法表示的字符时,这些字符就会丢失。但如果使用后一种方法,虽然由于终端所限,这些字符无法显示,但在编辑过程中这些字符是不会丢失的。
对于图形界面下的 GVim,它的显示不依赖 TERM,因此 termencoding 对于它没有意义。在 GTK2 下的 GVim 中,termencoding 永远是 utf-8,并且不能修改。而 Windows 下的 GVim 则忽略 termencoding 的存在。

3 fileencoding

当 Vim 从磁盘上读取文件的时候,会对文件的编码进行探测。如果文件的编码方式和 Vim 的内部编码方式不同,Vim 就会对编码进行转换。转换完毕后,Vim 会将 fileencoding 选项设置为文件的编码。当 Vim 存盘的时候,如果 encodingfileencoding 不一样,Vim 就会进行编码转换。因此,通过打开文件后设置 fileencoding,我们可以将文件由一种编码转换为另一种编码。但是,由前面的介绍可以看出,fileencoding 是在打开文件的时候,由 Vim 进行探测后自动设置的。因此,如果出现乱码,我们无法通过在打开文件后重新设置 fileencoding 来纠正乱码。

4 fileencodings

编码的自动识别是通过设置 fileencodings 实现的,注意是复数形式。fileencodings 是一个用逗号分隔的列表,列表中的每一项是一种编码的名称。当我们打开文件的时候,VIM 按顺序使用 fileencodings 中的编码进行尝试解码,如果成功的话,就使用该编码方式进行解码,并将 fileencoding 设置为这个值,如果失败的话,就继续试验下一个编码。
因此,我们在设置 fileencodings 的时候,一定要把要求严格的、当文件不是这个编码的时候更容易出现解码失败的编码方式放在前面,把宽松的编码方式放在后面。
例如,latin1 是一种非常宽松的编码方式,任何一种编码方式得到的文本,用 latin1 进行解码,都不会发生解码失败——当然,解码得到的结果自然也就是理所当然的“乱码”。因此,如果你把 latin1 放到了 fileencodings 的第一位的话,打开任何中文文件都是乱码也就是理所当然的了。
以下是滇狐推荐的一个 fileencodings 设置:
set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1
其中,ucs-bom 是一种非常严格的编码,非该编码的文件几乎没有可能被误判为 ucs-bom,因此放在第一位。
utf-8 也相当严格,除了很短的文件外(例如许多人津津乐道的 GBK 编码的“联通”被误判为 UTF-8 编码的经典错误),现实生活中一般文件是几乎不可能被误判的,因此放在第二位。
接下来是 cp936 和 gb18030,这两种编码相对宽松,如果放前面的话,会出现大量误判,所以就让它们靠后一些。cp936 的编码空间比 gb18030 小,所以把 cp936 放在 gb18030 前面。
至于 big5、euc-jp 和 euc-kr,它们的严格程度和 cp936 差不多,把它们放在后面,在编辑这些编码的文件的时候必然出现大量误判,但这是 Vim 内置编码探测机制没有办法解决的事。由于中国用户很少有机会编辑这些编码的文件,因此我们还是决定把 cp936 和 gb18030 前提以保证这些编码的识别。
最后就是 latin1 了。它是一种极其宽松的编码,以至于我们不得不把它放在最后一位。不过可惜的是,当你碰到一个真的 latin1 编码的文件时,绝大部分情况下,它没有机会 fall-back 到 latin1,往往在前面的编码中就被误判了。不过,正如前面所说的,中国用户没有太多机会接触这样的文件。
如果编码被误判了,解码后的结果就无法被人类识别,于是我们就说,这个文件乱码了。此时,如果你知道这个文件的正确编码的话,可以在打开文件的时候使用 ++enc=encoding 的方式来打开文件,如:
:e ++enc=utf-8 myfile.txt

5 fencview

根据前面的介绍,我们知道,通过 Vim 内置的编码识别机制,识别率是很低的,尤其是对于简体中文 (GBK/GB18030)、繁体中文 (Big5)、日文 (euc-jp) 和韩文 (euc-kr) 之间的识别。而对于普通用户而言,肉眼看出一个文件的编码方式也是很不现实的事情。因此,滇狐强烈推荐水木社区的 mbbill 开发的 fencview 插件。该插件使用词频统计的方式识别编码,正确率非常高。点击这里 下载。


ZZ : http://edyfox.codecarver.org/html/vim_fileencodings_detection.html

firefox 个人配置文件夹详解,备份插件和个人信息

个人配置文件夹保存在什么地方?
Firefox 在不同的操作系统,配置文件夹的默认路径分别是:
操作系统     文件夹
Windows 9x/Me     C:\WINDOWS\Application Data\Mozilla\Firefox\Profiles\xxxxxxxx.default\
Windows 2000/XP/2003     C:\Documents and Settings\[User Name]\Application Data\Mozilla\Firefox\Profiles\xxxxxxxx.default\
Windows Vista     C:\Users\[user name]\AppData\Roaming\Mozilla\Firefox\Profiles\xxxxxxxx.default\
Linux     ~/.mozilla/firefox/xxxxxxxx.default/
Mac OS X     ~/Library/Application Support/Firefox/Profiles/xxxxxxxx.default/
    Windows 用户,您可以通过下面的方法进入配置文件夹:
点击“开始 > 运行...”,输入 %AppData%\Mozilla\Firefox\Profiles 并按下 Enter 即可。
    Linux 用户,请启动一个虚拟终端,输入 cd ~/.mozilla/ 便能进入 Firefox 的配置文件夹。
注:
    其 中的 [User Name] 是指登录系统时输入的用户名(默认是 “Administrator”,即 “C:\Documents and Settings\Administrator\Application Data\Mozilla”),而 Firefox 的配置文件是一个隐藏属性的文件夹,若看不到它,请在 “我的电脑->工具->文件夹选项->查看” 中选中 “显示所有文件和文件夹” 一项。
    xxxxxxxx 是一个8位的随机字符串。
    Linux 系统中,在终端下,首先请切换到个人的主目录中(在终端里输入 cd 即可),再请用 ls -a 来查看。
如果是在图形界面中,一般在文件管理器上面能找到相关选项显示隐藏文件。如:点击 “编辑 -> 首选项 -> 视图 -> 显示隐藏”。或者在查看(或其他)菜单里能找到 “显示隐藏文件” 项。
个人配置文件夹中有什么,为什么很重要?
配置文件是 Firefox 存放各项设置的地方,除此之外,浏览网页时存放的缓存、安装的扩展和主题也在其中。如果想将 Firefox 恢复到初始状态,只需删除配置文件夹即可。
部分文件说明:
    prefs.js:Firefox 的各项设定
    bookmarks.html:Firefox 的书签
    cookies.txt:Cookies
    hostperm.1:Cookies 允许/禁止列表
    downloads.rdf:下载历史
    formhistory.dat:表单输入历史记录
    mimeTypes.rdf:文件类型处理设定
    extensions.rdf:安装的扩展的信息
    search.rdf:搜索栏历史记录
    key3.db:密码文件,必须和 signons.txt 一起保存
    signons.txt:密码文件,必须和 key3.db 一起保存
部分文件夹说明:
    bookmarkbackups: 自动备份书签的文件夹,每当更改书签后,就能里面找到原来的书签,备份的文件加上了备份的日期,想恢复 时,请将文件重命名为 bookmark.html 再放到配置文件中,替换已有的 bookmark.html。(Firefox 1.5 以上版本才有这个文件夹)
    searchplugins:存放搜索引擎和其图标的文件夹。(Firefox 1.5 以上版本才有这个文件夹)
    Cache:Firefox 的缓存文件夹,Firefox 浏览过的网页的缓存文件默认是在个人配置文件夹的 \cache\ 目录下。
    extensions:存放主题和扩展的文件夹。安装后的 Extensions(扩展)就放在配置文件夹的 extensions 子目录下。删除 extensions 这个子目录就可将已安装的 extensions 全部删除。
如果是global安装,主题在firefox\extensins下的某个文件夹内;如果是local安装,主题在profile \extensons下某个文件夹内
win系统下,Firefox 的主题保存在类似下面这个文件夹中:
local:
C:\Documents and Settings\UserName\Application ata\Mozilla\Firefox\Profiles \dbuoun8g.default\extensions\{00D4154F-96D3-41ff-8E8E-113596D8670B}\
global:
D:\Program Files\Mozilla Firefox\extensions\{972ce4c6-7e08-4474-a285-3208198ce6fd}\
如何打开配置文件管理器 ( 如何新建配置文件 )?
在 Firefox 的启动路径后加上参数 “-p”(不带引号)或是 “-profilemanager”(不带引号)即可。如:
firefox -p
firefox -profilemanager
    Windows 系统,也可从开始菜单中选择 “开始--> 运行”,输入
firefox -p
如果不行,请输入 Firefox 的完整路径,然后加上参数“-p”(不带引号),如:
"C:\Program Files\MozillaFirefox\MozillaFirefox.exe" -p
打开配置文件管理器,您就可以增加、删除、重命名原来的配置文件了。另外请一定注意‘-p’前有空格。其中的 C:\Program Files\Mozilla Firefox\ 是指的 Firefox.exe 文件的具体路径,请根据自己情况调整。
    Linux 系统,请打开终端,切换到 Firefox 目录下,然后运行
./firefox -p

./firefox -profilemanager
启动 Firefox,并创建配置文件。如:
cd /usr/lib/firefox
./firefox -profilemanager
注意:
    打开配置文件管理器前,必须关闭 Firefox 的所有进程。WINDOWS 中在任务管理器中查看和关闭 Firefox;Linux 下则用 ps 和 kill 命令查看和关闭 Firefox。
    给 Firefox 建立新的配置文件时应该建一个新文件夹,少数朋友可能会图方便而利用一个已有的文件夹,比如放到桌面上,强烈建议您不要这样做。这是由于 Firefox 在删除其配置文件时,会删除该文件夹内的所有文档,若把配置文件夹放到桌面上,那么在删除这个配置文件后,你就会发现,除了我的电脑、我的文档、回收站之 外,其余东西都没了。因此请一定注意不要省略“新建文件夹”这一步。
如何完整的备份 Firefox 的所有设置?
    备份(复制)Firefox 的配置文件(profile)。
    备份(复制)安装目录下的 plugins(此目录下包括在线播放的一些插件和设置)
    备份(复制)安装目录下的 searchplugins(此目录下包括搜索引擎的的设置)
在重装系统后后,把以上三个备份的文件夹覆盖回去即可,这样所有的设置的配置、收藏夹、扩展等都和以前一样的。 推荐使用 MozBackup 备份软件。
注意:在安装新版本的 Firefox 时,最好是完全卸载 Firefox(仅保留书签),然后重新进行设置。
在启动时如何直接使用不同的配置文件?
创建了多个配置文件,启动时又不想启动配置文件管理器,只需在加“-p”时在后面带上创建的配置文件夹名称就行。例如,创建了多个配置文件后再启动 最初默认的配置文件,使用的参数为:
-p "default"
要注意的是在 -p 后,"default" 前有空格,并且加参数时必须区别大小写。
至于其余的配置文件的名称,则是在配置文件管理器中看到的名称。例如,在配置文件管理器中名称为 Default User 的配置文件,那么直接启动它的参数是:
-p "Default User"
要 更改 Firefox 的快捷方式以打开的配置文件,只需在Firefox的快捷方式上点击“鼠标右键→属性”,将 -p "profilename"添加到目标栏中即可。 最后要说明的是,添加的配置文件名是在配置文件管理器中显示的名称,不一定是磁盘中配置文件的实际名称(除非两个名称相同)。
ps:转载自http://hi.baidu.com/becaused/blog/item/67a56d81f5f08ddfbd3e1e78.html

谈谈Unicode编码,简要解释UCS、UTF、BMP、BOM等名词



这是一篇程序员写给程序员的趣味读物。所谓趣味是指可以比较轻松地了解一些原来不清楚的概念,增进知识,类似于打RPG游戏的升级。整理这篇文章的动机是两个问题:
问题一:
使用Windows记事本的“另存为”,可以在GBK、Unicode、Unicode big endian和UTF-8这几种编码方式间相互转换。同样是txt文件,Windows是怎样识别编码方式的呢?
我很早前就发现Unicode、Unicode big endian和UTF-8编码的txt文件的开头会多出几个字节,分别是FF、FE(Unicode),FE、FF(Unicode big endian),EF、BB、BF(UTF-8)。但这些标记是基于什么标准呢?
问题二:
最近在网上看到一个ConvertUTF.c,实现了UTF-32、UTF-16和UTF- 8这三种编码方式的相互转换。对于Unicode (UCS2)、GBK、UTF-8这些编码方式,我原来就了解。但这个程序让我有些糊涂,想不起来UTF-16和UCS2有什么关系。
查了查相关资料,总算将这些问题弄清楚了,顺带也了解了一些Unicode的细节。写成一篇文章,送给有过类似疑问的朋友。本文在写作时尽量做到通俗易懂,但要求读者知道什么是字节,什么是十六进制。
0、big endian和little endian
big endian和little endian是CPU处理多字节数的不同方式。例如“汉”字的Unicode编码是6C49。那么写到文件里时,究竟是将6C写在前面,还是将49写在前 面?如果将6C写在前面,就是big endian。还是将49写在前面,就是little endian。
“endian”这个词出自《格列佛游记》。小人国的内战就源于吃鸡蛋时是究竟从大头(Big-Endian)敲开还是从小头(Little-Endian)敲开,由此曾发生过六次叛乱,其中一个皇帝送了命,另一个丢了王位。
我们一般将endian翻译成“字节序”,将big endian和little endian称作“大尾”和“小尾”。
1、字符编码、内码,顺带介绍汉字编码
字符必须编码后才能被计算机处理。计算机使用的缺省编码方式就是计算机的内码。早期的计算机使用7位的ASCII编码,为了处理汉字,程序员设计了用于简体中文的GB2312和用于繁体中文的big5。
GB2312(1980年)一共收录了7445个字符,包括6763个汉字和682个其它符号。汉字区的内码范围高字节从B0-F7,低字节从A1-FE,占用的码位是72*94=6768。其中有5个空位是D7FA-D7FE。
GB2312支持的汉字太少。1995年的汉字扩展规范GBK1.0收录了21886个符 号,它分为汉字区和图形符号区。汉字区包括21003个字符。 2000年的GB18030是取代GBK1.0的正式国家标准。该标准收录了27484个汉字,同时还收录了藏文、蒙文、维吾尔文等主要的少数民族文字。 现在的PC平台必须支持GB18030,对嵌入式产品暂不作要求。所以手机、MP3一般只支持GB2312。
从ASCII、GB2312、GBK到GB18030,这些编码方法是向下兼容的,即同一个 字符在这些方案中总是有相同的编码,后面的标准支持更多的字符。在这些编码中,英文和中文可以统一地处理。区分中文编码的方法是高字节的最高位不为0。按 照程序员的称呼,GB2312、GBK到GB18030都属于双字节字符集 (DBCS)。
有的中文Windows的缺省内码还是GBK,可以通过GB18030升级包升级到GB18030。不过GB18030相对GBK增加的字符,普通人是很难用到的,通常我们还是用GBK指代中文Windows内码。
这里还有一些细节:
GB2312的原文还是区位码,从区位码到内码,需要在高字节和低字节上分别加上A0。
在DBCS中,GB内码的存储格式始终是big endian,即高位在前。
GB2312的两个字节的最高位都是1。但符合这个条件的码位只有 128*128=16384个。所以GBK和GB18030的低字节最高位都可能不是 1。不过这不影响DBCS字符流的解析:在读取DBCS字符流时,只要遇到高位为1的字节,就可以将下两个字节作为一个双字节编码,而不用管低字节的高位 是什么。
2、Unicode、UCS和UTF
前面提到从ASCII、GB2312、GBK到GB18030的编码方法是向下兼容的。而Unicode只与ASCII兼容(更准确地说,是与ISO-8859-1兼容),与GB码不兼容。例如“汉”字的Unicode编码是6C49,而GB码是BABA。
Unicode也是一种字符编码方法,不过它是由国际组织设计,可以容纳全世界所有语言文字 的编码方案。Unicode的学名是"Universal Multiple-Octet Coded Character Set",简称为UCS。UCS可以看作是"Unicode Character Set"的缩写。
根据维基百科全书(http://zh.wikipedia.org/wiki/)的记载:历史上存在两个试图独立设计Unicode的组织,即国际标准化组织(ISO)和一个软件制造商的协会(unicode.org)。ISO开发了ISO 10646项目,Unicode协会开发了Unicode项目。
在1991年前后,双方都认识到世界不需要两个不兼容的字符集。于是它们开始合并双方的工作成果,并为创立一个单一编码表而协同工作。从Unicode2.0开始,Unicode项目采用了与ISO 10646-1相同的字库和字码。
目前两个项目仍都存在,并独立地公布各自的标准。Unicode协会现在的最新版本是2005年的Unicode 4.1.0。ISO的最新标准是10646-3:2003。
UCS规定了怎么用多个字节表示各种文字。怎样传输这些编码,是由UTF(UCS Transformation Format)规范规定的,常见的UTF规范包括UTF-8、UTF-7、UTF-16。
IETF的RFC2781和RFC3629以RFC的一贯风格,清晰、明快又不失严谨地描述 了UTF-16和UTF-8的编码方法。我总是记不得IETF 是Internet Engineering Task Force的缩写。但IETF负责维护的RFC是Internet上一切规范的基础。
3、UCS-2、UCS-4、BMP
UCS有两种格式:UCS-2和UCS-4。顾名思义,UCS-2就是用两个字节编码,UCS-4就是用4个字节(实际上只用了31位,最高位必须为0)编码。下面让我们做一些简单的数学游戏:
UCS-2有2^16=65536个码位,UCS-4有2^31=2147483648个码位。
UCS-4根据最高位为0的最高字节分成2^7=128个group。每个group再根据 次高字节分为256个plane。每个plane根据第3个字节分为256行 (rows),每行包含256个cells。当然同一行的cells只是最后一个字节不同,其余都相同。
group 0的plane 0被称作Basic Multilingual Plane, 即BMP。或者说UCS-4中,高两个字节为0的码位被称作BMP。
将UCS-4的BMP去掉前面的两个零字节就得到了UCS-2。在UCS-2的两个字节前加上两个零字节,就得到了UCS-4的BMP。而目前的UCS-4规范中还没有任何字符被分配在BMP之外。
4、UTF编码
UTF-8就是以8位为单元对UCS进行编码。从UCS-2到UTF-8的编码方式如下:
UCS-2编码(16进制) UTF-8 字节流(二进制)
0000 - 007F 0xxxxxxx
0080 - 07FF 110xxxxx 10xxxxxx
0800 - FFFF 1110xxxx 10xxxxxx 10xxxxxx
例如“汉”字的Unicode编码是6C49。6C49在0800-FFFF之间,所以肯定要用3字节模板了:1110xxxx 10xxxxxx 10xxxxxx。将6C49写成二进制是:0110 110001 001001, 用这个比特流依次代替模板中的x,得到:11100110 10110001 10001001,即E6 B1 89。
读者可以用记事本测试一下我们的编码是否正确。
UTF-16以16位为单元对UCS进行编码。对于小于0x10000的UCS码,UTF- 16编码就等于UCS码对应的16位无符号整数。对于不小于 0x10000的UCS码,定义了一个算法。不过由于实际使用的UCS2,或者UCS4的BMP必然小于0x10000,所以就目前而言,可以认为UTF -16和UCS-2基本相同。但UCS-2只是一个编码方案,UTF-16却要用于实际的传输,所以就不得不考虑字节序的问题。
5、UTF的字节序和BOM
UTF-8以字节为编码单元,没有字节序的问题。UTF-16以两个字节为编码单元,在解释 一个UTF-16文本前,首先要弄清楚每个编码单元的字节序。例如收到一个“奎”的Unicode编码是594E,“乙”的Unicode编码是 4E59。如果我们收到UTF-16字节流“594E”,那么这是 “奎”还是“乙”?
Unicode规范中推荐的标记字节顺序的方法是BOM。BOM不是“Bill Of Material”的BOM表,而是Byte Order Mark。BOM是一个有点小聪明的想法:
在UCS编码中有一个叫做"ZERO WIDTH NO-BREAK SPACE"的字符,它的编码是FEFF。而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中。UCS规范建议我们在传输字节流前,先传输 字符"ZERO WIDTH NO-BREAK SPACE"。
这样如果接收者收到FEFF,就表明这个字节流是Big-Endian的;如果收到FFFE,就表明这个字节流是Little-Endian的。因此字符"ZERO WIDTH NO-BREAK SPACE"又被称作BOM。
UTF-8不需要BOM来表明字节顺序,但可以用BOM来表明编码方式。字符"ZERO WIDTH NO-BREAK SPACE"的UTF-8编码是EF BB BF(读者可以用我们前面介绍的编码方法验证一下)。所以如果接收者收到以EF BB BF开头的字节流,就知道这是UTF-8编码了。
Windows就是使用BOM来标记文本文件的编码方式的。
6、进一步的参考资料
本文主要参考的资料是 "Short overview of ISO-IEC 10646 and Unicode" (http://www.nada.kth.se/i18n/ucs/unicode-iso10646-oview.html)。
我还找了两篇看上去不错的资料,不过因为我开始的疑问都找到了答案,所以就没有看:
"Understanding Unicode A general introduction to the Unicode Standard" (http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&;item_id=IWS-Chapter04a)
"Character set encoding basics Understanding character set encodings and legacy encodings" (http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&;item_id=IWS-Chapter03)
from http://blog.163.com/lgh_2002/blog/static/4401752620099135391219/

常见压缩文件的解压缩方法


本文介绍rar、zip、gz、bz2、tar文件的解压缩方法
rar
rar是目前Windows上最常用的格式,也是国内互联网上最流行的压缩格式。
rar的解压缩要使用rarlab提供的程序,也就是Linux版的rar,可以上网搜索下载。但多数的发行版,包括Debian,都提供rar的包(不过是non-free的),可以直接安装。
使用方法:
$ rar x rar文件名
该方法解压rar文件,包括rar文件中的目录结构
$ rar e rar文件名
解压rar文件,但不创建任何子文件夹
man rar 可以查看更多帮助
其实它的使用方法和WinRAR的控制台是一样的,也可以参照WinRAR的控制台参考使用rar
zip
也是Windows中常用的压缩格式,解压zip文件很简单:
$ unzip zip文件名
gz
gz是Linux下常用的压缩格式,它是比较快的压缩方案,但压缩效果似乎不好。
解压gz文件很简单:
$ gunzip sample.gz
bz2
bzip2的压缩效果通常gz要好,使用bunzip2进行解压
$ bunzip2 sample.bz2
tar
tar是一种打包工具,常和gz、bzip2一起使用,解压的方法是:
$ tar xvf sample.tar
$ tar xvfz sample.tar.gz
$ tar xvf sample.tar.bz2
x表示解压,v表示显示详细信息,f表示从文件输入而不是stdin。
注意用gz压缩的tar文件解压时要加上z,以示是gzip压缩的文件,而经过bz2压缩的则不用。
较新版本的 tar 已经支持自动检测压缩方式,所以可以直接使用 xf 参数解压所有压缩方式的 tar 文件。
$ tar xf sample.tar.bz2
$ tar xf sample.tar.gz
$ tar xf sample.tar

常见字符编码类型 汇总比较表

作者: 


字符集(编码标准)等同国际标准编码方式实现方式备注
ASCII国际标准ISO/IEC 646


EASCIIISO/IEC 8859-n

ASCII码由7位扩充为8位而成。EASCII的内码是由0到255共有256个字符组成。EASCII码比ASCII码扩充出来的符号包括表格符号、计算符号、希腊字母和特殊的拉丁符号。
ISO/ICE 8859-n


每个字集定义最多96个字母或符号,在0xA0-0xFF根据不同字符集放入不同的字符。
ISO-8859-n(与上面那个不同)


ISO-8859-n(在ISO与8859之间加上一连字号)则是由IANA根据ISO/IEC 8859-n所定义的编码表。它除了ISO/IEC 8859-n的字符外,还包括ASCII(0x20-0x7E)字符及65个控制字符(0x00-0x1F及0x7E-0x9F)。
Unicode
UCS-2,使用16位的编码空间
UCS-4,占用4字节编码空间
UTF-7
UTF-8
UTF-16
UTF-16 LE
UTF-16 BE
UTF-32
任何文字在Unicode中都对应一个值,这个值称为代码点(code point)。代码点的值通常写成 U+ABCD 的格式。
而文字和代码点之间的对应关系就是UCS-2(Universal Character Set coded in 2 octets)。UCS-4,即用四个字节表示代码点。
它的范围为 U+00000000~U+7FFFFFFF,其中 U+00000000~U+0000FFFF和UCS-2是一样的。
UCS-2和UCS-4只规定了代码点和文字之间的对应关系,并没有规定代码点在计算机中如何存储。
规定存储方式的称为UTF(Unicode Transformation Format),其中应用较多的就是UTF-16和UTF-8了。
ISO/IEC 10646
从Unicode 2.0开始,Unicode采用了与ISO 10646-1相同的字库和字码;ISO也承诺,ISO 10646将不会替超出U+10FFFF的UCS-4编码赋值,以使得两者保持一致。

GB2312
GB?2312字符使用两个字节来表示。“第一位字节”使用0xA1-0xF7,“第二位字节”使用0xA1-0xFEEUC-CNEUC
GBK
GBK是双字节编码,每个字符用两个字节表示。
GBK 同时也向下兼容GB2312 编码
GB18030 双字节字符的码位空间就是0x8140~0xFE7E和0x8180~0xFEFE,双字节字符的码位数目是7938+16002=23940。 0x8140~0xFE7E和0x8180~0xFEFE也是GBK的全部码位空间。GBK在这23940个码位中定义了21886个字符。
GB 13000



GB 18030
每个字可以由1个、2个或4个字节组成
单字节,其值从0到0x7F。
双字节,第一个字节的值从0x81到0xFE,第二个字节的值从0x40到0xFE(不包括0x7F)。
四字节,第一个字节的值从0x81到0xFE,第二个字节的值从0x30到0x39,第三个字节从0x81到0xFE,第四个字节从0x30到0x39。
Unicode转换格式(Unicode Translation Format,简称为 UTF)