工作中常见的Linux基础命令笔记:
语法中【】内表示必选参数,[]表示常用可选参数
网站上代码复制后最好不要直接执行,谨慎检查是否有额外空格等
查找类命令
find 查找目录或文件
默认区分大小写。递归子目录。
find 【pathname】 -【options】[-print -exec -ok ..]
pathname: 所查找的目录路径 (空 或者 . 表示当前目录(递归子目录);/表示系统根目录)
-options : 查找条件参数
-print: find命令将匹配的文件输出到标准输出。
-exec: 后面可接其他shell命令。查找后直接执行,输出执行结果,(以 { } ;结尾,注意{ }和;之间的空格。)
-ok: 和-exec的作用相同,只不过以一种更为安全,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。
eg
查找指定的多个目录(lib/opt/bin),以每行一个文件或者目录的形式列举出,不包含隐藏文件
find lib opt bin
-option查找参数
1.按名称查找
-name 【文件名】 : 要查找的文件名
-iname 【文件名】: 要查找的文件名(不区分大小写)
eg:
find . -name text.txt
查找当前目录下(递归子目录)的所有名为text.txt的文件
find . -name \*.txt
find . -name “*.txt”
查找当前目录下(递归子目录)的所有名称以.txt结尾的文件,注意*号的写法,需要前面加\或者放到双引号中
find . -iname \*.txt
当前目录下(递归子目录)的所有名称以.txt结尾的文件(不区分大小写)
注:-iname 可以不区分大小写
find /tmp/ -name ‘galeki*’
在/tmp目录下找出以“galeki”开头的文件
2.按类型查找
find . -type 【d】
查找当前目录下(递归子目录)的所有目录
find . -type 【f】
查找当前目录下(递归子目录)的所有文件
find . -type 【 l】
查找当前目录下(递归子目录)的所有符号链接
3.按文件改动时间查找
1). 以小时为单位的时间
+表示大于, -表示小于, 没有+1表示正好等于。
-atime 【n/+n/-n】 access time ,文件被读取或访问的时间恰好在1小时前/超过n小时/n小时以内的文件
-ctime 【n/+n/-n】 change time,文件状态变化时间
-mtime 【n/+n/-n】 modify time,文件内容上次修改时间
-newer 【 file 】 比file所指的文件还要新的文件
ps:linux系统无法查看文件的创建时间,它只记录文件的最近访问时间、最近状态更改时间、最近最近修改时间
eg:
find . -mtime -1
查找当前目录下(递归子目录)的所有1小时内修改的文件和目录
find . -mtime +1
查找当前目录下(递归子目录)的所有修改时间超过1小时的文件和目录
find . -mtime 1
查找当前目录下(递归子目录)的所有恰好在1小时前修改的文件和目录
2). 以分钟为单位的时间
用法和*time类似,区别于单位时间是分钟,用于查找在不到1小时的时间内变化了的文件和目录
eg:
find . -mmin -10
查找当前目录下(递归子目录)的所有10分钟内修改的文件和目录
find . -mmin +20
查找当前目录下(递归子目录)的所有20分钟外1小时内修改的文件和目录
3). 与指定的文件比较
用于查找与特定的文件比较的已修改或访问过的文件
-newer 【文件名】 : 指文件内容被修改的时间
-anewer 【文件名】: 指文件的最近读取时间
-cnewer【文件名】: 指文件的最新状态变化时间
eg:
find . -newer a.txt
查找当前目录下(递归子目录)的所有修改时间在a.txt之后(所以文件更新)的文件和目录
4.按文件大小查找
1).-size 【文件大小】 查找符合大小要求的文件
size只查找文件,不查找目录, +表示大于, -表示小于, 没有+1表示正好等于。
-size 【nb/k/M/G/C】 大小为n(b为比特,k为KB,M为MB,G为GB,C为字节)的文件
eg:
find . -size -100c
查找当前目录下(递归子目录)的所有文件大小小于100字节的文件
find . -size +100k
查找当前目录下(递归子目录)的所有文件大小大于100k的文件
find . -size 0
查找当前目录下(递归子目录)的所有文件大小为0的文件
2). -empty 查找空文件和空文件夹,
和-size 0不同的在于-size 0 只查找空文件,而-empty还能查找文件夹
-size 0 等同于 -empty -type f
eg:
find . -empty
查找当前目录下(递归子目录)的所有文件大小为0的文件和空文件夹
find . -empty -type f
查找当前目录下(递归子目录)的所有文件大小为0的文件
find . -empty -type d
查找当前目录下(递归子目录)的所有空目录
5 按权限和所有者查找
-user 【用户名】 :查找用户为xxx的文件和目录
-group 【组名】: 查找组名为XXX的文件和目录
-perm 【权限】: 查找权限为XXX的文件和目录
eg:
find . -user mingming
查找当前目录下(递归子目录)的所有user为mingming的文件和目录
find . -group users
查找当前目录下(递归子目录)的所有者用户组群名称是users的文件和目录
find . -perm 777
查找当前目录下(递归子目录)的所有权限为777的文件和目录
find . -perm -u=rwx
查找当前目录下(递归子目录)的所有user权限为rwx的文件和目录
find . -perm -ug=x
查找当前目录下(递归子目录)的所有user和group权限为x的文件和目录
6 多条件查找(逻辑运算)组合命令
1).逻辑与 -a
eg:
find . -name “*.java” -mmin -10
find . -name “*.java” -a -mmin -10
查找当前目录下(递归子目录)的所有名为*.java并且修改时间在10分钟之内的文件,-a是默认选项
find . -name "*.txt" -mtime -1
当前目录下修改时间为1小时以内的所有txt格式的文件
2).逻辑或 -o
eg:
find . -name “*.class” -o -name “*.jar”
查找当前目录下(递归子目录)的所有名为*.class或者*.jar的文件和目录
3).逻辑非 !
eg:
find . ! -user sky
查找当前目录下(递归子目录)的所有user不是sky的文件和目录
4).组合命令
eg:
find /tmp/ -name ‘miss*’ -mtime 1
在/tmp目录下找到所有以’miss’开头、并且在一个小时以内修改过的文件
find ./ -name ‘*.zip’ -size 12k
在当前目录下找到所有12KB的zip压缩包文件
7 控制查找递归目录深度
-maxdepth 【n】 递归目录深度不超过N层
-mindepth 【n 】 递归目录深度不低于N层
eg:
find . -maxdepth 3 -name “*.txt”
查找当前目录下(递归子目录)的所有名为*.txt的文件,目录深度不超过3层
find . -maxdepth 1 -name “*.txt”
查找当前目录下(不递归子目录,因为maxdepth为1)的所有名为*.txt的文件
find . -mindepth 3 -name “*.txt”
查找当前目录下(递归子目录)的所有名为*.txt的文件,目录深度不低于3层
find . -mindepth 1 -name “*.txt”
查找当前目录下的子目录中(递归子目录)的所有名为*.txt的文件,不包含当前目录
find . -depth -name “*.txt”
查找当前目录下(递归子目录)的所有名为*.txt的文件,每个目录都是先在目录中进行查找,然后才继续查找其子目录
8.对查找后的文件直接执行shell命令
常用的处理动作:
-print 打印出找出文件的完整地址,一个文件一行
-delete 删除找出的文件
-exec command {} \; 对每一个找到的文件执行command命令,并用文件替换”{}”,“\;”是固定的结束符。
eg:
find . -name “*.jar” -exec ls -l {} \;
find . -name “*.jar” -ls
查找当前目录下(递归子目录)的所有*.jar文件并使用ls -l列出详细信息
find . -name “*.java” -exec grep class {} \;
查找当前目录下(递归子目录)的所有的含有”class”字样的*.java文件
find /tmp/ -mtime +7 -delete
删除/tmp目录下一周以前修改的文件
find ./ -name ‘*.unk’ -exec file {} \;
找出当前文件夹下后缀是unk的文件,并用file命令显示每个文件的文件类型
find . -name “*.txt” -mtime -1 | xargs -n 100 tar -rvf yasuo.tar
查找当前文件夹下所有1天内修改的txt文件并打包为yasuo.tar
持续更新~~~