X Window System 本身基于客户/服务器(C/S)模式,具有网络操作的透明性如图所示:
X Window Systems由以下3部分构成。
X Server:响应X Client程序的"请求",建立窗口以及在窗口中会出图形和文字。每一套显示设备只对应一个唯一的X Server。X Server只是一个普通的应用程序。
X Client:作为X Server的客户端,向X Server发出请求以完成特定的窗口操作。X Client无法直接影响窗口或显示,只能请求X Server来完成。X Client是使用操作系统窗口功能的一些应用程序。
通信通道:负责 X Server与X Client之间的通信。X Server和X Client可能位于统一计算机上,也可能位于不同的计算机上,这需要通过网路进行通信,由相关网络协议提供支持。
X Client将希望显示的图形发送到X Server,X Server将图形显示在显示器上,同时为X Client提供鼠标、键盘的输入服务。
X Window System只是提供了建立窗口的一个标准,具体的窗口形式由窗口管理器决定。窗口管理器是X Window System的组成部分,用来控制窗口的外观,并提供与用户交互的方法。作为在X Server上运行的应用程序,窗口管理器为用户提供操作窗口程序的方法,主要用于管理应用程序窗口,如窗口移动、缩放、开关等,当然还要管理键盘和鼠标。
显示管理器提供图形界面用户登录,用于验证用户身份,让用户登录到系统。图形页面由显示管理器启动,包括X Server。可以选择关闭显示管理器,通过命令行运行startx命令(或使用登录脚本)来启动X Server。系统启动之后第一个要启动的X Client程序是DM,DM也是一类软件,如XDM、KDM、GDM。
Widget库定义一套图形用户界面的编程接口。应用程序开发人员通过调用该库来实现具体的用户界面,包括按钮、文本框、菜单、滚动条等。程序员不需要理解X Server的语言,由Widget库讲调用提价给X Server即可。
对于使用操作系统图形环境的用户来说,仅有窗口管理器提供的功能是不够的。为此,开发人员在窗口管理器的基础上,增加各种功能和应用程序,提供更为完善的图形用户环境,这就是桌面环境。作为一个整体的环境,它包括应用程序、窗口管理器、登录管理器、桌面程序、设置界面等。桌面环境将除X Server以外的各种与X有关的部件整合起来,用于呈现整个图形界面,不过图形输出处理却是由后台的X Server实现的。
Unity是基于GNOME桌面环境的用户界面,由Canonical公司开发,主要用于Ubuntu操作系统。Ubuntu原来使用的是完整GNOME桌面环境。由于创始人MarkShuttleworth对用户体验的理念与GNOME团队不同,从Ubuntu 11.04起,Ubuntu使用Unity作为默认的用户界面,但Ubuntu仍然可以通过PPA(个人软件包档案)来安装GNOME。
可以在Ubuntu图形界面中使用终端来执行命令行操作。该终端是一个终端仿真应用程序,提供命令行工作模式。在Ubuntu系统快捷方式里默认是没有终端图标的,可以使用如下的几种方法打开终端控制台
使用组合键Ctrl+Alt+T。这个组合键适合Ubuntu的各种版本。
在Dash中浏览搜索。浏览到“终端”程序,或者搜索“gnome-terminal”或“终端”,就可以找到终端应用程序。
在文件系统中搜索“gnome-terminal”,找到对应的二进制文件(菱形图标),运行即可。也可以直接在/usr/bin目录下浏览查找该二进制文件。
打开之后界面中将显示一串提示符,由4部分组成:当前用户名@主机名 当前目录 命令提示符
普通用户登录后,命令提示符为$;超级管理员root用户登录后,命令提示符为#。
没有安装X Window和桌面环境的Linux系统只能进入文本模式。已经安装X Window和桌面环境的Linux系统则可以通过修改配置,是使用系统引导时进入文本模式。Ubuntu桌面版启动后直接进入图形界面,然后可以根据需要切换到文本模式,此时需要登录到Linux系统。
linx@ubuntu:~$ reboot 普通用户重启
linx@ubuntu:~$ shutdown -r 普通用户重启
linx@ubuntu:~$ shutdown -h now 普通用户立刻关机
linx@ubuntu:~$ poweroff 普通用户关机
linx@ubuntu:~$ halt -p 普通用户停止进程,保存文件,停止内核运行,关闭电源。
linx@ubuntu:~$ shutdown +10 "System will shutdown after 10 minutes" 普通用户10分钟后关机
linx@ubuntu:~$ shutdown -c 普通用户取消关机
需要使用root权限必须使用sudo命令。
linx@ubuntu:~$ sudo reboot 使用root权限的重启
[sudo] linx 的密码:
在Linux中Shell就是外壳的意思,是用户和系统交互的接口
实际上Shell是一个命令解释器,拥有自己内建的Shell命令集。用户在命令提示符下输入的命令都由Shell先接收并进行分析,然后在传给Linux内核执行。结果返回给Shell,由它在屏幕上显示。不管命令执行结果成功与否Shell总是再次给出命令提示符,等待用户输入下一个命令。
Shell同时又是一种程序设计语言,允许用户编写由Shell命令组成的程序,这种程序通常成为Shell脚本(Shell sctipt)或命令文件。Shell具有普通编程语言的很多特点,简单易学,任何Linux命令都可以编入可执行的Shell程序中。
总的来说,Linux Shell主要提供以下几种功能。
解释用户在命令行提示输入的命令。这是最主要的功能。
提供个性化的用户环境,通常由Shell初始化配置文件(如.profile、.login等)实现。
编写Shell脚本,实现高级管理功能。
Shell有多种版本,按照来源可以分为两大类型。一类是由贝尔实验室开发的,以Bourne Shell(sh)为代表,此类兼容的有Bourne-Agian Shell(bash)、Korn Shell(ksh)、Z Shell(zsh)。另一类是由加州大学伯克莱分校开发的,以C Shell(csh)为代表,与之兼容的由TENEX C Shell(tcsh)。
linx@ubuntu:~$ echo $SHELL
/bin/bash
Ubuntu默认使用的Shell程序是bash。使用上面的命令可以查看当前使用的Shell类型,bash是Bourne Again Shell的缩写,是Linux标准的默认Shell,操作和使用非常方便。它基于Bourne Shell,吸收了C Shell和Korn Shell的一些特性。bash是sh的增强版本,完全兼容sh,也就是说,用sh写的脚本可以不加修饰地在bash中执行。
正则表达式(Regular Expression,RE)是一种可以用于模式匹配和替换的工具。通过正则表达式,Shell可以使用一系列的特殊字符构建匹配模式,然后将匹配模式与待比较字符串或文件进行比较,根据比较对象中是否包含匹配模式,执行相应的程序。
通配符
*(星号):表示任何字符串。例如,*log*表示含有log的字符串。
?(问好):表示单个字符串。例如,a?b表示由a、任意字符和b组成的字符串。
[](一对方括号):表示一个字符序列,字符序列可以直接包括若干字符,例如[abc]表示a、b、c之中的任一字符,也可以是由“-”连接起止字符形成的序列,例如:[abc-fp]表示a、b、c、d、e、f、p之中的任一字符。除连字符“-”之外,其他特殊字符在[]中都是普通字符,包括*和?。
!(感叹号):在[]中使用!表示排除其中任意字符,如[!ab]表示不是a或b的任一字符。
^(幂符号):只在一行的开头匹配字符串。如执行命令ls -l .^d” 将显示所有的目录。
$(美元符号):只在行尾匹配字符串,它放在匹配单词的后面。例如,linux$表示以单词linux结尾的所有文件。
模式表达式
引号
其他符号
使用env命令可显示所有的变量环境
linx@ubuntu:~$ env
linx@ubuntu:~$ echo $PATH
linx@ubuntu:~$ echo $HOME
linx@ubuntu:~$ echo $LOGNAME
linx@ubuntu:~$ echo $HOSTNAME
linx@ubuntu:~$ echo $PS1
linx@ubuntu:~$ echo $SHELL
修改环境变量
linx@ubuntu:~$ echo $HISTSIZE
1000
linx@ubuntu:~$ HISTSIZE=1010
linx@ubuntu:~$ echo $HISTSIZE
1010
linx@ubuntu:~$ HISTSIZE=1000
linx@ubuntu:~$ echo $HISTSIZE
1000
命令语法格式:提示符 命令 选项 参数
编辑和修改命令行
调用历史命令
自动补全命令
一行多条命令和命令行续行
linx@ubuntu:~$ ls -l;pwd
linx@ubuntu:~$ ls -l \
> -a
强制中断命令运行
获取联机帮助
使用命令man显示联机手册,输入q即可退出man命令,基本用法如下:
man [选项] 命令名或配置文件名
输入重定向:主要用于改变命令的输入源,让输入不要来自键盘,而来自指定文件。
命令 < 文件名
# wc命令用于统计指定文件包含的行数、字数和字符数。
linx@ubuntu:~$ wc < /etc/protocols
64 474 2932
输出重定向:主要用于改变命令的输出,让标准输出不要显示在屏幕上,而是写入到指定文件中。
命令 > 文件名
linx@ubuntu:~$ ls > /home/linx/myml.lst
#如果要写入已有文件,则将该文件重写(覆盖)。
linx@ubuntu:~$ ls >> /home/linx/myml.lst
#如果对于标准错误输出
linx@ubuntu:~$ ls 2> /home/linx/myml.lst
linx@ubuntu:~$ ls 2>> /home/linx/myml.lst
#如果将标准输出和标准错误输出重定向到同一文件
linx@ubuntu:~$ ls &> /home/linx/myml.lst
管道:用于将一个命令的输出作为另一个命令的输入,使用符号“|”来连接命令。
命令1|命令2······|命令n
#将ls命令输出的结果提交给grep命令进行搜索
linx@ubuntu:~$ ls | grep "a"
snap
VMwareTools-10.3.22-15902021.tar.gz
vmware-tools-distrib
#在执行输出内容较多的命令时可以通过管道使用more命令进行分页显示。
linx@ubuntu:~$ cat /home/linx/myml.lst | more
公共的
模板
视频
图片
文档
下载
音乐
桌面
etc
myml.lst
snap
VMwareTools-10.3.22-15902021.tar.gz
vmware-tools-distrib
公共的
模板
视频
图片
文档
下载
音乐
桌面
etc
myml.lst
snap
VMwareTools-10.3.22-15902021.tar.gz
vmware-tools-distrib
命令替换:命令替换与重定向有些类似,不同的是命令替换将一个命令的输出作为另一个命令的参数。
命令1 `命令2`
linx@ubuntu:~$ cd `pwd`
执行Shell脚本最常用的方式是将Shell的权限设置为可执行,然后在提示符下直接执行它。直接编辑生成的脚本文件没有执行权限,如果要将Shell脚本直接当作命令执行,就需要利用命令chmod将它置为具有执行权限。
linx@ubuntu:~$ chmod +x example
作为管理员,往往要在文本模式下操作,这就需要熟练掌握文本编辑器。vi是一个功能强大的文本模式全屏编辑器,也是UNIX/Linux平台上最通用、最基本的文本编辑器,Ubuntu提供的版本为vim,vim相当于vi的增强版。掌握vi对于管理员是必须的。
vi操作模式
命令模式(Command mode):输入的任何字符都作为命令(指令)来处理。
插入模式(Insert mode):输入的任何字符都作为插入字符来处理。
末行模式(Last line mode):执行文件级或全局性操作,如保存文件、退出编辑器、设置编辑环境等。
命令模式可以控制光标移动、行编辑(删除、移动、复制),输入相应的命令进入插入模式。插入模式的命令有以下6种:
打开vi编辑器
linx@ubuntu:~$ vi
编辑文件
1)移动光标。
vi可以直接用键盘上的的光标键来上下左右移动,但正规的vi的用法使用h、j、k、l分别控制光标左、下、上、右。
Ctrl+b上一页,Ctrl+f下一页
按0键移到光标所在行行首,按$键移到该行开头,按w键光标跳到下个单词开头。
按G键移到文件最后一行,再按nG键(n为数字,下同),移到文件第n行。
2)删除
3)复制
4)粘贴
5)查找字符串
6)撤销或重复操作
如果误操作一个命令,按u恢复到上一次操作。
按.键可以重复执行上一次操作。
保存文件和退出vi
:w filename 将文件存入指定的文件名filename。
:wq 将文件以当前文件名保存并退出vi编辑器。
:w 将文件以当前文件名保存并继续编辑。
:q 退出vi编辑器
:q! 不保存文件强行退出vi编辑器
qw 保存文件并退出vi编辑器
其他全局性操作
多文件操作
要将文件某个文件内容复制到另一个文件中当前光标处,可在末行模式执行命令:r filename,filename的内容将粘贴进来。要同时打开过个文件,启动vi时加上多个文件名,如vi filename1 filenam2。打开多个文件之后,在末行模式下可以执行命令:next和:previous在文件之间切换。