Unix高级环境编程:系统数据文件和信息

Unix高级环境编程:系统数据文件和信息_第1张图片
文件

6.1 文本文件

文本文件格式是一种由若干行字符构成的计算机文件。文本文件存在于计算机文件系统中。通常,通过在文本文件最后一行后放置文件结束标志来指明文件的结束。 文本文件是指一种容器,而纯文本是指一种内容。文本文件可以包含纯文本。 一般来说,计算机文件可以分为两类:文本文件和二进制文件 。

6.1.1 常见文本文件

ASCII

ASCII标准使得只含有ASCII字符的文本文件可以在Unix、Macintosh、Microsoft Windows、DOS和其它操作系统之间自由交互,而其它格式的文件是很难做到这一点的。但是,在这些操作系统中,换行符并不相同,处理非ASCII字符的方式也不一致。

MIME

文本文件在MIME标准中的类型为“text/plain”,此外,它通常还附加编码的信息。在Mac OS X出现前,当Resource fork指定某一个文件的类型为“TEXT”时,Mac OS就认为这个文件是文本文件。在Windows中,当一个文件的扩展名为“txt”时,系统就认为它是一个文本文件。此外,处于特殊的目的,有些文本文件使用其它的扩展名。例如,计算机的源代码也是文本文件,它们的后缀是用来指明它的程序语言的。

.txt

.txt是包含极少格式信息的文字文件的扩展名。.txt格式并没有明确的定义,它通常是指那些能够被系统终端或者简单的文本编辑器接受的格式。任何能读取文字的程序都能读取带有.txt扩展名的文件,因此,通常认为这种文件是通用的、跨平台的。

在英文文本文件中,ASCII字符集是最为常见的格式,而且在许多场合,它也是默认的格式。对于带重音符号的和其它的非ASCII字符,必须选择一种字符编码。在很多系统中,字符编码是由计算机的区域设置决定的。常见的字符编码包括支持许多欧洲语言的ISO 8859-1。

由于许多编码只能表达有限的字符,通常它们只能用于表达几种语言。Unicode制定了一种试图能够表达所有已知语言的标准,Unicode字符集非常大,它囊括了大多数已知的字符集。Unicode有多种字符编码,其中最常见的是UTF-8,这种编码能够向后兼容ASCII,相同内容的ASCII文本文件和UTF-8文本文件完全一致。

*.txt文件

微软的MS-DOS和Windows采用了相同的文本文件格式,它们都使用CR和LF两个字符作为换行符,这两个字符对应的ASCII码分别为13和10。通常,最后一行文本并不以换行符(CR-LF标志)结尾,包括记事本在内的很多文本编辑器也不在文件的最后添加换行符。

大多数Windows文本文件使用ANSI、OEM或者Unicode编码。Windows所指的ANSI编码通常是1字节的ISO-8859编码,不过对于像中文、日文、朝鲜文这样的环境,需要使用2字节字符集。在过渡至Unicode前,Windows一直用ANSI作为系统默认的编码。而OEM编码,也是通常所说的MS-DOS代码页,是IBM为早期IBM个人电脑的文本模式显示系统定义的。在全屏的MS-DOS程序中同时使用了图形的和按行绘制的字符。新版本的Windows可以使用UTF-16LE和UTF-8之类的Unicode编码。

大多数多媒体交互都用自己的编程工具。且一部分是收费的。但有个任何人都能见到的程序编写器却不是每个人都知道——这就是windows下的附件程序——记事本。记事本可以说是每个人都认识的程序。但同时又是编程外行都视而不见的编程工具。他的存储格式就是有极高曝光率的*.txt格式

/etc/passwd

root:x:0:0:root:/root:/bin/bash
注册名(login_name):用于区分不同的用户。在同一系统中注册名是惟一的。在很多系统上,该字段被限制在8个字符(字母或数字)的长度之内;并且要注意,通常在Linux系统中对字母大小写是敏感的。这与MSDOS/Windows是不一样的。

口令(passwd):系统用口令来验证用户的合法性。超级用户root或某些高级用户可以使用系统命令passwd来更改系统中所有用户的口令,普通用户也可以在登录系统后使用passwd命令来更改自己的口令。

现在的Unix/Linux系统中,口令不再直接保存在passwd文件中,通常将passwd文件中的口令字段使用一个“x”来代替,将/etc /shadow作为真正的口令文件,用于保存包括个人口令在内的数据。当然shadow文件是不能被普通用户读取的,只有超级用户才有权读取。

此外,需要注意的是,如果passwd字段中的第一个字符是“*”的话,那么,就表示该账号被查封了,系统不允许持有该账号的用户登录。

用户标识号(UID):UID是一个数值,是Linux系统中惟一的用户标识,用于区别不同的用户。在系统内部管理进程和文件保护时使用 UID字段。在Linux系统中,注册名和UID都可以用于标识用户,只不过对于系统来说UID更为重要;而对于用户来说注册名使用起来更方便。在某些特 定目的下,系统中可以存在多个拥有不同注册名、但UID相同的用户,事实上,这些使用不同注册名的用户实际上是同一个用户。

组标识号(GID):这是当前用户的缺省工作组标识。具有相似属性的多个用户可以被分配到同一个组内,每个组都有自己的组名,且以自己的组标 识号相区分。像UID一样,用户的组标识号也存放在passwd文件中。在现代的Unix/Linux中,每个用户可以同时属于多个组。除了在 passwd文件中指定其归属的基本组之外,还在/etc/group文件中指明一个组所包含用户。

用户名(user_name):包含有关用户的一些信息,如用户的真实姓名、办公室地址、联系电话等。在Linux系统中,mail和finger等程序利用这些信息来标识系统的用户。

用户主目录(home_directory):该字段定义了个人用户的主目录,当用户登录后,他的Shell将把该目录作为用户的工作目录。 在Unix/Linux系统中,超级用户root的工作目录为/root;而其它个人用户在/home目录下均有自己独立的工作环境,系统在该目录下为每 个用户配置了自己的主目录。个人用户的文件都放置在各自的

命令解释程序(Shell):Shell是当用户登录系统时运行的程序名称,通常是一个Shell程序的全路径名.

这里注册名理解为用户登录时的名,用户名时系统多用来表示用户的,没有什么长度上的要求
null false true nologin 可以阻止用户的登录 shell指定这几个的一定不能登录,其他的一句不同系统

Unix高级环境编程:系统数据文件和信息_第2张图片

Unix高级环境编程:系统数据文件和信息_第3张图片

使用nobody登录,起user id 是65534 课登录但没有任何权限

阴影口令

在上一节我们曾提及,对U N I X口令通常使用的加密算法是单向算法。给出一个密码口令,找不到一种算法可以将其反变换到普通文本口令(普通文本口令是在P a s s w o r d :提示后键入的口令)。但是可以对口令进行猜测,将猜测的口令经单向算法变换成加密形成,然后将其与用户的加密口令相比较。如果用户口令是随机选择的,那么这种方法并不是很有用。但是用户往往以非随机方式选择口令(配偶的姓名、街名、宠物名等)。一个经常重复的试验是先得到一份口令文件,然后用试探方法猜测口令。( G a r f i n k e l和S p a ff o r d〔1 9 9 1〕的第2章对unix口令及口令加密处理方案的历史情况及细节进行了说明。)

为使企图这样做的人难以获得原始资料(加密口令),某些系统将加密口令存放在另一个通常称为阴影口令( shadow password)的文件中。该文件至少要包含用户名和加密口令。与该口令相关的其他信息也可存放在该文件中。例如,具有阴影口令的系统经常要求用户在一定时间间隔后选择一个新口令。这被称之为口令时效,选择新口令的时间间隔长度经常也存放在阴影口令文件中。

组文件

用户组文件,没什么内容

附加组ID

在Unix中,组的使用已经作了些更改。在Version7中,每个用户任何时候都只属于一个组。当用户登录时,系统就按口令字文件中与其相关记录中的数字组ID,赋给他实际组ID。我们可以在任何时候执行newgrp(1)以更改组ID。如果newgrp命令执行成功(关于许可权规则,请参阅手册页),则我们的实际组ID就更改为新的组ID,它将被用于后续的文件存取许可权检查。执行不带任何参数的newgrp,则可返回到原来的组。

这种组的成员关系一直维持到1983年左右。此时,4.2BSD引入了附加组ID(supplementary group ID)的概念。我们不仅属于我们的口令字记录中组ID所对应的组,也可属于多至16个另外的一些组。文件存取权检查相应修改为:不仅将进程的有效组ID与文件的组ID相比较,而且也将所有附加组ID与文件的组ID进行比较。

使用附加组ID的优点是我们不必再显式地经常更改组。一个用户常常会参加多个项目组,因此也就要同时属于多个组。

你可能感兴趣的:(Unix高级环境编程:系统数据文件和信息)