شما برای مطالعه این مقاله فقط 5 دقیقه وقت نیاز دارید

tee-command-in-linux
دسته بندی : آموزش لینوکس

دستور tee در لینوکس

5/5 - (1 امتیاز)

اصلی ترین کاربرد دستور tee در لینوکس، ذخیره سازی خروجی دستور یا فایل اجرایی موردنظر در یک فایل متنی است. به عنوان مثال، اگر می خواهید لیست فایل های موجود در مسیر فعلی ترمینال را همراه با جزئیات در یک فایل ذخیره کنید، می توانید با استفاده از نماد پیپ ( | ) دو دستور ls و tee را به صورت زیر با هم ترکیب کنید.

ذخیره خروجی یک دستور، نظارت خروجی یک فرآیند و ترکیب خروجی چند دستور از مهم ترین کاربرد های دستور tee است.

ls -l | tee file_list.txt

اگر از طرفداران پروپاقرص لینوکس هستید و می خواهید برای پیاده سازی تسک ها و پروژه های موردنظر خود از یک سرور لینوکس استفاده کنید، می توانید به صفحه خرید سرور مجازی لینوکس مراجعه کنید و پلن ایده آل خود را سفارش دهید.

نصب دستور tee در لینوکس

دستور tee بخشی از پکیج coreutils است و تمام توزیع های لینوکس به طور پیش فرض مجهز به این دستور هستند. برای اطمینان از این قضیه می توانید از دستور زیر استفاده کنید:

which tee

اگر خروجی این دستور، مسیر فایل اجرایی tee را نشان می دهد پس دستور tee از قبل روی سیستم شما نصب شده است.

در غیر اینصورت باید این دستور را در توزیع لینوکس خود نصب کنید:

Ubuntu و Debian

sudo apt install tee

CentOS و RHEL

sudo yum install tee

Arch Linux

sudo pacman -S tee

Fedora

sudo dnf install tee

حالا که از نصب دستور tee در لینوکس خود مطمئن شدید، نوبت به یادگیری سینتکس و آپشن های آن می رسد.

سینتکس دستور tee

سینتکس اصلی دستور tee در لینوکس به صورت زیر است:

tee [OPTIONS] [FILE]

همانطور که از سینتکس هم متوجه می شوید، دستور tee خروجی مربوط به دستور یا فایل اجرایی را را در FILE ذخیره می کند.

OPTIONS هم تعیین کننده نحوه برخورد دستور tee با خروجی دستور موردنظر هستند. 

آپشن های مهم دستور tee

آپشنکاربرد
a- یا append–اضافه کردن خروجی به انتهای فایل موردنظر (بدون بازنویسی)
i- یا ignore-interrupts–نادیده گرفتن سیگنال های توقف
p-تشخیص خطاهای مربوط به نوشتن دستورات بدون pip
version–مشاهده ورژن دستور tee
help–نمایش آپشن ها و اطلاعات مربوط به دستور tee

مثال های کاربردی از دستور tee در لینوکس

تا اینجا با سینتکس و آپشن های دستور tee آشنا شدیم و الان نوبت به بررسی انواع مثال های کاربردی در زمینه نحوه استفاده از دستور tee در لینوکس می رسد. 

نوشتن خروجی دستور echo در یک فایل 

دستور echo برای نمایش متن های مختلف استفاده می شود. ساده ترین نمونه آن، نمایش Hello World است. 

echo "Hello world"

حالا اگر می خواهید خروجی این دستور یعنی Hello World را در فایل hello.txt ذخیره کنید، می توانید از دستور زیر استفاده کنید:

echo "Hello world" | tee hello.txt

این دستور،هم خروجی Hello world را در ترمینال نشان می دهد و هم اینکه در مسیر فعلی ترمینال، یک فایل به اسم hello.txt ایجاد می کند و خروجی Hello World را در آن ذخیره می کند.

ذخیره خروجی دستور ls در یک فایل 

برای این کار کافیست در مسیر موردنظر قرار بگیرید و سپس، دستور ls و tee را به صورت زیر ترکیب کنید:

ls | tee directory-listing.txt

این دستور، فایل ها و دایرکتوری های موجود در مسیر فعلی ترمینال را نشان می دهد و همچنین، اسم آنها را در یک فایل به اسم directory-listing.txt ذخیره می کند.

ذخیره سازی وضعیت هارددیسک در فایل

برای اینکه تمام اطلاعات مربوط به فضای دیسک را در یک فایل ذخیره کنید، کافیست دستور df و tee را به صورت زیر با هم ترکیب کنید:

df -h | tee disk_usage.txt

اگر محتویات مسیر فعلی ترمینال را بررسی کنید، می بینید که یک فایل به اسم disk_usage.txt ایجاد شده است و اطلاعات مربوط به هارددیسک در آن ذخیره شده است.

نوشتن خروجی یک دستور در چند فایل

دستور tee در لینوکس این امکان را به شما می دهد که خروجی مربوط به دستور را در چند فایل ذخیره کنید. 

برای این کار کافیست اسم فایل ها را به ترتیب در بخش مربوط به دستور tee لحاظ کنید و آنها را با یک فاصله از هم جدا کنید. 

دستور زیر یک مثال واضح برای این کاربرد tee است:

du -h | tee disk_usage1.txt disk_usage2.txt disk_usage3.txt

نوشتن خروجی در یک فایل موجود (بدون بازنویسی)

اگر در مسیر فعلی ترمینال، فایل خاصی را در نظر دارید و می خواهید خروجی دستور موردنظر را در آن دستور ثبت کنید ولی تمایلی به overwrite کردن آن ندارید، می توانید از آپشن a استفاده کنید.

کلیک کنید  تنظیم ساعت/تاریخ و Timezone در لینوکس اوبونتو، دبیان، centos

این آپشن از بازنویسی فایل موردنظر جلوگیری می کند و محتوای جدید را به انتهای فایل اضافه می کند. بدون اینکه محتوای قبلی آن تحت تاثیر قرار بگیرند یا تغییر پیدا کنند.

du -h | tee -a disk_usage.txt

اگر از این آپشن استفاده نکنید، محتویات فایل موردنظر با خروجی جدید جایگزین می شود و هیچ رد و نشانی از محتویای قبلی آن باقی نمی ماند.

ذخیره خروجی چند دستور با tee

دستور tee در لینوکس انعطاف زیادی دارد و همین باعث می شود که کاربردهای زیادی داشته باشد. کافیست استراتژی درستی را برای تکنیک piping ( | ) در نظر بگیرید و سپس از دستور tee استفاده کنید.

به عنوان مثال، اگر می خواهید فقط لاگ های حاوی ERROR را در یک فایل به اسم error-log ذخیره کنید، کافیست دستور زیر را اجرا کنید:

cat logfile.txt | grep "ERROR" | tee error-log.txt

یا اگر می خواهید فایل ها و دایرکتوری هایی که دارای پیشوند file هستند را در فایل output.txt ذخیره کنید و تعداد آنها را هم در ترمینال مشاهده کنید، می توانید از دستور زیر استفاده کنید:

ls file* | tee output.txt | wc -l

می بینید که با تکنیک pip می توانید خروجی یک دستور را به عنوان ورودی دستور بعدی لحاظ کنید و از این طریق به اطلاعات و هدف موردنظر خود دست پیدا کنید.

پنهان کردن خروجی دستور در ترمینال

اگر فقط می خواهید خروجی دستور یا دستورات موردنظر را در فایل ذخیره کنید و تمایلی به مشاهده خروجی در ترمینال ندارید، می توانید خروجی را به دستگاه dev/null/ ریدایرکت کنید.

برای این کار کافیست دستور موردنظر را به صورت زیر اجرا کنید:

echo "Hello but ignore it" | tee output.txt > /dev/null

نادیده گرفتن وقفه ها موقع ثبت خروجی

کاربران لینوکس از کلید ترکیبی Ctrl+c برای ارسال سیگنال توقف استفاده می کنند. وظیفه پیش فرض این کلید ترکیبی، خاتمه دادن به فرآیند فعلی است. اگر می خواهید از تاثیر این کلید ترکیبی در روند اجرای دستور tee جلوگیری کنید، می توانید از آپشن i- استفاده کنید.

استفاده از این آپشن باعث می شود که حتی درصورت فشردن Ctrl+c و قطع اجرای دستور موردنظر، دستور tee به درستی اجرا شود و تا نقطه توقف فرآیند، تمام اطلاعات را به طور کامل در فایل موردنظر ثبت کند. 

یک نمونه جالب از دستور tee و آپشن i، دستور ping است:

ping google.com | tee -i exmaple.txt

این دستور، خروجی دستور ping را به درستی در فایل خروجی exmaple.txt ثبت می کند و حتی بعد از فشردن CTRL+C هم آن را با موفقیت کامل می کند.

نوشتن خروجی در یک فایل روت

اگر با استفاده از دستور tee می خواهید اطلاعات یا خروجی حاصل از دستور موردنظر را در یک فایل با امتیازات روت ذخیره کنید، حتماً باید در بخش tee از دستور sudo استفاده کنید.

این کار برای کسب مجوز لازم جهت نوشتن در فایل روت ضروری است. پس دستور tee را به صورت زیر اجرا کنید:

echo “Example” | sudo tee -a root_document.txt

ثبت خروجی اسکریپت bash

دستور tee در لینوکس برای ثبت خروجی اسکریپت های bash هم قابل استفاده است.

برای این کار کافیست فایل bash موردنظر را ایجاد کنید.

یک فایل با پسوند sh. ایجاد کنید و کد زیر را در آن کپی کرده و ذخیره کنید:

#!/bin/bash
a=$1
b=$2
((result=$a+$b))
echo "The addition of $a+$b=$result"

این کد، مجموع اعداد ورودی برای دو متغیر a و b را حساب می کند و در خروجی نمایش می دهد.

برای اجرای این فایل bash و ذخیره خروجی آن در فایل result.txt، دستور زیر را اجرا کنید:

bash add.sh 50 90 | tee result.txt

۵۰ و ۹۰، دو عدد ورودی هستند و مجموع آنها یعنی ۱۴۰ همان خروجی ما است که هم در ترمینال نمایش داده می شود و هم در فایل result.txt ذخیره می شود.

اگر می خواهید محتویات این فایل را بررسی کنید، می توانید از دستور زیر استفاده کنید:

cat result.txt

می بینید که دستور tee در لینوکس انعطاف و امکانات زیادی را برای شما فراهم کرده است. کافیست نکات لازم را از این مثال های ساده و سطحی یاد بگیرید و سپس از آنها برای پیاده سازی دستورات هدفمندتر خود استفاده کنید.

سخن آخر

دستور tee در لینوکس با هدف ثبت خروجی دستورات در یک فایل یا چند فایل استفاده می شود. اگر می خواهید از این دستور برای تسک های پیشرفته تر خود استفاده کنید، بهتر است قدم اول را با مثال های ساده این آموزش بردارید.

مطالب مشابهی که شاید علاقمند باشید

من زهرا پیرجانی دانشجوی رشته نرم افزار هستم. علاقه ای که به یادگیری مطالب جدید دارم باعث شد که انگیزم برای فعالیت در حوزه تولیدمحتوا بیشتر شود. تمام تلاشم این است که با درک کامل موضوع، محتوایی ساده و کامل تهیه کنم که برای همه علاقمندان مفید و کاربردی باشد. یادگیری مطالب جدید و آموزش اونها به بقیه، بهترین کاری هست که می توانم برای رشد خودم و همچنین کمک به رشد علاقمندان به مباحث مورنظر انجام بدم.

دیدگاه های شما

برای دریافت این مقاله لطفا ایمیلتان را وارد کنید

می توانید مقاله را دانلود کنید یا پرینت بگیرید