搜索

linux查找文件内容命令

发布网友 发布时间:2022-02-26 15:24

我来回答

2个回答

懂视网 时间:2022-02-26 19:46

Linux中find的使用法?

操作系统:centos7

软件版本 :find4.6

设备型号:ThinkPad E15

find命令用于查找指定目录下的文件,同时也可以调用其它命令执行相应的操作。

find语法格式:find  路径名称   选项       

find命令选项:

-name 按照文件名查找文件。  “名称”

-perm 按照文件权限来查找文件。666 777 等

-user 按照文件属主来查找文件

-group 按照文件所属的组来查找文件

-mtime  -n  / +n 按照文件的更改时间来查找文件,

- n 表示文件更改时间距现在n天以内

+ n 表示文件更改时间距现在n天以前

-type 查找某一类型的文件

b - 块设备文件

d - 目录

c - 字符设备文件

p - 管道文件

l- 符号链接文件

f - 普通文件

-size n  查找符合指定的文件大小的文件

-exec    对匹配的文件执行该参数所给出的其他linux命令, 相应命令的形式为' 命令 {} ;,注意{ }和 ;之间的空格,{}代表查到的内容

例1:查找当前目录下所有的TXT格式的文件

[root@xuegod63 ~]# touch a.txt xuegod.txt

[root@xuegod63 ~]#  find . -name "*.txt"

。。。

./a.txt

./xuegod.txt

2、按照更改时间或访问时间等查找文件

如果希望按照更改时间来查找文件,可以使用mtime,atime或ctime选项

mtime:  文件最后一次修改的时间

atime:  最后一次访问时间

ctime:  文件的最后一次变化时间,也就是修改时间

例1:在root目录下查找更改时间在1天以内,被黑客修改的文件

[root@xuegod63 ~]# find /root/ -mtime -1

对查找内容执行相应命令

-exec    这个选项参数后面可以跟自定义的SHELL命令,格式如下:

例2:把查找到的文件复制到一个指定的目录

[root@xuegod63 ~]# touch {1,2,3}.back

[root@xuegod63 mnt]# find /root -name "*.txt" -exec cp {} /opt  ;

例3:查找多个类型文件

find命令中比较符的使用:

-a  and 并且

-o  or  或者

+  超过

-   低于

[root@xuegod63 ~]# touch a.pdf back.sh

[root@xuegod63 ~]# find ./ -name "*.sh" -o -name "*.pdf"

[root@xuegod63 ~]# find /etc -size +20k -a -size -50k | wc -l

22

[root@xuegod63 ~]# find /etc -size +20k  | wc -l

49

例4:  按权限查找:-perm

[root@xuegod63 ~]# find /bin/ -perm 755   # 等于0755权限的文件或目录

[root@xuegod63 ~]# find /bin/ -perm  -4 #-perm -4  至少有4权限的文件或目录

例5:查找的目录深度:

-maxdepth 1  #只查找目录第一层的文件和目录

如:查找/bin目录下权限等于4的文件

[root@xuegod63 ~]# find /etc/ -maxdepth 1 -perm 4 | more

总结:find命令使用方法和参数

find命令选项:

-name 按照文件名查找文件。  “名称”

-perm 按照文件权限来查找文件。666 777 等

-user 按照文件属主来查找文件

-group 按照文件所属的组来查找文件

-mtime  -n  / +n 按照文件的更改时间来查找文件,

- n 表示文件更改时间距现在n天以内

+ n 表示文件更改时间距现在n天以前

-type 查找某一类型的文件

b - 块设备文件

d - 目录

c - 字符设备文件

p - 管道文件

l- 符号链接文件

f - 普通文件

-size n  查找符合指定的文件大小的文件

-exec    对匹配的文件执行该参数所给出的其他linux命令, 相应命令的形式为' 命令 {} ;,注意{ }和 ;之间的空格,{}代表查到的内容

热心网友 时间:2022-02-26 16:54

搜索、查找文件当中的内容,一般最常用的是grep命令,另外还有egrep, vi命令也能搜索文件里面内容

 

1:搜索某个文件里面是否包含字符串,使用grep "search content" filename1, 例如

 

$ grep ORA alert_gsp.log

$ grep "ORA" alert_gsp.log

 

例如我们需要搜索、查找utlspadv.sql文件中包含ORA的字符内容

[oracle@DB-Server admin]$ grep "ORA" utlspadv.sql
--   ORA-XXXXX:        Monitoring already started. If for example you want
--   ORA-20111:
--   ORA-20112:
--   ORA-20113: 'no active monitoring job found'
--   ORA-20113: 'no active monitoring job found'
-- 0 |<PS> =>DBS2.REGRESS.RDBMS.DEV.US.ORACLE.COM 0 0 2 99.3% 0% 0.7% ""
-- |<PR> DBS1.REGRESS.RDBMS.DEV.US.ORACLE.COM=> 100% 0% 0% "" |<PR> ...
-- =>DBS2.REGRESS.RDBMS.DEV.US.ORACLE.COM 92 7 99.3% 0% 0.7% "" |<PR> ...
-- |<C> CAPTURE_USER1=>DBS2.REGRESS.RDBMS.DEV.US.ORACLE.COM 2 0 0 0.E+00
-- |<C> CAPTURE_USER1=>DBS2.REGRESS.RDBMS.DEV.US.ORACLE.COM
-- ORA-20111:
-- ORA-20112:
--   ORA-20100:
--   ORA-20113: 'no active monitoring job found'
--   ORA-20113: 'no active monitoring job found'
[oracle@DB-Server admin]$

 

如上所示,这个是一个模糊匹配,其实我是想要查看ORA这类错误,那么我要过滤掉哪一些没有用的,搜索的内容修改一下即可(当然也可以使用特殊参数,后面有讲述),如下所示。

[oracle@DB-Server admin]$ grep "ORA-" utlspadv.sql
--   ORA-XXXXX:        Monitoring already started. If for example you want
--   ORA-20111:
--   ORA-20112:
--   ORA-20113: 'no active monitoring job found'
--   ORA-20113: 'no active monitoring job found'
-- ORA-20111:
-- ORA-20112:
--   ORA-20100:
--   ORA-20113: 'no active monitoring job found'
--   ORA-20113: 'no active monitoring job found'
[oracle@DB-Server admin]$

 

 

2: 如果你想搜索多个文件是否包含某个字符串,可以使用下面方式

 

grep "search content" filename1 filename2.... filenamen

grep "search content" *.sql

例如我想查看当前目录下,哪些sql脚本包含视图v$temp_space_header(注意:搜索的内容如果包含特殊字符时,必须进行转义处理,如下所示)

 

[oracle@DB-Server admin]$ grep "v\$temp_space_header" *.sql
catspacd.sql:drop public synonym v$temp_space_header;
catspacd.sql:drop public synonym gv$temp_space_header;
catspace.sql:create or replace view v_$temp_space_header as select * from v$temp_space_header;
catspace.sql:create or replace public synonym v$temp_space_header for v_$temp_space_header;
catspace.sql:create or replace view gv_$temp_space_header as select * from gv$temp_space_header;
catspace.sql:create or replace public synonym gv$temp_space_header
catspace.sql:            FROM gv$temp_space_header
[oracle@DB-Server admin]$

 

 

3:如果需要显示搜索文本在文件中的行数,可以使用参数-n

[oracle@DB-Server admin]$ grep  -n "v\$temp_space_header" *.sql
catspacd.sql:68:drop public synonym v$temp_space_header;
catspacd.sql:71:drop public synonym gv$temp_space_header;
catspace.sql:1952:create or replace view v_$temp_space_header as select * from v$temp_space_header;
catspace.sql:1953:create or replace public synonym v$temp_space_header for v_$temp_space_header;
catspace.sql:1956:create or replace view gv_$temp_space_header as select * from gv$temp_space_header;
catspace.sql:1957:create or replace public synonym gv$temp_space_header
catspace.sql:2357:            FROM gv$temp_space_header
[oracle@DB-Server admin]$

 

 

4: 如果搜索时需要忽略大小写问题,可以使用参数-i

 
[oracle@DB-Server admin]$ grep  "V\$TEMP_SPACE_HEADER" *.sql
[oracle@DB-Server admin]$ grep -i "V\$TEMP_SPACE_HEADER"  *.sql
catspacd.sql:drop public synonym v$temp_space_header;
catspacd.sql:drop public synonym gv$temp_space_header;
catspace.sql:create or replace view v_$temp_space_header as select * from v$temp_space_header;
catspace.sql:create or replace public synonym v$temp_space_header for v_$temp_space_header;
catspace.sql:create or replace view gv_$temp_space_header as select * from gv$temp_space_header;
catspace.sql:create or replace public synonym gv$temp_space_header
catspace.sql:            FROM gv$temp_space_header
[oracle@DB-Server admin]$

另外,例如检查安装的MySQL组件

[root@DB-Server init.d]# rpm -qa | grep -i mysql

MySQL-devel-5.6.23-1.linux_glibc2.5

MySQL-client-5.6.23-1.linux_glibc2.5

MySQL-server-5.6.23-1.linux_glibc2.5

 

 

5:从文件内容查找不匹配指定字符串的行:

 

$ grep –v "被查找的字符串" 文件名

例如查找某些进程时,我们不想显示包含命令grep ora_mmon的进程,如下所示

[oracle@DB-Server admin]$ ps -ef  | grep ora_mmon 
oracle   16675 16220  0 00:09 pts/1    00:00:00 grep ora_mmon
oracle   21412     1  0 Aug22 ?        00:00:07 ora_mmon_gsp
[oracle@DB-Server admin]$ ps -ef  | grep ora_mmon  | grep -v grep
oracle   21412     1  0 Aug22 ?        00:00:07 ora_mmon_gsp
[oracle@DB-Server admin]$

 

6:搜索、查找匹配的行数:

 

$ grep -c "被查找的字符串" 文件名

[oracle@DB-Server admin]$
[oracle@DB-Server admin]$ grep   "v\$temp_space_header" *.sql
catspacd.sql:drop public synonym v$temp_space_header;
catspacd.sql:drop public synonym gv$temp_space_header;
catspace.sql:create or replace view v_$temp_space_header as select * from v$temp_space_header;
catspace.sql:create or replace public synonym v$temp_space_header for v_$temp_space_header;
catspace.sql:create or replace view gv_$temp_space_header as select * from gv$temp_space_header;
catspace.sql:create or replace public synonym gv$temp_space_header
catspace.sql:            FROM gv$temp_space_header
[oracle@DB-Server admin]$ grep -c  "v\$temp_space_header"  catspacd.sql
2
[oracle@DB-Server admin]$ grep -c  "v\$temp_space_header"  catspace.sql
5
[oracle@DB-Server admin]$

 

 

7:有些场景,我们并不知道文件类型、或那些文件包含有我们需要搜索的字符串,那么可以递归搜索某个目录以及子目录下的所有文件

 

[oracle@DB-Server ~]$ grep -r "v\$temp_space_header" /u01/app/oracle/proct/11.1.0/dbhome_1/rdbms/admin/

/u01/app/oracle/proct/11.1.0/dbhome_1/rdbms/admin/catspace.sql:create or replace view v_$temp_space_header as select * from v$temp_space_header;

/u01/app/oracle/proct/11.1.0/dbhome_1/rdbms/admin/catspace.sql:create or replace public synonym v$temp_space_header for v_$temp_space_header;

/u01/app/oracle/proct/11.1.0/dbhome_1/rdbms/admin/catspace.sql:create or replace view gv_$temp_space_header as select * from gv$temp_space_header;

/u01/app/oracle/proct/11.1.0/dbhome_1/rdbms/admin/catspace.sql:create or replace public synonym gv$temp_space_header

/u01/app/oracle/proct/11.1.0/dbhome_1/rdbms/admin/catspace.sql: FROM gv$temp_space_header

/u01/app/oracle/proct/11.1.0/dbhome_1/rdbms/admin/catspacd.sql:drop public synonym v$temp_space_header;

/u01/app/oracle/proct/11.1.0/dbhome_1/rdbms/admin/catspacd.sql:drop public synonym gv$temp_space_header;

[oracle@DB-Server ~]$

 

8:如果我们只想获取那些文件包含搜索的内容,那么可以使用下命令

 

[oracle@DB-Server ~]$ grep -H -r "v\$temp_space_header" /u01/app/oracle/proct/11.1.0/dbhome_1/rdbms/admin/ | cut -d: -f1

/u01/app/oracle/proct/11.1.0/dbhome_1/rdbms/admin/catspace.sql

/u01/app/oracle/proct/11.1.0/dbhome_1/rdbms/admin/catspace.sql

/u01/app/oracle/proct/11.1.0/dbhome_1/rdbms/admin/catspace.sql

/u01/app/oracle/proct/11.1.0/dbhome_1/rdbms/admin/catspace.sql

/u01/app/oracle/proct/11.1.0/dbhome_1/rdbms/admin/catspace.sql

/u01/app/oracle/proct/11.1.0/dbhome_1/rdbms/admin/catspacd.sql

/u01/app/oracle/proct/11.1.0/dbhome_1/rdbms/admin/catspacd.sql

[oracle@DB-Server ~]$ grep -H -r "v\$temp_space_header" /u01/app/oracle/proct/11.1.0/dbhome_1/rdbms/admin/ | cut -d: -f1 | uniq

/u01/app/oracle/proct/11.1.0/dbhome_1/rdbms/admin/catspace.sql

/u01/app/oracle/proct/11.1.0/dbhome_1/rdbms/admin/catspacd.sql

[oracle@DB-Server ~]$

 

9:如果只想获取和整个搜索字符匹配的内容,那么可以使用参数w

 

你可以对比一下两者的区别

[oracle@DB-Server admin]$ grep -w "ORA" utlspadv.sql
--   ORA-XXXXX:        Monitoring already started. If for example you want
--   ORA-20111:
--   ORA-20112:
--   ORA-20113: 'no active monitoring job found'
--   ORA-20113: 'no active monitoring job found'
-- ORA-20111:
-- ORA-20112:
--   ORA-20100:
--   ORA-20113: 'no active monitoring job found'
--   ORA-20113: 'no active monitoring job found'
[oracle@DB-Server admin]$ grep  "ORA" utlspadv.sql
--   ORA-XXXXX:        Monitoring already started. If for example you want
--   ORA-20111:
--   ORA-20112:
--   ORA-20113: 'no active monitoring job found'
--   ORA-20113: 'no active monitoring job found'
-- 0 |<PS> =>DBS2.REGRESS.RDBMS.DEV.US.ORACLE.COM 0 0 2 99.3% 0% 0.7% ""
-- |<PR> DBS1.REGRESS.RDBMS.DEV.US.ORACLE.COM=> 100% 0% 0% "" |<PR> ...
-- =>DBS2.REGRESS.RDBMS.DEV.US.ORACLE.COM 92 7 99.3% 0% 0.7% "" |<PR> ...
-- |<C> CAPTURE_USER1=>DBS2.REGRESS.RDBMS.DEV.US.ORACLE.COM 2 0 0 0.E+00
-- |<C> CAPTURE_USER1=>DBS2.REGRESS.RDBMS.DEV.US.ORACLE.COM
-- ORA-20111:
-- ORA-20112:
--   ORA-20100:
--   ORA-20113: 'no active monitoring job found'
--   ORA-20113: 'no active monitoring job found'
[oracle@DB-Server admin]$

 

10: grep命令结合find命令搜索

[oracle@DB-Server admin]$ find . -name '*.sql' -exec grep -i 'v\$temp_space_header' {} \; -print
create or replace view v_$temp_space_header as select * from v$temp_space_header;
create or replace public synonym v$temp_space_header for v_$temp_space_header;
create or replace view gv_$temp_space_header as select * from gv$temp_space_header;
create or replace public synonym gv$temp_space_header
FROM gv$temp_space_header
./catspace.sql
drop public synonym v$temp_space_header;
drop public synonym gv$temp_space_header;
./catspacd.sql
[oracle@DB-Server admin]$

 

 

11: egrep -w -R 'word1|word2' ~/klbtmp

 

12: vi命令其实也能搜索文件里面的内容,只不过没有grep命令功能那么方便、强大。

声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
Top