사용자의 요청 시점이 아닌 임의의 시점에서 background process로 시작되어 사용자나 프로세스에 서비스를 제공하는 프로그램
서버 : 요청한 서비스 제공
클라이언트 : 서비스 요청
방식 • Stand Alone
- 스스로 listen하며 항상 메모리에 상주한다. - 서비스 요청에 즉시 대응 가능하다. - 서비스 요청이 매우 드물거나 idle 한 경우 메모리를 낭비한다. • Super Daemon - Listen을 직접하지 않는다. - 메모리에 상주하지 않으며 서비스 요청이 있을때 xinetd에 의해 호출된다. - 점차 사라지는 추세
서비스 조회 # systemctl list-unit-files - 모든 서비스의 상태 확인
# systemctl [is-enabled | is-active] [서비스명] - is-enabled : 자동 실행 등록 여부 확인 - is-active : 현재 실행 여부
서비스 등록 # systemctl [enable | disable] [서비스명] - [enable | disable] : 등록 및 등록 해제
서비스 실행 # systemctl [start | restart | stop] [서비스명] - [start | restart | stop] : 실행, 재실행, 종료
systemctl 추가 옵션 # systemctl [옵션] [서비스명] - try-restart : 실행, 재실행, 종료 (에러났을 때 실행) - Reload : 설정 재구동 - status : 상태 확인
ntsysv
반드시 필요한 서비스만 구동한다. • 초기 서비스 목록 network : 네트워크 활성화 crond.service : 스케쥴 관리 display-manager.service : Xwindow 필수 gdm.service : Xwindow 필수 sshd.service : sshd
Target Target은 init의 run level과 동일한 개념이다. • run level보다 다양한 모드를 제공한다. Ex) - multi-user.target : init3 - graphical.target : init5 - rescue.target : init1, single user mode - emergency.target : 응급 복구 모드 • 제공되는 target 확인 # systemctl list-units --type target --all
Default target 확인 # systemctl get-default - 기본 타켓을 확인한다.
CentOS 7 이전버전 • /etc/inittab 파일에 설정됨
Default target 설정 # systemctl set-default [타켓] - 기본 타켓을 변경한다.
- 변경후 시스템 리부팅
타켓 변경 • 시스템 관리나 장비 손상 등으로 인한 타켓 변경 # systemctl [rescue | emergency] - 지정한 타켓으로 변경된다. - rescue : rescue.target - emergency : emergency.target : 응급 복구 모드
조인 문을 생성하는 과정 step 1. 지문에서 검색 대상과 조건을 구분한다. - 이를 통해 일단 SELECT 절, WHERE 절, ORDER BY 절을 구성한다. - SELECT 절은 step 5에서 작성자의 의도에 따라 추가될 수 있다. step 2. SELECT 절과 WHERE 절의 내용에 따라 정보를 검색할 테이블을 찾는다. step 3. 테이블간의 관계를 확인한다. - 관계를 확인하는 단계에서 테이블이 추가될 수 있다. step 4. 조인 조건을 기술한다. step 5. 전체 문장을 다듬는다.
예제 1. 위에 제시한 단계별로 지문으로부터 SQL문을 만들어 보자. - 화학과 학생의 일반화학 기말고사 점수를 검색한다.
step 1. 지문에서 검색 대상과 조건을 찾는다.
step 2. SELECT 절과 WHERE 절의 내용에 따라 정보를 검색할 테이블을 찾는다.
step 3. 테이블간의 관계를 확인한다.
step 4. 조인 조건을 기술한다.
step 5. 전체 문장을 다듬는다.
- 4학년 학생이 수강하는 과목을 강의하는 교수의 명단을 검색한다.
step 1. 지문에서 검색 대상과 조건을 찾는다.
step 2. SELECT 절과 WHERE 절의 내용에 따라 정보를 검색할 테이블을 찾는다.
step 3. 테이블간의 관계를 확인한다.
step 4. 조인 조건을 기술한다.
step 5. 전체 문장을 다듬는다.
자기 참조 조인 (Self Join)
: 같은 TABLE 조인 (TABLE 하나 더 생성하고 조인)
별명을 이용한 조인
SELECT 별명1.컬럼1, ... 별명2.컬럼1, ...
FROM 테이블 별명1, 테이블 별명2, ...
WHERE 조인_조건
AND 일반_조건
관련 파일 • /etc/rc.d/init.d/crond - 데몬 실행 스크립트(service를 이용한다.)
** 데몬 (=서비스) : 메모리에 실행되는 프로그램 • /usr/lib/systemd/system/crond.service - 데몬 실행 스크립트(systemctl을 이용한다.) • /etc/crontab - 기본 스케줄 일정 • /usr/bin/crontab - 스케줄 설정 프로그램 파일 (각 사용자가 스케줄 등록) • /etc/cron.allow, /etc/cron.deny - /usr/bin/crontab 이용 제한 - 등록된 계정에 대해서만 허용하거나 거부한다.
사용 형식
# crontab [옵션]
# crontab -u [유저] [옵션] • 옵션 - e : 스케줄 등록 . vi 환경으로 스케줄 등록 - l : 스케줄 확인 (출력) - r : 스케줄 삭제 • 명령어 형식 [분] [시] [일] [월] [요일] [작업내용] 시간 범위 - 분 : 0 ~ 59
- 시 : 0 ~ 23
- 일 : 1 ~ 31
- 월 : `1 ~ 12
- 요일: 0(일요일) ~ 6(토요일)
crontab 실습
시간 받아오는 것과 권한을 변경해 주었다.
a.txt 파일의 권한이 변경된것을 확인할 수 있다.
RSYNC
두 시스템간에 지정한 디렉토리 동기화
RSYNC 도 클라이언트와 서버가 있음.
이 둘을 동기화하는 것
RSYNC 데몬 구동 : standalone(스크립트로 실행)
rsync 설치 확인 # yum list rsync …… Installed Packages rsync.x86_64 3.0.9-18.el7 @anaconda
관련 파일 • 데몬 : /usr/bin/rsync (: 실제 실행되는 파일) • 관리 스크립트 : /usr/lib/systemd/system/rsyncd.service (: ntsysv 밑에 있는 것) • 백업 설정 파일 : /etc/rsyncd.conf (: rsync의 설정파일 / 수정하면 데몬 stop 후 start)
rsync 명령 옵션 • -v : 작업내역 출력 • -a : archive mode 작업 심볼릭 링크, 권한 등 모든 내용을 보존한다. • -z : 파일을 압축 전송한다. • --delete : source에서 지워진 파일을 destination에서도 지워준다.(완전 동기화 옵션) Local System 내에 동기화 rsync –avz /home/httpd/ /backup/httpd/
rsync 명령을 cron에 등록 • 매일 새벽 1시에 백업 수행 00 1 * * * rsync -avz 192.168.10.31::backup /backup
rpm -q : 질문 # rpm -qa : 시스템에 설치된 모든 패키지명 # rpm -qi 패키지명 : 패키지의 상세한 정보 # rpm -ql 패키지명 : 패키지의 파일 리스트 # rpm -qf 파일명 : 지정한 파일이 포함된 패키지
설치 및 업그레이드 # rpm [-ivh | -Uvh | -Fvh] 패키지명 옵션 -i : 설치 -U : 업그레이드 (이전버젼 미설치시 -i와 동일) -F : 업그레이드만 -v : 설치과정 출력 -h : 설치정도 출력 (#)
삭제 # rpm -e 패키지명 : 지정한 패키지를 삭제
추가 옵션 옵션 --nodeps : 의존성을 무시하고 작업한다. (삭제에 주로 이용) --force : 같은 버전의 패키지나 파일이 있어도 무시하고 작업진행 --oldpackage : 다운그레이드시 사용
YUM (Yellowdog Updater Manager; Modified)
: rpm의 고질적인 문제인 의존성을 해소하기 하기 위한 패키지 기술로 RPM과 동일한 형식의 설치 구조를 지원한다. YUM은 인터넷 repository를 이용하는 기술로 인터넷만 연결되어 있다면 지원되는 모든 프로그램을 설치 관리 할 수 있다.
yum list • 패키지를 확인한다. # yum list [installed] • 설치 가능한 모든 패키지 목록을 보여준다. • Installed : 설치된 패키지 목록을 보여준다 # yum list [패키지명] • 지정한 패키지의 설치 여부를 확인한다.
검색 추가 옵션 • repolist, search, provide # yum repolist • 시스템에 등록된 repository list를 출력한다. # yum search 문자열 • 패키지명이나 description에 문자열이 포함된 패키지들을 출 력한다. # yum provides 경로/문자열 • 문자열이 포함된 파일이 소속된 패키지들을 출력한다.
설치 # yum install [-y] 패키지명 • 패키지를 repository로 부터 설치한다.
업데이트 # yum update [-y] 패키지명 • 패키지를 repository로 부터 업데이트한다.
SELECT loc 근무처, d.dno 부서번호, dname 부서명,
eno 사번, ename 이름
FROM dept d, emp e
WHERE d.dno=e.dno
AND loc = '광주';
근무 부서번호 부서명 사번 이름
----- --------- ------- ------- ----------
광주 30 ITEA 1003 양선호
광주 30 ITEA 2003 정의찬
광주 30 ITEA 2007 이초록
예제 3. 각 직원의 급여를 10% 인상한 경우 급여 등급을 검색한다.
SELECT eno 사번, ename 이름,
sal*1.1 인상된급여, grade 등급
FROM emp, salgrade
WHERE sal*1.1 BETWEEN losal AND hisal;
사번 이름 인상된급여 등급
------- ---------- ---------- ----------
0309 김선유 990 5
0702 김민지 1210 4
2002 제갈민 1672 4
2007 이초록 2187.9 3
2008 윤고은 2310 3
0269 권나현 2860 3
0801 천유정 3190 2
SELECT p.pno 교수번호, pname 이름, section 학과, cno 과목번호, cname 과목이름
FROM professor p, course c
WHERE section = '화학'
AND p.pno = c.pno;
교수번호 이름 학과 과목번호 과목이름
--------- ---------- ------- --------- ------------
1001 송강 화학 1211 일반화학실험
1004 시진영 화학 1212 일반화학
1006 장청아 화학 1213 유기화학
1004 시진영 화학 1214 무기화학
1006 장청아 화학 1216 환경화학
1007 이초아 화학 1217 고분자화학
1008 문규식 화학 1218 생화학
5. 화학과 1학년 학생의 기말고사 성적을 검색한다.
SELECT major 전공, syear 학년, s.sno 학번, sname 이름, c.cno 과목번호, cname 과목명, result 성적
FROM student s, score r, course c
WHERE major = '화학'
AND syear = 1
AND s.sno = r.sno
AND c.cno = r.cno;
전공 학년 학번 이름 과목번호 과목명 성적
------- ---------- ------- ---------- --------- ------------ ----------
화학 1 925309 오우재 1211 일반화학실험 71
화학 1 945302 김람석 1212 일반화학 85
화학 1 945303 남궁경아 1212 일반화학 44
화학 1 945314 이철윤 1212 일반화학 47
화학 1 925309 오우재 1213 유기화학 83
화학 1 925309 오우재 1214 무기화학 63
화학 1 945302 김람석 1214 무기화학 93
6. 일반화학 과목의 기말고사 점수를 검색한다.
SELECT c.cno 과목번호, cname 과목이름, s.sno 학번, sname 이름, result 성적
FROM student s, course c, score r
WHERE cname = '일반화학'
AND c.cno = r.cno
AND s.sno = r.sno;
과목번호 과목이름 학번 이름 성적
--------- ------------ ------- ---------- ----------
1212 일반화학 894501 장봉철 84
1212 일반화학 905301 유태지 87
1212 일반화학 905302 정욱상 82
1212 일반화학 905603 정용정 84
1212 일반화학 913901 황수현 97
1212 일반화학 913902 황진혜 70
1212 일반화학 913903 정도정 57
7. 화학과 1학년 학생의 일반화학 기말 고사 점수를 검색한다.
SELECT major 전공, syear 학년, s.sno 학번, sname 이름, cname 과목이름, result 성적
FROM student s, course c, score r
WHERE major ='화학'
AND syear = 1
AND cname = '일반화학'
AND s.sno = r.sno
AND r.cno = c.cno;
전공 학년 학번 이름 과목이름 성적
------- ---------- ------- ---------- ------------ ----------
화학 1 945302 김람석 일반화학 85
화학 1 945303 남궁경아 일반화학 44
화학 1 945314 이철윤 일반화학 47
8. 화학과 1학년 학생이 수강하는 과목을 검색한다.
SELECT major 전공, syear 학년, s.sno 학번, sname 이름, c.cno 과목번호, cname 과목이름
FROM student s, course c, score r
WHERE syear = 1
AND major = '화학'
AND s.sno = r.sno
AND r.cno = c.cno;
전공 학년 학번 이름 과목번호 과목이름
------- ---------- ------- ---------- --------- ------------
화학 1 925309 오우재 1211 일반화학실험
화학 1 945302 김람석 1212 일반화학
화학 1 945303 남궁경아 1212 일반화학
화학 1 945314 이철윤 1212 일반화학
화학 1 925309 오우재 1213 유기화학
화학 1 925309 오우재 1214 무기화학
화학 1 945302 김람석 1214 무기화학
9. 일반화학 과목에서 평가 점수가 A인 학생의 명단을 검색한다.
select * from scgrade;
GRADE HISCORE LOSCORE
------- ---------- ----------
A 100 85
B 84 70
C 69 55
D 54 40
F 39 0
SELECT c.cno 과목번호, cname 과목이름, s.sno 학번, sname 이름, result 성적, grade 평가점수
FROM student s, course c, score r, scgrade
WHERE cname = '일반화학'
AND result BETWEEN loscore AND hiscore
AND grade = 'A'
AND s.sno = r.sno
AND r.cno = c.cno;
과목번호 과목이름 학번 이름 성적 평가점수
--------- ------------ ------- ---------- ---------- ---------
1212 일반화학 905301 유태지 87 A
1212 일반화학 913901 황수현 97 A
1212 일반화학 913908 황진혜 98 A
1212 일반화학 914504 심빈경 88 A
1212 일반화학 915303 정욱주 93 A
1212 일반화학 915602 임주영 96 A
1212 일반화학 918205 독고낭도 94 A
10. 송강 교수의 과목을 수강하는 학생의 기말고사 점수를 성적 순서로 검색한다.
SELECT p.pno 교수번호, pname 교수이름, cname 과목명, s.sno 학번, sname 이름, result 성적
FROM student s, professor p, course c, score r
WHERE pname = '송강'
AND s.sno = r.sno
AND r.cno = c.cno
AND c.pno = p.pno
ORDER BY result DESC;
교수번호 교수이름 과목명 학번 이름 성적
--------- ---------- ------------ ------- ---------- ----------
1001 송강 일반화학실험 924505 서찬호 98
1001 송강 일반화학실험 894501 장봉철 97
1001 송강 일반화학실험 913901 황수현 94
1001 송강 일반화학실험 925602 강아영 94
1001 송강 일반화학실험 915602 임주영 93
1001 송강 일반화학실험 923902 김호야 93
1001 송강 일반화학실험 924502 은정현 91
11. 화학과 1학년 학생의 기말고사 성적을 학점(A,B,C,D,F)으로 검색한다.
SELECT major 전공, syear 학년, s.sno 학번, sname 이름, c.cno 과목번호, cname 과목명,
result 학점, grade 평가점수
FROM student s, course c, score r, scgrade
WHERE major = '화학'
AND syear = 1
AND result BETWEEN loscore AND hiscore
AND s.sno = r.sno
AND r.cno = c.cno;
전공 학년 학번 이름 과목번호 과목명 학점 평가점수
------- ---------- ------- ---------- --------- ------------ ---------- ---------
화학 1 945303 남궁경아 1216 환경화학 99 A
화학 1 925309 오우재 2363 화학실험 99 A
화학 1 945314 이철윤 2370 고생물학 99 A
화학 1 945303 남궁경아 2368 핵화학 99 A
화학 1 945303 남궁경아 2366 물리실험 99 A
화학 1 945303 남궁경아 2365 전자기학 98 A
화학 1 925309 오우재 1228 위상수학 96 A
12. 송강 교수가 강의하는 과목에서 평가 점수가 A인 학생의 명단을 과목명과 함께 검색한다.
SELECT p.pno 교수번호, pname 교수이름, c.cno 과목번호, cname 과목명, s.sno 학번, sname 이름,
result 학점, grade 평가점수
FROM student s, professor p, course c, score r, scgrade
WHERE pname = '송강'
AND result BETWEEN loscore AND hiscore
AND grade = 'A'
AND s.sno = r.sno
AND r.cno = c.cno
AND p.pno = c.pno;
교수번호 교수이름 과목번호 과목명 학번 이름 학점 평가점수
--------- ---------- --------- ------------ ------- ---------- ---------- ---------
1001 송강 1211 일반화학실험 894501 장봉철 97 A
1001 송강 1211 일반화학실험 905302 정욱상 89 A
1001 송강 1211 일반화학실험 913901 황수현 94 A
1001 송강 1211 일반화학실험 915303 정욱주 86 A
1001 송강 1211 일반화학실험 915601 강태용 87 A
1001 송강 1211 일반화학실험 915602 임주영 93 A
1001 송강 1211 일반화학실험 923902 김호야 93 A
13. 화학과 1학년 학생에게 강의하는 교수의 명단을 검색한다.
SELECT major 전공, syear 학년, s.sno 학번, sname 이름, p.pno 교수번호, pname 교수이름
FROM student s, professor p, course c, score r
WHERE major = '화학'
AND syear = 1
AND s.sno = r.sno
AND r.cno = c.cno
AND c.pno = p.pno;
전공 학년 학번 이름 교수번호 교수이름
------- ---------- ------- ---------- --------- ----------
화학 1 925309 오우재 1001 송강
화학 1 945302 김람석 1004 시진영
화학 1 945303 남궁경아 1004 시진영
화학 1 945314 이철윤 1004 시진영
화학 1 925309 오우재 1004 시진영
화학 1 945302 김람석 1004 시진영
화학 1 945303 남궁경아 1004 시진영
route 출력 필드 • Destination: 목적지 • Gateway: 게이트웨이 주소 • Genmask: 목적지 네트워크의 넷마스크 주소. - 255.255.255.255 : 목적지 호스트의 주소 - 0.0.0.0 : 기본 게이트웨이 주소 • Flags: 해당 경로에 대한 정보를 알려주는 기호. U(up):활성화된 경로
H(host):호스트 주소, G(gateway):게이트웨이 • Metric: 목적지 네트워크까지의 거리 • Ref: 경로를 참조한 횟수 • Use: 경로를 탐색한 횟수 • Iface: 패킷이 오가는 데 사용할 네트워크 인터페이스
서식 # route [add | del] –net [ip] netmask [mask] gw [ip] ex) # route add –net 1.2.3.0 netmask 255.255.255.0 gw 192.168.11.2 # route add –net 1.2.3.4 netmask 255.255.255.255 gw 192.168.11.2 # route add default gw 192.168.11.1 enp3s0 # route del -net 192.168.10.0 netmask 255.255.255.0 enp3s0 ** 추가 경로는 여러 서브넷 환경을 가진 시스템에서 제한적으로 사용 • 시스템에는 단 하나의 default gateway만 지정가능함으로 추가적인 경로에 대한 설정은 직접 해야한다. (ICMP redirect 등을 허용 X)
※ Windows route 명령 route –p add [IP] MASK [mask] [GW_IP]
하나의 물리적인 인터페이스를 여러 개의 논리적인(?) 인터페이스로 구현 IP를 여러 개 설정하는 방법
인터페이스가 여러개인 것처럼 구성
같은 MAC address / 다른 IP
방법 1. ifcfg-ens32를 ifcfg-ens32:0, ifcfg-ens32:1 등으로 복사한 이후 각각 다른 device와 IP를 설정한다. ⇒ subnet은 동일하거나 달라도 상관없다. ⇒ 설정후 nic를 reset한다. 2. ifconfig 명령을 이용한다. ⇒ ifconfig ens32:0 192.168.10.32
실습
/etc/sysconfig/network-scripts에 들어가 ens32를 ens32:0로 복사한다.
cat 명령어를 이용해 잘 복사된 것을 확인한다.
[ vi ifcfg-ens32:0 ]로 위와 같이 NAME, DEVICE, IP를 수정한다.
if (조건) {
문장1;
문장2;
....
}
else if (조건2) {
문장1;
문장2;
....
}
else if (조건3) {
문장1;
문장2;
....
}
else {
문장1;
문장2;
....
}
$a = "";
if (!isset($a)) echo(" \$a의 값이 없습니다.2<br>"); // FALSE
if (is_null($a)) echo(" \$a의 값이 없습니다.1<br>"); // FALSE
if (empty($a)) echo(" \$a의 값이 없습니다.3<br>"); // TRUE
빈 값("")
empty() : TRUE
is_null() , !isset() : FALSE
(PHP가 빈 값과 널 값을 서로 다르게 봄)
switch문
switch (변수 또는 수식) {
case 값1 :
문장1;
문장2;
...
break;
case 값2 :
문장1;
문장2;
...
break;
...
default :
문장1;
문장2;
...
}
<?
$a = $_POST["a"];
$b = $_POST["b"];
if ($a>$b) {
echo(" 입력 값중 큰 값은 \$a($a)입니다. ");
}
if ($b>$a) {
echo(" 입력 값중 큰 값은 \$b($b)입니다. ");
}
if ($a==$b) {
echo(" 두 입력 값이 동일합니다.. ");
}
?>
실행결과
예제 2-2. 다음 표를 보고 입력된 급여에 따라 각 사원의 내년도 지급 받을 급여를 출력한다. * 입력은 만원 단위로 입력한다. ex) 1,230,000원 → 123만원
예제 2-4. 다음에 제시하는 문제점과 해결책을 이용, 이전 [프로그램]를 수정한 프로그램을 완성하세요
- 문제점 인상폭이 각 등급별로 정의되면 급여가 역전되는 현상이 나타난다. 예를 들어 급여가 99만원이었던 5등급 사 원은 15% 인상으로 114만원이 되지만 101만원인 4등급 사원은 10% 인상으로 111만원이 되어 인상 후, 자 신의 급여 등급보다 낮은 사원보다 적은 급여를 받게 된다. - 해결책 역전 현상이 나타나는 경우 한 단계 낮은 등급의 최대 급여와 동일하게 급여를 조정해주기로 결정했다. 예를 들어 5등급의 최대 급여는 100만원으로 인상된 급여는 115만원인데 만일 4등급 사원 중에 인상 급여가 115 만원에 미치지 못하는 사원이 있다면 해당 사원의 인상된 급여는 115만원으로 조정해 주는 것이다.