第三章 目录和文件的浏览管理及维护
3.1 Linux文件系统的层次结构
Linux的文件系统被组织成一个倒置的树状结构。如下:
文件系统最顶层由根目录开始,用“/”来表示根目录。
每个目录之间用“/”来分隔,如wong的完整路径是home/wong。
Linux文件系统中还有两个特殊的目录,即当前目录(用户所在的工作目录,可用一个点“.”来表示)、父目录(当前目录的上一个目录,可用两个点“..”表示)。
如果一个目录或文件以一个点开始,就表示它是一个隐藏目录或文件。以默认方式查找时,不显示该目录或文件。
3.2 Linux系统中的一些重要的目录
Linux系统采用了文件系统层次标准(Filesystem Hierarchy Standard FHS)的文件结构。
- bin、sbin
FHS一共定义了两层规范:
- 第一层:根目录下的各个目录应该存放哪些类型的文件(或子目录)。如,/bin和/sbin应该存放可执行文件,Linux 系统中有多个bin目录和sbin目录,存放的文件都是可执行文件。
- 第二层:/usr和/var的子目录中的数据。如/usr/share中应该存放共享数据。
- home
home目录也叫“家目录”,当用户登录Linux系统后就自动进入家目录。
超级用户root的家目录是/root,普通用户的家目录被存放在/home目录之下,并使用用户名作为最后一级家目录的名称,如henry用户的家目录为/home/henry。 - 挂载点(mount points)
当Linux系统检测到可移除式硬件被加入到文件系统中时,就会自动产生一个挂载点(目录),通常会被挂载在/media或/mnt目录下。如光盘会挂载在/media/CDRom之下。
其他一重要的目录:
- /etc
存放系统的配置文件。只有root用户可以修改其中的文件,普通用户只能查看。 - tmp
所有用户都可以访问该目录,因此不应该存放重要信息。 - /boot
存放Linux系统的内核和系统启动时所使用的文件。 - /dev
存放这台计算机中所有的设备。在Linux系统中所有的东西都被看成文件,其中也包括硬件。 - usr (unix system resources)
存放系统的应用程序和与命令相关的系统数据。包括系统的函数库和图形界面所需的文件。 - /Lost + Found
当系统异常关机、崩溃或出现错误时,会将一些遗失的片段存放在该目录中。 - /var
存放系统运行过程中经常变化的文件,如log和mail。 - srv
存放所有与服务器相关的服务,即一些服务启动之后,这些服务需要访问的目录。 - /proc
一个虚拟的文件系统,常驻在内存中,不占用任何磁盘空间。该目录下存放了系统运行所需要的信息,这些信息反映了内核的环境。 - lib、/usr/lib、/usr/local/lib
存放libraries,即系统使用的函数库。
3.3 目录和文件的命名以及绝对和相对路径
- Linux系统中目录和文件的部分命名原则:
(1)文件的扩展名对Linux系统没有特殊含义。例如:filename.exe 只是一个文件,其扩展名并不代表此文件是可执行文件。 - 绝对路径和相对路径
- 绝对路径:包括从文件系统的根结点开始到要查找的对象所需遍历的每一个目录的名字。必须以一个正斜线“/”开始。
- 相对路径:包括从当前目录到要查找的对象所需遍历的每一个目录的名字。
3.4 使用pwd和cd命令来确定和切换目录
- 命令名称:pwd
- 英文解释:print working directory
- 功能:显示当前目录的绝对路径
程序示例:
命令名称:cd
- 英文解释:change directories
- 功能:切换到其他目录
- 程序示例
- 使用绝对路径:
- 使用“..”进入上一级目录
- 使用相对路径
绝对路径必须以“/”开始,此处cd stephen为相对路径。 - 使用“~”或空白切换到用户的家目录。
- 使用Linux系统变量$HOME切换回用户的家目录。
- 使用“-” 切换到用户上一次的工作目录。
- 使用绝对路径:
饶有趣味的一种描述是:cd命令使读者能够在Linux系统中闲逛,而pwd命令可以帮助确定当前所在的位置。
3.5 使用ls命令列出目录中的内容
- 命令名称:ls
- 英文解释:list
- 功能:列出当前目录(默认为当前目录)或指定目录中的内容。
- 语法格式:
ls[options][directories|files]
- options:选项,注意这里的options用的是 复数,表示可以同时使用多个选项。
- directories|files:目录或文件,表示同时列出使用多个目录或文件。
- 程序示例:
- ls最简单的使用情况:列出当前目录下的所有目录和文件
命令:ls
- 同时列出当前目录和父目录中的内容:
命令:ls . ..
- 列出指定目录下的内容,并同时显示其文件类型。
命令:ls -F 目录路径
输入如下命令,列出/bin目录中的文件及内容
文件类型符号所代表的文件类型如下:
- /:表示目录。
- *:表示可执行文件。
- 什么也没有:表示纯文本文件或ASCII码文件。
- @:表示符号链接。
- 显示隐藏文件
使用ls查看用户家目录中的内容时,发现什么都没有。其实不然,在用户的家目录下,Linux系统创建了一些隐藏文件。可以使用ls的选项进行显示。
- 选项名称:-a 或 –all
- 英文解释:all
- 功能:列出指定目录中的所有文件,包括隐藏文件。
- 程序示例:
- 显示文件的详细资料
- 选项名称:-l
- 英文解释:long
- 功能:列出目录中所有文件(默认只显示非隐藏文件)的细节
- 程序示例:
显示所有非隐藏文件的细节
显示所有文件的细节,包括隐藏文件
- 以人们熟悉的方式表示文件大小
- 选项名称:-h
- 英文解释:human
- 功能:以人们熟悉的方式表示文件大小。
- 选型由来:上图中的4096、382、220等是文件的大小,但这样的表示并不好立即,于是可以使用选项-h,将文件大小变为人们熟悉的方式。
- 程序示例:
- 只表示当前目录本身的大小
- 选项名称:-d
- 功能:只列出当前目录本身的属性,不列出包含的文件或目录的信息。
- 程序示例:
- ls最简单的使用情况:列出当前目录下的所有目录和文件
3.6 使用cp命令复制文件和目录
- 命令名称:cp
- 英文解释:copy
- 功能:将一个(或多个)文件或目录从一个位置复制到另一个位置。
- 语法格式:
cp [-options(s)] source(s) target
- source(源):一个或多个文件(或目录名)。
- target(目的):一个文件或一个目录 。
- -options(选项):常用选项有:
- 选项名称:-i
- 英文解释:interactive — 交互的
- 功能:若操作会覆盖已经存在的文件或目录,在覆盖之前给出提示。
- 命令由来:防止不小心覆盖已经存在的文件或目录。
- 选项名称:-r
- 英文解释:recursive — 递归的
- 功能:当赋值一个目录时,复制该目录中的所有内容,包括子目录中的全部内容。
- 选项名称:-p
- 英文解释:preserve — 维持
- 功能:保留一些特定的属性,如时间戳(timestamp)等。
- 选项名称:-f
- 英文解释:force — 强制
- 功能:若目标文件已存在,系统并不询问,而是强制复制,即直接覆盖原有的文件。
- 程序实现:
程序解释:
- 命令2:ls -l c* —— 显示当前目录中的所有,文件名以c开始的文件。
- 命令3:cp cal2012 cal2013 —— 将文件cal2012复制为新的cal2013。可以看到所有文件信息都一样,除了时间戳(20:45 与 01:58)。
- 命令5:cp -p cal2012 cal2014 —— 将文件cal2012复制为cal2013,并保持文件的所有属性。
- 命令7:cp cal2012 cal2013 —— 若复制的时候,文件已存在,系统会默认覆盖。等同于cp -f cal2012 cal2013。
- 命令9 :cp -i cal2012 cal2013 —— 若复制的时候文件已存在,若文件已存在,给出用户提示信息。由用户做决定是不是将其覆盖。
3.7 使用mv命令移动及修改文件和目录名
- 命令名称:mv
- 英文解释:move
- 功能:在不同目录之间移动文件和目录,重新命名文件和目录。
- 语法格式:
mv [-options(s)] source(s) target
- 程序示例:
- 命令1 :
mv cal2012 babyStephen
解释:将文件cal2012移动到目录babyStephen中。 - 命令2:
mv babyStephen/cal2012 babyStephen/_cal2012
解释:将文件cal2012重命名为_cal2012。 - 命令3:
mv cal2013 babyStephen/_cal2013
解释:将文件cal2013移动到目录babyStephen中,同时将其命名为_cal2013。 - 命令4:
mv babyStephen sonStephen
解释:将目录babyStephen 重命名为sonStephen。
- 命令1 :
3.8 使用mkdir命令创建目录
- 命令名称:mkdir
- 英文解释:make directory
- 功能:创建新的目录或文件
- 语法格式:mkdir 目录名
- 程序示例:
- 命令1:
ls -F
解释:列出所有文件及其类型。 - 命令2:
mkdir girlStephen
解释:在当前目录中,创建名为girlStephen的目录。此处为相对路径。 - 命令3:
mkdir /home/stephen/sonStephen
解释:在当前目录中,创建名为sonStephen的目录。此处为绝对路径。 - 命令5:
mkdir -p sonStephen2/baby
在使用命令4创建目录baby时,系统提示,stephen目录中没有sonStephen2目录。此时,可以加入-p选项,便会创建在指定路径中所有不存在的目录。
- 选项名称:-p
- 英文解释:parent
- 功能:创建在指定路径中所有不存在的目录。
- 命令1:
3.9 使用touch命令创建文件
- 命令名称:touch
- 功能:创建一个或多个空文件。
- 语法格式:
touch 文件名
- 程序示例:
- 命令1:
touch baby1
在当前目录中创建一个文件 —— baby1。 - 命令2:
touch baby2 baby3
在当前目录中,一次创建两个文件:baby2、baby3。 - 命令3:
touch baby1
如果要创建的文件已存在呢?将会只修改文件的时间戳,其他信息不变。
- 命令1:
3.10 使用rm命令删除文件
- 命令名称:rm
- 英文解释:remove
- 功能:在文件系统中,永久地删除问价或目录。
- 语法格式:
rm [-option(s)] files|directories
- -i (interactive ,交互的):防止不小心删除有用的文件,再删除前给出提示。
- -r(recursive,递归的):递归的删除目录。删除一个目录时,也会删除子目录中的内容。
- -f(force,强制):系统并不询问而是强制删除,即直接删除原有的文件。
- 程序示例:
- 命令1:
ls -F
该命令说明目录结构为/home/stephen/sonStephen,在sonStephen中有三个文件baby1、baby2、baby3。 - 命令2:
rm baby1
删除一个文件 baby1。可以看出,在删除前,系统并没有给出任何提示。也就是说,Oracle Linux系统中,rm命令默认的执行方式与rm -F相同。 - 命令3:
rm ba*
删除所有以ba开头的文件。 - 命令4:
rm -i ba*
要求系统在删除文件前给出提示。
- 命令1:
3.11 使用rmdir或rm -r命令删除目录
- 命令名称:rmdir
- 英文解释:remove directories
- 功能:删除空目录
- 语法格式:
rmdir 目录名
- 命令名称:rm
- 选项名称:-r
- 功能:rm原本删除文件,使用选项-r后,就可以删除目录。
- 程序示例:
- 命令1、2、3:命令1、2、3说明了目录结构即/home/stephen,stephen中有两个子目录son1Stephen、son2Stephen,其中son1Stephen是空目录,son2Stephen中有一个文件baby。
- 命令4:使用rmdir删除目录son1Stephen,执行成功。
- 命令5:使用rmdir删除目录son2Stephen,执行失败。因为son2Stephen目录是非空的。
- 命令6:使用rm删除目录son2Stephen,执行失败。因为son2Stephen是目录,而rm命令不使用任何选项时只能删除文件。
- 命令7:使用rm -r 递归地删除目录son2Stephen,执行成功。