Bash๋ฅผ ์ž์„ธํžˆ ์‹คํ–‰ํ•˜๊ธฐ

๊ฒ€์ƒ‰์—์„œ ์ด ํŽ˜์ด์ง€๋ฅผ ์ฐพ์•˜๋‹ค๋ฉด ์•„๋งˆ๋„ bash ์‹คํ–‰๊ณผ ๊ด€๋ จ๋œ ์ผ๋ถ€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์•„๋งˆ๋„ ๊ท€ํ•˜์˜ bash ํ™˜๊ฒฝ์ด ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•˜์ง€ ์•Š๊ณ  ๊ทธ ์ด์œ ๋ฅผ ์ดํ•ดํ•˜์ง€ ๋ชปํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž‘๋™ํ•  ๋•Œ๊นŒ์ง€ ๋‹ค์–‘ํ•œ bash ๋ถ€ํŒ… ํŒŒ์ผ์ด๋‚˜ ํ”„๋กœํ•„ ๋˜๋Š” ๋ชจ๋“  ํŒŒ์ผ์— ๋ฌด์ž‘์œ„๋กœ ๋ฌด์–ธ๊ฐ€๋ฅผ ์ง‘์–ด๋„ฃ์—ˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์–ด์จŒ๋“  ์ด ๋…ธํŠธ์˜ ์š”์ ์€ ๋ฌธ์ œ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก bash๋ฅผ ์‹œ์ž‘ํ•˜๋Š” ์ ˆ์ฐจ๋ฅผ ๊ฐ€๋Šฅํ•œ ํ•œ ๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ะ”ะธะฐะณั€ะฐะผะผะฐ

์ด ์ˆœ์„œ๋„๋Š” bash๋ฅผ ์‹คํ–‰ํ•  ๋•Œ์˜ ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๋ฅผ ์š”์•ฝํ•ฉ๋‹ˆ๋‹ค.

Bash๋ฅผ ์ž์„ธํžˆ ์‹คํ–‰ํ•˜๊ธฐ

์ด์ œ ๊ฐ ๋ถ€๋ถ„์„ ์ž์„ธํžˆ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋กœ๊ทธ์ธ ์‰˜?

๋จผ์ € ๋กœ๊ทธ์ธ ์‰˜์— ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋กœ๊ทธ์ธ ์‰˜์€ ๋Œ€ํ™”ํ˜• ์„ธ์…˜์— ๋กœ๊ทธ์ธํ•  ๋•Œ ์ž…๋ ฅํ•˜๋Š” ์ฒซ ๋ฒˆ์งธ ์‰˜์ž…๋‹ˆ๋‹ค. ๋กœ๊ทธ์ธ ์‰˜์—๋Š” ์‚ฌ์šฉ์ž ์ด๋ฆ„๊ณผ ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ”Œ๋ž˜๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๋กœ๊ทธ์ธ ์…ธ์„ ๊ฐ•์ œ๋กœ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. --login ๋ถ€๋ฅผ ๋•Œ bash์˜ˆ :

๋ฐฐ์‰ฌ --๋กœ๊ทธ์ธ

๋กœ๊ทธ์ธ ์‰˜์€ bash ์‰˜์„ ์ฒ˜์Œ ์‹œ์ž‘ํ•  ๋•Œ ๊ธฐ๋ณธ ํ™˜๊ฒฝ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

์ธํ„ฐ๋ ‰ํ‹ฐ๋ธŒ?

๊ทธ๋Ÿฐ ๋‹ค์Œ ์‰˜์ด ๋Œ€ํ™”ํ˜•์ธ์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Š” ๋ณ€์ˆ˜์˜ ์กด์žฌ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. PS1 (๋ช…๋ น ์ž…๋ ฅ ๊ธฐ๋Šฅ์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค):

if [ "${PS1-}" ]; ๊ทธ๋Ÿฐ ๋‹ค์Œ ์—์ฝ” ๋Œ€ํ™”ํ˜•, ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋น„๋Œ€ํ™”ํ˜• fi๋ฅผ ์—์ฝ”ํ•ฉ๋‹ˆ๋‹ค.

์•„๋‹ˆ๋ฉด ์˜ต์…˜์ด ์„ค์ •๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ด๋ณด์„ธ์š” -i, ํŠน์ˆ˜ ํ•˜์ดํ”ˆ ๋ณ€์ˆ˜ ์‚ฌ์šฉ - ์˜ˆ๋ฅผ ๋“ค์–ด bash์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

$์—์ฝ”$-

์ถœ๋ ฅ์— ๊ธฐํ˜ธ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ i์ด๋ฉด ์‰˜์€ ๋Œ€ํ™”ํ˜•์ž…๋‹ˆ๋‹ค.

๋กœ๊ทธ์ธ ์‰˜์—์„œ?

๋กœ๊ทธ์ธ ์‰˜์— ์žˆ๋‹ค๋ฉด bash๋Š” ํŒŒ์ผ์„ ์ฐพ์Šต๋‹ˆ๋‹ค. /etc/profile ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ ๋‹ค์Œ ์ˆœ์„œ๋กœ ์„ธ ํŒŒ์ผ ์ค‘ ํ•˜๋‚˜๋ฅผ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.

~/.bash_profile ~/.bash_login ~/.profile

ํ•˜๋‚˜๋ฅผ ์ฐพ์œผ๋ฉด ์‹œ์ž‘ํ•˜๊ณ  ๋‚˜๋จธ์ง€๋Š” ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค.

๋Œ€ํ™”ํ˜• ์‰˜์—์„œ?

๋น„๋กœ๊ทธ์ธ ์‰˜์— ์žˆ๋Š” ๊ฒฝ์šฐ ์ด๋ฏธ ๋กœ๊ทธ์ธ ์‰˜์— ์žˆ์—ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ณ  ํ™˜๊ฒฝ์ด ๊ตฌ์„ฑ๋˜์–ด ์ƒ์†๋ฉ๋‹ˆ๋‹ค.

์ด ๊ฒฝ์šฐ ๋‹ค์Œ ๋‘ ํŒŒ์ผ์ด ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

/etc/bash.bashrc ~/.bashrc

์˜ต์…˜์ด ์—†๋‚˜์š”?

๋กœ๊ทธ์ธ ์…ธ์ด๋‚˜ ๋Œ€ํ™”ํ˜• ์…ธ์— ์žˆ์ง€ ์•Š์€ ๊ฒฝ์šฐ ํ™˜๊ฒฝ์€ ์‹ค์ œ๋กœ ๋น„์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ๋งŽ์€ ํ˜ผ๋ž€์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค(ํฌ๋ก  ์ž‘์—…์— ๋Œ€ํ•ด์„œ๋Š” ์•„๋ž˜ ์ฐธ์กฐ).

์ด ๊ฒฝ์šฐ bash๋Š” ๋ณ€์ˆ˜๋ฅผ ์‚ดํŽด๋ด…๋‹ˆ๋‹ค. BASH_ENV ํ™˜๊ฒฝ์„ ์„ ํƒํ•˜๊ณ  ๊ฑฐ๊ธฐ์— ์ง€์ •๋œ ํ•ด๋‹น ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์ธ ์–ด๋ ค์›€๊ณผ ๊ฒฝํ—˜ ๋ฒ•์น™

ํฌ๋ก  ์ž‘์—…

bash ์‹œ์ž‘์„ ๋””๋ฒ„๊ทธํ•˜๋Š” ์‹œ๊ฐ„์˜ 95%๋Š” cron ์ž‘์—…์ด ์˜ˆ์ƒ๋Œ€๋กœ ์‹คํ–‰๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์ด ๋นŒ์–ด๋จน์„ ์ž„๋ฌด ๋ช…๋ น์ค„์—์„œ ์‹คํ–‰ํ•˜๋ฉด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€๋งŒ crontab์—์„œ ์‹คํ–‰ํ•˜๋ฉด ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค..

์—ฌ๊ธฐ์— ๋‘ ๊ฐ€์ง€ ์ด์œ :

  • Cron ์ž‘์—…์€ ๋Œ€ํ™”ํ˜•์ด ์•„๋‹™๋‹ˆ๋‹ค.
  • ๋ช…๋ น์ค„ ์Šคํฌ๋ฆฝํŠธ์™€ ๋‹ฌ๋ฆฌ cron ์ž‘์—…์€ ์…ธ ํ™˜๊ฒฝ์„ ์ƒ์†ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ํ™˜๊ฒฝ์€ ๋Œ€ํ™”ํ˜• ์…ธ์—์„œ ์ƒ์†๋˜๊ธฐ ๋•Œ๋ฌธ์— ์…ธ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋Œ€ํ™”ํ˜•์ด ์•„๋‹ˆ๋ผ๋Š” ์ ์„ ์ธ์‹ํ•˜๊ฑฐ๋‚˜ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋ชจ๋“  ๊ฒƒ์ด PATH ะธ alias ์˜ˆ์ƒ๋Œ€๋กœ ๊ตฌ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ํŠน์ • ์„ค์ •์„ ์„ค์ •ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. PATH ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํฌ๋ก  ์ž‘์—…์˜ ๊ฒฝ์šฐ:

* * * * * PATH=${PATH}:/path/to/my/program/folder myprogram

์„œ๋กœ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ

๋˜ ๋‹ค๋ฅธ ์ผ๋ฐ˜์ ์ธ ๋ฌธ์ œ๋Š” ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์„œ๋กœ ํ˜ธ์ถœํ•˜๋„๋ก ์‹ค์ˆ˜๋กœ ๊ตฌ์„ฑ๋œ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, /etc/profile ํ˜ธ์†Œํ•˜๋‹ค ~/.bashrc.

์ด๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ผ๋ถ€ ์˜ค๋ฅ˜๋ฅผ ์ˆ˜์ •ํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ๋Š”๋ฐ ๋ชจ๋“  ๊ฒƒ์ด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ผ ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋ถˆํ–‰ํ•˜๊ฒŒ๋„ ์ด๋Ÿฌํ•œ ๋‹ค์–‘ํ•œ ์œ ํ˜•์˜ ์„ธ์…˜์„ ๋ถ„๋ฆฌํ•ด์•ผ ํ•  ๋•Œ ์ƒˆ๋กœ์šด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ƒŒ๋“œ๋ฐ•์Šค Docker ์ด๋ฏธ์ง€

์…ธ ์‹คํ–‰์„ ์‹คํ—˜ํ•˜๊ธฐ ์œ„ํ•ด ๋ณด์•ˆ ํ™˜๊ฒฝ์—์„œ ์…ธ ์‹คํ–‰์„ ๋””๋ฒ„๊น…ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” Docker ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

์‹œ์ž‘ํ•˜๋‹ค:

$ docker run -n bs -d imiell/bash_startup
$ docker exec -ti bs bash

Dockerfile์ด ์œ„์น˜ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—.

๊ฐ•์ œ๋กœ ๋กœ๊ทธ์ธํ•˜๊ณ  ๋กœ๊ทธ์ธ ์…ธ์„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•˜๋ ค๋ฉด ๋‹ค์Œ ์•ˆ๋‚ด๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

$ bash --login

๋ณ€์ˆ˜ ์„ธํŠธ๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋ ค๋ฉด BASH_ENV:

$ env | grep BASH_ENV

๋””๋ฒ„๊น…์„ ์œ„ํ•ด crontab ๊ฐ„๋‹จํ•œ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ XNUMX๋ถ„๋งˆ๋‹ค ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค( /root/ascript):

$ crontab -l
$ cat /var/log/script.log

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€