命 令 习 题 集 ( 三 )

1. find 查找某个时间段的文件 


在一个目录下,有很多很多文件,只想找到12月1日至12月31日的文件,如何找呢?

先手动找到在这个时间段最早的文件,比如1.txt是12月1日0点1分创建的,再找到这个时间段最晚的文件,比如2.txt是12月31日23点55分创建的;

find  . -type f -newer 1.txt ! -newer 2.txt

不去手动找,参考下面:

其实也就是修改文件的创建日期(mtime)。 touch就有这个功能。

例 新建一个2012年10月8日的文件

touch -m -t 1210080000 1.txt

然后stat 1.txt

发现除了Modify 那一行为2012年10月8日0点0分外,其他两项均为当前日期和时间

还可以

touch -c -t 1210080000 2.txt

stat 2.txt

Access 和 Modify 均为2012年10月8日0点0, Change 为当前日期和时间

2. 创建指定日期的文件  


其实也就是修改文件的创建日期(mtime)。 touch就有这个功能。
例 新建一个2012年10月8日的文件
touch -m -t 1210080000 1.txt

然后stat 1.txt 
发现除了Modify 那一行为2012年10月8日0点0分外,其他两项均为当前日期和时间

还可以
touch -c -t 1210080000 2.txt
stat 2.txt
Access 和 Modify 均为2012年10月8日0点0, Change 为当前日期和时间


3. 用find时排除某些目录或者文件  


1.  只排除一个目录或者文件,如查找/tmp/ 目录下所有文件(不包含目录), 并且不包含目录123

find  /tmp/   -path "/tmp/123" -prune -o -type f  -print

2. 排除两个或者多个目录或者文件,如查找/tmp/ 目录下所有文件(不包含目录), 并且不包含目录123和目录234和目录345

find  /tmp/ \( -path "/tmp/123" -o -path "/tmp/234" -o -path "/tmp/345" \) -prune -o -type f -print

注意,如果是查找目录时,-path 后面的目录名一定不要带/  如 写成  -path "/tmp/123/" 就错了,而查找文件时,带/ 没有问题。



4. 为你的linux增加自定义PATH  

把mysql安装在 /usr/local/mysql 下。如果要是用mysql这个命令,我们不得不敲绝对路径/usr/local/mysql/bin/mysql,这样太费劲。

那么就把 /usr/local/mysql/bin 加入到 PATH变量中。

vi  /etc/profile

在最后面加入

export  PATH=$PATH:/usr/local/mysql/bin

报存后,运行命令

source  /etc/profile

检查PATH变量

echo $PATH

这样就可以直接输入mysql 了。


5. linux下文件的特殊权限s和t  

先看看这两个文件的权限:

[[email protected] ~]# ls -ld /usr/bin/passwd  /tmp

drwxrwxrwt 4 root root  4096 Jun  2 17:33 /tmp

-rwsr-xr-x 1 root root 22984 Jan  7  2007 /usr/bin/passwd

这里的s和t是针对执行权限来讲的。

这个s权限,是为了让一般使用者临时具有该文件所属主/组的执行权限。就比如/usr/bin/passwd在执行它的时候需要去修改/etc/passwd和/etc/shadow等文件,这些文件除了root外,其他用户都没有写权限,但是又为了能让普通用户修改自己的密码,只能时临时让他们具有root的权限。所以这个s权限就是用来完成这个特殊任务的。s权限只能应用在二进制的可执行文件上。

如果你不想让普通用户修改自己的密码,只需要

[[email protected] ~]# chmod u-s /usr/bin/passwd  或者

[[email protected] ~]# chmod 0755 /usr/bin/passwd

0755最前面的0表示不使用任何特殊权限,该位上的数字可以是0,1(--t),2(-s-),3(-st),4(s--),5(s-t),6(ss-),7(sst)

那个t权限只针对目录生效,它表示只能让所属主以及root可以删除(重命名/移动)该目录下的文件。比如/tmp目录本来就是任何用户都可以读写,如果别人可以任意删除(重命名/移动)自己的文件,那岂不是很危险。所以这个t权限就是为了解决这个麻烦的。下面举一个例子,说明一下这个权限的用法:

[[email protected] ~]# cd /tmp/

[[email protected] tmp]# mkdir test

[[email protected] tmp]# chmod 1777 test

[[email protected] tmp]# ls -ld test

drwxrwxrwt 2 root root 4096 Jun  2 18:10 test

[[email protected] tmp]# su test1

[[email protected] tmp]$ touch test/1.txt

[[email protected] tmp]$ ls -l test

total 4

-rw-r--r-- 1 test1 test 0 Jun  2 18:12 1.txt

[[email protected] tmp]$ exit

[[email protected] tmp]# su www

[[email protected] tmp]$ ls -l test/1.txt

-rwxrwxrwx 1 test1 test 6 Jun  2 18:12 test/1.txt

[[email protected] tmp]$ rm test/1.txt

rm: cannot remove `test/1.txt‘: Operation not permitted

提示不能删除1.txt

[[email protected] tmp]$ exit

[[email protected] tmp]# chmod -t test

去掉t权限。

[[email protected] tmp]# ls -ld test

drwxrwxrwx 2 root root 4096 Jun  2 18:13 test

[[email protected] tmp]# su www

[[email protected] tmp]$ rm -f test/1.txt

再次删除,则删除成功。

[[email protected] tmp]$ ls test/1.txt

ls: test/1.txt: No such file or directory



6. locate 命令报错 

docate /bin/ls

warning: locate: could not open database: /var/lib/slocate/slocate.db: No such file or directory

warning: You need to run the ‘updatedb‘ command (as root) to create the database.

Please have a look at /etc/updatedb.conf to enable the daily cron job.

这是提示我们,系统目前没有创建slocate 数据库。

解决办法: 输入命令 updatedb 创建数据库

然后需  vim /etc/updatedb.conf

让 DAILY_UPDATE=yes

7. find -name 查找多个文件 


find  / -name 1.txt -o -name 2.txt -o -name 3.txt ...


8. find 查找指定权限的文件


这就用到了 -perm 选项,具体用法是这样的:

1. -perm mode (比如: -perm 775)

解释:775 前面没有横线是代表只要找到百分之百一样的权限才算

好比说一个档案是 -rwxrwxr-x (775)就是100%的match

但是另一个档案是 -rwxrwxrwx (777)不是100%的match,others 多了写的权限就不是100%,所以不match!

2. -perm -mode (例如: -perm -775)

解释:-775 前面有横线表示只要标示的权限match,其他的无所谓,所以上面的第二个档案(777的)在这个case也会match的。

关于find命令中-perm中+- 的含义

举个例子:比如当前目录下有a b c d4个文件

a文件的权限为6000 也就是a文件仅有suid sgid的特殊权限

b文件的权限为2000 也就是b文件仅有sgid的特殊权限

c文件的权限为4000 也就是c文件仅有suid的特殊权限

d文件的权限为6600 也就是d文件有sgid suid的特殊权限并且该文件拥有者对该文件有读写权限

那么现在find . -type f -perm 6000 可以找到a文件,因为a文件权限为6000

那么现在find . -type f -perm -6000 可以找到a d两个文件,这是因为:

我们可以先将a b c d这4个文件的权限转化为2进制那么,

a权限转为2进制后为 110 000 000 000

b权限转为2进制后为 010 000 000 000

c权限转为2进制后为 100 000 000 000

d权限转为2进制后为 110 110 000 000

在 find   . -type f -perm -6000 中的6000权限转为2进制为110 000 000  000,那么6000前的-号代表缺一不可,也就是如果有1的地方必须有1,那么这里找-6000权限的文件,这6000权限里前面有2个位置都是1,所以这里find找-6000权限的文件就是找前面2个位置都是1的文件.而只有a d这两个文件前2个位置都是1,所以find . -type f -perm -6000 只会找到a d两个文件.

find . -type f -perm +6000会找到a b c d这4个文件,这是因为:

+6000 里的这个+号代表有1即可,也就是有1的位置,任何位置只要有1就可以.那么这里找+6000权限的文件,这6000权限前面2个位置都有1,所以这里find 找+6000权限的文件就是找前面2个位置只要有一个位置有1的文件就可以了,这4个文件都符合要求所以最后都能被 find . -type f -perm +6000找到

我们使用man查询find的帮助文档时,发现 -perm 还有一个  /modle 的格式,其实它等同于 +modle, 它建议我们使用 / 而不使用 +, 因为+ 容易产生混淆。所以以后您见到 find  -perm /modle 这样的格式时,就把它看成是+modle 即可。


时间: 2024-10-27 17:18:36

命 令 习 题 集 ( 三 )的相关文章

C++笔试面试(算法题集三)

1>    编写strcpy函数,已知函数原型char*strcpy(char* strDest,char* strSrc) ANSWER: Chat* strcpy(char* strDest,char* strSrc) { If(strSrc==NULL)  return NULL; Char*ch1=strSrc,*ch2=strDest; While(*ch1!='\0') { *ch2++=*ch1++; } *ch2='\0'; Return strDest; } 2>    用递

必 备 习 题 集 ( 三 )

作业题: 1. 图形界面启动的是哪个运行级别? 而我们平时用的命令行模式又是哪个运行级别? 除了图形和命令行模式两个常用级别外,其他运行级别代表什么涵义?如何更改系统的运行级别? 2. Linux默认共启动几个tty? 3. 如何使用yum工具安装图形桌面?如果安装的图形不显示中文怎么办? 4. 要想退出终端界面,除了使用exit外,还可以使用哪个快捷键?如取消一条错误的命令?如何暂停一个当前终端上正在运行的任务? 5. 使用什么命令可以查看某个命令的帮助文档呢? 6. Linux下的隐藏文件或

算法笔记_116:算法集训之代码填空题集三(Java)

 目录 1 数组转置 2 文件管理 3 显示为树形 4 杨辉三角系数 5 圆周率与级数 6 整数翻转 7 自行车行程 8 祖冲之割圆法 9 最大5个数 10 最大镜像子串   1 数组转置 编写程序将2行3列的数组行列置换复制给3行2列的数组(即数组的转置).已经写了如下代码,请完善之: class y{ public static void main(String[] args) throws Exception { int a[][]={{1,2,3},{4,5,6}}; int b[][]

必 备 习 题 集 ( 四 )

作业题: 自动获取IP地址的命令是什么?您知道在什么情况下,您的Linux才可以自动获取IP地址? 2. 远程连接Linux服务器,需要Linux服务器开启sshd服务,那么sshd服务默认监听哪个端口?这个端口是否可以自定义呢?如果可以,如何自定义? 3. 列举出常用的远程连接linux的终端工具有哪些? 4. 手动配置IP,需要修改哪个配置文件? 更改默认的配置文件,需要更改哪些地方,需要增加哪几行? 5. 重启网络服务的命令是什么? 6. 配置DNS需要修改哪个配置文件? 7. 请查资料了

常 识 习 题 集 ( 二 )

习题: 1. 请回答,32位和64位有什么区别呢?什么时候安装32位的,又什么时候安装64位操作系统呢?如何查看系统是32位的还是64位的? 2. swap分区的作用是什么? 如何决定swap分区的大小? 3. 阿铭在教程中,教给您的万能分区是怎样分的? 4. 装完系统后,试试vmware虚拟机的克隆功能. 5. 查资料了解grub的概念,简单描述一下. 6. 关于时区您了解多少呢?在中国我们使用的是哪个时区? 答案: 1. 请回答,32位和64位有什么区别呢?什么时候安装32位的,又什么时候安

树和二叉树-第6章-《数据结构题集》习题解析-严蔚敏吴伟民版

习题集解析部分 第6章 树和二叉树 ——<数据结构题集>-严蔚敏.吴伟民版        源码使用说明  链接??? <数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明        课本源码合辑  链接??? <数据结构>课本源码合辑        习题集全解析  链接??? <数据结构题集>习题解析合辑       相关测试数据下载  链接? 数据包       本习题文档的存放目录:数据结构\▼配套习题解析\▼06 树和二叉树  

串-第4章-《数据结构题集》答案解析-严蔚敏吴伟民版

习题集解析部分 第4章 串 ——<数据结构题集>-严蔚敏.吴伟民版        源码使用说明  链接??? <数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明        课本源码合辑  链接??? <数据结构>课本源码合辑        习题集全解析  链接??? <数据结构题集>习题解析合辑       本习题文档的存放目录:数据结构\▼配套习题解析\▼04 串       文档中源码的存放目录:数据结构\▼配套习题解析\▼04

数据结构——二叉树错题集

2-11 任何一棵二叉树的叶结点在先序.中序和后序遍历序列中的相对次序 遍历顺序 ,令所有遍历中的 根==NULL 遍历顺序都是 左右,即左节点先于右节点,不会改变顺序: 2-xx 先序序列遍历为 a b c d 的二叉树有多少个? 14 运用卡特兰算式 , n = 4 ,ans = C(n,2*n)/(n+1) = 14 1-5: 若一个结点是某二叉树的中序遍历序列的最后一个结点,则它必是该树的前序遍历序列中的最后一个结点. 错误: 特例: A-B-C 一条线上,C是根节点: 中序遍历:ABC

图-第7章-《数据结构题集》习题解析-严蔚敏吴伟民版

习题集解析部分 第7章 图 ——<数据结构题集>-严蔚敏.吴伟民版        源码使用说明  链接??? <数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明        课本源码合辑  链接??? <数据结构>课本源码合辑        习题集全解析  链接??? <数据结构题集>习题解析合辑       相关测试数据下载  链接? 数据包       本习题文档的存放目录:数据结构\▼配套习题解析\▼07 图       文档中源