#ام_دی_کورس
استفاده از توابع در Bash
هیچ کدی رو دوباره ننویس، از تابع استفاده کن!
وقتی کدهای bashت بزرگ و بزرگ میشن، همه چی میتونه درهم و برهم بشه!
ممکنه ببینی که یه سری کد رو بارها و بارها تو قسمت های مختلف کد bashت دوباره مینویسی.
خوشبختانه، میتونی با استفاده از توابع در bash از دوباره نوشتن کد جلوگیری کنی که کدهات رو منظم تر و قابل خوندن تر می کنه.
تو این آموزش، یاد میگیریم که چطور تابع بسازیم، مقدار تابع رو برگردونیم، و آرگومان تابع رو تو اسکریپت های bash پاس بدیم.
علاوه بر این، یاد میگیریم که اسکوپ متغیرها(variables scope) چطور کار میکنه و چطور توابع بازگشتی رو تعریف کنیم.
ایجاد توابع در Bash
دو سینتکس مختلف برای ایجاد تابع bash وجود داره. سینتکس زیر رایج ترین روش ایجاد تابع bash هست:
👈یک تابع توابع هرگز اجرا نمیشه مگر اینکه تابع فراخوانی بشه.
👈تعریف تابع باید قبل از هر فراخوانی به تابع باشه.
هر وقت که بخواهیم تابعی اجرا بشه، فقط کافیه اون رو فراخوانی کنیم! فراخوانی تابع صرفا با اشاره به نام تابع انجام میشه.
به اسکریپت
🆔 @MdDaily
استفاده از توابع در Bash
هیچ کدی رو دوباره ننویس، از تابع استفاده کن!
وقتی کدهای bashت بزرگ و بزرگ میشن، همه چی میتونه درهم و برهم بشه!
ممکنه ببینی که یه سری کد رو بارها و بارها تو قسمت های مختلف کد bashت دوباره مینویسی.
خوشبختانه، میتونی با استفاده از توابع در bash از دوباره نوشتن کد جلوگیری کنی که کدهات رو منظم تر و قابل خوندن تر می کنه.
تو این آموزش، یاد میگیریم که چطور تابع بسازیم، مقدار تابع رو برگردونیم، و آرگومان تابع رو تو اسکریپت های bash پاس بدیم.
علاوه بر این، یاد میگیریم که اسکوپ متغیرها(variables scope) چطور کار میکنه و چطور توابع بازگشتی رو تعریف کنیم.
ایجاد توابع در Bash
دو سینتکس مختلف برای ایجاد تابع bash وجود داره. سینتکس زیر رایج ترین روش ایجاد تابع bash هست:
function_name () {
commands
}
روش دوم و کمتر رایج برای ایجاد تابع bash با کلمه کلیدی function شروع میشه و به دنبال اون نام تابع به صورت زیر هست:function function_name {
commands
}
حالا چند نکته مهم وجود داره که باید هنگام کار با توابع به اونها توجه کنیم:👈یک تابع توابع هرگز اجرا نمیشه مگر اینکه تابع فراخوانی بشه.
👈تعریف تابع باید قبل از هر فراخوانی به تابع باشه.
هر وقت که بخواهیم تابعی اجرا بشه، فقط کافیه اون رو فراخوانی کنیم! فراخوانی تابع صرفا با اشاره به نام تابع انجام میشه.
به اسکریپت
fun.sh زیر نگاه کنید:#!/bin/bashمن تو این اسکریپت، تابعی به اسم hello تعریف کردم که به سادگی خط "Hello World" رو تو ترمینال نشون میده. توجه کنید که من سه بار تابع hello رو صدا زدم و بنابراین اگر اسکریپت رو اجرا کنیم، خط "Hello World" سه بار روی صفحه چاپ میشه:
hello () {
echo "Hello World"
}
hello
hello
hello
linux@ubuntu:~$ ./fun.shادامه در پست بعدی...
Hello World
Hello World
Hello World
🆔 @MdDaily
❤🔥1❤1👍1
Md Daily
#ام_دی_کورس استفاده از توابع در Bash هیچ کدی رو دوباره ننویس، از تابع استفاده کن! وقتی کدهای bashت بزرگ و بزرگ میشن، همه چی میتونه درهم و برهم بشه! ممکنه ببینی که یه سری کد رو بارها و بارها تو قسمت های مختلف کد bashت دوباره مینویسی. خوشبختانه، میتونی…
#ام_دی_کورس
بازگشت مقادیر تابع در Bash
💡 در بسیاری از زبانهای برنامهنویسی، توابع هنگام صدا زدن مقداری رو برمیگردونند. اما این مورد در Bash صدق نمیکنه! چون توابع Bash مقادیری رو برنمیگردونند.
وقتی اجرای یک تابع Bash به پایان میرسه، وضعیت خروج آخرین دستور اجرا شده که در متغیر
میتونید از دستور return برای تغییر وضعیت خروج تابع استفاده کنید. برای مثال، به اسکریپت
همچنین باید توجه داشته باش که دستور return بلافاصله یک تابع رو خاتمه می ده.
ادامه در پست بعدی...
🆔 @MdDaily
بازگشت مقادیر تابع در Bash
💡 در بسیاری از زبانهای برنامهنویسی، توابع هنگام صدا زدن مقداری رو برمیگردونند. اما این مورد در Bash صدق نمیکنه! چون توابع Bash مقادیری رو برنمیگردونند.
وقتی اجرای یک تابع Bash به پایان میرسه، وضعیت خروج آخرین دستور اجرا شده که در متغیر
$? ذخیره شده است رو برمیگردونه. صفر نشاندهنده اجرای موفقیتآمیز یا یک عدد صحیح مثبت غیر صفر (1-255) برای نشاندادن شکست است.میتونید از دستور return برای تغییر وضعیت خروج تابع استفاده کنید. برای مثال، به اسکریپت
error.sh زیر نگاه کنید:#! /bin/bashاگر اسکریپت
error () {
blabla
return 0
}
error
echo "The return status of the error function is: $?"
error.sh رو اجرا کنید، ممکنه از خروجی تعجب کنید:linux@ubuntu:~$ ./error.shبدون دستور return 0، تابع error هرگز وضعیت خروج غیر صفر رو برنمی گردونه زیرا blabla منجر به خطای command not found می شه.
./error.sh: line 4: blabla: command not found
The return status of the error function is: 0
همچنین باید توجه داشته باش که دستور return بلافاصله یک تابع رو خاتمه می ده.
ادامه در پست بعدی...
🆔 @MdDaily
❤🔥1❤1
Md Daily
#ام_دی_کورس بازگشت مقادیر تابع در Bash 💡 در بسیاری از زبانهای برنامهنویسی، توابع هنگام صدا زدن مقداری رو برمیگردونند. اما این مورد در Bash صدق نمیکنه! چون توابع Bash مقادیری رو برنمیگردونند. وقتی اجرای یک تابع Bash به پایان میرسه، وضعیت خروج آخرین…
#ام_دی_کورس
ارسال آرگومان به تابع bash
میتونیم آرگومانها رو به یه تابع درست مثل آرگومانهایی که به یه اسکریپت bash میفرستیم، بفرستیم. فقط آرگومانها رو موقع فراخوانی تابع وارد میکنیم.
برای نشون دادنش توی عمل، بیایید نگاهی به اسکریپت
بیایید اسکریپت
ادامه در پست بعدی...
🆔 @MdDaily
ارسال آرگومان به تابع bash
میتونیم آرگومانها رو به یه تابع درست مثل آرگومانهایی که به یه اسکریپت bash میفرستیم، بفرستیم. فقط آرگومانها رو موقع فراخوانی تابع وارد میکنیم.
برای نشون دادنش توی عمل، بیایید نگاهی به اسکریپت
iseven.sh زیر بندازیم:#!/bin/bashتابع iseven() تست میکنه که یه عدد زوجه یا فرد. من چهار فراخوانی تابع برای iseven() انجام دادم. برای هر فراخوانی تابع، من یه عدد رو ارائه دادم
iseven () {
if [ $(($1 % 2)) -eq 0 ]; then
echo "$1 is even."
else
echo "$1 is odd."
fi
}
iseven 3
iseven 4
iseven 20
iseven 111
بیایید اسکریپت
iseven.sh رو اجرا کنیم تا مطمئن بشیم که کار میکنه:linux@ubuntu:~$ ./iseven.shهمچنین باید به خوبی آگاه باشیم که آرگومانهای تابع bash و آرگومانهای اسکریپت bash دو چیز متفاوت هستند. برای مقایسه تفاوت، نگاهی به اسکریپت
3 is odd.
4 is even.
20 is even.
111 is odd.
funarg.sh زیر بندازیم:#!/bin/bashاسکریپت رو با چند آرگومان اجرا میکنیم و نتیجه:
fun () {
echo "$1 is the first argument to fun()"
echo "$2 is the second argument to fun()"
}
echo "$1 is the first argument to the noscript."
echo "$2 is the second argument to the noscript."
fun Yes 7
linux@ubuntu:~$ ./funarg.sh Cool Stuffهمانطور که میبینید، حتی اگر از همون متغیرهای $1 و $2 برای اشاره به آرگومانهای اسکریپت و آرگومانهای تابع استفاده بشه، آنها نتایج متفاوتی رو هنگام فراخوانی از داخل یه تابع تولید میکنن.
Cool is the first argument to the noscript.
Stuff is the second argument to the noscript.
Yes is the first argument to fun()7 is the second argument to fun()
ادامه در پست بعدی...
🆔 @MdDaily
❤1❤🔥1👏1
Md Daily
#ام_دی_کورس ارسال آرگومان به تابع bash میتونیم آرگومانها رو به یه تابع درست مثل آرگومانهایی که به یه اسکریپت bash میفرستیم، بفرستیم. فقط آرگومانها رو موقع فراخوانی تابع وارد میکنیم. برای نشون دادنش توی عمل، بیایید نگاهی به اسکریپت iseven.sh زیر…
#ام_دی_کورس
متغیرهای محلی(Local) و سراسری(global) در توابع bash
متغیرهای bash میتونن دو تا دامنه داشته باشن: global و Local. متغیرهای global رو میشه از هر جای یه اسکریپت bash بهشون دسترسی داشت، اما متغیرهای Local فقط از داخل تابعی که تعریف شدن قابل دسترسی هستن.
برای مثال، به اسکریپت bash زیر نگاه کنید:
حالا بیایید اسکریپت را اجرا کنیم:
👈یک متغیر محلی که نامی مشابه یک متغیر سراسری دارد، بر متغیرهای سراسری در داخل بدنه تابع اولویت خواهد داشت.
👈میشه یک متغیر سراسری را از داخل یک تابع تغییر داد.
ادامه در پست بعدی...
🆔 @MdDaily
متغیرهای محلی(Local) و سراسری(global) در توابع bash
متغیرهای bash میتونن دو تا دامنه داشته باشن: global و Local. متغیرهای global رو میشه از هر جای یه اسکریپت bash بهشون دسترسی داشت، اما متغیرهای Local فقط از داخل تابعی که تعریف شدن قابل دسترسی هستن.
برای مثال، به اسکریپت bash زیر نگاه کنید:
#!/bin/bashابتدا دو متغیر سراسری v1 و v2 تعریف کردم. سپس در داخل تعریف myfun()، از کلمه کلیدی local برای تعریف یک متغیر محلی v1 و تغییر متغیر سراسری v2 استفاده کردم. توجه داشته باشید که میتونید از یک نام متغیر برای متغیرهای محلی در توابع مختلف استفاده کنید.
v1='A'
v2='B'
myfun() {
local v1='C'
v2='D'
echo "Inside myfun(): v1: $v1, v2: $v2"
}
echo "Before calling myfun(): v1: $v1, v2: $v2"
myfun
echo "After calling myfun(): v1: $v1, v2: $v2"
حالا بیایید اسکریپت را اجرا کنیم:
linux@ubuntu:~$ ./scope.shاز خروجی اسکریپت، میشه موارد زیر را نتیجه گرفت:
Before calling myfun(): v1: A, v2: B
Inside myfun(): v1: C, v2: D
After calling myfun(): v1: A, v2: D
👈یک متغیر محلی که نامی مشابه یک متغیر سراسری دارد، بر متغیرهای سراسری در داخل بدنه تابع اولویت خواهد داشت.
👈میشه یک متغیر سراسری را از داخل یک تابع تغییر داد.
ادامه در پست بعدی...
🆔 @MdDaily
👍2❤🔥1❤1
Md Daily
#ام_دی_کورس متغیرهای محلی(Local) و سراسری(global) در توابع bash متغیرهای bash میتونن دو تا دامنه داشته باشن: global و Local. متغیرهای global رو میشه از هر جای یه اسکریپت bash بهشون دسترسی داشت، اما متغیرهای Local فقط از داخل تابعی که تعریف شدن قابل دسترسی…
#ام_دی_کورس
توابع بازگشتی(Recursive functions)
یه تابع بازگشتی، تابعی هست که خودش رو فراخوانی میکنه! توابع بازگشتی زمانی مفید هستن که بخوای یه مشکل برنامهنویسی رو حل کنی که میتونه به زیرمشکلات کوچیکتر تقسیم بشه.
تابع فاکتوریل یه مثال کلاسیک از یه تابع بازگشتی هست. به اسکریپت bash زیر نگاه کن:
🆔 @MdDaily
توابع بازگشتی(Recursive functions)
یه تابع بازگشتی، تابعی هست که خودش رو فراخوانی میکنه! توابع بازگشتی زمانی مفید هستن که بخوای یه مشکل برنامهنویسی رو حل کنی که میتونه به زیرمشکلات کوچیکتر تقسیم بشه.
تابع فاکتوریل یه مثال کلاسیک از یه تابع بازگشتی هست. به اسکریپت bash زیر نگاه کن:
#!/bin/bashهر تابع بازگشتی باید با یک مورد پایه(base case) شروع شود که برای پایان دادن به زنجیره فراخوانی های تابع بازگشتی ضروری است. در تابع factorial()، مورد پایه به صورت زیر تعریف شده است:
factorial () {
if [ $1 -le 1 ]; then
echo 1
else
last=$(factorial $(( $1 -1)))
echo $(( $1 * last ))
fi
}
echo -n "4! is: "
factorial 4
echo -n "5! is: "
factorial 5
echo -n "6! is: "
factorial 6
if [ $1 -le 1 ]; thenاکنون مورد بازگشتی را برای تابع فاکتوریل استخراج کنید. برای محاسبه فاکتوریل یک عدد n که n یک عدد مثبت بزرگتر از یک است، می توانید n را در فاکتوریل n-1 ضرب کنید:
echo 1
factorial(n) = n * factorial(n-1)بیایید از معادله بالا برای نوشتن این مورد بازگشتی استفاده کنیم:
last=$(factorial $(( $1 -1)))حالا اسکریپت را اجرا میکنیم تا مطمئن بشیم که نتایج درست هستند:
echo $(( $1 * last ))
linux@ubuntu:~$ ./factorial.shادامه در پست بعدی...
4! is: 24
5! is: 120
6! is: 720
🆔 @MdDaily
❤2❤🔥1
❤2🔥1
#ام_دی_کورس
حالا می تونیم از تمام مهارت های bash که توی این سری آموزش bash یاد گرفتیم، برای ساختن برنامه های bash خیلی مفیدی استفاده کنیم که بهمون کمک کنه وظایف تکراری و کسل کننده رو خودکار کنیم.
تو این آموزش، ما چند برنامه اتوماسیون مینویسیم که می تونید بعداً برای خودکار کردن هر کاری که می خواهید، اون ها رو گسترش بدید. این برنامه ها از آرایه ها، if-else، حلقه ها و سایر مفاهیمی که توی این سری یاد گرفتیم استفاده می کنن.
پس با من همراه باشید :)
ادامه در پست بعدی...
🆔 @MdDaily
حالا می تونیم از تمام مهارت های bash که توی این سری آموزش bash یاد گرفتیم، برای ساختن برنامه های bash خیلی مفیدی استفاده کنیم که بهمون کمک کنه وظایف تکراری و کسل کننده رو خودکار کنیم.
تو این آموزش، ما چند برنامه اتوماسیون مینویسیم که می تونید بعداً برای خودکار کردن هر کاری که می خواهید، اون ها رو گسترش بدید. این برنامه ها از آرایه ها، if-else، حلقه ها و سایر مفاهیمی که توی این سری یاد گرفتیم استفاده می کنن.
پس با من همراه باشید :)
ادامه در پست بعدی...
🆔 @MdDaily
❤2
#ام_دی_کورس
اتوماسیون مدیریت کاربر با اسکریپت bash
به عنوان یک مدیر سیستم، ممکن است ایجاد یک کاربر در چندین سرور به صورت روزانه برای شما اتفاق بیفتد. این یک کار خسته کنندسش، بنابراین بیایید یک اسکریپت bash ایجاد کنیم که آن را به صورت خودکار انجام دهد.
ابتدا یک فایل متنی ایجاد کنید که شامل تمام نام میزبانها یا آدرسهای IP سرورهایی باشد که میخواهید کاربر را به آنها اضافه کنید.
به عنوان مثال، من در اینجا فایلی به نام servers.txt ایجاد کردم که شامل پنج سرور مختلف است:
بریم سراغ اسکریپت
ادامه در پست بعدی...
🆔 @MdDaily
اتوماسیون مدیریت کاربر با اسکریپت bash
به عنوان یک مدیر سیستم، ممکن است ایجاد یک کاربر در چندین سرور به صورت روزانه برای شما اتفاق بیفتد. این یک کار خسته کنندسش، بنابراین بیایید یک اسکریپت bash ایجاد کنیم که آن را به صورت خودکار انجام دهد.
ابتدا یک فایل متنی ایجاد کنید که شامل تمام نام میزبانها یا آدرسهای IP سرورهایی باشد که میخواهید کاربر را به آنها اضافه کنید.
به عنوان مثال، من در اینجا فایلی به نام servers.txt ایجاد کردم که شامل پنج سرور مختلف است:
linux@ubuntu:~$ cat servers.txt💡 توجه داشته باشید که من از نامهای میزبان سرور استفاده کردم چونکه آدرسهای IP را در فایل /etc/hosts ام قرار دادم. شما همچنین میتونید در اینجا از SSH config file استفاده کنید.
server1
server2
server3
server4
server5
بریم سراغ اسکریپت
adduser.sh:#!/bin/bashاسکریپت
servers=$(cat servers.txt)
echo -n "Enter the username: "
read name
echo -n "Enter the user id: "
read uid
for i in $servers; do
echo $i
ssh $i "sudo useradd -m -u $uid ansible"
if [ $? -eq 0 ]; then
echo "User $name added on $i"
else
echo "Error on $i"
fi
done
adduser.sh ابتدا از شما میخواهد نام کاربری و شناسه کاربری کاربری رو که میخواهید اضافه کنید، وارد کنید. سپس، روی تمام سرورهای موجود در فایل servers.txt از طریق SSH لوپ میزنه و کاربر مورد نظر رو اضافه میکنه.ادامه در پست بعدی...
🆔 @MdDaily
❤2
Md Daily
#ام_دی_کورس اتوماسیون مدیریت کاربر با اسکریپت bash به عنوان یک مدیر سیستم، ممکن است ایجاد یک کاربر در چندین سرور به صورت روزانه برای شما اتفاق بیفتد. این یک کار خسته کنندسش، بنابراین بیایید یک اسکریپت bash ایجاد کنیم که آن را به صورت خودکار انجام دهد. ابتدا…
#ام_دی_کورس
بریم اسکریپتو اجرا کنیم و ببینیم چطور کار می کنه (تصویر پست)
اسکریپت با موفقیت اجرا میشه و کاربر ansible به همه پنج تا سرور اضافه میشه. چنتا نکته ی مهم:
👈 میتونید از empty ssh pass phrases استفاده یا ssh-agent رو اجرا کنید تا موقع اجرای اسکریپت مجبور نشید کلید (یا رمز عبور) وارد کنید.
👈 باید یک حساب کاربری معتبر داشته باشید که دسترسی super user (بدون نیاز به رمز عبور) در همه سرورها داشته باشه.
تصور کنید که باید یه کاربر رو به بیش از چندین سرور لینوکس مختلف اضافه کنید! اسکریپت
ادامه در پست بعدی...
🆔 @MdDaily
بریم اسکریپتو اجرا کنیم و ببینیم چطور کار می کنه (تصویر پست)
اسکریپت با موفقیت اجرا میشه و کاربر ansible به همه پنج تا سرور اضافه میشه. چنتا نکته ی مهم:
👈 میتونید از empty ssh pass phrases استفاده یا ssh-agent رو اجرا کنید تا موقع اجرای اسکریپت مجبور نشید کلید (یا رمز عبور) وارد کنید.
👈 باید یک حساب کاربری معتبر داشته باشید که دسترسی super user (بدون نیاز به رمز عبور) در همه سرورها داشته باشه.
تصور کنید که باید یه کاربر رو به بیش از چندین سرور لینوکس مختلف اضافه کنید! اسکریپت
adduser.sh قطعاً می تونه کلی وقتتون رو ذخیره کنه.ادامه در پست بعدی...
🆔 @MdDaily
❤2
#ام_دی_کورس
خودکارسازی فرایند پشتیبان گیری با اسکریپت bash
گرفتن پشتیبان گیری کاری است که همه ما به صورت منظم انجام میدیم (اگه انجام نمیدید حتما انجام بدید 😄 )، پس چرا اون رو خودکار نکنیم؟ به اسکریپت
👈 متغیر dest_dir: برای مشخص کردن دایرکتوری مقصد پشتیبان.
👈 متغیر dest_server: برای مشخص کردن سرور مقصد پشتیبان.
👈 متغیر backup_time: برای مشخص کردن تاریخ پشتیبان گیری.
💡 اینجا توی اسکریپت بعد از گرفتن بک آپ رویه یک سرور بک آپ رو آپلود میکنه ولی شما میتونید با تغییر دادن کد بخشی که رو سرور آپلود میکنه به کدی که مثلا تو یک حافظه ی جانبی کپی میکنه برای خودتون شخصی سازیش کنید.
بعد، برای تمام دایرکتوریهای موجود در آرایه
نمونه خروجی
🆔 @MdDaily
خودکارسازی فرایند پشتیبان گیری با اسکریپت bash
گرفتن پشتیبان گیری کاری است که همه ما به صورت منظم انجام میدیم (اگه انجام نمیدید حتما انجام بدید 😄 )، پس چرا اون رو خودکار نکنیم؟ به اسکریپت
backup.sh زیر نگاهی بیندازید:#!/bin/bashابتدا، یک آرایه به نام backup_dirs ایجاد میکنیم که تمام نامهای دایرکتوریهایی رو که میخواهیم ازشوون پشتیبانگیری کنیم، ذخیره میکنه. بعدش، سه متغیر دیگر ایجاد می کنیم:
backup_dirs=("/etc" "/home" "/boot")
dest_dir="/backup"
dest_server="server1"
backup_date=$(date +%b-%d-%y)
echo "Starting backup of: ${backup_dirs[@]}"
for i in "${backup_dirs[@]}"; do
sudo tar -Pczf /tmp/$i-$backup_date.tar.gz $i
if [ $? -eq 0 ]; then
echo "$i backup succeeded."
else
echo "$i backup failed."
fi
scp /tmp/$i-$backup_date.tar.gz $dest_server:$dest_dir
if [ $? -eq 0 ]; then
echo "$i transfer succeeded."
else
echo "$i transfer failed."
fi
done
sudo rm /tmp/*.gzecho "Backup is done."
👈 متغیر dest_dir: برای مشخص کردن دایرکتوری مقصد پشتیبان.
👈 متغیر dest_server: برای مشخص کردن سرور مقصد پشتیبان.
👈 متغیر backup_time: برای مشخص کردن تاریخ پشتیبان گیری.
💡 اینجا توی اسکریپت بعد از گرفتن بک آپ رویه یک سرور بک آپ رو آپلود میکنه ولی شما میتونید با تغییر دادن کد بخشی که رو سرور آپلود میکنه به کدی که مثلا تو یک حافظه ی جانبی کپی میکنه برای خودتون شخصی سازیش کنید.
بعد، برای تمام دایرکتوریهای موجود در آرایه
backup_dirs، یک آرشیو tar فشرده شده gzip در /tmp ایجاد میکنه، بعدش از دستور scp برای ارسال/کپی کردن پشتیبانگیری به سرور مقصد استفاده میکنه. در نهایت، تمام آرشیوهای gzip را از /tmp حذف میکنه. نمونه خروجی
backup.sh :linux@ubuntu:~$ ./backup.shممکن است بخواهید هر روز در نیمه شب بک بگیرید. در این صورت، میتونید از cron job استفاده کنید:
Starting backup of: /etc /home /boot
/etc backup succeeded.
etc-Aug-30-20.tar.gz 100% 1288KB 460.1KB/s 00:02
/etc transfer succeeded.
/home backup succeeded.
home-Aug-30-20.tar.gz 100% 2543KB 547.0KB/s 00:04
/home transfer succeeded.
/boot backup succeeded.
boot-Aug-30-20.tar.gz 100% 105MB 520.2KB/s 03:26
/boot transfer succeeded.
Backup is done.
linux@ubuntu:~$ crontab -eادامه در پست بعدی...
0 0 * * * /home/mdDaily/noscripts/backup.sh
🆔 @MdDaily
❤2
#ام_دی_کورس
نظارت بر فضای دیسک موجود
فایل ها قرار است فضای خالی موجود را پر کنند، تنها کاری که میتونید انجام بدید اینکه که قبل از کرش سیستم خود سریع عمل کنید! میتونید از دستور df برای مشاهده فضای باقی مانده استفاده کنید:
حال به اسکریپت
توجه داشته باشید که باید
ادامه در پست بعدی...
🆔 @MdDaily
نظارت بر فضای دیسک موجود
فایل ها قرار است فضای خالی موجود را پر کنند، تنها کاری که میتونید انجام بدید اینکه که قبل از کرش سیستم خود سریع عمل کنید! میتونید از دستور df برای مشاهده فضای باقی مانده استفاده کنید:
linux@ubuntu:~$ df -h / /apps /databaseسیستم فایل /database تقریبا پرشده چونکه در حال حاضر 97% از فضا اشغال شده. اگه از دستور awk برای نمایش تنها فیلد پنجم استفاده کنیم، میتونیم فقط میزان استفاده رو نمایش بدیم.
Filesystem Size Used Avail Use% Mounted on
/dev/sda5 20G 7.9G 11G 44% /
/dev/mapper/vg1-applv 4.9G 2.4G 2.3G 52% /apps
/dev/mapper/vg1-dblv 4.9G 4.5G 180M 97% /database
حال به اسکریپت
disk_space.sh زیر نگاه کنید:#!/bin/bashابتدا، یک آرایه بنام
filesystems=("/" "/apps" "/database")
for i in ${filesystems[@]}; do
usage=$(df -h $i | tail -n 1 | awk '{print $5}' | cut -d % -f1)
if [ $usage -ge 90 ]; then
alert="Running out of space on $i, Usage is: $usage%"
echo "Sending out a disk space alert email."
echo $alert | mail -s "$i is $usage% full" your_email
fi
done
filesystems ایجاد میکنیم که تمام فایل های سیستم رو که قرار نظارت کنه نگه می داره. سپس، برای هر سیستم فایل، درصد استفاده را دریافت کرده و بررسی میشه که آیا بزرگتر یا مساوی 90 است یا خیر. اگر استفاده بیش از 90% باشد، یک ایمیل هشدار ارسال میکنه (با استفاده از کامند mail) که نشان می دهد فضای سیستم فایل در حال اتمامه.توجه داشته باشید که باید
your_email رو در اسکریپت با ایمیل واقعی خود جایگزین کنید.ادامه در پست بعدی...
🆔 @MdDaily
❤1
Md Daily
#ام_دی_کورس نظارت بر فضای دیسک موجود فایل ها قرار است فضای خالی موجود را پر کنند، تنها کاری که میتونید انجام بدید اینکه که قبل از کرش سیستم خود سریع عمل کنید! میتونید از دستور df برای مشاهده فضای باقی مانده استفاده کنید: linux@ubuntu:~$ df -h / /apps /database…
#ام_دی_کورس
اسکریپت رو اجرا کردم:
ممکنه بخواهید اسکریپت
اسکریپت رو اجرا کردم:
linux@ubuntu:~$ ./disk_space.shو همینطور که توی تصویر پست میبیند ایمیل رو فرستاده.
Sending out a disk space alert email.
ممکنه بخواهید اسکریپت
disk_space.sh رو هر شش ساعت اجرا کنید. در این صورت باید از cron job استفاده کنید:linux@ubuntu:~$ crontab -e🆔 @MdDaily
0 */6 * * * /home/user/noscripts/disk_space.sh
❤3
#ام_دی_کورس
خب دوره ی Bash تموم شد و توی این دوره مفاهیم مختلف به همراه مثال های کاربردی پوشش داده شدند.
امیدوارم که براتون مفید بوده باشه و هر سوالی، پیشنهاد یا انتفادی هم داشتید خوشحال میشم تو گروه کانال یا کامنت های پست باهام در میان بذارید .
منابعی که برای آماده سازی این دوره استفاده شدند:
👈 کتاب Bash Command Line Pro Tips
👈 کتاب Learn Bash Quickly
👈 وبسایت linuxhandbook.com
🆔 @MdDaily
خب دوره ی Bash تموم شد و توی این دوره مفاهیم مختلف به همراه مثال های کاربردی پوشش داده شدند.
امیدوارم که براتون مفید بوده باشه و هر سوالی، پیشنهاد یا انتفادی هم داشتید خوشحال میشم تو گروه کانال یا کامنت های پست باهام در میان بذارید .
منابعی که برای آماده سازی این دوره استفاده شدند:
👈 کتاب Bash Command Line Pro Tips
👈 کتاب Learn Bash Quickly
👈 وبسایت linuxhandbook.com
🆔 @MdDaily
❤2