예전에 포스팅 했던 [리눅스] 파일 개수 구하기(find, wc 이용) 글에서, find 명령어를 이용해 이름 기준으로 파일을 검색하는 방법을 알아보았다. 이번에는 파일 크기를 기준으로 검색하고, 그리고 검색된 결과를 바로 삭제하는 방법을 알아본다.


리눅스 콘솔에서 find --help 명령어를 쳐보면 아래와 같이 find에 대한 설명이 나온다. 아래 설명에서 굵게 처리한 부분을 보면, 힌트를 얻을 수 있다.


# find -- help


사용법 : find [경로...] [수식]


default path is the current directory; default expression is -print

expression may consist of: operators, options, tests, and actions:


operators (decreasing precedence; -and is implicit where no others are given):

      ( EXPR )   ! EXPR   -not EXPR   EXPR1 -a EXPR2   EXPR1 -and EXPR2

      EXPR1 -o EXPR2   EXPR1 -or EXPR2   EXPR1 , EXPR2


positional options (always true): -daystart -follow -regextype


normal options (always true, specified before other expressions):

      -depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf

      --version -xdev -ignore_readdir_race -noignore_readdir_race


tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N

      -cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME

      -ilname PATTERN -iname PATTERN -inum N -iwholename PATTERN -iregex PATTERN

      -links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE

      -nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN

      -wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N

      -used N -user NAME -xtype [bcdpfls]

      -context CONTEXT



actions: -delete -print0 -printf FORMAT -fprintf FILE FORMAT -print 

      -fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit

      -exec COMMAND ; -exec COMMAND {} + -ok COMMAND ;

      -execdir COMMAND ; -execdir COMMAND {} + -okdir COMMAND ;


find에서 -size 옵션을 주면 파일 크기를 기준으로 검색을 할 수 있고, -exec 옵션을 주면 검색 결과에 특정 액션을 할 수 있다. 그럼 케이스 별로 나누어 실제 사용 예시를 알아본다.



1. 파일 크기 기준으로 검색

# find ./* -size +N    => N 이상 크기의 파일을 검색한다.

# find ./* -size -N    => N 이하 크기의 파일을 검색한다.

# find ./* -size N      => N 크기의 파일을 검색한다.


** 사이즈 단위

b : 블록단위

c : byte

k : kbyte

w : 2byte 워드


예를 들어 콘솔 현재 경로에서 512byte 이상, 1024byte 이내의 파일을 찾고자 한다면 아래와 같이 입력하면 된다.

# find ./* -size +512c -size 1024c



2. 파일 검색 후 삭제

# find ./* [옵션] -exec rm -rf {} \;    => find 검색 결과를 모두 삭제한다.


예를 들어 콘솔 현재 경로 아래의 파일을 모두 삭제하고자 한다면 아래와 같이 입력하면 된다.

# find ./* -type -f -exec rm -rf {} \;



3. 복합

그럼 지난 포스팅의 내용과, 이번 포스팅의 내용을 복합하여 정리해보면 아래와 같은 명령어도 실행할 수 있다.

# find ./* -type -f -name '*.jpg' -size +512k -size -1024k -exec rm -rf {} \;

=> 현재 경로의 파일 중에 파일 확장자가 jpg이면서, 사이즈가 512kbyte 이상, 1024kbyte 이하인 것들을 모두 삭제한다.







리눅스에서 시스템 환경변수를 등록하는 방법은, 환경변수의 종류나 읽어들이는 시점 등에 따라 매우 다양한 것으로 알고 있다.


여기서는, 특정 실행파일을 더 쉽게 실행하기 위해 .bash_profile에 환경변수를 추가하는 방법에 대해서만 간단히 다룬다.



여기서 다루는 방법이 필요한 경우는, 특정 실행파일을 손쉽게 실행하고 싶을 때,


예를 들어 /usr/app/mysql 에 mysql가 설치되어있다고 해보자.


 이때 mysql을 실행하기 위해서는 # /usr/app/mysql/bin/mysql 이런식으로 실행을 해야 한다.


그런데 이를 단순히 # mysql 이라고만 입력해도 실행이 되게 하고 싶을 때 아래와 같이 환경변수를 등록해주면 된다.



# cd

($HOME 경로로 이동)


# vi .bash_profile

(.bash_profile을 vi편집기로 실행)


PATH=$PATH:HOME/bin:/usr/app/mysql/bin

(위와 같이 PATH로 된 부분에서 실행하고자 하는 파일이 있는 경로를 콜론으로 붙여서 추가한다)


:wq

(편집 중인 vi편집기를 저장하고 종료한다)


# source .bash_profile

(.bash_profile이 적용되도록 한다)


# mysql

(기존에는 /usr/mysql/bin/mysql 이라고 실행하던 것을, 위와 같이 손쉽게 실행할 수 있게 된다.)


리눅스 OS를 서버로 사용할 경우, 특정 종류 혹은 모든 파일의 개수를 구해야 할 경우가 있다.


이때 사용되는 명령어를 간단히 정리해본다. 결론적으로 find와 wc 명령어를 사용하게 되는데, 우선 이 두 명령어가 어떤 명령어인지 간단하게 짚고 넘어가본다.



1. find 명령어


콘솔에서 find --help 라고 쳐보면 아래와 같은 내용이 출력된다.


사용법: find [경로...] [수식]

기본 경로는 현재 디렉토리입니다; 기본 수식은 -print입니다

수식은 다음과 같이 이루어질 수 있습니다:

연산자(감소하는 우선순위; 다른 것이 주어지지 않으면 -and가 묵시적으로 사용됨)

      ( EXPR ) | EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2


      EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2

옵션 (항상 참): -daystart -depth -follow --help

      -maxdepth LEVELS -mindepth LEVELS -mount -noleaf --version -xdev

시험 (N은 +N, -N, N이 될 수 있음): -amin N -answer FILE -atime N -cmin N


      -cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME

      -ilname PATTERN -iname PATTERN -inum N -ipath PATTERN -iregex PATTERN

      -links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE


      -nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN

      -size N[bckw] -true -type [bcdpfls] -uid N -used N -user NAME

      -xtype [bcdpfls]


      -context CONTEXT


행동: -exec COMMAND ; -fprint FILE -fprint0 FILE -fprintf FILE FORMAT

      -ok COMMAND ; -print -print0 -printf FORMAT -prune -ls


=> 즉 find는 여러가지 조건을 가진 파일 혹은 폴더들의 목록을 검색하는 명령어이다.



2. wc 명령어


콘솔에서 wc --help 라고 쳐보면 아래와 같은 내용이 출력된다.


사용법: wc [<옵션>]... [<파일>]...

Print newline, word, and byte counts for each FILE, and a total line if

more than one FILE is specified.  With no FILE, or when FILE is -,

read standard input.

  -c, --bytes            print the byte counts

  -m, --chars            print the character counts

  -l, --lines            print the newline counts

  -L, --max-line-length  가장 긴 줄의 길이를 표시합니다

  -w, --words            단어의 개수를 인쇄합니다

      --help     이 도움말을 표시하고 끝냅니다

      --version  버전 정보를 출력하고 끝냅니다


=> 즉 wc는 파일의 줄이나 단어 수 등을 한번에 계산하여 확인할 수 있는 명령어이다.



3. 파일 개수 구하기


위 두 내용을 살펴보았을 때 파일 개수는 아래와 같이 구해야 한다는 것을 알 수 있다.


> find [디렉토리경로] -type f -name "[파일명규칙]" | wc -l


find의 결과로 출력되는 라인수 = 검색된 파일 개수이기 때문에 find로 특정 이름을 가진 파일을 검색하고, 이 결과의 줄 수를 출력하는 것이다.



예를 들어 /home 경로 안에서 확장자가 .log인 파일의 개수를 구하고자 할 때는 아래와 같이 입력하면 된다.


> find /home -type f -name "*.log" | wc -l


리눅스를 사용하다 보면, tar 혹은 tar.gz로 압축을 하거나 압축을 풀어야 할 경우가 자주 생긴다.


이를 처리하기 위해 리눅스에서는 tar 라는 명령어를 사용하게 되는데,


tar 명령어도 여러가지 옵션이 있지만 각 옵션에 대해서 알아보기 보단, 자주 사용하는 명령어 패턴만 정리한다.



1. tar로 압축하기

> tar -cvf [파일명.tar] [폴더명]


ex) abc라는 폴더를 aaa.tar로 압축하고자 한다면

     > tar -cvf aaa.tar abc



2. tar 압축 풀기

> tar -xvf [파일명.tar]


ex) aaa.tar라는 tar파일 압축을 풀고자 한다면

     > tar -xvf aaa.tar



3. tar.gz로 압축하기

> tar -zcvf [파일명.tar.gz] [폴더명]


ex) abc라는 폴더를 aaa.tar.gz로 압축하고자 한다면

     > tar -zcvf aaa.tar.gz abc



4. tar.gz 압축 풀기

> tar -zxvf [파일명.tar.gz]


ex) aaa.tar.gz라는 tar.gz파일 압축을 풀고자 한다면

     > tar -zxvf aaa.tar.gz




참고로, 위의 옵션들을 포함한 그나마 자주 사용되는 tar 명령어의 옵션들은 아래와 같다.



 옵션

 설명

 -c

 파일을 tar로 묶음

 -p

 파일 권한을 저장

 -v

 묶거나 파일을 풀 때 과정을 화면으로 출력

 -f

 파일 이름을 지정

 -C

 경로를 지정

 -x

 tar 압축을 풂

 -z

 gzip으로 압축하거나 해제함



리눅스 서버 부팅시각 확인 방법 1. last 로그 확인


> last reboot



리눅스 서버 부팅시각 확인 방법 2. dmesg 로그 업데이트 시각 확인


> ll /var/log/dmesg




이 외의 자세한 내용은 /var/log 밑에서 찾아보면...

현재 설정된 크론탭 조회


# crontab -l




크론탭 추가/수정


# crontab -e

(이후 화면에서 vi편집기에서 처럼 편집하면 된다.)


<설명>

1번필드 : 시간(분)

2번필드 : 시간(시간)

3번필드 : 일자

4번필드 : 월

5번필드 : 요일(0:일요일, 1:월요일, 2:화요일….)

6번필드 : 실행할 명령이나 스크립트


<예시>

00 02 * * * /usr/local/bin/test.sh >> /test.log

: 매일 02시에 /usr/local/bin/test.sh를 실행하고, 해당 로그를 /test.log에 저장한다.


00 02 * * 6 /usr/local/bin/test.sh

: 매주 토요일 02시에 /usr/local/bin/test.sh를 실행한다.



리눅스에서 CPU 정보 및 CPU 코어개수, 물리 CPU 수를 쉽게 확인하는 방법이다.

 

결론적으로 /proc/cpuinfo 에 모든 정보가 나와있지만, 개수를 확인하고 싶은데 일일이 찾아보기 귀찮을 땐 1~3번 참고.

 

 

0. CPU 정보 확인

> cat /proc/cpuinfo

 

1. CPU 코어 전체 개수 확인

> grep -c processor /proc/cpuinfo

 

2. 물리 CPU 수 확인

> grep "physical id" /proc/cpuinfo | sort -u | wc -l

 

3. CPU당 물리 코어 수 확인

> grep "cpu cores" /proc/cpuinfo | tail -1

 

리눅스를 사용하다 보면, 서버와 관련된 보고서 작성 혹은 검색 등등을 위해 버전을 알아봐야 할 때가 종종 있다.

 

맨날 까먹어서 간단히 정리!

 

 

1. 리눅스 OS 버전 확인

 

콘솔에서 아래와 같이 입력하면 현재 사용 중인 OS 버전을 확인할 수 있다.

 

> uname -a

 

혹은 아래와 같이 입력해도 확인할 수 있다.

 

> cat /etc/issue

 

위 2개 결과가 약간 다른걸 볼 수 있는데, 전자는 Linux 자체의 버전이 나오고, 후자는 CentOS인지 Red Hat인지 등이 나온다.

 

 

2. 아파치(Apache) 버전 확인

 

콘솔에서 아래와 같이 입력하면 현재 사용 중인 Apache의 버전을 확인할 수 있다.

 

> cd [아파치 경로]

> cd bin

> ./httpd -v

 

즉, 아파치 경로의 bin 폴더로 들어가서 httpd -v를 실행시키면 된다.

 

 

3. 톰캣(Tomcat) 버전 확인

 

콘솔에서 아래와 같이 입력하면 현재 사용 중인 Tomcat 버전을 확인할 수 있다.

 

> cd [톰캣 경로]

> cd bin

> ./catalina.sh version

 

즉, 톰캣 경로의 bin 폴더로 들어가서 catalina.sh version 을 실행시키면 된다.

 

 

4. MySQL 버전 확인

 

콘솔에서 아래와 같이 입력하면 현재 사용 중인 MySQL 버전을 확인할 수 있다.

 

> cd [MySQL 경로]

> cd bin

> ./mysql -V

 

즉, MySQL 경로의 bin 폴더로 들어가서 mysql -V 를 실행시키면 된다.

일반적으로 MySQL 은 그냥 콘솔에서 mysql 만 입력해도 바로 실행되도록 등록하는데, 그 경우 그냥 mysql -V만 입력해도 된다.

 

 

5. JAVA 버전 확인

 

콘솔에서 아래와 같이 입력하면 현재 사용 중인 JAVA 버전을 확인할 수 있다.

 

> java -version

 

혹시 java 명령어가 등록이 되지 않은 경우에는 JAVA 설치 경로의 bin 폴더로 찾아가서 java -version 을 실행하면 된다.

 

정상적으로 jAVA가 설치된 경우 아래와 같이 입력하면 JAVA 결치 경로가 나온다.

 

>which java

 

 

 

 

아직도 나에게 멀기만 한 리눅스..ㅠ

아직 아는 명령어는 몇 개 없지만, 다시 공부도 해볼 겸 기본적인 리눅스 명령어들을 정리해본다.

(혹시 틀린 내용이나 추가해야할 내용이 있으면 댓글 부탁해요)

 

 

리눅스 명령어 1. 경로 이동

 

cd [경로]

- 해당 경로로 이동한다.

- "."은 현재 경로를, ".."은 상위 경로를 의미한다.

- 상대경로 혹은 절대경로를 이용해 이동 가능하다.

- ex) cd /          : 루트 경로로 이동.

        cd conf      : 현 위치의 conf 폴더로 이동

        cd ..          : 상위 경로로 이동.

        cd ../conf  : 상위 경로의 conf 폴더로 이동

        cd /apache/conf : 루트 경로의 apache폴더 내의 conf 폴더로 이동

 

pwd

- 현 위치를 나타낸다.

 

mkdir [폴더명]

** 이건 경로 이동은 아니지만 어디에 넣어야 할지 애매해서 여기다 그냥 씁니다 ㅎㅎ

- 현 경로에 폴더를 생성한다.

- ex) mkdir example : 현재 경로에 example이라는 이름의 폴더를 생성

        mkdir /apache/conf/example : /apache/conf/ 경로에 example이라는 이름의 폴더를 생성

 

 

리눅스 명령어 2. 파일 및 폴더 목록보기

 

ls

- 현재 경로의 파일 및 하위폴더 목록을 보여준다.

 

옵션

내용 

 -a

 숨김 파일을 포함한 목록을 보여준다.

 -l

 리스트 형식으로 권한, 파일명, 수정시간 정보도 함께 보여준다.

 -c

 파일 상태 정보가 변경된 순으로 보여준다.

 -t  파일이 변경된 순으로 보여준다.
 -i  파일 왼쪽에 색인 번호를 보여준다.
 -m  파일을 쉼표로 구분하여 가로로 보여준다.
 -r  정렬 순서를 역순으로 보여준다.
 -u  최근 사용 파일 순으로 보여준다.

 

- ex) ls        : 그냥 현재 경로의 파일 및 하위폴더 목록을 보여줌

        ls -l     : 현재 경로의 파일 및 하위폴더 목록을 자세히 보여줌

        ls -al   : 현재 경로의 파일 및 하위폴더 목록(숨김 파일 포함)을 자세히 보여줌

        ls -altr : 현재 경로의 파일 및 하위폴더 목록(숨김 파일 포함)을 파일 변경 시간 내림차순으로 보여줌(오래된 순으로)

 

** 개인적으론 보통 ls나 ls -altr을 많이 사용합니다.

 

 

리눅스 명령어 3. 파일/폴더 복사

 

cp [소스] [목적지]

- 소스에 있는 파일을 목적지로 복사한다.

 

옵션

내용 

 -a

 원본 파일의 속성, 링크 정보를 유지하면서 복사한다.

 -b

 복사할 대상을 덮어쓰거나 지울 때를 대비하여, 백업 파일을 만들며 복사한다.

 -d

 심볼릭 파일 자체를 심볼릭 정보와 함께 복사한다.

 -f

 복사할 파일이 존재할 때 삭제하고 복사한다.

 -i  복사할 파일이 존재하는 경우 복사할 것인지 물어보고 복사한다.
 -l  디렉토리가 아닌 경우 복사 대신 하드 링크로 만든다.
 -p

 원본 파일의 소유, 그룹, 권한, 허용 시간을 보존한 채로 복사한다.

 -r

 서브 디렉토리 내에 있는 모든 파일까지 통째로 복사한다.

 -s

 디렉토리가 아닌 경우 복사 대신 심볼릭 링크로 만든다.

 -u  대상 파일보다 원본 파일이 새로운 것일 때 복사한다.

 

** 심볼릭 링크 : 윈도우의 바로가기와 같은 역할을 한다. 심볼릭 링크가 걸어진 파일을 수정시, 원본 파일은 수정되지 않는다.

    하드 링크    : 심볼릭 링크과 형태는 같은데, 하드링크에서 파일을 수정하면 원본파일도 함께 수정된다.

 

- ex) cp test1 test2                      : 현 위치의 test1이라는 파일을 현위치에 test2라는 이름으로 복사한다.

        cp test1 /apache/conf/test2 : 현 위치의 test1이라는 파일을 /apache/conf/에 test2라는 이름으로 복사한다.

        cp -rp test1 /apache/conf/ : 현 위치의 test1이라는 폴더와 폴더 내의 모든 파일을 /apache/conf/에

                                                 test2라는 이름으로 복사한다(소유, 그룹, 권한, 허용 시간 등을 보존한 채로)

 

** 실제 서비스에 사용되는 폴더, 파일의 경우 소유권이나 권한이 바뀌게 되면 정상적으로 작동하지 않을 수 있으므로, 중요한 설정 파일 등을 복사할 때는 -p 옵션을 사용하는 것이 좋다.

 

 

리눅스 명령어 4. 파일/폴더 이동

 

mv [소스] [목적지]

- 소스에 있는 파일을 목적지로 이동한다.

 

옵션

내용

 -b  파일이 지워지기 전에 백업 파일을 만들고 이동한다.
 -f

 대상 파일이 있더라도 그 파일을 삭제하고 이동한다.

 -i  대상 파일이 있는 경우 덮어쓸 것인지 물어보고 이동한다.
 -u  대상 파일보다 원본 파일이 최신 것일 때 이동한다.
 -v  파일 이동의 과정을 보여준다.

 

- ex) mv test1 ../                                : 현 위치의 test1이라는 파일을 상위 경로로 이동한다.

        mv test1 /apache/conf/              : 현 위치의 test1이라는 파일을 /apache/conf/로 이동한다.

        mv /apache/test1 /apache/conf/ : /apache/의 test1이라는 파일을 /apache/conf/로 이동한다.

** 경로는 적어주지 않고 파일명만을 입력하여(mv test1 test2 와 같은 식으로), 파일명 수정처럼 사용할 수도 있다.

 

 

리눅스 명령어 5. 파일 삭제

 

rm [파일명]

- 파일을 삭제한다.

 

옵션 

내용 

 -d

 디렉토리를 삭제한다.

 -f

 삭제하냐고 다시 물어보지 않고 바로 삭제한다.

 -i  일일이 삭제할 것인지 다시 물어본다.
 -r  하위 디렉토리 포함한 파일들을 모두 삭제한다.
 -v  삭제 되기 전의 파일을 보여준다.

 

- ex) rm test1     : 현 위치의 test1이라는 파일을 삭제한다.

        rm -rf test1 : 현 위치의 test1이라는 폴더와 하위 디렉토리를 포함한 파일들을 모두 바로 삭제한다.

** 명령어를 치기 전에 충분한 검토 후에 rm -f 혹은 rm -rf로 손쉽게 삭제할 수 있다.

 

 

 

이 외에도 시스템 상태를 체크하는 명령어들, vi편집기 명령어들 등 엄청나게 많지만 일단 기본적인 명령어는 여기까지 :)