以洪荒之力打开linux德·摩根定律

德·摩根定律让学习liunx的小伙伴绕得头疼,现在我就用洪荒之力为大家理顺一下这个定律。


wKiom1etwHLSIrxXAAAskZ0cql4503.jpg

由图片可以看出,


A=4+3

B=3+2


非A=2+1

非B=4+1



A且B就是代表既是A又是B的地方,A和B都有色块3,所以色块3代表了A且B

同时,我们再看A=4+3 ,B=3+2,我们可以推断出,且运算的结果就是两个算数式中重复的数字。


A且B=3



A或B就是代表可以是A的部分,也可以是B的部分,所以色块2,3,4的和代表了A或B的范围。再看A=4+3,B=3+2,我们可以推断出,或运算的结果就是两个算术式中所有数字相加,重复的数字只加一次。


A或B=2+3+4


非一个色块,就是除了这个色块的其他所有色块之和。非n个色块,就是除了这n个色块的其他色块之和。


例:

   非3=1+2+4



由此,我们可以进行以下的运算


(非A)或(非B)=(2+1)或(4+1)=1+2+4

非(A且B)=非(4+3且3+2)=非(3)=1+2+4


(非A)且(非B)=(2+1)且(4+1)=1

非(A或B)=非(4+3或3+2)=非(4+3+2)=1


我们可以得出以下结论:


(非A)或(非B)=非(A且B)


(非A)且(非B)=非(A或B)




下面让我们来做下练习题:


  1. chmod -rw /tmp/file1,编写脚本/root/bin/per.sh,判断当前用户对/tmp/fiile1文件是否不可读且不可写

    方法一:


[root@localhost bin]# cat per.sh 

#!/bin/bash

[ ! -r /tmp/file1 -a ! -w /tmp/file1 ] && echo "you can't read and write /tmp/file1" || echo "you can read or write /tmp/file1 " 


    方法二:

    

[root@localhost bin]# cat per2.sh

#!/bin/bash

! [ -r /tmp/file1 -o -w /tmp/file1 ] && echo "you can't read and write /tmp/file1" || echo "you can read or write /tmp/file1 "


红色标记处为两条语句中不同的地方,但两者的功能是相同的。



有的小伙伴不理解 “所有用户都没有写权限”的反面=至少有一类用户有写权限

我们可以拿个空瓶子来说明:


“空瓶子”反面=“瓶子里有水”,注意跟水量多少无关,有一滴水的瓶子也不算空瓶子,我们也可以说,


“空瓶子”反面=瓶子里至少有一滴水


所以,“所有用户都没有写权限”的反面=至少有一类用户有写权限。

练习:

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

   find /var -user root -a -group -mail

2、查找/var目录下不属于root、lp、gdm的所有文件

   find /var -not \( -user root -o -user lp -o -user gdm \)

3、查找/var目录下最近一周内其内容修改过,同时属主不为root,也不是postfix的文件

   find /var -mtime -7 -a -not -user root -a -not -user plstfix

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

   find / -nouser -o -nogroup -atime -7

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

   find /etc/ -size +1M -type f

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

   find /etc -not -perm /222

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

   find /etc -not -perm -111 

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

   find /etc/init.d/ -perm -113

原创文章,作者:zebra930,如若转载,请注明出处:http://www.178linux.com/34405

(0)
zebra930zebra930
上一篇 2016-08-15 09:25
下一篇 2016-08-15 09:25

相关推荐

  • 文件查找命令find

      在文件系统上常常需要根据文件的各种属性去查找符合条件的文件。在Linux下也有相当优异的查找命令。今天只要将find和locate。find通常不常用,因为速度慢!通常我们先使用locate来进行模糊查找,如果真找不到了,才以find来查找。为什么呢?因为locate是利用数据库来查找数据,所以速度非常快,而且并没有实际查询硬盘比较省时间。 l…

    Linux干货 2016-08-22
  • 第九周作业

    1、写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin);分别这两类用户的个数;通过字符串比较来实现; #!/bin/bash LOGIN_USER=0 NOLOGIN_USER=0 for SHELLUSER in $(cat /etc/passwd | cut -d : -f 7);do…

    Linux干货 2017-07-03
  • bash脚本编程之流程控制if、for、while、until简介

    概述     之前介绍了一些bash脚本编程的变量、运算、条件测试的一些基础内容,了解了脚本实际上就是一些语句加上一些流程控制组合起来,实现某种功能的可执行文件。我们知道,条件测试的目的,实际就是为了实现一种流程的控制,那么本篇就简单介绍一下bash里面常见的流程控制语句,包括选择、循环等内容,具体包括以下几个部分: …

    Linux干货 2016-08-18
  • 文件寻踪和文件压缩

    文件查找工具: 文件:根据文件的种属性去找到相应文件 文件查找工具:locate, find locate: 根据此前updatedb命令生成的数据库来完成文件查找查找速度很快非实时查找,结果不精确;模糊查找; 必要时,可手动执行updatedb命令; find命令:   通过遍历指定的目标目录,实时查找符合指定属性的文件; 精确匹配;速度略慢; …

    Linux干货 2016-08-19
  • Redis 存储分片之代理服务Twemproxy 测试

    概述 实际业务场景中单点 Redis 容量、并发都是有限的,所以有 Redis Cluster 的需求。 但是官方的 Redis Cluster 一再跳票,还不可用。 只好先使用最简单的方式:Proxy。有很多可选,但在大范围生产使用的, Twitter 开源的 Twemproxy  看起来是个理想的选择 – https://…

    Linux干货 2015-03-10
  • Linux系统启动流程

        下面按照系统的启动顺序来进行逐一的讲解。 一、POST     当我们按下开机的电源后,主板上的芯片组会首先向CPU发出一个reset指令,之后待芯片组检测到电源供电稳定后便撤去reset指令,CPU就会跳转到BIOS中的启动代码位置; BIOS首先要检测关键设备(如内显…

    Linux干货 2015-05-23