Linux系统概述

本章概述Linux系统。首先描述操作系统提供的主要服务。然后说明实现这些服务的程序 with a considerable lack of detail。本章的目的是理解系统整体,以后再详细说明每个部分。

一个操作系统的不同部分

  一个UNIX操作系统包括一个核心程序kernel和一些系统程序system programs。还有一些做某件事情的应用程序application programs。核心是操作系统的心脏 。它跟踪磁盘上的文件,启动程序并运行它们,给不同的进程分配内存和其他资源,从网络接收和向网络发送包,等等。核心很少自己干活,但它提供工具,用这些工具可以建立所有服务。它还阻止任何人直接存取硬件,强制每个人使用它提供的工具。这样,核心给每个用户与其他用户之间提供保护。核心提供的工具通过系统调用system calls使用;要了解关于这的更多的信息,看手册页第二节。

  系统程序使用核心提供的工具实现操作系统要求的不同的服务。系统程序和所有其他程序运行在核心之上,叫做用户模式user mode。系统程序和应用程序的区别是目的:应用程序意图完成一些有用的工作(或游戏),而系统程序则为系统工作而需要。字处理器是应用;telnet 是系统程序。区别经常有些模糊,也许,只是为了强制分类。

  虽然编程语言不必是操作系统的一部分,操作系统也可以包括编译器及其相关的库(Linux下是gcc和C库)。文档、有时甚至游戏,可以是操作系统的一部分。传统上,操作系统被定义为安装磁带或磁盘上的内容;对于Linux就更不清楚,因为它分布在全世界的FTP站点上。

核心的重要部件

  Linux核心包括几个重要部分:进程管理、存储器管理、硬件设备驱动、文件系统驱动、网络管理和其他不同的部分。图2.1显示了它们的一些。

  可能核心最重要的部分(没有它们什么也不能工作)是存储器管理和进程管理。存储器管理负责分配进程的存储器区域和对换空间区域、核心的部件及buffer cache。进程管理产生进程,用切换处理器上的活动进程来实现多任务。

  在最低级,核心对它支持的每种硬件包含一个硬件设备驱动。因为世界上存在大量不同的硬件,硬件设备驱动的数量极大。有许多不同的硬件,因此软件控制方法不同。但其相似性可能分类驱动,支持相似的操作;每类的每个成员有相同的与核心其他部分接口,但具体实现是不同的。例如,所有的硬盘驱动与核心其他部分接口相同,即他们都有初始化驱动器、读N扇区、写N扇区。

  核心自己提供的有些软件服务有类似的抽象属性,因此可以抽象分类。例如,不同的网络协议已经被抽象为一个编程接口:BSD socket库。另一个例子是虚拟文件系统virtual filesystem(VFS)层,它从文件系统操作实现中抽象出文件系统操作。每个文件系统类型提供了每个文件系统操作的实现。当一些实体企图使用一个文件系统时,请求通过VFS送出,它将请求发送到适当的文件系统驱动。

UNIX系统的主要服务

  本节说明一些最重要的UNIX服务,但不太详细。以后的章节中将更详细地说明。

init

  UNIX系统里最重要的服务是由init 提供的。 init 是每个UNIX系统在核心引导最后启动的第一个进程。 init 启动后,它做不同的启动工作继续引导过程(检查和mount文件系统、启动守侯程序等)
init 做的具体事情的列表依赖于用户意愿; init 有多个启动选择。通常提供单用户模式single user mode的概念,此时没有用户能登录,root 在控制台使用一个shell;通常的模式叫多用户模式multiuser mode。一般说来这称为运行级run levels;单用户和多用户模式可以理解为2个运行级,还可以有其他运行级,例如,在控制台上运行X。

  在普通操作中,init 确认getty 正常运行(允许用户登录),并收养孤儿进程(父进程已死的进程;UNIX中,所有进程 必须在一棵树中,因此孤儿进程必须收养)。

  当系统关闭时,init 负责杀死所有其他进程,unmount所有文件系统并停止处理器,根据设置。

从终端登录

  从终端登录(通过串行线)和控制台(当不运行X时)是由getty 程序提供的。 init 为每个允许登录的终端启动一个单独的getty 实例 getty 读用户名并运行login 程序,由它读口令。如果用户名和口令正确,login 就运行shell。当shell终止时,即用户注销,或login 因用户名和口令不对而终止时, init 知道并启动一个新的getty 实例。核心没有登录的概念,这都由系统程序处理。

Syslog

  核心和许多系统程序会产生错误、警告和其他信息。这些信息在以后能看经常是很重要的,甚至很久以后,所以它们应该被写到一个文件。这个程序是syslog 。它能设置成根据输出信息的程序或重要程度将信息排序到不同的文件。例如,核心信息经常与其他信息分开,单独定向到一个分离的文件,因为核心信息经常更重要且需要有规律地阅读以确定问题。

定时执行命令: cron 和at

  用户和系统管理员经常需要定时运行命令。例如,系统管理员可能想运行一个程序从老文件中清除暂存文件的目录 (/tmp 和/var/tmp ),以免磁盘满,因为并非所有程序都正确地清除自己的暂存文件。

  cron 服务是做这个的。每个用户有个crontab ,在这里列出他要执行的命令和想执行的时间。 cron 守侯进程负责在特定的时间启动命令。

  at 服务与cron 类似,但它只执行一次:命令在给定的时间执行,但不可自动重复。

图形用户接口GUI

  UNIX和Linux不将用户接口合在核心中,而是用用户级程序实现。用户接口同时提供文本和图形环境。

  这样的安排使系统更灵活,但有容易对每个程序实现不同的用户接口的缺点,使系统较难学。

  Linux使用的主要的图形环境叫X Window系统(简称X)。 X也不实现用户接口;它只实现一个窗口系统,即可以实现图形用户接口的工具。 3种最流行的基于X实现的用户接口风格是Athena、Motif和Open Look。

网络

  网络连接2台或更多的计算机使之能互相通信。连接和通信的实际方法有些复杂,但结果非常有用。

  UNIX操作系统具有许多网络特征。最基本的服务:文件系统、打印、备份等都可以通过网络完成。这可使系统管理更简单,因为它允许集中管理,同时获得小型机和分布计算的优点,例如降低成本和更好的容错能力。

  然而,本书只概述网络;更多的信息请见《Linux网络管理员指南》,包括一个网络如何操作的基本说明。

网络登录

  网络登录与普通登录有一点不同。可以登录的每个终端各有一条单独的物理串行线。从网络登录的每个人,有一条单独的虚拟网络连接,并且可以有任意数量 。因此不可能为每个可能的虚拟连接运行单独的getty 。通过网络登录有若干不同的方法, telnet 和rlogin 是TCP/IP网络中的主要方法。

  网络登录为每种登录方法提供一个单独的守侯程序(telnet 和rlogin 使用不同的守侯程序),而不是使用一群getty ,来侦听所有的输入的登录企图。当发现一个登录企图,就启动一个自己的新实例来处理这个企图;原来的实例继续侦听其他企图。新实例的工作和getty 类似。

网络文件系统

  网络服务的一个最有用的东西是通过网络文件系统network file system共享文件。这个服务一般用Sun公司开发的网络文件系统Network File System,或NFS。

  通过网络文件系统,任何文件操作可以由一台机器的一个程序通过网络发送到其他任何机器。这愚弄了程序,使它以为其他机器上的所有文件是在程序运行的机器上。这极大地简化了信息共享,因为它对程序无须任何修改。

邮件

  电子邮件通常是通过计算机通信的最重要的方法。一封电子信件用特定的格式存储在一个文件中,使用特定的邮件程序来收发邮件。

  每个用户有一个收件箱incoming mailbox(一个特定格式的文件),所有新邮件存在这里。当什么人发送邮件时,邮件程序定位收件人的邮箱,并在邮箱文件中添加信件。如果收件人的邮箱在另一台机器上,信件就被发送到那台机器,由它用它觉得最合适的方法来投递邮箱。

  邮件系统包括很多程序。投递邮件到本地或远程邮箱使用一个程序(mail transfer agent或MTA,例如,sendmail 或smail ),而用户使用的则有很多不同的程序(mail user agent或MUA,例如pine 或elm )。邮箱一般存在/var/spool/mail 中。

打印

  同时只能有一个人使用某一台打印机,但各用户不共享打印机是不经济的。因此打印机由软件来管理,实现一个打印队列print queue:所有的打印任务放进一个队列,打印机完成一个任务后,自动再打印下一个。这无须用户来组织打印队列,回避了直接控制打印机。

  打印队列软件也把打印输出spools到磁盘,即,当任务在队列中时,打印输出存在一个文件中。这允许应用程序快速地完成一个打印任务到打印队列程序,应用程序无须等到打印任务真正完成就可以继续下去。这真的很方便,因为它允许打印出一个版本,无须打印完成,就继续修改一个新版本。

文件系统布局

  文件系统分为许多部分,通常从根文件系统有: /bin , /lib , /etc , /dev , 及一些其他; /usr 文件系统包含程序和不改变的数据; /var 文件系统包含改变的数据(例如log文件); /home 文件系统包含每个用户的个人文件。依赖于硬件配置和系统管理员的决定,方法不同,甚至所有东西可能在一个文件系统中。

  3章将更详细地说明文件系统布局,Linux文件系统标准(Linux Filesystem Standard)中有更详细的说明。

(0)

相关推荐

  • Linux系统概述

    本章概述Linux系统.首先描述操作系统提供的主要服务.然后说明实现这些服务的程序 with a considerable lack of detail.本章的目的是理解系统整体,以后再详细说明每个部分. 一个操作系统的不同部分 一个UNIX操作系统包括一个核心程序kernel和一些系统程序system programs.还有一些做某件事情的应用程序application programs.核心是操作系统的心脏 .它跟踪磁盘上的文件,启动程序并运行它们,给不同的进程分配内存和其他资源,从网络接收

  • Linux管理员手册(1)--系统概述

    本章概述Linux系统.首先描述操作系统提供的主要服务.然后说明实现这些服务的程序 with a considerable lack of detail.本章的目的是理解系统整体,以后再详细说明每个部分. 一个操作系统的不同部分 一个UNIX操作系统包括一个核心程序kernel和一些系统程序system programs.还有一些做某件事情的应用程序application programs.核心是操作系统的心脏 .它跟踪磁盘上的文件,启动程序并运行它们,给不同的进程分配内存和其他资源,从网络接收

  • 浅谈Linux grep与正则表达式

    grep简介 grep 是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来.通常grep有三种版本grep.egrep(等同于grep -E)和fgrep.egrep为扩展的grep,fgrep则为快速grep(固定的字符串来对文本进行搜索,不支持正则表达式的引用但是查询极为快速).grep是Linux文本处理三剑客之一. grep使用方式 使用方式: grep [OPTIONS] PATTERN [FILE...] grep [OPTIONS] [-e PATTERN

  • 详解Linux中两个查找命令locate和find教程

    Linux中有很多查找命令,今天主要讲解locate,find两个命令. 1.locate locate命令其实是"find -name"的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库(/var/lib/locatedb),这个数据库中含有本地所有文件信息.Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件.为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库. (

  • 解决linux下openoffice word文件转PDF中文乱码的问题

    网上很多介绍是由于jdk中的没有字体导致乱码,而我遇到的是转换过程并未报错,但转换后的PDF中是乱码,尝试在jre/lib/fonts/中增加字体,还是不能解决问题,因此可以判断非jre字体问题,是linux系统字体问题. 用vim /etc/fonts/fonts.conf,可以看到系统字体文件在/usr/share/fonts,将windows系统字体文件连接到此目录下 ln -s /usr/local/fonts fonts 然后更新缓存:fc-cache 重启openoffice: /o

  • Linux动态库函数的详解

    Linux动态库函数的详解 加载动态库 void *dlopen(const char *filename, int flag); flag的可能值: RTLD_LAZY RTLD_NOW RTLD_GLOBAL RTLD_LOCAL RTLD_NODELETE (since glibc 2.2) RTLD_NOLOAD (since glibc 2.2) RTLD_DEEPBIND 这些flag的具体含义可使用man查看 返回动态库中最近的一次错误 char *dlerror(void); 根

  • Linux 压缩某个文件夹的实现方法

    Linux 压缩某个文件夹的实现方法 tar -zcvf /home/xahot.tar.gz /xahot tar -zcvf 打包后生成的文件名全路径 要打包的目录 例子:把/xahot文件夹打包后生成一个/home/xahot.tar.gz的文件. zip 压缩方法: 压缩当前的文件夹 zip -r ./xahot.zip ./* -r表示递归 zip [参数] [打包后的文件名] [打包的目录路径] 解压 unzip xahot.zip 不解释 linux zip命令的基本用法是: li

  • Linux帮助和用户管理命令

    上篇文章我们介绍了Linux文件搜索命令,其中find是用的最多的也是功能最强大的文件或目录搜索命令,和另一个搜索命令locate的区别是,find命令是全盘搜索,刚创建的文件也能搜索的到,而locate是在文件资料库中进行搜索,对比find命令搜索速度快很多,但是新创建的文件如果没有收录到文件资料库中,使用locate命令是搜索不到的,再就是/tmp目录是不收录到文件资料库的,也就是说使用locate命令搜索不到在/tmp目录下的文件.然后我们介绍搜索命令所在的目录以及别名信息which,搜索

  • linux中top命令详解

    简介 top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器. top显示系统当前的进程和其他状况,是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户终止该程序为止. 比较准确的说,top命令提供了实时的对系统处理器的状态监视.它将显示系统中CPU最"敏感"的任务列表.该命令可以按CPU使用.内存使用和执行时间对任务进行排序:而且该命令的很多特性都可以通过交互式命令或者在

  • Linux 添加普通用户到 sudo 列表的方法

    前言 Linux 的普通用户(uid >= 500)不具有某些命令的执行权限,为了执行较高权限的命令,一般有两种方法: 第一种是使用 su - 命令切换到 root 用户去执行: 另外一种方法是在命令前添加 sudo 去执行. 编辑文件 在使用 sudo 执行命令之前,需要把该普通用户添加到 /etc/sudoers 文件: 1. 切换到 root 用户,使用命令 visudo 进入 vim ,看到它已打开了 /etc/sudoers 文件. 2. 输入 "/root" 搜索,找

随机推荐