Linux复习(一)

一、硬盘分区(大概了解下)

Default partitioning program under Linux is fdisk 。

硬盘里面分为两个区域:一个是描述硬盘自身的信息区,称为主引导区(Master Boot Record, MBR), 一个是存放实际文件信息的区域。 MBR是整个硬盘最重要的地方,里面记录了两个重要的东西,分别是:启动管理程序和硬盘分区表。所以我们所说的硬盘分区,其实就是修改MBR中的分区表。

 

      分区表的内容: 分区表定义了“第n个磁盘区块是由硬盘第x柱面到第y个柱面”。所以,每次当系统去读取第n快磁盘区块时,就只会读取第x到y个柱面之间的信息。

 

      但是,因为MBR区块的容量有限,当初设计时,之设计成4个分区记录,这些分区记录就被称为Primary(主分区)及Extended(扩展分区),也即,一个硬盘最多可以有4个Primary+Extended的分区,其中Extended只能有一个,所以硬盘坐的分区情况可能是:

      P + P + P + P

      P + P + P + E

 

      需要说明的是:主分区可以直接使用,扩展分区则不能直接被使用,还需要分成Logical(逻辑分区)才行。      

对于扩展分区产生的原因可以如下理解:

      由于MBR最多保存四个partition的信息记录,那如果需要分区超过4个以上时,系统允许在额外的硬盘空间存放另一份硬盘分区信息,这个额外区域就是Extend(扩展分区)。

      扩展分区其实就是“指向那些额外的分区表”,真正的分区信息记录在这份额外的分区表中,扩展分区自身并不记录分区信息,所以本身Extended不能被使用,还需要将其分区成逻辑分区才能被使用。



二、Linux的主流发布版本

Linux的发行版本可以大体分为两类,一类是商业公司维护的发行版本,一类是社区组织维护的发行版本,前者以著名的Redhat(RHEL)为代表,后者以Debian为代表,包括Debian和Ubuntu等。


三、文件系统

VFS 
EXT2, EXT3, FAT32, … 


四、启动流程

Linux复习(一)_第1张图片


对图中一些名词的解释:

BIOS是英文"Basic Input Output System"的缩略词,直译过来后中文名称就是"基本输入输出系统"。其实,它是一组固化到计算机主板上一个ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序、系统设置信息、开机后自检程序和系统自启动程序。 其主要功能是为计算机提供最底层的、最直接的硬件设置和控制。

MBR(主引导记录(Master Boot Record)):

硬盘的0柱面、0磁头、1扇区称为主引导扇区(也叫主引导记录MBR)。它由三个部分组成,主引导程序、硬盘分区表DPT(Disk Partition table)和分区有效标志(55AA)。在总共512字节的主引导扇区主引导程序(boot loader)占446个字节,第二部分是Partition table区(分区表),即DPT,占64个字节,硬盘中分区有多少以及每一分区的大小都记在其中。第三部分是magic number,占2个字节,固定为55AA。

内核:下面有。

Runlevel:
runlevel可以认为是系统状态,形象一点,您可以认为runlevel有点象微软的windows操作系统中的Normal,safemode,和Command prompt only。进入每个runlevel都需要启动或关闭相应的一系列服务(services),这些服务(services)以初始化脚本的方式放置于目录/etc/rc.d/rc?.d/或者/etc/rc?.d下面(?代表runlevel的对应序号)。
在大多数的linux发行版本中,通常有7个runlevel

Runlevel  System State
0  Halt the system
1  Single user mode
2  Basic multi user mode
3  Multi user mode
5  Multi user mode with GUI
6  Reboot the system


中文版解释:
0关机
1单用户,无网络服务
 2 多用户,默认无网络服务
3 多用户,网络服务,文本环境
4 保留,默认同运行级别3
5 多用户,网络服务,图形环境
6 重启

多数的桌面的linux系统缺省的runlevel是5,用户登陆时是图形界面,而多数的服务器版本的linux系统缺省的runlevel是3,用户登陆时是字符界面,runlevel 1和2除了调试之外很少使用,runlevel s和S并不是直接给用户使用,而是用来为Single user mode作准备。

linux的运行模式比起windows的启动模式的优势在于:你可以在系统空闲时使用.init工具切换你现在使用的runlevel,另外,当你关闭或者启动linux系统时你已经不知不觉中切换你的runlevel,系统关机进程需要调用runlevel(0或6)来关闭所有正在运行中的进程。

Linux系统有7个运行级别(runlevel)

0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
2:多用户状态(没有NFS)
3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
4:系统未使用,保留
5:X11控制台,登陆后进入图形GUI模式
6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动

运行级别的原理:

1。在目录/etc/rc.d/init.d下有许多服务器脚本程序,一般称为服务(service)
2。在/etc/rc.d下有7个名为rcN.d的目录,对应系统的7个运行级别
3。rcN.d目录下都是一些符号链接文件,这些链接文件都指向init.d目录下的service脚本文件,命名规则为K+nn+服务名或S+nn+服务名,其中nn为两位数字。
4。系统会根据指定的运行级别进入对应的rcN.d目录,并按照文件名顺序检索目录下的链接文件
     对于以K开头的文件,系统将终止对应的服务
     对于以S开头的文件,系统将启动对应的服务
5。查看运行级别用:runlevel
6。进入其它运行级别用:init N
7。另外init0为关机,init 6为重启系统



五、内核和核外程序

Linux复习(一)_第2张图片

X Window System:一般指X Window

X Window是一种以位图方式显示的软件窗口系统,最初是1984年麻省理工学院的研究成果,之后变成UNIX、类UNIX、以及OpenVMS等操作系统所一致适用的标准化软件工具包及显示架构的运作协议。
X Window通过软件工具及架构协议来建立操作系统所用的图形用户界面,此后则逐渐扩展适用到各形各色的其他操作系统上,几乎所有的操作系统都能支持与使用X Window,GNOME和KDE也都是以X Window为基础建构成的。
X Window向用户提供基本的窗口功能支持,而显示窗口的内容、模式等可由用户自行定制,在用户定制与管理X Window系统时,需要使用窗口管理程序,窗口管理程序包括AfterStep、Enlightenment、Fvwm、MWM和TWM Window Maker等,供习惯不同的用户选用。
可以定制的窗口环境在给用户带来了个性化与灵活性的同时,要求用户有相对比较高的使用水平,不过这种机制带来的好处也是明显的,它不象Microsoft Window那样将窗口元件的风格、桌面、操作方式等千篇一律地规定死,只可以换一下墙纸、图标、调整字体大小等等,在X Window系统中可以有多种桌面环境的选择。
Bash(GNU Bourne-Again Shell)是许多Linux平台的内定Shell,事实上,还有许多传统UNIX上用的Shell,像tcsh、csh、ash、bsh、ksh等等,Shell Script大致都类同,当您学会一种Shell以后,其它的Shell会很快就上手,大多数的时候,一个Shell Script通常可以在很多种Shell上使用。

Linux复习(一)_第3张图片

内核和核外程序的分工的个人总结:

用户写shell脚本调用C语言之类的高级语言或实用程序,这是核外程序;

高级语言和实用程序调用系统调用,系统调用要兼顾文件系统和进程管理系统,这两者又与硬件控制打交道,而硬件控制则是控制硬件,此为内核。


六、文件类型&文件权限

文件类型:

我们平时最常接触的文件类型有普通文件(regular file)和目录(directory file),但是 UNIX 系统提供了多种文件类型:

(1) 普通文件(regular file)

这种文件包含了某种形式的数据,这些数据无论是文件还是二进制对于 UNIX 内核而言都是一样的。对普通文件内容的解释有处理该文件的应用程序进行。

(2) 目录文件(directory file)

目录文件包含了其他文件的名字以及指向与这些文件有关信息的指针。对一个目录文件具有读权限的任一进程都可以读取该目录的内容,但是只有内核才能直接写目录文件。

(3) 块特殊文件(block special file)

这种文件类型提供对设备带缓冲的访问,每次访问以固定长度为单位进行。

(4) 字符特殊文件(character special file)

这种文件类型提供对设备不带缓冲的访问,每次访问长度可变。系统中的所有设备要么是字符特殊文件,要么是块特殊文件。

(5) FIFO

这种类型文件用于进程间通信。也称为命名管道(namedpipe)。

(6) 套接字(socket)

这种文件类型用于进程间的网络通信。

(7) 符号链接(symbolic link)

这种文件类型指向另一个文件。


文件权限:

Linux复习(一)_第4张图片

使用  $  ls  -l 指令查看文件权限,显示内容如下:

Linux复习(一)_第5张图片


第一个字符一般用来区分文件和目录:

d:表示是一个目录,事实上在ext2fs中,目录是一个特殊的文件。
-:表示这是一个普通的文件。
l: 表示这是一个符号链接文件,实际上它指向另一个文件。
bc:分别表示区块设备和其他的外围设备,是特殊类型的文件。
sp:这些文件关系到系统的数据结构和管道,通常很少见到。


之后九个字符表示权限,举例说明:

rwx------: 文件所有者对文件具有读取、写入和执行的权限。
-rwxr―r--: 文件所有者具有读、写与执行的权限,其他用户则具有读取的权限。
-rw-rw-r-x: 文件所有者与同组用户对文件具有读写的权限,而其他用户仅具有读取和执行的权限。
drwx--x--x: 目录所有者具有读写与进入目录的权限,其他用户近能进入该目录,却无法读取任何数据。
Drwx------: 除了目录所有者具有完整的权限之外,其他用户对该目录完全没有任何权限。


修改权限:

(看图就很好理解)

Linux复习(一)_第6张图片

另一种修改方法:

以数字来表示权限,而且仅需三个数字。
r: 对应数值4
w: 对应数值2
x:对应数值1
-:对应数值0


Linux复习(一)_第7张图片


默认权限:

用户新建的文件时没有可执行权的,也就是权限最大(不是默认!)为 666 (系统不允许在创建文件时就赋予执行权限,必须之后使用chmod指令),即 -rw-rw-rw- ;新建的目录权限最大
为777,即 drwxrwxrwx .

当我们新建一个文件或者目录时,生成的目录或者文件有默认权限,那么这些权限为什么是这样呢?
这就与默认权限umask有关。umask 的分数指的是“该默认值需要减掉的权限”。

一般情况,root的默认权限 umask 为 022,一般身份用户为 002,关于默认 umask 的设置可以参考/etc/bashrc 这个文件。
所以用户创建的文件默认是664,目录是775,。


 如 umask 的值为022时,user并没有被减掉任何权限,不过group 与 others 的权限被减掉了 2,那么
新建文件时:
(-rw-rw-rw-) - (-----w--w-) ==>-rw-r--r--    (644)              (注意RWX的写法,在9位之前还有一位给文件类型!)
新建目录时:
(drwxrwxrwx) - (-----w--w-) ==>drwxr-xr-x          755)

不能使用文件默认属性 666 与目录默认属性 777 来与 umask 进行相减的计算得出权限来,这是不对的。
 如: 666-003=663  x 权限明明已经被去掉了,可是计算的结果仍旧有 x 权限。(所以应该转成rwx之类的进行计算)

如何查看或设定 umask 

[root @test root]# umask
0022
[root@vbird test]# umask 002 <==后面接 3 个数字!
[root@vbird test]# umask
0002


七、进程&线程

Linux复习(一)_第8张图片Linux复习(一)_第9张图片
Linux复习(一)_第10张图片Linux复习(一)_第11张图片
Linux复习(一)_第12张图片


进程:   进程是一个正在执行的程序实例。由执行程序、它的当前值、状态信息以及通过操作系统管理此进程执行情况的资源组成。
A shell is a process that reads your  commands and start the appropriate  process. 

(以下转自http://blog.csdn.net/forrest2009/article/details/6413756)

线程是进程的一个执行流,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。一个进程由几个线程组成(拥有很多相对独立的执行流的用户程序共享应用程序的大部分数据结构),线程与同属一个进程的其他的线程共享进程所拥有的全部资源。

"进程——资源分配的最小单位,线程——程序执行的最小单位(CPU分配的最小单位)"


      使用多线程的 理由之一 是和进程相比,它是一种非常"节俭"的多任务操作方式。我们知道,在Linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种"昂贵"的多任务工作方式。而运行于一个进程中的多个 线程,它们彼此之间使用相同的地址空间,共享大部分数据,启动一个线程所花费的空间远远小于启动一个进程所花费的空间, 而且,线程间彼此切换所需的时间也远远小于进程间切换所需要的时间。据统计,总的说来,一个进程的开销大约是一个线程开销的30倍左右,当然,在具体的系统上,这个数据可能会有较大的区别。

使用多线程的理由之二是线程间方便的通信机制。对不同进程来说,它们具有独立的数据空间,要进行数据的传递只能通过通信的方式进行,这种方式不仅费时,而且很不方便。线程则不然,由于同一进程下的线程之间共享数据空间,所以一个线程的数据可以直接为其它线程所用,这不仅快捷,而且方便。当然,数据的共享也带来其他一些问题,有的变量不能同时被两个线程所修改,有的子程序中声明为static的数据更有可能给多线程程序带来灾难性的打击,这些正是编写多线程程序时最需要注意的地方。

除了以上所说的优点外,不和进程比较,多线程程序作为一种多任务、并发的工作方式,当然有以下的优点:

  • 提高应用程序响应。这对图形界面的程序尤其有意义,当一个操作耗时很长时,整个系统都会等待这个操作,此时程序不会响应键盘、鼠标、菜单的操作,而使用多线程技术,将耗时长的操作(time consuming)置于一个新的线程,可以避免这种尴尬的情况。
  • 使多CPU系统更加有效。操作系统会保证当线程数不大于CPU数目时,不同的线程运行于不同的CPU上
  • 改善程序结构。一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独立的运行部分,这样的程序会利于理解和修改。


你可能感兴趣的:(Linux复习(一))