Rumah > Artikel > Operasi dan penyelenggaraan > Apakah arahan untuk menanyakan fail dalam Linux?
Arahan pertanyaan fail Linux: 1. cari, digunakan untuk mencari fail yang memenuhi syarat, sintaksnya ialah "cari [parameter pilih] [gaya]"; 2. cari, digunakan untuk mencari fail dalam direktori yang ditentukan , sintaks "cari [PILIHAN]... [laluan carian] [keadaan carian] [tindakan pemprosesan]".
Persekitaran pengendalian tutorial ini: sistem linux5.9.8, komputer Dell G3.
Terdapat dua arahan biasa untuk menanyakan fail dalam Linux:
cari
cari
cari
locate membolehkan pengguna mencari dengan pantas sama ada terdapat fail yang ditentukan dalam sistem fail. Kaedahnya adalah dengan membuat pangkalan data terlebih dahulu yang merangkumi nama dan laluan semua fail dalam sistem Kemudian apabila mencari, anda hanya perlu menanyakan pangkalan data ini tanpa benar-benar masuk ke dalam sistem fail. Dalam pengedaran umum, penciptaan pangkalan data secara automatik dilaksanakan dalam crontab.
1 Format arahan:
locate [选择参数] [样式]
2. Fungsi perintah:
Arahan locate boleh mencari fail dengan cepat apabila mencari pangkalan data adalah carian kabur Pangkalan data dikemas kini oleh program updatedb dibuat secara berkala oleh daemon perintah mencari pangkalan data Ia lebih pantas daripada mencari keseluruhan data cakera keras, tetapi kelemahannya ialah jika fail yang ditemui oleh locate baru-baru ini dibuat atau dinamakan semula, ia mungkin tidak ditemui dalam tetapan lalai, updatedb akan dijalankan sekali sehari . Anda boleh Kemas kini nilai tetapan dengan mengubah suai crontab. (etc/crontab)
locate ditetapkan untuk mencari fail yang memenuhi syarat Ia akan menyimpan nama fail dan direktori dalam pangkalan data apabila mencari fail pertanyaan, ia akan mencari /var/lib/mlocate/mlocage .db, untuk mencari fail atau direktori yang memenuhi syarat gaya templat Anda boleh menggunakan aksara khas (seperti "*" atau "?", dsb.) untuk menentukan gaya templat Jika templat yang ditentukan ialah kcpa*ner akan menemui semua aksara permulaan Fail atau direktori yang rentetannya ialah kcpa dan berakhir dengan ner Contohnya, jika nama itu kcpartner, jika nama direktori ialah kcpa_ner, semua fail dalam direktori, termasuk subdirektori, akan disenaraikan.
Arahan locate mempunyai fungsi yang serupa dengan fungsi carian fail, tetapi arahan locate mula-mula mencipta pangkalan data indeks untuk semua fail dan data direktori dalam cakera keras melalui proses kemas kini, dan terus mencari indeks apabila melaksanakan loacte Kelajuan pertanyaan akan dikurangkan Lebih cepat, pangkalan data indeks biasanya diuruskan oleh sistem pengendalian, tetapi anda juga boleh terus mengeluarkan kemas kini untuk memaksa sistem mengubah suai pangkalan data dengan segera.
3. Parameter perintah:
-e akan dikecualikan daripada julat carian.
-1 jika ialah 1. Kemudian mulakan mod selamat. Dalam mod selamat, pengguna tidak akan melihat fail dengan kebenaran yang tidak membenarkan mereka melihat. Ini akan mula perlahan kerana locate mesti pergi ke sistem fail sebenar untuk mendapatkan maklumat kebenaran fail.
-f mengecualikan sistem fail tertentu Contohnya, kami tidak meletakkan fail dalam sistem fail proc dalam pangkalan data secara tidak munasabah.
-q Mod senyap, tiada mesej ralat akan dipaparkan.
-n Paparkan paling banyak n output.
-r Gunakan ungkapan biasa untuk mencari keadaan.
-o Menentukan nama pangkalan data.
-d Tentukan laluan ke pangkalan data
-h Paparkan maklumat tambahan
- V Paparkan maklumat versi program
4 Contoh penggunaan:
Contoh 1: Cari semua fail bermula dengan sh dalam dsb. direktori
[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 ~#]
Instance 2: Abaikan kes
[root@centos7 ~#]locate -i ~/d /root/Desktop/root/Documents/root/Downloads /root/d1 /root/dd /var/lib/pcp/pmdas/root/domain.h [root@centos7 ~#]
Instance 3: Kemas kini pangkalan data
[root@centos7 ~#]locate ~/a /root/anaconda-ks.cfg [root@centos7 ~#]updatedb [root@centos7 ~#]locate ~/a /root/a.sh /root/anaconda-ks.cfg [root@centos7 ~#]
cari
1. Tujuan utama:
Arahan find ialah alat carian masa nyata yang melengkapkan carian untuk fail dengan merentasi laluan yang ditentukan apabila menggunakan arahan ini , jika tidak dipilih parameter, kemudian cari subdirektori dan fail dalam direktori semasa dan paparkannya sebagai tambahan, sebarang rentetan sebelum parameter akan dianggap sebagai nama direktori yang akan dicari. Kerana ia adalah carian traversal masa nyata, find mempunyai ciri-ciri berikut: carian masa nyata yang tepat, kelajuan perlahan hanya boleh mencari direktori yang telah dibaca oleh pengguna dan kebenaran pelaksanaan.
2.find sintaks:
<br/>
Cari laluan: tentukan laluan sasaran tertentu, lalai ialah direktori semasa
Syarat carian: Kriteria carian yang ditentukan boleh berdasarkan nama fail, saiz, jenis, kebenaran, dsb. lalainya adalah untuk mencari semua fail di bawah laluan yang ditentukan
Tindakan pemprosesan: Beroperasi pada fail yang memenuhi syarat, output ke skrin secara lalai
3. Syarat carian:
Cari mengikut nama fail dan inod
Cari mengikut pemilik dan kumpulan
Cari mengikut jenis fail
Cari berdasarkan syarat gabungan logik
Cari berdasarkan saiz fail
Cari berdasarkan cap masa
Cari mengikut kebenaran
4. Tindakan pemprosesan:
-cetak. : Tindakan lalai, dipaparkan pada Skrin
-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视频教程》
Atas ialah kandungan terperinci Apakah arahan untuk menanyakan fail dalam Linux?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!