hostname변경







kyu-VirtualBox가 hostname이 된다. hostname을 바꾸는 이유는 다른 host 이름을 구분하기 위해서이다. 


나는 원래 kyu-VirtualBox의 hostname을 halls로 바꿀 것이다



1. hostname바꾸기

설정 파일에 있는  hostname을 바꾼다

$sudo vi /etc/hostname


수전 전에는 kyu-VirtualBox였지만, 지금은 halls로 수정하였다. 

이때 주의 할 점이, 원래 hostname파일은 read only이기 때문에 sudo를 통해서 변경하여야 한다


2.sudo vi hostname

hosts에 저장 되어있는 기존의 hostname도 변경한다

$sudo vi /etc/hosts


127.0.1.1 kyu-VirtualBox    --> 127.0.1.1 halls



하지만, 위의  설정 값을 변경 하여도 여전히 hostname은 kyu-VirtualBox이다.......


3. reboot하면 끝이다

구글링해서 찾아 보니깐, service hostname restart를 통하면 reboot를 사용하지 않고도 hostname이 변경된것을 알 수 있다는데 계속 "Failed restart hostname.service: Unit hostname.service is masked" 떠서 reboot을 하였다



0. 번외


그냥  $hosnamectl set-hostname 새로운 이름  하고 reboot하면 hostname이 바뀌어 있다. 단, /etc/hostname에는 바뀌어있으나, /etc/hosts에는 변경되어 있지 않다.




reference:

http://dreamlog.tistory.com/374

http://sarghis.com/blog/831/





ubuntu 네임 서버 구축하기: https://blog.lael.be/post/6308


ubuntu 기본 디렉토리 변경하는 방법:         https://blog.xianchoi.kr/268


ubuntu에 APM을 통해서 서버 구축하기:         http://webnautes.tistory.com/1028


mysql계정 비밀번호 변경:         https://zetawiki.com/wiki/MySQL_root_%ED%8C%A8%EC%8A%A4%EC%9B%8C%EB%93%9C_%EB%B6%84%EC%8B%A4


myphpadmin 오류 해결방법:         https://stackoverflow.com/questions/39281594/error-1698-28000-access-denied-for-user-rootlocalhost?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa




Package


apt(advanced Packaging tool)

-apt-get: 팩키지 관리 명령어 도구이다.


sudo apt-get update:  /etc/apt/source.list 로부터 index를 가져와서 update를 한다.

sudo apt-get upgrade: 설치되어 있는 package를 새버전으로 업그래이드 한다

sudo apt-install 패키지이름: package 설치하는 것

sudo apt-get autoremove 패키지이름: 내려받은 패키지 파일 중 쓸모 없는 것들만  모아둔 /var/cache/apt/archives/에서 삭제하여 디시크 공가늘 확보하는 것

sudo apt-get remove패키지이름 :package는 지우나 설정 파일은 지위지 않음(재설치가 가능하다)

sudo apt-get --purge remove 패키지 이름: 설정 파일까지 삭제함


remove와 --purge remove의 차이


-remove하는 경우 net-tool만 remove하지만, --purge remove하는 경우 net-tools와 관련된 모든 파일을 삭제한다


-apt-cache: 패키지를 검색하기 위한 command line. 

apt-cache 패키지: 사용할 수 있는 패키지를 출력한다

apt-cache search 패키지: 패키지와 관련된 패키지의 이름과 설명 출력한다

apt-cache stats: 캐시 현황 확인




sudo(superuser do)

-superuser이라면 모든 권한을 갖고 있는 user로써 모든 command를 실행하고 install까지 할 수 있다.

sudo su: 지속적으로 sudperuser로 command를 실행하는 것

exit:하면 빠져나온다 






Network


ifconfig: 네트워크 인터페이스 IP 주소와 넷마스크의 설정과 및 인터페이스 활성화/비활성화를 위해서 사용되는 command이다

(ubuntun에서 사용하려면 net-tools를 install한 후 사용가능하다)



ping: 네트워크가 살아있는지 확인하는 command이다. 즉, ping왔다리 갔다리 한다는 것은 해당 서버에 접근이 가능하다는 말이다 

-나의 localhost로 ping을 보낸 것이다

ping -c 횟수 -i 초 단위 간격  도메인 주소

(횟수를 생략하는 경우 무제한으로 가며, 초 단위를 생략하는 경우 1초단위로 설정된다)

-물론 해당 서버에서 pingd을 차단하는 경우 접속은 가능하나 ping이 안된다.


netstat: 네트워크 상태 및 프로토콜 통계를 생성하는 command. 즉, 열려있는 모든 서버와 소켓에 대한 정보를 알려주는 명령어이다. 


(소켓: 소프트웨어로 작성된 통신 접속점, 소켓을 통해서 데이터가 송수신된다)









reference:

apt-get정리: https://blog.outsider.ne.kr/346

apt-get과 apt-cache 명령어: http://www.myservlab.com/190

ifconfig: https://ko.wikipedia.org/wiki/Ifconfig

ping: https://m.blog.naver.com/PostView.nhn?blogId=diceworld&logNo=220296844545&proxyReferer=https%3A%2F%2Fwww.google.co.kr%2F

netstats: https://thebook.io/006718/part01/ch03/06/04/

소켓의 이해: http://jkkang.net/unix/netprg/chap2/net2_1.html









'OSS' 카테고리의 다른 글

[ubuntu] ssh server설치 및 접속  (0) 2018.05.08
[Ubuntu]hostname 변경  (0) 2018.05.07
[Ubuntu]Defaul page (Index.html) modify 1.01  (0) 2018.04.30
[나름해석]JSMN-kyu.version2.0-jsondump.c  (0) 2018.04.09
[Command]git 기초2  (0) 2018.04.09

(※설명과 해석은 어디까지나 글쓴이의 주관적 사고와 구글링으로 부터 나왔습니다※)


LAMP





linux: 커널의 일종으로 운영체제를 가리키도 한다. 안드로이도 linux기반으로 개발되었다.  공개된 소스이기 때문에 많은 사용자들이 개발하는데 많이 사용된다.


Ubuntu: Ubuntu는 남아프리카의 말로 "사람들간의 관계형성에 중점을 둔 윤리사상"이라는 뜻을 가진다. linux 커널 기반의 운영체제이며, open source로 모두에게 배포된 OS이다.




Apache: HTTP서버의 웹서버이다. 최초의 웹서버인 "NCSA HTTPd"기반으로 만들어 젔다. 확장성이 뛰어나서 여러 프로그램과 연동하여 사용한다. 그래서 보통 APM (apache(서버)+PHP(언어)+Mysql(DB))을 통해서 연동한다.




PHP: (Hypertext Preprocessor) 서버에서 실행되는 프로그래밍 언어이며 HTML을 생성한다(HTML에 포함되어 동작한다).



HTML:웹 페이지를 만든 언어이며, 웹 브라우저에 전달되어 웹 페이지를 생성하는 것




MySQL:공개 소스의 관계형 데이타 베이스 관리 시스템이다.  

 








reference: 나무위키

https://namu.wiki/w/%EC%95%84%ED%8C%8C%EC%B9%98%20HTTP%20%EC%84%9C%EB%B2%84

https://namu.wiki/w/PHP?from=php

https://namu.wiki/w/MySQL

https://namu.wiki/w/HTML

https://namu.wiki/w/%EB%A6%AC%EB%88%85%EC%8A%A4?from=Linux

'Learning Concept' 카테고리의 다른 글

[CMS]  (0) 2018.05.15

VM에 Ubuntu를 통해서 서버를 구축할 것이다



0.기본 설정 

먼저 VM과 Ubuntu를 설치한다

VM: https://www.virtualbox.org/wiki/Downloads

Ubuntu: https://www.ubuntu.com/download/desktop




Mac을 사용하기 때문에 iso파일의 Ubuntud를 받았다.

VM을 먼저 설치하고 그 다음 VirtualBox에서 새로 만들기를 통해 가상의 linux OS기반의 환경을 조성한다





(계속...........)

만들어진 Linux-Ubuntu를 시작하면 아래와 같은 창이 뜨는데 아까 받은 Ubuntu를 적용 시키면 된다


그리고 Ubuntu를 깔끔하게 깔아주면 된다

깔렸다................................성공


1.APM+phpmyadmin설치

$sudo su를 통해서 root권한을 통해서 접속하면 관리하기 편한다

1.1 apache2 설치하기 

(이미 Ubuntu에 존재하는 package를 설치하는 것이다)


web browser에 127.0.0.1 혹은 localhost라고 치면, apacher2로 설정된 default page를 볼 수 있다 




1.2 mysql 설치하기

그냥 terminal 위와 같이 command를 하면 된다

이과정에서 오류가 가장 많이 나왔었다. msql에 server community에 접속할 수 없다면서 error가 지속적으로 발생해서 google에 수도 없이 검색해보았다. 답이없다 그냥, vm과 ubuntu를 다 전부 삭제하고 다시 다운로드 받고 시작하면 된다. 그래도 가끔식 안될 때 있는데 다시하면 된다.


원인은 잘 모르겠다. 맨 처음 시도 했을 때는 모든게 순조롭게 설치가 되었는데 다 삭제하고 다시 vm에서 부터 Linux-Ubuntu생성하고 나서 부터 이 부분에서 계속 설치가 안됬다. dpkg도 해보고 remove도 해봤는데 답은 그냥 완전!! 처음 부터 다시 시작하는 것이다. 


여튼, 설치가 되면.......php를 설치하기로 하자


1.3 php 설치

php는 여러 버전이 존재하는데 나는 php7.2    버전을 설치하였다


php의 package는 없기 때문에 apt에 추가하여야 설치가 가능하다!!


$sudo add-apt-repository ppa:ondrej/php

한번 update를 해주고....(저장소로부터 추가 목록을 가져오는 것)

$ sudo apt-get update

php7.2를 설치 해준다

$ sudo apt-get install php7.2 php7.2-common

php가 설치 되었는지 확인하기 위해서 phpinfo()파일을 만들어본다

$ sudo sh -c 'echo "<?php phpinfo(); ?>" > /var/www/html/info.php'


localhost/info.php에 들어가면..........





이렇게 ubuntu에 APM을 모두 설치하였다.



1.4 phpmyadmin 설치

phpmyadmin은 데이터 베이스를 관리하는 인터페이스이다

$sudo apt-get install phpmyadmin


패키지 설정에서는 apache2로 정하고--> phpmyadmin의 데이터 베이스를 dbconfig-common으로 설정하냐에 yes를 하면된다--> mysql에 등록할 password로 설정하고 설치를 마무리 하면 된다.


localhost/phpmyadmin/에 접속 하면 다음 page를 볼 수 있다


접속이 안되는 경우 http://kyu-tag.tistory.com/11 의 reference를 참고하면 깔끔히 설정할 수 있다






2. Index.html page 변경하기

현재 localhost로 되어 있는 page를 변경해 보겠다.

web browser에 localhost라고 치면 apache2로 된 default page가 뜬다. 자세히보면 

/var/www/html/index.html을 replace하라고 되어 있다. 하지만 실제로 terminal로 들어가게되면, 변경할 수 가 없다. readonly이기 때문이다. 

그래서 권한을 chmod index.html 777로 바꾸고 (777이면 다른 사람도 modify 할 수 있기 때문에 조심하여라) 

을 통해서 html 파일을 변경하여라 (vim을 사용하는 경우 install을 통해서 vim을 설치하여야 한다)


결과: 

원래의 defaul page를 변경하였다.





후기:

솔직히 이번 시도는 너무 많은 error와 시간 투자가 필요했다. 왜 오류가 뜬지도 모르겠다 어떻게 고치는지도 잘 몰랐다. 오로지 지우고 새로 설치하고를 정말 많이 반복하였다. 그리고 처음에는 mac을 사용해서 vm을 통해서 Ubuntu를 다루려고 했지만, 너무 버벅거림이 심하고 firfox에서는 아예 작동이 되지 않고 꺼지는 경우가 많아서 window에서 VMware에서 똑같은 방법으로 시도하였다. 컴퓨터 문제인지는 잘 모르겠지만,  window에서도 run하는 VM이 훨씬더 빠르고 부드러웠다.


아래 참조 하였던 블로그에 설치 방법은 훨씬더 자세히 나와있다. 꼭 참고 하기를 바란다



그리고 처음에는 mac을 사용해서 vm을 통해서 Ubuntu를 다루려고 했지만, 너무 버벅거림이 심하고 firfox에서는


해결책: 처음에 VM을 설치 할 때  기본 메모리의 설정을 1024MB로 잡아놨기 때문이다. VM은 사용 컴퓨터 위에서 돌아가는 것이기에 메모리도 설정 값에 의해서 돌아가는 것 같다. 다시말해서 기본메모리를 값을 더 많이 잡으면 된다







참조:http://webnautes.tistory.com/1028







'OSS' 카테고리의 다른 글

[Ubuntu]hostname 변경  (0) 2018.05.07
[Ubuntu] Package tool&Network status  (0) 2018.05.07
[나름해석]JSMN-kyu.version2.0-jsondump.c  (0) 2018.04.09
[Command]git 기초2  (0) 2018.04.09
[Command]git의 기초1  (0) 2018.04.07

자바 중간고사 review



while(condition)

condition에는 비교하는 operation이 들어 갈 수 있으며, 해당 조건이 만족하여야 while의 loop가 돌아간다. 

내가 한 실수 while(a==b)

나의 생각: while문의 조건이 a와 b가 같아지면 끝나는 것으로 생각 했었다. 다시 생각해보면, condition에 들어가는 operation은 항상 <과 >을 기반으로 =와 함께 쓴다. 나의 논리를 따르려면, 보통 while(true)을 넣고, loop statement 안에 if조건문을 통해서 a==b를 비교하여 break문을 실행시키는 것이다.




while(a==b)--> X            while(true){if(a==b)break;}    -->O


short circuit

나의 생각: or operand이나 and operand이든 항상 앞에 오는 조건문이 중요하다. 뒤에 것과 상관없이 앞에 것에 의존한다


틀린 것은 아니다. 하지만, short circuit의 가장 core는 앞에 있는 것에 대한 판단이 아니라, 앞에 것에 의해서 뒤에 것이 계산이 안되는 다는 것이다. 


나의 생각과 비슷한 이야기지만이지만,  short circuit은 의존의 중요가 아니라 계산이 덜 된다는 것이 중요하다


super

super은 하위 class에서 상위 class를 참조할 때, 사용하는 것이다. 


문제: super가 해당 class의 변수들에 대해 접근 할 수 있다 였다.(정확하지는 않다) 



답은 this이다. this가 현재 object의 변수들에 접근하는 것이다. 

내 생각: 생각이 짧았다. super을 통해서 상위 class에 접근 하는 것인데 문제에 within class를 access한다고 하기에 현재 object가 참조 할 수 있는 함수에 대해 가능하냐는 말이다. 나의 생각도 틀렸고 해석도 잘못했다. 



Wrap up

위 3 문제 말고는 실수로 2문제 더 틀렸는데, 사실 상 빈 칸 채우기에서 override와 overriding의 문법차이(동사와 명사)때문에 틀린 것이다. 

사실 super의 정의 따지는 T/F를 제외하고는 같은 흐름에서 다시한번 다른 방향에서 생각하지 못했다는 점이 아쉽다.




'걸림돌' 카테고리의 다른 글

[OSS]Linux&git command  (0) 2018.04.30

현 시점까지의 잠깐의 복습....



git에 대한 5가지 정의

git push: 새로운 소스 파일을 local repository가 아닌 remote repository에 저장하는 것이다

git init: 현재 dir을 git 저장소로 관리하고 싶을 때 사용한다

git status: git repository의 현재 상태를 알려준다

git commit: traked된 파일들을 staging하기 위해서 commit한다. 여기서 traked는 git add를 통한 것을 말한다

git add: 소스파일을 staging하기위해 trake하는 것을 말한다




linux명령어

mv a b c d e f g: 현재 dir에서 g라는 dir을 만들고 그 안에 다시 a와 b와 c와 d와 e와 f의 이름으로 된 dir을 만드는 것이다




pull request에 관하여....

보통 우리가 pull request를 하는 경우는 상대방의 git을 fork를 하는 경우(clone을 통해서 local repository나 혹은 remote repository에 하여도 된다) 혹은 상대방의 프로그램에 문제가 있을 경우 해당 프로그램의 작성자에게 pull request를 한다. 작성자는 수정자의 수정 내용을 확인 후  수정을 받아 드릴 경우 merge를 통해서 원본 저장소에 합친다



make로 디버깅용 실행 파일을 생성하기.......

make로 디버깅 파일을 실행하기 위해서는 make의 순서가 중요하다. make 를 통해서 실행 파일을 만들때는 먼저 해당 소스 파일의 object 파일을 만들고 해당 object를 통해서 실행 파일을 만들게 되는 것이다 


Makefile을 작성할 때는 target, dependency, command, macro로 나누어 저있으며, target은 make를 통해 invocation될 이름이다. dependency는 command로 compile 될떄 사용 되는 재료이며, marcro는 전처리로 setting되게끔 도와주는 역활을 한다


 즉, debuging을 하는 경우, debugging으로 구성된 command를 정해주고 target과 필요로 하는 (소스파일, 해더파일 등등) 파일들과 함께 작성하면 된다.

'걸림돌' 카테고리의 다른 글

[Java]중간고사 review  (0) 2018.04.30

https://github.com/J-Kyu/jsmn

Original creator of jsmn: zserge

(※설명과 해석은 어디까지나 글쓴이의 주관적 사고로 부터 나왔습니다※)


<JSMN-jsondump.c>


1.jsondump.c

-앞에서 설명한 simple.c 는 JSON_STRING(이미 정해진)을 parsing하여 출력 값을 보여 주었다 (참고: http://kyu-tag.tistory.com/1)

하지만, jsnondump.c는 직접 stdin으로  부터 받아서 parsing을 통해서 출력하는 코드이다



#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

#include <string.h>

#include <errno.h>

#include "../jsmn.h"






/* Function realloc_it() is a wrapper function for standard realloc()

 * with one difference - it frees old memory pointer in case of realloc

 * failure. Thus, DO NOT use old data pointer in anyway after call to

 * realloc_it(). If your code has some kind of fallback algorithm if

 * memory can't be re-allocated - use standard realloc() instead.

 */

static inline void *realloc_it(void *ptrmem, size_t size) { //void 포인터에 size만큼의 ptrmem을 만든다.

    void *p = realloc(ptrmem, size);

    if (!p)  {                                                 //만약 p가 메모리 할당이 되지 않는 경우

        free (ptrmem);                                         //parameter로 받은 ptrmem의 메모리를 free하고

        fprintf(stderr, "realloc(): errno=%d\n", errno);       //error를 출력한다

    }

    return p;

}

//reallo_it() 함수는 원래 realloct함수의 wrapper function이다. 만약 reallocation이 실패하는 경우 오래된 메모리 포이턴를 free해준다


/*

 * An example of reading JSON from stdin and printing its content to stdout.

 * The output looks like YAML, but I'm not sure if it's really compatible.

 */


static int dump(const char *js, jsmntok_t *t, size_t count, int indent) {

    int i, j, k;

    if (count == 0) {

        return 0;

    }

    if (t->type == JSMN_PRIMITIVE) {

        printf("%.*s", t->end - t->start, js+t->start); //jsmn을 통해 parsing 받은 token의 type이 primitive이면, 해당 token을 출력한다

        return 1;

    } else if (t->type == JSMN_STRING) {

        printf("'%.*s'", t->end - t->start, js+t->start);//jsmn을 통해 parsing 받은 token의 type이 String이면, 해당 token을 출력한다

        return 1;

    } else if (t->type == JSMN_OBJECT) {                //jsmn을 통해 parsing 받은 token의 type이 object이면,

        printf("\n");                                   //다시한번 해당 object를 dump 함수에 넣어서 String과 primitive type을 구분한 뒤

        j = 0;                                          //":"를 기준으로 해당 object의 group을 출력한다

        for (i = 0; i < t->size; i++) {

            for (k = 0; k < indent; k++) printf("  ");

            j += dump(js, t+1+j, count-j, indent+1);

            printf(": ");

            j += dump(js, t+1+j, count-j, indent+1);

            printf("\n");

        }

        return j+1;

    } else if (t->type == JSMN_ARRAY) {                 //jsmn을 통해 parsing 받은 token의 type이 array이면, 해당 token을 다시한번 parsing한다

        j = 0;

        printf("\n");

        for (i = 0; i < t->size; i++) {

            for (k = 0; k <indent-1; k++) printf("  "); // 출력 형태를 다듬는다 " "

            printf("   - ");                            //해당 array의 value를 출력할때 앞에 "-"를 부친다

            j += dump(js, t+1+j, count-j, indent+1);    //parsing한 array를 출력한다

            printf("\n");

        }

        return j+1;

    }

    return 0;

}


int main() {

    int r;

    int eof_expected = 0;

    char *js = NULL;

    size_t jslen = 0;

    char buf[BUFSIZ];       //buf라는 char array에 BUFSIZ인 8192의 크기 만큼 들어가 있다

    

    jsmn_parser p;

    jsmntok_t *tok;

    size_t tokcount = 2;

    

    /* Prepare parser */

    jsmn_init(&p);

    

    /* Allocate some tokens as a start */

    tok = malloc(sizeof(*tok) * tokcount);

    if (tok == NULL) {

        fprintf(stderr, "malloc(): errno=%d\n", errno);

        return 3;

    }

    p

    for (;;) {                                         //무한루프로 돌리기 때문에 계속해서 string을 받아 r에 저장하여 parsing 한다

        /* Read another chunk */

        r = fread(buf, 1, sizeof(buf), stdin);      //stdin으로 부터 sizeof(buf)만큼의 element를 char형 buf array에 저장한다. return은 읽어준 element의 크기만큼 돌려준다

                                                    //sizeof(buf)만큼을 채울 수 없다면, EOF를 통해서 (ctrl+d)를 통해서 fread()를 빠져 나갈수 있다

        if (r < 0) {

            fprintf(stderr, "fread(): %d, errno=%d\n", r, errno);   //fread로 읽었을 때, 오류가 생기면 -1을 출력하여 error를 발한다

            return 1;

        }

        if (r == 0) {

            if (eof_expected != 0) {

                return 0;

            } else {

                fprintf(stderr, "fread(): unexpected EOF\n");   //fread로 읽어 올 때, 아무것도 읽어 오지 않으면 0을 반환하는데 parsing할께 없으니 당연히 error를 발하고 프로그램을 종료한다

                return 2;

            }

        }

        

        js = realloc_it(js, jslen + r + 1); //js에 r을 통해서 받은 buf의 array를 넣기 위해 추가로 js에 메모리를 할당해준다

        if (js == NULL) {

            return 3;

        }

        strncpy(js + jslen, buf,r);          //r을 통해서 stdin으로 부터 받아온 값을 js에 저장한다

        jslen = jslen + r;

        

    again:

        r = jsmn_parse(&p, js, jslen, tok, tokcount);   //저장된  r을 jsmn_parse를 통해서 parsing하고 출력한다

        if (r < 0) {

            if (r == JSMN_ERROR_NOMEM) {    //error를 검사한다

                tokcount = tokcount * 2;

                tok = realloc_it(tok, sizeof(*tok) * tokcount);

                if (tok == NULL) {

                    return 3;

                }

                goto again;다            }

        } else {

            dump(js, tok, p.toknext, 0);

            eof_expected = 1;

        }

    }

    

    return EXIT_SUCCESS;

}

2.  jsmn과 jsmndump.c

-jsmndump.c의 기본적인 흐름은 이렇다

1.jsmnsdump.c의 main 함수에서 fread를 통해서 string을 받아 r에 저장을 한다.

2. r에 대해서 요류를 검사한다.

3.문제가 없는 경우 jsmn 함수로 보내서 parsing을 하여 출력한다.....

4.다시 1번을 실행한다


-사용된 jsmn함수



3. 입력 form 및 출력

앞전에 설명한 simple.c에서는 ....

static const char *JSON_STRING ="{\"user\": \"johndoe\", \"admin\": false, \"uid\": 1000,\n  ""\"groups\": [\"users\", \"wheel\", \"audio\", \"video\"]}"; 

으로 {}안에 ":"을 기준으로 분리하고 array같은 경우 []으로 구분 지어 주었다

jsmndump.c 에서도 똑같이 { } 안에 parsing될 value를 넣고  ": "으로 구분지어주면 될 것이다

ex)

{name:J-kyu,Age:23,INFO:[Studnet,Computer-Science Major,etc.....]} //를 입력하고 ctrl+D를 누르면 아래와 같이 실행된다






Original coded by zserge

Modified and explained by Kyu

'OSS' 카테고리의 다른 글

[Ubuntu] Package tool&Network status  (0) 2018.05.07
[Ubuntu]Defaul page (Index.html) modify 1.01  (0) 2018.04.30
[Command]git 기초2  (0) 2018.04.09
[Command]git의 기초1  (0) 2018.04.07
[설명서]MacOS에서 Github사용법  (0) 2018.04.07

<Git 기초2>



$git add  *

-git add *는 모든 파일을 track하는 것이다. 그래서 파일을 commit 하기 위해서 따로 따로 track하지 않고 git add* 를 통해서 할 수 있다

$git reset HEAD <file>

-해당 file을 untrack하는 case이다

$git remote

-현재의 git 프로젝트가 어느 remote repository에 저장 되어 있는지 알려준다. 출력이  Origin인 경우 cloning을 하여서 remote repositiory 현재 위치기 때문이다

$git remote -v:  remote repository가 여러가지인 경우 등록된 전부를 보여준다

$git remote [단축이름]  [URL]: 해당 URL은 해당 단축이름에 저장되며  현재 작업중인 director에 추가하는 것이다

$git push 

-현재 commit된 모든 file을 remote repository에 push하여 update 시키는 것이다

$git push -u:는 parameter를 기억하여 다음에 push 할때 git이 무엇을 할지 알게 한다

$git pull

git의 remote repository에서 해당 git을 가져오는 것을 말한다



'OSS' 카테고리의 다른 글

[Ubuntu]Defaul page (Index.html) modify 1.01  (0) 2018.04.30
[나름해석]JSMN-kyu.version2.0-jsondump.c  (0) 2018.04.09
[Command]git의 기초1  (0) 2018.04.07
[설명서]MacOS에서 Github사용법  (0) 2018.04.07
[나름해석]JSMN-kyu.version1.2  (0) 2018.04.02

https://git-scm.com/book/ko/v2을 토대로 공부하고 설명하였습니다

(※설명과 해석은 어디까지나 글쓴이의 주관적 사고로 부터 나왔습니다※)



<Git의 기초 1>





기본개념

traked(관리대상): 파일이 이미 스냅샷에 포함돼 있던 파일

-Unmodified, modified,Staged 상태로 나누어 진다

-수정 없이 바로 commit 된 파일은 곳 바로 staged의 status로 변환된다.

-수정된 파일은 수정된 후, staged status로 변환된다

untraked(관리 대상이 아닌 경우): staging area에는 당연히 존재하지 않으며, 현재 dir에 스냅샷에 포함되지 않은 파일

-즉, 삭제된 파일이거나 add file을 해야하는 파일들이 untraked이다


-그림 참조 <https://git-scm.com/book/ko/v2/Git%EC%9D%98-%EA%B8%B0%EC%B4%88-%EC%88%98%EC%A0%95%ED%95%98%EA%B3%A0-%EC%A0%80%EC%9E%A5%EC%86%8C%EC%97%90-%EC%A0%80%EC%9E%A5%ED%95%98%EA%B8%B0>





[Command]


$ git init

-현재 dir을 git 저장소로 관리하고 싶을 때 사용한다


$ git status

-git repository의 현재 상태를 알려준다

-

$ git log

-해당 repository에 히스토리를 시간 순으로 보여준다

-해당 project의 commit&push할 때의 comments와 시간, 작성자에 대한 정보를 보여준다

option]     $ git log -p -n: 최근 n개의 commit 된 결과를 비교해주는 결과

 $ git log --stat: 파일의 변경 회수, 수정된 값, 즉, +와 -를 통해서 앞의 값들을 보여준다

 $ git log --pretty=format: "%.........." :옵션을 통해서 (%H,%h,%T.......) 출력된 값들이 보기 편한 형태로 출력된다



$ git  add name.txt

-현재 git repository에 존재하고 있는 name.txt파일을 staging과 동시에 commiting하기 위해서 track을 하는 것 이다

(현재 dir에 존재하는 name.txt파일 이어야 한다)

-위 예제는, nowic 파일을 git add를 통해서 trake된 것을 알 수 있다. 

(changes to be commited-->trake은 되었으니 commit 하면된다)


$git commit

-traked된 파일들을 staging하기 위해서 commit한다

-git status를 통해서 new file이 commit되어야 한다는 것을 알 수 있으며, $ git commit -m "created new text "를 통해서 message와 함께 commit한다. commit이 되었기 때문에 commitd을 다시하면 더이상 할 것이 없다라고 뜬다.


Sourcetree를 통해서 보는 history(status)이다

(pushed는 되기 전의 commit된 상태이다)


$ git rm

rm명령어를 통해서 삭제를 하게 된다면, 파일은 삭제되 었으나 unstaged이기 때문에 commitd을해야한다


(new.txt파일은 삭제되었으나 untracked이기 때문에 먼저 track을 하고 commit을 하여야 한다)

그래서 $git rm을 통해서 track을 하고 commit을 할 수 있게 한다

($ rm file을 통해서 삭제 하고나서 $ git rm file을 통해서 track을 하게 한다 )
(근데, 만약 file이 에초에 track된 파일이 아니라면 $git rm file을 할 필요는 당연히 없다)


--new.txt를 만든다 -->--trakced한다-->--commit한다-->--rm한다(이때, $rm을 통하는 경우 삭제에 대한 track을 하여야 하며, $ git rm을 통하는 경우 track이 같이 되게 때문에 따로 track할 필요는 없다 )-->commit한다--> ==>











'OSS' 카테고리의 다른 글

[Ubuntu]Defaul page (Index.html) modify 1.01  (0) 2018.04.30
[나름해석]JSMN-kyu.version2.0-jsondump.c  (0) 2018.04.09
[Command]git 기초2  (0) 2018.04.09
[설명서]MacOS에서 Github사용법  (0) 2018.04.07
[나름해석]JSMN-kyu.version1.2  (0) 2018.04.02

+ Recent posts