كيفية النشر عن بعد بكفاءة؟ قماش للتحرك

القط تحت زهرة البازلاء

رئيس التحرير | Guo Rui

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

يستخدم النسيج بشكل أساسي لأتمتة المهام مثل نشر التطبيقات وإدارة النظام ، فهو بسيط وخفيف الوزن ويوفر واجهة SSH ملحق غنية. في إصدار Fabric 1.x ، يمزج بين الوظائف المحلية والبعيدة ؛ ولكن منذ إصدار Fabric 2.x ، فإنه يفصل مكتبة Invoke المستقلة للتعامل مع مهام الأتمتة المحلية ، بينما يركز Fabric على أجهزة التحكم عن بعد و المهام على مستوى الشبكة.

للقيام بذلك ، يعتمد Fabric بشكل أساسي على مكون أساسي آخر Paramiko ، وهو عبارة عن وحدة تحكم عن بُعد تعتمد على بروتوكول SSH. ويغلف Fabric واجهة أكثر سهولة على أساسه ، والتي يمكنها تنفيذ أوامر Shell ونقل الملفات والعمليات الدفعية عن بُعد الخادم ، مصادقة الهوية ، عوامل التكوين والإعداد المختلفة ، إلخ.

تمييز نسخة النسيج

تم الإعلان عن إصدار Python 2 رسميًا على أنه "متقاعد" في يوم رأس السنة الجديدة هذا العام ، ولن يكون المستقبل سوى المسرح لـ Python 3. من أجل التكيف مع الترحيل غير المتوافق لإصدار Python ، يجب على العديد من المشاريع أيضًا إطلاق إصدارات جديدة خاصة بها (متوافقة أو تدعم Python 3 فقط) ، بما في ذلك النسيج الأساسي لهذا المقال.

هناك نسختان رئيسيتان من Fabric نفسها: Fabric 1 و Fabric 2 ، وعلى أساس هذه المكتبة ، هناك مكتبتان متصلتان يمكن الخلط بينهما بسهولة: Fabric2 و Fabric3 (لاحظ أن الأرقام هنا جزء من اسم المكتبة).

التمييز على النحو التالي:

  • النسيج 1.x: Python 2.5-2.7 مدعوم ، ولكن Python 3 غير مدعوم

  • Fabric 2.x: دعم Python 2.7 و 3.4+ ، ولكنه غير متوافق مع fabfile 1.x Fabric

  • Fabric2: ما يعادل Fabric 2.x ، من أجل جعل الإصدارات المختلفة تتعايش (تثبيت إصدار قديم من 1.x ، ثم تثبيته كإصدار جديد)

  • Fabric3: شوكة (غير رسمية) تستند إلى النسيج 1.x ومتوافقة مع Python 2 و 3 ومتوافقة مع Fabric1.x fabfile

باختصار ، نوصي باستخدام الإصدار الرسمي من سلسلة Fabric 2.x ، ولكن لاحظ أيضًا أن بعض البرامج التعليمية القديمة قد تستند إلى إصدارات سابقة (أو Fabric3 غير رسمية ، والتي تستند أيضًا إلى Fabric 1.x) ، وتحتاج إلى الانتباه إلى التعريف .

على سبيل المثال ، في سلسلة النسيج 1.x ، تتم كتابة الاستيراد على النحو التالي: من تشغيل استيراد fabric.api ؛ في الإصدار الجديد ، سيتم الإبلاغ عن خطأ: "ImportError: لا وحدة باسم api" (ملاحظة: يمكن استخدام إصدار النسيج لتحديد إصدار النسيج ، كما هو الحال في Python للحكم على النسخة وفقًا لبيان الطباعة أو وظيفة الطباعة). في الوقت نفسه ، نظرًا لأن الإصدار الجديد لا يدعم الإصدار القديم من ملف fabfile ، فقد تحصل على خطأ عند استخدامه: "لا توجد فكرة عن" xxx "!"

Fabric 2 هو إصدار غير متوافق. مقارنة بالإصدار السابق ، التحسينات الرئيسية هي:

  • دعم Python 2.7 و 3.4+

  • سلامة الخيوط ، والقضاء على التنفيذ المتزامن لعمليات متعددة

  • إعادة تنظيم API حول fabric.connection.Connection

  • تمت مراجعة المحلل اللغوي لسطر الأوامر بالكامل للسماح باستخدام إشارات وخيارات نمط GNU / POSIX العادية على أساس كل مهمة (لم تعد هناك حاجة إلى مهمة fab mytask: weird = custom، arg = format)

  • يمكن أن يعلن سلف و posttask

  • ...... (القائمة الرسمية لأكثر من 10 ، هذه المقالة لا تسردها واحدة تلو الأخرى)

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

الاستخدام الأساسي للنسيج

1. التثبيت

الأول هو التثبيت: النسيج الداخلي. بعد التثبيت ، يمكنك عرض معلومات الإصدار في نافذة سطر الأوامر: > > >  القوات المسلحة البوروندية -V قماش 2.5.0 باراميكو 2.7.1 استدعاء 1.4.0

تنفيذ "fab -V" ، يمكن رؤية النتائج المذكورة أعلاه أنني قمت بتثبيت إصدار Fabric 2.5.0 ، ويمكن رؤية معلومات الإصدار من المكتبتين المعتمدين الأساسيتين Paramiko و Invoke.

2. مثال بسيط

يستخدم النسيج بشكل أساسي للمهام البعيدة ، أي العمليات على الخوادم البعيدة ، فيما يلي مثال بسيط:

# يمكن استخدام أي اسم ملف من اتصال استيراد النسيج host_ip = '47 .xx.xx.xx '# عنوان الخادم user_name = 'root' # server username password = '****' # كلمة مرور الخادم cmd = 'date' # shell أمر للاستعلام عن الوقت على الخادم con = اتصال (host_ip ، user_name ، connect_kwargs = {'password': password}) النتيجة = con.run (cmd، hide = True) طباعة (نتيجة)

الرمز أعلاه ، قم بتسجيل الدخول إلى الخادم البعيد من خلال الحساب + كلمة المرور ، ثم قم بتنفيذ أمر التاريخ لعرض وقت الخادم ونتائج التنفيذ:

تم إنهاء الأمر بالحالة 0. === stdout === الجمعة 14 فبراير 15:33:05 CST 2020 (لا stderr)

في النتيجة المطبوعة ، إلى جانب وقت الخادم ، هناك بعض المعلومات الدخيلة. وذلك لأن "النتيجة" التي تطبعها هي فئة "fabric.runners.Result" ، ويمكننا تحليل المعلومات الموجودة فيها:

طباعة (result.stdout) # الجمعة 14 فبراير 15:33:05 CST 2020 اطبع (result.exited) # 0 اطبع (result.ok) # صحيح طباعة (فشل النتيجة) # خطأ print (result.command) # تاريخ اطبع (result.connection.host) # 47.xx.xx.xx

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

بالإضافة إلى ذلك ، هناك طرق الحصول على ، وطرق أخرى ، انظر أدناه للحصول على التفاصيل.

3. استخدام سطر الأوامر

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

بالإضافة إلى ذلك ، Fabric هي أداة سطر أوامر يمكنها أداء المهام من خلال الأمر fab. دعونا نقوم بتعديل كود المثال أعلاه بشكل طفيف:

# اسم الملف: fabfile.py من اتصال استيراد النسيج من مهمة استيراد النسيج host_ip = '47 .xx.xx.xx '# عنوان الخادم user_name = 'root' # server username password = '****' # كلمة مرور الخادم cmd = 'date' # shell أمر للاستعلام عن الوقت على الخادم @مهمة اختبار def (ج): "" " احصل على موعد من مضيف بعيد. "" " con = اتصال (host_ip ، user_name ، connect_kwargs = {'password': password}) النتيجة = con.run (cmd، hide = True) print (result.stdout) # وقت الطباعة فقط

للتوضيح ، التغييرات الرئيسية هي:

  • fabfile.py file name: يجب أن يستخدم اسم البرنامج النصي لرمز الإدخال هذا الاسم

  • task decorator: يحتاج هذا الديكور إلى إدخاله من القماش. إنه غلاف لمُستدعيtask decorator. الاستخدام الفعلي هو نفسه الذي يُستدعى (ملاحظة: يجب أيضًا أن يكون له معلمة السياق "c" ، ولكنه في الواقع لا يحتوي على مستخدمة في مقطع التعليمات البرمجية ، ولكن تم استخدام مثيل لفئة الاتصال)

بعد ذلك ، في نافذة سطر الأوامر لنفس الدليل من البرنامج النصي ، يمكنك عرض وتنفيذ المهام المقابلة:

> > >  القوات المسلحة البوروندية-ل المهام المتاحة: اختبار الحصول على التاريخ من المضيف البعيد. > > >  اختبار القوات المسلحة البوروندية الجمعة 14 فبراير 16:10:24 CST 2020

fab هو تطبيق موسع لـ Invoke ، يرث العديد من الوظائف الأصلية ، لذا قم بتنفيذ "fab - help" ، مقارنة بـ "inv - help" التي تم تقديمها سابقًا ، ستجد أن العديد من معلماتها وتفسيراتها هي نفسها تمامًا.

أضاف fab العديد من خيارات سطر الأوامر (باللون الأزرق) لسيناريوهات الخدمة عن بُعد ، من بينها:

  • --prompt-for-login-password: اجعل البرنامج يدخل كلمة مرور تسجيل الدخول SSH في سطر الأوامر (يحدد المثال أعلاه المعلمة connect_kwargs.password في الرمز ، إذا كنت تستخدم هذا الخيار ، يمكنك أن تطلب منك إدخال كلمة المرور يدويًا أثناء التنفيذ)

  • --prompt-for-passphrase: اجعل البرنامج يدخل مسار ملف SSH الخاص المشفر في سطر الأوامر

  • -H أو --hosts: حدد اسم المضيف الذي تريد الاتصال به

  • -i أو --identity: حدد ملف المفتاح الخاص المستخدم لاتصال SSH

  • -S أو --ssh-config: حدد ملف تكوين SSH ليتم تحميله في وقت التشغيل

لمزيد من المعلومات حول واجهة سطر الأوامر Fabric ، راجع الوثائق.

4. عملية تفاعلية

في حالة وجود مطالبة تفاعلية على الخادم البعيد ، يلزم إدخال كلمة مرور أو "نعم" ، الأمر الذي يتطلب Fabric للاستماع والاستجابة.

فيما يلي مثال بسيط. قدّم المستجيب الذي تم استدعاؤه ، والمحتوى الأولي عبارة عن سلسلة معلومات دورية واستجابة ، وتم تعيينه أخيرًا إلى معلمة المراقبين:

من استدعاء المستجيب الاستيراد من اتصال استيراد النسيج ج = الاتصال ("المضيف") sudopass = المجيب ( pattern = r '\ password:'، رد = 'mypassword \ n') c.run ('sudo whoami'، pty = True، watchers =)

5. نقل الملفات

نقل الملفات بين الخادم المحلي والخادم هو استخدام شائع. يقوم النسيج بتغليف جيد في هذا الصدد ، والطريقتين التاليتين متاحتين في فئة الاتصال:

  • get (* args ، ** kwargs): اسحب الملف البعيد إلى نظام الملفات المحلي أو كائن يشبه الملف

  • put (* args، ** kwargs): ادفع الملف المحلي أو ما يشبه الملف إلى نظام الملفات البعيد

في حالة إنشاء اتصال ، مثال:

# (بعض الشيء) con.get ('/ opt / 123.txt'، '123.txt') con.put ('test.txt'، '/opt/test.txt')

تشير المعلمة الأولى إلى الملف المصدر المراد نقله ، والمعلمة الثانية هي الوجهة المطلوب نقلها ، والتي يمكن تحديدها كاسم ملف أو مجلد (عندما يكون فارغًا أو لا شيء ، يتم استخدام المسار الافتراضي):

# (بعض الشيء) con.get ('/ opt / 123.txt'، '') # عندما تكون فارغة ، استخدم المسار الافتراضي con.put ('test.txt'، '/ opt /') # تحديد المسار / opt /

مسار التخزين الافتراضي لطريقة get هو os.getcwd ، ومسار التخزين الافتراضي لطريقة الوضع هو الدليل الرئيسي.

6. عمليات دفعة الخادم

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

للمضيف في ("web1" و "web2" و "mac1"): النتيجة = اتصال (مضيف) .run ('uname -s')

لكن في بعض الأحيان ، سيواجه مثل هذا المخطط مشاكل:

  • إذا كانت هناك مجموعات متعددة من مجموعات الخادم المختلفة التي تحتاج إلى إجراء عمليات مختلفة ، فيجب كتابة العديد من الحلقات

  • إذا كنت ترغب في تجميع نتائج كل مجموعة من العمليات (على سبيل المثال ، شكل القاموس ، والمضيف الرئيسي ، وقيمة النتيجة) ، فعليك إضافة عمليات إضافية خارج الحلقة for

  • يتم تنفيذ الحلقة for بشكل متسلسل ومتزامن ، وهو غير فعال للغاية ويفتقر إلى آلية معالجة الاستثناء (إذا حدث استثناء في المنتصف ، فسوف يؤدي إلى حدوث عملية لاحقة)

بالنسبة لهذه المشاكل ، اقترح Fabric مفهوم المجموعة. يمكن تعريف مجموعة من المضيفين كمجموعة. طريقة API الخاصة بها هي نفس طريقة الاتصال ، أي أنه يمكن تبسيط المجموعة كاتصال.

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

يوفر النسيج فئة أساسية من القماش. group.Group ويشتق منه فئتين فرعيتين ، والفرق هو:

  • SerialGroup (* hosts، ** kwargs): تنفيذ العمليات في الوضع التسلسلي

  • ThreadingGroup (* hosts، ** kwargs): تنفيذ العمليات بطريقة متزامنة

يحدد نوع المجموعة وضع التشغيل للكتلة المضيفة ، نحتاج فقط إلى الاختيار. بعد ذلك ، تكون نتيجة التنفيذ الخاصة بهم هي فئة fabric.group.GroupResult ، وهي فئة فرعية من الإملاء ، تقوم بتخزين المراسلات بين كل اتصال مضيف ونتائج التنفيذ الخاصة به.

> > >  من استيراد النسيج SerialGroup > > >  results = SerialGroup ('web1'، 'web2'، 'mac1'). تشغيل ('uname -s') > > >  طباعة (نتائج) < GroupResult: { < اتصال "web1" > : < CommandResult "uname -s" > ، < اتصال "web2" > : < CommandResult "uname -s" > ، < اتصال "mac1" > : < CommandResult "uname -s" > ، }} >

بالإضافة إلى ذلك ، يوفر GroupResult أيضًا سمتين فاشلتين وناجحتين ، يمكنك إزالة المجموعة الفرعية للفشل / النجاح. وبالتالي ، يمكن أيضًا إجراء العمليات الثانوية بشكل ملائم على دفعات.

الاستخدام المتقدم للنسيج

1. توثيق الهوية

يستخدم النسيج بروتوكول SSH لتأسيس جلسات عمل عن بُعد ، وهو بروتوكول إرسال مشفر يعتمد على طبقة التطبيق آمن نسبيًا.

في الأساس ، يحتوي على مستويين من أساليب مصادقة الأمان:

  • مصادقة الهوية المستندة إلى كلمة المرور: استخدم الحساب وكلمة المرور لتسجيل الدخول إلى المضيف البعيد ، والأمان منخفض ، وهو عرضة لهجمات "الرجل في الوسط"

  • مصادقة الهوية القائمة على المفتاح: استخدم طريقة زوج المفاتيح (المفتاح العام الذي يتم وضعه على الخادم ، المفتاح الخاص الذي يتم وضعه على العميل) ، لن يتم مهاجمته من قبل "رجل في الوسط" ، ولكن تسجيل الدخول يستغرق وقتًا طويلاً

في المثال السابق ، استخدمنا الطريقة الأولى ، وهي استخدام كلمة المرور لتسجيل الدخول عن طريق تحديد معلمة connect_kwargs.password.

بالطبع ، يدعم Fabric أيضًا الطريقة الثانية. هناك ثلاث طرق لتحديد مسار ملف المفتاح الخاص. الأولوية كما يلي:

  • ابحث عن معلمة connect_kwargs.key_filename أولاً ، واستخدمها كمفتاح خاص إذا تم العثور عليها

  • ثانيًا ، ابحث عن الخيار --identify لاستخدام سطر الأوامر

  • أخيرًا ، يتم استخدام قيمة IdentityFile في ملف ssh_config لنظام التشغيل بشكل افتراضي

إذا تم تشفير ملف المفتاح الخاص نفسه ، فأنت بحاجة إلى استخدام معلمة connect_kwargs.passphrase.

2. ملف التكوين

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

يتبع النسيج بشكل أساسي نظام ملف تكوين Invoke (تسرد الوثيقة الرسمية 9 طبقات) ، وتضيف بعض عناصر التكوين المتعلقة بـ SSH. تنسيقات الملفات المدعومة هي .yaml و .yml و. json و. py (مرتبة حسب هذا الترتيب). يوصى بتنسيق yaml (يمكن اختصار اللاحقة إلى yml).

من بينها ، ملفات التكوين الأكثر استخدامًا هي:

  • ملف التكوين على مستوى النظام: /etc/fabric.yml

  • ملف التكوين على مستوى المستخدم: ~ / .fabric.yml (Windows تحت C: \ Users \ xxx)

  • ملف التكوين على مستوى المشروع: /myproject/fabric.yml

تتناقص أولوية الملفات المذكورة أعلاه. بما أن جهازي هو Windows ، من أجل الراحة ، أقوم بإنشاء ملف ".fabric.yml" في دليل المستخدم. المحتوى كما يلي:

# اسم الملف: .fabric.yml المستخدم: الجذر connect_kwargs: كلمة المرور: xxxx # إذا تم استخدام المفتاح ، على النحو التالي # key_filename: # -Your_key_file

لقد استخرجنا اسم المستخدم وكلمة المرور ، حتى نتمكن من حذف هذه المحتويات في ملف fabfile:

# اسم الملف: fabfile.py من اتصال استيراد النسيج من مهمة استيراد النسيج host_ip = '47 .xx.xx.xx '# عنوان الخادم cmd = 'date' # shell أمر للاستعلام عن الوقت على الخادم @مهمة اختبار def (ج): "" " احصل على موعد من مضيف بعيد. "" " con = اتصال (host_ip) النتيجة = con.run (cmd، hide = True) طباعة (result.stdout)

ثم ، نفذ في سطر الأوامر:

> > >  اختبار القوات المسلحة البوروندية الثلاثاء 18 فبراير 10:33:38 CST 2020

يمكن أيضًا تعيين العديد من المعلمات في ملف التكوين ، يمكنك عرض الوثائق بالتفصيل.

3. بوابة الشبكة

إذا كانت الخدمة عن بُعد معزولة عن الشبكة ولا يمكن الوصول إليها مباشرةً (في شبكة LAN مختلفة) ، فحينئذٍ يلزم وجود بوابة / وكيل / نفق ، ويسمى هذا الجهاز من الطبقة المتوسطة عادةً بمقبض أو جهاز حصن.

هناك حلان للبوابة في النسيج ، يتطابقان مع خياري عميل OpenSSH:

  • ProxyJump: بسيطة ، منخفضة التكلفة ، قابلة للتعشيش

  • ProxyCommand: النفقات العامة العالية ، غير القابلة للعش ، وأكثر مرونة

عند إنشاء كائن Fabric Fabric ، يمكنك تطبيق هذين النظامين عن طريق تحديد معلمة البوابة:

تتمثل طريقة ProxyJump في تداخل اتصال في اتصال كبوابة للأول. يستخدم الأخير بروتوكول SSH-tcpip المباشر لفتح الاتصال بالمضيف البعيد الفعلي للأول ، ويمكن للأخير الاستمرار في تداخل البوابة الخاصة به.

من اتصال استيراد النسيج c = اتصال ('internalhost'، gateway = Connection ('gatewayhost'))

تتمثل طريقة ProxyCommand في أن العميل يستخدم الأمر ssh محليًا (مشابهًا لـ "ssh -W h: p gatewayhost") لإنشاء عملية فرعية تتواصل مع الخادم ، ويمكنه قراءة المدخلات والمخرجات القياسية.

تفاصيل تنفيذ هذا الجزء موجودة في paramiko.channel.Channel و paramiko.proxy.ProxyCommand ، بالإضافة إلى المعلمات المحددة ، يمكن أيضًا تعريفها في ملف التكوين المدعوم بواسطة Fabric. لمزيد من التفاصيل ، يرجى الرجوع إلى الوثائق.

ملخص

تسبب الإصدار غير المتوافق من Fabric في درجة معينة من تجزئة المجتمع ، والتي لا يمكن فصلها عن تنفيذ Python 3 ، ولكن لدينا سبب للاعتقاد بأن الإصدار الجديد أفضل من الإصدار القديم.

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

بعد قراءة هذا المقال ، أعتقد أنه يمكن للقراء البدء بسهولة في بضع دقائق فقط.

الكاتب: البازلاء تحت القط ، ولدت في قوانغدونغ ، تخرج من جامعة ووهان ، الآن مبرمج الانجراف السوفيتي ، هناك بعض المهوسين يفكرون ، هناك بعض المشاعر الإنسانية ، هناك بعض درجات الحرارة ، هناك بعض المواقف ، العدد العام "Python Cat" (python_cat) .

تنويه: تم تقديم هذه المقالة من قبل المؤلف ، وحقوق التأليف والنشر تنتمي إلى المؤلف.

ميداليات جديدة وجوائز جديدة وحركة مرور كبيرة والمزيد من الفوائد في انتظارك للحصول على ~

60360 كبير علماء المالية الجدد: لا تتوقع أن يكون AI Lab مركزًا

فهم الخدمات الدقيقة ، بدءًا من اصطياد خنزير بري

صور AI بإصلاح الصور القديمة بذكاء ، التأثير مذهل بالنسبة لي! | مع الكود

قمنا بمسح 10،975 مطور Go ولدينا هذه النتائج!

architect يخبرك المهندس المعماري الكبير: كيف يمكن كتابة الرمز بسهولة ، ويمكن للآخرين رؤيته دون ألم

Py باستخدام Python لتحقيق الرد التلقائي على الهواتف المحمولة ، لا يمكن لأحد أن يلعب في لعبة الرد على المليون هذه!

"عصر قطف المال" القادم للصين قادم: عندما تكون مدينًا وحتى أقاربك يهملونك ، أقترح عليك تجربة التفكير "اليهودي" في كسب المال

شعار سهم Qiangzhuang: شكل "كتف جميل" ، بمجرد أن تغطي الشركة السهم بقوة ، فهذا يعني أن القوة الرئيسية قد تم استيعابها ، وأن سعر السهم يرتفع قريبًا.

سوق الأسهم الصينية: من الواضح أن شركة PetroChina تحقق أرباحًا ، ولكن لماذا لم يرتفع سعر السهم. في هذه المرحلة ، هناك 4.6 يوان و 100000 لشراء القاع. هل تستطيع جني الأموال بعد الاحتفاظ بها لمدة 5 سنوات

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

حصة: ماذا يمثل خط الظل الطويل K هذا؟

سوق الأسهم الصينية: إذا توقف سهمك فجأة ، هل يجب أن تحتفظ به أو تبيعه؟ يكمن المفتاح في "الحد اليومي اللامتناهي" أو "الحد اليومي المرتفع"

سوق الأوراق المالية في الصين: إذا كان لديك 200.000 من الأموال المجانية في يدك ، هل يجب عليك شراء أسهم سمسرة أو أسهم منخفضة السعر تبلغ حوالي 3 يوان في هذه المرحلة؟

القراءة الصباحية | 1 مايو حجز فندق حجز التذاكر بسرعة فائقة ، سفر انتقامي قادم؟

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

الاتجاه الرئيسي | 10 يوان 13 يوان! 1.6 مليار يوان من الأموال الرئيسية للصين بينغ آن

احترق المحرك عالي السرعة في تأجير السيارات ، وطلب المتجر غير المتصل من المستأجر أن يتحمل ما يقرب من 10000 تكاليف صيانة

عند التسجيل ، سيكون لديك حزمة ترقية جامعية صغيرة + دورتين مجانًا.