๐Ÿ–ฅ๏ธ Computer Science/Linux

[Linux] ์…ธ ์ข…๋ฅ˜, ์…ธ ์Šคํฌ๋ฆฝํŠธ

Rosieblue 2023. 9. 5. 15:23
728x90

์‰˜ (์…ธ)

  • ๋ช…๋ น์–ด์™€ ์ปค๋„์ด ๋Œ€ํ™”๋ฅผ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ฃผ๋Š” ์ผ์ข…์˜ ์ธํ„ฐํŽ˜์ด์Šค
  • ๋ช…๋ น์–ด ํ•ด์„๊ธฐ๋ผ๊ณ  ๋ด๋„๋จ
์œ ์ €๊ฐ€ ์…ธ(๋ช…๋ น์–ด ํ•ด์„๊ธฐ)์— ๋ช…๋ น์„ ์ „๋‹ฌํ•˜๋ฉด ์…ธ์ด ์ปค๋„ํ•œํ…Œ ๋ถ€ํƒํ•˜๊ณ , ์ปค๋„์ด ๋‚ด๋ถ€์ ์ธ ์ž‘์—…์„ ์‹คํ–‰ํ•œ ํ›„ ์ด ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์‹œ ์…ธ์„ ํ†ตํ•ด ์œ ์ €์—๊ฒŒ๋กœ ์ „๋‹ฌ

 

์…ธ(shell)์€ ๊ป์งˆ์ด๋ผ๋Š” ๋œป์œผ๋กœ ์ปค๋„์„ ๊ฐ์‹ธ๊ณ  ์žˆ์–ด์„œ ๊ทธ๋Ÿฐ ์ด๋ฆ„์ด ๋˜์—ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ ์—ฌ๊ธฐ : ์‹œ์Šคํ…œ์ฝœ(syscall), ์…ธ, ์ปค๋„๋ชจ๋“œ vs ์œ ์ €๋ชจ๋“œ 

 

์…ธ ์ข…๋ฅ˜

์‚ฌ์šฉ์ž ํ”„๋กฌํ”„ํŠธ๊ฐ€ $์ด๋ฉด ๋ณธ ์…ธ ๊ณ„์—ด, %์ด๋ฉด C์…ธ ๊ณ„์—ด์ด๋‹ค.

  • Bourne-Shell(/bin/sh) - ์œ ๋‹‰์Šค์˜ ์˜ค๋ฆฌ์ง€๋„ ์‰˜. ์ƒํ˜ธ ๋Œ€ํ™”ํ˜• ๋ฐฉ์‹ ๋ถˆ๊ฐ€๋Šฅ
  • C shell(/bin/csh) - C ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ค์–ด์ง. ๋นŒ ์กฐ์ด(vi ์—๋””ํ„ฐ ๋งŒ๋“  ์‚ฌ๋žŒ)๊ฐ€ ๋งŒ๋“ค์—ˆ์Œ.
  • Bourne-agin shell(/bin/bash) - ๋ฆฌ๋ˆ…์Šค์˜ ํ‘œ์ค€ ์‰˜. GNU ๊ฐœ๋ฐœํ•  ๋•Œ ๋งŒ๋“ค์–ด์ง. ksh+csh๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋จ
  • Korn Shell (/bin/ksh) - ๋ณธ์‰˜ ํ™•์žฅํŒ. AT&T์˜ ๋ฐ์ด๋น„๋“œ ์ฝ˜์ด ๋งŒ๋“ฆ.
  • TENEX C shell (/bin/tcsh)

์‚ฌ์šฉ์ค‘์ธ ์‰˜ ํ™•์ธ

echo $SHELL

SHELL์€ ํ˜„์žฌ ์‚ฌ์šฉ์ค‘์ธ ์‰˜์„ ๋‚˜ํƒ€๋‚ด๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜์ด๋‹ค.

๋˜ํ•œ /etc/passwd ํŒŒ์ผ์—์„œ๋„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. (์ฐธ๊ณ : [Linux] /etc ๋””๋ ‰ํ† ๋ฆฌ)

๋งจ๋งˆ์ง€๋ง‰ ':' ๋’ค์— ์จ์žˆ๋Š” ๊ฒƒ์ด ๊ฐ ์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์‰˜์ด๋‹ค.

 

๋˜ํ•œ /etc/shells์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์‰˜๋“ค์˜ ์ข…๋ฅ˜๋„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค

 

์‰˜ ๋ณ€๊ฒฝ 

chsh [์˜ต์…˜] ๊ณ„์ •๋ช… ์…ธ
#์˜ต์…˜
# -s : ์ง€์ •ํ•˜๋Š” ์…ธ์„ ์•ž์œผ๋กœ ๋กœ๊ทธ์ธํ•  ์…ธ๋กœ ๋ณ€๊ฒฝ (์žฌ๋ถ€ํŒ…ํ•ด์•ผ์ง€ ๋ช…๋ น์–ด ์ธ์‹๋จ)
# -l : /etc/shells ํŒŒ์ผ ์•ˆ์— ์ง€์ •ํ•œ ์…ธ์„ ๋‚˜์—ด

usermod [์˜ต์…˜] ๊ณ„์ •๋ช…
#์˜ต์…˜ -s ๋ณ€๊ฒฝ ์…ธ : ์ƒˆ๋กœ์šด ์…ธ๋กœ ๋ณ€๊ฒฝ ์‹œ ์‚ฌ์šฉ

 

์‰˜ ์Šคํฌ๋ฆฝํŠธ (Shell Script)

์‰˜ ๋ช…๋ น์–ด๋“ค์˜ ์ง‘ํ•ฉ์„ ๋ชจ์•„๋‘” ํŒŒ์ผ์„ ์‰˜ ์Šคํฌ๋ฆฝํŠธ๋ผ๊ณ  ๋ณด๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค.

์ฆ‰ Unix ์ปค๋งจ๋“œ ๋“ฑ์„ ๋‚˜์—ดํ•ด์„œ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. 

 

[ ์˜ˆ์‹œ ]

์‰˜ ์ž์ฒด๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. 

#!/bin/bash #/bin/bash๋ฅผ ์‹คํ–‰ํ•˜๊ฒ ๋‹ค๋Š” ์˜๋ฏธ. ์–˜๋ฅผ shebang์ด๋ผ๊ณ  ํ•œ๋‹ค.

#compile.sh
echo "gcc -o $1 $1.c" #๋งค๊ฐœ๋ณ€์ˆ˜๋Š” $๋ฅผ ๋ถ™์ธ๋‹ค.
gcc -o $1 $1.c

 

์‰˜ ์Šคํฌ๋ฆฝํŠธ์—์„œ ์ถœ๋ ฅ์€ echo, ์ž…๋ ฅ์€ read๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

 

์‰˜ ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ์‹คํ–‰ํ•˜๋ ค๋ฉด ์•ž์— bash ๋ช…๋ น์–ด๋ฅผ ๋ถ™์ด๊ฑฐ๋‚˜ +x ๊ถŒํ•œ์„ ์ฃผ๋ฉด ๋œ๋‹ค.

bash compile.sh
chmod +x compile.sh

 

์‰˜ ํ™˜๊ฒฝ ์„ค์ • 

์•„๋ž˜ ๋ณผ๋“œ ์ณ๋‘” ํŒŒ์ผ๋“ค์€ ๋‹ค ์‰˜ ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์œผ๋กœ, CTF์—์„œ Dockerfile์„ ์ค„ ๋•Œ ๋งŽ์ด ์ ‘ํ•ด๋ดค์„ ๊ฒƒ์ด๋‹ค.

bash ์‰˜์ด ๋Œ€ํ™”์‹ ๋กœ๊ทธ์ธ ์‰˜๋กœ ์‹คํ–‰๋˜๋ฉด ์šฐ์„  /etc/profile์„ ์‹คํ–‰ํ•œ๋‹ค. ๋งŒ์•ฝ์— ์—†์œผ๋ฉด ~/.bash_profile, ~/.bash_login, ~/profile์„ ์ฐจ๋ก€๋กœ ์ฐพ์€ ํ›„์— ๊ฐ€์žฅ ๋จผ์ € ๋ฐœ๊ฒฌํ•œ ํŒŒ์ผ ์ค‘์—์„œ ์ฝ์–ด์˜ฌ ์ˆ˜ ์žˆ๋Š” ํŒŒ์ผ์„ ์‹คํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค.

 

๋กœ๊ทธ์ธ ์‰˜์ด ์ข…๋ฃŒ๋˜๋ฉด ~/.bash_logout ํŒŒ์ผ์ด ์žˆ๋‹ค๋ฉด ์–˜๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋กœ๊ทธ์ธ ์‰˜์ด ์•„๋‹Œ ๋Œ€ํ™”์‹ ์‰˜๋กœ ์‹คํ–‰๋œ ๊ฒฝ์šฐ ~/.bashrc ํŒŒ์ผ์„ ์‹คํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค.

 

 

 

 

Reference

[์ฑ…] UNIX ์‹œ์Šคํ…œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ