leehyeon-dv 님의 블로그

chap7. 파일과 디렉토리 검색 본문

유닉스 이론과 실습

chap7. 파일과 디렉토리 검색

leehyeon-dv 2024. 12. 9. 01:56

✨목차

1. 파일 내용 검색 : grep/egrep/fgrep

2. 파일 검색: find

3. 명령어 검색 : which


✏️파일 내용 검색

 

grep [ ] 패턴 파일명들

  • global regular expression print
  • 지정한 파일에 특정 문자열 들어있는지 검색
  • 패턴 = 문자열 , 문장, 정규표현식
- i 대소문자를 무시하고 검색
- l 해당패턴이 들어있는 파일 이름 출력
-n 각 라인의 번호도 함께 출력
-v 명시된 패턴과 일치하지 않는 줄 출력
-c 패턴과 일치하는 라인 수 출력
-w 패턴이 하나의 단어로 된 것만 출력

 

기본데이터 (grep.dat)

UNIX       12345
unix+      123
system     admin
Network    5
root       other sh
sjyoun     prof ksh
jongwon    prof KSH
ROOT       other csh
ck07555    student ksh
CK08777    student bash
$ grep unix grep.dat
unix+ 123

//파일이름검색
$grep -i unix grep.dat
UNIX 12345
unix+ 123

//파일이름 검색
$grep -l unix grep.dat

//줄 번호출력
$grep -n unix grep.dat

//패턴이 안들어간 행 출력
$ grep -v unix grep.data
UNIX 12345
system admin
Network 5

//패턴을 포함하는 행수
$ grep -c 123 grep.dat
2

//단어 검색
$ grep -w unix grep.dat
unix+ 123

//다중옵션 사용 
$ grep -ni 123 grep.dat
1: UNIX 12345
2: unix+ 123

 

정규표현식

  • 특정한 규칙을 가진 문자열의 집합을 표현하는데 사용하는 형식언어
  • 구성요소
    • 앵커 : 검색시 한줄에서 패턴의 위치표현
    • 문자 집합 : 하나 이상의 무자들을 표현
    • 변환자  : 이전 문자 집합의 반복횟수 지정
^ 라인의 시작 '^문자열' 문자열로 시작하는 모든 행
$ 라인의 끝 '문자열$' 문자열로 끝나는 모든 행
. 한글자 'a...b' 한글자, 
[ ] 괄호안의 글자중 하나    
[^] 괄호안의 글자가 제외    
* 앞의 항목이 없거나 
여러번반복 
   

 

 

egrep [ ] 패턴 파일명들

  • extended regular expression을 사용하는 grep명령
+ 앞의 글자가 하나 이상 나옴 [ a -z]+arl dark,bark ...
? 없거나 한번반복 unix[0,1]? unix1, unix
x|y 또는    
| 문자열 그룹 (1|2)+search(esling)+ 1또는 2가 하나이상  searches ..
//+:앞에 글자가 하나이상나옴
$ egrep '[78]+' grep.dat

$ egrep 'csh|bash' grep.dat

 

fgrep [ ] 문자열 파일명들

  • 문자열 검색
  • 문자열 내의 모든 문자를 일반 문자로 해석
    • 정규표현식 사용 안함
    • 모든 정규 표현식 특수문자를 문자 그대로 검색

find 경로 검색조건 [동작]

  • 사용자가 시스템에 존재하는 특정 파일을 찾을때 사용
  • 검색 범위를 디렉토리 단위로 지정
  • 파일이름, 소유자, 접근 권한, 생성일자 등 파일 속성을 조합해 검색가능
  • 표현식과 일치하는 파일에 대해 파일의 절대 경로를 출력하거나 특정 명령 실행 가능
~ 홈에서 찾기
. 현재에서 찾기
/etc /etc에서 찾기 (절대경로)
root에서 찾기 
unix unix 디렉토리에서 찾기 (상대경로)

 

파일종류

d 디렉토리 b 블록장치
일반파일 c 문자장치특수파일
| 심볼릭링크파일 소케파일

 

검색조건

-name { } 파일이름 특정 파일명에 일치하는 파일검색
-type (d|f) 파일종류  
-mtime [+|-}n
-atime [+|-]n
수정시간 수정시간이 +n일보다 오래되거나 -n보다 짧거나
-user loginId 사용자 Id loginId가 소유한 파일 모든 파일 검색
size [+|-]n 파일크기 기준시간보다 이후에 생성된 파일 검색
-perm 사용권한 사용권한과 일치하는 파일검색
-newer { }   입력 파일보다 나중에 수정된 파일 찾기
-a  and 검색 조건의 and
-o or  
     

 

동작

-exec 명령 {} \ exec옵션은 \로 끝남 검색 파일은 {} 위치에 있어야함
-ok 명령 {} \ exec 확인 모드 형태
prinf 화면에 경로명 출력
ls 긴 목록 형식으로 검색결과 출력

 

which 명령

  • 명령어 파일의 위치를 찾아서 경로나 앨리어스 출력 
  • which ls

✏️연습문제

1. /etc/services 파일에서 tcp를 포함하고 있는 행의 수 출력

grep -c tcp /etc/services

 

2.현재 디렉토리의 모든 파일중에서 unix를 포함하고 있는 파일의 이름출력

grep -l unix *

 

3.홈 디렉토리의 *.txt 파일 중에서 jeremy Lin 이라는 이름찾기

grep 'Jeremy Lin' ~/*.txt

 

4. /etc/hosts 파일에서 #으로 시작하는 모든 행을 행번호와 함께 출력

grep -n '^#' /etc/hosts

 

5.현재 사용하는 유닉스 시스템에서 bash나 ksh를 사용하는 사용자의 목록 출력

egrep 'bsh|ksh' /etc/passed

 

6./etc디렉토리의 모든 파일 중 심볼릭 링크 파일에 대한 상세 목록 정보를 link.out 파일에 저장

ls -l /etc | grep ^l > link.out

 

7.which 명령이 있는 위치 검색

which which

 

8. 현재 사용중인 시스템 전체에서 이름이 which인 파일을 검색하되 오류메시지는 화면에 출력되지 않도록

find / -name which 2 > /dev/null

 

9.현재 디렉토리의 data 파일 중에 *나 ^문자를 포함하는 행 출력

grep [*^] data

 

10. /tmp 디렉토리에서 내가 생성한 파일 중 grep.dat 파일보다 나중에 수정된 모든 파일을 찾아 현재 디렉토리 아래의 tmp 디렉토리로 복사

find /tmp -user $LOGNAME -a -newer grep.data exec cp tmp \;

 

11. 내 홈 디렉토리의 모든 디렉토리와 파일 중 접근 권한이 777인것

find ~ ~perm 777

728x90