Maison > Article > Opération et maintenance > Quelles sont les commandes pour interroger des fichiers sous Linux ?
Commandes de requête de fichiers Linux : 1. localiser, utilisé pour rechercher des fichiers qui remplissent les conditions, la syntaxe "localiser [sélectionner les paramètres] [style]" 2. rechercher, utilisé pour rechercher des fichiers dans le répertoire spécifié, la syntaxe "trouver [OPTION ]... [Chemin de recherche] [Condition de recherche] [Action de traitement]".
L'environnement d'exploitation de ce tutoriel : système linux5.9.8, ordinateur Dell G3.
Il existe deux commandes courantes pour interroger des fichiers sous Linux :
locate
find
locate
locate permet aux utilisateurs de rechercher rapidement s'il existe des fichiers spécifiques dans le fichier les fichiers du système. La méthode consiste à créer d’abord une base de données qui inclut les noms et les chemins de tous les fichiers du système. Ensuite, lors de la recherche, il vous suffit d’interroger cette base de données sans approfondir le système de fichiers. Dans une distribution générale, la création de base de données est automatiquement exécutée dans crontab.
1. Format de commande :
locate [选择参数] [样式]
2. Fonction de commande : La commande
locate peut trouver rapidement des fichiers lors de la recherche dans la base de données. Locate est une recherche floue. La base de données est mise à jour par le programme updateb et est créée périodiquement par le démon cron. disque dur lors de la recherche dans la base de données, la recherche de données est rapide, mais l'inconvénient est que si les fichiers trouvés par localisation sont récemment créés ou renommés, ils risquent de ne pas être trouvés. Dans le paramètre par défaut, updateb s'exécutera une fois par jour. la crontab pour mettre à jour les paramètres valeur fixe. (etc/crontab)
locate est conçu pour rechercher les fichiers qui remplissent les conditions. Il stockera les fichiers et les noms de répertoires dans la base de données. Lors de la recherche de fichiers, il recherchera /var/lib/mlocate/mlocage.db pour trouver. fichiers qui correspondent aux conditions. Pour les fichiers ou répertoires avec des conditions de style de modèle, vous pouvez utiliser des caractères spéciaux (tels que "*" ou "?") pour spécifier le style de modèle comme kcpa*ner, Locate trouvera toutes les chaînes de départ qui sont kcpa et les fichiers ou répertoires se terminant par ner, comme kcpartner, si le nom du répertoire est kcpa_ner, tous les fichiers du répertoire, y compris les sous-répertoires, seront répertoriés.
La commande Locate a une fonction similaire à la fonction de recherche de fichiers, mais la commande Locate crée d'abord une base de données d'index pour tous les fichiers et données de répertoire du disque dur via le programme de mise à jour, et recherche directement l'index lors de l'exécution de la localisation. La vitesse de requête sera plus rapide. Index La base de données est généralement gérée par le système d'exploitation, mais vous pouvez également émettre directement une mise à jour pour forcer le système à modifier immédiatement la base de données d'index.
3. Paramètres de commande :
-e sera exclu de la plage de recherche.
-1 si vaut 1. Ensuite, démarrez le mode sans échec. En mode sans échec, les utilisateurs ne verront pas les fichiers dont les autorisations ne leur permettent pas de les voir. Cela commencera à ralentir car la localisation doit accéder au système de fichiers réel pour obtenir les informations d'autorisation du fichier.
-f exclut des systèmes de fichiers spécifiques. Par exemple, nous ne plaçons pas de manière déraisonnable les fichiers du système de fichiers proc dans la base de données.
-q Mode silencieux, aucun message d'erreur ne sera affiché.
-n affiche au plus n sorties.
-r utilise des expressions régulières pour rechercher des conditions.
-o Spécifie le nom de la base de données.
-d Spécifiez le chemin de la base de données
-h Afficher les informations auxiliaires
-V Afficher les informations sur la version du programme
4. Téléchargez tous les fichiers commençant par 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 ~#]Exemple 2 : Ignorer la casse
[root@centos7 ~#]locate -i ~/d /root/Desktop/root/Documents/root/Downloads /root/d1 /root/dd /var/lib/pcp/pmdas/root/domain.h [root@centos7 ~#]Exemple 3 : Mettre à jour la base de données
[root@centos7 ~#]locate ~/a /root/anaconda-ks.cfg [root@centos7 ~#]updatedb [root@centos7 ~#]locate ~/a /root/a.sh /root/anaconda-ks.cfg [root@centos7 ~#]find
1. Objectif principal :
find est un outil de recherche en temps réel. , terminez la recherche de fichiers en parcourant le chemin spécifié ; lors de l'utilisation de cette commande, si aucun paramètre n'est sélectionné, les sous-répertoires et les fichiers seront recherchés dans le répertoire courant et affichés en plus, toute chaîne précédant les paramètres sera considérée comme la ; nom du répertoire à rechercher. Puisqu'il s'agit d'une recherche transversale en temps réel, find présente les caractéristiques suivantes : recherche précise en temps réel, vitesse lente, ne peut rechercher que les répertoires pour lesquels l'utilisateur dispose des autorisations de lecture et d'exécution.
Syntaxe 2.find :
<br/>Chemin de recherche : spécifiez le chemin cible spécifique, la valeur par défaut est le répertoire actuel
Selon le nom de fichier et la recherche d'inode
Recherche par propriétaire et groupe
Recherche par type de fichier
Recherche basée sur des conditions de combinaison logique
Recherche basée sur la taille du fichier
Recherche basée sur l'horodatage
Recherche basée sur les autorisations
-print : Action par défaut, affichée à l'écran
.-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视频教程》
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!