Difference


Linux 컴퓨터 하드웨어와 소프트웨어게임개발태블렛PCS 등에서 사용하는 오픈소스이며 무료OS이다.

Unix 인터넷서버워크스테이션 그리고 Solaris, Intel, HP PC에서 주로 사용하는 OS이다







비교표(Comparison chart)

 

Linux(리눅스)

Unix(유닉스)

설명

리눅스는 오픈소스이며 무료OS이다.

유닉스는 대학회사큰  기업에서 주로 선호하는 OS이다.

비용

리눅스는 무료이다따라서 잡지나 책을 동해서도 배포될 수 있다.

유료버전의 리눅스도 있지만 대부분 윈도우보다는 저렴하다.

유닉스는 판매 회사별로 가격이 다르다.

사용자

모든사람집에서 사용하는 사람에서부터 개발자 그리고 컴퓨터 열혈팬 같은 사람들 모두.

유닉스 운영체제는 주로 메인프레임서버 그리고  모든사람을 위해 설계된 OSX를 제외한 워크스테이션을 위해 개발되었다유닉스 환경과 클라이언트-서버 프로그램 모델은 인터넷의 개발의 필수 요소이다.

제조사

리눅스 커널은 커뮤니티에 의해 개발되었다리누스 토발즈(Linus Benedict Torvalds리눅스개발자)가 이를 감독하고 있다.

 

Solaris (Oracle), AIX (IBM) 그리고 HP-UX (Hewlett Packard) 3개의 큰 제조사이다. Apple OSX도 있다.

 

가격

무료그러나 유료로 지원되는 것이 있다.

몇몇은 개발용도로 무료이다(Solaris)그러나 유료로 지원되는 것이 있다.

사용량

리눅스는 모바일폰태블랫 컴퓨터 그리고 비디오게임콘솔에서부터 메인프레임이나 슈퍼컴퓨터까지 다양한 컴퓨터 하드웨어에 설치가 가능하다.

유닉스는 인터넷서버워크스테이션과 PC들에 사용된다다수의 금융인프라 그리고 많은 24x365 고 가용솔루션의 뼈대를 이루는 인프라에 사용된다. (백본).

프로세서

다양한 종류가 있다.

x86/x64, Sparc, Power, Itanium, PA-RISC, PowerPC 

개발과 배포

리눅스는 오픈소스로 개발되었다.

리눅스 코드의 공유와 공동작업과 각 포럼 등의 특성을 통해 개발되었다그리고 다양한 판매사에 의해 배포된다.

유닉스 시스템은 다양한 제조사로 나누어진다. (대부분 AT&T 그리고 다양한 상업적 판매사와 비영리 단체에 의해 개발됨)

아키텍처

원래 인텔의 x86 하드웨어를 위해 개발되었으며, ARM을 포함한 24개 이상의 CPU 타입들도 지원가능하다.

 

PA-RISC 그리고 Itanium 기계에 사용가능하다. Solaris x86/x64기본시스템에도 사용가능하다. OSX PowerPC(10.0-10.5)/x86(10.4)/x64(10.5-10.8)에 가능

GUI

 

리눅스는 기본적으로 KDE Gnome의 두 가지 GUI를 제공한다그 외에 LXDE, Xfce, Unity, Mate, twm 등도 있음.

초기에 유닉스는 커맨드기반의 OS였다그러나 후에 GUI가 생성되어 공통 데스크톱 환경으로 불렸다대부분 배포는 현재 Gnome을 탑재하고 있다.

 

파일 시스템 지원

 

Ext2, Ext3, Ext4, Jfs, ReiserFS, Xfs, Btrfs, FAT, FAT32, NTFS

 

jfs, gpfs, hfs, hfs+, ufs, xfs, zfs format

 

텍스트모드 인터페이스

 

BASH (Bourne Again SHell)는 리눅스의 기본 쉘이다. BASH는 다수의 명령어를 지원한다.

 

원래는 Bourne Shell이다현재는 BASH, Korn & C를 포함한 다른 많은많은 쉘들과 호환된다.

보안

 

리눅스는 지금까지 약 60-100개의 바이러스 명단이 있다이 중 요즘은 아무도 활발하게 퍼지고 있지 않다.

 

유닉스의 바이러스는 지금까지 85-120정도가 보고되었다..

 

위협 탐지와 해결

 

리눅스의 경우 위협탐지와 해결이 매우 빠르다리눅스가 주로 커뮤니티 기반이기 때문이다그리고 리눅스 사용자가 위협을 커뮤니티에 올리면세계의 다른 지역의 개발자들이 해결을 위한 작업을 시작한다.

 

유닉스의 본래 독점적인 성격으로 인해사용자는 적절한 버그수정 패치를 얻기 위해선 한동안 기다려야 했다그러나 이것은 일반적이진 않다.

첫 시작

1992년 MINIX(유닉스와 비슷한 시스템)에 의해 영감을 받은 리누스 토발즈가. GUI, Drivers 등의 많은 특성들을 추가한 후에,지금의 리눅스가 된OS의 프레임워크를 개발하였다 리눅스 커널은 19919 17일 출시되었다.

1969, Bell연구소의 AT&T직원들과 데니스리치에 의해 개발되었다유닉스는 C언어로 작성되었으며 휴대용제품시분할 환경의 다중작업과 다중사용자 시스템을 위해 설계되었다.

예시

Ubuntu, Fedora, Red Hat, Debian, Archlinux, Android 

OS X, Solaris, 모든 리눅스










=> 유닉스를 개인 컴퓨터에서 사용하도록 한 것이 리눅스









'System > Linux,Unix' 카테고리의 다른 글

VI 편집기 명령어 정리  (0) 2018.08.07
명령어 정리  (0) 2018.08.07
Unix의 구조 ( Kernel, Shell)  (0) 2018.08.03
FreeMemory에 대한 이해  (0) 2018.07.17
vi/vim 에서 문자 일괄 변경  (1) 2018.07.17

https://www.kdata.or.kr/info/info_04_view.html?field=&keyword=&type=techreport&page=17&dbnum=183855&mode=detail&type=techreport

'System > Linux,Unix' 카테고리의 다른 글

VI 편집기 명령어 정리  (0) 2018.08.07
명령어 정리  (0) 2018.08.07
Unix의 구조 ( Kernel, Shell)  (0) 2018.08.03
Unix와 Linux의 차이  (0) 2018.08.03
vi/vim 에서 문자 일괄 변경  (1) 2018.07.17

문서 전체에서 변경


:%s/변경시킬문자/변경될문자/g


ex) :%s/10/100/g





문서 1번째줄부터 10번째줄까지에서 변경


:1,10s/변경시킬문자/변경될문자/g


ex) :2,25s/10/100/g



'System > Linux,Unix' 카테고리의 다른 글

VI 편집기 명령어 정리  (0) 2018.08.07
명령어 정리  (0) 2018.08.07
Unix의 구조 ( Kernel, Shell)  (0) 2018.08.03
Unix와 Linux의 차이  (0) 2018.08.03
FreeMemory에 대한 이해  (0) 2018.07.17


정규표현식(正規表現式, Regular Expression)은 문자열을 처리하는 방법 중의 하나로 특정한 조건의 문자를 '검색'하거나 '추출', '치환'하는 과정을 매우 간편하게 처리 할 수 있도록 하는 수단이다.


- 문자열에 나타는 특정 문자 조합과 대응시키기 위해 사용되는 패턴






 분류

 

관련 문법 내용

기  호

의  미

기본 메타 문자

.

 모든 문자와 일치 (한 문자)

|(버티컬 바)

 왼쪽 혹은 오른쪽과 일치

[^]

 문자 집합 구성원 중 하나와 일치

-

 문자 집합 구성원을 제외하고 일치

\

 다음에 오는 문자를 이스케이프

수량자

*

 문자가 없는 경우나 하나 이상 연속하는 문자 찾기

*?

 게으른 * 문자

+

 문자 하나 이상 찾기

+?

 게으른 + 문자

?

 문자가 없거나 하나인 문자 찾기

{n}

 정확히 요소와 n번 일치

{m, n}

 요소와 m에서 n번 일치

{n, }

 요소와 n번 이상 일치

{n, }?

 게으른 {n, }

위치 지정

^

 문자열의 시작과 일치

\A

 문자열의 시작과 일치

$

 문자열의 끝과 일치

\Z

 문자열의 끝과 일치

\<

 단어의 시작과 일치

\>

 단어의 끝과 일치

\b

 단어의 경계와 일치

\B

 \b와 반대로 일치

특수한 문자

[\b]

 역 스페이스

\c

 제어문자와 일치

\d

 모든 숫자와 일치

\D

 /d와 반대

\f

 페이지 넘기기 (form feed)

\n

 줄바꿈

\r

 캐리지 리턴

\s

 공백 문자와 일치

\S

 \s와 반대로 일치

\t

 탭

\v

 수직 탭

\w

 영숫자 문자나 밑줄과 일치

\W

 \w와 반대로 일치

\x

 16진수 숫자와 일치

\0 (숫자)

 8진수 숫자와 일치

     역참조와

   전후방 탐색

( )

 하위 표현식 정의

\1(숫자)

 첫번째 일치한 하위 표현식,

 두번째로 일치한 하위 표현식은 \2로 표기하는 방식

?=

 전방탐색

?<=

 후방탐색

?!

 부정형 전방탐색

?<!

 부정형 후방탐색

?(backreference)true

 조건 지정

?(backreference)true|false

 else 표현식 조건 지정 

대소문자 변환

\E

 \L 혹은 \U 변환을 끝냄

\I

 다음에 오는 글자를 소문자로 변환

\L

 \E를 만날 때까지 모든 문자를 소문자로 변환

\u

 다음에 오는 글자를 대문자로 변환

\U

 \E를 만날 때까지 모든 문자를 대문자로 변환

변경자

(?m)

 다중행 모드
















































































자주 사용되는 정규표현식



숫자[ 0 ~ 9 ]

 ^[0-9]+$

 이메일 형식만 가능

 ^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$

 한글

 ^[가-힣]+$

 한글+공백

 ^[가-힣]\s+$

 영문

^[a-zA-Z]+$

 한글+영문

^[가-힣a-zA-Z]+$

 영문+숫자

 ^[a-zA-Z0-9]+$

 휴대폰 번호

^[0-9]{2,3}-[0-9]{3,4}-[0-9]{4}$

 주민번호 (- 포함)

 ^(?:[0-9]{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[1,2][0-9]|3[0,1]))-[1-4][0-9]{6}$

 url ( protocol 포함)

 /^((http(s?))\:\/\/)([0-9a-zA-Z\-]+\.)+[a-zA-Z]{2,6}(\:[0-9]+)?(\/\S*)?$

 주석

 \/\/.*

 적어도 소문자 하나대문자 하나숫자 하나가 포함되어 있는 문자열(8글자 이상 15글자 이하)

 (?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,15}








Java  Example



자바에서 정규표현식과 함께 사용할 수 있는 클래스 및 인터페이스 다음과 같다.


(1) Pattern class

(2) Matcher class

(3) Match Result Interface



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class Regex {
 
    public static void  main(String[] args) {
        //영문+공
        String regex = "^[a-zA-Z\\s]+$";
        
        String input = "Hello World";
        
        boolean matches = Pattern.matches(regex,input);
        
        //true
        System.out.println(matches);
        
        //찾고자하는 문자 + 공백 
        String findRegex = "Hello\\s";
        
        Matcher matcher = Pattern.compile(findRegex).matcher(input);
        
        while(matcher.find()) {
            System.out.println(matcher.group()); // Hello + 공백 출력
            
            String changeData = matcher.replaceAll("Change");
            System.out.println(changeData);
        }
    }
}
 
cs



>>true

>>Hello 

>>ChangeWorld





http://blog.daum.net/creazier/15309380

https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html

'기타' 카테고리의 다른 글

Thread 분석  (0) 2018.11.19
Oracle JDK 유료화의 논쟁, OpenJDK와의 차이  (0) 2018.11.03
DDD(Domain Driven Design)  (0) 2018.10.14
단축URL 서비스  (0) 2018.07.08
Cheat Sheet  (0) 2018.06.13



단축URL : 말 그대로 특정 URL을 랜덤한 키 값을 갖는 짧은 형태의 URL로 제공해주는 서비스



http://smartincome.tistory.com/377




'기타' 카테고리의 다른 글

Thread 분석  (0) 2018.11.19
Oracle JDK 유료화의 논쟁, OpenJDK와의 차이  (0) 2018.11.03
DDD(Domain Driven Design)  (0) 2018.10.14
정규표현식(Regular Expression)  (0) 2018.07.08
Cheat Sheet  (0) 2018.06.13

Pub/Sub Model


Redis는 JMS나 IBM MQ 같은 메시징에 활용할 수 있는데 1:1 형태의 Queue뿐만 아니라 1:N 형태의 Publish/Subscribe 메시징도 지원한다(Publish/Subscribe 구조에서 사용되는 Queue를 일반적으로 Topic이라고 한다). 하나의 클라이언트가 메시지를 Publish하면 이 Topic에 연결되어 있는 다수의 클라이언트가 메시지를 받을 수 있는 구조이다(Publish/Subscribe 형태의 메시징에 대해서는 http://en.wikipedia.org/wiki/ Pub/sub를 참고하길 바란다).

재미있는 것 중에 하나는 일반적인 Pub/Sub 시스템의 경우 Subscribe하는 하나의 Topic에서만 Subscribe하는데 반해, Redis에서는 pattern matching을 통해 다수의 Topic에서 메시지를 Subscribe할 수 있다. 예를 들어 topic 이름이 music.pop, music.classic이라는 2개의 Topic이 있을 때, “PSUBSCRIBE music.*”라고 하면 2개의 Topic에서 동시에 메시지를 Subscribe할 수 있다.




출처: https://www.kdata.or.kr/info/info_04_view.html?field=&keyword=&type=techreport&page=38&dbnum=176019&mode=detail&type=techreport

'Cloud & NoSQL & Middleware > Redis' 카테고리의 다른 글

SpirngBoot에서 Redis 연동(Jedis)  (0) 2018.08.09
Redis 명령어  (0) 2018.08.04
Java에서 Redis 연동 테스트 (jedis)  (0) 2018.07.01
MacOS에서 Redis 설치 및 실행  (0) 2018.07.01
Redis 특징(3) - Redis Persistance  (0) 2018.06.29

Jedis


Java에서 Jedis Library를 사용하여 Redis에 연동한다.



https://mvnrepository.com/artifact/redis.clients/jedis/2.9.0








Connection Pool 및 set, get, 만료시간 지정



단순 테스트 용도라면 그냥 접근해도 좋지만, 성능을 염두하고 있다면 JedisPool을 사용해야 하며 Apache-common library도 함께 필요하다.




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
 
public class Main {
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        
        String host = "127.0.0.1";
        int port = 6379;
        int timeout = 3000;
        int db = 0;
        
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        
        JedisPool pool = new JedisPool(jedisPoolConfig,host,port,timeout,null,db);
        
        Jedis jedis = pool.getResource();
        
        //Connect 체크 
        System.out.println(jedis.isConnected());
        
jedis.set("key4""6");
        jedis.set("key5""6");
        
        // 데이터의 만료시간을 지정
        jedis.expire("key5",1);
        
        System.out.println(jedis.get("key5"));
        
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println(jedis.get("key5"));
    
        if( jedis != null ){
            jedis.close();
        }
        pool.close();
        
    }
 
}
 
cs



>>true

>>6

>>null









list, hashes, set, sorted set 사용



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
 
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
 
public class Main {
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
 
        String host = "127.0.0.1";
        int port = 6379;
        int timeout = 3000;
        int db = 2;
 
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
 
        JedisPool pool = new JedisPool(jedisPoolConfig, host, port, timeout, null, db);
 
        Jedis jedis = pool.getResource();
 
        // list 형태로 입력
        jedis.lpush("id""choi");
        jedis.lpush("id""keach");
        jedis.lpush("id""hoo");
 
        // 첫번 째 요소를 제거하고 꺼냄
        System.out.println(jedis.lpop("id"));
        // 마지막 요소를 제거하고 꺼냄
        System.out.println(jedis.rpop("id"));
 
        // hash 형태로 입력
        Map<StringString> score = new HashMap<>();
        score.put("kim""220");
        score.put("park""240");
 
        jedis.hmset("score", score);
 
        Map<StringString> getMap = jedis.hgetAll("score");
 
        Set<String> key = getMap.keySet();
 
        Iterator<String> keyIter = key.iterator();
 
        while (keyIter.hasNext()) {
            System.out.println(getMap.get(keyIter.next()));
        }
 
        // Set 형태로 입력
        jedis.sadd("user""user00");
        jedis.sadd("user""user01");
        jedis.sadd("user""user02");
 
        Set<String> user = jedis.smembers("user");
 
        Iterator<String> iter = user.iterator();
 
        while (iter.hasNext()) {
            System.out.println(iter.next());
        }
        
        
        // Sorted Set 형태로 입력
        jedis.zadd("sortedUser"1000"user00");
        jedis.zadd("sortedUser"1048"user01");
        jedis.zadd("sortedUser"1024"user02");
        
 
        if (jedis != null) {
            jedis.close();
        }
        pool.close();
 
    }
 
}
 
cs





특이하게 봐야 할 곳이 있다면 SortedUser 키 . 

user02의 경우 마지막에 추가했지만 확인해보면 가중치 값으로 인해 중간에 삽입된 것을 확인 할 수 있다.






마지막으로 키 삭제에 대한 코드는 다음과 같다.


jedis.del("key");







참고

http://jdm.kr/blog/202




'Cloud & NoSQL & Middleware > Redis' 카테고리의 다른 글

Redis 명령어  (0) 2018.08.04
Redis Pub/Sub Model  (0) 2018.07.01
MacOS에서 Redis 설치 및 실행  (0) 2018.07.01
Redis 특징(3) - Redis Persistance  (0) 2018.06.29
Redis 특징 (2) - 지원 데이터 타입  (0) 2018.06.29

MacOS에서 Redis 설치


mac에서는 설치유틸리티인 brew를 통해 손쉽게 redis를 설치할 수 있다.




Redis 설치


$brew install redis





Redis 서비스 실행, 중지, 재시작


$brew services start redis

$brew services stop redis

$brew services restart redis



Redis 설정


# Accept connections on the specified port, default is 6379.

# If port 0 is specified Redis will not listen on a TCP socket.
port  6379   [포트번호 변경]

# Warning: since Redis is pretty fast an outside user can try up to
# 150k passwords per second against a good box. This means that you should
# use a very strong password otherwise it will be very easy to break.
#
requirepass password  [주석제거하고 패스워드 입력]

# By default Redis listens for connections from all the network interfaces
# available on the server. It is possible to listen to just one or multiple
# interfaces using the "bind" configuration directive, followed by one or
# more IP addresses.
#
# Examples:
#

# bind 192.168.1.100 10.0.0.1  
bind 127.0.0.1 192.168.0.101   [외부에서 접근 가능하도록 IP 추가 가능]





Redis 실행


$redis-server







Redis 클라이언트


https://redisdesktop.com 에서 클라이언트를 다운받고 쉽게 redis를 사용할 수 있다.




설치


ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" < /dev/null 2> /dev/null ; brew install caskroom/cask/brew-cask 2> /dev/null



brew cask install rdm






'Cloud & NoSQL & Middleware > Redis' 카테고리의 다른 글

Redis Pub/Sub Model  (0) 2018.07.01
Java에서 Redis 연동 테스트 (jedis)  (0) 2018.07.01
Redis 특징(3) - Redis Persistance  (0) 2018.06.29
Redis 특징 (2) - 지원 데이터 타입  (0) 2018.06.29
Redis 특징  (2) 2018.06.29

+ Recent posts