با سلام
برای همهی ما ممکن است پیش بیاید که سروری داشته باشیم
که از طریق کارت HBA به استوریج ارتباط
داشته باشد و دیسکهایی از استوریج به آن
present شده باشد. اگر دیسک
جدیدی به سیستم عامل present شده باشد، یک راه
برای دیدن آن ریبوت کردن سیستم عامل است. ولی این راه راه حلی مناسبی محسوب نمیشود.
راه حل بهتر
rescan کردن SCSI bus است.
برای این منظور از
echo "- - -" > /sys/class/scsi_host/host<H>/scan
استفاده میکنیم.
برای سهولت بیشتر شما میتوانید package به نام fibreutils را نصب کنید که چند دستور کاربردی را در اختیار شما میگذارد:
/usr/bin/adapter_info
/usr/bin/hp_rescan
/usr/bin/lssd
/usr/bin/lssg
/usr/bin/scsi_info
از طریق adapter_info شما قادر خواهید بود مشخصات کارتهای HBA خود را ببینید
از طریق hp_rescan میتوانید کار اسکن را روی تمام کارتها از طریق سوئیچ -a انجام دهید
scsi_info هم مشخصات کاملی از دیسک مورد نظر به شما میدهد.
با عرض سلام مجدد، اگر شما با سیستمها و سرورهای enterprise کار کرده باشید میدانید که گاهی ممکن است نیاز باشد تعداد زیادی log را که به طور مثال در یک دایرکتوری هستند را پاک کنید یا حداقل با توجه به زمان بخواهید که لاگ فایلهای ۵ روز آخر را نگه داشته و باقی را پاک کنید. اگر تعداد فایلها زیاد باشد شما در استفاده از دستور rm با پیغام زیر مواجه میشوید:
-bash: /bin/rm: Argument list too long
که این پیغام به دلیل زیاد بودن تعداد فایلها میباشد.
برای رفع این مشکل شما میتوانید از دستورات زیر استفاده کنید
find /u01/app/11.2.0/grid/cdata/xxx-cluster/* -mtime +5 -exec rm -f {} \;
برای اینکه قبل از انجام عمل پاک کردن از فایلهایی که قرار است پاک شوند لیستی داشته باشید تا بتوانید آن را چک کنید از دستور زیر استفاده کنید:
find /u01/app/11.2.0/grid/cdata/xxx-cluster/* -mtime +5 -exec ls -lrt {} \;
در دستور find سوئیچ mtime به معنای زمان modify شدن است. سوئیچهای دیگری نیز در find وجود دارد (atime,ctime,…) که بنا به نیاز میتوان از هریک از آنها استفاده کرد.
نکته: سه نوع timestamp وجود دارد:
میتوانیم دستور بالا را به صورت زیر نیز اجرا کنیم:
find /u01/app/11.2.0/grid/cdata/xxx-cluster/* -mtime +5 -exec ls -lrt {} +
تفاوت exec ls -lrt {} + و exec ls -lrt {} \; :
تفاوت در {} + و {} \; است که با توجه به نیاز باید از یکی از آنها استفاده کرد. {} + تمام خروجی دستور find را به صورت یکجا به ls میدهد ولی {} \; تک تک خروجیهای find را به صورت یک به یک به ls میدهد.
توضیحات بیشتر در مورد تفاوت در
https://askubuntu.com/questions/339015/what-does-mean-in-a-linux-command
با سلام و عرض ادب، مسئله ای دیگهای که اکثر ادمینها با آن درگیر هستند، اجرای یک دستور است که ممکن است زمان زیادی نیاز داشته باشد و همواره با مسائلی از قبیل قطع شدن شبکه و یا time out شدن ارتباط آنها با سرور روبرو هستند. از اینرو به معرفی یک utility به نام screen میپردازیم:
طرز کار این برنامه بسیار ساده است. برای شروع قبل از زدن دستور مورد نظر، میبایست دستور screen زده شود. پس از آن میتوان دستورات مورد نظر را زد و حتی shell موجود را بست (دستور مورد نظر در background اجرا خواهد شد).
حال شما قادر خواهید بود در shell جدیدی (البته با همان کاربر) دستور خود را به foreground برگردانید.
با یک مثال ساده کار را جلو میبریم:
با نرمافزاری مانند putty به سرور موردنظر متصل شوید و دستور screen را بزنید:
#screen
سپس دستور top را بزنید:
#top
Putty خود را ببندید و یا برای Detach کردن دستور از shell از ctrl+A و در ادامه دکمهی d استفاده کنید. در همین لحظه که شما Putty را بستهاید دستور top در سرور در حال اجرا است. شما میتوانید با استفاده از یک shell جدید و دستور screen -ls لیست screenهای خود را ببینید و با دستور screen -r screen_id دستور را به shell جدید منتقل کنید.
#screen -ls
There is a screen on:
26319.pts-3.mahmoud-pc (Detached)
1 Socket in /var/run/screen/S-mahmoud.
ما میتوانیم بدون در نظر گرفتن shell قبلی، در shell جدید دستور top را ظاهر کنیم. برای این منظور ابتدا باید Detach انجام شود (درصورت باز بودن shell قبلی و Attached بودن دستور) و پس از آن دستور Attach مجدد.
#screen -dr 26319.pts-3.mahmoud-pc
سوئیچ d وظیفهی Detach کردن و r وظیفهی Attach کردن مجدد را
به عهده دارند و 26319.pts-3.mahmoud-pc نشان دهندهی screen id است.
شما برای kill کردن screen خود بدون باز کردن و Attach کردن آن میتوانید از دستور زیر استفاده کنید:
screen -X -S <sessionid> kill
ممکن است برای هر کدام از ما پیش
بیاید که بخواهیم یک فایل اسکریپت که حاوی پسورد است را روی سیستم عامل قرار دهیم
که در زمانهای مشخص اجرا گردد (این اسکریپت میتواند برای اتصال به اوراکل باشد
یا انجام کار روی سیستم عامل یا هر موضوع دیگر). clear text بودن
این فایل همواره دارای ریسک زیادی است. برای کاهش این ریسک باید فایل اسکریپت رو از حالت clear text
در بیاوریم. برای این موضوع از utility
به نام shc استفاده میکنیم.
پیش نیاز نصب این برنامه libc.so.6 است پس در ابتدا به نصب آن میپردازیم:
#yum install libc.so.6
پس از آن به نصب shc میپردازیم ( شایان ذکر است این دستورات روی خانوداهی RedHat6 اجرا شده است و شما باید با توجه به نسخه سیستم عامل خود پکیجهای مناسب را انتخاب کنید)
#rpm -ivh shc-3.8.6-1.el6.rf.x86_64.rpm
در این مثال میخواهیم فایل اسکریپتی به نام program.sh را مورد آزمایش قرار دهیم:
# shc -rT -f program.sh
program.sh.x.c: In function 'chkenv':
program.sh.x.c:927:10: warning: cast from pointer to integer of different size
[-Wpointer-to-int-cast]
این برنامه دو خروجی به ما میدهد که فایل مورد نظر ما پسوند x. به خود میگیرد
# ./program.sh.x
Hello world !
-----------------------------------------------
اخطار:
طی تجربهای که امروز (شهریور ۱۳۹۷) داشتم، پس از اجرای بکاپ اوراکل دیتابیس که در crontab گذاشته بودم و به صورت فایل .x تبدیل شده بود، پس از زدن دستور ps مشاهده کردم که متاسفانه پسورد دیتابیس به صورت clear در نتیجهی دستور ps مشاهده میشد که اصلا امر قابل قبولی برای ما نیست.
بنده سعی در پیدا کردن راهی جدید خواهم بود و به محض یافتن راه جدید آن را با شما دوستان به اشتراک خواهم گذاشت.