π§π»π₯ μλ²½ κ°μ΄λ: 리λ μ€ μλ² μλν μ€ν¬λ¦½νΈ μμ±λ² μ΄μ 리 π
π οΈ λ€μ΄κ°λ©°: μ μλ² μλνκ° μ€μνκ°? π€β¨
νΉμ μ¬λ¬λΆλ μλ² κ΄λ¦¬κ° μΌμΌμ΄ λ°λ³΅λκ³ , μλ μμ μ μ§μΉλ κ²½νμ νμ ¨λμ? π₯±π μ€λμ κ·Έλ° κ³ λ―Όμ λ§λν ν΄κ²°ν΄ μ€ ‘리λ μ€ μλ² μλν μ€ν¬λ¦½νΈ’ μμ±λ²μ π― μ λ¬Έκ° μμ€μΌλ‘ μ λ¦¬ν΄ λ립λλ€! π―
μ΄ κΈμ μ½κ³ λλ©΄ π§ μΉλ°ν μ€κ³λΆν° μ€μ λ°°ν¬κΉμ§, λͺ¨λ λ¨κ³μμ μμ κ°μ΄ μ°¨μ€λ₯Ό κ±°μμ. λꡬλ λ°λΌ ν μ μκ³ , μ€λ¬΄μ λ°λ‘ μ μ© κ°λ₯νλ λκΉμ§ μ§μ€! π¨
π 1. 리λ μ€ μλ² μλνλ? π
- β λ°λ³΅λλ μμ μ μ€ν¬λ¦½νΈλ‘ λ§λ€μ΄ π μλμΌλ‘ μ²λ¦¬νλ κ²
- β λ°°ν¬, λ°±μ , μ λ°μ΄νΈ, λͺ¨λν°λ§ λ± λ€μν λΆμΌμ νμ©
- β 무μλ³΄λ€ μκ°κ³Ό μΈλ ₯μ μ μ½νκ³ π€ ν¨μ¨μ±μ κ·Ήλν
π μ°Έκ³ : μ(Shell) μ€ν¬λ¦½νΈ, Python, Ansible, Chef λ± μ¬λ¬ λκ΅¬κ° μ¬μ©λ©λλ€!
π 2. μλν μ€ν¬λ¦½νΈ μμ± μ μ€λΉλ¨κ³ β
μ‘°κΈλ§ μ κ²½ μ°λ©΄ μ€ν¬λ¦½νΈκ° ν¨μ¬ κ²¬κ³ ν΄μ§κ³ μ μ§λ³΄μλ μ¬μμ§λλ€. μλ ν¬μΈνΈ μ΄ν΄λ³΄μΈμ!
1οΈβ£ λͺ©ν λͺ νν μΈμ°κΈ°
- πΉ “μ΄ μλ²μμ μ΄λ€ μμ μ μλνν κ²μΈκ°?”
- πΉ ꡬ체μ μΈ μμ λͺ©λ‘ μμ± + μ°μ μμ μ νκΈ°
2οΈβ£ νκ²½ μΈν νκΈ° π₯οΈ
- πΈ μλ² μ μ κΆν ν보 π (SSH ν€ μΈμ¦ κΆμ₯)
- πΈ νμν λꡬ μ€μΉ (vim, nano, git, ν λ±)
3οΈβ£ μΈμ΄ λ° λꡬ κ²°μ νκΈ° βοΈ
- π κ°μ₯ νν μ ν: Bash Shell Script (μ νΈλ¦¬ν°, κ°λ¨ μμ )
- π» 볡μ‘ν μμ μ Python μΆμ²! (μλν, ν¬λ‘€λ§, API νΈμΆ)
π 3. ν΅μ¬ μλν μ€ν¬λ¦½νΈ μμ± κ°μ΄λ π₯
κ·ΈλΌ, μ€μ μ½λ©μ λμ ! λ¨κ³λ³λ‘ μμ λ 체ν¬λ¦¬μ€νΈμ νμ 곡κ°ν©λλ€.
1οΈβ£ κΈ°λ³Έ ꡬ쑰 μ‘κΈ°: μ Έ μ€ν¬λ¦½νΈ μμ π
bash
#!/bin/bash
μλ² λ°±μ μλν μ€ν¬λ¦½νΈ
echo "π λ°±μ
μμ: $(date)"
backup_dir="/backup/$(date +%Y%m%d)"
mkdir -p $backup_dir
λ°μ΄ν° λ°±μ
tar -czf $backup_dir/data_backup.tar.gz /var/www/html
echo "β
λ°μ΄ν° λ°±μ
μλ£"
λ°±μ νμΌ μ λ‘λ λλ μμ μ μ±
[ꡬ체μ μΈ λ΄μ© μΆκ°]
echo "π λ°±μ μλ£: $(date)"
πΈTIP: #!/bin/bash
λ μ€ν¬λ¦½νΈμ μμ(μ¬μ΄ μ μ§λ³΄μμ ν΅μ¬!)
2οΈβ£ μμ λ³ μ²΄ν¬λ¦¬μ€νΈ π οΈ
- β μλ² μ λ°μ΄νΈ μλν
bash
apt-get update && apt-get upgrade -y
- β μλΉμ€ μ¬μμ
bash
systemctl restart nginx
- β λ‘κ·Έ λͺ¨λν°λ§ & μλ¦Ό
bash
tail -n 50 /var/log/nginx/error.log
νμμ μ¬λ λλ μ΄λ©μΌ μ°λ
πΉTIP: cron μ‘μ νμ©νλ©΄ μΌμ μ£ΌκΈ°λ§λ€ μλ μ€ν κ°λ₯! β±οΈ
3οΈβ£ 볡μ‘ν μλν: Python νμ©νκΈ° π
- πΉ ν¨ν€μ§ μ€μΉ
bash
pip install requests paramiko
- πΉ SSH μ°κ²° λ° λͺ λ Ή μ€ν μμ
python
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname='μλ²IP', username='μ¬μ©μλͺ
', password='λΉλ°λ²νΈ')
stdin, stdout, stderr = ssh.exec_command('systemctl restart nginx')
print(stdout.read().decode())
ssh.close()
β ν: νμ΄μ¬μΌλ‘ API μ°λ, λ°μ΄ν° μ²λ¦¬, 컀μ€ν μλ¦ΌκΉμ§ κ°λ₯!
π’ 4. μ€ν¬λ¦½νΈ λ°°ν¬ & μλ μ€ν ν π¦
1οΈβ£ λ°°ν¬ λ°©λ²
- β gitμΌλ‘ λ²μ κ΄λ¦¬ ν λ°°ν¬
- β scp λλ rsyncλ‘ νμΌ μ μ‘ ν μ€ν
2οΈβ£ μλ μ€ν λ°©λ²
- β cron νμ©νκΈ°
bash
crontab -e
λ§€μΌ μλ²½ 2μ λ°±μ
0 2 * * * /path/to/backup.sh
- β μμ€ν ν μ€ν¬ μμ½ & μλ¦Ό μ°λ (μ: μ¬λ, λ¬Έμ)
β οΈ 5. μ μ© ν & μ£Όμμ¬ν π§
- π μ€ν¬λ¦½νΈ μ€λ₯ λλΉ:
set -e
λλset -o errexit
λ‘ μμΈ μ²λ¦¬ β - π κΆν κ΄λ¦¬ μ격ν: root κΆνμ΄ νμ μλ μμ μ μ΅μ κΆν μμΉ π‘οΈ
- π λ°±μ , λ‘κ·Έ κΈ°λ‘μ λ°λμ μμΈν! κΈ°λ‘μΌλ‘ λ¬Έμ cases λΉ λ₯΄κ² μΆμ
- π ν μ€νΈ λ¨Όμ , λ¨κ³λ³ μ§ν! πͺ
π§Ύ 6. μ€μ μ¬λ‘: μλ² μλν νλ‘μ νΈ νμ© μ λ΅ π‘
- πΌ κ°μΈ νλ‘μ νΈ: μλ² λ°°ν¬, μ λ°μ΄νΈ, λͺ¨λν°λ§ λͺ¨λ μλν
- π’ κΈ°μ νκ²½: μλ² ν΄λ¬μ€ν° μ μ§λ³΄μ, λ°°ν¬ μλν, μ₯μ 볡ꡬ
- π― λͺ©ν: λ§€λ΄μΌ μλ κΉλν μλ² μ΄μ μ²΄κ³ λ§λ€κΈ°!
β κ²°λ‘ : μ€λλΆν° μμνλ μλ² μλν β
- λͺ©ν λͺ νν μΈμ°κΈ° π
- νκ²½ μΈν κΌΌκΌΌν π§
- κ°λ¨ν μ€ν¬λ¦½νΈλΆν° μ°¨κ·Όμ°¨κ·Ό λ§λ€κΈ° π§
- μ£ΌκΈ°μ ν μ€νΈ & κ°μ λ°λ³΅ π
- μλ§μ λꡬμ νλ μμν¬ νμ©νκΈ° βοΈ
μ΄μ μ¬λ¬λΆλ 리λ μ€ μλ² μλνμ λ¬μΈ! ππ₯
π μ°Έκ³ μλ£ λ° μΆμ² λμ π
- "Linux Shell Scripting Cookbook" - μ€λ¬΄μ λ°λ‘ μ μ©ν μ μλ μ Έ μ€ν¬λ¦½νΈ λͺ¨μ π
- "Automate the Boring Stuff with Python" - νμ΄μ¬ μλν μ λ¬Έμ π
- 곡μ λ¬Έμ: 리λ μ€ λ§€λ΄μΌ
β¨ λ§λ¬΄λ¦¬νλ©°: κ³μ νμ΅νκ³ λ°μ νμΈμ! ππ₯
μ¬λ¬λΆμ μλ² κ΄λ¦¬κ° λ μ΄μ μλμ λ Έκ°λ€κ° μλκ² λ κ·Έλ κΉμ§! μΈμ λ μ€μ΅κ³Ό λμ μ λ©μΆμ§ λ§μΈμ! π€πͺ
βΆ λ! μ΄μ λ°λ‘ μ€μ μμ μ¨λ³΄μΈμ! λ§μ½ μ§λ¬Έμ΄ μκΈ°λ©΄ λκΈλ‘ λ¨κ²¨ μ£ΌμΈμ! ππ€
μ΄μ κΈ λ³΄κΈ°!!
macOS μ΅μ νλ κ°μμλμ° μ€μΉλΆν° 보μκΉμ§ μλ²½ κ°μ΄λ
π§³ μ¬ν (κ΅λ΄/ν΄μΈ)μ΄μ κΈ λ³΄κΈ°!!
5.asmrbita.com