Linux에서 파일을 쿼리하는 명령은 무엇입니까?

青灯夜游
풀어 주다: 2022-03-24 18:57:18
원래의
14871명이 탐색했습니다.

Linux 파일 쿼리 명령: 1. 조건을 충족하는 파일을 찾는 데 사용되는 찾기, "locate [매개 변수 선택] [스타일]" 구문 2. 찾기, 지정된 디렉터리에서 파일을 찾는 데 사용되는 "찾기" [OPTION ]... [검색 경로] [검색 조건] [처리 동작]".

Linux에서 파일을 쿼리하는 명령은 무엇입니까?

이 튜토리얼의 운영 환경: linux5.9.8 시스템, Dell G3 컴퓨터. linux에서 파일을 쿼리하기위한 두 가지 공통 명령이 있습니다. 시스템의 파일. 방법은 먼저 시스템에 있는 모든 파일의 이름과 경로를 포함하는 데이터베이스를 생성하는 것입니다. 그런 다음 검색할 때 실제로 파일 시스템에 깊이 들어가지 않고 이 데이터베이스를 쿼리하기만 하면 됩니다. 일반 배포에서는 데이터베이스 생성이 crontab에서 자동으로 실행됩니다.

1. 명령 형식:

locate [选择参数] [样式]
로그인 후 복사
  • 2. 명령 기능:

  • locate 명령은 데이터베이스를 검색할 때 파일을 빠르게 찾을 수 있습니다. 찾기는 업데이트된 프로그램에 의해 업데이트됩니다. updateb는 cron 데몬에 의해 주기적으로 생성됩니다. 데이터베이스 검색 시 하드디스크 데이터 검색은 빠르지만, Locate로 찾은 파일이 최근에 생성되었거나 이름이 변경된 경우에는 찾을 수 없다는 것이 단점입니다. 기본 설정에서는 updateb가 하루에 한 번 실행됩니다. 설정을 업데이트하는 crontab. (etc/crontab)
  • locate는 조건을 충족하는 파일을 검색하도록 지정됩니다. 이는 데이터베이스에 파일과 디렉터리 이름을 저장합니다. 쿼리 파일을 찾으면 /var/lib/mlocate/mlocage.db를 검색하여 찾습니다. 템플릿 스타일 조건이 있는 파일 또는 디렉터리의 경우 특수 문자(예: "*" 또는 "?")를 사용하여 템플릿 스타일을 지정할 수 있습니다. 찾기는 kcpa인 모든 시작 문자열과 kcpartner와 같이 ner로 끝나는 파일 또는 디렉터리를 찾습니다. 디렉터리 이름이 kcpa_ner인 경우 하위 디렉터리를 포함하여 디렉터리의 모든 파일이 나열됩니다.

  • locate 명령어는 파일 찾기 검색 기능과 비슷한 기능을 가지고 있지만, Loacte 명령어는 먼저 업데이트 프로그램을 통해 하드디스크에 있는 모든 파일과 디렉터리 데이터에 대한 인덱스 데이터베이스를 생성하고, loacte 실행 시 해당 인덱스를 직접 검색합니다. 쿼리 속도가 빨라집니다. 인덱스 데이터베이스는 일반적으로 운영 체제에서 관리되지만, 업데이트를 직접 실행하여 시스템이 인덱스 데이터베이스를 즉시 수정하도록 할 수도 있습니다.

3. 명령 매개변수:

-e는 검색 범위에서 제외됩니다.

-1이면 1입니다. 그런 다음 안전 모드를 시작하십시오. 안전 모드에서 사용자는 보기를 허용하지 않는 권한이 있는 파일을 볼 수 없습니다. 파일의 권한 정보를 얻으려면 찾기가 실제 파일 시스템으로 이동해야 하기 때문에 속도가 느려지기 시작합니다.

-f는 특정 파일 시스템을 제외합니다. 예를 들어 데이터베이스의 proc 파일 시스템에 파일을 부당하게 배치하지 않습니다.

-q 자동 모드에서는 오류 메시지가 표시되지 않습니다.

-n은 최대 n개의 출력을 표시합니다.

    -r은 정규식을 사용하여 조건을 검색합니다.
  • -o 데이터베이스 이름을 지정합니다.
  • -d 데이터베이스 경로 지정
  • -h 보조 정보 표시
  • -V 프로그램 버전 정보 표시
  • 4. 사용 예:

  • 예 1: etc 디렉토리 검색 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 ~#]
    로그인 후 복사

    로 시작하는 모든 파일을 다운로드하세요. 예 2: 대소문자 무시

    [root@centos7 ~#]locate -i ~/d
    /root/Desktop/root/Documents/root/Downloads
    /root/d1
    /root/dd
    /var/lib/pcp/pmdas/root/domain.h
    [root@centos7 ~#]
    로그인 후 복사
  • 예 3: 데이터베이스 업데이트
  • [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. 주요 목적:

  • find 명령은 실시간 검색 도구입니다. , 지정된 경로를 탐색하여 파일 검색을 완료합니다. 이 명령을 사용할 때 매개변수를 선택하지 않으면 현재 디렉터리에서 하위 디렉터리와 파일이 검색되어 표시됩니다. 또한 매개변수 앞의 모든 문자열은 검색할 디렉터리 이름입니다. 실시간 순회 검색이기 때문에 find는 정확한 실시간 검색, 느린 속도는 사용자에게 읽기 및 실행 권한이 있는 디렉토리만 검색할 수 있다는 특징을 가지고 있습니다.

2.find 구문:

<br/>
로그인 후 복사

검색 경로: 특정 대상 경로를 지정합니다. 기본값은 현재 디렉터리입니다

검색 조건: 지정된 검색 기준(파일 이름, 크기, 유형 등) 기본적으로는 지정된 경로에서 모든 파일을 찾는 것입니다처리 작업: 조건에 맞는 파일에 대해 작업하고 기본적으로 화면에 출력합니다

3.

파일 이름과 inode에 따라 검색

  • 소유자 및 그룹으로 검색

  • 파일 형식으로 검색

  • 논리적 조합 조건에 따라 검색

파일 크기에 따라 검색

타임스탬프 기준 검색
  • 권한 기준 검색
  • 4. 처리 작업:
  • -인쇄: 기본 작업, 화면에 표시됨

  • -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)

Linux에서 파일을 쿼리하는 명령은 무엇입니까?

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
로그인 후 복사

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视频教程

위 내용은 Linux에서 파일을 쿼리하는 명령은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿