基本格式linux
find < path > < expression > < cmd > ''' path: 所要搜索的目录及其全部子目录。默认为当前目录。 expression: 所要搜索的文件的特征。 cmd: 对搜索结果进行特定的处理。 若是什么参数也不加,find默认搜索当前目录及其子目录,而且不过滤任何结果(也就是返回全部文件),将它们全都显示在屏幕上。 '''
find命令经常使用选项及实例shell
find /dir -name filename # 在/dir目录及其子目录下面查找名字为filename的文件 find . -name "*.c" # 在当前目录及其子目录(用“.”表示)中查找任何扩展名为“c”的文件
find . -perm 755 –print # 在当前目录下查找文件权限位为755的文件,即文件属主能够读、写、执行,其余用户能够读、执行的文件
find /apps -path "/apps/bin" -prune -o –print # 在/apps目录下查找文件,但不但愿在/apps/bin目录下查找 find /usr/sam -path "/usr/sam/dir1" -prune -o –print # 在/usr/sam目录下查找不在dir1子目录以内的全部文件
find / -name "CON.FILE" -depth –print # 它将首先匹配全部的文件而后再进入子目录中查找
find ~ -user sam –print # 在$HOME目录中查找文件属主为sam的文件
find /apps -group gem –print # 在/apps目录下查找属于gem用户组的文件
find / -mtime -5 –print # 在系统根目录下查找更改时间在5日之内的文件 find /var/adm -mtime +3 –print # 在/var/adm目录下查找更改时间在3日之前的文件
find / –nogroup -print
find /home -nouser –print
find /etc -type d –print # 在/etc目录下查找全部的目录 find . ! -type d –print # 在当前目录下查找除目录之外的全部类型的文件 find /etc -type l –print # 在/etc目录下查找全部的符号连接文件
find . -size +1000000c –print # 在当前目录下查找文件长度大于1 M字节的文件 find /home/apache -size 100c –print # 在/home/apache目录下查找文件长度刚好为100字节的文件 find . -size +10 –print # 在当前目录下查找长度超过10块的文件(一块等于512字节)
find . -name “*.XC” -mount –print # 从当前目录开始查找位于本文件系统中文件名以XC结尾的文件(不进入其余文件系统)
$ find ./ -size 0 -exec rm {} \; # 删除文件大小为零的文件 $ rm -i `find ./ -size 0` $ find ./ -size 0 | xargs rm -f &
# 为了用ls -l命令列出所匹配到的文件,能够把ls -l命令放在find命令的-exec选项中: $ find . -type f -exec ls -l {} \; # 在/logs目录中查找更改时间在5日之前的文件并删除它们: find /logs -type f -mtime +5 -exec rm {} \;
find . -name "*.conf" -mtime +5 -ok rm { } \; # 在当前目录中查找全部文件名以.LOG结尾、更改时间在5日以上的文件,并删除它们,只不过在删除以前先给出提示
# 查找当前路径下的全部普通文件,并把它们列出来。 find . -type f -exec ls -l {} \; # 删除logs目录下更新时间为5日以上的文件。 find logs -type f -mtime +5 -exec rm {} \; # 删除当前路径下以。log结尾的五日以上的文件,删除以前要确认。 find . -name "*.log" -mtime +5 -ok rm {} \; # 查找$HOME目录下suid位被设置,文件属性为755的文件打印出来。 find ~ -type f -perm 4755 -print #说明: find在有点系统中会一次性获得将匹配到的文件都传给exec,可是有的系统对exec的命令长度作限制,就会报:”参数列太长“,这就须要使用xargs。xargs是部分取传来的文件。 # xargs测试文件分类 find / -type f -print |xargs file # 将core文件信息查询结果报存到core。log日志 find . -name "core*" -print|xargs echo " ">/tmp/core.log 7. find / -type f -print | xargs chmod o -w 8. find . -name * -print |xargs grep "DBO"
基本格式数据库
grep [选项] pattern [文件名]
命令中的选项为:express
''' -? 同时显示匹配行上下的?行,如:grep -2 pattern filename 同时显示匹配行的上下2行。 -b,—byte-offset 打印匹配行前面打印该行所在的块号码。 -c,—count 只打印匹配的行数,不显示匹配的内容。 -f File,—file=File 从文件中提取模板。空文件中包含0个模板,因此什么都不匹配。 -h,—no-filename 当搜索多个文件时,不显示匹配文件名前缀。 -i,—ignore-case 忽略大小写差异。 -q,—quiet 取消显示,只返回退出状态。0则表示找到了匹配的行。 -l,—files-with-matches 打印匹配模板的文件清单。 -L,—files-without-match 打印不匹配模板的文件清单。 -n,—line-number 在匹配的行前面打印行号。 -s,—silent 不显示关于不存在或者没法读取文件的错误信息。 -v,—revert-match 反检索,只显示不匹配的行。 -w,—word-regexp 若是被\<和>引用,就把表达式作为一个单词搜索。 -V,—version 显示软件版本信息。 '''
ls -l | grep '^a' 经过管道过滤ls -l输出的内容,只显示以a开头的行。 grep 'test' d* 显示全部以d开头的文件中包含test的行。 grep 'test' aa bb cc 显示在aa,bb,cc文件中匹配test的行。 grep '[a-z]' aa 显示全部包含每一个字符串至少有5个连续小写字符的字符串的行。 grep 'w(es)t.*' aa 若是west被匹配,则es就被存储到内存中,并标记为1,而后搜索任意个字符(.*),这些字符后面紧跟着另一个es(),找到就显示该行。若是用egrep或grep -E,就不用""号进行转义,直接写成'w(es)t.*'就能够了。 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 的行。
pattern为所要匹配的字符串,可以使用下列模式apache
基本格式安全
xargs定位参数位置 | xargs控制参数位置 | 如何定位控制xargs参数位置
背景:
管道 + xargs 用于把上游输出转换为下游参数输入。
例如 ls *.bak | xargs rm -fapp
问题:ide
xargs默认把输入做为参数放到命令的最后,可是不少命令须要本身定位参数的位置,好比拷贝命令 cp {上游结果} destFolderpost
解决方法:测试
xargs 使用大写字母i 定义参数指示符 -I <指示符>,而后用这个参数指示符定位参数插入的位置, 例如:
ls *.bak | xargs -I % cp % /tmp/test # 这里使用%做为指示符,第一个%能够理解为声明,第二个%能够理解为调用。你也能够用其余字符,好比 ls *.bak | xargs -I {} cp {} /tmp/test
之因此能用到 xargs 这个命令,关键是因为不少命令不支持 | 管道来传递参数,而平常工做中有有这个必要,因此就有了 xargs 命令,例如:
find /sbin -perm +700 | ls -l # 这个命令是错误的 find /sbin -perm +700 | xargs ls -l # 这样才是正确的
xargs 能够读入 stdin 的资料,而且以空白字元或断行字元做为分辨,将 stdin 的资料分隔成为 arguments 。 由于是以空白字元做为分隔,因此,若是有一些档名或者是其余意义的名词内含有空白字元的时候, xargs 可能就会误判了~
选项解释
echo "//"|xargs echo echo "//"|xargs -0 echo # /
cat test#!/bin/shecho "hello world/n" xargs -a test echo#!/bin/sh echo hello world/n
cat txt # /bin tao shou kun cat txt|xargs -E 'shou' echo # /bin tao
root@localhost:~/test#cat txt|xargs -p echoecho /bin tao shou kun ff ?...y # /bin tao shou kun ff
cat txt|xargs -n1 echo ''' /bin tao shou kun ''' cat txt|xargs echo # /bin tao shou ku
cat txt|xargs -t echoecho /bin tao shou kun #/bin tao shou kun
ls | xargs -t -i mv {} {}.bak
echo ""|xargs -t -r mv
cat test |xargs -i -x -s 14 echo "{}" ''' exp1 exp5 file xargs: argument line too long linux-2 '''
cat txt |xargs -i -p echo {}echo /bin tao shou kun ?...y cat txt |xargs -i -p -d " " echo {}echo /bin ?...y ''' echo tao ?.../bin y echo shou ?...tao ''' # 再如: cat test |xargs -i -p -d " " echo {}echo exp1 ''' exp5 file linux-2 ngis_post tao test txt xen-3 ?...y ''' cat test |xargs -i -p echo {}echo exp1 ?...y ''' echo exp5 ?...exp1 y echo file ?...exp5 ''' y
1. locate命令
locate 命令实际上是 “find -name” 的另外一种写法,可是要比后者快得多,缘由在于它不搜索具体目录,而是搜索一个数据库(/var/lib/locatedb),这个数据库中含有本地全部文件信息。Linux 系统自动建立这个数据库,而且天天自动更新一次,因此使用 locate 命令查不到最新变更过的文件。为了不这种状况,能够在使用 locate 以前,先使用 updatedb 命令,手动更新数据库。
locate命令的使用实例:
# 搜索etc目录下全部以sh开头的文件。 $ locate /etc/sh # 搜索用户主目录下,全部以m开头的文件,而且忽略大小写。 $ locate -i ~/m
2. whereis命令
whereis 命令只能用于程序名的搜索,并且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。若是省略参数,则返回全部信息。
whereis 命令的使用实例:
$ whereis grep # grep: /bin/grep /usr/share/man/man1p/grep.1p.gz /usr/share/man/man1/grep.1.gz
3. which命令
which 命令的做用是,在 PATH 变量指定的路径中,搜索某个系统命令的位置,而且返回第一个搜索结果。也就是说,使用 which 命令,就能够看到某个系统命令是否存在,以及执行的究竟是哪个位置的命令。
which 命令的使用实例:
$ which grep # /bin/grep
参考文章:https://blog.csdn.net/wzzfeitian/article/details/40985549