[{"data":1,"prerenderedAt":1187},["ShallowReactive",2],{"navigation":3,"\u002Fblog\u002Flinux-basics-04-env-vars-bash-scripting":114,"\u002Fblog\u002Flinux-basics-04-env-vars-bash-scripting-surround":1184},[4],{"title":5,"path":6,"stem":7,"children":8,"page":113},"Blog","\u002Fblog","blog",[9,13,17,21,25,29,33,37,41,45,49,53,57,61,65,69,73,77,81,85,89,93,97,101,105,109],{"title":10,"path":11,"stem":12},"لينكس للهاكرز #3: من يملك حق التصرف؟ الصلاحيات والعمليات كما يراها الهاكر","\u002Fblog\u002Flinux-basics-03-permissions-processes","blog\u002Flinux-basics-03-permissions-processes",{"title":14,"path":15,"stem":16},"لينكس للهاكرز #4: متغيرات البيئة، وكتابة أول أداة اختراق بخط يدك","\u002Fblog\u002Flinux-basics-04-env-vars-bash-scripting","blog\u002Flinux-basics-04-env-vars-bash-scripting",{"title":18,"path":19,"stem":20},"لينكس للهاكرز #5: ضغط الملفات، ونسخة الطب الشرعي التي لا يفلت منها ملف محذوف","\u002Fblog\u002Flinux-basics-05-compression-storage","blog\u002Flinux-basics-05-compression-storage",{"title":22,"path":23,"stem":24},"لينكس للهاكرز #6: النظام الذي يتذكر كل شيء، والخدمات التي تُستخدم أو تُساء استخدامها","\u002Fblog\u002Flinux-basics-06-logging-services","blog\u002Flinux-basics-06-logging-services",{"title":26,"path":27,"stem":28},"لينكس للهاكرز #7: كيف تختفي على الإنترنت، وكيف تسمع ما تبثه الشبكات من حولك","\u002Fblog\u002Flinux-basics-07-anonymity-wireless","blog\u002Flinux-basics-07-anonymity-wireless",{"title":30,"path":31,"stem":32},"لينكس للهاكرز #8: قلب النظام الذي لا يُلمس، ومهام تعمل نيابة عنك وأنت نائم","\u002Fblog\u002Flinux-basics-08-kernel-scheduling","blog\u002Flinux-basics-08-kernel-scheduling",{"title":34,"path":35,"stem":36},"لينكس للهاكرز #9 (الأخيرة): من كاتب أوامر إلى بانٍ لأدوات — أساسيات بايثون للهاكرز","\u002Fblog\u002Flinux-basics-09-python-scripting","blog\u002Flinux-basics-09-python-scripting",{"title":38,"path":39,"stem":40},"لينكس للهاكرز #1","\u002Fblog\u002Flinuxbasic","blog\u002FlinuxBasic",{"title":42,"path":43,"stem":44},"لينكس للهاكرز #2: قراءة الشبكات كخريطة مفتوحة، وإدارة البرامج كالمحترفين","\u002Fblog\u002Flinuxbasic2","blog\u002FlinuxBasic2",{"title":46,"path":47,"stem":48},"نبذة عني: رحلة في عالم البرمجة والتقنية","\u002Fblog\u002Fme","blog\u002Fme",{"title":50,"path":51,"stem":52},"كيف تضع «شطر اليوم» على الشاشة الرئيسية لهاتفك","\u002Fblog\u002Fshatr-widget","blog\u002Fshatr-widget",{"title":54,"path":55,"stem":56},"ويندوز سيرفر للمحترفين #2: التثبيت الصحيح يبدأ قبل إدخال القرص","\u002Fblog\u002Fwindows-server-02-installation","blog\u002Fwindows-server-02-installation",{"title":58,"path":59,"stem":60},"ويندوز سيرفر للمحترفين #3: التخزين من القرص إلى RAID وSAN","\u002Fblog\u002Fwindows-server-03-storage","blog\u002Fwindows-server-03-storage",{"title":62,"path":63,"stem":64},"ويندوز سيرفر للمحترفين #4: الخدمات، لأن الخادم الذي لا يخدم لا قيمة له","\u002Fblog\u002Fwindows-server-04-services","blog\u002Fwindows-server-04-services",{"title":66,"path":67,"stem":68},"ويندوز سيرفر للمحترفين #5: Active Directory، خريطة النطاقات والغابات","\u002Fblog\u002Fwindows-server-05-ad-infrastructure","blog\u002Fwindows-server-05-ad-infrastructure",{"title":70,"path":71,"stem":72},"ويندوز سيرفر للمحترفين #6: بناء أول نطاق Active Directory من الصفر","\u002Fblog\u002Fwindows-server-06-configuring-ad","blog\u002Fwindows-server-06-configuring-ad",{"title":74,"path":75,"stem":76},"ويندوز سيرفر للمحترفين #7: المستخدمون والمجموعات ونموذج AGDLP","\u002Fblog\u002Fwindows-server-07-managing-ad","blog\u002Fwindows-server-07-managing-ad",{"title":78,"path":79,"stem":80},"ويندوز سيرفر للمحترفين #8: Group Policy، التحكم بمئات الأجهزة من مكان واحد","\u002Fblog\u002Fwindows-server-08-group-policy","blog\u002Fwindows-server-08-group-policy",{"title":82,"path":83,"stem":84},"ويندوز سيرفر للمحترفين #9: خوادم التطبيقات، من SQL Server إلى Exchange وSharePoint","\u002Fblog\u002Fwindows-server-09-application-servers","blog\u002Fwindows-server-09-application-servers",{"title":86,"path":87,"stem":88},"ويندوز سيرفر للمحترفين #10: IIS، خادم الويب والمصادقة والتشفير","\u002Fblog\u002Fwindows-server-10-iis","blog\u002Fwindows-server-10-iis",{"title":90,"path":91,"stem":92},"ويندوز سيرفر للمحترفين #11: خوادم الملفات والطباعة، وقاعدة \"الأنبوب\" في الصلاحيات","\u002Fblog\u002Fwindows-server-11-file-print","blog\u002Fwindows-server-11-file-print",{"title":94,"path":95,"stem":96},"ويندوز سيرفر للمحترفين #12: الوصول عن بُعد، من Remote Assistance إلى VPN وRDS","\u002Fblog\u002Fwindows-server-12-remote-access","blog\u002Fwindows-server-12-remote-access",{"title":98,"path":99,"stem":100},"ويندوز سيرفر للمحترفين #13: فن استكشاف الأعطال ومنهجية REACT","\u002Fblog\u002Fwindows-server-13-troubleshooting","blog\u002Fwindows-server-13-troubleshooting",{"title":102,"path":103,"stem":104},"ويندوز سيرفر للمحترفين #14: ضبط الأداء، ثلاث خرافات والمحاكاة الافتراضية","\u002Fblog\u002Fwindows-server-14-performance","blog\u002Fwindows-server-14-performance",{"title":106,"path":107,"stem":108},"ويندوز سيرفر للمحترفين #15: الصيانة واستمرارية الأعمال، لأن الخادم لن يعمل إلى الأبد","\u002Fblog\u002Fwindows-server-15-maintenance","blog\u002Fwindows-server-15-maintenance",{"title":110,"path":111,"stem":112},"ويندوز سيرفر للمحترفين #1: ما هو الخادم أصلًا؟ جولة أولى في عالم Windows Server","\u002Fblog\u002Fwindows-servers","blog\u002Fwindows-servers",false,{"id":115,"title":14,"author":116,"body":121,"date":1177,"description":252,"extension":1178,"image":1179,"meta":1180,"minRead":1057,"navigation":1181,"path":15,"seo":1182,"stem":16,"__hash__":1183},"blog\u002Fblog\u002Flinux-basics-04-env-vars-bash-scripting.md",{"name":117,"avatar":118},"Murtaja",{"src":119,"alt":120},"\u002Fhero\u002Fpixelme.jpg","murtaja",{"type":122,"value":123,"toc":1156},"minimark",[124,129,151,154,158,161,177,180,185,213,220,224,246,278,286,307,311,318,336,343,359,363,382,405,408,432,436,446,449,467,470,490,493,507,518,522,525,558,564,566,570,573,583,587,594,625,628,644,664,673,687,697,701,708,779,789,793,800,809,813,824,845,848,913,916,953,957,960,1079,1086,1090,1112,1114,1118,1135,1139,1142,1152],[125,126,128],"h2",{"id":127},"قبل-أن-نبدأ","🧭 قبل أن نبدأ",[130,131,132,133,137,138,142,143,146,147,150],"p",{},"هذه الحلقة الرابعة، وهي نقطة تحوّل حقيقية في رحلتنا مع كتاب ",[134,135,136],"em",{},"Linux Basics for Hackers",". بعد أن تعلمنا التنقل، الشبكات، الصلاحيات، والعمليات، وصلنا الآن إلى ",[139,140,141],"strong",{},"الفصل السابع: إدارة متغيرات بيئة المستخدم","، و",[139,144,145],{},"الفصل الثامن: البرمجة النصية بـ Bash"," — الفصل الذي فيه، وللمرة الأولى، ",[139,148,149],{},"نكتب أداة اختراق حقيقية بأيدينا",".",[152,153],"hr",{},[125,155,157],{"id":156},"الفصل-السابع-إدارة-متغيرات-بيئة-المستخدم-managing-user-environment-variables","🧬 الفصل السابع: إدارة متغيرات بيئة المستخدم (Managing User Environment Variables)",[130,159,160],{},"يفتتح الكاتب بجملة تكشف لماذا يستحق هذا الموضوع فصلًا كاملًا رغم أنه يبدو \"مملًا\" للوهلة الأولى:",[162,163,164],"blockquote",{},[130,165,166,169,170],{},[139,167,168],{},"\"To get the most from your Linux hacking system, you need to understand environment variables and be adept at managing them for optimal performance, convenience, and even stealth.\"","\n— ",[134,171,172,173,176],{},"\"لكي تحصل على أقصى استفادة من نظام لينكس الخاص بك، عليك أن تفهم متغيرات البيئة وأن تُتقن إدارتها من أجل أفضل أداء، وراحة، بل وحتى ",[139,174,175],{},"التخفّي",".\"",[130,178,179],{},"كلمة \"التخفّي\" (Stealth) هنا هي المفتاح — سنرى لاحقًا كيف تُستخدم هذه المتغيرات لإخفاء آثارك.",[181,182,184],"h3",{"id":183},"ما-الفرق-بين-متغيرات-البيئة-ومتغيرات-الشل","📦 ما الفرق بين متغيرات البيئة ومتغيرات الشل؟",[186,187,188,207],"ul",{},[189,190,191,194,195,199,200,199,203,206],"li",{},[139,192,193],{},"متغيرات البيئة (Environment Variables)",": مكتوبة دائمًا بأحرف كبيرة (مثل ",[196,197,198],"code",{},"HOME",", ",[196,201,202],{},"PATH",[196,204,205],{},"USER",")، وتُورَث تلقائيًا من قِبل أي عملية فرعية تنبثق من الجلسة الحالية.",[189,208,209,212],{},[139,210,211],{},"متغيرات الشل (Shell Variables)",": تُكتب عادة بأحرف صغيرة، وتكون صالحة فقط داخل الجلسة التي أُنشئت فيها.",[130,214,215,216,219],{},"كل المتغيرات في لينكس هي في الأساس أزواج \"مفتاح=قيمة\" (",[196,217,218],{},"KEY=value",")، وإن احتوت القيمة على مسافات يجب وضعها بين علامتي اقتباس.",[181,221,223],{"id":222},"استعراض-المتغيرات","👀 استعراض المتغيرات",[186,225,226,232],{},[189,227,228,231],{},[196,229,230],{},"env",": يعرض متغيرات البيئة الافتراضية فقط.",[189,233,234,237,238,241,242,245],{},[196,235,236],{},"set",": يعرض ",[139,239,240],{},"كل شيء"," — متغيرات البيئة، متغيرات الشل، والدوال المُعرَّفة — وغالبًا ما تكون القائمة طويلة جدًا، لذا يُفضّل تمريرها لـ ",[196,243,244],{},"more",":",[247,248,253],"pre",{"className":249,"code":250,"language":251,"meta":252,"style":252},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","kali > set | more\n","bash","",[196,254,255],{"__ignoreMap":252},[256,257,260,264,268,272,275],"span",{"class":258,"line":259},"line",1,[256,261,263],{"class":262},"sBMFI","kali",[256,265,267],{"class":266},"sMK4o"," >",[256,269,271],{"class":270},"sfazB"," set",[256,273,274],{"class":266}," |",[256,276,277],{"class":262}," more\n",[186,279,280],{},[189,281,282,283,245],{},"للبحث عن متغير محدد بسرعة، نعود لصديقنا ",[196,284,285],{},"grep",[247,287,289],{"className":249,"code":288,"language":251,"meta":252,"style":252},"kali > set | grep HISTSIZE\n",[196,290,291],{"__ignoreMap":252},[256,292,293,295,297,299,301,304],{"class":258,"line":259},[256,294,263],{"class":262},[256,296,267],{"class":266},[256,298,271],{"class":270},[256,300,274],{"class":266},[256,302,303],{"class":262}," grep",[256,305,306],{"class":270}," HISTSIZE\n",[181,308,310],{"id":309},"️-كيف-تُخفي-آثارك-عبر-histsize","🕵️ كيف تُخفي آثارك عبر HISTSIZE",[130,312,313,314,317],{},"هذا الجزء عملي جدًا لأي مهتم بالأمن السيبراني. متغير ",[196,315,316],{},"HISTSIZE"," يحدد عدد الأوامر التي يحتفظ بها لينكس في سجل الأوامر (يمكن استرجاعها بأسهم لوحة المفاتيح للأعلى والأسفل). إن كنت لا تريد ترك أي أثر على نظامك — أو على نظام اخترقته أثناء اختبار مصرَّح به — يمكنك ببساطة:",[247,319,321],{"className":249,"code":320,"language":251,"meta":252,"style":252},"kali > HISTSIZE=0\n",[196,322,323],{"__ignoreMap":252},[256,324,325,327,329,332],{"class":258,"line":259},[256,326,263],{"class":262},[256,328,267],{"class":266},[256,330,331],{"class":270}," HISTSIZE=",[256,333,335],{"class":334},"sbssI","0\n",[130,337,338,339,342],{},"بهذا، يتوقف النظام عن تخزين أي أمر جديد تكتبه. ملاحظة مهمة: أي تعديل على متغير يبقى فقط طوال الجلسة الحالية (تختفي عند إغلاق الطرفية) ما لم تستخدم أمر ",[196,340,341],{},"export"," لجعله دائمًا:",[247,344,346],{"className":249,"code":345,"language":251,"meta":252,"style":252},"kali > export HISTSIZE\n",[196,347,348],{"__ignoreMap":252},[256,349,350,352,354,357],{"class":258,"line":259},[256,351,263],{"class":262},[256,353,267],{"class":266},[256,355,356],{"class":270}," export",[256,358,306],{"class":270},[181,360,362],{"id":361},"تخصيص-واجهة-الطرفية-عبر-ps1","🎨 تخصيص واجهة الطرفية عبر PS1",[130,364,365,366,369,370,373,374,377,378,381],{},"متغير ",[196,367,368],{},"PS1"," يتحكم في شكل سطر الأوامر (Prompt) الذي تراه أمامك. يحتوي على رموز خاصة مثل ",[196,371,372],{},"\\u"," (اسم المستخدم)، ",[196,375,376],{},"\\h"," (اسم الجهاز)، و",[196,379,380],{},"\\w"," (المجلد الحالي). مثال طريف يقدمه الكاتب:",[247,383,385],{"className":249,"code":384,"language":251,"meta":252,"style":252},"kali > PS1=\"World's Best Hacker: #\"\n",[196,386,387],{"__ignoreMap":252},[256,388,389,391,393,396,399,402],{"class":258,"line":259},[256,390,263],{"class":262},[256,392,267],{"class":266},[256,394,395],{"class":270}," PS1=",[256,397,398],{"class":266},"\"",[256,400,401],{"class":270},"World's Best Hacker: #",[256,403,404],{"class":266},"\"\n",[130,406,407],{},"أو حتى جعل طرفية لينكس تبدو كأنها موجّه أوامر ويندوز الكلاسيكي:",[247,409,411],{"className":249,"code":410,"language":251,"meta":252,"style":252},"kali > export PS1='C:\\w> '\n",[196,412,413],{"__ignoreMap":252},[256,414,415,417,419,421,423,426,429],{"class":258,"line":259},[256,416,263],{"class":262},[256,418,267],{"class":266},[256,420,356],{"class":270},[256,422,395],{"class":270},[256,424,425],{"class":266},"'",[256,427,428],{"class":270},"C:\\w> ",[256,430,431],{"class":266},"'\n",[181,433,435],{"id":434},"متغيّر-path-كيف-يعرف-لينكس-أين-يجد-أوامرك","🧭 متغيّر PATH: كيف \"يعرف\" لينكس أين يجد أوامرك؟",[130,437,438,439,441,442,445],{},"هذا من أهم أجزاء الفصل. متغير ",[196,440,202],{}," يحتوي قائمة المجلدات التي يبحث فيها الشل عن أي أمر تكتبه. إن لم يكن الأمر موجودًا في أحد هذه المجلدات، ستحصل على ",[196,443,444],{},"command not found"," — حتى لو كان الملف موجودًا فعليًا في مكان آخر على قرصك!",[130,447,448],{},"لعرض محتواه:",[247,450,452],{"className":249,"code":451,"language":251,"meta":252,"style":252},"kali > echo $PATH\n",[196,453,454],{"__ignoreMap":252},[256,455,456,458,460,463],{"class":258,"line":259},[256,457,263],{"class":262},[256,459,267],{"class":266},[256,461,462],{"class":270}," echo",[256,464,466],{"class":465},"sTEyZ"," $PATH\n",[130,468,469],{},"لإضافة أداة اختراق جديدة نزّلتها في مجلد خاص بها إلى PATH حتى تستطيع تشغيلها من أي مكان:",[247,471,473],{"className":249,"code":472,"language":251,"meta":252,"style":252},"kali > PATH=$PATH:\u002Froot\u002Fnewhackingtool\n",[196,474,475],{"__ignoreMap":252},[256,476,477,479,481,484,487],{"class":258,"line":259},[256,478,263],{"class":262},[256,480,267],{"class":266},[256,482,483],{"class":270}," PATH=",[256,485,486],{"class":465},"$PATH",[256,488,489],{"class":270},":\u002Froot\u002Fnewhackingtool\n",[130,491,492],{},"ويحذّر الكاتب من خطأ شائع جدًا عند المبتدئين:",[162,494,495],{},[130,496,497,169,504],{},[134,498,499,500,503],{},"\"One mistake commonly made by new Linux users is assigning a new directory... directly to the PATH variable... If you use this command, your PATH variable will only contain ",[256,501,502],{},"that"," directory and no longer contain the system binaries directories.\"",[134,505,506],{},"\"من الأخطاء الشائعة عند المستخدمين الجدد إسناد مجلد جديد مباشرة لمتغير PATH بدلًا من إضافته. لو فعلت ذلك، سيحتوي PATH فقط على ذلك المجلد ويفقد كل مجلدات أوامر النظام الأساسية!\"",[130,508,509,510,513,514,517],{},"الفرق حرف واحد فقط: ",[196,511,512],{},"PATH=$PATH:مجلد"," (إضافة، صحيح) مقابل ",[196,515,516],{},"PATH=مجلد"," (استبدال كامل، كارثي). قاعدة ذهبية: احفظ نسخة من أي متغير مهم في ملف نصي قبل تعديله.",[181,519,521],{"id":520},"️-إنشاء-متغيرات-خاصة-بك","🏷️ إنشاء متغيرات خاصة بك",[130,523,524],{},"يمكنك ببساطة إنشاء متغير خاص بك:",[247,526,528],{"className":249,"code":527,"language":251,"meta":252,"style":252},"kali > MYNEWVARIABLE=\"Hacking is the most valuable skill set in the 21st century\"\nkali > echo $MYNEWVARIABLE\n",[196,529,530,546],{"__ignoreMap":252},[256,531,532,534,536,539,541,544],{"class":258,"line":259},[256,533,263],{"class":262},[256,535,267],{"class":266},[256,537,538],{"class":270}," MYNEWVARIABLE=",[256,540,398],{"class":266},[256,542,543],{"class":270},"Hacking is the most valuable skill set in the 21st century",[256,545,404],{"class":266},[256,547,549,551,553,555],{"class":258,"line":548},2,[256,550,263],{"class":262},[256,552,267],{"class":266},[256,554,462],{"class":270},[256,556,557],{"class":465}," $MYNEWVARIABLE\n",[130,559,560,561,150],{},"ولحذفه: ",[196,562,563],{},"unset MYNEWVARIABLE",[152,565],{},[125,567,569],{"id":568},"الفصل-الثامن-البرمجة-النصية-بـ-bash-bash-scripting","💻 الفصل الثامن: البرمجة النصية بـ Bash (Bash Scripting)",[130,571,572],{},"الجملة الافتتاحية لهذا الفصل تستحق أن تُكتب على جدار كل من يريد دخول مجال الأمن السيبراني:",[162,574,575],{},[130,576,577,169,580],{},[139,578,579],{},"\"Any self-respecting hacker must be able to write scripts... Hackers often need to automate commands, sometimes from multiple tools, and this is most efficiently done through short programs they write themselves.\"",[134,581,582],{},"\"أي هاكر يحترم نفسه يجب أن يكون قادرًا على كتابة السكربتات... الهاكرز غالبًا ما يحتاجون لأتمتة الأوامر، أحيانًا من أدوات متعددة، وأكفأ طريقة لفعل ذلك هي كتابة برامج قصيرة بأنفسهم.\"",[181,584,586],{"id":585},"أول-سكربت-hello-hackers-arise","👋 أول سكربت: \"Hello, Hackers-Arise!\"",[130,588,589,590,593],{},"كل سكربت bash يبدأ بسطر خاص يُسمى ",[139,591,592],{},"shebang","، يخبر النظام أي مفسّر (Interpreter) يجب استخدامه:",[247,595,597],{"className":249,"code":596,"language":251,"meta":252,"style":252},"#! \u002Fbin\u002Fbash\n# هذا أول سكربت بايش لي\necho \"Hello, Hackers-Arise!\"\n",[196,598,599,605,610],{"__ignoreMap":252},[256,600,601],{"class":258,"line":259},[256,602,604],{"class":603},"sHwdD","#! \u002Fbin\u002Fbash\n",[256,606,607],{"class":258,"line":548},[256,608,609],{"class":603},"# هذا أول سكربت بايش لي\n",[256,611,613,617,620,623],{"class":258,"line":612},3,[256,614,616],{"class":615},"s2Zo4","echo",[256,618,619],{"class":266}," \"",[256,621,622],{"class":270},"Hello, Hackers-Arise!",[256,624,404],{"class":266},[130,626,627],{},"نقاط مهمة:",[186,629,630,641],{},[189,631,632,633,636,637,640],{},"السطر الذي يبدأ بـ ",[196,634,635],{},"#"," هو ",[139,638,639],{},"تعليق (Comment)","، لا يُنفَّذه المفسّر، بل هو ملاحظة للبشر فقط.",[189,642,643],{},"أي سكربت جديد لا يملك افتراضيًا صلاحية تنفيذ (تذكّر الفصل الخامس!)، لذا يجب أولًا:",[247,645,647],{"className":249,"code":646,"language":251,"meta":252,"style":252},"kali > chmod 755 HelloHackersArise\n",[196,648,649],{"__ignoreMap":252},[256,650,651,653,655,658,661],{"class":258,"line":259},[256,652,263],{"class":262},[256,654,267],{"class":266},[256,656,657],{"class":270}," chmod",[256,659,660],{"class":334}," 755",[256,662,663],{"class":270}," HelloHackersArise\n",[186,665,666],{},[189,667,668,669,672],{},"لتشغيله، نستخدم ",[196,670,671],{},".\u002F"," قبل الاسم:",[247,674,676],{"className":249,"code":675,"language":251,"meta":252,"style":252},"kali > .\u002FHelloHackersArise\n",[196,677,678],{"__ignoreMap":252},[256,679,680,682,684],{"class":258,"line":259},[256,681,263],{"class":262},[256,683,267],{"class":266},[256,685,686],{"class":270}," .\u002FHelloHackersArise\n",[130,688,689,690,692,693,696],{},"الفائدة من ",[196,691,671],{}," أنها تحدد أنك تريد تشغيل الملف ",[139,694,695],{},"في المجلد الحالي بالضبط","، حتى لو وُجد ملف بنفس الاسم في مجلد آخر ضمن PATH.",[181,698,700],{"id":699},"إضافة-تفاعل-القراءة-من-المستخدم","🎤 إضافة تفاعل: القراءة من المستخدم",[130,702,703,704,707],{},"باستخدام أمر ",[196,705,706],{},"read","، يمكن للسكربت أن يطلب مدخلات من المستخدم ويخزّنها في متغير:",[247,709,711],{"className":249,"code":710,"language":251,"meta":252,"style":252},"#! \u002Fbin\u002Fbash\necho \"What is your name?\"\nread name\necho \"What chapter are you on in Linux Basics for Hackers?\"\nread chapter\necho \"Welcome $name to Chapter $chapter of Linux Basics for Hackers!\"\n",[196,712,713,717,728,735,747,755],{"__ignoreMap":252},[256,714,715],{"class":258,"line":259},[256,716,604],{"class":603},[256,718,719,721,723,726],{"class":258,"line":548},[256,720,616],{"class":615},[256,722,619],{"class":266},[256,724,725],{"class":270},"What is your name?",[256,727,404],{"class":266},[256,729,730,732],{"class":258,"line":612},[256,731,706],{"class":615},[256,733,734],{"class":270}," name\n",[256,736,738,740,742,745],{"class":258,"line":737},4,[256,739,616],{"class":615},[256,741,619],{"class":266},[256,743,744],{"class":270},"What chapter are you on in Linux Basics for Hackers?",[256,746,404],{"class":266},[256,748,750,752],{"class":258,"line":749},5,[256,751,706],{"class":615},[256,753,754],{"class":270}," chapter\n",[256,756,758,760,762,765,768,771,774,777],{"class":258,"line":757},6,[256,759,616],{"class":615},[256,761,619],{"class":266},[256,763,764],{"class":270},"Welcome ",[256,766,767],{"class":465},"$name",[256,769,770],{"class":270}," to Chapter ",[256,772,773],{"class":465},"$chapter",[256,775,776],{"class":270}," of Linux Basics for Hackers!",[256,778,404],{"class":266},[130,780,781,782,785,786,150],{},"بهذه الأسطر البسيطة تعلمنا أهم عنصرين في أي سكربت: ",[139,783,784],{},"المتغيرات"," و",[139,787,788],{},"التفاعل مع المستخدم",[181,790,792],{"id":791},"قصة-حقيقية-كيف-يبني-هاكر-أداته-الأولى","🎯 قصة حقيقية: كيف يبني هاكر أداته الأولى؟",[130,794,795,796,799],{},"هنا يروي الكاتب قصة واقعية مثيرة عن الهاكر ",[139,797,798],{},"Max Butler"," (المعروف باسم Max Vision)، الذي كان بالنهار خبير أمن معلومات محترمًا في وادي السيليكون، وبالليل يدير أكبر سوق سوداء لبطاقات الائتمان المسروقة في العالم (CardersMarket). اكتشف Max أن نظام نقاط البيع Aloha POS المستخدم في مطاعم كثيرة يحتوي منفذًا خلفيًا (Backdoor) للدعم الفني على المنفذ 5505، فكتب سكربتًا يفحص ملايين عناوين IP بحثًا عن هذا المنفذ المفتوح ليخترق تلك الأنظمة ويسرق أرقام بطاقات ائتمان بالملايين. انتهى به الأمر بالسجن 13 عامًا.",[162,801,802],{},[130,803,804,805,808],{},"⚠️ هذه القصة تُروى هنا ",[139,806,807],{},"كتحذير وتوضيح تقني","، لا كنموذج يُحتذى — الهدف تعليمي بحت: فهم كيف تُبنى أداة استطلاع آلية، لتكون قادرًا على اكتشاف مثل هذه الثغرات ومنعها في أنظمتك الخاصة.",[181,810,812],{"id":811},"بناء-ماسح-منافذ-mysql-الخاص-بنا","🔨 بناء ماسح منافذ MySQL الخاص بنا",[130,814,815,816,819,820,823],{},"يقترح الكاتب أن نبني نسخة تعليمية شبيهة، لكن تبحث عن قواعد بيانات ",[139,817,818],{},"MySQL"," (منفذ 3306) بدلًا من الهدف الأصلي. أولًا، نتعرف على أداة ",[139,821,822],{},"nmap"," الشهيرة لفحص المنافذ:",[247,825,827],{"className":249,"code":826,"language":251,"meta":252,"style":252},"nmap -sT 192.168.181.1 -p 3306\n",[196,828,829],{"__ignoreMap":252},[256,830,831,833,836,839,842],{"class":258,"line":259},[256,832,822],{"class":262},[256,834,835],{"class":270}," -sT",[256,837,838],{"class":334}," 192.168.181.1",[256,840,841],{"class":270}," -p",[256,843,844],{"class":334}," 3306\n",[130,846,847],{},"ثم نكتب سكربتًا بسيطًا:",[247,849,851],{"className":249,"code":850,"language":251,"meta":252,"style":252},"#! \u002Fbin\u002Fbash\n# سكربت للبحث عن أجهزة تعمل عليها MySQL\nnmap -sT 192.168.181.0\u002F24 -p 3306 >\u002Fdev\u002Fnull -oG MySQLscan\ncat MySQLscan | grep open > MySQLscan2\ncat MySQLscan2\n",[196,852,853,857,862,887,907],{"__ignoreMap":252},[256,854,855],{"class":258,"line":259},[256,856,604],{"class":603},[256,858,859],{"class":258,"line":548},[256,860,861],{"class":603},"# سكربت للبحث عن أجهزة تعمل عليها MySQL\n",[256,863,864,866,868,871,873,876,878,881,884],{"class":258,"line":612},[256,865,822],{"class":262},[256,867,835],{"class":270},[256,869,870],{"class":270}," 192.168.181.0\u002F24",[256,872,841],{"class":270},[256,874,875],{"class":334}," 3306",[256,877,267],{"class":266},[256,879,880],{"class":270},"\u002Fdev\u002Fnull",[256,882,883],{"class":270}," -oG",[256,885,886],{"class":270}," MySQLscan\n",[256,888,889,892,895,897,899,902,904],{"class":258,"line":737},[256,890,891],{"class":262},"cat",[256,893,894],{"class":270}," MySQLscan",[256,896,274],{"class":266},[256,898,303],{"class":262},[256,900,901],{"class":270}," open",[256,903,267],{"class":266},[256,905,906],{"class":270}," MySQLscan2\n",[256,908,909,911],{"class":258,"line":749},[256,910,891],{"class":262},[256,912,906],{"class":270},[130,914,915],{},"كل سطر هنا له وظيفة:",[917,918,919,929,935,944],"ol",{},[189,920,921,924,925,928],{},[196,922,923],{},"nmap -sT ... -p 3306",": فحص شبكة كاملة (",[196,926,927],{},"\u002F24"," تعني كل الشبكة الفرعية) بحثًا عن المنفذ 3306.",[189,930,931,934],{},[196,932,933],{},">\u002Fdev\u002Fnull",": إخفاء المخرجات العادية (يُرسل الناتج إلى \"اللامكان\" — أداة تخفٍّ بسيطة لكن فعالة).",[189,936,937,940,941,943],{},[196,938,939],{},"-oG MySQLscan",": حفظ النتائج بصيغة يسهل على ",[196,942,285],{}," تصفيتها.",[189,945,946,949,950,150],{},[196,947,948],{},"grep open",": تصفية النتائج للإبقاء فقط على المنافذ ",[139,951,952],{},"المفتوحة",[181,954,956],{"id":955},"السكربت-المتقدم-إضافة-التفاعل","🚀 السكربت المتقدم: إضافة التفاعل",[130,958,959],{},"بدمج ما تعلمناه في بداية الفصل (القراءة من المستخدم)، نجعل السكربت أكثر مرونة بحيث يسأل المستخدم عن نطاق العناوين والمنفذ المطلوب بدلًا من كتابتها يدويًا في الكود كل مرة:",[247,961,963],{"className":249,"code":962,"language":251,"meta":252,"style":252},"#! \u002Fbin\u002Fbash\necho \"Enter the starting IP address : \"\nread FirstIP\necho \"Enter the last octet of the last IP address : \"\nread LastOctetIP\necho \"Enter the port number you want to scan for : \"\nread port\nnmap -sT $FirstIP-$LastOctetIP -p $port >\u002Fdev\u002Fnull -oG MySQLscan\ncat MySQLscan | grep open > MySQLscan2\ncat MySQLscan2\n",[196,964,965,969,980,987,998,1005,1016,1024,1055,1072],{"__ignoreMap":252},[256,966,967],{"class":258,"line":259},[256,968,604],{"class":603},[256,970,971,973,975,978],{"class":258,"line":548},[256,972,616],{"class":615},[256,974,619],{"class":266},[256,976,977],{"class":270},"Enter the starting IP address : ",[256,979,404],{"class":266},[256,981,982,984],{"class":258,"line":612},[256,983,706],{"class":615},[256,985,986],{"class":270}," FirstIP\n",[256,988,989,991,993,996],{"class":258,"line":737},[256,990,616],{"class":615},[256,992,619],{"class":266},[256,994,995],{"class":270},"Enter the last octet of the last IP address : ",[256,997,404],{"class":266},[256,999,1000,1002],{"class":258,"line":749},[256,1001,706],{"class":615},[256,1003,1004],{"class":270}," LastOctetIP\n",[256,1006,1007,1009,1011,1014],{"class":258,"line":757},[256,1008,616],{"class":615},[256,1010,619],{"class":266},[256,1012,1013],{"class":270},"Enter the port number you want to scan for : ",[256,1015,404],{"class":266},[256,1017,1019,1021],{"class":258,"line":1018},7,[256,1020,706],{"class":615},[256,1022,1023],{"class":270}," port\n",[256,1025,1027,1029,1031,1034,1037,1040,1043,1046,1049,1051,1053],{"class":258,"line":1026},8,[256,1028,822],{"class":262},[256,1030,835],{"class":270},[256,1032,1033],{"class":465}," $FirstIP",[256,1035,1036],{"class":270},"-",[256,1038,1039],{"class":465},"$LastOctetIP ",[256,1041,1042],{"class":270},"-p",[256,1044,1045],{"class":465}," $port ",[256,1047,1048],{"class":266},">",[256,1050,880],{"class":270},[256,1052,883],{"class":270},[256,1054,886],{"class":270},[256,1056,1058,1060,1062,1064,1066,1068,1070],{"class":258,"line":1057},9,[256,1059,891],{"class":262},[256,1061,894],{"class":270},[256,1063,274],{"class":266},[256,1065,303],{"class":262},[256,1067,901],{"class":270},[256,1069,267],{"class":266},[256,1071,906],{"class":270},[256,1073,1075,1077],{"class":258,"line":1074},10,[256,1076,891],{"class":262},[256,1078,906],{"class":270},[130,1080,1081,1082,1085],{},"بهذا السكربت الصغير جدًا (أقل من 10 أسطر)، صنعنا فعليًا ",[139,1083,1084],{},"أداة استطلاع شبكي قابلة لإعادة الاستخدام"," — بالضبط نفس الفكرة التي استخدمها Max Butler، لكن هنا لأغراض تعليمية ودفاعية. هذا هو جوهر ما يعنيه الكاتب بقوله في بداية الفصل إن الهاكر \"يجب أن يكتب سكربتاته بنفسه\".",[181,1087,1089],{"id":1088},"جدول-أوامر-bash-المدمجة","🧰 جدول أوامر Bash المدمجة",[130,1091,1092,1093,1096,1097,1099,1100,1103,1104,1107,1108,1111],{},"يختم الفصل بجدول مرجعي لأوامر bash المدمجة الأكثر فائدة، أبرزها: ",[196,1094,1095],{},"exit"," (إنهاء الجلسة)، ",[196,1098,341],{}," (تصدير متغير)، ",[196,1101,1102],{},"jobs"," (عرض المهام في الخلفية)، ",[196,1105,1106],{},"shift"," (لمعالجة معاملات السكربت واحدًا تلو الآخر)، و",[196,1109,1110],{},"trap"," (لمعالجة الإشارات، وإلا ستُنهي السكربت تلقائيًا).",[152,1113],{},[125,1115,1117],{"id":1116},"اقتباسات-هذا-الجزء-تستحق-التوقف-عندها","💎 اقتباسات هذا الجزء تستحق التوقف عندها",[186,1119,1120,1126,1132],{},[189,1121,1122,1125],{},[134,1123,1124],{},"\"عليك أن تفهم متغيرات البيئة... من أجل أفضل أداء، وراحة، بل وحتى التخفّي.\""," — كلمة \"التخفي\" هنا تربط موضوعًا يبدو إداريًا بالجانب الهجومي للأمن السيبراني مباشرة.",[189,1127,1128,1131],{},[134,1129,1130],{},"\"أي هاكر يحترم نفسه يجب أن يكون قادرًا على كتابة السكربتات.\""," — الجملة التي تفصل \"مستخدم أدوات جاهزة\" عن \"هاكر حقيقي.\"",[189,1133,1134],{},"قصة Max Butler — درس حي في كيف تتحول مهارة تقنية بسيطة (سكربت فحص منافذ) إلى قوة هائلة، للخير أو للشر، حسب من يستخدمها ولماذا.",[125,1136,1138],{"id":1137},"خلاصة-الجزء","🎯 خلاصة الجزء",[130,1140,1141],{},"في هذين الفصلين انتقلنا من \"استخدام لينكس\" إلى \"برمجة لينكس ليعمل لصالحنا\". تعلمنا كيف نتحكم ببيئة عملنا وحتى نخفي آثارنا فيها عبر المتغيرات، وكتبنا — للمرة الأولى في هذه السلسلة — أداة اختراق حقيقية وقابلة لإعادة الاستخدام بأقل من 10 أسطر كود. هذه هي اللحظة التي يتحول فيها القارئ من \"متعلّم أوامر\" إلى \"بانٍ لأدواته الخاصة\" — بالضبط ما وعد به الكتاب منذ سطره الأول.",[130,1143,1144,1145,142,1148,1151],{},"في الحلقة القادمة ننتقل إلى ",[139,1146,1147],{},"الفصل التاسع: الضغط والأرشفة",[139,1149,1150],{},"الفصل العاشر: إدارة نظام الملفات وأجهزة التخزين"," — حيث نتعلم كيف نتعامل مع الملفات الكبيرة والأقراص كما يفعل أي مسؤول أنظمة محترف. 🚀",[1153,1154,1155],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}",{"title":252,"searchDepth":548,"depth":548,"links":1157},[1158,1159,1167,1175,1176],{"id":127,"depth":548,"text":128},{"id":156,"depth":548,"text":157,"children":1160},[1161,1162,1163,1164,1165,1166],{"id":183,"depth":612,"text":184},{"id":222,"depth":612,"text":223},{"id":309,"depth":612,"text":310},{"id":361,"depth":612,"text":362},{"id":434,"depth":612,"text":435},{"id":520,"depth":612,"text":521},{"id":568,"depth":548,"text":569,"children":1168},[1169,1170,1171,1172,1173,1174],{"id":585,"depth":612,"text":586},{"id":699,"depth":612,"text":700},{"id":791,"depth":612,"text":792},{"id":811,"depth":612,"text":812},{"id":955,"depth":612,"text":956},{"id":1088,"depth":612,"text":1089},{"id":1116,"depth":548,"text":1117},{"id":1137,"depth":548,"text":1138},"2026-09-19","md","\u002Fimg\u002Fhacker.png",{},true,{"title":14,"description":252},"uxzJnWyxqBs-iSaf4lchruC3WBO5zMeleILfDXvUn9U",[1185,1186],{"title":10,"path":11,"stem":12,"description":252,"children":-1},{"title":18,"path":19,"stem":20,"description":252,"children":-1},1791619510424]