leehyeon-dv 님의 블로그
chap7. 파일과 디렉토리 검색 본문
✨목차
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 | 블록장치 |
f | 일반파일 | c | 문자장치특수파일 |
| | 심볼릭링크파일 | s | 소케파일 |
검색조건
-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
'유닉스 이론과 실습' 카테고리의 다른 글
chap6 .파일 접근 권한 관리하기 (0) | 2024.12.10 |
---|---|
chap 8. 프로세스와 사용자 명령 익히기 (0) | 2024.12.09 |
chap 9. 파일 아카이브와 압축 명령익히기 (0) | 2024.12.08 |
chap10. 인터넷과 통신 명령 익히기 (0) | 2024.12.08 |
chap11. 유닉스 유틸리티 이용하기 (1) | 2024.12.08 |