以往的 Windows 一直是以存储介质为主的,主要以盘符(C 盘,D 盘...)及分区来实现文件管理,然后之下才是目录,目录就显得不是那么重要,除系统文件之外的用户文件放在任何地方任何目录也是没有多大关系。所以通常 Windows 在使用一段时间后,磁盘上面的文件目录会显得杂乱无章(少数善于整理的用户除外吧)。然而 UNIX/Linux 恰好相反,UNIX 是以目录为主的,Linux 也继承了这一优良特性。 Linux 是以树形目录结构的形式来构建整个系统的,可以理解为树形目录是一个用户可操作系统的骨架。虽然本质上无论是目录结构还是操作系统内核都是存储在磁盘上的,但从逻辑上来说 Linux 的磁盘是“挂在”(挂载在)目录上的,每一个目录不仅能使用本地磁盘分区的文件系统,也可以使用网络上的文件系统。举例来说,可以利用网络文件系统(Network File System,NFS)服务器载入某特定目录等。
一、FHS标准
FHS 定义了两层规范,第一层是, / 下面的各个目录应该要放什么文件数据,例如 /etc 应该要放置设置文件,/bin 与 /sbin 则应该要放置可执行文件等等。
第二层则是针对 /usr 及 /var 这两个目录的子目录来定义。例如 /var/log 放置系统登录文件、/usr/share 放置共享数据等等。
FHS标准文档
如果你觉得看这个不明白,那么你可以试试最真实最直观的方式,执行如下命令:$tree
FHS 是根据以往无数 Linux 用户和开发者的经验总结出来的,并且会维持更新,FHS 依据文件系统使用的频繁与否以及是否允许用户随意改动。将目录定义为四种交互作用的形态,如下表所示:
二、目录路径
顾名思义,路径就是你要去哪儿的路线嘛。如果你想进入某个具体的目录或者想获得某个目录的文件(目录本身也是文件)那就得用路径来找到了。使用 cd
命令可以切换目录,在 Linux 里面使用 .
表示当前目录,..
表示上一级目录(**注意,以 .
开头的文件都是隐藏文件,所以这两个目录必然也是隐藏的,你可以使用 ls -a
命令查看隐藏文件), -
表示上一次所在目录,~
通常表示当前用户的"home"目录。使用 pwd
命令可以获取当前所在路径(绝对路径)。
绝对路径:简单地说就是以根"/"目录为起点的完整路径,以你所要到的目录为终点,表现形式如: /usr/local/bin
,表示根目录下的 usr 目录中的 local 目录中的 bin 目录。
相对路径:相对路径,也就是相对于你当前的目录的路径,相对路径是以当前目录 .
为起点,以你所要到的目录为终点,表现形式如: usr/local/bin
(这里假设你当前目录为根目录)。你可能注意到,表示相对路径实际并没有加上表示当前目录的那个 .
,而是直接以目录名开头,因为这个 usr
目录为 /
目录下的子目录,是可以省略这个 .
的;如果是当前目录的上一级目录,则需要使用 ..
,比如你当前目录为“home”目录,根目录就应该表示为 ../../
,表示上一级目录("home"目录)的上一级目录("/"目录)。
三 、Linux文件的基本操作
1、touch
使用 touch
命令创建空白文件,关于 touch
命令,其主要作用是来更改已有文件的时间戳的(比如,最近访问时间,最近修改时间),但其在不加任何参数的情况下,只指定一个文件名,则可以创建一个指定文件名的空白文件(不会覆盖已有同名文件),当然你也可以同时指定该文件的时间戳。
2、mkdir
使用 mkdir
(make directories)命令可以创建一个空目录,也可同时指定创建目录的权限属性。使用 -p
参数,同时创建父目录(如果不存在该父目录),如下我们同时创建一个多级目录(这在有时候安装软件,配置安装路径时非常有用);
3、cp
复制目录,如果目录下还有其他目录需要加参数 -r 或者 -R,表示递归复制,就是说有点“株连九族”的意思;
4、rm
使用rm
(remove files or directories)命令,删除一个文件或目录,删除目录需要加-r 或者 -R,要删除有保护的文件的时候需要加 -f ,表示强制删除;
5、mv
移动文件:使用mv
(move or rename files)命令,移动文件(剪切)。将文件"file1"移动到"Documents"目录mv 源目录文件 目的目录
;
重命名文件:将文件"file1"重命名为"myfile" mv 旧的文件名 新的文件名
;
批量重命令文件:要实现批量重命名,mv 命令就有点力不从心了,我们可以使用一个看起来更专业的命令rename
来实现。不过它是要用 perl 正则表达式来作为参数:
简单解释下上面的命令,rename
是先使用第二个参数的通配符匹配所有后缀为.txt
的文件,然后使用第一个参数提供的正则表达式将匹配的这些文件的.txt
后缀替换为.c
;
6、cat
打印文件内容到标准输出(终端),cat
为正序显示,tac为倒序显示可以加上-n
参数显示行号,
使用more
和less
命令分页查看文件
使用more
和less
命令分页查看文件
file
命令可以查看文件的类型
7、whereis
,which
,find
,locate
搜索文件,whereis
简单快速;whereis
只能搜索二进制文件(-b),man帮助文件(-m)和源代码文件(-s)。如果想要获得更全面的搜索结果可以使用locate
命令;
locate
快而全,通过"/var/lib/mlocate/mlocate.db"数据库查找,不过这个数据库也不是实时更新的,系统会使用定时任务每天自动执行updatedb
命令更新一次,所以有时候你刚添加的文件,它可能会找不到,需要手动执行一次updatedb
命令(在我们的环境中必须先执行一次该命令)。它可以用来查找指定目录下的不同文件类型,如果想只统计数目可以加上-c
参数,-i
参数可以忽略大小写进行查找,whereis 的-b
,-m
,-s
同样可以是使用;
which
小而精,which
本身是 Shell 内建的一个命令,我们通常使用which
来确定是否安装了某个指定的软件,因为它只从PATH
环境变量指定的路径中去搜索命令;
find
精而细,find
应该是这几个命令中最强大的了,它不但可以通过文件类型、文件名进行查找而且可以根据文件的属性(如文件的时间戳,文件的权限等)进行搜索,