RedHat Enterprise Linux Computing Essentials 总揽之查看文件系统


 

 

三、查看文件系统

主要概念

  • Linux 目录树的基础是一个叫作/ 的目录,被称为“根目录(root directory)”。
  • 绝对(absolute)文件引用,如/home/elvis/lsout.txt,指的是相对于根目录的文件。
  • 相对(relative)文件引用,如lsout.txt,指的是相对于进程当前工作目录的文件。
  • ls 命令用来列出目录内容。
  • cat 命令用来检查文件内容。
  • 用shell 命令行的> 字符可以把命令的输出从终端重定向到文件。
  • 用户的主目录是用户可以创建新文件的几个地点之一。

讨论

 

文件和目录的命名
在Linux 中,信息和程序作为文件储存在磁盘上。文件被归类到目录中,目录中包含文件和其它目录。(其它操作系统经常将目录称为“文件夹”。)这种包括多层次目录的目录结构经常被称为“目录树(directory tree)”。

目录树的根部是名为/ 的目录,被称作“根目录(root directory)”。根目录中的文件被称作/filename。在红帽企业版Linux 中,根目录下主要是其它目录,如/etc。这些次目录中的文件被称作/etc/filename,目录树的每一层都是如此命名的。例如,文件network 位于目录sysconfig 中,这个目录位于etc 中,而etc 目录又位于/ 中,那么文件的引用为/etc/sysconfig/network。

显然,每次都从根目录开始引用文件会很麻烦,幸运的是,Linux 提供了一种更简便的方式。每个进程,包括用户的shell,都用“当前工作目录(current working directory)”作为环境。位于进程当前工作目录的文件可以被直接引用为 filename,前面不用加斜线。位于当前工作目录的次目录中的文件可引用为dirname/filename,前面也不用加斜线。举例来说,如果进程的当前工作目录是/etc,前面提到的文件network,可以被引用为sysconfig/network。如果工作目录是/etc/sysconfig,那么这个文件就可以简单地引用为network。

总而言之,引用文件的方式有两种。相对于根目录的文件引用总是以/ 开头,这种引用方式叫做绝对引用。相对于当前工作目录的文件引用不以/ 开头,这种引用方式叫做相对引用。

用ls 列出目录内容
用户从shell 使用命令 ls 列出目录的内容。(ls 是动词 “list(列出)”的缩写。)在下面的例子中,用户elvis 想列出目录/etc/sysconfig/rhn 的内容。

Source code

 

[elvis@station elvis]$ ls /etc/sysconfig/rhn

rhn-applet  systemid  up2date-keyring.gpg  up2date-uuid

rhnsd       up2date   up2date.rpmnew

 

在没有参数的情况下((即,不指定目录))调用ls 命令时,该命令列出shell 当前工作目录的内容。如果使用彩色终端,ls 还会以不同颜色显示文件名,帮助区分常规文件(白色)和目录(蓝色)。

ls 是一个非常灵活的命令,可以提供大量不同的信息,这将在以后的课程中详细讨论。

用 cat 查看文件内容ls 命令显示一个给定目录中所含的文件,但不会显示这些文件的内容。有几个命令可用来浏览文件内容,最简单的是 cat 命令。给这个命令一个文件列表,它会将这些文件并置(concatenates)到终端输出。如果只给出一个文件名,文件的内容会作为输出显示出来。

在下面的例子中,用户elvis 想浏览配置文件/etc/hosts 的内容。

Source code

 

[elvis@station elvis]$ cat /etc/hosts

# Do not remove the following line, or various programs

# that require network functionality will fail.

127.0.0.1       localhost.localdomain   localhost

192.168.0.254   server1.example.com  server1

192.168.0.1     station1.example.com station1

 

现在不必担心文件的内容是什么,只要意识到命令cat 可以显示文件的全部五行内容就可以了。

如果你指示 cat 显示一个很长的文件或二进制(非文本)文件,cat 也会照常执行。还有更先进的浏览大型文件的命令,可以逐页浏览,这将在以后介绍。

将命令输出重定向到文件中
当执行 ls 和 cat 命令时,命令的输出在终端上显示。在Linux 系统内,大部分生成文本输出的命令都会使用一个常用的Unix 概念,叫做“标准输出(standard out)”流。在默认状态下,这个数据流连接到终端。bash shell 允许用户将标准输出流“重定向“(redirect)到其它地点。我们现在只学习最简单的方法,使用> 将标准输出重定向到文件中。

在下面的例子中,用户elvis 要再次列出目录/etc/sysconfig/rhn 的内容,但是这次他把输出重定向到一个新建的文件中。

Source code

 

[elvis@station elvis]$ ls /etc/sysconfig/rhn > lsout.txt

[elvis@station elvis]$ ls

lsout.txt

[elvis@station elvis]$ cat lsout.txt

rhn-applet

rhnsd

systemid

up2date

up2date-keyring.gpg

up2date.rpmnew

up2date-uuid

 

命令 ls /etc/sysconfig/rhn 的输出没有在终端上显示,而是保存到一个名为lsout.txt 的新建文件中。elvis 接着在当前工作目录上使用ls,查看这个新建的文件,再使用命令cat 浏览文件内容。用Unix 的说法就是,elvis “将命令ls 的输出重定向到文件lsout.txt 中。”

权限和用户的主目录。
注意,如果elvis 试图把输出重定向到shell 当前工作目录以外的文件中,会出现什么情况。

Source code

 

[elvis@station elvis]$ ls /etc/sysconfig/rhn > /etc/lsout.txt

-bash: /etc/lsout.txt: No such file or directory

 

用户elvis 会遇到另一个常见的Linux 概念:文件所有权和权限。elvis 试图创建新文件/etc/lsout.txt,但是他没有在目录/etc 中创建文件的权限。

在默认情况下,红帽企业版Linux 不允许用户随便在任意地点新建文件。事实上,能够新建文件的地点只有几个。每个用户都有主目录,他们可以在那里创建新文件(和次目录)。幸运的是,当用户 登录到Linux 会话时,shell 将用户的主目录作为它的当前工作目录。默认情况下,在红帽企业版Linux 里,用户的主目录被命名为/home/username,username 用用户的用户名代替。

以后的教程中会详细讨论文件系统和权限。现在只需知道,用户一般只能在自己的主目录中创建文件。

Examples
将命令输出重定向到文件中。

用户prince 想用cal 命令将本月的日历保存到文件calendar.txt 中。

Source code

 

[prince@station prince]$ cal                1

      May 2003

SuMoTu We Th Fr Sa

             1  2  3

 4  5  6  7  8  9 10

11 12 13 14 15 16 17

18 19 20 21 22 23 24

25 26 27 28 29 30 31

 

[prince@station prince]$ cal > calendar.txt 2

[prince@station prince]$ ls                 3

calendar.txt

[prince@station prince]$ cat calendar.txt   4

      May 2003

SuMoTu We Th Fr Sa

             1  2  3

 

4  5  6  7  8  9 10

11 12 13 14 15 16 17

18 19 20 21 22 23 24

25 26 27 28 29 30 31

 

  1. prince 先直接浏览了命令cal 的输出。
  2. prince 再次运行cal 命令,将输出重定向到文件calendar.txt 中。
  3. prince 列出自己当前工作目录(此处是主目录)的内容,确认这个新建文件已经被创建。
  4. prince 检查这个新建文件的内容,确定它的确含有cal 命令的输出。

练习
ls 命令
[Warning]   上机练习

Source code

练习目的:将命令输出重定向到新建文件中。

 

Estimated Time: 5 mins.

具体操作
使用 ls 命令列出目录/etc 的内容,将命令的输出重定向到你的主目录下名叫lsetc.txt 的文件中。

结果
A title
Question 1

  1. 你主目录中有文件lsetc.txt,含有命令ls /etc 的输出。

参考答案
以下命令是这个练习的参考答案。

[student@station student]$ ls /etc > lsetc.txt

 

问题
多项选择题
A title

Question 1
假设shell 的当前工作目录是/home/elvis,以下哪个是文件/home/elvis/Mail/sent 的引用?

  1. A.Mail/sent
  2. B./Mail/sent
  3. C.sent
  4. D./sent

Question 2
用户elvis 的shell 当前工作目录是/home/elvis,以下哪个是文件received 的引用?这个文件位于主目录下的Mail 目录中。

  1. A./home/elvis/Mail/received
  2. B.Mail/received
  3. C.received
  4. D.both A and B.

Question 3
以下哪个命令会列出目录/usr/lib 中的文件?

  1. A.cat /usr/lib
  2. B.lsdir /usr/lib
  3. C./usr/lib list
  4. D.ls /usr/lib

Question 4
以下哪个命令会成功地把命令cal 的输出重定向到文件lsout.txt 中?

  1. A.lsout.txt > cal
  2. B.cal ==> lsout.txt
  3. C.cal > lsout.txt
  4. D.cal } lsout.txt

Question 5
用户elvis 的主目录是/home/elvis,以下哪个命令可以成功地在默认的红帽企业版Linux 系统上运行?

  1. A.ls /etc > /etc/lsetc.txt
  2. B./etc/lsetc.txt < ls /etc
  3. C.ls /etc > /home/elvis/lsetc.txt
  4. D./home/elvis/lsetc.txt < ls /etc

相关内容

    暂无相关文章