在 UNIX 中的所有数据被都组织成文件。所有文件被都组织成目录。这些目录被组织成一个称为文件系统的树状结构。
当您使用 UNIX 时,你将花费大部分时间用一种方式或另一种方式去处理文件。本教程将教你如何创建和删除文件,复制和重命名它们,创建链接到它们等。
在 UNIX 中有三种基本类型的文件:
普通文件: 一个普通的文件是系统上包含数据、 文本或程序指令的文件。在本教程中,你将使用普通文件。
目录: 目录存储特殊和普通文件。 UNIX 目录对于熟悉 Windows 或者 Mac OS 的用户,相当于文件夹。
特殊文件: 一些特殊的文件提供访问硬件,例如硬盘、 CD - ROM 驱动器、 调制解调器和以太网适配器。其他特殊文件类似于别名或快捷方式,使您能够访问单个文件使用不同的名称。
文件列表
为了列出存储在当前目录中的文件和目录。使用下面的命令:
drwxrwxr-x 2 amrood amrood 4096 Dec 25 09:59 uml
-rw-rw-r-- 1 amrood amrood 5341 Dec 25 08:38 uml.jpg
drwxr-xr-x 2 amrood amrood 4096 Feb 15 2006 univ
drwxr-xr-x 2 root root4096 Dec 9 2007 urlspedia
-rw-r--r-- 1 root root 276480 Dec 9 2007 urlspedia.tar
drwxr-xr-x 8 root root4096 Nov 25 2007 usr
drwxr-xr-x 2200300 4096 Nov 25 2007 webthumb-1.01
-rwxr-xr-x 1 root root3192 Nov 25 2007 webthumb.php
-rw-rw-r-- 1 amrood amrood 20480 Nov 25 2007 webthumb.tar
-rw-rw-r-- 1 amrood amrood 5654 Aug 9 2007 yourfile.mid
-rw-rw-r-- 1 amrood amrood166255 Aug 9 2007 yourfile.swf
drwxr-xr-x 11 amrood amrood 4096 May 29 2007 zlib-1.2.3
这里是有关所有列出的列信息:
第一列: 表示文件类型,给出了该文件的权限。后面是所有类型的文件的说明。
第二列: 表示文件或目录所采取的内存块的数目。
第三列: 表示该文件的所有者。这是创建此文件的 UNIX 用户。
第四列: 表示用户组。每个 UNIX 用户会有一个相关联的组。
第五列: 表示文件大小以字节为单位。
第六列: 表示此文件被创建或最后一次修改的日期和时间。
第七列: 表示文件或目录的名称。
在 ls -l 清单示例中,每个文件的行开头为 d ,- ,或 l。这些字符指示列出的文件的类型。
前缀 | 描述 |
---|---|
- | 常规的文件,如 ASCII 文本文件,二进制可执行文件,或硬链接。 |
b | 特殊块文件。块输入输出设备文件如物理硬盘驱动器。 |
c | 字符特殊文件。原始的输入/输出设备文件如物理硬盘驱动器。 |
d | 包含其他文件和目录列表的目录文件。 |
l | 符号链接文件。链接到任何一个普通的文件。 |
p | 命名的管道。进程间通信机制。 |
s | 用于进程间通信的套接字。 |
元字符
元字符在 UNIX 中具有特殊的意义。例如 * 和 ? 是元字符。我们使用 * 匹配 0 或多个字符,问号 ? 与单个字符匹配。
举个例子:
隐藏文件
隐藏文件,是第一个字符是圆点或句点字符 (.) 的文件。 UNIX 程序 ( 包括 shell ) 大多数使用这些文件来存储配置信息。
隐藏文件的一些常见的例子包括文件:
.profile: Bourne shell ( sh ) 初始化脚本。
.kshrc: Korn shell ( ksh ) 初始化脚本。
.cshrc: C shell ( csh ) 初始化脚本。
.rhosts: remote shell 配置文件。
若要列出不可见文件,请指定到 ls -a 选项:
创建文件
您可以使用 vi 编辑器来创建任何 UNIX 系统上的普通文件。你只需要给出以下命令:
This is unix file....I created it for the first time.....
I'm going to save this content in this file.
一旦你做完上一步,请执行以下步骤:
按键 esc 退出编辑模式。
一起按两个键 Shift + ZZ 完全退出文件。
现在你会有一个已经创建好的叫 filename 的文件在当前目录中。
l 键移动到右侧。
h 键移动到左侧。
k 键移动到上面。
j 键移动到下面。
使用上面的键您可以将光标放在任何您想要编辑的地方。一旦您定位好然后您可以使用 i 键来在编辑模式下编辑该文件。当您编辑完文件您可以按下 esc 键然后按下 Shift + ZZ 键来从文件完全的退出。
显示文件的内容
你可以使用 cat 命令来查看文件的内容。以下是简单的示例来查看上面创建文件的内容:
统计文件中字数
你可以使用 wc 命令来获取一个文件中的总的行数,字数和字符数。以下是简单的示例来查看有关上面创建的文件的信息:
第一列: 代表文件中的行数。
第二列: 代表文件中的字数。
第三列: 代表文件中的字符数。这是文件的实际大小。
第四列: 代表文件名。
在获取有关这些文件的信息的时候,你可以给多个文件。这里是简单的语法:
复制文件
要使用 cp 命令文件的副本。该命令的基本语法如下:
删除文件
若要更改文件的名称使用 mv 命令。其基本的语法是:
删除文件
若要删除现有文件使用 rm 命令。其基本的语法是:
以下是完全删除现有文件 filename 的示例:
标准 UNIX 流
在正常情况下每个 UNIX 程序在它启动时打开的三个流 ( 文件 ):
stdin : 这指作为标准输入,关联文件描述符为 0。它也可以表示为 STDIN 。UNIX 程序默认从 STDIN 中读取。
stdout : 这指作为标准输出,关联文件描述符为 1。它也可以表示为 STDOUT 。UNIX 程序默认从 STDOUT 中读取。
stderr : 这指作为标准错误,关联文件描述符为 2。它也可以表示为 STDERR 。UNIX 程序会将所有的错误信息写入 STDERR。
文件权限
文件所有权是 UNIX 的一个重要的组成部分,提供了一种安全的方法来存储文件。在 UNIX 中每个文件有以下属性:
所有者权限:所有者的权限决定文件的所有者可以对文件执行的操作。
组权限:组权限决定了属于该组的成员对他所拥有的文件能够执行的操作。
其他人权限:其他人权限表示其他所有人对于该文件能够进行的操作。
权限表示符
当使用 ls -l 命令的时候,会将与文件相关的各种权限展示出来,如下:
权限被分为三组,组中的每个位置代表一个特定的权限,这个顺序是:读(r)、写(w)和执行(x):
前三个字符 (2-4) 表示文件的所有者的权限。例如 -rwxr-xr-- 代表,文件的所有者拥有读 (r)、写 (w) 和执行 (x) 的权限。
第二组的三个字符 (5-7) 包含了该文件所属组的权限。例如 -rwxr-xr-- 表示了所属组拥有读 (r) 和执行 (x) 的权限,但没有写权限。
最后一组三个字符 (8-10) 代表其他人的权限。例如 -rwxr-xr-- 代表其他人只有读 (r) 的权限。
文件访问模式
文件的权限是 UNIX 系统安全性的第一道防线。UNIX 权限的基本组成部分是读,写,执行权限,如下所述:
读:分配对文件的内容进行读取和查看文件的权限。
写:分配对文件的内容进行修改或者删除的权限。
执行:允许用户将该文件作为一个程序进行执行的权限。
目录访问模式
目录访问模式采用和其他文件用相同的方式组织。但是有一些差异,还是需要提到:
读:访问目录意味着用户可以读取目录下的内容。用户可以查看目录内的文件名。
写:这个权限意味着用户可以在目录下面删除或者新建文件。
执行:执行一个目录并没有真正的意义,因此将它当作可以遍历目录的权限。
用户为了执行 ls 或者 cd 命令就必须先访问了 bin 目录。
改变权限
改变文件或目录的权限,您可以使用 chmod(change mode)命令。有两种方法可以使用 chmod:符号模式和绝对模式。
符号模式中使用 chmod
对于初学者来说使用符号模式是最简单的来修改文件或目录的权限方法。可以用下表中的符号来添加、删除或指定你想要设置的权限。
Chmod 操作符 | 描述 |
---|---|
+ | 给文件或者目录添加指定的权限。 |
- | 删除文件或者目录的权限。 |
= | 设置指定的权限。 |
chmod 命令中使用绝对权限
用chmod命令修改权限的第二种方法,是使用一个数字来指定文件的一些列权限。
每个权限被分配了一个数值,如下表所示, 并且给每个权限集的总和提供了一个数值。
数值 | 权限八进制表示 | 参照 |
---|---|---|
0 | 没有权限 | --- |
1 | 可执行的权限 | --x |
2 | 写权限 | -w- |
3 | 执行和写权限: 1 (执行) + 2 (写) = 3 | -wx |
4 | 读取权限 | r-- |
5 | 读取和执行权限: 4 (读取) + 1 (执行) = 5 | r-x |
6 | 读取和写权限: 4 (读) + 2 (写) = 6 | rw- |
7 | 所有权限: 4 (读) + 2 (写) + 1 (执行) = 7 | rwx |
改变所有者和所属组
在 UNIX 上创建一个帐户时,系统会给每个用户分配一个所有者 ID 和组 ID。所有上面提到的权限也会基于所有者和组进行分配。
如下的两个命令可以改变一个文件的所有者和组:
chown:chown 表示的是 “change owner”,并且它是被用来改变一个文件的所有者。
chgrp:chgrp 表示的是 “change group”,并且它是被用来一个文件所属的组。
改变所有者关系
chown 命令用来改变一个文件的所有者,它的基本语法如下:
注意:超级用户,root 用户,拥有不受限制的权限,能够更改所有文件的所有者,但是普通用户只能修改他们所拥有的文件的所有者。
改变组关系
chgrp 命令被用来修改文件所属的组。基本语法如下:
示例:
SUID 和 SGID 文件权限
通常执行一个命令时,为了完成该任务它必须拥有某些特殊的权限。
举一个例子,当你使用 passwd 命令改变了你的密码后,您的新密码存储在文件 /etc/shadow 中。
作为一个普通用户,出于安全原因你没有读或写访问这个文件的权限,但是当你改变你的密码时,你需要拥有对这个文件写权限。这意味着 passwd 程序必须给你额外的权限,以便您可以编写文件 /etc/shadow,也就是需要额外的权限。
通过设置用户 ID(SUID)和组 ID(SGID) 位可以给程序额外的权限。
当您执行一个启用了 SUID 的程序,你继承了程序所有者的权限。启动改程序的用户就可以不用设置 SUID 直接运行该程序。
这对于 SGID 同样是适用的。通常程序是按组的权限进行执行,除非你的组改变了该程序所属组的拥有者。
如果 SUID 和 SGID 权限是可用的,它们将会以小写的 “s” 出现。SUID 的 “s” 位通常位于权限中所有者执行权限的旁边。如下:
如果对一个目录设置了防删除位(sticky bit),那么只有你是如下任意一种用户时你才可以删除该文件:
该目录的拥有者
被删除文件的拥有者
超级用户,root 用户
你可以使用如下的方式设置任何目录的 SUID 和 SGID 位。
新闻热点
疑难解答