در کارگاه امروز به کار کردن با فایل های متنی در لینوکس با ابزارهای head, tail, cat, tac, more, less و strings  می پردازیم و همچنین نگاه اجمالی به امکانات دستور cat خواهیم داشت.

کارگاه لینوکس پیش رو برای علاقمندان قطعا جالب خواهد بود.

Head

با دستور head شما می توانید 10 خط اول فایل های متنی را مشاهده نمایید

[root@server10 ~]# head /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
[root@server10 ~]#

دستور head این قابلیت را دارد که خروجی را با تعداد خطوط دلخواه شما چاپ کند. برای مثال می خواهیم فقط ۴ خط خروجی بدهد:

head -4 /etc/passwd

tail

دستور tail عملکردی همانند دستور head را دارد با این تفاوت که ۱۰ خط آخر یک فایل را نمایش می دهد.

 

tail /etc/services

اگر به دستور دوم زده شده در تصویر فوق دقت کرده باشید حتما به این پی برده اید که دستور tail هم مانند head با بکار گیری – و سپس عدد قابلیت تعیین سطر را دارد.

شما با زدن دستور زیر مشخص میکنید که فقط ۳ خط چاپ شود.

tail -3 /etc/services

دستور tail کاربرد های بسیاری دارد که مدیران سرور برای خواندن لاگ از آن استفاده می کنند. در قسمت های بعدی شکل تکامل یافته این دستور را توضیح خواهیم داد.

 

دستور cat

دستور cat یک ابزار جهانی به شمار می رود. با این ابزار شما می توانید کارهای زیادی انجام دهید. این دستور می تواند ورودی ها را در قالب یک خروجی استاندارد به نمایش بگذارد و اگر بناست که فایل بسیار طولانی را به نمایش بگذارد بصورت خودکار به سطح آخر اسکرول انجام می دهد.

cat /etc/resolv.conf

ادغام یا concatenate خروجی از قابلیت های دستور cat است.

برای فهم راحت این قابلیت ما قصد داریم ۳ فایل با محتویات مختلف ایجاد کنیم. ابتدا هر کدام رو جداگانه نمایش میدهیم و در پایان قابلیت concatenate را به شما نشان می دهیم. لطفا دستورات وارد شده در تصویر زیر را به دقت مشاهده نمایید

tarimehr@learning:~$ echo mehrdad >pouyasazan1
tarimehr@learning:~$ echo tari >pouyasazan2
tarimehr@learning:~$ echo tarimehr >pouyasazan3
tarimehr@learning:~$ cat pouyasazan1
mehrdad
tarimehr@learning:~$ cat pouyasazan2
tari
tarimehr@learning:~$ cat pouyasazan3
tarimehr
tarimehr@learning:~$ cat pouyasazan1 pouyasazan2 pouyasazan3
mehrdad
tari
tarimehr
tarimehr@learning:~$ 

 

 

با دستور cat شما می توانید فایل ایجاد کنید. سریعترین نوع ایجاد فایل که در همان لحظه متن آن را هم وارد می کنید می توان گفت همین روش است.

 

tarimehr@learning:~$ cat >pouyasazan.txt
salam
in yek mesal baraye sakht file ba dastor cat ast 

ba in dastor mitavanid matn ra vared konid


dar payad ba Ctrl + d in file sakhte mishavad

tarimehr@learning:~$ cat pouyasazan.txt 
salam
in yek mesal baraye sakht file ba dastor cat ast 

ba in dastor mitavanid matn ra vared konid


dar payad ba Ctrl + d in file sakhte mishavad

tarimehr@learning:~$

با دستور cat و در ادامه آن نام فایل را تعیین میکنید.

یکبار اینتر بزنید تا بتوانید متن را نیز وارد کنید.

 

پس از وارد کردن متن مورد نظرتان کافیست یکبار دکمه های ترکیبی ctrl + d را همزمان فشار دهید تا فایل ذخیره شود.

 

در واقع شما با زدن ctrl + d سیگنال EOF به سرور می فرستید که به معنای پایان کار end of file و به منزله پایان دستور cat است.

 

شما می توانید پایان را بصورت اتوماتیک هم تنظیم نمایید تا در صورت رسیدن به کلمه ای مشخص این دستور به کار خود پایان دهد.

cat >pouyasazan.txt << stop

طبق دستور فوق ما سیگنالی به سمت سرور ارسال می کنیم که میخواهیم فایلی بنام pouyasazan.txt ایجاد کرده و به محض دیدن عبارت stop در خط فرمان اقدام به ذخیره فایل نماید. کلمه stop کاملا دلخواه بوده و بصورت قراردادی نیست و میتواند هر چیزی جایگزین شود. در مثال زیر ما کلمه mehrdad را هدف قرار داده ایم تا به محض دریافت این عبارت در خط فرمان اقدام به ذخیره فایل کند.

tarimehr@learning:~$ cat >pouyasazan.txt << mehrdad
> salam
> ahval shoma
> be pouyasazan khosh amadid
> in amozesh linux ast
> command cat
> mehrdad
tarimehr@learning:~$ cat pouyasazan.txt 
salam
ahval shoma
be pouyasazan khosh amadid
in amozesh linux ast
command cat
tarimehr@learning:~$

کار با دستورات لینوکس بسیار لذت بخش است.

 

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

tarimehr@learning:~$ cat pouyasazan.txt 
salam
ahval shoma
be pouyasazan khosh amadid
in amozesh linux ast
command cat
tarimehr@learning:~$ cat pouyasazan.txt > mehrdad.txt
tarimehr@learning:~$ cat mehrdad.txt 
salam
ahval shoma
be pouyasazan khosh amadid
in amozesh linux ast
command cat
tarimehr@learning:~$ 

دستور tac

دستور cat را کاملا برعکس بنویسید. همانطور که این دستور قابلیت برعکس نوشتن را دارد قابلیت برعکس به نمایش گذاشتن را نیز دارد.

یعنی از خط آخر به اول برایمان خروجی تولید می کند.

tarimehr@learning:~$ cat mehrdad.txt 
salam
ahval shoma
be pouyasazan khosh amadid
in amozesh linux ast
command cat
tarimehr@learning:~$ tac mehrdad.txt 
command cat
in amozesh linux ast
be pouyasazan khosh amadid
ahval shoma
salam
tarimehr@learning:~$

دستور more و  less

 

برخی مواقع خروجی بسیار زیاد بوده و در یک اسکرین گنجانده نمی شود. برای اینکه خروجی را بتوانیم مدیریت شده ورق بزنیم و مطالعه کنیم از دستور  more یا less می توانیم استفاده کنیم

cat /etc/services |less
cat /etc/services |more

با زدن اینتر خطوط بعدی و یا ادامه مطلب را به شما نشان می دهد.

با زدن q از محیط خارج شده و خط فرمان فعال می شود.

 

 

اگر این مطلب را با دقت خوانده اید باید بتوانید تمرینات زیر را به سادگی انجام دهید:

۱- لطفا ۱۲ خط ابتدایی فایل services واقع در پوشه etc را بصورت خروجی در ترمینال لینوکس چاپ کنید.

۲- لطفا خط آخر فایل /etc/passwd را در ترمینال بصورت خروجی چاپ کنید

۳- لطفا یک فایل بنام tamrin.txt با دستور cat ایجاد کنید به گونه ای که محتویات آن به صورت زیر باشد:

khat aval
khat dovom
khat sevom
khat charom
khat panjom

۴- با استفاده از دستور cp یک بکاپ از فایل tamrin.txt گرفته و با نام backup.txt آن را ذخیره کنید.

۵- با استفاده از دستور cat لطفا از فایل backup.txt بکاپ تهیه کنید و آن را با نام cat-backup.txt ذخیره کنید.

۶- لطفا فایل cat-backup.txt را بصورت کاملا وارونه و برعکس در ترمینال چاپ کنید. طوری که خط آخر آن به عنوان خط اول خروجی باشد.

۷- دستور more را برای چاپ /etc/services بکار بگیرید و سطح یادگیری خودتان را امتحان کنید.

 

اگر هنوز concatenate رو به یاد میارید خودتون یک مسئله برای به چالش کشیدن خودتون طرح کنید.

 

در صورت داشتن سوال میتونید زیر همین مطلب با ما در ارتباط باشید و جواب این تمرین ها رو از ما بخواید.

 

 

طبقه بندی شده در:

لینوکس, مبانی لینوکس,

آخرین به روز رسانی: 5 شهریور 1403