Linux基础知识的学习(六)

1、X window系统的概念
整个X Window由三个部分组成:
X服务器:是一个运行在本地计算机上的程序。它响应来自X客户程序的请求,在屏幕上画图或者读取键盘或鼠标的输入,并将它传给客户端。
X客户端:是一个用诸如Xlib, Xt的库写成的运用X协议的应用程序。它通过向负责管理自己的X服务器提出对显示和输出资源的请求来使用其他计算机的这些资源。
X协议:X Client与X Server之间的通信协议。
一个基于X的应用程序需要运行并显示内容时他就联接到X服务器,开始用X协议和服务器交谈。
架构:CXS
比如一个X应用程序要在屏幕上输出一个圆那么他就用X协议对X服务器说:喂!我需要在屏幕上画一个圆。
X应用程序只负责告诉X服务器在屏幕的什么地方用什么颜色画一个多大的圆。

而具体的“画”的动作,比如这个圆如何生成,用什么显卡的驱动程序去指挥显卡完成等等工作是由X服务器来完成的。


2、Linux系统的分区方式和Windows截然不同
一块硬盘最多只能划4个主分区
一般划分区都是只划一个主分区(Windows一般认作C盘)
然后利用剩下的所有空间建立一个扩展分区(扩展分区在Windows下不被分配盘符,它不会是 C,D,E……盘中的任何一个)
在这个扩展分区下面建立若干个逻辑分区(这些逻辑分区才是Windows下的D,E,F盘等等)
Linux把第一块硬盘认作hda,第二块认作hdb,第三块hdc,以此类推。SCSI硬盘被认作sda,sdb,等等。硬盘的各个分区用数字来表示,比如hda1就是第一块硬盘上的第一个分区。
注意,数字1-4专门留给主分区和扩展分区,逻辑分区是从数字5开始的,主分区和逻辑部分如果不满4个则留空。
如有一块硬盘,上面分了一个主分区,一个扩展分区,扩展分区上建立了3个逻辑分区,那在Linux下被标记为hda1(主分区,即windows下的C),hda2(扩展分区,windows下无标记),hda5(逻辑分区,windows下的D),hda6(逻辑分区,windows下的E),hda7(逻辑分区,windows下的F)。 


3、磁盘挂载命令(mount)
(1)作用
挂载文件系统,它的使用权限是超级用户或/etc/fstab 中允许的使用者。挂载是指把分区和目录对应的过程,而挂载点是指挂载在文件树中的位置。mount 命令就可以把文件系统挂载到相应的目录下,并且由于 Linux 中把设备都当作文件一样使用,因此,mount 命令也可以挂载不同的设备。
通常,在 Linux 下“/mnt”目录是专门用于挂载不同的文件系统的,它可以在该目录下新建不同的子目录来挂载不同的设备文件系统。
(文件系统内容)将一个文件系统的顶层目录挂到另一个文件系统的子目录上,使它们成为一个整体,称为“安装(mount)”。把该子目录称为“安装点(mount point)”
(2)格式: mount [选项] [类型] 设备文件名 挂载点目录
其中的类型是指设备文件的类型。

4、ifconfig
(1)作用
用于查看和配置网络接口的地址和参数,包括 IP 地址、网络掩码、广播地址,它的使用权限是超级用户。
(2)格式
ifconfig 有两种使用格式,分别用于查看和更改网络接口。
① ifconfig [选项] [网络接口]:用来查看当前系统的网络配置情况。
② ifconfig 网络接口 [选项] 地址:用来配置指定接口(如 eth0,eth1)的 IP 地址、网络掩码、广播地址等。
(3)使用说明
用 ifconfig 命令配置的网络设备参数不需重启就可生效,但在机器重新启动以后将会失效。


5、Linux文件系统(含设备驱动简介)
文件系统层次结构标准(Filesystem Hierarchy Standard,FHS)定义了Linux操作系统中的主要目录及目录内容。在大多数情况下,它是一个传统BSD文件系统层次结构的形式化与扩充。
Linux系统中把CPU、内存之外所有其他设备都抽象为文件来处理。
进程只和文件系统打交道,具体的细节,由设备管理部分具体实现并为文件系统提供尽可能简洁统一的接口。
文件系统还同时充当着设备管理接口的角色,用户进程使用和操作具体的设备,都必须通过文件系统进行。
文件系统是操作系统中与管理文件有关的所有软件和数据的集合。
不同的操作系统可能采用不同的文件系统。支持多种不同类型的文件系统(多样性)是Linux操作系统的主要特色之一。
Linux系统自身的文件系称为ext2,它也是Linux默认的文件系统。
把ext2以及Linux支持的文件系统称为逻辑文件系统, 通常每一种逻辑文件系统服务于一种特定的操作系统,具有不同的组织结构和文件操作函数,相互之间差别很大。
Linux在传统的逻辑文件系统的基础上,增加了一个称为虚拟文件系统(VFS)的接口层。
系统中所有的设备,包括字符设备、块设备和网络设备,都按照某种方式由逻辑文件系统统一管理,逻辑文件系统为它们提供访问接口
虚拟文件系统在最上层,管理各种逻辑文件系统,屏蔽了它们之间的差异,为用户命令、函数调用和内核其他部分提供访问文件和设备的统一接口, 使得不同的逻辑文件系统按照同样的模式呈现在使用者面前
对于普通用户来讲,觉察不到逻辑文件系统之间的差异,可以使用同样的命令来操作不同逻辑文件系统所管理的文件,可以在它们之间自由地复制文件
虚拟文件系统只存在于内存中,并没有真正存在于磁盘分区中,磁盘分区存放的是逻辑文件系统的内容,所有虚拟文件系统的数据结构都是在系统启动之后才建立完成,并在系统关闭时撤销。
同时,它必须和其他实际存在于磁盘的文件系统,比如Linux默认的Ext2或者Windows NT的NTFS等逻辑文件系统一起,才能构成一个完整的文件系统。

6、虚拟文件系统又称虚拟文件系统转换(Virual Filesystem Switch ,简称VFS)。
说它虚拟,是因为它所有的数据结构都是在运行以后才建立,并在卸载时删除,而在磁盘上并没有存储这些数据结构,显然如果只有VFS,系统是无法工作的,因为它的这些数据结构不能凭空而来,只有与实际的文件系统,如Ext2、Minix、MSDOS、VFAT等相结合,才能开始工作。
所以VFS并不是一个真正的文件系统。与VFS相对,我们称Ext2、Minix、MSDOS等为具体文件系统。
内核的一个子系统,提供了一个通用文件系统模型,该模型囊括了所能见到的文件系统常用功能和行为,并为应用程序提供一致性的文件系统接口,安装的所有物理文件系统不但依赖于VFS共存,而且也依靠VFS协同工作。
它的主要设计思想有以下3点:
(1)应用层:VFS模型源于UNIX文件系统,使得用户可以直接使用标准UNIX文件系统调用来操作文件,无需考虑具体文件系统特性和物理存储介质,通过VFS访问文件系统,才使得不同文件系统之间的协作性和通用性成为可能。
(2)虚拟层:在对所有具体文件系统的共同特性进行抽象的基础上,形成一个与具体文件系统实现无关(如通用命令,都用.on表示开)的虚拟层,并在此层次上定义与用户的一致性接口。
(3)实现层:该层使用类似开关表技术进行具体文件系统转接,实现各种文件系统的物理操作细节,每个文件系统是自包含的,包含文件系统实现的各种设施,如超级块、节点区、数据区以及各种数据结构和文件类的操作函数。
VFS是一个软件层,是用户应用程序与具体文件系统实现之间的抽象层:
对用户界面:一组标准的、抽象的文件操作,以系统调用提供,如read()、write()、open()等。
对具体文件系统界面:主体是file_operations结构,全是函数指针,提供函数跳转表。
VFS在一个简单文件复制操作中的作用:
假设用户输入命令:$ cp /floppy/TEST /tmp/test
在cp命令中,它通过VFS提供的系统调用接口进行文件操作。
cp命令不用了解test或TEST的具体文件系统,它所看到和操作的对象是VFS。


四个基本对象(VFS中的数据结构):
超级块(superblock)对象: 存放系统中已安装文件系统的有关信息
索引节点(inode)对象: 存放关于具体文件的一般信息
目录项(dentry)对象: 存放目录项与对应文件进行链接的信息
文件(file)对象: 存放打开文件与进程之间进行交互的有关信息
每个主要对象中都包含一个操作对象,这些操作对象描述了内核针对主要对象可以使用的方法。最主要的几种操作对象如下:
super_operations对象,其中包括内核针对特定文件系统所能调用的方法,比如读i节点read_inode()和sync_fs()方法等。
inode_operations对象,其中包括内核针对特定文件所能调用的方法,比如create()和link()方法等。
dentry_operations对象,其中包括内核针对特定目录所能调用的方法,比如d_compare()和d_delete()方法等。
file_operations对象,其中包括,进程针对已打开文件所能调用的方法,比如read()和write()方法等。
除了上述的四个主要对象外,VFS还包含了许多对象,比如每个注册文件系统都是由file_system_type对象表示——描述了文件系统及其能力(如比如ext3或XFS);另外每一个安装点也都利用vfsmount对象表示——包含了关于安装点的信息,如位置和安装标志等。
超级块是对一个文件系统的描述;索引节点是对一个文件物理属性的描述;而目录项是对一个文件逻辑属性的描述
一个进程所处的位置是由fs_struct来描述的,而一个进程(或用户)打开的文件是由files_struct来描述的,而整个系统所打开的文件是由file结构来描述

7、设备的分类
字符设备:字符设备是能够像字节流(例如文件)一样被访问的设备,一般不使用缓存技术。字符设备驱动程序实现这种特性至少需要实现open、close、read和write系统调用。
块设备:对块设备来说,最大的不同就是能够容纳文件系统(例如磁盘),并且大都使用缓存技术,可以看成是可以任意存取字节数的字符设备。 块设备和字符设备的区别仅仅在于内核内部管理数据的方式,也就是内核和驱动程序的接口不同。然而这些差异对用户是透明的。另外,块设备的接口必须支持挂载(mount)文件系统。
网络接口设备:任何网络事务都要经过一个网络接口来完成。网络接口由内核中的网络子系统驱动,负责发送和接收数据包,但它无需了解每项事务是如何映射实际传送的数据包的。 内核和网络驱动程序之间的通信完全不同于内核和字符以及块设备驱动程序之间的通信,内核调用一套和数据包传输相关的函数,而不是read、write等。


8、fork()
在 Linux 中创建一个新进程使用 fork 函数。它执行一次却返回两个值。
(1)fork 函数说明
fork 函数用于从已存在进程中创建一个新进程。
新进程称为子进程,而原进程称为父进程。
这两个分别带回它们各自的返回值,其中父进程的返回值是子进程的进程号,而子进程则返回 0。用getpid()返回当前ID,getppid()返回父进程ID,pid是子进程号
因此,可以通过返回值来判定该进程是父进程还是子进程。
使用 fork 函数得到的子进程是父进程的一个复制品,它从父进程处继承了整个进程的地址空间,包括进程上下文、进程堆栈、内存信息、打开的文件描述符、信号控制设定、进程优先级、进程组号、当前工作目录、根目录、资源限制、控制终端等,而子进程所独有的只有它的进程号、资源使用和计时器等。
因此可以看出,使用 fork 函数的代价是很大的,它复制了父进程中的代码段、数据段和堆栈段里的大部分内容,使得 fork 函数的执行速度并不很快。
(2) fork 函数语法(见PPT)
(3)函数使用注意点
fork 函数使用一次就创建一个进程,所以若把 fork 函数放在了 if else 判断语句中则要小心,不能多次使用 fork 函数。


9、Shell脚本
Shell是一种具备特殊功能的程序, 它是介于使用者和 UNIX/Linux 操作系统核心程序(kernel)之间的一个接口。
一个命令解释器,类似于DOS下的command.com。它接收用户命令,然后调用相应的应用程序。
为了对用户屏蔽内核的复杂性,也为了保护内核以免用户误操作造成损害,在内核的周围建了一个外壳(shell)。用户向shell提出请求,shell解释并将请求传给内核。
使用较广的shell有标准的Bourne shell (sh)、Korn Shell(ksh)、C shell (csh)、Bourne Again Shell(bash)等。
查看当前环境所用shell:echo $SHELL

shell的另一个重要特性是它自身就是一个解释型的程序设计语言,shell程序设计语言支持绝大多数在高级语言中能见到的程序元素,如函数、变量、数组和程序控制结构。shell编程语言简单易学,任何在提示符中能键入的命令都能放到一个可执行的shell程序中。
本质上,shell 脚本是利用shell的功能所写的一个程序,这个程序是使用纯文本文件,将一些shell的语法与指令写在里面。
shell和shell脚本有什么区别?
确切一点说,Shell就是一个命令行解释器,它的作用就是遵循一定的语法将输入的命令加以解释并传给系统。它为用户提供了一个向Linux发送请求以便运行程序的接口系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。 Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言(就是所说的shell脚本)。
Shell(壳和管理工具):交互接口(与内核打交道)和脚本编程(解释型)的重要手段。
shell脚本在linux系统管理员的运维工作中非常非常重要。它是一个脚本,并不能作为正式的编程语言。因为是跑在linux的shell中,所以叫shell脚本。说白了,shell脚本就是一些命令的集合。
一次一次敲键盘输入命令会很麻烦。所以不妨把所有的操作都记录到一个文档中,然后去调用文档中的命令,这样一步操作就可以完成。其实这个文档呢就是shell脚本了,只是这个shell脚本有它特殊的格式。


.sh 后缀
#!
#表注释
echo屏幕回显

不同的Linux版本,shell版本不同。
Shell脚本通常都是以.sh 为后缀名的,这个并不是说不带.sh这个脚本就不能执行,只是一个习惯而已。所以,以后发现了.sh为后缀的文件那么它可能是一个shell脚本了。
第一行要以 “#! /bin/bash” 开头,它代表的意思是,该文件使用的是bash语法。如果不设置该行,虽然shell脚本也可以执行,但是这不符合规范。
# 表示注释,后面跟一些该脚本的相关注释内容以及作者和创建日期或者版本等等。当然这些注释并非必须的。
数学计算要用[ ]括起来并且外头要带一个 ‘$’
Shell脚本还可以和用户交互
read -p "Please input a number: " x
read -p "Please input another number: " y

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值