لینوکس مقدماتی/آشنایی با خط فرمان
ساختار دستورات لینوکس
ویرایش [command [options/flags/switches] [arguments
برای مشخص شدن اجزای دستور بالا به مثال زیر دقت کنید:
rm -r my_dir
دستور بالا یک دیرکتوری به نام my_dir
(که در دیرکتوری فعلی یعنی current directory یا همان دیرکتوریای که ما در زمان اجرای دستور در آن هستیم) را پاک میکند.
در مثال بالا rm یک command
میباشد و -r
یک option
یا همان flag
یا همان switch
میباشد و my_dir
(مسیر دیرکتوریای که قرار است پاک شود) نیز یک argument
است.
دیرکتوری کنونی یا current directory
ویرایشبرای اینکه ببینیم دیرکتوری کنونی یا current directory ما چیست یعنی در حال حاضر در کدام دیرکتوری هستیم میتوانیم از دستور pwd
که مخفف present working directory
است استفاده کنیم
مثلا با توجه به شکل ۱ اگر فرض را بر این بگیریم که ما در درون دیرکتوری user1
هستیم آنگاه با زدن دستور pwd
خروجی /home/use1/
چاپ خواهد شد.
دستورات مهم لینوکس(ls, cd, mv, cp, rm, mkdir)
ویرایشدستور ls(مخفف: list)
ویرایشساختار دستور
ویرایشls [flags:optional][path:optional]
توضیح
ویرایشاز این دستوری برای لیست کردن محتویات یک دیرکتوری استفاده میشود.
path مسیری است که میخواهیم محتویات داخل آن را ببینیم. در صورتی که path به عنوان آرگومان به دستور داده نشود دیرکتوری فعلی یعنی به عنوان آرگومان پیشفرض در نظر گرفته میشود.
flag های مهم:
-l
از -l
(حرف اول کلمهٔ long) برای گرفتن لیست با جزئیات و اطلاعات بیشتر یا به عبارتی long list استفاده میشود. زمانی که از این flag استفاده میکنیم علاوه بر نام محتویات دیرکتوری مدنظر جزئیات هر کدام از آنها نیز بیان میشود. جزئیاتی از قبیل permission های فایلها و دیرکتوریها و owner و group ای که هر یک از فایلها و دیرکتوریها به آن تعلق دارند و سایز آنها بر اساس بایت و زمان ساخته شدن هر فایل و دیرکتوری.
-a
از -a
برای نشان دادن تمامی محتویات دیرکتوری (حتی فایلها و دیرکتوریهای مخفی(فایلها و دیرکتوریهایی که نامشان با . شروع میشود) استفاده میشود.
-R
از flag -R
زمانی استفاده میشود که بخواهیم علاوه بر لیست کردن محتویات موجود در یک دیرکتوری، محتویات دیرکتوریهای درون آن را نیز لیست کنیم. (یا به عبارت دیگر زمانی که بخواهیم محتویات یک دیرکتوری را به صورت Recursive یا بازگشتی لیست کنیم).
در زیر ساختار دیرکتوری پیشفرض برای مثالهای زیر به صورت نمودار درختی آورده شده است.
/home/user1/Desktop
├── books
│ └── hafez
│ └── ghazaliat.pdf
├── file1.txt
├── files
│ └── text_files
│ └── file1.txt
└── flower.jpeg
نحوهٔ استفاده
ویرایش
دستور ls
(بدون flag و آرگومان) را در ترمینال لینوکس وارد میکنیم(از آنجایی که آرگومان که در اینجا مسیری است که میخواهیم از آن لیست بگیریم را وارد نکردهایم برنامه به طور پیشفرض دیرکتوری فعلی یعنی ~/Desktop که معادل /home/user1/Desktop است(با فرض اینکه کاربر فعلی user1 است) را به عنوان مسیر در نظر میگیرد و محتویات دیرکتوری به آدرس مذکور را نشان میدهد) :
user1@sadegh-VirtualBox:~/Desktop$ ls
خروجی(نام فایلها و دیرکتوریهای موجود در دیرکتوری فعلی):
books file1.txt files flower.jpeg
دستور ls -l
را در ترمینال وارد میکنیم:
user1@sadegh-VirtualBox:~/Desktop$ ls -l
خروجی همان خروجی دستور قبلی است منتها با جزئیات بیشتر(نام فایلها و دیرکتوریها به انضمام اطلاعاتی در مورد آنها از قبیل نوع آنها (یعنی دیرکتوری یا فایل بودن آنها) و permission آنها و owner و group ای که به آن تعلق دارند و حجم آنها به بایت تاریخ ساخته شدنشان و در انتها نام آنها آورده میشود):
drwxrwxr-x 2 user1 user1 4096 Jul 2 19:09 books
-rw-rw-r-- 1 user1 user1 0 Jul 2 19:09 file1.txt
drwxrwxr-x 2 user1 user1 4096 Jul 2 19:09 files
-rw-rw-r-- 1 user1 user1 0 Jul 2 19:09 flower.jpeg
در خروجی بالا اولین خط را توضیح میدهیم:
drwxrwxr-x
اولین حرف همیشه یا d
است یا -، اگر d بود یعنی آن یک دیرکتوری است و اگر -
بود یعنی یک فایل است(مثل file1.txt
در بالا یا flower.jpeg
در بالا). از حرف ۲ به بعد هر سه حرف به ترتیب مجوزها یا همان permission های
این فایل یا دیرکتوری را به ترتیب برای owner فایل و group ای که فایل به آن تعلق دارد و all users و نشان میدهد. در اینجا مجوز owner فایل rwx (حرف دوم و سوم و چهارم) است یعنی صاحب یا owner فایل میتواند سه عملیات read و write و execute را بر روی books انجام دهد. و مجوز برای group ای که books به آن تعلق دارد نیز rwx (حرف پنجم و ششم و هفتم) است و ولی مجوز سوم که متعلق به تمامی کاربران است(all users) فقط r-x است یعنی فقط read و execute. (توضیحات کامل در مورد permission یا همان مجوزها در ادامه داده خواهد شد)
2
تعداد لینکهای سخت به یک فایل یا دیرکتوری به انضمام تعداد دیرکتوریهایی که در یک دیرکتوری وجود دارد.(بنابراین برای هر دیرکتوری کمترین مقدار ۲ خواهد بود چرا که هر دیرکتوری که ساخته میشود به طور پیشفرض داخلش ۲ دیرکتوری .
و ..
وجود دارد.)
user1
کاربری است که books به او تعلق دارد یا به عبارت دیگر کاربری که owner یا صاحب دیرکتوری books است.
user1
گروهی که books به به آن تعلق دارد.
4096
حجم دیرکتوری بر اساس بایت
Jul 2 19:09
تاریخ ایجاد فایل که در اینجا ۲ جولای ساعت ۱۹:۰۹ است یا به عبارت بهتر تاریخ آخرین modification یا به عبارتی آخرین تاریخی که این فایل ویرایش(مثلا اگر فایل متنی است به آن چیزی اضافه یا از آن چیزی کم ) شده است.
books
نام فایل یا دیرکتوری
دستور ls -a
را در ترمینال وارد میکنیم:
user1@sadegh-VirtualBox:~/Desktop$ ls -a
خروجی:
. .. books file1.txt files flower.jpeg .some_config_file
خروجی شامل ۷ فایل و دیرکتوری است در مقایسه با خروجی دستور ls
که ۴ عنصر را نشان میدهد، ۳ عنصر بیشتر دارد. این سه عنصر .
و ..
و .some_config_file
میباشد که به ترتیب .
و ..
دو دیرکتوری هستند که در تمام دیرکتوریها وجود دارند و . به دیرکتوری فعلی و .. به دیرکتوری پدرِ دیرکتوری فعلی اشاره میکند(توضیحات بیشتر در ادامه) و .some_config_file
یک فایل مخفی است(نام فایلهای مخفی در لینوکس با . شروع میشود)
دستور ls -R
را در ترمینال وارد میکنیم:
user1@sadegh-VirtualBox:~/Desktop$ ls -R
خروجی:
.:
books file1.txt files flower.jpeg
./books:
hafez
./books/hafez:
ghazaliat.pdf
./files:
text_files
./files/text_files:
file1.txt
همینطور که میبینیم به صورت Recursive یا همان بازگشتی علاوه بر لیست کردن محتویات درون دیرکتوری فعلی .:
محتویات تمام دیرکتوریهای درون دیرکتوری فعلی را نیز لیست کرده است(مثلا
./books:
یا ./books/hafez
یا ./files:
یا ./files/text_files
user1@sadegh-VirtualBox:~/Desktop$ ls /var/log
user1@sadegh-VirtualBox:~/Desktop$ ls -l /var/log
user1@sadegh-VirtualBox:~/Desktop$ ls -a/var/log
دستور cd
( مخفف: change directory)
ویرایش
ساختار دستور
ویرایشcd path
توضیح
ویرایشاز دستور cd
برای تغییر دیرکتوری فعلی یعنی رفتن از یک دیرکتوری به دیرکتوری دیگر استفاده میشود.
path ممکن است:
- absolute آدرس باشد:
cd /home/user1/Desktop/images
- relative آدرس باشد: (بافرض اینکه دیرکتوری فعلی ما
/home/user1/
است)cd user1/Desktop/images
..
باشد: زمانی که بخواهیم از دیرکتوری فعلی یک دیرکتوری عقب بیاییم این دستور را وارد میکنیمcd ..
و زمانی که بخواهیم از دیرکتوری فعلی دو دیرکتوری عقب بیاییم این دستورcd ../../
و برای سه دیرکتوری مسیر میشود../../../
و برای چهار دیرکتوری میشود../../../../
.
باشد: (تک نقطه یعنی.
در لینوکس به معنای دیرکتوری فعلی است. میتوانیم ابتدای آدرسهای relative را با./
شروع کنیم مثلا آدرسcd user1/Desktop/images
را میتوانیم به این صورت بنویسیم:cd ./user1/Desktop/images
ولی استفادهٔ بهتر و توضیح کامل تر در مورد.
در ادامه بیان خواهد شد.(برای دیدن استفادهٔ جالبتر از این دستور به توضیحات دستور mv رجوع کنید)
نحوه استفاده
ویرایشاگر فرض را بر این بگیریم که یک کاربر با نام user1
داریم آدرس دیرکتوری خانه(home directory) این کاربر /home/user1/
خواهد بود(به شکل ۱ توجه کنید) و فرض کنیم که در درون دیرکتوری خانهٔ کاربر یک دیرکتوری به نام files وجود دارد(/home/user1/files/
) برای وارد شدن به دیرکتوری files از دستور زیر استفاده میکنیم:
cd /home/user1/files
اگر فرض کنیم که دیرکتوری فعلی ما /home/user1/
است آنگاه برای وارد شدن به دیرکتوری files میتوانیم علاوه بر cd /home/user1/directory
از دستورهای زیر نیز استفاده کنیم:
cd user1/files
دقت کنید که درابتدای آرگومان داده شده به دستور cd، برخالف دستور قبلی (از /
استفاده نکردیم. /
یعنی دیرکتوری روت در ادامهٔ درس بیشتر توضیح داده خواهد شد. ) یا cd ./user1/files
دقت کنید که در شروع آدرس فوق از ./
استفاده کردیم. (./
یعنی دیرکتوری فعلی) در ادامهٔ درس بیشتر توضیح داده خواهد شد.
فرض کنید که از هر دیرکتوری که هستیم میخواهیم یک دیرکتوری به عقب بیاییم(مثلا دیرکتوری فعلی /home/user1/Desktop/images
) برا اینکار از این دستور استفاده میکنیم:
cd ..
برای مثالهای دستورات زیر ساختار دیرکتوری زیر را در نظر بگیرید:
/home/user1/Desktop
├── books
│ └── hafez
│ └── ghazaliat.pdf
├── file1.txt
├── files
│ └── text_files
│ └── file1.txt
└── flower.jpg
دستور mv (مخفف move)
ویرایشساختار دستور
ویرایشmv [source] [destination]
توضیح
ویرایشاین دستور به طور کلی دارای دو کاربرد است:
source آدرس دیرکتوری(ها) یا فایل(ها) یی است که میخواهیم آن را به destination انتقال دهیم.
دستور mv [source] [destination]
را میتوان اینگونه خواند: move source to destination( یعنی source با به destination انتقال بده)
۱. جابهجا کردن یک دیرکتوری یا فایل از یک دیرکتوری به دیرکتوری دیگر(مثل عملیات Cutدر ویندوز)
ویرایشمثال
ویرایشuser1@sadegh-VirtualBox:~/Desktop$mv files books
: دیرکتوری files به books انتقال داده میشود.
user1@sadegh-VirtualBox:~/Desktop$mv files /home/user2/Desktop
: دیرکتوری files به دیرکتوری به آدرس /home/user2/Desktop منتقل میشود.
user1@sadegh-VirtualBox:~/Desktop$mv books/hafez/ghazaliat.pdf .
: فایل به آدرس ~/Desktop$mv books/hafez/ghazaliat.pdf
به دیرکتوری فعلی یعنی ~/Desktop
منتقل میشود.
user1@sadegh-VirtualBox:~/Desktop/books/hafez$ mv ghazaliat.pdf ../
: فایل ghazaliat.pdf
که در دیرکتوری فعلی(~/Desktop/books/hafez
) قرار دارد به یک دیرکتوری عقبتر یا به عبارت دیگر به دیرکتوری پدر دیرکتوری فعلی(دیرکتوری پدر دیرکتوری فعلی: ~/Desktop/books/
) منتقل میشود.
۲. تغییر نام یک دیرکتوری یا فایل (مثل عملیات Rename در ویندوز)
ویرایشدر لینوکس برای تغییر نام یک فایل نیز از mv استفاده میکنیم.
مثال
ویرایشuser1@sadegh-VirtualBox:~/Desktop$mv files my_files
: تغییر نام دیرکتوری files به دیرکتوری my_files
user1@sadegh-VirtualBox:~/Desktop$mv books/hafez/ghazaliat.pdf books/hafez/hafez_ghazaliat.pdf
: تغییر نام فایل ghazaliat.pdf
به فایل hafez_ghazaliat.pdf
user1@sadegh-VirtualBox:~/Desktop$mv books/hafez/ghazaliat.pdf hafez_ghazaliat.pdf
تغییر نام و جابهجایی همزمان، فایل ghazaliat.pdf
به آدرس( ~/Desktop/books/hafez
) به آدرس ~/Desktop/
انتقال داده میشود و نامش به hafez_ghazaliat.pdf
تغییر داده میشود.
user1@sadegh-VirtualBox:~/Desktop$mv books/hafez/ghazaliat.pdf /home/user1/hafez_ghazaliat.pdf
تغییر نام به hafez_ghazaliat و انتقال به home/user1
mv برای چند فایل
ویرایش~/Desktop/files
├── file1.txt
├── file2.txt
├── file3.txt
└── text_files
user1@sadegh-VirtualBox:~/Desktop/files$ mv file1.txt file2.txt file3.txt text_files/
: انتقال فایلهای file1.txt و file2.txt و file3.txt به دیرکتوری text_files
user1@sadegh-VirtualBox:~/Desktop$ mv dir1 dir2 dir3 files
: انتقال دیرکتوریهای dir1 و dir2 و dir3 به دیرکتوری files (در اینجور موارد معمولا آخرین دیرکتوری که در دستور به عنوان آرگومان نوشته میشود به عنوان مقصد یا همان destination و آرگومانهای قبلی به عنوان source در نظر گرفته میشوند، در اینجا ۴ آرگومان داریم که سه تای اول dir1 و dir2 و dir3 به عنوان source و آخری یعنی files به عنوان destination در نظر گرفته میشود )
دستور cp (مخفف copy)
ویرایشساختار دستور
ویرایشcp [source] [destination]
کپی کردن فایل
ویرایشcp [source] [destination]
کپی کردن دیرکتوری
ویرایشcp -r [directory_source] [destination]
برای اینکه یک دیرکتوری را کپی کنیم باید عمل کپی را به صورت recursive یعنی بازگشتی انجام دهیم به عبارت دیگر باید از flag یا همان پرچم -r
استفاده کنیم.
توضیح
ویرایشاز این دستور برای کپی کردن یک فایل یا دیرکتوری به دیرکتوری دیگر استفاده میشود.
source آدرس دیرکتوری(ها) یا فایل(ها) یی است که میخواهیم آن را به destination کپی کنیم.
دستور cp [source] [destination]
را میتوان اینگونه خواند: copy [source] to [destination]
مثال
ویرایشuser1@sadegh-VirtualBox:~/Desktop$ cp flower.jpg files/test/
: کپی کردن فایل flower.jpg
به آدرس ~/Desktop/files/test
user1@sadegh-VirtualBox:~/Desktop$ cp -r files books/
: کپی کردن دیرکتوری files در دیرکتوری books
user1@sadegh-VirtualBox:~/Desktop$ cp -r files/ books/new_ddd
: کپی کردن به همراه تغییر نام، کپی کردن دیرکتوری files به دیرکتوری ~/Desktop/books/
و تغییر نام آن به new_add
user1@sadegh-VirtualBox:~/Desktop$ cp flower.jpg files/test/fl.jgp
: کپی کردن فایل به همراه تغییر نام
cp برای چند فایل
ویرایش~/Desktop/files
├── dir1
├── dir2
├── dir3
└── text_files
├── file1.txt
├── file2.txt
└── file3.txt
user1@sadegh-VirtualBox:~/Desktop/files$ cp file1.txt file2.txt file3.txt text_files/
: کپی کردن فایلهای file1.txt و file2.txt و file3.txt درون دیرکتوری text_files
user1@sadegh-VirtualBox:~/Desktop$ cp -r dir1 dir2 dir3 files
: کپی کردن سه دیرکتوری dir1 و dir2 و dir3 به دیرکتوری files3 (در اینجور موارد معمولا آخرین دیرکتوری که در دستور به عنوان آرگومان نوشته میشود به عنوان مقصد یا همان destination و آرگومانهای قبلی به عنوان source در نظر گرفته میشوند)
دستور rm (مخفف remove)
ویرایشساختار دستور
ویرایشrm [path]
پاکر کردن فایل
ویرایشrm [path]
پاک کردن دیرکتوری
ویرایشrm -r [path]
برای اینکه یک دیرکتوری را پاک کنیم باید عمل پاک کردن را به صورت recursive یعنی بازگشتی انجام دهیم به عبارت دیگر باید از flag یا همان پرچم -r
استفاده کنیم.
توضیح
ویرایشاز این دستور برای پاک کردن فایل و دیرکتوری استفاده میشود.
مثال
ویرایشuser1@sadegh-VirtualBox:~/Desktop$ rm files/text_files/file3.txt
: پاک کردن فایل به آدرس ~/Desktop/files/text_files
user1@sadegh-VirtualBox:~/Desktop$ rm -r files/dir1
: پاک کردن دیرکتوری به آدرس ~/Desktop/files
با نام dir1
دستور mkdir(مخفف make directory)
ویرایشساختار دستور
ویرایشmkdir [path]
توضیح
ویرایشاز این دستور برای ساختن دیرکتوری استفاده میشود.
path مسیر دیرکتوری جدید که میخواهیم بسازیم که مسلما شامل نامش نیز میشود.
مثال
ویرایشuser1@sadegh-VirtualBox:~/Desktop$mkdir pics
: ساختن دیرکتوری با نام pics در دیرکتوری فعلی(هر دیرکتوری ای که الان در آن هستیم)
user1@sadegh-VirtualBox:~/Desktop$mkdir files/dir1/pics
: ساختن دیرکتوری pics در آدرس ~/Desktop/files/dir1
ایحاد فایل با دستورات >
و touch
ویرایش
دستور touch
ویرایشساختار دستور
ویرایشtouch [options]
توضیح
ویرایشدر دستور بالا منظور از option یک یا چند مسیر است که میخواهیم فایل یا فایلهای جدید را در آن درست کنیم.
از دستور touch به منظور ایجاد فایل یا آپدیت کردن(به روزرسانی) timestamp فایلی که از قبل وجود دارد استفاده میشود.
مثال
ویرایشuser1@sadegh-VirtualBox:~/Desktop/books$ touch file4.txt
یک فایل جدید با نام file4.txt ساخته میشود یا در صورتی که این فایل از قبل در دیرکتوری فعلی وجود داشته باشد فقط timestamp
آن آپدیت میشود.
user1@sadegh-VirtualBox:~/Desktop/books$ touch file5.txt file6.txt
: دو فایل به طور جداگانه با نامهای file5.txt و file6.txt ایجاد میشود. در صورتی که این فایلها از قبل در دیرکتوری فعلی وجود داشته باشند timestamp
آن آپدیت میشود.(نکته هر تعداد نام فایل را به عنوان آرگومان به دستور touch میتوان داد ولی باید بین نام فایلها فاصله قرار گیرد)
نکته: باید دقت کرد که در صورتی که میخواهیم فایل جدیدی که ایجاد میشود در نام خود فاصله داشته باشد مثلا file 7.txt
باید نام فایل را در گیومه "
قرار دهیم در غیر اینصورت دستور touch
، هر کدام از file
و 7.txt
را یک آرگومان جدا در نظر میگیرد و دو فایل با نامهای file
و 7.txt
درست میکند.
مثال:
user1@sadegh-VirtualBox:~/Desktop/books$ touch file 7.txt
: پس از اجرای دستور دو فایل با نامهای file
و 7.txt
ساخته میشوند.
برای ایجاد یک فایل که در نام آن کاراکتر فاصله وجود دارد باید نام آن را در " قرار دهیم تا دستور touch آن را به عنوان یک آرگومان در نظر بگیرد.
user1@sadegh-VirtualBox:~/Desktop/books$ touch "file 7.txt"
: یک فایل با نام file 7.txt در دیرکتوری فعلی ایجاد میشود.
عملگر >
و >>
( standard output redirection)
ویرایش
>
ا زاین عملگر برای ایجاد فایل استفاده میشود. همزمان با ایجاد فایل میتوان چیز نیز در آن ذخیره کرد. مثلا خروجی یک دستور را میتوان در یک فایل ذخیره کرد. این عملگر فایلی که از قبل وجود دارد را پاک میکند و یک فایل جدید درست میکند.
>>
از این دستور نیز برای ایجاد فایل استفاده میشود و همزمان با ایجاد فایل میتوان چیزی نیر در آن ذخیره کرد. مثلا خروجی یک دستور را میتوان در یک فایل ذخیره کرد. فرق این عملگر با عملگر قبلی این است که این عملگر روی فایلی که از قبل وجود دارد عملیات append انجام میدهد.
مثال:
user1@sadegh-VirtualBox:~/Desktop$>nfile1
: ایجاد یک فایل به نام nfile1
user1@sadegh-VirtualBox:~/Desktop$>>nfile2
: ایجاد یک فایل به نام nfile2
user1@sadegh-VirtualBox:~/Desktop$ echo "life is a tale" > nfile3
: ایجاد یک فایل با نام nfile3
با متن "life is a tale"
user1@sadegh-VirtualBox:~/Desktop$ echo "life is a tale" >> nfile4
: ایجاد یک فایل با نام nfile4
با متن "life is a tale"
user1@sadegh-VirtualBox:~/Desktop$ ls > nfile5
: خروجی متنی یک دستور را میتوانیم با کمک این عملگر در یک فایل ذخیره کنیم. در اینجا خروجی دستور ls
را در فایلی به نام nfile5
ذخیره میکنیم. یعنی آنچه که با زدن ls در shell نمایش داده میشود در فایل nfile5
ذخیره میکنیم.
user1@sadegh-VirtualBox:~/Desktop$ echo "life is a tale" > nfile3
user1@sadegh-VirtualBox:~/Desktop$ echo "told by an idiot" > nfile3
در قطعه کد بالا در خط اول فایل nfile3
ساخته میشود و متن "life is a tale"
در درون آن قرار میگیرد. و در خط دوم فایل nfile3
دوباره ایجاد میشود و متن قبلی پاک شده و متن جدید یعنی "told by an idiot"
جای آن را میگیرد. پس در انتها پس از اجرای این دو دستور فایل nfile3
حاوی این متن خواهد بود: "told by an idiot"
user1@sadegh-VirtualBox:~/Desktop$echo "life is a tale" > nfile4
user1@sadegh-VirtualBox:~/Desktop$echo "told by an idiot" >> nfile4
در قطعه کد بالا در خط اول فایل nfile4
ساخته میشود و متن "told by an idiot"
در درون آن قرار میگیرد. و در خط دوم متن "told by an idiot"
به فایل nfile4
ضمیمه میشود. پس در انتها پس از اجرای این دو دستور فایل nfile4
حاوی این متن خواهد بود: life is a tale told by an idiot
. و .. و ~
ویرایشدر لینوکس داخل هر دیرکتوری دو دیرکتوری .
و ..
و جود دارد(اگر با دستور ls -a
تمامی فایلها و دیرکتوریهای درون یک دیرکتوری را لیست کنیم میتوانیم این دو دیرکتوری را ببینیم)
دیرکتوری .
به دیرکتوری فعلی(current directory) و دیرکتوری ..
به دیرکتوری پدرِ دیرکتوریِ فعلی یعنی parent directory -ِ دیرکتوری فعلی اشاره میکند.
استفاده از .
و ..
:
(دستوراتی که در ذیل استفاده میشوند در ادامه به طور کامل توضیح داده خواهند شد)
cp /home/user1/files/file.txt .
اگر فرض کنیم که دیرکتوری فعلی ما /home/user1/Desktop/
است آنگاه دستور فوق فایل file.txt که داخل دیرکتوری
/home/user1/files/
است را در .
یعنی دیرکتوری فعلی( دیرکتوری که الان در آن هستیم یعنی /home/user1/Desktop/
) کپی میکند
cp /home/user1/files/file.txt ..
اگر فرض کنیم که دیرکتوری فعلی ما /home/user1/Desktop/
است آنگاه دستور فوق فایل file.txt که داخل دیرکتوری
/home/user1/files/
است را در ..
یعنی یک دیرکتوری قبل از دیرکتوری فعلی(دیرکتوری قبلی یعنی /home/user1/
)یا به عبارت دقیقتر دیرکتوری والد یا همان parent directory کپی میکند.
~ علامتی است که به آن (تیلدِی) میگویند و به دیرکتوری home کاربر اشاره میکند. برای مثال برای کاربر user1، ~ معادل است با /home/user1/ پس میتوان فهمید که آدرس ~/Desktop معادل آدرس /home/user1/Desktop است.
آدرس مطلق (Absolute address) و نسبی(Relative Address)
ویرایشآدرس مطلق، آدرسی است که از دیرکتوری روت (/
) داده میشود. به عبارت دیگر آدرس مطلق آدرسی است که از ابتدای File system داده میشود.
مثال:
/var/log
/usr/bin
آدرس نسبی، آدرسی است که از pwd یا همان present working directory
یا همان دیرکتوری فعلی داده میشود به عبارت دیگر آدرسی است که نسبت به دیرکتوری فعلی داده میشود مثلا اگر فرض را بر این بگیریم که دیرکتوری فعلی ما /usr/
باشد. آنگاه بخواهیم که به /usr/bin
برویم: user1@sadegh-VirtualBox:/usr$cd bin
توجه: هرگاه آدرسی با / شروع شود آن آدرس آدرس مطلق است(در حقیقت داریم از دیرکتوری روت آدرس دهی میکنیم) و هرگاه آدرسی بدون / شروع شود آن آدرس یک آدرس نسبی است( و درحقیقت داریم از دیرکتوری فعلی آدرس دهی را انجام میدهیم)
مثال دیگر:
فرض کنید که دیرکتوری فعلی /usr/bin
است و ما میخواهیم از این دیرکتوری به دیرکتوری Desktop برای user1 برویم:
با استفاده از آدرس مطلق:
user1@sadegh-VirtualBox:/usr/bin$ cd /home/user1/Desktop/
با استفاده از آدرس نسبی:
user1@sadegh-VirtualBox:/usr/bin$ cd ../../home/user1/Desktop/
Globbing یا استفاده از wildcard ها یا regular expression ها در نام فایلها در دستورات
ویرایش*
یعنی هر تعداد کاراکتری(یک کاراکتر یا بیشتر) - مثلا list*.txt
یعنی هر رشته(مجموعهای از کاراکترها) یا همان نام فایلی که با اول آن list و آخر آن .txt
است مثلا list2.txt
یا listsdflkjsdf.txt
یا listqwertyuioplkjhgfdsazxcvbnm.txt
یا
?
فقط یک کاراکتر- مثلا
list?.txt
یعنی هر رشتهای که اول آن
list
و آخر .txt
باشد و میان این دو فقط یک کاراکتر باشد. مثلا list1.txt
یا listc.txt
یا listm.txt
و ...
کاربرد:
فرض کنید:
~/Desktop/files
├── dir1
├── dir2
├── dir3
└── text_files
├── file1.txt
├── file2.txt
└── file3.txt
user1@sadegh-VirtualBox:~/Desktop$ cp files/text_files/fi*.txt books/
: هر فایلی که نامش با این الگو fi*.txt
سازگار باشد را به دیرکتوری books کپی میکند.(در اینجا file1.txt و file2.txt و file3.txt )
user1@sadegh-VirtualBox:~/Desktop$ cp files/text_files/file?.txt books/
: هر فایلی که نامش با این الگو سازگار باشد file?.txt
به دیرکتوری books کپی میشود.(در اینجا file1.txt و file2.txt و file3.txt )
user1@sadegh-VirtualBox:~/Desktop$ cp -r files/dir? books/
: هر دیرکتوری که نامش با این الگو dir?
سازگار باشد را به دیرکتوری books کپی میکند.(در اینجا dir1 و dir2 و dir3 )
user1@sadegh-VirtualBox:~/Desktop$ rm -r files/dir?
: هر دیرکتوری که نامش با این الگو dir?
سازگار باشد را پاک میکند.(در اینجا dir1 و dir2 و dir3 )
user1@sadegh-VirtualBox:~/Desktop$ mv books/dir? files/
: هر دیرکتوری که نامش با این الگو dir?
سازگار باشد را به دیرکتوری files انتقال میدهد. (در اینجا dir1 و dir2 و dir3 )
ترکیب کردن پرچمها(flag)های دستورات
ویرایشمیتوان پرچمها را به دو صورت زیر با هم استفاده کرد:
در اینجا از دستور ls
و سه پرچم -a
و -l
و -R
استفاده میکنیم.
ls -l -a -R
یا
ls -laR
متغیرها
ویرایشدر لینوکس میتوان متغیر تعریف کرد. استفاده از متغیر در اسکریپت نویسی بسیار کاربرد دارد. نام تمامی متغیرها با کاراکتر $ شروع میشود.
در اینجا ما میتوانیم در فضای ترمینال نیز متغیر بسازیم و مقدار دهی کنیم و مقدار آن را ببینم:
variable_name=variable_value
#مقدار دهی چند متغیر در پایین
a=hello#مقدار بیش از دو کلمه بود باید آن را در گیومه قرار دهیم
b="hello world"#بین متغیر و علامت مساوی و مقدار نباید فاصله وجود داشته باشد
c = "hello world"#چون بین متغیر و علامت مساوی و مقدار فاصله وجود دارد
# چاپ کردن متغیر های تعرف شده در بالا
echo $a # output: hello
echo $b # output: hello world
name=jack
lname=London
echo $name#output: Jack
echo "$name"#output: Jack
echo $name $lname#output: Jack London
echo "$name $lname"#output: Jack London
echo "$name$lname" #output: JackLondon
متغیرهای محیطی (Environment Variables)
ویرایشمتغیرهایی هستند که با بوت شدن سیستم مقدار دهی میشوند. از مهمترین متغیرهای محیطی میتوان به متغیر$PATH
اشاره کرد که حاوی آدرسهای برنامههای اجرایی است. مثلا آدرس برنامههایی از قبیل ls و rm و mkdir و ... به طور کلی هر دستوری که تا الان استفاده کردهایم و بسیاری از دستورهایی که بعدا استفاده خواهیم کرد در این متغیر قرار دارد.
زمانی که ما دستوری را در shell وارد میکنیم (مثلا mkdir) پوستهٔ لینوکس یا همان shell در متغیر $PATH
به دنبال آدرس فایل اجرایی این دستور میگردد اگر فایل اجرایی آن را پیدا کرد آن را اجرا میکند در غیر اینصورت پیام خطا نمایش میدهد.
آدرس فایل اجرایی چند دستور مهم:
/bin/mkdir
/bin/ls
/bin/rm
برای مشاهدهٔ محتویات متغیر $PATH
کافی است آن را echo کنیم به صورت زیر:
echo $PATH
خروجی:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
همانطور که میبینید متغیر $PATH
شامل ۸ آدرس میباشد که با :
از هم جدا شدهاند.
مشاهدهٔ داکیومنت دستورات(--help و man)
ویرایشبرای دیدن توضیحات مربوط به یک دستور در لینوکس میتوان به این صورت عمل کرد:
man command_name
command_name --help
man
مخفف manual میباشد.
مثال:
man rm
man ls
man cp
man mkdir
man echo
rm --help
ls --help
cp --help
mkdir --help
whereis و which
ویرایشwhereis
ویرایشwhereis command_name
با استفاده از این دستور میتوان آدرس فایل اجرایی یک برنامه (دستور) را پیدا کرد.
مثال
whereis ls
whereis mkdir
whatis
ویرایشwhatis command_name
با استفاده از این دستور میتوان توضیحی مختصر و یک خطی در مورد برنامه(دستور) را مشاهده کرد.
مثال
whatis ls
whatis mkdir
دستور history
ویرایشبا زدن این دستور تمامی تاریخچهٔ یا همان history دستوراتی که تا الان کاربر در shell زده است به اون نشان داده میشود.