إن bash shell هي البيئة الطرفية القياسية المضمنة في معظم توزيعات Linux ، المضمنة في macOS ، والمتاحة للتثبيت على Windows 10 . يتذكر الأوامر التي تكتبها ويخزنها في ملف محفوظات. ربما تعرف بعض أساسيات تاريخ bash ، لكنها أقوى بكثير مما تعتقد.
اختصارات لوحة المفاتيح
للتمرير عبر سجل bash الخاص بك ، يمكنك استخدام بعض اختصارات لوحة المفاتيح المفيدة العديدة لـ bash . اضغط على هذه الاختصارات وستظهر الأوامر التي استخدمتها مسبقًا في الموجه.
- سهم لأعلى أو Ctrl + P : انتقل إلى الأمر السابق في السجل الخاص بك. اضغط على المفتاح عدة مرات للرجوع إلى الوراء عبر الأوامر التي استخدمتها.
- سهم لأسفل أو Ctrl + N : انتقل إلى الأمر التالي في السجل الخاص بك. اضغط على المفتاح عدة مرات للتقدم خلال الأوامر التي استخدمتها.
- Alt + R : قم بإعادة أي تغييرات على أمر قمت باستخراجه من السجل الخاص بك إذا كنت قد قمت بتحريره في السطر الحالي.
يحتوي Bash أيضًا على وضع “جلب” خاص يمكنك استخدامه للعثور على الأوامر التي قمت بتشغيلها مسبقًا ، بدلاً من التمرير خلالها واحدًا تلو الآخر.
- Ctrl + R – يسترجع الأمر الأخير الذي يطابق الأحرف التي قدمتها. اضغط على هذا الاختصار وابدأ في الكتابة للبحث عن أمر في سجل bash الخاص بك.
- Ctrl + O : قم بتشغيل الأمر الذي وجدته باستخدام Ctrl + R.
- Ctrl + G – يخرج من وضع البحث في المحفوظات بدون تنفيذ أمر.
عرض تاريخ bash الخاص بك
يمكنك طباعة سجل bash بالكامل على الشاشة عن طريق تشغيل أمر واحد:
historia
سترى قائمة بجميع الأوامر الموجودة في سجل bash الخاص بك ، جنبًا إلى جنب مع رقم على يسار كل منها. الأمر الذي يوجد بجانبه “1” هو أقدم أمر في محفوظات bash ، بينما يكون الأمر الذي يحتوي على أكبر رقم هو الأحدث.
يمكنك أن تفعل ما تريد مع الإخراج. على سبيل المثال ، يمكنك توجيهه إلى grep
الأمر للبحث في محفوظات الأوامر.
historia | grep your_search
يمكنك أيضًا توجيهه إلى tail
الأمر لرؤية عدد صغير فقط من الأوامر الأخيرة التي قمت بتشغيلها. على سبيل المثال ، سيُظهر الأمر التالي آخر 5 إدخالات في سجلك.
historia | cola -5
قم بتشغيل الأوامر من سجلك
يمكن لـ Bash “توسيع” الأوامر السابقة بسرعة أو توسيعها وتعديلها. تُعرف هذه الميزة باسم “توسيع التاريخ” وتستخدم علامة تعجب تُعرف باسم “الانفجار”. ما عليك سوى كتابتها في الموجه والضغط على Enter لتشغيلها تمامًا كما تفعل مع أي أمر آخر.
لتشغيل أمر محدد من سجلك برقمه ، استخدم الأمر التالي:
! #
على سبيل المثال ، لنفترض أنك تريد تشغيل الأمر 12 من سجل bash الخاص بك. هذا هو الأمر مع “12” على اليسار عند تشغيل history
الأمر. سوف تكتب الأمر التالي.
! 12
لإعادة تشغيل آخر أمر قمت بتشغيله ، اكتب ما يلي. هذا له نفس تأثير الضغط على السهم لأعلى مرة واحدة لرؤية الأمر السابق ثم الضغط على Enter.
!!
يمكنك أيضًا الرجوع إلى أمر عدد معين من الأسطر للخلف. على سبيل المثال ، يمكنك !-2
تشغيل الأمر الثاني إلى الأخير الذي قمت بتشغيله. !!
يعني نفس !-1
.
هذا التوسع يعمل في أي مكان على الخط. يمكنك إضافة ما تريد قبل أو بعد !!
أو أي من التعبيرات الأخرى في هذا القسم. على سبيل المثال ، يمكنك كتابة الأمر التالي لإعادة تشغيل آخر أمر قمت بتشغيله sudo
، ومنحه امتيازات الجذر. هذا مفيد بشكل خاص إذا نسيت الإضافة sudo
قبل تشغيل الأمر.
sudo !!
أو ، على سبيل المثال ، يمكنك إعادة تشغيل الأمر أعلاه وتوجيه مخرجاته إلى grep للبحث عن نص.
!! | texto grep
للعثور على أمر في سجلك وتشغيله ، اكتب ما يلي. سيؤدي هذا إلى تشغيل الأمر الأخير الذي يطابق النص الذي تحدده:
!texto
لذلك إذا قمت مؤخرًا بتشغيل أمر بدأت به ping
، فيمكنك تشغيل الأمر التالي للعثور عليه. سيؤدي هذا إلى البحث مرة أخرى في السجل الخاص بك ، وتحديد موقع أحدث أمر يبدأ بـ » pi
« ، وتنفيذه على الفور:
!Pi
يمكنك إضافة a :p
إلى أي من التوسعات المذكورة أعلاه وسيقوم bash بطباعة الأمر إلى المحطة بدون تشغيله. هذا مفيد إذا كنت تريد تأكيد أنك تحدد الأمر الصحيح قبل تشغيله.
! 12: p
!!:pags
! texto: p
أعد استخدام الحجج من تاريخك
يسمح لك Bash أيضًا بتشغيل أمر جديد ، ولكن استخدام وسيطات الأوامر القديمة في سجلك. يمكن أن يساعدك هذا في إعادة استخدام الحجج الطويلة والمعقدة بسرعة دون الحاجة إلى إعادة كتابتها.
comando! $
على سبيل المثال ، لنفترض أنك قمت بتشغيل الأمر touch /home/chris/some_long_file_name_you_dont_want_to_type_again
. الآن تريد تشغيل الأمر nano /home/chris/some_long_file_name_you_dont_want_to_type_again
. بدلاً من كتابة كل شيء من البداية ، يمكنك تشغيل:
nano! $
كان !$
سيجعل bash يملأ تلقائيًا الوسيطة الأخيرة لأمرك السابق.
هذا فقط يملأ الحجة الأخيرة. لذا إذا قمت بالركض ping google.com -c 4
ثم الجري ping !$
، فسيتم توسيع هذا فقط إلى » ping 4
«.
للتغلب على هذا الموقف ، يمكنك استخدام الحيلة التالية لتوسيع الوسيطة الأولى في السطر ، بدلاً من الوسيطة الأخيرة:
comando! ^
لذا إذا ركضت ping google.com -c 4
ثم ركضت ping !^
، فسيوسع باش هذا إلى » ping google.com"
.
لإكمال جميع الوسائط المستخدمة في الأمر أعلاه بدلاً من وسيطة واحدة ، يمكنك استخدام ما يلي:
comando! *
لذلك إذا قمت بالتشغيل ping !*
بدلاً من ذلك ، فستكمل bash تلقائيًا جميع الوسائط التي استخدمتها في الأمر أعلاه.
يمكنك استخدام نفس الحيلة التي تستخدمها لتشغيل أوامر من سجلك للحصول على وسيطات منها. فقط استخدم النموذج التالي.
comando! abc: #
على سبيل المثال ، نقوم بتشغيل الأمر من sudo hostname ubuntu
قبل. إذا قمنا بتشغيل الأمر التالي ، فسيقوم bash بالبحث مرة أخرى عبر السجل للعثور على الأمر الأخير الذي يبدأ بالأحرف التي نكتبها وسوف يكمل الوسيطة التي نحددها. لذلك إذا نفذنا echo !su:2
، فسوف يبحث bash بشكل عكسي للعثور على الأمر الأخير الذي يبدأ بـ ” su
” وسوف يكمل وسيطته الثانية ، وهي ” ubuntu
“.
تعمل الحيل الأخرى كما هو متوقع. على سبيل المثال ، يؤدي استبدال الرقم بعلامة النجمة ، المعروفة باسم حرف البدل ، إلى قيام bash بملء جميع وسائط الأمر:
comando! abc: *
قم بتشغيل الأمر أعلاه مرة أخرى وقم بتعديله
يتيح لك Bash أيضًا إعادة تشغيل الأمر أعلاه وتحديد شيء يحتاج إلى التغيير. يمكن أن يكون هذا مفيدًا لتصحيح خطأ مطبعي في الأمر. على سبيل المثال ، سيعيد الأمر التالي تشغيل الأمر السابق ، مع استبدال النص ” abc
” فيه بالنص ” xyz
“.
^ abc ^ xyz
على سبيل المثال ، إذا قمت بالتشغيل عن طريق الخطأ ping gogle.com
، فيمكنك تشغيل ^gog^goog
وسيقوم bash بتشغيل الأمر ping google.com
بدلاً من ذلك.
أين يتم تخزين سجلك وكيفية حذفه
يخزن bash shell محفوظات الأوامر التي نفذتها في ملف محفوظات حساب المستخدم الخاص بك في ~ / .bash_history افتراضيًا. على سبيل المثال ، إذا كان اسم المستخدم الخاص بك هو bob ، فستجد هذا الملف في /home/bob/.bash_history.
لأنه يتم تخزين محفوظاته في ملف ، فإنه يستمر بين الجلسات. يمكنك تشغيل بعض الأوامر ، وتسجيل الخروج ، والعودة في اليوم التالي ، وستظل هذه الأوامر في ملف السجل الخاص بك جاهزة للعرض والاستخدام. يحتوي كل حساب مستخدم على ملف محفوظات خاص به مع محفوظات أوامر منفصلة.
لمسح سجل bash الخاص بك ، يمكنك تشغيل الأمر التالي. يؤدي هذا إلى حذف محتويات ملف .bash_history من حساب المستخدم الخاص بك:
historia -c
يتذكر Bash فقط عددًا محدودًا من الأوامر افتراضيًا ، مما يمنع ملف السجل من النمو بشكل كبير جدًا. يتم التحكم في عدد إدخالات السجل التي يتذكرها bash بواسطة HISTSIZE
المتغير. الافتراضي هو عادة 500 أو 1000 إدخال. يمكنك تشغيل الأمر التالي لمعرفة حجم محفوظات bash على نظامك.
echo $ HISTSIZE
لتعيين السجل الخاص بك إلى الصفر ، قم بتشغيل الأمر التالي.
HISTSIZE = 0
بالنسبة للجلسة الحالية ، لن يقوم bash بتخزين أي إدخالات محفوظات ما لم تقم بتشغيل مثل هذا الأمر HISTSIZE=1000
لإعادته إلى عدد معين من الإدخالات.
كيفية تجاهل المسافات والتكرارات
يسمح لك Bash بتجاهل إدخالات السجل التي تبدأ بمسافة إذا قمت بتعيين HISTCONTROL
المتغير علىignorespace.
HISTCONTROL = ignora el espacio
اكتب مسافة قبل الأمر قبل تشغيله في bash shell وسيعمل الأمر بشكل طبيعي ، لكنه لن يظهر في سجلك إذا كان لديك هذا المتغير ممكّنًا. يتيح لك ذلك الحفاظ على سجلك أكثر نظافة ، واختيار تشغيل الأوامر دون ظهورها في سجلك.
يسمح لك Bash أيضًا بتجاهل الأوامر المكررة التي يمكن أن تفسد سجلك. للقيام بذلك ، اضبط HISTCONTROL
علىignoredups.
HISTCONTROL = ignorar
لاستخدام الدالة ignorespace
y ignoredups
، اضبط HISTCONTROL
المتغير علىignoreboth.
HISTCONTROL=ignoreboth
لاحظ أن متغيرات bash التي قمت بتعيينها ستستمر فقط للجلسة الحالية. ستحتاج إلى إضافة هذه إلى ملف .bashrc لحساب المستخدم الخاص بك لتعيين هذه القيم تلقائيًا في كل جلسة bash تبدأها ، إذا كنت تفضل ذلك.
تعد bash shell أداة معقدة بها العديد من الخيارات أكثر من هذه. راجع أقسام Bash History Buildins و History Expansion في دليل bash الرسمي ومعلومات أكثر تفصيلاً وحيلًا متقدمة أخرى يمكنك استخدامها.