在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
在 UNIX 中的所有数据被都组织成文件。所有文件被都组织成目录。这些目录被组织成一个称为文件系统的树状结构。 当您使用 UNIX 时,你将花费大部分时间用一种方式或另一种方式去处理文件。本教程将教你如何创建和删除文件,复制和重命名它们,创建链接到它们等。 在 UNIX 中有三种基本类型的文件: 普通文件: 一个普通的文件是系统上包含数据、 文本或程序指令的文件。在本教程中,你将使用普通文件。 目录: 目录存储特殊和普通文件。 UNIX 目录对于熟悉 Windows 或者 Mac OS 的用户,相当于文件夹。 特殊文件: 一些特殊的文件提供访问硬件,例如硬盘、 CD - ROM 驱动器、 调制解调器和以太网适配器。其他特殊文件类似于别名或快捷方式,使您能够访问单个文件使用不同的名称。
复制代码 代码如下:$ls 这里是上述命令的示例输出: 复制代码 代码如下:$ls binhosts lib res.03 ch07 hw1pub test_results ch07.bak hw2res.01 users docs hw3res.02 work 命令 ls 支持 -l 选项,将帮助您获得有关列出的文件的详细信息: 复制代码 代码如下:$ls -l total 1962188 drwxrwxr-x 2 amrood amrood 4096 Dec 25 09:59 uml 这里是有关所有列出的列信息: 第一列: 表示文件类型,给出了该文件的权限。后面是所有类型的文件的说明。 第二列: 表示文件或目录所采取的内存块的数目。 第三列: 表示该文件的所有者。这是创建此文件的 UNIX 用户。 第四列: 表示用户组。每个 UNIX 用户会有一个相关联的组。 第五列: 表示文件大小以字节为单位。 第六列: 表示此文件被创建或最后一次修改的日期和时间。 第七列: 表示文件或目录的名称。
举个例子: 复制代码 代码如下:$ls ch*.doc 显示名称以 ch 开头,并以 .doc 结束的所有文件: 复制代码 代码如下:ch01-1.doc ch010.doc ch02.docch03-2.doc ch04-1.doc ch040.doc ch05.docch06-2.doc ch01-2.doc ch02-1.doc c 在这里 * 作为元字符可以和任何字符相匹配。如果你只是想要显示以 .doc 结尾的所有文件,你可以使用以下命令: 复制代码 代码如下:$ls *.doc
隐藏文件的一些常见的例子包括文件: .profile: Bourne shell ( sh ) 初始化脚本。 复制代码 代码如下:$ ls -a . .profile docs lib test_results ...rhostshostspub users .emacsbinhw1 res.01 work .exrc ch07 hw2 res.02 .kshrcch07.bak hw3 res.03 $ 单个点 . : 这个代表当前目录。 两个点 .. : 这个代表父目录。
复制代码 代码如下:$ vi filename 上面的命令会打开一个给定的文件名的文件。您将需要按键 i 来进入编辑模式。一旦您处于编辑模式下你可以在如下图所示文件中写入您的内容: This is unix file....I created it for the first time..... 按键 esc 退出编辑模式。 复制代码 代码如下:$ vi filename 编辑文件 您可以使用 vi 编辑器编辑现有的文件。我们将在一个单独的教程中详细介绍。但总之,您可以打开现有的文件,如下所示: 复制代码 代码如下:$ vi filename 一旦文件被打开,您将能在编辑模式下按键 i ,然后您可以如您所想的编辑文件。如果您想要在一个文件里左右移动首先您需要按下键 esc 退出编辑模式来,然后您可以使用下列键在文件内部移动: l 键移动到右侧。 显示文件的内容 复制代码 代码如下:$ cat filename This is unix file....I created it for the first time..... I'm going to save this content in this file. 你可以通过按如下方式使用 -b 选项和 cat 命令显示行号: 复制代码 代码如下:$ cat -b filename 1 This is unix file....I created it for the first time..... 2 I'm going to save this content in this file.
复制代码 代码如下:$ wc filename 2 19 103 filename 这里是所有四个列的细节: 第一列: 代表文件中的行数。 第二列: 代表文件中的字数。 第三列: 代表文件中的字符数。这是文件的实际大小。 第四列: 代表文件名。 复制代码 代码如下:$ wc filename1 filename2 filename3
复制代码 代码如下:$ cp source_file destination_file 下面是创建一个已有文件 filename 的副本的例子。 复制代码 代码如下:$ cp filename copyfile 现在你会发现多了一个文件 copyfile 在您的当前目录。此文件与原始文件 filename 完全相同。 删除文件 复制代码 代码如下:$ mv old_file new_file 下面是把现有文件 filename 重命名为 newfile 的示例: 复制代码 代码如下:$ mv filename newfile mv 命令将现有文件完全移动到新的文件。所以在这种情况下你只能发现 newfile 在你当前的目录中。 删除文件 复制代码 代码如下:$ rm filename 警告: 要删除一个文件可能会很危险,因为它可能包含有用的信息。所以在使用此命令时要小心。这推荐使用 -i 选项和 rm 命令。 以下是完全删除现有文件 filename 的示例: 复制代码 代码如下:$ rm filename 您可以在一行中删除多个文件,如下所示: 复制代码 代码如下:$ rm filename1 filename2 filename3
stdin : 这指作为标准输入,关联文件描述符为 0。它也可以表示为 STDIN 。UNIX 程序默认从 STDIN 中读取。 文件权限 文件所有权是 UNIX 的一个重要的组成部分,提供了一种安全的方法来存储文件。在 UNIX 中每个文件有以下属性: 所有者权限:所有者的权限决定文件的所有者可以对文件执行的操作。
复制代码 代码如下:$ls -l /home/amrood -rwxr-xr-- 1 amrood users 1024 Nov 2 00:10 myfile drwxr-xr--- 1 amrood users 1024 Nov 2 00:10 mydir 输出的第一列表示的是与文件或者目录相关的访问模式或者权限。 权限被分为三组,组中的每个位置代表一个特定的权限,这个顺序是:读(r)、写(w)和执行(x): 前三个字符 (2-4) 表示文件的所有者的权限。例如 -rwxr-xr-- 代表,文件的所有者拥有读 (r)、写 (w) 和执行 (x) 的权限。
读:分配对文件的内容进行读取和查看文件的权限。
读:访问目录意味着用户可以读取目录下的内容。用户可以查看目录内的文件名。 改变权限 符号模式中使用 chmod
如下是以 testfile 文件为示例。对 testfile 文件运行 ls -l 就会像下面一样显示文件的权限: 复制代码 代码如下:$ls -l testfile -rwxrwxr-- 1 amrood users 1024 Nov 2 00:10 testfile 接下来将前面表格中的 chmod 命令都对 testfile 运行一下,下面的是在 ls -l 运行之后,你可以看到文件权限的改变: 复制代码 代码如下:$chmod o+wx testfile $ls -l testfile -rwxrwxrwx 1 amrood users 1024 Nov 2 00:10 testfile $chmod u-x testfile $ls -l testfile -rw-rwxrwx 1 amrood users 1024 Nov 2 00:10 testfile $chmod g=rx testfile $ls -l testfile -rw-r-xrwx 1 amrood users 1024 Nov 2 00:10 testfile 下面将展示如何将上面的命令组合成一行: 复制代码 代码如下:$chmod o+wx,u-x,g=rx testfile $ls -l testfile -rw-r-xrwx 1 amrood users 1024 Nov 2 00:10 testfile
每个权限被分配了一个数值,如下表所示, 并且给每个权限集的总和提供了一个数值。
如下是针对 testfile 文件的示例。运行 ls -l 命令会显示与该文件相关的权限如下: 复制代码 代码如下:$ls -l testfile -rwxrwxr-- 1 amrood users 1024 Nov 2 00:10 testfile 对 testfile 运行上面表格中每个 chmod 示例命令,如下是在 ls -l 之后的,你可以从下面命令中看出权限的改变情况: 复制代码 代码如下:$ chmod 755 testfile $ls -l testfile -rwxr-xr-x 1 amrood users 1024 Nov 2 00:10 testfile $chmod 743 testfile $ls -l testfile -rwxr---wx 1 amrood users 1024 Nov 2 00:10 testfile $chmod 043 testfile $ls -l testfile ----r---wx 1 amrood users 1024 Nov 2 00:10 testfile
如下的两个命令可以改变一个文件的所有者和组: chown:chown 表示的是 “change owner”,并且它是被用来改变一个文件的所有者。
复制代码 代码如下:$ chown user filelist 上面命令中的 user 既可以是系统中的用户名,也可以是系统中用户的 id(uid)。 示例: 复制代码 代码如下:$ chown amrood testfile 改变 testfile 文件的所有者为 amrood 用户。 注意:超级用户,root 用户,拥有不受限制的权限,能够更改所有文件的所有者,但是普通用户只能修改他们所拥有的文件的所有者。 改变组关系 复制代码 代码如下:$ chgrp group filelist 上面命令中的 group 既可以是系统中存在的组的名称,也可以是系统中存在的组的 ID(GID)。 示例: 复制代码 代码如下:$ chgrp special testfile 改变给定的文件的组为 special 组。 SUID 和 SGID 文件权限 举一个例子,当你使用 passwd 命令改变了你的密码后,您的新密码存储在文件 /etc/shadow 中。 作为一个普通用户,出于安全原因你没有读或写访问这个文件的权限,但是当你改变你的密码时,你需要拥有对这个文件写权限。这意味着 passwd 程序必须给你额外的权限,以便您可以编写文件 /etc/shadow,也就是需要额外的权限。 通过设置用户 ID(SUID)和组 ID(SGID) 位可以给程序额外的权限。 当您执行一个启用了 SUID 的程序,你继承了程序所有者的权限。启动改程序的用户就可以不用设置 SUID 直接运行该程序。 这对于 SGID 同样是适用的。通常程序是按组的权限进行执行,除非你的组改变了该程序所属组的拥有者。 如果 SUID 和 SGID 权限是可用的,它们将会以小写的 “s” 出现。SUID 的 “s” 位通常位于权限中所有者执行权限的旁边。如下: 复制代码 代码如下:$ ls -l /usr/bin/passwd -r-sr-xr-x 1 root bin 19031 Feb 7 13:47 /usr/bin/passwd* 上面的显示了 SUID 被设置了并且该命令被 root 用户所拥有。在使用大写字母 S 而不是小写字母表示执行位没有设置。 如果对一个目录设置了防删除位(sticky bit),那么只有你是如下任意一种用户时你才可以删除该文件: 该目录的拥有者 复制代码 代码如下:$ chmod ug+s dirname $ ls -l drwsr-sr-x 2 root root 4096 Jun 19 06:45 dirname |
请发表评论