사용자 등록 정보 

/etc/passwd 

- 사용자의 기본 등록 정보가 저장 

- 사용자 패스워드의 경우 shadow password 사용 

- useradd 명령을 이용 등록 

- 사용자의 직접수정이 가능(추천 X)
# cat /etc/passwd 

root:x:0:0:root:/root:/bin/bash 

계정:암호:UID:GID:주석:홈디렉토리:쉘

(사용자 정보 : password : uid# : 그룹#(마스터그룹=기본그룹) : 주석 : 홈디렉토리 : 쉘)

 

사용자 패스워드, 암호정책 정보 

- /etc/shadow

# cat /etc/shadow  

ora12c:$6$2JwICah……94Bf2S9Bq/:18162:0:99999:7:::

계정 : 암호 : 최종변경일 : 암호최소사용일: 암호최대유효기간 : 암호 만료까지 경고기간 : 암호만료뒤 계정 폐쇠까지 기간 : 계정이 만료일 : 예비

 

그룹의 등록 정보 

/etc/group 

- groupadd 명령을 이용 그룹 등록
# cat /etc/group   :  그룹 확인

root:x:0:

…………

dba:x:1100:ora12c,ora11g,ora10g,root

그룹명:암호:GID:소속 계정

- 계정은 여러 그룹에 속하고 기본 소속 그룹은 /etc/passwd 파일 에 등록 된다.

 

groupadd

: 그룹 등록

사용자를 등록하기 전에 반드시 사용자가 속할 그룹 필수
# groupadd   [-g  [그룹번호]]   [그룹명]
ex) # groupadd  st

옵션 

-g  : 생성 그룹의 GID 번호를 지정

 - 할당하지 않으면 1001 이상 중복되지 않은 값으로 GID가 자동 할당

 - GID번호는 식별자일 뿐 값 자체에는 의미 X

-r  : 1000번 이하의 GID 번호를 자동으로 할당

 - 1000번 이하의 GID는 시스템이 daemon이나 관리 목적으로 사용

 

groupdel 

: 그룹 삭제 (그룹삭제는 반드시 그룹명을 이용)
# groupdel   [그룹명]
ex) # groupdel  st

 

그룹 생성 및 삭제 실습

 

useradd (adduser) 

계정 생성
# useradd [옵션] [사용자명]
옵션 

-u  : uid지정 

-g  : gid나 그룹명지정 (default : 계정명) 

-d  : 홈디렉토리 지정 (default : /home/[계정명]) 

-G  : 보조 그룹 지정 

-D : 기본 설정 확인 및 변경 

-s : 쉘 지정  (로그인이 필요 없는 관리용 계정은 /sbin/nologin으로 설정한다.)

 

사용자 생성 실습

 

userdel 

: 계정 삭제
# userdel  -r  [사용자명]
옵션 

-r  : 계정에 귀속된 홈디렉토리와 mailbox등을 모두 삭제한다. (반드시 사용!)

 

사용자 삭제 실습

 

특별한 사용자 생성 옵션
옵션 

-M : 메일 전용 계정 생성 . 홈디렉토리가 생성되지 않는다. 

-r : 999번 이하의 UID 자동 할당

 서비스를 위한 더미 계정으로 보통 실 사용자가 없다.

 Shell은 /sbin/nologin으로 지정한다. (-s 옵션으로 지정)

 홈디렉토리가 생성되지 않는다.

 

passwd 

사용자의 암호 변경 

관리자는 다른 사용자의 암호를 임의로 변경 가능 (단 다른 사용자의 암호를 확인 할 수 X)
# passwd  [사용자계정] 

# passwd

 

사용자 암호 변경 실습

root는 사용자의 암호를 변경 가능하다. 

경고 메시지가 떠도 재입력하면 암호 설정이 가능하다.

st01 암호를 설정하고 로그인한다.

① /etc/default/useradd,  /etc/login.defs 

② /etc/passwd, /etc/group 

③ 홈디렉토리 생성 

④ /etc/skel/ 파일 복사 

⑤ /var/mail/ 계정 파일 생성

 

/etc/default/useradd
• GROUP : 기본등록 그룹의 GID 

• HOME : 생성될 홈 디렉토리의 위치 

• INACTIVE : 패스워드 만료 이후의 유효(기간)여부설정 

• EXPIRE : 계정종료일자지정 • SHELL : 기본 사용 쉘 지정 

• SKEL : 홈 디렉토리에 복사할 기본환경파일위치
• useradd -D 를 이용 수정한다. (기본설정 수정)

 /etc/login.defs 

• MAIL_DIR  : 매일이 저장되는 디렉토리 설정 

• PASS_MAX_DAYS : 패스워드 유효기간 (99999 :  무한대) 

• PASS_MIN_DAYS : 지정 기간내에는 패스워드 변경불허 

• PASS_MIN_LEN : 패스워드 최소길이 

• PASS_WARN_AGE : 패스워드 grace time 

• UID_MIN : 생성 UID 의 최소 숫자 

• UID_MAX : UID 의 최대 가능 숫자 

• GID_MIN : 생성 GID 의 최소 숫자 

• GID_MAX : GID 의 최대 가능 숫자 

• CREATE_HOME : 홈디렉토리 생성 여부

 

안전한 패스워드 설정

• 영문 대문자, 소문자, 숫자, 특수 문자 중에 둘 이상을 포함한다. 

• 반드시 8글자 이상으로 한다. 

• ID와 연관성 있거나 개연성이 있는 단어는 사용하지 않는다. 

  → 위 세가지는 사전 대입 공격에 대비한다. 

• 시스템마다 상이한 패스워드를 이용한다. 

• 가급적 자주 변경한다.(최소 6개월에 한번)

 

정렬된 데이터 검색

SQL> SELECT [DISTINCT | ALL] 컬럼, 컬럼 ...  
    FROM  테이블
    ORDER BY 컬럼 [ASC/DESC], 컬럼 [ASC/DESC].......

ASC      :  오름차순 (1, 2, 3, ...)

DESC   :  내림차순 (10, 9, 8, ...)

 

예제 1.  사원의 이름을 급여 순으로 검색한다.

SELECT eno 사번, ename 이름, sal 급여
FROM emp
ORDER BY sal DESC;

사번    이름             급여
------- ---------- ----------
0001    안영희           4800
1001    문시현           4500
2003    정의찬           4350
1003    양선호           4300
1002    김주란           4100
0120    김경현           4000
2001    남궁연호         3950

 

예제 2. 사원의 사번과 이름을 연봉 순으로 검색한다.

SELECT eno 사번, ename 이름, sal*12+NVL(comm,0) 연봉
FROM emp
ORDER BY 연봉 DESC;

사번    이름             연봉
------- ---------- ----------
0001    안영희          57600
1001    문시현          54520
2003    정의찬          52200
1003    양선호          51600
0120    김경현          50500
1002    김주란          49530
0201    안영숙          48800

 

정렬을 이용한 그룹 검색

예제 3. 업무 별로 사원의 급여를 검색한다.

SELECT job 업무, eno 사번, ename 이름, sal 급여
FROM emp
ORDER BY 업무;

업무    사번    이름             급여
------- ------- ---------- ----------
개발    2002    제갈민           1520
개발    2001    남궁연호         3950
개발    2003    정의찬           4350
개발    2007    이초록           1989
개발    2008    윤고은           2100
경영    0001    안영희           4800
모델링  1002    김주란           4100

 

예제 4. 각 부서별로 사원의 급여를 검색한다. 단 급여를 많이 받는 사람부터 검색한다.

SELECT dno 부서번호, eno 사번, ename 이름, sal 급여
FROM emp
ORDER BY 부서번호, 급여 DESC;

부서 사번    이름             급여
---- ------- ---------- ----------
01   0001    안영희           4800
01   0201    안영숙           3900
01   0202    손하늘           3510
02   0301    이승철           3400
02   0302    박선경           3300
02   0801    천유정           2900
02   0702    김민지           1100

 

실습

1. 성적순으로 학생의 이름을 검색한다. 

SELECT sno 학번, avr 성적, sname 이름
FROM student
ORDER BY avr DESC;

학번          성적 이름
------- ---------- ----------
924501           4 권석복
918205        3.99 독고낭도
933904        3.98 임영현
938202        3.93 신섭인
938204        3.92 최현
945601         3.9 심정용
915601         3.9 강태용

 

2. 학과별 성적순으로 학생의 정보를 검색한다. 

SELECT major 학과, avr 성적, sno 학번, sname 이름
FROM student
ORDER BY major, avr DESC;

학과          성적 학번    이름
------- ---------- ------- ----------
물리             4 924501  권석복
물리          3.33 914504  심빈경
물리          3.33 914502  문수보
물리          3.22 934504  갑서진
물리           3.2 944503  곽득용
물리             3 924505  서찬호
물리          2.99 924502  은정현

 

3. 학년별 성적순으로 학생의 정보를 검색한다. 

SELECT syear 학년, avr 성적, sno 학번, sname 이름
FROM student
ORDER BY 학년, avr DESC;

      학년       성적 학번    이름
---------- ---------- ------- ----------
         1        3.9 945601  심정용
         1       3.71 948202  김성지
         1       3.56 945302  김람석
         1       3.25 943902  하정자
         1       3.23 948205  신형일
         1       3.21 948204  서창동
         1        3.2 944503  곽득용

 

4. 학과별 학년별로 학생의 정보를  성적순으로 검색한다. 

SELECT major 학과, avr 성적, syear 학년, sno 학번, sname 이름
FROM student
ORDER BY 학과, 학년, avr DESC;

학과          성적       학년 학번    이름
------- ---------- ---------- ------- ----------
물리           3.2          1 944503  곽득용
물리          2.76          1 944511  김형진
물리          1.99          1 944512  서동조
물리           .96          1 944501  최현각
물리          3.22          2 934504  갑서진
물리          2.33          2 934503  최모각
물리          2.16          2 934501  김아진

 

5. 학점 순으로 과목 이름을 검색한다. 

SELECT st_num 학점, cno 과목번호, cname 과목이름
FROM course
ORDER BY 학점 DESC;

      학점 과목번호  과목이름
---------- --------- ------------
         3 1217      고분자화학
         3 1782      세포배양학
         3 2312      생리학
         3 2119      영양생리학
         3 2115      식품분석실험
         3 1213      유기화학
         3 2111      식품화학

 

6. 각 학과별로 교수의 정보를 검색한다. 

SELECT section 학과, pno 교수번호, pname 이름, orders 지위, hiredate 부임일자
FROM professor
ORDER BY 학과;

학과    교수번  이름       지위    부임일자
------- ------- ---------- ------- --------
물리    1018    김응전     조교수  99/02/18
물리    1012    이영준     부교수  00/05/18
물리    1013    하영진     부교수  99/04/19
물리    1009    이준영     정교수  91/10/04
물리    1016    호연작     조교수  09/10/21
물리    1010    이규진     정교수  98/10/07
생물    1021    왕사진     정교수  97/02/17

 

7. 지위별로 교수의 정보를 검색한다. 

SELECT orders 지위, pno 교수번호, pname 이름, section 학과, hiredate 부임일자
FROM professor
ORDER BY 지위;

지위    교수번  이름       학과    부임일자
------- ------- ---------- ------- --------
부교수  1022    이준       생물    89/05/05
부교수  1032    이유당     유공    88/11/01
부교수  1036    성현수     유공    93/07/13
부교수  1034    최해연     식영    98/07/02
부교수  1012    이영준     물리    00/05/18
부교수  1004    시진영     화학    91/02/01
부교수  1006    장청아     화학    03/05/20

 

8. 각 학과별로 교수의 정보를 부임일자 순으로 검색한다. 

SELECT section 학과, hiredate 부임일자, pno 교수번호, pname 이름, orders 지위
FROM professor
ORDER BY 학과, 부임일자;

학과    부임일자 교수번  이름       지위
------- -------- ------- ---------- -------
물리    91/10/04 1009    이준영     정교수
물리    98/10/07 1010    이규진     정교수
물리    99/02/18 1018    김응전     조교수
물리    99/04/19 1013    하영진     부교수
물리    00/05/18 1012    이영준     부교수
물리    09/10/21 1016    호연작     조교수
생물    89/05/05 1022    이준       부교수

 

9. 급여가 10% 인상된 경우 부서별로 각 사원의 연봉을 연봉순으로 검색한다. 

SELECT job 부서, eno 사번, ename 이름, sal*1.1*12+NVL(comm,0) 연봉
FROM emp
ORDER BY 부서, 연봉 DESC;

부서    사번    이름             연봉
------- ------- ---------- ----------
개발    2003    정의찬          57420
개발    2001    남궁연호        52340
개발    2007    이초록        28554.8
개발    2008    윤고은          27720
개발    2002    제갈민          22064
경영    0001    안영희          63360
모델링  1001    문시현          59920

 

10. 보너스가 100% 인상된 경우 업무별로 각 사원의 연봉을 연봉순으로 검색한다.

SELECT eno 사번, ename 이름, sal*12+NVL(2*comm,0) 연봉
FROM emp
ORDER BY 연봉 DESC;

사번    이름             연봉
------- ---------- ----------
0001    안영희          57600
1001    문시현          55040
0120    김경현          53000
2003    정의찬          52200
1003    양선호          51600
0201    안영숙          50800
1002    김주란          49860

SQL 페이지, 글자 포멧 설정

SET LINE ##
COL 컬럼 [FORMAT A## | CLEAR | ...]
SET PAGES ##

ex)

set line 100

col ename format a10 : ename 글자 포멧 10글자 지정 (문자 컬럼만 지정

col sal clear : 글자 포멧 지정한 것을 원래로 돌리기

set pages 10 : 한 페이지 열줄 지정

 

메모장을 열고 다음과 같이 인코딩 값을 변경시켜 login.sql을 만든다.

 

인코딩을 ANSI (euc) 로 저장한다.

 

sql 을 실행해 다음과 같이 두개 중 하나를 입력한다. sql을 실행할 때마다 입력한다.

sql> @login.sql

sql> @login

 

잘 적용된 것을 확인할 수 있다.

 

login.sql

SET LINE 100
SET PAGES 10
ALTER SESSION SET nls_date_format='YYYY/MM/DD';


COL grade FORMAT A7
COL 평가점수 FORMAT A9
COL sno FORMAT A7
COL 학번 FORMAT A7
COL sname FORMAT A10
COL 이름 FORMAT A10
COL major FORMAT A7
COL 전공 FORMAT A7
COL pno FORMAT A7
COL 교수번호 FORMAT A9
COL pname FORMAT A10
COL 교수이름 FORMAT A10
COL section FORMAT A7
COL 학과 FORMAT A7
COL orders FORMAT A7
COL 지위 FORMAT A7
COL cno FORMAT A7
COL 과목번호 FORMAT A9
COL cname FORMAT A12
COL 과목이름 FORMAT A12
COL 과목명 FORMAT A12
COL eno FORMAT A7
COL 사번 FORMAT A7
COL ename FORMAT A10
COL sex FORMAT A3
COL 성별 FORMAT A3
COL job FORMAT A7
COL 부서 FORMAT A7
COL 업무 FORMAT A7
COL dname FORMAT A7
COL 부서명 FORMAT A7
COL loc FORMAT A5
COL 근무처 FORMAT A5
COL dno FORMAT A7
COL 부서번호 FORMAT A9

 

파일의 종류

 -  : 일반 파일

 d  : 디렉토리

 l  : 링크 파일

 b  : 블록 디바이스 파일

 c  : 문자 디바이스 파일

 

퍼미션 (permission) 

: 소유자만 변경 가능

사용자 구별

rwx rwx rwx
User(u)  소유자  Group (g)  그룹 소유자 Other (o)  이외 모든 사용자

 

접근 권한 구별

구분 (8진수) 파일 디렉토리
r (4) 읽기 파일 목록 보기
w (2) 쓰기 (수정) 파일 생성 (삭제)
x (1) 실행 들어가기

** rwx 8진수 표기

 rwx r-x r-x  :  755 

 111 101 101 : 7 5 5

 rwx r-- r-- :  744

 111 100 100 : 7 4 4

 

** d rwx r-x --- 해석하기

d rwx r-x ---
파일 종류 소유자는 rwx 권한 그룹 소유자는 rx 권한 권한 X

 

chmod

: 퍼미션 수정 명령

# chmod  [옵션]  [퍼미션 ]  [파일]

옵션 

-R  :  디렉토리인 경우 하위 디렉토리와 파일까지 수정


# chmod  755  a.txt 

# chmod  -R 750  aa/

 

대상 : u(user), g(group), o(other), a(all) 

operator : +(추가), -(삭제), =(변경하지 않음) 

퍼미션 : r, w, x, s, t

 

# chmod  -R  755  ./a/ (rwxr-xr-x)
# chmod o+x, g-x  a.txt 

# chmod g+wx, o-w, o+x a.txt

 

suid, sgid, sticky bit

: 추가된 퍼미션으로 실행 및 삭제 권한을 보완

 

suid, sgid

- 실행 파일에만 적용

- 파일이 실행된 프로세스는 실행한 사용자 소유로 실행 권한이 부여

- suid, sgid를 설정한 파일의 프로세스는 소유자나 그룹 소유자의 ID로 실행 

- 실행 권한에 s로 표시

suid : 4000, u+s

sgid : 2000, g+s

ex) passwd Passwd 명령은 /etc/passwd, /etc/shadow 와 같은 root 소유자 파일을 변경함으로 실행 시에 파일 소유자인 root 권한으로 실행

 

sticky bit 

: 파일에 대해서 퍼미션과 관계없이 소유자만 삭제 가능하게 할 때 디렉토리에 other 권한을 제한

- Other을 대상으로 설정한다. 

- 모든 권한 허가가 가능하지만 삭제는 소유자만 가능하다. 

- 1000 : o+t

 

suid(4), sgid(2), stick bit(1)
- suid와 sgid는 user와 group 퍼미션에 s로 표시

- stichy bit는 other 퍼미션에 t로 표시
7777  : rwsrwsrw

4777  :  rwsrwxrwx  (u+s) 

2777  :  rwxrwsrwx  (g+s) 

1777  :  rwxrwxrwt  (o+t)

 

chown, chgrp

: 소유자 또는 그룹소유자 변경
# chown  [-R]  [유저명]  [대상]
# chown  [-R]  [유저명].[그룹명]  [대상] - 비표준명령
# chgrp  [-R]  [그룹명]  [대상]

ex)

chown  st01  a.txt  :  a.txt 파일의 소유자를 st01로 변경

chgrp  st01  a.txt   =  chown  .st01  a.txt (잘 사용 X)

 

소유자, 그룹소유자 변경 실습

 

기본 퍼미션 설정

: 파일이 생성될 때 퍼미션중에 제외될 퍼미션을 지정

기본 umask는 022(0022)

  - 디렉토리 퍼미션 : 755(0755),  파일 퍼미션 : 644(0644)

 

umask 명령

• umask 확인

# umask

• umask 변경

# umask [제외할 퍼미션]

# umask 077(0077) 

  :  생성되는 파일의 퍼미션은 700(0700)로 변경된다.

• /etc/profile 에 설정된다.

cd /etc/ 디렉토리로 들어가 vi profile로 umask를 수정한다. (노란 부분 수정) 수정 후 껐다 다시 키면 umask가 변경된 것을 확인

umask 수정

아래와 같이 umask와 파일 권한이 잘 설정된 것을 확인할 수 있다.

 

파일 시스템의 특성을 고려한 파일의 특성
• a : 추가 모드로만 오픈 가능

• i : 변경, 삭제, 링크 금지

• s : 안전한 삭제

• A : atime 갱신 불가

 

lsattr 

: 파일의 속성 확인
# lsattr [옵션] [대상]
옵션 

-d : 파일 형식으로 출력(대상이 디렉토리인 경우 사용) 

-R : 하위의 모든 파일에 대한 속성 표시 

-a : 숨김 파일 출력

 

chattr 

: 파일의 속성 확인
# chattr [속성 연산] [옵션] [대상]
속성 연산 

+ : 속성 추가 

- : 속성 삭제 

= : 해당 속성만 갖도록 설정 (이외 속성 삭제) 

옵션 

-R : 하위의 모든 파일 대한 속성 변경

변수

$a = 1;
대소문자 구별
변수명에 숫자 먼저 사용 X

데이터 타입

변수에 저장 값에 따라 형변환이 된다.
필요시 형변환을 할 수 있다.
settype() 함수를 이용해 형변환 할 수 있다. > $int = settype($a, integer)

<? $bo = TRUE; $int = (integer)$bo; $str = (string)$bo; echo("\$int = $int<br> \$str = $str"); ?>

인용부호와 문자열

<? $a = "\t AA"; $b = '\t AA'; echo("\$a = $a<br> \$b = $b"); ?>

산술 연산자 및 대입 연산자

왼쪽. 산술 연산자 / 오른쪽. 대입 연산자

증감 연산자

관계 연산자

논리 연산자

$d = $a 먼저 연산 후 and 연산

문자열 연산자



예제 1. 형변환

<? $var1 = "1"; $var1++; //ASCII 49>50 $var2 = "a"; $var2++; //ASCII 97>98 $var3 = 10+"11"; //10+11 $var4 = 10+1.2; //10+1.2 $var5 = 10+"1.1e2"; //10+1.1*(10**2)=10+110 $var6 = 10+"A11"; //A 해석x $var7 = 10+"11A"; //10+11 echo("\$var1 = {$var1}<br>"); echo("\$var2 = {$var2}<br>"); echo("\$var3 = {$var3}<br>"); echo("\$var4 = {$var4}<br>"); echo("\$var5 = {$var5}<br>"); echo("\$var6 = {$var6}<br>"); echo("\$var7 = {$var7}<br>"); ?>


예제 2. boolean 형변환

<? $boo = TRUE; $int = (integer)$boo; $str = (string)$boo; $bt = gettype($boo); $it = gettype($int); $st = gettype($str); echo("\$boo = {$boo}_{$bt}<br>"); echo("\$int = {$int}_{$it}<br>"); echo("\$str = {$str}_{$st}<br><hr>"); $boo = FALSE; $int = (integer)$boo; $str = (string)$boo; $bt = gettype($boo); $it = gettype($int); $st = gettype($str); echo("\$boo = {$boo}_{$bt}<br>"); echo("\$int = {$int}_{$it}<br>"); echo("\$str = {$str}_{$st}"); ?>


예제 3. 산술 연산자

<? $a = 10; $b = 4; $add = $a + $b; $sub = $a - $b; $mul = $a * $b; $div = $a / $b; $mod = $a % $b; echo("\$a + \$b는 {$add}입니다.<br>"); echo("\$a - \$b는 {$sub}입니다.<br>"); echo("\$a * \$b는 {$mul}입니다.<br>"); echo("\$a / \$b는 {$div}입니다.<br>"); echo("\$a % \$b는 {$mod}입니다.<br>"); ?>


예제 4. 대입 연산자

<? $a = 10; $b = 4; $a += $b; echo("\$a += \$b의 결과는 {$a}입니다.<br>"); $a = 10; $a -= $b; echo("\$a -= \$b의 결과는 {$a}입니다.<br>"); $a = 10; $a *= $b; echo("\$a *= \$b의 결과는 {$a}입니다.<br>"); $a = 10; $a /= $b; echo("\$a /= \$b의 결과는 {$a}입니다.<br>"); $a = 10; $a %= $b; echo("\$a %= \$b의 결과는 {$a}입니다.<br>"); ?>


예제 5. 몫과 나머지 구하기
.html

<html> <head> <title>1-5.html 입력 폼파일</title> <meta http-equiv="content-type" content="text/html; charset=euc-kr"> </head> <form method="post" action="1-5.php"> 피제수 : <input type="text" name="a"><br> 제수 : <input type="text" name="b"><br> <input type="submit" name="확인" value="확인"> <input type="reset" name="취소" value="취소"><br> </form> </html>

.php

<? $a = $_POST["a"]; $b = $_POST["b"]; $mod = $a % $b; $div = ($a - $mod) / $b; echo("{$a}를 {$b}로 나눈 몫은 {$div}이고<br> 나머지는 {$mod}이다."); ?>

HTML 먼저 공부하고 진행하기

HTML 파일 내에서 PHP 실행

 

예제 1

<html> 
<head> 
<title>0-1.html</title> 
<meta http-equiv="content-type" content="text/html; charset=euc-kr"> 
</head> 
<body>
<hr> 
<?
   $a = 1;
   $b = 2;
   $c = $a + $b;
   echo("두 수의 합은 {$c}입니다.");
?>
<hr> 
</body> 
</html>

페이지 소스코드

페이지 소스코드는 위와 같이 PHP 파서에서 변경된 것을 확인할 수 있다.

 

예제 2

<html> 
<head> 
<title>0-1.html</title> 
<meta http-equiv="content-type" content="text/html; charset=euc-kr"> 
</head> 
<body>
<?
   $a=1;
   $b=2;
   $c=$a+$b;
?>
<table border="1">
  <tr>
     <td align="center" width="140" height="10" colspan="2">
     <? echo("\$a=$a, \$b=$b"); ?> </td>
  </tr>
  <tr>
     <td width="120" height="10">두 수의 합은 </td>       
     <td width="20" height="10"><? echo("{$c}"); ?></td> 
  </tr>
</table> 
</body> 
</html>

예제 3

.html

<html> 
<head> 
<title>0-3.html 폼파일</title> 
<meta http-equiv="content-type" content="text/html; charset=euc-kr"> 
</head>

  <form method="post" action="0-3.php">
     입력 값 : <input type="text" name="in"><br>
        <input type="submit" name="확인" value="확인"> 
        <input type="reset" name="취소" value="취소"><br> 
  </form> 
</html>

.php

<?  
  $in = $_POST["in"];  
  echo(" 입력된 값은 {$in} 입니다. "); 
?>

연결 연산자

SELECT 컬럼 || '리터럴' || ......
FROM  테이블;

 

중복 제거

SELECT [DISTINCT | ALL] 컬럼, 컬럼, ...
FROM  테이블;

 

예제 1.  다양한 방법으로 사원의 이름을 급여 또는 업무와 함께 검색한다.

SELECT ename||sal 이름_급여
FROM emp;

SELECT ename||' '||sal  이름_급여
FROM emp;

SELECT ename||'의 업무는 '||job||'입니다.'
FROM emp;

 

예제 2.  주의해야 할 연결 연산자를 이용

SELECT ename||' '||sal+100
FROM emp;

위와 같이 하면 오류가 난다. (연산자 우선순위 때문)

괄호를 붙여주도록 한다.

SELECT ename||' '||(sal+100)
FROM emp;

 

예제 3. 직원들의 업무는 어떤 것이 있는지 검색한다.(업무의 종류를 검색한다.)

SELECT job 업무 FROM emp;

기본으로 출력되는 것이 ALL이기 때문에 전체가 출력된다.

아래와 같이 출력하면 중복을 제거해 출력한다.

SELECT DISTINCT job 업무 FROM emp;

 

실습

1. '____학과인 ____학생의 현재 평점은 __입니다.' 형태로 학생의 정보를 출력한다. 

SELECT major||'학과인 '||sname||' 학생의 현재 평점은 '||avr||'입니다.'
FROM student;

 

2. '____과목은 ____학점 과목입니다.' 형태로 과목의 정보를 출력한다. 

SELECT cname||'과목은 '||st_num||'학점 과목입니다.'
FROM course;

 

3. '____교수는 ____학과 소속입니다.' 형태로 교수의 정보를 출력한다.

SELECT pname||'교수는 '||section||' 학과 소속입니다.'
FROM professor;


4. 학교에는 어떤 학과가 있는지 검색한다.(학생 테이블 기반으로 검색한다.)

SELECT DISTINCT major 학과 
FROM student;

 

5. 학교에는 어떤 학과가 있는지 검색한다.(교수 테이블 기반으로 검색한다.)

SELECT DISTINCT section 학과 
FROM professor;

 

6. 교수의 지위는 어떤 것들이 있는지 검색한다.

SELECT DISTINCT orders 교수_지위
FROM professor;

 

7. '____학생의 4.5 환산 평점은 ____입니다.' 형태로 학생의 환산 평점을 출력한다.

SELECT sname||'학생의 4.5 환산 평점은 '||(avr*4.5/4)||'입니다.'
FROM student;

 

8. '____과목의 담당 교수 번호는 ____입니다.' 형태로 과목의 정보를 출력한다.

SELECT cname||'과목 담당 교수번호는 '||pno||'입니다.'
FROM course;

 

9. 학교에 개설된 과목들은 몇 학점짜리인지 검색한다.

SELECT cno 과목번호, cname 과목이름, st_num 학점수
FROM course;

 

10. 학생들이 수강중인 과목의 과목 번호를 검색한다.

SELECT DISTINCT cno "수강 과목번호"
FROM course;

vi 에디터

vi 실행 

- vi 에디터는 반드시 파일명을 추가해서 실행한다. 

# vi 파일명

- 명령 모드 : 입력이 외의 편집 작업 

- 입력 모드 : 데이터 입력 및 수정 

- 실행 모드 : 파일 저장, 종료

 

• 명령 모드에서 삽입 모드로 변경 

- i : 커서 위치부터 입력 

- a : 커서 다음 칸에 입력 

- : 커서 아래 새로운 라인을 삽입하고 입력 

- I : 커서가 위치한 라인 맨 앞에 입력 

- A : 커서가 위치한 라인 맨 뒤에 입력 

 

• 명령 모드에서 실행 모드로 변경

-

 

• 삽입, 실행 모드에서 명령모드로 변경

- [ESC]

 

 * 삽입 모드에서 실행 모드로 직접 변경은 불가능

 

• 이동
h, j, k, l (왼쪽,아래,위,오른쪽) 

gg (맨 앞), G (문서 맨 끝)

 nG (n 라인으로 이동) 

 ^f (페이지 아래),  ^b (페이지 위), ^d, ^u  (화면단위 이동) (^ : ctrl)


• 삭제 (명령모드에서 실행)
 x  (글자 삭제) 

 dd  (라인 삭제) 

 dw (단어삭제) 

 D  (커서뒷부분 전체 삭제)

 

• 검색 

 /문자열 

 n  (검색상태에서 순방향으로 재 검색, /와 동일) (다음 문자열 찾음) 

 N  (이전 문자열 찾음)


• 환경 설정 

: set  [환경변수]  [값]
환경변수 

 nu  (라인번호 표시) 

sm (반대 괄호 표시)

 

• 저장 및 종료

 :wq  (저장 후 종료) 

 :q!  (저장하지 않고 종료) 

:w [파일명]  (저장 또는 지정한 파일명으로 내용 저장) 

- 새 이름으로 저장하는 방법은 Windows와 다름으로 주의 (익숙 X > 사용 X)

 

실습

vi 실행

 

별명을 이용한 검색

SELECT 컬럼 as "별명", 컬럼 as "별명", ... 
FROM  테이블;

as" "는 생략 가능

_ : 공백 표시

 

수식을 이용한 검색

SELECT 수식 [as 별명], ...
FROM  테이블;

 

NULL 연산 위한 NVL 함수

NVL(컬럼, 치환 값)

치환 값은 연산자의 항등원으로 바꾼다.

+, - : 0

*, / : 1

계산한 값이 정확하지 않을 수도 있기 때문에 이런 경우 확실히 적어주는 것이 좋다.

 

 

예제 1. 각 사원의 이름과 담당업무를 검색해서 결과를 보고한다.

SELECT eno 사번, ename 이름, job 업무 FROM emp;

 

예제 2. 각 사원의 연간 수급하는 급여를 검색한다.

select eno 사번, ename 이름, sal*12 연간_급여
from emp;

 

예제 3. 별명에 반드시 이중 인용 부호가 필요한 경우를 확인한다.

select ename "10name" from emp;

 

예제 4. 사원의 연봉을 검색한다. (연봉 = 12개월분 급여(sal) + 보너스(comm))

select eno 사번, ename 이름, sal 급여, comm 보너스, sal*12+comm 연봉
from emp;

보너스 값 NULL이라 연봉이 NULL이 나옴

 

예제 5. 사원의 연봉을 검색한다.

select eno 사번, ename 이름, sal*12+NVL(comm,0) 연봉
from emp;

 

실습

1. 각 학생의 평균 평점을 검색한다.(별명을 이용)

SELECT sno 학번, sname 이름, avr 평균_평점
FROM student;


2. 각 과목의 학점수는 검색한다.(별명을 이용)

SELECT cno 과목번호, cname 과목이름, st_num 학점수
FROM course;


3. 각 교수의 지위를 검색한다.(별명을 이용)

SELECT pno 교수번호, pname 이름, orders 지위
FROM professor;

 

4.  급여를 10% 인상했을 때 연간 지급되는 급여를 검색한다.

SELECT eno 사번, ename 이름, (sal*1.1*12) 연간_급여
FROM emp;


5. 현재 학생의 평균 평점은 4.0 만점이다. 이를 4.5 만점으로 환산해서 검색한다.   

SELECT sno 학번, sname 이름, (avr*4.5/4) "4.5만점 환산"
FROM student;

 

6. 급여가 10% 인상될 경우 각 사원의 연봉을 검색한다. 

SELECT eno 사번, ename 이름, (sal*1.1*12)+NVL(comm,0) 연봉
FROM emp;


7. 1년 동안 지급되는 급여와 10% 인상되어 1년 동안 지급되는 급여 간에 차액을 검색한다.

SELECT eno 사번, ename 이름, (sal*1.1*12)-(sal*12) "1년 급여 차액"
FROM emp;


8. 각 학생들의 평균 평점을 4.5 만점으로 환산한 경우 각각 평점의 상승폭은 얼마인지 검색한다.

SELECT sno 학번, sname 이름, (avr*4.5/4)-avr "4.5만점 환산 상승폭"
FROM student;

tar

: 여러 개의 파일 하나의 파일로 압축

gzip 이용해 용량 압축
# tar  [옵션]  [압축 파일명]  [대상]
옵션 

압축:  cvfz (z사용 시 '-' 빼기)

풀기:  xvfz

-c : 압축,  

-x : 풀기,  

-v : 작업내용을 출력 

-z : gzip를 이용 압축(압축해제)

-f : 파일명을 지정

 

clock

: 리눅스 시스템 BIOS(메인보드) 시간 출력 or 변경

시간 동기화 및 출력

# clock  [옵션]
옵션 

-r : BIOS의 시간을 읽어 표준 출력으로 출력한다. 

-w : 시스템의 시간을 이용 하드웨어 시간을 변경한다. (OS시간 이용 → 하드웨어 시간 이용)

 

date

: 지정한 포맷으로 시스템의 날짜를 출력한다.
# date  [+포맷]
포맷(시간) 

• 시 : %H(00..23),  %(01..12),  %k(0..23),  %l(1..12),  % p(AM, PM) 

• 분 : %M(00..59) • 초 : %S(00..59) 

• 시간 : %r(hh12:mm:ss AM),  %T(hh24:mm:ss),  %X (로케일) 

• 기타 : %s (1970년 1월 1일 이후 경과된 초)

포맷(날짜) 

• 년 : %Y(YYYY),  %y(yy) 

• 월 : %m(01..12),  %B(January .. December),  %b(Jan .. Dec) 

• 일 : %d(01..31) 

• 요일 : %A(Sunday .. Saturday),  %a(Sun .. Sat),  %w(0..6) 

• 기타 : %D(mm/dd/yy),  %x(로케일),  %j(00..365)

 

** unset LANG : 초기 설정으로 변경 (한글 없앰)

 

rdate

: 서버로 부터 시간 정보 제공받아 시간 출력 및 재설정
# rdate [옵션]  [시간 제공 서버 주소]
옵션 

-p : 타임 서버로 부터 제공된 시간을 출력한다. 

-s : 타임 서버로 부터 제공된 시간을 이용 시스템의 시간을 재설정한다.

rdate -s time.bora.net : 시간 동기화 시키는 명령어 (컴퓨터 부팅할 때마다 실행)

 

stat 

: 파일의 시간 정보를 출력

• atime (Access)

 - 파일에 마지막으로 접근한 시간 

 - 시스템이나 응용프로그램이 마지막으로 파일에 접근한 시간 

• ctime (Change)

 - 파일의 퍼미션 등 속성이 변경된 시간

• mtime (Modify)

 - 파일의 내용이 마지막으로 수정된 시간 

 - mtime이 수정되면 ctime도 수정된다.

 

touch 

: 파일의 시간 정보 변경, 파일이 없으면 빈파일 생성
# touch  [옵션] 파일
옵션 

-t  [YYYYMMDDhhmi] : 임의의 시간으로 변경 

-a : 최근 사용 시간 변경 

-m : 파일의 최근 수정 시간 변경 

-r [file] : 지정한 파일과 동일한 시간으로 변경 

-c : 파일을 생성하지 않는다.(존재하지 않을때)

 

tar 실습

mkdir -p : 상위 디렉토리가 없으면 상위 디렉토리까지 생성

___.tar.gz 로 압축하기

ls -R : 해당 디렉토리 하위까지 모두 보여주기

 

+ Recent posts