Heim  >  Artikel  >  Betrieb und Instandhaltung  >  Welche Befehle gibt es zum Abfragen von Dateien unter Linux?

Welche Befehle gibt es zum Abfragen von Dateien unter Linux?

青灯夜游
青灯夜游Original
2022-03-24 18:57:1814872Durchsuche

Linux-Dateiabfragebefehle: 1. lokalisieren, wird verwendet, um Dateien zu finden, die die Bedingungen erfüllen, die Syntax „lokalisieren [Parameter auswählen] [Stil]“ 2. finden, wird verwendet, um Dateien im angegebenen Verzeichnis zu finden, die Syntax „find [OPTION ]... [Suchpfad] [Suchbedingung] [Verarbeitungsaktion]“.

Welche Befehle gibt es zum Abfragen von Dateien unter Linux?

Die Betriebsumgebung dieses Tutorials: Linux5.9.8-System, Dell G3-Computer.

Es gibt zwei gängige Befehle zum Abfragen von Dateien unter Linux:

  • locate

  • find

locate

locate ermöglicht Benutzern die schnelle Suche, ob sich bestimmte Dateien darin befinden Datei Systemdateien. Die Methode besteht darin, zunächst eine Datenbank zu erstellen, die die Namen und Pfade aller Dateien im System enthält. Bei der Suche müssen Sie dann nur diese Datenbank abfragen, ohne tatsächlich tief in das Dateisystem einzudringen. In einer allgemeinen Distribution wird die Datenbankerstellung automatisch in crontab ausgeführt.

1. Befehlsformat:

locate [选择参数] [样式]

2. Befehlsfunktion: Der Befehl

locate kann beim Durchsuchen der Datenbank eine Fuzzy-Suche durchführen. Die Datenbank wird vom Cron-Daemon regelmäßig aktualisiert Die Datensuche auf der Festplatte ist schnell, der Nachteil besteht jedoch darin, dass die von „locate“ gefundenen Dateien möglicherweise nicht einmal am Tag gefunden werden die Einstellungen durch Ändern des festen Werts. (etc/crontab)

locate ist für die Suche nach Dateien bestimmt, die die Bedingungen erfüllen. Es speichert Datei- und Verzeichnisnamen in der Datenbank und sucht nach Dateien in /var/lib/mlocate/mlocage.db Dateien, die den Bedingungen entsprechen, können Sie Sonderzeichen (z. B. „*“ oder „?“) verwenden, um den Vorlagenstil anzugeben. Wenn Sie beispielsweise die Vorlage als kcpa*ner angeben, „locate“ findet alle Startzeichenfolgen, die „kcpa“ und „ner“ sind, und Dateien oder Verzeichnisse, die mit „ner“ enden, wie z. B. „kcpartner“. Wenn der Verzeichnisname „kcpa_ner“ lautet, werden alle Dateien im Verzeichnis, einschließlich der Unterverzeichnisse, aufgelistet.

Der Befehl „locate“ hat eine ähnliche Funktion wie die Suchfunktion „Find File“, aber der Befehl „locate“ erstellt zunächst über das Aktualisierungsprogramm eine Indexdatenbank für alle Dateien und Verzeichnisdaten auf der Festplatte und sucht beim Ausführen des „locate“ direkt nach dem Index Befehl. Die Abfragegeschwindigkeit ist schneller. Die Datenbank wird im Allgemeinen vom Betriebssystem verwaltet, Sie können jedoch auch direkt eine Aktualisierung durchführen, um das System zu zwingen, die Indexdatenbank sofort zu ändern.

3. Befehlsparameter:

  • -e werden aus dem Suchbereich ausgeschlossen.

  • -1 wenn 1 ist. Starten Sie dann den abgesicherten Modus. Im abgesicherten Modus sehen Benutzer keine Dateien mit Berechtigungen, die ihnen das Anzeigen verbieten. Dies wird langsamer, da „locate“ zum eigentlichen Dateisystem gehen muss, um die Berechtigungsinformationen der Datei zu erhalten.

  • -f schließt bestimmte Dateisysteme aus. Beispielsweise platzieren wir Dateien im Proc-Dateisystem nicht unangemessen in der Datenbank.

  • -q Leiser Modus, es werden keine Fehlermeldungen angezeigt.

  • -n zeigt höchstens n Ausgänge an.

  • -r verwendet reguläre Ausdrücke, um nach Bedingungen zu suchen.

  • -o Geben Sie den Namen der Datenbank an. ?? Laden Sie alle Dateien herunter, die mit sh

    [root@CentOS7 ~#]locate /etc/sh       
    /etc/shadow
    /etc/shadow-
    /etc/shells
    [root@centos7 ~#]locate -r "/etc/\sh "  # 正则,锚定词首
    /etc/shadow
    /etc/shadow-
    /etc/shells
    [root@centos7 ~#]
    beginnen. Beispiel 2: Groß-/Kleinschreibung ignorieren.
  • [root@centos7 ~#]locate -i ~/d
    /root/Desktop/root/Documents/root/Downloads
    /root/d1
    /root/dd
    /var/lib/pcp/pmdas/root/domain.h
    [root@centos7 ~#]
    . Beispiel 3: Datenbank aktualisieren.
  • [root@centos7 ~#]locate ~/a
    /root/anaconda-ks.cfg
    [root@centos7 ~#]updatedb
    [root@centos7 ~#]locate ~/a
    /root/a.sh
    /root/anaconda-ks.cfg
    [root@centos7 ~#]
    Schließen Sie die Suche nach Dateien ab, indem Sie den angegebenen Pfad durchlaufen. Wenn bei Verwendung dieses Befehls keine Parameter ausgewählt sind, werden Unterverzeichnisse und Dateien im aktuellen Verzeichnis durchsucht und außerdem jede Zeichenfolge vor den Parametern angezeigt Verzeichnisname, der durchsucht werden soll. Da es sich um eine Echtzeit-Durchlaufsuche handelt, weist find die folgenden Merkmale auf: genaue Echtzeitsuche, langsame Geschwindigkeit, möglicherweise nur das Durchsuchen von Verzeichnissen, für die der Benutzer über Lese- und Ausführungsberechtigungen verfügt.

  • 2.find-Syntax:
  • <br/>

  • Suchpfad: Geben Sie den spezifischen Zielpfad an, der Standardwert ist das aktuelle Verzeichnis

Suchbedingungen: angegebene Suchkriterien, die Dateiname, Größe, Typ usw. sein können. Berechtigungen usw. Fahren Sie fort; standardmäßig werden alle Dateien unter dem angegebenen Pfad gefunden

Verarbeitungsaktion: Dateien bearbeiten, die die Bedingungen erfüllen, und standardmäßig auf dem Bildschirm ausgeben

3

According für den Dateinamen und die Inode -Suche

Search nach Eigentümer und Group

Search basierend auf logischen Kombinationsbedingungen basierend auf Dateigröße

Suche basierend auf Zeitstempel

  • Suche basierend auf Berechtigungen

  • 4. Verarbeitungsaktion:
  • -print: Standardaktion, auf dem Bildschirm angezeigt
  • -ls: 类似于对查找到的文件执行 ls -l 命令

  • -delete: 删除查找到的文件

  • -fls file: 查找到的所有长格式的信息保存至指定文件中

  • -ok COMMMAND {} \; 对查找到的每个文件执行由COMMAND指定的命令,且都会交互式要求用户确认

  • -exec COMMAND {} \; 对查找到的每个文件执行由COMMAND指定的命令;

  • {}: 用于引用查找至的文件名称自身

  • find 传递查找到的文件至后面指定的命令时,查找到所有符号条件的文件一次性传递给后面的命令

  • 有些命令不能接受过多的参数,此时命令执行可能会失败,用 xargs 来规避此问题

  • find |xargs COMMAND

    5.常用参数:

    文件名和inode类:

    • -name "文件名称":支持使用glob, *, ?, [], [^]

    • -iname "文件名称":不区分字母大小写

    • -inum n:按inode号查找

    • -somefile name:相同的inode号文件

    • -links n:链接数为n的文件

    • -regex "PATTERN":以PATTERN匹配整个文件路径字符串,而不仅仅是文件名称

    属主属组类:

    • -user USERNAME:查找属主为指定用户(UID)的文件

    • -group GROUPNAME:查找属组为指定组(GID)的文件

    • -uid UserID:查找属主为指定的UID号的文件

    • -gid GroupID:查找属组为指定的GID号的文件

    • -nouser:查找没有属主的文件

    • -nogroup:查找没有属组的文件

    文件类型类:

    • b      block (buffered) special

    • c      character (unbuffered) special

    • d      directory

    • p      named pipe (FIFO)f      regular file

    • l      symbolic  link

    • s      socket

    逻辑组合条件类:

       组合条件:

    • 与:-a

    • 或:-o

    • 非:-not, !

       摩根定律:

    • (非P) 或(非Q) = 非(P且Q)

    • (非P) 且 (非Q) = 非(P或Q)

    Welche Befehle gibt es zum Abfragen von Dateien unter Linux?

    Welche Befehle gibt es zum Abfragen von Dateien unter Linux?

    文件大小类:

    -size [+|-]#UNIT
        常用单位:k,M,G 
    #UNIT: (#-1,#]
        如:5M 表示 (4M,5M]
    -#UNIT: [0,#-1]
        如:-5M 表示 [0,5M]
    +#UNIT: (#,oo)
        如:+5M 表示 (6M,oo)

    关于文件大小类的解释:为什么-size 5M 还是找精确的5M而是表示(4M,5M], 试想文件的大小指什么?是指文件数据的大小还是包括了元数据后的大小,那你找元数据的大小有意义吗?但文件的大小肯定是包含元数据大小的,而我们一般以文件大小找文件时往往考虑的是文件数据的大小;另外,精确查找一定大小的文件意义不大;所以这里的大小会有1个单位的浮动。

    时间戳类:

    以”天”为单位:
        -atime [+|-]#        
            #: [#,#+1)
            +#: [#+1,oo)        
            -#: [0,#)
        -mtime    
        -ctime
    以“分钟”为单位:
        -amin    
        -mmin    
        -cmin

    Welche Befehle gibt es zum Abfragen von Dateien unter Linux?

    关于时间戳类的解释:为什么-atime 3 表示的是 [3,4),这个就很好解释了,我们这儿所说的时间是指时间段而非时刻,一“天”与一“分钟”都是指一个时间段,只有[3,4)这个半闭半开的区间才能完整地表示第三天。

    权限类:

    -perm [/|-]MODE
        MODE: 精确匹配权限
        /MODE: 任何一类(u,g,o)对象的权限中只要能一位匹配即可,属于或关系。以前用&#39;+&#39;,CentOS 7以&#39;/&#39;替代之
        -MODE: 每一类对象都必须同时拥有指定权限,属于与关系 
        0:表示不关注

    示例:

    • find -perm 644 表示要严格匹配644的文件

    • find -perm +222 表示u,g,o任何一类用户有写权限即匹配

    • find -perm -222 表示仅严格匹配写权限,即每个用户必须要有写权限

    • find -perm -002 表示仅严格匹配other用户的写权限

    6.使用示例:

    实例1:将配置文件备份到指定目录下并添加扩展名.org

    [root@localhost ~]# find . -name "*.conf" -exec cp -r {} /testdir/{}.org \; 
    [root@localhost ~]# cd /testdir/
    [root@localhost testdir]# ls
    a.conf.org  b.conf.org
    [root@localhost testdir]#

    实例2:.提示删除存在时间超过3天以上的属主为young的临时文件

    [root@localhost ~]# find /tmp -ctime +3 -user young -exec rm -fr {} \;
    [root@localhost ~]#

    实例3:在主目录中查找可被其它用户写入的文件

    [root@localhost ~]# find ~ -perm -002
    /root/num
    [root@localhost ~]# find ~ -perm -002 -exec chmod o-w {} \;
    [root@localhost ~]# ll num
    --w--w---- 1 root root 35 Jan 21 05:55 num

    实例4:查找/var目录下属主为root,且属组为mail的所有文件

    [root@localhost ~]# find /var -user root  -group mail -ls #默认关系就是与
    1179652    4 drwxrwxr-x   2 root     mail         4096 Jan 23 11:04 /var/spool/mail

    实例5:查找/var目录下不属于root、lp、gdm的所有文件

    [root@localhost ~]# find /var ! -user root ! -user lp ! -user gdm

    实例6:查找/var目录下最近一周内其内容修改过,同时属主不为root,也不是postfix的文件

    [root@localhost ~]# find /var/ -mtime -7 ! -user root ! -user postfix -ls
    1179676    4 drwx------   3 daemon   daemon       4096 Jan 23 11:04 /var/spool/at
    524399    4 drwx------   2 nginx    nginx        4096 Jan 23 03:16 /var/log/nginx
    524413    0 -rw-r--r--   1 nginx    root            0 Jan 23 03:16 /var/log/nginx/access.log
    524391    0 -rw-r--r--   1 nginx    root            0 Jan 21 03:44 /var/log/nginx/error.log
    132174    4 drwx------   3 nginx    nginx        4096 Jan 21 03:44 /var/lib/nginx
    132175    4 drwx------   7 nginx    nginx        4096 Jan 21 03:44 /var/lib/nginx/tmp
    132173    4 drwx------   2 nginx    root         4096 Jan 21 03:44 /var/lib/nginx/tmp/client_body
    132219    4 drwx------   2 nginx    root         4096 Jan 21 03:44 /var/lib/nginx/tmp/proxy
    132221    4 drwx------   2 nginx    root         4096 Jan 21 03:44 /var/lib/nginx/tmp/uwsgi
    132222    4 drwx------   2 nginx    root         4096 Jan 21 03:44 /var/lib/nginx/tmp/scgi
    132220    4 drwx------   2 nginx    root         4096 Jan 21 03:44 /var/lib/nginx/tmp/fastcgi

    实例7:查找当前系统上没有属主或属组,且最近一个周内曾被访问过的文件

    [root@bash ~]# find / -nouser -o -nogroup -a -atime -7

    实例8:查找/etc目录下大于1M且类型为普通文件的所有文件

    [root@bash ~]# find /etc/ -size +1M -type f
    /etc/selinux/targeted/policy/policy.29
    /etc/udev/hwdb.bin

    实例9:查找/etc目录下所有用户都没有写权限的文件

    [root@bash ~]# find /etc/ ! -perm /222
    /etc/pki/ca-trust/extracted/java/cacerts
    /etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt
    /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
    /etc/pki/ca-trust/extracted/pem/email-ca-bundle.pem
    /etc/pki/ca-trust/extracted/pem/objsign-ca-bundle.pem
    /etc/lvm/profile/cache-mq.profile
    /etc/lvm/profile/cache-smq.profile
    /etc/lvm/profile/command_profile_template.profile
    /etc/lvm/profile/metadata_profile_template.profile
    /etc/lvm/profile/thin-generic.profile
    /etc/lvm/profile/thin-performance.profile
    /etc/openldap/certs/password
    /etc/gshadow
    /etc/dbus-1/system.d/cups.conf
    /etc/shadow
    /etc/gshadow-
    /etc/ld.so.conf.d/kernel-3.10.0-327.el7.x86_64.conf
    /etc/shadow-
    /etc/udev/hwdb.bin
    /etc/machine-id
    /etc/pam.d/cups
    /etc/sudoers

    实例10:查找/etc目录下至少有一类用户没有执行权限的文件

    [root@bash ~]# find /etc/ ! -perm -111 # 至少有一类用户没有就是所有用户都没有

    实例11:.查找/etc/init.d目录下,所有用户都有执行权限,且其它用户有写权限的文件

    [root@bash ~]# find /etc/init.d -perm -113
    /etc/init.d

    或者

    [root@bash ~]# find /etc/init.d -perm -111 -perm -002
    /etc/init.d

    实例12:摩根定律找出/tmp目录下,属主不是root,且文件名不以f开头的文件

    [root@centos7 ~]#find /tmp \( -not -user root -a -not -name &#39;f*&#39; \) -ls

    [root@centos7 ~]#find /tmp -not \( -user root -o -name &#39;f*&#39; \) -ls

    实例13:查找/etc/下,除/etc/sane.d目录的其它所有.conf后缀的文件

    [root@bash ~]# find /etc -path &#39;/etc/sane.d&#39; -prune -o -name &#39;*.conf&#39;

    实例14:匹配文件路径或文件

    [root@bash ~]# find /usr/ -path &#39;*local&#39;
    /usr/bin/abrt-action-analyze-ccpp-local
    /usr/share/doc/postfix-2.10.1/examples/qmail-local
    /usr/share/aclocal
    /usr/libexec/postfix/local
    /usr/local

    实例15:基于正则表达式匹配文件路径

    [root@bash ~]# find . -regex ".*txt$"              
    ./.mozilla/firefox/4dqu966q.default/revocations.txt
    ./vimrc/spf13-vim/LICENSE.txt
    ./a.txt

    相关推荐:《Linux视频教程

    Das obige ist der detaillierte Inhalt vonWelche Befehle gibt es zum Abfragen von Dateien unter Linux?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Stellungnahme:
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn