반응형

UNION과 UNION ALL 의 차이 및 주의 사항

ANSI SQL에서 제안하는 집합 연산 "UNION", "INTERSECT", "MINUS" 중에서
MySQL에서는 UNION 집합 연산만 제공하고 있다. 
(하지만 MySQL에서 INTERSECT나 MINUS를 다른 형태의 쿼리로 풀어서 사용할 수 있다.)


이 글에서는 UNION 에 대해서 좀 더 자세히 알아 보고자 한다.
UNION 집합 연산은 다시 아래와 같이 두가지 종류로 나누어진다.
  - UNION ALL
  - UNION DISTINCT


우리가 일반적으로 사용하는 방식인 아무런 추가 키워드 없이 UNION 만 사용하는 것은
UNION DISTINCT 를 줄여서 사용하고 있는 것이다
.

UNION ALL과 UNION DISTINCT를 레코드가 많은 결과에 대해서 적용해본 사람은 
아마도 둘의 처리 방식에 대해서 의구심을 가져본 적이 있을 것이다.

레코드 건수가 많아지면 많아질수록 그 성능 차이는 엄청난 차이를 보여줄 것이다.

우선, 아래와 같이 2개씩 동일한 레코드 데이터를 가지고 있는 tab1과 tab2라는 테이블이 있다.

mysql>SELECT fdpk, fddata FROM tab1;
+------+--------+
| fdpk | fddata |
+------+--------+
|    1 | data1  |
|    2 | data2  |
+------+--------+
2 rows in set (0.00 sec)


mysql>SELECT fdpk, fddata FROM tab2;
+------+--------+
| fdpk | fddata |
+------+--------+
|    1 | data1  |
|    2 | data2  |
+------+--------+
2 rows in set (0.01 sec)


그러면, 이 두개 테이블에 대해서 각각 UNION과 UNION ALL을 사용하는 쿼리를 실행해보자.

mysql>SELECT fdpk, fddata
    -> FROM (
    ->   SELECT fdpk, fddata FROM tab1
    ->   UNION ALL
    ->   SELECT fdpk, fddata FROM tab2
    -> ) x;
+------+--------+
| fdpk | fddata |
+------+--------+
|    1 | data1  |
|    2 | data2  |
|    1 | data1  |
|    2 | data2  |
+------+--------+
4 rows in set (0.00 sec)


mysql>SELECT fdpk, fddata
    -> FROM (
    ->   SELECT fdpk, fddata FROM tab1
    ->   UNION
    ->   SELECT fdpk, fddata FROM tab2
    -> ) x;
+------+--------+
| fdpk | fddata |
+------+--------+
|    1 | data1  |
|    2 | data2  |
+------+--------+
2 rows in set (0.00 sec)


두개의 퀴리 실행 결과 UNION은 레코드가 반으로 줄었다.
이미 다들 알고 있다시피 UNION은 UNION DISTINCT와 동일한 작업을 하기 때문에 중복되는 레코드를 제거했음을 알 수 있다.
하지만, UNION ALL의 경우에는 별도의 중복 제거 과정을 거치지 않고 그냥 결과를 내려준다.
아주 중요한 내용이지만, 사실 이 내용을 다들 별로 신경쓰지 않고 모두들 UNION을 즐겨 사용한다.


안타깝게도, MySQL의 실행계획에서는 둘의 차이를 전혀 느낄 수 없다.
+----+--------------+------------+------+..+------+..+------+------+-------+
| id | select_type  | table      | type |..| key  |..| ref  | rows | Extra |
+----+--------------+------------+------+..+------+..+------+------+-------+
|  1 | PRIMARY      | <derived2> | ALL  |..| NULL |..| NULL |    4 |       |
|  2 | DERIVED      | tab1       | ALL  |..| NULL |..| NULL |    2 |       |
|  3 | UNION        | tab2       | ALL  |..| NULL |..| NULL |    2 |       |
|NULL| UNION RESULT | <union2,3> | ALL  |..| NULL |..| NULL | NULL |       |
+----+--------------+------------+------+..+------+..+------+------+-------+


하지만 중복 제거는 그냥 얻을 수 있는 결과가 아니다.그러면, MySQL이 내부적으로 어떻게 중복을 제거하는 것일까 ?

내부적인 처리를 알아보기 전에, 레코드의 중복이라는 표현을 했는데 이 중복의 기준이 무었일까 ?
    1. 각 테이블의 Primary key ?
    2. 전체 테이블의 모든 필드 ?
    3. 각 서브 쿼리에서 SELECT된 튜플(레코드)의 모든 필드 ?


그렇다. 이미 SELECT된 결과를 가지고 UNION하기 때문에 SELECT되기 전의 테이블이나 레코드에 대한 정보는 알 수 없다.
그래서, 중복 여부의 판단은 SELECT된 튜플들에 속해있는 모든 컬럼의 값들 자체가 중복 체크의 기준이 되는 것이다.


자~, 그러면 이제 MySQL이 내부적으로 UNION ALL과 UNION을 처리하는 과정을 알아보자.
1. 최종 UNION [ALL | DISTINCT] 결과에 적합한 임시 테이블(Temporary table)을 메모리 테이블로 생성
2. UNION 또는 UNION DISTINCT 의 경우, Temporary 테이블의 모든 컬럼으로 Unique Hash 인덱스 생성3. 서브쿼리1 실행 후 결과를 Temporary 테이블에 복사
4. 서브쿼리2 실행 후 결과를 Temporary 테이블에 복사
5. 만약 3,4번 과정에서 Temporary 테이블이 특정 사이즈 이상으로 커지면 

    Temporary 테이블을 Disk Temporary 테이블로 변경 
    (이때 Unique Hash 인덱스는 Unique B-Tree 인덱스로 변경됨)
6. Temporary 테이블을 읽어서 Client에 결과 전송
7. Temporary 테이블 삭제


UNION 두 가지의 차이는 2번 과정 딱 하나이다. 중복 제거를 위해서 Temporary 테이블에 인덱스를 생성하느냐 ?. 그렇지 않느냐 ?.별로 중요하지 않은 것 같지만, 이 인덱스로 인해서 3,4번 과정의 작업이 작지 않은 성능 차이가 만들어 내게 된다.
실제 UNION을 실행하는 데이터의 건수에 따라서 다르겠지만, 1.5 ~ 4배 가량의 성능 차이로 UNION ALL이 빠르게 처리된다.
만약 처리중 데이터의 량이 작아서 5번 과정을 거치지 않는다면 메모리 Temporary 테이블에 Hash 인덱스를 사용하기 때문에 

속도 차이가 아주 미세할 것이다. 
하지만 데이터량이 커져서 5번 과정을 거치게 되면 Disk Temporary 테이블에 B-Tree 인덱스를 사용하기 때문에 큰 성능 차이를 보이게 될 것이다.
이 성능 차이는 UNION 하는 두 집합에 중복되는 레코드가 있든 없든 관계 없이 발생할 것이다.


위에서 잠깐 알아보았던, "중복의 기준"을 생각하면, UNION 하는 컬럼들의 수가 많아지고 레코드의 사이즈가 커질수록 두 작업 모두에게 불리하겠지만, UNION ALL보다는 UNION에 더 악영향이 클 것이다.

결론은,
0. UNION 이든지 UNION ALL이든지 사실 그리 좋은 SQL 작성은 아니다. 

    UNION이 필요하다는 것은 사실 두 엔터티(테이블)가 하나의 엔터티(테이블)로 통합이 되었어야 
    할 엔터티들이었는데, 알 수 없는 이유로 분리 운영되는 경우가 상당히 많다. 
    즉 모델링 차원에서 엔터티를 적절히 통합하여 UNION의 요건을 모두 제거하자.
1. 두 집합에 절대 중복된 튜플(레코드)가 발생할 수 없다는 보장이 있다면 UNION ALL을 꼭 사용하자.

    두 집합에서 모두 각각의 PK를 조회하는데, 그 두 집합의 PK가 절대 중복되지 않는 형태
2. 중복이 있다 하더라도 그리 문제되지 않는다면 UNION 보다는 UNION ALL을 사용하자.
3. 만약 UNION이나 UNION ALL을 사용해야 한다면, 최소 필요 컬럼만 SELECT 하자.

출처 : http://intomysql.blogspot.com/2011/01/union-union-all.html

반응형
반응형

INTERSECT

 INTERSECT는 교집합을 의미한다. 사용 예와 결과 예는 아래와 같다.


사용 예

1
2
3
4
5
6
7
SELECT subject
FROM timetable
WHERE name='철수'
INTERSECT
SELECT subject
FROM timetable
WHERE name='영희';
cs


결과 예

1
2
3
4
subject
--------
국어
영어 
cs




MINUS

 MINUS는 차집합을 의미한다. 먼저 위치한 SELECT문을 기준으로, 다른 SELECT문과 공통된 레코드를 제외한 항목만 추출된다. 사용 예와 결과 예는 아래와 같다.


사용 예

1
2
3
4
5
6
7
SELECT subject
FROM timetable
WHERE name='철수'
MINUS
SELECT subject
FROM timetable
WHERE name='영희';
cs


결과 예

1
2
3
subject
--------
수학 
cs



출처: http://preamtree.tistory.com/45 [Preamtree의 행복로그]

반응형
반응형

업무를 진행하다 보면 Json 형태의 데이터를 생성하여 전송하거나, 받는 경우가 종종 발생 한다.


json 형태의 데이터는 일일히 문자열로 쭉 나열하여 규칙대로 만들수도 있지만, 구조가 복잡해 지거나 데이터 양이 많을경우 사람이 일일이 만들기에는 좀 힘들다.


그래서 보통은 Java/JSP나 ASP 등과 같이 서버사이드 측에서 json을 쉽게 생성하여 HTML, Javascript 쪽에서 사용한다.



오늘은 서버사이드측이 아닌 javascript로 json 형태의 데이터를 생성하는 방법이다. 워낙 간단하니 아래 예제를 보면 쉽게 이해 할 수 

자바스크립트 내장객체인 JSON.stringfy를 이용하면 생성된 Json 객체를 String으로 변환할 수 있다.


<script src="//code.jquery.com/jquery-1.12.0.min.js"></script>
<script type="text/javascript">
 
     
    $(function() {
         
        // 리스트 생성
        var testList = new Array() ;
         
 
        for(var i=1; i<=2; i++){
             
            // 객체 생성
            var data = new Object() ;
             
            data.number = i ;
            data.name = "Tester #" + i ;
             
             
            // 리스트에 생성된 객체 삽입
            testList.push(data) ;
        }
         
        // String 형태로 변환
        var jsonData = JSON.stringify(testList) ;
         
        alert(jsonData) ;
         
        /*
            출력결과 : [{"number":1,"name":"Tester #1"},{"number":2,"name":"Tester #2"}]
        */
         
    });
     
 
</script>



출처: http://fruitdev.tistory.com/190?category=568934 [과일가게 개발자]

반응형
반응형

웹 개발을 하다보면 의도하지 브라우저 캐시로 인하여 수정내용이 반영이 되지 않을때가 종종 있다.
이럴때는 해당 페이지를 몇번 새로고침하면 수정된 내용으로 나오긴 하지만, 사실 중요한 부분에서 캐쉬가 남아 
의도하지 않은 부분이 사용자에게 노출되면 때론 곤란해질수도 있다.


이미지 같은 정적파일들은 캐쉬로 보관되어 있으면 사이트 로딩등이 빨라지는 장점도 있지만, 

어떠한 액션이 있어야 하는 중요한 동적 페이지에서는 오히려 잘못된 결과를 초래하기도 한다.

캐쉬를 사용하지 않겠다고 하는 선언은 JSP 등과 같은 서버 사이드 언어나, html에 메타태그를 넣어 쉽게 적용이 가능하다.



- JSP의 경우 페이지 상단에 아래 구문을 넣으면 캐쉬가 적용되지 않는다.

<%
 response.setHeader("Cache-Control","no-cache");
 response.setHeader("Pragma","no-cache");
 response.setDateHeader("Expires",0);
%>



- HTML의 경우 아래 구문을 <head> 태그 사이에 넣어주면 된다.

<meta http-equiv="Cache-Control" content="no-cache"/>
<meta http-equiv="Expires" content="0"/>
<meta http-equiv="Pragma" content="no-cache"/>



출처: http://fruitdev.tistory.com/103 [과일가게 개발자]

반응형
반응형

UNION ALL 쿼리 예

중복된 행이 발견되는 경우 결과에 이런 행을 유지해야 하므로, 다음 예제에서는 UNION ALL 연산자를 사용합니다. 이벤트 ID의 특정 시리즈에 대해, 쿼리는 각 이벤트와 관련된 각각의 판매에 대해 0개 이상의 행을 반환하고 그 이벤트의 각 목록에 대해 0개 또는 1개의 행을 반환합니다. 이벤트 ID는 LISTING 및 EVENT 테이블에서 각각의 행에 고유하지만, SALES 테이블에서 이벤트 및 목록 ID의 동일한 조합에 대해 여러 개의 판매 건이 있을 수 있습니다.

결과 집합의 세 번째 열은 행의 원본을 식별합니다. 행의 출처가 SALES 테이블인 경우 SALESROW 열에 "YES"로 표시됩니다. (SALESROW는 SALES.LISTID의 별칭입니다.) 행의 출처가 LISTING 테이블인 경우 SALESROW 열에 "No"로 표시됩니다.

이 경우, 결과 집합은 목록 500, 이벤트 7787에 대해 3개의 판매 행으로 구성됩니다. 즉, 이 목록 및 이벤트 조합에 대해 3가지 다른 트랜잭션이 발생했습니다. 다른 두 목록 501 및 502에서는 어떤 판매도 생성되지 않았으므로, 쿼리가 이들 목록 ID에 대해 생성하는 유일한 행의 출처는 LISTING 테이블입니다(SALESROW = 'No').

select eventid, listid, 'Yes' as salesrow from sales where listid in(500,501,502) union all select eventid, listid, 'No' from listing where listid in(500,501,502) order by listid asc; eventid | listid | salesrow ---------+--------+---------- 7787 | 500 | No 7787 | 500 | Yes 7787 | 500 | Yes 7787 | 500 | Yes 6473 | 501 | No 5108 | 502 | No (6 rows)

ALL 키워드 없이 같은 쿼리를 실행하는 경우 결과에는 판매 거래 중 하나만 유지됩니다.

select eventid, listid, 'Yes' as salesrow from sales where listid in(500,501,502) union select eventid, listid, 'No' from listing where listid in(500,501,502) order by listid asc; eventid | listid | salesrow ---------+--------+---------- 7787 | 500 | No 7787 | 500 | Yes 6473 | 501 | No 5108 | 502 | No (4 rows)

출처  : https://docs.aws.amazon.com/ko_kr/redshift/latest/dg/c_example_unionall_query.html

반응형
반응형

※ Linux 명령어

 

uname -a     버젼정보보기

pwd          현재위치보기

nl <파일>     numberline

vi -> :set nu   라인넘버보기

ls --help

mkdir -p <디렉토리/디렉토리>     하위디렉토리포함 만들기

rmdir <디렉토리>     디렉토리지우기

touch <파일>     파일만들기 또는 현재날자로 수정

clear         화면지우기

cp -f <파일> <파일>      //-f:묻지않음, -r:하위디렉토리포함

rm -rf <디렉토리>     디렉토리지우기

mv <디렉토리> .      이동

ln <파일1> <파일2>     hardlink 2->1

ln -s <파일1> <파일2> softlink 2->1

echo $PATH      PATH보기

PATH=$PATH:\root/디렉토리     path추가

who am I     내정보보기

cat -n <파일>     라인번호

more, less      b: back, /단어: 검색

cat file1 > file2     redirection 표준출력

cat file1 >> file2     Append 추가

rpm -qa | grep <파일>     현재컴퓨터에 설치된 프로그램중 <파일>만출력

cal 월 년 | mail 주소     달력출력후 메일로 보내기

ps -ef | grep <파일>     실행중 프로세스중 <파일>만 출력

wc <파일>     라인 단어 문자 파일명

rpm -qa | wc -l     개수

bc     계산기

alias     별칭보기(ls -al == ll)

alias c='clear'     추가

history     !번호

useradd <계정>     계정추가

passwd <계정>      비밀번호

ps1='[\d  \t  \!] [\w]  \n  \\$'

    날짜 시간 명령어번호 현재경로 새로운라인

.bashrc     초기설정값저장, alias, ps1입력해서 전역변수화, 다음로그인시 설정값저장


ftp <주소>

ftp> pwd: server경로,     !pwd: client경로, !ls

ftp>get <파일>    다운로드

ftp>mget <*>    여러파일 다운로드

ftp>? <명령어>     설명

ftp>bye     끝

ftp>put <파일>     업로드

ftp>mput <a*>     여러파일 업로드

ftp>prompt      Interactive mode off/on


chsh -l     내시스템이 사용중인 쉘종류

cat -n /etc/shells

echo $SHELL     현재사용중인 쉘

env     환경변수 보기

chsh     /bin/ash(쉘종류)     shell change

gzip -1v <파일>     숫자클수록 압축률상승 속도저하

gunzip <파일>     파일명.gz 압축하기

tar xvfz <파일.tar.gz>     풀기


mount     현재마운트된 상태

df -h     파티션정보, 마운트정보

mount -t ext3 </dev/hda8> </apm>

mount -t iso9660 /dev/cdrom /mnt/cdrom/        cdrom마운트

umount </apm>

mkfs -t ext3 </dev/hda8>     파티션포멧

/etc/fstab     filesystem정보담긴 파일

/etc/inittab     runlevel 설정파일

  id:5:initdefault:     3:일반텍스트모드, 5:xwindow모드부팅

/etc/grub.conf     groub설정파일

vi -> se nu     번호붙이기


※ Kernel Compile

1. 커널 다운로드후 /usr/src  이동후 압축해제

2. /linux 이동

3. make mrproper     커널환경초기화

4. make xconfig/menuconfig

5. make dep     의존성 구축

6. make clean    필요없는 모듈제거

7. make bzImage     새로운 커널 이미지마듬

8. make modules

9. make modules_install

10. arch/i386/boot/bzImage  -> /boot로 이동

11. grub에서 설정


rpm -qa | grep ftp | wc -l

rpm -e --nodeps  <package name> 의존성무시 강제삭제

rpm -ivh <package name>   설치

rpm -Uvh     업그레이드

(core 먼저설치, standalone 나중설치)

 

/proc    시스템정보   meminfo, cpuinfo, swaps, interrupts, IRQ정보

top    현재 프로세스 사용상태 실시간

ps -A   실행중 프로세스     -ef 자세히

pstree

killall <프로세스이름>   프로세스 죽이기


useradd <계정>

passwd <계정>

/etc/passwd

/etc/shadow

finger <계정>   정보보기

chfn <계정>    정보수정

usermod -s(쉘변경) /bin/zsh(쉘위치) <계정> ;   -g(그룹변경) <그룹명> <계정>

userdel -r <계정>     homedirectory삭제

/etc/group

groupadd <그룹명>

/etc/default/useradd     홈디렉토리변경가능

useradd -G <그룹> <계정>

groups <계정>     이계정의 소속그룹 확인

chgrp <그룹명> <디렉토리>     디렉토리 소유그룹을 <그룹명>으로 변경

chown <계정명> <파일명>

chown <계정.그룹> <파일> 계정,그룹동시변경 가능

chmod 777 <파일>   r:4, w:2, x:1

 

gcc -o <만들파일이름> <소스파일.c>

./configure   (--prefix=/디렉토리)   (기본=/usr/local)

make   컴파일

make clean   에러발생시

make install

 

shutdown -h now   (-r: reboot)


host -l <domain name>   그 도메인의 IP주소출력

traceroute microsoft.com

 

find / -name "filename"    (-perm, -user)

find . -name "*.txt" | xargs grep [-option] hello   -> hello문자열을 포함한 파일 찾기

[option]

-l: 파일리스트만 보여주기, -i: 찾는 문자열 대소문자 구분하지 않기, -r: find쓰지 않고 특정디렉토리 이하 모두 검색

 

which <명령어>

whereis <명령어>

 

/var/log/dmesg     ->커널이 부팅시 하드웨어 검색하는 메세지

/var/log/messages   ->커널과 시스템에 관련된 로그 메세지

 

service networ [옵션]

redhat-config-network

ifconfig

vi /etc/sysconfig/network     기본 호스트에 대한 정보

vi /etc/sysconfig/network-scripts/ifcfg-eth0     이더넷카드설정

vi /etc/resolv.conf          DNS설정

 

/etc/init.d/network restart   (또는 /etc/rc.d/init.d/network)   네트워크재시작




반응형
반응형


현재 디렉토리에서, pl 확장자를 가진 모든 파일 찾기

find -name '*.pl'


(현재 디렉토리 밑의 하위 디렉토리까지 다 찾습니다.)


루트에서부터, 즉 전체 하드에서, pl 확장자를 가진 모든 파일 찾기

find / -name '*.pl'




전체 하드 디스크에서, 파일명이 ab 로 시작하는 모든 파일 찾기

find / -name 'ab*'




전체 하드 디스크에서, 파일명이 .bash 로 시작하는 모든 파일 찾기

find / -name '.bash*'




전체 하드 디스크에서, 파일명이 .bash 로 시작하는 모든 파일 찾기
+ ls 명령 형식으로 출력

find / -name '.bash*' -ls


뒤에 -ls 라는 옵션을 붙이면 됩니다.




디렉토리명 찾기


전체 하드 디스크에서, 디렉토리 이름이 et 로 시작하는 모든 디렉토리 찾기

find / -name 'et*' -type d



주의! 옵션 순서를 바꾸면 에러가 납니다.




반응형

'프로그램 관련 > Linux(리눅스)' 카테고리의 다른 글

linux find 파일찾기  (0) 2018.08.22
리눅스 명령어모음!!!  (0) 2018.08.22
LINUX 파일만들기, 파일옮기기,이동,복사하기  (0) 2018.08.22
UBUNTU APT 패키지 삭제  (0) 2018.08.22
LINUX HDD MOUNT 하기  (0) 2018.08.22
반응형

mv

mv는 이름변경 및 이동을 담당하는 명령어이다.

 

형식) mv 원본파일 대상파일

 

예를들어 test.txt 라는 파일이 있다고 치고 나는 /home 디렉토리로 옮기고싶다.

하면 mv test.txt /home 이런식으로 적으면 test.txt 파일이 /home 디렉토리로 이동하게 된다.

( 물론 원래 현재 디렉토리에 있던 test.txt은 없어지게 된다. ) 

 

만약에 mv test.txt test1.txt 라고 하면,

test1.txt 라는 파일은 원래 없기때문에 자연스럽게 test.txt란 파일은 사라지고 test1.txt로 남게된다.

즉, 이름 변경이 가능하다는 뜻이다.

 

 

cp

 

cp는 파일이나 디렉토리를 다른 파일 또는 다른 디렉토리로 복사(Copy)를 수행한다.

 

형식) cp 원본파일 대상파일

 

예를들어 test.txt 라는 파일이 있다고 치고 /home 디렉토리에 복사해서 내용이 같은 파일을

복사하고 싶다면 cp test.txt /home 이런식으로 적으면 test.txt 파일은 그대로 있되

/home 디렉토리에도 또다른 test.txt 파일이 내용똑같은 상태에서 저장하게 된다.

 

또는 cp test.txt test2.txt 이런식으로 하면 test.txt 내용이 똑같이 복사된 test2.txt를

생성하게 된다.

 

옵션)

-a : 원본 파일의 속성, 링크 파일 정보를 유지하며 복사

-b : 파일이 존재할 경우 기존 파일을 백업

-d : 복사할 원본이 심볼릭 링크일 때 심볼릭 링크 자체를 복사

-f : 복사할 대상이 있으면 강제로 지우고 복사

-i : 복사할 대상이 있으면 강제로 지우고 복사

-r : 디렉토리 복사할 때 사용

-v : 복사 과정 자세히 출력

-u : 복사할 대상의 변경 날짜가 같거나 더 최근 것이면 복사하지 않음

 

옵션 예 ) cp -r 디렉토리명1 디렉토리명2

 

 

자, 그럼 실습을 통해 이해하기 쉽게 알아보자.

 

 

 

mv 명령 실습

 

 

 

 

 

cp 명령 실습

 

 

 

 

내용 저장시 당연히 콜론상태에서 wq 해줘야하는거 잊지않기

 

옵션을 이용해서 응용해 스스로 실습하는 시간을 가져보길 바란다.




반응형

'프로그램 관련 > Linux(리눅스)' 카테고리의 다른 글

리눅스 명령어모음!!!  (0) 2018.08.22
리눅스 파일 찾기 (파일명 검색)  (0) 2018.08.22
UBUNTU APT 패키지 삭제  (0) 2018.08.22
LINUX HDD MOUNT 하기  (0) 2018.08.22
UBUNTU POSTGRESQL PASSWORD변경  (0) 2018.08.22
반응형

우분투(Ubuntu)에서 패키지를 관리하는 명령어가 몇가지 있습니다. 그 중 가장 기본이 되는 것이 apt-get입니다. 많은 옵션이 있는데, 자주 쓰는 몇가지를 정리해보겠습니다.

apt-get update

패키지 목록을 갱신합니다.

apt-get upgrade

모든 패키지를 최신 버전으로 업그레이드합니다.

apt-get install abc

abc 패키지를 설치합니다.

apt-get remove abc

abc 패키지를 삭제합니다. 설정파일은 삭제하지 않습니다.

apt-get purge abc

abc 패키지를 삭제합니다. remove와 다르게 설정파일도 삭제합니다.

참고로 패키지 검색은 apt-cache로 합니다. abc라는 단어를 포함한 패키지를 검색하려면 

apt-cache search abc

와 같이 하면 됩니다.

apt-get 명령어의 사용법과 옵션은

apt-get -h

으로 알아낼 수 있습니다. 결과는 다음과 같습니다.

apt 0.8.16~exp12ubuntu10.12 for i386 compiled on Jul 16 2013 18:00:58
Usage: apt-get [options] command
       apt-get [options] install|remove pkg1 [pkg2 ...]
       apt-get [options] source pkg1 [pkg2 ...]

apt-get is a simple command line interface for downloading and
installing packages. The most frequently used commands are update
and install.

Commands:
   update - Retrieve new lists of packages
   upgrade - Perform an upgrade
   install - Install new packages (pkg is libc6 not libc6.deb)
   remove - Remove packages
   autoremove - Remove automatically all unused packages
   purge - Remove packages and config files
   source - Download source archives
   build-dep - Configure build-dependencies for source packages
   dist-upgrade - Distribution upgrade, see apt-get(8)
   dselect-upgrade - Follow dselect selections
   clean - Erase downloaded archive files
   autoclean - Erase old downloaded archive files
   check - Verify that there are no broken dependencies
   changelog - Download and display the changelog for the given package
   download - Download the binary package into the current directory

Options:
  -h  This help text.
  -q  Loggable output - no progress indicator
  -qq No output except for errors
  -d  Download only - do NOT install or unpack archives
  -s  No-act. Perform ordering simulation
  -y  Assume Yes to all queries and do not prompt
  -f  Attempt to correct a system with broken dependencies in place
  -m  Attempt to continue if archives are unlocatable
  -u  Show a list of upgraded packages as well
  -b  Build the source package after fetching it
  -V  Show verbose version numbers
  -c=? Read this configuration file
  -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp
See the apt-get(8), sources.list(5) and apt.conf(5) manual
pages for more information and options.
                       This APT has Super Cow Powers.



반응형
반응형

linux hdd mount 하기


디스크가 인식되었는지 확인합니다.
$ sudo fdisk -l


파티션 할당합니다.
$ sudo fdisk /dev/sdb1

m 눌러서 명령을 봅니다.

n 눌러서 파티션을 추가합니다.

p 파티션 생성

파티선 생성이 끝나면

 

w 눌러서 저장합니다.

리부팅 합니다.

파티션을 포맷합니다.  (파티션을 하나로 잡았을경우)
$ sudo mkfs.ext3 /dev/sdb1

마운트할 디렉토리를 만듭니다.
$ sudo mkdir /pub

마운트 합니다.
$ sudo mount /dev/sdb1 /pub


자동 마운트 설정을 추가합니다.
$ sudo vi /etc/fstab

다음 부분 추가합니다.
/dev/sdb1 /pub ext3 defaults,errors=remount-rw 0 1

 

 

 

 

* 요즘은 UUID로 입력한는 경우가 많습니다

 

UUID 확인

$ ls -l /dev/disk/by-uuid

 

자동 마운트 설정을 추가합니다.
$ sudo vi /etc/fstab

다음 부분 추가합니다.
UUID='UUID' /마운트할/폴더명 ext3 defaults 0 1




반응형

+ Recent posts