Showing posts with label CentOS 6.6 리눅스 기초. Show all posts
Showing posts with label CentOS 6.6 리눅스 기초. Show all posts

Thursday, April 5, 2018

CentOS 6.6 리눅스 기초] 16. at과 cron을 이용한 명령 스케줄링


안녕하세요. 썬구루입니다. 이번에는 명령 스케줄링에 대해 알아보도록 하겠습니다. 그냥 예약 작업으로 보면 될 것 같습니다. 여러분들이 특정 프로그램을 지정한 시간에 돌려야 한다면 어떻게 해야 할까요? 그 시간까지 기다렸다가 수동으로 실행시킬 수 있지만 새벽 2시에 실행을 시켜야 하는 것이라면 좀 어렵겠죠.

그래서 그러한 명령은 예약을 통해서 자동으로 지정한 시간에 동작하도록 만들 수 있습니다. 그런데 많은 명령을 실행해야 한다면 어떻게 할까요? 그때는 쉘 스크립트 파일을 만들어 실행하면 되는 것이죠.

그러면 명령을 스케줄링하기 위해 어떠한 명령을 사용할 수 있을까요? at과 cron을 통해 스케줄링을 할 수 있습니다. at 명령은 일회성으로 실행하고 cron은 주기적으로 명령을 실행하도록 만들 수 있습니다.

■ at 명령

일회성으로 명령을 예약 실행하기 위해 사용되는 명령입니다. 예약에 관련된 내용은 /var/spool/at 디렉터리에 파일로 저장된다.

1). 명령 형식

at [옵션] -t 시간

2). 옵션

옵 션
내 용
 -f FILENAME
 지정한 파일로부터 명령을 받아들인다.
 -l
 실행 대기 상태로 있는 at 작업을 확인하기 위해 사용한다. atq 명령을 사용하면 동일한 정보를 확인할 수 있다. 결과 내용은 JOB_ID   실행 예정 시간   a   사용자 이름으로 되어 있다.
 -d JOB_ID
 at 작업을 취소하기 위해 사용한다. atrm 명령을 사용하면 동일한 처리를 할 수 있다.
 -t TIME
 예약 시간을 명시하기 위해 사용한다. 시간 형식은 [[CC]YY]MMDDhhmm 이다.



명령을 입력한 후 명령의 끝을 나타내기 위해 Ctrl + D를 입력한다.

3). 예제

-t 옵션 뒤에 월 일 시간 분(MMDDhhmm) 형식으로 예약시간을 설정하였다. 그리고 at -l 명령을 사용하여 예약된 작업을 확인한 후 at 작업 ID를 사용하여 2번 작업을 -d 옵션을 사용하여 취소하였다. 그리고 5분 뒤에 명령이 실행되었는지 확인하기 위해 more 명령을 사용하여 /tmp/data.txt 파일을 확인하였다.


4). at 사용 제한

특정 사용자만 cron을 사용할 수 있도록 제한할 수 있다. 관련된 파일은 아래와 같다.

파 일
내 용
/etc/at.deny
 CentOS 6을 설치하면 기본적으로 존재하는 파일이다. at을 사용할 수 없게 사용자 계정 정보를 입력한다. 입력된 계정 외에는 at을 사용할 수 있다. 계정 구분자는 개행(줄 바꾸기) 기호이다.
/etc/at.allow
 기본적으로 존재하지 않는 파일이다. at을 사용할 수 있게 사용자 계정 정보를 입력한다. 입력한 계정 외에는 at을 사용할 수 없다.

■ crontab 명령

주기적으로 명령을 예약 실행하기 위해 사용되는 명령입니다. 예약에 관련된 내용은 /var/spool/cron 디렉터리에 계정 이름과 동일한 이름을 가지는 파일에 저장된다.

1). 명령형식

crontab [옵션]

2). 옵션

옵 션
내 용
-l
 예약된 스케줄에 대한 정보를 보기위해 사용한다.
-e
 예약 스케줄을 편집하기 위해 사용한다.
-r
 예약 스케줄을 삭제하기 위해 사용한다.



3). 스케줄 형식

crontab -e 명령을 실행하여 예약 스케줄을 편집하려면 특정한 형식에 맞게 설정해야 한다. 한 줄은 하나의 예약을 나타내는데 각 줄은 여섯 개의 필드로 구성되어 있으며 필드의 구분자는 빈칸(Space)이다. 여섯 번째 필드(명령 쪽)는 띄어쓰기가 있어도 그냥 여섯 번째 필드로 간주한다. 각 필드의 의미는 아래 그림과 같다.


필 드
내 용
  ① 분
 분을 나타내며 0~59 숫자가 사용된다. *의 의미는 ...마다(Every) 뜻하다. 0,15,30,45는 매 15분마다의 뜻인데 */15도 같은 의미이다.
  ② 시간
 시간을 나타내며 0~23의 숫자가 사용된다.
  ③ 일
 일을 나타내며 1~31의 숫자가 사용된다.
  ④ 월
 월을 나타내며 1~12의 숫자가 사용된다.
  ⑤ 요일
 요일을 나타내며 0~6의 숫자가 사용된다. 0은 일요일을 나타낸다.
  ⑥ 명령
 예약 실행할 명령을 나타낸다. 한 번에 여러 개의 명령을 실행해야 하는 경우 쉘 스크립트 파일을 만들고 실행 권한을 부여하면 된다.

*/15  *  *  *  *  Command1 : 매 15분마다 Command1을 실행하라
0  */12  *  *  *  * Command1 : 12시간마다 (00:00, 12:00에 실행) Command1을 실행하라
0  23  *  *  * `1-5 Command1 : 월요일부터 금요일까지 저녁 11시에 Command 1을 실행하라.
0  23  15, 30  *  *  Command1 : 매월 15일과 30일 저녁 11시에 Command1을 실행하라.
0  23  *  *  0,6  Command1 : 매주 토요일과  일요일 저녁 11시에 Command1을 실행하라.

4). 예제

아래는 root 계정으로 터미널 윈도우를 2개 실행하여 위는 crontab 명령을 사용하여 예약된 명령을 확인하고 아래 터미널은 /dev/pts/2 터미널 종류를 사용하는 것을 확인하였다. 그리고 2분마다 시간 정보가 /dev/pts/2로 전달되는 것을 확인할 수 있다. 그리고 -r 옵션을 사용하여 예약되어 있는 작업 내용을 삭제한 것을 확인할 수 있다.


4). cron 사용 제한

특정 사용자만 cron을 사용할 수 있도록 제한할 수 있다. 관련된 파일은 아래와 같다.

파 일
내 용
/etc/cron.deny
 CentOS 6을 설치하면 기본적으로 존재하는 파일이다. cron을 사용할 수 없게 사용자 계정 정보를 입력한다. 입력된 계정 외에는 cron을 사용할 수 있다. 계정 구분자는 개행(줄 바꾸기) 기호이다.
/etc/cron.allow
 기본적으로 존재하지 않는 파일이다. cron을 사용할 수 있게 사용자 계정 정보를 입력한다. 입력한 계정 외 cron을 사용할 수 없다.







Wednesday, April 4, 2018

CentOS 6.6 리눅스 기초] 15. 프로세스 관리 (Process Management)


안녕하세요. 썬구루입니다. 이 게시물에서는 프로세스 관리에 대해 알아보도록 하겠습니다.

프로세스(Process)란 무엇인가? 메모리상에서 실행되고 있는 프로그램을 프로세스라고 합니다. 우리가 ls라는 명령을 실행하면 파일시스템에 있는 ls 파일이 일시적으로 물리적 메모리에 올라가 실행됩니다. 그리고 실행이 끝나면 프로세스는 제거되고 메모리상에서 제거되는 것이죠.

프로세스와 프로세서(Processor)는 엄연히 다르죠. 프로세서는 물리적 연산처리 장치를 나타내니까요. 서버에는 수많은 프로세스가 존재합니다. 이를 확인하고 관리하기 위해 관련된 명령을 사용하는데 이것에 대해 알아보도록 하겠습니다.

■ ps 명령

디렉터리에 존재하는 파일을 확인하기 위해 ls 명령을 사용하듯 메모리에 존재하는 프로세스들에 대한 정보를 확인하기 위해 ps라는 명령을 사용한다. 옵션 사용에 따라 프로세스에 대한 다양한 정보를 확인할 수 있다. 그리고 이 명령은 /proc에 관련되어 있다. 아무런 옵션 없이 단독으로 이 명령을 사용한다면 현재 사용하는 쉘 또는 터미널에 관련된 프로세스를 보여준다.

1). 명령 형식

ps [옵션]

2). 옵션

옵 션
내 용
 -e
 메모리상에 존재하는 모든 프로세스 정보를 보여준다.
 -f
 프로세스에 대한 상세 정보를 보여준다.
 -U User_list
 명시한 사용자 계정에 관련된 프로세스 정보를 보여준다.
-p PID_list
 명시한 PID에 관련된 프로세스 정보를 보여준다.

이 외에도 다양한 옵션이 있지만 이 정도면 프로세스에 대해 충분히 정보를 확인할 수 있다.

3). ps 명령 필드 정보

필드 값
내 용
UID
 프로세스를 실행시킨 사용자 계정 ID를 나타낸다.
PID
 커널이 프로세스를 관리하기 위해 부여한 프로세스 ID를 나타낸다.
PPID
 프로세스의 부모 프로세스 ID를 나타낸다. 터미널을 통해 ls 명령을 사용할 때 ls 프로세스의 부모 프로세스는 터미널 프로세스. ^^
C
 프로세스에 의해 사용되고 있는 CPU 사용량. 정수로 된 % 사용량
STIME
 프로세스 시작(실행) 시간을 나타낸다.
TTY
 Terminal Type. 프로세스가 실행된 터미널 종류를 나타낸다. 
TIME
 CPU에 의해 처리된 누적시간을 나타낸다.




4). 예제




■ top 명령

이 명령은 프로세스 정보를 실시간 모니터링하기 위해 사용한다.

1). 명령 형식

top [옵션]

2). 출력 및 필드 정보


옵 션
내 용
PID
 커널이 프로세스를 관리하기 위해 부여한 프로세스 ID를 나타낸다.
USER
 프로세스를 실행시킨 사용자 계정 ID를 나타낸다.
PR
 프로세스 우선순위 (Priority)
NI
 작업에 의해 사용되는 가상메모리 (Virtual Image) (가상메모리 = SWAP 메모리 사용량 + RES 물리적 메모리 사용량) 
VIRT
 작업에 의해 사용되는 가상메모리 (Virtual Image) (가상메모리 = SWAP 메모리 사용량 + RES 물리적 메모리 사용량) 
RES
 작업에 의해 사용되는 물리적 메모리 (Resident Size)
SHR
 작업에 의해 사용되는 공유메모리 (Shared Memory size)
S
 프로세스 상태 (Process Status) ( Z : Zombie, T : Traced or Stopped, S : Sleeping, R : Running, D : uninterruptable sleep)
%CPU
 CPU 사용률
%MEM
 메모리 사용률
TIME+
 실행 이후 작업에 의해 사용된 CPU 사용시간 (1/100 초 단위)
COMMAND
 실행된 명령


3). 옵션

옵 션
내 용
 -a
 작업의 실제 물리적 메모리 사용량으로 정렬한다.
 -c
 작업의 CPU 사용량으로 정렬한다. 
 -d Interval
 top 명령 정보가 갱신되는 시간 간격. 초단위. 기본값 3초.(Interval time)
 -p PID
 특정 PID에 대한 프로세스 정보를 출력한다. 여러 PID를 선택해야 할 경우 -p PID1,PID2,PID3
 -u USERNAME
 특정 사용자에 관련된 프로세스 정보를 출력한다.

4). 상호대화형 명령 (Interactive Commands)

명 령
내 용
s
 정보 갱신 시간 간격을 재조정 (Interval time)
B
 글자 굵기 변경
n
 보여지는 최대 작업 수를 재조정 (Maxmum Tasks)
m
 메모리/스왑 정보 보기 토클링
1
 다중프로세스 (SMP) 보기 토클링
l
 평균 로드 보기 토글링 
t
 Tasks와 CPU 보기 토글링 
u
 특정 사용자에 관련된 프로세스 정보를 출력한다. 
k
 특정 PID를 가지는 프로세스에게 kill 시그널을 전달한다. 기본 시그널 : 15 Terminate
r
 renice 명령으로 프로세스 우선순위를 조정한다. 
f
 출력될 필드를 설정하기 위해 사용한다.
o
 출력 정렬 우선순위를 설정하기 위해 사용한다.
z
 색있는 출력을한다.  
Shift + P
 CPU 사용량 순으로 정렬한다.
Shift + M
 메모리 사용량 순으로 정렬한다.
Shift + T
 CPU를 사용 시간 순으로 정렬한다.
q
 top 명령을 종료한다. 

5). 예제




■ pstree 명령

동작 중인 프로세스들의 상호 관계를 계층 트리(Tree)처럼 보기 위해 사용되는 명령이다.

1). 명령형식

pstree [옵션] USERNAME 또는 PID



2). 옵션

옵 션
내 용
 -a
 명령줄 인자들을 보여준다.
 -p
 프로세스 PID를 보여준다. 

3). 예제


■ pgrep 명령

패턴으로 메모리상에 실행되고 있는 프로세스 정보를 검색하기 위해 사용되는 명령이다. 기본적으로 해당 패턴에 매치되는 프로세스 PID 정보를 보여준다.

1). 명령 형식

pgrep [옵션] [PATTERN]

2). 옵션

옵 션
내 용
 -U USERNAME
 특정 사용자에 의해 실행되고 있는 프로세스 PID 정보를 출력한다.
 -v
 패턴을 포함하고 있는 프로세스를 제외한 나머지 프로세스에 대한 PID를 출력한다.
 -l
 PID 뿐 아니라 작업 이름(프로세스 이름. 즉 명령)를 같이 출력한다.
 -t TERM_TYPE
 특정 터미널에 관련된 프로세스에 대한 PID를 출력한다.

3). 예제


■ renice 명령

이 명령은 동작 중인 프로세스에 대한 우선순위를 재조정하기 위해 사용된다. 우선순위 재조정 값은 -20부터 20까지 있으며 -값은 우선순위를 높여준다.

1). 명령 형식

renice 우선순위 PID

2). 예제




■ kill 명령

이 명령은 동작 중인 프로세스에 신호(Signal)를 전달하기 위해 사용한다. 보통 프로세스를 강제 종료하기 위해 사용하고 기본값이 15인 SIGTERM으로 설정되어 있다. 한 번 더 강조하지만 프로세스에 신호를 전달하기 위해 사용되는 명령이다. 보통 신호라고 하지 않고 시그널이라 읽는다. CentOS 6.6에서는 아래와 같이 64개의 시그널이 존재하는데 빈번하게 사용하는 시그널에 대해 알아볼 것이다.


1). 명령 형식

kill [옵션] PID

2). 옵션

옵 션
내 용
-s SIGNAL_NUM
 프로세스에 전달할 시그널(Signal) 번호를 지정한다.
-l [SIGNAL_NUM]
 시그널(Signal)에 대한 정보를 출력한다.
-n
 n에 프로세스에 전달할 시그널(Signal) 번호를 넣는다. 

3). 자주 사용하는 시그널(Signal)

시그널(Signal) 번호
내 용
1
 서비스를 제공하는 데몬 프로세스(예를 들어 sshd)에 보통 적용되며 이 신호를 전달하면 구성 파일을 다시 읽어들여 적용한다. 보통 서비스에 대한 구성파일(.conf)를 변경한 후 적용을 하기 위해 이 신호를 사용한다.
8
 프로세스를 강제 산술연산 오류를 일으킨다.
9
 프로세스를 강제 종료하기 위해 사용한다. SIGTERM 신호로 프로세스가 종료되지 않을 때 사용할 수 있는 시그널이다.
15
 프로세스를 종료하기 위해 사용한다.
19
 프로세스를 일시 중지시키기 위해 사용한다.

4). 예제

pgrep 명령을 사용하여 sshd 데몬 프로세스에 대한 PID를 알아내어 /etc/ssh/sshd_config 파일을 다시 읽어들여 적용하기 위해 1번 SIGHUP 신호를 사용하였다. 또한 user1 사용자가 사용하는 쉘 프로세스(bash)를 강제 종료하기 위해 -9 (SIGKILL)를 사용하였다.


■ pkill 명령

이 명령은 패턴으로 프로세스를 검색하여 그 프로세스에 시그널을 전달하기 위해 사용한다.

1). 명령 형식

pkill [옵션] [PATTERN]

2). 옵션

옵 션
내 용
-SIGNAL_NUM
 프로세스에 전달할 시그널(Signal) 번호를 지정한다. 사용되는 시그널은 kill 명령과 동일한다.
-U USERNAME
 특정 사용자에 관련된 프로세스에 시그널을 전달하기 위해 사용한다.
-t TERM_TYPE
 특정 터미널에 관련된 프로세스에 시그널을 전달하기 위해 사용한다.

4). 예제

sleep은 명시한 시간만큼 지연시키는 명령이다. 뒤따르는 숫자는 초 단위이다. &(empersand 앰퍼샌드)는 명령을 후면부(Backgroup 그냥 백그라운드라 읽는다.)로 실행시키기 위해 명령 끝에 사용한다. sleep 명령을 백그라운드로 실행시켰고 이 명령이 메모리상에 실행되고 있는 것을 pgrep 명령으로 확인하였다. 그리고 패턴으로 프로세스를 검색 후 신호를 전달하기 위해 pkill 명령을 사용하였고 시그널은 종료를 뜻하는 -15 SIGTERM을 사용하였다. 그리고 특정 사용자의 프로세스를 종료하기 위해 -U 옵션을 사용하였다.






Tuesday, April 3, 2018

CentOS 6.6 리눅스 기초] 14. 리다이렉션 기호 (I/O Redirection)

안녕하세요. 썬구루입니다. 이 게시물에서는 리눅스 명령 실행 시 자주 사용되는 리다이렉션 기호(I/O Redirection)에 대해 알아보도록 하겠습니다. 리다이렉션 기호는 표준 입력 또는 표준 출력의 방향을 돌리기 위해 사용되는 기호입니다.

리눅스나 유닉스에서 터미널을 사용하는 텍스트 명령에서는 표준 입력(Standard Input)을 사용자의 키보드를 통해 받죠. 그리고 그에 대한 결과값이 모니터로 표준 출력(Standard Output) 됩니다. 또는 명령에 대한 오류가 날 때 표준 오류(Standard Error)가 모니터로 출력됩니다. 표준 입력, 출력, 오류를 리다이렉션 기호를 사용하여 방향을 재지정할 수 있습니다.

리다이렉션 기호
내 용
>
 표준 출력에 대한 기호이다.  기호 뒤에 파일 이름이 오면 그 파일로 명령의 결과값을 입력한다. 존재하는 파일이면 내용을 덮어쓰고 존재하지 않는 파일이면 파일을 생성하고 결과값을 입력한다.
>>
 표준 출력에 대한 기호이다.  기호 뒤에 파일 이름이 오면 그 파일로 명령의 결과값을 입력한다. 존재하는 파일이면 파일의 마지막 줄 이후로 내용을 추가한다. 존재하지 않는 파일이면 파일을 생성하고 결과값을 입력한다.
<
 표준 입력에 대한 기호이다. 기호 뒤에 파일 이름이 오면 그 파일의 내용을 명령의 표준 입력으로 받아들인다.
CMD1 | CMD2
 명령의 표준 출력을 다른 명령의 표준 입력으로 전달하기 위해 사용하는 기호이다. 이 기호를 파이프라인(Pipeline)이라 읽는다.
2>
 표준 오류에 대한 기호이다. 기호 뒤에 파일 이름이 오면 그 파일로 명령의 표준 오류 값을 입력한다.
2>>
 표준 오류에 대한 기호이다. 기호 뒤에 파일 이름이 오면 그 파일로 명령의 표준 오류 값을 입력한다. 존재하는 파일이면 파일의 마지막 줄 이후로 내용을 추가한다. 존재하지 않는 파일이면 파일을 생성하고 결과값을 입력한다.

아래는 > 와 >> 리다이렉션 기호 사용의 예이다.  둘의 차이를 잘 보면 >> 는 추가의 개념인 것을 확인할 수 있다.




아래는 more 명령의 결과값을 head 명령의 입력값으로 방향을 재지정하기 위해 | (파이프라인) 기호를 사용한 것을 보여준다. 그리고 sort 명령의 입력값을 /etc/passwd 파일의 내용으로부터 받기 위해 < 기호를 사용한 것을 보여준다.







CentOS 6.6 리눅스 기초] 13. 파일 검색


안녕하세요. 썬구루입니다. 이번 게시물에서는 리눅스 파일 검색에 대해 알아보도록 하겠습니다. 텍스트 파일 내에 검색을 위해서는 grep, egrep, fgrep, sed, awk 같은 명령을 사용할 수 있는데 디렉터리 계층 내에 파일 이름, 유형, 파일 크기, 소유자, 시간 정보 등의 조건에 맞는 파일을 찾기 위해서는 find 명령을 사용할 수 있습니다. 이 명령에 대해 알아보도록 하겠습니다.

■ find 명령

리눅스 디렉터리 계층 내에 조건에 맞는 파일을 검색하기 위해 사용되는 명령이다.

1). 명령 형식

find [Path] [Expression] [Action]

2). Expression

이는 옵션으로 구성되어 있는데 파일을 검색하기 위한 조건을 나타낸다. 그리고 여러 가지 조건을 설정할 수 있다.

Expression
내 용
-name FILENAME
 파일 이름으로 검색
-type FILETYPE
 파일 유형(Type)으로 검색 [ f, d, l, c, b, s, p ]
-perm PERMISSION
 파일 권한으로 검색
-user USERNAME
 파일 소유자로 검색
-group GROUPNAME
 파일 그룹으로 검색
-size n[bcwkMG]
 파일 크기로 검색
 [ b : 512-byte, c : bytes, w : 2-byte words, k : kilobytes, M : Megabytes, G : Gigabytes ]
-mtime DAY_NUM
 파일 데이터 수정 시간으로 검색
-ctime DAY_NUM
 파일 속성이 변경된 시간으로 검색
-inum INODE_NUM
 파일 Inode 번호를 가지고 검색

-a 와 -o 옵션을 사용하여 여러 expression을 사용하여 파일을 검색할 수 있다. -a는 AND를 -o는 OR을 뜻한다.



3). 예제

아래는 /etc 디렉터리에 init.d 이름을 가지는 파일을 찾고 파일의 상세 정보(-ls)를 확인하기 위해 find 명령을 사용하였다. 그리고 /tmp 디렉터리에 user1 사용자가 소유한 파일을 검색하였다.


아래는 파일 크기를 가지고 파일을 검색하였다. '2> /dev/null' 뜻은 표준 오류를 /dev/null로 보내라는 뜻이다. 만약 이 내용이 궁금하다면 '2> /dev/null'을 빼고 실행시켜 보자. 그러면 무엇을 의미하는지 금방 알 수 있다. 그리고 같은 inode 값을 가지는 파일을 검색하기 위해 inum 옵션을 사용하였다.


-mtime은 파일의 데이터 수정시간(Data Block 수정)을 가지고 검색하는 것이다. -ctime은 파일의 속성 변경(Inode 변경)을 가지고 검색하는 것이다. 뒤따르는 숫자는 일 수를 나타낸다. 1이면 1일을 나타내는 것이다. 그러면 -1은 1일 이내 즉 24시간 내에 변경된 것을 의미한다.+1은 1일 이상 지난 것을 의미한다.


4). Action

이것은 find 명령으로 검색한 파일들을 어떻게 처리할 것인가를 나타낸다. 검색한 파일들의 상세 정보를 확인할 수 있고 또는 파일들을 옮기거나 삭제할 수도 있다.

Action
내 용
-print
 검색한 파일들을 출력한다. 이 옵션을 사용하지 않아도 검색한 파일들을 출력한다. 즉 암묵적 기본값.
-ls
 검색한 파일들의 Inode 번호와 ls -l 을 했을 때 출력되는 상세 정보를 한꺼번에 출력하다.
-exec COMMAND
 검색한 파일 이름을 표준 입력으로 받아 다른 명령을 실행한다.

5). 예제

아래는 /tmp 디렉터리에서 user1 사용자 소유 파일을 찾아 삭제하기 위해 find 명령에 Action을 사용하였다. 명령 실행 후 /tmp 디렉터리에 user1 사용자 소유의 파일을 검색해보니 파일이 모두 삭제된 것을 확인할 수 있었다.






CentOS 6.6 리눅스 기초] 12. 심볼릭 링크(Symbolic Link)와 하드 링크(Hard Link)


안녕하세요. 썬구루입니다. 이번 이 게시물에서는 심볼링 링크(Symbolic Link)와 하드 링크(Hard Link)에 대해 알아보도록 하겠습니다. 하나는 파일의 한 종류이며 다른 하나는 파일 이름과 Inode와의 관계를 말합니다. 그럼 이것에 대해 알아보도록 할까요?

■ 심볼릭 링크(Symbolic Link)

심볼릭 링크(Symbolic Link)는 다른 파일이나 디렉터리를 가리키는 파일이다. 아래와 같이 ls -l 명령의 결과값 첫 필드의 첫 문자가 l이라 되어 있으면 링크 파일이라고 한번 언급을 한 적이 있는데 심볼릭 링크 파일을 말하는 것이다.


관련된 파일은 파일 이름, Inode, Data Block로 구성되어 있으며 Data Bloack에는 이 파일이 가리키는 파일 또는 디렉터리 경로 이름이 저장되어 있다. 그림으로 나태내면 아래와 같다.


다른 파일시스템에 있는 파일 또는 디렉터리를 가리키는 심볼릭 링크 파일을 만들 수 있다. 이를 위해 ln 명령을 사용하는데 하드 링크 설명 후 알아보자.




■ 하드 링크(Hard Link)

하드 링크는 위 그림에서 보이는 것처럼 Inode와 파일 이름의 연결 관계이다.

그래서 하드 링크는 파일이 아니라 관계일 뿐이다. 예를 들어보자. 어떠한 사람이 있다. 그 사람을 호출하기 위해서는 이름이라는 것을 사용한다. 홍길동이라는 이름을 가지고 있는 사람. 그럼 사람과 이름은 서로를 연결 짓는 관계를 가진다. 친구들은 그의 이름을 부를 수 있지만 다른 이름 즉 별명을 부를 수도 있다. 길똥이 말똥이 홍길이 이런 식으로.. 그러면 사람 개체에 이름이 총 4개이네? 각 이름은 사람 개체에 관계를 가지고 있다. 어떠한 이름을 사용하던 동일한 개체를 접근하게 된다.

사람은 태어나면 반드시(?) 하나의 이름을 가지게 된다. 리눅스에서 파일도 마찬가지다. 파일은 적어도 하나의 하드 링크를 가져야 한다. 그리고 그 파일의  inode에 대해 다른 이름을 부여할 수 있다. 그리고 호출되는 파일 이름에 따라 다르게 동작하도록 프로그램을 만들 수도 있다. Inode는 파일시스템의 자원이기 때문에 이를 절약하는 차원에서 하드 링크를 사용할 수 있다. 하지만 하드 링크는 다른 파일시스템에 존재하는 파일에 대해 연결 지을 수 없다. Inode는 파일시스템의 자원 /a라는 파일시스템에 500번의 inode가 있고 /b라는 파일시스템에도 500번의 inode가 있기 때문이다.

너무 어렵게 설명한 것 같은데 간단하게..

심볼릭 링크는 다른 파일이나 디렉터리를 가리키는 파일이다. 하드 링크는 파일 이름과 inode와의 관계이다. 심볼릭 링크는 파일시스템을 넘나들 수 있지만 하드 링크는 넘나들 수 없다. 이 정도만 알아두자.

심볼링 링크와 하드 링크를 만들기 위해 ln 명령을 사용한다. 이 명령 사용 방법에 대해 알아보자.

■ ln 명령

심볼링 링크와 하드 링크를 만들기 위해 사용하는 명령이다. -s 옵션 없이 만들면 하드 링크, -s 옵션을 사용하여 만들면 심볼릭 링크 파일을 만든다.

1). 명령 형식

ln [옵션] Target  Link_Name

2). 옵션

옵 션
내 용
 -s
 심볼릭 링크 파일을 만들기 위해 사용하는 옵션이다.

3). 예제

테스트 용으로 사용하고 있는 CentOS 시스템에  /boot, / 파일시스템이 있는 것을 df 명령으로 확인하였다. 그리고 ls 명령에서 -i 옵션은 파일의 Inode 번호를 알기 위해 사용한다. ln -s 명령으로 심볼릭 링크 파일을 만들었을 때 서로 다른 Inode 번호를 가지는 것을 보고 서로 다른 파일이라는 것을 알 수 있다. 그리고 심볼릭 링크는 파일시스템을 넘나들 수 있다는 것을 예제를 통해 알 수 있다.

그림의 마지막 명령에서 ln 명령으로 하드 링크를 만든 것을 알 수 있다. 그리고 /Hard.lnk와 /userlist는 동일한 Inode 번호를 참조하는 것을 알 수 있다. 그리고 하나의 Inode에 2개의 이름을 가지기 때문에 ls -li 명령의 결과값에서 Link Count가 2가 되어 있는 것을 확인할 수 있다.


아래는 파일 이름에 따라 실행 시 다른 결과 값을 출력하는 쉘 스크립트 파일의 실행 예이다.







Monday, April 2, 2018

CentOS 6.6 리눅스 기초] 11.3 텍스트 관련 명령 - cut, grep


안녕하세요. 썬구루입니다.

이 게시물에서는 파일의 각 라인 섹션(Section 또는 Field)을 제거하는 명령인 cut과 필터링 명령인 grep 명령에 대해 알아보도록 하겠습니다.

■ cut 명령

텍스트로 된 데이터베이스 파일의 특정 필드 값을 추출하기 위해 또는 명령의 결과값의 특정 필드 값을 추출하기 위해 사용되는 명령이다.

1). 명령 형식

cut <옵션> [filename]

2). 옵션

옵 션
내 용
 -b LIST
 bytes를 선택하여 출력한다.
 -c LIST
 문자(Characters)를 선택하여 출력한다. 
 -f FIELD
 필드를 선택하여 출력한다.
 -d DELIMITER
 필드의 구분자를 탭(Tab) 대신에 옵션을 뒤따르는 문자를 사용한다.
 -s
 구분자를 포함하지 않는 줄은 출력하지 않는다.
 --output-delimiter=STRING
 출력에 대해 구분자 대신에 STRING 을 사용한다. STRING는 문자, 빈칸 등이 될 수 있다.



3). 예제

아래는 /etc/passwd 파일의 내용에서 각 줄의 첫 번째부터 네 번째 바이트(Bytes)까지 출력하는 것을 보여준다.


아래는 -c 옵션을 사용하여 첫 번째 문자(Character)부터 다섯 번째 문자까지 출력하는 것을 보여준다. 그리고 -c 옵션 뒤에 범위를 어떻게 지정하는 지도 보여준다.


아래는 필드 구분자로 : 문자를 지정하여 첫 번째 필드를 출력하는 것을 보여준다. 그리고 1, 3, 4 필드를 출력하는 하는 것을 보여준다. 그리고 출력할 때 구분자 : 문자 대신 공간(띄어쓰기)을 사용하여 출력하는 것을 보여준다.


■ grep 명령

이 명령은 명령의 결과값 또는 텍스트 파일의 내용에 특정 문자열을 검색 필터링하기 위해 사용된다. 시스템 또는 응용프로그램 로그 파일을 필터링하여 특정 내용을 확인하거나 동작하고 있는 특정 프로세스에 대한 정보를 보기 위해 다른 명령과 같이 많이 사용한다.

1). 명령 형식

grep [옵션] PATTERN [filename]

2). 옵션

옵 션
내 용
 -c
 패턴에 일치하는 전체 줄의 수를 출력한다. 
 -E
 egrep과 동일하게 동작한다.
 -F
 fgrep과 동일하게 동작한다.
 -f FILE
 파일로부터 패턴을 가지고 검색한다.
 -i
 패턴에 대해 대/소문자 구분없이 모두 검색한다.
 -l
 패턴을 포함하고 있는 파일의 이름을 검색 줄 앞에 표기한다.
 -n
 패턴을 포함하고 있는 줄 번호를 같이 출력한다.
 -v
 패턴을 포함하고 있는 줄을 제외한 나머지 줄을 출력한다.
 -w
 패턴이 아닌 단어(Word)로 정확하게 일치하는 것을 검색한다.
 -A NUM
 패턴 이후 뒤따르는 NUM 줄을 출력한다.
 -B NUM
 패턴 이전 앞서는 NUM 줄을 출력한다. 
 -C NUM
 -A와 -B 옵션 혼합형이다. 

3). 메타 문자 (Meta Character)

일반 문자가 아닌 특별한 의미를 가지고 있는 문자를 메타 문자라 한다. grep 명령에서 사용 가능한 메타 문자는 아래와 같으며 이를 가지고 정규 표현식을 만든다.

메타 문자
내 용
 ^
 줄(Line)의 처음을 나타낸다.
 $
 줄의 마지막을 나타낸다.
 *
 0개 이상의 문자와 대치된다.
 .
 한개의 문자와 대치된다..
 []
 괄호([])사이에 있는 문자 집합 중 하나의 문자씩 대응
 [^]
 괄호([^...])사이에 있는 문자와 속하지 않은 문자와 대응 
 \
 뒤따르는 특수 문자를 일반 문자화 한다.
  \<
 단어의 시작을 나타낸다. 
 \>
 단어의 끝을 나타낸다. 

3). 정규 표현식 (Regular Expression)

특정한 규칙을 가진 문자열의 집합을 정규 표현식이라 한다. grep, perl, C 등 각각의 정규 표현식이 존재한다. grep 명령의 메타 문자를 사용하여 간단하게 정규 표현식에 대해 알아보자. 띄어쓰기가 있는 정규 표현식 때문에 이것을 단일 따옴표로 묶었다.


정규 표현식
내 용
 '^# For'
 줄(Line)의 처음 # For로 시작하는 줄을 출력한다. 
 'and$'
 줄의 마지막 and로 끝나는 줄을 출력한다.
 'mem*'
 * 앞 문자 m이 0개 이상인 문자열이 있는 줄을 출력한다. me, mem, memm 등 가능
 '.re'
 한개의 문자와 대치된다. ore, hre, are 등 가능
 '[Tt]he'
 The, the 로 검색되는 줄을 출력한다.
 '[^a-d]oot'
 aoot, boot, coot, doot를 제외한 oot로 검색되는 줄을 출력한다.
 '\<Con'
 Con으로 시작하는 단어가 있는 줄을 출력한다.
  'ing\>'
 ing로 끝나는 단어가 있는 줄을 출력한다.

4). 예제








CentOS 6.6 리눅스 기초] 11.2 텍스트 관련 명령 - cat, wc


안녕하세요. 썬구루입니다.

리눅스의 텍스트 파일 내용을 보기 위해 more, less, head, tail에 관련된 명령을 앞에서 알아보았습니다. 이 게시물에서는 cat과 wc 명령에 대해 알아보도록 하겠습니다.

■ cat 명령

파일들을 연결하거나 텍스트 파일 내용을 표준 출력으로 출력하기 위해 사용되는 명령입니다.

 more나 less 명령과 달리 파일의 내용을 멈춤 없이(끊김 없이) 출력하여 길이가 긴 텍스트 파일을 보기에는 부적합하다고 볼 수 있습니다. 파일 크기가 매우 큰 파일에 대해서는 split 명령으로 파일을 분할하여 전송할 수 있도록 만들어두는데 이 분할된 파일을 다시 합치기 위해 cat 명령을 사용할 수 있습니다.

1). 명령 형식

cat [옵션] [filename]

옵 션
내 용
 -b
 출력되는 각 줄(빈 줄이 아닌 줄)의 앞부분에 줄 번호가 추가되어 출력된다.
 -E
 출력되는 각 출의 마지막 부분에 $기호가 추가되어 출력된다.
 -n
 출력되는 각 줄(모든 줄)의 앞부분에 줄 번호가 추가되어 출력된다.
file1 file2 > new_file
 file1과 file2를 합쳐 new_file 파일을 만든다. 파일 합치기이다.



3). 예제

아래는 head 명령의 결과값 표준 출력을 cat 명령의 표준 입력으로 전달하여 /etc/passwd 파일의 첫 다섯 줄만 출력되도록 명령을 실행하였다. 그리고 -b 옵션을 사용하여 줄번호도 같이 출력되도록 만들었다. 줄번호는 절대적 번호가 아닌 상대적인 번호이다.


아래는 -b 옵션과 -n 옵션의 차이를 보여준다. -b 옵션은 빈 줄에 대해서는 줄번호를 출력하지 않는다. 하지만 -n은 모든 줄에 대해 줄 번호를 출력한다.


아래는 -E 옵션을 사용하여 줄의 마지막 부분에 $ 기호가 같이 출력되도록 하는 것을 보여준다. 그리고 cat 명령을 사용하여 /etc/passwd 와 /etc/shadow 파일을 합쳐 /tmp/test.txt 파일을 만드는 것을 보여준다. 이를 확인하기 위해 wc -ㅣ 명령으로 파일 줄 수를 알아낸 후 비교하였다.


■ wc 명령

줄 수, 단어 수, 문자 수를 알아내기 위해 사용하는 명령이다. 보통 줄 수를 확인하기 위해 많이 사용한다.

1). 명령 형식

wc [옵션] [filename]

2). 옵션

옵 션
내 용
-l
 줄 수를 출력한다.
-w
 단어 수를 출력한다.
-m
 문자 수를 출력한다.
-c
 Byte 수를 출력한다.

3). 예제

아래는 wc 명령의 각 옵션에 대한 결과값을 보여준다. 만약 옵션 없이 wc 명령을 사용한다면 줄, 단어, 문자 수가 한꺼번에 출력된다.