bash - ناطق - قاموس عربي انجليزي




ما هي خادعة سطر الأوامر المفضلة الأكثر استخدامًا باستخدام Bash؟ (20)

قم بتوسيع الخطوط المعقدة قبل الوصول إلى الدخول اللعين

  • Alt + Ctrl + e - shell-expand-line (قد تحتاج إلى استخدام Esc ، Ctrl + e على لوحة المفاتيح)
  • Ctrl + _ - التراجع
  • Ctrl + x ، * - glob-expand-word

$ echo !$ !-2^ * Alt + Ctrl + e
$ echo aword someotherword * Ctrl + _
$ echo !$ !-2^ * Ctrl + x ، *
$ echo !$ !-2^ LOG Makefile bar.c foo.h

وج.

نعرف جميعًا كيفية استخدام <ctrl>-R لعكس البحث عبر المحفوظات ، ولكن هل تعلم أنه يمكنك استخدام <ctrl>-S لإعادة توجيه البحث إذا قمت بتعيين stty stop "" ؟ وأيضًا ، هل حاولت تشغيل ربط - p لمشاهدة جميع اختصارات لوحة المفاتيح المدرجة؟ يوجد أكثر من 455 على نظام التشغيل Mac OS X افتراضيًا.

ما هي خدعةك المفضلة الوحيدة المفضلة أو اختصار لوحة المفاتيح أو تهيئة العرض باستخدام bash؟


^ R البحث العكسي. اضغط على ^ R ، اكتب جزءًا من أمر سابق ترغب في مطابقته ، ثم اضغط على ^ R حتى تعثر على الأمر الذي تريده. ثم لا يتعين عليّ تذكر الأوامر التي تم استخدامها مؤخرًا والتي لا تزال في السجل الخاص بي. ليس باش على وجه الحصر ، ولكن أيضًا: ^ E لنهاية السطر ، ^ A لبداية السطر ، ^ U و ^ K لحذف قبل وبعد المؤشر ، على التوالي.


أكثر من الجدة ، لكنه ذكي ...

أهم 10 أوامر مستخدمة:

$ history | awk '{print $2}' | awk 'BEGIN {FS="|"}{print $1}' | sort | uniq -c | sort -nr | head

إخراج العينة:

 242 git
  83 rake
  43 cd
  33 ss
  24 ls
  15 rsg
  11 cap
  10 dig
   9 ping
   3 vi

أمري المفضل هو "ls -thor"

فإنه يستدعي قوة الآلهة لسرد الملفات المعدلة مؤخرا في شكل مقروء بشكل ملائم.


أنا معجب بـ !$ ، !^ و !* expandos ، عائدين ، من سطر الأوامر المُرسل مؤخرًا: العنصر الأخير ، أول عنصر غير محكم ، وكل العناصر غير التابعة للقيادة. إلى wit (لاحظ أن shell يطبع الأمر أولاً):

$ echo foo bar baz
foo bar baz
$ echo bang-dollar: !$ bang-hat: !^ bang-star: !*
echo bang-dollar: baz bang-hat: foo bang-star: foo bar baz
bang-dollar: baz bang-hat: foo bang-star: foo bar baz

يأتي هذا في متناول اليدين عندما تقول ، ls filea fileb ، وتريد تحرير واحد منهم: vi !$ أو كليهما: vimdiff !* . كما يمكن تعميمه على "الوسيطة ال" مثل:

$ echo foo bar baz
$ echo !:2
echo bar
bar

أخيرًا ، مع أسماء المسار ، يمكنك الحصول على أجزاء من المسار من خلال إلحاق :h و :t بأي من التوسعات أعلاه:

$ ls /usr/bin/id
/usr/bin/id
$ echo Head: !$:h  Tail: !$:t
echo Head: /usr/bin Tail: id
Head: /usr/bin Tail: id

إحدى الطرق المفضلة للتنقل عندما أستخدم أدلة متعددة في أماكن منفصلة على نطاق واسع في التسلسل الهرمي للأشجار هي استخدام acf_func.sh (المدرجة أدناه). بمجرد تحديدها ، يمكنك القيام به

قرص مضغوط -

لمشاهدة قائمة بالدلائل الحديثة ، مع قائمة عددية

مؤتمر نزع السلاح -2

للانتقال إلى الدليل الثاني.

سهل جدا للاستخدام ، سهل جدا.

هنا الرمز:

# do ". acd_func.sh"
# acd_func 1.0.5, 10-nov-2004
# petar marinov, http:/geocities.com/h2428, this is public domain

cd_func ()
{
  local x2 the_new_dir adir index
  local -i cnt

  if [[ $1 ==  "--" ]]; then
    dirs -v
    return 0
  fi

  the_new_dir=$1
  [[ -z $1 ]] && the_new_dir=$HOME

  if [[ ${the_new_dir:0:1} == '-' ]]; then
    #
    # Extract dir N from dirs
    index=${the_new_dir:1}
    [[ -z $index ]] && index=1
    adir=$(dirs +$index)
    [[ -z $adir ]] && return 1
    the_new_dir=$adir
  fi

  #
  # '~' has to be substituted by ${HOME}
  [[ ${the_new_dir:0:1} == '~' ]] && the_new_dir="${HOME}${the_new_dir:1}"

  #
  # Now change to the new dir and add to the top of the stack
  pushd "${the_new_dir}" > /dev/null
  [[ $? -ne 0 ]] && return 1
  the_new_dir=$(pwd)

  #
  # Trim down everything beyond 11th entry
  popd -n +11 2>/dev/null 1>/dev/null

  #
  # Remove any other occurence of this dir, skipping the top of the stack
  for ((cnt=1; cnt <= 10; cnt++)); do
    x2=$(dirs +${cnt} 2>/dev/null)
    [[ $? -ne 0 ]] && return 0
    [[ ${x2:0:1} == '~' ]] && x2="${HOME}${x2:1}"
    if [[ "${x2}" == "${the_new_dir}" ]]; then
      popd -n +$cnt 2>/dev/null 1>/dev/null
      cnt=cnt-1
    fi
  done

  return 0
}

alias cd=cd_func

if [[ $BASH_VERSION > "2.05a" ]]; then
  # ctrl+w shows the menu
  bind -x "\"\C-w\":cd_func -- ;"
fi

إعادة تسمية

مثال:

$ ls
this_has_text_to_find_1.txt
this_has_text_to_find_2.txt
this_has_text_to_find_3.txt
this_has_text_to_find_4.txt

$ rename 's/text_to_find/been_renamed/' *.txt
$ ls
this_has_been_renamed_1.txt
this_has_been_renamed_2.txt
this_has_been_renamed_3.txt
this_has_been_renamed_4.txt

مفيدة جدا


إن استخدام "set -o vi" من سطر الأوامر ، أو بشكل أفضل ، في .bashrc ، يضعك في وضع التحرير vi في سطر الأوامر. تبدأ في وضع "insert" حتى تتمكن من الكتابة والمسافة الخلفية كالمعتاد ، ولكن إذا قمت بخطأ "كبير" ، يمكنك ضرب مفتاح esc ثم استخدام "b" و "f" للتنقل كما تفعل في vi. cw لتغيير كلمة. مفيدة بشكل خاص بعد ظهور أمر سجل تريد تغييره.


بالتأكيد ، يمكنك " diff file1.txt file2.txt " ، لكن Bash يدعم عملية الاستبدال ، والتي تسمح لك diff مخرجات الأوامر.

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

$ cat myscript.sh
#!/bin/sh
echo -e "one\nthree"
$
$ ./myscript.sh 
one
three
$
$ cat expected_output.txt
one
two
three
$
$ diff <(./myscript.sh) expected_output.txt
1a2
> two
$

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

$ diff <(ssh server1 'rpm -qa | sort') <(ssh server2 'rpm -qa | sort')
241c240
< kernel-2.6.18-92.1.6.el5
---
> kernel-2.6.18-92.el5
317d315
< libsmi-0.4.5-2.el5
727,728d724
< wireshark-0.99.7-1.el5
< wireshark-gnome-0.99.7-1.el5
$

هناك المزيد من الأمثلة في دليل Advanced Bash-Scripting على http://tldp.org/LDP/abs/html/process-sub.html .


سلسلة أوامر متعددة باستخدام الأمر && :

./run.sh && tail -f log.txt

أو

kill -9 1111 && ./start.sh

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

$ mkdir /tmp/new
$ cd !!:*

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

for file in *.wav; do lame "$file" "$(basename "$file" .wav).mp3" ; done;

إن تكوين خيارات محفوظات سطر الأوامر في .bash_login (أو .bashrc) مفيد حقًا. ما يلي هو مجموعة من الإعدادات التي أستخدمها على جهاز Macbook Pro.

يجعل الإعداد التالي أوامر bash محو مكررة في سجلك:

export HISTCONTROL="erasedups:ignoreboth"

أنا أيضا جاك حجم التاريخ الخاص بي حتى عالية جدا أيضا. لما لا؟ لا يبدو أن إبطاء أي شيء على المعالجات الدقيقة اليوم.

export HISTFILESIZE=500000
export HISTSIZE=100000

شيء آخر أفعله هو تجاهل بعض الأوامر من تاريخي. لا حاجة لتذكر أمر الخروج.

export HISTIGNORE="&:[ ]*:exit"

أنت بالتأكيد تريد ضبط histappend. وإلا ، فستستبدل bash سِجلك عند الخروج.

shopt -s histappend

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

shopt -s cmdhist

وأخيرًا ، في نظام التشغيل Mac OS X (إذا كنت لا تستخدم وضع vi) ، فستحتاج إلى إعادة تعيين <CTRL> -S من إيقاف التمرير. هذا يمنع باش من القدرة على تفسيره كبحث إلى الأمام.

stty stop ""

عند تنزيل ملف كبير أفعله كثيرًا:

while ls -la <filename>; do sleep 5; done

ثم ctrl + c فقط عند انتهائي (أو إذا كانت ls ترجع بدون الصفر). إنها تشبه برنامج watch ولكنها تستخدم القشرة بدلاً من ذلك ، لذا فهي تعمل على منصات دون watch .

أداة أخرى مفيدة هي netcat ، أو nc . اذا فعلت:

nc -l -p 9100 > printjob.prn

بعد ذلك ، يمكنك إعداد طابعة على كمبيوتر آخر ، ولكن بدلاً من ذلك ، استخدم عنوان IP الخاص بجهاز الكمبيوتر الذي يقوم بتشغيل netcat. عند إرسال مهمة الطباعة ، يتم استلامها بواسطة الكمبيوتر الذي يقوم بتشغيل netcat ويتم إلقاؤه في printjob.prn .


كيفية سرد الدلائل الفرعية فقط في الحالية؟

ls -d */

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


لقد حصلت على سلاح سري: shell-fu.

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

واحدة أحبها (لكنني أغشش قليلاً لأنني استخدم حقيقة أن Python مثبتة على معظم أنظمة Unix الآن):

alias webshare='python -m SimpleHTTPServer'

الآن في كل مرة تكتب "webshare" ، سيكون الدليل الحالي متاحًا من خلال المنفذ 8000. لطيفة بالفعل عندما تريد مشاركة الملفات مع الأصدقاء على شبكة محلية بدون مفتاح USB أو جهاز تحكم عن بعد. ستعمل مقاطع الفيديو والموسيقى الجارية أيضًا.

وبالطبع القنبلة الكلاسيكية المعبدة عديمة الفائدة تمامًا ولكنها لا تزال ممتعة جدًا:

$ :(){ :|:& };:

لا تحاول ذلك في خادم الإنتاج ...


مفضلة أخرى:

!!

يكرر الأمر الأخير الخاص بك. الأكثر فائدة في النموذج:

sudo !!

وإليك اثنين من إعدادات التكوين:

~/.inputrc :

"\C-[[A": history-search-backward
"\C-[[B": history-search-forward

هذا يعمل بنفس ^R ولكن باستخدام مفاتيح الأسهم بدلاً من ذلك. هذا يعني أنه بإمكاني كتابة (على سبيل المثال) cd /media/ ثم اضغط على السهم لأعلى للانتقال إلى آخر شيء أنا cd 'd إلى داخل /media/ folder.

(أستخدم Gnome Terminal ، قد تحتاج إلى تغيير رموز الهروب من أجل المحاكيات الطرفية الأخرى.)

إن إكمال Bash مفيد أيضًا أيضًا ، لكنه إضافة أكثر براعة. في ~/.bashrc :

if [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
fi

سيؤدي هذا إلى تمكين إتمام علامة التبويب لكل برنامج (على سبيل المثال ، محاولة اكتمال علامة التبويب عندما يبدأ سطر الأوامر بـ evince سيعرض فقط الملفات التي يمكن فتحها ، كما أنه سيوفر خيارات سطر الأوامر كاملة التبويب).

يعمل بشكل جيد مع هذا أيضًا في ~/.inputrc :

set completion-ignore-case on
set show-all-if-ambiguous on
set show-all-if-unmodified on

pbcopy

هذا نسخ إلى الحافظة نظام Mac. يمكنك أوامر الأنابيب إليها ... حاول:

pwd | pbcopy


pushd و pushd دائما تقريبا في متناول اليدين


$ touch {1,2}.txt
$ ls [12].txt
1.txt  2.txt
$ rm !:1
rm [12].txt
$ history | tail -10
...
10007  touch {1,2}.txt
...
$ !10007
touch {1,2}.txt
$ for f in *.txt; do mv $f ${f/txt/doc}; done

cd -

إنها مكافئ سطر الأوامر لزر الخلف (ينقلك إلى الدليل السابق الذي كنت فيه).







command-line