از اونجایی که تمام سوییچ ها رو حفظ نیستم؛ یه ترمینال باز کردم و در خط فرمان نوشتم :
[/code]man gzip
و دنبال سوییچ گشتم
-c
دیدم نوشته:
تمامی خروجیها رو در خروجی استاندارد مینویسه
دستور زیر:
gzip -c /bin/bash > sample.gz
میاد فایل بش (bash) رو میگیره و تبدیل به فایل فشرده میکنه ؛ و خروجی رو در فایل sample.gz مینویسه؛ درواقع الان یه فایل فشرده شده استاندارد داریم
دستور زیر:
gzip -dc fuzzed.gz > /dev/null
تلاش میکنه تا فایل دستکاری شده رو از حالت فشرده خارج کنه؛ سویچ d برای اینه که از حالت فشرده خارج کنیم
خروجی رو فایل null مینویسه؛ که منظورش اینه که خروجی دستور gzip رو نمیخوام ببینم و لازم نیست نشنونمون بده
دستگاه null جاییه که هرچی بهش بفرستی هیچ اتفاقی نمیافته و نابود میشه
test $? -gt 127 && break
و دستور بالا یک عبارت شرطی هستش ؛
$?
یعنی کد خروجی آخرین برنامه؛ که توی مورد بالا اخرین برنامه ای که اجرا شده میشه gzip
* کد خروجی حالت برنامه رو پس از اجرا مشخص میکنه؛ اگه اجرای برنامه درست بود و با موفقت اجرا شد 0 هستش؛ در غیر اینصورت یه عدد دیگه هستش که استاندارد خاصی نداره؛
-gt
یعنی بزرگتر از
&&
به زبان ساده یعنی اگه دستورمون درست بود عبارت بعدی رو اجرا کن
در زبان غیر ساده کد خروجی دستور قبلی رو که test هستش رو میگیره؛ چون لازمهی عبارت and اینه که اگه قسمت اول درست بود احتیاج به تست قسمت دوم داره (جون فقط 1 & 1 = 1) ؛ در نتیجه بناچار قسمت دوم رو هم اعتبار سنجی میکنه
break
هم باعث این میشه از حلقه خارج بشیم
درکل معنی عبارت بالا اینه که اگر کد خروجی gzip بزرگتر ۱۲۷ بود از حلقه خارج شد
حالا چرا ۱۲۷ را انتخاب کرده نمیدونم