
فرز الكشف عن بيانات الاعتماد والبيانات الحساسة في مشاركات الملفات
فرز حالات تعرّض بيانات الاعتماد والبيانات الحساسة في مشاركات الملفات.
عندما يظهر مشارَك مفتوح، السؤال ليس أبدًا "هل يحتوي هذا المستودع على مفتاح مسرَّب". بل هو "ما الذي تعرّض للتو، وما الذي يجب عليّ تدويره قبل نهاية يوم العمل؟" صُمم sift للإجابة عن هذا السؤال: استرجاع عالٍ، قائمة مراجعة سريعة، وحلقة تغذية راجعة بحيث يصبح أي شيء تكتشفه بالعين قاعدةً تعثر على النسخ الأخرى البالغ عددها مائتين.

بايثون 3.11+، المكتبة القياسية فقط. لا حاجة إلى pip install، ولا إنترنت، ولا خطوة بناء. يعمل على كمبيوتر محمول للاستجابة للحوادث (IR) مقيَّد، وهو المكان الذي تحتاج إليه.```bash sift survey \fileserver\openshare # how big is this thing sift copy \fileserver\openshare C:\IR\case-4471 # take a throttled copy sift scan C:\IR\case-4471 # scan it, opens the triage UI
المسح في مكانه يعمل أيضًا. جرّبه أولاً على مشاركة تحتوي على بيانات اعتماد مزيّفة:```bash
sift demo C:\temp\demoshare
sift.cmd هو مُشغِّل يعمل من أي مجلد. لكتابة sift بدلاً من
المسار الكامل، أضِف C:\Dev\sift إلى PATH:```bash
setx PATH "%PATH%;C:\Dev\sift"
بالنسبة لجهاز لا يحتوي على Python إطلاقًا، فإن `python build_portable.py` ينشئ `dist/sift-secrets-<version>-portable-win64.zip`: بيئة التشغيل القابلة للتضمين الرسمية من python.org بالإضافة إلى شجرة المصدر هذه، وهي تعمل بفك الضغط والتشغيل عبر `sift.cmd` المرفق. حوالي 11 ميجابايت، بدون تثبيت، وبدون صلاحيات مسؤول، ولا يوجد فيه أي شيء مُجمَّع أو مُعاد تعبئته — راجع docstring في `build_portable.py` لمعرفة سبب تفوق ذلك على ملف .exe مُجمَّد على كمبيوتر محمول للاستجابة للحوادث مقفل.
---
## لماذا لا نكتفي بـ gitleaks أو trufflehog
كلا الأداتين جيدتان، وتحلّان مشكلة مختلفة.
إنهما أداتان **دقيقتان** مصممتان للـ CI، حيث تكلف النتيجة الإيجابية الخاطئة المطورَ نصف يومه، لذا فهما تطلقان بشكل أساسي على الأشياء التي تشبه مفتاح API معروفًا لدى جهة بائعة. يذهب trufflehog إلى أبعد من ذلك ويفضل الأسرار التي يمكنه *التحقق* منها عبر استدعاء واجهة برمجة تطبيقات الجهة البائعة، وهي إشارة ممتازة فعلًا لا يمكن للتعبيرات النمطية (regex) محاكاتها.
فرز المشاركة يقلب المعادلة الاقتصادية. فالإنسان يقرأ كل نتيجة بالفعل، لذا تكلف النتيجة الإيجابية الخاطئة ثلاث ثوانٍ. ما يكلفك حقًا هو **التفويت**.
مفاتيح API الخاصة بالبائعين تتسرب فعلًا عبر المشاركات - نسخة احتياطية من جذر الويب، أو سكربت نشر، أو مجلد مشروع لشخص ما منسوخ إلى محرك الأقسام، وفي داخله ملف `.env` يحتوي على مفتاح Stripe نشط. هذه الأشياء تستحق الالتقاط، وsift يلتقطها. لكنها أيضًا الجزء الذي يعالجه gitleaks وtrufflehog جيدًا بالفعل. الفجوة هي كل شيء آخر، وعلى مشاركة الملفات تشكّل معظمها:
| ما تفوته ماسحات CI | لماذا تتجاهله |
|---|---|
| `web.config` يحتوي على سلسلة اتصال SQL | ليس تنسيق مفتاح معروفًا، ولا يوجد بائع للتحقق منه |
| `Map-Drives.ps1` مع `net use ... /user:` | مجرد أمر شل يليه كلمة |
| `New Hire Setup Guide.docx` | ملف Office، يُقرأ كبيانات ثنائية ويُتخطى بالكامل |
| `unattend.xml`, GPP `Groups.xml` | عناصر نشر Windows لم يكتب أحد كاشفًا لها |
| `confCons.xml`, `.rdg`, WinSCP.ini | كلمات مرور مخزنة قابلة للعكس، لكنها ليست "تنسيقًا سريًا" |
| `passwords.xlsx` | إنه ملف ZIP. ماسحات النص العادي ترى بيانات ثنائية وتنتقل |
| `.kdbx`, `.pfx`, `id_rsa` | بايتات معتمة - *اسم الملف* هو النتيجة |
| ملف `.bak` بداخله سلسلة اتصال | ثنائي، لذا لا يُقرأ أبدًا |
sift يغطي هذه الحالات، ويأتي بقواعد مفاتيح البائعين الخاصة به، و**يستورد حزم القواعد ونتائج الأدوات الأخرى** - gitleaks TOML، وKingfisher/Titus YAML، وtrufflehog JSON - لذا لن تضطر إلى الاختيار بين الأدوات.
أقرب عمل سابق هو [Snaffler](https://github.com/SnaffCon/Snaffler)، وهو ممتاز في النصف المتعلق بأسماء الملفات والتصنيف من هذه المهمة، وكان الإلهام المباشر لقواعد أسماء الملفات. ما لا يمتلكه - والذي يتبين أنه العنق الزجاجي الفعلي بمجرد بلوغك 400 نتيجة - هو حلقة مراجعة.
---
## الحلقة
1. **افحص** المشاركة.
2. **عالج قائمة الانتظار.** تعرض كل نتيجة الأسطر المحيطة بها مع تمييز المطابقة. تتيح مفاتيح الأسهم توسيع السياق، وتفتح نقرة واحدة الملف كاملًا في VS Code عند ذلك السطر، أو في Notepad.
3. **اكتشف تفويتًا.** ستكتشفه. قم بتمييزه في المعاينة واضغط `r`.
4. **يقترح sift أنماطًا** ويخبرك مباشرةً عدد المرات التي سيطابق بها كل نمط عبر كل ما سبق قراءته.
5. **احفظه.** تستغرق إعادة الفحص من ذاكرة التخزين المؤقت حوالي ثانية، وتظهر النتائج الجديدة في قائمة الانتظار دون المساس بقرارات الفرز الحالية.
الخطوة 5 هي الجزء الذي يجعل بقية الخطوات جديرة بالتنفيذ. تُقيَّد النتائج بمفتاح `(path, rule, line, value-hash)`، لذا فإن إعادة الفحص تعيد إدراج الصفوف نفسها وتُحفَظ حالتك وملاحظاتك والمالك معها. بدون ذلك، كنت ستعيد مراجعة نفس النتائج الـ300 في كل تكرار وتستسلم في التكرار الثالث.
---
## الأوامر```bash
# size it up first: file count, total bytes, biggest folders, transfer estimates
sift survey \\fileserver\share
# take a rate-limited local copy (resumable; gentle = 5 MB/s by default)
sift copy \\fileserver\share C:\IR\case-4471 --speed gentle
# scan a share and open the triage UI
sift scan \\fileserver\share
# maximum recall: more noise, but a human is reading anyway
sift scan D:\dfs\dept --tier 3
# re-open the UI over the most recent scan
sift ui
# build a share of fabricated credentials, scan it, open the UI
sift demo C:\temp\demoshare
# inherit other tools' vendor-key rules, then use them in the live rescan loop
sift import-rules gitleaks.toml # gitleaks TOML
sift import-rules path/to/kingfisher/data/rules # a directory of YAML
# pull in what the other scanners found, into the same queue
trufflehog filesystem \\fileserver\share --json > th.json
sift import-findings th.json
# hand off to the incident record (redacted unless you say otherwise)
sift export --fmt pdf --status confirmed --out ir-4471.pdf
sift export --fmt csv --out ir-4471.csv
sift export --fmt pdf --no-redact # plaintext; handle as evidence
sift rules # what is loaded
sift selftest # detection tests against a synthetic share
# ask vendors whether confirmed findings are still live. NETWORK. Opt-in.
sift validate --status confirmed
Anywhere sift appears you can use python -m sift instead, from the
C:\Dev\sift directory.
تذهب النتائج إلى مجلد لكل هدف تحت %LOCALAPPDATA%\sift\، وليس إلى دليل العمل أبدًا — تحتوي قاعدة البيانات على بيانات اعتماد نصية واضحة، وتشغيل الأداة من دليلك الرئيسي يجب ألا يُسقط واحدة هناك بصمت. كل مشاركة لها مخزنها الخاص، لذلك لا تتشارك مهمتان أبدًا في قائمة انتظار الفرز. sift ui بدون وسائط يعيد فتح الأحدث؛ --data DIR يتجاوزه.
القواعد المخصصة عامة، في %LOCALAPPDATA%\sift\user-rules.json، لذا فإن النمط الذي تكتبه أثناء مهمة يساعد في المشاركة التالية التي تنظر إليها.
كلاهما في ترويسة الواجهة، بجانب مربع المسار، وعلى سطر الأوامر.
التحقق من الحجم هو مسح إحصائي فقط. لا يُفتح شيء، لذا فهو غير مكلف حتى عبر SMB، ويخبرك بعدد الملفات، وإجمالي البايتات، وأكبر المجلدات، والتوزيع حسب الامتداد، ومقدار ما سيقرؤه sift فعليًا، والمدة التي ستستغرقها النسخة عند كل سرعة. توجيه ماسح ضوئي إلى جذر DFS غير معروف والانتظار هو ما يجعل بعد الظهر يختفي.
النسخ محليًا يسحب المشاركة إلى مجلد محلي أولًا. يستحق القيام به لأن:
النقل محدود المعدل، بمعدل افتراضي يبلغ 5 ميجابايت/ثانية. إشباع رابط خادم ملفات إنتاجي في الثانية ظهرًا يحوّل تحقيقك إلى حادث ثانٍ. ارفع المعدل عندما تعرف أن المسار خامل.
| السرعة | المعدل |
|---|---|
| لطيف (افتراضي) | 5 ميجابايت/ثانية |
| عادي | 25 ميجابايت/ثانية |
| سريع | 100 ميجابايت/ثانية |
| غير محدود | ما يقدمه الرابط |
النقل يُستأنف: يتم تخطي ملف الوجهة الذي له نفس الحجم ووقت التعديل، لذا فإن اقتناءً توقف عند 80% يستكمل من حيث توقف. الملفات المقفلة أو المرفوضة تُسجَّل وتُتخطى بدلاً من إنهاء التشغيل.
PDF، وCSV، وMD، وJSON، من ترويسة الواجهة أو عبر sift export --fmt.
PDF هو ما يُسلَّم لسجل الحادث: صفحة غلاف بالهدف، وإجماليات حسب الخطورة وحالة الفرز، والقواعد الأكثر تكرارًا، والقيم المعاد استخدامها عبر الملفات، ثم النتائج مجمعة حسب الخطورة. يتم إنشاؤه مباشرة، دون مكتبة PDF، لذا يعمل على جهاز لم يرَ pip مطلقًا.
التصديرات مُنقّحة افتراضيًا. القيم مخفية، وكل صفحة موسومة بلافتة، والطرفية لا تعطل الإخفاء إلا عبر طلب صريح redact=0 — لا يمكن لطلب مقتطع أو مشوه أن يُسرّب. تعطيل التنقيح في الواجهة يتطلب تأكيد نافذة تحذير، والملف الناتج موسوم بلافتة UNREDACTED - CONTAINS PLAINTEXT CREDENTIALS على كل صفحة.
لا تزال قاعدة بيانات النتائج تحتفظ بالقيم الحقيقية، لأن المحلل يحتاج إلى معرفة أي كلمة مرور تسربت ليعرف ما الذي يجب تدويره. الحدود هي ما يغادر الأداة.
كل شيء قابل للنقر. عنصر التحكم الترتيب أعلى قائمة النتائج يعيد الترتيب حسب الخطورة، أو مسار الملف، أو القاعدة، أو حالة الفرز، أو الأحدث، مع زر لعكس الترتيب. مرشحات الشريط الجانبي تصفي حسب الخطورة والفئة والقاعدة والقيمة المعاد استخدامها. الفرز، وتوسيع السياق، وفتح ملف، وإنشاء قاعدة — كلها أزرار.
اختصارات لوحة المفاتيح أدناه هي معجلات لقائمة انتظار طويلة، وليست الطريقة الوحيدة لتشغيلها.
زر اللقطة يعرض المقتطف المميز بصيغة PNG للصقه في تذكرة حادث؛ ونسخ المقتطف يفعل الشيء نفسه بصيغة markdown.
تعرض الواجهة بيانات اعتماد نصية واضحة حية في نافذة متصفح، لذلك:
127.0.0.1 فقط، وترفض أي شيء آخر دون --unsafe-bind؛SameSite=Strict؛Host، فلا يمكن لصفحة خبيثة إعادة ربط DNS بها؛/api/context ليس قراءة ملف عشوائية و/api/open ليس إطلاق عملية عشوائي.تحتوي قاعدة بيانات النتائج على بيانات اعتماد نصية واضحة عن قصد — يحتاج محلل الاستجابة للحوادث إلى معرفة أي كلمة مرور تسربت ليعرف ما الذي يجب تدويره. تعامل مع %LOCALAPPDATA%\sift\<target>\findings.db كدليل: نفس التعامل مع المشاركة نفسها، واحذفه عند إغلاق المهمة. استخدم --redact إذا كان سيغادر حدود الحادث.
والأمر البديهي: شغّل sift فقط على الأنظمة التي لديك إذن بالوصول إليها.
sift/rules_builtin.py — قواعد المحتوى. sift/rules_filename.py — قواعد أسماء الملفات. كلاهما بايثون عادي بأنماط سلاسل خام، لذا فهما قابلان للقراءة والمقارنة؛ قواعد المستخدم موجودة بصيغة JSON في .sift/user-rules.json.
ثلاث طبقات تتيح لك المقايضة بين الدقة والاسترجاع:
cpassword الخاصة بـ GPP، وتفريغات NTLM، وكلمات مرور ربط LDAP. الشكل وحده دليل.يمكن أن تحمل القاعدة أيضًا min_digits، وmin_lowercase، وmin_uppercase، وmin_special، لذا يمكن تشديد قاعدة واحدة مزعجة دون لمس الباقي، وexamples — سلاسل يجب أن تظل تطابقها.
examples هو النصف المفيد. sift selftest يشغّل كل قاعدة ضد السلاسل التي كُتبت من أجلها، عبر المسار الكامل: المطابقة، ثم الاستخراج، ثم مرشحات الكبت. الخطوة الأخيرة هي المهمة، لأن الانحدار الذي يحدث فعليًا ليس نمطًا يتوقف عن المطابقة — بل مرشح ضوضاء، شُدّد لأسباب وجيهة في مكان آخر، يلتهم بصمت نتيجة حقيقية في طريقها للخروج.
إنها تثبت قيمتها فورًا. إضافة أمثلة إلى القواعد الموجودة كشفت فجوة حقيقية: الشرطة السفلية حرف كلمة، لذا فإن \b البادئة في قاعدة الإسناد العامة رفضت المطابقة داخل DB_PASSWORD، أو MYSQL_PASSWORD، أو REDIS_PASSWORD — ثلاثة من أكثر أسماء متغيرات بيانات الاعتماد شيوعًا في الوجود، فاتتها بصمت. بدا المثال صحيحًا بوضوح ولم يطابق، وهذا بالضبط الغرض منه.
القواعد التي تكتبها في الواجهة تحصل على هذا مجانًا: السطر الذي حددته يُحفظ كمثال للقاعدة، لذا فإن القاعدة التي تعدّلها بعد ستة أشهر تخبرك عندما تتوقف عن مطابقة الشيء الذي دفعك لكتابتها.
sift import-rules يأخذ ملف gitleaks .toml، أو ملف .yml بنمط Kingfisher/Titus، أو دليلًا يحويها. مقابل حزمة Kingfisher، يتم استيراد 1,073 قاعدة من أصل 1,082، حاملةً معها حدود الإنتروبيا ومتطلبات الأرقام والأحرف والأمثلة. يقرأ YAML عبر sift/yamlmini.py، وهو قارئ للمجموعة الفرعية التي تستخدمها هذه الحزم — دون أي تبعية، ويرفع خطأ عند المراسي والوسوم بدلاً من التظاهر بفهمها.
يُسقط أمران عمدًا في الطريق:
validation:، التي تسمي عنوان URL لكل قاعدة. لا يتصل sift إلا بالمضيفين المثبتين يدويًا في validate.py. حزمة قواعد يمكنها تسمية نقطة نهاية ستختار أين تُرسل نتائجك، وملف القواعد هو بيانات، وليس قرارًا.[[:alnum:]] فئة POSIX؛ بايثون يقرؤها كمجموعة أحرف حرفية، ويُجمّعها بنجاح، ويطابق الشيء الخطأ. تُفحص الترجمة ضد أمثلة كل قاعدة، لذا فإن النمط الذي نجا من التجميع لكنه غيّر معناه يُرفض بدلاً من ألا يُطلق أبدًا بصمت. اثنتا عشرة قاعدة من قواعد Kingfisher تفشل في هذا الفحص ولا تُستورد.ما إذا كان كبت sift الخاص سيُسقط مثالًا معينًا لا يستبعد القاعدة — تلك الحزم تأتي بعينات مزيفة عمدًا (keyXXXXXXXX، ...EXAMPLE)، لذا فإن مرشح العناصر النائبة محق بشأن المثال ولا يقول شيئًا عن النمط. التشدد في ذلك أسقط 121 قاعدة عاملة قبل أن يُرسم التمييز.
تُهجر قواعد الأسرار العامة بسبب الضوضاء، لذا تُضبط مرشحات الضوضاء بعناية بقدر ضبط الأنماط. عند قياسها على شجرة حقيقية من 6,000 ملف، خفّضت قواعد الكبت أدناه النتائج من 1,088 إلى 257 مع عدم فقدان الاسترجاع على مجموعة الاختبار:
password: process.env.DB_PASS متغير، وليس قيمة. هذا الكبت الواحد يزيل معظم ضوضاء القواعد العامة في أشجار المصدر.def login(user: str, password: str) توقيع..wrangler، و.next، وsite-packages، وnode_modules، …) بالإضافة إلى الحزم المضغوطة وخرائط المصدر يتم تخطيها. النص المولّد آليًا لا ينتج سوى إيجابيات كاذبة مولّدة آليًا.لا توجد عن قصد أي قاعدة محتوى https://user:pass@host بذيل فضفاض. النسخة الواضحة أطلقت 476 مرة على شجرة تطوير واحدة، لأن JSON المضغوط لا يحتوي على مسافات، والنمط انطلق من عنوان URL عبر علامات الاقتباس والفواصل حتى وجد @ غير ذي صلة بعد مئات الأحرف.
python tests/run_all.py
اثنتا عشرة مجموعة اختبارات: الكشف على حصة اصطناعية (مقسّمة إلى "ما
تلتقطه ماسحات CI بالفعل"، و"الفجوة التي تستهدفها هذه الأداة"، و"الأفخاخ التي
يجب أن تبقى هادئة")، وسطر الأوامر، وترتيب اقتراحات القواعد، والاستقصاء
والجمع المقيّد (بما في ذلك قياس حد المعدل مقابل زمن الساعة الحقيقية)،
ومولّد PDF (يُعاد تحليله بالطريقة التي يقرؤه بها القارئ، لإثبات أن التنقيح وصل
إلى محتوى الصفحة)، ومستوردي gitleaks/trufflehog، وواجهة HTTP API بما فيها
كل الحراسات الأمنية، والتحليل الثابت لواجهة المستخدم، وقارئ الكتل للملفات
كبيرة الحجم (ليؤكد أن سرًا في الكتلة الأخيرة لا يزال يبلّغ عن رقم سطره
الحقيقي في الملف بأكمله).
للحصول على حصة للتجربة:```bash
sift demo C:\temp\demoshare
كل بيانات الاعتماد في تلك المجموعة مزيّفة.
مستويان، لأنهما يحملان مخاطر مختلفة جدًا.
المجاميع الاختبارية مجانية ومفعّلة دائمًا. رموز ghp_ وnpm_ وATATT الخاصة بأتلاسيان وATCTT الخاصة بـ Bitbucket وglpat- القابلة للتوجيه في GitLab تحمل جميعها CRC32 فوق جسمها. إعادة حسابه تجيب دون اتصال عن ما كان يحتاج سابقًا إلى الإنترنت: هل هذا رمز حقيقي، أم المثال الذي لصقه شخص ما في ملف README؟ يتم وضع علامة على النتائج بـ checksum ok أو malformed في الطابور. المجموع الاختباري يُثبت الشكل، وليس الحياة - فقد يكون الرمز جيد التكوين قد أُلغي قبل عام.
التحقق المباشر معطّل حتى تقوم بتشغيله. يطلب sift validate من المورّد معرفة ما إذا كانت بيانات الاعتماد لا تزال تعمل. إنه أمر منفصل، وليس خيارًا على scan، ويجبرك على كتابة validate في موجه يعرض أسماء كل نقطة نهاية سيتصل بها. قواعد الأمان:
sift/validate.py. لا يمكن لأي قاعدة - مدمجة أو مكتوبة من قبل المستخدم أو مستوردة من حزمة شخص آخر - أن توفّر عنوان URL. وبدون ذلك، سيكون استيراد حزمة قواعد كافيًا لإرسال كل بيانات اعتماد على المشاركة إلى عنوان يختاره مؤلف الحزمة.--redact: إذا كانت القيم مخفية لأن قاعدة البيانات تغادر حدود الحادث، فإن إرسال النص الصريح هو بالضبط ما يتم الحذر منه.validation-log.json بجوار قاعدة بيانات النتائج - المورّد، نقطة النهاية، الوقت، النتيجة - حتى تتمكن المهمة من تحديد ما تم الاتصال به بدقة.محاولات التحقق تظهر في سجلات التدقيق الخاصة بمالك بيانات الاعتماد، منسوبة إلى عنوانك، في تلك اللحظة. وهذا أحيانًا هو ما تريده بالضبط، وأحيانًا ينبه خصمًا يراقب. قرر قبل تشغيله؛ لهذا يطلب منك التأكيد.
حاليًا GitHub وnpm وSlack وStripe. لا يزال trufflehog يتحقق من أكثر بكثير - قم بتشغيله وimport-findings للحصول على كليهما.
import-findings؛ تُرتَّب النتائج المؤكدة في الأعلى..kdbx أو .pfx بالاسم؛ لا يحاول sift فتحها.name=value، وبدون ذلك تبقى الكلمة السرية وقيمتها في عمودين منفصلين ولا ترى أي قاعدة الزوج..7z و.rar والأرشيفات المتداخلة ولكن لا يتم استخراجها. تتم قراءة الصيغ القائمة على ZIP ورسائل .eml فقط من الداخل.--max-size في كتل، ولا يتم تخزينها مؤقتًا. يتم فحصها (يتم العثور على سلسلة اتصال في ملف .bak بحجم 4 جيجابايت، في رقم سطره الحقيقي)، لكن ذاكرة التخزين المؤقت للنصوص تحتفظ فقط بما يتسع، لذا لا تغطيها إعادة الفحص المخزنة مؤقتًا التي تستغرق ثانية واحدة - تصل قاعدة جديدة إلى ملف كبير في الفحص الكامل التالي.Apache-2.0. انظر LICENSE.
تحتوي مجموعة اختبار الكشف (sift/selftest.py, tests/) على بيانات اعتماد صحيحة التنسيق ولكنها مزيّفة عن قصد؛ يتم كتم تنبيهات فحص الأسرار لتلك المسارات عبر .github/secret_scanning.yml.
| العلم | التأثير |
|---|
--tier 1|2|3 | قرص الاستدعاء. 1 = إشارة عالية، 2 = افتراضي، 3 = لا تفوّت شيئًا |
--redact | إخفاء القيم في المخزن والتصديرات. استخدمه إذا غادرت قاعدة البيانات حدود الحادث |
--no-ui | املأ المخزن واخرج، للتشغيل عبر البرامج النصية |
--no-browser | شغّل خادم الواجهة دون فتح متصفح (مفيد عبر RDP) |
--include/--exclude GLOB | تضييق نطاق المسح |
--no-archives | لا تفتح حاويات docx/xlsx/zip |
--no-strings | لا تقم بتمرير فحص السلاسل على الملفات الثنائية |
--no-large | تخطَّ الملفات الأكبر من --max-size بدلاً من قراءتها على شكل كتل |
--jobs N | عمليات العامل (الافتراضي: تلقائي) |
--max-size MB | تخطَّ الملفات الأكبر من هذا (الافتراضي 25) |
--port N | منفذ الواجهة (الافتراضي 8973) |
| المفتاح | الإجراء |
|---|
j / k | النتيجة التالية / السابقة |
↑ / ↓ | توسيع السياق لأعلى / لأسفل |
c / f | تأكيد / وضع علامة إيجابية كاذبة |
x | تبديل التحديد للفرز الجماعي |
o / n | فتح في VS Code عند السطر / فتح الملف في Notepad |
r | بناء قاعدة من النص المميز |
y | نسخ القيمة |
/ | بحث |
.doc.xls.pdf