쉘 스크립트 - 4

2021. 7. 19. 19:16

find
 - 사용자가 지정한 기준에 따라 시스템 디렉터리 트리를 검색하여 파일을 찾는 명령어
 - 사용법: find 옵션 검색경로 표현식
  -> find는 사용자가 필요하는 조건으로 옵션이 아닌 표현식으로 제공한다.
     표현식의 종류: 테스트, 연산자, 액션, 옵션

 - 표현식_테스트
    시간: 현재시각을 기준으로 검색(하지만 해당 분, 해당 일에만 검색한다. 입력조건시간~현재이나 과거~입력조건시간과 같이 기간을 검색하지 못하는 것 같다)
      -amin, -atime, -cmin, -ctime, -mmin, -mtime
    최신파일 검색: 명시한 파일을 기준으로 보다 최근에 접근/수정/변경을 수행한 파일을 검색
      -anewer : 명시한 파일보다 최근 접근한 파일검색
      -cnewer : 명시한 파일보다 최근 변경한 파일검색
      -newer : 명시한 파일보다 최근 수정한 파일검색
      -newer옵션 : 옵션을 기준으로 명시한 파일보다 최근 수정한 파일검색(옵션: a: 엑세스 시간, c: inode 상태변경시간, m: 수정시간)
                   -> inode는 stat 파일명령으로 검색가능

    ** 변경과 수정의 차이
        - 내용변동이 일어날 경우(파일 내용 수정, 파일 복사 등): 파일 변경과 파일 수정이 일어남
        - 파일명만 변경할 경우: 파일 변경만 일어남
    파일 권한: 검색 경로에서 파일권을 만족하는 파일 검색
      -perm mode : 명기한 권한(mode)과 동일한 파일 검색
      -perm -mode : 명기한 권한(mode)을 포함한 파일 검색
      -perm /mode : 명기한 권한(mode)을 개별 그룹(소유자, 그룹, 기타)중 한개라도 권한이 일치하는 파일 검색
      -readable : 명령어를 입력하는 사용자가 읽을 수 있는 파일 검색
      -writable : 명령어를 입력하는 사용자가 수정할 수 있는 파일 검색
      -executable : 명령어를 입력하는 사용자가 실행할 수 있는 파일 검색
    그룹 및 사용자: 그룹ID, 그룹명, 사용자 ID, 사용자명을 기준으로 검색(그룹ID, 사용자ID는 숫자 값을 가진다)
      -gid : 그룹ID가 동일한 파일 검색
      -group : 그룹명과 동일한 파일 검색
      -nogroup : 시스템에 존재하지 않는 그룹ID를 가지고 있는 파일 검색
      -uid : 사용자 ID가 동일한 파일 검색
      -user : 사용자명과 동일한 파일 검색
      -nouser : 시스템에 존재하지 않는 사용자ID를 가지고 있는 파일 검색


    파일명: 파일의 이름을 패턴으로 검색
      -name : 패턴과 일치하는 파일 검색
      -lname : 패턴과 일치하는 심볼릭 링크 검색
      -iname : 대소문자 구분없이 패턴과 일치하는 파일 검색
      -inum : 입력한 Inode와 동일한 Inode를 가지는 파일 검색
      -iregex : 대소문자 구분없이 패턴과 일치하는 경로 검색
      -samefile : 지정한 파일의 Inode와 동일한 Inode를 가지는 파일과 심볼릭 링크 검색(심볼릭 링크도 검색하려면 L옵션 필요)
    파일경로: 입력한 패턴을 만족하는 경로가 존재하는 파일들을 검색(단, 파일도 경로이기 때문에 패턴이 파일명과 일치해도 검색결과로 나온다)
      -path : 패턴과 일치하는 경로 검색
      -ipath : 대소문자를 부분하지 않고 패턴을 만족하는 경로 검색


    파일타입 : 파일 타입을 기준으로 검색한다
      -type : 파일타입과 동일한 파일을 검색
             ex) b:블록, c:문자, d:디렉터리, p:파이프, f:일반파일, l:심볼릭링크, s:소켓
    기타
      -empty : 파일크기가 0인 파일을 검색
      -used : '입력한 숫자'일 안에 access한 파일 검색

 - 표현식_연산자
     ( 식 ) : 표현식을 묶을때 사용(단 특수문자이기 때문에 \를 붙여야함, ex: \( 식 \) )
     !식 : 식의 반대결과를 출력(= -not 식)
     식1 식2 : and 연산 수행(= 식1 -a 식2)
     식1 -o 식2 : or 연산 수행
     식1, 식2 : 식을 순차적으로 수행하며, 출력되는 결과는 식2만 출력됨(둘 다 출력하려면 -printf 혹은 -fprintf 옵션필요)

     

 - 표현식_액션
     테스트와 같은 표현식을 통해 검색된 파일을 인자로 실행/출력하는 명령어
      -delete : 표현식에 의해 검색되는 파일을 삭제
      -exec 명령어 {}; : 표현식에 의해 검색되는 결과를 인수로 받아 -exec 다음 명령어를 실행함. 이때 인수로 받은 검색결과는 {}로 표현하며, ;앞에 \를 붙여 사용해야한다.
                         ex) find . 'aa.txt' -exec grep aa {} \;
      -exedir 명령어 {}; : -exec와 유사한 명령어이나, 서브디렉터리부터 검색하여, 결과값이 파일명만 출력된다
      -ok 명령어 {}; : -exec와 유사한 명령어이나, 실행 전 사용자에게 질의하여 실행함
      -prune : 검색한 패턴이 디렉터리일 경우, 하위 디렉터리의 파일은 검색하지 않음
     결과 출력 관련 액션
      -ls : 표현식 결과를 ls -l 을 실행한 결과와 유사한 형식으로 출력
             ex) find . -name "a*" -ls

 - 표현식_위치옵션
      -maxdepth : 명시한 level의 디렉터리 레벨까지 파일을 검색, 현재 경로는 1이고, 2명 현재결로 하위경로를 의미
                   ex) find . -maxdepth 1 -name "a*"
      -mindepth : 명시한 level의 디렉터리 레벨부터 파일을 검색
      -mount : 마운트된 저장장치를 검색대상에서 제외(ex: USB, CD-ROM)
      -version : 명령어의 버전을 보여줌
      -help : 명령어의 사용법을 보여줌
 - 옵션
    심볼릭 링크
      -P : 기본 옵션, 검색하는 파일이 심볼릭링크일때 심볼릭링크가 가리키는 대상의 파일을 검색
      -L : 검색하는 파일이 심볼릭링크일때 심볼릭링크가 가리키는 대상이 아닌 심볼릭 링크 자체를 대상으로 검색
           (검색대상 출력 시, 심볼릭 링크의 타겟이 아닌 심볼릭링크를 검색결과로 출력한다)

    디버그: find 명령어가 정상적으로 수행하지 못하는 이유를 분석할 수 있는 디버그 옵션
      -D help : 디버그 옵션에 대한 도움말
      -D tree : 검색을 위한 표현식 트리를 실행하기 전 원래의 최적화된 형태의 식으로 보여줌
      -D search : 디렉터리 트리를 자세하게 탐색, 어떠한 과정으로 파일이 검색되는지 확인 가능
      -D stat : stat나 lsstat같은 system call이 이루어지는(필요한) 파일을 검사할 때 메세지를 보여줌
      -D rates : 표현식이 얼마나 성공했는지 요약해서 보여준다
      -D opt : 표현식의 최적화와 관련된 정보를 보여줌. 아래의 레벨옵션과 같이 사용하며, 표현식의 실행순서가 어떻게 최적화되어 실행되는지 알려준다

    레벨: 쿼리 최적화를 활설화, 실행속도를 높이기 위해 테스트 순서를 변경한다
      -O0 : 최적화 수준 1과 같음(이라고 하는데 정말그럴까..)
      -O1 : 기본적 최적화 수준, 파일이름을 기반으로하는 테스트(옵션)가 먼저 수행되도록 식 변경
      -O2 : -name 테스트 이후 -type 테스트 수행
      -O3 : -a와 -o옵션과 같이 사용하며, -o의 경우 성공할 수 잇는 표현식이 더 빨리 평가되며, -a의 경우 실패할 수 있는 표현식이 더 빨리 평가된다

'Study > Shell' 카테고리의 다른 글

쉘 스크립트 - 6  (0) 2021.07.28
쉘 스크립트 - 5  (0) 2021.07.23
쉘 스크립트 - 3  (0) 2021.06.23
쉘 스크립트 - 2  (0) 2021.06.06
쉘 스크립트 - 1  (0) 2021.06.02

+ Recent posts