خصم 50% جميع الخطط، لفترة محدودة. ابتداء من $2.48/mo
11 دقيقة متبقية
الخوادم ونظام التشغيل

شرح وظائف Bash: بناء الجملة والأمثلة وحالات الاستخدام

كيلي واتسون By كيلي واتسون 11 دقيقة قراءة تم التحديث في 14 ديسمبر 2025
رسم توضيحي ثلاثي الأبعاد لكتل ​​التعليمات البرمجية الزرقاء المتوهجة المجمعة في بنية معيارية، تمثل وظائف Bash

تقوم وظائف Bash بتجميع الأوامر ذات الصلة تحت اسم واحد. عند استدعاء هذا الاسم، يتم تنفيذ الكتلة بأكملها. يمكنك تمرير الوسائط لتخصيص السلوك وإرجاع القيم لتوصيل النتائج. وهذا يبقي التعليمات البرمجية الخاصة بك نظيفة وسهلة الصيانة.

يهيمن Linux على بيئات الخوادم عالميًا، لذا فإن إتقان وظائف Bash أصبح الآن أكثر أهمية من أي وقت مضى. تعمل الوظائف على تحويل البرامج النصية الفوضوية إلى أتمتة نظيفة وقابلة لإعادة الاستخدام.

يرشدك هذا الدليل عبر بناء الجملة الأساسي إلى حالات الاستخدام المتقدمة. ستتعلم كيفية الإعلان عن الوظائف، وتمرير المعلمات، والتعامل مع قيم الإرجاع، والاطلاع على عشرة أمثلة عملية يمكنك استخدامها في البرامج النصية الخاصة بك.

ليرة تركية؛ د

  • تسمى وظائف Bash كتل التعليمات البرمجية التي يمكنك إعادة استخدامها في جميع البرامج النصية الخاصة بك
  • تحديد الوظائف باستخدام function_name() { الأوامر؛ } بناء الجملة
  • تمرير الحجج باستخدام $1, $2, $3 المعلمات الموضعية
  • تعمل الوظائف على تحسين إمكانية قراءة التعليمات البرمجية والنمطية والصيانة
  • يستخدم يعود للخروج من الوظائف وإبلاغ رموز الحالة (0 = نجاح، غير صفر = فشل)
  • يمكن مشاركة الوظائف بين البرامج النصية باستخدام مصدر or تصدير -f
  • تتضمن الأمثلة العملية النسخ الاحتياطي للملفات ومراقبة القرص والتحقق من صحة الإدخال وفحص الخدمة

ما هي البرمجة النصية باش؟

رسم توضيحي ثلاثي الأبعاد للتمرير الرقمي مع كتابة كود Bash المتوهج نفسه، مما يمثل أتمتة برمجة Bash النصية.

البرمجة النصية لـ Bash هي طريقة لأتمتة المهام باستخدام Bash Shell. إنها بمثابة واجهة سطر الأوامر الافتراضية لنظام التشغيل Linux وتظل أداة قياسية على نظام التشغيل macOS. برنامج Bash النصي هو برنامج تم ترميزه بلغة البرمجة النصية Bash، ويمكن تنفيذه في محطة طرفية أو كملف نصي مستقل.

مع يتزايد استخدام Linux لسطح المكتب بشكل مطرد ونظام التشغيل الذي يهيمن على بيئات الخوادم في جميع أنحاء العالم، أصبحت مهارات البرمجة النصية Bash ذات قيمة لمحترفي تكنولوجيا المعلومات. تتكامل اللغة بشكل جيد مع أدوات DevOps مثل خطوط أنابيب Docker وKubernetes وCI/CD.

تتيح لك البرمجة النصية لـ Bash إنجاز المهام بدءًا من الأوامر البسيطة وحتى الأتمتة المعقدة وإدارة النظام. يمكنك أتمتة المهام المتكررة، وتطوير البرامج النصية للصيانة، وإنشاء خطوط أنابيب النشر، وإدارة أنظمة البرامج، ومعالجة البيانات.

ما هي وظيفة باش؟

رسم توضيحي رقمي مستقبلي يُظهر بيانات سطر الأوامر الفوضوية التي يتم تنظيمها بواسطة بوابة معالجة متوهجة، ترمز إلى كيفية عمل وظيفة Bash، مع وجود مساحة فارغة على اليسار.

يمكن تعريف وظيفة Bash على أنها مجموعة من الأوامر التي يتم تعريفها إما ضمن برنامج Bash النصي أو يتم تعيينها بشكل تفاعلي في موجه الأوامر، اعتمادًا على حالة الاستخدام. بمجرد تعريف دالة Bash، يمكن استدعاؤها عدة مرات داخل البرنامج النصي أو في برامج نصية أخرى، تمامًا مثل أمر Shell العادي.

تتيح لك وظائف Bash إنشاء كتل من التعليمات البرمجية قابلة لإعادة الاستخدام يمكنها إجراء عمليات معقدة وتنظيم التعليمات البرمجية الخاصة بك وتبسيط البرامج النصية الخاصة بك. يمكنك تمرير الوسائط إلى دالة Bash، ثم استخدامها داخل الوظيفة لتنفيذ العمليات. تقوم وظائف Bash بإرجاع القيم التي يمكنك استخدامها في أي مكان آخر في البرنامج النصي الخاص بك.

e سوف يغطي العديد من أساليب التنفيذ المحددة، بما في ذلك simple_function للمنطق الأساسي، simple_inputs للتعامل مع الوسيطة، والهياكل المتقدمة مثل fibonnaci_recursion.

وظائف باش الأساسية مهم لأي مسؤول نظام أو مهندس DevOps يعمل مع التشغيل الآلي. تتناول الأقسام التالية كل نوع من هذه الأنواع بالتفصيل.

لماذا استخدام وظائف باش؟

ترس أزرق متوهج مع رموز التحسين التي تقود آلة الكود، مما يمثل الكفاءة والسرعة المكتسبة باستخدام وظائف Bash.

الآن بعد أن تم تعريف وظائف Bash، دعونا نراجع مزاياها الرئيسية. يساعدك هذا القسم على فهم الوظائف الأكثر فائدة.

قابلية إعادة الاستخدام

قمت بإنشاء وظيفة Bash، ولديك أداة قوية. يمكنك كتابة مقطع تعليمات برمجية مرة واحدة وإعادة استخدامه عدة مرات داخل البرنامج النصي الخاص بك أو حتى في البرامج النصية الأخرى.

وهذا يجعل التعليمات البرمجية الخاصة بك أكثر كفاءة ويوفر الوقت عن طريق القضاء على الازدواجية. تصبح المحافظة على الكود الخاص بك أكثر بساطة حيث أنك تحتاج فقط إلى تغيير الوظيفة في مكان واحد.

سهولة القراءة

قد يكون من الصعب فك رموز النصوص المعقدة. تعمل وظائف Bash على حل هذه المشكلة عن طريق تقسيم البرنامج النصي إلى أجزاء أصغر وأكثر قابلية للإدارة.

تخدم كل وظيفة غرضًا محددًا باسم وصفي يوضح دورها. يساعدك هذا أنت والآخرين على فهم التعليمات البرمجية والحفاظ عليها بسهولة أكبر.

نمطية

وظائف تنظيم التعليمات البرمجية الخاصة بك. يمكنك تقسيم المنطق إلى وحدات أصغر، مما يحافظ على بنية البرنامج النصي نظيفة وسهلة الإدارة.

وإذا كنت بحاجة إلى إضافة ميزة جديدة، فيمكنك القيام بذلك دون العبث بأجزاء أخرى من البرنامج النصي الخاص بك. عندما يحين وقت إزالة الوظيفة أو تعديلها، يظل باقي البرنامج النصي سليمًا.

معلمات وظيفة باش

يمكنك تمرير الوسائط أو المعلمات إلى وظائفك. تسمح هذه الوسائط لوظائفك بالتكيف وتنفيذ إجراءات مختلفة بناءً على المدخلات التي تتلقاها.

وهذا يفتح العديد من الاحتمالات بينما يجعل وظائفك أكثر تنوعًا وقابلية للتكيف. بدلاً من كتابة تعليمات برمجية مماثلة عدة مرات، يمكنك كتابة دالة واحدة تتعامل مع مدخلات مختلفة.

كيف وأين تستخدم وظائف باش؟

مخطط انسيابي زجاجي ثلاثي الأبعاد يوضح تنفيذ البرنامج النصي المتفرع إلى كتلة دالة ثم العودة، مما يوضح كيفية استخدام وظائف Bash في التدفق المنطقي.

الآن، دعونا نتعرف قليلاً على التعريف الفني ونبدأ بمثال قصير عن كيفية إنشاء وظائف Bash. يمكن استخدام بناء الجملة التالي في البيئات المستندة إلى Unix. إذا كنت تعمل على نظام التشغيل Windows، فيمكنك ذلك تثبيت Linux Bash على نظام التشغيل Windows 10 لمتابعة جنبا إلى جنب مع هذه الأمثلة.

إنشاء وظيفة باش

ابدأ باستخدام بنية الأوامر التالية:

اسم_الوظيفة () {

    # الأوامر تذهب هنا

}

 

بمجرد إنشاء الوظيفة، يمكنك استخدامها في التعليمات البرمجية الخاصة بك في أي وقت. إليك مثال عملي:

تحية () {

    صدى "مرحبًا، 1 دولار!"

}

 

استدعاء هذه الوظيفة مع تحية العالم لإخراج "Hello, World!" ال $1 يمثل الوسيطة الأولى التي تم تمريرها إلى الوظيفة.

فيما يلي بعض الأمثلة العملية التي يمكنك استخدامها في البرامج النصية الخاصة بك:

# إنشاء نسخة احتياطية من أي ملف

ملف النسخ الاحتياطي () {

    سي بي "$1" "$1.bak"

    صدى "تم إنشاء نسخة احتياطية: $1.bak"

}

 

# تحقق من وجود الدليل، وقم بإنشائه إذا لم يكن موجودًا

ضمان_دير () {

    لو [ ! -د "$1" ]؛ ثم

        مكدير -p "$1"

        صدى "الدليل الذي تم إنشاؤه: $1"

    fi

}

 

# سجل الرسائل مع الطوابع الزمنية

رسالة السجل () {

    صدى "[$(التاريخ '+%Y-%m-%d %H:%M:%S')] $1"

}

 

يمكنك تحديد وظائف Bash المخصصة هذه مرة واحدة واستدعاءها عند الحاجة خلال البرنامج النصي الخاص بك.

أساسيات بناء الجملة الوظيفية

تعمل الوظائف مثل البرامج النصية المصغرة داخل البرنامج النصي الرئيسي الخاص بك، ولكنها تشترك في ذاكرة الصدفة. ضع هذه السلوكيات الثلاثة المحددة في الاعتبار عند كتابتها.

النطاق المتغير (المحلي مقابل العالمي)

المتغيرات داخل الوظائف عالمية بشكل افتراضي. إذا قمت بتحديد my_var = "اختبار" داخل وظيفة، فإنه يتجاوز أي موجود my_var في البرنامج النصي الخاص بك. استخدم دائما محلي حصر المتغيرات في الدالة يمنع حدوث آثار جانبية:

محلي my_var = "القيمة"

المعلمات الموضعية

وظائف قراءة الحجج باستخدام نفسه $1, $2، و $@ المتغيرات كمخطوطات. هذه تكون محلية للوظيفة ويتم إعادة تعيينها عند خروج الوظيفة. لا يمكن الوصول إلى الوسائط الأصلية للبرنامج النصي داخل الوظيفة إلا إذا قمت بتمريرها بشكل صريح.

إرجاع القيم

لا تقوم وظائف Bash بإرجاع بيانات مثل وظائف Python أو JavaScript. ال يعود يقوم الأمر فقط بتعيين حالة الخروج (0-255) للإشارة إلى النجاح أو الفشل. لإرجاع بيانات فعلية (مثل سلسلة أو عملية حسابية)، صدى النتيجة والتقاطها عند استدعاء الوظيفة:

النتيجة=$(my_function)

أفضل 10 أمثلة مفيدة لوظائف Bash

الآن بعد أن فهمت وظائف Bash وكيفية إنشائها، إليك عشرة أمثلة عملية يمكنك إضافتها إلى نصوصك البرمجية. تحل كل دالة مشكلة شائعة وتوضح البنية والوسائط وقيم الإرجاع المناسبة.

1. وظيفة النسخ الاحتياطي للملفات

إنشاء نسخة احتياطية ذات طابع زمني لأي ملف:

ملف النسخ الاحتياطي () {

    الملف المحلي=”$1″

    النسخة الاحتياطية المحلية=”${file}.$(date +%Y%m%d_%H%M%S).bak”

    

    إذا [ -f "ملف $" ]؛ ثم

        cp "ملف $" "$ نسخة احتياطية"

        صدى "تم إنشاء نسخة احتياطية: $backup"

        العودة 0

    آخر

        صدى "خطأ: الملف غير موجود"

        العودة 1

    fi

}

 

الاستخدام: Backup_file /etc/nginx/nginx.conf

2. مدقق الدليل

يتحقق من وجود الدليل ويقوم بإنشائه إذا لزم الأمر:

ضمان_دير () {

    الدليل المحلي=”$1″

    

    لو [ ! -د "$dir"]; ثم

        مكدير -p "$dir"

        صدى "تم الإنشاء: $dir"

    fi

}

 

الاستخدام: تأكد_دير /var/log/myapp

3. مسجل الطابع الزمني

يضيف الطوابع الزمنية لتسجيل الرسائل لتصحيح الأخطاء:

رسالة السجل () {

    المستوى المحلي=”$1″

    الرسالة المحلية=”$2″

    صدى "[$(التاريخ '+%Y-%m-%d %H:%M:%S')] [$level] $message"

}

 

الاستخدام: log_message "INFO" "بدأ البرنامج النصي"

4. مراقب مساحة القرص

يتحقق من استخدام القرص ويحذر إذا تجاوز الحد الأدنى:

check_disk_space () {

    العتبة المحلية =”${1:-80}”

    الاستخدام المحلي=$(df / | tail -1 | awk '{print $5}' | tr -d '%')

    

    إذا [ "$usage" -gt "$threshold"]؛ ثم

        صدى "تحذير: استخدام القرص عند ${usage}%"

        العودة 1

    fi

    العودة 0

}

 

الاستخدام: check_disk_space 90

5. مدقق الإدخال

التحقق من أن إدخال المستخدم ليس فارغًا:

Validate_input () {

    الإدخال المحلي=”$1″

    الاسم المحلي=”$2″

    

    إذا [ -z "$الإدخال" ]؛ ثم

        صدى "خطأ: لا يمكن أن يكون $name فارغًا"

        العودة 1

    fi

    العودة 0

}

 

الاستخدام: validate_input "اسم المستخدم$" "اسم المستخدم"

6. مدقق حالة الخدمة

يتحقق مما إذا كانت الخدمة قيد التشغيل ويبلغ عن الحالة:

خدمة التحقق () {

    الخدمة المحلية=”$1″

    

    إذا كان systemctl نشطًا - "خدمة $" هادئة؛ ثم

        صدى "خدمة $ قيد التشغيل"

        العودة 0

    آخر

        صدى "خدمة $ ليست قيد التشغيل"

        العودة 1

    fi

}

 

الاستخدام: check_service nginx

7. مستخرج امتداد الملف

استخراج الامتداد من اسم الملف:

الحصول على ملحق () {

    اسم الملف المحلي=”$1″

    صدى "${filename##*.}"

}

 

الاستخدام: تحويلة=$(get_extension “document.pdf”)

8. سلسلة المتقلب

إزالة المسافات البيضاء البادئة والزائدة من السلاسل:

تقليم_سلسلة () {

    شارع محلي=”$1″

    str=”${str#”${str%%[![:space:]]*}”}”

    str=”${str%”${str##*[![:space:]]}”}”

    صدى "$str"

}

 

الاستخدام: clean=$(trim_string ”مرحبا بالعالم“)

9. أرشيف الملفات الآمن

ينقل ملفًا إلى دليل $HOME/.trash المخصص بدلاً من حذفه نهائيًا. يقوم بإلحاق طابع زمني لاسم الملف لمنع الكتابة فوق النسخ الاحتياطية السابقة.

آمنة_إزالة () {

    الملف المحلي=”$1″

    سلة المهملات المحلية=”$HOME/.trash”

    # إلحاق الطابع الزمني لتجنب الكتابة فوق الملفات الموجودة

    new_name المحلي = "$(الاسم الأساسي "$file")_$(التاريخ +%s)"

    

    مكدير -p "$ المهملات"

 

    إذا [ -e "ملف $" ]؛ ثم

        mv "$file" "$trash/$new_name"

        صدى "تم النقل إلى الأرشيف: $file -> $trash/$new_name"

    آخر

        صدى "خطأ: لم يتم العثور على ملف $"

        العودة 1

    fi

}

 

الاستخدام: Safe_remove old_script.sh

 

10. مراسل الحالة

يوضح آلية إرجاع وظيفة Bash لمعالجة الأخطاء. تشير قيمة إرجاع الدالة Bash إلى النجاح (0) أو الفشل (غير الصفر):

بيانات_العملية () {

    الملف المحلي=”$1″

    

    لو [ ! -f "ملف $" ]; ثم

        العودة 1

    fi

    

    # معالجة الملف

    القط "ملف $" | مرحاض -ل

    العودة 0

}

 

# التحقق من قيمة الإرجاع

بيانات_العملية "data.txt"

إذا [$؟ -مكافئ 0 ]; ثم

    صدى "اكتملت المعالجة"

آخر

    صدى "فشلت المعالجة"

fi

 

ال $? يلتقط المتغير حالة الخروج من آخر أمر أو استدعاء دالة.

وظيفة غاية الميزة الرئيسية
ملف النسخ الاحتياطي إنشاء نسخ احتياطية للملفات تسمية الطابع الزمني
تأكد_دير إدارة الدليل يخلق إذا كان في عداد المفقودين
log_message التسجيل بادئة الطابع الزمني
check_disk_space مراقبة النظام تنبيهات عتبة
validate_input التحقق من صحة الإدخال فحص سلسلة فارغة
check_service مراقبة الخدمة تكامل النظام
get_extension تحليل السلسلة توسيع المعلمة
Trim_string تنظيف السلسلة إزالة المسافة البيضاء
Safe_remove الحذف الآمن دليل سلة المهملات
Process_data معالجة الأخطاء إرجاع القيم

تشغيل وظائف Bash على VPS

تصبح وظائف Bash قوية عند تشغيلها على بيئة خادم مخصصة. ملكنا لينكس فس يمنحك الوصول الكامل إلى الجذر لتخصيص بيئة الصدفة الخاصة بك، وإنشاء مكتبات وظائف على مستوى النظام، وأتمتة مهام إدارة الخادم دون قيود.

باستخدام VPS، يمكنك تخزين الوظائف القابلة لإعادة الاستخدام فيه /etc/profile.d/ لجميع المستخدمين، قم بجدولة البرامج النصية المستندة إلى الوظائف عبر وظائف cron، وقم ببناء مسارات التشغيل الآلي للنشر والصيانة. نحن نقدم خوادم في 12 موقعًا عالميًا بسرعات شبكة تصل إلى 40 جيجابت في الثانية وذاكرة DDR5، مما يعني تنفيذ أسرع للنصوص البرمجية ومعالجة أكثر سلاسة للبيانات.

هذا المستوى من التحكم يجعل VPS مثاليًا لأي شخص جاد في البرمجة النصية وأتمتة النظام.

خاتمة

تعد وظائف Bash أساسية لإنشاء نصوص برمجية معيارية وقابلة لإعادة الاستخدام. إنها تسمح لك بتجميع الأوامر ذات الصلة معًا وتغليف المنطق المعقد لتسهيل قراءة التعليمات البرمجية الخاصة بك وصيانتها. إذا كنت تدير البنية التحتية السحابية، أو تقوم بأتمتة مسارات النشر، أو تتعامل مع مهام إدارة النظام الروتينية، فإن الوظائف تساعد في الحفاظ على البرامج النصية الخاصة بك منظمة وفعالة.

في هذه المقالة، قمنا بتغطية أساسيات وظائف Bash، بما في ذلك كيفية تعريفها واستدعائها، وعشرة أمثلة عملية للوظائف، وحالات الاستخدام الشائعة لمساعدتك على البدء في مشاريع الأتمتة الخاصة بك.

جنبا إلى جنب مع هياكل التحكم مثل باش لو بيانتمنحك الوظائف العناصر الأساسية للتشغيل الآلي القوي. باستخدام وظائف Bash في البرامج النصية الخاصة بك، يمكنك كتابة تعليمات برمجية أكثر وضوحًا وأكثر معيارية يسهل فهمها وصيانتها.

التعليمات

هل يمكن أن تحتوي وظائف Bash على متغيرات محلية؟

نعم. يمكن أن تحتوي وظائف Bash على متغيرات محلية باستخدام الكلمة الأساسية المحلية. يؤدي هذا إلى تقييد نطاق المتغير بالوظيفة، مما يمنعه من التأثير على المتغيرات التي لها نفس الاسم خارج الوظيفة.

هل يمكن أن تكون وظائف Bash متكررة؟

نعم، يمكن أن تكون وظائف Bash متكررة. يحتوي Bash على حجم مكدس استدعاءات افتراضي صغير نسبيًا، لذا اعتمادًا على الوظائف العودية التي تفكر فيها، قد تحتاج إلى زيادته باستخدام الأمر ulimit -s قبل التنفيذ.

هل يمكنني استخدام وظائف Bash في البرامج النصية الأخرى؟

نعم، يمكنك مشاركة وظائف Bash بين البرامج النصية باستخدام الأمر المصدر (أو اختصاره .). من خلال تحديد مصدر ملف يحتوي على تعريفات الوظائف الخاصة بك، فإنك تجعل هذه الوظائف متاحة في البرنامج النصي للاستدعاء. بالنسبة للعمليات الفرعية، استخدم Export -f function_name لتسهيل الوصول إلى الوظيفة.

هل يمكنني استخدام وظائف Bash في خطوط الأنابيب؟

نعم، ولكنه يتطلب خطوات محددة للأوامر الخارجية. داخل البرنامج النصي، يمكنك توجيه البيانات مباشرة إلى وظيفة (على سبيل المثال، ملف cat | my_function). ومع ذلك، يتم تشغيل أوامر مثل xargs أو find -exec في بيئة جديدة. لاستخدام دالة هناك، يجب عليك تصديرها (export -f my_func) ثم استدعاء Bash بشكل صريح (على سبيل المثال، xargs bash -c 'my_func “$@”‘).

ما هي وظيفة البرنامج النصي شل؟

وظيفة البرنامج النصي لـ Shell عبارة عن كتلة محددة من التعليمات البرمجية داخل برنامج Shell النصي الذي يخدم غرضًا محددًا ويمكن استدعاؤه من أجزاء مختلفة من البرنامج النصي. توفر الوظائف قيمة كبيرة من حيث نمطية التعليمات البرمجية، وإمكانية إعادة الاستخدام بشكل أفضل، وسهولة الصيانة. في سياق البرمجة النصية لـ Bash، يتم تغليف الوظائف داخل البرنامج النصي الشامل.

يشارك

المزيد من المدونة

استمر في القراءة.

أفضل التطبيقات ذاتية الاستضافة التي يمكنك تشغيلها باستخدام صورة غلاف Cosmos Cloud مع لوحات التطبيقات حول لوحة معلومات Cosmos.
الخوادم ونظام التشغيل

أفضل التطبيقات ذاتية الاستضافة التي يمكنك تشغيلها باستخدام Cosmos Cloud: الملفات والوسائط وكلمات المرور والأتمتة والمزيد!

ربما قمت بإعداد Cosmos Cloud وتريد الآن معرفة التطبيقات التي تتوافق بشكل جيد معها، أو ربما لم تقرر استخدام Cosmos بعد وتريد فقط معرفة مدى ملاءمتها لأسلوب عملك

نيك سيلفرنيك سيلفر 16 دقيقة قراءة
غطاء Portainer vs Cosmos Cloud لإدارة تطبيقات Docker مع مخطط إعداد مختلط وعمليات نيون مقابل كتل الوصول.
الخوادم ونظام التشغيل

Portainer vs Cosmos Cloud: الأفضل لإدارة تطبيقات Docker

إذا كنت تعرف Docker بالفعل وتريد فقط الطريقة الأنظف لتشغيل حزمة تطبيقات متنامية، فإليك الإجابة المختصرة على Portainer vs Cosmos Cloud. Portainer هو الاختيار الأقوى لـ direc

نيك سيلفرنيك سيلفر 14 دقيقة قراءة
يتميز رسم Cosmos Cloud vs CasaOS vs Umbrel بثلاثة مسارات مستضافة ذاتيًا داخل عالم شبكة سحابية مجردة.
الخوادم ونظام التشغيل

Cosmos Cloud vs CasaOS vs Umbrel: ما هي المنصة ذاتية الاستضافة التي تناسب إعدادك؟

الإجابة المختصرة هي أن نظام CasaOS لا يزال هو أسهل مكان للبدء، بينما يتمتع Umbrel بأنظف إحساس منظم، ويصبح Cosmos Cloud أكثر منطقية عندما تريد تحكمًا أكثر إحكامًا في doma

نيك سيلفرنيك سيلفر 11 دقيقة قراءة

هل أنت مستعد للنشر؟ من 2.48 دولارًا شهريًا.

سحابة مستقلة، منذ عام 2008. AMD EPYC، NVMe، 40 جيجابت في الثانية. استرداد الأموال خلال 14 يومًا.