یکی از روشهای مرسوم برای جستوجوی عبارت در سیستمهای برپایهٔ یونیکس استفاده از دستور grep هست و در قریب به اتفاق توزیعهایی که از هسته لینوکس استفاده میکنند به صورت پیشفرض نصب هست. اگر فرض رو بگذاریم بر اینکه شما یک رایانهٔ معمولی دارید و قصد جستوجوی عبارتی خاص در میان ۵۰۰ گیگابایت فایل (ASCII) را کردهاید، استفاده از grep در چنین موقعیتی بسیار هزینهبر هست (منابع-زمان) یک جایگزین مناسب برای این دستور که در بین مدیران سیستمها و کاربران یونیکس علاقهمندان زیادی رو به خودش جذب کرده ripgrep هست.
خوشبختانه این ابزار در مخازن توزیعهای پرکاربر لینوکس گنجانده شده، برای نصب در اوبونتو یا دبیان با استفاده از apt:
sudo apt install ripgrep
یکی از آزمایشهای جالبی که برای مقایسه grep (GNU grep) و ripgrep شده جستوجوی یک عبارت در فایلی تقریبا ۱۳ گیگابایتی است که در آن ripgrep بیش از ۳برابر در زمان عملکرد بهتری نسبت به grep دارد و اگر از فلگ n (برای نمایش اینکه عبارت مدنظر ما در کدام خط از فایل قرار دارد) استفاده شود ripgrep در 3.423 و grep در 13.031 ثانیه قادر به اتمام فرآیند جستوجو و نمایش اطلاعات هستند. یعنی برتری نزدیک ۴ برابری ripgrep نسبت به grep در زمان جستوجو.
در اینجا ابزاری که برای بررسی عملکرد سرعت برنامهها به شکل CLI استفاده میشود hyperfine نام داره، برای آزمایش و بررسی سرعت عمل برنامهها شما میتوانید از هایپرفاین استفاده کنید.
غالبا کاربران لینوکس برای جستوجوی فایل درون سیستم خودشون از دستور find استفاده میکنند. find هم یکی از ابزارهایی هست که مبتنی بر استانداردهای POSIX و شبیه دستور grep که در بالا گفته شده به صورت پیشفرض روی بیشتر توزیعهای لینوکسی نصب شده هست. توی حالتی قرار گرفتید که پوشههای متعدد درهم و درون هر پوشه هزاران فایل با انواع فرمت و انواع نام داشته باشید و قصد بکنید فایلی رو پیدا بکنید؟ دو حالت رو متصور هستیم در چنین شرایطی که یا با استفاده از مدیریت فایل و یا با استفاده از دستور find دنبال این فایل میگردید.
استفاده از دستور find در تصویری که کمی بالاتر قرار گرفته رو مشاهده میکنید و مقایسه find با fd که در اون دستور fd در شرایطی یکسان سرعتی چند برابر نسبت به دستور find رو داره.
Benchmark #1: find ~ -iregex '.*[0-9]\.jpg$' Time (mean ± σ): 7.236 s ± 0.090 s Range (min … max): 7.133 s … 7.385 s
استفاده از find بدون الگوهای regex که سرعت بهتری رو به این ابزار میده:
Benchmark #2: find ~ -iname '*[0-9].jpg' Time (mean ± σ): 3.914 s ± 0.027 s Range (min … max): 3.876 s … 3.964 s
و اما دستور fd:
Benchmark #3: fd -HI '.*[0-9]\.jpg$' ~ Time (mean ± σ): 811.6 ms ± 26.9 ms Range (min … max): 786.0 ms … 870.7 ms
و یک شوخی کوچک:
For this particular example,fd
is approximately nine times faster thanfind -iregex
and about five times faster thanfind -iname
. By the way, both tools found the exact same 20880 files ?.
نصب از مخازن اوبونتو یا دبیان:
sudo apt install fd-find
فدورا:
dnf install fd-find
آرچ:
pacman -S fd
پیوند به مخزن این برنامه در گیتهاب و دریافت نسخهٔ کامپایل شده برای توزیعها با معماریهای مختلف:
آیا ابزاری سریعتر از fd وجود دارد؟ پاسخ: بله، در شرایط متعددی ff سرعتی در حد چند میلیثانیه بیشتر از fd خواهد شد.
پیوند به مخزن ff:
دستور cat یکی از مهمترین دستورات مرتبط با متن در سیستمهای یونیکس/شبهیونیکس هست. خروجی این دستور رو وقتی مشاهده میکنید شاید بدون رنگ و لعاب بودنش به چشم بیاد، نبود امکان انتخاب بازهای برای نمایش خطوط و هماهنگی با git (کدهای جدید اضافه شده به برنامه یا حذف شده) و یا حتی صفحه بندی که دیگه نیاز نباشه فایلی رو با less یا more بخونیم یا آخر کار یک pipe و بعدش less نگذاریم و خیلی موارد دیگه که در cat احساس نیاز میشه به اونها، خبر خوش اینجاست که bat تمامی این امکانات و به همراه تعداد بیشتری قابلیتهای دیگر داره که هنگام کار با این ابزار متوجه خواهید شد.
این ابزار هم جای خودش رو در مخازن توزیعهای مختلف بازکرده و به سهولت امکان نصب اون رو در توزیع خودتون خواهید داشت. برای آشنایی بیشتر با این ابزار یا نصب از طرق مختلف نگاهی داشته به مخزن این برنامه در گیتهاب:
ابزار lsd نسل نو و جایگزینی مناسب برای دستور ls هست. تصویر زیر میتونه گویای همهچیز باشه:
جایگزینی دیگر برای ls هست با کارایی بیشتر از نمایش درختی پوشهها و فایلها (که شما بینیاز به نصب دستور tree خواهید شد) تا نمایش آیکنها.
دستور exa را میتوان طبق گفتهٔ برنامهنویس آن جایگزینی جدید و کارا برای دستور ls دانست.
6. ytop
از دستور top برای نمایش پروسههای در حال اجرا روی سیستم خودتون استفاده میکنید؟ جایگزین خوبی که منابع کمی از سیستم شما رو میگیره ytop نام داره که استفاده از اون دشواری نداره و میشه اون رو یکی از گزینههای خوب برای استفاده جای top دانست. در این میان برنامهٔ htop هم جایگاه خوبی داره و امکاناتی درخور رو داراست.
https://github.com/cjbassi/ytop
7. dust
از برای اطلاع از اوضاع ظرفیت دیسک یا فضای که توسط فایلها اشغال شده از du استفاده میکنید؟ نگاهی به dust داشته باشید، ابزاری که تمام امکانات du را به همراه امکانات جانبی دارد که با وجود آن مشتری dust خواهید شد وقتی که میخواهید ببینید فضای ذخیرهسازی در سیستم شما به چه شکل است یا کدام فایل یا پوشه حجم بیشتری را در بر میگیرد.
8. sd
شاید sed را بتوان یک ابزار تمام عیار برای جایگزینی عبارتهای متنی در سیستمهای یونیکسی دانست. کار با sed شاید مهارتهای خاصی را بطلبد و پیچدگی هم داشته باشد. sd این مشکلات را رفع کرده به گونهای که تنها عباراتی که قصد تغییرشان را دارید با عبارت جدید جایگزین کنید بدون هیچ دردسر دیگری.
نکتهای که خوبه به اون توجه بشه سرعت بالای sd در مقابل sed هست که هنگام کار با فایلهایی که حجم بالایی دارند به اون پی خواهید برد. این سرعت گاه تا ۱۲ برابر بیشتر هم خودش رو نشون میده.
Command Mean [s] Min…Max [s]
sed -E "s:(\w+):\1\1:g" dump.json >/dev/null 11.315 ± 0.215 11.102…11.725 sed 's:\(\w\+\):\1\1:g' dump.json >/dev/null 11.239 ± 0.208 11.057…11.762 sd "(\w+)" "$1$1" dump.json >/dev/null 0.942 ± 0.004 0.936…0.951
dump.json حجمی تقریبا معادل ۵۵ مگابایت دارد.
9. teip
دستور sd که بالا معرفی شد جایگزینی بود برای sed، یک ابزاری که هم کار sed و هرآنچه با awk میشه با اون انجام داد دستور teip هست.