LINUX find命名,以及cat、more、less、tail、head命令的区别

 

1、find说明:

Linux中find常见用法示例·
find  path -option  [-print ]    [ -exec   -ok   command ]  {} \;

# -print 将查找到的文件输出到标准输出
# -exec command    {} \;       -----将查到的文件执行command操作,{} 和 \;之间有空格
# -ok 和-exec相同,只不过在操作前要询用户

方法:

第一种实现方法:find + exec +grep
 find . -type f -exec  grep -Hn --color=auto "CUDA_VERSION" {} \;

第二种实现方法 find+xargs +grep
find . -type f | xargs  grep -Hn --color=auto "CUDA_VERSION" 

查找目录下的所有文件中是否含有某个字符串 
find . | xargs grep -ri "IBM" 
查找目录下的所有文件中是否含有某个字符串,并且只打印出文件名 
find . | xargs grep -ri "IBM" -l 


提升搜索速度的常用方式 —加上文件名过滤
find . -type f -name "*.py" | xargs  grep -Hn --color=auto "CUDA_VERSION" 


参数解释:

find . “.” 表示当前目录 
-type f 表示普通文件类型,因为find还可以查找块文件,套接字文件等类型。 
-name "*.py"过滤搜索的文件名字特征。 
-exec [xx] {} \; 针对发现的内容执行XX命令。其中{}表示find的内容,注意 {} 和\之间有空格,\;表示分割不同的find内容。 
| xargs [xx] 把前一个命令的输出当做是xx 命令的输入。其中 ”|“表示通道。 
-Hn H表示显示文件名称, n表示显示行号。 
--color=auto 表示高亮显示输出。

 

如果你想在当前目录下 查找"hello,world!"字符串,可以这样:

grep -rn "hello,world!" *

* : 表示当前目录所有文件,也可以是某个文件名

-r 是递归查找

-n 是显示行号

-R 查找所有文件包含子目录

-i 忽略大小写

 

下面是一些有意思的命令行参数:

grep -i pattern files :不区分大小写地搜索。默认情况区分大小写, 

grep -l pattern files :只列出匹配的文件名, 

grep -L pattern files :列出不匹配的文件名, 

grep -w pattern files :只匹配整个单词,而不是字符串的一部分(如匹配‘magic’,而不是‘magical’), 

grep -C number pattern files :匹配的上下文分别显示[number]行, 

grep pattern1 | pattern2 files :显示匹配 pattern1 或 pattern2 的行, 

grep pattern1 files | grep pattern2 :显示既匹配 pattern1 又匹配 pattern2 的行。 

 

这里还有些用于搜索的特殊符号:

\< 和 \> 分别标注单词的开始与结尾。

例如: 

grep man * 会匹配 ‘Batman’、‘manic’、‘man’等, 

grep '\

grep '\' 只匹配‘man’,而不是‘Batman’或‘manic’等其他的字符串。 

'^':指匹配的字符串在行首, 

'$':指匹配的字符串在行尾,  

 

2,xargs配合grep查找

find -type f -name '*.php' | xargs grep 'GroupRecord'

 

########################################

LINUX find命名说明

      find -name "*.txt" -print         查找txt结尾的文件并输出到屏幕上 
      find /cmd ".sh" -print            查找/cmd目录下所有sh文件,并输出 
      find . -perm 755 -print           查找当前目录下权限为755的文件,并输出 
      find `pwd` -user root -print      查找当前目录下属主为root的文件,并输出 
      find ./ -group sunwill -print     查找当前目录下所属主是sunwill的文件 
      find /var -mtime -5 -print        查找/var目录下更改时间为5天内的所有文件 
      find /var -mtime +5 -print        查找/var目录下更改时间为5天以前的所有文件 
      find /var -newer "myfile1" ! -newer "myfile2" -print     查找/var目录下比myfile1新,但是比myfile2旧的所有文件。 
      find /var -type d -print          查找/var目录下所有目录 
      find /var -type l -print          查找/var目录下所有的符号链接文件。 
      find . -size +1000000c -print     查找当前目录下大于1000000字节的文件 
      find / -name "con.file" -depth -print     查找根目录下有无"con.file",若无则在其子目录中查找 
      find . -type f -exec ls -l {} \;  查找当前目录下是否有普通文件,若有则执行ls -l 


-name    filename       #查找名为filename的文件
-perm                          #按执行权限来查找
-user     username     #按文件属主来查找
-group groupname    #按组来查找
-mtime    -n +n            #按文件更改时间来查找文件,-n指n天以内,+n指n天以前
-atime     -n +n            #按文件访问时间来查GIN: 0px">-perm                          #按执行权限来查找
-user     username      #按文件属主来查找
-group groupname     #按组来查找
-mtime    -n +n            #按文件更改时间来查找文件,-n指n天以内,+n指n天以前
-atime     -n +n            #按文件访问时间来查找文件,-n指n天以内,+n指n天以前
-ctime     -n +n            #按文件创建时间来查找文件,-n指n天以内,+n指n天以前
-nogroup                     #查无有效属组的文件,即文件的属组在/etc/groups中不存在
-nouser                       #查无有效属主的文件,即文件的属主在/etc/passwd中不存
-newer    f1 !f2                找文件,-n指n天以内,+n指n天以前
-ctime     -n +n                #按文件创建时间来查找文件,-n指n天以内,+n指n天以前
-nogroup                      #查无有效属组的文件,即文件的属组在/etc/groups中不存在
-nouser                       #查无有效属主的文件,即文件的属主在/etc/passwd中不存
-newer    f1 !f2                #查更改时间比f1新但比f2旧的文件
-type      b/d/c/p/l/f          #查是块设备、目录、字符设备、管道、符号链接、普通文件
-size       n[c]                #查长度为n块[或n字节]的文件
-depth                        #使查找在进入子目录前先行查找完本目录
-fstype                       #查更改时间比f1新但比f2旧的文件
-mount                        #查文件时不跨越文件系统mount点
-follow                       #如果遇到符号链接文件,就跟踪链接所指的文件
-cpio                         #对匹配的文件使用cpio命令,将他们备份到磁带设备中
-prune                        #忽略某个目录

实例:
1)在/tmp中查找所有的*.h,并在这些文件中查找“SYSCALL_VECTOR",最后打印出所有包含"SYSCALL_VECTOR"的文件名
     A) find    /tmp    -name    "*.h"    | xargs    -n50    grep SYSCALL_VECTOR
     B) grep    SYSCALL_VECTOR    /tmp/*.h | cut     -d':'    -f1| uniq > filename
     C) find    /tmp    -name "*.h"    -exec grep "SYSCALL_VECTOR"    {}    \; -print

2)查找文件后   删除

     find / -name filename -exec rm -rf {} \;

     find / -name filename -ok rm -rf {} \;


3)比如要查找磁盘中大于3M的文件:
     find . -size +3000k -exec ls -ld {} ;

4)将find出来的东西拷到另一个地方
     find *.c -exec cp '{}' /tmp ';'
如果有特殊文件,可以用cpio,也可以用这样的语法:
     find dir -name filename -print | cpio -pdv newdir

6)查找2004-11-30 16:36:37时更改过的文件
# A=`find ./ -name "*php"` |    ls -l --full-time $A 2>/dev/null | grep "2004-11-30 16:36:37


二、linux下find命令的用法:

1. 基本用法:
      find / -name 文件名
     find ver1.d ver2.d -name '*.c' -print         查找ver1.d,ver2.d *.c文件并打印
     find . -type d -print                从当前目录查找,仅查找目录,找到后,打印路径名。可用于打印目录结构。
2. 无错误查找:
      find / -name access_log 2 >/dev/null
3. 按尺寸查找:
      find / -size 1500c        (查找1,500字节大小的文件,c表示字节)
      find / -size +1500c      (查找大于1,500字节大小的文件,+表示大于)   
      find / -size +1500c      (查找小于1,500字节大小的文件,-表示小于)   
4. 按时间:
      find / -amin n             最后n分钟
      find / -atime n           最后n天
      find / -cmin n            最后n分钟改变状态
      find / -ctime n           最后n天改变状态
5. 其它:
      find / -empty           空白文件、空白文件夹、没有子目录的文件夹
      find / -false             查找系统中总是错误的文件
      find / -fstype type   找存在于指定文件系统的文件,如type为ext2
      find / -gid n             组id为n的文件
      find / -group gname 组名为gname的文件
      find / -depth n           在某层指定目录中优先查找文件内容
      find / -maxdepth levels      在某个层次目录中按递减方式查找
6. 逻辑
      -and 条件与 -or 条件或
7. 查找字符串
      find . -name '*.html' -exec grep 'mailto:'{}

 

 

2、cat、more、less、tail、head命令的区别

 

一、cat 显示文件连接文件内容的工具 

cat 是一个文本文件(查看)和(连接)工具,通常与more搭配使用,与more不同的是cat可以合并文件。查看一个文件的内容,用cat比较简单,就是cat后面直接接文件名。 

如:root@ubuntu :/# cat /etc/passwd 
  
1、cat 语法结构: 

cat [选项] [文件]... 
  
选项 
  -A, --show-all                  等价于 -vET 
  -b, --number-nonblank    对非空输出行编号 
  -e                                    等价于 -vE 
  -E, --show-ends             在每行结束处显示 $ 
  -n, --number                   对输出的所有行编号 
  -s, --squeeze-blank       不输出多行空行 
  -t                                   与 -vT 等价 
  -T, --show-tabs              将跳格字符显示为 ^I 
  -u                                  (被忽略) 
  -v, --show-nonprinting   使用 ^ 和 M- 引用,除了 LFD 和 TAB 之外 
      --help                        显示此帮助信息并离开 

2、cat 查看文件内容实例: 

[root@localhost ~]# cat /etc/profile    注:查看/etc/目录下的profile文件内容; 
[root@localhost ~]# cat -b /etc/fstab   注:查看/etc/目录下的profile内容,并且对非空白行进行编号,行号从1开始; 
[root@localhost ~]# cat -n /etc/profile    注:对/etc目录中的profile的所有的行(包括空白行)进行编号输出显示; 
[root@localhost ~]# cat -E /etc/profile     注:查看/etc/下的profile内容,并且在每行的结尾处附加$符号; 
  
cat 加参数-n 和nl工具差不多,文件内容输出的同时,都会在每行前面加上行号; 
[root@localhost ~]# cat -n /etc/profile 
[root@localhost ~]# nl /etc/profile 

cat 可以同时显示多个文件的内容,比如我们可以在一个cat命令上同时显示两个文件的内容; 
[root@localhost ~]# cat /etc/fstab /etc/profile 
  
cat 对于内容极大的文件来说,可以通过管道|传送到more 工具,然后一页一页的查看; 
[root@localhost ~]# cat /etc/fstab /etc/profile | more 
  
3、cat 的创建、连接文件功能实例: 

cat 有创建文件的功能,创建文件后,要以EOF或STOP结束; 

[root@localhost ~]# cat > linuxsir.org.txt << EOF 注:创建linuxsir.org.txt文件; 
> 我来测试 cat 创建文件,并且为文件输入内容;       注:这是为linuxsir.org.txt文件输入内容; 
> 北南南北 测试;                   注:这是为linuxsir.org.txt文件输入内容; 
> EOF   注:退出编辑状态; 

[root@localhost ~]# cat linuxsir.org.txt 注:我们查看一下linuxsir.org.txt文件的内容; 

我来测试 cat 创建文件,并且为文件输入内容; 
北南南北 测试; 
  
cat 还有向已存在的文件追加内容的功能; 
[root@localhost ~]# cat linuxsir.txt 注:查看已存在的文件linuxsir.txt 内容; 
I am BeiNanNanBei From LinuxSir.Org .    注:内容行 
我正在为cat命令写文档 

[root@localhost ~]# cat >> linuxsir.txt << EOF   注:我们向linuxsir.txt文件追加内容; 
> 我来测试cat向文档追加内容的功能;       注:这是追回的内容 
> OK? 
> OK~ 
> 北南 呈上 
> EOF   注:以EOF退出; 

[root@localhost ~]# cat linuxsir.txt 注:查看文件内容,看是否追回成功。 
I am BeiNanNanBei From LinuxSir.Org . 
我正在为cat命令写文档 

我来测试cat向文档追加内容的功能;   
OK? 
OK~ 
北南 呈上 

cat 连接多个文件的内容并且输出到一个新文件中; 
假设我们有sir01.txt、sir02.tx和sir03.txt ,并且内容如下; 

[root@localhost ~]# cat sir01.txt   
123456 
i am testing 

[root@localhost ~]# cat sir02.txt 
56789 
BeiNan Tested 

[root@localhost ~]# cat sir03.txt 
09876 
linuxsir.org testing 
  
我想通过cat 把sir01.txt、sir02.txt及sir03.txt 三个文件连接在一起(也就是说把这三个文件的内容都接在一起)并输出到一个新的文件sir04.txt 中。 

注意:其原理是把三个文件的内容连接起来,然后创建sir04.txt文件,并且把几个文件的内容同时写入sir04.txt中。特别值得一提的是,如果您输入到一个已经存在的sir04.txt 文件,会把sir04.txt内容清空。 

[root@localhost ~]# cat sir01.txt sir02.txt sir03.txt > sir04.txt   #会把sir04.txt内容清空
[root@localhost ~]# more sir04.txt 
123456 
i am testing 
56789 
BeiNan Tested 
09876 
linuxsir.org testing 
  
cat 把一个或多个已存在的文件内容,追加到一个已存在的文件中 
[root@localhost ~]# cat sir00.txt 
linuxsir.org forever 

[root@localhost ~]# cat sir01.txt sir02.txt sir03.txt >> sir00.txt   #追加sir04.txt内容

[root@localhost ~]# cat sir00.txt 
linuxsir.org forever 
123456 
i am testing 
56789 
BeiNan Tested 
09876 
linuxsir.org testing 
  
警告:我们要知道 > 意思是创建,>> 是追加。千万不要弄混了。造成失误可不是闹着玩的; 

二、more 文件内容或输出查看工具 

more 是我们最常用的工具之一,最常用的就是显示输出的内容,然后根据窗口的大小进行分页显示,然后还能提示文件的百分比; 

[root@localhost ~]# more /etc/profile 

1、more 的语法、参数和命令: 

more [参数选项] [文件] 

参数如下: 
+num   从第num行开始显示; 
-num   定义屏幕大小,为num行; 
+/pattern   从pattern 前两行开始显示; 
-c   从顶部清屏然后显示; 
-d   提示Press space to continue, 'q' to quit.(按空格键继续,按q键退出),禁用响铃功能; 
-l    忽略Ctrl+l (换页)字符; 
-p    通过清除窗口而不是滚屏来对文件进行换页。和-c参数有点相似; 
-s    把连续的多个空行显示为一行; 
-u    把文件内容中的下划线去掉退出more的动作指令是q 

2、more 的参数应用举例: 

[root@localhost ~]# more -dc /etc/profile    注:显示提示,并从终端或控制台顶部显示; 
[root@localhost ~]# more +4 /etc/profile      注:从profile的第4行开始显示; 
[root@localhost ~]# more -4 /etc/profile      注:每屏显示4行; 
[root@localhost ~]# more +/MAIL /etc/profile     注:从profile中的第一个MAIL单词的前两行开始显示; 

3、more 的动作指令: 

我们查看一个内容较大的文件时,要用到more的动作指令,比如ctrl+f(或空格键) 是向下显示一屏,ctrl+b是返回上一屏; Enter键可以向下滚动显示n行,要通过定,默认为1行; 

我们只说几个常用的; 自己尝试一下就知道了; 

Enter            向下n行,需要定义,默认为1行; 
Ctrl+f            向下滚动一屏; 
空格键          向下滚动一屏; 
Ctrl+b           返回上一屏;
 
=                   输出当前行的行号; 
:f                   输出文件名和当前行的行号; 
v                   调用vi编辑器; 
! 命令            调用Shell,并执行命令; 
q                   退出more当我们查看某一文件时,想调用vi来编辑它,不要忘记了v动作指令,这是比较方便的; 

4、其它命令通过管道和more结合的运用例子: 

比如我们列一个目录下的文件,由于内容太多,我们应该学会用more来分页显示。这得和管道 | 结合起来,比如: 
[root@localhost ~]# ls -l /etc | more 

三、less 查看文件内容 工具 

less 工具也是对文件或其它输出进行分页显示的工具,应该说是linux正统查看文件内容的工具,功能极其强大;您是初学者,我建议您用less。由于less的内容太多,我们把最常用的介绍一下; 

1、less的语法格式: 

less [参数] 文件 

常用参数 
-c 从顶部(从上到下)刷新屏幕,并显示文件内容。而不是通过底部滚动完成刷新; 
-f 强制打开文件,二进制文件显示时,不提示警告; 
-i 搜索时忽略大小写;除非搜索串中包含大写字母; 
-I 搜索时忽略大小写,除非搜索串中包含小写字母; 
-m 显示读取文件的百分比; 
-M 显法读取文件的百分比、行号及总行数; 
-N 在每行前输出行号; 
-p pattern 搜索pattern;比如在/etc/profile搜索单词MAIL,就用 less -p MAIL /etc/profile 
-s 把连续多个空白行作为一个空白行显示; 
-Q 在终端下不响铃; 
  
比如:我们在显示/etc/profile的内容时,让其显示行号; 
[root@localhost ~]# less -N    /etc/profile 
  
2、less的动作命令: 

进入less后,我们得学几个动作,这样更方便 我们查阅文件内容;最应该记住的命令就是q,这个能让less终止查看文件退出; 

动作: 
回车键 向下移动一行; 
y 向上移动一行; 
空格键 向下滚动一屏; 
b 向上滚动一屏; 
d 向下滚动半屏; 
h less的帮助; 
u 向上洋动半屏; 
w 可以指定显示哪行开始显示,是从指定数字的下一行显示;比如指定的是6,那就从第7行显示; 
g 跳到第一行; 
G 跳到最后一行; 
p n% 跳到n%,比如 10%,也就是说比整个文件内容的10%处开始显示; 
/pattern 搜索pattern ,比如 /MAIL表示在文件中搜索MAIL单词; 
v 调用vi编辑器; 
q 退出less 
!command 调用SHELL,可以运行命令;比如!ls 显示当前列当前目录下的所有文件; 
  
就less的动作来说,内容太多了,用的时候查一查man less是最好的。在这里就不举例子了; 

四、head 工具,显示文件内容的前几行 

head 是显示一个文件的内容的前多少行; 

用法比较简单; 
head -n 行数值 文件名; 

比如我们显示/etc/profile的前10行内容,应该是: 
[root@localhost ~]# head -n 10 /etc/profile 

五、tail 工具,显示文件内容的最后几行 

tail 是显示一个文件的内容的最后多少行; 

用法比较简单; 
tail   -n 行数值 文件名; 

比如我们显示/etc/profile的最后5行内容,应该是: 
[root@localhost ~]# tail -n 5 /etc/profile 

tail -f /var/log/syslog      #显示文件 syslog 的后十行内容并在文件内容增加后,且自动显示新增的文件内容。 

备注:最后一条命令tail非常有用,尤其在监控日志文件时,可以在屏幕上一直显示新增的日志信息。 

 

你可能感兴趣的:(Linux,工具)