昆明建设局网站号码,cm域名网站,重庆市建筑工程信息网官网,魔兽做图下载网站文件的查找
文件查找的用处#xff0c;在我们需要文件但却又不知道文件在哪里的时候
文件查找存在着三种类型的查找
1、which或whereis#xff1a;查找命令的程序文件位置
2、locate#xff1a;也是一种文件查找#xff0c;但是基于数据库的查找
3、find#xff1a;针…文件的查找
文件查找的用处在我们需要文件但却又不知道文件在哪里的时候
文件查找存在着三种类型的查找
1、which或whereis查找命令的程序文件位置
2、locate也是一种文件查找但是基于数据库的查找
3、find针对与文件名进行查找
查找文件的程序文件位置(which/whereis)
但我们使用命令时其实系统是自动调用了关于其命令的程序但为什么我们使用命令时不需要输入路径而是直接输入命令呢
因为在系统还有一个环境变量的存在比如在使用ls时环境变量就会帮助我们将ls补充为/usr/bin/ls
在shell编程中就可以将/usr/bin/ls作为ls程序的绝对路径写在脚本中
但我们又怎么知道ls对应的是/usr/bin/ls呢就是使用which或是whereis来查找的语法which 命令/whereis 命令
[rootlocalhost ~]#which ls
[rootlocalhost ~]#whereis ls通过数据库来查找文件位置(locate)
在我们的系统当中存在着一个专门存放文件位置的数据库这个数据库会在开机的时候自动刷新来记录我们的文件的位置
这种通过数据库查找的方法还是需要依赖与locate命令语法locate 查找的大概文件名如下
[rootlocalhost ~]#locate host哎突然发现会上图所示的报错其原因已经很明显了是因为没有”/var/lib/mlocate/mlocate.db“这个文件或者说是目录
因为locate是基于数据库来查询的所以我们可以大胆的猜测一下是数据库没有更新的问题使用数据库手动更新命令updatedb来进行更新也可以直接重启系统
事实上但我们创建一个新文件时数据库中也是没有该新文件的信息的同样需要手动更新数据库或重启系统来解决
如下我们使用updatedb来手动更新数据库并且来使用locate来查看数据中记录对与host的内容因查看结果过多我们将其产生的信息重定向到一个文件当中
[rootlocalhost ~]# updatedb
[rootlocalhost ~]# locate host 1.txt
[rootlocalhost ~]#updatedb产生如此多内容的原因是在locate host输入的时候系统会在数据库中检索host这个关键字最后将路径带有host的文件全部列出来
在系统中有一个极为特殊的目录/tmp因为其目录性质是临时的。所以数据库是不会在这里面去寻找东西的换句话说一般情况下你是不会在垃圾桶里捡东西的
文件查找(find)
find工具是一个非常强大的文件查找工具
它可以支持按文件名查找、按文件大小查找、按文件对于在根目录的深度进行查找、按文件的属主属组进行查找、按文件类型进行查找等操作
并且我们还可以使用find对查找到的文件进行查找后的处理如查找到之后删除等操作
我们可以将find工具理解为Windows中的查找工具
语法find [path] [options] [expression] [action]path表示在哪个文件路径下查找options表示查找对应的选项如对应查找需求(文件名字、大小、属主等)
expression用来解释选项的内容、action在查找文件之后的动作
按照文件名查找(-name/-iname)
按文件名查找我们可以使用-name选项
如下我们需要在/etc目录下对文件hosts进行查找
[rootlocalhost ~]#find /etc -name hosts但选项-name并不会对查找的文件区分大小写并且Linux是大小写区分的系统也就是说并不会查找如Hosts这种文件
但我们可以在这前面加一个选项-i成为-iname这样就可以在文件名大小不缺定的情况下进行查找如下
[rootlocalhost ~]#find /etc -iname hosts按照文件大小查找(-size)
环境准备使用dd配合/dev/zero在/etc/sysconfig目录下创建一个大小为121M的文件名为123.txt然后使用-size选项查找出该文件
[rootlocalhost ~]#dd if/dev/zero of/etc/sysconfig/123.txt bs1M count121/dev/zero是一个可以提供无限字节流的文件经常用于我们的测试当中 紧接着我们就开始对该文件进行查找使用find搭配-size选项在/etc目录下查找文件大小大于120M的文件
[rootlocalhost ~]#find /etc -size 120M反之若是我们想查找小于120M的则为find /etc -size -120M若是我们想查找刚刚好为120M的文件则为find /etc -size 120M
按照目录的深度进行查找
目录的深度就是文件的层级换句话说就是有多少个目录套目录该方法可以限制其查找范围
我们已查找网卡的配置文件作为例子网卡的配置文件为/etc/sysconfig/network-scripts/ifcfg-ens33
其层级逐步表示为/根目录表示为第一层/etc表示为第二层/etc/sysconfig表示为第三层/etc/sysconfig/network-script表示为第四层
所以如果我们设置了查找目录深度为4的时也就只能查看到/etc/sysconfig/network-script目录下的文件
在对目录的深度进行查找的时候我们经常搭配着其他选项进行查找如配合着-name进行查找就可以查找指定目录范围的指定文件
想要同时使用两个选项查询还要加上-a选项才能同时使用两个选项进行查询如下
[rootlocalhost ~]# find / -maxdepth 4 -a -name ifcfg-ens33但若是将范围该为3则代表只查询到/etc/sysconfig下的内容所以必然是查询不到ifcfg-ens33图片如下 按照文件的属主和属组进行查找
环境准备创建用户jack创建组hr在/home创建新文件text.txt将text.txt的属主和属组分别该为jack和hr
[rootlocalhost ~]#useradd jack
[rootlocalhost ~]#groupadd hr
[rootlocalhost ~]#touch text.txt
[rootlocalhost ~]#chmod jack.hr text.txt属主的选项为-user与英译的意思是相同的同样的属组的选项为-hr如下
[rootlocalhost ~]#find . -user jack //在当前目录下查找所有属主为jack的文件
[rootlocalhost ~]#find . -group hr //在当前目录下查找所有属组为hr的文件按照文件类型来查找
让我们来复习一下什么是文件类型
在使用ll或ls -l后我们可以看到文件的详细信息其中开头的第一列就表达的是文件类型
文件类型有很多种如以d开头的是目录-则是普通的文件b开头的则是块文件用于表示磁盘的硬件
在按照文件类型来查找文件的时候我们应该用的是选项是-type英译过来正好是类型的意思以此来方便记忆
但在-type后面 还要指定我们查找的是什么文件类型如普通文件为f块文件为b目录为d以此类推如下
[rootlocalhost ~]#find / -type f | head //在根目录下查找文件类型为普通文件并且只显示其前十行
[rootlocalhost ~]#ll /boot/grub2/device.map //验证是否正确
[rootlocalhost ~]#find / -type d | head //在根目录下查找文件类型为目录并且只显示其前十行按照文件的权限来查找
文件的权限有三种属主、属组、其他人其中可赋予的权限为可读可写可执行分别用rwx来表示
我们通常数字来区分不同人(属主、属组、其他人)所拥有的权限rwx分别对应的数字是421
如属主可读可写可执行属组可读可写其他人可读可写所表示的数字为766
而按照文件权限所查找的选项是-perm其中permission为权限的意思实例如下
[rootlocalhost ~]#find ./ -perm 666 //在当前目录下查找权限为666的文件
[rootlocalhost ~]#find ./ -perm 666 -ls //如果没有-ls选项以文件详细的方式显示出来找到后的处理的动作
通过前面从find查找练习我们可以发现我们平常查找之后的动作默认是-print就是打印出来
但可以在查找后加上一些关于动作的选项使得我们可以查找到文件后可以进行删除、复制等操作如下
查找后删除
[rootlocalhost ~]#find ./ -perm 666 -delete //将当前目录下查找出来的权限为666的文件删除查找后复制
我们先来看命令然后在来逐个解析其意思
[rootlocalhost ~]#find ./ -perm 666 -ok cp -rvf {} /tmp \;在上述命令中因为使用的cp的查找后动作所以find ./ -perm 666的查找结果会被放到后面的{}内进行复制
-ok表示我们现在需要使用外接选项(如cp)同时表示在复制时我们要使用yes在确认复制或使用no来使复制停止
-r表示递归复制即如果复制的是目录将会使其的子目录一同复制
-v表示将复制过程显示出来如果没有这个选项就不会有下图中./text.txt - /tmp/text.txt的显示
-f表示cp这条命令不用进行确认可以直接复制
;是该命令的固定格式必须要有才能成功执行该命令 文件的打包和压缩
文件的打包和解包
文件的打包
在我们对服务器进行管理时通常会遇到需要转移多个文件的情况
这时如果一个一个使用mv或cp命令进行转移会因为数量太多而导致太多麻烦
我们可以将我们需要的文件都组合起来然后统一地打成一个包方便我们进行多个文件的转移
在这里我们使用tar命令进行打包同时所有使用tar命令打包后的包都将会是以tar为后缀的如下
[rootlocalhost ~]#tar -cf etc.tar /etc //将/etc打成一个tar包并存放在当前目录下-c表示创建一个tar包(create创造)-f表示指定解包后的文件名 文件的解包
当我们打好的tar包被转移后我们需要用到包里面的内容时因为tar包的存在所以是没办法直接使用的
这时需要将tar包进行解包里面的内容才能正常使用如下
[rootlocalhost ~]#tar -xf etc.tar在进行解包后解包的内容会默认在当前目录下生成
解包与打包的选项不同在与解包的选项为-xf其中-f依旧是指定包的名称而-x则表示解包 文件的压缩和解压缩
文件的压缩
在上述的打包学习中只是为将多个文件集中成一个包然后转移可其包的容量与原目录的容量却没发生变化如下
这容易导致一些无用的资源却占用着存储空间所以我们的压缩就应运而生
压缩其实就是将原目录先打成一个包然后使用压缩工具将该目录包的存储空间减少从而达到减少存储空间负担的目的
而这样子产生包就叫做压缩包
压缩的工具有三种分别是gz、bz、xz这三个打包工具的不同我们在后面的实验中一一道来
首先就是命令选项的不同但整体命令还是大致一样的如下
[rootlocalhost ~]# tar -czvf etc.tar.gz /etc //gz的压缩包命令
[rootlocalhost ~]# tar -cjf etc.tar.bz /etc //bz的压缩包命令
[rootlocalhost ~]# tar -cJf tec.tar.xz /etc //xz的压缩包命令由上述命令可以总结出来-c和-f选项与打tar包命令含义相同
至于-v则表示在终端上显示压缩的全过程(在这里则是将/etc被打压缩包的内容全部显示出来)
而gz的选项则是-z换句话说-z就表示该压缩包打的是gz包并且我们还看到etc.tar.gz压缩包的名字还是以gz为后缀的
以此类推bz的打压缩包选项为-j(小写)xz的打压缩包选项为-J(大写)
以上是gz、bz、xz的在命令上的区别但其实它们三个不同的还不止于此
如果你亲自地去做一遍以上三种包的打压缩包过程则会发现三个打包方式所使用的时间将会有明显的不同为什么呢
我们使用ll查看这三种方式打出来的包的详细信息如下 从上图可知三种打包工具所产生的压缩包容量从大到小依次为gz、bz、xz
而在打包过程中打gz包所使用的时间最快其次则是bz最慢则是xz
所以这相当与我们想要有更小压缩包的体积、更大的容量势必要失去一些时间而失去什么则取决不同的生产环境
综上所述gz、bz、xz的容量与打包时间成反比所以并不是容量越小越好还要考虑时间成本的问题
文件的解压缩
在老的Linux版本中我们解包还要根据gz、bz、xz等压缩包的类型来使用不同的命令选项就像打压缩包一样gz或bz的解压缩包的命令选项也是不同的
但在新的Linux版本中只需要使用一条命令就可以通解所有类型的压缩包那就是-xf通解一切压缩包如下
[rootlocalhost ~]# tar -xf etc.tar.gz
[rootlocalhost ~]# tar -xf etc.tar.bz
[rootlocalhost ~]# tar -xf etc.tar.xz以上三条命令都可以在当前目录下解压出一个名为etc的目录