find -o 가 이해가 잘 안됩니다.
글쓴이: jo1413 / 작성시간: 목, 2011/09/15 - 9:52오전
[root@su250 ~]# find / -user root -perm 4755 -exec ls -l {} \; -rwsr-xr-x 1 root root 12248 3월 12 2010 /sbin/pam_timestamp_check -rwsr-xr-x 1 root root 71160 4월 5 2010 /sbin/umount.nfs4 -rwsr-xr-x 1 root root 71156 4월 5 2010 /sbin/mount.nfs -rwsr-xr-x 1 root root 71160 4월 5 2010 /sbin/umount.nfs -rwsr-xr-x 1 root root 19184 3월 12 2010 /sbin/unix_chkpwd -rwsr-xr-x 1 root root 71160 4월 5 2010 /sbin/mount.nfs4 find: /proc/15301/task/15301/fd/4: 그런 파일이나 디렉토리가 없음 find: /proc/15301/fd/4: 그런 파일이나 디렉토리가 없음 -rwsr-xr-x 1 root root 31244 9월 27 2009 /bin/ping6 -rwsr-xr-x 1 root root 23960 3월 1 2010 /bin/su -rwsr-xr-x 1 root root 38936 1월 20 2010 /bin/umount -rwsr-xr-x 1 root root 35832 9월 27 2009 /bin/ping -rwsr-xr-x 1 root root 58324 1월 20 2010 /bin/mount -rwsr-xr-x 1 root root 6728 9월 20 2009 /usr/sbin/userisdnctl -rwsr-xr-x 1 root root 6240 1월 6 2007 /usr/sbin/ccreds_validate -rwsr-xr-x 1 root root 6820 9월 29 2009 /usr/sbin/usernetctl -rwsr-xr-x 3 root uucp 568844 1월 7 2011 /usr/lib/vmware-tools/bin32/vmware-tpvmlp -rwsr-xr-x 3 root uucp 568844 1월 7 2011 /usr/lib/cups/backend/tpvmlp -rwsr-xr-x 3 root uucp 568844 1월 7 2011 /usr/lib/cups/backend/tpvmgp -rwsr-xr-x 1 root root 61452 3월 31 2010 /usr/lib/nspluginwrapper/plugin-config -rwsr-xr-x 1 root root 169760 1월 13 2010 /usr/kerberos/bin/ksu -rwsr-xr-x 1 root root 176732 3월 31 2010 /usr/libexec/openssh/ssh-keysign -rwsr-xr-x 1 root root 46972 3월 31 2010 /usr/bin/chage -rwsr-xr-x 1 root root 13108 9월 22 2009 /usr/bin/rlogin -rwsr-xr-x 1 root root 24588 3월 31 2010 /usr/bin/newgrp -rwsr-xr-x 1 root root 43492 1월 27 2010 /usr/bin/at -rwsr-xr-x 1 root root 8908 9월 22 2009 /usr/bin/rsh -rwsr-xr-x 1 root root 18608 9월 22 2009 /usr/bin/rcp -rwsr-xr-x 1 root root 51512 3월 31 2010 /usr/bin/gpasswd -rwsr-xr-x 1 root root 22984 1월 7 2007 /usr/bin/passwd [root@su250 ~]# [root@su250 ~]# [root@su250 ~]# [root@su250 ~]# find / -user root -o -perm 4755 -exec ls -l {} \; find: /proc/15343/task/15343/fd/4: 그런 파일이나 디렉토리가 없음 find: /proc/15343/task/15343/fd/4: 그런 파일이나 디렉토리가 없음 find: /proc/15343/fd/4: 그런 파일이나 디렉토리가 없음 find: /proc/15343/fd/4: 그런 파일이나 디렉토리가 없음 [root@su250 ~]#
1
첫번째 예는 and 연산이고
두번째 예는 or 연산인데
왜 두 번째 연산에서는 결과를 찾아주지 못하나요?
OR 연산자는 root 소유자거나 퍼미션이 4755인 파일을 찾아주는게 아닌가요?
제 생각에는 AND 연산자보다 OR 연산자 결과값이 더 많은 결과를 보여줘야 되는데 그렇지가 않네요?
어제 find에 대해서 찾아봤더니 OR 연산자는 앞의 결과값(소유자가 root)이 거짓인 경우에 사용되는 트릭이라고 나와 있어서 여러가지 실험을 해봤더니 이 말이 맞는 것 같습니다..그래도 확신이 서지 않아서 여쭤 봅니다.
[root@su250 ~]# find / -nouser -o -nogroup -exec ls -l {} \; find: /proc/16167/task/16167/fd/4: 그런 파일이나 디렉토리가 없음 find: /proc/16167/task/16167/fd/4: 그런 파일이나 디렉토리가 없음 find: /proc/16167/fd/4: 그런 파일이나 디렉토리가 없음 find: /proc/16167/fd/4: 그런 파일이나 디렉토리가 없음 합계 0 -rw-r--r-- 1 sspark3 2000 33 9월 8 10:33 /home/sspark2/.bash_logout -rw-r--r-- 1 sspark3 2000 124 9월 8 10:33 /home/sspark2/.bashrc 합계 8 drwxr-xr-x 2 sspark3 2000 4096 9월 8 10:33 extensions drwxr-xr-x 2 sspark3 2000 4096 9월 8 10:33 plugins 합계 0 합계 0 -rw-r--r-- 1 sspark3 2000 176 9월 8 10:33 /home/sspark2/.bash_profile [root@su250 ~]# [root@su250 ~]# [root@su250 ~]# find / -nouser -exec ls -l {} \; find: /proc/16175/task/16175/fd/4: 그런 파일이나 디렉토리가 없음 find: /proc/16175/fd/4: 그런 파일이나 디렉토리가 없음 [root@su250 ~]# [root@su250 ~]# [root@su250 ~]# find / -nogroup -exec ls -l {} \; find: /proc/16176/task/16176/fd/4: 그런 파일이나 디렉토리가 없음 find: /proc/16176/fd/4: 그런 파일이나 디렉토리가 없음 합계 0 -rw-r--r-- 1 sspark3 2000 33 9월 8 10:33 /home/sspark2/.bash_logout -rw-r--r-- 1 sspark3 2000 124 9월 8 10:33 /home/sspark2/.bashrc 합계 8 drwxr-xr-x 2 sspark3 2000 4096 9월 8 10:33 extensions drwxr-xr-x 2 sspark3 2000 4096 9월 8 10:33 plugins 합계 0 합계 0 -rw-r--r-- 1 sspark3 2000 176 9월 8 10:33 /home/sspark2/.bash_profile [root@su250 ~]#
이 예제를 보면 앞의 값이 거짓이고 뒤의 값이 참일 때 나타나는 것 같습니다?
2
위에서 보면 '그런 파일이나 디렉토리가 없음' 이란 메시지는 왜 뜨는 건가요? 그것도 특정 디렉토리만요..
3
Xshell을 쓰고 있는데 find 중간에 디렉토리를 바꾸고 싶다 하면 어떻게들 움직이십니까?
저 같은 경우는 Home 버튼 누른 후 Ctrl + ←나 Alt + B를 누르려고 하는데 둘 다 안 먹더라고요.
Ctrl + ←는 Xshell 창이라 안 먹는 건가...
Alt + B는 Xshell의 메뉴가 떠 버립니다.
어떻게 해결 방법이 없을까요?
← 만으로 디렉토리를 바꾸려고 하니 귀찮습니다..바보 같기도 하고.
혹시나 해서 Esc + B 해봤는데 되네요..근데 ESC를 메타키로 사용하기에는...
Forums:
-exec도 똑같은 테스트구문이라고 보세요. 연산자
-exec도 똑같은 테스트구문이라고 보세요.
연산자 우선순위 문제니 \( -user root -o -perm xxx \) 와 같이 해보세요.
일단 -exec를 없애고 두개의 predicate만 가지고 테스트 해보시면 확실해질겁니다.
댓글 달기