linux学习文档-1

 是在网上文章的基础上添加了自己的理解。

linux图形界面基本知识(完全搞通X xfree86 xwindow等之间的关系)
LINUX初学者经常分不清楚 linux和X之间,X和Xfree86之间,X和KDE,GNOME等之间是什么关系。常常混淆或者不清楚这些概念,本文以比较容易理解的方式来解释 X,X11,XFREE86,WM,KDE,GNOME等之间的关系。
一、 linux本身没有图形界面。
    linux只是一个基于命令行的操作系统。 linux现有的图形界面只是linux下应用程序的实现。所以linux图形界面并不是linux的一部分。
linux和 Xfree的关系就相当于当年的DOS和 WINDOWS3.0一样,windows3.0不是独立的操作系统,它只是DOS 的扩充,是DOS下的应用程序级别的系统,不是独立的操作系统,同样 XFree只是linux下的一个应用程序而已。不是系统的一部分,但是Xfree 的存在可以方便用户使用电脑。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服务器说:“请再画 一个正方形”,当然他会告诉服务器在什么地方用什么颜色画多大的正方形,但不关心具体怎么画,因为那是服务器的事情。
 
那么 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协议的实施是做在系统内核里的,(那么照以前的定义这个系统就是属于windows的范畴了)所以性能明显好很多,这就是为什么很多大型三维图形设计软件都是在苹果平台上的原因.
 
为了便于理解拿 HTTP协议来比较:
协议是 HTTP (hyper text transmission protocol)
实 现这个协议的常用服务器有 :Apache,IIS 等。
请求这些服务器传输文件的客户有 :IE ,MOZILLA ,NETSCAPE等.
协议是 X
实现这个协议的常用服务器有 Xfree86 ,Xorg ,Xnest等.对应Apache, IIS.
请求这些服务器来完成显示任务的客户 :所有的X应用程序.对应IE MOZILIA.例如:fcitx
只不过 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服务器来负责完成的. X系统只负责显示图形,并不限制显示和操作的风格,因此不同的X Window的风格并不相同。
如果你用 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了.
    KDE项目是在 1997年由德国自由程序员发起的,他们采用了挪威TrollTech软件公司的Qt图形界面库作为基础开发平台,C++为主要开发语言。1999年KDE1.1.2发行以后,它就成为Linux界“事实”上的桌面标准。然而,因为KDE使用的Qt库所遵循的软件版权协议QPL并不是真正的自由软件协议,这在自由软件界引起了很大的非议,例如以纯自由软件构成的Linux发行版Debian就拒绝使用KDE。当然,最终用户并不太关心软件许可问题,对他们来说KDE易用性和强大的功能是最重要的。因此,KDE还是得到了广泛的应用。
    为了与KDE相抗衡,世界最大的自由软件组织GNU(即自由软件基金会)发起了GNOME桌面环境项目。GNOME采取了完全松散的自由软件开发模式,整个项目由一系列独立的软件组成,每个软件都由各自独立的开发组负责。这种松散的开发模式使得GNOME的进展非常缓慢。1999年推出的GNOME1.0与KDE 1.1.2相比在各个方面都差很多,直到2000年推出GNOME 1.2后才有了很大的进步。然而与即将推出的KDE2.0相比,GNOME在许多方面还非常不完善,例如没有一个统一的办公套件,没有集文件管理器和网络浏览器等功能于一身的综合文件管理软件,另外GNOME还缺乏成熟的电子邮件、个人信息助理等实用工具软件。而且与KDE相比GNOME的各个组件的集成度还远远不够,不同组件之间的风格也有很大差别。不管从哪个方面来看,一切似乎都对KDE有利而对GNOME不利。曾经有一段时间,人们都在担心GNOME会半路夭折。与KDE不同,GNOME采用了符合GPL自由软件协议的GDK、GTK作为其底层开发平台,也就是说GNOME是真正意义上的GPL自由软件,商业公司无需支付任何费用就可以自由使用它。可以说这是商业公司选择GNOME而不选KDE的首要因素。当然,光有这个理由还不足以服人,要想成为名副其实的桌面环境标准,在技术上也必须有过硬表现才行。GNOME在GTK的基础上扩充了许多额外的功能,开发了一系列GNOME程序通用的函数库和程序,因此具有统一的界面风格和使用习惯。
    KDE适应用户使用, GNOME适合开发。
七、 Xwindow QT概念
    X-Window提供了创建图形界面的基础。但是它只管在屏幕画点、画线、画框和着色,至于在哪里画点、画什么样的线、画什么样的框,以及着什么色,这些要求都是由客户端程序提交的。一套桌面环境一般会包括窗口管理器、面板、菜单、桌面背景设置和一些常用的小程序,负责为使用者创建一个友好的图形化操作界面。大多数 Linux发行版附带的X-Window都是XFree86。KDE和gnone则是基于Xwindow运行的操作环境,并且添加了很多其他方便使用的东西。
    Qt是诺基亚开发的一个跨平台的 C++图形用户界面应用程序框架。它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能。Qt是完全面向对象的,很容易扩展,并且允许真正地组件编程。自从1996年早些时候,Qt进入商业领域,它已经成为全世界范围内数千种成功的应用程序的基础。Qt也是流行的Linux桌面环境KDE 的基础。 基本上,Qt 同 XWindow 上的 Motif,Openwin,GTK 等图形界面库和 Windows平台上的 MFC,OWL,VCL,ATL是同类型的东西,但Qt具有优良的跨平台特性、面向对象、丰富的API、大量的开发文档等优点。QT是一个跨平台的 C++ 图形用户界面库,由挪威 TrollTech 公司于1995年底出品。
八、 linux 图形界面层次关系总结
linux本身 -->X服务器<-[通过X协议交谈]->窗口管理器(综合桌面操作环 境)-->X应用程序.
Xfree86服务器的实现包括两个部分,一部分是和显卡直接打交道的低层,一部分是和 X应用程序打交道的上层。上层负责接收应用程序的请求和鼠标键盘的动作。而和显卡直接
打交道的底层负责指挥显卡生成图形,其实就是显卡驱动。上层接收到应用程序的请求后
,将请求内容做适当处理,然后交给显卡驱动来 指挥 显卡完成画图的动作 .另外上层的捕捉键盘和鼠标动作的部分会向应用程序提供鼠标和键盘的状态信息,应用程序接收到这些信息后决定是否再有相应的动作.
 
九、 Xfree86服务的具体介绍
平时说的 VESA,VGA ,fbdev等其实就是针对不同模式显卡的驱动程序.
VESA(Video Electronics Standards Association)
VGA (Video Graphics Array)
fbdev (FrameBuffer Device)
等都是不同的显卡标准,不过这些标准都已经很老了 .现在的显卡都兼容这几种模式.
framebuffer模式的显卡本身不具有任何运算数据的能力,他好比是一个暂时存放水的水池 .CPU将运算后的结果放到这个水池,水池再将结果流到显示器.中间不会对数据做处理
.在这中情况 下,所有显示任务都有 CPU完成,CPU负担很重.从frambuffer这个名字我们就能猜测到他的功能 了(数据侦缓冲).
linux内核中有有framebuffer机制模仿显卡的这种功能.他的好处是把显卡的硬件结构抽象掉,把所有的显卡都当做一个"水池"来用.应用程序也可以直接读取这个水池的内容.framebuffer的设备名是 /dev/fb
可以用命令 :
#dd if=/dev/zero of=/dev/fb
清空屏幕 .如果你的X用的是framebuffer的驱动,屏幕将全变黑.通过移动鼠标,切换窗口
等动作可以让原先的内容重新显示 .
如果你不用 framebuffer驱动,可以在字符模式下做这个试验.屏幕将全部被清空.
以 下的命令 :
#dd if=/dev/fb of=fbfile
可以将 fb中的内容保存下来,以后可以重新写回屏幕:
#dd if=fbfile of=/dev/fb
作用类似于屏幕截图,但是截下的图不能用普通图片浏览器看 .
现在知道 linux中framebuffer设备的神奇了吧.
linux字符界面在高分辨率下,启动时会有一个小企鹅 logo,这个logo就是用framebuffer
功能写上屏幕的 .
VESA和 VGA比FB要好很多,但是他的显示能力也很有限.CPU仍旧要处理大部分的 显示任务.现在的显卡就不一样了,CPU几乎不参数显示任务,而专注于运算工作.我们平时在linux
下装显卡驱动,其实就是替 换掉 XFree86中底层的那 一部分. 使他有更强的显示能力.比
如你的显卡是 nvidia的,XFree默认的驱动是"nv",他是一个 nvidia显卡的通用驱动,但
是他不能发挥 nvidia显卡的性能.这个"nv"驱动模块可以在:
/usr/X11R6/lib/modules/drivers
目录下找到,文件名是 :nv_drv.o
这个目录下还有很多显卡驱动模块 .
apm_drv.o dummy_drv.o nsc_drv.o sis_drv.o
ark_drv.o fbdev_drv.o nv_drv.o tdfx_drv.o
ati_drv.o glint_drv.o r128_drv.o tga_drv.o
atimisc_drv.o i128_drv.o radeon_drv.o trident_drv.o
chips_drv.o i740_drv.o rendition_drv.o tseng_drv.o
cirrus_alpine.o i810_drv.o s3_drv.o vesa_drv.o
cirrus_drv.o linux s3virge_drv.o vga_drv.o
cirrus_laguna.o mga_drv.o savage_drv.o
cyrix_drv.o neomagic_drv.o siliconmotion_drv.o
fbdev vga evsa 等都在其中 .
 
只要在 XF86Conf文件中的Section module段中指定了什么驱动,X就用哪个驱动.
代码 :
Section "Module"
Load "dbe"
Load "extmod"
Load "fbdevhw" #这里用的是 fbdev
Load "glx"
Load "record"
Load "freetype"
Load "type1"
Load "dri"
EndSection
这是 XFree86 4.0以上版本的方法.即X主程序和驱动模块是分开的.
主程序是 /usr/X11R6/bin/XFree86 (即上层部分)
然后主程序启动的时候根据配置文件决定用哪一个驱动 .
但是,在 XFree86以前的版本(3.3.6)中, X主程序和驱动模块是合在一起的,因此,以前
Xfree86 3.3.6 有很多针对不同显卡的版本.
另外其他的 X服务器如 KDrive 也是驱动也主程序整合的,因此同样是KDrive X服务器会有VESA ,SVGA ,和 fbdev的版本之分.因为这些都是轻量级的X服务器,为了简化结构他
做成这样 .
Xfree86 4.0 做成驱动和主程序分离的好处是用户可以自己添加升级驱动。
十、 ubuntu下这些概念的具体情况
Ubuntu本身默认安装 gnome,可以自己安装KDE.
Ubuntu并没有采用 init的方法,并没有 /etc/inittab这个文件。init使用的是串行的方式,引导很耗时。RedHat9启动时串行执行大量的脚本以启动各种需要的服务(启动时可以看到)。Ubuntu采用了upstart,是一个基于事件的 init 的替代程序,用于 Ubuntu 发行版。所以上步骤5我并没有自己实际看到运行的。
 
安装Linux系统中的软件概述
windows下安装软件大家都觉得很容易,只要双击setup或是install的图标,然后跟着向导一步一步的按提示做就可以了,但是在linux 下安装软件就不像windows下那样容易了,有时你找到的是没有编译过的软件源码,那就更加的麻烦了,这里就介绍一下如何安装linux的软件。
  linux下的软件一般都是经过压缩的,主要的格式有这几种:rpm、tar、tar.gz、tgz等。所以首先拿到软件后第一件事就是解压缩。
  一、在xwindow下以rpm格式的软件安装比较容易,只要在把鼠标移到文件上单击右键,在弹出的菜单里会有专门的三项(只有在右键单击rpm文件才会出现)show info,upgrade和install,这三项的意思大家都很清楚了,我就不多说了。rpm格式说了,接着就是tar,tar.gz,tgz等,在 xwindow下双击这些格式的文件就会自动解压缩的,是解压缩而不是像rpm那样有install选项的,install文件会在你解压缩后才出现,不过这里我要先说一下,在你双击install前建议先好好看一下readme,因为你所要安装这些软件可能是没有编译的,所以看一下会比较好。
  二、说完了xwindow下的安装和解压缩,接着说在文本模式下如何解压缩和安装,还有编译源码了。首先说rpm的,以root身份登陆后(用其他的身份登陆也可以但有些软件就不能被安装)键入rpm -i你所要解压缩的文件+扩展名(当然是rpm)也不是很难吧,这里我要说的是“-i”意思是install,如果你想要卸载或是要执行其他的指令就打 rpm --help,看电脑给你的提示吧,为了照顾那些E文不太好的人我这里就写几个常用的参数:-e:卸载相关的应用程序,-U(注意是大写):升级软件包,-pql:列出rpm软件包的相关信息,-qf:查找指定文件属于哪个软件包。至于那些其他格式的软件则可以用gunzip,gzip,tar和 unzip等指令来解压缩,然后再运行install。通过解包后会得到一些文件,然后进入刚才解压缩后文件目录用“ls -F -color”指令看一下所得到的文件,一般有两种情况:第一种是文件为已经编译好的程序(无须再编译了)用上面的察看文件命令会以带“*”标记的亮绿色显示。对比一下下面2个图,我们可以看到很多东西,比如*.pl表示的是perl script脚本等等。
第二种则是需要由你自己编译的源代码。得到的是源代码的话,就需要我们自己编译来得到可运行的程序。编译源代码听到编译是不是就吓到你了呢,其实说穿了也就加上几句话而已,对初学者是有些困难想用好的操作系统就需要学习嘛,等你学会了在 MM前露一手的时候想想吧……,在编译之前先要认真的阅读一下 readme文档,老鸟们就不需要了吧,等你阅读完了以后就执行
./autogen.sh可能有的有,有的没有,这样很好的帮助你查找一些缺少的 package
  ./configure
他的默认安装目录你知道吗?
   make
  make install(只有Root身份才能执行此命令),编译完成之后便会在当前目录或src子目录下得到软件的可执行程序。
介绍完了,大家是不是觉的 RPM的软件安装比较容易一点呢,但我个人意见初学者还是多选择RPM格式以外的软件,因为通过编译软件的源码可以为你以后编译内核打下一定的基础。
 
根下的文件夹的含义
/vmlinuz 该目录中存放的是系统内核
/bin 该目录中存放Linux的常用命令,在有的版本中是一些和根目录下相同的目录。
/boot 该目录下存放的都是系统启动时要用到的程序,当用lilo引导Linux时,会用到这里的一些信息
/dev 该目录包含了Linux系统中使用的所有外部设备,它实际上是访问这些外部设备的端口,你可以访问这些外部设备,与访问一个文件或一个目录没有区别。例如在系统中键入“cd /dev/cdrom”,就可以看到光驱中的文件;键入“cd /dev/mouse”即可看鼠标的相关文件。
/cdrom 该目录在刚安装系统时是空的,你可以将光驱文件系统挂在这个目录下, 例如“mount /dev/cdrom /cdrom”
/etc 该目录存放了系统管理时要用到的各种配置文件和子目录,例如网络配置文件、文件系统、X系统配置文件、设备配置信息、设置用户信息等。
/sbin 该目录用来存放系统管理员的系统管理程序。
/home 如果建立一个名为“xx”的用户,那么在/home目录下就有一个对应的“/home/xx”路径,用来存放该用户的主目录。
/lib 该目录用来存放系统动态连接共享库,几乎所有的应用程序都会用到该目录下的共享库
/lost+found 该目录在大多数情况下都是空的。但当突然停电、或者非正常关机后,有些文件就临时存放在这里。
/mnt 该目录在一般情况下也是空的,你可以临时将别的文件系统挂在该目录下。
/proc 可以在该目录下获取系统信息,这些信息是在内存中由系统自己产生的
/root 如果你是以超级用户的身份登录的,这个就是超级用户的主目录
/tmp 用来存放不同程序执行时产生的临时文件,
有些安装文件重启后被删除了,但是有些文件还是被添加进来了。重启后不删除
/usr 用户的很多应用程序和文件都存放在该目录下
上图是 ubuntu的目录结构,还是有些不同的。
/opt 目录是存放第三方软件的目录。
/srv
 
/sys
 
/initrd.img
/selinux
 

你可能感兴趣的:(linux,linux,职场,休闲,linux系统,linux学习文档-1)