Linux中的 德·摩根定律
§·德·摩根定律介紹
※概念
在命題邏輯和邏輯代數中,德·摩根定律(或稱德·摩根定理)是關于命題邏輯規律的一對法則。
奧古斯塔斯·德·摩根首先發現了在命題邏輯中存在著下面這些關系:
非(P 且 Q) = (非 P) 或 (非 Q)
非(P 或 Q) = (非 P) 且 (非 Q)
德·摩根定律在數理邏輯的定理推演中,在計算機的邏輯設計中以及數學的集合運算中都起著重要的作用。
※模型圖解
如上圖:D表示藍色區域,A代表白色區域,B代表黃色區域,E代表(AB相交的區域)
我們大概來了解下摩根定律是怎樣的思路:
◎測試一:非(P 且 Q) = (非 P) 或 (非 Q)
·非(P 且 Q):
P 且 Q的區域為:E的區域 ; 非E即為,ABD的區域。
·(非 P) 或 (非 Q) :
非P : D B 的區域
非P : A D 的區域
非P或非P :ABD的區域。
·結果:非(P 且 Q) = (非 P) 或 (非 Q)
◎測試二:非(P 或 Q) = (非 P) 且 (非 Q)
·非(P 或 Q) :
P或Q:即為 ABE的區域; 非ABE的區域:即為 D的區域。
·(非 P) 且 (非 Q)
非P:即為BD的區域; 非Q:即為AD的區域; BD的區域與AD的區域合集:D的區域。
·結果:非(P 或 Q) = (非 P) 且 (非 Q)
§·Linux中德·摩根定律思想練習題
1、查找/var目錄下屬主為root,且屬組為mail的所有文件?
解:find /var -user root -a -group mail -ls
[root@Centos7 zipdir]# find /var -user root -a -group mail -ls 201327962 0 drwxrwxr-x 2 root mail 69 Aug 12 11:19 /var/spool/mail 206430755 1180 -rw------- 1 root mail 1208282 Aug 10 19:24 /var/spool/mail/root
2、查找/var目錄下屬主不屬于root、lp、gdm的所有文件?
解:
[root@Centos7 zipdir]# find /var -not -user root -a -not -user lp -a -not -user gdm -ls #不是root,不是lp,不是gdm的屬主文件及為:非(root 或 lp 或 gdm的文件) 表達式可改為: find /var -not \(-user root -o -user lp -o -user gdm\) 203409068 0 drwxr-xr-x 2 unbound unbound 21 Jul 21 11:27 /var/lib/unbound 203409069 4 -rw-r--r-- 1 unbound unbound 409 Nov 20 2015 /var/lib/unbound/root.key 68465684 0 drwx------ 2 tss tss 6 Nov 21 2015 /var/lib/tpm 949938 0 drwxr-xr-x 3 colord colord 50 Jul 21 11:35 /var/lib/colord 68485813 0 drwxr-xr-x 2 colord colord 6 Nov 20 2015 /var/lib/colord/icc 2229271 4 -rw-r--r-- 1 colord colord 4096 Jul 21 11:35 /var/lib/colord/mapping.db 899622 8 -rw-r--r-- 1 colord colord 7168 Jul 21 11:35 /var/lib/colord/storage.db 961784 0 drwxr-xr-x 2 geoclue geoclue 6 Nov 20 2015 /var/lib/geoclue 965063 0 drwx------ 2 rpc rpc 6 Nov 20 2015 /var/lib/rpcbind 68510463 0 drwxr-xr-x 2 chrony chrony 6 Nov 24 2015 /var/lib/chrony
#與上面的結果一樣
[root@Centos7 zipdir]# find /var -not \( -user root -o -user lp -o -user gdm \) -ls 203409068 0 drwxr-xr-x 2 unbound unbound 21 Jul 21 11:27 /var/lib/unbound 203409069 4 -rw-r--r-- 1 unbound unbound 409 Nov 20 2015 /var/lib/unbound/root.key 68465684 0 drwx------ 2 tss tss 6 Nov 21 2015 /var/lib/tpm 949938 0 drwxr-xr-x 3 colord colord 50 Jul 21 11:35 /var/lib/colord 68485813 0 drwxr-xr-x 2 colord colord 6 Nov 20 2015 /var/lib/colord/icc 2229271 4 -rw-r--r-- 1 colord colord 4096 Jul 21 11:35 /var/lib/colord/mapping.db 899622 8 -rw-r--r-- 1 colord colord 7168 Jul 21 11:35 /var/lib/colord/storage.db 961784 0 drwxr-xr-x 2 geoclue geoclue 6 Nov 20 2015 /var/lib/geoclue 965063 0 drwx------ 2 rpc rpc 6 Nov 20 2015 /var/lib/rpcbind 68510463 0 drwxr-xr-x 2 chrony chrony 6 Nov 24 2015 /var/lib/chrony
3、查找/var目錄下最近一周內其內容修改過,同時屬主不為root,也不是postfix的文件?
解:屬主不為 root,也不是postfix即為: –not -user root -a -not -user postfix
等同:-not \( -user root -o -user postfix \)
[root@Centos7 zipdir]# find /var -mtime -7 -not \( -user root -o -user postfix \) -ls 136800283 0 drwxr-xr-x 2 gdm gdm 17 Aug 10 17:17 /var/lib/gdm/.config/dconf 2229275 0 drwx------ 2 gdm gdm 52 Aug 10 17:17 /var/lib/gdm/.config/ibus/bus 206776371 0 -rw-rw---- 1 user1 mail 0 Aug 10 16:58 /var/spool/mail/user1 206824171 0 -rw-rw---- 1 user2 mail 0 Aug 12 11:19 /var/spool/mail/user2
…………………………………..
4、查找當前系統上沒有屬主或屬組,且最近一個周內曾被訪問過的文件?
解: 沒有屬主: -nouser ,沒有屬組:-o -nogroup , 并且一周內訪問過:-a –atime -7
[root@Centos7 /]# find / -nouser -o -nogroup -a -atime -7 /var/spool/mail/user2 /home/user2 /home/user2/.mozilla /home/user2/.mozilla/extensions /home/user2/.mozilla/plugins /home/user2/.bash_logout /home/user2/.bash_profile /home/user2/.bashrc
5、查找/etc目錄下大于1M且類型為普通文件的所有文件?
解:大于1M : –size +1M 并且為普通文件: –a -type f
[root@Centos7 user1]# find /etc -size +1M -type f -exec ls -lh {} \; -rw-r--r--. 1 root root 3.7M Nov 21 2015 /etc/selinux/targeted/policy/policy.29 -r--r--r--. 1 root root 6.7M Jul 21 11:35 /etc/udev/hwdb.bin -rw-r--r--. 1 root root 1.4M Mar 6 2015 /etc/brltty/zh-tw.ctb
6、查找/etc目錄下所有用戶都沒有寫權限的文件?
解:所有用戶都沒有寫權限的反義就是:有一類用戶有寫權限 -prem /222
[root@Centos7 user1]# find /etc -not -perm /222 -ls 67413670 196 -r--r--r-- 1 root root 198453 Jul 21 11:24 201996308 208 -r--r--r-- 1 root root 211626 Jul 21 11:24 137245057 4 ---------- 1 root root 815 Aug 12 20:32 /etc/gshadow 135047292 4 ---------- 1 root root 825 Aug 12 11:19 /etc/gshadow- 137245052 4 ---------- 1 root root 1389 Aug 12 20:32 /etc/shadow 135052857 4 ---------- 1 root root 1417 Aug 12 11:19 /etc/shadow- 206307131 6852 -r--r--r-- 1 root root 7014922 Jul 21 11:35 /etc/udev/hwdb.bin 135090020 4 -r--r--r-- 1 root root 33 Jul 21 11:27 /etc/machine-id 68801984 4 -r--r--r-- 1 root root 146 Nov 20 2015 /etc/pam.d/cups 136632557 8 -r--r----- 1 root root 4188 Jul 7 2015 /etc/sudoers
7、查找/etc目錄下至少有一類用戶沒有執行權限的文件?
解:至少一類用戶沒有執行權限反義即為:所有用戶都有執行權限: –prem -111,取反即為我們需要的結果。
[root@Centos7 user1]# find /etc -not -perm -111 -ls 136456397 0 -rw-r--r-- 1 root root 0 Jun 10 2014 /etc/wvdial.conf 136456374 4 -rw-r--r-- 1 root root 508 Jan 27 2014 /etc/updatedb.conf 206058477 24 -rw-r--r-- 1 root root 20876 Jun 10 2014 /etc/postfix/access 206058478 12 -rw-r--r-- 1 root root 11681 Jun 10 2014 /etc/postfix/canonical 206062758 4 -rw------- 1 root root 86 Nov 20 2015 /etc/ntp/keys 206062759 4 -rw-r--r-- 1 root root 74 Nov 20 2015 /etc/ntp/step-tickers 136606754 8 -rw-r--r-- 1 root root 5171 Jun 10 2014 /etc/man_db.conf 136632555 4 -rw-r----- 1 root root 3181 Jul 25 2013 /etc/sudo-ldap.conf 136632556 4 -rw-r----- 1 root root 1786 Sep 25 2012 /etc/sudo.conf 136632557 8 -r--r----- 1 root root 4188 Jul 7 2015 /etc/sudoers 136632558 0 drwxr-x--- 2 root root 6 Nov 21 2015 /etc/sudoers.d 136632590 8 -rw-r--r-- 1 root root 4760 Jun 10 2014 /etc/enscript.cfg 136584837 4 -rw-r--r-- 1 root root 375 Nov 20 2015 /etc/trusted-key.key 136584974 4 -rw-r--r-- 1 root root 2872 Jun 10 2014 /etc/pinforc 136629111 8 -rw-r--r-- 1 root root 4479 Oct 31 2014 /etc/wgetrc 136602363 12 -rw-r--r-- 1 root root 8892 Jun 10 2014 /etc/nanorc 136745232 4 -rw-r--r-- 1 root root 1362 Jun 10 2014 /etc/pbm2ppa.conf 136745233 8 -rw-r--r-- 1 root root 6300 Jun 10 2014 /etc/pnm2ppa.conf 136832965 4 -rw-r--r-- 1 root root 37 Jul 21 11:34 /etc/vconsole.conf 136832967 4 -rw-r--r-- 1 root root 19 Jul 21 11:34 /etc/locale.conf 136832968 4 -rw-r--r-- 1 root root 14 Jul 21 11:34 /etc/hostname 136606740 4 -rw-r--r-- 1 root root 163 Jul 21 11:23 /etc/.updated 136632726 12 -rw-r--r-- 1 root root 12288 Jul 21 11:35 /etc/aliases.db 136800164 8 -rw-r--r-- 1 root root 6722 Aug 13 2015 /etc/screenrc 137072884 0 -rw-r--r-- 1 root root 0 Aug 9 21:17 /etc/111aa .................................................................
8、查找/etc/init.d目錄下,所有用戶都有執行權限,且其它用戶有寫權限的文件?
解:所有用戶有執行權限: –prem -111 ,其它用戶有寫權限: -prem –001
[root@Centos7 init.d]# find /etc/init.d/ -perm -111 -perm -002 -ls 2642165 0 -rwxr-xrwx 1 root root 0 Aug 12 17:18 /etc/init.d/f1 [root@Centos7 init.d]#
原創文章,作者:linux_root,如若轉載,請注明出處:http://www.www58058.com/34313
find命令基本是筆試題中必考的內容,也是我們查找文件的最重要的工具,而這其中最難的估計是-perm選項的理解了,只有深刻理解的摩根定律才能讓我們熟練的運用find工具。