关闭

2.6 使用Linux文件系统

625人阅读 评论(0) 收藏 举报

2.6  使用Linux文件系统

Linux文件系统是计算机上所有信息的储存结构。它使用目录层次结构来组织各个文件。每个目录都可以包含文件和其他目录。

文本框:
图2-1  以目录层次结构方式组织的Linux文件系统
如果画出Linux中的文件和目录,它看起来就像一颗倒置的树。顶部是根目录,这用一个斜线表示(/)。在根目录下面是一组Linux系统常用目录,例如bin、dev、home、lib和tmp。这些目录以及添加到根中的目录都可以包含子目录。

图2-1说明了如何以层次结构的方式组织Linux文件系统。为了阐明目录的连接方式,该图显示一个/home目录,它包含3个用户的子目录:chris、mary和tom。在chris目录中有子目录:briefs、memos和personal。要引用chris/memos目录中的inventory文件,可输入完整路径/home/chris/ memos/inventory。如果当前目录是/home/ chris/memos,那么输入inventory即可引用该文件。

一些有用的Linux目录包括:

·    /bin:包含常用的Linux用户命令,例如ls、sort、date和chmod。

·    /boot:包含可引导的Linux内核和引导装载(boot loader)配置文件(GRUB)。

·    /dev:包含代表系统设备访问点的文件。这包括终端设备(tty*)、软盘(fd*)、硬盘(hd*)、RAM(ram*)和CD-ROM(cd*)(用户通常通过设备文件直接访问这些设备)。

·    /etc:包含管理配置文件。

·    /home:包含分配给每个拥有登录账号用户的目录。

·    /media:提供挂载(mounting)和自动挂载设备的标准位置,如远程文件系统和可移动介质(目录名为cdrecorder、floppy等)。

·    /mnt:在被标准的/media目录替代前,这是很多设备常用的挂载点。某些可引导的Linux系统仍旧使用该目录来挂载硬盘分区和远程文件系统。

·    /proc:包含有关系统资源的信息。

·    /root:表示根用户的主目录。

·    /sbin:包含管理命令和守护进程。

·    /sys:一个类似于/proc的文件系统,在Linux 2.6内核中最新出现的,包含的文件用于获得硬件状态并反映内核看到的系统设备树。它使用了/proc中的很多功能。

·    /tmp:包含应用程序使用的临时文件。

·    /usr:包含用户文档、游戏、图形文件(X11)、库(lib),以及各种其他用户和管理命令及文件。

·    /var:包含不同应用程序使用的数据目录。特别要注意的是,这里放置作为FTP服务器(/var/ftp)或Web服务器(/var/www)共享的文件。它还包含所有系统日志文件(/var/log)。

DOS或Microsoft Windows操作系统中的文件系统结构与Linux的文件结构不同,正如选读内容“Linux文件系统与基于Windows的文件系统”中所述。

Linux文件系统与基于Windows的文件系统

尽管在很多方面相似,但是Linux文件系统与MS-DOS和Windows操作系统所用的文件系统还是有一些显著的差别。下面列出了其中的一些差别:

·    在MS-DOS和Windows文件系统中,驱动器盘符表示不同的储存设备(例如,A: 是软驱,C: 是硬盘)。在Linux中,所有的储存设备都被置于文件系统层次结构中。因此所有/usr可能在单独的硬盘上,或者/mnt/reml是其他计算机上的文件系统,这对用户完全是隐藏的。

·    斜线(不是反斜线)用于分隔Linux中的目录名。所以,在MS系统中的C:/home/chris在Linux系统中是/home/chris。

·    在DOS中文件名几乎总是有后缀(如用于文本文件的.txt或者用于字处理文件的.doc)。虽然有时可以在Linux中使用该约定,但是3字符的后缀在Linux中已经没有所需的含义。识别文件类型时它们很有用。很多Linux应用程序和桌面环境都使用文件后缀来确定文件的内容。

·    Linux系统中的所有文件和目录都有与之关联的许可和所有权。Microsoft各系统之间的安全性则有所不同。因为DOS和MS Windows开始是用作单用户的系统,所以设计这些系统时并没有在系统中内建文件所有权。后续的版本添加了一些功能(如文件和文件夹属性)来解决该问题。

2.6.1  创建文件和目录

作为Linux用户,保存和使用的大部分文件可能都位于用户的主目录中。表2-9显示了创建和使用文件及目录的命令。

表2-9                                                     创建和使用文件的命令

命令

结果

cd

改变到另一个当前工作目录

pwd

打印当前工作目录的名字

mkdir

创建一个目录

chmod

改变文件或目录的许可

ls

列出目录的内容

下面的步骤可在主目录中创建目录,并在各个目录间移动,还包括了如何设置相应的文件许可:

1.回到主目录。为此只需输入cd即可(如需了解引用主目录的其他方法,请参见选读部分“识别目录”)。

识别目录

需要在shell命令行中识别主目录时,可使用下列命令:

·    $HOME:该环境变量存储了主目录名。

·    ~:波浪线代表命令行中的主目录。

也可以使用波浪线(~)来识别其他人的主目录。例如,可将~chris扩展为chris的主目录(可能是/home/chris)。

shell中的其他特殊目录识别方法如下:

·    一点(.):指当前目录。

·    两点(..):指当前目录的上级目录。

·    $PWD:该环境变量代表当前工作目录。

·    $OLDPWD:该环境变量代表改变到当前目录之前的那个工作目录。

2.要确定已回到了主目录,可输入pwd。执行该命令后会得到下面的响应(您所获得响应会反映您的主目录):

$ pwd

/home/chris

3.在主目录中创建一个新目录test,方法如下:

$ mkdir test

4.检查该目录的许可。

$ ls -ld test

drwxr-xr-x 2 chris sales 1024 Jan 24 12:17 test

该列表显示test是一个目录(d)。d后面是许可(rwxr-xr-x),这在后面的“了解文件许可”一节中会加以解释。其余的信息指出拥有者是chris,组是sales,最后一次修改该目录中文件的日期(是在1月24日的下午12:17)。

在某些Linux系统中(如Fedora Core),添加一个新用户时,用户被分配给一个默认有相同名字的组。例如在前面的描述中,用户chris会被分配给chris组。这种组分配方法称为用户私有组方案。如需了解有关用户私有组的更多信息,请参见第4章。

现在输入下列内容:

$ chmod 700 test

该步骤将目录许可改为目录所有者可以完全访问,而其他人则根本不能访问(新的许可应该是:rwx------)。

5.将test目录作为当前目录,如下所示:

$ cd test

2.6.1.1  使用元字符和运算符

要想高效地使用shell,bash shell允许使用一些称为元字符和运算符的特殊字符。元字符可用于匹配一个或者更多文件,而无需完全输入每个文件。运算符可以将信息从一个命令或文件定向到另一个命令或文件。

2.6.1.2  使用文件匹配元字符

为了节省击键操作,并且能够轻松地引用一组文件,bash shell允许使用元字符。只要需要引用文件或者目录,例如列出、打开或者删除它,就可以使用元字符来匹配所需的文件。下面是用于文件名匹配的有用元字符:

·    *:匹配任意多个字符。

·    ?:匹配任一字符。

·    […]:匹配括号中的任一字符,括号内可以包含用“-”来分开的字母或者数字范围。

首先到一个空目录(例如在上一节中介绍的test目录)并创建一些空文件,试用一些文件匹配元字符:

$ touch apple banana grape grapefruit watermelon

Touch命令创建空文件。下面的几行命令显示如何在ls命令中使用shell元字符来匹配文件名。尝试执行下列命令,查看是否获得相同的响应:

$ ls a*

apple

$ ls g*

grape

grapefruit

$ ls g*t

grapefruit

$ ls *e*

apple grape grapefruit watermelon

$ ls *n*

banana watermelon

第一个例子匹配所有以a(apple)开头的文件。第二个例子匹配所有以g(grape、grapefruit)开头的文件。下一个例子匹配以g开头并以t结束的文件(grapefruit)。第4个例子匹配文件名中包含e的所有文件(apple、grape、grapefruit、watermelon)。最后一个例子则匹配文件名中包含n的所有文件(banana和watermelon)。

下面是一些使用问号(?)进行匹配的例子:

$ ls ????e

apple grape

$ ls g???e*

grape grapefruit

第一个例子匹配所有以e(apple和grape)结尾的5字符文件。第二个例子匹配所有以g开头并且第5个字符是e的文件(grape和grapefruit)。

下面是一些使用括号进行匹配的例子:

$ ls [abw]*

apple banana watermelon

$ ls [agw]*[ne]

apple grape watermelon

第一个例子匹配所有以a、b、w开头的文件。第二个例子匹配所有以a、g或w开头并且以n或e结尾的文件。也可以用括号包括一个范围。例如:

$ ls [a-g]*

apple banana grape grapefruit

该例可匹配所有以字母a到g开头的文件名。

2.6.1.3  使用文件重定向元字符

命令从标准输入中接收数据,并且将它送到标准输出。使用管道(在前面描述过)可以将一个命令的标准输出定向到另一个命令的标准输入。对于文件,可以使用小于(<)和大于(>)号从文件定向数据或者将数据定向到文件。下面是这些文件重定向字符:

·    <:将文件内容定向到命令。

·    >:将命令的输出定向到文件,删除现有的文件。

·    >>:将命令的输出定向到文件,并将输出添加到现有文件的末尾。

下面的示例命令行将信息定向到文件或从文件获得信息:

$ mail root < ~/.bashrc

$ man chmod | col -b > /tmp/chmod

$ echo "I finished the project on $(date)" >> ~/projects

在第一个例子中,将主目录内.bashrc文件的内容以邮件消息的方式发送给计算机的根用户。第二个命令行格式化chmod手册页(使用man命令),删除多余的退格(col  -b),并将输出发送到文件/tmp/chmod中(如果存在/tmp/chmod文件,则删除以前的文件)。最后一个命令将下面的文本添加到用户的projects文件中:

I finished the project on Sat Jan 25 13:46:49 PST 2006

2.6.1.4  了解文件权限

使用Linux一段时间后,一定见过permission denied消息。在Linux中,与文件和目录关联的权限用来防止用户访问其他用户的私有文件,同时保护重要的系统文件。

为每个文件权限所分配的9位数据定义了所有者和其他用户对文件的访问权限。权限位显示为rwxrwxrwx。前三位适用于所有者的权限,接下来的三位适用于文件组,最后三位适用于所有用户。r代表读权限、w代表写权限、x代表执行权限。如果出现的是横线而不是字母,则表示与读、写或执行相关的权限被关闭。

因为文件和目录是不同的元素类型,所以文件和目录上的读、写和执行权限具有不同的含义。表2-10说明了每种权限的用途:

表2-10                                                   设置读、写和执行权限

权限

文件

目录

查看文件的内容

查看其中包含的文件和子目录

改变文件内容、重命名文件或删除文件

向该目录中添加文件或子目录

执行

以程序的方式运行文件

将该目录改为当前目录、搜索该目录或执行该目录中的程序

输入ls  -ld命令可以查看任何文件或目录的权限。在这个例子中,已命名的文件或目录如下所示:

$ ls -ld ch3 test

-rw-rw-r--   1   chris sales   4983 Jan 18 22:13 ch3

drwxr-xr-x   2   chris sales   1024 Jan 24 13:47 test

第一行显示ch3文件对于所有者和组可读可写,而其他所有用户具有读权限,表示他们可以查看文件但不能修改文件内容或删除文件。第二行显示了test目录(由权限位前的字母d表示)。所有者具有读、写和执行权限,而组和其他用户只有读和执行权限。因此,所有者可以添加、修改或删除该目录中的文件,而其他人只能读取目录内容、改变到此目录和列出该目录的内容。

如果您拥有一个文件,就可以根据需要使用chmod命令改变它的权限。执行该操作的一种方法是:每个权限(读、写和执行)都赋予一个值(r=4、w=2、x=1),并且使用每个设置的总和来建立该权限。例如:为了让所有者具有全部权限,可以设置第一个值为7(4+2+1),要想只给组和其他用户读权限,可将第二和第三个值设置为4(4+0+0),这样最终值是744。任何权限组合都可从0(没有权限)~7(完全权限)中得到。

下面是一些如何修改文件(命名为file)权限以及所得到的权限示例:

# chmod 777 file        rwxrwxrwx

# chmod 755 file        rwxr-xr-x

# chmod 644 file        rw-r--r-

# chmod 000 file        ---------

也可以分别使用加号(+)和减号(-)来打开和关闭文件权限。可以为所有者用户(u)、所有者组(g)、其他用户(o)和所有用户(a)执行该操作。例如,在一个所有权限都打开(rwxrwxrwx)的文件上,使用减号选项运行chmod命令,得到的权限显示在每条命令的右边:

chmod a-w file     r-xr-xr-x

chmod o-x file     rwsrwsrw-

chmod go-rwx file   rwx------

同样,下面的例子在所有权限都关闭(---------)的文件上,使用带有加号的chmod命令来打开权限:

chmod u+rw files        rw-------

chmod a+x files         --x--x--x

chmod ug+rx files   r-xr-x---

创建文件时,该文件默认被赋予rw-r--r--权限。而目录则被赋予rwxr-xr-x权限。这些默认值取决于umask的值。输入umask可查看umask的值。例如:

$ umask

022

Umask值屏敝文件的666权限值和目录的777权限值。所以umask值022为目录生成755(rwxr-xr-x)权限,同样的umask值为文件生成644(rw-r--r--)权限(默认情况下,普通文件的执行权限被关闭)。

时间节省:使用chmod命令的-R选项可以在目录结构中一次性修改所有文件和目录的权限。例如,如果希望完全打开/tmp/test目录中的所有文件和目录的权限,可以输入:

$ chmod -R 777 /tmp/test

该命令行对/tmp/test目录递归(-R)运行chmod,同时也为文件系统中该目录下的所有文件或目录(例如/tmp/test/hat、/tmp/test/hat/caps等)运行chmod。所有文件和目录都被设置成777(完全的读/写/执行权限)。不要在读/写文件系统上的重要目录中使用它。但是可以在CD-ROM上创建目录结构前使用它,这样日后使用该CD-ROM的其他用户具有完全可读和可执行的权力。

如果要完全打开权限或添加执行权限(以及适当的读/写权限),那么chmod的-R选项是最好的选择。原因是如果递归地关闭执行权限,那么就去掉了改变此结构中任何目录的能力。例如,chmod -R 644 /tmp/test关闭了/tmp/test目录的执行权限,从而无法改变其下的任何文件或目录。

2.6.2  移动、复制和删除文件

移动、复制和删除文件的命令相当简单。使用mv命令可以改变文件的位置。使用cp命令可以将文件从一个位置复制到另一个位置。使用rm命令则可以删除一个文件。下面是一些例子:

$ mv abc def

$ mv abc ~

$ cp abc def

$ cp abc ~

$ rm abc

$ rm *

上面的两个移动(mv)命令中,第一个命令是将文件abc移动到相同目录下的文件def中(本质上将它重命名了),而第二个命令将文件abc移动到主目录(~)中。第一个复制命令(cp)将文件abc复制为文件def,而第二个命令则将abc复制到主目录(~)中。第一个删除命令(rm)删除文件abc,第二个命令则删除当前目录下的所有文件(那些以点开始的文件除外)。

对于根用户,可通过mv、cp和rm别名设置命令与-i选项一起运行。这样会在每次移动、复制和删除文件时都会出现提示要求进行确认,一次一个文件,这样做是为了防止根用户因为错误操作而将大量文件搞乱。

利用mv的另一种方法是使用-b选项。有了-b选项,如果一个文件在目标文件夹有同名文件存在,那么在将新文件移动到该文件夹之前会为老文件生成一个备份副本。

 
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:116302次
    • 积分:1992
    • 等级:
    • 排名:第19514名
    • 原创:58篇
    • 转载:100篇
    • 译文:0篇
    • 评论:0条
    文章分类