1、文件管理类命令总结
(1)cp命令: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 (复制时保留元数据,用于归档)
(2)mv命令: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
-f:force
-r:recursive
删除目录: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 :自动按需创建父目录
-v:verbose,显示创建过程
-m:mode :直接给定权限
注意:路径基名方为命令的作用对象:基名之前的路径名必须得存在。
例: mkdir -pv /tmp/x/{y1/{a,b},y2}
rmdir 删除空目录
-p:删除某目录后,如果其父目录为空,则一并删除之;
-v:显示过程;
2、Bash特性总结:
-
命令补全
shell 程序在接收到用户执行命令的请求,分析完成之后,最左侧的字符串会被 当作命令:
命令查找机制:
-
查找内部命令
-
根据PATH环境变量中设定的目录, 自左而右逐个搜索目录下文件名:
-
给定的打头字符串如果能惟一标识某命令程序文件,则直接补全;
-
不能唯一标识某命令程序文件 ,再击tab键一次,会给出列表。
-
路径补全:
在给定的起始路径下,以对应路径下打头字串来逐一匹配起始路径下的每个文件 :
tab:
如果能惟一标识:则直接补全:
否则 :再一次tab,给出列表
-
命令行展开
~:自动展开为用户的家目录,或指定的用户的家目录:~]# 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: 指定要显示的层级
-
命令的执行状态结果
-
bash通过状态返回值来输出此结果 。
成功:0
失败:1-255
命令执行完成之后 ,其状态返回值保存于bash的特殊变量$?中。
~]# lss
~]# echo $?
127
~]# ls
~]# echo $?
0
-
命令正常执行时,有的还会有命令返回值 。
根据命令及其功能不同,结果各不相同:
引用命令的执行结果:
$(COMMAND)
或'COMMAND' 反引号(在~那个按键上面)
~]# echo `ls` 或 echo $(ls)
-
引用
强引用 :‘’直接引用
~]# echo '$SHELL'
$SHELL
弱引用 :“” 将变量替换成变量所存储的值
~]# echo "$SHELL"
/bin/bash
命令引用 :` ` 反引号
~]# echo `ls`
fstab liuwe.vVvb myfile t1 t2 t3 t4 t5 test test1 test2 wei.da0t
-
快捷键
ctrl+a: 跳转至命令行行首
ctrl+e :跳转至命令行行尾。
ctrl+u:删除行首至光标所在处之间的所有字符 。
ctrl+k:删除光标所在处至行尾的所有字符。
ctrl+l:清屏 ,相当于clear命令
-
命令历史 :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/目录下所有以l或m或n开头,以.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