### File 관련 명령어 키워드

## file 정보: file, stat,

##touch

##find

 

 

#1 file

1) file <file> file 타입 확인   [파일타입은 magic 데이터(/usr/share/file/magic)를 통해 알 수 있다.]

#2 stat [option] <file> 

filemeta data 출력( meta data: 내용이 아닌 수식하는 정보, 예를 들어 파일이름, 생성시간, 권한 등등)

(~는 home dir 의미)

 

실습. old_bashrc2  stat을 통해 Modify, Change 중에 어느 시간이 변하는가? 

$ cp ~/.bashrc ~/old_bashrc

//최근에 입력한 이름 기입됨.  

$ stat <ALT-.> 

$ mv ~/old_bashrc ~/old_bashrc2

$ stat <ALT-.>

 

 Change 시간(ctime)이 변했다.

(Modify cp할 때 바뀜)

 

** 파일 생성 명령어

touch 파일명

cat > 파일명

vi 파일명

- 파일 삭제

rm rf 파일명

 

#3 find - find 기능 통해 특정 대상 검색 하여 삭제 또는 백업 가능

1) find directory [expression] - find는 유닉스 계열에서 중요한 명령.

2) 조건의 표기 (조건을 통해 검색됨)

n : 정확히 n인 경우를 검색

+n: n보다 큰 경우 검색(n포함)

-n: n보다 작은 경우를 검색(n포함)

-maxdepth level 최대 깊이 제한( 주로 사용)

-mindepth level: 최소깊이 제한.

*: 와일드 카드

사용법 : name * (name으로 시작하고 뒤에는 아무것이나 와도 됨)

https://jeonkkochbi.tistory.com/15

 

리눅스 와일드카드 개념 & 활용으로 고급 명령어 사용! - 2편

리눅스 와일드카드 ( wildcard ), 정확히는 와일드카드 문자 ( wildcard character ) 이다. 와일드카드는 컴퓨터에서 특정 명령어로 명령을 내릴 때, 여러 파일을 한꺼번에 지정할 목적으로 사용하는 문자

jeonkkochbi.tistory.com

 

 

#4 find 예제

 

//빈파일 여러개 만듦.
//dd 덤프뜨는 명령어
//용량이 다른 덤프들을 여러개 만들 예정. (800k ~ 2.1 Mb까지의 파일 여러개 만드는 명령어)
jlim@jlim-vm:~/temp0$ for i in {8..21}; do dd bs=100000 count=$i \

> if=/dev/zero of=./${i}.00k.dat; done

// ‘.’ 현재 디렉토리, 조건은 –name

이름이 ‘ [89]*k.dat ’ 찾기. scale brace 안에 숫자는 옵션이다. 8또는 9 중 하나.

*은 아무거나 다들어오고 뒤에는 k로 끝나고 파일명은 .dat로 끝남.

//사이즈 1M에 해당하는 파일만 보여짐. 0~1M

// -1M 라해도 동일하게 나옴.



[ ] 안에 문자(숫자)중 하나라도 있을시 출력.

jlim@jlim-vm:~/temp0$ find . -name '[89]*k.dat'

jlim@jlim-vm:~/temp0$ find . -name '*k.dat' -a –size 1M



굳이 find 뒤에 띄어쓰기+ dot 안붙이고 find -name "*k.dat" -a –size 1M 해도 됨



//사이즈 를 통한 find

jlim@jlim-vm:~/temp0$ find . -name '*k.dat' -o -size +1500k



// -a 없어도 and연산자 생략됨

jlim@jlim-vm:~/temp0$ find . -name '*k.dat' -a –size +1500k



// mtime 이 –1 mtime은 단위가 day 시간으로 따지면 24h이 된다.

24시간 기준으로 –1이니, 24시간 아래가 되야함.

사이즈는 +1M보다 커야함.

1m보다 커야하고 최근에 24시간 이내의 파일만 검색하게 됨

jlim@jlim-vm:~/temp0$ find . -mtime -1 –size +1M

find 사용 시  주의점:

*.txt 입력 시 쉘에서 이를 해석하는 경우가 있다. 쉘에서 해석하는 걸 glob라한다.

현 디렉터리에 *.txt에 매칭되는 파일이 있으면 쉘의 wildcard 해석 기능으로 인해 변경(치환)이된다.

잘못된 예)

jlim@jlim-vm:~/temp0$ find . -name *.txt

올바른 예)

표현식을 (single or double) quotation marks  single 또는 double quote (‘ ’, “ ”)  로 감싸주자.

 

 

#5 검색 후 작업지시. (이 부분이 find에서 핵심)

\; rm a.tmp; rm b.tmp ... 이렇게 일일이 찾아서 지움

\+ rm rf a.tmp b.tmp c.tmp 한번에 해당 파일들 찾아서 지움.

 

1) find .... -exec 명령어 \;

2) find .... -exec 명령어 \+

 

eg. “*.tmp” 파일을 찾아서 지우는 명령

jlim@jlim-vm:~/temp0$ find . -name "*.tmp" -exec rm {} \

jlim@jlim-vm:~/temp0$ find . -name "*.tmp" -exec rm -rf {} \;

jlim@jlim-vm:~/temp0$ find . -name "*.tmp" -exec rm -rf {} \+

 

-rf에서 -는 디렉토리까지 .tmp 파일찾아 삭제

 

 

#find 연습문제 #1

 

현재 디렉터리 아래에서 최근 24시간 이내에 내용이 변경되어진 일반 파일을 찾아서 mtime_b24.txt 파일로 리스트를 저장해보자.

아래는 우선조건이다.

조건1) mtime24시간 이내: -mtime 1

조건2) 일반 파일: -type f

find ./ ..생략...

jlim@jlim-vm:~/tmp$ find . -mtime -1 -type f

 

**루트 디렉터리에서 찾고싶으면 .//로 바꾼다.

find / -mtime 1 . -type f > mtime_b24.txt(파일명)

 

#find 연습문제 #2  [추후 작성]

연습문제 1에서 조건 추가.

maxdepth 3 (3단계까지 제한을 둠)

maxdepth 3은 맨처음에 무조건 나와야함.

cp 명령을 입력

생략된부분이 조건에 맞는 것들이 {}안에 들어오고

backup을 해당 명령어 치기전에 만들어져야함.

 

find / maxdepth 3 -exec cp {} ~/backup \; > mtime_b24.txt

 

 

해당 내용은  프로그래머스 리눅스 강의 김선영 선생님의 강의를 들으며 기록했습니다.

+ Recent posts