Linux / Git 기초

ν”„λ‘¬ν”„νŠΈ(Prompt)

터미널은 CLI(Command-Line Interface)이닀. μž…λ ₯ν•˜λŠ” κΈ€μžμ™€ 좜λ ₯λ˜λŠ” κΈ€μžλ‘œ 컴퓨터와 μ†Œν†΅ ν•  수 μžˆλ‹€.

ν‚€λ³΄λ“œμ˜ μž…λ ₯을 ν™•μΈν•˜κ³  νŽΈμ§‘ν•  수 μžˆλŠ” ν•œ μ€„μ˜ 곡간을 ν”„λ‘¬ν”„νŠΈλΌκ³  ν•œλ‹€.


λ¦¬λˆ…μŠ€ 터미널 기본적인 λͺ…λ Ήμ–΄

λ¦¬λˆ…μŠ€ ν„°λ―Έλ„μ—μ„œ λͺ…λ Ή μ‹€ν–‰ν•˜κΈ°

  • pwd : ν˜„μž¬ μœ„μΉ˜λ₯Ό 확인
  • mkdir : μƒˆλ‘œμš΄ 폴더λ₯Ό 생성
  • ls : ν΄λ”λ‚˜ 파일의 λͺ©λ‘μ„ 좜λ ₯
  • open : ν˜„μž¬ 폴더λ₯Ό 파일 νƒμƒ‰κΈ°λ‘œ μ—΄κΈ°
  • cd : 폴더에 μ§„μž…
    • . : ν˜„μž¬ 폴더
    • .. : ν˜„μž¬ 폴더보닀 μ•žμ— μžˆλŠ” 폴더
  • cat : 파일의 λ‚΄μš©μ„ 터미널에 좜λ ₯
  • touch : μƒˆλ‘œμš΄ νŒŒμΌμ„ 생성
  • rm : ν΄λ”λ‚˜ νŒŒμΌμ„ μ‚­μ œ
  • mv : ν΄λ”λ‚˜ 파일의 μœ„μΉ˜λ₯Ό μ΄λ™ν•˜κ±°λ‚˜, 이름을 λ³€κ²½
    • mv [ν΄λ”λ‚˜ 파일의 이름] [도착 ν΄λ”μ˜ 이름]
    • mv [파일의 이름] [λ³€κ²½ν•  파일 이름]
  • cp : ν΄λ”λ‚˜ νŒŒμΌμ„ 볡사
    • cp [원본 파일 이름] [볡사할 파일 이름]
  • sudo : κ΄€λ¦¬μž κΆŒν•œμ„ 이해
  • / : 루트 디렉토리
  • ~ : ν™ˆ 디렉토리

μ ˆλŒ€ 경둜 / μƒλŒ€ 경둜

  • μ ˆλŒ€ 경둜의 μ‹œμž‘μ΄ 루트 디렉토리( / )인 것을 이해할 수 μžˆλ‹€.

: μ ˆλŒ€ κ²½λ‘œλŠ” λͺ…λ Ήμ–΄ pwd둜 확인할 수 μžˆλ‹€

: μ ˆλŒ€ κ²½λ‘œλŠ” κΈ°μ€€μ μœΌλ‘œλΆ€ν„°μ˜ μ ˆλŒ€μ μΈ μœ„μΉ˜λ₯Ό λ‚˜νƒ€λ‚΄λŠ”λ°, 이 기쀀점을 λ£¨νŠΈν΄λ”( / )라고 ν•œλ‹€. νŠΉμ • ν΄λ”λ‚˜ 파일이 λ£¨νŠΈν΄λ”λ‘œλΆ€ν„° μ–΄λ–€ ν΄λ”λ‘œ μ§„μž…ν•˜λŠ” 경우 λ§Œλ‚  수 μžˆλŠ”μ§€.

  • μƒλŒ€ 경둜의 μ‹œμž‘μ΄ ν˜„μž¬ 디렉토리( . )인 것을 이해할 수 μžˆλ‹€.

: μƒλŒ€ κ²½λ‘œλŠ” ν˜„μž¬ μœ„μΉ˜λ‘œλΆ€ν„° μƒλŒ€μ μΈ μœ„μΉ˜λ₯Ό λ‚˜νƒ€λ‚Έλ‹€.

: μƒλŒ€ κ²½λ‘œλŠ” νŠΉμ • 폴더 λ˜λŠ” 파일의 μœ„μΉ˜λ₯Ό ν˜„μž¬ μœ„μΉ˜λ₯Ό κΈ°μ€€μ μœΌλ‘œ λ‚˜νƒ€λ‚΄λŠ”λ°, ν˜„μž¬ μœ„μΉ˜ν•œ ν΄λ”λŠ” 점( . ), μƒμœ„ ν΄λ”λŠ” 두 개의 점( .. )으둜 ν‘œν˜„.

: lsλ₯Ό 톡해 ν™•μΈλ˜λŠ” ν΄λ”λ‚˜ νŒŒμΌμ€ μƒλŒ€ 경둜둜써 ./ (= ν˜„μž¬ 폴더 μ•„λž˜ λΌλŠ” 뜻)을 λΆ™μ—¬ ν‘œν˜„ν•  수 μžˆλ‹€.


ls λͺ…λ Ήμ–΄ μ„€λͺ… 첨뢀

  • ls -l : μ˜΅μ…˜ l은 ν΄λ”λ‚˜ 파일의 포맷을 μ „λΆ€ ν‘œν˜„ν•˜λΌλŠ” 의미
  • ls -a : β€œallβ€μ˜ 함좕어, μˆ¨μ–΄μžˆλŠ” ν΄λ”λ‚˜ νŒŒμΌμ„ ν¬ν•¨ν•œ λͺ¨λ“  ν•­λͺ©μ„ 터미널에 좜λ ₯
  • ls -la

cp : ν΄λ”λ‚˜ νŒŒμΌμ„ 볡사

*ν˜„μž¬ μœ„μΉ˜λŠ” ~λ₯Ό λŒ€μ‹ ν•΄ /Users/[username] (macOS)둜 λ‚˜νƒ€λ‚¨

cp [원본 파일 이름] [볡사할 파일 이름]

cp -rf [원본 폴더 이름] [볡사할 폴더 이름]


κ΄€λ¦¬μž(root) κΆŒν•œ

μ ˆλŒ€ 경둜의 기쀀점인 λ£¨νŠΈν΄λ”(/)λŠ” λ¦¬λˆ…μŠ€μ˜ κ΄€λ¦¬μž μ˜μ—­μ΄λ‹€. 일반 μ‚¬μš©μžμ˜ κΆŒν•œμœΌλ‘œλŠ” μ–΄λ–€ ν΄λ”λ‚˜ νŒŒμΌλ„ 생성, λ³€κ²½, μ‚­μ œν•  수 μ—†λ‹€.

Linux κ΄€λ¦¬μžμ˜ νŠΉμ§•μ€ μ–΄λ–€ 일이 μžˆμ–΄λ„ 일반 μ‚¬μš©μžμ—κ²Œ κ΄€λ¦¬μž κΆŒν•œ(=루트 κΆŒν•œ)을 μ™„μ „ν•˜κ²Œ λ„˜κΈ°μ§€ μ•ŠλŠ”λ‹€. ν”„λ‘œκ·Έλž¨μ„ μ„€μΉ˜, λ³€κ²½ λ˜λŠ” μ‚­μ œν•  수 μžˆλŠ” κ΄€λ¦¬μž κΆŒν•œλ§Œ μ „λ‹¬ν•œλ‹€. μ‚¬μš©μžμ™€ κ΄€λ¦¬μžλ₯Ό λͺ…ν™•νžˆ 뢄리 β†’ μ‚¬μš©μžμ˜ μ‹€μˆ˜λ‘œ λ°œμƒν•˜λŠ” μ‹œμŠ€ν…œ μ—λŸ¬λ‘œλΆ€ν„° 운영체제λ₯Ό λ³΄ν˜Έν•œλ‹€.

λ£¨νŠΈν΄λ”λ‘œ μ΄λ™ν•˜μ—¬ λͺ…λ Ήμ–΄ mkdir을 μ΄μš©ν•΄ 폴더λ₯Ό μƒμ„±ν•˜λ©΄ β€œRead-only file system” μ΄λΌλŠ” μ—λŸ¬λ₯Ό λ§Œλ‚˜λŠ”λ°, μ½κΈ°μ „μš©μ΄λΌλŠ” 말은 ν΄λ”λ‚˜ νŒŒμΌμ„ 생성, λ³€κ²½, μ‚­μ œν•  수 μ—†λ‹€λŠ” μ˜λ―Έμ΄λ‹€.

*ν˜„μž¬ 둜그인된 μ‚¬μš©μžλ₯Ό ν™•μΈν•˜λŠ” λͺ…λ Ήμ–΄ : whoami

*μ‚¬μš©μž ν΄λ”μ˜ 경둜(Path)λŠ” / 둜 ν‘œμ‹œλœλ‹€. 물결기호()λŠ” λ£¨νŠΈν΄λ”(/)λ‘œλΆ€ν„° μ‚¬μš©μž 폴더(username)κΉŒμ§€μ˜ 경둜λ₯Ό μΆ•μ•½ν•œ ν˜•νƒœ

μ‚¬μš©μžκ°€ μƒˆλ‘œμš΄ ν”„λ‘œκ·Έλž¨μ„ μ„€μΉ˜ν•˜κ±°λ‚˜ λ³€κ²½ λ˜λŠ” μ‚­μ œν•  λ•Œμ— μ‚¬μš©μžκ°€ κ΄€λ¦¬μž κΆŒν•œμ„ μ΄μš”ν•  수 μžˆλŠ” λͺ…λ Ήμ–΄λ‘œ sudoλ₯Ό μ‚¬μš©ν•œλ‹€.

sudo : κ΄€λ¦¬μž κΆŒν•œμ„ νšλ“ν•˜λŠ” λͺ…λ Ήμ–΄

λͺ…λ Ήμ–΄ ls -l 을 톡해 νŠΉμ • ν΄λ”λ‚˜ 파일이 μ‚¬μš©μž λ˜λŠ” κ΄€λ¦¬μžμ˜ μ†Œμœ λ‘œ μƒμ„±λ˜μ—ˆλŠ”μ§€ 확인할 수 μžˆλ‹€.

sudo mkdir [생성할 폴더λͺ…]

λͺ…λ Ήμ–΄ sudoλ₯Ό μ΄μš©ν•΄ μƒμ„±ν•œ ν΄λ”μ˜ μ†Œμœ μžλŠ” λ£¨νŠΈμ΄λ‹€. μ‚¬μš©μž κΆŒν•œμ΄ μ•„λ‹Œ κ΄€λ¦¬μž κΆŒν•œμœΌλ‘œ μƒμ„±λ˜μ—ˆλ‹€λŠ” λœ»μ΄λ‹€.



ν…μŠ€νŠΈ 에디터 nano μ‚¬μš©λ²•

CLI의 유λͺ…ν•œ 에디터 vim(vi), κ°€μž₯ μ‰¬μš΄ 에디터 nano.


nano μ‹€ν–‰

1
2
3
4
code hello.js # hello.jsλ₯Ό VS Codeμ—μ„œ μ—΄κΈ°.

nano hello.js # hello.jsλ₯Ό nanoμ—μ„œ μ—΄κΈ°.
nano # κ·Έλƒ₯ μ‹€ν–‰ν•˜κΈ°

파일 μ—΄κΈ°

단좕킀 ^R (ctrl+Rν‚€)

**^T (ctrl+Tν‚€)**λ₯Ό λˆ„λ₯Έ ν›„ ν™”μ‚΄ν‘œν‚€λ₯Ό μ΄μš©ν•΄ 파일 및 디렉토리λ₯Ό νƒμƒ‰ν•œ ν›„ 뢈러였기

1
nano νŒŒμΌμ΄λ¦„ # ν„°λ―Έλ„μ—μ„œ νŒŒμΌμ„ μ§€μ •ν•΄μ„œ μ—΄κΈ°

파일 νŽΈμ§‘ ν›„ μ’…λ£Œ

**^X (ctrl+X)**λ₯Ό λˆ„λ₯΄λ©΄ λ‹€μŒκ³Ό 같은 ν”„λ‘¬ν”„νŠΈκ°€ λ“±μž₯.

Save modified buffer (ANSWERING β€œNo” WILL DESTROY CHANGES) ?

ν‚€λ³΄λ“œμ˜ Y와 N을 λˆŒλŸ¬μ„œ μ €μž₯ μ—¬λΆ€λ₯Ό κ²°μ •.


파일 μ €μž₯

^0 WriteOut을 μ΄μš©ν•˜λ©΄ ν•΄λ‹Ή λ‚΄μš©μ„ νŒŒμΌμ— μ €μž₯ν•˜λŠ” 단좕킀.



νŒ¨ν‚€μ§€μ™€ νŒ¨ν‚€μ§€ λ§€λ‹ˆμ €

[MacOS νŒ¨ν‚€μ§€ λ§€λ‹ˆμ €]

  • brew update
  • brew outdated
  • brew upgrade
  • brew info
  • brew install
  • brew list
  • brew uninstall


JavaScript λŸ°νƒ€μž„(runtime)

β‡’ 크둬, μ‚¬νŒŒλ¦¬ 같은 μ•± λΈŒλΌμš°μ €


λŸ°νƒ€μž„?

: ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄κ°€ μ‹€ν–‰λ˜λŠ” ν™˜κ²½

ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄κ°€ κ΅¬λ™λ˜λŠ” ν™˜κ²½μ΄λ‹€. μ–΄λ–€ ν”„λ‘œκ·Έλž¨μ΄ λ™μž‘ν•  λ•Œ, ν”„λ‘œκ·Έλž¨μ΄ λ™μž‘ν•˜λŠ” 곳이닀. μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό μ΄μš©ν•΄ μ½”λ“œλ₯Ό μ μ—ˆμœΌλ©΄ μ½”λ“œκ°€ μ‹€ν–‰λ˜λŠ” 곳이 λŸ°νƒ€μž„μ΄λ‹€.


Node.js

μ΄μ „μ—λŠ” JavaScript λŸ°νƒ€μž„μ΄ μ›Ή λΈŒλΌμš°μ € 밖에 μ—†μ—ˆμœΌλ‚˜, node.js의 λ“±μž₯으둜 λΈŒλΌμš°μ €κ°€ μ•„λ‹Œ κ³³μ—μ„œ 싀행될 수 있게 λ˜μ—ˆλ‹€.

CLIμ—μ„œ node <file name> λͺ…λ Ήμ–΄λ₯Ό μž…λ ₯ β†’ μž‘μ„±ν•œ μ½”λ“œκ°€ node.js λŸ°νƒ€μž„μœΌλ‘œ μ‹€ν–‰



nvm & node.js

nvm(Node Vesion Manager)을 μ΄μš©ν•˜λ©΄ node.js의 λ‹€μ–‘ν•œ 버전을 μ„€μΉ˜, μ‚¬μš©ν•  수 있음


nvm μ„€μΉ˜

GitHub - nvm-sh/nvm: Node Version Manager - POSIX-compliant bash script to manage multiple active node.js versions


μ„€μΉ˜ 확인

Untitled

nvm μ„€μΉ˜ μ„±κ³΅μ‹œ ν™”λ©΄ β†’ nvm -β€”version λͺ…λ Ήμ–΄λ‘œ 버전 확인


node.js μ„€μΉ˜

1
2
3
nvm install --lts # μ΅œμ‹  버전 μ„€μΉ˜

node -v # 버전 확인

Node.js



nvm μ‚¬μš©λ²•

1
2
3
4
5
6
7
8
# μ„€μΉ˜λœ 버전
nvm ls

# νŠΉμ • λ²„μ „μ˜ node μ„€μΉ˜
nvm install 12.18.3

# λ‹€λ₯Έ λ²„μ „μœΌλ‘œ λ³€κ²½ν•˜μ—¬ μ‚¬μš©
nvm use λ²„μ „λ„˜λ²„


npm κ³Ό package.json

남이 λ§Œλ“€μ–΄λ†“μ€ κ²€μ¦λœ μ½”λ“œ(λͺ¨λ“ˆ) β‡’ npm λͺ¨λ“ˆ

npm λͺ¨λ“ˆ ν™œμš©μ„ μœ„ν•΄ λͺ¨λ“ˆ 정보λ₯Ό λ‹΄μ•„λ‘” 파일 β‡’ package.json

npm은 ν•„μš”ν•œ λͺ¨λ“ˆμ„ λ‹€μš΄λ‘œλ“œν•  수 μžˆλŠ”, λͺ¨λ“ˆλ“€μ΄ λͺ¨μ—¬μžˆλŠ” λͺ¨λ“ˆ μŠ€ν† μ–΄μ΄λ‹€.

macOS νŒ¨ν‚€μ§€ λ§€λ‹ˆμ €κ°€ brew 이듯, node.js μƒνƒœκ³„μ˜ νŒ¨ν‚€μ§€ λ§€λ‹ˆμ €λŠ” npm 이닀.


package.json

ν”„λ‘œκ·Έλž¨ 싀행을 μœ„ν•΄ ν•„μš”ν•œ λͺ¨λ“ˆλ“€, ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 방법, ν…ŒμŠ€νŠΈ 방법 등이 λͺ…μ‹œ. μ‹€μ œ λͺ¨λ“ˆμ€ λ”°λ‘œ node_modules λΌλŠ” 폴더에 μ €μž₯됨

ν”„λ‘œμ νŠΈ μ½”λ“œλ₯Ό μ „λ‹¬μ‹œ npm install λͺ…λ Ήμ–΄λ₯Ό 톡해, package.jsonμ—μ„œ ν•„μš”ν•˜λ‹€κ³  ν•˜λŠ” λͺ¨λ“ˆμ„ λ‹€μš΄λ‘œλ“œ ν•  수 μžˆλ‹€.


dependency(μ˜μ‘΄μ„± λͺ¨λ“ˆ)

ν”„λ‘œκ·Έλž¨ μ‹€ν–‰κ³Ό 관계없이 κ°œλ°œμ„ μœ„ν•΄ ν•„μš”ν•œ λͺ¨λ“ˆ. κ°œλ°œμ΄λ‚˜ 싀행에 ν•΄λ‹Ή λͺ¨λ“ˆμ„ β€œμ˜μ‘΄β€ν•œλ‹€κ³  ν•΄μ„œ β€œμ˜μ‘΄μ„± λͺ¨λ“ˆβ€. 킀에 적힌 것은 λͺ¨λ“ˆ 이름, 값은 버전이닀.

devDependencies 에 ν”„λ‘œμ νŠΈ κ°œλ°œν•˜λŠ” ν™˜κ²½μ—μ„œ ν•„μš”ν•œ λͺ¨λ“ˆλ“€μ΄ 무엇인지 μ ν˜€ μžˆλ‹€.

1
2
3
4
# mochaλŠ” ν…ŒμŠ€νŠΈλ₯Ό μœ„ν•΄ ν•„μš”ν•œ λͺ¨λ“ˆ
npm install mocha --save-dev

# --save-dev μ˜΅μ…˜κ³Ό ν•¨κ»˜ install μ‹€ν–‰μ‹œ μžλ™μœΌλ‘œ devDependencies에 μΆ”κ°€

dependencies λŠ” 직접 μ‹€ν–‰κ³Ό κ΄€λ ¨ μžˆλŠ” λͺ¨λ“ˆ. ν”„λ‘œμ νŠΈκ°€ λŒμ•„κ°€κΈ° μœ„ν•΄ λ°˜λ“œμ‹œ ν•„μš”ν•œ λͺ¨λ“ˆλ“€μ΄ μ ν˜€μžˆμŒ. underscore, React 등…

1
2
3
4
5
6
{
"dependencies": {
"react": "^16.7.0",
"react-dom": "^16.7.0"
},
}
1
2
3
4
5
6
# react 라이브러리 μ‚¬μš©
npm install react
npm install --save react

# --save μ˜΅μ…˜κ³Ό ν•¨κ»˜ install μ‹€ν–‰μ‹œ μžλ™μœΌλ‘œ dependencies에 μΆ”κ°€
# --save μƒλž΅ κ°€λŠ₯

scripts ν•­λͺ©

CLIμ—μ„œ μ‚¬μš©κ°€λŠ₯ν•œ λͺ…령을 기술(=npm script)

1
2
3
4
5
6
7
8
{
"scripts": {
"start": "node index.js",
"test": "mocha test/index.test.js",
"lint": "eslint",
"submit": "codestates-submission"
},
}
μž‘μ—… λ‚΄μš© μ‹€ν–‰ 슀크립트
node.js μ•± μ‹€ν–‰ npm run start
ν…ŒμŠ€νŠΈ μ‹€ν–‰ npm run test
μ½”λ“œ 검사 npm run lint
과제 제좜(ν”„λ‘œκ·Έλž¨μ‹œ) npm run submit