Bash for Oracle DBAs Part 1: Bash Basics and Oracle DBA Environment

Bash برای Oracle DBAها — بخش ۱: مبانی Bash و محیط Oracle

در این مقاله، با پایه‌ای‌ترین مفاهیم Bash آشنا می‌شویم؛ مفاهیمی که هم برای یک Oracle DBA ضروری‌اند و هم برای خواندن و درک اسکریپت‌های Audit و Remediation در پروژه‌های Hardening لازم هستند. هدف این بخش این است که خواننده بتواند ساختار یک اسکریپت Bash را بشناسد، محیط Oracle را درست تنظیم کند و متغیرهای مهمی مثل ORACLE_SID، ORACLE_HOME و PATH را به‌درستی در اسکریپت‌ها به‌کار ببرد.

۱) Bash چیست و چرا مهم است؟

Bash یکی از رایج‌ترین shellها در لینوکس است و بخش بزرگی از اسکریپت‌های عملیاتی Oracle روی آن نوشته می‌شود. DBAها از Bash برای کارهایی مثل بررسی وضعیت سرویس‌ها، اجرای ابزارهای Oracle، بکاپ‌گیری از فایل‌های تنظیمات، اعتبارسنجی تنظیمات، و خودکارسازی مراحل Hardening استفاده می‌کنند.

اگر اسکریپت‌های امنیتی و عملیاتی را نگاه کنید، معمولاً با همین ساختار شروع می‌شوند:

#!/bin/bash

این خط را shebang می‌نامند و به سیستم می‌گوید که این فایل باید با Bash اجرا شود.

۲) اجرای اسکریپت در لینوکس

یک اسکریپت Bash معمولاً به یکی از این دو روش اجرا می‌شود:

bash script.sh
./script.sh

روش دوم نیاز دارد فایل permission اجرایی داشته باشد:

chmod +x script.sh

برای Oracle DBAها، درک این موضوع مهم است چون بسیاری از اسکریپت‌های operational و hardening باید با permission مناسب و معمولاً با root اجرا شوند.

۳) کامنت‌گذاری در Bash

هر چیزی بعد از # تا انتهای همان خط، کامنت است. کامنت‌ها برای توضیح منطق اسکریپت، ثبت دلیل یک تصمیم، و نگهداری بهتر کد بسیار مفید هستند.

# Check Oracle environment
# Validate configuration file
# Remediate insecure SSH settings

۴) متغیرها در Bash

متغیرها برای نگهداری مقدارها استفاده می‌شوند. در اسکریپت‌های Oracle معمولاً از آن‌ها برای مسیرها، نام سرویس‌ها، فایل‌ها و پیام‌های لاگ استفاده می‌شود.

ORACLE_SID=ORCL
ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
LOG_FILE=/var/log/oracle_hardening.log

اگر مقدار متغیر فاصله داشته باشد، باید آن را داخل کوتیشن قرار دهید:

BACKUP_DIR="/u01/backups/oracle hardening"

در Bash، فاصله‌گذاری نادرست یکی از رایج‌ترین علت‌های خطاست.

۵) Export کردن Environment Variables

بعضی متغیرها باید به subprocessها هم منتقل شوند. برای این کار از export استفاده می‌کنیم. این موضوع در Oracle بسیار مهم است، چون ابزارهایی مثل sqlplus، rman، یا scriptهای کمکی ممکن است به محیط جاری وابسته باشند.

export ORACLE_SID
export ORACLE_HOME
export PATH="$ORACLE_HOME/bin:$PATH"

در اسکریپت‌های DBA، معمولاً مسیر bin اوراکل باید در ابتدای PATH قرار بگیرد تا نسخه درست ابزارها اجرا شود.

۶) متغیرهای مهم Oracle

سه متغیر بسیار رایج در محیط Oracle عبارت‌اند از:

  • ORACLE_SID: نام instance دیتابیس
  • ORACLE_HOME: مسیر نصب نرم‌افزار Oracle
  • PATH: مسیر جست‌وجوی commandها

نمونه:

export ORACLE_SID=ORCL
export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
export PATH="$ORACLE_HOME/bin:$PATH"

۷) Command Substitution

با $(...) می‌توان خروجی یک command را داخل متغیر ذخیره کرد. این قابلیت در اسکریپت‌های audit بسیار رایج است.

CURRENT_HOST=$(hostname)
CURRENT_DATE=$(date +%F)

در remediationها هم ممکن است خروجی دستورهایی مثل update-crypto-policies --show در متغیر ذخیره شود.

۸) Quoting یا کوتیشن‌گذاری

یکی از مهم‌ترین قواعد Bash این است که همیشه متغیرها را در کوتیشن استفاده کنیم مگر اینکه عمداً بخواهیم word splitting انجام شود.

echo "$ORACLE_HOME"
cd "$BACKUP_DIR"

نمونه اشتباه:

cd $BACKUP_DIR

اگر مسیر فاصله داشته باشد، این دستور می‌شکند.

۹) یک نمونه اسکریپت ساده برای DBA

مثال زیر یک الگوی ساده برای آشنایی با مبانی Bash است:

#!/bin/bash

ORACLE_SID="ORCL"
ORACLE_HOME="/u01/app/oracle/product/19.0.0/dbhome_1"
export ORACLE_SID ORACLE_HOME
export PATH="$ORACLE_HOME/bin:$PATH"

echo "Oracle SID: $ORACLE_SID"
echo "Oracle Home: $ORACLE_HOME"
echo "Current user: $(whoami)"

۱۰) جمع‌بندی

در این مقاله با پایه‌های Bash و محیط Oracle آشنا شدیم. اگر این مفاهیم را خوب یاد بگیرید، درک مقاله‌های بعدی که درباره شرط‌ها، فایل‌ها، خطاها، پردازش متن، سرویس‌ها و اسکریپت‌های Hardening هستند بسیار ساده‌تر خواهد شد.

در مقاله بعدی، وارد شرط‌ها و مقایسه‌ها می‌شویم؛ جایی که منطق تصمیم‌گیری در Bash شروع می‌شود.


مقاله بعدی: Bash برای Oracle DBAها — بخش ۲: شرط‌ها و مقایسه‌ها در Bash