[linux] find + xargs + ls 명령어 몇가지 활용
로빈아빠
본문
find + xargs + ls 명령어 몇가지 활용
원본 : http://www.linuxchannel.net/docs/find-xargs-ls.txt
작성자 : 김칠봉 <san2 at linuxchannel.net>
작성일 : 2001.03.12
목차
1. 가장 일반적인 find 명령어
2. find 명령어 일반적인 옵션
2-1. 사용법 개요
2-2. 일반적으로 표현식 옵션 구분
3-3. 자주 사용되는 표현식 옵션
3-4. path(find 명령어 다음의 path)
3-5. 표현식-연산자
3. 예제
3-1. 다른 명령어와 결합형태(ls,xargs)
3-2. 퍼미션 관련 예제
3-3. 유저와 관련된 예제
3-4. 팁
- 최근 하루(1) 동안(-)에 변경(change)된 파일을 찾을려면(-ctime)?
- 오래된 파일을 찾을려면(30일 이상 수정(modify))되지 않은)?
- 최근 30일(30) 안에(-) 접근(access)하지 않은 파일과 디렉토리를 리스트
로 만들려면(-atime)?
- 자신의 홈디렉토리에서 만 검색하려면?
- 서브 디렉토리로 내려가지 않고 현재 디렉토리에서만 검색하려면?
- 특정 유저(foobar) 소유의 파일을 찾을려면?
- 퍼미션이 777인 파일을 찾을려면 ?
- others에게 쓰기 권한이 있는 파일을 찾을려면?
- others에게 쓰기 권한이 있는 파일을 찾아 쓰기 권한을 없애려면?
- 유저이름과 그룹이름이 없는 파일을 찾을려면?
- 빈 파일을 찾을려면?
- 파일크기가 100M 이상된 파일을 찾을려면?
- *.bak 파일을 찾아 지울려면?
- *.bak 파일을 찾아 특정 디렉토리로 옮길려면?
- 디렉토리 만 찾을려면?
- root권한으로 실행되는 파일을 찾을려면?
- 다른 파일시스템을 검색하지 않을려면?
- 파일이름에 공백이 들어간 파일을 찾을려면?
- 숨겨진(hidden) 파일을 찾을려면?
- 같은 이름을 가진 디렉토리를 찾을려면?
- 잘못된 링크를 찾을려면?
4. find 명령어에 대해서 좀더 알아보려면?
------------------------------------------------------------
1. 가장 일반적인 find 명령어
# find /path -name "foobar" -print
제일 먼저(?) 배우는 형식이 아닌가 쉽군요.
2. find 명령어 일반적인 옵션
2-1. 사용법 개요
find 명령어 사용법 보기 :
# find --help # man find (직접 입력해 보세요. 내용이 너무 많아서..) 사용법 : find [path...] [expression] 기본값 : default path는 현재 디렉토리; default expression은 -print 표현식(expression) 구성 : operators (decreasing precedence; -and is implicit where no others are given): ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2 EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2 options (always true): -daystart -depth -follow --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf --version -xdev tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N -cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME -ilname PATTERN -iname PATTERN -inum N -ipath PATTERN -iregex PATTERN -links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE -nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN -size N[bckw] -true -type [bcdpfls] -uid N -used N -user NAME -xtype [bcdpfls] actions: -exec COMMAND ; -fprint FILE -fprint0 FILE -fprintf FILE FORMAT -ok COMMAND ; -print -print0 -printf FORMAT -prune -ls
간단하게 몇가지만 알아보죠...
(자세한 사용설명은 꼭 man 페이지를 읽어보세요....한글은 없군요..T.T)
2-2. 일반적으로 표현식 옵션 구분
-a'xxxx'
'xxxx'에 대한 Access(접근)
-c'xxxx'
'xxxx'에 대한 Changes(변경), 마지막으로 Access한 경우 변경됨
-m'xxxx'
'xxxx'에 대한 Modify(수정), 파일내용 자체 수정한 경우 -i'xxxx'
'xxxx'(inum 제외)에 대한 Insensitive(대소문자 구분없이)
3-3. 자주 사용되는 표현식 옵션
N
정확하게 N과 일치
+N
N 보다 큰 경우
-N
N 보다 작은 경우
-name PATTERN
PATTERN에 일치하는 파일 찾기, 와일드카드 문자 사용가능
-iname PATTERN
PATTERN에 일치하지 않은(insensitive) 파일 찾기
-perm [+-]mode
PERMission('mode')에 해당되는 파일 찾기, ls와 결합 가능
-type [bcdpfls]
b(블럭파일), c(특정 문자), d(디렉토리), p(파이프),
f(정규표현 일반파일), l(링크), s(소켓) 유형의 파일 찾기
-size N[bckw]
파일 크기가 N 인 파일 찾기
b(블럭-기본값), c(bytes), k(kbytes), w(2바이트 단어)
-user NAME
NAME은 유저이름이거나 UID
-atime N
N*24 시간 동안에 Access 한 파일
-ctime N
N*24 시간 동안에 Changes 한 파일(내용수정이 아니고 읽기모드도 Changes됨)
-mtime N
N*24 시간 동안에 Modify 한 파일
-empty
파일이 비어 있고(0 bytes), 정규식 파일이거나 디렉토리
-newer FILE
FILE 보다 최근에 갱신된 파일
-path PATTERN
path가 PATTERN과 일치하는 path에 대해서 검색
-regex PATTERN
파일이름이 PATTERN에 일치하는 정규식에 대해서 검색
-inum N
inode N을 갖는 파일
-nouser,-nogroup
USER나 GROUP에 이름이 없는 파일 검색(UID,GID만 있는 파일)
-exec COMMAND
검색된 파일을 찾으면 COMMAND 명령을 실행한다.
COMMAND 인자(검색된 파일)는 {}으로 사용하며,
이때 COMMAND 끝은 ;(;이 아님)을 사용해야 한다. 즉 명령구분
문자인 ';'을 탈출()시켜줘야 한다.
-ok COMMAND
-exec COMMAND와 같지만 COMMAND를 실행하기 전에 확인을 요청한다.
3-4. path(find 명령어 다음의 path)
.
현재 디렉토리(기본값이므로 생략해도 됨)
`pwd`
현재 디렉토리와 결합(?) `은 ~문자가 있는 자판
$(pwd)
위의 `pwd`와 같거나 비슷함
/
최상위 루트 디렉토리에서 하위 모든 디렉토리
/home
특정 /home 디렉토리에서 하위 모든 디렉토리
/{usr,home/{aaa,san2},var}
/usr, /usr/home/aaa /usr/home/san2 /var
3-5. 표현식-연산자
( 표현식 )
'표현식'을 우선적으로 먼저 수행
(와 )앞에 를 넣어야 하며, '표현식'과 공백을 각각 둔다.
( A + B ) * ( C + D ) 와 같이 (, )안을 우선적으로 수행
! 표현식 , -not 표현식
'표현식'을 부정
표현식1 -a 표현식2, 표현식1 -and 표현식2
표현식1과 표현식2의 AND 연산
표현식1 -o 표현식2, 표현식1 -or 표현식2
표현식1과 표현식2의 OR 연산
3. 예제
3-1. 다른 명령어와 결합 형태(ls,xargs)
찾는 것 그 차체 만으로 만족(?) 할 수 도 있지만 그 결과에 대해서
어떤 행동(Actions)을 취할 필요가 있습니다.
형태1. -exec 이용시 # find ..... -exec COMMAND {} ; 형태2. xargs 명령어로 표준 입력받아 COMMAND 수행 # find ..... | xargs COMMAND 형태3. ls 명령어로 최종 결과 출력 # ls -l `find .....[COMMAND]` 또는 # find .... ls (ls는 ls -dils와 같음) xargs xargs rpm 정보보기 # rpm -qi `rpm -qf $(which xargs)` 또는 # rpm -qf `which xargs` | xargs rpm -qi
즉, find 결과에 대해서,
형태1은 -exec를 사용하여 그 인자를 {}로 사용하고,
형태2는 xargs 명령어로 find에서 넘어온 결과(표준출력)에 대해서 COMMAND를 실행하고,
형태3은 오른쪽의 find 결과물에 대해서 ls 명령어를 실행합니다.
간혹 '/bin/ls Argument list too long'이라는 에러를 낸 경우도 있습니다.
이는 검색조건에 너무 많은 와일드카드 문자로 찾을 경우에 그렇습니다.
이를 테면 /*/*/*.*/.*,
`은 ~문자가 있는 자판(역인용부호).
ls -l 명령어를 사용할 경우, 찾는 결과가 없다면 모두 출력됩니다. (ls -l와 같기 때문에)
ls 명령어와 마찬가지로 다른 명령어(chmod, chmod)를 결합하여 사용할 경우 그 찾는 결과가 없다면 명령어에 대한 에러를 내겠죠.
(chmod 'null')과 같은 예..........
# find /{home,usr/{src,local/src}} -nouser -o -nogroup -exec ls -l {} ; -print | more # find /{home,usr/{src,local/src}} -nouser -o -nogroup -print | xargs ls -l | more
위의 2개의 명령어 대해서 직접 테스트 해보세요...
전자의 경우, 아마 아무것도 출력되지 않을 겁니다.
# find /{home,usr/{src,local/src}} ( -nouser -o -nogroup ) -exec ls -l {} ; -print | more
위와 같이 해야 맞겠죠...(우선순위)
후자의 경우도 마찬가지로 다음과 같이 우선순위를 정해놓아야 겠지요.. 아마 원하는 출력이 이 경우일 것 같군요.
# find /{home,usr/{src,local/src}} ( -nouser -o -nogroup ) -print | xargs ls -l | more
3-2. 퍼미션 관련 예제
othesrs에 쓰기(w:2) 권한이 있는 모든(-기호를 붙임) 파일 리스트를 찾을려면?
# find `pwd` -perm -2 -print | xargs ls -l
여기에서 2는 퍼미션이 -------w- 와 일치하는 파일이며 -의 의미는 rwx-중 하나.
왜 2인가요?
만약 퍼미션이 755 이라면,
700 : rwx------ : user 50 : ---r-x--- : group 5 : ------r-x : others ------------------------ 755 : rwxr-xr-x : others는 읽기와 실행 권한
따라서 others의 권한은 8진수로 5(r+x)이다.
그렇다면, others가 쓰기(w:2) 권한은 당연히 -------w-
그룹이나 others에게 쓰기 권한이 있는 파일일 경우
-perm -20 -o -perm -2
그룹과 others에게 모두 쓰기 권한이 있는 파일일 경우
-perm -22
[others에게 w 권한이 있는 파일에 w 권한 없애기]
방법1)
1. others에게 w 권한이 있는 파일 리스트 출력
# find `pwd` -perm -2 -print | xargs ls -l | more
(만약 매치되는 리스트가 없다면 전부 출력함)
2. others에게 w 권한을 없애기
# find `pwd` -perm -2 -print | xargs chmod o-w
(만약 매치되는 리스트가 없다면 chmod에 에러를 냄)
방법2) 방법1)의 과정을 한꺼번에 할 경우
# find `pwd` -perm -2 -exec chmod o-w {} ; -print | xargs ls -l 또는 # ls -l `find $(pwd) -perm -2 -print | xargs chmod o-rwx` | more
이 경우는 퍼미션이 조정된 결과를 출력함.
3-3. 유저와 관련된 예제
UID와 GID에 대한 유저가 없는 파일을 root.root로 바꾸어 보죠.
1) 먼저 리스트를 출력해 보자.(확인해야하니깐)
# find . ( -nouser -o -nogroup ) -print | xargs ls -l | more
2) 확인했으면, chown root.root 명령을 내리자.
# find . ( -nouser -o -nogroup ) -print | xargs chown root.root | more 또는 # find . ( -nouser -o -nogroup ) -exec chown root.root {} ; -print | xargs ls -l
(chown root.root 의 결과를 ls -l)
3-4. 유용한 팁
*주의) ***********************************************
-a'xxxx'
'xxxx'에 대한 Access(접근), 읽기
-c'xxxx'
'xxxx'에 대한 Changes(변경), 마지막으로 Access한 경우에도 변경됨
-m'xxxx'
'xxxx'에 대한 Modify(수정), 파일내용 자체 수정한 경우
*****************************************************
- 최근 하루(1) 동안(-)에 변경(change)된 파일을 찾을려면(-ctime)?
# find / -ctime -1 -a -type f | xargs ls -l | more
- 오래된 파일을 찾을려면(30일 이상 수정(modify))되지 않은)?
# find / -mtime +30 -print | more
- 최근 30일(30) 안에(-) 접근(access)하지 않은 파일과 디렉토리를 리스트로 만들려면(-atime)?
# find / ! ( -atime -30 -a ( -type d -o -type f ) ) | xargs ls -l > not_access.list
- 자신의 홈디렉토리에서 만 검색하려면?
# find $HOM ... 또는 # find ~root ...
- 서브 디렉토리로 내려가지 않고 현재 디렉토리에서만 검색하려면?
# find . -prune ...
- 특정 유저(foobar) 소유의 파일을 찾을려면?
# find / -user foobar -print | more
- 퍼미션이 777인 파일을 찾을려면 ?
# find / -perm 777 -print | xargs ls -l | more
- others에게 쓰기 권한이 있는 파일을 찾을려면?
# find / -perm -2 -print | xargs ls -l | more
- others에게 쓰기 권한이 있는 파일을 찾아 쓰기 권한을 없애려면?
# find / -perm -2 -print | xargs chmod o-w 또는 # find / -perm -2 -exec chmod o-w {} ; -print | xargs ls -l | more
- 유저이름과 그룹이름이 없는 파일을 찾을려면?
# find / ( -nouser -o -nogroup ) -print | more
- 빈 파일을 찾을려면?
# find / -empty -print | more 또는 # find / -size 0 -print | more
- 파일크기가 100M 이상된 파일을 찾을려면?
# find / -size +102400k -print | xargs ls -hl
- *.bak 파일을 찾아 지울려면?
# find / -name "*.bak" -exec rm -rf {} ;
- *.bak 파일을 찾아 특정 디렉토리로 옮길려면?
# mv `find . -name "*.bak"` /home/bak/
- 디렉토리 만 찾을려면?
# find . -type d ...
- root권한으로 실행되는 파일을 찾을려면?
# find / ( -user root -a -perm +4000 ) -print | xargs ls -l | more
- 다른 파일시스템을 검색하지 않을려면?
# find / -xdev ...
- 파일이름에 공백이 들어간 파일을 찾을려면?
# find / -name "* *" -print
- 숨겨진(hidden) 파일을 찾을려면?
# find / -name ".*" -print | more
- 같은 이름을 가진 디렉토리를 찾을려면?
# find / -type d -print | awk -F/ '{printf("%st% sn",$NF,$0);}' | sort| more
*주)'O'Reilly Unix Power Tools' 참고
- 잘못된 링크를 찾을려면?
# find . -type l -print | perl -nle '-e || print' | xargs ls -l
*주)'O'Reilly Unix Power Tools' 참고
원본 : http://www.linuxchannel.net/docs/find-xargs-ls.txt
작성자 : 김칠봉 <san2 at linuxchannel.net>
작성일 : 2001.03.12
목차
1. 가장 일반적인 find 명령어
2. find 명령어 일반적인 옵션
2-1. 사용법 개요
2-2. 일반적으로 표현식 옵션 구분
3-3. 자주 사용되는 표현식 옵션
3-4. path(find 명령어 다음의 path)
3-5. 표현식-연산자
3. 예제
3-1. 다른 명령어와 결합형태(ls,xargs)
3-2. 퍼미션 관련 예제
3-3. 유저와 관련된 예제
3-4. 팁
- 최근 하루(1) 동안(-)에 변경(change)된 파일을 찾을려면(-ctime)?
- 오래된 파일을 찾을려면(30일 이상 수정(modify))되지 않은)?
- 최근 30일(30) 안에(-) 접근(access)하지 않은 파일과 디렉토리를 리스트
로 만들려면(-atime)?
- 자신의 홈디렉토리에서 만 검색하려면?
- 서브 디렉토리로 내려가지 않고 현재 디렉토리에서만 검색하려면?
- 특정 유저(foobar) 소유의 파일을 찾을려면?
- 퍼미션이 777인 파일을 찾을려면 ?
- others에게 쓰기 권한이 있는 파일을 찾을려면?
- others에게 쓰기 권한이 있는 파일을 찾아 쓰기 권한을 없애려면?
- 유저이름과 그룹이름이 없는 파일을 찾을려면?
- 빈 파일을 찾을려면?
- 파일크기가 100M 이상된 파일을 찾을려면?
- *.bak 파일을 찾아 지울려면?
- *.bak 파일을 찾아 특정 디렉토리로 옮길려면?
- 디렉토리 만 찾을려면?
- root권한으로 실행되는 파일을 찾을려면?
- 다른 파일시스템을 검색하지 않을려면?
- 파일이름에 공백이 들어간 파일을 찾을려면?
- 숨겨진(hidden) 파일을 찾을려면?
- 같은 이름을 가진 디렉토리를 찾을려면?
- 잘못된 링크를 찾을려면?
4. find 명령어에 대해서 좀더 알아보려면?
------------------------------------------------------------
1. 가장 일반적인 find 명령어
# find /path -name "foobar" -print
제일 먼저(?) 배우는 형식이 아닌가 쉽군요.
2. find 명령어 일반적인 옵션
2-1. 사용법 개요
find 명령어 사용법 보기 :
# find --help # man find (직접 입력해 보세요. 내용이 너무 많아서..) 사용법 : find [path...] [expression] 기본값 : default path는 현재 디렉토리; default expression은 -print 표현식(expression) 구성 : operators (decreasing precedence; -and is implicit where no others are given): ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2 EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2 options (always true): -daystart -depth -follow --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf --version -xdev tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N -cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME -ilname PATTERN -iname PATTERN -inum N -ipath PATTERN -iregex PATTERN -links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE -nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN -size N[bckw] -true -type [bcdpfls] -uid N -used N -user NAME -xtype [bcdpfls] actions: -exec COMMAND ; -fprint FILE -fprint0 FILE -fprintf FILE FORMAT -ok COMMAND ; -print -print0 -printf FORMAT -prune -ls
간단하게 몇가지만 알아보죠...
(자세한 사용설명은 꼭 man 페이지를 읽어보세요....한글은 없군요..T.T)
2-2. 일반적으로 표현식 옵션 구분
-a'xxxx'
'xxxx'에 대한 Access(접근)
-c'xxxx'
'xxxx'에 대한 Changes(변경), 마지막으로 Access한 경우 변경됨
-m'xxxx'
'xxxx'에 대한 Modify(수정), 파일내용 자체 수정한 경우 -i'xxxx'
'xxxx'(inum 제외)에 대한 Insensitive(대소문자 구분없이)
3-3. 자주 사용되는 표현식 옵션
N
정확하게 N과 일치
+N
N 보다 큰 경우
-N
N 보다 작은 경우
-name PATTERN
PATTERN에 일치하는 파일 찾기, 와일드카드 문자 사용가능
-iname PATTERN
PATTERN에 일치하지 않은(insensitive) 파일 찾기
-perm [+-]mode
PERMission('mode')에 해당되는 파일 찾기, ls와 결합 가능
-type [bcdpfls]
b(블럭파일), c(특정 문자), d(디렉토리), p(파이프),
f(정규표현 일반파일), l(링크), s(소켓) 유형의 파일 찾기
-size N[bckw]
파일 크기가 N 인 파일 찾기
b(블럭-기본값), c(bytes), k(kbytes), w(2바이트 단어)
-user NAME
NAME은 유저이름이거나 UID
-atime N
N*24 시간 동안에 Access 한 파일
-ctime N
N*24 시간 동안에 Changes 한 파일(내용수정이 아니고 읽기모드도 Changes됨)
-mtime N
N*24 시간 동안에 Modify 한 파일
-empty
파일이 비어 있고(0 bytes), 정규식 파일이거나 디렉토리
-newer FILE
FILE 보다 최근에 갱신된 파일
-path PATTERN
path가 PATTERN과 일치하는 path에 대해서 검색
-regex PATTERN
파일이름이 PATTERN에 일치하는 정규식에 대해서 검색
-inum N
inode N을 갖는 파일
-nouser,-nogroup
USER나 GROUP에 이름이 없는 파일 검색(UID,GID만 있는 파일)
-exec COMMAND
검색된 파일을 찾으면 COMMAND 명령을 실행한다.
COMMAND 인자(검색된 파일)는 {}으로 사용하며,
이때 COMMAND 끝은 ;(;이 아님)을 사용해야 한다. 즉 명령구분
문자인 ';'을 탈출()시켜줘야 한다.
-ok COMMAND
-exec COMMAND와 같지만 COMMAND를 실행하기 전에 확인을 요청한다.
3-4. path(find 명령어 다음의 path)
.
현재 디렉토리(기본값이므로 생략해도 됨)
`pwd`
현재 디렉토리와 결합(?) `은 ~문자가 있는 자판
$(pwd)
위의 `pwd`와 같거나 비슷함
/
최상위 루트 디렉토리에서 하위 모든 디렉토리
/home
특정 /home 디렉토리에서 하위 모든 디렉토리
/{usr,home/{aaa,san2},var}
/usr, /usr/home/aaa /usr/home/san2 /var
3-5. 표현식-연산자
( 표현식 )
'표현식'을 우선적으로 먼저 수행
(와 )앞에 를 넣어야 하며, '표현식'과 공백을 각각 둔다.
( A + B ) * ( C + D ) 와 같이 (, )안을 우선적으로 수행
! 표현식 , -not 표현식
'표현식'을 부정
표현식1 -a 표현식2, 표현식1 -and 표현식2
표현식1과 표현식2의 AND 연산
표현식1 -o 표현식2, 표현식1 -or 표현식2
표현식1과 표현식2의 OR 연산
3. 예제
3-1. 다른 명령어와 결합 형태(ls,xargs)
찾는 것 그 차체 만으로 만족(?) 할 수 도 있지만 그 결과에 대해서
어떤 행동(Actions)을 취할 필요가 있습니다.
형태1. -exec 이용시 # find ..... -exec COMMAND {} ; 형태2. xargs 명령어로 표준 입력받아 COMMAND 수행 # find ..... | xargs COMMAND 형태3. ls 명령어로 최종 결과 출력 # ls -l `find .....[COMMAND]` 또는 # find .... ls (ls는 ls -dils와 같음) xargs xargs rpm 정보보기 # rpm -qi `rpm -qf $(which xargs)` 또는 # rpm -qf `which xargs` | xargs rpm -qi
즉, find 결과에 대해서,
형태1은 -exec를 사용하여 그 인자를 {}로 사용하고,
형태2는 xargs 명령어로 find에서 넘어온 결과(표준출력)에 대해서 COMMAND를 실행하고,
형태3은 오른쪽의 find 결과물에 대해서 ls 명령어를 실행합니다.
간혹 '/bin/ls Argument list too long'이라는 에러를 낸 경우도 있습니다.
이는 검색조건에 너무 많은 와일드카드 문자로 찾을 경우에 그렇습니다.
이를 테면 /*/*/*.*/.*,
`은 ~문자가 있는 자판(역인용부호).
ls -l 명령어를 사용할 경우, 찾는 결과가 없다면 모두 출력됩니다. (ls -l와 같기 때문에)
ls 명령어와 마찬가지로 다른 명령어(chmod, chmod)를 결합하여 사용할 경우 그 찾는 결과가 없다면 명령어에 대한 에러를 내겠죠.
(chmod 'null')과 같은 예..........
# find /{home,usr/{src,local/src}} -nouser -o -nogroup -exec ls -l {} ; -print | more # find /{home,usr/{src,local/src}} -nouser -o -nogroup -print | xargs ls -l | more
위의 2개의 명령어 대해서 직접 테스트 해보세요...
전자의 경우, 아마 아무것도 출력되지 않을 겁니다.
# find /{home,usr/{src,local/src}} ( -nouser -o -nogroup ) -exec ls -l {} ; -print | more
위와 같이 해야 맞겠죠...(우선순위)
후자의 경우도 마찬가지로 다음과 같이 우선순위를 정해놓아야 겠지요.. 아마 원하는 출력이 이 경우일 것 같군요.
# find /{home,usr/{src,local/src}} ( -nouser -o -nogroup ) -print | xargs ls -l | more
3-2. 퍼미션 관련 예제
othesrs에 쓰기(w:2) 권한이 있는 모든(-기호를 붙임) 파일 리스트를 찾을려면?
# find `pwd` -perm -2 -print | xargs ls -l
여기에서 2는 퍼미션이 -------w- 와 일치하는 파일이며 -의 의미는 rwx-중 하나.
왜 2인가요?
만약 퍼미션이 755 이라면,
700 : rwx------ : user 50 : ---r-x--- : group 5 : ------r-x : others ------------------------ 755 : rwxr-xr-x : others는 읽기와 실행 권한
따라서 others의 권한은 8진수로 5(r+x)이다.
그렇다면, others가 쓰기(w:2) 권한은 당연히 -------w-
그룹이나 others에게 쓰기 권한이 있는 파일일 경우
-perm -20 -o -perm -2
그룹과 others에게 모두 쓰기 권한이 있는 파일일 경우
-perm -22
[others에게 w 권한이 있는 파일에 w 권한 없애기]
방법1)
1. others에게 w 권한이 있는 파일 리스트 출력
# find `pwd` -perm -2 -print | xargs ls -l | more
(만약 매치되는 리스트가 없다면 전부 출력함)
2. others에게 w 권한을 없애기
# find `pwd` -perm -2 -print | xargs chmod o-w
(만약 매치되는 리스트가 없다면 chmod에 에러를 냄)
방법2) 방법1)의 과정을 한꺼번에 할 경우
# find `pwd` -perm -2 -exec chmod o-w {} ; -print | xargs ls -l 또는 # ls -l `find $(pwd) -perm -2 -print | xargs chmod o-rwx` | more
이 경우는 퍼미션이 조정된 결과를 출력함.
3-3. 유저와 관련된 예제
UID와 GID에 대한 유저가 없는 파일을 root.root로 바꾸어 보죠.
1) 먼저 리스트를 출력해 보자.(확인해야하니깐)
# find . ( -nouser -o -nogroup ) -print | xargs ls -l | more
2) 확인했으면, chown root.root 명령을 내리자.
# find . ( -nouser -o -nogroup ) -print | xargs chown root.root | more 또는 # find . ( -nouser -o -nogroup ) -exec chown root.root {} ; -print | xargs ls -l
(chown root.root 의 결과를 ls -l)
3-4. 유용한 팁
*주의) ***********************************************
-a'xxxx'
'xxxx'에 대한 Access(접근), 읽기
-c'xxxx'
'xxxx'에 대한 Changes(변경), 마지막으로 Access한 경우에도 변경됨
-m'xxxx'
'xxxx'에 대한 Modify(수정), 파일내용 자체 수정한 경우
*****************************************************
- 최근 하루(1) 동안(-)에 변경(change)된 파일을 찾을려면(-ctime)?
# find / -ctime -1 -a -type f | xargs ls -l | more
- 오래된 파일을 찾을려면(30일 이상 수정(modify))되지 않은)?
# find / -mtime +30 -print | more
- 최근 30일(30) 안에(-) 접근(access)하지 않은 파일과 디렉토리를 리스트로 만들려면(-atime)?
# find / ! ( -atime -30 -a ( -type d -o -type f ) ) | xargs ls -l > not_access.list
- 자신의 홈디렉토리에서 만 검색하려면?
# find $HOM ... 또는 # find ~root ...
- 서브 디렉토리로 내려가지 않고 현재 디렉토리에서만 검색하려면?
# find . -prune ...
- 특정 유저(foobar) 소유의 파일을 찾을려면?
# find / -user foobar -print | more
- 퍼미션이 777인 파일을 찾을려면 ?
# find / -perm 777 -print | xargs ls -l | more
- others에게 쓰기 권한이 있는 파일을 찾을려면?
# find / -perm -2 -print | xargs ls -l | more
- others에게 쓰기 권한이 있는 파일을 찾아 쓰기 권한을 없애려면?
# find / -perm -2 -print | xargs chmod o-w 또는 # find / -perm -2 -exec chmod o-w {} ; -print | xargs ls -l | more
- 유저이름과 그룹이름이 없는 파일을 찾을려면?
# find / ( -nouser -o -nogroup ) -print | more
- 빈 파일을 찾을려면?
# find / -empty -print | more 또는 # find / -size 0 -print | more
- 파일크기가 100M 이상된 파일을 찾을려면?
# find / -size +102400k -print | xargs ls -hl
- *.bak 파일을 찾아 지울려면?
# find / -name "*.bak" -exec rm -rf {} ;
- *.bak 파일을 찾아 특정 디렉토리로 옮길려면?
# mv `find . -name "*.bak"` /home/bak/
- 디렉토리 만 찾을려면?
# find . -type d ...
- root권한으로 실행되는 파일을 찾을려면?
# find / ( -user root -a -perm +4000 ) -print | xargs ls -l | more
- 다른 파일시스템을 검색하지 않을려면?
# find / -xdev ...
- 파일이름에 공백이 들어간 파일을 찾을려면?
# find / -name "* *" -print
- 숨겨진(hidden) 파일을 찾을려면?
# find / -name ".*" -print | more
- 같은 이름을 가진 디렉토리를 찾을려면?
# find / -type d -print | awk -F/ '{printf("%st% sn",$NF,$0);}' | sort| more
*주)'O'Reilly Unix Power Tools' 참고
- 잘못된 링크를 찾을려면?
# find . -type l -print | perl -nle '-e || print' | xargs ls -l
*주)'O'Reilly Unix Power Tools' 참고
관련링크
댓글목록
등록된 댓글이 없습니다.