zoukankan      html  css  js  c++  java
  • linux分享三:文件操作

    查找文件命令:

    which       查看可执行文件的位置 
    whereis    查看文件的位置 
    locate       配 合数据库查看文件位置 
    find          实际搜寻硬盘查询文件名称

    一:find

    ?表示  通配任意的单个字符

    *表示  通配任意的字符

    1:查找指定的文件并删除

    1> rm -f `find . -name "*.log"`

    2> find . -name "*.log" | xargs rm -f

    3> find . -name "*.log" -exec rm -f {} ;

        注意:在{}和之间必须要有空格,否则会报 find: missing argument to `-exec'

        (xargs -0 参数防止文件名中有空格导致被 rm 认作是两个不同的文件。

                 {}   花括号代表前面find查找出来的文件名。

        find . -name "*.log" -exec cp {} {}.bak ;  复制文件

    4> find . -type f -name "*.txt" -delete

    备注:

    find ~ -name "[0-9]*.pid" -print   #查找以数字开头的所有pid文件,在这里要说[0-9]*不能匹配23,它跟一般的语言类正则不太一样,shell里面的*可以代表一切字符(单个,多个都行)
    如果想匹配2345只能这样写[0-9][0-9][0-9][0-9]

     2:多目录、多条件搜索

    -a 连接两个不同的条件(两个条件必须同时满足)

    -o 连接两个不同的条件(两个条件满足其一即可)

     -not 对条件取反的

    1> find mediatek/ frameworks/ system/ external/  -iname "*sqlite*.c"

    2> 多文件搜索+多目录搜索

    find mediatek/ frameworks/ system/ external/  -iname "*sqlite*.c" -o -iname "*sqlite*.cpp" -o -iname "*sqlite*.java"

    3:查找条件

    -type:

    f     // 普通文件

    d     //目录文件

    l     //链接文件

    b     //块设备文件

    c     //字符设备文件

     p     //管道文件

     s     //socket文件

    -size n:[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计。-depth:在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找。

    -nouser  and  -nogroup

    在整个系统中查找既没有属主又没有属组的文件(这样的文件通常是很危险的,作为系统工程师的我们应该及时清除掉)

    -newer file1 ! file2  查找更改时间比文件file1新但比文件file2旧的文件。

    -prune  使用这一选项可以使find命令不在当前指定的目录中查找,如果同时使用-depth选项,那么-prune将被find命令忽略。

    -mtime -n +n  按照文件的更改时间来查找文件, - n表示文件更改时间距现在n天以内,+ n表示文件更改时间距现在n天以前。find命令还有-atime和-ctime 选项,但它们都和-m time选项。

    另外,下面三个的区别:

    -amin n   查找系统中最后N分钟访问的文件

    -atime n  查找系统中最后n*24小时访问的文件

    -cmin n   查找系统中最后N分钟被改变文件状态的文件

    -ctime n  查找系统中最后n*24小时被改变文件状态的文件

    -mmin n   查找系统中最后N分钟被改变文件数据的文件

    -mtime n  查找系统中最后n*24小时被改变文件数据的文件

    例子:

    find . -type d | sort  查找当前所有目录并排序

    find . -size +1000c -print  查找当前目录大于1K的文件   +大于 -小于 没有前缀为等于

    find . -name "*.log" -mtime +5 -ok rm {} ;   在目录中查找更改时间在n日以前的文件并删除它们,在删除之前先给出提示

    find /etc -name "passwd*" -exec grep "root" {} ;   任何形式的命令都可以在-exec选项中使用。  在上面的例子中我们使用grep命令。find命令首先匹配所有文件名为“ passwd*”的文件,例如passwd、passwd.old、passwd.bak,然后执行grep命令看看在这些文件中是否存在一个root用户。

    find . -name "*.log" -exec mv {} .. ;   查找文件移动到指定目录

    find . -perm -7 -print | xargs chmod o-w    在当前目录下查找所有用户具有读、写和执行权限的文件,并收回相应的写权限

    find . -size +1000000c -print  在当前目录下查找文件长度大于1 M字节的文件 

    find . -size +10 -print  在当前目录下查找长度超过10块的文件(一块等于512字节)

    find后执行xargs提示xargs: argument line too long解决方法:

    find . -type f -atime +0 -print0 | xargs -0 -l1 -t rm -f

    -l1是一次处理一个;-t是处理之前打印出命令

    常见错误原因:

    1> 为什么不能直接用ls输出find查找的结果,而要用exec或 搭配 xargs才能输出结果?

    find / -perm +7000 | ls -l 

    答:ls的参数从argv获取,管道给ls的是STDIN_FILENO

    int main(int argc, char *argv[])
    注意区分命令行参数(术语不一定标准)和标准输入。
    ls期待的是命令行参数,即main()的`argv`;
    而管道传给ls的是标准输入,和`argv`没有关系。
    http://www.zhihu.com/question/36827128?sort=created

    二:statstat -f <file>: 显示<file>所在文件系统的状态信息。

    stat <file>: 显示指定文件<file>的状态信息。

    三:file

    查看文件类型

    四:which

    which是通过 PATH环境变量到该路径内查找可执行文件,所以基本的功能是寻找可执行文件

    五:whereis

     whereis [-bmsu] 文件或者目录名称 
    参数说 明: 
    -b : 只找二进制文件 
    -m: 只找在说明文件manual路径下的文件 
    -s : 只找source源文件 
    -u : 没有说明文档的文件 
    例如:

    whereis passwd  

    passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.5.gz

    whereis -b passwd

    passwd: /usr/bin/passwd /etc/passwd

    和find相比,whereis查找的速度非常快,这是因为linux系统会将 系统内的所有文件都记录在一个数据库文件中,当使用whereis和下面即将介绍的locate时,会从数据库中查找数据,而不是像find命令那样,通 过遍历硬盘来查找,效率自然会很高。 
    但是该数据库文件并不是实时更新,默认情况下时一星期更新一次,因此,我们在用whereis和locate 查找文件时,有时会找到已经被删除的数据,或者刚刚建立文件,却无法查找到,原因就是因为数据库文件没有被更新。

    六:locate
    locate 文件或者目录名称

    即先运行:updatedb(无论在那个目录中均可,可以放在crontab中 )后在   /var/lib/mlocate/ 下生成 mlocate.db 数据库即可快速查找。在命令提示符下直接执行#updatedb 命令即可:

    常用语句:

    获取匹配某个字段的整行:

    cat /opt/data/chrome/*/*/2016-03-02/00/guess2016-03-02_00_00.txt | awk '$5 ~ "^http://www.2345.com"' | grep "2016-03-02 00:00:00"

  • 相关阅读:
    HDU 1863 畅通工程(Kruskal)
    HDU 1879 继续畅通工程(Kruskra)
    HDU 1102 Constructing Roads(Kruskal)
    POJ 3150 Cellular Automaton(矩阵快速幂)
    POJ 3070 Fibonacci(矩阵快速幂)
    ZOJ 1648 Circuit Board(计算几何)
    ZOJ 3498 Javabeans
    ZOJ 3490 String Successor(模拟)
    Java实现 LeetCode 749 隔离病毒(DFS嵌套)
    Java实现 LeetCode 749 隔离病毒(DFS嵌套)
  • 原文地址:https://www.cnblogs.com/Alight/p/5217506.html
Copyright © 2011-2022 走看看