반응형

스트림 (stream)

직역하면 흐르다 인데, 원래는 물이 흐르는 시냇물을 의미한다.

컴퓨터에서는 데이터의 흐름으로 말한다. 즉, 데이터가 바이트이기에 바이트의 흐름이다.

흐르기 위해서는 통로가 필요하기때문에 통로라고도 부른다.

컴퓨터에서 스트림
: 데이터의 이동 통로 혹은 바이트의 흐름

linux 에서 스트림은 network 를 연결할 때, device 를 연결할 때 process 끼리 소통할 때 사용된다. 

 

linux 는 파일로 모든 것이 이루어져 있기 때문에 파일에 관한 시스템 콜인 open, close, read, write 가 stream 을 다루는 함수가 된다. open 함수는 fd 값을 반환시키는데, fd가 바로 스트림이 된다. (fd 가 파일을 연결시켜주는 통로가 되기 때문에) 

int open(const char* path, int flags, mode_t mode)

 return 값이 int 형인 fd 가 된다. 즉 스트림을 만들어주는 함수가 이 open 함수가 되는 것이다. 

그렇게 fd (stream) 을 받았으면 그 스트림에 데이터를 흘려 보낸다. 어떻게? write 함수로 

ssize_t write(int fd, const *buf, size_t bufsize)

이게 write (스트림, 보낼 데이터, 보낼 데이터의 크기) 가 되는 것이다.

받는 쪽에서는 read 로 읽는다.

ssize_t read (int fd, void *buf, size_t bufsize)

read (스트림, 읽을 데이터, 읽을 데이터의 크기) 가 된다.

 

close의 경우 스트림을 닫는 역할을 한다. 

int close(int fd)
반응형
반응형

시스템 콜(System Call) 

시스템 콜은 커널에게 요청하는 함수이다. 

커널은 하드웨어와 소프트웨어를 관리하기 때문에, 커널에게 요청해야 할 수 있는 작업들을 하기 위해서 사용하는 것이 시스템 콜 함수이다.

 

예) 프로세스를 생성한다고 가정한다. (프로세스 생성은 fork 함수로 한다)

fork 함수 사용 시

이렇게 시스템 콜 함수인 fork 함수를 사용하면 커널에게 요청을 하게 되고 커널이 그에 해당하는 작업을 해주는 것이다. 

 

API (Application Programming Interface)

 

프로그래밍을 통해 무언가를 사용할 때 인터페이스이다. 인터페이스란 사용자와 소통하는 창구이다. 맨날 글로만 읽어서 소통하는 창구인지는 알겠으나 와닿는 개념이 아니라서 따로 정리를 해놔야겠다... 음.. 예를 들자면 음식점 직원 같다. 

음식을 어떻게 주문하는 지?, 어떤 음식이 있는 지?, 화장실은 어디있는지? 처음 가는 식당의 경우 잘 알지 못한다. 따라서 그 음식점을 사용하기 위한 창구로 직원과의 소통을 얘기할 수 있을 것 같다. 이런 것들을 인터페이스(Interface)라고 한다. 따라서 커널과 소통하기 위한 함수로 시스템 콜 함수가 있는 것이다. "즉, 커널의 API는 시스템 콜이다" 라고 설명할 수 있고 밑에 사진과 같이 API는 시스템 콜을 포함하는 더 큰 개념이다. 

 

참고 : 모두를 위한 리눅스 프로그래밍 / 아오키 미네로 / 제이펍 출판사

반응형
반응형

크론(cron)

 한마디로 예약작업이라고 생각하면 됩니다. 예약된 시간에 반복적인 작업을 하는 작업인데, 우리가 서버를 켜지않아도 작업한다. 즉, 리눅스에서는 터미널이 끊어져도 작업을 한다는 것이다. 터미널이 끊어져도 작업을 한다는 것은 백그라운드에서 돌아간다는 것이고 이것은 곧 데몬이라는 얘기가 된다.

 

크론탭(crontab)

 크론(cron)작업을 하기 위한 설정 파일을 크론탭(crontab)이라고 한다. 크론(cron) 작업을 하려면 크론탭(crontab)에 설정해놓으면 작업을 수행한다. 

 

설정 방법

명령어 : crontab -e

크론탭 파일이 열리면서 vi 에디터와 동일하게 편집할 수 있다. vi에디터는 문서작업을 하는 편집기라고 생각하면 된다. 

입력을 하기 위해서는 i, a, I, A, o, O 를 누르면 입력모드로 들어가지고 esc 키를 통해 명령모드로 가지며 ':' 을 누르면 ex모드가 진행된다. ':' 버튼은 반드시 명령모드에 입력해야하고 :q는 나가기 :q! 저장하지않고 종료 :wq 저장하고 종료하기 이다. vi에 대한 설명은 나중에 적을테니 우선 이정도만 알고 있도록 한다.

 

명령어 : crontab -l

명령어 crontab -e를 하여 입력한 내용을 보여주기만 한다. -e는 편집기가 열리면서 적는 것까지 가능하지만, -l 옵션은 화면에 보여주기만 한다. 간단하게 크론탭(crontab)에 적힌 내용만 보고싶다고 하면 -l 옵션을 쓰는 것이 좋다. 

 

입력 방법

crontab -e 명령어를 통해 에디터로 열렸다면 이제 몇시에 작업할 것인지 설정하여야한다. 그 방법을 알아보자~

* * * * * ls -al 
* * * * * root ls -al
요일 사용자
(생략가능)
명령어

시의 표기법은 0~23시까지 사용한다.

요일의 표기법은 0~6까지 사용한다. 0 = 일, 1 = 월. 2 = 화, 3 = 수, 4 = 목, 5 = 금, 6 = 토

 

예를 들어 30 11 * * * ls

라고 한다면 11시 30분에 ls 명령어를 실행한다 라는 뜻이다. 

또 다른 예로 * 3 * * * ls

라고 하면 새벽 3시에 ls 명령어를 실행한다 라는 뜻이다.  

쓰임새

 크론(cron)작업은 예약작업이라고 앞서 설명하였다. 이는 반복적인 작업을 수행할 때가 빛나는 작업이다. 따라서 그 시간에 항상하는 작업을 크론탭(crontab)에 설정해놓는다.

 첫번째로는 배치작업이 있다. 일괄작업으로 주기적으로 해야하는 이 작업은 크론(cron)작업이 유용하다. 배치작업에 대해 더 자세한 설명은 밑에 링크를 참고하면 된다.

배치작업 참고 : limkydev.tistory.com/140

 두번째로는 백업작업이 있다. 백업은 항상해야되는 일이다. 언제 서버 혹은 컴퓨터가 사망할지 모르기 때문에 백업은 필수이다. 따라서 내가 한번 크론탭(crontab)에 적용해 놓으면 따로 항상 귀찮게 백업할 필요가 없고, 나중에 파일을 없애더라도 복구가 가능할 것이다.  

 

리눅스마스터 2급 문제

다음 중 백업스크립트가 30분 주기로 실행되도록 crontab에 설정하는 내용으로 알맞은 것은? (20년도 3회차)

1. */30 * * * * /etc/backup.sh
2. * */30 * * * /etc/backup.sh
3. * * */30 * * /etc/backup.sh
4. * * * */30 * /etc/backup.sh

=> 주기로 나눌때 쓰는 '/' 를 30으로 나누는데 분을 나누어야한다. 분의 위치는?? 맨 앞이다. 즉 1번이 정답이다.

 

다음 중 cron에 관한 설명으로 알맞은 것은? (20년도 2회차)

1. cron은 root 권한으로만 수행 가능하다.
2. crontab 파일은 총 5개의 필드로 구성되어 있다.
3. 주기적으로 실행하는 작업만 등록하여 사용할 수 있다.
4. 시스템 운영에 필요한 작업은 /var/crontab 파일에 관련 정보가 저장된다.

=> 주기적인 실행을 위해 작성하기 떄문에 3번이 정답이다. 

cron은 root 권한이 아니라 계정별로 작업이 가능하다. 

crontab은 /etc/crontab 파일에 관련 정보가 저장된다. 

7개의 필드로 이루어져있다. 

* * * * * root ls -al

분. 시간. 일. 월. 요일. 사용자. 명령어

(사용자는 생략가능하고, 명령어를 필드로 생각하지 못하여 헷갈릴 수 있다)

 

다음 조건으로 cron을 이용해서 일정을 등록할 때 알맞은 것은? (20년도 2회차)

매시 30분에 백업 스크립트인 /etc/backup.sh가 실행 되도록 설정한다.
1. 30 * * * * /etc/backup.sh
2. */30 * * * * /etc/backup.sh
3. * 30 * * * /etc/backup.s
4. * */30 * * * /etc/backup.sh

=> 매시 30분이다. 30분을 주기로 한다는 뜻인데, 주기를 쓸 때 사용하는 '/'를 분의 위치에 쓰면된다. 맨 앞이 분의 위치이고 /30 의 주기를 주는 1번이 정답이다. 

 

다음 조건으로 cron을 이용해서 일정을 등록할 때 알맞은 것은? (19년도 4회차)

매주 월요일과 목요일 오전 10시에 점검 스크립트인 /etc/check.sh가 실행되도록 설정한다.
1. 10 0 1-4 * * /etc/check.sh
2. 0 10 1,4 * * /etc/check.s
3. 10 0 * * 1-4 /etc/check.sh
4. 0 10 * * 1,4 /etc/check.sh

=> 시의 위치에 10이 들어가야하고 요일의 위치에 월과 목요일을 넣어야한다. 

시의 위치는 앞에서 2번째, 요일의 위치는 앞에서 5번째에 위치한다. 월요일 에서 목요일 이라면 1-4를 쓰겠지만, 월요일과 목요일만 작업하기 때문에 1,4 가 되어야한다. 정답은 4번이다. 

 

다음 설명을 수행하기 위한 명령으로 알맞은 것은? (19년도 4회차)

저장된 crontab 설정 파일을 삭제하기 전에 사용자에게 확인한다.
1. crontab -ir
2. crontab -id
3. crontab -q -r
4. crontab -q -d

=> 잘 나오지 않는 옵션이라 외워버렸다. 삭제하기 전에 사용자에게 확인하는 옵션은 -ir 이다. 

 

 

참고 : jdm.kr/blog/2

jhnyang.tistory.com/68

 

반응형

'LINUX > 리눅스마스터 2급' 카테고리의 다른 글

[리눅스마스터 2급] 소유권(chown, chgrp)  (0) 2020.10.04
반응형

소유권(Ownership)

-> 파일이나 디렉토리를 소유하여 지배하는 권리를 말한다. 

소유권은 `ls -l` 명령어로 확인할 수 있는데, `ls -l` 명령어를 통해 소유권이 나타나는 부분은 2개의 필드이다.

 

[posein@www ~]$ ls -l test.txt
-r--r--r-- 1 posein posein 80 Oct 4 19:45 test.txt

빨간색 posein 은 소유권을 가진 사용자

파란색 posein 은 그룹 소유권

을 나타냅니다.

 

이런 소유권과 관련된 명령어들

 

chown

-> 파일이나 디렉토리의 소유권 및 그룹 소유권을 변경하는 명령어

사용법
chown [option] owner[:group] file(s)

옵션
-R : 하위 디렉토리를 포함하여 디렉토리 내부의 모든 파일의 소유 권한을 변경한다. ( --recursive )

ex) chown posein:jhkim test.txt
파일의 소유자는 posein, 소유 그룹은 jhkim으로 설정한다. ( ':' 대신에 ',' 를 사용하여도 된다 )


chgrp

-> 파일이나 디렉토리의 소유 그룹을 바꾸는 명령어이다. 특정한 사용자가 여러 그룹에 속한 경우 본인 소유의 파일을 본인이 속한 그룹내에서 소유권을 변경시킬 수 있다. 

사용법
chgrp [option] group file(s)

옵션
-R : 하위 디렉토리를 포함하여 디렉토리 내부의 모든 파일의 접근 권한을 변경한다. ( --recursive )

ex) chgrp jhkim test.txt
test.txt 파일의 그룹 소유권을 jhkim으로 변경한다.

리눅스마스터 2급 출제문제

다음 chgrp 옵션 중 하위 디렉토리를 포함하여 디렉토리 내부의 모든 파일의 그룹 소유권을 ihd으로 변경할 때 사용하는 옵션으로 알맞은 것은? (16년도 1회차)

1. -h
2. -f
3. -R
4. -v

-> recursive 는 재귀라는 뜻이다. 이 약자인 r을 대문자로 한 옵션이 바로 하위디렉토리를 포함하는 옵션(-R)이다.


다음 파일의 소유 그룹을 ihd로 지정하려고 할 때 ( 괄호 ) 안에 들어갈 명령으로 알맞은 것은? (16년도 2회차)

[root@ihd ~]# ( 괄호 ) :ihd example.txt

1. cd
2. chgrp
3. chmod
4. chown

-> 문제에서 소유 그룹이라고 해서 chgrp와 헷갈릴 수 있으나, 괄호 뒤의 :ihd 부분이 chown 명령어 사용법과 일치하기 때문에 chown 명령어가 정답이다.


다음 명령에 대한 설명으로 알맞은 것은? (16년도 4회차)

[root@www ~]# ls -l test.txt
-rw-rw-r-- 1 root grp1 4 AUG 8 13:48 test.txt
[root@www ~]# chgrp grp2 test.txt

1. root가 grp2로 변경된다.
2. grp1이 grp2로 변경된다.
3. test.txt가 grp2로 변경된다.
4. 해당 명령은 틀린 명령으로 실행되지 않는다.

-> chgrp라는 명령어는 소유 그룹을 바꾸는 명령어이기 때문에 ls -l의 4번째 필드인 grp1이 grp2로 바뀐다.

 

 

반응형

+ Recent posts