آشنایی با دستور touch در لینوکس + مثال های پرکاربرد
یکی از بزرگترین چالشهای هر فردی پس از خرید سرور مجازی لینوکس و وارد شدن به دنیای سیستمعاملهای لینوکسی کار کردن با دستورها و ترمینال است. یکی از این دستورها، دستور کاربردی touch است.
دستور touch از دسته دستورات بنیادی در محیط لینوکس محسوب میشود. اگرچه اصلیترین کاربرد دستور touch در لینوکس تغییر timestampهای فایل هاست، اما این دستور برای ایجاد فایل جدید نیز به کار میرود. ضمنا با این دستور میتوان چندین فایل را بصورت همزمان ایجاد کرد یا برچسب زمان آنها را تغییر داد.
در دریای بیکران دستورات لینوکس، دستور چندکاره و بنیادی touch به عنوان یک ابزار برجسته شناخته میشود. کاربرد این دستور به فراتر از بهروزرسانی برچسب زمانی یا timestamp گام گذاشته تا دستور touch در جایگاه یک ابزار مفید با گسترهای از کاربردها قرار گیرد.
اگر با سیستم عاملی بر پایه هسته لینوکس یا سرور مجازی لینوکس سروکار دارید بهتر است این مقاله را تا پایان بخوانید و حالات مختلف دستور touch آموزش دادهشده را در ترمینال خود امتحان کنید تا به آنها مسلط شوید.
در این مقاله به بررسی ریزهکاریهای دستور touch خواهیم پرداخت تا به دانش لینوکسیتان بیافزاییم. برای فهم عمیقتر این مطالب داشتن دانش تخصصی لینوکس و برنامه نویسی خالی از لطف نیست.
Timestamp یا مهر زمان چیست + انواع آن
بخاطر سر و کار داشتن دستور touch با برچسبهای زمان یا همان timestamps بهتر است در ابتدای کار آشنایی نسبی با این مفهوم بدست آوریم.
کلمه timestamp از استمپهای جوهری گرفته شده است که برای ثبت زمان جاری بر روی اسناد کاغذی در دفاتر استفاده میشد. این کلمه در دنیای تکنولوژی در فایلهای کامپیوتری، شبکه بلاکچین و دوربینهای دیجیتال بکار میرود.
برچسب زمان، مهر زمان یا همان timestamp به معنای ثانیههای سپری شده از ساعت 00:00:00 UTC روز اول ژانویه سال 1970 تا همین لحظه است.
timestamp عددی بر مبنای ثانیه است و این سیستم عامل ماست که آن را برایمان به شکل زمانی متشکل از سال، ماه، روز، ساعت، دقیقه و ثانیه درمیآورد. بهتر است برای دقت بیشتر ساعت سیستم لینوکس را بهروز نگهدارید.
انواع Timestamp یا برچسب زمان
یک فایل در سیستم عامل لینوکس دارای 3 نوع برچسب زمان یا همان Timestamp است:
1. زمان دسترسی یا atime (access time)
آخرین زمانی که فایل توسط دستور یا برنامهای بازشده است.
2. زمان اصلاح یا mtime (modify time)
آخرین زمانی که در محتوای فایل تغییری ایجاد شده است.
3. زمان تغییر یا ctime (change time)
آخرین زمانی که متادیتا یا فراداده فایل تغییر پیدا کردهاست. فراداده میتواند مواردی مانند مکان فایل، مجوزهای فایل و یا مالکیت فایل باشد.
دستور touch چیست؟
دستور touch یک دستور اساسی و مهم در لینوکس است که برای ایجاد تغییر در timestamps بکار میرود اما پتانسیلی فراتر از این عملکرد پایهای دارد. این دستور در مواردی مانند بهروزرسانی timestampهای اصلاح، تغییر و دسترسی یک فایل بکار رفته و توانایی ایجاد فایلهای جدید را نیز دارد.
این دستور ساده اما موثر از اصلیترین دستورهای مورد استفاده هر کاربر لینوکس است. ترکیب دستور یا syntax برای بهروزرسانی timestamp یک فایل با استفاده از دستور touch بصورت زیر است:
touch [options] filename
متغیر ‘filename’ نام فایلی است که مایل به ایجاد آن یا تغییر timestamp اش هستید و متغیر ‘options’ نحوه تنظیم عملکرد دستور touch را مشخص میکند. این دستور با و بدون options کار میکند.
موارد متداول استفاده از دستور touch در لینوکس
دستور touch استفادههای متنوعی دارد. به همین جهت در این قسمت انواع آن را باهم بررسی و تشریح میکنیم.
1. بروزرسانی timestampهای اصلاح و دسترسی فایل
عملکر پیشفرض دستور touch بدون هیچ تگی برای فایلی که وجود دارد، بهروزرسانی timestampهای اصلاح و دسترسی یا همان atime و mtime به زمان جاری سیستمعامل است. این کار به سادگی با قرار دادن نام فایل بعد از دستور touch و اجرای دستور اتفاق میافتد.
برای مثال، جهت بهروزرسانی همزمان atime و mtime فایل ‘example.txt’ باید بدین صورت کد را اجرا کنیم:
touch example.txt
همچنین میتوان با قراردادن کاراکترهای a- و m- به جای options به ترتیب برچسب زمان دسترسی یا atime و برچسب زمان اصلاح یا mtime فایل را به تنهایی تغییر داد:
touch -a example.txt
touch -m example.txt
2. ایجاد فایل جدید
برای ایجاد فایل جدید در سیستم عامل لینوکس از دو دستور cat و touch میتوانیم استفاده کنیم. از کامند cat برای ایجاد فایلی که محتوا دارد و از دستور touch برای ایجاد فایل خالی استفاده میشود.
اگر فایلی را گم کردهاید یا از وجودش مطمئن نیستید میتوانید از دستور find برای جستجوی فایل در سیستم عامل لینوکس استفاده کنید.
دستور touch در مواقعی که نیاز به ایجاد آنی یک فایل خالی دارید شدیدا مفید است. با این دستور میتوانید یک فایل خالی جدید ایجاد کنید:
touch <filename>
به عنوان مثال اگر فایلی با نام test وجود نداشته باشد، با وارد کردن دستور زیر ایجاد میشود:
touch test
با کدهای زیر میتوانید بطور همزمان چندین فایل خالی با دستور touch ایجاد کنید.
در این کد کافیست به جای <filename> اسم فایلها را قرار دهید.
touch <filename> <filename>
به عنوان مثال:
touch test1 test2
برای ایجاد فایلهای جدید و خالی بصورت انبوه از این کد میتوانید استفاده کنید. در این دستور اسم فایل و عنصر اول و آخر اسم را باید به ترتیب بهجای filename و start و finish قرار دهید.
touch <filename{<start>..<finish>}>
مثلا ده فایل با استفاده از ارقام 1 تا 10 میخواهیم بسازیم:
touch test{1..10}
یا فایلهایی با حروف a تا j میخواهیم بسازیم:
touch test_{a..j}
دقت کنید که نمیتوانید همزمان از کلمات و اعداد در این ترکیب استفاده کنید.
همینطور در مواقعی که از وجود یا عدم وجود فایلی مطلع نیستید و فقط میخواهید timestamp آن را در صورت وجود تغییر دهید و فایل جدیدی ایجاد نکنید، مانند کد زیرین عبارت c- را در قسمت options قرار دهید.
touch -c <filename>
مثلا دستور زیر timestamp برچسب زمانی فایل new_test را تغییر میدهد و در صورت عدم وجود این فایل، فایل جدیدی ایجاد نمیکند.
touch -c new_test
3. تنظیم یک Timestamp خاص در لینوکس
با استفاده از دستور touch میتوان یک Timestamp خاص تنظیم کرد. این دستور در مواقعی که با اسکریپتها سروکاردارید یا میخواهید سناریوهایی را تست کنید که به Timestampهای خاصی نیاز دارند پرکاربرد است. جهت انجام این کار چندین روش در اختیار داریم:
a) تگ t-
در اولین روش بعد از دستور touch عبارت t- را قرار داده و بعد از آن Timestamp دلخواه را در فرمت زیر وارد کنید و در آخر اسم فایل را قرار دهید.
[[CC]YY]MMDDhhmm[.ss]
شرح فرمت زمانی از آغاز تا پایان به صورت زیر است:
- CC: دو کاراکتر آغازین سال
- YY: دو کاراکتر پایانی سال
- MM: کاراکترهای ماه
- DD: کاراکترهای روز
- hh: کاراکترهای ساعت
- mm: کاراکترهای دقیقه
- ss: کاراکترهای ثانیه
برای مثال:
touch -t 199901010000 test
در این مثال timestampهای فایل test به زمان ساعت 00:00:00 یکم ژانویه 1999 تنظیم شد.
b) تگ d-
با استفاده از تگ d- و یک date string در دستور touch میتوان هر سه برچسب زمانی را به زمان دلخواه تغییر داد.
touch -d <string> <filename>
اگر بخواهیم برچسبهای زمانی فایلی را به ساعت 10:28 روز 27 می 1998 تغییر دهیم باید دستور زیر را اجرا کنیم:
touch -d '27 May 1998 10:28' example.txt
دقت کنید که رشته تاریخ یا date string باید در یک single quote قرار بگیرد.
رشته تاریخ یا date string فرمتی منعطف است که فرمهای نوشتاری محاورهای را نیز پشتیبانی میکند. صرفا با ارائه تاریخ در همین کد میتوان برچسب زمان فایل را به سال جاری تغییر داد. این رشته را بصورتهای زیر میتوانید در کد وارد کنید:
- تاریخ در فرمت تقویم مانند 19 August 2020
- زمانی از روز مانند 8:02am یا 9:27pm
- روزی از روزهای هفته مانند Sunday
- تاریخهای نسبی مانند 5 years ago یا yesterday و یا next tuesday
برای مثال جهت تغییر مهرزمان فایل test با تگ d- به فردا کد زیر را اجرا میکنیم:
touch -d tomorrow test
c) تگ r-
با بهرهگیری از آپشن r- میتوان timestampهای فایلی را بر timestampهای یک فایل دیگر تنظیم کرد. با این کار از برچسبهای زمانی فایلی خاص بعنوان زمان جاری برای فایل مدنظرمان استفاده میکنیم.
touch -r <reference file> <file>
دستور زیر مهرهای زمانی فایل test را بعنوان زمان جاری فایل new_test ست میکند:
touch -r test new_test
d) تگهای ترکیبی
از آپشنهایی که گفته شد میتوان بصورت ترکیبی نیز بهره برد. شرح آن چنین است:
- تغییر atime به زمانی خاص:
touch -at <timestamp> <filename>
- تغییر mtime به زمانی خاص:
touch -mt <timestamp> <filename>
- تغییر همزمان mtime و atime به زمانی خاص:
touch -amt <filename>
در صورت صلاحدید میتوانید از تگ d- نیز بجای t- همانند مثالهای بالا استفاده کنید.
4. بهروزرسانی Timestamp همزمان چندین فایل
دستور touch این امکان را به شما میدهد تا Timestamp چند فایل را بصورت همزمان آپدیت کنید. فقط لازم است اسم فایلها را بعنوان argument پشت سر هم در دستور touch بنویسید تا فایلها آپدیت شوند. مثلا دستور :
touch file1.txt file2.txt file3.txt
timestampهای اصلاح و دسترسی سه فایل file1.txt و file2.txt و file3.txt را بهروز میکند.
5. تغییر مهرزمان Symbolic Links
با قراردادن h- در قسمت options کد touch میتوان برچسب زمان یک Symbolic Link را بدون تغییر Timestamp فایلهای رفرنسشده تغییر داد.
touch -h <filename>
مثلا کد:
touch -h link
برچسب زمان symbolic link را به زمان جاری تغییر میدهد و با فایل رفرنس کاری ندارد.
اما اگر تگ h- را در دستور touch قرار ندهیم، دستور touch برچسب زمان فایل رفرنسشده را تغییر میدهد و برچسب زمان symbolic link را دستنخورده باقی میگذارد.
touch link
سخن آخر
دستور touch رکن اساسی دستورات مورد نیاز هر کاربر لینوکس است که در مدیریت فایل، تست اسکریپت و وظایف متنوع دیگر به وی یاری میرساند. هر کاربری با فراگیری کاربردها و optionهای آن میتواند بهطور قابل توجهی بهرهوری و کارآیی خود در محیط لینوکس را بهبود بخشد.
اگر لازم است که timestamps را آپدیت کنید، سریعا فایل جدیدی ایجاد کنید یا صرفا برای تست timestampهای خاصی تنظیم کنید، دستور touch در سادهسازی انجام این کارها به یاریتان خواهد شتافت.
ساده بودن کاربرد این دستور شاید باعث ایجاد تصور اشتباه در مورد قدرتش شود اما این دستور ابزاری قدرتمند برای کاربران تازهکار و حرفهای لینوکس است.
در پایان گفتنی است که دستور touch ابزاری ضروری برای هر کاربر لینوکسی است و داشتن درکی صحیح از کاربردها و آپشنهای متنوع این دستور بیشک استفاده از محیط لینوکس را بهینهتر خواهد کرد.