با استفاده از دستور tee می توانید خروجی یک فرمان را بین ترمینال و فایل های لینوکس تقسیم کنید.
لینوکس به شما امکان می دهد خروجی فرمان را در فایل ها به عنوان وسیله ای برای تغییر مسیر خروجی ذخیره کنید. هنگامی که خروجی را در فایلی با استفاده از عملگرهای > یا >> ذخیره می کنید، خروجی بدون نمایش هیچ اطلاعاتی در ترمینال هدایت می شود.
اما اگر بخواهید خروجی را روی صفحه چاپ کنید و همزمان در یک فایل ذخیره کنید، چه؟ اگرچه با عملگرهای تغییر مسیر خروجی نمی توانید این کار را انجام دهید، اما با استفاده از دستور tee در لینوکس می توانید این کار را انجام دهید.
نحو دستور پایه
tee یک ابزار استاندارد لینوکس است که برای تقسیم خروجی یک فرمان بین خروجی استاندارد و فایل ها استفاده می شود.
برخلاف اکثر دستورات لینوکس، تی با سایر برنامه ها با استفاده از لوله (|) استفاده می شود. اپراتور لوله – یکی از بسیاری از اپراتورهای خط فرمان در لینوکس – به برنامه اجازه می دهد از خروجی فرمان دیگری به عنوان ورودی استفاده کند. ممکن است هنگام استفاده از grep در کنار دستور ls یا cat از pipe استفاده کرده باشید.
سینتکس اصلی دستور tee به صورت زیر است:
command | tee options filepath
… که در آن گزینه ها و مسیر فایل آرگومان های خط فرمان و مسیر فایلی است که می خواهید خروجی را در آن ذخیره کنید.
تقسیم خروجی ترمینال در لینوکس با سه راهی
ساده ترین استفاده از سه راهی، تقسیم خروجی برای نمایش آن در ترمینال و همچنین ذخیره آن در یک فایل است. به عنوان مثال، برای ذخیره خروجی دستور ls در یک فایل متنی به نام output.txt، اجرا کنید:
ls | tee ./output.txt
خروجی محتویات دایرکتوری کاری فعلی را طبق معمول نمایش می دهد. با بررسی فایل output.txt، متوجه خواهید شد که سه خروجی را نیز در فایل ذخیره کرده است.
هنگامی که یک مسیر فایل را مشخص می کنید، تی بررسی می کند که آیا فایل وجود دارد یا خیر. اگر یکی را پیدا نکرد، به طور خودکار فایل را برای شما ایجاد می کند و استفاده از آن را در اسکریپت های پوسته راحت می کند. زمانی مفید است که می خواهید خروجی یک برنامه یا اسکریپت را برای ارجاع بعدی ثبت کنید.
برای خواندن یا ذخیره داده ها در فایلی که متعلق به کاربر root است، باید دستور tee را با sudo مقدمه کنید.
اگر فایل مشخص شده دارای داده های ذخیره شده در داخل آن است که نمی خواهید بازنویسی کنید، به جای پاک کردن کل فایل و سپس ذخیره داده ها، از پرچم -a برای اضافه کردن خروجی به فایل استفاده کنید:
ls | tee -a ./output.txt
به طور مشابه، می توانید خروجی را به چندین فایل با مشخص کردن مسیرهایی که با فاصله های منفرد از هم جدا شده اند هدایت کنید:
ls | tee ./output1.txt ./output2.txt
گاهی اوقات، خطاهای غیرمنتظره یا وقفههای دستی (با استفاده از Ctrl + C یا Ctrl + Z) در دستور قبلی میتواند باعث خروج Tee شود. برای نادیده گرفتن چنین وقفه هایی، از پرچم -i استفاده کنید:
ls | tee -i output.txt
برای دریافت راهنمایی خط فرمان در مورد سه راهی یا یافتن جزئیات نسخه، از پرچم های –help و –version به صورت زیر استفاده کنید:
tee --help
tee --version
تغییر مسیر خروجی به دستور دیگری
شما می توانید یک زنجیره خروجی با لوله گذاری تی با سایر دستورات لینوکس ایجاد کنید. با انجام این کار خروجی در فایل مشخص شده ذخیره می شود و سپس برای پردازش به دستور بعدی منتقل می شود.
از فرمت زیر برای تغییر مسیر خروجی tee به دستور دیگری استفاده کنید:
command | tee filepath | othercommand
به عنوان مثال، دستور زیر خروجی فرمان ls را قبل از اینکه در نهایت برای جستجوی سریع به grep هدایت شود، در output.txt ذخیره می کند:
ls | tee output.txt | grep "Documents"
به طور کلی، می توانید از دستور tee برای بازی با ورودی و خروجی استاندارد در لینوکس استفاده کنید.
دستکاری خروجی و متن با دستورات لینوکس
دستور tee عملکرد بسیار مورد نیاز را به اپراتورهای استاندارد تغییر مسیر خروجی در لینوکس اضافه می کند. حتی می توانید از آن برای دستکاری خروجی یک دستور قبل از ارسال آن به برنامه دیگر استفاده کنید.
به طور مشابه، می توانید متن را با استفاده از ترمینال با کمک برخی از دستورات استاندارد لینوکس تغییر دهید. ممکن است کمی طول بکشد تا به آنها عادت کنند، اما در نهایت، دستکاری متن از طریق خط فرمان برای هر مدیر سیستم ارزش یادگیری دارد.