时间日期指令
date
显示当前时间
效果:2022年 03月 12日 星期六 09:55:21 CST
date +%y--%m--%d--%H:%M:%S
效果:显示当前 年 月 日 时 分 秒
说明只需要一个 + 号就行,中间的 – 和 : 仅仅是作为分隔符,可以去掉。
可以任意组合就像只显示 年月日
date +%y-%m-%d
注意 :时分秒的英文字符一定要大写,不然出错。
设置日期(特权模式下)
date -s "字符串时间"
比如 date -s "2022-2-2 20:20:20"
查看当前日历
cal
指定年份查看
cal 2022
搜索查找指令
find指令
find命令的格式
find path -option 【 -print 】 【 -exec -ok |xargs |grep 】 【 command {} \; 】
find命令参数
1)path:要查找的目录路径。
2)print:表示将结果输出到标准输出。会换行
print0 则不换行
3)exec:对匹配的文件执行该参数所给出的shell命令。
形式为command {} \;,注意{}与\;之间有空格
4)ok:与exec作用相同,
区别在于,在执行命令之前,都会给出提示,让用户确认是否执行
5)|xargs 与exec作用相同 ,起承接作用
区别在于 |xargs 主要用于承接删除操作 ,而 -exec 都可用 如复制、移动、重命名等
6)options :表示查找方式
options的参数
-name filename #查找名为filename的文件
-perm #按执行权限来查找
-user username #按文件属主来查找
-group groupname #按组来查找
-mtime -n +n #按文件更改时间来查找文件,-n指n天以内,+n指n天以前
-atime -n +n #按文件访问时间来查找文件,-n指n天以内,+n指n天以前
-ctime -n +n #按文件创建时间来查找文件,-n指n天以内,+n指n天以前
-nogroup #查无有效属组的文件,即文件的属组在/etc/groups中不存在
-nouser #查无有效属主的文件,即文件的属主在/etc/passwd中不存
-type b/d/c/p/l/f #查是块设备、目录、字符设备、管道、符号链接、普通文件
-size n[c] #查长度为n块[或n字节]的文件
-mount #查文件时不跨越文件系统mount点
-follow #如果遇到符号链接文件,就跟踪链接所指的文件
-prune #忽略某个目录
按文件名查找
find 路径 -name 文件名
说明:按名字查找支持模糊搜索
在当前目录及子目录中,查找大写字母开头的txt文件
$ find . -name '[A-Z]*.txt' -print
在/etc及其子目录中,查找host开头的文件
$ find /etc -name 'host*' -print
在$HOME目录及其子目录中,查找所有文件
$ find ~ -name '*' -print
在当前目录及子目录中,查找不是out开头的txt文件
$ find . -name "out*" -prune -o -name "*.txt" -print
忽略字符大小写
find -iname
路径
~ 表示$HOME目录
. 表示当前目录或者./
/ 表示根目录
/* 表示该目录下的所有文件
./* 表示当前目录下的所有子目录(文件)
‘pwd’ 表示当前目录《并以绝对路径输出》外面需要套一个双引号
$pwd 表示当前目录 外面不需要套双引号
按拥有者查找
find 路径 -user 拥有者名
按大小查找
find 路径 -size 文件大小
文件要等于 指定的文件大小
find 路径 -size +文件大小
文件要大于 指定的文件大小
find 路径 -size -文件大小
文件要小于 指定的文件大小
查找超过1M的文件
$ find / -size +1M -type f -print
查找等于6字节的文件
$ find . -size 6c -print
查找小于32k的文件
$ find . -size -32k -print
按类型查找 (b/d/c/p/l/f )
在当前目录及子目录下,查找符号链接文件
$ find . -type l -print
普通文件类型
Linux中最多的一种文件类型, 包括 纯文本文件(ASCII);二进制文件(binary);数据格式的文件(data);各种压缩文件.第一个属性为 [-]
目录文件
就是目录, 能用 # cd 命令进入的。第一个属性为 [d],例如 [drwxrwxrwx]
块设备文件
块设备文件 : 就是存储数据以供系统存取的接口设备,简单而言就是硬盘。例如一号硬盘的代码是 /dev/hda1等文件。第一个属性为 [b]
字符设备
字符设备文件:即串行端口的接口设备,例如键盘、鼠标等等。第一个属性为 [c]
套接字文件
这类文件通常用在网络数据连接。可以启动一个程序来监听客户端的要求,客户端就可以通过套接字来进行数据通信。第一个属性为 [s],最常在 /var/run目录中看到这种文件类型
管道文件
FIFO也是一种特殊的文件类型,它主要的目的是,解决多个程序同时存取一个文件所造成的错误。FIFO是first-in-first-out(先进先出)的缩写。第一个属性为 [p]
链接文件
类似Windows下面的快捷方式。第一个属性为 [l],例如 [lrwxrwxrwx]
按时间查找
查找2天内被更改过的文件
$ find . -mtime -2 -type f -print
查找2天前被更改过的文件
$ find . -mtime +2 -type f -print
查找一天内被访问的文件
$ find . -atime -1 -type f -print
查找一天前被访问的文件
$ find . -atime +1 -type f -print
查找一天内状态被改变的文件
$ find . -ctime -1 -type f -print
查找一天前状态被改变的文件
$ find . -ctime +1 -type f -print
查找10分钟以前状态被改变的文件
$ find . -cmin +10 -type f -print
注意
find 组合操作符 默认是与的关系
find ./ -name a -a -type f -ls
-a 是and的缩写 也就是与的关系
find ./ -name a -o -type f -ls
-o 是 or 的缩写也就是或的关系
但注意此时上面这种写法是错误的
应将 -ls 换成 -print 或者:
find ./ \(-name a -o -type f \) -ls
说明
\( 和 \) 都是转义符的写法
find ./ -name a -not -type f -ls
-not 是非的关系 也能使用 !代替
find /dev -name a "std*" -type l -ls
如果使用了通配符,需要用双引号
注意: 如果 find 查找路径是当前路径 (默认路径) 那结果也是当前路径
如果 find 查找路径是绝对路径 , 那结果也是绝对路径
如果希望使用当前路径 输出绝对路径 可以用 $ (pwd) 表示当前路径,或者反引号 ‘ pwd’ 但需要双引号包裹
find 后的路径 可以 是多个路径 空格分开
查找空目录
find $(pwd) -empty -type d -ls
find命令的一些动作
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bd5NA0fG-1647141068202)(/home/x-shell/图片/2022-03-13 00-19-59屏幕截图.png)]
可见%f 是只输出文件名
%h 只输出路径名
%P 忽略 find 后的路径名
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YAb9g0Rb-1647141068205)(/home/x-shell/图片/2022-03-13 00-25-04屏幕截图.png)]
-fls 是将文件覆盖写到文件中,文件不存在则会创建
-fprint 是将 print 输出的内容 覆盖写到指定文件中
-fprinto 同理 ,只是不换行
-delete 先查找 再删除
用find 命令排除子目录及文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SpKGEXr1-1647141068206)(/home/x-shell/图片/2022-03-13 00-32-04屏幕截图.png)]
说明
-path 和 -name 可以互调位置
pwd 表示当前位置 需要反引号 和双引号
!后的路径 应以 find 后的路径开头。表示在当前目录下 排除 ba子目录
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-12a0zvg7-1647141068207)(/home/x-shell/图片/2022-03-13 00-36-20屏幕截图.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IO0r7J13-1647141068208)(/home/x-shell/图片/2022-03-13 10-20-15屏幕截图.png)]
说明:
上面的 -maxdepth 1 表示从当前目录 ($pwd)向下搜寻一级
上面的 -maxdepth 2 表示从当前目录 ($pwd)向下搜寻两级
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FK8YGxx8-1647141068208)(/home/x-shell/图片/2022-03-13 10-23-13屏幕截图.png)]
说明:
上面的 -mindepth 3 表示从第 三级目录开始搜寻
有关执行命令
1)查找 del.txt 并删除,删除前提示确认
$ find . -name 'del.txt' -ok rm {} \;
2) 查找 aa.txt 并备份为aa.txt.bak
$ find . -name 'aa.txt' -exec cp {} {}.bak \;
3)查当前目录下的所有普通文件
# find . -type f -exec ls -l {} \;
-rw-r–r– 1 root root 34928 2003-02-25 ./conf/httpd.conf
-rw-r–r– 1 root root 12959 2003-02-25 ./conf/magic
-rw-r–r– 1 root root 180 2003-02-25 ./conf.d/README
查当前目录下的所有普通文件,并在 - exec 选项中使用 ls -l 命令将它们列出
4)在 /logs 目录中查找更改时间在5日以前的文件并删除它们
$ find logs -type f -mtime +5 -exec -ok rm {} \;
5)查询当天修改过的文件
# find ./ -mtime -1 -type f -exec ls -l {} \;
6)查询文件并询问是否要显示
# find ./ -mtime -1 -type f -ok ls -l {} \;
< ls … ./classDB.inc.php > ? y
-rw-r–r– 1 cnscn cnscn 13709 1月 12 12:22 ./classDB.inc.php
# find ./ -mtime -1 -type f -ok ls -l {} \;
< ls … ./classDB.inc.php > ? n
其他示例
1、删除0字节文件
[root@localhost ~]# find . -type f -size 0 -exec rm -f {} \;
[root@localhost ~]# find * -type f -size 0 -delete
2、find命令首先匹配所有文件名为“passwd*”的文件,用-exec grep 过滤
[root@localhost ~]# find /etc -name "passwd*" -exec grep "test" {} \;
3、find 命令在当前目录中查找文件名以.log 结尾、更改时间在7日以前的文件,并删除它们(这种是有提示的)
[root@localhost home]# find . -name "*.log" -mtime +7 -ok rm -f {} \;
4、在 /var/log/ 目录中查找更改时间在7日以前的文件并删除它们:
[root@localhost home]# find /var/log/ -type f -mtime +7 -exec rm -f {} \;
有时也可看到 find * …… ,这个 * 指代的是当前路径
注意find 命令是递归查找,从当前位置查找隐含了 从当前位置以及其每个子目录查找
如:
假如在当前目录下查找文件,且当前目录下有很多文件及目录(多层目录),包括dir0、dir1和dir2 ...等目录及dir00、dir01...dir10、dir11...等子目录。
1. 在当前目录下查找所有txt后缀文件
find ./ -name '*.txt'
2.在当前目录下的dir0目录及子目录下查找txt后缀文件
find ./ -path './dir0*' -name '*.txt'
3.在当前目录下的dir0目录下的子目录dir00及其子目录下查找txt后缀文件
find ./ -path '*dir00*' -name '*.txt'
显示/test目录下的所有目录
方式一:ls -d /test/
方式二:find /test -type d -maxdepth 1
-prune用法忽略
3、在除dir0及子目录以外的目录下查找txt后缀文件
find ./ -path './dir0*' -a -prune -o -name \*.txt -print
如果目录dir0存在(即-a左边为真),则求-prune的值,-prune 返回真,‘与’逻辑表达式为真(即-path './dir0*' -a -prune 为真),
find命令将在除这个目录以外的目录下查找txt后缀文件并打印出来;如果目录dir0不存在(即-a左边为假),
则不求值-prune ,‘与’逻辑表达式为假,则在当前目录下查找所有txt后缀文件。
4、在除dir0、dir1及子目录以外的目录下查找txt后缀文件
find ./ /( -path './dir0*' -o -path './dir1*' /) -a -prune -o -name \*.txt -print
注意:圆括号()表示表达式的结合。即指示 shell 不对后面的字符作特殊解释,而留给 find 命令去解释其意义。由于命令行不能直接使用圆括号,
所以需要用反斜杠'/'进行转意(即'/'转意字符使命令行认识圆括号)。同时注意'/(','/)'两边都需空格。
5、在dir0、dir1及子目录下查找txt后缀文件
find ./ /( -path './dir0*' -o -path './dir1*' /) -a -name \*.txt -print
6、在所有以名为dir_general的目录下查找txt后缀文件
find ./ -path '*/dir_general/*' -name \*.txt -print
**时间日期指令的补充**```
-daystart
从当日起始时开始而不是从24小时之前,计算时间(for -amin, -atime, -cmin, -ctime, -mmin, and -mtime)。
-amin n
对文件的最近一次访问是在 n 分钟之前。
-anewer file
对文件的最近一次访问比 file 修改时间要晚。如果命令行中 -follow 在 -anewer 之前(只有在这种情况下 -anewer会受 -follow 的影响)。
-atime n
对文件的最近一次访问是在 n*24 小时之前。
-cmin n
对文件状态的最近一次修改是在 n 分钟之前。
-cnewer file
对文件状态的最近一次修改比 file 修改时间要晚。如果命令行中 -follow 在 -cnewer 之前(只有在这种情况下-cnewer 会受 -follow 的影响)。
-ctime n
对文件状态的最近一次修改是在 n*24 小时之前。
-mmin n
对文件数据的最近一次修改是在 n 分钟之前。
-mtime n
对文件数据的最近一次修改是在 n*24 小时之前。
————————————————
版权声明:本文为CSDN博主「幸福丶如此」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_37886429/article/details/78434482