دوست خوب هکرم میلاد زنگنه نکته جالبی رو بهم یادآوری کرده:
امروز یه چیز جالب دیدم که نشون میده که برنامه هایی مثل cat و … خروجی کاملی از اون چیزی که واقعا درون فایل هست بهمون نشون نمیدن. برای مثال:
دلیل این اتفاق اینه که cat واقعا همه کاراکترها رو به همون شکلی که هستن توی خروجی استاندارد برامون چاپ نمیکنه و وقتی به \033[2A ( یا بطور کلی تر \033[XA )میرسه یکار خاص میکنه. این عبارت باعث میشه وقتی برنامه به این قسمت رسید به تعداد X خط (توی این مثال X دو هست) کرسر رو بالا ببره و باعث بشه X خط بالایی بازنویسی شه و در نتیجه باعث بشه ما گول بخوریم!
چنین چیزی ممکنه خیلی برای افراد عادی با اهمیت جلوه نکنه اما برای ادمین ها و لینوکسی ها که دائم با اسکرپت ها سرو کار دارن مهمه چون با همچین حقه ای ممکنه بدون اینکه بفهمن اسکریپت های مخربی رو اجرا کنن.
حرفش کاملا درسته و اکثرا هم میدونیم که Escape Characterها میتونن خروجی ترمینال رو تغییر بدن (مثلا رنگی کنن، پاک کنن، جابجا کنن، …) ولی اکثرا توجه نمیکنیم که یک اسکریپت در cat ممکنه چیز دیگه ای از اون چیزی که واقعا هست نشون داده بشه. در کل همیشه میگیم که بدون فهمیدن هیچ چیزی نباید روی کامپیوترتون اجراش کنین و الان ظاهرا باید بگیم که بعضی اسکریپت ها حتی ممکنه اون چیزی که در لحظات اول به نظر میرسن هم نباشن! یک مدیر سیستم مثل گرگ با چشم باز میخوابه!
پی.نوشت. ایریکس اشاره کرد که میشه از سوییچ A در دستور cat استفاده کرد تا همه کاراکترها اونطوری که واقعا هستن دیده بشن (زندگی از این سوییچها نداره؟ البته اگر داشت خیلی لوس می شد فضا)