2.图形界面与命令行
2.1 Linux图形界面
2.1.1 X Window System
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提供鼠标、键盘的输入服务。
2.1.2 窗口管理器(Window Manager)
X Window System只是提供了建立窗口的一个标准,具体的窗口形式由窗口管理器决定。窗口管理器是X Window System的组成部分,用来控制窗口的外观,并提供与用户交互的方法。作为在X Server上运行的应用程序,窗口管理器为用户提供操作窗口程序的方法,主要用于管理应用程序窗口,如窗口移动、缩放、开关等,当然还要管理键盘和鼠标。
2.1.3 显示管理器(Display Manager)
显示管理器提供图形界面用户登录,用于验证用户身份,让用户登录到系统。图形页面由显示管理器启动,包括X Server。可以选择关闭显示管理器,通过命令行运行startx命令(或使用登录脚本)来启动X Server。系统启动之后第一个要启动的X Client程序是DM,DM也是一类软件,如XDM、KDM、GDM。
2.1.4 Widget库
Widget库定义一套图形用户界面的编程接口。应用程序开发人员通过调用该库来实现具体的用户界面,包括按钮、文本框、菜单、滚动条等。程序员不需要理解X Server的语言,由Widget库讲调用提价给X Server即可。
2.1.5 桌面环境(Desktop Environment)
对于使用操作系统图形环境的用户来说,仅有窗口管理器提供的功能是不够的。为此,开发人员在窗口管理器的基础上,增加各种功能和应用程序,提供更为完善的图形用户环境,这就是桌面环境。作为一个整体的环境,它包括应用程序、窗口管理器、登录管理器、桌面程序、设置界面等。桌面环境将除X Server以外的各种与X有关的部件整合起来,用于呈现整个图形界面,不过图形输出处理却是由后台的X Server实现的。
2.1.6 Unity桌面环境
Unity是基于GNOME桌面环境的用户界面,由Canonical公司开发,主要用于Ubuntu操作系统。Ubuntu原来使用的是完整GNOME桌面环境。由于创始人MarkShuttleworth对用户体验的理念与GNOME团队不同,从Ubuntu 11.04起,Ubuntu使用Unity作为默认的用户界面,但Ubuntu仍然可以通过PPA(个人软件包档案)来安装GNOME。
2.2 Linux命令行界面
2.2.1使用仿真终端窗口
可以在Ubuntu图形界面中使用终端来执行命令行操作。该终端是一个终端仿真应用程序,提供命令行工作模式。在Ubuntu系统快捷方式里默认是没有终端图标的,可以使用如下的几种方法打开终端控制台
-
使用组合键Ctrl+Alt+T。这个组合键适合Ubuntu的各种版本。
-
在Dash中浏览搜索。浏览到“终端”程序,或者搜索“gnome-terminal”或“终端”,就可以找到终端应用程序。
-
在文件系统中搜索“gnome-terminal”,找到对应的二进制文件(菱形图标),运行即可。也可以直接在/usr/bin目录下浏览查找该二进制文件。
打开之后界面中将显示一串提示符,由4部分组成:当前用户名@主机名 当前目录 命令提示符
普通用户登录后,命令提示符为$;超级管理员root用户登录后,命令提示符为#。
2.2.2 使用文本模式
没有安装X Window和桌面环境的Linux系统只能进入文本模式。已经安装X Window和桌面环境的Linux系统则可以通过修改配置,是使用系统引导时进入文本模式。Ubuntu桌面版启动后直接进入图形界面,然后可以根据需要切换到文本模式,此时需要登录到Linux系统。
2.2.3 使用命令行关闭和重启系统
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 的密码:
2.3 Shell基础
2.3.1 什么是Shell
在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)。
2.3.2 使用Shell
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中执行。
2.3.3 正则表达式
正则表达式(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结尾的所有文件。
模式表达式
- *:匹配任意多个模式。例如,file*(.c|.o)匹配文件file.c、file.o、file.c.o、file.c.c、file.o.c、file等。
- +:匹配1个或多个模式。例如,file+(.c|.o)匹配文件file.c、file.o、file.c.o、file.o.c等,但不匹配file。
- ?:匹配模式表中任何一种模式。例如,file?(.c|.o)只匹配file.o、file.c、file等,不匹配file.c.c、file.c.o等。
- @:仅匹配模式表中一个给定模式。例如,file@(.c|.o)只匹配file.c和file.o,但不匹配file、file.c.c、file.c.o等。
- !:除给定模式表中的一个模式之外,它可以匹配其他任何字符串。
2.3.4 Shell中的特殊字符
引号
- (’)由单引号括起来的字符串视为普通字符串,包括空格、$、/、\等特殊字符。
- (")由双引号括起来的字符串,除KaTeX parse error: Undefined control sequence: \、 at position 2: 、\̲、̲单引号和双引号仍作为特殊字符并…、\、单引号和双引号作为普通字符,在其前面加上转义字符\即可。
- 还有一个特殊引号是反引号(`)。由反引号括起来的字符串被Shell解释为命令行,在执行时首先执行该命令行,并以它的标准输出结果代替该命令行(反引号括起来的部分,包括反引号)。
其他符号
- #(注释)
- \(跳转符号,将特殊字符或通配符还原成一般字符)
- |(分隔两个管道命令)
- ;(分隔多个命令)
- /~(用户的主目录)
- $(变量前需要加的变量值)
- &(将该符号前的命令放到后台执行)
2.3.5 环境变量
使用env命令可显示所有的变量环境
linx@ubuntu:~$ env
- PATH(可执行命令的搜索路径)
linx@ubuntu:~$ echo $PATH
- HOME(用户主目录)
linx@ubuntu:~$ echo $HOME
- LOGNAME(当前用户的登录名)
linx@ubuntu:~$ echo $LOGNAME
- HOSTNAME(主机名)
linx@ubuntu:~$ echo $HOSTNAME
- PS1(当前命令提示符)
linx@ubuntu:~$ echo $PS1
- SHELL(用户当前使用的Shell)
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
2.4 Linux命令行使用
2.4.1命令语法格式
命令语法格式:提示符 命令 选项 参数
- 选项,选项是包括一个或多个字母的代码,前面有一个“-”连字符,主要用于改变命令执行的动作。
- 参数,参数通常是命令的操作对象,多数命令都可以使用参数。
2.4.2命令行基本用法
编辑和修改命令行
- 命令行实际上是一个可编辑的文本缓冲区,在按回车之前,可以对输入的内容进行编辑,如删除字符、删除整行、插入字符。
调用历史命令
- 按上、下箭头键,便可以在命令行上逐次显示已经执行过的命令,用户可以修改并执行这些命令
- 可使用history命令列出最近用过的所有命令,在输入“!编号”来执行该编号的历史命令。
自动补全命令
- 使用Tab键可获取与已输入部分匹配的命令或文件名列表,供用户从中选择。这个功能可以减少不必要的输入错误,非常使用。
一行多条命令和命令行续行
- 可在一个命令行中使用多个命令,用分号“;”将各个命令隔开。
linx@ubuntu:~$ ls -l;pwd
- 用反斜杠“\”将一个命令行持续到下一行。
linx@ubuntu:~$ ls -l \
> -a
强制中断命令运行
- 可以使用Ctrl+c强制中断当前运行的命令或程序。
获取联机帮助
-
使用命令man显示联机手册,输入q即可退出man命令,基本用法如下:
man [选项] 命令名或配置文件名
2.4.3 命令行输入与输出
输入重定向:主要用于改变命令的输入源,让输入不要来自键盘,而来自指定文件。
命令 < 文件名
# 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`
2.4.4 执行Shell脚本
执行Shell脚本最常用的方式是将Shell的权限设置为可执行,然后在提示符下直接执行它。直接编辑生成的脚本文件没有执行权限,如果要将Shell脚本直接当作命令执行,就需要利用命令chmod将它置为具有执行权限。
linx@ubuntu:~$ chmod +x example
2.5使用vi编辑器
作为管理员,往往要在文本模式下操作,这就需要熟练掌握文本编辑器。vi是一个功能强大的文本模式全屏编辑器,也是UNIX/Linux平台上最通用、最基本的文本编辑器,Ubuntu提供的版本为vim,vim相当于vi的增强版。掌握vi对于管理员是必须的。
vi操作模式
-
命令模式(Command mode):输入的任何字符都作为命令(指令)来处理。
-
插入模式(Insert mode):输入的任何字符都作为插入字符来处理。
-
末行模式(Last line mode):执行文件级或全局性操作,如保存文件、退出编辑器、设置编辑环境等。
命令模式可以控制光标移动、行编辑(删除、移动、复制),输入相应的命令进入插入模式。插入模式的命令有以下6种:
- a:从当前光标位置右边开始输入下一个字符
- A:从当前光标所在行的行尾开始输入下一个字符
- i:从当前光标位置坐标开始输入下一个字符
- I:从当前光标所在行的行首开始插入字符
- o:从当前光标所在行新增一行并进入插入模式,光标移到新的一行行首。
- O:从当前光标所在行上方新增一行并进入插入模式,光标移到新的一行行首。
打开vi编辑器
linx@ubuntu:~$ vi
编辑文件
1)移动光标。
-
vi可以直接用键盘上的的光标键来上下左右移动,但正规的vi的用法使用h、j、k、l分别控制光标左、下、上、右。
-
Ctrl+b上一页,Ctrl+f下一页
-
按0键移到光标所在行行首,按$键移到该行开头,按w键光标跳到下个单词开头。
-
按G键移到文件最后一行,再按nG键(n为数字,下同),移到文件第n行。
2)删除
- 字符删除:按x键向后删除一个字符;按nx键,向后删除n个字符。
- 行删除:按dd键删除光标所在行;按ndd键,从光标所在行开始向下删除n行
3)复制
- 字符复制:按y键复制光标所在字符,按yw复制光标所在处到字尾的字符。
- 行复制:按yy键复制光标所在行;按nyy键,复制从光标所在行开始往下的n行。
4)粘贴
- 删除和复制的内容都将放到内存缓冲区。使用命令p键将缓冲区内容粘贴到光标所在位置。
5)查找字符串
- /关键字:向下查找字符串
- ?关键字:向上查找字符串
6)撤销或重复操作
-
如果误操作一个命令,按u恢复到上一次操作。
-
按.键可以重复执行上一次操作。
保存文件和退出vi
-
:w filename 将文件存入指定的文件名filename。
-
:wq 将文件以当前文件名保存并退出vi编辑器。
-
:w 将文件以当前文件名保存并继续编辑。
-
:q 退出vi编辑器
-
:q! 不保存文件强行退出vi编辑器
-
qw 保存文件并退出vi编辑器
其他全局性操作
- 列出行号:输入set nu
- 跳到某一行:在末行模式下输入数字
- 替换字符串:输入“范围/字符串1/字符串2/g”,将文件中指定范围字符串1替换为字符串2,g表示替换不必确认;如果g改为c,则在替换过程中要求确认是否替换。范围使用“m,ns”的形式表示从m行到n行,对于整个文件,则可表示为“1,$s”
多文件操作
要将文件某个文件内容复制到另一个文件中当前光标处,可在末行模式执行命令:r filename,filename的内容将粘贴进来。要同时打开过个文件,启动vi时加上多个文件名,如vi filename1 filenam2。打开多个文件之后,在末行模式下可以执行命令:next和:previous在文件之间切换。