Linux 文件管理、查看、编辑、查找命令及BASH特性

1、文件管理类命令总结

 1cp命令:copy 

                  源文件 :目标文件          

单源复制 :cp [OPTION]… [-T] SOURCE DEST  (源文件只有一个,可以是文件也可以目录)

多源复制 :cp [OPTION]… SOURCE… DIRECTORY

                     cp [OPTION]… -t DIRECTORY SOURCE…(是上一种方式的另一种形式,把目标目录放到 前边)

 

单源复制 :cp [OPTION]… [-T] SOURCE DEST 

如果DEST不存在,则事先创建此文件 ,并复制源文件 的数据流至DEST中。

如果DEST是非目录文件 :则覆盖目标文件

如果DEST是目录文件 :则先在DEST目录下创建一个与源文件同名的文件 ,并复制其数据流至目标文件

 

~]# cp test1  test

 

多源复制 :cp [OPTION]… SOURCE… DIRECTORY

如果DEST不存在:错误

如果DEST是目录文件 :分别复制每个文件至目录中。

-i: 交互式复制:即覆盖之前提醒用户确认。

-f:强制覆盖目标文件:

-r:递归复制目录;

-d:复制符号链接文件本身,而非其指向的源文件

-a:-dR –preserve=all ,archive,用于实现归档 ,可以理解为备份。

–preserve

mode:权限                   

ownership:属主和属组

timestamps:时间戳

context:安全标签

xattr:扩展属性

links:符号链接

 all:上述所有属性

~]# cp -r myfile test(复制目录)

~]# cp test1 test2 test  (复制文件)

~]# cp -a test2 myfile  (复制时保留元数据,用于归档)

 

2mv命令:move  

mv [OPTION]… [-T] SOURCE DEST

mv [OPTION]… SOURCE… DIRECTORY

mv [OPTION]… -t DIRECTORY SOURCE…           

-i: 交互式:即覆盖之前提醒用户确认。

-f:强制覆盖目标文件:

cp唯一的区别是多了一个删除的操作。

在同一个目录下mv的结果是重命名。

 

3)rm [OPTION]… FILE…

常用选项:

-i:interactive

-fforce

-rrecursive

删除目录:rm -rf /home/ls/lssdf        

危险操作:rm -rf /*

注意:所有不用的文件建议不要直接删除,而是移动至某个专用目录:(模拟回收站)。

4)install命令:

install – copy files and set attributes

 

单源复制:

install [OPTION]… [-T] SOURCE DEST

多源复制:

install [OPTION]… SOURCE… DIRECTORY

install [OPTION]… -t DIRECTORY SOURCE…

创建目录:

install [OPTION]… -d DIRECTORY…

常用选项:

-o, –owner=OWNER:设定目标文件属主;

-g, –group=GROUP:设定目标文件属组;

 

例:   ~]# install -o liuwei -d t4 t5

 ~]# ll -d t4

         drwxr-xr-x. 2 liuwei root 6 10月  9 21:24 t4

 

 

5)mktemp命令:

mktemp – create a temporary file or directory

mktemp [OPTION]… [TEMPLATE]

常用选项:

-d:创建临时目录

 

例:~]# mktemp -d /tmp/wei.XXXX

/tmp/wei.da0t

 

注意:mktemp会将创建的临时文件名直接返回,因此,可直接通过命令引用保存起来;

例:~]# mktemp -d /tmp/wei.XXXX > test1

          6)目录管理类的命令:

mkdir :创建目录

 -p :自动按需创建父目录

 -vverbose,显示创建过程

-mmode :直接给定权限

注意:路径基名方为命令的作用对象:基名之前的路径名必须得存在。

例: mkdir -pv /tmp/x/{y1/{a,b},y2}

 

 rmdir  删除空目录

 -p:删除某目录后,如果其父目录为空,则一并删除之;

 -v:显示过程;

2Bash特性总结:     

  1. 命令补全

shell 程序在接收到用户执行命令的请求,分析完成之后,最左侧的字符串会被 当作命令:

命令查找机制:

  1. 查找内部命令

  2. 根据PATH环境变量中设定的目录, 自左而右逐个搜索目录下文件名:

    1. 给定的打头字符串如果能惟一标识某命令程序文件,则直接补全;

    2. 不能唯一标识某命令程序文件 ,再击tab键一次,会给出列表。

  1. 路径补全:

在给定的起始路径下,以对应路径下打头字串来逐一匹配起始路径下的每个文件

tab

如果能惟一标识:则直接补全:

否则 :再一次tab,给出列表

  1. 命令行展开

~:自动展开为用户的家目录,或指定的用户的家目录:~]# cd ~liuwei

{}:可承载一个以逗号分隔的路径列表,并能够将其展开为多个路径;

例:/tmp/{a,b} 相当于 tmp/a /tmp/b

例:mkdir -pv /tmp/x/{y1/{a,b},y2}相当于创建

       

[root@ACA802E7 x]# tree

.

├── y1

│   ├── a

│   └── b

└── y2

 

例:创建/tmp下的a_c,a_d,b_c,b_d

 ~]# mkdir -v /tmp/{a,b}_{c,d}

mkdir: 已创建目录 "/tmp/a_c"

mkdir: 已创建目录 "/tmp/a_d"

mkdir: 已创建目录 "/tmp/b_c"

mkdir: 已创建目录 "/tmp/b_d"

例:创建/tmp目录下的mylinux/

mylinux]# tree

.

├── bin

├── boot

│   └── grub

├── dev

├── etc

│   ├── rc.d

│   │   └── init.d

│   └── sysconfig

│       └── network-scripts

├── lib

│   └── modules

├── lib64

├── proc

├── sbin

├── sys

├── tmp

├── usr

│   └── local

│       ├── bin

│       └── sbin

└── var

    ├── lock

    ├── log

    └── rum

 

tmp]# mkdir -pv /tmp/mylinux/{bin,boot/grub,dev,etc/{rc.d/init.d,sysconfig/network-scripts},lib/modules,lib64,proc,sbin,sys,tmp,usr/local/{bin,sbin},var/{lock,log,rum}}

mkdir: 已创建目录 "/tmp/mylinux"

mkdir: 已创建目录 "/tmp/mylinux/bin"

mkdir: 已创建目录 "/tmp/mylinux/boot"

mkdir: 已创建目录 "/tmp/mylinux/boot/grub"

mkdir: 已创建目录 "/tmp/mylinux/dev"

mkdir: 已创建目录 "/tmp/mylinux/etc"

mkdir: 已创建目录 "/tmp/mylinux/etc/rc.d"

mkdir: 已创建目录 "/tmp/mylinux/etc/rc.d/init.d"

mkdir: 已创建目录 "/tmp/mylinux/etc/sysconfig"

mkdir: 已创建目录 "/tmp/mylinux/etc/sysconfig/network-scripts"

mkdir: 已创建目录 "/tmp/mylinux/lib"

mkdir: 已创建目录 "/tmp/mylinux/lib/modules"

mkdir: 已创建目录 "/tmp/mylinux/lib64"

mkdir: 已创建目录 "/tmp/mylinux/proc"

mkdir: 已创建目录 "/tmp/mylinux/sbin"

mkdir: 已创建目录 "/tmp/mylinux/sys"

mkdir: 已创建目录 "/tmp/mylinux/tmp"

mkdir: 已创建目录 "/tmp/mylinux/usr"

mkdir: 已创建目录 "/tmp/mylinux/usr/local"

mkdir: 已创建目录 "/tmp/mylinux/usr/local/bin"

mkdir: 已创建目录 "/tmp/mylinux/usr/local/sbin"

mkdir: 已创建目录 "/tmp/mylinux/var"

mkdir: 已创建目录 "/tmp/mylinux/var/lock"

mkdir: 已创建目录 "/tmp/mylinux/var/log"

mkdir: 已创建目录 "/tmp/mylinux/var/rum"

 

注:tree命令需要安装:用来展示目录树

        tree [options] [directory]

                -L level: 指定要显示的层级

  1. 命令的执行状态结果

    1. bash通过状态返回值来输出此结果      

成功:0

失败:1-255

命令执行完成之后 ,其状态返回值保存于bash的特殊变量$?中。

  ~]# lss

 ~]# echo $?

127

~]# ls

~]# echo $?

0

  1. 命令正常执行时,有的还会有命令返回值

根据命令及其功能不同,结果各不相同:

引用命令的执行结果:

$(COMMAND)

'COMMAND'  反引号(在~那个按键上面)

   ~]# echo `ls`    echo $(ls)

  1. 引用

强引用 :‘’直接引用  

~]# echo '$SHELL'

$SHELL

弱引用 :“” 将变量替换成变量所存储的值

~]# echo "$SHELL"

/bin/bash

命令引用 ` ` 反引号

~]# echo `ls`

fstab liuwe.vVvb myfile t1 t2 t3 t4 t5 test test1 test2 wei.da0t

 

  1. 快捷键

ctrl+a: 跳转至命令行行首

ctrl+e :跳转至命令行行尾。

ctrl+u:删除行首至光标所在处之间的所有字符

ctrl+k:删除光标所在处至行尾的所有字符。    

ctrl+l:清屏  ,相当于clear命令

 

 

  1. 命令历史 shell进程会在在其会话中保存此前用户提交执行过的命令。

#history

定制hisotry的功能,可通过环境变量实现:

HISTSIZE:   shell进程可保留的命令历史的条数:

HISTFILE:持久保存命令历史的文件

                        .bash_history

HISTFILESIZE:命令历史文件的大小

 

命令用法

history [-c] [-d 偏移量][n]

history -anrw [文件名]

history  -ps 参数  [参数…]

-c :清空命令历史

-d offset:删除指定命令历史

-r : 从文件读取命令历史至历史列表中,    ~]# history -r .bash_history

-w:把历史列表中的命令追加至历史文件中

 history #:显示最近的#条命令

~]# history 3

 2187  locate -r  ".*liuwei"

 2188  locate -r  ".*liuwei$"

 2189  history 3

     

调用命令历史列表中的命令:

!#:再一次执行

!!:再一次执行上一条命令

STRING:再一次执行命令历史列表中最近一个以STRING开关的命令

注意:命令的重复执行有时候需要依赖于幂等性。

                  

调用上一条命令的最后一个参数:

快捷键:      ESC  +(松开) .

字符串:!$

/]# cd ..

[root@ACA802E7 /]# !$

..

控制命令历史记录的方式:

环境变量:HISTCONTROL

  值:ignoredups:忽略重复的命令

ignorespace:忽略以空白字符开头的

ignoreboth:以上两者同时生效

修改变量的值

NAME='VALUE'

(8) 多命令执行

~]# COMMAND1; COMMAND2; COMMAND3; …

逻辑运算:

运算数:真(true, yes, on, 1)

    假(false, no, off, 0)

 

与:

1 && 1 = 1

1 && 0 = 0

0 && 1 = 0

0 && 0 = 0

或:

1 || 1 = 1

1 || 0 = 1

0 || 1 = 1

0 || 0 = 0

非:

! 1 = 0

! 0 = 1

 

短路法则:

~]# COMMAND1 && COMMAND2

COMMAND1为“假”,则COMMAND2不会再执行;

否则,COMMAND1为“真”,则COMMAND2必须执行;

 

~]# COMMAND1 || COMMAND2

COMMAND1为“真”,则COMMAND2不会再执行;

否则,COMMAND1为“假”,则COMMAND2必须执行;

 

示例:~]# id $username || useradd $username

(9) 命令hash

缓存此前命令的查找结果:key-value

key:搜索键

value:值

 

hash命令:

hash:列出

hash -d COMMAND:删除

hash -r:清空

(10) 变量

程序:指令+数据

指令:由程序文件提供;

数据:IO设备、文件、管道、变量

程序:算法+数据结构

变量名=指向的内存空间

变量赋值:name=value

变量类型:存储格式、表示数据范围、参与的运算

编程语言:

强类型变量

弱类型变量:

bash把所有变量统统视作字符型;(不支持符点 类型,除非借助外界工具)

bash中的变量无需事先声明;相当于,把声明和赋值过程同时实现;

声明:类型,变量名

 

变量替换:把变量名出现的位置替换为其所指向的内存空间中数据;

变量引用:${var_name}, $var_name

变量名:变量名只能包含数字、字母和下划线,而且不能以数字开头;

变量名:见名知义,命名机制遵循某种法则;不能够使用程序的保留字,例如if, else, then, while等等;

 

bash变量类型:

        普通:zsh,2b:bash,文艺青年:fi sh

本地变量:作用域仅为当前shell进程;

环境变量:作用域为当前shell进程及其子进程;

局部变量:作用域仅为某代码片断(函数上下文);

 

位置参数变量:当执行脚本的shell进程传递的参数;

特殊变量:shell内置的有特殊功用的变量;

 

$?:

0:成功

1-255:失败

 

本地变量:

变量赋值:name=value

变量引用:${name}, $name

"":变量名会替换为其值;

'':变量名不会替换为其值;

查看变量:set

撤销变量:unset name

注意:此处非变量引用;

 

环境变量:

变量赋值:

(1) export name=value

(2) name=value

    export name

(3) declare -x name=value

(4) name=value

declare -x name

变量引用:${name}, $name

 

注意:bash内嵌了许多环境变量(通常为全大写字符),用于定义bash的工作环境

PATH, HISTFILE, HISTSIZE, HISTFILESIZE, HISTCONTROL, SHELL, HOME, UID, PWD, OLDPWD

 

查看环境变量:export, declare -x, printenv, env

撤销环境变量:unset name

 

只读变量:

(1) declare -r name

(2) readonly name

 

只读变量无法重新赋值,并且不支持撤销;存活时间为当前shell进程的生命周期,随shell进程终止而终止;

(11) 命令别名:alias

            查看别名:~]#alias

定义别名:

~]#alias  NAME="COMMAND"

注意:仅对当前shell进程有效

撤销别名: unalias

~]#unalias  NAME

 

(12) globbing文件名通配(整体文件匹配,而非部分)

匹配模式:元字符

 *:匹配任意长度的任意字符

 pa* ,*pa*,*pa,*p*a*

 pa,paa,passwd

 ?:匹配任意单个字符

pa? ??aa,p?a,p?a?

paa

[]:匹配指定范围内的任意单个字符

有几种特殊格式:

[a-z],[a-z],[0-9] ,[a-z0-9]

[[:upper:]]:所有 大写字母

[[:lower:]]:所有小写字母

[[:alpha:]]:所有字母 .

[[:digit:]]:所有数字

[[:alnum:]]:所有的字母和数字

[[:space:]]:所有空白字符

[[:punct:]]:所有标点符号             

[ ^]:匹配指定范围外的任意单个字符

[^[:upper:]]

[^0-9]

[^[:alnum:]]

例:显示/var目录下所有以l开头,以一个小写字母结尾,且中间至少出现一位数字(可以有其它字符)的文件目录。

        var]# ls -d l*[[:digit:]]*[[:lower:]]

例:显示/etc目录下,以任意一个数字开头,且以非数字结尾的文件或目录

 ~]# ls  -d /etc/[[:digit:]]*[^[:digit:]]

例:显示/etc目录下,以非字母开头,后面跟了一个字母以及其它任意长度任意字符的文件或目录。

~]# ls -d /etc/[^[:alpha:]][[:alpha:]]*

例:在/tmp目录下创建以tfile开头,后跟当前日期和时间的文件,文件名形如:tfile-2016-05-27-09-32-22

tmp]# touch tfile-`date +%Y`-`date +%m`-`date +%d`-`date +%H`-`date +%M`-`date +%S`

例:复制/etc目录下所有以p开头,以非数字结尾的文件或目录到/tmp/mytest1目录中。

tmp]# cp -r /etc/p*[^[:digit:]] /tmp/mytest1

例:复制/etc/目录下所有以.d结尾的文件或目录至/tmp/mytest2目录中。

~]# cp -r /etc/*.d /tmp/mytest2

例:复制/etc/目录下所有以lmn开头,以.conf结尾的文件至/tmp/mytest3目录中。

~]# cp /etc/[lmn]*.conf /tmp/mytest3

(13)IO重定向及管道

程序:指令+数据

程序:IO,在不指定输入输出时,有默认的输入输出,如后台服务。

可用于输入的设备:文件

键盘设备、文件系统上的常规文件、网卡等;

可用于输出的设备:文件

显示器、文件系统上的常规文件、网卡等;

程序的数据流有三种:

输入的数据流;<– 标准输入(stdin),键盘;

输出的数据流:–> 标准输出(stdout),显示器;

错误输出流:  –> 错误输出(stderr),显示器;

fd: file descriptor,文件描述符

标准输入:0

标准输出:1

错误输出:2

 

1)IO重定向:

输出重定向:>

特性:覆盖输出  (慎用)

输出重定向:>>

特性:追加输出

~]# set -C 仅对当前的shell进程有效。

禁止覆盖输出重定向至已存在的文件;

此时可使用强制覆盖输出:>|

~]# set +C

关闭上述特性

错误输出流重定向:2>, 2>>

合并正常输出流和错误输出流:

(1) &>, &>>

(2) COMMAND > /path/to/somefile 2>&1

    COMMAND >> /path/to/somefile 2>&1

特殊设备:/dev/null

输入重定向:<

tr命令:

tr [OPTION]… SET1 [SET2]

把输入的数据当中的字符,凡是在SET1定义范围内出现的,通通对位转换为SET2出现的字符

删除键:按住ctrl键再按后退键。

                                             用法1:

tr SET1 SET2 < /PATH/FROM/SOMEFILE

用法2:

tr -d SET1 < /PATH/FROM/SOMEFILE

注意:不修改原文件

                                        Here Document:<<

cat << EOF

cat > /PATH/TO/SOMEFILE << EOF

2)管道:连接程序,实现将前一个命令的输出直接定向后一个程序当作输入数据流

COMMAND1 | COMMAND2 | COMMAND3 | …

tee命令:

COMMAND | tee /PATH/TO/SOMEFILE

练习1:把/etc/passwd文件的前6行的信息转换为大写字符后输出;

head -n 6 /etc/passwd | tr 'a-z' 'A-Z'

3文本文件查看及编辑类命令总结

cat , tac ,  head , tail  , more , less  |   wc, cut, sort, uniq, diff, patch

   

分屏查看命令:more  less

more命令:more FILE:

特点:  翻屏至文件尾部后自动退出

less 命令:less FILE            

 

head  命令:查看文件 n 行:

head [options] file

-n  #

-#

tail 命令:查看文件 n行:

 tail [options] FILE

-n #

-#

 -f  :查看文件尾部内容结束后不退出 ,跟随显示新增 的行。

stat 命令: 查看文件的元数据,即文件的属性

stat  FILE 

文件:两类数据

元数据 metadata  :相当于一本书的目录页,属性内容

数据 data   :一本书的内容

时间戳:

access time :最近访问:2016-09-07 19:46:04.027932162 +0800

modify time 最近更改:2016-09-07 19:46:04.026932162 +0800

change time  :最近改动:2016-09-07 19:46:04.026932162 +0800

最近更改是指数据发生改变。

最近改动是指元数据改变        

使用stat 看到的文件数据为元数据 ,使用cat等看到的文件内容为数据

~]# stat test1

  文件:"test1"

  大小:65                块:8          IO 块:4096   普通文件

设备:fd00h/64768d        Inode:206368246   硬链接:1

权限:(0644/-rw-r–r–)  Uid:(    0/    root)   Gid:(    0/    root)

环境:unconfined_u:object_r:admin_home_t:s0

最近访问:2016-10-09 22:20:51.919309719 +0800

最近更改:2016-10-09 22:20:47.805240953 +0800

最近改动:2016-10-09 22:20:47.805240953 +0800

创建时间:-

 

touch命令:用于更改 atime ,mtime 时间戳信息

touch [OPTION]… FILE…

-c:指定的文件路径不存在时不予创建

-a:仅修改access time

-m:仅修改modify time             

-t:

use [[CC]YY]MMDDhhmm[.ss] instead of current time

 cat命令:查看文件内容

 cat [OPTION]… [FILE]…

-n   :给显示 的所有行统一编号

-E: 显示行结束符$

 tac命令:逆序显示文件内容

tac [OPTION]… [FILE]…

-n   :给显示 的所有行统一编号

-E: 显示行结束符$

file命令:  查看文件内容类型

file [FILE] ….

echo:回显

echo [SHORT-OPTION]… [STRING]…

-n  :不进行换行

-e:让转义符生效

\t 制表符

\b 退格键

\n 回车

可以实现颜色控制

STRING:可以使用引号,单引号和双引号均可用:

单引号:强引用,变量引用不执行替换

]#echo '$SHELL'

双引号:弱 引用 ,变量引用会被替换

~]# echo "$SHELL"

 

文本查看及处理工具

wc, cut, sort, uniq, diff, patch

 

wc:word count字数统计

wc  [OPTION]…  [FILE]…

-l: lines

-w:words

-c: bytes

 

cut:剪切出需要的列

cut OPTION… [FILE]…

OPTION:

-d CHAR:以指定的字符为分隔符;

-f FIELDS:挑选出的字段;

#:指定的单个字段;

#-#:连续的多个字段;

#,#:离散的多个字段;

 

sort:对内容进行排序

sort  [OPTION]…  [FILE]…

-n:基于数值大小而非字符进行排序;

-t CHAR:指定分隔符;

-k #:用于排序比较的字段;

-r:逆序排序;

-f:忽略字符大小写

-u:重复的行只保留一份;

重复行:连续且相同;

 

uniq:报告或移除重复的行

uniq [OPTION]… [INPUT [OUTPUT]]

-c:显示每行的重复次数;

-u:仅显示未曾重复过的行;

-d:仅显示重复过的的行;

 

diff:compare files line by line  :比较两个文件的不同点

diff [OPTION]… FILES

diff  /PATH/TO/OLDFILE  /PATH/TO/NEWFILE > /PATH/TO/PATCH_FILE

-u:使用unfied机制,即显示要修改的行的上下文,默认为3行;

 

patch:向文件打补丁

patch [OPTIONS] -i /PATH/TO/PATCH_FILE /PATH/TO/OLDFILE

patch /PATH/TO/OLDFILE < /PATH/TO/PATCH_FILE

 

4、文件查找命令

 

在文件系统上查找符合条件的文件;

 

实现工具:locate, find

 

locate:

依赖于事先构建好的索引库;

系统自动实现(周期性任务);

手动更新数据库(updatedb);

工作特性:

查找速度快;

模糊查找;

非实时查找;

locate  [OPTION]…  PATTERN…

-b:只匹配路径中的基名;

-c:统计出共有多少个符合条件的文件;

-r:BRE

注意:索引构建过程需要遍历整个根文件系统,极消耗资源;

 

find:

实时查找工具,通过遍历指定起始路径下文件系统层级结构完成文件查找;

工作特性:

查找速度略慢;

精确查找;

实时查找;

用法:

find [OPTIONS]  [查找起始路径]  [查找条件]  [处理动作]

查找起始路径:指定具体搜索目标起始路径;默认为当前目录;

查找条件:指定的查找标准,可以根据文件名、大小、类型、从属关系、权限等等标准进行;默认为找出指定路径下的所有文件;

处理动作:对符合查找条件的文件做出的操作,例如删除等操作;默认为输出至标准输出;

查找条件:也即查找标准,或表达式

表达式:选项和测试

测试:结果通常为布尔型("true", "false")

根据文件名查找:

-name  "pattern"

-iname "pattern"

支持glob风格的通配符;

*, ?, [], [^]

-regex pattern:基于正则表达式模式查找文件,匹配是整个路径,而非其名;(不常用)

 

根据文件从属关系查找:

-user USERNAME:查找属主指定用户的所有文件;

-group GRPNAME:查找属组指定组的所有文件;

-uid UID:查找属主指定的UID的所有文件;

-gid GID:查找属组指定的GID的所有文件;

-nouser:查找没有属主的文件;

-nogroup:查找没有属组的文件;

根据文件的类型查找:

-type TYPE:

f: 普通文件

d: 目录文件

l:符号链接文件

b:块设备 文件

c:字符设备文件

p:管道文件

s:套接字文件

 

组合测试:

与:-a, 默认组合逻辑;

或:-o

非:-not, !

练习:

1、找出/tmp目录下属主为非root的所有文件;

2、找出/tmp目录下文件名中不包含fstab字符串的文件;

3、找出/tmp目录下属主为非root,而且文件名不包含fstab字符串的文件;

!A -a !B = !(A -o B)

!A -o !B = !(A -a B)

根据文件的大小查找:

-size [+|-]#UNIT

常用单位:k, M, G

 

#UNIT:(#-1, #]

-#UNIT:[0,#-1]

+#UNIT:(#, oo)

根据时间戳查找:

以“天”为单位:

-atime  [+|-]#

#:[#, #-1)

-#:(#, 0]

+#:(oo, #-1]

-mtime

-ctime

以“分钟”为单位:

-amin

-mmin

-cmin

根据权限查找:

-perm  [/|-]mode

mode:精确权限匹配;

/mode:任何一类用户(u,g,o)的权限中的任何一位(r,w,x)符合条件即满足;

9位权限之间存在“或”关系;

-mode:每一类用户(u,g,o)的权限中的每一位(r,w,x)同时符合条件即满足;

9位权限之间存在“与”关系;

处理动作:

-print:输出至标准输出;默认的动作;

-ls:类似于对查找到的文件执行“ls -l”命令,输出文件的详细信息;

-delete:删除查找到的文件;

-fls /PATH/TO/SOMEFILE:把查找到的所有文件的长格式信息保存至指定文件中;

-ok COMMAND {} \;   :对查找到的每个文件执行由COMMAND表示的命令;每次操作都由用户进行确认;

-exec COMMAND {} \;  :对查找到的每个文件执行由COMMAND表示的命令;

 

注意:find传递查找到的文件路径至后面的命令时,是先查找出所有符合条件的文件路径,并一次性传递给后面的命令;但是有些命令不能接受过长的参数,此时命令执行会失败;另一种方式可规避此问题:

find | xargs COMMAND

例:

             1、查找/var目录下属主为root,且属组为mail的所有文件或目录;

~]# find /var -user root -a -group mail -ls

 

             2、查找/usr目录下不属于root,      bin或hadoop的所有文件或目录;用两种方法;

~]# find /usr -not -user root -a -not -user bin -a -not -user hadoop

~]# find /usr -not \( -user root -o -user bin -o -user hadoop \) -ls

 

             3、查找/etc目录下最近一周内其内容修改过,且属主不是root用户也不是hadoop用户的文件或目录;

~]# find /etc -mtime -7 -a -not \( -user root -o -user hadoop \) -ls

~]# find /etc -mtime -7 -a -not -user root -a -not -user hadoop -ls

 

             4、查找当前系统上没有属或属组,且最近一周内曾被访问过的文件或目录;

~]# find  /  \( -nouser -o -nogroup \)  -atime  -7  -ls

 

             5、查找/etc目录下大于1M且类型为普通文件的所有文件;

~]# find /etc -size +1M -type f -exec ls -lh {} \;

 

             6、查找/etc目录下所有用户都没有写权限的文件;

~]# find /etc -not -perm /222 -type f -ls                                        

 

             7、查找/etc目录至少有一类用户没有执行权限的文件;

~]# find /etc -not -perm -111 -type f -ls

 

             8、查找/etc/init.d/目录下,所有用户都有执行权限,且其它用户有写权限的所有文件;

~]# find /etc -perm -113 -type f -ls

原创文章,作者:北京凯振飞,如若转载,请注明出处:http://www.178linux.com/50519