Linux文件查找与软硬链接
一 文件查找
Linux中查找文件或者命令主要有两种方式
1 脚本文件名的查询
顾名思义,就是查找可以执行命令的文件所在的路径地址
which [-a] command
本命令主要是根据当前path中的路径来查找的
不加-a 只会列出查找到的一个路径,加了-a会列出查找到的所有路径
2 文件名的查找
whereis [-bmsu] 文件名或目录名
-b:只找二进制文件
-m:只找说明文件manual路径下的文件
-s:只找source源文件
-u:查找不再上面的其他特殊文件
whereis不是根据根据当前path查找的,它主要是对全系统进行扫描查询
locate [-ir] keyword
-i: 忽略大小写
-r: 正则表达式
whereis 和locate都是通过读取linux系统中的数据库文件来查找的,速度比较块
locate寻找的数据主要是在已经创建的数据库/var/lib/mlocate里查找,可以手动更新该数据库
直接利用updatedb
updatedb:根据/etc/updatedb.conf的设置去查找系统硬盘内的文件名,并且更新/var/lib/mlocate
find命令
find [path] [option] [action]
二 软硬链接
当在linux中新增一个目录的时候,会分配一个inode和一块block给该目录。
Inode记录该目录的相关权限与属性,并且记录分配到的那块block号码。
Block记录在逐个目录下的文件名与该文件名所占用的inode号码数据
文件名只与目录有关,而文件内容则与inode有关
1硬链接:通过文件系统的inode链接来产生新的文件名,而不是产生新的文件
hard link只是在某个目录下新建一个文件名连接到某inode号码的关联记录,注意这里新建文件名主要是在为目录已经分配的block中新建。当你创建一个硬链接的时候,你所生成的文件和你指向的文件完全相同,仅仅只是文件名不同而已。
如图所示,在inode中,1,2号均为两个目录所分配的inode号码,主要记录该目录的基本信息,权限等,当在2号目录所对应的block中创建一个硬链接的时候,此时,它就直接指向real号的inode,从而根据real所指向的block中的文件来获取文件的内容。
硬链接的优点:
1) 删除任何一个“文件名”,只要还有一个指向该inode的文件,则该文件始终存在,并且非常安全的
2) 凡是通过硬链接所创建的文件名,对其任何文件名进行实际的编辑,均是作用于所关联的那个inode和block的,均能进行数据的修改。
通过hard link创建设置的文件,磁盘的空间与inode数目并不会改变
硬链接的限制性:
不能跨越文件系统。也就是一般来说当你两个分区具有不同的文件系统时候,就不能进行链接。
不能连接到目录。因为一旦要连接到目录的话,那么该目录下的所有文件名都要被创建,复杂度很高。
2软链接:形如windows的快捷方式的文件,可以快速链接到目标文件或目录
symbolic link,创建一个独立的文件,而该文件会让数据的读取指向它链接的那个文件的文件名
该链接文件和被指向的链接文件是独立的文件,拥有保护同的inode编号。链接文件的重要内容就是它会写上目标文件的“文件名”
如图所示,1号inode是我们创建的那个软链接文件的编号,它指向了分配的block块,该文件内容保存的就是目标文件的“文件名”,然后通过层层的目录inode来查找它所指向的真是的inode。然后再读取 该文件的具体内容
当你在linux下创建软链接后,改动连接文件其实就是改动源文件,不过你把连接文件删除,对源文件不影响,但是如果对连接文件所指向的数据进行修改删除,或者删除该目录下的文件,则直接会实际操作源文件或目录的
Usage:
ln [-sf] 源文件 目标文件
-s:如果不加任何参数就进行链接,那就是hard link,加上-s就是 symbolic link
-f:如果目标文件存在,则就将目标文件直接删除再创建