گروه کاربران لینوکس دانشگاه شهید مدنی آذربایجان

لاگ دانشگاه آذربایجان :: Azarbaijan University Linux User Group

گروه کاربران لینوکس دانشگاه شهید مدنی آذربایجان

لاگ دانشگاه آذربایجان :: Azarbaijan University Linux User Group

نحوه ی نصب کردن Elasticsearch در centos7


Elasticsearch یک پایگاه داده ی No SQL است و به خاطر اینکه تعداد این پایگاه داده ها زیاد است ابتدا به توصیف آن می پردازیم.



مقدمه ای بر Elasticsearch

Elasticsearch یک پایگاه داده No SQL ،  real time ،document based  ،distributed  ،

full text based search engine، power full analytics engine  و REST محور می باشد.



ابتدا open JDK 8 را نصب میکنیم:


تایید کردن نصب Java با دستور java version :


خروجی به شکل زیر خواهد بود:


وارد کردن کلید GPG ریپازیتوری با دستور زیر:


ویرایشگر متن خود را باز کرده و ریپازیتوری زیر را ایجاد کنید


موارد زیر را درون فایل ذخیره کنید


حال به دانلود package می پردازیم

فعال کردن سرویس

شما می توانید برنامه در حال اجرا را با ارسا در خواست http به پورت9200 در لوکال هاست با دستور curl  زیر تایید کنید

که خروجی به شکل زیر خواهد بود

که ممکن است بین 10 تا 15 ثانیه وقت بگیرد که برای دیدن پیام های لاگ شده توسط سرویس elastic search میتوانید از دستور زیر استفاده کنید

که با اعمال این دستورات برنامه در حال اجرا قرار می گیرد.


کانفیگ کردن


برای اجازه ی دسترسی به elastic search از سرور های دیگر باید ابتدا کانفیگ های مورد نیاز را انجام بدهید که در

زیر به شرح آهن میپردازیم


دستور زیر را برای اجازه دسترسی خارجی به سرور از طریق سرور های قابل اعتماد در پورت 9200 وارد کنید

که اگر در ادامه خواستید به سرور های دیگ هم اجازه دهید دستور زیر را وارد کنید

بعد از کانفیگ کردن فایر وال نوبت به کانفیگ های مربوط به elastic search می رسد که برای آن فایل elasticsearch.yml را باز کنید

سپس دنبال خطی که شامل network.host است بگردید و مقادی آن را به0.0.0.0 تبدیل کنید


در نهایت با دستور زیر ریستارت کنید تا دستورات آخر اعمال شوند


منبع: https://linuxize.com/post/how-to-install-elasticsearch-on-centos-7/


تهیه کننده: ارشیا نظرلطفی/951830277


چهار روش برای غیر فعال کردن حساب ریشه (root ) در لینوکس


چهار روش برای غیر فعال کردن حساب ریشه در لینوکس


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


از آنجا که کاربر ریشه دارای قدرت مطلق است، هر گونه فعالیتی که وی انجام می دهد در یک سیستم حیاتی است. در این راستا، هر گونه خطا توسط کاربر ریشه ممکن است پیامدهای بزرگی در عملکرد عادی یک سیستم داشته باشد. علاوه بر این، این حساب نیز ممکن است با استفاده نامناسب از آن یا به طور تصادفی و یا از طریق نادیده انگاشتن سیاست ها مورد سوء استفاده قرار گیرد. بنابراین، بهتر است دسترسی ریشه در سرور لینوکس خود را غیر فعال کنید، در عوض، یک حساب مدیریتی ایجاد کرده و برای به دست آوردن امتیازات ریشه با استفاده از دستور sudo، برای انجام وظایف مهم در سرور، حساب مورد نظر را پیکربندی کنید.


در این مقاله، ما چهار راه برای غیر فعال کردن ورود به حساب کاربریroot در لینوکس را توضیح خواهیم داد.


توجه: قبل از اینکه شما دسترسی به حساب ریشه را مسدود کنید، مطمئن شوید که یک حساب کاربری ایجاد کرده اید، دستور useradd، به استفاده از دستور sudoبرای به دست آوردن امتیازات کاربر ریشه کمک میکند و یک رمز عبور قوی برای حساب کاربری ارائه می دهد. پرچم m به معنی ایجاد دایرکتوری خانگی کاربر است و c اجازه می دهد تا یک نظر را مشخص کند:

# useradd –m –c "Admin User" admin

# passwd  admin


سپس، این کاربر را به گروه مناسب از مدیران سیستم با استفاده از دستور usermod  اضافه کنید، جایی که سوئیچ -a،  به معنی اضافه کردن حساب کاربری است و -G ، یک گروه را برای اضافه کردن کاربر (wheel or sudo) در توزیع لینوکس شما مشخص می کند:

# usermod     -aG    wheel   admin              #Centos

# usermod    -aG      sudo    admin               #Debian


هنگامی که یک کاربر را با امتیازات مدیریتی ایجاد کرده اید، برای مسدود کردن دسترسی ریشه، به این حساب بروید.


#  su  admin

 

1) تغییر ریشه کاربر Change root User’s Shell)  Shell ) 


ساده ترین روش برای غیرفعال کردن ورود کاربر root این است که پوسته خود را از/bin/bash  (یا هر پوسته دیگری که اجازه ورود کاربر را دارد) به /sbin/nologin درفایل /etc/passwd تغییردهید.


$   sudo    vim  /etc/passwd

تغییر خط:



root:x:0:0:root:/root:/bin/bash

to

root:x:0:0:root:/root:/sbin/nologin


درانتها فایل را ذخیره کرده و ببندید.


ازاین پس، هنگامی که کاربر ریشه وارد سیستم می شود، پیامی دریافت می کند: "این حساب در حال حاضر در دسترس نیست." این پیام پیش فرض است، اما شما می توانید آن را تغییر دهید و یک پیام سفارشی در فایل /etc/nologin.txt تنظیم کنید. این روش تنها برای برنامه هایی که نیاز به پوسته برای ورود به سیستم دارند موثر است، در غیر این صورت، سرورهای sudo، ftp و ایمیل می توانند به حساب root دسترسی پیدا کنند.


2) غیرفعال کردن ورود کاربر root از طریق کنسول ((Disable root Login via Console Device (TTY)


روش دوم از یک ماژول PAM به نام pam_securetty استفاده می کند که اجازه دسترسی به ریشه را فقط در صورتی که کاربر در   TTY "امن" وارد شده باشد، می دهد. همانطور که در فهرست etc / securetty تعریف شده است. فایل فوق به شما اجازه می دهد که مشخص کنید کدام دستگاه های TTY کاربر ریشه، مجاز به ورود به سیستم است، تخلیه این فایل از ورود ریشه در هر دستگاه متصل به سیستم کامپیوتری جلوگیری می کند.


$  sudo mv /etc/securetty /etc/securetty.orig

$  sudo touch /etc/securetty

$  sudo chmod  600 /etc/securetty


این روش دارای برخی محدودیت هاست و تنها بر روی برنامه هایی نظیر ورود به سیستم، مدیران نمایش (i.e gdm، kdm و  ( xdm و سایر سرویس های شبکه ای که TTY را راه اندازی می کنند، تاثیر می گذارد. برنامه هایی مانند su، sudo، ssh و سایر ابزارهای باز شده به حساب root دسترسی خواهند داشت.


3) غیر فعال کردن ریشه ورود به سیستم SSH (Disable SSH Root Login)


رایج ترین راه برای دسترسی به سرورهای از راه دور و یا VPS ها از طریق SSH است و برای مسدود کردن ورود کاربر ریشه تحت آن، شما باید فایل /etc / ssh / sshd_config را ویرایش کنید.


 $ sudo vim /etc/ssh/sshd_config


سپس دستورPermitRootLogin  مطابق شکل زیر اجراکرده و مقدار آن را به no  تغییر دهید.



پس از پایان کار، فایل را ذخیره کرده و ببندید. سپس سرویس sshd را مجددا راه اندازی کنید تا تغییرات اخیر در تنظیمات اعمال شود.


  $ sudo systemctl restart sshd

 or

$  sudo service sshd restart


این روش فقط بر روی مجموعه ابزار openssh تاثیر می گذارد؛ برنامه هایی مانند ssh، scp، sftp از دسترسی به حساب root رد می شوند. 


4) دسترسی ریشه به خدمات را از طریق PAM محدود کنید (Restrict root Acess to Services Via PAM)


ماژول های تأیید هویت انطباق پذیر (PAM در کوتاه مدت) یک روش متمرکز، پلاگین، انعطاف پذیر برای احراز هویت در سیستم های لینوکس است.  PAM از طریق ماژولlib/security/pam_listfile.so / به انعطاف پذیری زیاد در محدود کردن امتیازات حساب های خاص اجازه می دهد. ماژول بالا می تواند برای ارجاع به یک لیست از کاربران که مجاز به ورود از طریق برخی از خدمات هدف مانند ورود به سیستم، SSH و هر برنامه آگاه از PAM  نیستند، استفاده شود.


در این مورد، ما می خواهیم  دسترسی ریشه به یک سیستم را با محدود کردن دسترسی به ورود و سرویس های sshd غیرفعال کنیم. ابتدا فایل را برای سرویس هدف در دایرکتوری  /etc/pam.d/باز کرده و ویرایش کنید.



$  sudo vim /etc/pam.d/login

or

sudo vim /etc/pam.d/sshd

بعد، پیکربندی زیر را در هر دو فایل اضافه کنید.


auth    required       pam_listfile.so \

onerr=succeed  item=user  sense=deny  file=/etc/ssh/deniedusers


هرفایل را ذخیره کرده و ببندید.سپس فایل ساده / etc / ssh / deniedusers را ایجاد کنید که باید حاوی یک مورد در هر خط باشد. نام ریشه را در آن اضافه کنید، سپس آن را ذخیره کرده و آن را ببندید.


$  sudo vim /etc/ssh/deniedusers

همچنین مجوزهای مورد نیاز در این را تنظیم کنید.


$  sudo chmod 600 /etc/ssh/deniedusers


این روش تنها بر برنامه ها و سرویس هایی که PAM آگاه هستند، تاثیر می گذارد. شما می توانید دسترسی ریشه به سیستم را از طریق FTP و ایمیل مشتریان و غیره مسدود کنید. برای اطلاعات بیشتر، به صفحات مربوط بهman  مراجعه کنید.


$  man pam_securetty

 $ man sshd_config

 $ man pam


در این مقاله، ما چهار راه را برای غیر فعال کردن حساب ریشه (root) در لینوکس توضیح دادیم.امیدوارم مطالب این بخش ازلینوکس برای شما مفید باشد.



منبع : https://www.tecmint.com/disable-root-login-in-linux/


تهیه کننده : رضا لطیفی 951830260 



از هسته لینوکس بیشتر بدانیم . . .

از هسته لینوکس بیشتر بدانیم . . .

 

هسته ی  لینوکس اغلب درست و یا به صور ت کامل شناخته و درک نمی شود، از این رو  برای کمک به همه ما می توانیم بر اساس برخی از اصول اولیه، سراغ هسته برویم و به شما در درک بهتر چیزها کمک کنیم.

کلیت :‌

هنگامی که سیستم بوت می شود ، چندین اتفاق میوفتد تا سیستم عامل بالا بیاید و بار گذاری شود .

روند بوت در شش مرحله زیر انجام می شود :

1.      سیستم ورودی / خروجی پایه (BIOS)

2.      مستر بوت رکورد (MBR)

3.      GRand Unified Bootloader (GRUB)

4.      هسته لینوکس

5.      init

6.      سطح اجرا

 

سیستم ورودی / خروجی پایه BIOS

 

BIOS یک سیستم عامل است که در هنگام فعال بودن سیستم، مقداردهی اولیه سختافزار را انجام می دهد. بایوس مقداردهی و تست سخت افزار سیستم را آغاز می کند. و حاوی اطلاعات کافی برای بارگیری درایور برای صفحه کلید و گاهی اوقات یک ماوس است. هنگام ورود به تنظیمات BIOS شما می توانید از صفحه کلید و شاید موس برای ذخیره تنظیمات خاص در CMOS استفاده کنید.

در تنظیمات BIOS  ( CMOS) دستور بوت دستگاه است . . کنترل به ترتیب اولویت به هر دستگاه بوت منتقل می شود. هر دستگاه برای یک ( Master Boot Record (MBR  بررسی خواهد شد. هنگامی که یکی از آنها یافت می شود BIOS کنترل را به دستگاه MBR منتقل می کند..

 

مستر بوت رکورد (MBR)

 

رکورد (Master Boot (MBR از لحاظ فنی در بعضی موارد لازم نیست، اما MBR یک بخش بوت است که در ابتدای یک دیسک ثابت یا قابل جابجایی قرار گرفته است. MBR شامل داده هایی است که سیستم را در مورد پارتیشن ها در یک دیسک اطلاع دهد. همچنین کد اجرایی است که لودر (لودر بوت) است. نه همه پارتیشن ها حاوی یک لودر بوت هستند و اگر بوت لودر وجود نداشته باشد سیستم عامل بارگیری نخواهد شد. MBR بدون کد اجرایی یا بوت لودر وجود خواهد داشت. MBR و بوت لودر را اشتباه نگیرید.

 

GRand Unified Bootloader (GRUB)

 

اولین مرحله از بوت لودر در MBR قرار می گیرد که لودر اصلی را که در یک پارتیشن boot (/ boot) نصب می شود قرار می دهد. GRUB، اگر پیکربندی شده برای انجام این کار، یک منو را نشان می دهد و به شما اجازه می دهد تا کنترل را به یک هسته خاص منتقل کنید. این ویژگی به سیستم اجازه می دهد چندین سیستم عامل نصب شده بر روی آن داشته باشد. فایل پیکربندی GRUB در '/boot/grub/grub.conf' ذخیره می شود.

 

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

 

 

هسته

هنگامی که هسته کنترل ریموت دیجیتالی اولیه (initrd) را به عنوان یک فایل موقت ریشه به کار می گیرد تا زمانی که کرنل بوت شود. پس از بارگذاری Kernel، سیستم فایل ریشه واقعی را نصب می کند. محل فایل سیستم ROOT از GRUB منتقل شده دارای گزینه 'root =' است. هسته به عنوان رانندگان برای دسترسی به پارتیشن های دیسک سخت و همچنین برخی از سخت افزار های دیگر. رانندگان کامپایل شده در Kernel اجازه می دهد آن را برای نصب سیستم های فایل دیگر.

 

سپس کرنل '/ sbin / init' را اجرا می کند.

 

Init  :

 

از آنجا که "init" اولین برنامه بارگذاری شده توسط هسته است، آن را ID فرایند (PID) از 1 خواهد داشت.

 

برنامه 'init' فایل '/ etc / inittab' را برای تعیین سطح لینوکس اجرا می کند. پس از بررسی، برنامه ها در سطوح مشخص شده بارگذاری می شوند.

 

سطح اجرا :

 

سطح اجرا به شرح زیر است:

0 - توقف

1 - حالت کاربر تنها

2 - چند کاربره، بدون NFS

3 - حالت چند نفره کامل

4 - استفاده نشده است

5 - X11

6 - راه اندازی مجدد

برنامه های تنظیم شده برای شروع خودکار در زمان بوت شدن می توانند در یکی از موارد زیر یافت شوند:

 

اجرای سطح 0 - /etc/rc.d/rc0.d/

اجرای سطح 1 - /etc/rc.d/rc1.d/

اجرای سطح 2 - /etc/rc.d/rc2.d/

اجرای سطح 3 - /etc/rc.d/rc3.d/

اجرای سطح 4 - /etc/rc.d/rc4.d/

اجرای سطح 5 - /etc/rc.d/rc5.d/

اجرای سطح 6 - /etc/rc.d/rc6.d/

برای دیدن سطح پیش فرض پیش فرض شما می توانید در ترمینال زیر را اجرا کنید:

Runlevel

 

اطلاعات بیشتر درباره هسته :

از اطلاعات قبلی در هسته شما باید یک درک اولیه از آن را برای دریافت سیستم در حال اجرا است داشته باشید .

 

هنگامی که سیستم در حال اجرا است، کرنل کنترل نرم افزار و سخت افزار را دارد. هیچ دسترسی به سخت افزار به طور مستقیم با یک برنامه انجام نمی شود و یا مناقشات رخ می دهد. اگر دو برنامه دسترسی به هارد درایو داشته باشند و آن را به حقوق منحصر به فرد قفل کنند، هیچ برنامه دیگری برای دسترسی به هارد درایو نیست. برنامه های کاربردی توابع از کتابخانه سیستم عامل. کتابخانه مجموعه ای از دستورالعمل ها است که معمولا در C نوشته شده و توانایی های لازم را در برنامه ها مدیریت می کند. به عنوان مثال، یک تابع می تواند یک فایل را از هارد دیسک درخواست کند.

سپس تابع کتابخانه System Calls را ایجاد می کند. تماس های سیستم به هسته ساخته شده است که به نوبه خود اطلاعات درخواست شده را ارائه می دهد. به عنوان مثال، اگر تابع نیاز به یک فایل داشته باشد، کتابخانه تماس سیستم را برای باز کردن یک فایل، خواندن فایل و بستن فایل در صورت انجام انجام خواهد داد. هسته عملیات فایل را انجام می دهد و داده هایی را که از فایل خواندند را باز می گرداند.

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

برای دیدن فهرست های سخت افزاری خاص، لیست زیر را بررسی کنید:

 

lspci - دستگاه PCI

lsusb - دستگاه های USB

lsblk - دستگاه های بلوک (دستگاه هایی که از آنها بلوک های داده را می خوانید)

lscpu - اطلاعات پردازنده

lsdev - دستگاه های دیگر سیستم

lsipc - اطلاعات در ارتباطات فرآیند (توانایی فرایندهای برقراری ارتباط با یکدیگر)

lslogins - یک نام کاربری را مشخص کنید و اطلاعات مربوط به ورود کاربر را بدست آورید

lsinitramfs - فایل initram را مشخص کرده و محتویات نمایش داده می شود

lslocks نشان میدهد که سیستم توسط هسته قفل شده است .

lsof - لیست فایلهای باز (البته توسط سیستم فرا خوانده شده)

اگر ترمینال را باز کرده و 'lshw' را اجرا کنید، می توانید فهرستی از سخت افزار شناخته شده توسط هسته را مشاهده کنید. برای دریافت گرافیکی بهتر می توانید دستور 'lshw -html> hardware.html' را اجرا کنید و سپس فایل جدید را با مرورگر باز کنید زیرا خروجی در فرمت HTML است.

تمام دستورات نمی توانند به فرمت HTML ارسال شوند. اکثر برنامه های ذکر شده تنها به متن استاندارد ارسال می شوند. با استفاده از برخی دستورات می توانید گزینه '-v' را برای ارائه جزئیات بیشتر و یا اطلاعات عمیق استفاده کنید. مانند دستور 'lsusb'. شما می توانید از دستور 'lsusb -v' برای دیدن اطلاعات دقیق تر در مورد سخت افزار USB استفاده کنید. بعضی از این دستورات اطلاعات بیشتری را تولید می کنند اگر شما آن را با امتیازات ROOT اجرا کنید.

 

RamDisk اولیه (initrd)

 

فایل initrd در پوشه '/ boot' یافت می شود و نامی با initrd.img- شروع می شود. بخش باقی مانده از نام شماره نسخه است. اگر دستور 'ls / boot / initrd.img-' را اجرا کنید، فهرستی از تمام فایل های initrd در سیستم را مشاهده خواهید کرد. البته تنها یک مورد استفاده می شود. سایر فایل های ذکر شده ممکن است نسخه های قبلی باشند که به یک نسخه جدید به روز شده اند. اگر لیستی از بیش از یک فایل وجود داشته باشد، می توانید تعیین کنید کدام یک با استفاده از دستور uname -r استفاده شود. نسخه ذکر شده، هسته است. نتایج دستور 'uname -r' بقیه نام فایل است.

 

برای مثال، اگر فرمان "uname -r" را اجرا کردم و پاسخ "4.4.0-79-generic" را دریافت کردم، نام فایل initrd.img-4.4.0-79-generic است.

اگر می خواستید محتویات فایل initrd را ببینید، می توانید دستور 'lsinitramfs' را با نام فایل اجرا کنید. مثالی است lsinitramfs /boot/initrd.img-4.4.0-79-generic است. همانطور که ممکن است حدس بزنید، فایل initrd فشرده شده است تا بتوان آن را سریعتر خواند.

فایل initrd را اصلاح و یا حذف نکنید یا سیستم ممکن است بوت شود.

 

فایل هسته در پوشه ی مشابه با initrd قرار دارد و با vmlinuz شروع می شود. پایان نام فایل، شماره نسخه هسته است که توسط دستور uname -r ارائه شده است.

برای مثال، از بالا، نتیجه فرمان uname-r '4.4.0-79-generic' بود. نام پرونده هسته 'vmlinuz-4.4.0-79-generic' برای دیدن اطلاعات در مورد فایل هسته می توانید دستور 'ls -l vmlinuz- *' را اجرا کنید. فایل را برای نسخه فعلی فعلی خود پیدا کنید و می توانید اندازه فایل را ببینید.

 

ضروری است که هسته بدون اطلاع از آنچه شما انجام می دهید و یا سیستم ممکن است بوت نکنید حذف یا اصلاح نمی شود.

 

من  امیدوارم که    به  درک بیشتر شما از عملکرد هسته و همچنین فایل های فیزیکی مورد استفاده برای بوت کمک کرده باشم .


تهیه شده توسط  :‌ 951830237

بازی های لینوکس


شاید برای شما هم این سوال پیش آمده باشد که آیا لینوکس قابلیت اجرای بازی ها را  دارد یا خیر؟

در واقع لینوکس توانایی اجرای بازی ها را دارد اما همه بازی ها برای لینوکس در دسترس نیستند.

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

اما با این حال تقریبا تمام سرورهای ساخت و رندر بازی ها از لینوکس استفاده می کنند.

به طور کلی به چهارطریق میتوان از لینوکس  برای بازی ها استفاده کرد.


1. بازی های لینوکسی

بازی هایی هستند که نسخه لینوکسی آن ها ساخته شده است و برای اجرا نیاز به ابزارهای اضافی ندارند.

هر توسعه لینوکس در ریپوزیتوری خود قسمتی برای دانلود این بازی ها را دارد.

از سایر منابع بازی های لینوکسی میتوان موارد زیر را نام برد:

Steam

GOG

Portable Linux Games

Game Drift

Linux Game Database

Penguspy



2. بازی های ویندوزی

به کمک بعضی از ابزارها میتوان برنامه ها و بازی های ویندوزی را روی لینوکس اجرا کرد.

از مهمترین این ابزار میتوان به موارد زیر اشاره کرد:

Wine

Crossover

Play On Linux



3. بازی های مرورگر

بازی هایی هستند که از مرورگر وب به عنوان پلتفرم برای اجرای بازی های آنلاین استفاده می کنند.

مرورگرهایی مانند گوگل کروم توانایی پشتیبانی از بازی های آفلاین را نیز دارند.



4. بازی های ترمینال

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

برای مثال در این پست نحوه اجرای بازی snake در ترمینال بیان شده است.

از منابع بازی های ترمینال میتوان به TTY Games اشاره کرد.



آخرین اخبار در مورد بازی های لینوکس را میتوانید از سایت های زیر دنبال کنید:

Gaming On Linux

Free Gamer

Linux Game News



منابع:

https://itsfoss.com/linux-gaming-guide



92353140

دانشجوی مهمان


پیدا کردن فایل های تکراری، و حذف آنها

احتمالاً  برایتان پیش آمده است که در یک دایرکتوری،  یک یا چند کپی از یک فایل داشته باشید.  

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

برای شروع، ابتدا وارد ترمینال شوید و دستور زیر را وارد کنید تاوارد دایردکتوری دسکتاپ شوید:

cd ~/Desktop

سپس یک فایل متنی جدید ایجاد کنید و اجازه ی ( permission )  اجرا بدهید:

touch DuplicateFileFinder

chmod 755 DuplicateFileFinder

حال کافیست با برنامه ی Gedit (یا هر برنامه ی  متنی  دلخواه دیگر  ) آن را باز کرده و شروع به نوشتن کد کنیم. برای این کار از دستور زیر استفاده کنید:

gedit DuplicateFileFinder

توجه کنید که در این مرحله اگر ترمینال را ببندید، gedit نیز بسته خواهد شد. مگر آن که فایل را دستی باز کرده باشید.

پنجره gedit باز شده و آماده کد زدن است.


شرح الگوریتم:

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


در این مرحله، برنامه تعداد کل فایل های دایرکتوری را دریافت می‌کند



#! /bin/bash

cd ~/Desktop/dup 

# می توانید به دایرکتوری دلخواهی را برای جستوجو تغییر دهید


numberOfTotalFiles=0

for file in *; do

if [ -f $file ]; then

numberOfTotalFiles=$((numberOfTotalFiles+1))

fi

done



در این مرحله، که مرحله اصلی می‌باشد، طبق الگوریتم گفته شده عمل می‌کند:


# دریافت همه فایل ها یا دایرکتوری و ذخیره نام آنها در یک آرایه

files=(*) 

for i in $(seq 0 $((numberOfTotalFiles-1))); do

# بررسی این که فایل مربوطه موجود می‌باشد یا نه

if [ -f ${files[$i]} ]; then 

# ذخیره محتویات فایل اول

contentOfFirstFile="$(cat ${files[$i]})" 

for j in $(seq $((i+1)) $((numberOfTotalFiles-1))); do

if [ -f ${files[$j]} ]; then

 # ذخیره محتویات فایل دوم

contentOfSecondFile="$(cat ${files[$j]})"

# بررسی این که فایل مربوطه موجود می‌باشد یا نه

if [ "$contentOfFirstFile" = "$contentOfSecondFile" ]; then 

echo "${files[$j]} is duplicate. do you want to remove it? (y/...)"

read ans

if [ "$ans" = "y" ]; then

# حذف فایل

rm ${files[$j]} 

fi

fi

fi

done

fi

done

exit 0


در آخر با دستور زیر فایل را اجرا کنید:
./DuplicateFileFinder


تهیه شده توسط ۹۵۱۸۳۰۲۴۳