سؤال أفضل الممارسات ونصائح سطر أوامر Linux؟


أرغب في فتح مناقشة من شأنها أن تجمع أفضل الممارسات والنصائح في سطر أوامر Linux (CLI).

لقد بحثت عن مثل هذه المناقشة لمشاركة التعليق أدناه ولكن لم أجد واحدة ، ومن هنا جاءت هذه المشاركة.

آمل أن نتمكن جميعًا من التعلم من هذا.

نرحب بك لمشاركة نصائح Bash و grep و sed و AWK و / proc وجميع إدارة نظام Linux / Unix الأخرى ذات الصلة ، وأفضل ممارسات برمجة shell لصالحنا جميعًا.


112
2018-03-02 21:23


الأصل


لماذا لينكس فقط؟ قد تكون العديد من النصائح مفيدة في جميع نكهات يونكس تقريبًا. - mouviciel
قد يكون هذا السؤال واسع النطاق - هناك ما يكفي من أفضل ممارسات سطر الأوامر في Linux / Unix لملء الكتب بأكملها ... - Jonik
أوافق على أن نصائح unix التي يمكن تطبيقها على linux أيضا موضع ترحيب كبير جدا ، لقد كتبت لينكس لأن A. هذا هو ما نعمل عليه هنا. B. لأنه يكتسب المزيد من الجمهور على نطاق أوسع ثم يونيس في السنوات الأخيرة. - Maxim Veksler
أعتقد أنها فكرة رائعة لمضاهاة قائمة بالأوامر الأكثر فائدة وإثارة للاهتمام التي يستخدمها الأشخاص.
هل أي من هذه ذات الصلة؟ refspecs.freestandards.org


الأجوبة:


استعمال شاشة، وهو جهاز إرسال معدد طرفي مجاني تم تطويره بواسطة مشروع GNU والذي سيتيح لك امتلاك عدة محطات طرفية في واحد.

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


111
2018-03-02 22:52



أكثر مفاتيح التبديل شيوعًا هي "شاشة -D-R" لفصل واستئناف آخر جلسة شاشة و "شاشة x" لعرض جلسة الشاشة نفسها من عمليات تسجيل الدخول المتعددة. أيضا ، الحصول على نفسك .screenrc لطيفة من dotfiles.org/.screenrc - Nick Devereaux
شيء آخر لطيف حول الشاشة هو أنه يمكنك مشاركة محطة مع أشخاص آخرين عندما تريد التعاون على شيء ما ، باستخدام شاشة x - gareth_bowles


SSH!
SSH هو أمر الله - أعتقد أنه من أهم أوامر التعلم للجميع. يمكن أن تكون الخيارات شاقة للغاية ، ولكن يبدو أنني أتعلم باستمرار استخدام خيارات سطر الأوامر الجديدة لـ SSH التي لم أكن أعتقد أبدًا أنها ضرورية. ربما أستخدمها جميعًا في هذه المرحلة.

كلما كنت تستخدمها ، كلما تعلمت أكثر عنها. يمكنك استخدامه للقيام ببعض الأشياء المدهشة.

ملاحظة: كل هذه الأشياء قابلة للتنفيذ عن بعد بدون أي إعداد على خادمك إلا أن يكون خادم ssh قيد التشغيل.

تركيب نظام ملفات عبر الإنترنت 

ابحث في الشبكة عن SSHFS

أوامر إلى الأمام.

بروتوكول SVN + SSH هو Subversion من عميل بعيد إلى خادم بدون تشغيل DEAMON! يبدأ الأمر SVN الخادم من خلال ssh shell ويمرر المعلومات للخلف وللأمام خلال الأنبوب الموجود. يقوم برنامج rsync بنفس الشيء ، يعمل على خادم بدون rsync deamon من خلال بدء تشغيل نفسه عبر SSH. من السهل كتابة ملفات bash الخاصة بك للقيام بحيل مشابهة.

سلسلة للحصول على الجدران النارية 

أنا استخدم هذا طوال الوقت للقفز من خلال خادم لينكس بلدي في المنزل لبلدي ماك.

المنافذ الأمامية:
يبدو مفيدًا إلى حد كبير فقط حتى ندرك أنه يمكنك الارتداد عبر جدار الحماية في المنزل وتهيئة جهاز التوجيه في المنزل من العمل كما لو كنت تفعل ذلك من داخل الشبكة المنزلية).

طلبات إعادة توجيه X: 

هذا هو واحد آخر مدهش. مع أو بدون خادم X يعمل على نظامك البعيد ، يمكنك تشغيل برنامج x-windows وستظهر النافذة على شاشتك المحلية. مجرد استخدام التبديل -X ، هذا كل شيء!

نظرًا لأنك لا تحتاج إلى تشغيل خادم X على الخادم البعيد ، فإن تأثير وحدة المعالجة المركزية على الخادم الخاص بك هو الحد الأدنى ، يمكنك الحصول على خادم TINY Linux الذي يقدم تطبيقات ضخمة إلى جهاز ألعاب الفيديو القوي الذي يعمل بنظام Windows و cygwin / X.

بالطبع ، يعمل برنامجي VI و EMACS على SSH ، ولكن عندما أكون في المنزل ، فأنا أريد أحيانًا المزيد. أستخدم ssh -X لبدء نسخة من Eclipse! إذا كان الخادم الخاص بك أكثر قوة من الكمبيوتر المحمول الخاص بك ، فستجد واجهة المستخدم الرسومية جالسة هناك على الكمبيوتر المحمول الخاص بك ، ولكن تتم عمليات التحويل على الخادم الخاص بك ، لذلك لا تقلق بشأن تحميل النظام.

تشغيل في ملفات دفعية 

(بمعنى تشغيل ملف دفعي محلي "يفعل أشياء" على أنظمة أخرى):

هناك شيئان يجمعان بين هذا الشيء. واحد يمكنك القضاء على مطالبات كلمة المرور باستخدام مفاتيح التشفير (أكثر أماناً). والثاني هو أنه يمكنك تحديد أمر على SSH CLI. لقد استخدمت هذا في بعض الطرق المثيرة للاهتمام - مثلما يحدث عند فشل الترجمة على الخادم البعيد ، سأحصل على SSH في جهاز الكمبيوتر الخاص بي وتشغيل ملف صوتي).

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

بنيت في ماك

يتم دمج كل من الخادم والعميل في كل من Mac و Linux. في حالة نظامي التشغيل Mac و Ubuntu ، يكون تمكين الخادم بسيطا مثل العثور على مربع الاختيار الصحيح.

على جهاز الكمبيوتر قم بتثبيت cygwin أو cygwin / X (cygwin / X سيسمح لك بإعادة توجيه إخراج x-window من جهاز Linux إلى جهاز الكمبيوتر الذي يعمل بنظام تشغيل Windows - يقوم بتثبيت خادم X)

نصائح مهمة / ملف التكوين

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

هناك خيارات تكوين واسعة تسمح لك بتبسيط أوامر ssh الخاصة بك بشكل كبير. هنا مثال على العمل في العمل:

Host home
    hostname billshome.hopto.org
    Port=12345
    user=bill
    LocalForward=localhost:1025 mac:22

عندما أقوم بكتابة "ssh home" (أي شيء آخر) ، فإنه يعمل كما لو كنت قد كتبت:

ssh -p 12345 bill@billshome.hopto.org

ثم يعيد توجيه المنفذ المحلي 1025 إلى نظامي "mac" في المنزل. السبب في ذلك هو أن لدي إدخال آخر في ملفي:

Host mac
    hostname localhost
    port=1025

بحيث بمجرد أن أقوم بـ "ssh home" ولا تزال النافذة مفتوحة ، يمكنني كتابة "ssh mac" وسيحاول الكمبيوتر في العمل هنا بالفعل الاتصال بمنفذه الخاص 1025 الذي تمت إعادة توجيهه إلى "mac: 22 "بواسطة الأمر الآخر ، لذلك سوف يتصل بجهاز Mac في المنزل من خلال جدار الحماية.

تحرير - البرنامج النصي بارد!

لقد حفرت نصًا قديمًا أحبه - كان عليّ العودة إليه ونشره لأي شخص هنا قد يكون مهتمًا به. يسمى البرنامج النصي "authMe"

#!/bin/bash
if [ ! -f ~/.ssh/id_dsa.pub ]
then
    echo 'id_dsa.pub does not exist, creating'
    ssh-keygen -tdsa
fi
ssh $1 'cat >>.ssh/authorized_keys' <~/.ssh/id_dsa.pub

إذا كان لديك هذا البرنامج النصي في دليل منزلك وهناك مضيف يمكنك الاتصال به (عبر ssh) ، فيمكنك كتابة "./authMe hostName".

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

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

إذا لم يكن جهاز الكمبيوتر البعيد آمنًا دائمًا ، فيجب وضع "passphrase" في الاعتبار عند المطالبة بذلك.

قد ترغب أيضًا في تكوين خادم ssh في الطرف البعيد لعدم السماح لكلمات مرور النص (المفاتيح فقط) للحصول على أمان إضافي.


101



+1 لطيفة جدا وصغيرة الحجم - Karsten
ملاحظة صغيرة على SSH على المنفذ 22: بشرط أن تكون قد حصلت على كلمة مرور جيدة ولم يكن مستخدموك لديهم كلمات مرور رهيبة ، مجرد تشغيل fail2ban (أو شيء مشابه) يكفي لإيقاف محاولات الكراك. لقد وجدت أنه مزعج للغاية للحفاظ على SSH على منفذ آخر. - David Wolever
قد يكون الأمر مزعجًا في بعض الأحيان ، لكن حجم الروابط كان مخيفًا. أنا أعلم أنه ليس من المفترض أن يمروا ، لكن الأمر يشبه إذا كان هناك شخص ما يصعد إلى منزلك ويتجاذب مع مقبض الباب الخاص بك في كل دقيقة - مجرد إزعاج.
هناك نسخة مدمجة من الأمر الأخير في معظم إصدارات ssh في الوقت الحاضر ، إنه يسمى ssh-copy-id، وبسيطة مثل ssh-copy-id user@someserver - JamesHannah
هناك طريقة أخرى للقيام بـ 'ssh mac' trick وهي استخدام توجيه ProxyCommand في ملف .ssh / config الخاص بك. Host mac ProxyCommand ssh -q home "nc٪ h٪ p" سيعمل ذلك على تشغيل netcat (nc) في المنزل وإعادة توجيه اتصال ssh الخاص بك مباشرةً إلى mac. أجد تلك السلسلة أسهل (على سبيل المثال إذا كنت بحاجة إلى الاتصال بـ "المنزل" للوصول إلى "معقل العمل" للوصول إلى "خادم ويب العمل". - toppledwagon


أنا أحب أن استخدم

cd -

للتبديل إلى الدليل السابق. مفيد جدا!


73



لم اعرف هذا ابدا! شكر! على ملاحظة ذات صلة ، تقوم pushd و popd بعمل شيء مماثل ، من خلال بناء كومة من dirs. هذا النوع من الحيل يساعدك عندما تتنقل حول هيكل عميق.
هذا هو مجرد التنوير. - Manuel Ferreria


لقد اكتشفت مؤخرا pv الأمر (عارض الأنابيب) الذي يشبه القطة ولكن مع تفاصيل النقل.

لذا بدلا من

$ gzip -c access.log > access.log.gz

يمكنك استخدام

$ pv access.log | gzip > access.log.gz
611MB 0:00:11 [58.3MB/s] [=>      ] 15% ETA 0:00:59

لذا بدلاً من عدم وجود أي فكرة عند انتهاء العملية ، ستعرف الآن!

مجاملة من بيترس كرومينز 


69



$ gzip -c access.log> access.log.gz لماذا لا يقتصر الأمر على: $ gzip access.log
يا هذا يعمل :) أنا فقط أخذت المثال من موقع بيتريس. - Nick Devereaux
يبدو ذلك جيدًا قديمًا tee(1). - Daniel C. Sobral
فائدة مفيدة للغاية ، واحدة أن أنسى دائما :-( - Patrick


sudo !!

أعد تشغيل الأمر السابق كجذر.

[الأمر العلوي الحالي على الموقع http://www.commandlinefu.com، موقع تحت عنوان على غرار هذا السؤال.]


53



الإفصاح - أنا تشغيل commandlinefu.com - codeinthehole
كان من شأنه أن ينقذ هذا الرجل 16 حرفا: xkcd.com/149


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

$ (reverse-i-search)`svn': svn status

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


46



شكر. كنت أستخدم البحث العكسي ، لكنني لم أتمكن من معرفة كيفية الانتقال إلى المباراة التالية. - Adam
ينتقل Ctrl-S إلى المباراة التالية. قد تضطر إلى القيام به stty -ixon أولاً لإيقاف تشغيل المعنى للتحكم في تدفق XON / XOFF (وهذا أيضًا يجعل Ctrl-Q متاحًا ، يتم تعيينه بشكل افتراضي ليكون هو نفسه Ctrl-V list-insert ، ولكن يمكنك تغييره إلى شيء آخر). نرى man stty و man readline لمزيد من المعلومات. ال stty يمكن إضافة الأمر إلى حسابك ~/.bashrc - Dennis Williamson


سطر الأوامر هو شيء مضحك. أعتقد أنه يمكنك فقط تعلم الكثير بنفسك والباقي الذي تتعلمه عن طريق الخطأ يراقب أي شخص آخر باستخدام سطر الأوامر.

كنت أستخدم الصدفة لسنوات في كتابة أسماء الدليل بصعوبة بالغة باليد. في أحد الأيام كنت أشاهد صديقًا يتسكع حول نظام ما وظل يضرب مفتاح علامة التبويب. سألت "لماذا تضرب علامة التبويب؟". الإجابة: يحاول إكمال الدليل أو اسم الملف. من قد خمنت - الانتهاء من علامة التبويب! اكتب جزءًا من الملف أو الدليل ، انقر فوق علامة التبويب ، وسيحاول إنهاء ما كتبته (يعتمد السلوك على shell).

في أحد الأيام ، كان أحد الأصدقاء يراقبني على سطر الأوامر وشاهدني اكتب شيئًا مثل:

coryking@cory ~/trunk/mozi $ pushd /etc
/etc ~/trunk/mozi
coryking@cory /etc $ popd
~/trunk/mozi
coryking@cory ~/trunk/mozi $

من قد خمنت !؟ لم يعرف ابدا popd / pushd. أعتقد أننا حتى ...


45



يبدو لي الانتهاء من علامة التبويب وكأنه شيء "واضح" ، بسيط للغاية ، ولكن لم أكن أعرف عن بوبد / pushd سواء. مضحك حقا. :) - Jonik
راجع أيضًا هذه الإجابة لتتمكن من إكمال علامة التبويب أكثر بكثير من الأوامر والملفات والدلائل: stackoverflow.com/questions/603696//603919#603919 - Jonik
هذا صحيح جدا. لقد تعلمت عن البحث في التاريخ المتخلف لباش (ctrl-r) من خلال مشاهدة شخص ما. أدركت في وقت لاحق أنه كان ميزة readline وعملت الشيء نفسه في البرامج الأخرى التي تتضمن readline (mysql ، gdb ، python -i ، clisp الخ). - sigjuice
كيف يمكنك استخدام "الصدفة" لسنوات ولم تعرف عن اكتمال علامة التبويب؟ - prestomation
عند التعامل مع pushd / popd لا تنسى أن تذكر الأمر تطبيق الاستعراض المفصل. فإنه يظهر ما هو على المكدس pushd / popd. - slm


تعلم فيم.

إنه (يمكن القول) أفضل محرر ، ولكن من المؤكد أن أفضل محرر متاح على خادم لينكس العاري.


41



gvim هو أيضا أفضل متصفح الملفات على النوافذ ؛)
هذا مفيد للغاية لأنه بمجرد أن تعرف vim ، يمكنك وضع معظم القذائف في صيغة vi ، ويصبح التنقل سهلاً للغاية وسريعًا - Patrick


من المفيد أحيانًا ترك برنامج يعمل حتى بعد تسجيل الخروج. لقد رأيت بعض الحلول التي تستخدم nohup أو حتى شاشة لهذا الغرض. أبسط ما أعرفه هو:

$ your_command_here & disown

يمكنك أيضًا فصل برنامج قيد التشغيل:

$ your_command_here
# Press <Control-Z> to stop the program and bring it to background:
$ bg
$ disown

38



يعد استخدام الشاشة أمرًا رائعًا لأنه يمكنك "إعادة الاتصال" بهذا التطبيق من أي مكان لاحقًا. - prestomation
+1 ، لم أسمع بالتبرئة. - user18911
أعاد ديتو ، على الرغم من أنني بالفعل تفعل الشيء نفسه مع الشاشة - Andy


عندما أريد التأكد من استخدام أمر فعلي وليس اسمًا مستعارًا ، أستخدم شرطة خلفية مائلة للأمام:

\rm -rf ~/tmp

38



هل هذا هو نفسه "أمر rm -rf ~ / tmp"؟ - Maxim Veksler
لم أكن أعرف "أمر" ، لكنه يبدو نفسه. - mouviciel
حسنا ، نعم ما لم يكن "الأمر" هو اسم مستعار في هذه الحالة سيكون عليك استخدام \ command rm -rf ~ / tmp في تلك الحالة \ rm -rf ~ / tmp أفضل - Jamol
presario وتعتقد أنه سيكون من الممكن إنشاء اسم مستعار لـ "/"؟ يا للأسف ، لا أستطيع أن أتناول التعليقات :)
انظر أيضًا الأمر نفسه "builtin". - Dennis Williamson