find
: 특정 파일의 위치를 검색하는 명령어
- find /etc -name .conf
etc디렉터리에서 찾겠다,
확장명이 .conf 로 끝나는 이름을 찾겠다,
(*.conf : 뒤에는 무조건 conf로 끝나야 하고 앞은 상관 없다는 뜻)
- find /home -user finduser
finduser가 소유하고 있는 파일과 디렉터리 다 찾아짐. 숨김파일 포함.
- ls -l /home/
- find /home -user finduser 2> /dev/null
리다이렉션에는 1,2,0을 입력할 수 있는데,
0 표준입력 1 표준출력 2 표준에러
0과 1과 2를 적으면 표준에러만 골라서 /dev/null에 보내어 출력하겠다,
/dev/null은 블랙홀. 쓰레기통임. 들어가면 자동으로 없어진다. null로 처리가됨. 표준에러를 버리겠다는 뜻.
find /home -user finduser 했을 때 Permission denied(불필요한) 까지 뽑아지던 것들을 빼고 출력이 됨.- find /usr/bin -size +10k -size -100k
사이즈가 10키로바이트 보다 크고 100키로바이트보다 작은 것.
- find . -atime -1
오늘 이내에 만들어진 모든 파일을 보여준다
+1은 하루 지난.
time: +1 : 하루 지남(일 수)
min +1 : 1분 지남(분 수)- find . -type d
현재 디렉터리에서 디렉터리만 검색.
- find . -type f
현재 디렉터리에서 파일만 검색
- find의 action을 통해 검색 결과에 해당하는 파일들에게 추가 명령 작업 가능.
- -exec 와 \; 는 외부 명령어의 시작과 끝을 의미함.
- find 경로 옵션 -exec {} \;
{}안에 찾은 파일이나 디렉터리들이 순서대로 들어가진다.- find ~ -size -2k -type f
사이즈가 2키로바이트보다 작은 것들을 찾겠다, 그 중에서 타입이 파일인 것.- find ~ -size -2k -type f -exec cat {} \;
- find ~ -type d -exec ls -l {} \;
- find ~ -type d -ok ls -l {} \;
: 중괄호에 하나씩 넣을 때에 그 명령을 실행할 것인지 하나하나 물어본다.
cd /etc/apt
ls
cat sources.list
nano sources.list
문제
which
: 실행 파일의 위치와 함께 소스, 설정 파일, 메뉴얼 페이지를 검색하여 출력.
whereis
: 실행 파일 및 소스, 메뉴얼 페이지를 검색하여 출력
locate보다 검색 속도가 느리며, 결과를 단순한 정보로 출력.
ex ) whereis cat
wc
: Word Count. 텍스트 파일의 행(line) 수, 단어(word) 수, 문자(byte)수를 출력하는 명령어
- wc -l testFile
2행이 나온다.- wc -w testFile
7개의 단어가 나온다.
grep
: Global Regular Expression Print
: 텍스트 파일에서 특정 패턴(pattern, 문자열)을 갖는 줄을 찾아서 출력해주는 명령어
- -i
: 검색할 때 대소문자를 구분하지 않는다.- -v
: 패턴과 일치하지 않는 줄을 출력한다.- -l
: 주어진 패턴과 일치하는 패턴이 있는 파일의 이름만 출력한다.- egrep
: 확장된. egrep 혹은 grep -P 사용.- 정규식
: 복잡한 문자열 검색을 효율적으로 처리할 수 있게 해주는 문법식.
이 파일 안의 내용을 정규식으로 찾아보자.
![](https://velog.velcdn.com/images/dmchoi224/post/20a7ba8e-bbc2-49ef-b8c2-2295eec9c7c7/image.png- grep -E c regTest (egrep c regTest)
- grep -P ca..ron regTest
ca로 시작하고 ron으로 끝나는 아무거나 찾는다
- grep -P ca* regTest
c로 시작하는 모든 걸 찾는다 a는 있어도 되고 없어도 된다.- grep -P ca*d regTest
c있고 a자체가 여러번 있어도 되고 없어도 되고 d가 있는 것- grep -P ca? regTest
a가 없거나 한번만 와야한다- grep -P ca?n regTest
c로 시작하는데 a가 없거나 한번만 와야하고 n으로 끝나야 한다.- grep -P c{2}d regTest
c가 2번오고 d로 끝난다
- grep -P "go{1,2}" regTest
g하고 o가 한번이거나 두번인 것을 찾는다.
- grep -P ^ca regTest
단어의 첫글자가 c로 시작하고 뒤에 a가 와야한다- grep -P [abc] regTest
a나 b나 c가 있는 것
이 사이 있는 것들 중 하나가 해당되는 것을 찾는다.- grep -P [^zxc] regTest
대괄호 안에서는 zxc중에 하나라도 있는 애들 빼고 찾는다- grep -P [^a-zA-Z가-힣0-9] regTest
대괄호 안 내용 다 제외하고 찾겠다- grep -P $'ef' regTest
ef로 끝나는 것을 찾는다- find 안에서도 정규식을 응용할 수 있다.
- find /home/ -name [abc]
home디렉터리 안에서 a나 b나 c가 포함된 애들을 찾겠다
문제
- finduser의 홈 디렉터리에서 모든 파일 중 내용이 linux가 들어있는 파일의 내용을 출력합니다.
find finduser/ -type f -exec cat {} \; | grep linux
- finduser의 홈 디렉토리에서 c3210 파일을 찾아 내용 중 대소문자 구별 없이 this가 들어간 문자열을 찾아 번호와 내용을 출력합니다
find finduser/ -name c3210 -exec cat {} \; | grep -in this
- /etc/passwd에서 user라는 문자열이 들어있는 줄을 찾아 홈디렉터리의 users라는 파일에 내용을 저장합니다
grep user /etc/passwd > ~/users
cat ~/users
- finduser의 폴더에서 (하위포함) a,b,c로 시작하는 파일들을 찾아 해당 파일들의 내용을 전부 병합하는 d 파일을 반환하세요
find finduser/ -type f -name '[abc]' -exec cat {} \;
이걸 병합하라 했으니
find finduser/ -type f -name '[abc]' -exec cat {} > d \;