admin 管理员组文章数量: 1184232
2023年12月22日发(作者:java简单应用程序代码大全)
文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
第一章:UNIX操作系统简介
学习目标
学完这一章,你能做到以下事情:
描述UNIX系统的基本组成和基本功能
1.1 什么是操作系统?
操作系统是一种特殊的用于控制计算机(硬件)的程序(软件)。
操作系统在资源使用者和资源之间充当中间人的角色。为众多的消耗者协调分配有限的系统资源。系统资源包括,CPU,内存,磁盘,和打印机。举个例子,一个用户(也可以是程序)将一个文件存盘,操作系统就会开始工作:管理磁盘空间的分配,将要保存的信息由内存写到磁盘等。
当用户要运行一个程序时,操作系统必须先将程序载入内存,当程序执行时,操作系统会让程序使用CPU。在一个分时系统中,通常会有多个程序在同一时刻试图使用CPU。
操作系统控制应用程序有序地使用CPU ,就好象一个交通警察在一个复杂的十字路口指挥交通。十字路口就象是CPU;每一条在路口交汇的支路好比一个程序,在同一时间,只有一条路的车可以通过这个路口,而交通警察的作用就是指挥让哪一条路的车通过路口,直到让所有路口的车辆都能通过路口。
2. UNIX操作系统的历史
UNIX操作系统1969年在贝尔实验室诞生。Ken Thompson 在Rudd Canaday,
,Doug Mcllroy,Joe Ossana,and Dennis Ritchie,的协助下,写出一个小的分时系统,开始得到关注,在许诺为实验室的管理人员提供一个文档准备工具后,
UNIX先驱们可以使用到一台更大的计算机,从而得以继续他们的开发工作。
在七十年代的中期,一些大学得到使用UNIX的许可,并很快在学院之间得到广泛流行,其主要的原因是:
•
小巧:最早的UNIX系统只占用512K字节的磁盘空间,其中系统内核使用16K,用户程序使用8K,文件使用64K。
灵活:源代码是可利用的,UNIX是用高级语言写成,提高了操作系统的可移植性。
便宜:大学能以一盘磁带的价格得到一个UNIX系统的使用许可。早期的UNIX系统提供了强大的性能,使其能在许多昂贵的计算机上运行。
•
•
以上优点在当时掩盖了系统的不足:
•
没有技术支持;AT&T在当时大部分的资源和都用在MUTICS上,没有兴趣
开发UNIX系统。
•
•
Bug的修补:由于没有技术支持,bug的修补也得不到保证。
很少的,或者根本没有说明文档,用户有问题经常只能是去看源代码。
当UNIX传播到位于California的Berkeley大学的时候,Berkeley大学的使用者们创建了自己的UNIX版本,在得到国防部得支持后,他们开发出了许多新的特性。但是,作为一个研究机构,Berkeley大学提供的版本和AT&T的版本一样,也没有技术支持。
当
AT&T意识到这种操作系统的潜力后就开始将UNIX商业化,为了加强产品性能,他们在AT&T的不同部门进行UNIX系统开发,并且开始在系统中结合Berkeley开发出的成果。
UNIX最终的成功可以归结为:
文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
•
•
•
•
•
•
•
一个灵活的、包含多种工具的用户界面与操作环境。
模块化的系统设计可以很容易地加入新的工具。
支持多进程,多用户并发的能力。
Berkeley大学 的DARPA支持。
强大的系统互连的能力。
能在多种硬件平台上运行。
标准化的界面的定义促进应用的可移植性。
1.3 UNIX系统的特性
UNIX为用户提供了一个分时的系统以控制计算机的活动和资源,并且提供一个交互,灵活的操作界。UNIX被设计成为能够同时运行多进程,支持用户之间共享数据。同时,UNIX支持模块化结构,当你安装UNIX操作系统时,你只需要安装你工作需要的部分,例如:UNIX支持许多编程开发工具,但是如果你并不从事开发工作,你只需要安装最少的编译器。用户界面同样支持模块化原则,互不相关的命令能够通过管道相连接用于执行非常复杂的操作。
运行中的系统
内核是运行中的系统,它负责管理系统资源和存取硬件设备。内核中包含有它检测到的每个硬件的驱动模块,这些模块提供了支持程序用来存取CPU、内存、磁盘、终端、网络的功能。当安装了一种新的硬件,新的模块会被加入到内核之中。
运行环境
工具和应用程序
UNIX的模块化设计在这里表现得非常明显,UNIX系统命令的原则就是每条命令做好一件事情,组合一系列命令就组成工具箱,选择合适的命令就可以完成你的工作,恰当地组合这些工具能够帮你完成复杂的任务。
从开始,UNIX“工具箱”就包括了一些可以同系统进行交互的基本命令,UNIX系统也提供了以下几种工具:
电子邮件(mail,mailx)
文字编辑(ed,ex,vi)
文本处理(sort,grep,wc,awk,sed)
文本格式化(nroff)
程序开发(cc,make,lint,lex)
源程序版本管理(SCCS,RCS)
系统间通讯(uucp)
进程和用户帐号(ps ,du,acctcom)
因为UNIX系统的用户环境被设计为一种交互的,可编程的,模块化的结构,新的工具能很容易地开发,并且添加到用户工具箱之中,而哪些不是必须的工具能够被省略,这种省略不会影响系统的操作。
举个例子,一个程序员和一个打字员同时在使用UNIX系统,他们会使用许多普通命令,虽然他们的工作性质不相同。他们会用一些与他们的工作相关的工具。程序员使用的工具会包括程序开发和程序管理的工具,而打字员会使用字处理,文档管理的工具。有趣的是:程序员用来修订程序的工具同时也被打字员用来文档的修订。因此,他们的系统看上去十分相似,但是,每一个用户选择模块都与他或她的应用要求密切相关。
UNIX系统的流行很大程度可以归结与:
文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
•
•
•
UNIX系统的完整性与灵活性使其能适应许多的应用环境。
众多的集成的工具提高了用户的工作效率。
能够移植到不同的硬件平台。
SHELL
Shell 是一个交互的命令解释器。命令是在SHELL提示符下键入,shell会遵照执行键入的命令。用户通过shell与计算机交互。shell从键盘获得用户键入的命令,然后将命令翻译为内核能够理解的格式。然后系统就会执行这个命令。
你会注意到shell与内核是分离的两部分。如果你不喜欢当前shell提供的特性,你能很容易地用另一种shell代替当前的shell。
一些shell是命令行方式,一些提供菜单界面。UNIX系统支持的普通的shell都包括一个命令解释器和一个可编程的接口。
有四个最通用的shell,分别是:
•
Bourne shell --- 由AT&T提供的最原始的shell,由贝尔实验室的Stephen Bourne开发。 可提供命令的解释,支持可编程接口,提供诸如变量定义,变量替代, 变量与文件测 试,分支执行与循环执行等功能。
•
C Shell (/usr/bin/csh)----C Shell是在California Berkeley大学的Bill Joy开发,一般存
在于BSD系统中,于是被称为California shell,简写名称为C Shell。它被认为是Bourne Shell的一个改进版本。因为它提供拉交互的特征例如命令堆栈(-允许简单地调用和编辑以前输入的命令,)别名(提供对已有命令取个人的别名)
Korn Shell(/usr/bin/ksh)---- 贝尔实验室最新的开发成果,由David Korn开发成功。它
被认为是是一种增强型的Bourne Shell,因为它提供对简单可编程 的Bourne Shell界面的支持,同时提供C Shell 的简便交互的特征。它的代码也被优化来提供一种更快,更高效的shell。
•
POSIX Shell: -------POSIX是一种命令解释器和命令编程语言,这种shell同Korn
Shell在许多方面都很相似,它提供历史机制,支持工作控制,还提供许多其他有用的特性
表1-1 shell 特征的比较
1.4 UNIX的其他特征
层次化的文件系统
存储在磁盘上的信息称为文件。每一个文件都分配有一个名字,用户通过这个名字来访问文件,文件的内容通常是数据,文本,程序等等,UNIX系统通常有几百个文件存在,于是另外一种容器:目录被用来让用户在一个逻辑上的分组里管理它的文件。在UNIX系统中,目录被用来存储文件和其它的目录。
文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
文件系统的结构非常复杂,如果用户的工作部门改变,用户的文件和目录能很容易移动,改名,或组织到新的或不同的目录中,这些操作只需使用一些简单的UNIX系统的命令即可完成。文件系统就象一个电子排列柜,它能让用户分割,组织他们的信息到适合自己环境与应用的目录中去。
多任务
在UNIX系统中,能有几个不同的任务在同一时刻执行。 一个用户在一个终端可以执行几个程序,看上去好象是同时在运行。这意味着一个用户可以编辑一个文本文件时格式化另一个文件,同时打印另一个文件
实际上,CPU在同一时刻只能执行一个任务,但是UNIX系统能够将CPU的执行分成时间片,通过调度,使在同一时间内执行,对用户看来,就好象在同时执行不同的程序一样。
多用户
多用户就是允许多个用户在同一时刻登录和使用系统。多个终端和键盘能连接在同一台计算机上。这是多任务功能的一种自然延伸。如果系统能够同时运行多个程序,一些程序也能够支持多个用户线索。另外,一个单个用户能够通过多个终端在不同的时刻登录同一个系统。
这种体系结构的一个很大的好处是:工作组的成员能同时操作相同的数据。
文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
第二章:登录过程和普通命令
目标
完成了这一章,你能够做以下事情:
•
•
•
•
•
•
•
登录UNIX系统
退出UNIX系统
使用联机帮助查找命令用法
理解shell命令的格式
用一些简单的命令来鉴别系统用户
用一些简单的命令来与系统中的用户通信
用一些简单的命令来实现多种功能并输出结果
2.1一个典型的终端会话过程
为了能和计算机通信,需要有以下条件:
•
•
•
•
一个具有完全ASCII字符集的终端
一条连接计算机的数据通信线路
一个登录ID(用户身份确认)
一个密码
一个终端会话过程开始于用户登录一个系统认可的终端,结束于退出信号(logoff),计算机会在你登录期间响应你的键入的命令
UNIX通过用户名(有时也称为登录ID)来识别是否是系统中的用户。你的用户名,就是系统管理员分配给你的名称,通常是你的名字或是名字的缩写。你帐号的密码可以是一个随意的的字符串,你的系统管理员会提供给你一个你可以更改的初始化密码,你的密码是你私人所有的,你自己决定密码是什么,没人知道或能找出你的密码是什么。如果你忘记了你的密码,你就不得不求助于你的系统管理员。因为只有系统管理员有权删除修改用户的密码。
在终端上出现登录提示符时,你就可以输入用户名和密码登录以系统。
在登录上系统后,你可以输入命令,SHELL会解释命令,操作系统会为你执行命令,任何执行命令产生的响应都会显示在你的屏幕上。
当工作结束后,你可以退出系统以终止终端对话,这会释放终端以便让其他人可以通过这台终端登录系统。建议你在离开时退出系统,以防其他人使用你的帐号使用系统。
2.2登录和退出
你需要执行以下步骤来登录系统:
•
打开终端,如果一些终端显示已经超时(现象为屏幕上没有任何显示)你只需要敲一个键(例如shift键)激活显示。
如果你没有看到login:提示符,或者出现一些垃圾字符,敲一下回车,如果仍旧不工作,敲一下break键。垃圾字符通常是计算机试图以错误的速度与你的终端联结,•
文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
break键告诉计算机尝试另外一种速度,你可以通过敲break键来实验不同的速度,但记住在每次敲键后要等待机器响应。
•
•
当login:提示符出现后,键入你的登录ID。
如果passwd:提示符出现,键入你的密码,为了确保安全,你键入的密码不会在屏幕上显示。注意:键盘上的退格键在登录过程中没有删除功能。
$ 符是Bourne Shell(/usr/old/bin/sh),korn Shell(/usr/bin/ksh),和POSIX
Shell(/usr/bin/sh)的标准提示符,%符通常表示这是C Shell(/usr/bin/csh)。如果你用的是POSIX shell,你会看到一个$提示符。而#提示符一般是为系统管理员保留的。当你以系统管理员的身份登录时,会出现这个符号。这也为你的特殊身份提供一个有用的提示功能:因为作为系统管理员,你能更改(或删除)系统中的任何数据。
密码的说明:
第一次登录系统,你的帐号可能被设置为要你键入密码。你提供的密码必须满足以下条件:
•
•
•
你的密码必须不小于六个字符
前六个字符中至少要有两个字母。
前六个字符中至少要有一个不是字母。
当你第一次输入你的密码后,系统会提示你重新输入一次以确认密码。然后系统会重新出现登录提示符,你可以用你的新的密码来完成登录步骤。
2.3 Shell-命令解释器
当你登录的过程中,shell已经开始在为你工作。shell在终端上显出提示符,并且解释你输入的命令,我们会在本章剩下的部分讨论不同的命令,包括如何让你存取在线帮助,找出谁登录了你的系统,和如何同你系统中的其他用户通信。
正如你在上图中所看到的,shell还支持许多其他的命令解释功能
2.4 命令行的格式
在你看到shell提示符($)后,你就可以键入命令。一个正确的命令名通常是在命令行的第一项。许多的命令还有命令选项,选项的作用是为了扩展命令功能,而参数通常是一些文本,一个文件名,或者是目录名等命令可以操作的东西。选项通常以短横线(-)开始。
空字符的作用是分割命令,选项,参数,空字符被定义为一个或多个空格符(space),或TAB键,例如:命令echo Hi和echoHi是有很大的差别的,计算机会将第一个理解为命令echo 和一个命令的参数 (Hi),而第二个会被认为是一个名为echoHi的命令,而此命令可能不是一个有效的命令,
每个命令都是以回车符结束,回车符会将命令送往计算机执行。在上图中,回车符会被系统识别,而其他的字符不会产生作用。
终端的输入输出支持预先键入字符,预先键入的意思是在你键入一个命令后在提示符返回前立即键入另一个命令,你键入的命令会先被缓存,并在当前命令执行完成之后执行。
注意:UNIX的命令是对大小写敏感的,大多数的命令和参数都是小写的
字符。因而,echo hi 是一个合法的命令而ECHO hi不能被系统识别。
注意:你可以在一个命令行中同时键入两个命令,方法是用分号(;)分割两个命令,
如:
$ ls;pwd
2.5 第二提示符
Bourne ,Korn,和POSIX shells 都支持多命令行。如果shell要求更多的输入来完成一个
文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
命令,在回车前,就会出现第二提示符(>)。一些命令要求有一个结束命令,一些字符要求有结束字符,例如一个开始的 if 要求 fi 来结束,开始的括号要求一个结束的括号,一个开始的引号要求一个结束的引号。如果你键入一个错误的命令,就像上图中描述的一样,SHELL会显示第二提示符。通常同时按ctrl +c会中止当前正在运行的程序,然后返回到SHELL提示符下,你可以通过 stty -a 命令来自行定义你的中止键
2.6 帮助手册
联机手册对查找命令用法非常有用,但是它不是作为教材而设计的,它对学习如何使用UNIX操作系统的帮助也不大。有经验的UNIX系统用户使用帮助来查找命令的细节和用法。就像上图中表示的那样,帮助手册被分为几个部分。以下是每一节的简短的说明:
第一节:用户命令
这一节描述直接被用户或是shell脚本使用的程序。任何系统中的用户都可以使
用这个帮助。
第1M节:系统维护
这一节描述系统管理员用来维护系统的命令。只有root用户才能使用。
第二节:系统调用
这一节描述与UNIX系统内核接口的函数,包括C语言的接口。
第三节:函数与函数库
这一节阐述了系统提供的与直接系统调用不同的一些二进制格式的函数。这些函数通常通过C程序来存取,例如:输入输出处理和数学计算的函数。
第四节:文件格式
这一节定义用户配置文件的组成,文档,和不同文件类型的格式(例如)
第五节:多方面的主题
这一节包括不同的信息,例如头文件的描述,字符集,宏包。和其它的主题。
第七节:特殊的设备文件
这一节讨论特殊的设备文件的特性,这些文件提供uniz系统与系统I/O设备(例
如磁盘,磁带机,打印机)之间的链接。
第九节: 字典
这一节定义了被选择的贯穿整个帮助手册中的术语。 在每一个章节里,命令以字母的顺序列出,用户可以通过检索手册的索引来找到 一个命令。
2.7 手册页中的内容
了解帮助页的格式是非常重要的。在整个UNIX系统的文档中,参考以cmd(n)的格式给出,其中cmd是命令名,而n 代表八个帮助章节的其中一个,因而,date(1)代表在帮助手册第一节中关于date命令的内容,在每一个章节里,命令是以字母的顺序列出的,这是由维护帮助手册的方式造成的,页的编号没有意义,每一个命令都是从第一页开始的。
每一个帮助页(一些命令有多个帮助页)有几个主要的标题。帮助页也不总是有标题。
以下是每个标题的列表和其内容的描述;
名字 包括命令名和简短的描述,章节中的这个文本被用来产生索引。
大纲 定义了如何引用一个命令。黑体字的条目表示必须在终端上正确输入的部分。方括 号中的是任选项,规则类型的条款会被你所选择的合适的文本所代替,省略号(.....)被用来显示先前重复的参数。如果对摘要的意思有疑问,你可以去阅读DESCRIPTION项。
描述 包括每个命令和选项的功能的详细描述。
文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
额外的影响 提供不同口语的编程信息,这对于国际化的支持非常有用。
网络特性 基于网络特征的功能。
返回值 描述程序调用完成后的返回值。
诊断信息 解释命令可能出现的错误信息
错误 列出错误的条件合相应的错误信息或是返回值。
范例 提供命令使用的范例。
警告 指出潜在的陷阱。
相关性 指出与不同硬件平台相关的UNIX系统操作的变化。
作者 命令的开发人员。
文件 命令使用的任何特殊的文件。
SEE ALSO
指明帮助手册中的其他页,或是其他包含附加信息的文档。
BUGS 讨论已知的漏洞和缺陷和所支持的修正
标准一致性 描述每一个条目支持的标准。
2.9 联机手册
有另外一种方法从帮助手册中检索信息。
在许多UNIX 系统中,手册通常是在线的。在线帮助手册通过 man 命令来存取。
语法是:
man -k keyword
或者
man [m] command
其中
man -k keyword 列出所有的命令,在命令描述中有字符串 keyword。
man [1234579m] command 显示指明帮助章节的命令的帮助页。
man command 显示命令的默认的帮助条目。也许一个
命令的条目,在不止一个的帮助页中。
以上的所有的命令要求系统管理员已经正确地安装了在线帮助。在以上的例子中,
man passwd 会显出改变密码的命令。man 4 passwd会显示passwd 文件的格式。
在指定命令的帮助条目的第一页已经出现在屏幕上。你可以键入以下的键:
return 显示下一行
space 显示下一页
Q或q 退出 man 命令并且回到提示符下:
有时,在你读取在线手册时会看到一下的信息:
reformatting retry .
这个信息的意思是指定命令的帮助手册页需要解压缩,因为对当前用户来说是第一次使用。这条信息在用户下一次检索这个手册时不会再出现。
多个帮助手册页
一些命令有多个帮助条目。你可以用 whereis 命令来显示帮助的章节。例如:
$ whereis passwd
passwd :/sbin/passwd /usr/bin/passwd /usr/share/man/
/usr/share/man/man4.Z/passwd.4
$whereis nothere
nothere:
这说明在章节1和4中有一个关于passwd命令的帮助条目,没有关于nothere
的帮助手册。
2.10 一些初级命令
文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
我们将学习一些基本的命令,这些命令中的大多数除本书讲到选项以外的还有更多的选项,如果你想要查看其他的选项,可以使用联机手册。
id 命令
为了让你存取文件和执行程序,UNIX必须要知道你的用户和组的id号,这种由计算机维护的数字的id号,对应哪些为用户方便而使用文字名称,当你登录时,你的用户身份会被初始化。在你已经登录后,你也可以更改你的用户和组。id 命令的作用就是显示你当前的用户和组的定义。
计算机将所有的用户的信息存储在文件 /etc/passwd中,组的信息存储在/etc/group中。
组
组让一组用户可以共享地存取文件。由系统管理员定义组中的用户,每一个用户都能存在于不同的组中。组通常由机构中已经定义的工作组组成。例如,一个机构可能由生产,管理,帐务组组成。这些组的用户结构可能定义为一下的结构:
*号指明登录时的组的定义
•
•
chris 是所有的三个组的成员。
mike 是两个组的成员。
在这个机构内,chris能够使用与生产,管理,帐务三个部门有关的文件,mike能够存取与生产,帐务部门有关的文件。其他的用户只能存取他们登录组中的文件。
who 命令
who命令会报告有哪些用户已经登录系统,每一个用户连接的终端和登录时间的信息。who am i 报告本用户的用户名和端口信息,whoami 命令报告系统与本地终端的关联的用户名。用户是否有权执行一个命令,依靠的是用户的身份,一个用户能够更改他或她的身份标识来存取其它的命令或程序。
date 命令
date 命令被用来报告系统的当前日期和时间。date可以加上参数来重新格式化
输出的格式。
通常date命令不带任何选项和参数使用。
只有系统管理员有权限修改系统时间和日期。
passwd 命令
在许多的系统中,系统管理员控制着用户的密码。然而,在UNIX系统中,系统管理员能允许用户直接控制他们自己的密码,passwd命令让用户改变他们的口令,语法如下:
passwd
输入这个命令后,系统会要求输入你当前的密码,(老密码)。这是为了避免在你登录了系统后,离开你的终端时间内有人更改你的密码。然后系统会要求你输入新密码,并要求重输入一次以确认你的新密码,这样做是为了避免你打字的错误。你的新旧密码必须至少有三个字符不同。
在你输入密码时,新旧密码字符不会出现在屏幕上。
密码限制
你的密码至少有六个字符,前六个字符中至少要有两个是字母,前六个字符中至少有一个不是字母。
文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
系统管理员可以不遵守这些条件,所以如果系统管理员给你的帐号分配一个密码,这个密码可能不符合这些规则。
13. echo命令
echo命令使你可以显示命令行参数的,这个意思是,一个如下的命令:
echo hello
导致输出:
helllo
这个命令可能看上去十分平常,但是这个命令让我们可以佷方便地在shell程序中显示用户信息和检查shell变量的值。在shell编程中,echo命令用的很普遍。
clear 命令
clear命令清除终端屏幕上的字符。这个命令仅仅清除当前的屏幕,所以,用户有可能向上翻屏来查看以前的屏幕信息,想要清除所有的屏幕信息,按HOME
键,将光标至到home,然后键入clear 命令。
2.17 write 命令
你可以用write 命令向当前登录到同一个系统的用户的终端发送信息。当你使用write时,write 会让你输入信息,每一次你敲回车,信息就会被传送到接收者的终端上,接收者可以向你回写信息,你可以通过你的终端进行交互的对话。当你完成键入信息后,敲入ctrl+d.就可以结束你的对话。
注意:除非你禁用这项功能,否则,在任何时候,别人都可以发送信息到你的终端。,如果这时你正在使用一个工具,如man,mail,或是一个编辑器的时候,一个用户给你发生一个信息,这行信息会出现在你的屏幕上,这会造成你的混乱。
如果你想要发送信息给一个用户,而这个用户当前没有登录系统,你会得到如下提示:
user is not logged on(用户没有登录系统),其中user表示你试图发送信息的人的
用户名
mesg 命令
你可以通过mesg命令来禁止其他用户发送信息到你的终端上。如果你给一个已经禁止接收其他用户发送信息的用户发送信息,你会接到Permission Denied 错误(没有许可)。
mesg n 拒绝其他人write 到你的终端。
mesg y 允许其他人write 到你的终端。
mesg 报告是允许或是不允许其他人写到你的终端。
即使你的终端是禁止写入的,系统管理员一样能发送信息到你的终端。
news 命令
系统中的所有用户都感兴趣的信息可以通过news命令广播出去。这个命令通常是系统管理员对系统中所有用户进行通告的时候,例如在系统关闭,备份时,或是在新的硬件生效时使用。
你可以键入news命令来阅读新闻。如果命令后没有选项,只有那些你还没有阅读过的信息会显示。
news命令的选项有:
-a 读取所有的新闻,不管是否已经被读取过。
-n 只显示未读过的新闻的标题
文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
每一个存取新闻的用户在他的HOME目录下都有一个.news_time文件。每一个UNIX系统中的文件都有一个时间标志,时间标志记录有上一次文件被修改的时间。.news_time上的时间标志会被更新,以匹配你最后读取得新闻信息的时间。如果一条新的新闻加入,news命令知道这条新闻还没有被阅读,因为你的.news_time文件的时间标志比新的新闻的时间标志早
文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
第三章 文件系统导航
目标
完成这一节,你能做以下事情:
o
描述UNIX文件系统的布局
o
描述文件与目录的不同之处
o
顺利地操作一个UNIX 文件系统。
o
建立和删除目录
o
描述绝对路径和相对路径的不同之处
o
在可能的情况下,使用相对路径来简化你的输入。
3.1 什么是文件系统
UNIX系统提供文件系统来管理和组织你的文件和目录。文件通常是数据的一个容器,而目录是文件和(或)其他目录的容器,一个目录包含下的另一个目录通常被称为子目录,
UNIX的文件系统与文件柜十分相似。整个文件系统就象一个文件柜,文件柜包含所有的抽屉,文件夹,和报表。抽屉同子目录一样能够包含报告和文件夹。一个文件夹当它包含报表时就像一个子目录。报表就代表一个文件,因为它存储实际的数据。
3.2 树型结构
目录结构能够用一个层次化的树形结构来表示。树上的每一个分支可以是目录或者文件。目录用椭圆来表示,文件用矩形来表示,以便图表中能够区别它们。
3.3 文件系统层次
文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
象整齐的文件柜一样,UNIX文件系统层次提供了一种简单有效的机制来组织你的文件。由于一个UNIX发布版本通常包括几百个文件和程序,于是每个UNIX系统都支持一种默认的目录结构。在目录的顶端是根目录(因为它在一个倒转的树的顶部),根目录由一个反斜杠(/)来表示。
UNIX 系统同时提供了一些命令,可以让你在你需要时很容易地创建新的目录,也可以从一个目录移动或是拷贝文件到另一个目录。就象加入一个新的文件夹到一个文件柜的抽屉中和将新的文件夹移动一个报表到一个老的文件夹一样容易。
在HP-UX 10.0中,文件系统由两个主要的部分组成:静态文件和动态文件。
静态文件: (共享的文件)有三个重要的目录:/opt, /usr , /sbin
/opt 这个目录会用来存放应用程序和产品。开发人员和系统管理员会用它来安装新的产品和本地的应用程序。
/usr/bin 这个目录包含了基础的UNIX系统操作和文件处理的命令,所有的用户都有权限读取这个目录("bin" 是 binary
的缩写)。
/usr/sbin 这个目录中有所有的在帮助手册1m章节中的命令,这些命令都是系统管理命令。必须是超级用户才能使用其中的大多数命令。在帮助手册 1m中有关于这些命令的文档。
/usr/lib 这个目录包括应用程序使用的文档和共享的库
/usr/share 这个目录包括独立提供的文件(其中最重要的是帮助手册)
/usr/share/man 这个目录包括所有的语在线帮助页有关的所有的文件。
/uar/local/bin 这个目录通常用来存放本地开发的程序和工具。
/usr/contrib/bin 这个目录通常用来存放公用的程序和工具
/sbin 这个目录包括基本的用于启动与关闭系统的命令。
动态文件 (私有的文件)在这个节有七个重要的目录:
/home, /etc, /stand , /tmp , /dev, /mnt , 和/var;
/home 每一个UNIX系统的用户都有他或她自己的帐号。同
登录id和口令一起,系统管理员会提供给你你自己的目
录。/home目录一般都包含每个系统用户的一个子目录,
你对你自己的目录有完全的控制权。你有责任在你自己的
目录建子目录和文件时对这些目录和文件进行组织和管
理。当你登录进入一个系统,你会进入与你帐号相联系的目
录中,这个目录,通常被称为HOME目录或是登录目录。
从这个目录,你可以进入任何呢曾经存取的其他的目录,最
少你可以存取在你HOME目录中的任何东西;最多你可
以移动到任何地UNIX系统的目录(默认的 情况),直到
系统管理员限制用户对系统中特殊目录的存取。
/etc这个目录中有许多的系统配置文件,这些文件在帮助手册的第四章节有说明文档。
/stand/vmUNIX 这个文件存储的是UNIX系统内核的文件。当系统启动时,这个程序被装载入内存,控制所有的系统操作。
/tmp
这个目录通常被操作系统的一个临时空间,通常是在操作系统创建中间文件,或是工作临时文件时使用。
注释:UNIX系统的惯例:任何时间,任何以tmp为名的目录下的任何文件都可以被删除。
文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
/dev 这个目录下有那些可以被联接到你系统中的硬件设备的文件,由于这些设备是作为一个到设备之间的联接,数据从来不会被直接存储到这些文件中,这些问文件通常被叫 做特殊文件或是设备文件。
/mnt 这个用来安装其它的设备 (例如:光驱)
/var/mail 这个目录包括每一个有邮件的用户的信箱。
/var/news 这个目录包括当前的新闻信息的所有的文件。他的内容可以通过键入new -a 来显示。
/var/tmp 这个目录通常被用于用户的临时空间。
3.4 目录名称
绝对路径: 相对于/home/user3的路径
/home/user3/f1 f1
/home/user3/memo memo
/home/user3/memo/f1 memo/f1
相对/home/user1的路径
/home/user1/f1 f1
许多的UNIX系统命令的操作对象是文件和(或)目录。为了告诉命令你所要求操作的文件或目录,你需要提供一个路径名作为这个命令的一个参数。路径名代表遍历一个层次结构来找到你所需要的文件或目录所经历的路由。
$ command [options] []
为了阐明目录名的概念,我们使用模拟的方法,用一只铅笔从沿着UNIX系统的树形结构从一个位置画到另一个位置。路径名也就是铅笔的笔迹通过的层次结构所遇到的节点(即目录)的一个列表,这个列表直到你想要到达的目录或文件为止。
当指明文件或目录的路径名时,反斜杠(/)被用来分割目录或文件名。
Directory/directory/directory(目录/目录/目录)
Directory/file(目录/文件)
无论你何时登录一个UNIX系统,你会被定位到层次结构的一些目录下,你可以
通过UNIX系统命令来更改你的目录到其他的目录中去,但是你通常是在一些目录
中。举个例子:当你登录是,你会被初始化置于你的HOME目录中。
绝对路径和相对路径都能够指明文件和目录的位置
绝对路径
•
•
•
•
•
给出文件或目录的位置的完全的描述。
通常由层次结构的顶端开始(根目录)。
通常第一个字符是 /.
不依靠你当前在目录结构中的位置。
整个目录结构只有一条路线。
绝对路径名的例子
以下的路径名指明目录结构中的所有的叫做 f1 的文件的位置。请注意,有许多f1 文件,但是每一个文件的绝对路径都是不相同的。
/tmp/f1
文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
/home/user1/f1
/home/user2/f1
/home/user2/f1
/home/user2/f1
/home/user3/memo/f1
相对路径
•
•
•
•
通常由目录结构中的当前的位置开始
不由 / 开始。
相对当前的位置只有唯一表示方法。
一般都比绝对路径要短。
相对路径的例子
以下的例子再次指明名为 f1 的文件,但是他们的相对路径的定义是依靠用户在目录结构中的当前位置。
假设当前的位置是 /home:
user1/f1
user2/f1
user3/f1
user3/memo/f1
假设当前的位置是/home/user3:
f1
memo/f1
假设当前的位置是/home/user3/memo
f1
请注意相关的文件名,f1不是唯一的,但是UNIX系统知道应该去找那个文件,因为系统知道你是在/home/user1检索/home/user1/f1,还是在/home/user3/memo的位置检索/home/user3/memo/f1/。同时,你会注意到,相对路径可能比绝对路径要短的多,例如,如果在目录/home/user3/mem中,你可以用一下两个命令来打印文件f1:
绝对路径: lp /home/user3/memo/f1
相对路径: lp f1
这表明使用相对路径名可以节约你大量的键盘操作。
注释:如果系统中有同名的文件存在于不同的目录中,而你又要使用相对路径来存取文件,这时,知道你当前的位置,是非常重要的。
在 UNIX 系统内部,系统通过绝对路径来查找所有的目录和文件。因为绝对路径名绝对并且唯一的确定一个文件和目录,(由于只有一个根(/)),UNIX系统允许使用相对路径仅仅是为了方便用户的键入。
3.5 一些特殊的目录
绝对路径 相对于/home/user3的路径
/home ..
/home/user2 ../user2
/home/user1/f1 ../user1/f1
/ ../..
/tmp/f1 ../../tmp/f1
文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
/usr/bin/vi ../../bin/vi
任何目录在创建时,两个条目会自动被创建,它们分别是 点(.),和点点(..)。在使用相对路径的时候通常会用到这两个条目。在上一个例子中,你也许已经注意到:相对路径的例子仅仅只能向下穿越文件结构,但如果使用.. ,你也能够向上穿越文件系统。
登录目录
当一个新的用户被加入到系统中,他(或她)会被分配一个登录id,可能还有一个密码,和一个用户自己拥有和控制的目录。这个目录通常创建在/home目录下,与用户的登录id名相同,然后这个用户就可以在此目录下任意创建自己的文件和子目录。
当你登录一个系统时,UNIX系统会将你放在这个目录下,这个目录被称为你的登录目录或者是你的HOME目录。
点(.)
这个称为点的条目代表你当前所在地目录。
点(.)的例子
如果你当前正处于目录/home/user3中:
. 代表你当前的,目录/home/user3
./f1 代表 /home/user3/f1
./memo/f1 代表/home/user3/memo/f1
点点(..)
这个称为点点的条目代表当前目录的上一级目录。通常被称为父目录。每一个目录在自己的下面都可以有多个文件和多个子目录。但是每一个目录只能有一个父目录。这样,当向上进入文件系统的结构时不会有混淆。
根目录(/)象其他的目录一样,包含有点,和点点条目,但是由于根目录没有父目录,所以它的点点代表是根目录本身。
点点(..)的例子:
如果你当前所在地目录是/home
.. 代表/ 目录
../.. 同样代表/目录
../tmp 代表 /tmp
../tmp/f1 代表/tmp/f1
如果你当前的目录是/home/user3
.. 代表 /home目录
../.. 代表/ 目录
../user2 代表/home/user2
../user1/f1 代表/home/user1/f1
../../tmp/f1 代表/tmp/f1
在例子的最后,绝对路径比相对路径还要短,如果相对路径使你穿越 / 目录,你可以使用绝对路径来代替相对路径。
3.6 基本的文件系统命令
目录,就像一个文件夹,是组织你的文件的一种方式。下部分会介绍基本的目录操作命令,这些命令可以:
•
•
显示你当前所处的位置的目录名
了解当前目录下有什么文件和目录。
文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
•
•
•
使你进入文件系统中的另一个目录中去
创建一个目录
删除一个目录
在这一节中,我们不会去操作一个目录中的文件,我们只操作目录。
3.7 pwd―Prenset working Directory (呈现工作中的目录)
无论何时你登录你的UNIX系统,你都会被置于文件系统中的某个目录下,这个目录通常被认为是你的工作目录。
pwd命令会报告你当前在UNIX文件系统中位置的绝对路径名,pwd是英文呈现工作目录的一个缩写。
由于UNIX系统允许用户在文件系统中任意地移动位置,所有的用户都依靠这个命令来确定他们在系统中的位置。新用户在文件系统中移动的时候,会频繁地使用这个命令来了解他们的当前的位置
3.8 ls ―列出目录中的内容
ls 命令的作用是列出目录和文件的名称
如果没有参数,ls
列出当前目录下的文件和目录名。
ls
也可以接收指定文件或目录的相对和绝对路径名作为参数。当文件的路径被提供给ls,ls
会报告指定的文件的信息。当一个目录的路径被提供给ls ,ls
会显示指定目录中的内容。
ls 支持许多的选项。这些选项提供附加的信息。一个命令行可以支持多个选项,以显示更多更全的文件或目录的信息。其中常用的选项在下面列出:
-a 列出所有的文件,包括以点(.)开头的文件,通常,这些文件是隐藏的,除非 使用–a选项才会显现出来,这些以点开始的文件通常记录你用户线索
和应用的配置信息。
-d 列出目录的描述,而不是列出目录的内容。通常与-l一起使用来显示目录的状态。
-l 提供一个关于每个文件德描述属性的长列表,包括类型,模式,链接数,属
主,组,大小(字节),更改日期,和名称。
-F 在每个目录后面添加反斜杠(/),在可执行文件后面添加星号(*)。
-R 递归地列出给出的目录和所有子目录中的文件。
例子:
$pwd
$/home/user3 绝对路径作为一个参数
$ls –F .. 相对路径作为一个参数
user1/user2/user3/
文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
$ls –F ../user1 相对路径作为一个参数
f1
$ls –l memo 一个目录的相对路径作为一个参数
-rw-rw-rw 1 user3 class 27 Jan 24 06:11 f1
-rw-rw-rw 1 user3 class 37 Jan 23 19:03 f2
$ls –ld memo 显示目录memo的信息
drwxr-xr-x 2 user3 class 1024 Jan 20 10:23 memo
$ls –l f1 f2 多个参数,文件的相对路径
-rw-rw-rw 1 user3 class 27 Jan 24 06:11 f1
-rw-rw-rw 1 user3 class 37 Jan 37 19:03 f2
$ls –R 子目录的递归列表
./memo:
f1 f2
$ls user2
user2 not found 当前目录中不存在user2
HP-UX 中的特例:
UNIX系统的命令 HP-UX 等价
ls –F lsf
ls –l ll
ls –R lsr
3.9 cd ―Change Directory(改变目录)
将树形结构想象成为一个显示你系统中的所有的目录和文件的位置的一个道路交通图。你通常在一个目录中, cd 命令让你改变目录,并且移动到层次结构中的其他位置。
语法:
cd path_name
其中,路径名是你想要去的目录相对或绝对的路径名。当执行cd命令不带参数时,你会回到你的HOME目录,所以,如果你在目录中迷路,简单地键入cd 会让你回到HOME目录。
文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
注释:当使用cd命令在文件系统中移动时,切记要经常使用pwd命令来确认你所处的位置
POSIX Shell 中的 cd命令
POSIX shell 记录有你上一次进入的目录的位置,cd 命令同样有改变目录到你期望的目录的功能。但它还有一些附加的特征可以减少你的键入。
cd
命令有一个你先前进入的目录的储存器,(存储在环境变量OLDPWD中),这个目录可以通过 cd –
来存取。
$pwd
/home/user3/tree
$cd /tmp
$ pwd
/tmp
$cd – 让你进入到先前进入的目录
$pwd
/home/user3/tree
3.10 find 命令
find命令是在文件系统中执行自动查找的唯一个命令。这个命令执行非常慢,并且会耗费许多CPU资源。因此建议不要经常使用。
路径列表是一个路径名的列表,典型的情况是一个目录的情况。通常是点文件。在查找一个文件时会被递归地搜寻路径名,查找符合表达式定义的文件。一个最普通的查找任务就是显示出匹配的路径名。
表达式由关键字和参数组成,参数能指明查找标准和查找一个匹配的任务,一件使查找操作更复杂的事情是表达式中使用的关键字都以-开头,这样看上去参数在选项之前似的
3.11 mkdir 和 rmddir 创建和删除目录
mkdir 命令允许你创建一个目录,这些目录能被用来帮助组织我们的文件。每当一个目录被创建,两个子目录会被自动地创建,它们是代表当前目录的点(.),和代表父母目录的点点(..),请注意,创建目录不会改变你当前在文件系统中的位置。
在默认的情况下,创建目录时指明的相对或绝对路径中的所有的中间目录都必须是已存在的目录,但另外一种情况,你可以使用一下的选项:
-p 如果中间目录不存在,将会创建这些目录
-m mode (模式) 在创建了指定的目录后,目录被设置成默认的权限。
文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
以下的命令创建fruit 目录 ,假设这个目录并不存在。
$mkdir –p fruit/apple fruit/grape fruit/orange
rmdir 命令让你删除一个目录,被删除的目录必须是空的(也就是除了点和点点外没有其他的东西),同时,你不能删除在你当前目录和根目录之间的目录。
两个命令都可以有多个参数,mkdir的参数代表的是新的目录名,rmdir
的参数必须是已经存在地目录名。同时,任何用目录名和文件名作为参数的命令都可以使用绝对路径和相对路径。
3.12 复习
使用上图来复习cd 和 pwd 命令的用法,和绝对路径和相对路径的用法
在上图中,如果你从目录user3开始,每一个cd 命令的结果会使你处于上什么位置?
$pwd /home/user3
$cd ..
$pwd
$cd usr
$pwd
$cd /usr
$pwd
$cd ../tmp
$pwd
$cd .
$pwd
3.13 文件系统―总结
文件
目录
树形结构
路径名
HOME
pwd
一个数据的容器
文件和其他目录的容器
UNIX系统的一种层次化的结构
文件和目录在层次结构中的位置的一种确认标识。
代表你登录目录的路径名
显示你当前在系统中的位置
cd 更改你当前的位置到其他的目录中去
文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
ls 列出目录中的内容
find 查找指定的文件
mkdir 创建目录
rmdir 删除目录
文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
第四章―管理文件
目标
完成这一章,你能做以下事情:
•
•
•
•
使用普通的UNIX系统文件操作命令。
解释使用排队打印队列系统的作用。
认识和使用同系统交互的排队打印命令。
监视排队打印系统的状态。
4.1 什么是文件
一个数据的容器或者是一个设备的链接
•
•
每一个文件有一个名字,文件可能保存有存储在磁盘上的数据。
有几种不同类别的文件:
- 普通文件
-文本文件,数据文件,图片
-可执行的程序
-目录
-设备文件
UNIX系统中的每一事物都是一个文件,包括:
普通文件 文本,邮件信息,数据,图片,程序源代码
程序 可执行的程序,例如 ksh,who,date,man,和ls
目录 特殊的文件,记录有所包含的文件和目录的名字和文件系统中的标识。
设备 一种特殊的文件,提供到硬件设备的接口,包括有磁盘,终端,打印机,
内存
简单地说,文件就是联接存储在一个存储设备(通常是磁盘)上的数据的一个名字,
在UNIX系统受到关注之前,文件仅仅是一个数据字节流的定义。没有预定义的记录,域,记录结束标志,文件结束标志。这为应用开发人员提供了许多的灵活性,他们可以定义自己的内部文件的描述。
普通文件通常包含有ASCII 码的字符,典型的普通文件的创建是在终端上使用一个文本编辑器。
程序文件是包含可执行指令的普通文件。通常包含在终端上不能显示的编译过的代码 如(mail,who,date),或者是可以显示到终端上的UNIX系统shell命令,(通常是shell 脚本)
目录是一个特殊的包含它下面的文件和目录的名字的文件,目录同时也存储了每个条目的inode (i节点号),inode号标识有文件信息和数据在文件系统中存储的地址。(注意:目录不是普通的文本文件)
设备文件是一种特殊的文件,它提供了内核与实际硬件设备的接口,由于这些文件是作为接口存在的,它们不会存储有任何实际的数据。它们一般都在/dev目录下,你的计算机的每一个需要联接的硬件设备都会有一个设备文件相对应。
2. 我们能够对文件进行什么操作?
文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
ls 查看一个文件的描述
cat 查看一个文件的内容
more 查看一个文件的内容,一次一屏
lp 打印一个文件
cp 制造一个文件的一个拷贝。
mv 改变一个文件或者目录的名字
mv 将一个文件移动到另外一个目录中去
ln 为一个文件创建另外一个文件
rm 删除一个文件
在UNIX系统上的大多数活动是围绕文件和目录进行的,有许多的命令来操作文件和目录。
你已经知道一些目录操作的命令,在这一章中,我们会介绍其他的用于文件和目录的命令。
你也许会创建文件和处理文件中的内容。这通常可以使用编辑器来完,例如vi.。
4.3 文件的描述
一个文件有几个相关的描述,可以用ls –l 来显示这些描述
类型 普通文件或是特殊文件
权限或模式 文件的存取定义
链接数 与一个独立的数据集相关联的文件名的数目
属主 文件所有者的用户标识
组 文件存取得组的标识
大小 文件包含的字节数
时间标志 最后更改的日期
名字 最大14个字符(如果长文件名支持,最大255个字符)
文件名规范
•
•
•
最大14个字符
最大255个字符,(如果长文件名支持)。
一般由字母(a-zA-Z),数字(0-9),点(.),短横线(-)和下划线(_),组成。
有许多其他的字符在shell中有“特殊”的意义,例如空格和反斜杠,所以你一般不能用这些字符组成一个文件名。其他的特殊字符有,*,<,>,,$,|。如果你试图用这些字符组成一个文件名,你经常会得到不能预料的结果。
两个单词组成的文件名一般由下划线来联接:
$cd a dir 错误的语法
cd 看到两个参数
$cd a_dir 合法的语法
cd只看到一个参数
在UNIX 系统中,点(.)是一个普通的字符,所以,它能出现在文件名的任何位置,文件名,,和a…b都是合法的文件名。点只有一点特殊,就是作为一个文件名的第一个字符的时候,在这种情况下它指明这是一个隐藏文件。你可以使用ls –a来显示一个隐藏文件。
文件类型
UNIX系统支持很多的文件类型,使用ls –l 输出的第一个字符表示文件类型。普通的文件类型包括:
•
普通文件
d 目录
l 链接文件
文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
n 网络专用文件
c 字符设备文件(终端,打印机)
b 块设备文件(磁盘)
p 命名的管道(一种内部过程通信通道)
3. cat 显示一个文件的内容
cat命令是用来联结(concatenate),和无缝地显示一个文件的内容。它不对文件的输出进行格式化,包括在一个文件的末尾和下一个文件的开始之间没有分割符。
语法:
cat [file…]
一个典型的cat 命令的运用是查看单个文件的内容。例如:
cat funfile
这会将文件funfile的内容输出到屏幕上,然而,如果这个文件超过终端屏幕显示的大小,文件的文本会快速地向下滚动使你几乎看不清楚内容。所以我们需要一个更加聪明的方法来在屏幕上显示文件的内容。
当cat 命令不带任何参数使用的时候,它会等待你从键盘输入,就和你使用mail,write命令一样,回车加,ctrl +d用来结束输入,一旦你的输入结束,你输入的文本会在屏幕上显示出来。
注意: 如果文件包括控制字符,例如一个已编译的程序,你cat这个文件到你的终端,你的终端可能会失效。你可以用以下一种方法重新设置你的终端:
方法1:
1. 试图退出登录—回车后使用exit
命令。
2.
开关你的终端—关掉然后又打开。
3.
重新登录—你能登录继续正常工作。
方法2:
1. 敲入break键。
2. 同时按下shift+ctrl+reset。
3. 回车
4. Tset –e –k
5. Tabs
另外,你的系统管理员可以终止你的终端对话。
3. more – 显示一个文件的内容
more 命令显示出文件的内容,它一次仅仅只能显示一屏。要看下一屏,敲一下空格键。要看下一行,敲一下回车键。想要退出more命令,敲一下q。
more 命令支持许多其他的特征,你可以使用手册来查找其他有用的用法的详细说明。
4. tail--- 显示文件的末尾
语法:
tail [-n] [文件名]
文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
tail命令的作用是显示一个文件的最后 n 行。(注释:如果没有指定,n 的默认值是10),这个命令对那些周期性添加信息的长的日志文件特别有用。使用tail 命令,你可以直接看到已记录的最后的信息,而不需要用cat和more 来滚动整个文件到末尾。
4.7 排队打印缓冲系统
UNIX操作系统提供一种称为排队打印缓冲系统的工具用来配置和控制你系统中的打印。lp缓冲区的机制是:接受系统中的所有用户打印请求,然后配置打印机,让打印机一次打印一个请求。想一想如果我们没有一个打印缓冲,每一次一个用户想要打印一个文件,他或她不得不先确认当前没有其他的人在打印文件。而两个用户不能同时使用同一个打印机。
lp缓冲系统有许多的特性,这些特性让打印平稳进行,并最大限度地减少管理员的干预。你提交打印请求到lp打印缓冲区,在那里打印请求会在一个队列里等待打印。你可以检查队列中的文件和系统的状态。如果你决定不打印一个文件,你也可以取消一个已经排入队列的打印请求
4.8 lp命令
•
•
•
打印文件排队
分派一个唯一的ID
许多参数在定制路由和打印的时候都是有效的。
语法: lp [ -dprinter] [-options] filename …
例子:
$ lp report
request id kp-112 (1 file)
$lp –n2 memo1 memo2
request id is dp-113 (2 files)
$ lp –dlaster –t “confidential” memo3
request –d is laser –114 (1 file)
$
lp命令让用户将文件送往打印队列来打印文件。每个使用lp提交的打印请求都会被分配一个唯一的任务标识号(称为一个请求ID)。
lp会将文件排队打印,或者读取标准输入。
最简单的lp的用法是提供一个文件名作为一个参数,lp会将这个文件送到默认的打印机排队打印。
lp
命令有许多的选项让你可以定制路由和你任务的打印。
lp命令的语法是:
lp [-d dest] [-n number] [-o option] –t title [-w] [file….]
一些lp命令的选项:
-nnumber 文件打印的重复的份数(默认是1)。
-ddest 打印请求会被送到的打印机的名字。
-ttitle 在打印输出的标题页中打印标题。
-ooption 指定你的打印机的具体的选项,例如字体,间距,灰度,等等
-w 在文件打印完成以后,写一条信息到用户的终端。
在 lp(1) 中有一个选项的完整的列表。
在上图的第一个例子中,显示lp命令最简单的格式。我们将文件 report送到系统默认的打印机。lp返回一个打印请求的ID和提交给队列的文件的个数。这里, 文件 report 已经被送到打印机 “dp”,打印请求的ID号是 dp-112。
文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
在第二个例子中,我们我们送出两个文件 memo1和memo2到打印机打印,同时我们想要两份拷贝(-n2)。
在第三个例子中,你可以指定你的打印请求会被送到哪个打印机。打印的输出将被标题为”confidentia 机密”
5.9 lpstat 命令
语法:
lpstat [-t]
•
•
lpstat 报告你已经送往打印机队列的打印请求。
lpstat –t 报告调度表的状态,默认的打印机名,设备,打印机状态,和所有的排队打印的请求。
lpstat 命令报告lp缓冲系统不同部分的状态。lpstat,当不加任何参数的时候,报告你当前送往打印的打印请求。
-t 选项显示系统中的所有的打印机的状态信息。
lpstat –t 命令告诉我们几个事情:
$ lpstat
rw-55 john 4025 Jul 6 14:26:33 1994
$
$lpstat –t
scheduler is running
system default destination: rw
device from rw: /dev/lp2235
rw accepting requests since Jul 1 10:56:20 1994
printer rw now printing rw-54. Enabled sine Jul 4 14:32:52 1994
rw55 john 4025 Jul 6 14:26:33 1994 on rw
rw-56 root 966 Jul 6 14:27:58 1994
sheduler is running 调度表(scheduler)是一个程序,负责将你的打印请求
送往正确的打印机。如果调度表没有运行,任何东西都不
能打印。
system default destination :rw rw是默认的系统打印机的名字。如果你使用 lp 没有加上 –d printer 的选项,你的打印请求会被送到这台名叫rw的默认的打印机。注意你的默认的系统打印机可能有不同的名字(如lp)。
device for rw:/dev/lp2235
这表明打印机被联结到计算机的缓冲器。
printer rw now printing rw-55 ID为rw-55的打印请求正在被打印。
enabled 打印请求能够在rw上被打印。如果一个打印机是
disable 你可以提交请求,但是它们不会被打印直到打印机被enabled。剩下的这些行是被打印的请求。这些字段列出请求的ID,排在哪个用户后打印,打印请求的大小,打印请求生成的时间。
4.10 cancel 命令
语法:
cancel id [id …]
cannel printer [ printer…]
例子:
取消一个由lp命令产生的打印任务。
$ cancel dp-115
取消当前在指定打印机上的打印任务
$ cancel laser
文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
cancel命令被用来从打印队列中删除打印请求。通过取消当前在打印机上的打印任务使下一个打印请求能被打印。你在打印非常长的文件或试图错误地打印一个二进制文件时(例如/usr/bin/cat),你可能会想要取消一个打印请求。请记住,lp 通常打印文本文件。、如果你没有指定合适的选项(例如=oraw(图象打印)),打印其他类型文件的会使打印机混乱,并且会浪费许多的纸张。
要取消一个打印请求,你必须通过给cancel命令一个参数来告诉打印缓冲器那一个打印请求是你想要取消的。cancel的参数有两种类型:
•
•
一个请求的ID(lp和lpstat给出的)
一个打印机的名字
通过赋予cannel一个打印请求的ID,指明的哪个打印请求就会被取消。如果你在cancel后面的参数是一个打印机名,当前在哪个打印机上正被打印的任务会被停止,打印队列中的下一个打印请求会开始打印。
$ lpstat
rw-113 mike 6275 Jul 6 18:46 1995
rw-114 mike 3349 Jul 6 18:47 1995
rw-115 mike 3258 Jul 6 18:49 1995
$ cannel rw-115
request “rw-115” canceled
$ lpstat
rw-113 mike 6275 Jul 6 18:46 1995
rw-114 mike 3349 Jul 6 18:47 1995
$cancel rw
request “rw-113” canceled
$lpstat
rw-114 mike 3349 Jul 6 18:47 1995
这个命令可以被任何用户执行以取消任何打印请求,你甚至可以取消其他人的打印请求;然而,被取消请求的用户会收到一个mail,告诉他谁取消了他的打印请求。系统管理员可以限制用户只能取消他们自己的请求。
4.11 cp–拷贝文件
语法:
cp [-i] file1 new_fle 拷贝一个文件
cp [-i] file [file…] dest_dir 拷贝一个文件到一个目录中去
cp –r [-i] dir [dir …] dest_dir 拷贝目录
例子:
$ ls –F
f1 f2* memo/ note memind
cp f1
$ ls –F
f1 f2* memo/ note remind
$cp note remind memo
$ ls –F memo
note remind
cp命令被用来制造文件的一个拷贝。以下是使用cp命令的一些注意事项:
•
要求必须有两个或两个以上的参数—源与目标。
文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
•
•
任何一个参数中都可以使用相对和绝对路径名。
当拷贝一个单个的文件是,目标可能是一个文件的路径,或是一个目录。如果目标是一个文件,而这个文件又不存在,它会被创建。如果目标文件已经存在,它的内容会被源文件的内容代替。如果目标是一个目录,文件会被拷贝到这个目录下去,同时文件名不变。
-i(interactive)选项会在目标文件已经存在时给你警告,并要求你确认是否覆盖这个文件。
•
$ cp f1 在当前目录下创建一个叫做的文件
$ cp f1 memo 在memo目录下创建一个叫f1的文件
$ cp f1 memo/ 在memo目录下创建一个叫做的文件
当拷贝多个文件的时候,目标必须是一个目录。
$ cp note remind memo
一个文件不能被拷贝成自己。
$ cp f1 f1
cp : f1 and f1 are identical
一个目录可以使用-r (recursive 递归)选项被拷贝
注意: 在默认的情况下,cp会覆盖已经存在的文件而不会给出任何提示!
$ cp f1 note
$cat f1
This is a sample file to be copied
$ cat note
This is a sample file to be copied
4.12 mv 移动或是重命名文件
语法:
mv [-i] file new_file 重命名一个文件
mv [-i] file [file…] dest_dir 移动一个文件到一个目录下去
mv [-i] dir [dir…] dest_dir 重命名或是移动目录
例子:
$ ls –f
f1 f2* memo/ note remind
$mv f1 file1
$ ls –F
file1 f2$ memo/ note remind
$mv f2 memo/file2
$ls –F
file1 memo/ note remind
$ls –F memo
file2*
$ mv note remind memo
$ ls –F
file1 memo/
$ ls –F memo
file2* note remind
$ mv memo letters
$ ls –F
file1 letters/
文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
mv 命令被用来重命名一个文件或是移动一个或多个文件到另一个目录中去。以下是使用mv命令时的一些注意事项:
•
•
•
要求至少有两个参数: 源与目标。
任何一个参数都可以使用绝对或是相对路径。
当重命名一个单个的文件的时候,目标可以是一个文件的路径或一个目录。如果目标是当前目录下的一个文件,这个文件会被重命名,如果目标是一个目录,源文件会被移动到这个目录。如果文件不存在,文件会被创建。
如果目标文件已经存在,它的内容会被源文件所代替,如果目标是一个目录,文件会被移动到哪个目录。
-i(interactive 交互)选项会在目标文件或目录存在的情况下提醒你,并且会要你确认是否覆盖文件或目录。
•
•
$mv f1 file1 在当前目录将f1重命名为file1
$mv file1 memo 将文件file1移动到memo目录中去
$ mv f2 memo/file2 将文件f2移动到目录memo,并且改名为file2
当移动多个文件时,目标必须是一个目录。
$ mv note remind memo
当源是个目录的时候,它会被重命名为目标名。
$ mv note letter
注释: 在默认的情况下,mv会移动或重命名已经存在的文件而不给出任何提示。
4.13 ln—链接文件
语法
ln file new_file 链接到一个文件
ln file [file…] dest_dir 链接文件到一个目录
例子:
$ ls –l f1
-rw-rw-r-- 1 user3 class 37 Jul 24 11:05 f1
$ ln f1 /home/user2/
$ls –l f1
-rw-rw-r-- 2 user3 class 37 Jul 24 11:05 f1
$ ls –l /home/user2
-rw-rw-r-- 2 user3 class 37 Jul 24 11:05
$ ls –i f1 /home/user2/
1789 f1 1789/home/user2/
链接提供了一种机制:可以用多个文件名来索引磁盘上的同一数据。在多个用户想要共享同一个文件的时候可以使用链接,但是他们宁愿选择在他们自己的目录下有这个文件。如果用户3修改了f1,用户2在下一次存取的时候会看到这些改变。
注释:
UNIX系统没有限制多个用户同时存取和修改同一个文件。每一个用户的修改,都会在内存中有一份私有的映象,但是最后存盘的用户会决定磁盘上的文件的版本。有的应用程序会提醒一个用户文件已经被打开,可能限制其他的用户来存取那个已经打开的文件。
当许多的文件被链接到一起的时候,用ls –l 显示出的链接数会比1要大,如果任何一个链接被删除,唯一改变的是链接数会减少,文件的内容不会改变,直到链接数减少到0,在这个时候磁盘的空间也被释放出来。
例子:
文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
$ ls –l f1
-rw-rw-r-- 1 user1 classs 37 Jul 24 11:06 f1
$ ln f1 /home/user2/
$ ls –l f1
-rw-rw-r-- 2 user1 classs 37 Jul 24 11:06 f1
$ls –l /home/user2
-rw-rw-r-- 2 user1 classs 37 Jul 24 11:06 f1
ls –I f1 /home/user2/
1789 /home/user2/ 1789 f1
4.14 rm – 删除文件
语法:
rm [-if] filename [filename…] 删除文件
rm –r[if] dirname [filename…] 删除目录
例子:
$ ls –F
f1 f2 fruit/ memo/
$rm f1
$ls –F
f2 fruit/ memo/
$ rm –i f2
$f2? $rm fruit rm: fruit directory $ rm –r fruit rm命令被用来删除文件。一旦文件被删除是不可挽回的,rm 命令至少要有一个参数(一个文件名),如果指定的文件名超过一个,所有的指明的文件都会被删除。 以下是最常用的选项: -f 强制删除文件—用户不会得到任何提示,甚至在发生一个错误的时候。 -r 递归地删除指定目录中的所有的内容。 -i 询问或交互模式,它会要求用户确认来完成删除。你的回答有y(yes)和n(no),回车的作用和回答no是一样的。 注意: 通常是在极端的情况下才能使用 –r 选项。使用不正确,会删除你的所有的文件,一旦一个文件被删除,只能从备份磁带上恢复这个文件。如果你必须要用 –r选项,请和-i 选项一起应用。 例如: rm –ir dirname 4.15 文件目录操作命令总结 ls –l 显示文件的特性 cat 在屏幕上联结和显示文件的内容 more 格式化和在屏幕上显示文件的内容 tail 显示文件的结尾部分 cp 拷贝文件或目录 mv 移动或重命名文件或目录 ln 链接文件名 rm 删除文件或目录 lp 将打印请求送到打印机排队打印 lpstat 显示打印缓冲区的状态信息 文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持. cancel 取消在打印队列中的打印请求 文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持. 第五章―文件的权限和存取 目标 完成这一章,你可以做以下的事情: • • • • 描述和更改文件的属主和组。 描述和更改一个文件的许可权限。 描述和建立新文件的默认权限。 描述如何更改文件的用户和组的身份。 5.1 文件的权限和存取 存取一个文件需要用户的身份,和与文件相关的权限。这一章会介绍如何存取文件 权限 理解文件的读,写,和执行权限 ls (ll,ls –l) 确定文件被赋予的存取权限。 chmod 改变文件的存取权限。 chown 改变一个文件的属主。 umask 改变默认的文件存取权限 chgrp 改变一个文件的组。 su 转换你的用户的身份。 newgrp 转换你的组的身份 每一个文件都属于系统中的一个用户。文件的属主控制谁可以来存取文件这个文件。文件的属主有权力允许或是拒绝其它的用户存取文件。 5.2 谁有存取一个文件的权利 UNIX系统为一个文件提供三层存取结构: user 代表文件的所有者 group 代表对文件有存取权限的组 other 代表系统中的其他所有的用户 每一个文件都属于系统中的一些用户。文件的属主有完全控制权决定什么人有什么权限存取文件,属主能允许或拒绝其系统中的其他用户存取文件。属主决定什么组有权限存取他的文件,属主也能将文件给系统中的其他用户,但是一旦文件的所有权被转换,文件原始的属主不再能够控制这个文件。 由于文件属于用户,并且与组相关联,你可以使用id命令来显示你的身份和你对系统中文件的存取权限。 上图中的文件的属主是用户user3,class组的成员也可以存取这些文件,另外,user3能够允许系统中的其他用户也存取这些文件。 5.3 存取权限的类型 文件和目录有三种类型的存取权限: • • • read(读) write(写) execute(执行) 文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持. 不同的unix系统命令在存取程序或文件的时候会要求某种权限,例如:cat一个文件,要求要有可读的权限,因为cat命令必须能够读取文件的内容,才能将其显示在屏幕上。类似,在使用ls命令的时候,要求一个目录要读的权限,才能够列出目录中的内容。 请注意,存取权限决定于是否你正在存取一个文件或目录。例如,一个文件的“写”的权限意味着文件的内容可以被改变。取消“写”权限会禁止用户改变一个文件的内容。但是并不保护文件不被删除。目录的“写”权限控制一个目录中的内容能否被改变。如果一个目录没有“写” 的权限,它的内容就不会被改变。目录中的文件就不能被删除,添加,或是重命名。 注释:想要作为一个程序一样运行一个文件,要求文件要有读和执行的权限。 5.4 权限 你对一个文件的存取权限是在以下部分定义的:你的用户身份,你的组,和与文件关联的权限设置。文件的权限在mode (模式)中指明,文件的模式是一个包含九个字符的字段,其中定义了文件属主的权限,文件所属的组的权限,和其他系统中的用户的权限。 5.5 chmod 改变一个文件的权限 chmod命令被用来更改一个文件或目录的权限,只有文件的属主(或root-系统管理员)才能改变权限, 为了保护一个文件不被删除和破坏,文件所在的目录和文件本身一定不能有写的权限。文件写的权限允许用户改变(或是覆盖)文件的内容,如果一个目录有写的权限,会允许用户删除目录中的文件。chmod命令支持一种字母的方式定义文件的权限。 你可以指定你想要更改的权限: r 读的权限 w 写的权限 x 执行的权限 和你如何更改权限: + 增加权限 - 减少权限 = 将权限设置为 你同时可以指明你想要修改哪一组的权限: u 用户(文件的属主) g 组(文件关联的组) o 其他用户 a 所有用户(系统中的每个用户) none 分配权限给所有的域 注释:想要禁止一个文件的所有的权限,键入以下的命令: chmod = 文件名 例子: $ ls -l f1 -rw-r--r-- 1 user3 class 37 Jul 24 11:06 f1 $chmod g=rw,o= f1 $ ls –l f1 -rw-rw-rw- 1 user3 class 37 Jul 24 11:06 f1 $ls –l f2 -rw-rw-rw- 1 user3 class 37 Jul 24 11:08 f2 $chmod u+x,g=rx,o-rw f2 $ls –l f2 -rwxr-x--- 1 user3 class 37 Jul 24 11:-8 f2 文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持. chmod命令也支持数值的(八进制)表达式来指定文件的权限。这种表达式十分陈旧,但这是一种十分通用的格式。 1. 要改变文件的权限,你必须将权限的每一个域转变成适当地数字表达式。对属主,组,和其他用户都有存取定义。每种类型的存取赋值可用以下的数字来表示: read=4 write=2 execute=1 2. 将这些关联到存取权限的数字加起来。 3. 将三个值合起来的数字就是chmod命令的参数。 举个例子,如果你期望的权限:属主是rw-,组是r--,其他是---: 属主 组 其他 转变成数字形式 rw- r-- --- 4+2+0 4+0+0 0+0+0 6 4 0 因此:chmod命令是: chmod 640 filename 注释:想要禁止所有的权限,你可以使用一下命令: chmod 000 file 5.6 umask -权限掩码 语法: umask [-s] [mode] 用户文件创建模式掩码 例子: 原先默认的权限: rw- rw- rw- 设置默认权限: rw- r-- --- $umask g=r,o= [-S]选项以符号的格式显示当前的文件创建的掩码,[-S]选项和符号格式在Bourne 和C shell无效。 选项a-rwx是u-rwx,g-rwx,o-rwx的一个缩写。一个常用的新建文件的默认权限是rw-rw-rw-,这意味着系统中的任何用户都能修改文件中的内容。新建目录的默认权限是rwxrwxrwx,这意味着任何用户能更改这个目录,和删除这个目录中的任何东西。 为了保护你的创建的文件,你可以使用umask命令,这个命令会取消你创建的文件和目录的默认权限设置。组用户的写权限和其他用户的写权限大概是最重要的需要取消的权限。你指定的掩码在你登录系统时一直有效,umask 对已经存在的文件没有任何作用。 5.7 touch - 更新文件的时间标志 touch 命令可以用来创建新文件,空文件。如果指定的文件已经存在,touch会更新文件的时间标志。它对文件的内容没有影响。 touch 命令有以下选项: -a time 更改存取(Access)时间为指定的时间 -m time 更改修改(Modify)时间为指定的时间 -t time 使用指定时间(time)来代替当前时间。 -c 如果文件不存在,不创建新文件。 文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持. 例子: $ touch test_file1 $ ls –l test_file1 -rw-rw-rw- 1 user3 class 0 Jul 24 11:08 test_fiile1 $ umask a-rwx,u=rw,g=r (或 umask 137) $ umask –S (或 umask) u=rw,g=r,o= (或 137) $ touch test_file2 $ ls –l test_file2 $-rw-r----- 1 user3 class 0 Jul 24 11:10 test_file1 5.8 chown 更改文件的所有权 语法: chown owner [:group] 更改一个文件的属主,和可选地,组ID 例子: $ id uid=303 (user3), gid=300 (class) $cp f1 /tmp/user2/f1 $ls –l /tmp/user2/f1 -rw-r----- 1 user3 class 3976 Jan 24 13:13 f1 $ chown user2 /tmp/user2/f1 $ ls –l /tmp/user2/f1 -rw-r----- 1 user2 class 3976 Jan 24 13:13 f1 只有文件的属主和root才能更改一个文件的所有权。 只有文件的属主才能控制文件的属性和存取,如果你想要将一个文件的所有权给系统中的另外一个用户,你可以使用chown命令。例如,user3拷贝他的文件f1给user2。User2对他个人的文件应该有完全的控制权,于是user3将/tmp/user2/f1的所有权转换给user2。可选地,chown可以改变一个或多个文件的组ID。要改变的组可以是一个数字的组ID,或者是一个passwd(group)文件中的登录名。 注释:一旦一个文件的属主已经被改变,只有新的属主或root可以更改文件的所有权和模式。 属主是一个系统认可的用户标识。文件/etc/passwd 中包含有系统中所有用户的ID。 例子: 在上图中,在user3将文件/tmp/user2/f1的所有权转换给user2后,他仍然有读的权限,因为class组中的任何成员对这个文件对都有读的权限。 5.9 chgrp 命令 语法: chgrp 更改一个文件的组的存取。只有文件的属主和root 更改文件的组。 例子: $ id uid=303(user3) ,gid=300(class) $ ls –l f3 -rw-r----- 1 user3 class 3967 Jan 24 13:13 f3 $chgrp class2 f3 文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持. $ls –l f3 -rw-r----- 1 user3 class2 3967 Jan 24 13:13 f3 $chown user2 f3 $ls –l f3 -rw-r----- 1 user2 class2 3967 Jan 24 13:13 f3 在长列表中的组域确定什么用户组可以存取这个文件。你可以用chgrp 命令来更改。 new_group(新组)是一个系统认可的组的标识,在文件/etc/group中有系统中所有用户的组ID, 如果指定的新组不存在,chgrp命令不会产生作用。组和组的成员是由系统管理员来控制的 注释:只有文件的属主和root才能更改一个文件的组。 例子: 在上图中,当user3将文件f1的组转变为class2组,他的存取权限没有受到影响,因为他仍然是这个文件的属主。在user3将文件的所有权给了user2,他不再能够存取这个文件,因为user3当前的组是class组。 5.10 su – 转变用户ID 语法: su [user_name] 更改你的用户ID和组ID 例子: $ ls –l /usr/local/bin/class_setup -rwxr-x--- 1 class_admin teacher 3967 Jan 24 13:13 class_setup $ id $uid=303(user3), gid=300(class) $su class_admin $passwd $id uid=400(class_admin), gid=300(class) $ /usr/local/bin/class_setup $ 退出su对话线程。 $ ctrl + D su 命令可以用来交互地更改你的用户ID和组ID。 Su是switch user 或set user id的一个缩写。这个命令让你开启一个子进程,成为新的用户ID和赋予你存取与这个用户ID关联所有文件的存取权限。因此,出于安全的考虑,你在实际转换身份时,会被要求输入这个用户帐号的密码。 如果没有参数,su命令将你转换为root(系统管理员)。root帐号有时也被称为超级用户,因为这个用户可以存取系统中的任何文件。也正是这个原因,许多人将su命令看成是supper-user(超级用户)的一个缩写。当然,你必须要提供root密码。 注释:想要回到你原先的用户身份,不要再使用su命令,你只需要使用exit命令退出你使用su命令而生成的新的对话进程。 例子 在上图中,user3没有程序/usr/local/bin/class_setup的存取权限,因为她不是teacher组的成员。如果她输入命令 su class_admin,他就可以存取这个程序。作为用户class_admin,她还可以修改程序 class_setup的内容。当她运行完成这个程序后退出su 的对话,就恢复自己原先的用户状态。 su – username 文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持. 一些配置文件是为你的的对话线索而设立的。。当你使用命令su username时,你的对话特征和你原始的登录身份一样。如果你想要你的对话进程拥有转换后的用户ID一致的特征,你要使用短斜杠: su – username. 5.11 newgrp 命令 newgrp 命令同su 命令十分相似。这个命令可以更改你的组的ID号。 系统管理员会定义你能转变的组。通过查看文件/etc/group,你能确定你有权改变到那些组。如果你没有被允许成为指定的组的成员,你会得到一条信息:Sorry.由于newgrp命令没有开启一个新的对话线索,你只需要使用newgrp来回到你最初的组的状态。 例子: 在以上的图中,user3仍旧无权存取程序/usr/local/bin/class_setup,因为他被初始化定义为组class中,user3能newgrp teacher到teacher组,因为系统管理员已经赋予属于他teacher的一员。现在他可以允运行这个程序,因teacher组的所有成员对为这个程序都有执行权限,但是他不能更改这个程序的内容,只有用户class_admin可以更改这个程序。当user3完成他的工作,他可以newgrp回到他原始的组状态。 /etc/group文件的例子: teacher: : 33: class_admin,user3 class: : 300 :user1,user2,user3,user4,user5,user6,class_admin 5.12 文件权限和存取-总结 关于文件权限需要注意的有: • • • 文件的路径名中指出的所有的目录必须要有执行的权限,否则文件不能得到存取。 要保护一个文件,可以取消文件和文件所在目录的写的权限。 只有文件的属主(或root)才能更改文件模式(chmod),所有权(chown),和文件 的组(chgrp) 文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持. 第六章-shell 基础 目标 • • • • • • • 完成这一章,你能够作以下事情: 了解shell的工作原理 描述用户登录的过程 描述用户环境变量和这些环境变量的功能。 设置和修改shell变量。 了解和修改一些特殊的环境变量例如PATH ,TERM等等。 为特定的应用定制用户环境变量。 6.1 什么是shell? shell是一个交互性命令解释器。Shell独立于操作系统,这种设计让用户可以灵活选择适合自己需要的shell。shell让你在命令行键入命令,经过shell解释后传送给操作系统(内核)执行。 这一章介绍POSIX shell提供的交互的特征。 以下是shell功能的一个汇总: • • • • • • 查找命令的位置并且执行相关联的程序 为shell变量赋新值 执行命令替代 处理 I/O重定向和管道功能 提供一个解释性的编程语言界面,包括tests,branches 和loops等语句 当你登录到一个unix系统,shell会为你的终端登录线索定义一些特征,然后出现你的提示符。在POSIX,Bourn,K shell中$符号为默认的提示符。C shell中默认的提示符是%号。 7.2- 一些通常使用的shell /usr/bin/sh POSIX shell /usr/bin/ksh Korn shell /usr/old/bin/sh Bourne shell /usr/bin/csh C shell /usr/bin/keysh A contest-sensitive softkey shell /usr/bin/rksh Restricted Korn shell /usr/bin/rsh Restricted Bourne shell POSIX shell 、是一个POSIX兼容的命令编程语言和命令解释器。它可以从终端或者是一个文件中读取并且执行命令。POSIX在许多方面同korn shell 相似。有历史机制。支持任务控制,和其他有用的特性。 Korn shell 同POSIX shell十分类似,是由贝尔试验室的David Korn开发的。 文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持. Bourne shell :缺乏许多在POSIX,和korn shell 中的功能。它是由Stephen R. Bourne开发的,是AT&T unix中最先使用的shell C shell。是一个普通的语言解释器,有命令历史机制,类似C语言的语法。和任务控制工具。它是由university of California at Berkeley 的william Joy开发的。 Rsh 和rksh是Bourne shell 和Korn shell 的受限制的版本。受限制的shell在设置登录名和环境的时候比普遍的shell 有更多的限制。受限制的shell使用起来就象是具有异常现象的标准的shell。 使用受限制的shell的用户不能: • • • • 更改目录 重新设定PATH变量的值 在路径名中使用/符号。 重定向输出。 6.3 POSIX shell的特性 POSIX shell 是unix提供的shell中的一个。这种shell有许多Korn shell拥有,但Bourne shell没有的特征。即使你不会使用到所有的高级特征,你仍然会发现POSIX shell 是一个非常方便的用户界面。以下是POSIX shell的一些特性: • • • • • • • 命令的历史机制。 命令行重调用和编辑 任务控制。 文件名自动完成。 命令的别名。 增强的cd。 先进的编程能力。 6.4 别名 别名就是命令的一个新的名称。使用别名可以缩短长命令行输入,创建新的命令,或用一种称为别名的新的命令来替代原始的命令执行。别名的组成可以是一个字母或一个短的单词。例如,许多的人非常频繁地使用ps –ef 命令。如果你使用psf代替这个命令是否会更容易一些?你使用alias命令可以创建别名: $ alias name= string 在这里,name是你要取的别名,而string是name要取代的命令或者字符串。如果string包括有空格,你要需用引号将整个字符串括起来。别名对于减少键盘输入,减少打字错误,或是创建新的命令会很方便。 别名在使用的时候和其他的命令一样。 执行一个真的的unix系统命令和执行引用到一个unix命令的别名对于用户来说是透明的,没有任何区别。 别名经常用于全路径名的一个缩写。 如果不带差数,alias命令会报告当前定义的所有的别名。 文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持. 想要列出一个特定的别名,使用alias name命令。 禁止一个别名,可以使用unalias命令,语法是: unalias name 例子: $ alias go=’cd’ $ alias there = /home/user3/tree/ford/sports $ go there $pwd /home/user3/tree/ford/sports 6.5 文件名自动完成 例子: $ more fra esc esc $ more frankenstein $ more abc esc esc $ more abcdef esc = 1)abcdefx1mnop 2)abcdefy1mnop $ more abcdef 然后打x或y,然后连续按两下esc键 系统就会自动完成相关联的文件名。 当你想要存取一个长文件名的时候,你可以使用文件名自动完成功能,如果你输入的字符足够多,能唯一标识一个文件名后,你可以连续敲两下esc键,POSIX shell就会自动补全文件名的剩余部分。如果输入的字符串并不唯一,POSIX shell 就不能解析到文件名,你的终端会发出蜂鸣。 直到没有文件名冲突时候,连续敲两下esc键,shell会自动完成文件名。你也可以通过敲一下esc键来列出所有可能的文件名。在POSIX shell列出了有效的选项的时候,你就能够使用编辑命令来增加后来的字符来唯一地确定你所需要的文件名,然后你可以连续敲两下esc键来完成文件名。 文件名自动完成可以在所有的使用文件名路径的时候使用,例如: $cd tr esc esc do esc esc r esc esc 会显示以下的命令行: $cd tree//retriever 6.5 命令的历史机制 语法: history [-n| a z] 显示以前输入的命令。 例子: $ history –2 列出最近输入的两个命令 文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持. 15. cd 16. more .profile $ history 3 5 列出命令号从3到5的所有的命令 3. date 4. pwd 5. ls POSIX shell保留一个历史文件来存储你所键入的命令,你可以重输入这些命令。这个历史文件会在你登录时建立,在退出登录时被删除。 history命令会显示你最近输入的16个命令,每一个命令前面都会有一个命令号。你可以通过这个命令号来引用你以前键入的命令。 你可以键入history –n 来显示少于或者多于16个命令。其中n代表命令号。 你可以键入history a z 来显示一个命令号的范围。其中a z代表命令号的一个范围。 HISTSIZE变量定义了保存的的历史命令的数目。(默认值是128)HISTFILE变量定义了保存历史命令的文件的一个文本文件名(默认值是.sh_history). 6.6 重新输入命令 你可以通过简单地键入 r c 来从命令历史中运行任意的命令。 其中c 代表命令号。你也可以键入命令的第一个字母来执行你最近键入的命令,例如: $ history 1 date 2 cat file1 3 ls –l $ r d Mon Jul 4 10:03:13 1994 6.7 用户环境 语法: env 例子: $ env HOME=/home/gerry PWD=/home/gerry/develop/hasics EDITOR=vi TERM=70092 ...... PATH=/usr/bin:/usr/contrib/bin:/usr/local/bin:/home/gerry/bin 文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持. 用户环境记录了关于用户程序的线程的许多信息。 你的环境中的信息有: • • • • • • • 你home路径的路径名 电子邮件的存放地址。 你所在地的时区 你登录的用户名 shell查找命令的路径 终端类型 你的应用可能需要的其他东西。 例如:命令vi和more 需要知道你的终端类型才能以正确的格式输出数据。 与用户环境类似的是你的办公环境。在办公室里的灯光,声音,和温度对所有的工作者都是相同的。而其他的对你来说唯一的因素组成了你的特殊的环境。这些因素包括你正在执行的工作,你的写字台的布局,和你和办公室其他人的关系。你的工作环境就像你的用户环境一样都是唯一的。 许多应用需要你按照一些方式来定制你的环境。这种定制是通过修改你的.profile文件来完成的。 你可以运行env命令来检查你的环境。这个命令会显示你的环境中的每一个变量和变量的值。 每一个环境变量的设置都有一个的意义,以下是一些普通的环境变量和它们的含义: TERM,COLUMNS,LINES 你使用的终端的类型。 HOME 你的home目录的路径 PATH 查找命令的位置的一个目录的列表。 LOGNAME 登录时使用的用户名 ENV,HISTFILE 特殊的POSIX shell 变量 DISPLAY 特殊的x windows 变量 在这些变量中,一些是系统设置的变量,其他都是在/etc/profile 或.profile中设置。 6.8设置SHELL变量 • • • • 语法: name=vales 例子: $ PATH=/usr/bin/X11:/usr/bin shell变量是一个名称,代表一个值 与这个名称管关联的值可以被修改 一些shell变量是在登录的过程中定义的。 用户可以自己定义新的shell变量 shell 变量同代数中的变量很相似。它是代表一个数值。给一个变量赋值就是将一个数值分配到一个变量名上。然后就可以通过这个变量名来存取这个数值。如果这个值被修改,仍然能够通过变量名来存取新的值。给shell变量赋值的语法是: name=value 文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持. 你可以在终端的shell提示符下输入,或者在shell脚本中加入这条语句。注意,在等号(=)的前后都没有空格。区别shell变量的名称和shell变量的值十分重要。当一个赋值语句执行的时候,变量的值才会被设定 例如 TERM=70092 这会告诉shell记住TERM这个名称,并且在TERM变量的值被要求的时候,返回70092。 变量名限制 变量名必须由字母开始可以包含字母,数字。下划线,变量名所包含的字符的数量没有限制。 6.9 两个重要的变量 PATH变量 -shell搜寻你键入的命令所在位置的一个目录的列表 TERMb变量 -描述你的终端类型和屏幕尺寸(为你运行的程序需要) $ env ... PATH=/usr/bin:/usr/contrib/bin:/usr/local/bin $TERM=70092 $ $ tset Erase is Backspace kill is Ctrl+U $ PATH变量 是shell在寻找命令所要查找的路径的一个列表。它使我们可以简单地键入一个命令名而不需要在前面加上一个完整的一个路径列表。(例如,vi代表/usr/bin/vi)。以下是一个默认的PATH变量的例子: PATH=/usr/bin:/usr/contrib/bin:/usr/local/bin 这意味着当你键入一个命令的时候,shell会在路径/usr/bin中查找,然后是/usr/contrib/bin,等等,直到找到这个命令,或者找完这些目录都没有发现这个命令。如果没有找到这个命令,会有一个 command: not found的错误信息出现在屏幕上。 TERM是一个描述你的终端类型的环境变量。为了许多的命令能正确运行,它们需要知道你使用的终端类型。例如,ls 命令需要屏幕有多少列,更多的需要知道屏幕有多少行,vi为了正确地工作,同时需要知道你的终端的行与列的数目和关于你的终端更多的信息。终端的类型被设置成为终端的型号的数字。(例如2392,70092,等等) 设置终端变量的默认方法是使用以下的方法: TERM=(hp) 你的系统管理员也许已经设置好你的系统,所以系统不会询问你的终端类型。在这种情况下你可以使用env命令来检查TERM环境变量的值。如果你使用的工作站只有一个显示器,TERM变量的值就很可能是正确的,不需要更改。 文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持. 如果你的终端在你使用more 或者vi 的时候出现异常,请检查TERM变量,如果设置正确,执行tset命令。这个命令会使用TERM变量中的值来重新设定你的终端类型。 6.10 常用的变量赋值 黑体字为你要定义的变量。 EDITOR=/usr/bin/vi 使用vi作为行编辑器 ENV=$HOME/.shrc 在shell启动的时候执行$HOME/.shrc文件 FCEDIT=/usr/bin/vi 在先前的命令行开始vi编辑线索。 HOME=/home/user3 指明你的登录的目录 ~(波浪符号) 在POSIX shell中等同于你的HOME目录 HISTFILE=$HOME/.sh_history 存储所有的键入的命令的文件 LOGNAME=user3 指明你的登录标识或是用户名。 MAIL=/var/mail/user3 指明你的系统邮箱 OLDPWD=/TMP 指明你所进入的前一个目录 PATH=/usr/bin:$HOME/bin 指明查找命令的路径。 PS1= 指明你的主提示符。 PS1=’[!] $’ 在提示符中显示命令的行号 PS1=’$PWD $’ 在提示符中显示当前的工作路径(注 意:必须使用单引号。) PS1=’[!] $PWD $’ 在提示符中显示行号和当前工作目录 PWD=/home/user3/tree 指明你的当前所在的目录。 SHELL=/usr/bin/sh 指明你的命令解释程序 TERM=2392a 指明你使用的终端的类型,启动的时候使用命令eval ‘tset – s–Q –h ‘系统会自动读取/etc/ttytype文件,并使用恰当地终端类型来映射你的终端的端口。这在你的系统联接有不同型号的终端的时候十分有用。 TMOUT = 300 如果在指定的时间内没有命令或回车键入,shell会中止或者超时 TZ=EST5EDT 定义系统时区以显示正确的时间 6.11 在登录的时候发生了什么? 当你坐下来开始在系统中工作,你会在屏幕上看见login: 提示符。当你键入你的用户名,系统会读取你的用户名,并且提示你输入密码。当你键入你的密码,系统会检查你的用户名和密码(使用/etc/passwd文件)。如果你键入的用户名和密码是正确的,系统会让你进入到你的home目录,并且系统会为你启动shell。我们已经看到了每一次我们登录的时候发生的事情。我们的问题是-当shell启动的时候,系统究竟做了什么? 1 getty a. 显示/etc/issue中的内容 b.出现登录提示符 1. c.运行登录过程 2.Login a.确认用户名和密码的正确性。 b.将用户放在home目录下 c.运行用户的shell 3. shell a. 执行/etc/profile文件(POSIX,Bourne,和Korn shell) 或者是/etc/(C shell) 文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持. b. 执行用户home目录下的.profile 或者.login文件 c. 执行用户home目录下的.kshrc文件(POSIX和Korn shell)。如果用户创建了这个文 或是在ENV变量中设置.kshrc在.profile文件中。 d.出现shell提示符 一旦shell开始运行,他会从系统命令文件/etc/profile中读取命令执行.用户无论在什么时候登录和启动一个shell,这个文件都会被读取,然后shell会读取你自己的.profile文件。这两个shell脚本被用来定制一个用户的环境。 /etc/profile中设置了系统中每个用户的基本的环境。而.profile文件更多的是定制你特殊的需要。因为每一个人都会使用/etc/profile文件,所以系统管理员有责任维护这个文件。 当这两个程序都完成后就会出现shell提示符。 6.12 shell启动文件 Korn(/usr/bin/ksh) .profile .kshrc Bourne(/usr/old/bin/sh) .profile POSIX(/usr/bin/sh) .profile .kshrc Restricted(/usr/bin/rsh, .profile /usr/bin/rksh) C(/usr/bin/csh) .profile .cshrc 系统在配置你的线程的时候通常需要一些环境变量(例如:PATH,EIDTOR.)。正如你已经看到的,它们必须在你每次登录的时候定义。.profile文件和.kshrc文件十分有效。它们是简单的shell脚本文件,可以用来定制你的环境变量,定义别名,在登录时执行程序。由于POSIX shell 是起源于Korn shell,而Korn shell又是起源于Bourne shell,所以,POSIX shell 支持同样的配置文件。 .profile 任何想要定制由系统管理员提供的默认环境的用户都可以创建或修改.profile文件。这个文件通常定义或定制了环境变量,设置用户的终端,在登录过程时执行如date这样的程序。用户的应用同样也可以通过在.profile中的exec applicationname来启动。在这种方式下,用户不会存取到shell提示符,并且,当应用程序退出,用户同时会退出登录。 /etc/profile 这个文件是一个对系统中的所有用户都有效的初始化文件,前提是这些用户使用的是Bourne,Korn,或者POSIX shell.。系统管理员可以定制这个文件来提供所有的用户的一个一致的用户环境。普通的用户一般没有权限更改这个文件,用户定制他们自己的环境 只能通过自己的.profile和.kshrc文件 .kshrc POSIX和K shell都有一个可选的叫做.kshrc的配置文件。它的作用同.profile一样是配置你的用户环境,同.profile不同的是,.kshrc是在每次你启动一个新的shell时被读取。而不仅仅是在登录的时候。这种方式允许在每次你启动一个新的shell地时候设置你的别名或甚至提示符。在象X11 windows这种环境中,你可能同时运行几个shell,你可以使用.kshrc文件,这样,每一个shell看上去都是一样的。 文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持. .kshrc这个文件名不是一个必须的文件名。当你激活一个shell,它会通过ENV这个变量来索引这个文件。这个文件通常都是.kshrc,但它也可以使用其他的名字。 ENV=~/.kshrc export ENV 这会告诉K shell你使用你的home目录下的.kshrc文件,现在就可以在..kshrc中加入你的别名和命令。 如果你同时使用Bourne 和POSIX shell,你可以存储POSIX shell的环境变量到这个文件中,因为Bourne shell不会读这个文件。 .cshrc 和 .login 当你使用C shell作为你的登录的shell的时候,C shell 会在你的home 目录下找一个.login地文件。如果找到,在shell提示符出现之前,这个文件中的命令就会被执行。这和POSIX,Korn,和 Bourne shell中的.profile的用法完全一样。如果文件存在,文件.cshrc中的命令也会被执行。 系统在配置你的线程的时候通常需要一些环境变量(例如:PATH,EIDTOR.)。正如你已经看到的,它们必须在你每次登录的时候定义。.profile文件和.kshrc文件十分有效。它们是简单的shell脚本文件,可以用来定制你的环境变量,定义别名,在登录时执行程序。由于POSIX shell 是起源于Korn shell,而Korn shell又是起源于Bourne shell,所以,POSIX shell 支持同样的配置文件。 .profile 任何想要定制由系统管理员提供的默认环境的用户都可以创建或修改.profile文件。这个文件通常定义或定制了环境变量,设置用户的终端,在登录过程时执行如date这样的程序。用户的应用同样也可以通过在.profile中的exec applicationname来启动。在这种方式下,用户不会存取到shell提示符,并且,当应用程序退出,用户同时会退出登录。 /etc/profile 这个文件是一个对系统中的所有用户都有效的初始化文件,前提是这些用户使用的是Bourne,Korn,或者POSIX shell.。系统管理员可以定制这个文件来提供所有的用户的一个一致的用户环境。普通的用户一般没有权限更改这个文件,用户定制他们自己的环境 只能通过自己的.profile和.kshrc文件 .kshrc POSIX和K shell都有一个可选的叫做.kshrc的配置文件。它的作用同.profile一样是配置你的用户环境,同.profile不同的是,.kshrc是在每次你启动一个新的shell时被读取。而不仅仅是在登录的时候。这种方式允许在每次你启动一个新的shell地时候设置你的别名或甚至提示符。在象X11 windows这种环境中,你可能同时运行几个shell,你可以使用.kshrc文件,这样,每一个shell看上去都是一样的。 .kshrc这个文件名不是一个必须的文件名。当你激活一个shell,它会通过ENV这个变量来索引这个文件。这个文件通常都是.kshrc,但它也可以使用其他的名字。 ENV=~/.kshrc export ENV 这会告诉K shell你使用你的home目录下的.kshrc文件,现在就可以在..kshrc中加入你的别名和命令。 如果你同时使用Bourne 和POSIX shell,你可以存储POSIX shell的环境变量到这个文件中,因为Bourne shell不会读这个文件。 .cshrc 和 .login 当你使用C shell作为你的登录的shell的时候,C shell 会在你的home 目录下找一个.login地文件。 文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持. 如果找到,在shell提示符出现之前,这个文件中的命令就会被执行。这和POSIX,Korn,和 Bourne shell中的.profile的用法完全一样。如果文件存在,文件.cshrc中的命令也会被执行。 系统在配置你的线程的时候通常需要一些环境变量(例如:PATH,EIDTOR.)。正如你已经看到的,它们必须在你每次登录的时候定义。.profile文件和.kshrc文件十分有效。它们是简单的shell脚本文件,可以用来定制你的环境变量,定义别名,在登录时执行程序。由于POSIX shell 是起源于Korn shell,而Korn shell又是起源于Bourne shell,所以,POSIX shell 支持同样的配置文件。 .profile 任何想要定制由系统管理员提供的默认环境的用户都可以创建或修改.profile文件。这个文件通常定义或定制了环境变量,设置用户的终端,在登录过程时执行如date这样的程序。用户的应用同样也可以通过在.profile中的exec applicationname来启动。在这种方式下,用户不会存取到shell提示符,并且,当应用程序退出,用户同时会退出登录。 /etc/profile 这个文件是一个对系统中的所有用户都有效的初始化文件,前提是这些用户使用的是Bourne,Korn,或者POSIX shell.。系统管理员可以定制这个文件来提供所有的用户的一个一致的用户环境。普通的用户一般没有权限更改这个文件,用户定制他们自己的环境 只能通过自己的.profile和.kshrc文件 .kshrc POSIX和K shell都有一个可选的叫做.kshrc的配置文件。它的作用同.profile一样是配置你的用户环境,同.profile不同的是,.kshrc是在每次你启动一个新的shell时被读取。而不仅仅是在登录的时候。这种方式允许在每次你启动一个新的shell地时候设置你的别名或甚至提示符。在象X11 windows这种环境中,你可能同时运行几个shell,你可以使用.kshrc文件,这样,每一个shell看上去都是一样的。 .kshrc这个文件名不是一个必须的文件名。当你激活一个shell,它会通过ENV这个变量来索引这个文件。这个文件通常都是.kshrc,但它也可以使用其他的名字。 ENV=~/.kshrc export ENV 这会告诉K shell你使用你的home目录下的.kshrc文件,现在就可以在..kshrc中加入你的别名和命令。 如果你同时使用Bourne 和POSIX shell,你可以存储POSIX shell的环境变量到这个文件中,因为Bourne shell不会读这个文件。 .cshrc 和 .login 当你使用C shell作为你的登录的shell的时候,C shell 会在你的home 目录下找一个.login地文件。如果找到,在shell提示符出现之前,这个文件中的命令就会被执行。这和POSIX,Korn,和 Bourne shell中的.profile的用法完全一样。如果文件存在,文件.cshrc中的命令也会被执行。 6.13 shell内部命令和unix命令 shell内部命令是内建在shell中的命令 例如: cd ls 文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持. pwd echo unix命令存在在/usr/bin下。 例如: more file 一些“内部”命令同样可以作为“单独”的命令使用。 系统使用PATH变量来确定UNIX命令的位置 一些你通过键盘键入的命令是系统中的一个文件,例如在/usr/bin下的文件,这些命令都是unix命,但由许多的命令,例如 cd ,pwd ,echo 实际上是shell内部自带的命令。这些命令在unix文件系统中并不存在,这些命令就叫做shell内部命令。 由于unix命令可能存在在几个目录下,shell必须知道到什么地方去找这些命令。PATH变量就是shell查找命令的目录的位置。 Unix命令可以与shell内部命令同名,为了使用这些命令,用户必须在这些命令前加上其绝对路径名,以免同同名的内部命令冲突。 6.14 查找命令-whereis UNIX命令主要存在在四个目录:/sbin,./usr/bin,/usr/local/bin,和/usr/contrib/bin。Whereis 命令主要在这些目录下查找命令所在的位置。许多的用户在他们的登录目录下有自己的bin 目录。whereis 命令不会去查找这些路径。有时你忘记命令的路径和命令的手册的位置。UNIX系统通过whereis 命令来定位命令和手册在系统中的位置。 Whereis 命令接受单一的参数就是命令的名字。它返回的结果是可执行代码的位置和命令的手册页。 文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持. 第七章 Shell 高级特征 目标 完成这一章,你可以做到以下事情: • • • • • 使用shell的替代功能,包括变量替代,命令替代,和波浪号替代。 设置和修改shell变量。 将局部变量传给环境。 使变量对子进程生效。 解释进程是如何被创建的。 7.0 shell 的替代功能 在shell 中有三种类型的替代: • • • 变量替代 命令替代 波浪号替代 替代的作用是加速命令行的键入和执行 7.1 Shell 变量存储 Shell内有两块内存区域用于存储shell变量,它们是:局部数据区域和环境。当定义了一个新的变量时,内存会被分配给局部数据区域,在这个区域中的变量是当前shell 私有的,通常称为局部变量,任何以后的子进程都不会存取到这些局部变量。但是,子进程能够存取那些传送到环境中去的变量。 在你的登录进程过程中,有几个特殊的shell变量会被定义。其中大多数的变量存储在环境中:一些变量,例如 ps1 和ps2,存储在局部数据区域。这些变量的值能够被改变,用于定制你的终端特性。 env 命令能够显示当前保存在环境中所有的变量,例如: $ env MANPATH=/usr/share/man: /usr/contrib/man: /usr/local/man PATH=/usr/bin: /usr/ccs/bin:/usr/contrib/bin: /usr/local/bin LOGNAME=user3 ERASE=^H SHELL=/usr/bin/sh HOME=/home/user3
版权声明:本文标题:UNIX操作系统简介 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1703221177a442843.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论