نحوه ضبط و پخش جلسات ترمینال لینوکس با استفاده از دستورات script و scriptreplay
در این راهنما ما قصد داریم به نحوه استفاده از دستورات script و scriptreplay در لینوکس کمک کنیم که می تواند به شما در ضبط دستورات و خروجی آنها در ترمینال شما در طی یک جلسه داده شده، کمک کند.
بنابراین دستور script مفید است تا به شما یک قابلیت قدرتمند بدهد تا به شما کمک کند هر چیزی را که در ترمینال خود در یک log_file چاپ شده است، ضبط کنید. بعدا می توانید به این فایل مراجعه کنید در صورتی که می خواهید خروجی یک فرمان در تاریخ از log_file را ببینید.
شما همچنین می توانید با استفاده از اطلاعات زمان بندی دستورات را که با استفاده از دستور scriptreplay ثبت کرده اید بازیابی کنید.
نحوه ضبط کردن ترمینال لینوکس با استفاده از فرمان script
فرمان script عملیات ترمینال را در یک فایل log ذخیره می کند که می تواند توسط یک کاربر نامگذاری شود، زمانی که یک نام توسط کاربر ارائه نمی شود، نام پرونده پیش فرض استفاده می شود.
شکل پایه فرمان script
1 |
# script [options] - -timing=timing_file log_filename |
برای شروع ضبط ترمینال لینوکس، script را تایپ کنید و نام فایل را وارد کنید، همانطور که نشان داده شده است.
1 2 |
tecmint@tecmint ~ $ script history_log.txt Script started, file is history_log.txt |
برای توقف script، exit را تایپ و [Enter] را فشار دهید.
1 2 |
tecmint@tecmint ~ $ exit Script done, file is history_log.txt |
اگر اسکریپت نمیتواند به فایل ورودی نامی بنویسد، آن را یک خطا نشان می دهد. به عنوان مثال، در خروجی زیر، مجوزی از دستورالعمل فایل اجازه خواندن، نوشتن و اجرای فایل را توسط کاربر یا گروه نمی دهد. هنگام اجرای فرمان اسکریپتی بدون یک نام فایل log، تلاش می کند تا به فایل پیشفرض، دستورالعمل چاپ و سپس خطای نمایش داده شود.
1 2 3 4 5 |
tecmint@tecmint ~ $ ls -l typescript --------- 1 ubuntu ubuntu 144 Sep 15 00:00 typescript tecmint@tecmint ~ $ script script: open failed: typescript: Permission denied Terminated |
مثال هایی از استفاده از فرمان اسکریپت
من اسکریپت log file خود را در مثال زیر به نام script.log نامگذاری کرده ام، می توانید فایل خود را به نام دیگری بدهید.
1 |
tecmint@tecmint ~ $ script script.log |
اکنون سعی کنید چند فرمان را اجرا کنید تا اسکریپت بتواند دستورات اجرا شده در ترمینال را ضبط کند.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
tecmint@tecmint ~ $ cal September 2015 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 tecmint@tecmint ~ $ w 14:49:40 up 4:06, 2 users, load average: 1.37, 1.56, 1.62 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT tecmint tty8 :0 10:45 4:06m 7:40 0.36s x-session-manager tecmint pts/5 :0 13:42 4.00s 0.07s 0.00s script script.log tecmint@tecmint ~ $ uptime 14:49:43 up 4:06, 2 users, load average: 1.37, 1.56, 1.62 tecmint@tecmint ~ $ whoami tecmint tecmint@tecmint ~ $ echo 'using script' using script tecmint@tecmint ~ $ exit exit Script done, file is script.log |
حالا سعی کنید فایل ‘script.log’ را برای تمام دستورات ضبط شده مشاهده کنید، در حالی که شما log را می بینید که متوجه شده اید که اسکریپت همچنین فید های خط و back spaces را ذخیره می کند.
1 |
tecmint@tecmint ~ $ vi script.log |
خروجی مشابه
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
September 2015 ^M Su Mo Tu We Th Fr Sa ^M 1 2 3 4 5 ^M 6 7 8 9 10 11 12 ^M 13 14 15 ^[[7m16^[[27m 17 18 19 ^M 20 21 22 23 24 25 26 ^M 27 28 29 30 ^M ^M ^[[01;32mtecmint@tecmint^[[01;34m ~ $^[[00m w^M 14:49:40 up 4:06, 2 users, load average: 1.37, 1.56, 1.62^M USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT^M tecmint tty8 :0 10:45 4:06m 7:40 0.36s x-session-manager^M tecmint pts/5 :0 13:42 4.00s 0.07s 0.00s script script.log^M ^[[01;32mtecmint@tecmint^[[01;34m ~ $^[[00m uptime^M 14:49:43 up 4:06, 2 users, load average: 1.37, 1.56, 1.62^M ^[[01;32mtecmint@tecmint^[[01;34m ~ $^[[00m whoami^M tecmint^M ^[[01;32mtecmint@tecmint^[[01;34m ~ $^[[00m echo ''^Hu'^Hs'^Hi'^Hn'^Hg'^H '^Hs'^Hc'^Hr'^Hi'^Hp'^Ht'^H^M using script^M ^[[01;32mtecmint@tecmint^[[01;34m ~ $^[[00m exit^M exit^M Script done on Wednesday 16 September 2015 02:49:59 PM IST |
شما می توانید از گزینه -a برای اضافه کردن فایل ورود یا تایپ متن، حفظ محتویات قبلی استفاده کنید.
1 2 3 4 5 6 7 8 9 10 |
tecmint@tecmint ~ $ script -a script.log Script started, file is script.log tecmint@tecmint ~ $ date Wed Sep 16 14:59:36 IST 2015 tecmint@tecmint ~ $ pwd /home/tecmint tecmint@tecmint ~ $ whereis script script: /usr/bin/script /usr/bin/X11/script /usr/share/man/man1/script.1.gz tecmint@tecmint ~ $ whatis script script (1) - make typescript of terminal session |
محتویات اسکریپت را مشاهده کنید، پس از استفاده از گزینه -a برای اضافه کردن آن وارد شوید.
1 2 3 4 5 6 7 8 9 10 11 12 |
tecmint@tecmint ~ $ vi script.log ^[[0m^[[255D^[[01;32mtecmint@tecmint^[[01;34m ~ $^[[00m date^M Wed Sep 16 14:59:36 IST 2015^M ^[[01;32mtecmint@tecmint^[[01;34m ~ $^[[00m pwd^M /home/tecmint^M ^[[01;32mtecmint@tecmint^[[01;34m ~ $^[[00m whre^H^[[K^H^[[Kereis script^M script: /usr/bin/script /usr/bin/X11/script /usr/share/man/man1/script.1.gz^M ^[[01;32mtecmint@tecmint^[[01;34m ~ $^[[00m whatis script^M script (1) - make typescript of terminal session^M ^[[01;32mtecmint@tecmint^[[01;34m ~ $^[[00m vi s^H^[[K^H^[[K^H^[[K^H^[[Kexit^M exit^M |
برای ورود نتایج یک دستور به غیر از جلسه پوسته تعاملی، از گزینه -c استفاده کنید.
1 2 3 4 5 |
tecmint@tecmint ~ $ script -c 'hostname' script.log Script started, file is script.log tecmint.com Script done, file is script.log |
اگر می خواهید اسکریپت در حالت آرام اجرا شود، می توانید از گزینه -q استفاده کنید. شما پیامی دریافت نخواهید کرد که اسکریپت را شروع یا خروج کند.
1 2 3 4 |
tecmint@tecmint ~ $ script -c 'who' -q script.log tecmint tty8 2015-09-16 10:45 (:0) tecmint pts/5 2015-09-16 13:42 (:0) |
برای تنظیم اطلاعات زمان بندی به خطای استاندارد یا یک فایل از گزینه -timing استفاده کنید. اطلاعات زمان بندی زمانی مفید است که می خواهید مجددا نمایش خروجی ذخیره شده در log_file را مشاهده کنید.
اجازه دهید ما اسکریپت را شروع کنیم و دستورات زیر را اجرا کنیم: w، uptime و cal را برای ضبط.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
tecmint@tecmint ~ $ script --timing=time.txt script.log Script started, file is script.log tecmint@tecmint ~ $ w 15:09:31 up 4:26, 2 users, load average: 1.38, 1.39, 1.47 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT tecmint tty8 :0 10:45 4:26m 8:15 0.38s x-session-manager tecmint pts/5 :0 13:42 3.00s 0.09s 0.00s script --timing=time.txt script.log tecmint@tecmint ~ $ uptime 15:09:36 up 4:26, 2 users, load average: 1.43, 1.40, 1.48 tecmint@tecmint ~ $ cal September 2015 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
شما می توانید فایل script.log و time.txt را برای فرمان timing above ببینید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
tecmint@tecmint ~ $ vi script.log ^[[0m^[[255D^[[01;32mtecmint@tecmint^[[01;34m ~ $^[[00m w^M 15:12:05 up 4:28, 2 users, load average: 1.31, 1.37, 1.45^M USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT^M tecmint tty8 :0 10:45 4:28m 8:20 0.38s x-session-manager^M tecmint pts/5 :0 13:42 5.00s 0.09s 0.00s script --timing=time.txt script.log^M ^[[01;32mtecmint@tecmint^[[01;34m ~ $^[[00m uptime^M 15:12:07 up 4:28, 2 users, load average: 1.29, 1.36, 1.45^M ^[[01;32mtecmint@tecmint^[[01;34m ~ $^[[00m cal^M September 2015 ^M Su Mo Tu We Th Fr Sa ^M 1 2 3 4 5 ^M 6 7 8 9 10 11 12 ^M 13 14 15 ^[[7m16^[[27m 17 18 19 ^M 20 21 22 23 24 25 26 ^M 27 28 29 30 ^M ^M |
اکنون فایل time.txt را مشاهده کنید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
tecmint@tecmint ~ $ vi time.txt 0.259669 306 0.037680 829 0.000006 2 0.000002 100 0.000002 2 0.000002 102 0.000019 202 0.000004 2 0.000002 102 0.000015 100 0.000002 2 0.000003 2 0.000002 99 0.000011 2 0.000003 82 ... |
فایل time.txt دارای دو ستون است، ستون اول نشان می دهد که چه مقدار از زمان گذشته از آخرین نمایش داده شده است و ستون دوم، تعداد کاراکترهایی را که در این زمان نمایش داده شده نشان می دهد.
از صفحه man و -help برای جستجوی گزینه های بیشتر و کمک به استفاده از ابزار خط فرمان اسکریپت استفاده کنید.
با استفاده از scriptreplay برای پخش اسکریپت ها با استفاده از اطلاعات زمان بندی
دستور scriptreplay کمک می کند تا اطلاعات را در log_file ثبت شده توسط فرمان اسکریپت پخش کنید.
اطلاعات زمان بندی توسط گزینه -timing = file مورد استفاده با دستور script تعریف شده و در این مورد file.txt است که با دستور script مورد استفاده قرار می گیرد.
به خاطر داشته باشید که شما نیاز به مشخص کردن log_file که با دستور script استفاده می کنید. حالا اجازه دهیم که سه دستورالعمل آخر، ساعت، زمان و کل را اجرا کنیم که به صورت زیر اجرا شده است.
1 |
tecmint@tecmint ~ $ scriptreplay --timing=time.txt script.log |
هنگامی که فایل log_file با استفاده از اطلاعات زمان بندی پخش می شود، دستورات ضبط شده اجرا می شوند و خروجی آنها همزمان نمایش داده می شود و خروجی اصلی در هنگام ضبط نمایش داده می شود.
دستورات ضبط شده اجرا می شوند و خروجی آنها همزمان نمایش داده می شود و خروجی اصلی در هنگام ضبط نمایش داده می شود.