맞는데 왜 틀릴까..?

Linux

[리눅스] 파일 관련 명령어

안도일 2022. 10. 16. 23:54

 

 

grep

 

grep [패턴] [파일명]

파일들을 대상으로 지정된 패턴의 문자열을 검색하고, 해당 문자열을 포함하는 줄들을 출력한다

 

-i : 대소문자를 무시하고 검색

-n : 각 줄의 줄 번호도 함께 출력

-v : 명시된 패턴을 포함하지 않는 줄을 출력

-w : 패턴이 하나의 단어로 된 것만 검색

 

grep -w 'st.*' you.txt ## st로 시작되는 모든 단어 형식 출력 

grep -w 'w.*t' you.txt ## w로 시작하고 t로 끝나는 모든 단어 형식 출력

 

 

sort

 

sort [-옵션] [파일명]

텍스트 파일의 내용을 줄 단위로 정렬한다. 옵션에 따라 다양한 형태로 정렬 가능

정렬 필드를 기준으로 줄 단위로 오름차순 정렬 (a to z)

기본적으로 각 줄의 첫번째 필드가 정렬 필드

 

-r : 내림차순 정렬

-n : 숫자 문자열의 숫자 값에 따라 비교하여 정렬함

-t [문자] : 지정한 문자를 필드 구분자로 사용함

 

-k [필드번호] : 필드번호에 해당하는 필드를 기준으로 정렬 (필드번호는 1번부터 시작)

+[시작필드] -[종료필드] : 시작필드 부터 종료필드 -1 까지의 필드들을 기준으로 정렬 (필드번호는 0부터 시작)

 

sort +2 -3 you.txt ## 세번째 필드로 정렬
sort -k 2 you.txt ## 두번째 필드로 정렬

sort -t: -k 3 -n /etc/passwd ## :를 기준으로 나누어 3번째 필드로 숫자 크기대로 정렬

 

 

paste

 

paste [-s] [-d구분문자] 파일

여러 파일들을 줄 단위로 합병하여 하나의 파일을 만들어 준다

 

 

line.txt 실행

line 1:

line 2:

 

you.txt 실행

When I am down and...

When troubles come and ..

 

paste -s line.txt you.txt > lineyou.txt

 실행결과

line 1: When I am down and...

line 2: When troubles come and ..

 

 

 

cmp, diff

 

cmp 파일1 파일2

두 파일이 같은지 비교하고 같으면 아무것도 출력하지 않음

서로 다르면 달라지는 위치 출력

 

cmp you.txt me.txt ## you.txt me.txt differ : byte 340, lin 10

10번째 행 340번째 부터 문자가 다르다는 것을 의미

 

 

diff 파일1 파일2

두 파일을 줄 단위로 비교하여 그 차이를 출력

-i 옵션은 대소문자를 무시하여 비교

 

 

find

 

옵션의 검색 조건에 따라 대상 디렉토리 밑에서 해당되는 파일을 모두 찾아 출력

find [범위] [표현식] [동작]

 

-mtime [+ | -] n  : 수정

-atime [+ | -] n : 접근

-ctime [+ | -] n : 소유자 혹은 권한 변경

[+ | -] n : n일 보다 오래되거나 -n일 보다 짧거나 n일에 정확히 일치하는 파일검색

 

-perm : 사용권한과 일치하는 파일검색 (8진수)

-type [x] : 파일 종류가 x인 파일들을 찾는다

 

 

-exec [명령어] { } \;  : exec 옵션은 \;로 끝남. 검색된 파일은 { } 위치에 적용됨 

-print : 화면에 경로명 출력

find /usr -name '*.c' -print ## /usr 밑에 .c 파일들으르 찾아 경로명 출력 

find . -perm 700 -ls ## 사용권한이 700인 파일을 찾아 ls 명령어 수행

find . -size +1024 -print ## 1024 블럭 이상인 파일을 찾아 출력

find . -atime +30 -print ## 30일 이전에 접근되었던 파일을 찾아 출력

find . -name core -exec rm -i {} \; ## 이름이 core인 파일에 대해 rm 명령어 수행

find . -name '*.c' -atime +30 -exec ls -l {} \; ## 30일 이전에 접근된 파일 중 .c를 찾아 ls -l 명령어 수행

 

 

 

 

crontab

 

유닉스의 명령어 스케줄링 시스템으로 crontab 파일에 명시된 대로 주기적으로 명령을 수행함

 

7개의 필드로 구성

분 시 일 월 요일 [사용자] 명령

 

30 18 * * * rm /home/tmp 
## 매일 18시 30분에 파일 삭제

30 1 * 2,4,6,8,10,12 3-5 /usr/bin/wall /var/tmp/message 
## 2개월마다 수요일부터 금요일까지 새벽 1시 30분에 wall 명령을 사용해서 문자 전송

20 1 * * * find /tmp -atime +3 -exec rm -f {} \;
## 매일 새벽 1시 20분에 3일간 접근하지 않은 /tmp 내의 파일 삭제