در کارگاه امروز به کار کردن با فایل های متنی در لینوکس با ابزارهای 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 رو به یاد میارید خودتون یک مسئله برای به چالش کشیدن خودتون طرح کنید.
در صورت داشتن سوال میتونید زیر همین مطلب با ما در ارتباط باشید و جواب این تمرین ها رو از ما بخواید.