【Linux】文件搜索命令find/which/whereis/grep/locate的用法/关机重启命令。


 
不管在Windows还是Linux中,最重要的问题不是说你能搜索到这个文件,而是最好少用搜索,应该是你在整个服务器的规划里面,把所以的文件目录规划的很好。就像如果你在家里找衣服,如果不是你乱扔,就不可能花费太长的时间。因为搜索会占用大量的系统资源,但是有一些操作比如被他人非法修改的文件,的确find命令是一个很好的选择。

一、命令名称: find
(1)文件搜索命令find的一般格式

find path -option [-print] [-exec -ok command] {} \;
path:find命令所要查找的目录路径,比如/root,表示在root目录下搜索匹配。
-print:find命令将匹配的文件输出到标准输出。
-exec:对搜索的结构指令指定的shell命令。注意格式要正确:"-exec 命令 {} \;"。注意“{}” 与;之间有空格。
-ok:和exec作用相同,只不过以一种更为安全的模式来执行该参数给出的shell命令,在执行每一个命令执行都会提示是否确认执行。

(2)find一般搜索使用实例

在目录/etc中查找文件init
find /etc -name init
在这里插入图片描述

大家可能会认为只要文件名包含init,比如initab,123init都会被匹配到,linux不同于windows,linux中的搜索就是精准搜索,也就是说,只有文件名为init的文件才可以搜索到。那么如果linux下我想搜索文件名包含init的文件怎么办呢?

find /etc -name *init*
只要文件名里面包含init都会被例举出来
*:表示匹配一个字符串
在这里插入图片描述

find /etc -name init*
表示在etc目录中匹配文件名以init开头的文件
在这里插入图片描述

find /etc -name init???
在etc目录下搜索文件名以init开头后面跟3个字符的文件
?:匹配单个字符
在这里插入图片描述

iname:表示不区分大小写
在这里插入图片描述

在根目录下查找大于100MB的文件
find / +size +204800
在这里插入图片描述
在linux当中,一个数据块是512字节,即0.5K,文件的大小以数据块来计算,因此100MB=102400KB=204800。数据块是linux文件中存储的最小单位。+n:大于,-n:小于,n:等于。

普通用户家目录下查找所有者为Hunter的文件
find / -user Hunter(此处原因在于,本人在装系统时将所属组与拥有者混淆了)
在这里插入图片描述
user表示根据所有者查找,当然,我们也可以使用-group根据所属组来搜索。

(3)通过时间属性来搜索

-amin:访问时间 access
-cmin:文件属性 change
-mmin:文件内容 modify
上述三种以分钟为单位

-atime:访问时间 access
-ctime:文件属性 change
-mtime:文件内容 modify
上述三种以天为单位

我习惯性把上述的3个时间属性称为ACM,在这里我附上前面一篇关于ACM的博文方便大家记忆:https://blog.csdn.net/qq_41035588/article/details/82875522

在home目录下查找10分钟内被修改过属性的文件和目录
find /home -cmin -10
在这里插入图片描述
-10表示10分钟之内,+10代表的就是10分钟以前。其他时间属性的操作与此一致。

(4)find中的多条件命令

在/home下寻找大于2MB小于4MB的文件
find /home -size +4096 -a -size -8192
在这里插入图片描述
-a在这里表示两个条件同时满足,与之对应的还有-o,表示两个条件满足任意一个即可。

在/etc下查找inittab文件并显示其详细信息
find /etc -name inittab -exec ls -l {} \;
在这里插入图片描述
-exec在这里起一个链接作用,与-ok的区别在于,它不需要确认,而-ok会进行安全检查。ls -l表示显示文件信息,{}表示对find查询的结果替换,\表示转义符,;表示结束。

(5)通过文件类型搜索

-type 根据文件类型查找
f:文件
d:目录
l:软链接文件

在etc目录下寻找以init开头的并且是文件类型的文件
find /etc -name init* -a -type f
在这里插入图片描述

在etc目录下寻找以init开头的目录
find /etc -name init* -a -type d
在这里插入图片描述

在etc目录下寻找以init开头的软链接
find /etc -name init* -a -type l
在这里插入图片描述

(6)根据i节点查找

即inum,每个文件或目录都有一个i节点,这里不详细描述,只简单介绍一下其用法,具体情况大家可以自行百度,我们可以通过寻找一个文件、目录的inum节点而对其进行其他操作。

搜索home目录下i节点为127的目录并且打印详细信息
find /home -inum 127 -exec rm -rf {} \;
在这里插入图片描述
从图中可以看出,通过查看文件或目录的i节点,就可以对其进行附加的操作。

  • 总结:

find命令可以精准的搜索到你的预期要求,当其他命令不能搜索到某个文件或目录时,find确实给我们带来了很多便捷,但是,find命令在搜索的时候是从硬盘进行遍历的,因此会非常耗费硬盘的资源,这样就会使搜索时间提高,随之而来的就是效率的低下,所以说,find是一把双刃剑,带给我们便捷的途中,也难免让我在这里插入代码片们耗费更多的资源与时间。


以下所介绍的几个搜索命令的搜索速度远远快于find,但是无疑最强大、最精准、最实时的搜索命令依旧是find,然而下面几个命令在带来快捷的同时,也难免会有尴尬之处,所以当我们在文件搜索时,选择一个最适合的命令是非常重要的。·

二、命令名称:which

命令所在路径:/usr/bin/which
执行权限:所有用户
语法:which 命令
功能描述搜索命令所在目录及别名信息

which的一个很重要的功能就是查看命令的存在路径,比如我们想要知道ifconfig、gcc、g++等命令处于哪个目录时:
在这里插入图片描述
可以看出gcc存在于/usr/bin目录,ifconfig存在于/sbin目录之下。那么which命令是否还有其他功能呢?
在这里插入图片描述上图的cp、mv、ls命令明显多了一行信息,其实这就是各个命令对应的别名,也就是说,which还可以查看某个命令是否有别名,别名是什么的功能。比如cp -i的别名就是cp,rm -i的别名就是rm等。

当我们在rm删除一个文件的时候,会提示你是否删除普通空文件。但是实际上在linux系统里面本身并没有询问确认的机制,而且绝大多数Unix你在使用的时候根本就不询问确认,之所以现在的linux会有询问机制,是因为别名的引入,比如rm -i,其中这个-i 选项就是一个询问的机制

  • 总结

which的作用分为两点:①查看命令所在的路径查看命令是否拥有别名,且别名是什么的功能

三、命令名称:whereis

命令所在路径:/usr/bin/whereis
执行权限:所有用户
语法:whereis 命令
功能描述搜索命令所在目录及帮助文档路径

下面我们在linux下测试一下whereis都有哪些功能,与which是否如出一撤呢?
在这里插入图片描述
从图上可以看出,whereis的查询结果,前半部分与which功能一样,显示命令所在的路径,但是后面又多了一长串内容,其实这是该命令帮助文档的所在路径。

  • 总结

whereis的功能可以概括为两点 ① 显示命令所在的路径显示该命令帮助文档的路径。

四、命令名称:grep

命令所在路径:/bin/grep
执行权限:所有用户
语法:grep -iv [指定字串][文件]
功能描述在文件中搜寻字串匹配的行并输出
-i:不区分大小写
-v:排除指定字串
这个命令是在文件内容中查找某一个关键词所在的行,并单独显示有查询关键词的行。
在这里插入图片描述
如图,我想获取文件内容中含有关键字include的行,我就可以通过grep匹配文件内容中的关键字,并将含有该关键字的行单独显示出来。

下面说下grep的选项
-i:不区分大小写,前面已经举过很多例子
-v选项:排除指定的字符串。

当我们用more查看/etc/inittab下的内容时,发现有很多行前面都有#,说到#,在linux中代表的是注释符。
在这里插入图片描述在这里插入图片描述
当我们用-v选项去排除关键字的时候,就得到了如下图的数据:
在这里插入图片描述
你会发现,上百行的内容,其实仅仅有一行是数据,剩下的都是注释,所以说-v选项是一个很有价值的选项。

  • 总结:

grep的功能可以概括为:对指定的文件内容进行字串匹配并单独显示字串所在行的信息,当加上-i选项时,搜索结果不区分大小写匹配,当加上-v选项时,可以对字串所在行进行排除,并显示非字串所在行的信息

五、命令名称:locate

先为大家介绍一款在Windows平台下的快速搜索软件:Everything。在使用Everything进行文件搜索时,实际上是非常迅速的,这时因为Everything是根据NTFS即NTFS文件系统,这是是一个基于安全性的文件系统,是Windows NT所采用的独特的文件系统结构,它是建立在保护文件和目录数据基础上,同时照顾节省存储资源、减少磁盘占用量的一种先进的文件系统记录日志来遍历搜索的。像这种快速查找是否在我们的Linux中也有诸如此类的呢?

命令名称:locate
命令所在路径:/usr/bin/locate
执行权限:所有用户
语法:locate 文件名
功能描述在文件资料库中查找文件

当你使用locate [文件名],比如locate init时,所有包含init的文件或目录在一瞬间搜索完。成百上千的文件或路径在1秒左右就可以匹配出来。

locate命令和find命令等找寻文件的工作原理类似,但 locate是通过生成一个文件和文件夹的索引数据库,当用户在执行loacte命令查找文件时,它会直接在索引数据库里查找,若该数据库太久没更新或不存在,则会提示错误。解决updatedb

在这里插入图片描述那么为什么locate搜索速度可以如此之快呢,原因就在于它在系统中有它自己维护的文件资料库。现在我们用locate来搜索locate:

locate locate
在这里插入图片描述
这样你会匹配出很多信息,找到如上图所示名字,这个就是他的文件资料库,系统中所有的文件都会定期收录到这个文件库中。它不会像find那样在某一个目录、某一个分区、某一个硬盘上来查找,而是直接到这个资料库中匹配。

凡事都有其两面性,locate带给我们快速的同时,是否有弊端呢?你可能已经注意到locate是定期将数据收录到自己的资料库,那么是否就会存在更新资料库的时间盲区呢?

首先我们创建一个myLinux目录,ls查看一下的确在当前目录下,但是当我们locate myLinux时,发现未查询到这个目录。
在这里插入图片描述
此时,我们用locate搜索失败,find命令在当前目录查找,发现成功匹配到myLinux这个目录,这也就奠定了locate的弊端是无可争议的。

那么是否locate以后就不能用了呢?其实不然,既然locate自身具有定期才能更新数据的功能,那么我们完全可以手动来更新文件资料库。
在这里插入图片描述我们可以使用updatedb来更新文件资料库,然后用locate查询myLinux的时候会发现搜索成功。

那么请看下面这个例子,你会发现,即使你updatedb更新了文件资料库,locate也无法查询出刚创建的文件或目录
在这里插入图片描述我们发现,当我们在/tmp临时目录下创建一个MyFiles的文件,updatedb文件资料库后,用locate搜索时却无法搜索到,但用find却可以搜索到。因为该文件存在于/tmp目录下,不再文件资料库的涉猎范围内,因此也就无从谈起搜索到此文件/目录。

补充一点:locate在匹配的时候是严格控制大小写的,因此如果想让匹配不区分大小写,可以效仿find那样在locate后面加上-i选项

  • 总结

locate它在系统中有它自己维护的文件资料库,具有定期更新数据的能力其搜索能力非常快,但是刚创建的目录或文件时无法搜索到的,因为locate存在一个更新盲区,需要updatedb更新资料库才可以搜索到。如果文件恰好创建在临时目录/tmp下是不能被搜索到的,因为locate的资料库不会收录此目录下的数据。

六、Linux关机重启命令的用法(培养安全意识)

重启关机是一个耳听能熟的词汇,但是在我们的Linux操作系统下,其中大有文章,操作不当可能会带来数据的丢失,硬盘的损坏,甚至是操作系统的奔溃等等。因此,正常规范的关闭计算机是非常重要的。

这仅仅是个人计算机,如果你面对的是服务器,服务器有成百上千的人访问,如果你非正常关机,很可能会给用户和服务器硬盘造成危害。正确的做法是,

先停止服务器上的服务之后再进行关机,可以避免损害

注意:服务器不能关机,只能重启。

(1)shutdown 命令

重启或关机命令,我推荐大家使用这个命令,因为在早期的时候只有shutdown命令会在关机重启之前保存和正常关闭启动的服务。当然,随着linux的发展,其他的关机命令也陆续有此功能。

[root@bogon ~]# shutdown [选项] [时间]
选项:
-c:取消前一个关机命令
-h:关机
-r:重启

如果你想立刻马上关机:

[root@bogon ~]# shutdown -h now

也可以设定某一时间关机,比如晚上10点关机:

[root@bogon ~]# shutdown -h 22:00

使用shutdown命令也可以重启:

[root@bogon ~]# shutdown -r now

如果你想取消此关机命令;

[root@bogon ~]# shutdown -c

  • 其他关机命令

[root@bogon ~]# halt
[root@bogon ~]# poweroff
[root@bogon ~]# init 0

  • 其他重启命令

[root@bogon ~]# reboot
[root@bogon ~]# init 6

(2)系统运行级别

上述的init你看你比较迷惑,待会是0待会是6,如何权衡呢?这就是系统运行级别。
0 关机
1 单用户
2 不完全多用户,不含NFS服务
3 安全多用户
4 未分配
5 图形界面
6 重启

我介绍一下单用户模式:类似于windows的安全模式,

只启动最核心的程序,用来修复操作等。

其中123是没有图形界面的,3是完全命令行模式。2是不含NFS命令行模式,NFS是linux与unix之间文件共享的一个服务。NFS有一定的安全隐患,因此一般不包含NFS服务,在我们的linux或unix系统上有更安全的文件共享服务,没必要使用NFS。

当然,很多时候你可能会忘记这些运行级别,在/etc/inittab文件中保存的正式运行级别的信息:

[root@bogon ~]# cat /etc/inittab
# Default runlevel. The runlevels used are:
#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user mode
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)
# 
id:3:initdefault:

其中最后一行是当前系统的默认运行级别,可以看出我的是3,完全多用户。

如果想恶搞别人,把它的默认运行级别设置成6,就无限重启了(哈哈)。通过vim或init修改运行级别的数字保存退出即可。

查询当前系统的运行级别:

[root@bogon ~]# runlevel
N 3

N代表进入3级别之前的级别,因为我们开机直接进入的3级别,N就表示NO没有运行级别。

当我们修改一下运行级别再查询时,就可以看到之前的运行级别。

[root@bogon ~]# init 5
[root@bogon ~]# runlevel 
3 5

当然我的界面并没有切换,因为我没有图形界面,系统只会报错。

(3)退出登录命令

一条很重要的命令,决定服务器一定的安全性,当我们使用logout时,就会退回到登录状态。可以避免不怀好意的人滥用你的服务器。
[root@bogon ~]# logout

不仅仅linux,window亦如此,既然我们选择这一行就要时刻提高安全意识。(曾经有一位香港的艺人,缺乏安全意识,最后永久退出了娱乐圈,警钟长鸣)。

附加:

在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农印象

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值