Heim >Betrieb und Instandhaltung >Betrieb und Wartung von Linux >Welche Befehle gibt es zum Abfragen von Dateien unter Linux?
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]“.
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.
<br/>
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
-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)
文件大小类:
-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
关于时间戳类的解释:为什么-atime 3 表示的是 [3,4),这个就很好解释了,我们这儿所说的时间是指时间段而非时刻,一“天”与一“分钟”都是指一个时间段,只有[3,4)这个半闭半开的区间才能完整地表示第三天。
权限类:
-perm [/|-]MODE MODE: 精确匹配权限 /MODE: 任何一类(u,g,o)对象的权限中只要能一位匹配即可,属于或关系。以前用'+',CentOS 7以'/'替代之 -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 'f*' \) -ls
即
[root@centos7 ~]#find /tmp -not \( -user root -o -name 'f*' \) -ls
实例13:查找/etc/下,除/etc/sane.d目录的其它所有.conf后缀的文件
[root@bash ~]# find /etc -path '/etc/sane.d' -prune -o -name '*.conf'
实例14:匹配文件路径或文件
[root@bash ~]# find /usr/ -path '*local' /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!