首页 > 系统相关 >Linux-文件查找

Linux-文件查找

时间:2023-12-11 19:23:56浏览次数:31  
标签:文件 vagrant etc 查找 fedora32 Linux root find

为帮助找到系统中的文件,可使用locate(根据名称查找命令)、find(根据不同的属性查找文件)以及grep(在文本文件内部搜索包含搜索文本的行)的命令。

使用locate命令根据名称查找文件

在大多数Linux系统上(包括Fedora和RHEL),每天会运行一次updatedb命令,收集Linux系统中的文件并存入一个数据库中。通过运行locate命令,可以搜索该数据库并找到数据库中所存储的文件位置。

在使用locate命令搜索文件时应注意以下几点:

  • 相对于find命令,Locate命令查找文件的速度更快,因为它搜索的是一个数据库而非整个文件系统。缺点是locate命令无法查找自上一次数据库创建以来新添加到系统中的任何文件。
  • 并不是文件系统中的所有文件都存储到数据库中。通过选择挂载类型、文件类型、文件系统类型以及挂载点,/etc/updated.conf文件的内容限制了被收集的文件名。例如,来自远程挂载的文件系统(cifs、nfs等)以及本地挂载的CD或DVD(iso9660)中的文件名就不会存入数据库。包含临时文件(/tmp)以及假脱机文件(/var/spool/cups)的路径也会被删除。
[root@fedora32 ~]# locate .bashrc

/etc/skel/.bashrc

/home/vagrant/.bashrc

/root/.bashrc

[root@fedora32 ~]# locate -i bashrc #-I 忽略大小写

/etc/bashrc

/etc/skel/.bashrc

/home/vagrant/.bashrc

/root/.bashrc

使用find命令搜索文件

Find命令是在文件系统中搜索文件的最佳命令,可以基于不同的属性进行查找。找到文件之后,可以通过运行任何所需的命令处理这些文件(使用-exec或-okay选项)。

作为普通用户,若对想要搜索的文件系统(如/etc目录)范围内所包含的文件没有完全访问权限,那么当使用find命令时会接收到许多错误信息。为摆脱这些信息,需要将标准错误定向到/dev/null。为此,在命令行的末尾添加以下代码:2 > /dev/null。其中2>将标准错误(STDERR)重定向到后面的选项(此时为/dev/null,输出被丢弃)。

  1. 根据文件名查找文件

想要根据文件名查找文件,可使用-name或-iname选项,为使搜索更加灵活的,可以使用文件匹配字符,如星号(*)和问号(?)。

[root@fedora32 ~]# find /etc -name passwd

/etc/passwd

/etc/pam.d/passwd

[root@fedora32 ~]# find /etc -iname '*passwd*' #-iname 匹配大小写的任意组合

/etc/passwd

/etc/passwd-

/etc/security/opasswd

/etc/pam.d/passwd

[root@fedora32 ~]#
  1. 根据大小查找文件

若磁盘被填满,并且想要找到最大的文件在什么位置,可以按照文件大小搜索系统。其中-size选项能够搜索大于或者小于给定大小的文件。

[root@fedora32 ~]# find /usr/share/ -size +10M #查找大于10M的文件

/usr/share/GeoIP/GeoLite2-City.mmdb

[root@fedora32 ~]# find /usr/share/ -size -1M | ls -lh #查找小于1M的文件

total 16K

-rw-r--r--. 1 root root 6.1K Nov 30 12:57 chmodbak

-rw-------. 1 root root 2.0K Nov 2 07:31 original-ks.cfg

-rw-r--r--. 1 root root 1.4K Dec 2 12:38 passwdbak

[root@fedora32 ~]# find . -size +10M | du -lh #du 查看文件大小

0 ./.emacs.d/auto-save-list

0 ./.emacs.d

56K .
  1. 根据用户查找文件

当试图查找文件时,可搜索一个特定的所有者(-user)或组(-group)。通过使用-not和-or,可以优化对与特定用户和组相关联文件的搜索。

[root@fedora32 ~]# find /home -user vagrant -ls

#输出/home目录中vagrant拥有的所有文件的列表

135391061 0 drwx------ 3 vagrant vagrant 95 Nov 27 02:20 /home/vagrant

135391062 4 -rw-r--r-- 1 vagrant vagrant 18 Jan 28 2020 /home/vagrant/.bash_logout

135391063 4 -rw-r--r-- 1 vagrant vagrant 141 Jan 28 2020 /home/vagrant/.bash_profile

[root@fedora32 ~]# find /home \( -user vagrant -or -user root \) -ls

#输出由vagrant或root拥有的文件

135172675 0 drwxr-xr-x 3 root root 21 Nov 2 07:29 /home

135391061 0 drwx------ 3 vagrant vagrant 95 Nov 27 02:20 /home/vagrant

135391062 4 -rw-r--r-- 1 vagrant vagrant 18 Jan 28 2020 /home/vagrant/.bash_logout

135391063 4 -rw-r--r-- 1 vagrant vagrant 141 Jan 28 2020 /home/vagrant/.bash_profile

[root@fedora32 ~]# find /etc -group date -ls #找出所有以ntp作为主要组的文件

[root@fedora32 ~]# find /var/spool -not -user root -ls #显示目录下所有不被root用户拥有的文件
  1. 根据权限查找文件

根据权限搜索文件可在find命令中使用-perm选项,根据数字或字母找到文件。在数字前使用一个连字符(-),那么所有三位都必须匹配;使用加号(+),那么任何一个数字都可以与搜索匹配,从而找到一个文件。若连字符和加号都不使用,那么所有数字必须完整、精确匹配。

[root@fedora32 ~]# find /usr/bin -perm 755 -ls

201427240 48 -rwxr-xr-x 1 root root 46584 Feb 2 2021 /usr/bin/cat

201328944 40 -rwxr-xr-x 1 root root 40600 Feb 3 2021 /usr/bin/getconf

[root@fedora32 ~]# find /usr -perm 755 -type d -ls | less #-type d 匹配目录类型
  1. 根据日期和时间查找文件
若忘记更改了哪个文件,查看过去10分钟内哪些内容被修改了:

[root@fedora32 ~]# find /etc/ -mmin -10

查看过去3天内是否有任何命令的所有权和权限被修改,或谁登录电脑:

[root@fedora32 ~]# find /bin /usr/bin /sbin /usr/sbin -ctime -3

从FTP服务器(/var/ftp)和web服务器(/var/www)中查找300多天没有访问过的文件,从而可以查看是否需要删除:

[root@fedora32 ~]# find /var/ftp -atime +300

Time选项(-atime、-ctime和-mtime)能够基于自文件被访问、更改或者文件的元数据被更改以来所经历的天数进行搜索。而min选项(-amin、-cmin和-mmin)则是基于所经历的分钟数进行搜索。

在作为min或time选项参数的数字之前应该添加一个连字符(表示从当前时间到数分钟或者数天前的时间)或者一个加号(表示分钟数或天数之间以及更久的时间)。如果没有使用连字符或者加号,则数字完全匹配。

  1. 在查找文件时使用‘not’和’or‘
    [root@fedora32 ~]# find /var/ -user vagrant -not -group root -ls
    
    #搜索被用户vagrant所拥有却没有被分配给组root的文件
    
    201326726 0 -rw-rw---- 1 vagrant mail 0 Nov 2 07:29 /var/spool/mail/vagrant
    
    [root@fedora32 ~]# find /var/ -user vagrant -and -size +1M -ls #可在搜索中添加多个需求,例一个文件必须被用户vagrant所拥有,同时文件大小必须大于1M
  1. 查找文件和执行命令

Find命令的一个最强大的功能是能够在找到的任何文件上执行命令。使用-exec和-ok的语法:

[root@fedora32 ~]# find [options] -exec command {} \;

[root@fedora32 ~]# find [options] -ok command {} \;

通过使用-exec选项,可以在每一个找到的文件上执行命令,而不必停下来询问是否执行。

使用-ok选项则会在每个匹配的文件上停留,并询问是否想要在该文件上执行命令。使用-ok选项的好处是如果对文件进行了一些破坏操作,那么在执行命令之前可以确认每个文件完好。

可以运行带有任何选项的find命令,找到所需的文件。然后输入-exec或者-ok选项,并紧跟想要在每个文件上运行的命令。一组大括号表示前面的find查找出来的文件名。若需要,每个文件可以在命令行中被多次包含。在命令行末尾,需要添加一个反斜杠和分号(\;)。

[root@fedora32 ~]# find /etc -iname passwd -exec echo "I found {}" \;

I found /etc/passwd

I found /etc/pam.d/passwd

[root@fedora32 ~]# find /etc -size +2M -exec du {} \; | sort -nr # sort -nr 按照文件大小从大到小的顺序存储find的输出

10308 /etc/udev/hwdb.bin

7884 /etc/selinux/targeted/policy/policy.32

使用-ok选项,在将找到的每个文件复制到/tmp/目录之前会对用户进行提示。只需要在每一行输入“y”或“n”并单击Enter键就可以决定是否复制文件,或直接单击Enter键跳过。

[root@fedora32 ~]# find /etc/ -user vagrant -ok -cp {} /tmp/ \;

< -cp ... /etc/sysconfig/network-scripts/ifcfg-eth1 > ? n

使用grep命令在文本中搜索

[root@fedora32 ~]# grep vagrant passwdbak

#使用grep命令在passwdbak文件中查找单词vagrant

vagrant:x:1000:1000::/home/vagrant:/bin/bash

[root@fedora32 ~]# grep -i vagrant passwdbak #-i 不区分大小写

vagrant:x:1000:1000::/home/vagrant:/bin/bash

[root@fedora32 ~]# grep -vi vagrant passwdbak

#-v 查找不包含所指定文本字符的行

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

#为了进行递归搜索,可以使用-r选项和一个目录作为参数

[root@fedora32 sbin]# grep -rli etc .

#-l 仅显示包含搜索文本的文件而不显示实际的文本行

./zic

./ldconfig

./getcap

./getpcaps

[root@fedora32 ~]# grep -ri --color vagrant passwdbak #-color 默认以红色标识

vagrant:x:1000:1000::/home/vagrant:/bin/bash

[root@fedora32 ~]# ip addr show | grep inet #使用ip命令输出了包括字符串inet的ip地址

#在命令的输出中搜索某一文本,可将该输出发送到grep命令。

inet 127.0.0.1/8 scope host lo

标签:文件,vagrant,etc,查找,fedora32,Linux,root,find
From: https://www.cnblogs.com/sijiu/p/17895327.html

相关文章

  • SpringBoot+Vue实现大文件分块上传
    1.项目背景由于用户需求,需要上传大量图片,只能通过上传压缩包的形式上传,可是压缩包过大时,又会出现上传超时的情况,故需要将压缩包分块上传,然后解压缩图片、若图片过大则再对图片进行压缩。2.分块上传分块上传我在用的时候发现有两种:第一种:分块合并接口全由后端接口生成;第二种:前端......
  • .NET Core MVC基础之返回文件类型
    .NETCoreMVC基础之返回文件类型......
  • Linux yum管理器
    yum是一种用于在基于RPM(RedHatPackageManager)的Linux系统上管理软件包的工具。以下是有关yum管理器的一些基本知识点:安装软件包:使用yuminstall命令安装软件包。例如,安装一个名为package_name的软件包:yuminstallpackage_name。升级软件包:使用yumupdate命令......
  • Linux LVM磁盘
    逻辑卷管理(LogicalVolumeManager,LVM)是一种用于在Linux系统上管理磁盘空间的技术。物理卷(PhysicalVolume,PV):物理卷是一个实际的磁盘分区或整个磁盘,用于创建卷组。使用pvcreate命令来将物理卷初始化为LVM。pvcreate/dev/sdX卷组(VolumeGroup,VG):卷组是由一个或多个物理卷组......
  • Linux 存储管理
    磁盘分区:磁盘分区是将硬盘划分为不同的逻辑区域。常用的分区工具包括fdisk和parted。fdisk命令用于创建、删除和管理分区。文件系统:文件系统是一种用于组织和存储文件数据的结构。常见的文件系统包括ext4、XFS、Btrfs等。使用mkfs命令格式化分区为特定文件系统。挂载......
  • Linux第一周学习内容(期末复习版)
    第一章初识Linux1.1Linux系统的简介对于Linux系统的介绍,老师只是大概的讲了一部分,印象最深的是Linux的几个特点:多用户、多任务、多线程、多CPU1.2虚拟机的安装对于虚拟机VMware的安装,老师讲的十分详细,基本上就是手把手一步步的教我们安装,书上的教程也十分到位,中间也有出现......
  • linux mysql libmysqlcppconn select,update mysql
    #include<chrono>#include<cstring>#include<ctime>#include<fstream>#include<iomanip>#include<iomanip>#include<iostream>#include<memory>#include<mutex>#include<queue>#include<......
  • linux下安装nginx
    第一步:压缩包准备压缩包,最好准备一个稳定的版本:下载地址我这边选用的是1.24.0双版本号第二步:解压在相对应的目录下,执行命令:tar-zxvfnginx-1.18.0.tar.gz第三步:配置\编译推荐使用:./configure如有额外的需求执行:./configure--prefix=/usr/local/nginx-1.20.2--with-http_ssl_mo......
  • vue2项目webpack打包的优化策略,降低打包文件后的大小
    1.区分开发模式和打包模式的main.js入口文件首先,在项目的根目录下创建一个名为vue.config.js的文件(如果已存在,请跳过此步骤)。然后对于你的项目中的mian.js新建一个相同内容的js文件,然后将这2个mian.js文件分别命名为打包模式的入口文件:main-prod.js开发模式的入口文件:mian-dev.js......
  • 文件操作
    文件操作一、什么是文件文件就是应用程序等在运行过程中,产生的数据在操作系统中的虚拟概念我们需要将这些数据文件保存到硬盘中,要通过操作系统完成对系统内存和硬盘的操作二、文件操作的进本流程我们在使用open()操作时要依次填入(‘文件名’,'读写方式','编码格式')#1.打开......