[Linux/Git] CLI, 패키지와 패키지 매니저, Node, Git

jungmin Lee·2023년 9월 4일
0

Command-Line Interface

입력을 담당하는 키보드나 마우스를 입력 소스라고 하며 입력 소스에 의해 또는 작성된 프로그램에 의해 모니터에 화면을 나타내거나, 음악을 재생하면 소리를 스피커로 전달하여 사용자가 인식할 수 있도록 하는 일을 출력이라고 한다.
컴퓨터를 조작하기 위한 입력과 출력을 I/O(Input/Output)라고 표기하며, "아이오"라고 한다.
리눅스의 터미널은 키보드의 입력과 모니터의 출력으로 모든 작업을 할 수 있다.

CLI 명령어

터미널 실행하기
단축키: Ctrl(컨트롤 키) + Alt(알트 키) + t(영문 t) [우분투]
프롬프트(Prompt): 키보드의 입력을 확인하고 편집할 수 있는 한 줄의 공간
pwd: 현재 위치 확인하기
mkdir: 새로운 폴더 생성하기
ls: 특정 폴더에 포함된 파일이나 폴더 확인하기

  • ls -l l은 폴더나 파일의 포맷을 전부 표현하며, d로 출력된 경우는 폴더를, -로 출력된 경우는 파일
  • ls -a "all"이라는 의미로숨어있는 폴더나 파일을 포함한 모든 항목을 터미널에 출력
  • ls -al 또는 ls -la

명령어를 이용해 폴더를 GUI의 탐색기로 실행하기

Ubuntu일 경우

nautilus .

macOS일 경우

open .

Windows + WSL일 경우

explorer.exe .

cd: 폴더에 진입
touch: 파일 생성
cat: 파일의 내용을 터미널에 출력
rm: 폴더나 파일 삭제하기 단일 파일을 삭제, rm -rf(폴더 삭제)
mv: 폴더나 파일의 이름을 변경, 또는 폴더나 파일의 위치 옮기기

  • 순서대로 [폴더나 파일의 이름][도착 폴더의 이름]를 입력
  • [변경할 파일][변경할 파일의 이름]을 입력하면 파일 이름 변경
  mv bye.txt helloWorld.txt

cp: 폴더나 파일을 복사

  • cp [원본 파일 이름][복사할 파일 이름]
    cp -rf bye hi

각 명령어에 포함된 옵션은 명령어 이름만 입력하거나 -h 또는 --help와 같은 옵션을 통해 확인


컴퓨터가 파일을 옮기거나 복사하는 방법

  • 파일의 내용을 잠시 저장한 후 원래 위치의 파일을 삭제한다.
  • 도착 폴더에 저장한 내용으로 새로운 파일을 생성한다.

폴더나 파일의 이름의 내용과 위치가 같고, 이름만 다른 경우에 새로운 파일을 생성하는 일은 비효율적이다. 컴퓨터는 폴더나 파일을 삭제하고 새롭게 작성하는 것이 아니라, 폴더나 파일의 이름만 변경한다. 파일을 복사하는 경우에는 파일을 옮기는 과정에서, 원래 위치의 파일을 삭제하는 과정이 제외된다.


절대 경로와 상대 경로
pwd로 확인할 수 있는 절대 경로 이 기준점을 루트 폴더(/)라고 하며 특정 폴더나 파일이 루트 폴더로부터 어떤 폴더로 진입하는 경우 만날 수 있는지 나타내는 것을 절대 경로라고 한다..
상대 경로는 현재 위치로부터 상대적인 위치를 나타내는 상대 경로 특정 폴더 또는 파일의 위치를 현재 위치를 기준점으로 하며 현재 위치한 폴더는 점(.)으로 표현하고, 상위 폴더는 두 개의 점(..)으로 표현한다. 슬래시(/)는 폴더 내부이며 ./는 현재 폴더 아래를 말한다.

관리자(root) 권한
관리자 영역을 실수로 변경하면, 운영체제가 먹통이 될 수 있으므로 주의해야 한다. 운영체제가 망가지면, 운영체제를 재설치해야 할 수 있다.
절대 경로의 기준점인 루트 폴더(/)는 Linux의 관리자 영역이며 일반 사용자의 권한으로는 어떤 폴더나 파일도 생성, 변경, 삭제할 수 없다. 사용자가 관리자 권한이 있어야 하는 경우는 새로운 프로그램을 설치하거나, 프로그램을 변경 또는 삭제하는 경우이므로, 해당 프로그램을 설치하거나 변경 또는 삭제할 수 있는 관리자 권한만 전달한다. 사용자와 관리자를 명확히 분리하여 사용자의 실수로 발생할 수 있는 시스템 에러로부터 운영체제를 보호할 수 있다.

sudo: 관리자 권한을 획득하는 명령어

사용자가 관리자 권한이 필요하면, 사용자 권한을 이용할 수 있는 명령어는 sudo이다.
항상 비밀번호와 함께 사용해야한다.

현재 로그인된 사용자를 확인하는 명령어: whoami
사용자 폴더의 경로(Path)는 ~/로 표시되며 물결 기호(~)는 루트폴더(/)로부터 사용자 폴더(username)까지의 경로를 축약한 형태이다.

nano 에디터

nano 실행

nano hello.js  # hello.js 를 nano에서 열기.
nano # 그냥 실행.

파일 열기
^R (Ctrl + R 키 조합)으로 열 수 있으며 nano 파일이름으로 열기도 가능하다.

nano 파일이름

파일 편집 후 종료
^X Ctrl + X를 누르면 Save modified buffer (ANSWERIG "No" WILL DESTROY CHANGES) ?가 나오고 키보드의 Y와 N를 눌러서 저장 여부를 결정한다.

파일 저장
^O WriteOut

패키지와 패키지 매니저 개요

패키지는 여러 파일이 담겨있는 하나의 상자이다. 패키지 안에는 프로그램 파일, 프로그램 설치 파일, 프로그램 설치 설명서, 프로그램에 대한 정보를 담은 파일로 구성되어 있다.
패키지 매니저는 패키지의 설치, 변경, 삭제 등 관리를 편리하게 해주는 도구이다.
특정 프로그램의 설치를 요청하면, 패키지 매니저는 패키지가 저장된 위치에서 패키지를 다운로드해 설치 프로그램을 실행한다.

apt 명령어 이용하기
우분투는 기본적으로 apt라는 패키지 매니저가 내장되어 있다.

  • 패키지 목록 갱신: apt update(관리자 권한 필요)
    패키지를 다운로드할 수 있는 여러 저장소의 최신 정보를 업데이트한다. 새로운 저장소를 추가하거나, 패키지를 설치하기 전, 최신 정보를 갱신한다. 설치된 프로그램이 새로운 버전으로 변경되지 않는다.
  • 업그레이드 가능한 패키지 목록을 출력: apt list -—upgradable
  • 전체 패키지 업그레이드(버전 업): apt upgrade (관리자 권한 필요)
  • 특정 패키지만 업그레이드(버전 업): apt --only-upgrade install 패키지 이름 (관리자 권한 필요)
  • 패키지 설치: apt install 패키지 이름 (관리자 권한 필요)
  • 설치된 패키지 보기: apt list --installed
  • 패키지 검색: apt search 검색어
  • 패키지 정보 확인: apt show 패키지 이름
  • 패키지 삭제: apt remove 패키지 이름(관리자 권한 필요)

관리자 권한 사용하기
패키지 설치/삭제 등의 작업을 진행할 때 sudo 명령어를 이용해서 관리자 권한을 획득 관리자 암호 입력 후, 설치를 계속한다.

sudo apt install wget

잘못된 경우에는 Ctrl + C 키로 작업을 취소할 수 있다.


Node.js 개요

프로그래밍 언어가 구동되는 환경으로 어떤 프로그램이 동작할 때, 프로그램이 동작하는 곳이 런타임이다. 런타임이란, 프로그래밍 언어가 실행되는 환경, 그리고 Node.js는 JavaScript 런타임이다.

nvm

패키지 매니저처럼 node.js의 버전을 관리할 수 있도록 nvm(Node Version Manager)으로 Node.js를 설치하며 nvm은 다양한 Node.js version를 설치하고 관리할 수 있는 프로그램이다.
(윈도우 환경에서는 nvm을 사용할 수 없다)

공식문서 - https://github.com/nvm-sh/nvm#install--update-script

nvm 설치

wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash

Command 'wget' not found 메시지와 함께 설치가 진행되지 않는 경우, Package Manager를 이용해 wget을 설치해야한다.

Ubuntu

sudo apt update
sudo apt install wget

macOS

brew update
brew install wget

nvm 버전 확인

nvm --version

Node.js 설치

nvm install --lts //최신기준 설치

LTS(Long-Term Support)는 Node.js에서 지원하는 기간이 길다는 의미이다.

Node.js 버전 확인

node -v

Node.js로 JavaScript파일 실행하기
helloWorld.js 파일을 node 환경에서 실행

node helloWorld.js

개발을 하다 보면 Node.js의 다양한 버전에 대응해야 할 경우
Node.js를 최신 버전 설치

nvm install --lts

nvm을 설치하고 Node.js version을 확인

nvm ls

특정 버전의 Node.js를 설치하고 싶으면 다음과 같이 입력

nvm install 12.18.3

이미 설치된 버전을 삭제하지 않고, 우리가 원하는 Node.js version을 설치
사용 중인 Node.js version을 다른 버전으로 변경하고 싶을 때 입력

nvm use 버전 넘버

package.json 생성
폴더 생성 후 package.json을 생성하기 위해 npm init 명령어 입력

npm init

터미널에 package.json 파일에 들어갈 정보를 입력할 수 있으며 입력한 후, enter키를 누르면 다음 정보를 입력할 수 있다. 정보를 입력하지 않으면 소괄호에 들어있는 기본값이 생성된다.
바로 package.json을 생성하고 싶다면 npm init -y을 입력하면 된다.

npm

npm은 필요한 모듈을 다운로드할 수 있는 모듈들이 모여있는 모듈 스토어이다.
package.json에는 프로그램을 실행하기 위해 필요한 모듈들이 어떤것인지, 프로그램을 실행시키는 방법과 프로그램을 테스트하는 방법 등이 작성되어 있다. 실제 모듈은 node_modules이라는 폴더에 저장한다.

npm install 명령어를 입력하면, package.json에서 필요하다고 하는 모듈을 다운로드한다.

npm install

devDependencies, dependencies
devDependencies에는 이 프로젝트를 개발하는 환경에서 필요한 모듈들이 적혀 있으며, --save-dev 옵션과 함께 설치하면, 자동으로 devDependencies에 추가된다.
dependencies는 프로젝트가 돌아가기 위해 반드시 필요한 모듈들이 적혀 있다. --save 옵션과 함께 (생략 가능) install 실행시 자동으로 dependencies에 추가된다.
package.json을 사용하면 프로젝트 코드를 전달할 때, 포함하고 있는 모듈을 모두 전달하지 않고 package.json에 적혀 있는 정보만 전달할 수 있으므로 유용하다.

scripts 항목
scripts 항목은 CLI에서 사용 가능한 명령을 기술하며, npm script라고 한다.
CLI에서 실행할 때에는 "npm run <스크립트 이름>" 으로 실행

버전관리 시스템 Git

Git

Git은 개발자의 코드를 효율적으로 관리하기 위해서 개발된 ‘분산형 버전 관리 시스템’이다.
Git으로 관리되는 파일은 Github, GitLab, Bitbucket 등의 여러 가지 원격 저장소를 이용해서 백업과 협업을 할 수 있다. 특정 시점에 생성된 백업 복사본을 스냅샷이라고 스냅샷을 만들어 주는 작업을 commit이라고 한다.

Github

Github은 Git Repository를 관리할 수 있는 클라우드 기반 서비스이다
Git으로 버전을 관리하는 폴더는 Github을 통해 여러 사람들이 공유하고 접근할 수 있다. Github에서 Code Review 등을 통해 협업할 수 있고, 수많은 오픈 소스 프로젝트들이 GitHub로부터 호스팅되고 있어서, 누구든 자유롭게 기여할 수 있다.

Git repository
Git으로 관리되는 폴더를 Git repository라고 하며, Remote Repository와 Local Repository 두 종류의 저장소를 제공한다.
작업할 때는 Local Repository에서 할 수 있고 내가 작업한 코드를 공유하려면 Remote Repository에 업로드하여 여러 사람과 함께 공유할 수 있다.
다른 사람이 Remote Repository에 올려놓은 소스 코드를 내 Local Repository 로 가지고 올 수도 있다.


다른 프로젝트에 기여하고 싶을 때

  • contribute을 하기 위해서는 먼저 기여하고 싶은 프로젝트의 원격 저장소를 내 원격 저장소로 가지고 오는 작업을 하며 Fork라고 한다.
  • 코드를 수정하기 위해서는 내 컴퓨터로 가져오는 작업이 또 필요하며 clone이라고 한다.
  • 변경된 내용을 commit을 통해 저장한 후, Remote Repository에 반대로 올려주는 작업이 필요하며 Push라고 한다.
    -Push를 완료한 후, GitHub에는 Pull request라는 기능이 있어서, 내가 제안한 코드 변경사항에 대해 반영 여부를 요청한다.
    -Remote Repository에서 변경 사항이 있을 때 Local Repository 로 가져오는 Pull 작업도 가능하다.

환경설정(Ubuntu, WSL)
Git 설치

 sudo apt install git

Git 버전 확인

 git --version

Git을 이용할 때 필요한 환경 설정
사용자 정보

git config --global user.name "나의 사용자 이름"
$ git config --global user.email "내 이메일 주소"

--global 옵션으로 설정하면, 사용자 홈에 저장되므로 git을 설정할 때 처음에 단 한 번만 입력해도 된다. 나중에 github의 사용자 이름이나 이메일을 변경하고 싶다면, 이 명령어를 다시 입력하면 된다. 여러 프로젝트를 진행하고 있어서 프로젝트마다 다른 사용자 이름과 이메일 주소를 사용하고 싶은 경우에는 --global 옵션을 빼고 명령을 실행할 수 있다.

에디터
Git에서 커밋 메시지를 기록할 때, merge commit 확인 메시지가 나올 때 텍스트 에디터가 열리며 기본값으로 텍스트 에디터 vi가 열린다. vi에 익숙하지 않을 경우에는, nano로 변경하는 편이 좋으며 아래의 명령어로 변경할 수 있다.

git config --global core.editor nano

SSH를 이용하여 추가 인증하는 방법
SSH는 Secure shell의 줄임말로, 보안이 강화된 shell 접속이다.
CLI 환경(터미널)에서 다른 PC에 접속하거나 요청할 때 사용하며, 비대칭키를 이용해 사용자를 인증
github에 ssh 공개키(비대칭키 중 하나)를 등록하는 방법과 ssh를 이용해 git clone하는 방법이 있다.

SSH 키 생성
ssh 키는 비대칭키로 구성되며, 두 개의 키가 서로 대칭이 되지 않는 형태로 존재한다. ssh-keygen 명령어를 프롬프트에 입력하고, ssh 키 페어(쌍)를 생성할 수 있다. 명령어를 입력 후 Enter 키를 몇 번 입력하면, ssh 키 페어가 생성된다.

ssh-keygen


ssh-keygen 명령어는 경로 ~/.ssh./ 에 두 파일 id_rsa와 id_rsa.pub를 생성한다. 이 두 파일은 ssh 키 페어라고 하며, 이 중 id_rsa.pub는 모두에게 공개해도 되는 공개키(Public Key)이다. 그리고 id_rsa는 공개되지 않아야 하며 나만 보관하고 있어야 하는 키라고 하여 개인키(Private Key) 또는 비밀키(Secret Key)라고 한다.
SSH 키 페어를 생성하였으므로, 생성된 키 페어 중 공개키를 복사하여 gitub에 등록한다.

공개키(Public Key) 복사

cat ~/.ssh/id_rsa.pub

Github에 공개키 등록
1. 우측 상단의 프로필 이미지를 클릭하고, Settings에 진입
2. 왼쪽의 내비게이션에서 SSH and GPG keys를 선택
3. 나타난 화면에서 SSH Keys 옆의 초록색 버튼 New SSH Key를 클릭
4. 등록한 SSH 공개키를 구분할 수 있도록 사용자 임의로 Title을 작성한 후, Key에는 복사해 둔 공개키를 붙여 넣고, Add SSH Key 버튼을 클릭.
5. Confirm access에서 Github 로그인에 필요한 비밀번호를 입력해 SSH key 등록을 승인해
공개키가 잘 등록되었다면, 다음의 과정이 정상적으로 수행되 git colne

정상적으로 동작하지 않는 경우, 아래와 같은 방법으로 해본다.
1. Github - Settings - SSH keys에 등록한 공개키 삭제
2. 프롬프트에 cat ~/.ssh/id_rsa.pub 명령어를 입력하여 나타나는 공개키 복사
3. Github - Settings - SSH keys에서 New SSH key 버튼 클릭
4. Title을 입력하고, 복사한 공개키를 Key에 붙여 넣고 Enter 키를 입력해 한 줄을 추가(개행)
5. Add SSH key 버튼을 클릭하고, 승인하여 공개키를 등록

profile
Leejungmin

0개의 댓글