프로젝트

[GIT] 깃 기초 개념/리눅스, 터미널 기본 명령어 - 파일 관련

dayeonsheep 2023. 8. 29. 15:32

1) git이란?

  • 형상 관리 도구 = 버전 관리 시스템 
  • 내역을 남긴다 (= 로그를 남긴다)
  • 관점별
    • 1인 작업 관점 ) 어떤 부분의 코드를 언제 작성했는지 파악, 원하는 작업 상태로 돌아간 뒤 재작업, 어떤 상태에서 어떤 코드 변화를 통해 구현했는지 파악 
    • n인 작업 관점 ) 1인 작업 관점 + < 어떤 부분의 코드를 누가, 언제 작성했는지 파악,  Conflict 충돌에 대한 컨트롤 용이, Branch라는 개념을 사용 >
더보기

+ 브랜치

 

한 기능 수정을 두 사람이 같이 하면 conflict가 나니까 다른 가지를 주는 거임

기능별로 다른 브랜치를 할 수도 (예 : A 로그인 B 회원가입 맡아서 로그를 쌓는 루트 브랜치 달리 )

그렇게 해서 충돌을 피하는 거임

 

ex)

로그인만 구현하는 브랜치 = A

회원가입을 구현하는 브랜치 = B

 

A에서 회원가입 하려고 하면 안되고 B에서 로그인하려고 하면 안됨

 

브랜치 나눠서 기능별로 나눠서 테스트 / 구현 할 수 있음

 

기능 합치는 거 = merge 로 합쳐서 완성시킬 수 있음

 

 master 브랜치 = 저장소를 만들면 기본적으로 생성되는 브랜치

  • git과 svn
    • 공통점 : 버전 관리 도구 
    • 차이점
      • git(Local 및 분산 형태로 버전 관리, local history O), 인터넷 안돼도 혼자서 버전관리 할 수 있음. 인터넷 됐을 때 와르르 올리는 형태.
      • svn(Server 및 집중 형태로 버전 관리, local history X), 일련의 스냅샷 기록 남겨서 저장할 때마다 올려야 돼서 인터넷 안되면 못함.

 

1.1. ) 깃 기본 구조

출처:&nbsp;https://ux.stories.pe.kr/182

  • Working Directory : 현재 작업 공간
    • 워킹 디렉토리에서 고치면 (2)add 명령을 통해서 stage area 로 옮겨놓음, 로그로 남겨놓을거고 그게 커밋하기 전 단계
    • .git, init 형태

 

  • Staging Area
    • 변화한 거 스냅샷 로그 형태로 반영해야되기 때문에 그걸 반영하기 위해 무대 위에 오르게 한다는 개념
    • 변화가 된 파일들만 올라오는 영역, 가상의 논리적 구조

 

  • .git 디렉토리 : 어떤 파일이 어느 변화를 일으켰는지 로그형태로 저장이 되는 곳
  • .git은 주목 받고 있는 파일들을 스냅샷 형태로 로그 형태로 몇시에 누가 어떤 내용으로 수정했는지 그런 것들을 스냅샷을 찍어줌
  • 그 스냅샷을 하나하나 로그라고 하는데 그걸 저장하는 게 깃폴더고, 그걸 저장하는 행위를 커밋이라고 함

 

  • .git에 쌓여진 로그 내역들을 remote server 중앙 서버에 저장함으로써 다른 외부의 사람들과 함께 볼 수 있는 거임
  • 다른 사람과 연결하기 위해서는 인터넷 연결되고 서버 영역으로 넘어가서 원격 저장소에 넘어가야함 => 로컬 부분에서만 작업하는 게 1인 작업 관점

 

[Working Directory] - 우리가 프로젝트의 파일들을 수정하거나 작업하고 있는 디렉토리 영역(.git, init) 

           ↑:↓ 

[Staging Area] - 버전 히스토리에 저장할 준비가 되어있는 파일들을 옮겨 놓는 영역 

           ↑:↓ 

[.git Directory] - 버전의 히스토리를 가지고 있는 영역 

           ↑↑:                                         Local  영역 
----------------------------------------------------------------
           ↓↓:                                         Server 영역 

[Remote Server] - 원격 저장소

 

 

2) 파일 및 디렉토리 기본 명령어 

  • 폴더 및 파일 목록 출력
ls //(List Segment)
ls -a //숨겨진 파일이나 디렉토리를 모두 표시
ls -l //파일이나 폴더의 설명을 함께 출력
ls -al //a 옵션과 l 옵션을 함께 적용, a와l 순서 상관 x

 

+ rwx 퍼미션

더보기

r:  읽기 권한

w: 쓰기 권한(생성 및 삭제)

x: 실행 권한(이동)

 

각각의 권한에 대해서 번호가 있는데 r 은 4, w 는 2, x 는 1이다.

앞의 rwx는 User, 가운데 rwx는 group, 마지막 rwx는 other(기타 사용자) 권한을 나타낸다. 

권한이 없으면 -로 표시한다.

 

맨 앞에 d는 해당 항목이 폴더임을 나타낸다.

 

8진수 권한 rmx
0 모든 권한 없음 ---
1 실행만 가능 --x
2 쓰기만 가능 -w-
3 쓰기, 실행만 가능 -wx
4 읽기만 가능 r--
5 읽기, 실행만 가능 r-x
6 읽기, 쓰기만 가능 rw-
7 읽기, 쓰기, 실행 모두 가능 rmx

 ex) rw- r-- r--

=> 현재 소유자는 읽고 쓰기 권한이 있으며 실행 권한은 없다.(실행 파일이 아니다.)

소유자가 속한 그룹의 접근 권한은 읽기 권한만 있다.

기타 사람들은 읽기 권한만 있다.

=> 숫자는 644

 

<권한 수정 방법>

1. +, - 로 조정

chmod +x test.txt //text.txt 파일에 대해서 실행 권한 추가 부여
chmod g+w test.txt //text.txt 파일에 대해서 group에 write 권한 부여
chmod o-rwx test.txt //text.txt 파일에 대해서 others의 모든 권한 박탈

 

이 예시는 user 에 +x로 실행 권한을 주었다.

 

2. chmod 명령어

ex) chmod 000 test.txt 

=> - --------- 1 yangdayeon Aug 29 test.txt 

숫자로 가운데 4를 5로 바꾸어서 실행 권한을 주었다.

권한이 없는 걸 실행하려고 할 때는 Permission denied 오류가 발생한다.

 

+ R 옵션: 권한을 디랙토리내의 하위 경로에도 모두 적용시킨다.

ex) chmod -R 777 test

=> test 폴더 내의 모든 권한을 rwxrwxrwx로 설정한다.

이때 cd .. 으로 해당 폴더를 나간 후에 해야만 한다. 

 

  • 경로
cd [경로] //(Change Directory)
cd .. //현재 디렉토리에서 상위 디렉토리로 이동
cd - //전에 있었던 디렉토리로 이동
cd ~ //사용자 홈 디렉토리로 이동

 

+ 굉장히 유용한 사용법 : cd + 공백 후 tab을 누르면 경로 자동완성 & 드래그 앤 드롭

더보기

cd 공백 탭 누르면 어떤 게 있는지 보여주고

cd 하고 Doc까지 치고 탭 누르면 Doc으로 시작하는 파일 이름 자동완성 해줌!

 

+터미널에서 내가 가고싶은 디렉토리로 바로 가기 꿀팁 : 드래그 앤 드롭 

이게 젤 편한듯 ^>^

+더 자세한 cd 명령어 사용법

 

  • 폴더/파일 삭제
rm [삭제파일 or 삭제 디렉토리]
rm -r [삭제파일 or 삭제 디렉토리] //하위 경로의 파일을 삭제
rm -f [삭제파일 or 삭제 디렉토리] //강제로 삭제
rm -rf [삭제파일 or 삭제 디렉토리] //r, f 옵션 모두 적용
rm -v [삭제파일 or 삭제 디렉토리] //삭제 후 결과를 보여줌

 

  • 폴더/파일 복사
cp [복사할 디렉토리/파일] [복사될 디렉토리/파일]
cp -r [복사할 디렉토리/파일] [복사될 디렉토리/파일] //하위 디렉토리까지 모두 복사
cp -f [복사할 디렉토리/파일] [복사될 디렉토리/파일] //복사될 파일(디렉토리)이름이 이미 존재할 경우, 강제로 덮어씀
cp -rf [복사할 디렉토리/파일] [복사될 디렉토리/파일]

 

  • 위치 / 파일 생성 등
pwd //현재 디렉토리 위치 확인 (Print Working Directory)
mkdir [생성할 디렉토리명] //새로운 디렉토리(폴더) 생성
touch [생성할파일명] //새로운 파일 생성
cat [파일명] //파일의 내용을 터미널에 출력

 


<참조 자료>