当前位置:Linux教程 - Linux综合 - Linux文件与目录操作

Linux文件与目录操作

用户的资料和程序大多以文件的形式保存。用户使用Linux系统的过程中,需要经常对文件和目录进行操作。本节讲述了文件与目录的基本概念、有关文件和目录操作的命令以及如何在Linux环境下运行DOS命令。

文件与目录的基本概念

在多数操作系统中都有文件的概念。文件是Linux用来存储信息的基本结构,它是被命名(称为文件名)的存储在某种媒介(如磁盘、光盘和磁带等)上的一组信息的集合。Linux文件均为无结构的字符流形式。文件名是文件的标识,它由字母、数位、下划线和圆点组成的字串构成。用户 应该选择有意义的文件名。Linux要求文件名的长度限制在255个字符以内。

为了便于管理和识别,用户可以把扩展名作为文件名的一部分。圆点用于区分文件名和扩展名。扩展名对于将文件分类是十分有用的。用户可能对某些大众已接纳的标准扩展名比较熟悉,例如,C语言编写的源代码文件总是具有C的扩展名。用户可以根据自己的需要,随意加入自己的副文件名。

以下例子都是有效的Linux文件名。

reface

chapter1.txt

xu.c

xu.bak

1.文件的类型

Linux系统中有3种基本的文件类型:普通文件、目录文件和设备文件。

普通文件是用户最经常面对的文件,它又分为文本文件和二进制文件。

(1)文本文件:这类文件以文本的ASCII码形式存储在电脑中。它是以“行”为基本结构的一种信息组织和存储方式。

(2)二进制文件:这类文件以文本的二进制形式存储在电脑中,用户一般不能直接读懂它们,只有通过相应的软件才能将其显示出来。二进制文件一般是可执行程序、图形、图像、声音等。

设计目录文件的主要目的是用于管理和组织系统中的大量文件。它存储一组相关文件的位置、大小等与文件有关的信息。目录文件往往简称为目录。

设备文件是Linux系统很重要的一个特色。Linux系统把每一个I/O设备都看成一个文件,并与普通文件一样处理,这样可以使文件与设备的操作尽可能统一。从用户的角度来看,对I/O设备的使用和一般文件的使用一样,不必了解I/O设备的细节。设备文件可以细分为块设备文件和字符设备文件。前者的存取是以一个个字符块为单位的,后者则是以单个字符为单位的。

2.树型目录结构

在电脑系统中存有大量的文件,如何有效地组织与管理它们,并为用户提供一个使用方便的接口是文件系统的一大任务。Linux系统以文件目录的方式来组织和管理系统中的所有文件。所谓文件目录就是将所有文件的说明信息采用树型结构组织起来,即我们常说的目录。也就是说,整个文件系统有一个“根”(root),然后在根上分“杈”(Directory),任何一个分杈上都可以再分杈,杈上也可以长出“叶子”。“根”和“杈”在Linux中被称为是“目录”或“文件夹”。而“叶子”则是一个个的文件。实践证明,此种结构的文件系统效率比较高。

如前所述,目录也是一种类型的文件。Linux系统通过目录将系统中所有的文件分级、分层组织在一起,形成了Linux文件系统的树型层次结构。以根目录为起点,所有其他的目录都由根目录派生而来。一个典型的Linux系统的树型目录结构如图10-1所示。用户可以浏览整个系统,也可以进入任何一个已授权进入的目录,访问那里的文件。

图10-1 目录树结构

上图中,我们只给出了目录节点名称,而没有给出各个目录之下的每一个文件。实际上,各个目录节点之下都会有一些文件和子目录。并且,系统在创建每一个目录时,都会自动为它设置两个目录文件,一个是“.”,代表该目录自己,另一个是“..”,代表该目录的父目录。对于根目录,“.”和“..”都代表其自己。

Linux目录提供了一个管理文件的方便途径。每个目录里面都包含文件。用户可以为自己的文件创建自己的目录,也可以把一个目录下的文件移动或复制到另一目录下,而且能移动整个目录,并且可以和系统中的其他用户共用目录和文件。也就是说。我们能够方便地从一个目录切换到另一个目录,而且可以设置目录和文件的管理许可权,以便允许或拒绝其他人对其进行访问。同时文件目录结构的相互关联性使分享资料变得十分容易,几个用户可以访问同一个文件。因此允许用户设置文件的共享程度。

需要说明的是,根目录是Linux系统中的特殊目录。Linux是一个多用户系统,操作系统本身的驻留程序存放在以根目录开始的专用目录中,有时被指定为系统目录。在图10-1中那些根目录下的目录就是系统目录。

3.工作目录、用户主目录与路径

如前所述,目录是Linux系统组织文件的一种特殊文件。为使用户更好地使用目录,我们介绍有关目录的一些基本概念。

(1)工作目录与用户主目录

从逻辑上讲,用户在登录到Linux系统中之后,每时每刻都处在某个目录之中,此目录被称做工作目录或当前目录(Working Directory)。工作目录是可以随时改变的。用户初始登录到系统中时,其主目录(Home Directory)就成为其工作目录。工作目录用“.”表示,其父目录用“..”表示。

用户主目录是系统管理员增加用户时创建起来的(以后也可以改变),每个用户都有自己的主目录,不同用户的主目录一般互不相同。

用户刚登录到系统中时,其工作目录便是该用户主目录,通常与用户的登录名相同。

用户可以通过一个~字符来引用自己的主目录。

例如命令

/home/WANG$ cat ~/class/software_1

和下面的命令

/home/WANG$ cat /home/WANG/class/software_1

意义相同。Shell将用用户主目录名来替换~字符。目录层次创建好之后,用户就可以把有关的文件放到相应的目录中,从而实现对文件的组织。

(2)路径

顾名思义,路径是指从树型目录中的某个目录层次到某个文件的一条道路。此路径的主要构成是目录名称,中间用“/”分开。任一个文件在文件系统中的位置都是由相应的路径决定的。

用户在对文件进行访问时,要给出文件所在的路径。 路径又分相对路径和绝对路径。 绝对路径是指从“根”开始的路径,也称为完全路径;相对路径是从用户工作目录开始的路径。

应该注意到,在树型目录结构中到某个确定文件的绝对路径和相对路径均只有一条。绝对路径是确定不变的,而相对路径则随着用户工作目录的变化而不断变化。这一点对于我们以后使用某些命令如cp和tar等大有好处。

用户要访问一个文件时,可以通过路径名来引用,并且可以根据要访问的文件与用户工作目录的相对位置来引用它,而不需要列出这个文件的完整路径名。例如,用户WANG有一个名为class的目录,该目录中有两个文件:software_1和hardware_1。若用户WANG想显示出其class目录中的名为software_1的文件,可以使用下列命令:

/home/WANG$ cat /home/WANG/class/software_1

用户也可以根据文件software_1与当前工作目录的相对位置来引用该文件。这时命令为:

/home/WANG$ cat class/software_1

文件和目录操作相关命令

1.显示文件内容命令

用户需要查看一个文件的内容时,可以根据显示要求的不同选用以下的命令。

(1)cat命令

功能1:在标准输出上显示文件。

语法:cat [ - 选项 ]文件

说明:该命令功能之一是用来显示文件。它依次读取其后所指文件的内容并将其输出到标准输出。

cat命令中各个选项的含义为:

- v 用一种特殊形式显示控制字符,LFD与TAB除外。加了- v选项后,- T和- E选项将起作用。其中:

- T 将TAB显示为 ^I,该选项需要与- v选项一起使用,即如果没有使用- v选项,则这个选项将被忽略。

- E 在每行的末尾显示一个$符,该选项需要与- v选项一起使用。

- u 输出不经过缓冲区。

- A 等于- vET。

- t 等于- vT。

- e 等于- vE。

功能2:连接两个或多个文件。

说明:该命令功能之二是用来将两个或多个文件连接起来。

$ cat file1 file2 > file3

这样就把文件filel和文件file2的内容合并起来,放入文件file3中。(此时在屏幕上并不能直接看到该命令执行后的结果。若想看到连接后的文件内容,可以再使用cat file3。)

需要说明的是,当文件内容过多时,就带来一个问题,因为文本在屏幕上迅速地闪过,用户来不及看清其内容。因此,当文件内容较大时,一般可用more命令分屏显示,以免因屏幕滚动太快而无法看清。

(2)more命令

功能:在终端屏幕按屏显示文字文件。

语法:more [ - 选项 ]文件

说明:该命令一次显示一屏文本,显示满之后,停下来,并在终端底部显示出- - More- - ,系统还将同时显示出已显示文本占全部文本的百分比。若要继续显示,按输入或空白键即可。

more命令中各个选项的含义为:

- p 显示下一屏之前先清屏。

- c 作用同- p基本一样。

- d 在每屏的底部显示更友好的提示信息:

- - More- - (XX%)[Press space to contiune , ‘q’ to quit . ]

而且若用户输入了~个错误命令,则显示出错信息,而不是简单地鸣响。

- l 不处理< Ctrl+l >(换页符)。如果没有给出这个选项,则more命令在显示了一个包含有< Ctrl+l >字符的行后将暂停显示,并等待接收命令。

- s 文件中连续的空白行压缩成一个空白行显示。

2.执行中的命令

在more命令的执行过程中,用户可以使用more自己的一系列命令动态地根据需要来选择显示的部分。more在显示完一屏内容之后,将停下来等待用户输入某个命令。下面列出了more命令在执行中用到的一些常用命令,而有关这些命令的完整内容,可以在more执行时按h查看。这些命令的执行方法是先输入i(行数)的值,再输入所要的命令,不然它会以默认值来执行命令。

i空格 若指定i,显示下面的i行;否则,显示下一整屏。

i输入键 若指定i,显示下面的i行;否则,显示下一行。

iÙ D 按【Ctrl+D】,若指定i,显示下面的i行;否则,往下显示半屏(一般为11行)。

id 同iÙ D 。

iz 同“i空格”类似,只是i将成为以下每个满屏的默认行数。

is 跳过下面的i行再显示一个整屏,默认值为1。

if 跳过下面的i屏再显示一个整屏,默认值为1。

iÙ B 按【Ctrl+B】,往回跳过(即向文件首回跳)i屏,再显示一个满屏,默认值为1。

与iÙ B相同。

’ 回到上次搜索的地方

q或Q 退出more。

= 显示当前行号。

v 在当前行启动/usr/bin/vi对之进行编辑修改。

h 显示各命令的帮助信息。

i/pattern 查找匹配该模式的第i行,默认值为1。

in 查找符合运算式的倒数i行,默认值为1。

!或! 在子Shell中执行命令。

i:n 在命令行中指定了多个文件名的情况下,可用此命令使之显示第i个文件,若i过大(出界),则显示文件名列表中的最后一个文件。

i:p 在命令行中指定了多个文件名的情况下,可用此命令使之显示倒数第i个文件。若i过大(出界),则显示第一个文件。

i:f 显示当前文件的文件名和行数。

· 重复上次键入的命令。

例10-10:用分页的方式显示一个文件的内容。

$ more example1.c

/*-------------------------------------------*/

/* example1.c */

/*-------------------------------------------*/

/* author f [email protected] */

/* target f BBS main/login/top-menu routines */

/* create f 99/10/23 */

/* update f 99/12/15 */

/*-------------------------------------------*/

#define _MAIN_C_

#inc1ude < BBS. h >

jmp_buf byebye;

int talkrequest=NA;

tatic uschar Enter_uflag i

#ifdef SHOW_IDLE_TIME

--More- (3%)

3.less命令

less命令的功能几乎和more命令一样,也是用来按页显示文件,不同之处在于,less命令在显示文件时允许用户既可以向前又可以向后翻阅文件。

less命令的使用与more命令类似,在此就不赘述了,用户如有不清楚的地方可直接查看帮助。

用less命令显示文件时,若需要在文件中往前移动,按【b】键;要移动到用文件的百分比表示的某位置,则指定一个0~100之间的数,并按【p】键即可。

例如,需要按页显示test文件:

$ less test

4.head命令

如果用户希望查看一个文件究竟保存的是什么内容,可以只查看文件的头几行,而不必浏览整个文件。用head命令只显示文件或标准输入的头几行。

语法:head [- n ] 文件

功能:显示指定文件的前n行。

说明:该命令显示每个指定文件的前面n行。如果没有给出n值,默认为10。如果没有指定文件,head就从标准输入读龋

例如,显示文件example.c的前3行:

$ head - 3 example.c

/*-------------------------------------------*/

/* example1.c */

/*-------------------------------------------*/

 

(出处:http://www.sheup.com)