؟ čeština ∙ deutsch ∙ ελληνικά ∙ Español ∙ français ∙ Indonesia ∙ Italiano ∙ 日本語 한국어 한국어 polski ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ р р р р р р р р р р р р р р р р р р
ملاحظة: أخطط لمراجعة هذا وأبحث عن مؤلف مشارك جديد للمساعدة في توسيع هذا إلى دليل أكثر شمولاً. على الرغم من أنها تحظى بشعبية كبيرة ، إلا أنها قد تكون أوسع وأعمق قليلاً. إذا كنت ترغب في الكتابة وتقترب من كونك خبيرًا في هذه المادة وعلى استعداد للتفكير في المساعدة ، فيرجى إسقاطني ملاحظة في Josh (0x40) Holloway.com. - جليفي ، هولواي. شكرًا لك!

الطلاقة على سطر الأوامر هي مهارة غالبًا ما يتم إهمالها أو تعتبر غامضة ، ولكنها تعمل على تحسين مرونتك وإنتاجيتك كمهندس بطرق واضحة وخفية. هذه مجموعة مختارة من الملاحظات والنصائح حول استخدام سطر الأوامر الذي وجدناه مفيدًا عند العمل على Linux. بعض النصائح ابتدائية ، وبعضها محدد إلى حد ما أو متطورة أو غامضة. هذه الصفحة ليست طويلة ، ولكن إذا كنت تستطيع استخدام جميع العناصر هنا ، فأنت تعرف الكثير.
هذا العمل هو نتيجة العديد من المؤلفين والمترجمين. ظهر بعض هذا في الأصل على Quora ، لكنه انتقل منذ ذلك الحين إلى Github ، حيث قام الناس أكثر موهبة من المؤلف الأصلي بإجراء العديد من التحسينات. يرجى إرسال سؤال إذا كان لديك سؤال يتعلق بسطر الأوامر. يرجى المساهمة إذا رأيت خطأ أو شيء قد يكون أفضل!
نِطَاق:
ملحوظات:
apt أو yum أو dnf أو pacman أو pip أو brew (حسب الاقتضاء) لتثبيت برامج جديدة. تعلم باش الأساسية. في الواقع ، اكتب man bash وعلى الأقل قشط كل شيء ؛ من السهل جدًا متابعتها وليس طويلاً. يمكن أن تكون القذائف البديلة لطيفة ، لكن Bash قوية ومتاحة دائمًا (تعلم ZSH فقط ، والأسماك ، وما إلى ذلك ، في حين أن الإغراء على الكمبيوتر المحمول الخاص بك ، يقيدك في العديد من المواقف ، مثل استخدام الخوادم الموجودة).
تعلم محرر واحد على الأقل على الأقل. يعد محرر nano أحد أبسط التحرير الأساسي (الافتتاح ، التحرير ، حفظ ، البحث). ومع ذلك ، بالنسبة لمستخدم الطاقة في محطة نصية ، لا يوجد بديل لـ VIM ( vi ) ، المحرر الذي يصعب التعلمه ولكنه موقر وسريع وكامل. يستخدم الكثير من الناس أيضًا EMACs الكلاسيكية ، وخاصة لمهام التحرير الأكبر. (بالطبع ، من غير المرجح أن يستخدم أي مطور برامج حديث يعمل في مشروع واسع النطاق محررًا نقيًا على النص ، ويجب أن يكون على دراية بالمعاصف والأدوات الرسومية الحديثة.)
العثور على الوثائق:
man (للفضول ، man man يسرد أرقام الأقسام ، على سبيل المثال 1 أوامر "منتظمة" ، 5 هي الملفات/الاتفاقيات ، و 8 مخصصة للإدارة). العثور على صفحات الرجل مع apropos .help help -d . يمكنك معرفة ما إذا كان الأمر قابلاً للتنفيذ أو قذيفة مصممة أو مستعار باستخدام type command .curl cheat.sh/command "ورقة غش" موجزة مع أمثلة شائعة حول كيفية استخدام أمر Shell. تعرف على إعادة توجيه الإخراج والإدخال باستخدام > و < و pipes باستخدام | . تعرف > الكتابة فوق ملف الإخراج و >> الإلحقات. تعرف على stdout و stderr.
تعرف على توسيع ملف الملف مع * (وربما ? و [ ... ] ) والاقتباس والفرق بين المزدوج " والاقتباسات ' . (انظر المزيد عن التوسع المتغير أدناه.)
تعرف على Bash Job Management: & ، Ctrl-Z ، Ctrl-C ، jobs ، fg ، bg ، kill ، إلخ.
تعرف على ssh ، وأساسيات مصادقة كلمة المرور ، عبر ssh-agent ، ssh-add ، إلخ.
إدارة الملفات الأساسية: ls و ls -l (على وجه الخصوص ، تعرف على ما يعنيه كل عمود في ls -l ) ، less ، head ، tail tail -f (أو حتى أفضل ، less +F ) ، ln و ln -s (تعلم الاختلافات والمزايا من الروابط الصلبة مقابل الناعمة) ، chown ، chmod ، du (لملخص سريع للاستخدام في DISK: du -hs * ). لإدارة نظام الملفات ، df ، mount ، fdisk ، mkfs ، lsblk . تعرف على ماهية inode ( ls -i أو df -i ).
إدارة الشبكة الأساسية: ip أو ifconfig ، dig ، traceroute ، route .
تعلم واستخدام نظام إدارة التحكم في الإصدار ، مثل git .
تعرف على التعبيرات العادية جيدًا ، والأعلام المختلفة لـ grep / egrep . خيارات -i ، -o ، -v ، -A ، -B ، و -C تستحق المعرفة.
تعلم كيفية استخدام apt-get أو yum أو dnf أو pacman (حسب التوزيع) للعثور على الحزم وتثبيتها. وتأكد من أن لديك pip لتثبيت أدوات سطر الأوامر المستندة إلى Python (عدد قليل منها أدناه أسهل في التثبيت عبر pip ).
في BASH ، استخدم علامة التبويب لإكمال الوسيطات أو سرد جميع الأوامر المتاحة و CTRL-R للبحث من خلال سجل الأوامر (بعد الضغط ، اكتب للبحث ، واضغط على CTRL-R بشكل متكرر للدوران من خلال المزيد من المباريات ، واضغط على Enter لتنفيذ الأمر الذي تم العثور عليه ، أو ضرب السهم الأيمن لوضع النتيجة في السطر الحالي للسماح بالتحرير).
في Bash ، استخدم Ctrl-W لحذف الكلمة الأخيرة ، و Ctrl-U لحذف المحتوى من المؤشر الحالي إلى بداية الخط. استخدم ALT-B و ALT-F للتحرك بالكلمة ، CTRL-A لنقل المؤشر إلى بداية الخط ، CTRL-E لتحريك المؤشر إلى نهاية الخط ، CTRL-K للقتل إلى نهاية الخط ، CTRL-L لمسح الشاشة. انظر man readline لجميع beybindings الافتراضية في باش. هناك الكثير. على سبيل المثال Alt-. دورات من خلال الحجج السابقة ، و alt- * يوسع الكرة الأرضية.
بدلاً من ذلك ، إذا كنت تحب bindings style vi -style ، فاستخدم set -o vi ( set -o emacs لإعادة وضعه).
لتحرير الأوامر الطويلة ، بعد تعيين محررك (على سبيل المثال export EDITOR=vim ) ، سيفتح Ctrl-X Ctrl-E الأمر الحالي في محرر للتحرير متعدد الخطوط. أو بأسلوب السادس ، الهروب .
لرؤية الأوامر الحديثة ، استخدم history . اتبع مع !n (حيث n هو رقم الأمر) للتنفيذ مرة أخرى. هناك أيضًا العديد من الاختصارات التي يمكنك استخدامها ، والأكثر فائدة على الأرجح !$ للحجة الأخيرة و !! للاطلاع على الأمر الأخير (انظر "توسيع التاريخ" في صفحة MAN). ومع ذلك ، غالبا ما يتم استبدالها بسهولة بـ CTRL-R و ALT-. .
انتقل إلى دليل منزلك مع cd . الوصول إلى الملفات بالنسبة إلى الدليل المنزلي الخاص بك مع البادئة ~ (على سبيل المثال ~/.bashrc ). في sh Scripts تشير إلى الدليل المنزلي باسم $HOME .
للعودة إلى دليل العمل السابق: cd - .
إذا كنت في منتصف الطريق من خلال كتابة أمر ولكن قم بتغيير رأيك ، فاضغط على alt- # لإضافة # في البداية وأدخله كتعليق (أو استخدم Ctrl-A ، # ، أدخل ). يمكنك بعد ذلك العودة إليها لاحقًا عبر تاريخ القيادة.
استخدم xargs (أو parallel ). إنه قوي للغاية. لاحظ أنه يمكنك التحكم في عدد العناصر التي تنفذ لكل سطر ( -L ) وكذلك التوازي ( -P ). إذا لم تكن متأكدًا مما إذا كان سيفعل الشيء الصحيح ، فاستخدم xargs echo أولاً. أيضا ، -I{} مفيد. أمثلة:
find . -name ' *.py ' | xargs grep some_function
cat hosts | xargs -I{} ssh root@{} hostname pstree -p هو عرض مفيد لشجرة العملية.
استخدم pgrep و pkill للعثور على عمليات أو إشارة بالاسم ( -f مفيد).
تعرف على الإشارات المختلفة التي يمكنك إرسال عملياتها. على سبيل المثال ، لتعلق عملية ، استخدم kill -STOP [pid] . للحصول على القائمة الكاملة ، انظر man 7 signal
استخدم nohup أو disown إذا كنت تريد عملية خلفية للاستمرار في الركض إلى الأبد.
تحقق من العمليات التي تستمع عبر netstat -lntp أو ss -plat (لـ tcp ؛ إضافة -u لـ udp) أو lsof -iTCP -sTCP:LISTEN -P -n (الذي يعمل أيضًا على MacOS).
انظر أيضًا lsof و fuser للمآخذ والملفات المفتوحة.
راجع uptime أو w لمعرفة المدة التي يتم فيها تشغيل النظام.
استخدم alias لإنشاء اختصارات للأوامر الشائعة الاستخدام. على سبيل المثال ، alias ll='ls -latr' ينشئ اسم مستعار جديد ll
احفظ الأسماء المستعارة ، وإعدادات shell ، والوظائف التي تستخدمها عادة في ~/.bashrc ، وترتيب قذائف تسجيل الدخول لمصدرها. هذا سيجعل الإعداد الخاص بك متاحًا في جميع جلسات الصدفة.
ضع إعدادات متغيرات البيئة وكذلك الأوامر التي يجب تنفيذها عند تسجيل الدخول في ~/.bash_profile . ستكون هناك حاجة إلى تكوين منفصل للقذائف التي تطلقها من تسجيلات تسجيل البيئة الرسومية ووظائف cron .
مزامنة ملفات التكوين الخاصة بك (على سبيل المثال .bashrc و .bash_profile ) بين أجهزة الكمبيوتر المختلفة مع GIT.
افهم أن هناك حاجة إلى الرعاية عندما تشمل المتغيرات وأسماء الملفات المسافة البيضاء. أحاط متغيرات باش الخاصة بك مع اقتباسات ، على سبيل المثال "$FOO" . تفضل خيارات -0 أو -print0 لتمكين الأحرف الفارغة من تحديد أسماء الملفات ، على سبيل المثال locate -0 pattern | xargs -0 ls -al أو find / -print0 -type d | xargs -0 ls -al . للتكرار على أسماء الملفات التي تحتوي على مساحة بيضاء في حلقة ، قم بتعيين IFS ليكون خطًا جديدًا فقط باستخدام IFS=$'n' .
في البرامج النصية Bash ، استخدم set -x (أو set -v ، والتي تقوم بتسجيل الإدخال الخام ، بما في ذلك المتغيرات والتعليقات غير المألوفة) لإخراج تصحيح الأخطاء. استخدم أوضاعًا صارمة ما لم يكن لديك سبب وجيه لعدم: استخدام set -e لإهانة الأخطاء (رمز الخروج غير الصفر). استخدم set -u للكشف عن استخدامات متغيرة غير مستقرة. ضع في اعتبارك set -o pipefail أيضًا ، لإحباط الأخطاء داخل الأنابيب (على الرغم من قراءة أكثر من ذلك إذا قمت بذلك ، لأن هذا الموضوع دقيق بعض الشيء). لمزيد من البرامج النصية المعنية ، استخدم أيضًا trap on Exit أو Err. عادةً ما تكون مفيدة هي بدء برنامج نصي مثل هذا ، مما سيجعله يكتشف وإحباط الأخطاء الشائعة وطباعة رسالة:
set -euo pipefail
trap " echo 'error: Script failed: see failed command above' " ERR # do something in current dir
(cd /some/other/dir && other-command)
# continue in original dir في باش ، لاحظ أن هناك الكثير من أنواع التوسع المتغير. التحقق من متغير موجود: ${name:?error message} . على سبيل المثال ، إذا كان نص Bash يتطلب وسيطة واحدة ، فما عليك سوى كتابة input_file=${1:?usage: $0 input_file} . باستخدام قيمة افتراضية إذا كان المتغير فارغًا: ${name:-default} . إذا كنت ترغب في إضافة معلمة إضافية (اختيارية) إلى المثال السابق ، فيمكنك استخدام شيء مثل output_file=${2:-logfile} . إذا تم حذف $2 وبالتالي فارغة ، فسيتم ضبط output_file على logfile . التوسع الحسابي: i=$(( (i + 1) % 5 )) . التسلسلات: {1..10} . تقليص السلاسل: ${var%suffix} و ${var#prefix} . على سبيل المثال ، إذا var=foo.pdf ، ثم echo ${var%.pdf}.txt يطبع foo.txt .
يمكن أن يؤدي توسيع الدعامة باستخدام { ... } إلى تقليل الاضطرار إلى إعادة النوع من النص المشابه وأتمتة مجموعات من العناصر. هذا مفيد في أمثلة مثل mv foo.{txt,pdf} some-dir (الذي ينقل كلا الملفين mkdir -p test-{a,b,c}/subtest-{1,2,3} ، cp somefile{,.bak} cp somefile somefile.bak {،. يتم تنفيذ توسيع الدعامة قبل أي توسع آخر.
ترتيب التوسعات هو: توسيع الدعامة ؛ توسع Tilde ، المعلمة والتوسع المتغير ، التوسع الحسابي ، واستبدال القيادة (يتم بطريقة من اليسار إلى اليمين) ؛ تقسيم الكلمة. وتوسع اسم الملف. (على سبيل المثال ، لا يمكن التعبير عن نطاق مثل {1..20} مع المتغيرات باستخدام {$a..$b} . استخدم seq أو a for loop بدلاً من ذلك ، على سبيل المثال ، seq $a $b أو for((i=a; i<=b; i++)); do ... ; done )
يمكن التعامل مع إخراج الأمر كملف عبر <(some command) (المعروف باسم استبدال العملية). على سبيل المثال ، قارن بين المحليين /etc/hosts مع واحد عن بعد:
diff /etc/hosts <( ssh somehost cat /etc/hosts ){
# Your code here
} cat <<EOF
input
on multiple lines
EOF
في BASH ، أعد توجيه كل من الإخراج القياسي والخطأ القياسي عبر: some-command >logfile 2>&1 أو some-command &>logfile . في كثير من الأحيان ، لضمان عدم ترك الأمر مقبض ملف مفتوح للمدخلات القياسية ، وربطه بالمحطة التي تتواجد فيها ، من الممارسات الجيدة أيضًا إضافة </dev/null .
استخدم man ascii لجدول ASCII جيد ، مع القيم السداسية والعشرية. بالنسبة لمعلومات الترميز العامة ، man unicode و man utf-8 و man latin1 مفيدة.
استخدم screen أو tmux لتعدد الشاشة ، مفيدة بشكل خاص في جلسات SSH عن بُعد وفصل وإعادة التثبيت إلى الجلسة. يمكن byobu تعزيز الشاشة أو TMUX من خلال توفير مزيد من المعلومات وإدارة أسهل. البديل الأكثر الحد الأدنى لاستمرار الجلسة هو dtach فقط.
في SSH ، فإن معرفة كيفية تنفيذ نفق مع -L أو -D (وأحيانًا -R ) مفيد ، على سبيل المثال ، للوصول إلى مواقع الويب من خادم بعيد.
قد يكون من المفيد إجراء بعض التحسينات لتكوين SSH الخاص بك ؛ على سبيل المثال ، يحتوي هذا ~/.ssh/config على إعدادات لتجنب الاتصالات التي تم إسقاطها في بعض بيئات الشبكة ، وتستخدم الضغط (وهو مفيد مع SCP عبر اتصالات النطاق الترددي المنخفض) ، والقنوات المتعددة إلى نفس الخادم مع ملف تحكم محلي:
TCPKeepAlive=yes
ServerAliveInterval=15
ServerAliveCountMax=6
Compression=yes
ControlMaster auto
ControlPath /tmp/%r@%h:%p
ControlPersist yes
بعض الخيارات الأخرى ذات الصلة بـ SSH حساسة للأمان ويجب تمكينها بعناية ، مثل الشبكة الفرعية أو المضيف أو في الشبكات الموثوقة: StrictHostKeyChecking=no ، ForwardAgent=yes
ضع في اعتبارك mosh بديلاً لـ SSH الذي يستخدم UDP ، وتجنب الاتصالات المسقط وإضافة الراحة على الطريق (يتطلب إعداد من جانب الخادم).
للحصول على أذونات على ملف في شكل ثماني ، وهو مفيد لتكوين النظام ولكنه غير متوفر في ls وسهل Bungle ، استخدم شيئًا مثل
stat -c ' %A %a %n ' /etc/timezone للاختيار التفاعلي للقيم من إخراج أمر آخر ، استخدم percol أو fzf .
للتفاعل مع الملفات بناءً على إخراج أمر آخر (مثل git ) ، استخدم fpp (Pathpicker).
للحصول على خادم ويب بسيط لجميع الملفات في الدليل الحالي (و Subdirs) ، متاح لأي شخص على شبكتك ، استخدم: python -m SimpleHTTPServer 7777 (للمنفذ 7777 و Python 2) و python -m http.server 7777 (للمنفذ 7777 و Python 3).
لتشغيل أمر كمستخدم آخر ، استخدم sudo . الإعدادات الافتراضية لتشغيل الجذر ؛ استخدم -u لتحديد مستخدم آخر. استخدم -i لتسجيل الدخول كمستخدم (سيُطلب منك كلمة المرور الخاصة بك ).
لتبديل القشرة إلى مستخدم آخر ، استخدم su username أو su - username . هذا الأخير مع "-" يحصل على بيئة كما لو أن مستخدمًا آخر قام بتسجيل الدخول للتو. حذف اسم المستخدم الافتراضي على الجذر. سيُطلب منك كلمة مرور المستخدم التي تقوم بالتبديل إليها .
تعرف على حد 128k على سطور الأوامر. هذا الخطأ "قائمة الوسيطة طويلة جدًا" أمر شائع عندما يتطابق Wildcard لأعداد كبيرة من الملفات. (عندما يحدث هذا بدائل مثل find و xargs قد تساعد.)
بالنسبة إلى آلة حاسبة أساسية (وبالطبع الوصول إلى Python بشكل عام) ، استخدم مترجم python . على سبيل المثال،
>>> 2+3
5
لتحديد ملف بالاسم في الدليل الحالي ، find . -iname '*something*' (أو ما شابه). للعثور على ملف في أي مكان حسب الاسم ، استخدم locate something (ولكن ضع في اعتبارك أن updatedb قد لم يتم فهرسة الملفات التي تم إنشاؤها مؤخرًا).
للبحث العام من خلال ملفات المصدر أو البيانات ، هناك العديد من الخيارات أكثر تقدمًا أو أسرع من grep -r ، بما في ذلك (بالترتيب الخشن من الأقدم إلى الأحدث) ack و ag ("The Silver Searcher") و rg (RIPGREP).
لتحويل HTML إلى نص: lynx -dump -stdin
للتخفيض ، HTML ، وجميع أنواع تحويل المستندات ، جرب pandoc . على سبيل المثال ، لتحويل مستند Markdown إلى تنسيق Word: pandoc README.md --from markdown --to docx -o temp.docx
إذا كان يجب عليك التعامل مع XML ، فإن xmlstarlet قديم ولكنه جيد.
ل JSON ، استخدم jq . للاستخدام التفاعلي ، انظر أيضًا jid و jiq .
ل yaml ، استخدم shyaml .
بالنسبة لملفات Excel أو CSV ، يوفر CSVKit in2csv ، csvcut ، csvjoin ، csvgrep ، إلخ.
بالنسبة لـ Amazon S3 ، يكون s3cmd مناسبًا و s4cmd أسرع. تعد Amazon's aws saws المحسنة ضرورية للمهام الأخرى المتعلقة بـ AWS.
تعرف على sort و uniq ، بما في ذلك خيارات Uniq -u و -d -انظر Liners أدناه. انظر أيضا comm .
تعرف على cut paste join إلى معالجة الملفات النصية. كثير من الناس يستخدمون cut ولكن ينسون join .
تعرف على wc لحساب Newlines ( -l ) ، والأحرف ( -m ) ، والكلمات ( -w ) والبايت ( -c ).
تعرف على tee لنسخ من stdin إلى ملف وأيضًا إلى stdout ، كما هو الحال في ls -al | tee file.txt .
للحسابات الأكثر تعقيدًا ، بما في ذلك التجميع ، وعكس الحقول ، والحسابات الإحصائية ، فكر في datamash .
اعلم أن المكان يؤثر على الكثير من أدوات سطر الأوامر بطرق خفية ، بما في ذلك ترتيب الفرز (الترتيب) والأداء. ستقوم معظم عمليات تثبيت Linux بتعيين LANG أو متغيرات اللغة الأخرى على إعداد محلي مثل اللغة الإنجليزية الأمريكية. ولكن يجب أن يتغير الفرز إذا قمت بتغيير اللغة. ومعرفة أن إجراءات I18N يمكن أن تجعل الفرز أو أوامر أخرى تعمل عدة مرات أبطأ. في بعض الحالات (مثل عمليات المحددة أو عمليات التفرد أدناه) ، يمكنك تجاهل إجراءات I18N البطيئة بالكامل واستخدام ترتيب الفرز التقليدي القائم على البايت ، باستخدام export LC_ALL=C
يمكنك تعيين بيئة أمر معين عن طريق بادئة الاحتجاج مع إعدادات البيئة المتغيرة ، كما في TZ=Pacific/Fiji date .
تعرف على awk الأساسي و sed للبيانات البسيطة. انظر الواحد للاطلاع على الأمثلة.
لاستبدال جميع حوادث سلسلة في مكانها ، في ملف واحد أو أكثر:
perl -pi.bak -e ' s/old-string/new-string/g ' my-files- * .txtrepren . (في بعض الحالات ، يسمح أمر rename بإعادة تسمية متعددة ، ولكن كن حذرًا لأن وظيفته ليست هي نفسها في جميع توزيعات Linux.) # Full rename of filenames, directories, and contents foo -> bar:
repren --full --preserve-case --from foo --to bar .
# Recover backup files whatever.bak -> whatever:
repren --renames --from ' (.*).bak ' --to ' 1 ' * .bak
# Same as above, using rename, if available:
rename ' s/.bak$// ' * .bakrsync هي حقًا أداة نسخ للملفات سريعة الاستخدام بشكل غير عادي. ومن المعروف أن تزامن بين الآلات ولكنه مفيد محليًا بنفس القدر. عندما تسمح قيود الأمان ، فإن استخدام rsync بدلاً من scp يتيح استرداد النقل دون إعادة تشغيل من نقطة الصفر. كما أنها من بين أسرع الطرق لحذف أعداد كبيرة من الملفات: mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir لمراقبة التقدم عند معالجة الملفات ، استخدم pv ، pycp ، pmonitor ، progress ، rsync --progress ، أو ، للنسخ على مستوى الكتلة ، dd status=progress .
استخدم shuf لخلط أو تحديد خطوط عشوائية من ملف.
تعرف على خيارات sort . بالنسبة للأرقام ، استخدم -n ، أو -h للتعامل مع الأرقام القابلة للقراءة البشرية (على سبيل المثال من du -h ). تعرف كيف تعمل المفاتيح ( -t و -k ). على وجه الخصوص ، احترس من أنك تحتاج إلى كتابة -k1,1 لفرز الحقل الأول فقط ؛ -k1 يعني الفرز وفقًا للخط بأكمله. يمكن أن يكون فرز مستقر ( sort -s ) مفيدًا. على سبيل المثال ، للفرز أولاً حسب الحقل 2 ، ثم ثانيًا حسب الحقل 1 ، يمكنك استخدام sort -k1,1 | sort -s -k2,2 .
إذا كنت بحاجة إلى كتابة علامة تبويب حرفية في سطر أوامر في Bash (على سبيل المثال بالنسبة للوسيطة إلى الفرز) ، اضغط على Ctrl -V [tab] أو كتابة $'t' (الأخير أفضل حيث يمكنك نسخه/لصقه).
الأدوات القياسية لترقيع التعليمات البرمجية المصدر هي diff و patch . انظر أيضًا diffstat للحصول على إحصائيات موجزة من Diff و sdiff لفرقة جنبًا إلى جنب. لاحظ diff -r يعمل لكامل الدلائل. استخدام diff -r tree1 tree2 | diffstat لملخص للتغييرات. استخدم vimdiff لمقارنة الملفات وتحريرها.
بالنسبة للملفات الثنائية ، استخدم hd أو hexdump أو xxd لتفريغ السداسي البسيط و bvi أو hexedit أو biew للتحرير الثنائي.
أيضًا للملفات الثنائية ، يتيح لك strings (بالإضافة إلى grep ، إلخ) العثور على أجزاء من النص.
بالنسبة إلى الاختلافات الثنائية (ضغط دلتا) ، استخدم xdelta3 .
لتحويل ترميزات النص ، جرب iconv . أو uconv للاستخدام المتقدم ؛ وهو يدعم بعض الأشياء اليونيكود المتقدمة. على سبيل المثال:
# Displays hex codes or actual names of characters (useful for debugging):
uconv -f utf-8 -t utf-8 -x ' ::Any-Hex; ' < input.txt
uconv -f utf-8 -t utf-8 -x ' ::Any-Name; ' < input.txt
# Lowercase and removes all accents (by expanding and dropping them):
uconv -f utf-8 -t utf-8 -x ' ::Any-Lower; ::Any-NFD; [:Nonspacing Mark:] >; ::Any-NFC; ' < input.txt > output.txt لتقسيم الملفات إلى قطع ، راجع split (إلى الانقسام حسب الحجم) و csplit (لتقسيمه بواسطة نمط).
التاريخ والوقت: للحصول على التاريخ والوقت الحاليين بتنسيق ISO 8601 المفيدين ، استخدم date -u +"%Y-%m-%dT%H:%M:%SZ" (خيارات أخرى مشكلة). لمعالجة تعبيرات التاريخ والوقت ، استخدم dateadd ، datediff ، strptime وما إلى ذلك من dateutils .
استخدم zless و zmore و zcat و zgrep للعمل على الملفات المضغوطة.
تسوية سمات الملفات عبر chattr وتقدم بديلاً أقل من المستوى لأذونات الملف. على سبيل المثال ، للحماية من حذف الملف العرضي ، العلم غير القابل للتغيير: sudo chattr +i /critical/directory/or/file
استخدم getfacl و setfacl لحفظ واستعادة أذونات الملف. على سبيل المثال:
getfacl -R /some/path > permissions.txt
setfacl --restore=permissions.txttruncate (إنشاء ملف متناثر) ، fallocate (Ext4 ، XFS ، BTRFS و OCFS2) ، ويأتي xfs_mkfile (أي أنظمة ملفات تقريبًا ، في حزمة XFSPROGS) ، mkfile (للأنظمة التي تشبه UNIX مثل Solaris ، MAC OS). لتصحيح الأخطاء على الويب ، curl و curl -I في متناول يدي ، أو معادلات wget الخاصة بهم ، أو httpie الأكثر حداثة.
لمعرفة حالة وحدة المعالجة المركزية/القرص الحالية ، تكون الأدوات الكلاسيكية top (أو htop الأفضل) ، iostat ، و iotop . استخدم iostat -mxz 15 لموحدة المعالجة المركزية الأساسية وإحصائيات القرص المفصل لكل جزء وبصيرة الأداء.
للحصول على تفاصيل اتصال الشبكة ، استخدم netstat و ss .
للحصول على نظرة عامة سريعة على ما يحدث على النظام ، يعد dstat مفيدًا بشكل خاص. للحصول على نظرة عامة أوسع مع التفاصيل ، استخدم glances .
لمعرفة حالة الذاكرة ، قم بتشغيل وفهم إخراج free و vmstat . على وجه الخصوص ، كن على دراية بأن قيمة "المخزونات" هي الذاكرة التي يحتفظ بها Linux kernel كذاكرة التخزين المؤقت للملفات ، لذلك تعتبر قيمة "الحرة" بشكل فعال.
تصحيح أخطاء نظام Java هو غلاية مختلفة من الأسماك ، ولكن خدعة بسيطة على Oracle's وبعض JVMs الأخرى هي أنه يمكنك تشغيل kill -3 <pid> وسيتم إلقاء ملخص تتبع كامل للمكدس (بما في ذلك تفاصيل جمع القمامة الأجيال ، والتي يمكن أن تكون مفيدة للغاية) إلى Stderr/Logs. JDK's jps ، jstat ، jstack ، jmap مفيدة. أدوات SJK أكثر تقدمًا.
استخدم mtr باعتباره تتبعًا أفضل ، لتحديد مشكلات الشبكة.
للنظر في سبب امتلاء القرص ، يوفر ncdu الوقت على الأوامر المعتادة مثل du -sh * .
للعثور على المقبس أو العملية التي تستخدم النطاق الترددي ، جرب iftop أو nethogs .
تعد أداة ab (تأتي مع Apache) مفيدة للتحقق السريع من أداء خادم الويب. لاختبار الحمل الأكثر تعقيدًا ، حاول siege .
للحصول على الأخطاء الأكثر خطورة على الشبكة أو wireshark أو tshark أو ngrep .
تعرف عن strace و ltrace . يمكن أن تكون هذه مفيدة إذا فشل البرنامج أو معلق أو تعطل ، ولا تعرف السبب ، أو إذا كنت ترغب في الحصول على فكرة عامة عن الأداء. لاحظ خيار التنميط ( -c ) ، والقدرة على التثبيت بعملية التشغيل ( -p ). استخدم Trace Child Option ( -f ) لتجنب فقدان المكالمات المهمة.
تعرف على ldd للتحقق من المكتبات المشتركة وما إلى ذلك - ولكن لم يتم تشغيلها أبدًا على ملفات غير موثوق بها.
تعرف على كيفية الاتصال بعملية تشغيل مع gdb والحصول على آثار المكدس.
استخدام /proc . إنه مفيد بشكل مثير للدهشة في بعض الأحيان عند تصحيح مشاكل حية. أمثلة: /proc/cpuinfo ، /proc/meminfo ، /proc/cmdline ، /proc/xxx/cwd ، /proc/xxx/exe ، /proc/xxx/fd/ ، /proc/xxx/smaps (حيث xxx هو معرف العملية أو pid).
عندما تصحيح سبب خطأ ما في الماضي ، يمكن أن يكون sar مفيدًا للغاية. يُظهر إحصائيات تاريخية عن وحدة المعالجة المركزية والذاكرة والشبكة وما إلى ذلك.
بالنسبة للأنظمة الأعمق وتحليلات الأداء ، انظر إلى stap (SystemTap) و perf و sysdig .
تحقق من نظام التشغيل الذي تقوم فيه باستخدام uname أو uname -a (معلومات عامة Unix/kernel) أو lsb_release -a (معلومات التوزيعات Linux).
استخدم dmesg كلما كان هناك شيء مضحك حقًا (يمكن أن يكون مشكلات الأجهزة أو السائق).
إذا قمت بحذف ملف ولم يفرغ مساحة القرص المتوقعة كما ذكرت du ، فتحقق مما إذا كان الملف قيد الاستخدام بواسطة عملية: lsof | grep deleted | grep "filename-of-my-big-file"
أمثلة قليلة من تجميع الأوامر معًا:
sort / uniq . لنفترض أن a و b عبارة عن ملفات نصية مطلعة بالفعل. هذا سريع ، ويعمل على ملفات الحجم التعسفي ، تصل إلى العديد من جيجابت. (لا يقتصر الفرز بالذاكرة ، على الرغم من أنك قد تحتاج إلى استخدام خيار -T إذا كان /tmp على قسم جذر صغير.) انظر أيضًا ملاحظة LC_ALL أعلاه sort SORT -u (تركه للوضوح أدناه). sort a b | uniq > c # c is a union b
sort a b | uniq -d > c # c is a intersect b
sort a b b | uniq -u > c # c is set difference a - b diff <(jq --sort-keys . < file1.json) <(jq --sort-keys . < file2.json) | colordiff | less -R
استخدم grep . * لفحص محتويات جميع الملفات بسرعة في الدليل (بحيث يتم إقران كل سطر مع اسم الملف) ، أو head -100 * (لذلك كل ملف له عنوان). يمكن أن يكون هذا مفيدًا للدلائل المملوءة بإعدادات التكوين مثل تلك الموجودة في /sys ، /proc ، /etc .
جمع جميع الأرقام في العمود الثالث من ملف نصي (ربما يكون هذا 3x أسرع و 3x رمز أقل من Python المكافئ):
awk ' { x += $3 } END { print x } ' myfilels -l المتكرر ولكن من الأسهل قراءته من ls -lR : find . -type f -lsacct_id الموجودة في عنوان URL. إذا كنت تريد حصيلة عن عدد الطلبات لكل acct_id : egrep -o ' acct_id=[0-9]+ ' access.log | cut -d= -f2 | sort | uniq -c | sort -rn لمراقبة التغييرات بشكل مستمر ، استخدم watch ، على سبيل المثال ، التحقق من التغييرات في الملفات في دليل مع watch -d -n 2 'ls -rtlh | tail' أو إلى إعدادات الشبكة أثناء استكشاف الأخطاء وإصلاحها في إعدادات WiFi مع watch -d -n 2 ifconfig .
قم بتشغيل هذه الوظيفة للحصول على نصيحة عشوائية من هذا المستند (Marses Markdown واستخراج عنصر):
function taocl() {
curl -s https://raw.githubusercontent.com/jlevy/the-art-of-command-line/master/README.md |
sed ' /cowsay[.]png/d ' |
pandoc -f markdown -t html |
xmlstarlet fo --html --dropdtd |
xmlstarlet sel -t -v " (html/body/ul/li[count(p)>0])[ $RANDOM mod last()+1] " |
xmlstarlet unesc | fmt -80 | iconv -t US
} expr : أداء عمليات الحساب أو المنطقية أو تقييم التعبيرات العادية
m4 : معالج ماكرو بسيط
yes : اطبع سلسلة كثيرًا
cal : تقويم جميل
env : تشغيل أمر (مفيد في البرامج النصية)
printenv : طباعة متغيرات البيئة (مفيدة في تصحيح الأخطاء والبرامج النصية)
look : ابحث عن الكلمات الإنجليزية (أو الخطوط في ملف) تبدأ بسلسلة
cut paste join : معالجة البيانات
fmt : تنسيق فقرات نصية
pr : تنسيق النص في صفحات/أعمدة
fold : لف خطوط النص
column : تنسيق حقول النص في أعمدة أو جداول ذات عرض ثابت
expand unexpand : التحويل بين علامات التبويب والمساحات
nl : إضافة أرقام الأسطر
seq : أرقام الطباعة
bc : الآلة الحاسبة
factor : العوامل الأعداد الصحيحة
gpg : تشفير وتوقيع الملفات
toe : جدول إدخالات terminfo
nc : أخطاء الشبكة ونقل البيانات
socat : Socket Relay و TCP Portshiper (على غرار netcat )
slurm : تصور حركة المرور الشبكة
dd : نقل البيانات بين الملفات أو الأجهزة
file : تحديد نوع الملف
tree : أدلة العرض والمدافع الفرعي كشجرة تعشش ؛ مثل ls ولكن العودية
stat : معلومات الملف
time : تنفيذ ووقت أمر
timeout : قم بتنفيذ أمر لمبلغ الوقت المحدد وأوقف العملية عند اكتمال مقدار الوقت المحدد.
lockfile : إنشاء ملف smaphore لا يمكن إزالته إلا بواسطة rm -f
logrotate : تدوير وضغط وسجلات البريد.
watch : قم بتشغيل أمر مرارا وتكرارا ، ويظهر النتائج و/أو تسليط الضوء على التغييرات
when-changed : يقوم بتشغيل أي أمر تحدده كلما رأى الملف الذي تم تغييره. انظر inotifywait و entr كذلك.
tac : طباعة الملفات في الاتجاه المعاكس
comm : قارن خط الملفات المصنفة سطرًا
strings : استخراج النص من الملفات الثنائية
tr : ترجمة الشخصية أو التلاعب
iconv أو uconv : تحويل الترميزات النصية
split و csplit : تقسيم الملفات
sponge : اقرأ كل الإدخال قبل كتابتها ، مفيدة للقراءة من ذلك الحين إلى نفس الملف ، على سبيل المثال ، grep -v something some-file | sponge some-file
units : تحويلات الوحدة والحسابات ؛ يحول Furlongs لكل أسبوعين إلى Twips لكل Blink (انظر أيضًا /usr/share/units/definitions.units )
apg : يولد كلمات مرور عشوائية
xz : ضغط ملفات عالية
ldd : معلومات المكتبة الديناميكية
nm : رموز من ملفات الكائنات
ab أو wrk : خوادم الويب القياسية
strace : تصحيح تصحيح الدعوة للنظام
mtr : تتبع أفضل لتصحيح أخطاء الشبكة
cssh : قذيفة مرئية متزامنة
rsync : مزامنة الملفات والمجلدات فوق SSH أو في نظام الملفات المحلي
wireshark و tshark : التقاط الحزم وتصحيح الأخطاء الشبكة
ngrep : GREP لطبقة الشبكة
host dig : عمليات البحث DNS
lsof : معالجة واصف ملف ومقبس
dstat : إحصائيات نظام مفيدة
glances : نظرة عامة على المستوى العالي ، متعدد الأنظمة
iostat : إحصائيات استخدام القرص
mpstat : إحصائيات استخدام وحدة المعالجة المركزية
vmstat : إحصائيات استخدام الذاكرة
htop : نسخة محسنة من TOP
last : تاريخ تسجيل الدخول
w : من قام بتسجيل الدخول
id : معلومات هوية المستخدم/المجموعة
sar : احصائيات النظام التاريخي
iftop أو nethogs : استخدام الشبكة عن طريق المقبس أو العملية
ss : إحصائيات المقبس
dmesg : رسائل خطأ التمهيد والنظام
sysctl : عرض وتكوين معلمات Linux kernel في وقت التشغيل
hdparm : معالجة/أداء قرص SATA/ATA
lsblk : قائمة أجهزة Block: عرض شجرة للأقراص وأقسام القرص
lshw ، lscpu ، lspci ، lsusb ، dmidecode : معلومات الأجهزة ، بما في ذلك وحدة المعالجة المركزية ، BIOS ، RAID ، الرسومات ، الأجهزة ، إلخ.
lsmod و modinfo : قائمة وإظهار تفاصيل وحدات kernel.
fortune ، ddate ، و sl : أم ، حسنًا ، يعتمد على ما إذا كنت تفكر في قاطرات البخار والاقتباسات zippy "مفيدة"
هذه هي عناصر ذات صلة فقط على MacOS.
إدارة الحزمة مع brew (Homebrew) و/أو port (MacPorts). يمكن استخدامها لتثبيت العديد من الأوامر أعلاه.
نسخ إخراج أي أمر إلى تطبيق سطح المكتب مع pbcopy واللصق إدخال من واحد مع pbpaste .
لتمكين مفتاح الخيار في محطة MacOS كمفتاح ALT (مثل المستخدم في الأوامر أعلاه مثل ALT -B ، Alt -F ، إلخ) ، فتح التفضيلات -> ملفات التعريف -> لوحة المفاتيح وتحديد "استخدام الخيار كمفتاح التعريف".
لفتح ملف مع تطبيق سطح المكتب ، استخدم open أو open -a /Applications/Whatever.app .
Spotlight: ملفات البحث مع mdfind وإدراج بيانات التعريف (مثل معلومات EXIF Photo) مع mdls .
تعتمد أن MACOS تعتمد على BSD UNIX ، والعديد من الأوامر (على سبيل المثال ps ، ls ، tail ، awk ، sed ) لها العديد من الاختلافات الدقيقة من Linux ، والتي تتأثر إلى حد كبير بأدوات System V-Style UNIX و GNU. يمكنك في كثير من الأحيان معرفة الفرق من خلال الإشارة إلى أن صفحة الرجل لديها عنوان "دليل الأوامر العامة BSD". في بعض الحالات ، يمكن تثبيت إصدارات GNU ، أيضًا (مثل gawk و gsed لـ GNU AWK و SED). إذا كانت كتابة البرامج النصية للاصطاعف على المنصات ، تجنب هذه الأوامر (على سبيل المثال ، فكر في Python أو perl ) أو الاختبار بعناية.
للحصول على معلومات إصدار MacOS ، استخدم sw_vers .
هذه العناصر ذات صلة فقط على Windows.
الوصول إلى طاقة Shell Unix تحت Microsoft Windows عن طريق تثبيت Cygwin. معظم الأشياء الموضحة في هذا المستند ستعمل خارج الصندوق.
على نظام التشغيل Windows 10 ، يمكنك استخدام نظام Windows Subsystem لـ Linux (WSL) ، والذي يوفر بيئة باش مألوفة مع أدوات سطر أوامر UNIX.
إذا كنت ترغب بشكل أساسي في استخدام أدوات مطور GNU (مثل GCC) على Windows ، ففكر في MINGW وحزمة MSYS الخاصة بها ، والتي توفر أدوات مثل Bash و Gawk و Make و Grep. MSYS ليس لديها جميع الميزات مقارنة مع Cygwin. Mingw مفيد بشكل خاص لإنشاء منافذ Windows الأصلية لأدوات UNIX.
خيار آخر للحصول على نظرة Unix والشعور تحت Windows هو النقد. لاحظ أن عددًا قليلًا جدًا من أوامر UNIX وخيارات سطر الأوامر متوفرة في هذه البيئة.
يمكنك تنفيذ وإرسال معظم مهام إدارة نظام Windows من سطر الأوامر عن طريق التعلم واستخدام wmic .
تتضمن أدوات شبكات Windows ذات سطر الأوامر الأصلي ping و ipconfig و tracert و netstat .
يمكنك تنفيذ العديد من مهام Windows المفيدة من خلال استدعاء أمر Rundll32 .
قم بتثبيت برامج UNIX إضافية مع مدير حزمة Cygwin.
استخدم mintty كنافذة سطر الأوامر.
الوصول إلى حافظة Windows من خلال /dev/clipboard .
قم بتشغيل cygstart لفتح ملف تعسفي من خلال طلبه المسجل.
الوصول إلى سجل Windows مع regtool .
Note that a C: Windows drive path becomes /cygdrive/c under Cygwin, and that Cygwin's / appears under C:cygwin on Windows. Convert between Cygwin and Windows-style file paths with cygpath . This is most useful in scripts that invoke Windows programs.
With the exception of very small tasks, code is written so others can read it. With power comes responsibility. The fact you can do something in Bash doesn't necessarily mean you should! ؛)
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.