文件链接ln和文件查找.docx

上传人:b****8 文档编号:10695601 上传时间:2023-02-22 格式:DOCX 页数:17 大小:21.56KB
下载 相关 举报
文件链接ln和文件查找.docx_第1页
第1页 / 共17页
文件链接ln和文件查找.docx_第2页
第2页 / 共17页
文件链接ln和文件查找.docx_第3页
第3页 / 共17页
文件链接ln和文件查找.docx_第4页
第4页 / 共17页
文件链接ln和文件查找.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

文件链接ln和文件查找.docx

《文件链接ln和文件查找.docx》由会员分享,可在线阅读,更多相关《文件链接ln和文件查找.docx(17页珍藏版)》请在冰豆网上搜索。

文件链接ln和文件查找.docx

文件链接ln和文件查找

Linux的文件类型

Linux操作系统支持的文件类型有:

普通文件、目录文件、设备文件以及符号链接文件。

1)普通文件:

包括文本文件、数据文件、可执行的二进制程序等。

2)目录文件:

简称为目录,Linux中把目录看成一种特殊的文件,利用它构成文件系统的分层树型结构。

每个目录文件中至少包括两个文件:

 “..”表示上一级目录,“.”表示该目录本身。

3)设备文件:

设备文件是一种特别文件,Linux系统用其标识各个设备驱动器,核心使用它们与硬件设备通信。

有两类特别设备文件:

字符设备文件和块设备文件。

4)符号链接:

一种特殊文件,存放的数据是文件系统中通向某个文件的路径。

当调用符号链接文件时,系统会自动访问保存在文件中的路径。

inode(indexnode)索引节点、文件指标

在Unix/Linux系统里,每个文件都有一个伴随它的inode(indentificationnode的缩写)。

这个inode的值必须是系统中独一无二的。

它的用途是作为存取文件的索引。

您可以用系统指令ls-i将现行工作目錄下的各个文件之inode內含值印出。

inode的內部储存了许多重要的信息,例如:

●文件所有人的识別码

●文件型态

●文件存取权限

●文件存取时间

●文件案有几个连接

●文件的大小

●文件的实际储存位址

从使用者的观点来看,用戶用文件名来辨识Unix/Linux的文件;但是以核心程式的立场观之,则是透过inode来使用文件。

inode有两种存在状态,在未被使用时,inode被放在磁碟中所谓的inode列表(inodelist):

当它要被参考时,核心程式会将它载入至主记忆內,此时的inode被称作in-coreinode,以下是inode以C语言的结构(structure)所表示的情形:

structinode

{

intimode;/*存取权限*/

chari_nlink;/*文件连接数*/

chari_uid;/*拥有者识別码*/

chari_gid;/*使用群识別码*/

longi_size;/*文件的长度*/

inti_addr{13);/*文件所在位置*/

inti_atime[2);/*最近一次存取时间*/

inti_mtime(2];/*最近一次修改时间*/

}

【参考】diskinode,in-coreinode,inodelist,kernel。

任何文件的inode都会对应到一个「inodetable」,而这个inodetable就是记录著这个文件的一些相关信息。

从上面的图例来看,「File1」的inode为「168」因此将168对应到inodetable时,里头就会记载著这个文件的相关內容,比如文件的拥有人、拥有群组信息,相关的文件权限、或者文件的最后更动日期…等等。

我们可以使用「ls-i」来查看文件的inode信息,加上「-i」参数代表显示inode的意思:

文件链接ln和文件查找

文件链接ln

Linux具有为一个文件起多个名字的功能,称为链接。

这样只要对一个文件修改,就可以完成对所有目录下相应链接文件的修改。

 简单的来说,ln就像是各位在Windows系统中「创建捷径」的意思,但是又不像Windows创建捷径那樣的单纯容易!

ln命令用来创建链接,语法为:

ln 源文件 目标文件

ln 源文件1 [源文件2…] 目标文件

在第一种语法格式中,如果目标文件是到某一目录文件的路径,源文件会链接到此目录下,文件名不变;如果目标文件不是到某一目录文件的路径,源文件会链接到此目标文件,并覆盖已经存在的同名文件。

在第二种语法格式中,所有的源文件都被链接到目标文件——该目标文件必须是目录文件。

所有源文件的名字都不变。

文件链接有两种形式,即硬链接和符号链接。

●硬链接

默认情况下,ln命令创建硬链接。

一个文件的硬链接数可以在目录的长列表格式的第二列中看到,无额外链接的文件链接数为1。

ln命令会增加链接数,rm命令会减少链接数。

一个文件除非链接数为0,否则不会物理地从文件系统中被删除。

对硬链接有如下限制:

不能对目录文件作硬链接;不能在不同的文件系统之间作硬链接。

●符号链接

符号链接也称软链接,是将一个路径名链接到一个文件,事实上,它只是一个文本文件,其中包含它提供链接的另一个文件的路径名。

另一个文件是实际包含所有数据的文件。

所有读写文件内容的命令,当它们被用于符号链接时,将沿着链接方向前进去访问实际的文件。

如果给ln命令加上s选项,则建立符号链接。

例如:

ln -s source destination

符号链接没有硬链接的限制,可以对目录文件作符号链接,也可以在不同文件系统之间作符号链接。

文件类型file

如果你想要知道某个文件的基本资料,例如是属于ASCII或者是data文件,或者是binary,且其中有没有使用到动态函式库(sharelibrary)等等的信息,就可以利用file这个指令来查看

[root@linux~]#file~/.bashrc

/root/.bashrc:

ASCIItext <==告诉我们是ASCII的纯文字!

文件的查找

注意:

通常find不很常用的!

因为速度慢。

通常我们都是先使用whereis或者是locate来检查,如果真的找不到了,才以find来搜寻!

为什么呢?

因为whereis与locate是利用数据库来查找,所以相当的快速,而且并没有实际的搜寻硬盘,比较省时间。

find命令

find命令用来查找文件和目录的位置。

该命令的语法为:

find 路径名 [选项]

find[PATH][option][action]

参数∶

1.与时间有关的参数∶

-atimen∶n为数字,意义为在n天之前的『一天之内』被access过的文件;

-ctimen∶n为数字,意义为在n天之前的『一天之内』被change过状态的文件;

-mtimen∶n为数字,意义为在n天之前的『一天之内』被modification过的文件;

-newerfile∶file为一个存在的文件,意思是说,只要文件比file还要新,

就会被列出来~

2.与使用者或群组名称有关的参数∶

-uidn∶n为数字,这个数字是使用者的帐号ID,亦即UID,这个UID是记录在

/etc/passwd里面与帐号名称对应的数字。

这方面我们会在第四篇介绍。

-gidn∶n为数字,这个数字是群组名称的ID,亦即GID,这个GID记录在

/etc/group,相关的介绍我们会第四篇说明~

-username∶name为使用者帐号名称喔!

例如dmtsai

-groupname∶name为群组名称,例如users;

-nouser  ∶寻找文件的拥有者不存在/etc/passwd的人!

-nogroup ∶寻找文件的拥有群组不存在于/etc/group的文件!

当您自行安装软体时,很可能该软体的属性当中并没有文件拥有者,

这是可能的!

在这个时候,就可以使用-nouser与-nogroup搜寻。

3.与文件权限及名称有关的参数∶

-namefilename∶搜寻文件名称为filename的文件;

-size[+-]SIZE∶搜寻比SIZE还要大(+)或小(-)的文件。

这个SIZE的规格有∶

c:

代表byte,k:

代表1024bytes。

所以,要找比50KB

还要大的文件,就是『-size+50k』

-typeTYPE  ∶搜寻文件的类型为TYPE的,类型主要有∶一般正规文件(f),

装置文件(b,c),目录(d),连结档(l),socket(s),

及FIFO(p)等属性。

-permmode ∶搜寻文件属性『刚好等于』mode的文件,这个mode为类似chmod

的属性值,举例来说,-rwsr-xr-x的属性为4755!

-perm-mode∶搜寻文件属性『必须要全部囊括mode的属性』的文件,举例来说,

我们要搜寻-rwxr--r--,亦即0744的文件,使用-perm-0744,

当一个文件的属性为-rwsr-xr-x,亦即4755时,也会被列出来,

因为-rwsr-xr-x的属性已经囊括了-rwxr--r--的属性了。

-perm+mode∶搜寻文件属性『包含任一mode的属性』的文件,举例来说,我们搜寻

-rwxr-xr-x,亦即-perm+755时,但一个文件属性为-rw-------

也会被列出来,因为他有-rw....的属性存在!

4.额外可进行的动作∶

-execcommand∶command为其他指令,-exec后面可再接额外的指令来处理搜寻到

的结果。

-print    ∶将结果列到萤幕上,这个动作是预设动作!

其中,常用的选项有:

-print:

显示输出查找到的结果。

如果未指定任何选项,则系统默认是-print。

如find命令的最基本的用法就是列出指定目录下的所有文件和子目录:

#find /usr -print

-name:

按文件名查找。

-size:

按文件大小查找。

例如,下面的命令将查找/usr目录下超过100k的文件:

#find/usr-size100k

-user:

按文件主查找。

-type:

按文件类型查找。

常见的类型有:

b

块特别文件

c

字符特别文件。

f

普通文件

l

符号链接文件

d

目录文件

 

 

###不指定匹配表达式,显示所有文件

############################################################

#递归显示当前目录的文件列表

$find

#递归显示/目录的文件列表

$find/

#递归显示/目录的文件列表(仅限于3层目录)

$find/-maxdepth3

#递归显示/目录的文件列表(仅限于/文件系统)

$find/-xdev

#递归显示/home、/www、/srv目录的文件列表

$find/home/www/srv

############################################################

###按文件名/路径名查找

############################################################

#查找特定的文件名

$find-namemyfile

$find-maxdepth2-namesymfony

#使用通配符查找特定的文件名

$find-name'd*'

$find-name'?

?

?

'

$find-name'[afd]*'

$find-iname'[a-z]*'

$find-name'ch[0-2][0-9].txt*'

#匹配文件路径名

$find-path'*server'

./vbird/server

./server

$find-path'*server[12]'

./server1

./server2

./server1/server2

./server2/server2

#以正则表达式匹配文件路径名

$find-regex'.*'

$find-regex'.*ch0.*'

./ch01

./ch00

./vbird/server/1000results/ch09-01.jpg

$find-regex'.*ch[0-9]+'

./ch01

./ch21

./ch00

./ch333

./ch1

./ch41

$find-regex'.*ch[0-9]+\.txt'

./ch1.txt

./ch24.txt

############################################################

###按文件属性查找

############################################################

#只查找普通文件

$find.-typef

#只查找符号链接文件

$find.-typel

#查找硬连接数大于1的文件或目录

$find/home-links+1

#查找/tmp目录下小于10M的文件

$find/tmp-size-10M

#查找/home目录下大于1G的文件

$find/home-size+1G

#查找系统中为空的文件或者目录

$find/-empty

#查找在/www中最后10分钟访问过的文件

$find/www-amin-10

#查找在/www中最后2天访问过的文件

$find/www-atime-2

#查找在/home下最近2天内改动过的文件

$find/home-mtime-2

#列出被改动过后2日内被存取过的文件或目录

$find/home-used-2

#列出被改动过后90日前被存取过的文件或目录

$find/home-used+90

#列出/home目录中属于用户osmond的文件或目录

$find/home-userosmond

#列出/home目录中UID大于501的文件或目录

$find/home-uid +501

#列出/home目录中组为osmond的文件或目录

$find/home-grouposmond

#列出/home目录中GID为501的文件或目录

$find/home-gid501

#列出/home目录中不属于本地用户的文件或目录

$find/home-nouser

#列出/home目录中不属于本地组的文件或目录

$find/home-nogroup

#精确查找权限为664的文件或目录

$find.-perm664

#查找权限至少为664的文件或目录

$find.-perm-664

############################################################

###使用逻辑运算构造复杂表达式

############################################################

#查找/tmp目录下21天之前访问过的大于10G的文件

$find/tmp-size+10M-a-atime+21

#查找/目录下属主为jjheng或osmond的文件

$find/-userjjheng-o-userosmond

#查找/tmp目录下的属主不是osmond的文件

$find/tmp!

-userosmond

#在/mnt下查找*.txt且文件系统类型不为vfat的文件

$find/mnt-name'*.txt'!

-fstypevfat

#在/tmp下查找名为l开头且类型为符号链接的文件

$find/tmp-name'l*'-typel

#查找以server开头的目录名

$find.-typed-name'server*'

#找出/var/log目录下所有的前5天修改过的.log文件

$find/var/log-name'*.log'-mtime+5

############################################################

###按文件样本查找

############################################################

#查找所有比FILE1的访问时间新的文件

$find-anewerFILE1

#查找所有比FILE2的访问时间旧的文件

$find!

-anewerFILE2

#查找所有比FILE1的访问时间新的

#且比FILE2的访问时间旧的文件

$find-anewerFILE1!

-anewerFILE2

#查找所有比FILE1的内容修改时间新的文件

$find-newerFILE1

#查找所有比FILE2的内容修改时间旧的文件

$find!

-newerFILE2

#查找所有比FILE1的内容修改时间新的

#且比FILE2的内容修改时间旧的文件

$find-newerFILE1!

-newerFILE2

#查找与FILE具有相同i-node的文件(硬链接)

$find-samefileFILE-ls

############################################################

###对查找到的文件实施命令操作

############################################################

#查找并列出当前目录下不安全的文件(世界可读写执行)

$find.-perm-007-execls-l{}\;

#查找logs目录下的所有的.log文件并查看它的详细信息

$findlogs-name"*.log"-typef-execls-l{}\;

#查找当天修改过的普通文件

$find.-typef-mtime-1-execls-l{}\;

#查找当前目录下的.php文件并用grep过滤出包含include的行

$find.-name"*.php"-execgrep"include"{}\;-print

#查找并删除当前目录及其子目录下所有扩展名为.tmp的文件

$find.-name'*.tmp'-execrm{}\;

#在logs目录中查找7天之内未修改过的文件并在删除前询问

$findlogs-typef-mtime+7-exec -ok rm{}\;

#查询并删除一周以来从未访问过的以.o结尾或名为a.out

#且不存在于nfs文件系统中的所有文件

$find/(-namea.out-o-name'*.o')-atime+7\

!

-fstypenfs-execrm{}\;

#查询并删除当前目录及其子目录下所有的空目录

$find.-depth-typed-empty-execrmdir{}\;

#将default目录下的文件由GBK编码转换为UTF-8编码

#目录结构不变,转码后的文件保存在utf/default目录下

#From:

$finddefault-typed-execmkdir-putf/{}\;

$finddefault-typef-execiconv-fGBK-tUTF-8{}-outf/{}\;

#下面find命令的书写形式均等价

$find-name\*.sh-execcp{}/tmp\;

$find-name'*.sh'-execcp{}/tmp';'

$find-name"*.sh"-execcp{}/tmp";"

$find-name\*.sh-execcp\{\}/tmp\;

$find-name'*.sh'-execcp'{}'/tmp';'

$find-name"*.sh"-execcp"{}"/tmp";"

############################################################

###在查找中排除指定的目录

############################################################

#显示当前目录树

$tree-F-L2

.

|--bin/

| |--switch-lang.sh*

| `--sys2wiki.sh*

|--book/

| |--basic/

| |--basic-utf8/

| |--basic.zip

| |--server/

| |--server-utf8/

| |--server.zip

| `--to-zh-CN-utf8.sh*

`--bak.sh*

#显示当前目录下除book目录的所有文件

$find.-namebook-prune-o-print

#查找当前目录下(除了book目录)的所有.sh文件

$find.-namebook-prune-o-name'*.sh'-print

#显示当前目录下除book/server目录的所有文件

$find.-path./book/server-prune-o-print

#使用绝对路径完成上述任务

$find/home/osmond-path/home/osmond/book/server-prune-o-print

#查找当前目录下(除了book/server目录)的所有.sh文件

$find.-path./book/server-prune-o-name'*.sh'-print

#显示当前目录下除book/server和book/server-utf8目录的所有文件

$find.-path'./book/server*'-prune-o-print

#查找当前目录下(除了book/server和book/server-utf8目录)的所有.sh文件

$find.-path'./book/server*'-prune-o-name'*.sh'-print

#显示当前目录下除book/server和book/basic目录的所有文件

$find.\(-path./book/server-o-path./book/basic\)-prune-o-print

#查找当前目录下(除了book/server和book/basic目录)的所有.sh文件

$find.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 节日庆典

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1