[Info]Tags categorized posts and contents patterns..

[AJAX] Ajax Code E xamples.. [Book] About the book.. [CSS] CSS Code E xamples.. [DB] Sql Code E xamples.. [DEV] All development stor...

2016년 4월 7일 목요일

[Linux]find 활용한 명령어들..

뜻하지 않게 검색해서 파일 권한 바꾸기 포스팅과 chmod 권한 정의 포스팅에 이은 약간 3탄격의 포스팅이 되었다.. 이번에는 find 활용한 명령어들의 예를 조금 더 검색해봤다..

내가 처음 소개한 find 명령어[find . -exec chmod 777 {} \;]는 내가 주로 쓰는 것을 소개하는 개념이었다.. 아래 내용은 김영성 님의 블로그를 참고했다.. 다만, 내 스타일대로 내 입맛대로 편집을 좀 했다..

난 처음 조건 뒤에 붙는 것이 -exec 만 있는줄 알았다.. 이거야 머 모르는게 죄다..ㅠ 그런데 두 개가 더 있었다.. 찾아보면 물론 다른게 더 있을지도 모르지만, 과거 언급한것처럼 리눅스 전문가도 아니고, 내가 쓰지 않고 있어서 그 이상의 언급을 하기에는 좀 무리가 있다.. 그럼 알게 된 부분에 대해서 확인해보자..


  • -exec 명령 : 주어진 명령을 수행한다.. 가장 흔히 쓰이는 행동들 중 하나이며, 끝에 \;를 붙인다..
  • -ok 명령 : -exec와 같지만, 각 파일마다 명령을 수행하기 전에 사용자에게 확인을 받는다.. 이것도 끝에 \;를 붙인다..
  • -print : 파일 이름을 출력한다..


find 조건 뒤에 붙는 명령이다.. 다른 사람도 그런지 모르겠지만, 난 솔직히 설명을 길게 하는 것보단 간단한 예제를 보고 이해하거나 직접 실행해서 어떠한 결과가 나오는지를 통해서 이해를 많이 하는 편이다.. 그래서 간단한 설명과 예제를 올린다..


  • root 디렉토리에서 *.jpg 를 찾아 현재 디렉토리에 복사하기..

     find . -type f -name *.jpg -exec cp {} . \;


  • 현재 디렉토리에서 10MB 이상의 파일을 찾아서 출력하기..

     find . -type f -size +10000 -exec ls -alh {} \;


  • 현재 디렉토리에서 하루 이상 경과한 파일을 imsi 디렉토리로 이동 시키기..

     find . -atime +1 -type f -exec mv {} imsi\;


  • "-F"라는 파일을 찾아 삭제하기..

     find . -name "-F" -exec rm {} \;


  • 현재 디렉토리에서 대소문자에 상관없이 "찾는 문자열" 을 포함한 라인 출력하기..

     find . -exec grep -i "찾는 문자열" {} \;


  • 현재 디렉토리에서 *.Z 화일을 제외한 나머지 파일들을 *.Z으로 압축하기..

     find . \! -name "*.Z" -exec compress -f {} \;


  • 현재 디렉토리에서 *.Z 파일을 제외하고, 또한 "제외할 파일명" 이외 파일들을 터미널로 출력과 동시에 /tmp/list 에 추가하기..

     find . -type f \! -name "*.Z" \! -name
     "제외할 파일명" -print | tee -a /tmp/list


  • 현재 디렉토리에서 이름이 *.ini인 파일을 출력하기..

     find . -name "*.ini"


  • 현재 디렉토리 이하 서브 디렉토리를 포함한 모든 파일들에 대해 퍼미션 755로 변경하기..

     find . -exec chmod 755 {} \;
     find . -exec chmod -R 755 ./ ;


  • 현재 디렉토리에서 user1 소유자로 표시된 파일들을 모두 user2의 사용자 권한으로 변경하기..

     find . -user xuser1 -exec chown -R user2 {} \;
     find . -user xuser1 -exec chown -R user2 ./


  • 현재 디렉토리에서 "찾을 xxx넘"을 대소문자 구별없이 검색하여 출력하기..

     find . -exec grep -i "찾을 xxx넘" {} \;
     find . -grep -i "찾을 xxx넘" {} \;
     find . -ls -exec grep "찾을 xxx넘" {} \;


  • 6일 이전의 파일들을 찾아 출력하기..

     find . -atime +6


  • 30일 이전 업데이트 된 파일들의 라인수를 알아보기..

     find . -atime +30 -exec ls \; | wc -l


  • /raid 디렉토리에서 "디렉토리명"을 가진 파일이 존재하면, / 복사할 경로 로 복사 하기..

     find /raid -type d -name "디렉토리명"
     -ok cp /복사할경로 {} \;


  • "찾을 파일" 검색도중 에러 및 경고 메시지는 표시하지 않게 하기..

     find . -name "찾을 파일" -print 2> /dev/null


  • 대소문자 구분없이 "찾는글"을 포함된 파일에 대한 내용을 출력하지 않고, "찾는넘.list" 파일에 저장 및 more를 통해 검토하기..

     find . -print -exec grep -i "찾는글" {} \; > 찾는넘.list
     find . -print -exec grep -i xeroxrel {} \; | more


  • 파일 권한이 700인 파일을 찾기..

     find . -perm 700 -print


  • 파일 권한이 400인 파일과 200인 파일을 기.. [주의 : "\"의 앞뒤에 space 가 반드시 있어야 한다..]

     find . \ ( -perm 400 -o -perm 200 ) -print


  • 파일의 블럭 크기가 1024 이상인 파일을 찾기..

     find . -size +1024 -print 


  • 파일 이름이 core이고, 크기가 2048블럭 이상인 파일을 찾기..

     find . -name core -size +2048 -print 


  • 30일 이전에 액세스되었던 파일을 찾기..

     find . -atime +30 -print 


  • 7일 이내에 수정된 적이 있는 파일을 찾기..

     find . -mtime -7 -print 


  • 30일 이전에 액세스된 파일 중 *.c를 찾아 ls -l 하기..

     find . -name \*.c -atime +30 -exec ls -l {} \; 


  • 현재 디렉토리에서 이름이 core인 파일을 찾아 지우기.. [지우기 전에 정말 지울지 물어본다..]

     find . -name core -exec rm -i {} \; 


  • 마운트된 디렉토리들은 검색하지 말라고 알려주는 효과주기..

     find / -mount -name test -print


  • 현재 위치의 df.sh 파일보다 최근에 만들어진 파일형식을 출력하기..

     find -newer df.sh -type f -print


  • 현재 위치에서 df.sh 파일보다 최근에 만들어진 모든 것을 출력하기..

     find -newer df.sh -print


  • 현재 위치에서 set.sh 파일보다 최근에 만들어진 모든 파일들은 모두 출력하기..

     find . -newer set.sh -type f -exec ls -l {} \;

이상이다.. 내가 검색을 하고, 내용을 옮겨오면서도 느낀것이 이 명령어들을 리눅스 전문가들은 어지간한건 외워서 할 것 아닌가.. 흐미.. 그나마 내 분야가 편하지 남들의 분야는 정말 어려운듯하다.. 또한, 내가 과연 위 명령어들 또는 추가적으로 검색을 해서 명령어를 얼마나 사용하려나.. ㅎㅎㅎ.. 만약 검색하다가 올리지 않은 명령어를 사용하게 된다면, 또 포스팅 하리라..


[Linux]chmod 권한변경에 따른 권한 정의..

몇 일전 Linux 검색을 통한 파일권한 바꾸기 내용으로 포스팅을 했었다.. 포스팅 말미에 777 권한에 대한 부분과 find 를 활용한 디테일한 명령어를 재 포스팅하고자 했었는데 그 중 하나로 오늘은 chmod 777 처럼 권한부여에 대한 부분을 포스팅하려고 한다..

무작정 내가 아는 것으로만 하면, 잘못된 정보를 전파하거나 나 스스로 잘못된 정보를 알고서 넘어갈 우려가 있기에 역시나 검색을 좀 해봤는데 누에고치의 누리집 블로그에 참고하기 좋을만한 포스팅이 있었다.. 단, 해당 포스팅에는 chmod 에 대한 간단한 내용만 있기에 옵션 내지는 좀 더 상세한 부분은 스스로 검색을 더 해야 된다..

chmod 명령어의 기본적인 패턴을 보자면, 내가 제일 많이 쓰는 권한인데 아래와 같다..

chmod 777 redpigdevs.java

즉, chmod [권한] [파일명] 패턴이다.. 앞에 명령어 chmod 는 상태를(Mode) 바꿔주는(Change) 명령어의 줄임말이라고 한다.. 이번에 처음 알았다능..;;; 성격상 어원을 찾거나 히스토리를 알아보고 하는 편이 아니다보니.. ㅎㅎㅎ..

권한은 세 가지의 권한이 있다.. 쓰기, 읽기, 실행
해당 권한은 방문자, 관리자, 사용자로 나누어진다.. 

그렇다면, 위의 chmod 777 redpigdevs.java 에서 권한 777은 방문자, 관리자, 사용자에게 해당 파일에 대해서 모든 권한을 주겠다는 것이다..

권한 숫자에 대한 패턴의 정의는 아래와 같다..

0 - 권한 없음
1 - 실행만
2 - 쓰기만
3 - 쓰기 실행
4 - 읽기만
5 - 읽기 실행
6 - 읽기 쓰기
7 - 모든 권한

여기서 숫자의 첫번째는 사용자, 두번째는 그룹, 세번째는 관리자 이다..

물론 이전 포스팅에서 언급하것처럼 File Zilla 를 통해서 하면 훨씬 간단하긴 하다.. 권한을 바꾸고자 하는 파일에서 우클릭을 해서 파일권한 메뉴를 들어가면, 소유자 권한에 대한 읽기, 쓰기, 실행 그리고 그룹 권한에 대한 읽기, 쓰기, 실행 마지막으로 공개 권한에 대한 읽기, 쓰기, 실행 을 한방에 설정할 수 있으니까..

나부터도 옛날 같으면, 걍 편한 Tool 을 이용했을테지만, 심경에 작은 변화가 생긴 이후로는 Tool 을 사용하더라도 아날로그식으로 직접 타이핑하고 하는 부분도 꼭 인지를 하려고 노력한다..