رفتن به مطلب
بازگشایی انجمن! ×
GuardIran

تخته امتیازات

  1. R3DN4X314

    R3DN4X314

    کد نویس


    • امتیاز

      12

    • ارسال ها

      217


  2. Goodzilam

    Goodzilam

    جاویدان


    • امتیاز

      5

    • ارسال ها

      198


  3. NimaDix

    NimaDix

    کاربر رسمی


    • امتیاز

      1

    • ارسال ها

      17


مطالب محبوب

در حال نمایش مطالب دارای بیشترین امتیاز در 05/30/2020 در همه بخش ها

  1. بخش دوم - قسمت هفتم دستور while : این دستور یه چیزی بین IF-Then و For عمل میکنه که ما یک شرط تعریف میکنیم که نسبت به اون حلقه تکرار بشه , فرمت و مثال : while test command do other commands done $ cat test10 #!/bin/bash var1=10 while [ $var1 -gt 0 ] do echo $var1 var1=$[ $var1 - 1 ] done $ ./test10 10 9 8 7 6 5 4 3 2 1 همونطور که میبینید گفته شده تا زمانی که شرط چیزی که ما میخوایم نشده (مقدار متغیر بیشتر از صفره) حلقه ادامه پیدا کنه (چاپ مقدار و کم کردن از متغیر) شما میتونید از چند دستور برای این کار استفاده کنید ولی فقط کد وضعیت اجرای اخرین دستور ، شرط محسوب میشه $ cat test11 #!/bin/bash # teste chand dastoor dar halghe var1=10 while echo $var1 [ $var1 -ge 0 ] do echo "daroone halghe hastim" var1=$[ $var1 - 1 ] done $ ./test11 10 daroone halghe hastim 9 daroone halghe hastim 8 daroone halghe hastim 7 daroone halghe hastim 6 daroone halghe hastim 5 daroone halghe hastim 4 daroone halghe hastim 3 daroone halghe hastim 2 daroone halghe hastim 1 daroone halghe hastim 0 daroone halghe hastim —1 دستور Until : این دستور کاملا برعکس دستور قبل کار میکنه , فرمت و مثال : until test commands do other commands done $ cat test12 #!/bin/bash # var1=100 until [ $var1 -eq 0 ] do echo $var1 var1=$[ $var1 - 25 ] done $ ./test12 100 75 50 25 $ یک مثال پویا تر با روش بیش از یک دستور : $ cat test13 #!/bin/bash # var1=100 until echo $var1 [ $var1 -eq 0 ] do echo "hanooz daroone halgheyim : $var1" var1=$[ $var1 - 25 ] done $ ./test13 100 hanooz daroone halgheyim : 100 75 hanooz daroone halgheyim : 75 50 hanooz daroone halgheyim : 50 25 hanooz daroone halgheyim : 25 0 استفاده از حلقه ها داخل یکدیگر : $ cat test14 #!/bin/bash # estefade az halghe haye dakhele ham for (( a = 1; a <= 3; a++ )) do echo "halghe ye avaliye : $a" for (( b = 1; b <= 3; b++ )) do echo " halghe ye darooni : $b" done done $ ./test14 halghe ye avaliye : 1 halghe ye darooni : 1 halghe ye darooni : 2 halghe ye darooni : 3 halghe ye avaliye : 2 halghe ye darooni : 1 halghe ye darooni : 2 halghe ye darooni : 3 halghe ye avaliye : 3 halghe ye darooni : 1 halghe ye darooni : 2 halghe ye darooni : 3 یه مثال دیگه با تنوع نوع حلقه ها : $ cat test15 #!/bin/bash # var1=5 while [ $var1 -ge 0 ] do echo "halghe ye birooni : $var1" for (( var2 = 1; $var2 < 3; var2++ )) do var3=$[ $var1 * $var2 ] echo " halghe ye darooni : $var1 * $var2 = $var3" done var1=$[ $var1 - 1 ] done $ ./test15 halghe ye birooni : 5 halghe ye darooni : 5 * 1 = 5 halghe ye darooni : 5 * 2 = 10 halghe ye birooni : 4 halghe ye darooni : 4 * 1 = 4 halghe ye darooni : 4 * 2 = 8 halghe ye birooni : 3 halghe ye darooni : 3 * 1 = 3 halghe ye darooni : 3 * 2 = 6 halghe ye birooni : 2 halghe ye darooni : 2 * 1 = 2 halghe ye darooni : 2 * 2 = 4 halghe ye birooni : 1 halghe ye darooni : 1 * 1 = 1 halghe ye darooni : 1 * 2 = 2 halghe ye birooni : 0 halghe ye darooni : 0 * 1 = 0 halghe ye darooni : 0 * 2 = 0 به مثال زیر دقت کنید (ترکیب) : $ cat test16 #!/bin/bash # tarkibe until va while # var1=3 until [ $var1 -eq 0 ] do echo "halghe ye birooni : $var1" var2=1 while [ $var2 -lt 5 ] do var3=$(echo "scale=4; $var1 / $var2" | bc) echo " halghe ye darooni : $var1 / $var2 = $var3" var2=$[ $var2 + 1 ] done var1=$[ $var1 - 1 ] done $ ./test16 halghe ye birooni : 3 halghe ye darooni : 3 / 1 = 3.0000 halghe ye darooni : 3 / 2 = 1.5000 halghe ye darooni : 3 / 3 = 1.0000 halghe ye darooni : 3 / 4 = .7500 halghe ye birooni : 2 halghe ye darooni : 2 / 1 = 2.0000 halghe ye darooni : 2 / 2 = 1.0000 halghe ye darooni : 2 / 3 = .6666 halghe ye darooni : 2 / 4 = .5000 halghe ye birooni : 1 halghe ye darooni : 1 / 1 = 1.0000 halghe ye darooni : 1 / 2 = .5000 halghe ye darooni : 1 / 3 = .3333 halghe ye darooni : 1 / 4 = .2500 همچنین با ترکیب دو روش حلقه های درون هم و تغیر IFS میتونیم داخل فایل ها رو با حلقه ها مرور کنیم cat test17 #!/bin/bash # taghire IFS IFS.OLD=$IFS IFS=$'\n' for var1 in $(cat /etc/passwd) do echo "meghdar : $var1" IFS=: for var2 in $var1 do echo " $var2" done done ./test17 meghdar : rednaxela:x:501:501:red naxela:/home/rednaxela:/bin/bash rednaxela x 501 501 red naxela /home/rednaxela /bin/bash meghdar : red:x:502:502:red:/home/red:/bin/bash red x 502 502 red /home/red /bin/bash پایان قسمت هفتم از بخش دوم
    3 امتیاز
  2. درود اموزش و تاپیک حدودا مال 5 سال پیش هست، سوال شما نیاز به اسکرین شات و اطلاعات بیشتر داره!
    2 امتیاز
  3. بخش اول - قسمت سوم ادامه مبحث دستور های خط فرمان ( مدیریت سیستم لینوکس ) یکی از مهم ترین بخش ها در مدیریت لینوکس ، تحت نظر داشتن عوامل فعال در سیستمه که ما دستور های مرتبط بهش رو مرور میکنیم ps -A -M -f -l --forest وقتی یک برنامه روی سیستم اجرا میشه خودش رو به صورت پروسه نشون میده برای دیدن اینکه چه پروسه هایی روی سیستم فعال هستند ، از دستور ps استفاده میکنیم که میتونه ضمن نشون دادن پروسه ها اطلاعات مربوط به هرکدومشونم بهمون بده در اینجا من چند تا از اپشن های جالبش رو مثال میزنم اپشن A- نمایش تمام پروسه ها اپشن M- نمایش اطلاعات امنیتی مربوط به پروسه ها اپشن f- نمایش لیست ( فول فرمت ) اپشن l- نمایش به صورت لانگ لیست ( اطلاعات بیشتر ) اپشن forest-- که یکی از پارامتر های لانگ گنو محصوب میشه ، برای به تصویر کشیدن رابطه بین پروسه ها استفاده میشه برخی از مقادیری که دستور ps میتونه بهمون بده رو براتون لیست میکنم UID PID PPID STIME TTY CMD فیلد uid : مربوط به کاربریه که پروسه رو فعال کرده فیلد pid : کد پی ایدی پروسه ( یک کد منحصر به هر پروسه ) فیلد ppid : اگه یک پروسه از طریق پروسه دیگه ای فعال شده باشه pid پروسه اولیه رو نمایش میده فیلد stime : سیستم تایمی که پروسه فعال شده فیلد TTY : نمایش اینکه هر پروسه در کدوم TTY فعال شده فیلد Cmd : اسم خود برنامه ی هر پروسه همون طور که دیدید دستور ps در نوع خودش عالی کار میکنه ضمن اینکه پویایی این دستور به مثال کوچیک ما محدود نمیشه ولی اگه هدف شما زیر نظر گرفتن روند پروسه هاییه که فعالیت منقطع دارن باید از دستور top استفاده کنید top دستور top هم مثل ps پروسه ها و اطلاعات برامون لیست میکنه ولی این کارو در حالت ( real-time ) انجام میده ، که باعث میشه به هدفمون برسیم اولین بخش خروجی اطلاعات عمومی سیستم رو نمایش میده خط اول : زمان فعلی ، زمانی که سیستم بالا بوده ، تعداد کاربر های لاگین کرده و load average رو نشون میده خط دوم اطلاعات عمومی پروسه ها رو نشون میده مثل : تعداد کل پروسه ها ، چند پروسه فعال وجود داره ، چند پروسه متوقف شدن ، چند پروسه خواب هستن الان و چند پروسه به زامبی تبدیل شدن زامبی : پروسه هایی که کارشون تموم شده ولی پروسه هایی که اینهارو فعال کرده بودن هنوز هیچ پاسخی بهشون ندادن خط سوم اطلاعات عمومی در مورد cpu نشون میده و دو خط اخر هم در مورد وضعیت system memory هستند ، خط اول وضعیت physical memory , و خط دوم swap memory بخش دوم دستور هم شامل اطلاعات پروسه ها میشه ، مثل دستور ps kill 3940 killall http* از دستور kill و killall برای متوقف کردن پروسه ها استفاده میشه در مثال اول pid یک پروسه که 3940 هست رو به عنوان مقدار میدیم به دستور تا اون پروسه متوقف شه در مثال دوم به دستور killall میگیم هر پروسه ای که با http شروع میشه رو متوقف کن mount mount -t ntfs /dev/sdb1 /media/disk umount directory device همونطور که قبلا در موردش صحبت کردیم لینوکس تمام فایل سیستم رو در یه دایرکتوری مرجع ( / ) قرار میده قبل از اینکه شما بتونید از یک مدیا دیسک استفاده کنید ، باید اونو در سیستم دایرکتوری جا بدید ، که به این کار میگن mounting که برای این کار به دسترسی روت نیاز دارید ( البته این موضوع مربوط به اون دسته از removable media هایی میشه که به صورت خودکار این عمل براشون اتفاق نمیوفته ، که شامل موارد مرسوم نیست) با وارد کردن دستور mount به صورت تنها ، لیستی از دیوایس های مونت شده نمایش داده میشه ، به همراه مسیرشون ، نوع فایل سیستمشون و وضعیت سطح دسترسیشون در مثال اول ما یک فلش مموری رو با نوع فایل سیستم ntfs در ادرس دیوایس و ادرس مدیا ی مشخص شده به ترتیب ، مونت کردیم البته در حالت پیشفرض فقط همون یوزر روت به مدیا ی مونت شده دسترسی داره ، که میتونه سطح دسترسی رو تغیر بده در مثال دوم هم از دستور umount هم برای unmount کردن استفاده کردیم df -h از دستور df برای دیدن فضای خالی تمام دیوایس ها استفاده میکنیم ( اینترنال و اکسترنال ) اپشن h- مقادیر خروجی رو به صورت مگ و گیگ و ... نمایش میده که راحت تر قابل درک باشه du -h دستور du بر خلاف دستور df مقادیر مربوط به فضای استفاده شده رو نمایش میده اپشن h- هم همون اپشن مثال قبله sort file1 sort -n file1 sort -M file1 sort -r file1 sort -t ':' -k 3 /etc/passwd از دستور sort برای مرتب سازی مقادیر استفاده میشه از اپشن n- برای مرتب سازی بر اساس ترتیب اعداد استفاده میشه از اپشن M- برای مرتب سازی بر اساس ترتیب ماه های میلادی استفاده میشه ( برای مواقعی که اسم مقادیر دارای نام ماه هستن ، مثل لاگ فایل ها ) از اپشن r- برای برعکس کردن ترتیب فعلی مقادیر استفاده میشه و اما ترکیب جالب t- و k- که در مرحله اول یک کاراکتر رو به عنوان جدا کننده انتخاب میکنه و در مرحله دوم بین بلاک های ساخته شده بلاک مورد نظر رو انتخاب میکنه ، در مثال ما سومین بلاک انتخاب شده ، از بین بلاک هایی که کاراکتر ( : ) به وجود اورده grep root passwd grep -e red -e blue file-name grep -v xxxx file-name grep -n grep -c از دستور grep برای جستجو و تعامل با مقادیر و فایل استفاده میکنیم در مثال اول با مشخص کردن الگوی جستجو root برای فایل passwd به دستور grep میگیم بین مقادیر فایل passwd هر خطی که الگوی مارو داشت نمایش بده اپشن e- برای مشخص کردن چند الگو استفاده میشه ، تو مثال ما الگو های red و blue مشخص شدن اپشن v- به دستور میگه تمام مقادیر فایل رو نمایش بده به جز قسمت هایی که الگوی ما رو دارن اپشن n- شماره خطی که مقدار الگوی مارو داشته هم باهاش نمایش میده اپشن c- به جای نمایش مقادیر ، تعداد خط هایی که الگوی مارو داشتن رو نمایش میده gzip gzcat gunzip از دستور gzip برای زیپ کردن فایل استفاده میشه از دستور gzcat برای نمایش مقادیر فایل زیپ استفاده میشه از دستور gunzip برای از زیپ خارج کردن مقادیر استفاده میشه tar -cvf test.tar test/ test2/ tar -tf test.tar tar xvf test.tar tar -zxvf file-name.tgz. از دستور tar برای ساخت فایل های فشرده tar استفاده میشه که بخشی از فایل های فشرده مرسوم رو تشکیل میدن اپشن c- برای ساخت فایل استفاده میشه اپشن v- برای نمایش فرایند استفاده میشه اپشن f- برای مشخص کردن فایل خروجی استفاده میشه اپشن x- برای استخراج مقادیر فایل فشرده استفاده میشه در مثال اول ما یک فایل فشرده به اسم test.tar میسازیم که مقادیر فولدر های test و test2 رو دریافت کرده در مثال دوم ما مقدار فایل ساخته شده در مثال اول رو بدون استخراج فایل میبینیم در مثال سوم فایل رو استخراج میکنیم در مثال چهارم هم فایل رو استخراج میکنیم ، که البته مربوط به فرمت پیشفرض نیست ، مثلا برای استخراج تربال ها استفاده میشه در ادامه لیست دستورات پر استفاده رو براتون گذاشتم که بخشیش رو تا الان دیدید و بقیش هم در قسمت های بعد با توجه به موضوع بحث اون قسمت میبینید head Displays the fi rst portion of the specifi ed fi le’s contents help Displays the help pages for bash built-in commands killall Sends a system signal to a running process based on process name kwrite Invokes the KWrite text editor less Advanced viewing of fi le contents link Creates a link to a fi le using an alias name ln Creates a symbolic or hard link to a designated fi le ls Lists directory contents makewhatis Creates the whatis database allowing man page keyword searches man Displays the man pages for the designated command or topic mkdir Creates the specifi ed directory under the current directory more Lists the contents of the specifi ed fi le, pausing after each screen of data mount Displays or mounts disk devices into the virtual fi lesystem mv Renames a fi le nano Invokes the nano text editor nice Runs a command using a different priority level on the system passwd Changes the password for a system user account ps Displays information about the running processes on the system pwd Displays the current directory renice Changes the priority of a running application on the system rm Deletes the specifi ed fi le rmdir Deletes the specifi ed directory sed Streams line editing using editor commands sleep Pauses bash shell operation for a specifi ed amount of time sort Organizes data in a data fi le based on the specifi ed order stat Views the fi le statistics of the specifi ed fi le sudo Runs an application as the root user account tail Displays the last portion of the specifi ed fi le’s contents tar Archives data and directories into a single fi le top Displays the active processes, showing vital system statistics touch Creates a new empty fi le or updates the timestamp on an existing fi le umount Removes a mounted disk device from the virtual fi lesystem uptime Displays information on how long the system has been running useradd Creates a new system user account userdel Removes an existing system user account. usermod Modifi es an existing system user account vi Invokes the vim text editor vmstat Produces a detailed report on memory and CPU usage on the system chage Changes the password expiration date for the specified system user account chfn Changes the specifi ed user account’s comment information chgrp Changes the default group of the specifi ed fi le or directory chmod Changes system security permissions for the specifi ed fi le or directory chown Changes the default owner of the specifi ed fi le or directory chpasswd Reads a fi le of login name and password pairs and updates the passwords chsh Changes the specifi ed user account’s default shell clear Removes text from a terminal emulator or virtual console terminal compress Original Unix fi le compression utility coproc Spawns a subshell in background mode and executes the designated command cp Copies the specifi ed fi les to an alternate location crontab Initiates the editor for the user’s crontable fi le, if allowed cut Removes a designated portion of each specifi ed fi le’s lines date Displays the date in various formats df Displays current disk space statistics for all mounted devices du Displays disk usage statistics for the specifi ed fi le path emacs Invokes the emacs text editor file Views the fi le type of the specifi ed fi le find Performs a recursive search for fi les free Checks available and used memory on the system gawk Streams editing using programming language commands grep Searches a fi le for the specifi ed text string gedit Invokes the GNOME Desktop editor getopt Parses command options including long options groups Displays group membership of the designated user groupadd Creates a new system group groupmod Modifi es an existing system group gzip The GNU Project’s compression using Lempel-Ziv compression whereis Displays a designated command’s fi les, including binary, source code, and man pages which Finds the location of an executable fi le who Displays users currently logged into system whoami Displays the current user’s username xargs Takes items from STDIN, builds commands, and executes the commands zip Unix version of the Windows PKZIP program پایان قسمت سوم از بخش یک در قسمت بعد وارد مباحث مرتبط با شل میشیم
    2 امتیاز
  4. اموزش کامل اسکریپت نویسی مجموعه اموزشی اسکریپتینگ از سه بخش اصلی تشکیل میشه بخش اول کامند لاین و پیش نیاز های اسکریپت نویسی رو تشکیل میده در بخش دوم اسکریپت نویسی رو از پایه شروع میکنیم و تا سطح متوسط پیش میریم (صفحه دوم) و در بخش سوم مباحت مربوط به اسکریپت نویسی پیشرفته رو دنبال میکنیم لطفا به هیچ عنوان اسپم ندید و اگر امری بود در پیام خصوصی عنوان کنید __________________________________________________________________________________________________________________ بخش اول - قسمت یکم یکی از راه های وصل شدن به CLI یا command line interface یا همان رابط کاربری خط فرمان ، استفاده از لینوکس بدون دسکتاپ هستش درست مثل لینوکس در دوران قدیمش که شما فقط با یک محیط ویژال کنسول سر و کار داشتید برای ویژال کنسول کردن محیط گرافیکی هم میتونیم از Alt + Ctrl + F1 / F7 استفاده کنیم که هر کدوم از اف ها یک محیط ویژال کنسول مجزا برامون فراهم میکنن که مستقیم به ران لول عمیق تر وصل اند و حتی میتونیم همزمان با یوزر های مختلف لاگین کنیم هر کدوم از این محیط های کنسولیه مجزا شماره ی مربوط به خودشون رو دارن که در tty دیده میشه مثلا وقتی شما با Alt + Ctrl +F2 دومین محیط کنسولیه خودتون رو باز میکنید و با همون یوزر یا یوزر دیگه ای لاگین میکنید در اولین خط مقدار tty2 رو میتونید ببینید که نشون میده شما در دومین محیط کنسولیتون قرار دارید برای شیفت کردن بین tty ها از همون Alt + Ctrl + F با شماره ی tty مورد نظر استفاده میشه تو این مورد F1 ( برگشتن از محیط کنسولیه دوم ( با مقدار tty2 ) به محیط کنسولیه اولیه ( با مقدار tty 1 ) ) بعد از شیفت کردن بین کنسول ها ، تمام کنسول ها با هر یوزری که دارن در حالت لاگین میمونن و اعمالی که باهاشون انجام شده هم دست نخورده باقی میمونه که این موضوع انسجام و انعطاف قابل توجهی به وجود میاره ما میتونیم درون محیط های کنسولی هم از text mode console terminal برای کاستومایز کردن محیط کنسول استفاده کنیم با استفاده از دستور setterm برای مثال من چند مورد رو قرار میدم ، که البته خودتون با help میتونید لیست متنوع دستور setterm رو ببینید setterm -background black white red blue green yellow magenta cyan تغیر رنگ پس زمینه به یکی از رنگ هایی که اسمش رو نوشتم setterm -foreground green تغیر رنگ متن به سبز ( یا هر رنگی که اسمش رو بنویسید ) inversescreen on or off برعکس کردن رنگ زمینه و متن store ذخیره ی تغیرات reset برگشت به حالت پیش فرض روش بعدی وصل شدن به شل استفاده از ترمینال های گرافیکی از داخل محیط دسکتاپ هستش این ترمینال ها روی کنسول کار میکنن ولی از داخل محیط گرافیکی دسکتاپ ترمینال های مختلفی در محیط گرافیکی وجوده که هر کدوم اپشن های خودشون رو دارن ، ولی چون کار اصلیه مارو شل ها انجام میدن و این ترمینال ها صرفا رابط هستن ، استفاده از هر کدومشون بیشتر جنبه ی سلیقه ای داره در زیر من لیست پر استفاده هاشون رو با سایت هاشون برای علاقه مندان میزارم Eterm [Hidden Content] Final Term [Hidden Content] GNOME Terminal [Hidden Content] Guake [Hidden Content] Konsole Terminal [Hidden Content] LillyTerm [Hidden Content] LXTerminal [Hidden Content] mrxvt [Hidden Content] ROXTerm [Hidden Content] rxvt [Hidden Content] rxvt-unicode [Hidden Content] Sakura [Hidden Content] st [Hidden Content] Terminator [Hidden Content] Terminology [Hidden Content] tilda [Hidden Content] UXterm [Hidden Content] Wterm [Hidden Content] xterm [Hidden Content] Xfce4 Terminal [Hidden Content] Yakuake [Hidden Content] خوب دوستان این قسمت بیشتر جنبه ی مقدمه ی بخش اول و اشنایی علاقه مندان با کنسول رو داشت به همین دلیل سعی کردم خیلی کوتاه و خلاصه توضیحش بدم ، در قسمت دوم دستورات خط فرمان رو شروع میکنیم
    1 امتیاز
  5. بخش اول - قسمت هشتم (قسمت اخر از بخش اول) تغیرات اصلاحی یوزر اکانت لینوکس ابزار های مختلفی برای تغیرات در یوزر ها در اختیارمون میذاره , مثل : usermod برای تغیرات در فیلد های اکانت یوزر ازش استفاده میکنیم passwd برای تغیر پسورد یوزر کاربرد داره chpasswd این دستور با دریافت یک فایل متنی حاوی یوزر ها و پسورد انتخوابی , پسورد تمام یوزر هارو تغیر میده chage برای تغیر تاریخ انقضای پسورد کاربرد داره chfn برای تغیر کامنت اطلاعات یوزر استفاده میشه chsh برای تغیر شل پیش فرض یوزر استفاه میشه دستور usermod اپشن های این دستور باعث تغیر در بیشتر فیلد های فایل /etc/passwd میشن و اپشن ها مشابه اپشن های دستور useradd هستند اپشن هایی مثل c , -e , -g- چند تا از اپشن های متفاوتش رو براتون میزارم l- تغیر اسم لاگین یوزر L- قفل کردن یوزر اکانت , بنابراین یوزر نمیتونه لاگین کنه p- تغیر پسورد یوزر U- باز کردن قفل یوزر passwd و chpasswd دستور passwd یک راه سریع برای تغیر فقط پسورده # passwd test Changing password for user test. New UNIX password: Retype new UNIX password: passwd: all authentication tokens updated successfully. اگه دستور رو به صورت خالی وارد کنید , پسورد یوزر فعلی عوض میشه اکه با اسم یوزر وارد کنید , پسورد اون یوزر عوض میشه (البته اگه روت باشید) با استفاده از اپشن e- میتونید یوزر رو مجبور به تغیر پسوردش کنید در صورت نیاز به تغیر پسورد دسته جمعی میتونید از chpasswd به صورت زیر استفاده کنید # chpasswd < users.txt در فایل متنی اسم های لاگین همراه با پسورد هاشون قرار میگیرین که با استفاده از ( : ) از هم جدا شدن , مثل : user:password chsh , chfn و chage دستور chsh طبق مثال زیر برای تغیر شل پیش فرض استفاه میشه # chsh -s /bin/csh test Changing shell for test. Shell changed. دستور chfn یک روش استانارد برای ذخیره اطلاعات در فیلد کامنت در فایل passwd فراهم میکنه که به جای اطلاعات معمول از اطلاعات مخصوص استفاده شده در یونیکس فینگر استفاه میکنه دستور finger به شما اجازه میده به راحتی در مورد یوزر ها اطلاعات کسب کنید # finger rednaxela Login: rednaxela Name: red naxela Directory: /home/rednaxela Shell: /bin/bash On since Thu Sep 20 18:03 (EDT) on pts/0 from 192.168.1.2 No mail. No Plan. البته به خاطر نگرانی های امنیتی در بیشتر لینوکس ها دستور فینگر غیر فعال شده یک نمونه از دستور chfn رو بدون پارامتر در مثال زیر میبینید # chfn test Changing finger information for test. Name []: Ima Test Office []: Director of Technology Office Phone []: (123)555-1234 Home Phone []: (123)555-9876 Finger information changed. # finger test Login: test Name: Ima Test Directory: /home/test Shell: /bin/csh Office: Director of Technology Office Phone: (123)555-1234 Home Phone: (123)555-9876 Never logged in. No mail. No Plan. حالا به مقدار فایل /etc/passwd نگاه کنید # grep test /etc/passwd test:x:504:504:Ima Test,Director of Technology,(123)5551234,(123)555-9876:/home/test:/bin/csh دستور chage مقادیر مرتبط با پسورد هارو دریافت و تنظیم میکنه d- مشخص کرن زمان اخرین تغیر پسورد E- مشخص کردن تاریخ انقضای پسورد I- مشخص کردن زمان غیر فعال شدن اکانت بعد از منقضی شدن پسورد m- مشخص کردن حداقل روز های ثابت موندن پسورد بعد از هر تغیر W- مشخص کرن تعداد روز هایی که قبل از منقضی شدن پسورد باید هشدار داده بشه گروه ها در لینوکس : گروه ها هم یکی دیگه از موضوعات امنیتی لینوکس هستن لینوکس ها با روش های مختلفی بحث گروه پیض فرض رو پیش میبرن بعضی از لینوکس ها یک گروه پیش فرض برای همه کاربر ها تعریف میکنن اگه سیستم شما هم همینکار رو میکنه باید مراقب باشید چون فایل هاتون ممکنه برای کاربرای دیگه هم قابل استفاده باشه بقیه لینوکس ها برای هر کاربر یک گروه جدا تعریف میکنن که از این مشگل امنیتی جلوگیری بشه هر گروه اسم خودش و یک کد منحصر به فرد داره که بهش میگیم gid شما میتونید از ابزار هایی برای اینجاد و مدیریت گروه خودتون استفاه کنید فایل /etc/group درست مثل یوزر اکانت ها , اطلاعات گروه ها هم در یک فایل نگه داری میشه این فایل شامل اطلاعات مربوط به هر گروه میشه که در مثال زیر یک نمونش رو میتونید ببینید root:x:0:root bin:x:1:root,bin,daemon daemon:x:2:root,bin,daemon sys:x:3:root,bin,adm adm:x:4:root,adm,daemon rednaxela:x:501: red:x:502: blue:x:503: mysql:x:27: test:x:504: مثل uid ها gid ها هم از الگوی خاصی تبعیت میکنن گروه هایی که برای اکانت های سیستمی در نظر گرفته میشه gid زیر 500 دارن و gid یوزر گروه ها از 500 شروع میشه محتوای فایل /etc/group از چهار فیلد تشکیل شدن , که به ترتیب : اسم گروه پسورد گروه gid گروه لیست یوزر هایی که به گروه تعلق دارن گرچه این موضوع مرسوم نیست ولی یوزر ها با استفاده از پسورد گروه میتونن عضو اون گروه بشن ایجاد گروه جدید : با استفاده از دستور groupadd شما میتونید گروه جدید اضافه کنید # /usr/sbin/groupadd guardiran # tail /etc/group haldaemon:x:68: xfs:x:43: gdm:x:42: rednaxela:x:501: red:x:502: blue:x:503: mysql:x:27: test:x:504: guardiran:x:505: وقتی یک گروه جدید میسازید هیچ یوزری در حالت دیفالت عضوش نیست برای اضافه کردن یوزر بهش از دستور usermod استفاده کنید # /usr/sbin/usermod -G guardiran rednaxela # /usr/sbin/usermod -G guardiran test # tail /etc/group haldaemon:x:68: xfs:x:43: gdm:x:42: rednaxela:x:501: red:x:502: blue:x:503: mysql:x:27: test:x:504: guardiran:x:505:rednaxela, test و همچنین با دستور groupmod میتونید مقادیر رو اصلاح کنید مثل پارامتر های -n و -g که برای تغیر اسم و gid استفاده میشن # /usr/sbin/groupmod -n theguardiran guardiran # tail /etc/group haldaemon:x:68: xfs:x:43: gdm:x:42: rednaxela:x:501: red:x:502: blue:x:503: mysql:x:27: test:x:504: theguardiran:x:505:rednaxela,test فایل پرمیشن ها : الان که با یوزر ها و گروه ها اشنا شدید وقتشه بریم سمت فایل پرمیشن ها , که قبلا اونارو در لیست فایل ها و دایرکتوری ها در کنار بقیه مشخصات مشاهده کردید $ ls -l total 68 —rw-rw-r-- 1 rednaxela rednaxela 50 2019-09-13 07:49 file1.gz —rw-rw-r-- 1 rednaxela rednaxela 23 2019-09-13 07:50 file2 —rw-rw-r-- 1 rednaxela rednaxela 48 2019-09-13 07:56 file3 —rw-rw-r-- 1 rednaxela rednaxela 34 2019-09-13 08:59 file4 —rwxrwxr-x 1 rednaxela rednaxela 4882 2019-09-18 13:58 myprog —rw-rw-r-- 1 rednaxela rednaxela 237 2019-09-18 13:58 myprog.c drwxrwxr-x 2 rednaxela rednaxela 4096 2019-09-03 15:12 test1 drwxrwxr-x 2 rednaxela rednaxela 4096 2019-09-03 15:12 test2 اولین فیلد در لیست بالا پرمیشن های فایل ها و دایرکتوری هارو مشخص میکنه و اولین کاراکتر در فیلد هم نوغ اون ابجکت رو مشخص میکنه — = files d = directories l = links c = character devices b = block devices n = network devices بعد از اون شما سه تا ست سه تایی میبینید که هر کدوم از ست های سه کاراکتری یک سطح دسترسی رو مشخص میکنن r = read permission w = write permission x = execute permission اگه یکی از پرمیشن ها گرفته شده باشه به جاش دش قرار میگیره ( - ) سه تا ست به معنای سه سطح امنیتی برای ابجکته ست اول , برای صاحب ابجکته ست دوم , برای گروهیه که ابجکت بهش تعلق داره ست سوم , برای بقیه یوزر هاست —rwxrwxr-x 1 rednaxela rednaxela 4882 2019-09-18 13:58 myprog مثلا نمونه بالا نشون میده که : اولا ابجکتمون فایله , چون اولین کاراکتر دش هستش ( - ) سه کاراکتر بعدی که متعلق به صاحب فایله میگه که یوزر هر سه اجازه ( خواندن , نوشتن , اجرا ) فایل رو داره سه کاراکتر بعدی یا همون ست دوم میگه که گروه فایل هم همون دسترسی هارو داره ولی ست اخر که برای سایر یوزر هاست پرمیشن نوشتن رو نداره پرمیشن های پیش فرض : پرمیشن های پیش فرض از طریق umask اعمال و نگه داری میشن $ touch newfile $ ls -l newfile —rw-r--r-- 1 rednaxela rednaxela 0 Sep 20 19:16 newfile فایل با استفاده از سطح دسترسی پیشفرضی که برامون مشخص شده ساخته شد دستور umask پرمیشن های پیش فرض رو مشخص و نمایش میده $ umask 0022 اولین عدد مشخص شده یک موضوع امنیتیه , به اسم sticky bit سه عدد بعدی مربوط به پرمیشن ها میشه برای اینکه معادل عددی پرمیشن ها اینجا استفاده میشن نگاهی به جدول زیر بندازید --- 0 no permissions --x 1 execute permission -w- 2 write permission -wx 3 write & execute permissions r-- 4 read permission r-x 5 read & execute permissions rw- 6 read & write permissions rwx 7 read & write & execute permissions (full) به نحوه کارکرد umask و مقداری که به دستور میدیم در مثال زیر دقت کنید و برای درک بهتر با جدول بالا مقایسه کنید میبینید که اولا مقدار دسترسی ای که به دستور میدیم از فایل گرفته میشه نه اینکه اون مقدار ست بشه و اینکه این مقدار از عدد شش کم شده نه هفت $ umask 026 $ touch newfile2 $ ls -l newfile2 -rw-r----- 1 rednaxela rednaxela 0 Sep 20 19:46 newfile2 توجه داشته باشید که مقدار تعریف شده روی دایرکتوری ها هم تاثیر داره $ mkdir newdir $ ls -l drwxr-x--x 2 rednaxela rednaxela 4096 Sep 20 20:11 newdir/ زمانی که لازم باشه مقدار سطح دسترسی یه ابجکت رو مستقیم تغیر بدیم از دستور chmod به شکل زیر استفاده میکنیم $ chmod 760 newfile $ ls -l newfile -rwxrw---- 1 rednaxela rednaxela 0 Sep 20 19:16 newfile میبینید که برخلاف مثال حالت پیشفرض , اینجا دقیقا سطح دسترسی ای که به دستور دادیم اعمال شده شما میتونید با استفاده از دستور chown مالکیت یوزر و گروه یک ابجکت رو تغیر بدید مثال زیر یوزر فایل رو تغیر میده # chown red newfile # ls -l newfile -rw-rw-r-- 1 red rednaxela 0 Sep 20 19:16 newfile مثال زیر هم یوزر و هم گروه فایل رو تغیر میده # chown red.share newfile # ls -l newfile -rw-rw-r-- 1 red share 0 Sep 20 19:16 newfile مثال زیر فقط گروه فایل رو تغیر میده , به کاراکتر دات دقت کنید # chown .share2 newfile # ls -l newfile -rw-rw-r-- 1 red share2 0 Sep 20 19:16 newfile البته برای تغیر فقط گروه فایل , میتونید از دستور chgrp هم استفاه کنید $ chgrp share3 newfile $ ls -l newfile -rw-rw-r-- 1 red share3 0 Sep 20 19:16 newfile اشتراک فایل ها : همونطور که تا الان حدس زدید ایجاد گروه ها راهی برای به اشتراک گذاشتن سطح دسترسی به فایل هاست و به عنوان اشتراک گذاری کاربرد داره در بخش کد های مربوط به پرمیشن ها دیدید که وقتی یک فایل جدید میسازید , لینوکس پرمیشن پیش فرض فایل رو بر اساس یوزر ایدی و گروه ایدی مشخص میکنه , تا اجازه دسترسی به یوزر های دیگه هم بده شما یا باید پرمیشن های فایل رو تغیر بدید یا باید گروه پیش فرض فایل رو تغیر بدید به گروهی که یوزرا اونجان این موضوع میتونه ازاردهنده باشه اگه شما بخواید موارد زیادی رو بسازید و به اشتراک بزارید , که خوشبختانه راه حل مناسبی داره سه بیت دیگه هست که لینوکس برای هر فایل و دایرکتوری ذخیره میکنه : (The set user id (SUID وقتی یک فایل توسط یک یوزر اجرا میشه , برنامه تحت پرمیشن صاحب فایل اجرا بشه (The set group id (SGID برای فایل : وقتی یک فایل اجرا میشه برنامه تحت پرمیشن گروه فایل عمل کنه , برای دایرکتوری : اگه فایلی داخل دایرکتوری ساخته شد , از گروه دایرکتوری به عنوان گروه پیش فرض استفاده کنه The sticky bit فایل بعد از پایان پروسه در مموری باقی بمونه بیت SGID برای اشتراک گذاری با اهمیته , با فعال کردن این بیت میتونید تمام فایل هایی که در دایرکتوریمون ساخته میشن رو مجبور کنید تا در گروه دایرکتوری قرار بگیرن هر کدوم از سه مورد ذکر شده مثل بحث پرمیشن ها با کد شناخته میشن , و این همون عدد اول از چهار عدد umask هستش در لیست زیر نمونه کد ها و معانیشون رو میتونید ببینید 0 هیچ کدوم از بیت ها ست نشده 1 sticky bit ست شده 2 SGID bit ست شده 3 SGID & sticky bit ست شدن 4 SUID bit ست شده 5 SUID & sticky bit ست شدن 6 SUID & SGID ست شدن 7 همه بیت ها ست شدن برای ساخت یک دایرکتوری مخصوص اشتراک گذاری تنها نیاز دارید بیت SGID برای دایرکتوری ست بشه $ mkdir testdir $ ls -l drwxrwxr-x 2 rednaxela rednaxela 4096 Sep 20 23:12 testdir/ $ chgrp shared testdir $ chmod g+s testdir $ ls -l drwxrwsr-x 2 rednaxela shared 4096 Sep 20 23:12 testdir/ $ umask 002 $ cd testdir $ touch testfile $ ls -l total 0 -rw-rw-r-- 1 rednaxela shared 0 Sep 20 23:13 testfile پایان قسمت هشتم از بخش اول پایان بخش اول
    1 امتیاز
  6. بخش اول - قسمت هفتم هیچ سیستمی کاملا خالی از امنیت نیست , باید حتما مکانیزمی برای محافظت از فایل ها در برابر تغیر و دسترسی غیر مجاز باشه سیستم لینوکس از روش یونیکس برای مجوز دسترسی استفاده میکنه اجازه دسترسی تقسیم بندی شده برای یوزر ها و گروه ها بر مبنای تنظیمات هر فایل یا دایرکتوری هسته سیستم امنیتی لینوکس یوزر اکانته , میزان دسترسی کاربران سیستم به ابجکت های مختلف بستگی به یوزری داره که باهاش لاگین میکنن سیستم لینوکس از فایل های خاصی برای مدیریت یوزر اکانت ها استفاده میکنه , قبل از اینکه در مورد پرمیشن ها صحبت کنیم لازمه بدونیم لینوکس چجوری یوزر اکانت هارو هندل میکنه The /etc/passwd سیستم لینوکس برای همخونی دادن login name و uid از این فایل استفاده میکنه , این فایل حاویه هفت بخش اطلاعاتیه , یک نمونشو پایین میبینید $ cat /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 news:x:9:13:news:/etc/news:mail:/sbin/nologin uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin gopher:x:13:30:gopher:/var/gopher:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin rpm:x:37:37::/var/lib/rpm:/sbin/nologin vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin mailnull:x:47:47::/var/spool/mqueue:/sbin/nologin smmsp:x:51:51::/var/spool/mqueue:/sbin/nologin apache:x:48:48:Apache:/var/www:/sbin/nologin rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin ntp:x:38:38::/etc/ntp:/sbin/nologin nscd:x:28:28:NSCD Daemon:/:/sbin/nologin tcpdump:x:72:72::/:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin avahi:x:70:70:Avahi daemon:/:/sbin/nologin hsqldb:x:96:96::/var/lib/hsqldb:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin haldaemon:x:68:68:HAL daemon:/:/sbin/nologin xfs:x:43:43:X Font Server:/etc/X11/fs:/sbin/nologin gdm:x:42:42::/var/gdm:/sbin/nologin rednaxela:x:500:500:red naxela:/home/rednaxela:/bin/bash red:x:502:502:red:/home/red:/bin/bash blue:x:503:503:blue:/home/blue:/bin/bash mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash یوزر root مدیر سیستم لینوکسه و همیشه مقدار uid صفر رو داره میبینید که سیستم لینوکس اکانت های زیادی رو ساخته که در واقع یوزر واقعی نیستن و برای مقاصد سیستمی استفاده میشن که بهشون میگن سیستم اکانت سیستم اکانت در اصل یک اکانت مخصوصه که سرویس ها روی سیستم ران میکنن تا به منابع روی سیستم دسترسی پیدا کنن تمام سرویس هایی که در حالت بک گراند ران میشن نیاز دارن تحت یک سیستم اکانت به سیستم لاگین بشن اکثر لینوکس ها به سیستم اکانت ها uid زیر 500 میدن (مثال بالا رو ببینید) و uid یوزر هارو از 500 شروع میکنن (مثال بالا) فیلد های فایل /etc/passwd شامل موارد زیر هستند یوزرنیم لاگین پسورد یوزر مقدار uid یوزرم قدار gid یوزر مشخصات یوزر لوکیشن دایرکتوری home یوزر و مقدار اخر هم نوع شل یوزره مقدار x که در فیلد پسورد قرار گرفته به معنی پسورد یوزر نیست , سال ها پیش لینوکس پسورد هارو به صورت رمزنگاری شده تو این فیلد میذاشت , که چون خیلی از برنامه ها برای اطلاعات یوزر به دسترسی به این فایل نیاز داشتن , این موضوع یک مشگل امنیتی محسوب میشد الان اکثر لینوکس ها پسورد یوزر هارو تو یه فایل جدا به اسم etc/shadow/ قرار میدن که فقط برنامه های مخصوصی مثل لاگین بهش دسترسی دارن The /etc/shadow از این فایل برای نگهداری پسورد ها و اطلاعات مربوط بهشون استفاده میشه فقط یوزر root میتونه به این فایل دسترسی داشته باشه که باعث میشه امنیت بیشتری نسبت به /etc/passwd داشته باشه این فایل برای هر یوزر یه رکورد نگه میداره (مثال زیر) rednaxela:$1$.FfcK0ns$f1UgiyHQ25wrB/hykCn020:11627:0:99999:7::: هر رکورد 9 تا فیلد داره , که با هم به ترتیب مرورشون میکنیم اسم لاگین پسورد به صورت رمزنگاری شده اخرین تاریخی که پسورد تغیر کرده حداقل روز های موندگاریه پسورد قبل از امکان تغیر تاریخ انقضای پسورد چند روز قبل از منقضی شدن پسورد هشدار داده بشه تعداد روز هایی که , بعد از منقضی شدن پسورد اکانت باید غیر فعال بشه تاریخ مربوط به اینکه از چه زمانی اکانت غیر فعال شده فیلدی که برای استفاده در اینده تعبیه شده در مثال بالا شما شش فیلد فعال میبینید , که حالت نرماله و به ترتیب شش توصیف اول هستن اضافه کردن یوزر : برای این کار از دستور useradd استفاده میکنیم این دستور یک راه ساده برای اضافه کرن یوزر بهمون میده , که از تلفیق مقادیر پیش فرض سیستم و پارامتر های خط دستور برای تعریف یوزر استفاده میکنه این مقادیر پیش فرض سیستمی در مسیر زیر قرار دارن etc/defualt/useradd/ که برای دیدنشون میتونید از پارامتر D- استفاده کنید ، به مثال زیر توجه کنید : # /usr/sbin/useradd -D GROUP=100 HOME=/home INACTIVE=-1 EXPIRE= SHELL=/bin/bash SKEL=/etc/skel CREATE_MAIL_SPOOL=yes پارامتر D- به ما میگه اگه از مقادیر مخصوص خومون موقع ساخت اکانت استفاده نکنیم , به صورت پیش فرض چه جایگزینی براشون در نظر گرفته میشه طبق مثال بالا این مقایر به ترتیب میگن که : یوزر جدید اضافه میشه به گروه مرسوم با گروپ ایدی 100 یوزر جدید یک هوم اکانت در دایرکتوری هوم با اسم خودش اضافه میکنه یوزر جدید بعد از منقضی شدن پسورد غیر فعال نخواهد شد یوزر جدید بعد از مدت زمان معینی منقضی نخواهد شد یوزر جدید از شل بش به عنوان شل پیش فرض استفاده خواهد کرد سیستم محتوای etc/skel/ رو در دایرکتوری هوم یوزر اضافه میکنه سیستم یک فایل در دایرکتوری میل برای یوزر میسازه , تا ایمیل هاشو دریافت کنه مقادیر /etc/skel در برخی لینوکس ها : $ ls -al /etc/skel total 32 drwxr-xr-x 2 root root 4096 2019-04-29 08:26 . drwxr-xr-x 135 root root 12288 2019-09-23 18:49 .. —rw-r--r-- 1 root root 220 2019-04-18 21:51 .bash_logout —rw-r--r-- 1 root root 3103 2019-04-18 21:51 .bashrc —rw-r--r-- 1 root root 179 2019-03-26 08:31 examples.desktop —rw-r--r-- 1 root root 675 2019-04-18 21:51 .profile شما باید این فایل هارو از قسمت های قبل بشناسید , اینها همون فایل های استاندارد استارت اپ هستند شما میتونید این موضوع رو با ساخت یک یوزر اکانت با مقادیر پیش فرض تست کنید # useradd -m test # ls -al /home/test total 24 drwxr-xr-x 2 test test 4096 2019-09-23 19:01 . drwxr-xr-x 4 root root 4096 2019-09-23 19:01 .. —rw-r--r-- 1 test test 220 2019-04-18 21:51 .bash_logout —rw-r--r-- 1 test test 3103 2019-04-18 21:51 .bashrc —rw-r--r-- 1 test test 179 2019-03-26 08:31 examples.desktop —rw-r--r-- 1 test test 675 2019-04-18 21:51 .profile در حالت دیفالت دستور useradd دایرکتوری home رو نمیسازه که اپشن m- باعث میشه این کارو برامون بکنه میبینید که محتوای etc/skel/ در هوم دایرکتوریه جدید هستش شما میتونید هنگام ساخت یوزر اکانت هر کدوم از مقادیر پیش فرض رو که خواستید تغیر بدید c comment- برای اضافه کردن اطلاعات به فیلد کامنت یوزر استفاده میشه d home_dir- برای جایگزین کردن اسم دایرکتوری با مقدار پیش فرض استفاده میشه e expire_date- برای تعین تاریخ انقضا اکانت استفاده میشه f inactive_days- مشخص میکنه چه مدت بعد از منقضی شدن پسورد اکانت غیر فعال بشه g initial_group- برای مشخص کردن گروپ ایدی یوزر استفاده میشه G group- برای تعین چند گروه برای یوزر استفاده میشه k- همراه با m- استفاده میشه , برای کپی کردن مقادیر etc/skel/ تو هوم دایرکتوری m- برای ساخت هوم دایرکتوری استفاده میشه n- برای ایجاد یک گروه جدید هم اسم با خود یوزر , برای یوزر استفاده میشه r- برای ساخت اکانت های سیستمی استفاده میشه p passwd- تعین پسورد پیش فرض یوزر s shell- تعین شل پیش فرض یوزر u uid- تعین یک uid مشخص برای یوزر طبق چیزی که گفته شد میتونید مقادیر پیش فرض رو در هنگام ساخت یوزر اکانت برای یوزر تغیر بدید و یا , میتونید خود حالت پیش فرض رو تغیر بدید در این صورت هر اکانت دیگه ای که بسازید با مقایر پیش فرضی که شما تعین کردید ساخته میشه برای این کار باید پارامتر D- رو قبل از پارامتر های اصلاحی زیر بزارید b default_home- تغیر لوکیشن پیش فرض هوم دایرکتوری e expiration_date- تغیر مقدار زمان پیش فرض برای منقضی شدن اکانت f inactive- تغیر مقدار زمان پیش فرض برای غیر فعال شدن اکانت بعد از منقضی شدن پسوردش g group- تغیر gid پیش فرض s shell- تغیر لاگین شل پیش فرض به مثال زیر توجه کنید # useradd -D -s /bin/tsch # useradd -D GROUP=100 HOME=/home INACTIVE=-1 EXPIRE= SHELL=/bin/tsch SKEL=/etc/skel CREATE_MAIL_SPOOL=yes در این مثال مقدار شل پیش فرض برای تمام اکانت هایی که از این به بعد ساخته بشن تغیر کرد remove کردن یوزر برای از بین بردن یک اکانت میتونیم از دستور userdel استفاده کنیم در حالت پیش فرض این دستور فقط اطلاعات یوزر رو از فایل /etc/passswd پاک میکنه اگه از پارامتر r- استفاده کنید هوم دایرکتوری و دایرکتوری ایمیل هم پاک میشن اگرچه در بعضی لینوکس ها بقیه فایل های اکانت از بین رفته ، باقی میمونن به مثال زیر توجه کنید # /usr/sbin/userdel -r test # ls -al /home/test ls: cannot access /home/test: No such file or directory پایان قسمت هفتم از بخش یک در قسمت بعد به اصلاحات یوزر و کار با گروه ها و سطح های دسترسی (permissions) میپردازیم
    1 امتیاز
  7. بخش اول - قسمت ششم استارت اپ ها : لینوکس از متغیر های موقعیتی در اهداف مختلفی استفاده میکنه , شما الان میدونید چطور اونهارو اصلاح کنید , یا متغیر های خودتون رو ایجاد کنید وقتی شما با لاگینتون یک شل بش رو اجرا میکنید در حالت پیش فرض بش چندین فایل رو چک میکنه اسم این فایل ها فایل های استارت اپ یا فایل های محیطی هستش فایل های استارت اپی که بش چک میکنه بستگی داره به نوع اجرا شدن خود شل شما میتونید یک شل بش رو با سه روش استفاده کنید به عنوان شل پیش فرض موقع لاگین کرن به عنوان یک شل تعاملی که ساب شل محسوب بشه به عنوان یک شل غیر تعاملی برای اجرای اسکریپت ها که با استفاده از هر کدوم از روش های بالا فایل های استارت اپ مد نظرمون رو مشخص میکنیم شل پیش فرض موقع لاگین با پنج فایل استارت اپ زیر سروکار داره /etc/profile $HOME/.bash_profile $HOME/.bashrc $HOME/.bash_login $HOME/.profile فایل /etc/profile استارت اپ فایل اصلی پیش فرضه تمام یوزر های سیستم این فایل رو موقع لاگین اجرا میکنن لازمه بدونید بعضی از لینوکس ها از pluggable authentication modules = PAM استفاده میکنن , که در این صورت قبل از اینکه شل بش اجرا بشه پروسه pam file اجرا میشه که باعث تغیر در حالت پیش فرض اجرای استارت اپ ها میشه یک نمونه از محتویات این فایل رو در کادر زیر میبینید # /etc/profile: system-wide .profile file for the Bourne shell (sh(1)) # and Bourne compatible shells (bash(1), ksh(1), ash(1), ...). if [ "$PS1" ]; then if [ "$BASH" ] && [ "$BASH" != "/bin/sh" ]; then # The file bash.bashrc already sets the default PS1. # PS1='\h:\w\$ ' if [ -f /etc/bash.bashrc ]; then . /etc/bash.bashrc fi else if [ "`id -u`" -eq 0 ]; then PS1='# ' else PS1='$ ' fi fi fi # The default umask is now handled by pam_umask. # See pam_umask(8) and /etc/login.defs. if [ -d /etc/profile.d ]; then for i in /etc/profile.d/*.sh; do if [ -r $i ]; then . $i fi done unset i fi هر نوع از لینوکس تنظیمات مختلفی رو در این فایل اعمال میکنه مثلا در این نمونه فایلی که با اسم /etc/bash.bashrc. شناخته شده , حاوی لیست متغیر های موقعیتی هستش توجه کنید در مثال پایین از فایل /etc/profile که متعلق به CentOS distribution هستش , به فایلی با اسم /etc/bash.bashrc اشاره ای نشده # /etc/profile # System wide environment and startup programs, for login setup # Functions and aliases go in /etc/bashrc # It's NOT a good idea to change this file unless you know what you # are doing. It's much better to create a custom.sh shell script in # /etc/profile.d/ to make custom changes to your environment, to # prevent the need for merging in future updates. pathmunge () { case ":${PATH}:" in *:"$1":*) ;; *) if [ "$2" = "after" ] ; then PATH=$PATH:$1 else PATH=$1:$PATH fi esac }if [ -x /usr/bin/id ]; then if [ -z "$EUID" ]; then # ksh workaround EUID=`id -u` UID=`id -ru` fi USER="`id -un`" LOGNAME=$USER MAIL="/var/spool/mail/$USER" fi # Path manipulation if [ "$EUID" = "0" ]; then pathmunge /sbin pathmunge /usr/sbin pathmunge /usr/local/sbin else pathmunge /usr/local/sbin after pathmunge /usr/sbin after pathmunge /sbin after fi HOSTNAME=`/bin/hostname 2>/dev/null` HISTSIZE=1000 if [ "$HISTCONTROL" = "ignorespace" ] ; then export HISTCONTROL=ignoreboth else export HISTCONTROL=ignoredups fi export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL # By default, we want umask to get set. This sets it for login shell # Current threshold for system reserved uid/gids is 200 # You could check uidgid reservation validity in # /usr/share/doc/setup-*/uidgid file if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then umask 002 else umask 022 fi for i in /etc/profile.d/*.sh ; do if [ -r "$i" ]; then if [ "${-#*i}" != "$-" ]; then . "$i" else . "$i" >/dev/null 2>&1 fi fi done unset i unset -f pathmunge از بین بقیه فایل های استارت اپ اکثر لینوکس ها فقط یکی دوتاشون رو مورد استفاده قرار میدن $HOME/.bash_profile $HOME/.bashrc $HOME/.bash_login $HOME/.profile دقت کنید که هر چهار فایل با نقطه شروع میشن , که باعث میشه مخفی باشن به خاطر اینکه این فایل ها در دایرکتوری هر یوزر هستند , هر یوزر میتونه فقط فایل های خودش رو تغیر بده و متغیر های خودش رو اضافه کنه , که برای هر سیشن بشی که اجرا کنه فعال باشن ارایه ها : نکته جالب در مورد متغیر های محیطی اینه که میتونن به عنوان ارایه هم مورد استفاده قرار بگیرن یک ارایه , متغیریه که میتونه چند مقدار رو نگه داره برای ایجاد چند مقدار برای یک متغیر (تبدیل به ارایه) فقط کافیه اونارو بین پرانتز قرار بدید و با فاصله از هم جداشون کنید $ mytest=(one two three four five) روش مشاهده مقادیر ارایه ها با متغیر ها متفاوته شما نمیتونید مقدار ارایه هارو با روش متغیر ها نمایش بدید $ echo $mytest one تنها اولین مقدار از ارایه نمایش داده شد برای دیدن بخش مورد نظر از ارایه , از روش زیر تبعیت میکنیم $ echo ${mytest[2]} three به دلیل اینکه مقادیر ارایه از شماره صفر شروع میشن , شماره جایگاه سومین مقدار میشه 2 برای دیدن تمام مقادیر ارایه از * استفاده میکنیم $ echo ${mytest[*]} one two three four five شما میتونید حتی فقط مقدار مورد نظرتونو تغیر بدید $ mytest[2]=seven $ $ echo ${mytest[*]} one two seven four five میبینید که مقدار جایگاه شماره 2 به seven تغیر کرد شما حتی میتونید با استفاده از دستور unset مقدار مورد نظر رو حذف کنید $ unset mytest[2] $ $ echo ${mytest[*]} one two four five $ $ echo ${mytest[2]} $ echo ${mytest[3]} four اگه دقت کرده باشید متوجه میشید که مقدار جایگاه شماره 2 پاک شده و خودش تغیر نکرده شما میتونید طبق مثال زیر تمام ارایه رو حذف کنید $ unset mytest $ $ echo ${mytest[*]} $ پایان قسمت ششم از بخش یک در قسمت بعد وارد موضوعات مرتبط با یوزر میشیم
    1 امتیاز
  8. بخش اول - قسمت پنجم یکی از عوامل تاثیر گذار در محیط شل متغیر های محیطی هستند , که خیلی از برنامه ها و اسکریپت ها ازشون استفاده میکنن , در این قسمت بیشتر باهاشون اشنا میشید در اصل متغیر های محیطی محلی برای نگه داشتن اطلاعات مربوط به سیشن های شل و محیط کاری هستند همچنین این امکان رو به شما میدن تا دیتا ها رو در مموری نگه دارید تا به سادگی توسط برنامه ها و اسکریپت های شل قابل دسترسی باشه دو نوع متغیر محیطی در بش شل وجود داره , که بهشون میپردازیم global variables و local variables نگاهی به متغیر های محیطی گلوبال : این نوع از متغیر ها هم از درون شل , و هم از درون همه ساب شل های اون قابل رویت هستند در صورتی که نوع لوکال فقط از درون خود شل دیده میشن که این موضوع نوع گلوبال رو برای اپلیکیشن هایی که ساب شل اجرا میکنن با استفاده میکنه ( ساب شل هایی که اطلاعات مربوط به پرنت شل رو درخواست میکنن ) وقتی شما سیشن بش رو فعال میکنید سیستم لینوکس چند متغیر محیطی گلوبال براتون ست میکنه , به اسم متغیر های محیطی سیستمی , که تقریبا همیشه از حروف بزرگ برای اسمشون استفاده میکنن , تا از متغیر هایی که یوزر تعریف میکنه قابل تمایز باشن برای دیدن لیست متغیر های محیطی گلوبال از دستور های env و printenv استفاده میکنیم $ printenv HOSTNAME=server01.class.edu SELINUX_ROLE_REQUESTED= TERM=xterm SHELL=/bin/bash HISTSIZE=1000 [...] HOME=/home/rednaxela LOGNAME=rednaxela [...] G_BROKEN_FILENAMES=1 _=/usr/bin/printenv در مثال بالا فقط بخشی از خروجی دستور رو براتون گذاشتم نه تنها در هنگام لاگین بخشی از متغیر های محیطی گلوبال براتون ست میشه , بلکه نوع لاگین میتونه تایین کننده باشه در انتخابشون با دستور printenv میتونید مقدار هر کدومشونم ببینید , اکه البته با دستور env شدنی نیست $ printenv HOME /home/rednaxela $ $ env HOME env: HOME: No such file or directory که البته با دستور echo هم میتونید این کارو کنید , که باید از علامت $ قبل از اسم متغیر استفاده کنید $ echo $HOME /home/rednaxela لازمه بدونید استفاده از علامت $ قبل از اسم متغیر فقط به دلیل دیدن مقادیر متغیر نیست , بلکه این امکان رو هم بهتون میده تا از متغیر به عنوان پارامتر یه دستور هم استفاده کنید به مثال زیر دقت کنید $ ls $HOME Desktop Downloads Music Public test.sh Documents junk.dat Pictures Templates Videos $ $ ls /home/rednaxela Desktop Downloads Music Public test.sh Documents junk.dat Pictures Templates Videos بالا تر گفتیم که این متغیر ها از درون ساب شل هم دیده میشن به مثال زیر دقت کنید $ bash $ $ ps -f UID PID PPID C STIME TTY TIME CMD 501 2017 2016 0 16:00 pts/0 00:00:00 -bash 501 2082 2017 0 16:08 pts/0 00:00:00 bash 501 2095 2082 0 16:08 pts/0 00:00:00 ps -f $ $ echo $HOME /home/rednaxela $ $ exit exit $ بریم سراغ متغیر های محیطی لوکال همونطور که از اسمشون مشخصه , این متغیر ها فقط از داخل پروسه ای که توش تعریف شدن قابل خوندن اند اگرچه لوکال اند ولی به همون اندازه هم نوع های گلوبالشون مهم اند , در اصل سیستم لینوکس از این نوع متغیر هم به صورت پیش فرض براتون تعریف کرده به هر حال شما میتونید متغیر های خوتون رو تعریف کنید دستور set لیست تمام متغیر هایی که برای یک پروسه تعریف شدن رو نمایش میده , که شامل نوع گلوبال , لوکال و نوع تعریف شده توسط یوزر (user-defined) میشه , در مثال زیر بخشی از خروجی دستور رو براتون گذاشتم $ set BASH=/bin/bash [...] BASH_ALIASES=() BASH_ARGC=() BASH_ARGV=() BASH_CMDS=() BASH_LINENO=() BASH_SOURCE=() [...] colors=/etc/DIR_COLORS rednaxela_variable='guardiran' [...] $ نحوه تعریف متغیر های user-defined بعد از ران کردن بش شل شما مجازید متغیر های خودتونو تعریف کنید برای تعریف متغیر کافیه اسم منتخب رو همراه با علامت = و مقدار متغیر , بدون هیچگونه فاصله کنار هم بزارید به مثال زیر دقت کنید $ my_variable=Hello $ $ echo $my_variable Hello در صورت وجود فاصله فرایند به مشگل میخوره , مثل : $ my_variable = "Hello World" —bash: my_variable: command not found اگه خواستید مقدار متغیر رو رشته ای قرار بدید که حاوی فاصله هم باشه , باید رشته رو بین تک یا دابل کوتیشن بزارید , مثال زیر : $ my_variable=Hello World —bash: World: command not found $ $ my_variable="Hello World" $ $ echo $my_variable Hello World بدون کوتیشن شل تصور میکرد کلمه بعد از فاصله دستور بعدی شله دقت کنید متغیری که ما تعریف کردیم بر خلاف مثال های قبلی با حروف کوچیکه , چون متغیر های سیستمی با حروف بزرگ تعریف شدن هر موقع خواستید متغیری با اسم حروف بزرگ تعریف کنید باید مواضب تشابه اسمی باشید وقتی یه متغیر لوکال تعریف میکنید , در هر جایی در داخل پروسه شل خودتون قابل دستیابیه , مشگل زمانی پیش میاد که یه ساب شل ران بشه به مثال زیر توجه کنید $ my_variable="Hello World" $ $ bash $ $ echo $my_variable $ exit exit $ $ echo $my_variable Hello World همونطور که دیدید متغیری که تو پرنت شل تعریف شده بود از داخل ساب شل قابل دسترس نبود این موضوع در مورد حالت برعکس این مثال هم صدق میکنه , مثال زیر : $ echo $my_child_variable $ bash $ $ my_child_variable="Hello Little World" $ $ echo $my_child_variable Hello Little World $ $ exit exit $ $ echo $my_child_variable $ میبینید که مقدار خروجی خط خالی قرار گرفته نه مقدار متغیر , چون در این سطح همچین متغیری وجود نداره نحوه تعریف متغیر های محیطی گلوبال این متغیر ها بر خلاف نوع قبلی از درون هر ساب شلی که ریشه در شل اصلی داشته باشه قابل مشاهدس برای ساخت این نوع از متغیر شما باید اول یک متغیر لوکال بسازید بعد اکسپورتش کنید به محیط گلوبال این کار با استفاده از دستور export و نام متغیر بدون علامت $ انجام میشه , مثال زیر : $ my_variable="I am Global now" $ $ export my_variable $ $ echo $my_variable I am Global now $ $ bash $ $ echo $my_variable I am Global now $ $ exit exit $ $ echo $my_variable I am Global now دقت کنید که تغیر مقدار یک متغیر گلوبال که در پرنت شل تعریف شده از داخل ساب شل شدنی نیست , مثال زیرو ببینید $ export my_variable $ $ echo $my_variable I am Global now $ $ bash $ $ echo $my_variable I am Global now $ $ my_variable="Null" $ $ echo $my_variable Null $ $ exit exit $ $ echo $my_variable I am Global now طبق این مثال متوجه میشید که دستورات از بالا به پایین منتقل میشن , نه برعکس ساب شل فقط تونست یه متغیر با اون اسم داخل خودش تعریف کنه اکسپورت کردن هم از همین اصل تبعیت میکنه , یه متغیر از بالا اکسپورت میشه که از پایین قابل دسترسی باشه , نه برعکس , مثال زیرو ببینید $ my_variable="I am Global now" $ export my_variable $ $ echo $my_variable I am Global now $ $ bash $ $ echo $my_variable I am Global now $ $ my_variable="Null" $ $ export my_variable $ $ echo $my_variable Null $ $ exit exit $ $ echo $my_variable I am Global now برای از بین بردن متغیر ها هم باید از دستور unset و نام متغیر بدون علامت $ استفاده کنید $ echo $my_variable I am Global now $ $ unset my_variable $ $ echo $my_variable $ میبینید که خروجی خط خالی داد که البته طبق اصلی که توصیح دادم , از ساب شل نمیشه تو پرنت شل تغیر ایجاد کرد مثال زیر رو ببینید $ my_variable="I am Global now" $ $ export my_variable $ $ echo $my_variable I am Global now $ $ bash $ $ echo $my_variable I am Global now $ $ unset my_variable $ $ echo $my_variable $ exit exit $ $ echo $my_variable I am Global now میبینید که فقط توی ساب شل از بین رفت متغیر های محیطی پیش فرض شل : شل بش متغیر های مشخصی رو به صورت پیش فرض قرار میده تا محیط سیستم رو تعریف کنن که میتونن برامون مفید باشن , در لیست زیر متغیر هایی رو که بش فراهم میکنه میتونید ببینید CDPATH A colon-separated list of directories used as a search path for the cd command HOME The current user’s home directory IFS A list of characters that separate fi elds used by the shell to split text strings MAIL The filename for the current user’s mailbox (The bash shell checks this fi le for new mail.) MAILPATH A colon-separated list of multiple filenames for the current user’s mailbox (The bash shell checks each file in this list for new mail.) OPTARG The value of the last option argument processed by the getopt command OPTIND The index value of the last option argument processed by the getopt command PATH A colon-separated list of directories where the shell looks for commands PS1 The primary shell command line interface prompt string PS2 The secondary shell command line interface prompt string علاوه بر متغیر های بالا , خود بش هم تعدادی از این متغیر ها توسط خودش تعریف میکنه BASH The full pathname to execute the current instance of the bash shell BASH_ALIASES An associative array of currently set aliases BASH_ARGC A variable array that contains the number of parameters being passed to a subroutine or shell script BASH_ARCV A variable array that contains the parameters being passed to a subroutine or shell script BASH_CMDS An associative array of locations of commands the shell has executed BASH_COMMAND The shell command currently being or about to be executed BASH_ENV When set, each bash script attempts to execute a startup file defined by this variable before running BASH_EXECUTION_STRING The command(s) passed using the bash -c option BASH_LINENO A variable array containing the source code line number of the currently executing shell function BASH_REMATCH A read-only variable array containing patterns and their sub-patterns for positive matches using the regular expression comparison operator BASH_SOURCE A variable array containing the source code filename of the currently executing shell function BASH_SUBSHELL The current nesting level of a subshell environment (The initial value is 0.) BASH_VERSINFO A variable array that contains the individual major and minor version numbers of the current instance of the bash shell BASH_VERSION The version number of the current instance of the bash shell BASH_XTRACEFD If set to a valid file descriptor (0,1,2), trace output generated from the 'set -x' debugging option can be redirected. This is often used to separate trace output into a file. BASHOPTS A list of bash shell options that are currently enabled BASHPID Process ID of the current bash process COLUMNS Contains the terminal width of the terminal used for the current instance of the bash shell COMP_CWORD An index into the variable COMP_WORDS, which contains the current cursor position COMP_LINE The current command line COMP_POINT The index of the current cursor position relative to the beginning of the current command COMP_KEY The final key used to invoke the current completion of a shell function COMP_TYPE An integer value representing the type of completion attempted that caused a completion shell function to be invoked COMP_WORDBREAKS The Readline library word separator characters for performing word completion COMP_WORDS An array variable that contains the individual words on the current command line COMPREPLY An array variable that contains the possible completion codes generated by a shell function COPROC An array variable that holds an unnamed coprocess’ I/O fi le descriptors DIRSTACK An array variable that contains the current contents of the directory stack EMACS Indicates the emacs shell buffer is executing and line editing is disabled, when set to 't' ENV When set, executes the startup fi le defi ned before a bash shell script runs (It is used only when the bash shell has been invoked in POSIX mode.) EUID The numeric effective user ID of the current user FCEDIT The default editor used by the fc command FIGNORE A colon-separated list of suffi xes to ignore when performing fi le name completion FUNCNAME The name of the currently executing shell function FUNCNEST Sets the maximum allowed function nesting level, when set to a number greater than zero (If it is exceeded, the current command aborts.) GLOBIGNORE A colon-separated list of patterns defi ning the set of fi lenames to be ignored by fi le name expansion GROUPS A variable array containing the list of groups of which the current user is a member histchars Up to three characters, which control history expansion HISTCMD The history number of the current command HISTCONTROL Controls what commands are entered in the shell history list HISTFILE The name of the fi le in which to save the shell history list (.bash_history by default) HISTFILESIZE The maximum number of lines to save in the history fi le HISTTIMEFORMAT Used as a formatting string to print each command’s timestamp in bash history, if set and not null HISTIGNORE A colon-separated list of patterns used to decide which com- mands are ignored for the history fi le HISTSIZE The maximum number of commands stored in the history fi le HOSTFILE Contains the name of the fi le that should be read when the shell needs to complete a hostname HOSTNAME The name of the current host HOSTTYPE A string describing the machine the bash shell is running on IGNOREEOF The number of consecutive EOF characters the shell must receive before exiting (If this value doesn’t exist, the default is 1.) INPUTRC The name of the Readline initialization fi le (The default is.inputrc.) LANG The locale category for the shell LC_ALL Overrides the LANG variable, defi ning a locale category LC_COLLATE Sets the collation order used when sorting string values LC_CTYPE Determines the interpretation of characters used in fi lename expansion and pattern matching LC_MESSAGES Determines the locale setting used when interpreting doublequoted strings preceded by a dollar sign LC_NUMERIC Determines the locale setting used when formatting numbers LINENO The line number in a script currently executing LINES Defi nes the number of lines available on the terminal MACHTYPE A string defi ning the system type in cpu-company-system format MAPFILE An array variable that holds read-in text from the mapfile com- mand when no array variable name is given MAILCHECK How often (in seconds) the shell should check for new mail (The default is 60.) OLDPWD The previous working directory used in the shell OPTERR If set to 1, the bash shell displays errors generated by the getopts command. OSTYPE A string defi ning the operating system the shell is running on PIPESTATUS A variable array containing a list of exit status values from the processes in the foreground process POSIXLY_CORRECT If set, bash starts in POSIX mode. PPID The process ID (PID) of the bash shell’s parent process PROMPT_COMMAND If set, the command to execute before displaying the primary prompt PROMPT_DIRTRIM An integer used to indicate the number of trailing directory names to display when using the \w and \W prompt string escapes (The directory names removed are replaced with one set of ellipses.) PS3 The prompt to use for the select command PS4 The prompt displayed before the command line is echoed if the bash -x parameter is used PWD The current working directory RANDOM Returns a random number between 0 and 32767 (Assigning a value to this variable seeds the pseudo-random number generator.) READLINE_LINE Readline buffer contents when using bind -x command READLINE_POINT Readline buffer content insertion point’s current position when using bind -x command REPLY The default variable for the read command SECONDS The number of seconds since the shell was started (Assigning a value resets the timer to the value.) SHELL The full pathname to the bash shell SHELLOPTS A colon-separated list of enabled bash shell options SHLVL Indicates the shell level, incremented by one each time a new bash shell is started TIMEFORMAT A format specifying how the shell displays time values TMOUT The value of how long (in seconds) the select and read com- mands should wait for input (The default of zero indicates to wait indefi nitely.) TMPDIR Directory name where the bash shell creates temporary fi les for its use UID The numeric real user ID of the current user پایان قسمت پنجم از بخش یک در قسمت بعد استارت اپ ها و ارایه ها رو توضیح میدم
    1 امتیاز
  9. بخش اول - قسمت چهارم الان که تا حدی با دستورات بیسیک خط فرمان اشنا شدید وقتشه مروری بر عمق شل داشته باشیم که برای درک بهترش باید مروری بر موارد بیسیک کامند لاین اینترفیس ( CLI ) داشته باشیم یک شل فقط یک کامند لاین اینترفیس نیست ، بلکه یه برنامه در حال اجرای تعاملیه پیچیدس اجرای دستورات شل در شرایط خاصی ممکنه یکم گمراه کننده به نظر برسه ، همین طور بعضی از اسکریپت ها ، که این پیچیدگی ها با درک طرز کار شل و روابطش قابل درک میشه در این قسمت شما با پروسه شل و به وجود اومدن ساب شل ها و رابطشون با پرنت شل ها اشنا میشید حتما یادتونه در قسمت های قبل در مورد شل پیشفرض برای هر یوزر صحبت کردیم ، که در پیکربندی هر یوزر این مقدار میتونه متغیر باشه ( فیلد هفتم از مقادیر فایل passwd که با مقدار bin/bash/ شل پیش فرض یوزر ( اینجا بش ) و ادرسش رو نشون میداد ) وقتی شما در محیط ویژال کنسول لاگین میکنید ، یا وقتی یه ترمینال در محیط گرافیکی باز میکنید ، شل پیشفرضی که توضیح دادم براتون فعال میشه اما ... اما این تنها شل پیش فرض سیستم شما نیست یک شل پیش فرض دیگه وجود داره به اسم دیفالت سیستم شل ، که این شل برای اسکریپت های سیستم استفاده میشه ، مثل اونایی که تو استارت اپ بهشون نیازه این شل پیش فرض در مسیر bin/sh/ قرار داره در بعضی لینوکس ها شما مثال زیر رو میبینید که طی اون دیفالت سیستم شل با استفاده از یه لینک رو شل بش تنظیم شده $ ls -l /bin/sh lrwxrwxrwx. 1 root root 4 Mar 20 15:05 /bin/sh -> bash البته باید توجه داشته باشید روی همه لینوکس ها ، هم برای دیفالت سیستم شل و هم برای دیفالت اینتراکتیو شل ، یک شل استفاده نمیشه و ممکنه هر کدوم از دو شل پیشفرض روی یه شل متفاوت تنظیم شده باشن ، مثل مثال پایین $ cat /etc/passwd [...] rednaxela:x:501:501:red,,,:/home/rednaxela:/bin/bash $ $ ls -l /bin/sh lrwxrwxrwx 1 root root 4 Apr 22 12:33 /bin/sh -> dash تفاوت شل های پیش فرض میتونه منجر بشه به درست کار نکردن اسکریپت ما ( در صورتی که سیستم دیفالت شل سیستمی که اسکریپت مارو اجرا میکنه ، با شلی که اسکریپت باهاش نوشته شده فرق داشته باشن ) به همین دلیل ما همیشه در اولین خط اسکریپت نوع شلی که قراره اجراش کنه رو مشخص میکنیم ( مربوط به بخش دوم اموزش ) اگرچه شل های پیش فرض قابل تغیرن ،اما تو حالت عادی هم شما مجبور نیستید از دیفالت شل اینتراکتیو استفاده کنید ، تو همون محیط کنسول میتونید هر شلی رو بخونید تا اون شل STDIN رو دریافت کنه ، ( در بخش دوم با STDIN اشنا میشید ٬ اینجا منظور مقادیر ورودیه ) و از اون لحضه با اون شل کار کنید به مثال پایین دقت کنید ، تو محیط ترمینال شل دش خونده شده ، به خروجی دستور دقت کنید ، این خروجی به معنی ( هیچی و فاقد خروجی ) نیست از این لحضه هر دستوری وارد کنید شل دش اون دستور رو میگیره مثل دستور exit که شل دش گرفت و طبق اون خودش رو بست ، و به همین دلیل ترمینال بسته نشد و شما علامت پرامپت رو میبینید ( که یعنی برگشتید به همون شلی که باهاش شل دش رو خونده بودید ) $ /bin/dash $ $ exit exit $ مروری بر رابطه parent shell با child shell یا همون subshell شلی که شما بعد از لاگین تو محیط کنسول میگیرید ، یا از ترمینال تو محیط گرافیکی ، شل پرنت یا شل اولیه محسوب میشه وقتی شما توی محیط شل یه شل دیگه باز میکنید ( چه مستقیم چه غیر مستقیم ) اون شل ثانویه ، چایلد شل یا ساب شله بعد از باز کردن یه ساب شل چیز خاصی برای نشون دادن روابط بین شل ها نشون داده نمیشه ، به همین دلیل از دستور ps با اپشن f- استفاده میکنیم در مثال پایین یه نمونه از خروجی دستور قبل از اجرای ساب شل و بعدش رو میتونید ببینید $ ps -f UID PID PPID C STIME TTY TIME CMD 501 1841 1840 0 11:50 pts/0 00:00:00 -bash 501 2429 1841 4 13:44 pts/0 00:00:00 ps -f $ $ bash $ $ ps -f UID PID PPID C STIME TTY TIME CMD 501 1841 1840 0 11:50 pts/0 00:00:00 -bash 501 2430 1841 0 13:44 pts/0 00:00:00 bash 501 2444 2430 1 13:44 pts/0 00:00:00 ps -f به خروجی اولین دستور دقت کنید ، دوتا پروسه رو نشون میده اولی bash- دومی دستور ps اگه به ppid ( شماره پروسه ی پرنت ) دستور ps نگاه کنید pid ( شماره پروسه ) بش رو مینید ، که یعنی پروسه مادری که پروسه ی دستور ps از اون نشعت گرفته ، متعلق به بش هستش با همین تفاسیر در خروجی دومین دستور ps ( که بعد از دستور bash تایپ شده ، که یعنی داخل شل بش جدیدی که باز شده دستور ps وارد شده ) میبینیم که سه پروسه قرار داره ، به ppid دومین پروسه دقت کنید ( شل جدید ) میبینید که مقدار pid اولین پروسه رو داره 1841 که یعنی شل دوم داخل شل اول باز شده و چایلد شل یا ساب شل همون شل اوله و چون تو شل دوم ps گرفتیم میبینید که pid ساب شلمون ppid دستور ps هستش وقتی یه ساب شل به وجود میاد ، همه ی ابجکت های محیطیه شل مادر رو نداره و این ممکنه تو کار با متغیر ها مشکل ایجاد کنه ، که در قسمت متغیر ها بهش میپردازیم یه ساب شل میتونه خودش هم ساب شل ایجاد کنه که اون ساب شل ثانویه میشه گرند چایلده پرنت چایلده ساب شل اولیه ، و حتی میشه بیشتر رفت پایین (میشه چندین شل تو همدیگه ساخت ، که با هم در تعامل اند ) به مثال پایین دقت کنید $ ps -f UID PID PPID C STIME TTY TIME CMD 501 1841 1840 0 11:50 pts/0 00:00:00 -bash 501 2532 1841 1 14:22 pts/0 00:00:00 ps -f $ $ bash $ $ bash $ $ bash $ $ ps --forest PID TTY TIME CMD 1841 pts/0 00:00:00 bash 2533 pts/0 00:00:00 \_ bash 2546 pts/0 00:00:00 \_ bash 2562 pts/0 00:00:00 \_ bash 2576 pts/0 00:00:00 \_ ps هر کدوم از دستورات bash که میبینید داخل دستور قبلی اجرا شده خروجی دو دستور ps رو با هم مقایسه کنید نگاهی به لیست های دستوری توی یک خط شما میتونید دستورات مختلف رو جوری لیست کنید که یکی بعد از دیگری اجرا بشن ، این عمل با گذاشتن یک semicolon ( ; ) بین دستورات اتفاق میوفته به لیست دستورات و خروجیه به ترتیبشون در مثال زیر دقت کنید $ pwd ; ls ; cd /etc ; pwd ; cd ; pwd ; ls /home/rednaxela Desktop Downloads Music Public Videos Documents junk.dat Pictures Templates /etc /home/rednaxela Desktop Downloads Music Public Videos Documents junk.dat Pictures Templates یه فرمت دیگش هم به این صورته { command ; } مثال بالا یک کامند لیست بود ، برای ساخت لیست پروسه ها کافیه کامند لیست رو بین پرانتز بزاریم تفاوت command list با process list اینه که مقادیر porocess list توی یک ساب شل اجرا میشن به مثال زیر دقت کنید ، به لیست دستور فقط یک پرانتز اضافه شده ، خروجی هم به نظر فرقی نکرده ، ولی از ریشه یه تغیر بزرگ حاصل شده $ (pwd ; ls ; cd /etc ; pwd ; cd ; pwd ; ls) /home/rednaxela Desktop Downloads Music Public Videos Documents junk.dat Pictures Templates /etc /home/rednaxela Desktop Downloads Music Public Videos Documents junk.dat Pictures Templates برای بهتر دیدن تغیر در خروجی دو مثال بالا ، از یک متغیر محیطی به اسم BASH_SUBSHELL استفاده میکنیم در صورتی که دستورات توی یک ساب شل اجرا شده باشن مقدار این متغیر 1 میشه ، اگه تو ساب شل اجرا نشده باشن مقدارش 0 میشه ( هر عدد مربوط به عمق شل بر تعداد ساب شل هاست ، جلو تر مثال میزنم ) مثال بالا رو با این متغیر محیطی ببینید : $ pwd ; ls ; cd /etc ; pwd ; cd ; pwd ; ls ; echo $BASH_SUBSHELL /home/rednaxela Desktop Downloads Music Public Videos Documents junk.dat Pictures Templates /etc /home/rednaxela Desktop Downloads Music Public Videos Documents junk.dat Pictures Templates 0 اینجا ما با دستور echo مقدار $ متغیر رو نمایش میدیم ( عدد 0 خط اخر ) که یعنی دستورات تو ساب شل اجرا نشدن $ ( pwd ; ls ; cd /etc ; pwd ; cd ; pwd ; ls ; echo $BASH_SUBSHELL ) /home/rednaxela Desktop Downloads Music Public Videos Documents junk.dat Pictures Templates /etc /home/rednaxela Desktop Downloads Music Public Videos Documents junk.dat Pictures Templates 1 میبینید که تو این مثال خروجی 1 گرفتیم ، چون process list برای اجرا ساب شل ران کرده شما میتونید توی process list هم دوباره ساب شل باز کنید ، به مثالش دقت کنید $ ( pwd ; echo $BASH_SUBSHELL) /home/rednaxela 1 $ ( pwd ; (echo $BASH_SUBSHELL)) /home/rednaxela 2 دقت کنید خروجی مربوط به ساب شل اولین دستور 1 بود ، مثل مثال های قبلی ولی خروجی دومین دستور 2 بود که میگه این دستور تو عمق دو لایه شل اجرا شده ( ساب شل دوم ، در ساب شل اول ) استفاده از background mode حالت بک گراند به شما این فرصت رو میده که وقتی شل در حال اجرای دستوریه که زمان میبره انجامش ، شما منتظر نمونید و همون لحضه بتونید دوباره کنترل شل رو بدست بگیرید برای اجرای یک کامند در حالت بک گراند تنها کافیه به انتهای دستور & اضافه کنید $ sleep 3000 & [1] 2396 $ ps -f UID PID PPID C STIME TTY TIME CMD 501 2338 2337 0 10:13 pts/9 00:00:00 -bash 501 2396 2338 0 10:17 pts/9 00:00:00 sleep 3000 501 2397 2338 0 10:17 pts/9 00:00:00 ps -f مثال بالا دستور sleep رو با مقدار 3000 ثانیه اجرا کرده ( در حالت بک گراند با استفاده از & در انتهای دستور ) و چون دستور در حالت بک گراند اجرا شده ، کنترل شل فورا به دستمون برگشته و تونستیم دستور ps رو اجرا کنیم ( اگه دستور قبلی در بک گراند نبود ، باید سه هزار ثانیه صبر میکردیم تا بتونیم دستور بعدی رو وارد کنیم ) که در خروجی دستور ps میتونیم sleep رو در حال اجرا ببینیمعلاوه بر دستور ps میتونیم از دستور jobs برای دیدن دستورات بک گراند استفاده کنیم $ jobs [1] + Running sleep 3000 & میبینید که دستور jobs شماره job number هر job رو به علاوه ی وضعیت اجرا و اسم دستور و مقدار دستورش رو نشون میده با اپشن l- میتونید pid هر دستور رو هم ببینید jobs -l [1] + 2399 running sleep 3000 & هر زمان یک بک گراند جاب به اتمام برسه ، نتیجش در صفحه اعلان میشه [1] + Done sleep 3000 & گذاشتن process list ها در background : میدونید که process list ها در ساب شل اجرا میشن ، با این روش ما میتونیم ساب شل ایجاد شده رو ببریم در background مثال زیر هر دو حالت رو به تصویر میکشه در حالت عادی $ (sleep 2 ; echo $BASH_SUBSHELL ; sleep 2) 1 در حالت بک گراند $ (sleep 2 ; echo $BASH_SUBSHELL ; sleep 2)& [2] 2401 $ 1 [2]+ Done ( sleep 2; echo $BASH_SUBSHELL; sleep 2 ) در حالت بک گراند ، خط اول از خروجی مربوط به لحضه رفتن به بک گرانده ، خط دوم و سوم هم مربوط به خروجی دستور و اعلان اتمام جاب هستش انجام co-processing با دستور coproc : دستور coproc ساب شل در بک گراند ایجاد میکنه ، و دستورات رو اونجا اجرا میکنه به ترکیب جالب co-processing با process list در مثال زیر دقت کنید $ coproc ( sleep 10 ; sleep 20 ) [1] 2574 $ $ jobs [1]+ Running coproc COPROC ( sleep 10; sleep 2 ) & $ $ ps --forest PID TTY TIME CMD 2483 pts/12 00:00:00 bash 2574 pts/12 00:00:00 \_ bash 2575 pts/12 00:00:00 | \_ sleep 2576 pts/12 00:00:00 \_ ps مروری بر دستورات built-in و external دستورات external دستوراتی هستند که بیرون از خود شل قرار دارند ، که معمولا در مسیر های زیر هستند /bin /usr/bin /sbin /usr/sbin مثلا دستور ps یه دستور اکسترناله ، شما میتونید محل نگه داریشو با دستورات which و type پیدا کنید $ which ps /bin/ps $ $ type -a ps ps is /bin/ps $ $ ls -l /bin/ps -rwxr-xr-x 1 root root 93232 Jan 6 18:32 /bin/ps هر موقع یک دستور اکسترنال اجرا بشه ، بدین واسطه یک child process به وجود میاد ، به مثال زیر دقت کنید $ ps -f UID PID PPID C STIME TTY TIME CMD 501 2743 2742 0 17:09 pts/9 00:00:00 -bash 501 2801 2743 0 17:16 pts/9 00:00:00 ps -f خود دستور ps به عنوان یکی از پروسه ها در لیست دیده میشه که مقدار ppid برابر با pid بش هستش ، که یعنی بش به عنوان پرنت ps رو اجرا کرده و اما دستورات built-in دستوراتی هستند که بخشی از خود شل محسوب میشن و به عنوان child process اجرا نمیشن مثل دستورات cd و exit $ type cd cd is a shell builtin $ $ type exit exit is a shell builtin بر خلاف دستورات اکسترنال ، این دستورات جایی بیرون از شل دیده نمیشن چون برای اجرای دستورات built-in نیازی به child process نیست ، این دستورات سریع تر از دستورات اکسترنال هستند اما بعضی از دستورات هستند که تلفیقی از این دو نوع محسوب میشن برای مثال هر دو دستور echo و pwd از این دسته هستند $ type -a echo echo is a shell builtin echo is /bin/echo $ $ which echo /bin/echo $ $ type -a pwd pwd is a shell builtin pwd is /bin/pwd $ $ which pwd /bin/pwd پایان قسمت چهارم از بخش یک در قسمت پنجم وارد مباحث مرتبط با متغیر ها میشیم
    1 امتیاز
  10. بخش اول - قسمت دوم شلی که سیستم شروع به استفاده کردن ازش میکنه بستگی داره به پیکربندی یوزری که لاگین کرده فایل /etc/passwd شامل لیستی از یوزر های سیستم هستش که جلوی هر یوزر اطلاعات پیکربندیش قرار داره در زیر یک نمونه از مقادیر فایل passwd در دایرکتوری etc رو میبینید rednaxela:X:501:501:red naxela:/home/rednaxela:/bin/bash هر کدوم از مقادیر فایل passwd دارای هفت فیلد هستش که این قسمت ها با ( : ) از هم جدا شدن تو قسمت های بعدی بیشتر در مورد هر کدوم از این فیلد ها صحبت میکنیم ، ولی تو این قسمت توجهمون معطوف میشه به فیلد هفتم که اسم شل و مسیر دایرکتوریش قرار گرفته ، این همون شلی هست که بعد از لاگین کردن یوزر ، به صورت پیش فرض به اون یوزر داده میشه در این مثال یوزر rednaxela بعد از لاگین بر روی شل bash قرار میگیره اکثر لینوکس ها از شل قدرتمند bash به صورت پیشفرض استفاده میکنن ، که یکی از شل های اصلی برای اسکریپت نویسی محسوب میشه به همین دلیل ما هسته ی این مجموعه رو بر مبنا ی این شل قرار میدیم و بعد از پایان بخش سوم یه نگاه اجمالی به شل های دیگه میکنیم تعامل با bash manual با دستور man : صفحات manual صفحاتی هستند که جامع ترین توضیحات و دستور العمل هارو در مورد ابجکت های شل دارن که میتونید مثلا با اموزش طرز کار یه کامند و اپشن های اون کامند تستش کنید man jobs man -k download در دستور اول ما صفحات manual رو با استفاده از دستور man برای دستور jobs دریافت میکنیم و اما دستور دوم که دستور man رو با اپشن k- اجرا کرده ، از این اپشن میشه برای کشف دستوراتی که نمیدونید استفاده کنید مثلا ما میخوایم یک فایل رو با استفاده از خط فرمان دانلود کنیم ، ولی نمیدونیم باید از چه دستوری برای دانلود استفاده کنیم با دستور man -k download دستور هایی که مربوط به دانلود میشن برامون نمایش داده میشه برای خروج از صفحات manual از حرف q استفاده کنید برای اطلاعات بیشتر در مورد دستور man میتونید از خودش برای خودش ، یعنی دستور man man استفاده کنید از اطلاعات بدست اومده میتونید برای شناخت بخش های مختلف خروجی دستور man بهره ببرید فایل سیستم و دستورات مربوطه : به تفاوت پارتیشن بندی ویندوز با لینوکس دقت کنید همون طور که در مثال پایین میبینید لینوکس از سیستم درایو هایی که ویندوز استفاده میکنه تبعیت نمیکنه و از نظر پارتیشن بندی یک ساختار یکپارچه درونی داره نکته ای که باید در اسکریپت ها مدنظر داشته باشید اینه که مسیر های لینوکس برخلاف ویندوز از اسلش / استفاده میکنن نه بک اسلش \ و همچنین لینوکس بر خلاف ویندوز به تفاوت حروف کوچیک و بزرگ حساسه c:\Users\rednaxela\Documents\test.doc /home/rednaxela/Documents/test.doc در فایل سیستم لینوکس همه چیز از دایرکتوری ریشه ( / ) یا روت شروع میشه ( که در مثال بالا قبل از دایرکتوری home مشخصه ، که یعنی اولین دایرکتوری ) مواضب باشید به دلیل هم اسم بودن ، دایرکتوری ( / ) رو با دایرکتوری root در بحث ها اشتباه نگیرید ، چون در فارسی معنیه جفتشون میشه ریشه مقادیر دایرکتوری / boot = بوت دایرکتوری ( جایی که فایل های مربوط به بوت نگه داشته میشه ) dev = دیوایس دایرکتوری ( جایی که لینوکس نود های دیوایس تولید و نگهداری میکنه ) etc = سیستم کانفیگوریشن ( جایی که فایل های پیکربندی سیستم نگه داری میشن ) home = دایرکتوری هوم ( جایی که لینوکس دایرکتوری یوزر هارو تولید و نگه داری میکنه ) lib = لیبراری دایرکتوری ( جایی که لینوکس فایل های لیبراری سیستم و اپلیکیشن هارو نگه میداره ) media = مدیا دایرکتوری ( یک مکان مرسوم برای مدیا های قابل جداسازی از سیستم ) mnt = مونت دایرکتوری ( یک مکان مرسوم دیگه برای مونت کردن مدیا های قابل جدا سازی ) opt = اپشنال دایرکتوری ( محل نگه داری دیتا و پکیج های نرم افزار های ثرد-پارتی ) proc = پراسس دایرکتوری ( جایی که اطلاعات سخت افزار و پروسه ها نگه داشته میشه ) bin = باینری دایرکتوری ( جایی که خیلی از ابزار های سطح یوزر گنو نگه داشته میشن ) root = روت دایرکتوری ( جایی که دایرکتوری خانه و دیتا های یوزر روت نگه داشته میشه ) sbin = سیستم باینری دایرکتوری ( جایی که خیلی از ابزار های سطح ادمین گنو نگه داشته میشن ) run = ران دایرکتوری ( جایی که دیتا های ران تایم نگه داشته میشه ) srv = سرویس دایرکتوری ( جایی که دیتا های مربوط به سرویس هایی که سیستم میده نگه داشته میشه ) sys = سیستم دایرکتوری ( جایی که دیتا های مربوط به اطلاعات سخت افزاری نگه داشته میشه ) tmp = تمپورری دایرکتوری ( جایی که فایل های تمپورری (در فصل مربوط بهش کامل بهش میپردازیم) میتونن تولید و نگه داری بشن ) usr = یوزر باینری دایرکتوری ( محل نگه داری ابزار ها و دیتا فایل های سطح یوزر گنو ) var = وری ایبل دایرکتوری ( جایی که فایل هایی با مقادیر متغیر نگه داشته میشه مثل لاگ فایل ها ) به عنوان مثال وقتی که وارد شل میشید به طور پیش فرض در دایرکتوری home در لیست بالا قرار دارید که البته اونجا هم تو یه دایرکتوری دیگه که به اسم اکانتتون هست دستورات خط فرمان : cd /home/rednaxela cd .. از دستور cd برای مرور فایل سیستم استفاده میشه مقادیری مثل ( . ) یا ( .. ) به ترتیب اشاره به دایرکتوری فعلی و دایرکتوری بالا تر دارن pwd /root/books از دستور pwd برای نمایش ادرس جایی که در فایل سیستم هستیم استفاده میشه در این مثال خروجی دستور pwd میگه ما در مسیر root/books/ هستیم ls ls -F -R -a -l ls *.txt ls scri?? ls go[a-p]d ls b[!a]d از دستور ls برای مشاهده لیست مقادیر یک دایرکتوری استفاده میشه که اپشن های متنوع ای داره که چند تاشون رو مثال زدم ، اپشن ها میتونن به صورت تکی یا بیشتر استفاده بشن ، یا حتی ادغام شن مثل ls -alF اپشن F- فایل هارو از دایرکتوری ها متمایز میکنه اپشن R- تمام محتوای دایرکتوری رو با تمام مقادیری که خود اونها دارن تا انتها لیست میکنه اپشن a- مقادیر مخفی رو هم در لیست به نمایش میزاره اپشن l- لیست خروجی رو همراه با اطلاعات مربوط به هر کدوم از مقادیر نشون میده مقادیری مثل سطح دسترسی فایل برای یوزر ها نام صاحب فایل نام گروه فایل مقدار سایز فایل اخرین زمانی که اصلاح شده و ... از دستور ls برای لیست هایی که مد نظرمون هست هم میشه استفاده کرد مثل ls *.txt که میگه هر فایلی که چهار کاراکتر اخر اسمش ( t & x & t & . ) بود رو لیست کن یا ? که میگه به جای من هرچیزی بود بپذیر یا [a-p] که میگه به جای من هر کاراکتری از a تا p بود قبول کن یا [a!] که میگه به جای a هر کاراکتر دیگه ای بود بپذیر شما میتونید از این چند نمونه ی ساده به جز دستور ls در جاهای بیشماری استفاده کنید که البته با مدل های بیشتری در ادامه اشنا میشید touch filename touch script touch abc.txt touch /home/rednaxela/zzzz.sh از دستور touch برای ساخت فایل خالی استفاده میشه که در مثال بالا طرز استفاده و امکاناتش رو میتونید ببینیدا cp file file2 cp /root/file /home/rednaxela/file cp file /root/books/file cp /home/rednaxela/books/file . از دستور cp برای کپی کردن فایل ها استفاده میشه در مثال اول یک فایل در همون دایرکتوری ای که بوده کپی شده ، به همین دلیل اسمش رو عوض کردیم در مثال دوم چون خودمون تو هیچ کدوم از مسیر های مبدا و مقصد کپی نبودیم نام فایل رو چه در مبدا چه در مقصد همراه با مسیر کامل نوشتیم در مثال سوم چون خودمون در دایرکتوری قرار گیری فایل بودیم اسم فایل رو بدون ادرس مبدا نوشتیم و اما مثال چهارم ، همون طور که قبلا گفتیم کاراکتر ( . ) اشاره به دایرکتوری فعلی ما داره به همین دلیل برای کپی کردن فایل به جایی که هستیم مسیر مبدا رو نوشتیم و به جای مسیر مقصد ( جایی که هستیم ) کاراکتر ( . ) گذاشتیم میتونیم از اپشن i- هم استفاده کنیم , که در صورت وجود یک فایل هم نام در ادرس مقصد قبل از کپی روی مقادیر اون فایل ازمون سوال شه با استفاده از اپشن R- میتونیم تمام محتوای یک دایرکتوری رو کپی کنیم ln -s /target-file-name /shortcut-file-name از دستور ln با اپشن s- برای ساخت شورتکات استفاده میشه mv /home/rednaxela/file1 /home/rednaxela/file2 mv file1 /root/books/ از دستور mv برای انتقال فایل و تغیر نام فایل استفاده میشه در مثال اول ( تغیر نام به file2) تغیر نام انجام میشه در مثال دوم ( انتقال به داخل دایرکتوری books ) انتقال فایل انجام میشه در دستور mv هم مثل دستور cp میتونیم از اپشن i- یا R- استفاده کنیم rm file-name rm -R directory-name با دستور rm و انتخاب فایل , فایل مورد نظر دیلیت میشه با استفاده از اپشن R- میتونیم یه دایرکتوری رو با همه ی مقادیرش دیلیت کنیم mkdir directory-name mkdir -P dir/dir/dir/directory-name با استفاده از دستور mkdire میتونیم دایرکتوری بسازیم با اضافه کردن اپشن P- میتونیم با یک دستور دایرکتوری های تو در تو بسازیم rmdir directory-name از دستور rmdir برای دیلیت کردن دایرکتوری های خالی استفاده میشه tree directory-name از دستور tree برای دیدن ساختار درختی یک دایرکتوری استفاده میشه ( به تصویر کشیدن تمام مقادیر لایه به لایه ) file file-name دستور file نوع فایلی که بهش بدید رو بر مبنای مقدار درونیه فایل مشخص میکنه cat file-name cat -n file-name cat -b file-name دستور cat فایلی که بهش بدید رو باز میکنه ( نه اجرا ) اپشن n- اول هر خط یک عدد میزاره به ترتیب میاد پایین اپشن b- فقط اول خط هایی که دارای مقادیر باشن شماره بندی اعمال میکنه more file-name دستور more هم مشابه دستور cat عمل میکنه ولی یوزر فرندلی تر و مقدار خروجی رو بخش بخش و درصد گذاری شده نمایش میده نسبت به cat داینامیک تره و قدرت پویش یوزر رو افزایش میده less file-name دستور less مدل پیشرفته ی more هستش که قابل توجه ترین بخشش اینه که فایل رو قبل از کامل خوندن باز میکنه ، بدین معنا که به محض اجرا مقدار دیتایی که بدست اورده باشه رو نمایش میده و در صورت حجیم بودن فایل یوزر رو منتظر نمیزاره تا تمام فایل رو بخونه tail file-name tail -n 5 tail -5 tail -f دستور tail به صورت پیشفرض ده خط اخر فایل رو میخونه که با اپشن n- و عدد درخواست تعداد خط های اخر فایل یا مستقیما وارد کردن عدد درخواستی بعد از ( - ) میتونیم این مقدار رو تغیر بدیم نکته ی جالب توجه این دستور اپشن f- هستش که باعث میشه سیشن دستور فعال بمونه حتی وقتی یه برنامه داره از فایل مورد نظر استفاده میکنه که این باعث میشه به محض تغیر در فایل به صورت زنده تغیرات نمایش داده بشن head file-name head -n 6 head -6 head -f دستور head مدل برعکس دستور tail هستش ، که ده خط اول فایل رو میخونه در بقیه ی موارد کاملا مثل دستور tail عمل میکنه پایان قسمت دوم از بخش یک برای اینکه طولانی شدن مبحث و تغیر در ریشه ی ادامه دستورات خط فرمان خستتون نکنه ادامه دستورات در قسمت سوم تقدیمتون میشه
    1 امتیاز
×
×
  • ایجاد مورد جدید...