红旗Linux系统应用编程(txt+pdf+epub+mobi电子书下载)


发布时间:2020-05-11 07:14:08

点击下载

作者:北京中科红旗软件技术有限公司

出版社:石油工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

红旗Linux系统应用编程

红旗Linux系统应用编程试读:

前言

Linux系统是运行在个人计算机和工作站上的Unix操作系统,它继承了Unix的全部优点,是真正的多用户、多任务、多平台的操作系统。在个人计算机和工作站上使用Linux系统,能充分发挥硬件的功能,使个人计算机能够作为工作站和服务器使用,提高工作站效率;Linux系统符合POSIX标准,能同时支持i386、MIPS、SPARC和PowerPC等处理器;对于Unix系统上运行的软件,不用改动或稍加改动就可以运行在Linux操作系统上。

同Unix系统相比,Linux系统要灵活得多。Linux系统的用户界面非常友好,用户使用很方便。基于开源文化技术理念的开发与交流方式,使得众多经验与知识可以得到充分的交流。Linux系统及其众多应用软件的源代码都是向用户公开的,允许用户使用Linux系统自带的C/C++语言编译器修改并编译自己喜欢的程序,同时也可以在GNU的许可下使用这些源程序的部分或全部;这种利用Linux源程序的可能性大大激发了世界范围内热衷于计算机事业的人们的兴趣和创造力,吸引了众多程序员为Linux系统工作。在基于不同文化背景需求的Linux系统发布版中,同时集成了众多编程语言的编译程序、数据库管理系统、图形用户界面、通信联网工具以及大量的其他应用软件。可见,Linux系统已经是一个相当优秀的应用软件开发平台。

此外,强大的网络与集群功能,使Linux系统在目前基于云计算的应用架构中起到了重要的作用。因此,Linux系统也将激发基于集群服务架构的网络应用开发技术的运用。未来的Linux系统应用将不再是以往单机运行的主导模式,基于强大高速网络平台的应用技术将会快速发展。

为适应软件开发产业的变革以及促进Linux系统在我国的推广应用,针对院校人才培养市场的需要,并配合“国家Linux技术培训与推广中心”建设以及“核心电子器件、高端通用芯片及基础软件产品”国家重大专项的需要,红旗教育学院基于红旗软件研发体系的工作经验,组织经验丰富的Linux编程人员,参考国际经典Linux、Unix编程书籍,编写了本书,为开源文化理念下的软件技术开发教学提供经验与技术的交流。

本书由北京中科红旗软件技术有限公司红旗教育学院组织编写,对参与本书编写的人员,在此表示深深的感谢。由于本书涉及的内容丰富,加之篇幅、时间有限,书中难免存在纰漏和不足,失误之处敬请谅解和指正。

北京中科红旗软件技术有限公司

2012.7

1 基本开发环境

本章主要介绍Linux编程的特点、如何搭建Linux的基本开发环境以及Linux的基本命令和编辑工具的使用。了解了这些内容,就可以开始Linux平台上的开发之旅。

通过对本章的学习,将能够:(1)了解Linux编程和Windows编程的主要区别;(2)了解Linux基本编程环境的安装;(3)了解Linux下基本命令和编辑工具的使用。

1.1 Linux编程综述

1.1.1 Linux编程特点

Linux作为一个遵循GNU的操作系统,源代码的开放性已成为其最大的特点,可以方便地得到Linux系统及其应用软件的源代码。Linux编程就是在这样的环境下对程序进行编写或修改工作的。

1.1.2 Linux编程与Windows编程的主要区别

Windows一面以最友好的界面展现给程序员,一面却严格限制程序员对其进行透彻地研究,把自己用华丽的外表包装起来了。而Linux则一直以真面目示人,虽然相对有些神秘、费解,但内心是对刻苦钻研者敞开的。

在Linux系统的程序设计中,有一些重要特性要特别注意:(1)Linux是多任务的。可以同时创建多个进程或者线程。绝不能认为自己的程序是系统唯一的运行实例;同一个用户或者不同的用户可以运行该程序的其他实例。因此,在某些情况下必须小心对待同步的问题。(2)Linux是个真正的多用户系统。这就意味着存在某种安全机制,以确保把不同用户的文件隔开。用户的程序不能像在其他操作系统中那样,可以修改或者移动任何文件,除非它是root。(3)Linux有分时机制。分时的意思是允许多个用户同时登录,或者一个用户登录多次。用户可以使用诸如telnet、ssh或者X技术远程登录。因此必须知道你的程序可能同时被许多用户使用。

还有,与Windows相比较而言,Linux要便宜得多。在Linux上做开发,基本上不需要再另外安装开发工具,各个Linux发布版中都会集成很多开发工具,且不需要另外购买。1.1.2 Linux编程与Windows编程的主要区别01

1.1.3 Linux编程与Unix编程的主要区别

Unix系统并非完全开放的,商业Unix发布版价格昂贵;且各个Unix发布版之间也不是完全一致,有可能在一个Unix发布版上开发的程序到了另外一个Unix发布版中还需要很大的修改才可编译执行,也就是说在哪个Unix发布版上学习的就只能在哪个发布版上使用。

而Linux的各个发布版之间的区别较小,在一个发布版上开发的源程序基本上不需要修改就可以在另外一个发布版上编译执行,所以掌握一个Linux发布版的编程方法就等于学会了Linux的系统编程。

这里所讲的发布版本指的是同一时间段的发布版本,也就是说核心以及系统库均差别不大,假如把在一个3年前的发布版上开发的软件拿到一个今天的发布版本上编译,那么有极大可能是无法编译通过的。

1.2 Linux编程环境

本节以红旗Linux系统为例,介绍Linux的编程环境,包括编程环境的安装以及基本工具的使用。

1.2.1 编程系统安装

Linux各个发布版本中都集成了很多的开发工具,一个较为完整的操作系统,除了包含主要的系统核心以及常规管理和系统控制模块之外,还常会集合开发编程和常规应用等工具。按照各系统发布商的不同文化理念,其模块的组合与安装过程也会略有不同。在红旗的系统中需要在完成基本系统安装之后,另行选择在需要的时候通过配套的开发工具盘来完成其简单智能的安装过程。在开源文化技术领域,也可以随时通过相关社区下载不同功能的开发工具自行手工配装。

1.2.1.1 基本Linux系统安装技术

在商业发布的操作系统中,基本系统的安装均可通过人机交互的智能界面简单完成,相关操作技术以及所涉及的知识,可参考对应产品技术手册或相关的教程。

1.2.1.2 开发工具集的安装

完成红旗Linux的基本系统安装后,在基本系统中已经包含了开发使用的gcc编译器和常用的各种开发库,具备了基本的开发环境,但是一些图形的集成开发工具和调试工具还没有包括在里面。红旗Linux系统把一些常用的图形开发工具和调试工具单独放在了开发工具盘中,可跟随安装向导完成安装;也可以通过YUM库随时选择需要的工具集。

准备好红旗Linux系统的开发工具盘,进入系统,启动图形界面,将开发工具盘放入光驱中。红旗开发工具包安装程序将被自动引导,在欢迎界面后,点击【下一步】按钮就可—2—1.2.1 编程系统安装011.2.1 编程系统安装02

以开始安装了。首先进入的是“选择软件包”界面,在这里,可以选择需要安装的软件包。基于希望拥有一个完全的开发环境的原因,推荐全部安装这些软件包(图1 1)。

图1-1 选择软件包界面

点击【下一步】按钮将开始安装软件包(图1-2)。

图1-2 开始安装软件包

安装完成后,安装程序会自动执行安装后的配置,然后显示完成界面,点击【结束】按钮就可以结束开发工具盘的安装。1.2.1 编程系统安装03附表

对于红旗Linux桌面系统来说,如果需要配置基本开发环境,除了使用全包光盘安装之外,也可在基本系统环境下,通过YUM库更新系统,如图1-3所示。在“开始”菜单中,选择“更新”,在“软件管理”模块中,即可自动根据系统所设置的“软件源”,通过网络或安装光盘来完成软件的添加、删除等管理工作。

图1-3 YUM软件更新

以红旗Linux桌面系统的YUM管理体系为例,“软件源”的配置文件在“/etc/yum.repos.d/”中的,例如,redflag-dt6sp3.repo中的配置指向。

这里分别给出了内部YUM资源与外网资源指向,对应资源库中,均提供了由红旗匹配好的相关工具。

如果系统配置的软件源有效,则可在分类列表中选择“开发”类,并跟随向导,完成所匹配开发工具的安装,如图1-4所示。

到此为止,一个基本的开发环境就构造好了。1.2.1 编程系统安装04

图1-4 软件仓库安装选择

1.2.2 Linux系统文件分布和组织

1.2.2.1 Linux的文件分布结构

很多熟悉Windows的用户刚接触Linux时,对Linux的磁盘管理感到最头疼,因为在Linux系统中不会看到C盘、D盘这样的东西,而只能看到一些目录,那么Linux是如何管理磁盘的呢?在Linux系统中如何访问不同的磁盘分区呢?

Linux的文件系统没有Windows下的盘符的概念,Linux系统以文件目录的方式来组织和管理系统中的所有文件。所谓文件目录就是将所有文件的说明信息采用树型结构组织起来——即常说的目录。也就是说,整个文件系统有一个“根”(root),然后在根上分“杈”(directory),任何一个分杈上都可以再分杈,杈上也可以长出“叶子”。“根”和“杈”在Linux中被称为是“目录”或“文件夹”,而“叶子”则是一个个的文件。

Linux系统通过目录将系统中所有的文件分级、分层组织在一起,形成了Linux文件系统的树型层次结构(图1-5)。以根目录为起点,所有其他的目录都由根目录派生而来,用户可以浏览整个系统,可以进入任何一个已授权进入的目录,访问那里的文件。

Windows的目录结构也是树型结构,不过Windows中这样的树型结构的根是磁盘分区的盘符,有几个分区就有几个树型结构,他们之间的关系是并列的(图1-6)。但是在Linux中,无论操作系统管理几个磁盘分区,这样的目录树只有一个。1.2.2 Linux系统文件分布和组织011.2.2 Linux系统文件分布和组织02附表

图1-5 Linux树型目录结构

图1-6 Windows树型目录结构

对于只有一个磁盘分区的文件系统还好理解,那么如果是多个磁盘分区组成的文件系统,Linux如何管理不同的分区呢?

在Linux系统中有一个挂载(mount)的概念,可以把一个磁盘分区挂载到一个目录下,使得这个磁盘分区成为整个文件系统树的一部分,当挂载成功后,原来挂载目录(也称挂载点)下的文件就消失了,取而代之的是该磁盘分区上的内容。通过这种方式就可以在一个树型目录结构中访问所有的磁盘分区。在访问结束后,可以将磁盘分区卸载(umount)下来,则原来挂载目录下的文件就又可以访问了。

1.2.2.2 Linux系统的主要目录结构(1)Linux文件系统中各主要目录的内容和用途。

Linux目录树的主要部分有/、/usr、/var、/home等,下面是一个典型的Linux目录结构(表1-1)。

表1-1 Linux目录结构(2)典型的/usr目录下的内容如表1 2所示。—6—1.2.2 Linux系统文件分布和组织03附表

表1-2/usr目录结构

1.2.3 Linux系统命令操控技术

随着Linux桌面技术的飞速发展,现在,在Linux上也可以像在Windows系统上一样进行图形操作了,但是,由于Linux上的命令功能强大、灵活、方便,很多熟悉Linux的人还是热衷于使用命令来操作Linux,所以还是有必要简单介绍一下Linux系统的常用命令。

1.2.3.1 Shell简介

用户在命令行下工作时,不是直接同操作系统内核打交道,而是由命令解释器接收命令,分析后再传给相关的程序。进入Linux环境时系统将自动启动相应的Shell,Shell是一种命令行解释程序,它提供用户与操作系统之间的接口。红旗Linux系统默认的Shell是bash。

bash命令的基本格式为:

命令名[选项]<参数1>[参数2]...

其中方括号括起的部分表明该项对命令而言是可选的;尖括号括起的部分表示该项对命令而言是必选的。(1)[选项]:对命令有特别定义,一般以“-”开始,多个选项可用一个“-”连起来,如 ls-l-a与 ls-la相同;(2)[参数]:提供命令运行的信息,或者是命令执行过程中所使用的文件名。

输入用户名、口令与文件名、命令名时,一定要区分大小写,因为大小写字母在Linux系统中代表不同的含义。

在命令、选项和参数之间要用空格隔开。连续的空格会被Shell解释为单个空格。

在Shell提示符下输入相应的命令,然后按回车键确认,Shell会读取该命令并执行。如果系统找不到输入的命令,则会显示“Command not Found”,这时需要检查键入命令的拼写及大小写是否正确。

使用分号(;)可以将两个命令隔开,这样可以实现在一行中输入多个命令。命令的执行顺序与输入的顺序相同。

1.2.3.2 常用命令介绍

由于本书重点在于介绍Linux编程方面的知识,所以这里只是先介绍一下Linux的常用1.2.3 Linux系统命令操控技术011.2.3 Linux系统命令操控技术021.2.3 Linux系统命令操控技术03

命令,更详细的命令介绍请参考相关Linux系统使用方面的书籍。

1.进入与退出系统(1)进入系统。

Linux系统正常启动之后,会进入系统登录界面,登录界面分两种,文本登录(图1-7)和图形登录(图1-8)。具体启动哪种登录界面是在安装程序中设定的,并可根据需要重新设定。

图1-7 文本登录界面

图1-8 图形登录界面

必须要输入正确的用户名和密码才能进入Linux系统,如在安装Linux系统的过程中,设置了超级用户密码,这时,就可以使用超级用户登录Linux系统。

Linux系统的超级用户是root,填入root这个用户名(文本登录时直接在login:后面写,然后回车确认),然后输入在安装系统时设置好的密码,确认后就可登录进入系统。

一般的Linux使用者均为普通用户,而系统管理员一般使用超级用户账户完成一些系统管理的工作。如果只需要完成一些由普通用户就能完成的任务,建议不要使用超级用户,以免无意中破坏系统,影响系统的正常运行。

当用户正确地输入用户名和口令后,就能合法地进入系统。文本登录时屏幕会显示shell的提示符:

[root@localhost~]#(2)增加一般用户。

进入系统之后,首先的任务是建立一个用于日常工作的一般用户,可以使用命令useradd来增加用户:

useradd<用户名>

然后使用passwd命令来为这个用户设置密码:

passwd<用户名>

它将提示用户输入新口令,之后还要求用户再次确认新口令,以避免用户无意中按错键。设置完成后就可以使用这个用户登录系统了。注意,这里是用超级用户来执行passwd命令为一般用户设置密码,如果用户自己修改密码也是运行这个命令,但是该命令会首先要求用户输入正确的旧密码,否则不能修改密码。1.2.3 Linux系统命令操控技术04

如果使用一般用户登录系统,shell的提示符是“

”,而不再是“#”:

[jiehua@localhost~]1.2.3 Linux系统命令操控技术05

shell提示符的一般格式为“[用户名@主机名 当前目录]提示符”,上例中“~”表示用户主目录,一般用户为/home目录下以用户名为目录名的目录,root用户为/root目录。(3)退出系统。

不论是超级用户还是普通用户,需要退出系统时,在shell提示符下键入exit命令即可。

2.文件的拷贝、移动和删除(1)拷贝文件。

使用cp命令可以做文件的备份,或者做其他用户文件的个人拷贝。

可以使用 cp 命令把一个源文件拷贝到一个目标文件,或者把一系列文件拷贝到一个目标目录中。其语法是:

cp[参数]<源文件1>[源文件2...]<目标文件>

如果目标文件是目录文件,那么把源文件拷贝到这个目录中,而文件名保持不变;

如果目标文件不是目录文件,那么源文件就拷贝到该目标文件中,后者原有的内容将被破坏,但文件名不变;

如果给出了多个源文件,那么该目标文件必须是目录文件,所有的源文件都将被拷贝到目标目录中,所有源文件的名字都不变。

cp命令复制一个文件,而原文件保持不变。如果把一个文件拷贝到一个已经存在的目标文件中,那么,原目标文件的内容将被破坏!为了防止破坏重要文件,cp命令提供了一个非常有用的参数-i,使用它,若目标文件已经存在时,cp命令会给出提示,询问用户是否要覆盖目标文件,输入y覆盖,输入n则取消拷贝。

有时候希望无论目标文件是否存在都将其覆盖,则可以使用-f参数。

cp的另一个常用参数是-r,使用它后,若给出的源文件是目录文件,此时cp将递归复制该目录下所有的子目录和文件。此时目标文件必须为一个目录名。(2)移动和重命名文件。

mv命令用来移动文件或对文件重命名。该命令的语法为:

mv[参数]<源文件1>[源文件2...]<目标文件>

如果目标文件是某一目录文件的路径,源文件会被移到此目录下,且文件名不变;

如果目标文件不是目录文件,则源文件名会变为此目标文件名,并覆盖已存在的同名文件;

在给出多个源文件的时候,目标文件必须是目录文件,所有的源文件都会被移至目标目录中,所有移到该目录下的文件都将保留以前的文件名。

和cp命令类似,可以使用-i参数来防止将已存在的目标文件覆盖,也可以使用-f参数来强制将目标文件覆盖。

如果源文件和目标文件在同一个目录下,mv的作用就是重命名文件。(3)删除文件。

用rm命令删除不需要的文件和目录。该命令的语法为:1.2.3 Linux系统命令操控技术06

rm[参数]<文件名1>[文件名2...]

在删除文件之前,最好再看一下文件的内容,确定是否真正要删除。

和cp和mv命令类似,可以使用-i参数,让rm命令在删除文件之前给出提示,必须按y键确认才会删除,也可以使用-f参数来强制删除文件。

rm命令也有-r参数,使用-r参数可以删除目录。

Linux的很多命令都使用相同的参数,比如-i,-f,-R等,他们的意义基本相同,均表示交互模式、强制模式和递归模式,以后遇到其他的命令具有这些参数时也可以尝试使用。

3.目录的创建与删除(1)创建目录。

mkdir命令用来创建一个目录。其语法如下:

mkdir[参数]<目录名1>[目录名2...]

该命令用于创建由“目录名”命名的目录。要求创建目录的用户在当前目录的父目录中具有写权限,并且“目录名”不能是当前目录中已有的目录或文件名。“目录名”也可以是一个路径名,此时相当于建立多级目录,但是这时如果路径中的某些目录不存在,那么mkdir将不能建立目录,这时必须使用-p参数,这样系统将自动建立好那些尚不存在的目录,就可以一次建立多个目录。比如:

mkdir-p/opt/test/foo/bar

在/opt下没有test目录的时候也可以将整个路径都建立出来。(2)删除目录。

rmdir命令可以用来删除空目录。语法如下:

rmdir[参数]<目录名1>[目录名2...]

该命令从一个目录中删除一个或多个子目录项。需要特别注意的是,一个目录被删除之前必须是空的。删除某目录时也必须具有对父目录的写权限。(3)其他几个与目录操作相关的命令。①cd命令。

功能:改变工作目录。

cd[目录名]

该命令将当前目录改变至“目录名”所指定的目录。若没有给出选项“目录名”,则回到用户的主目录。为了改变到指定目录,用户必须拥有对指定目录的执行和读权限。

②pwd命令。

功能:显示当前路径名。

pwd

此命令显示出当前工作目录的绝对路径。③ls命令。

功能:列出目录的内容。

ls[参数][目录或是文件名]

对于每个目录,该命令将列出其中的所有子目录与文件。对于每个文件,ls将输出其文件名以及所要求的其他信息。默认情况下,输出条目按字母顺序排序。当未给出目录名或文件名时,就显示当前目录的信息。

ls 命令中一些常用的参数:

●-a:显示指定目录下所有子目录与文件,包括隐藏文件。●-l:以长格式来显示文件的详细信息。这个选项最常用。

每行列出的信息依次是:文件类型与权限,链接数,文件属主,文件属组,文件大小,建立或最近修改的时间,名字。

对于符号链接文件,显示的文件名之后有“—〉”和引用文件路径名。

对于设备文件,其“文件大小”字段显示主、次设备号,而不是文件大小。目录中的总块数显示在长格式列表的开头,其中包含间接块。

①-r:按字母逆序或最早优先的顺序显示输出结果。

②-R:递归式地显示指定目录的各个子目录中的文件。

③-t:显示时按修改时间而不是按名字排序。若文件修改时间相同,则按字典顺序。

用ls-l命令显示的信息中,开头是由10个字符构成的字符串,其中第一个字符表示文件类型,它可以是下述类型之一:

●-:普通文件;● d:目录;

● l:符号链接;

● b:块设备文件;

● c:字符设备文件。

后面的9个字符表示文件的访问权限,分为3组,每组3位。

第一组表示文件属主的权限,第二组表示同组用户的权限,第三组表示其他用户的权限。每一组的三个字符分别表示对文件的读、写和执行权限。

各权限如下所示:①r:读。

②w:写。

③x:执行。对于目录,表示进入权限。

④s:当文件被执行时,把该文件的UID或GID赋予执行进程的UID(用户ID)或GID(组ID)。

⑤t:设置标志位(留在内存,不被换出)。如果该文件是目录,在该目录中的文件只能被超级用户、目录拥有者或文件属主删除。如是可执行文件,在该文件执行后,指向其正文段的指针仍留在内存。这样再次执行它时,系统就能更快地装入该文件。附表

4.文本文件的处理(1)查看文件内容。

cat命令可以查看文本文件的内容,语法如下:

cat[参数][文件名...]

但没给出“文件名”时,cat模式显示标准输入的内容,也就是你在键盘上输入的文字会被cat马上显示出来,你就可以看到两行同样的文字。(2)比较文本文件。

diff命令用于比较文本文件,并显示两个文件的不同。其一般格式是:

diff[参数]<文件1><文件2>

如两个文件完全一样,则不显示任何输出。如有区别,就会分段显示两个文件的区别。常用的参数有:

-u:按标准格式输出,这种格式更容易看懂两个文件的区别,diff会给出两个文件的区别的起始行号,区别的行数,区别之前和之后相同的三行内容,并且在行首用“-”表示“文件1”的内容,“+”表示“文件2”的内容。下面是一段使用了-u参数的diff输出,注意,diff显示的相同行的行首是会有一个空格的。

5.备份与压缩(1)tar命令。

tar命令可以为文件和目录创建档案。利用tar,用户可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件。tar最初被用来在磁带上创建档案,现在,用户可以在任何设备上创建档案。利用tar命令,可以把一大堆的文件和目录全部打包成一个文件,这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的。语法如下:

tar<参数><文件或者目录...>

几个tar的常用选项:

①c:创建新的档案文件。如用户想备份一个目录或是一些文件,可选择这个选项。②t:列出档案文件的内容,查看已经备份了哪些文件。

③x:从档案文件中释放文件。—12—附表

④v:详细报告tar处理的文件信息。如无此选项,tar不报告文件信息。

⑤z:用gzip来压缩/解压缩文件,加上该选项后可以将档案文件进行压缩,但还原时也一定要使用该选项进行解压缩。(2)gzip命令。

gzip是在Linux系统中经常使用的一个对文件进行压缩和解压缩的命令,既方便又好用。语法如下:

gzip[参数]<文件名>

几个常用的参数:

①-d:将压缩文件解压;

②-num:用指定的数字num调整压缩的速度;③-1或—fast:表示最快压缩方法(低压缩比);

④-9或—best:表示最慢压缩方法(高压缩比), 系统缺省值为6。(3)zip/unzip命令。

用zip压缩的文件,其扩展名是zip,这样的文件可以用Windows下的压缩软件winzip解压;相反winzip压缩的文件,可以用unzip命令解压缩。语法如下:

其中“压缩文件名”表示要生成的或要解压的压缩文件,“文件名…”可以是很多文件,中间用空格隔开,如果要压缩一个目录下的所有文件包括子目录时,可以使用-r参数。

6.在文件中查找正文

grep命令用来在文本文件中查找指定模式的词或短语,并在标准输出上显示包括给定字符串的所有行。grep命令的语法为:

grep[选项]

[查找模式]

[文件名...]

默认情况下,grep在查找模式时是区分大小写的;如果不想区别大小写,可以用参数-i。如果希望grep在给定的目录及其所有子目录中查找,可以使用参数-r。

例如,下面的命令将在/etc 目录及其子目录下的所有文件中查找字符串“hello world”:1.2.3 Linux系统命令操控技术07

#grep-r1.2.3 Linux系统命令操控技术08

hello world

/etc

7.改变文件或目录的访问权限

Linux系统中的每个文件和目录都有访问许可权限,用它来确定谁可以通过何种方式对文件和目录进行访问和操作。

文件或目录的访问权限分为读、写和执行三种。以文件为例,只读权限表示只允许读其内容,而禁止对其做任何的更改操作。执行权限表示允许将该文件作为一个程序执行。文件被创建时,文件所有者自动拥有对该文件的读、写和执行权限,以便于对文件的阅读和修改。用户也可根据需要把访问权限设置为需要的任何组合。附表

有三种不同类型的用户可对文件或目录进行访问:文件所有者、同组用户、其他用户。所有者一般是文件的创建者。所有者可以允许同组用户有权访问文件,还可以将文件的访问权限赋予系统中的其他用户。在这种情况下,系统中每一位用户都能访问该用户拥有的文件或目录。

每一文件或目录的访问权限都有三组,每组用三位表示,分别为文件属主的读、写和执行权限;与属主同组的用户的读、写和执行权限;系统中其他用户的读、写和执行权限。当用ls-l命令显示文件或目录的详细信息时,最左边的一列为文件的访问权限。例如:

横线“-”代表空许可,“r”代表只读,“w”代表写,“x”代表可执行。这里共有10个位置,第一个字符指定了文件类型。在通常意义上,一个目录也是一个文件。如果第一个字符是横线“-”,表示是一个非目录的文件;如果是“d”表示是一个目录。

从hello.c的访问权限可以看出,它是一个普通文件,它的属主有读写权限,与属主同组的用户只有读权限,其他用户也只有读权限。

确定了一个文件的访问权限后,用户可以利用Linux系统提供的chmod命令来重新设定不同的访问权限。也可以利用chown命令来更改某个文件或目录的所有者。利用chgrp命令来更改某个文件或目录的用户组。(1)chmod命令。

chmod命令用于改变文件或目录的访问权限。用户用它控制文件或目录的访问权限。该命令有两种用法。

①包含字母和操作符表达式的文字设定法:

chmod[who][+|-|=][mode]<文件名>

命令中各选项的含义为:

操作对象who可是下述字母中的任一个或者它们的组合:● u:表示“用户( user)”,即文件或目录的所有者;

● g:表示“同组( group)用户”,即与文件属主有相同组ID的所有用户;● o:表示“其他( others)用户”;

● a:表示“所有(all)用户”,它是系统默认值。操作符号可以是:

●+:添加某个权限;●-:取消某个权限;

●=:赋予给定权限并取消其他所有权限(如果有的话)。设置mode所表示的权限可用下述字母的任意组合:

● r:可读;● w:可写;● x:可执行;

● X:只有目标文件对某些用户是可执行的或该目标文件是目录时才追加x属性;—14—

● s:在文件执行时把进程的属主或组ID置为该文件的文件属主,方式“u+s”设置文件的用户ID位,“g+s”设置组ID位;

● t:保存程序的文本到交换设备上;● u:与文件属主拥有一样的权限;

● g:与和文件属主同组的用户拥有一样的权限;● o:与其他用户拥有一样的权限。

文件名:以空格分开的要改变权限的文件列表,支持通配符。

在一个命令行中可给出多个权限方式,其间用逗号隔开。例如:

chmod g+w,o+w hello.c

表示使同组和其他用户对文件hello.c有写权限。②包含数字的数字设定法:

chmod[mode]<文件名>

在这里,mode为一个表示文件属性的八进制数。0表示没有权限,1表示有权限,然后按照属性的顺序组成一个二进制数列,再按照属主、属组、其他分成三组,将它们转化为八进制数。例如,刚才的hello.c的文件属性为:

-rw-r-r

第一位表示文件或者目录的标识位,不作考虑,从第二位开始,按照刚才的规定先转成二进制数列:110100100,再按属主、属组和其他人分成三组:110,100,100,转换成八进制数字分别是6、4、4,于是得到mode的值就是644。

那么反过来,如果执行命令:

chmod 755 hello.c

则表示将hello.c的文件属性变为:

-rwxr-xr-x(2)chown命令。

功能:更改某个文件或目录的属主和属组。这个命令也很常用。例如,root用户把自己的一个文件拷贝给用户jiehua,为了让用户jiehua能够存取这个文件,root用户应该把这个文件的属主设为jiehua,否则,用户jiehua无法存取这个文件。

chown的语法为:

chown[参数]<用户名>[:组名]<文件名>

chown将指定文件的拥有者改为指定的用户和组。(3)chgrp命令。

功能:改变文件或目录所属的组。语法为:

chgrp[参数]<组><文件名>

该命令改变指定文件所属的用户组。其中group可以是用户组ID,也可以是/etc/group附表

文件中用户组的组名。

1.2.3.3 命令的自动补全技术

在Linux系统中,不必准确地记住每一个命令,因为Linux系统具备命令自动补全功能,这是一个很有用的功能,只要输入命令开始的几个字母,然后按【TAB】键,Linux系统就会尝试补全余下的字母,如果输入的字母开始的命令只有一个,那么命令马上就可以被补全,如果有多个,那么系统会列出所有的可能。例如,Xconfigurator这个命令,有13个字母,只要输入Xc然后按【TAB】键系统就可以马上自动补全这个命令,因为在系统中以Xc开头的命令只有这一个。再试试“which”,输入开头的“whi”,按【TAB】,系统没有马上补全命令,而是发出提示音,再按一下【TAB】键,系统会给出可能的三个选项,也就是说系统中以“whi”开头的命令一共有三个,可继续输入后面的字母,然后再按【TAB】键,直到以输入的字母开头的命令只有一个时,系统会自动补全该命令。

1.2.3.4 历史命令库的管理

上下箭头可以选择历史命令,【PageUp】可以跳到第一条历史命令,【PageDown】可以跳到最后一条历史命令;history命令可以列出所有的历史命令,第一列为命令的序号,可以使用“!序号”来重复执行第“序号”个命令。!后接命令名,可以重复执行上一个以这个命令开头的命令行,包括所有参数。

例如,!ls,可以执行上一次的ls命令,如果上一次的ls命令是ls-l,那么这次仍然会执行ls-l命令。

1.2.3.5 系统环境变量的配置

Linux下面每个程序运行都有一个所谓的运行环境,这里的环境实际上就是一组变量的定义。所有的变量和他们的值都以字符串的形式表达;通常变量名字都用大写字符表达。

对于环境变量大家都不陌生,例如,HOME这个环境变量,用于指示的当前用户的主目录的路径。

表1-3给出了Linux系统中常用的一些环境变量及其描述。

表1-3 常用环境变量及其描述

在shell里可以使用echo命令来显示具体环境变量的值,使用export命令来设置环境变量。1.2.3 Linux系统命令操控技术09附表附表(续)-1附表(续)-2

在应用程序里面,如果需要访问一个环境变量,可以通过getenv()这个函数来实现。这个函数的输入参数是需要访问的变量名字,得到的返回值是一个字符串,如果所访问的环境变量没有设置,则会返回NULL。如果需要在程序里面设置某个环境变量,则可以使用setenv这个函数,如果是要清除某个特定的环境变量,则使用unsetenv这个函数。

值得一提的是,GNU C函数库里面有一个特殊的全局的变量,名字叫做environ,这个变量的类型是char**,它所指向的是所有的环境变量的一个列表,最后是以NULL结尾。每个字符串都是“VALUE=value”这样的形式。例如,下面的程序可以打印出当前运行环境里面所有的环境变量:

如果需要修改某个环境变量,不要直接修改environ这个变量,而应该使用setenv或者unsetenv这样的管理函数来做这件事情。

一般来说,当一个程序启动的时候,它就会拷贝一份启动它的“父”程序所拥有的环境变量。环境变量是GNU程序常用来配置某个应用程序的行为的一个方法,例如,通过环境变量来设置HTTP代理服务器的地址和端口号等。下面是一段代码的演示:附表

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载