λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ’» Programming/etc.

[Linux] Bash Shell μ„€λͺ… | 자주 μ‚¬μš©ν•˜λŠ” bash λͺ…λ Ήμ–΄ 정리 | λ¦¬λˆ…μŠ€ λͺ…λ Ήμ–΄

by 뭅즀 2023. 8. 6.
λ°˜μ‘ν˜•
Bash ?

 

 

BashλŠ” Unix 계열 μš΄μ˜μ²΄μ œμ—μ„œ μ‚¬μš©λ˜λŠ” λͺ…λ Ή 쀄 μΈν„°νŽ˜μ΄μŠ€(Command Line Interface, CLI)λ₯Ό μœ„ν•œ μ‰˜(shell)이닀. BashλŠ” "Bourne Again SHell"의 μ•½μžλ‘œμ„œ, Stephen Bourne μ‰˜(sh)을 기반으둜 κ°œλ°œλ˜μ–΄ Unix, Linux, macOS λ“±μ—μ„œ κΈ°λ³Έ μ‰˜λ‘œ 많이 μ‚¬μš©λ©λ‹ˆλ‹€.

 

*μ‰˜μ€ μ‚¬μš©μžκ°€ λͺ…λ Ήμ–΄λ₯Ό μž…λ ₯ν•˜κ³  μš΄μ˜μ²΄μ œμ™€ μƒν˜Έμž‘μš©ν•˜λŠ” ν™˜κ²½μ„ μ œκ³΅ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ΄λ‹€

 

BashλŠ” λ‹€μ–‘ν•œ κΈ°λŠ₯을 μ œκ³΅ν•˜λ©°, 주둜 λ‹€μŒκ³Ό 같은 역할을 μˆ˜ν–‰ν•œλ‹€.

  • λͺ…λ Ήμ–΄ μ‹€ν–‰: μ‚¬μš©μžλŠ” Bash μ‰˜μ—μ„œ λ‹€μ–‘ν•œ λͺ…λ Ήμ–΄λ₯Ό μž…λ ₯ν•˜μ—¬ νŒŒμΌμ„ 생성, μˆ˜μ •, μ‚­μ œν•˜κ±°λ‚˜ ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•  수 있음
  • 파일 μ‹œμŠ€ν…œ 탐색: BashλŠ” 디렉토리λ₯Ό λ³€κ²½ν•˜κ³  파일 및 폴더λ₯Ό ν™•μΈν•˜λŠ” λ“±μ˜ 파일 μ‹œμŠ€ν…œ κ΄€λ ¨ λͺ…λ Ήμ–΄λ₯Ό μ œκ³΅ν•  수 있음
  • ν™˜κ²½ λ³€μˆ˜ μ„€μ •: BashλŠ” ν™˜κ²½ λ³€μˆ˜λ₯Ό μ„€μ •ν•˜μ—¬ μ‚¬μš©μžκ°€ μ‰˜ μ„Έμ…˜ λ™μ•ˆ μ‚¬μš©ν•  수 μžˆλŠ” 데이터λ₯Ό 지정할 수 있음
  • νŒŒμ΄ν”„λΌμΈ: BashλŠ” μ—¬λŸ¬ λͺ…λ Ήμ–΄λ₯Ό νŒŒμ΄ν”„(|)둜 μ—°κ²°ν•˜μ—¬ μž…λ ₯κ³Ό 좜λ ₯을 μ—°κ²°ν•˜κ³ , 데이터λ₯Ό λ³€ν™˜ν•˜λŠ” μž‘μ—…μ„ μˆ˜ν–‰ν•  수 있음
  • μŠ€ν¬λ¦½νŒ…: Bash 슀크립트λ₯Ό μž‘μ„±ν•˜μ—¬ μ—¬λŸ¬ λͺ…령어와 흐름 μ œμ–΄ ꡬ쑰λ₯Ό κ²°ν•©ν•˜μ—¬ μžλ™ν™”λœ μž‘μ—…μ„ μˆ˜ν–‰ν•  수 있음

BashλŠ” μ‚¬μš©μžκ°€ μž…λ ₯ν•œ λͺ…λ Ήμ–΄λ₯Ό ν•΄μ„ν•˜μ—¬ 운영체제의 μ»€λ„μ—κ²Œ μ „λ‹¬ν•˜κ³ , 컀널이 λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•œ κ²°κ³Όλ₯Ό μ‰˜μ—κ²Œ λ°˜ν™˜ν•œλ‹€. μ΄λ ‡κ²Œ μ‚¬μš©μžμ™€ 운영체제 사이λ₯Ό μ€‘κ°œν•˜λŠ” 역할을 μˆ˜ν–‰ν•œλ‹€.

 

λ˜ν•œ BashλŠ” λ‹€μ–‘ν•œ μ˜΅μ…˜κ³Ό λ§€κ°œλ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λ‹€μ–‘ν•œ μž‘μ—…μ„ μˆ˜ν–‰ν•  수 μžˆλ‹€. μ‰˜ 슀크립트λ₯Ό 톡해 반볡적이고 λ³΅μž‘ν•œ μž‘μ—…μ„ μžλ™ν™”ν•˜λŠ”λ°μ—λ„ 많이 μ‚¬μš©λœλ‹€. BashλŠ” μœ μš©ν•˜κ³  κ°•λ ₯ν•œ λ„κ΅¬λ‘œμ„œ, 컴퓨터 μ‹œμŠ€ν…œ 관리, ν”„λ‘œκ·Έλž˜λ°, 데이터 뢄석, 개발 λ“± λ‹€μ–‘ν•œ λΆ„μ•Όμ—μ„œ ν™œμš©λœλ‹€.

 

*컀널(Kernel)은 μ»΄ν“¨ν„°μ˜ 운영체제(OS, Operating System) μ€‘μ—μ„œ 핡심적인 뢀뢄이닀. μš΄μ˜μ²΄μ œλŠ” μ»΄ν“¨ν„°μ˜ ν•˜λ“œμ›¨μ–΄μ™€ μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό κ΄€λ¦¬ν•˜κ³ , μ‘μš© ν”„λ‘œκ·Έλž¨μ΄ ν•˜λ“œμ›¨μ–΄μ™€ μƒν˜Έμž‘μš©ν•  수 μžˆλ„λ‘ μ§€μ›ν•œλ‹€. 컀널은 μ΄λŸ¬ν•œ 운영체제의 핡심 역할을 λ‹΄λ‹Ήν•˜λ©°, μ‹œμŠ€ν…œ λ¦¬μ†ŒμŠ€λ₯Ό κ΄€λ¦¬ν•˜κ³ , ν•˜λ“œμ›¨μ–΄μ™€ μ‘μš© ν”„λ‘œκ·Έλž¨ μ‚¬μ΄μ˜ μΈν„°νŽ˜μ΄μŠ€ 역할을 μˆ˜ν–‰ν•©λ‹ˆλ‹€.

 

 

BashλŠ” ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μΌκΉŒ?

BashλŠ” ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λŠ” μ•„λ‹ˆλ‹€. BashλŠ” μŠ€ν¬λ¦½νŒ… μ–Έμ–΄(scripting language) λ˜λŠ” λͺ…λ Ήμ–΄ 해석기(shell interpreter)둜 λΆ„λ₯˜λœλ‹€. μŠ€ν¬λ¦½νŒ… μ–Έμ–΄λŠ” ν”„λ‘œκ·Έλž˜λ° 언어와 μœ μ‚¬ν•œ 문법을 가지고 μžˆμ§€λ§Œ, 일반적인 ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ²˜λŸΌ 컴파일과 같은 단계 없이 λ°”λ‘œ ν•΄μ„λ˜μ–΄ μ‹€ν–‰λœλ‹€.

 

BashλŠ” 주둜 λͺ…λ Ή 쀄 μΈν„°νŽ˜μ΄μŠ€(Command Line Interface, CLI)μ—μ„œ μ‚¬μš©λ˜λŠ” μŠ€ν¬λ¦½νŒ… μ–Έμ–΄λ‘œμ„œ, μ‚¬μš©μžκ°€ λͺ…λ Ήμ–΄λ₯Ό μž…λ ₯ν•˜κ³  μš΄μ˜μ²΄μ œμ™€ μƒν˜Έμž‘μš©ν•˜λŠ”λ°μ— 주둜 μ‚¬μš©λœλ‹€

 

μŠ€ν¬λ¦½νŒ… 언어듀은 주둜 싀행이 λΉ λ₯΄κ³  κ°„νŽΈν•˜λ©°, μž‘μ€ 규λͺ¨μ˜ μž‘μ—…μ„ λΉ λ₯΄κ²Œ μ²˜λ¦¬ν•˜λŠ” 데에 νŠΉν™”λ˜μ–΄ μžˆλ‹€. 반면, 일반적인 ν”„λ‘œκ·Έλž˜λ° 언어듀은 더 λ³΅μž‘ν•œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 개발과 μ‹œμŠ€ν…œ ꡬ좕에 μ‚¬μš©λœλ‹€. 각 언어듀은 νŠΉμ • μš©λ„μ™€ νŠΉμ„±μ— 따라 μ ν•©ν•œ μƒν™©μ—μ„œ μ‚¬μš©λ˜λ©°, BashλŠ” 주둜 λͺ…λ Ή 쀄 μƒμ—μ„œ κ°„λ‹¨ν•œ μž‘μ—…μ„ λΉ λ₯΄κ²Œ μ²˜λ¦¬ν•˜λŠ”λ°μ— 많이 μ‚¬μš©λœλ‹€.

 

 

자주 μ‚¬μš©ν•˜λŠ” Bash λͺ…λ Ήμ–΄

λͺ‡ 가지 자주 μ‚¬μš©λ˜λŠ” Bash λͺ…령어듀에 λŒ€ν•΄ μ„€λͺ…ν•΄λ“œλ¦¬κ² μŠ΅λ‹ˆλ‹€. 이 λͺ…령어듀은 Unix/Linux 기반 μ‹œμŠ€ν…œμ—μ„œ μ‚¬μš©λ˜λŠ” 일반적인 λͺ…령어듀이며, Windowsμ—μ„œλ„ WSL(Windows Subsystem for Linux)을 톡해 μ‚¬μš©ν•  수 μžˆλ‹€.

 

  • ls: ν˜„μž¬ λ””λ ‰ν† λ¦¬μ˜ 파일과 폴더 λͺ©λ‘μ„ 좜λ ₯
$ ls

 

  • cd: 디렉토리 λ³€κ²½ λͺ…λ Ήμ–΄λ‘œ, μ§€μ •λœ λ””λ ‰ν† λ¦¬λ‘œ 이동
$ cd directory_name

 

  • mkdir: μƒˆλ‘œμš΄ 디렉토리λ₯Ό 생성
$ mkdir new_directory

 

  • rm: νŒŒμΌμ΄λ‚˜ 디렉토리λ₯Ό μ‚­μ œ
$ rm file_name
$ rm -r directory_name

 

  • cp: νŒŒμΌμ΄λ‚˜ 디렉토리λ₯Ό 볡사
$ cp source_file destination_file
$ cp -r source_directory destination_directory

 

  • mv: νŒŒμΌμ΄λ‚˜ 디렉토리λ₯Ό μ΄λ™ν•˜κ±°λ‚˜ 이름을 λ³€κ²½
$ mv old_name new_name
$ mv source_file destination_directory

 

  • pwd: ν˜„μž¬ μž‘μ—… 쀑인 λ””λ ‰ν† λ¦¬μ˜ 경둜λ₯Ό 좜λ ₯
$ pwd

 

  • cat: 파일의 λ‚΄μš©μ„ 좜λ ₯
$ cat file_name

 

  • echo: λ¬Έμžμ—΄μ„ 좜λ ₯
$ echo "Hello, Bash!"

 

  • grep: 파일 λ‚΄μ—μ„œ νŠΉμ • νŒ¨ν„΄μ„ 검색
$ grep "pattern" file_name

 

  • head: 파일의 μ•ž 뢀뢄을 좜λ ₯
$ head -n 10 file_name  # 파일의 첫 10쀄을 좜λ ₯

 

  • tail: 파일의 λ’· 뢀뢄을 좜λ ₯
$ tail -n 10 file_name  # 파일의 λ’€μ—μ„œ 10쀄을 좜λ ₯

 

  • chmod: 파일 λ˜λŠ” λ””λ ‰ν† λ¦¬μ˜ κΆŒν•œμ„ λ³€κ²½
$ chmod +x file_name  # νŒŒμΌμ— μ‹€ν–‰ κΆŒν•œμ„ μΆ”κ°€
λ°˜μ‘ν˜•