반응형

안녕하세요 가야태자 @talkit 입니다.

지난 번에 Hello World를 찍고 ^^ 당황 스럽긴 하겠지만 ㅋㅋㅋ 지금 하고 있는 프로젝트에서 암호화/복호화 관련 업무가 있어서 ^^ 적어 보도록 하겠습니다.

개요

우선, 암호화는 사람들이 모르도록 이상한 문자열 등으로 바꾸는 것을 이야기 합니다. 그런데 이게 보통은 해독할 수 있는 규칙이 있습니다. 그래야 공통으로 약속되어서 풀어 볼 수 있으니까요.

암호화는 또 단방향 암호화와 양 방향 암호화가 있습니다.

단방향 암호화는 그야말로 복호화가 없는 단방향의 암호화 입니다. 단, 암호화 할때마다 동일한 결과가 나옵니다.

양방향 암호화는 암호화와 복호화가 존재하는 암호화 기법입니다.

일반적으로 단방향 암호화는 비밀번호를 만드는데 쓰입니다. 비밀번호도 양방향 암호화를 해야 할 경우도 있지만, 일반적으로는 단방향 암호화를 진행 합니다.

양방향 암호화는 주로 문서교환을 위해서 사용 합니다. 또는 DB에 바로 저장 되면 안되는 개인 정보 등의 저장을 위해서 사용 합니다.

이번에 제가 만들어 본 암호화는 양방향 암호화 입니다. ^^

개인키, 공개키 생성 프로그램

--

양방향 암호화를 하려면, 개인키와 공개키가 필요 합니다. 이번에 암호화 려는 기법은 RSA 기법입니다. RSA는 다음에 알아보도록 하고 오늘은 JAVA 어떻게 코드를 작성하는지만 보겠습니다. ^^

package com.tistory.talkit;

import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.SecureRandom;
import java.util.Base64;

public class MakeKeyData {

    public static void main(String[] args) throws NoSuchAlgorithmException {
        // RSA로 암호화 하겠다. 
        KeyPairGenerator keyPairGenerator =
                KeyPairGenerator.getInstance("RSA");
        SecureRandom secureRandom = new SecureRandom();
         // Random 키를 이용해서 키페어 생성 준비
        keyPairGenerator.initialize(2048,secureRandom);

         // 키페어에 암호화된 내용을 담기 
        KeyPair pair = keyPairGenerator.generateKeyPair();

        // 공개키 획득
        PublicKey publicKey = pair.getPublic();

        // 공개키를 문자열로 출력
        String publicKeyString =
        Base64.getEncoder().encodeToString(publicKey.getEncoded());

        System.out.println("public key = "+ publicKeyString);

        // 개인키 획득
        PrivateKey privateKey = pair.getPrivate();
        // 개인키를 문자열로 출력
        String privateKeyString =
        Base64.getEncoder().encodeToString(privateKey.getEncoded());

        System.out.println("private key = "+ privateKeyString);

    }

}

위 코드를 만들어서 수행하면 아래와 같이 나옵니다.

public key = MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAppicAq5Xn8+KZFQyP825E4aDPjFpyxhK5WATI4k3HllMxGo8FBOwoDl+lgVEIPEGgfD+t1cmBOpPkT7Mx54UQ+bSSU2T1wDR7QwyGV2iuxe6DCtQfVLuzYd6uxZO3pWoN93q9DkhzbLLOW1bLOieodnhMRq293uoKRWCP+Sp586SVPxwW/hWZjy57NIta1ew+JnRtHsg7reWOjyiCXORXdQvRoGfAz9ZC0aZBqopy84ZtMCK42y0Wprm0Oi4u3bwk2h2EkvGUOIRBHEly//M0Ma4RGlHWU7jpg0CiXcJAdq1DRMd6hzFVxUV4n23575NOKLwEirvqbgZXoaLJSo/1QIDAQAB
private key = MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCmmJwCrlefz4pkVDI/zbkThoM+MWnLGErlYBMjiTceWUzEajwUE7CgOX6WBUQg8QaB8P63VyYE6k+RPszHnhRD5tJJTZPXANHtDDIZXaK7F7oMK1B9Uu7Nh3q7Fk7elag33er0OSHNsss5bVss6J6h2eExGrb3e6gpFYI/5KnnzpJU/HBb+FZmPLns0i1rV7D4mdG0eyDut5Y6PKIJc5Fd1C9GgZ8DP1kLRpkGqinLzhm0wIrjbLRamubQ6Li7dvCTaHYSS8ZQ4hEEcSXL/8zQxrhEaUdZTuOmDQKJdwkB2rUNEx3qHMVXFRXifbfnvk04ovASKu+puBlehoslKj/VAgMBAAECggEAXoMdnvfBhkx7usd5anEPmmApfNMTrcCuXMrQkMx7lKAcySFrzAgPoBZ+FiYOrJGQm49ZMjIiw48abNAv5N9tp8f/bM6yHLu+XLkagwF4HKQtTFIWa8Ls73T4z8KsI+LLeEZR0RPIdaYFXSMJIsUlmbS96Nm7C1P/5q7pIc5cBcFg8uyFA13yHUUd5oJaal7RPVIfRQAUZZNj3crSVdQYCfdB42nokQ0z5kv3Qm3eu04Wqli/GyWIKRbxaffTlYvEjzjN4cxptJOPSn6zQlLXIStmwohQLjmx1UQ1cWJWqwF0910QleIJyR1iBKEtbvUORxEc0hv+a/2trwQP973gAQKBgQD55jq7ofNXSsnhyC9IJEyGDfvSRTtMEDwEk4pXQy6RKFrUN3/5AD40EBb2V0txhIwQxPD2YBCkSVXW/swMMA/QSM1lLLMkSqRkQhBucAO2RimgDNVXbzakFAmDgWSUjNz0HrSXJuGmKnErb42I+0yc+hd+Sl+WqRgWZ7SkUPLN1QKBgQCqqcS1XGKLoVyRnIYGivsA2/83RIJVx8Mjzofgg6Ekd5Q1uKMZFowAy3wbqMCRRW8+qufVmElzCMP79Pijh2nrv7QfEBrTbWdDgiMJz+Sq6JGHDyAiGv7v5j/nbl0JlgNKKmx2fiNpITBNQTQWPs3cqxArKz3j0Apy3HphlWiqAQKBgQC8Qbe/QDrMaPf7Ek6kP0wytPgfKK6KF7TPEcLnCCJdkhQSyRisIYW6vOA/hfW8t8i4nVSVljsTOHflNh/Lkq1nEGFDNdBip6R+LtKoD9SMDQEwpFpXut1j8ABWxDRcQF33veX39H+LKXAF88yhBAdsPm9SYX7vRcVyo3+PRbgUXQKBgACIqWnb0R8YsR5ve+fXVXOqPIEiwLmd91lMUxZ7suxXR2pnmnMApA14lXnMrFWH/xIWHMWJRWmLtHk8Se7RBJ7NKbYTKdJRfEo0xQFJ2jBCq/ndLT+OEBAWC0shCD94bag0u8QfHuM8TFdhhdUv+xremh1YdEgbJX04fVWCzyIBAoGBAM4g8t3KCd+fcwn2tQOENr6G4pztm5qvFw1rsXK46K2P0Bggf54f+nrVBHUh1lSVk1uLyzx8QF7Btl++GD64w7MOWPC40osCNaL7uHqwFx1rrZdsuF0EM9lBtvzxBUbQkOh5T8U1cBCHupdETXsKmgAbdoBXyp22Z3En/zpSz8kJ

저 두개의 키가 암호화와 복호화를 위한 키 입니다.

암호화 함수 만들기


공개키와 개인키를 이제 만들었으면 우선 코드를 개별적으로 설명 드리겠습니다.

우선, encode 함수를 만듭니다.

    public static String encode(String decodeText) throws GeneralSecurityException, IOException {

        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
        SecureRandom secureRandom = new SecureRandom();

        keyPairGenerator.initialize(2048, secureRandom);

        PrivateKey privateKey = (PrivateKey) loadPrivateKey(privateKeyString1);

        Cipher encryptionCipher = Cipher.getInstance("RSA");
        encryptionCipher.init(Cipher.ENCRYPT_MODE, privateKey);
        String message = decodeText;
        byte[] encryptedMessage = encryptionCipher.doFinal(message.getBytes());
        String encryption = Base64.getEncoder().encodeToString(encryptedMessage);

        return encryption;

    }

암호화 함수는 내용은 복잡하지만, 사용은 편하도록 encode(복호화된 텍스트) 형식의 함수를 만들었습니다.

나머지는 루틴이라고 생각하시면 되고 ^^ 앞에서 만든키를 키로 변환해 주는 과정이 필요합니다.

위 코드 중에

        PrivateKey privateKey = (PrivateKey) loadPrivateKey(privateKeyString1);

이 부분입니다. 이부분은 함수로 다시 작성해서 사용했씁니다.

    // 문자열 공개키를 Key 로 변환
    public static Key loadPublicKey(String stored)
            throws GeneralSecurityException, IOException {
        byte[] data = Base64.getDecoder().decode((stored.getBytes()));
        X509EncodedKeySpec spec = new X509EncodedKeySpec(data);
        KeyFactory fact = KeyFactory.getInstance("RSA");
        return fact.generatePublic(spec);
    }

    // 문자열 개인키를 Private Key로 변환
    public static PrivateKey loadPrivateKey(String key64)
            throws GeneralSecurityException {
        byte[] clear = Base64.getDecoder().decode((key64.getBytes()));
        PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(clear);
        KeyFactory fact = KeyFactory.getInstance("RSA");
        PrivateKey priv = fact.generatePrivate(keySpec);
        Arrays.fill(clear, (byte) 0);
        return priv;
    }

개인키 공개키를 모두다 할 수 있도록 만들었습니다.

복호화 함수 만들기


다음으로 decode함수의 소스 코드 입니다.

     public static String decode(String encodeText) throws GeneralSecurityException, IOException {

        KeyPairGenerator keyPairGenerator =
                KeyPairGenerator.getInstance("RSA");
        SecureRandom secureRandom = new SecureRandom();

        keyPairGenerator.initialize(2048,secureRandom);

        PublicKey publicKey = (PublicKey) loadPublicKey(publicKeyString1);

        //Decrypt Hello world message
        Cipher decryptionCipher = Cipher.getInstance("RSA");
        decryptionCipher.init(Cipher.DECRYPT_MODE,publicKey);
        byte[] decryptedMessage =
        decryptionCipher.doFinal(Base64.getDecoder().decode(encodeText));
        String decryption = new String(decryptedMessage);
        //System.out.println("decrypted message = "+decryption);

        return decryption;

    }

위 코드는 암호화된 텍스트를 넣으면, 복호화된 텍스트를 리턴하도록 만들었습니다.

암호화와 마찬가지로 중간에 아래 코드가 중요하고 그 내용은 복호화에 넣어둔 코드를 확인 하십시오.


         PublicKey publicKey = (PublicKey) loadPublicKey(publicKeyString1);

메인 함수에서 불러서 암복호화 해보기



      public static void main(String[] args) throws GeneralSecurityException, IOException {
        String encodeText = encode("Hello World. Welcome to Korea.  * ");

        System.out.println(encodeText);

        System.out.println("encoded Text : " + encodeText);

        String decodeText = decode(encodeText);

        System.out.println("decoded Text : " + decodeText);


    }

Hello World. 으로 시작하는 문자열을 암호화 했다가 복후화 하는 코드 입니다.

실행하면

encoded Text : c8AcbCp4bIARJA3EOW9cf41pRIefVhCvCWyxwcgwifWaDK8AX9RJoe8dOgPzuvauCZZG5ibbOMtvEPh06DUwojFzMngCtT3T6VOyzWDA/CBFN52jXZzqw9M1K1v3vZJ+0uft86TomxZvbWdxv5XPo5keh0HyWyexv3U5c5cXypMwBTDECUiQkUPjZN1aUf7dHGQG0uC+KuyNEKK4NDMddPWoo0gzlWxsxIBkm7oLpuKEcXP9ThM16JQD8rhskJbXwbhUL39xfmDSti8Om9DcrU6KCDakKeT7i72yRjAD5B60Da28jT1DlzwS9p7IlfPXdlybjLKUMUcQsF1rJ1Xvww==
decoded Text : Hello World. Welcome to Korea.  *

위와 같이 잘 복호화 되어서 나옵니다.

전체소스코드



package com.tistory.talkit;

import java.io.IOException;
import java.security.GeneralSecurityException;
import java.security.Key;
import java.security.KeyFactory;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.SecureRandom;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.Arrays;
import java.util.Base64;

import javax.crypto.Cipher;

public class RSAEncode {

    public static String publicKeyString1 = "만들어진 public key";

    public static String privateKeyString1 = "만들어진 private key";

    public static void main(String[] args) throws GeneralSecurityException, IOException {
        String encodeText = encode("Hello World. Welcome to Korea.  * ");

        System.out.println(encodeText);

        System.out.println("encoded Text : " + encodeText);

        String decodeText = decode(encodeText);

        System.out.println("decoded Text : " + decodeText);


    }

    public static String decode(String encodeText) throws GeneralSecurityException, IOException {

        KeyPairGenerator keyPairGenerator =
                KeyPairGenerator.getInstance("RSA");
        SecureRandom secureRandom = new SecureRandom();

        keyPairGenerator.initialize(2048,secureRandom);

        PublicKey publicKey = (PublicKey) loadPublicKey(publicKeyString1);

        //Decrypt Hello world message
        Cipher decryptionCipher = Cipher.getInstance("RSA");
        decryptionCipher.init(Cipher.DECRYPT_MODE,publicKey);
        byte[] decryptedMessage =
        decryptionCipher.doFinal(Base64.getDecoder().decode(encodeText));
        String decryption = new String(decryptedMessage);
        //System.out.println("decrypted message = "+decryption);

        return decryption;

    }

    public static String encode(String decodeText) throws GeneralSecurityException, IOException {

        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
        SecureRandom secureRandom = new SecureRandom();

        keyPairGenerator.initialize(2048, secureRandom);

        PrivateKey privateKey = (PrivateKey) loadPrivateKey(privateKeyString1);

        Cipher encryptionCipher = Cipher.getInstance("RSA");
        encryptionCipher.init(Cipher.ENCRYPT_MODE, privateKey);
        String message = decodeText;
        byte[] encryptedMessage = encryptionCipher.doFinal(message.getBytes());
        String encryption = Base64.getEncoder().encodeToString(encryptedMessage);

        return encryption;

    }


    // 문자열 공개키를 Key 로 변환
    public static Key loadPublicKey(String stored)
            throws GeneralSecurityException, IOException {
        byte[] data = Base64.getDecoder().decode((stored.getBytes()));
        X509EncodedKeySpec spec = new X509EncodedKeySpec(data);
        KeyFactory fact = KeyFactory.getInstance("RSA");
        return fact.generatePublic(spec);
    }

    // 문자열 개인키를 Private Key로 변환
    public static PrivateKey loadPrivateKey(String key64)
            throws GeneralSecurityException {
        byte[] clear = Base64.getDecoder().decode((key64.getBytes()));
        PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(clear);
        KeyFactory fact = KeyFactory.getInstance("RSA");
        PrivateKey priv = fact.generatePrivate(keySpec);
        Arrays.fill(clear, (byte) 0);
        return priv;
    }

}

개인키와 공개키는  제가 만든 저위에 있는 것을 복사하셔도 되고, MakeKeyData를 이용해서 만드셔도 됩니다. 

그러나, 되도록이면 만들어서 사용하십시오. 공개된 개인키와 공개키를 사용하면 다음에 해킹 당했을 때 위험할 수 있습니다.

그리고, 주의할 점은 저 공개키와 개인키는 무조건 보관해두고 잃어버리시면 안됩니다. ^^

다음에 복호화가 안될꺼니까요.

감사합니다. 

 

반응형
반응형

제가 Java를 처음 시작할때는 eclipse가 아닌 EditPlus라는 편집기를 이용해서 Java개발을 한적도 있습니다. 

그런데, 요즘은 eclipse가 없으면 작업을 못합니다. 

저는 순수 eclipse도 사용하지만, 지난 글에서 이야기한 전자정부 프레임워크 개발 툴을 주로 사용 합니다. 

자바/Java 전자정부 표준프레임워크 개발환경 설치 및 실행하기 https://talkit.tistory.com/685

그래서 저 위에 있는 화면도 전자정부 프레임워크를 실행한 화면입니다.  ^^

오늘은 maven 프로젝트만 만들고 Hello World 만 찍어 보고 끝낼 생각 입니다. ^^

File >> New >> Maven Project 를 실행 하십시오

여기서는 Create a simple project(skip archetype selection)을 선택하고 Next를 누릅니다. 

위와 같이 Gropup 아이디는 가지고 있는 도메인이 있으시면 꺼꾸로 적으시고 ^^ 아니면 임의로 만드시면 됩니다. 

저는 일단 블로그 주소를 꺼꾸로 만들었습니다. ^^

Finish 를 클릭하시면 프로젝트가 생성 됩니다. 

위와 같이 나오면 잘 생성이 된 것입니다. 

JDK가 무쟈게 낮은 버전으로 제가 설정 했네요 ^^ 저건 다시 다음에 설정하고 일단 지금은 간단하게 Hello World만 찍을 꺼여서 실제 Maven 프로젝트의 중요 파일인 pom.xml 만 한번 살펴 보겠습니다. 

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.tistory.talkit</groupId>
  <artifactId>HelloWorld</artifactId>
  <version>0.0.1-SNAPSHOT</version>
</project>

위와 비슷하게 나와 있으면 잘 된 것입니다. ^^

왼쪽에 src/main/java를 클릭하시고 오른쪽 마우스 클릭하셔서 New 선택하시고, Package를 선택하심시오.

그리고 위와 같이 화면이 뜨면 저처럼 저렇게 입력하셔도 되고 본인의 고유 패키지를 입력하십시오.

이렇게 변경 되었을 꺼구요. 저기다가 Java 프로그램을 하나 만들겠습니다. 

여기서는 프로그램이 아니고 Class 입니다. 

패키지를 클릭하고 오른쪽 마우스 누르고, New 누르고, Class를 선택하십시오.

Class 명령은 HelloWorld로 했구요. 나머지는 그대로 두시고, public static void main(String[] args)를 체크하고, Finsih를 누릅니다. 

그러면 위와 같이 나올껍니다. 

저기 중간에 있는 코드 창에다가 우리가 작업하려고 하는 코드를 넣으면 됩니다. 

// TODO Auto-generated method stub

위 코드를 지우시고, 아래 코드로 변경해 보십시오.

		System.out.println("Hello World!!");

위 코드만 넣으시면 됩니다. 

패키지가 다를 수도 있지만, Full Code는 아래와 같습니다. 

package com.tistory.talkit;

public class HelloWorld {

	public static void main(String[] args) {
		
		System.out.println("Hello World!!");

	}

}

저걸 복사하시고 package 부분만 변경해주셔도 됩니다. ^^

그럼 이제 실행해보겠습니다. 

HelloWorld.java를 클릭하시고 오른쪽 마우스를 누른다음에 Run As >> Java Application 순으로 실행하시면 됩니다. 

하단의 콘솔창에 저희가 출력한 Hello World!! 가 출력 되었습니다. ^^

일단 이번에는 여기까지 하고, 다음에는 pom.xml에 필요한 라이버러리를 추가하고 패포를 위한 설정을 하는 등의 과정을 보여 드리겠습니다. 

감사합니다. 

 

반응형
반응형

안녕하세요 가야태자 @talkit 입니다. 

리눅스/Linux tail 문서의 끝(꼬리)를 보는 명령어. The command for text tail. https://talkit.tistory.com/681

어제 글에 이어서 반대의 개념을 알아 보겠습니다. 

우선 계속 알아보듯이 man을 실행해 보겠습니다. 

man head
HEAD(1)                                     User Commands                                    HEAD(1)

NAME
       head - output the first part of files

SYNOPSIS
       head [OPTION]... [FILE]...

DESCRIPTION
       Print  the  first 10 lines of each FILE to standard output.  With more than one FILE, precede
       each with a header giving the file name.

       With no FILE, or when FILE is -, read standard input.

       Mandatory arguments to long options are mandatory for short options too.

       -c, --bytes=[-]NUM
              print the first NUM bytes of each file; with the leading '-', print all but  the  last
              NUM bytes of each file

       -n, --lines=[-]NUM
              print the first NUM lines instead of the first 10; with the leading '-', print all but
              the last NUM lines of each file

       -q, --quiet, --silent
              never print headers giving file names

       -v, --verbose
              always print headers giving file names

       -z, --zero-terminated
              line delimiter is NUL, not newline

       --help display this help and exit

       --version
              output version information and exit

       NUM may have a multiplier suffix: b 512, kB 1000, K  1024,  MB  1000*1000,  M  1024*1024,  GB
       1000*1000*1000,  G 1024*1024*1024, and so on for T, P, E, Z, Y.  Binary prefixes can be used,
       too: KiB=K, MiB=M, and so on.

AUTHOR
       Written by David MacKenzie and Jim Meyering.

REPORTING BUGS
       GNU coreutils online help: <https://www.gnu.org/software/coreutils/>
       Report any translation bugs to <https://translationproject.org/team/>

COPYRIGHT
       Copyright © 2020 Free Software Foundation, Inc.  License GPLv3+: GNU GPL version 3  or  later
       <https://gnu.org/licenses/gpl.html>.
       This  is free software: you are free to change and redistribute it.  There is NO WARRANTY, to
       the extent permitted by law.

SEE ALSO
       tail(1)

head는 리눅스에서 위에도 나와 있듯이 문서의 시작 부분을 보여주는 명령어 입니다. 

잼있는 것은 맨 마지막에 SEE ALSO에 어제 같이 이야기한 tail이라는 명령어가 있습니다. ^^

head [옵션들] 파일명

위와 같이 사용할 수 있습니다. 

실제로 옵션 없이 temp.txt 를 지난 번 글처럼 출력해 보겠습니다. 

head temp.txt
 
2022-12-01, 경기도, 1
2022-12-01, 강원도, 2
2022-12-01, 경상남도, 3
2022-12-01, 경상북도, 4
2022-12-01, 전라남도, 5
2022-12-01, 전라북도, 6
2022-12-01, 충청남도, 6
2022-12-01, 충청북도, 7
2022-12-02, 경기도, 2
2022-12-02, 강원도, 3

10줄이 잘 출력 되고 있습니다. 

다른 옵션들은 저는 거의 안쓰고 가끔 -n정도를 사용합니다. 

-n은 tail 명령어와 마찬가지로 줄수를 늘리거나 줄여 줍니다. 

-n으로 오늘은 5줄만 출력해보겠습니다. 

head -n 5 temp.txt

2022-12-01, 경기도, 1
2022-12-01, 강원도, 2
2022-12-01, 경상남도, 3
2022-12-01, 경상북도, 4
2022-12-01, 전라남도, 5

위와 같이 앞에서 다섯줄만 잘 출력 되고 있습니다. 

head는 정말로 가끔만 쓰는 명령어여서 ^^

여기서 줄이겠습니다.

감사합니다. 

반응형
반응형

안녕하세요 가야태자 @talkit 입니다. 

오늘은 오랫만에 윈도우용 무료 소프트웨어를 이야기 합니다. ^^

음 리눅스 강좌를 쓰다 보니 제가 텍스트로 여러분들께 결과나 명령어를 보여 드리고 있는데 동적인 것들은 비디오로 녹화해서 보여 드릴 필요가 있다고 생각되어서 옛날의 기억을 뒤져서 ^^ 가져온 소프투에어 입니다. 

일단 다운로드하고 깔아 보겠습니다. 저기 초록색 커다란 DOWNLOAD 버튼을 클릭 하시면 됩니다. 중간에 START는 광고 입니다. ^^

다운로드 받으신 프로그램을 실행 하십시오.

그러면, 관리자 권한을 획득하고 설치를 시작 합니다. 

라이센스 동의해주시고, Next

설치 위치 선택해주시고, Next

메뉴명 정해 주시고, Next

바로가기를 만드시려면 선택하시고 Next 

이제 준비는 완료 되었습니다. Install을 눌러 주십시오.

여기서도 Next

설치는 완료 되었습니다. Finish 를 클릭 하십시오.

이렇게 뜨는데 X 눌러서 닫으시면 됩니다. 

매뉴는 매우 직관적입니다. 녹화 일지정지 정지 등으로요 ^^

간단하게 Region 메뉴에서 Region을 선택해 주십시오.

그리고 빨간 동그라미를 누르시면 됩니다. 

그리고 네모를 선택해 주면 녹화를 시작 합니다. 

제가 지금 글을 작성하는 모습을 녹화 해보고 있습니다.

녹화를 끝내시려면 다시 프로그램으로 돌아가서 파란색 네모 버튼을 클릭하시면 됩니다. 

녹화가 끝나면 Play도 해줍니다. 

오 티스토리에 동영상은 처음 올려 봅니다. 

저렇게 녹화해 줍니다. ^^

감사합니다. 

 

반응형
반응형

안녕하세요 가야태자 @talkit 입니다.

제 스팀잇과 블로그에 방문해 주신 모든 분들 새해 복 많이 받으십시오.

이제 호랑이해가 지고 토끼해가 열렸네요.

올해도 새해 복 많이 받으시고, 모두들 건강한 한해 되십시오.

작년에 티스토리는 한달에 약 6000명 정도 방문하신 것 같네요 ^^

그런데 06 07 08 09 사이가 가장 많은 방문자 수가 있구요.

제가 다시 글을 쓰기 시작했습니다.

내년에 좀 더 방문자수가 많았으면 하는 바램입니다. ^^

https://talkit.tistory.com

https://steemit.com/@talkit

위 두 사이트에 많은 방문 부탁 드려요.

하시는 모든일이 잘되시기를 빌면이 이만 뿅

반응형
반응형

안녕하세요 가야태자 @talkit 입니다. 

오늘 제가 앞으로 설치하려는 프로그램 때문에 데이터베이스가 필요해서 우분투 리눅스에 데이터베이스를 설치해보겠습니다. 

우선 당연히 우분투 리눅스에 접속 합니다. ^^

잘 접속 하셨다고 생각하고 깔아 보도록 하겠습니다. ^^

sudo apt update

우선 최신 업데이트가 있는지 확인 합니다. 

보통은 비밀번호를 한번 넣어 줘야 하지만 ^^

저희는 비밀번호를 넣지 않아도 되네요 ^^

sudo apt install mysql-server

업데이트가 끝나면 위 명령어를 입력하시면 됩니다. 

sudo apt install mysql-server
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  libcgi-fast-perl libcgi-pm-perl libclone-perl libencode-locale-perl libevent-pthreads-2.1-7 libfcgi-bin libfcgi-perl libfcgi0ldbl libhtml-parser-perl libhtml-tagset-perl libhtml-template-perl libhttp-date-perl libhttp-message-perl libio-html-perl liblwp-mediatypes-perl libmecab2 libprotobuf-lite23 libtimedate-perl liburi-perl mecab-ipadic mecab-ipadic-utf8
  mecab-utils mysql-client-8.0 mysql-client-core-8.0 mysql-common mysql-server-8.0 mysql-server-core-8.0
Suggested packages:
  libdata-dump-perl libipc-sharedcache-perl libbusiness-isbn-perl libwww-perl mailx tinyca
The following NEW packages will be installed:
  libcgi-fast-perl libcgi-pm-perl libclone-perl libencode-locale-perl libevent-pthreads-2.1-7 libfcgi-bin libfcgi-perl libfcgi0ldbl libhtml-parser-perl libhtml-tagset-perl libhtml-template-perl libhttp-date-perl libhttp-message-perl libio-html-perl liblwp-mediatypes-perl libmecab2 libprotobuf-lite23 libtimedate-perl liburi-perl mecab-ipadic mecab-ipadic-utf8
  mecab-utils mysql-client-8.0 mysql-client-core-8.0 mysql-common mysql-server mysql-server-8.0 mysql-server-core-8.0
0 upgraded, 28 newly installed, 0 to remove and 20 not upgraded.
Need to get 29.4 MB of archives.
After this operation, 242 MB of additional disk space will be used.
Do you want to continue? [Y/n]

그러면 계속 할꺼냐고 묻는데 ^^ 다연히 Y를 입력 합니다. 

정말 간단하네요 ^^

쭉 설치가 이루어지고, 중간에 커널관련된 메시지가 떴는데 캡쳐를 못해서 ^^ OK 두번 눌러 주시면 됩니다. 

mysql client 까지 잘 설치 되었습니다. 

sudo mysql_secure_installation

보안 설정과 root 비밀번호 설정을 위해서 위 프로그램을 실행해 줍니다. 

Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No: Y

보안 때문에 비밀번호를 넣는게 좋다 넣겠느냐? 당연히 Y를 누르셔야 합니다. ^^

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG:

정책적으로 쉬운 비밀번호를 쓸꺼냐 어려운 비밀번호를 쓸꺼냐? 물으면 일단 어려운 비밀번호를 선택해야겠지요 ^^ 하지만, 비밀번호 만들기 규칙이 좀 쉬워야 하니까 다른 방법으로 보안을 신경 써줘야 해서 여기서는 MEDIUM 중간정도를 선택 하겠습니다. ^^

그래서 여기는 1을 넣습니다. 

Please set the password for root here.

New password:

요렇게 나오면 비밀번호를 대소문자를 넣으시고, 특수문자를 썩어서 8자리 이상의 비밀번호를 만드시면 됩니다. 

저는 매일 사용하는 비밀번호가 있어서 넣었습니다. 

Estimated strength of the password: 50
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) :

그랬더니 니가 제공한 비밀번호는 50점 정도 되는데 그래도 쓸래 라고 합니다. 저는 Y를 눌러야지요 ^^

 ... Failed! Error: SET PASSWORD has no significance for user 'root'@'localhost' as the authentication method used doesn't store authentication data in the MySQL server. Please consider using ALTER USER instead if you want to change authentication parameters.

New password:

저 처럼 위와 같이 오류가 나면 해당 쉘을 종료 하십시오 ^^

그리고 다른 방법으로 비밀번호를 변경 합니다. ^^

sudo mysql
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '원하는비밀번호';

여기서 원하는 비밀번호는 아까 만든신 비밀번호 규칙을 잘 따르셔야 합니다. ^^

sudo mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 13
Server version: 8.0.31-0ubuntu0.22.04.1 (Ubuntu)

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

자 이제 제가 원하는 대로 mysql 에 접속이 되네요 간단하게 한번 몇개 명령어만 더 내리고 오늘은 여기까지 글을 마무리 하겠습니다. ^^

show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.01 sec)

show databases; 명령어는 mysql에서 사용할 수 있는 데이터베이스 명을 출력해 줍니다. 

 use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed

use 명령어는 사용하고자 하는 데이터베이스를  선택해 줍니다. 

 show tables;
+------------------------------------------------------+
| Tables_in_mysql                                      |
+------------------------------------------------------+
| columns_priv                                         |
| component                                            |
| db                                                   |
| default_roles                                        |
| engine_cost                                          |
| func                                                 |
| general_log                                          |
| global_grants                                        |
| gtid_executed                                        |
| help_category                                        |
| help_keyword                                         |
| help_relation                                        |
| help_topic                                           |
| innodb_index_stats                                   |
| innodb_table_stats                                   |
| password_history                                     |
| plugin                                               |
| procs_priv                                           |
| proxies_priv                                         |
| replication_asynchronous_connection_failover         |
| replication_asynchronous_connection_failover_managed |
| replication_group_configuration_version              |
| replication_group_member_actions                     |
| role_edges                                           |
| server_cost                                          |
| servers                                              |
| slave_master_info                                    |
| slave_relay_log_info                                 |
| slave_worker_info                                    |
| slow_log                                             |
| tables_priv                                          |
| time_zone                                            |
| time_zone_leap_second                                |
| time_zone_name                                       |
| time_zone_transition                                 |
| time_zone_transition_type                            |
| user                                                 |
+------------------------------------------------------+
37 rows in set (0.00 sec)

show tables 명령어는 데이터베이스 내에 있는 테이블들을 나열해 줍니다. 

정말 잘 설치 되었습니다. 

Tasks: 116 total,   1 running, 115 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.2 sy,  0.0 ni, 99.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :    964.1 total,     74.0 free,    571.1 used,    319.1 buff/cache
MiB Swap:      0.0 total,      0.0 free,      0.0 used.    231.9 avail Mem

아직 데이터를 넣지 않아서 그렇지만, ^^

CPU는 훌륭하네요 ^^ 1VPU이긴 하지만, 충분히 MySQL이 저혼자 쓸때는 잘 돌아 갑니다. ^^

그리고 메모리는 흑흑흑 실제로 운영을 해봐야겠지만 조금 모자랄 수도 있을 것 같습니다. ^^

감사합니다. 

반응형
반응형

안녕하세요 가야태자 @talkit 입니다. 

오늘은 리눅스에서 파일 내용에 내가 원하는 내용이 있는지 찾아 보는 방법을 알려 드리겠습니다. 

grep은 또 조합을 해서도 많이 사용 합니다. 

오늘은 grep 명령어 만으로 이야기 하는 것과 조합에 대한 맞배기를 좀 보여 드리겠습니다. 

우선 조합을 해보려면, 파일이 좀 필요 합니다. 

2022-12-01, 경기도, 1
2022-12-01, 강원도, 2
2022-12-01, 경상남도, 3
2022-12-01, 경상북도, 4
2022-12-01, 전라남도, 5
2022-12-01, 전라북도, 6
2022-12-01, 충청남도, 6
2022-12-01, 충청북도, 7
2022-12-02, 경기도, 2
2022-12-02, 강원도, 3
2022-12-02, 경상남도, 4
2022-12-02, 경상북도, 5
2022-12-02, 전라남도, 6
2022-12-02, 전라북도, 7
2022-12-02, 충청남도, 8
2022-12-02, 충청북도, 9
2022-12-03, 경기도, 3
2022-12-03, 강원도, 4
2022-12-03, 경상남도, 5
2022-12-03, 경상북도, 6
2022-12-03, 전라남도, 7
2022-12-03, 전라북도, 8
2022-12-03, 충청남도, 9
2022-12-03, 충청북도, 10
2022-12-04, 경기도, 4
2022-12-04, 강원도, 5
2022-12-04, 경상남도, 6
2022-12-04, 경상북도, 7
2022-12-04, 전라남도, 8
2022-12-04, 전라북도, 9
2022-12-04, 충청남도, 10
2022-12-04, 충청북도, 11
2022-12-05, 경기도, 5
2022-12-05, 강원도, 6
2022-12-05, 경상남도, 7
2022-12-05, 경상북도, 8
2022-12-05, 전라남도, 9
2022-12-05, 전라북도, 10
2022-12-05, 충청남도, 11
2022-12-05, 충청북도, 12
2022-12-06, 경기도, 6
2022-12-06, 강원도, 7
2022-12-06, 경상남도, 8
2022-12-06, 경상북도, 9
2022-12-06, 전라남도, 10
2022-12-06, 전라북도, 11
2022-12-06, 충청남도, 12
2022-12-06, 충청북도, 13
2022-12-07, 경기도, 7
2022-12-07, 강원도, 8
2022-12-07, 경상남도, 9
2022-12-07, 경상북도, 10
2022-12-07, 전라남도, 11
2022-12-07, 전라북도, 12
2022-12-07, 충청남도, 13
2022-12-07, 충청북도, 14
2022-12-08, 경기도, 8
2022-12-08, 강원도, 9
2022-12-08, 경상남도, 10
2022-12-08, 경상북도, 11
2022-12-08, 전라남도, 12
2022-12-08, 전라북도, 13
2022-12-08, 충청남도, 14
2022-12-08, 충청북도, 15
2022-12-09, 경기도, 9
2022-12-09, 강원도, 10
2022-12-09, 경상남도, 11
2022-12-09, 경상북도, 12
2022-12-09, 전라남도, 13
2022-12-09, 전라북도, 14
2022-12-09, 충청남도, 15
2022-12-09, 충청북도, 16
2022-12-10, 경기도, 10
2022-12-10, 강원도, 11
2022-12-10, 경상남도, 12
2022-12-10, 경상북도, 13
2022-12-10, 전라남도, 14
2022-12-10, 전라북도, 15
2022-12-10, 충청남도, 16
2022-12-10, 충청북도, 17

위와 같은 파일이 있다고 생가갛겠습니다. 

그런데 생각만 하면 자료를 못 만드니 따라하시면 파일이 생깁니다. ^^

vi temp.txt

리눅스에서 위와 같이 치십시오

vi 따로 글을 몇개 적어 보겠습니다. 

오늘은 따라 하시면 됩니다. 

리눅스에서 위 명령어를 입력 합니다. 

그러면 위에서 보이는 것처럼 vi 가 열립니다. 파일이 동일한 파일명으로 존재하면 파일의 내용이 나오겠지만, 우리는 새로운 파일을 만든다고 가정하므로, 저 그림과 비슷해야 합니다. 

그럼 저기서 영어 자판의 소문자 "i"를 타이핑 합니다. 

그러면, 아래에 INSERT 라고 나올 겁니다. 

vi가 입력모드로 변경 된 것입니다. 

앞의 네모에서 복사를 하셨다면, PuTTY를 사용하신다는 전제 하에서 오른쪽 마우스를 클릭 합니다. 

요렇게 나올 겁니다. 

저기서 입력모드를 빠져 나와합니다. 키보드의 "Esc" 키를 타이핑 하십시오.

위와 같이 됩니다. 

여기서 :wq 를 순서대로 입력하고 엔터를 칩니다. 

그림과 같이 타이핑이 쳐질것이고, 저기서 엔터만 누르시면 됩니다. 

ls -al
total 84
drwxr-x--- 4 ubuntu ubuntu 4096 Dec 25 11:41 .
drwxr-xr-x 4 root   root   4096 Dec 19 13:19 ..
-rw------- 1 ubuntu ubuntu 1046 Dec 24 15:28 .bash_history
-rw-r--r-- 1 ubuntu ubuntu  220 Jan  6  2022 .bash_logout
-rw-r--r-- 1 ubuntu ubuntu 3771 Jan  6  2022 .bashrc
drwx------ 2 ubuntu ubuntu 4096 Dec 19 14:28 .cache
-rw------- 1 ubuntu ubuntu   20 Dec 25 11:34 .lesshst
-rw-r--r-- 1 ubuntu ubuntu  807 Jan  6  2022 .profile
drwx------ 2 ubuntu ubuntu 4096 Dec 19 13:19 .ssh
-rw------- 1 ubuntu ubuntu 2986 Dec 25 11:41 .viminfo
-rw-rw-r-- 1 ubuntu ubuntu   54 Dec 24 11:25 hello.txt
-rw-rw-r-- 1 ubuntu ubuntu   18 Dec 24 11:16 hello1.txt
-rw-rw-r-- 1 ubuntu ubuntu   18 Dec 24 11:16 hello2.txt
-rw-rw-r-- 1 ubuntu ubuntu   18 Dec 24 11:16 hello3.txt
-rw-rw-r-- 1 ubuntu ubuntu 2216 Dec 25 11:41 temp.txt
-rw-rw-r-- 1 ubuntu ubuntu 1099 Dec 24 01:06 test.txt
-rw-rw-r-- 1 ubuntu ubuntu 2006 Dec 24 01:13 test2.txt
-rw-rw-r-- 1 ubuntu ubuntu 2006 Dec 24 01:13 text.txt
-rw-rw-r-- 1 ubuntu ubuntu   12 Dec 24 11:16 yellow1.txt
-rw-rw-r-- 1 ubuntu ubuntu   12 Dec 24 11:16 yellow2.txt
-rw-rw-r-- 1 ubuntu ubuntu   12 Dec 24 11:16 yellow3.txt

파일을 찾아보면 저기 temp.txt가 보입니다. ^^

그러면 이제 grep을 이용해서 몇가지 일을 해보겠습니다. 

오늘은 가장 간단하게 할 것이므로 다음과 같이 입력해 보십시오.

grep "경상남도" *

위와 같이 입력 합니다. 

grep "경상남도" *
temp.txt:2022-12-01, 경상남도, 3
temp.txt:2022-12-02, 경상남도, 4
temp.txt:2022-12-03, 경상남도, 5
temp.txt:2022-12-04, 경상남도, 6
temp.txt:2022-12-05, 경상남도, 7
temp.txt:2022-12-06, 경상남도, 8
temp.txt:2022-12-07, 경상남도, 9
temp.txt:2022-12-08, 경상남도, 10
temp.txt:2022-12-09, 경상남도, 11

위와 같이 나옵니다. ^^

어느파일에 temp.txt에 우리 원하는 경상남도가 들어 있다네요.^^

리눅스에 표출 입출력에 대해서 좀 더 설명을 해야겠지만 

위 명령어로 경상남도.txt를 만들어 보겠습니다. 

grep "경상남도" * > 경상남도.txt

실제로 실행을 하고 저희가 cat에서 배워던 내용까지 한번 해서 다시 출력을 해보겠습니다. 

grep "경상남도" * > 경상남도.txt
ubuntu@instance:~$ cat 경상남도.txt
temp.txt:2022-12-01, 경상남도, 3
temp.txt:2022-12-02, 경상남도, 4
temp.txt:2022-12-03, 경상남도, 5
temp.txt:2022-12-04, 경상남도, 6
temp.txt:2022-12-05, 경상남도, 7
temp.txt:2022-12-06, 경상남도, 8
temp.txt:2022-12-07, 경상남도, 9
temp.txt:2022-12-08, 경상남도, 10
temp.txt:2022-12-09, 경상남도, 11
temp.txt:2022-12-10, 경상남도, 12

파일에 위와 같이 나옵니다. 

조금 마음에 안드는 것이 ^^ 저 앞에 파일 이름을 출력한게 마음에 안듭니다. 

그래서 grep의 옵션을 사용해서 파일 이름을 지워 버리겠습니다. ^^

grep -h "경상남도" temp.txt > 경상남도.txt

-h가 no-file-name 이라고 되어 있습니다. ^^

지금 현재 경상남도 파일이 생겨서 * 파일로 하면 파일명이 있는게 나오므로, temp.txt 만 찍어서 했습니다. 

 grep -h "경상남도" temp.txt > 경상남도.txt
ubuntu@instance-:~$ cat 경상남도.txt
2022-12-01, 경상남도, 3
2022-12-02, 경상남도, 4
2022-12-03, 경상남도, 5
2022-12-04, 경상남도, 6
2022-12-05, 경상남도, 7
2022-12-06, 경상남도, 8
2022-12-07, 경상남도, 9
2022-12-08, 경상남도, 10
2022-12-09, 경상남도, 11

결과는 위와 같습니다.

여러분들은 경상남도 뿐 아니라 다른 곳으로 한번 해보십시오.^^

자 그런데, 아까 반대로 파일이름은 봤습니다. 그런데 이게 몇 Line에 있는지를 알고 싶으면 어떻게 해야 할까요?

 grep -n "경상남도" temp.txt
 grep -n "경상남도" temp.txt
3:2022-12-01, 경상남도, 3
11:2022-12-02, 경상남도, 4
19:2022-12-03, 경상남도, 5
27:2022-12-04, 경상남도, 6
35:2022-12-05, 경상남도, 7
43:2022-12-06, 경상남도, 8
51:2022-12-07, 경상남도, 9
59:2022-12-08, 경상남도, 10
67:2022-12-09, 경상남도, 11
75:2022-12-10, 경상남도, 12

요렇게 하시면 젤 앞에 : 앞에 있는 수자가 라인 넘버 입니다. ^^

자 이제 다시 vi 도 연습 해볼 겸 해서 실제로 3라인에 경상남도가 있는지 한번 알아보겠습니다.

vi temp.txt

위와 같이 그냥 치십시오.

"백문이 불여 일타" 라고 ^^ 열심히 치시다 보면, 손가락이 기억을 할겁니다 .^^

이렇게 봤을때 그냥 눈으로 보셔도 ^^ 3라인데 있네요 ㅎㅎㅎ

하지만 확실하게 하기 위해서 vi 에서 :3 을 입력하고, 엔터를 쳐 보십시오.

: 하고 숫자를 치시면 해당라인으로 커서를 옮겨 줍니다. 그러니까 저희는 3라인으로 이동 시켰으니 정확하게 3라인에 경상남도가 있습니다. ^^

그리고 또한가지 더 있습니다. 

:set nu 라고 vi 화면에서 입력하고 엔터를 치십시오.

제일 압줄에 줄 번호를 달아 줍니다. ^^

3라인에 확실하게 있네요 ㅎㅎㅎ

:set nonu를 입력하십시오.

다시 줄번호를 꺼줍니다. 

이번에는 vi에서 빠져 나가겠습니다. 

앞에서 :wq 를 하셔도 되겠지만, 

저희는 :q! 를 입력합니다. 

vi에서 문서를 보기만 하셨으면 상관이 없는데 실수로 뭔가를 하셨다면 초기화 해줍니다. 그래서 !는 강제로 입니다. 

강제로 나가겠다는 뜻입니다. ^^

:q! 를 입력하시고, 엔터를 치시면 빠져 나갑니다. 

오늘은 grep에 대해서 알아 보았습니다. 

다음 시간에 tail 이라는 명령어를 알아 볼 것인데, 이때 grep을 어떻게 조합해서 사용하는지 한번 알아 보겠습니다. ^^

감사합니다. 

반응형
반응형

안녕하세요 가야태자 @talkit 입니다. 

오늘은 지난 번에 글에서 사용하다가 나온 echo에 대해서 말씀 드리겠습니다. 

ECHO(1)                                                                                                                                                                   User Commands                                                                                                                                                                   ECHO(1)

NAME
       echo - display a line of text

SYNOPSIS
       echo [SHORT-OPTION]... [STRING]...
       echo LONG-OPTION

DESCRIPTION
       Echo the STRING(s) to standard output.

       -n     do not output the trailing newline

       -e     enable interpretation of backslash escapes

       -E     disable interpretation of backslash escapes (default)

       --help display this help and exit

       --version
              output version information and exit

       If -e is in effect, the following sequences are recognized:

       \\     backslash

       \a     alert (BEL)

       \b     backspace

       \c     produce no further output

       \e     escape

       \f     form feed

       \n     new line

       \r     carriage return

       \t     horizontal tab

       \v     vertical tab

       \0NNN  byte with octal value NNN (1 to 3 digits)

       \xHH   byte with hexadecimal value HH (1 to 2 digits)

echo 를 man 페이지에서 보면 위와 같이 나옵니다. ^^

man echo

위와 같이 Linux에 접속해서 입력해보시면 됩니다. ^^

한글로 셋팅된 리눅스에서는 한글로 나옵니다. 

텍스트를 출력한다고 되어 있습니다. 

echo [옵션들] "원하는문장|원하는변수"

또한, 특수 문자를 지원을 하네요 ^^

간단하게 매일 언어 공부하는 책에서 본 Hello World를 찍어 보겠습니다. Hello echo world!! 정도를 찍어 볼까요 ^^

echo "Hello echo world."

위 명령어를 리눅스에 입력해 보십시오 ^^

echo "Hello echo world."
Hello echo world.

위와 같이 나옵니다. ^^ 잘 찍혔네요 

그런데 단순히 echo는 리눅스에서 출력만한다.

저건 일반적으로 필요가 없을 것 같습니다. 

그렇습니다. echo는 저희가 컴퓨터를 사용하게 되면 알아야 하는 PATH라던지 여러가지 환경 변수들을 알아 볼때 출력해 볼 수 있습니다. 

음 글을 적다 보니 많은 글쓸 꺼리가 튀어 나오네요 ^^

리눅스의 환경 변수 설정도 한번 적어 보겠습니다. 

env
HOME=/home/ubuntu
USER=ubuntu
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

여러분들은 더 나올껀데 공개해도 되는 것만 일단 공개해 봅니다. 

Oracle 클라우드를 사용하시면 동일하게 보일 수 있습니다. 

저기 젤앞에 대문자로 적혀 있는 아이들이 환경 변수 입니다. 이 환경 변수 앞에 echo를 하면서 $를 붙여 주면 개별적으로 출력해 줍니다. 

그럼 저 세가지하고 저기는 안나오지만, SHELL이라는 환경변수를 한번 찍어 보겠습니다. 

echo $HOME
echo $PATH
echo $USER
echo $SHELL

위와 같이 리눅스에 치시면 됩니다. ^^

echo $HOME
echo $PATH
echo $USER
echo $SHELL
/home/ubuntu
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
ubuntu
/bin/bash

저는 실행 했더니 위와 같이 나왔씁니다. ^^

여러분들은 다르게 나오시나요?

저 아이들은 기본적으로 환경 변수이구요.

쉘 스크립트를 작성할때 변수를 정의 할 수 있습니다. 

저희는 말씀은 안드렸지만, 저기 있는 bash 쉘입니다. ^^

그래서 

변수를 만들어 보겠씁니다. 

VAR1="111"

위와 같이 리눅스에 치십시오 ^^

이제 아시겠죠 저 = 앞에 있는 아이 앞에다가 $를 붙이면 출력 된다는 것을 ^^

echo $VAR1
 echo $VAR1
111

실행하면 위와 같이 나오네요 ^^

변수 설정이 잘되고 출력도 잘 됩니다.

오늘은 변수와 출력으로서 만들었지만, 다음에는 조금 다른 방법으로 변수를 활용해 보겠습니다. 

감사합니다. 

 

반응형
반응형

안녕하세요 가야태자 @talkit 입니다. 

최근에 Linux에 뭔가를 많이 깔아보고 실험해보고 블로그 글도 써보고 있습니다. 

리눅스/Linux VMWARE에 우분투/Ubuntu 18.04 설치하기/Install https://talkit.tistory.com/637
리눅스/Linux VMWARE Workstation에 우분투/Ubuntu 16.04 설치하기 https://talkit.tistory.com/593

앞에서 18.04 하고 16.04는 VMWARE에 설치하는 모습을 보여 드렸습니다. 

이번에는 20.04를 설치해보겠습니다. 

거의 동일 합니다. ^^

Ubuntu 20.04.5 LTS (Focal Fossa) (kakao.com)

 

Ubuntu 20.04.5 LTS (Focal Fossa)

Select an image Ubuntu is distributed on three types of images described below. Desktop image The desktop image allows you to try Ubuntu without changing your computer at all, and at your option to install it permanently later. This type of image is what m

mirror.kakao.com

한국에서 우분투/Ubuntu 공식 미러는 느려서 T.T 저는 kakao 미러를 사용하고 있습니다. 

위 주소로 접속하시면, 

이런화면이 나옵니다. 우선 저기 64-bit PC(AMD64) desktop image를 다운로드 합니다. 

대충 이번에는 약 8분 정도 걸린다네요 ^^

다운을 다 받으셨으면 설치를 진행해 보겠습니다. 

Create a New Virtual Machine를 클릭해서 가상 머신을 만들기 시작 합니다. 

다운로드 받은 20.04 iso 파일을 선택 합니다. 

이름과 아이디 패스워드를 잘 입력 합니다. Confirm에는 비밀번호를 한번 더 동일하게 입력 하십시오.

Virtual Machine 이름과 설치 위치를 적당하게 설정하십시오.

Next 

Disk Size를 고르십시오.

저는 저기를 1000GB로 변경해주었습니다. 

여기서 저는 Customize Hardware를 클릭해서 하드웨어 스펙을 변경 했습니다. 

메로리를 16GB로 했구요. 4GB 이상 정도를 권장 합니다. 

CPU는 16개로 변경 했습니다. 

네트워크는 Bridged 로 변경 했습니다. 

Close 눌러 주시고 다시 설치화면으로 돌아가서

Finish를 클릭 합니다. 

일단 Ubuntu가 뜨고 있습니다. ^^

자동으로 설치를 지원해 줍니다. 

열심히 설치를 해주고 있습니다. 

잠깐 어디를 갔다오니 ^^

잘 설치가 되어 있습니다. 

아까 입력한 비밀번호를 넣어 보니 잘 접속이 됩니다. 

뭐 클라우드 계정에 접속 하라고 설정하게 되어 있는데 우리는 그냥 Skip 합니다. ^^

설정은 귀찮으니 Next

리포트 보낼꺼냐고 물어서 안보낸다에 체크 하고 Next

Location 서비스가 필요하신 분은 체크 하시고 저는 필요 없어서 Next

프로그램 설치할꺼냐고 묻는데 저는 일단 조금씩 쉘로 설치 할꺼라서 Done을 눌렀습니다. 

위 두가지의 순서느 어떻게 될지 모르겠습니다. 

우선 22.04로 업그레이드 할꺼냐? Don't Upgrade를 선택 합니다. 또는 Ask Me Later 저는 20.04를 사용할꺼라서요 ^^

나중에 업그레이드 하고 싶으면, Upgrade를 클릭하라고 나오네요 ^^ OK를 클릭 합니다. 

앞쪽에 있는 아이는 Install Now를 선택합니다. 저희가 설치한 20.04 버전에서 마이너 업그레이드 한 것들이니까요 ^^

저기서 비밀번호를 넣고 엔터치시면 업그레이드를 시작 합니다. 

업그레이드 될때까지 기다리시면 됩니다. ^^

업데이트가 끝나고 나니 껏다가 켜라네요 Restart Now를 클릭 하시면 껏다가 켜집니다. ^^

두가지만 알아보고 여기서 끝내겠습니다. 

CPU와 RAM  크기 입니다. 

왼쪽 하단에 보시면 저런 아이콘이 보입니다. 

클릭하십시오.

저기서 나온 프로그램들 중에 System Monitor를 클릭합니다. 

그러면 위와 같이 나올껍니다. 저기서 Resource를 눌러 주십시오.

저기 보시면 CPU 16개, 메모리 약 16GB가 보이네요 ^^

그리고, 그 옆에 File Systems를 클릭하시면 1.1TB 정도 할당되어 있는것이 보일 껍니다. 

제가 원하는대로 장비는 잘 만들어 졌습니다. 

감사합니다. 

반응형
반응형

안녕하세요 가야태자 @talkit 입니다. 

요즘 리눅스에서 파일을 다루는 작업에 관한 글들을 적고 있습니다. 

[리눅스/Linux] 파일 이동시키기(Move File)/이름 바꾸기(Change Name) mv 명령어(Command)  https://talkit.tistory.com/667

[리눅스/Linux] 파일 복사(Copy File) cp 명령어(Command) https://talkit.tistory.com/668

위와 같은 글들을 적고 있습니다. 

오늘을 파일을 어떻게 압축할 것인가에 대해서 적어 보겠습니다.

리눅스 압축 프로그램의 대표는 gzip이라는 프로그램과 tar라는 프로그램 또는 두 가지 프로그램을 통합해서 사용합니다. 

그 중에서 오늘은 tar에 대해서 설명을 드리겠습니다. 

tar는 솔직히 압축 프로그램이 아닙니다. 파일 여러개를 하나마의 테이프에다가 묶는 것입니다. 

tar 명령어를 사용하는 방법은 아래와 같습니다. 

tar [옵션들] 압축파일명.tar[.gz|bz2] 압축하고자하는파일/디렉토리들

위와 같이 사용합니다. 

여기서는 옵션들이 중요한데요. 몇 가지 옵션을 살펴 보겠습니다. 

제가 공부하고 사용하고 있는 옵션들은

c,j,z,v,f,p,x,t

위의 옵션들만 설명 하겠습니다. 

c 는 create 즉 압축파일을 만듭니다. 

j는 bz2  파일의 압축을 풀 수 있습니다. *.tar.bz2 같은 파일들입니다. 

z는 gz 또는 tgz로 끝나는 파일들을 풀때 사용합니다. 

v는 압축을 하거나 풀 때 행위를 보여 주라는 의미 입니다. 

f 는 파일에 저장한다는 의미이구요. 

p 는 권한을 유지한다는 의미이구요.

x 는 extract 즉 압축 해제릉ㄹ 의미 합니다. 

t 는 압축해제는 하지 않고 안에 있는 파일 목록을 보여 줍니다.

기본적으로 tar 명령어로 압축을 해보겠습니다. 

tar cvfp test.tar test*.txt
tar cvfp test.tar test.txt test_target.txt

.tar 뒤에다가 파일들을 나열해줘도 되지만 저렇게 test로 시작하는 txt 파일만 압축하려고 할때는 저렇게 하시면 됩니다.

그리고, 두번째 줄 처럼 압축하고자 하는 파일을 나열해주셔도 됩니다. 편하신 방법으로 하시면 됩니다. 

[talkit@server02 test]$ ls -al
합계 8
drwxrwxr-x 5 talkit talkit  88 12월 17 02:26 .
drwx------ 6 talkit talkit 168 12월 17 02:46 ..
drwxrwxr-x 2 talkit talkit   6 12월 17 02:19 source
drwxrwxr-x 2 talkit talkit  45 12월 17 02:25 target
drwxrwxr-x 2 talkit talkit  45 12월 17 02:26 target2
-rw-rw-r-- 1 talkit talkit  28 12월 17 02:16 test.txt
-rw-rw-r-- 1 talkit talkit  28 12월 17 02:18 test_target.txt
[talkit@server02 test]$ tar cvfp test.tar test*.txt
test.txt
test_target.txt
[talkit@server02 test]$ ls -al
합계 20
drwxrwxr-x 5 talkit talkit   104 12월 18 16:40 .
drwx------ 6 talkit talkit   168 12월 17 02:46 ..
drwxrwxr-x 2 talkit talkit     6 12월 17 02:19 source
drwxrwxr-x 2 talkit talkit    45 12월 17 02:25 target
drwxrwxr-x 2 talkit talkit    45 12월 17 02:26 target2
-rw-rw-r-- 1 talkit talkit 10240 12월 18 16:40 test.tar
-rw-rw-r-- 1 talkit talkit    28 12월 17 02:16 test.txt
-rw-rw-r-- 1 talkit talkit    28 12월 17 02:18 test_target.txt

 처음에 파일목록에는 압축 파일이 없습니다. 

tar 명령어로 실제로 압축을 했을때 test.tar 파일이 생겼습니다. 

그런데 압축을 하면 파일 사이즈가 비슷하거나, 줄어 들어야 하는데 보시는 바와 같이 크기가 늘어 났습니다. 

28 + 28 = 56 인데

압축파일의 사이즈는 10240 이네요

이걸 잘 기억해 두시고, 다음 명령어를 한번 실행해보겠습니다. 

gzip을 연동해서 할때는 z 를 옵션에 넣어 주시면 됩니다. 

tar czvfp test1.tar.gz test*.txt
tar czvfp test2.tar.gz test*.txt target

위에서 알려 드렸으니 파일을 나열 하는 것은 하지 않겠습니다. 

파일 사이즈 비교를 위해서 원래 파일을  test1.tar.gz 로압축하고, 

이번에는 target 디렉토리도 넣어서 test2.tar.gz 로 압축 해보겠습니다. 

[talkit@server02 test]$ ls -al
합계 20
drwxrwxr-x 5 talkit talkit   104 12월 18 16:47 .
drwx------ 6 talkit talkit   168 12월 17 02:46 ..
drwxrwxr-x 2 talkit talkit     6 12월 17 02:19 source
drwxrwxr-x 2 talkit talkit    45 12월 17 02:25 target
drwxrwxr-x 2 talkit talkit    45 12월 17 02:26 target2
-rw-rw-r-- 1 talkit talkit 10240 12월 18 16:40 test.tar
-rw-rw-r-- 1 talkit talkit    28 12월 18 16:47 test.txt
-rw-rw-r-- 1 talkit talkit    28 12월 17 02:18 test_target.txt
[talkit@server02 test]$ tar czvfp test1.tar.gz test*.txt
test.txt
test_target.txt
[talkit@server02 test]$ tar czvfp test2.tar.gz test*.txt target
test.txt
test_target.txt
target/
target/test.txt
target/test_target.txt
[talkit@server02 test]$ ls -al
합계 28
drwxrwxr-x 5 talkit talkit   144 12월 18 16:48 .
drwx------ 6 talkit talkit   168 12월 17 02:46 ..
drwxrwxr-x 2 talkit talkit     6 12월 17 02:19 source
drwxrwxr-x 2 talkit talkit    45 12월 17 02:25 target
drwxrwxr-x 2 talkit talkit    45 12월 17 02:26 target2
-rw-rw-r-- 1 talkit talkit 10240 12월 18 16:40 test.tar
-rw-rw-r-- 1 talkit talkit    28 12월 18 16:47 test.txt
-rw-rw-r-- 1 talkit talkit   167 12월 18 16:48 test1.tar.gz
-rw-rw-r-- 1 talkit talkit   233 12월 18 16:48 test2.tar.gz
-rw-rw-r-- 1 talkit talkit    28 12월 17 02:18 test_target.txt

결과는 위와 같습니다.  test.tar와 test1.tar.gz의 사이즈는 차이가 납니다. 원본이 워낙 작아서 그래도 원본보다는 크네요 ^^ 디렉토리를 넣었을때도 압축이 된거 보이시죠 ^^

이제 압축을 했으니 압축을 풀어 보겠습니다.

참 압축을 풀기 전에 압축 파일에 들어 있는 파일을 한번 보겠습니다. 

위의 옵션 중에 t 입니다. 

tar tvfp test.tar
tar tvfp test1.tar.gz
tar tvfp test2.tar.gz

실행 결과는 아래와 같습니다.

[talkit@server02 test]$ tar tvfp test.tar
-rw-rw-r-- talkit/talkit    28 2022-12-17 02:16 test.txt
-rw-rw-r-- talkit/talkit    28 2022-12-17 02:18 test_target.txt
[talkit@server02 test]$ tar tvfp test1.tar.gz
-rw-rw-r-- talkit/talkit    28 2022-12-18 16:47 test.txt
-rw-rw-r-- talkit/talkit    28 2022-12-17 02:18 test_target.txt
[talkit@server02 test]$ tar tvfp test2.tar.gz
-rw-rw-r-- talkit/talkit    28 2022-12-18 16:47 test.txt
-rw-rw-r-- talkit/talkit    28 2022-12-17 02:18 test_target.txt
drwxrwxr-x talkit/talkit     0 2022-12-17 02:25 target/
-rw-rw-r-- talkit/talkit    28 2022-12-17 02:25 target/test.txt
-rw-rw-r-- talkit/talkit    28 2022-12-17 02:25 target/test_target.txt

잘 보이시죠 압축을 안풀어도 tvfp 명려어를 사용하면 우리가 압축하기전 형태대로 보입니다. 

mkdir extract
mv test.tar extract
mkdir extract1
mv test1.tar.gz extract1
mkdir extract2
mv test2.tar.gz extract2

extract라는 디렉토리를 만들고, 압축 파일을 이동 시킨 다음에 실제로 압축을 풀어 보겠습니다. 

동일한 파일들을 모두 압축해서 일부를 폴더를 만들었습니다. 

실제로는 A 서버에서 압축해서 B서버로 간다던지 아니면, A서버에 있는 내용을 개발 컴퓨터로 가져와서 압축을 푼다던지 할꺼라서 저렇게 만들지는 않겠지만, 그래도 실제 폴더를 만들고 그 속에 풀어야겠지요 ^^

[talkit@server02 test]$ ls -al
합계 8
drwxrwxr-x 8 talkit talkit 135 12월 18 16:57 .
drwx------ 6 talkit talkit 168 12월 17 02:46 ..
drwxrwxr-x 2 talkit talkit  22 12월 18 16:57 extract
drwxrwxr-x 2 talkit talkit  26 12월 18 16:57 extract1
drwxrwxr-x 2 talkit talkit  26 12월 18 16:57 extract2
drwxrwxr-x 2 talkit talkit   6 12월 17 02:19 source
drwxrwxr-x 2 talkit talkit  45 12월 17 02:25 target
drwxrwxr-x 2 talkit talkit  45 12월 17 02:26 target2
-rw-rw-r-- 1 talkit talkit  28 12월 18 16:47 test.txt
-rw-rw-r-- 1 talkit talkit  28 12월 17 02:18 test_target.txt
[talkit@server02 test]$ cd extract
[talkit@server02 extract]$ ls
test.tar
[talkit@server02 extract]$ tar xvfp test.tar
test.txt
test_target.txt
[talkit@server02 extract]$ ls -al
합계 20
drwxrwxr-x 2 talkit talkit    61 12월 18 16:58 .
drwxrwxr-x 8 talkit talkit   135 12월 18 16:57 ..
-rw-rw-r-- 1 talkit talkit 10240 12월 18 16:40 test.tar
-rw-rw-r-- 1 talkit talkit    28 12월 17 02:16 test.txt
-rw-rw-r-- 1 talkit talkit    28 12월 17 02:18 test_target.txt
[talkit@server02 extract]$ cd ../extract1
[talkit@server02 extract1]$ ls
test1.tar.gz
[talkit@server02 extract1]$ tar xzvfp test1.tar.gz
test.txt
test_target.txt
[talkit@server02 extract1]$ ls -al
합계 12
drwxrwxr-x 2 talkit talkit  65 12월 18 16:58 .
drwxrwxr-x 8 talkit talkit 135 12월 18 16:57 ..
-rw-rw-r-- 1 talkit talkit  28 12월 18 16:47 test.txt
-rw-rw-r-- 1 talkit talkit 167 12월 18 16:48 test1.tar.gz
-rw-rw-r-- 1 talkit talkit  28 12월 17 02:18 test_target.txt
[talkit@server02 extract1]$ cd ../extract2
[talkit@server02 extract2]$ ls -al
합계 4
drwxrwxr-x 2 talkit talkit  26 12월 18 16:57 .
drwxrwxr-x 8 talkit talkit 135 12월 18 16:57 ..
-rw-rw-r-- 1 talkit talkit 233 12월 18 16:48 test2.tar.gz
[talkit@server02 extract2]$ tar xzvfp test2.tar.gz
test.txt
test_target.txt
target/
target/test.txt
target/test_target.txt
[talkit@server02 extract2]$ ls -al
합계 12
drwxrwxr-x 3 talkit talkit  79 12월 18 16:58 .
drwxrwxr-x 8 talkit talkit 135 12월 18 16:57 ..
drwxrwxr-x 2 talkit talkit  45 12월 17 02:25 target
-rw-rw-r-- 1 talkit talkit  28 12월 18 16:47 test.txt
-rw-rw-r-- 1 talkit talkit 233 12월 18 16:48 test2.tar.gz
-rw-rw-r-- 1 talkit talkit  28 12월 17 02:18 test_target.txt
[talkit@server02 extract2]$

순서대로 폴더 내에 들어가서 압축을 해제하고 해제된 실제파일들이 보이는 것을 보았습니다. ^^

압축을 어떻게 하고 압축을 어떻게 푸시는지 이제 아시겠지요.

저는 또 다른 리눅스 이야기로 찾아오겠습니다. ^^

감사합니다. 

반응형
반응형

안녕하세요 가야태자 @talkit 입니다.

저는 스팀 뿐 아니라 tistory도 하고 있습니다.

요즘은 스팀의 글을 복사해서 티스토리로 복사를 하는 재미를 ^^

저 그래프를 보시면, 2000명정도가 늘었습니다.

주간 그래프로 보면 2월 중순 부터 사이트 방문자 수가 늘었습니다.

일간 그래프로 보면, 제 블로그는 주중에는 좀 그래도 많이 오는 편인데 주말에는 확 줄어 드는 편입니다.

비트코인이 활성화 되면서 또 늘었습니다.

제 블로그에 손님들은 개발자 분들이 주로 오셨는데 지금은 코인 관련딘 글도 보러 오시는 것 같습니다.

인기글 월간 조회수 작성일

1 [ORACLE/오라클] 문자를 날짜형으로 변환해 보자 TO_DATE. 660 2016.12.08

2 MySQL 타입 변환 명령 CAST 함수 529 2015.09.03

3 [SVN Port] Subversion의 기본 포트 목록 314 2015.10.08

4[ORACLE/오라클] 날자와 숫자를 문자열로 변환해보자 TO_CHAR 289 2017.01.03

5 무료 개체관계도 E-R Diagram(ERD) 작성툴 ERWin 대체 DbDesigner 4 262 2016.06.14

6 [Spring Framework] Controller에서 넘긴 값 순수 jsp에서 받기 261 2015.11.17

7 Mac OS에 Notepad++ 을 설치해보자(실패기) 173 2020.12.29

8 오늘도 DeFi bDollar.fi 투자하기 / BDO / sBDO 166 2021.02.16

9 [LINUX] gcc undefined reference to 오류 처리 하기 153 2010.01.13

10 [무료소프트웨어] Windows에 FTP 서버 구축하기(2) FileZillaServer 설정하기 147 2021.01.28

11 [ORACLE] 문자열 길이를 구해보자 LENGTH 140

2016.12.07

12 bDallor.fi 부터 autofarm.network DeFi 투자하기 137 2021.02.17

13 리눅스/Linux 디스크용량 체크하기 df/du 135 2021.01.11

14 윈도우즈/Windows에 무료/free 마크다운/Markdown 에디터/Editor 타이포라/Typora 다운로드/Download 및 설치/Install 133 2020.12.31

15 도지코인마이너즈(스캠 가능성 있음)에 가입하고 마이닝을 시작해보자. 124 2019.06.28

16 [무료소프트웨어] 알FTP 대체 프로그램 파일질라/FileZilla 설치하기/Install 118 2021.01.14

17 [무료소프트웨어] Windows에 FTP 서버 구축하기(1) FileZillaServer 설치하기 118 2021.01.14

18 도지코인/도기코인/DogeCoin 지갑 변경하기 - MultiDoge to DogeCoin Oore 102 2018.01.08

19 [데이터베이스] NULL 값 처리 하기 IFNULL(MySQL), NVL(Oracle), ISNULL(MSSQL) 98 2010.08.27

20 스팀잇에 유행하고 있는 새로운 수도꼭지(?)/FaucetCrypto 소개 및 출금 해보기 98

2021.02.13

대부분이 리눅스나, 데이터 베이스 관련 글이구요.

다음 달에는 코인 관련 글이 상위를 차지 할지도 모르겠습니다. ^^

분석글은 다음달에 또 적도록 하고 이만 줄이 도록 하겠습니다.

감사합니다.

혹시 제 블로그에 와 보시고 싶은 분은 저위에 있지만, ^^

http://talkit.tistory.com 으로 방문해 주시면 감사하겠습니다.

반응형
반응형

출처 : https://ko.wikipedia.org/wiki/%ED%84%B1%EC%8A%A4

 

오늘의 글에서는 리눅스를 설치하지 않습니다. ^^

오늘은 어떤 방식으로 리눅스 기기를 얻을 수 있을까라는 개념적인 글입니다. 

첫번재로 가장 일반적인 방법은 PC에 리눅스를 설치 하는 것입니다. 

두번재로 Windows 10의 WSL을 설치 하는 것입니다. 

세번째로, 첫번재와 비슷하지만, VMWARE나 Virtual Box등의 가상 시스템에 설치 하는 것입니다. 

네번째로, 웹호스팅을 받는 것입니다. 이 때는 테스트는 할 수 있겠지만, root 관련 권한은 테스트하지 못합니다. 

다섯번재로, VPS 호스팅을 받는 것입니다. 

세번째에서 깔았던 VMWARE나 Virtual Box로 설치한 또는 다른 VM 시스템을 이용해서 설치한 리눅스를 시간/일/월 비용을 내용 사용하는 것입니다. 

첫번재 부터 세번재 까지는 돈이 들지는 않습니다. 물론 PC를 구매하거나, 램을 늘리거나 디스크를 늘리기 위해서 비용이 발생할 수는 있습니다. 

하지만, 네번째와 다섯 번재는 비용이 발생 합니다. 

웹 호스팅을 경우 카페24를 기준으로 500원에서 10만원까지 월 호스팅 비용이 듭니다. 

VPS 호스팅도 잘 찾아 보면 1000원짜리도 있습니다만, ^^ VPS의 성능 CPU와 램 HDD의 용량 등에 따라서 천차 만별입니다. 

그래서, 다음 글에서는 Virtual Box 에 리눅스를 설치하는 글을 한번 적어 보겠습니다.

그 다음으로 VPS를 분양 받아서 어떻게 활용하는지 까지도 한번 글을 적어 볼 계획 입니다. 

 

 

반응형
반응형



음 아이티 이야기인데 ^^; 맨날 사진만 올리는 것 같습니다. 


2017년 1월이 가고, 2017년 2월이 왔네요.


우선 글을 작년보다 3배는 더 써보자가 목표였는데, 1월은 24개의 글을 썼습니다.


블로그 책을 한참 봤으때 공부 했던 것을 요즘 실천 하고 있습니다.


가끔 이슈가 있을때는 1일 여러 포스팅이 되더라도, 최대한 1이 1포스팅 되도록 노력 하려고 합니다.


2월은 힘들수도 있겠지만, 최대한 노력해 보겠습니다.


저 위의 사진은 도연이하고 갔던 도자기 공방의 사진입니다.


도연이가 만든 도자기 작품도 올려 보겠습니다. ^^;;


이게 블로그의 제목이 제목인지라, IT이야기를 ^^;;


쓰야한다는 중압감이 있었는데,


그 중압감에서 벗어나기로 했습니다.


내 주변에 있는 늘려 있는 삶의 이야기들이 주제가 되는 블로그로 탈바꿈 하고,


하지만, 해오고 배운게 도둑질이라고 IT로 밥벌어 먹고 살고 있기 때문에 간간히 IT 이야기도 실어 보겠습니다.


모두들 2월 한달 더 나아가서 2017년 한해 또 잘 살아 보자구요.


감사합니다.

반응형
반응형
우선 최근 검색어 순위 입니다. ^^;;

제가 S5에서 잼있게 놀고 있는 도도고스톱과 요즘에 새로 쓰고 있는 압축 프로그램 압축시대 그리고, 세컨드라이브가 몇일 전에 쓴글이어서 그런지 20위 내에 있네요 ^^;;

1 60  도도고스톱
2 46  압축시대
3 29  트위터kr
4 28 워드브레이크
5 21 모눈종이
6 14  undefined reference to
6 14  ultravnc
6 14  putty
7 12  트위터 클라이언트
8 11  putty connection manager
9 9 dotnet framework
10  8 도도 고스톱
11  6 세컨 드라이브
11  6 압축시대 다운로드
11  6 eclipse ant
11  6 smartsql
12  5 javascript 창닫기
12  5 도도고스톱게임
12  5 putty manager
13  4 이클립스 줄번호


다음으로 지금까지 방문자를 유도해 준 엔진 순위 입니다. ^^;;

1 search.naver.com (13075)
2 search.daum.net (3899)
3 cafeblog.search.nave.. (1999)
4 www.google.co.kr (1659)
5 mixsh.com (751)
6 v.daum.net (506)
7 link.allblog.net (466)
8 kr.search.yahoo.com (209)
9 search.nate.com (156)
10 www.google.com (146)
11 sa.search.daum.net (124)
12 freelog.net (118)
13 www.freelog.net (103) 1
4 www.funion.net (98)
15 search.paran.com (94)
16 blogdoc.nate.com (88)
17 image.search.daum.net (87)
18 opencast.naver.com (87)
19 www.tistory.com (71)
20 www.blogkorea.net (67)

검색어와 달리 최근 데이타가 아닌게 좀 흠이라가지고 ^^;;

하지만, 역쉬 국내 검색엔진 1위인 네이버

그리고, 다음 구글

네이트

파란

순으로 되어 있네요

메타 블로그는

믹시

올블로그

프리로그

퍼니온

티스토리

블로그 코리아 순이네요 ^^;;

네이버에서 검색 유입율과 2위와의 차이는 엄청 나네요 T.T

고루 고루 좀 들어 왔으면 좋겠는데 말이죠.


반응형

+ Recent posts