لینوکس مقدماتی/آشنایی با خط فرمان

ساختار دستورات لینوکس

ویرایش

[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/ چاپ خواهد شد.

 
شکل۱. در شکل بالا «/» نشان دیرکتوری روت (root directory) میباشد و دیرکتوری‌های bin و dev و etc و home و sbin و usr دیرکتوری‌های درون دیرکتوری روت هستند. و درون دیرکتوری home دو دیرکتوری user1 و دیرکتوری user2 وجود دارد.(در این شکل تمام دیرکتوری‌های درون روت دیرکتوری نشان داده نشده)

دستورات مهم لینوکس(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 command_name

با استفاده از این دستور می‌توان آدرس فایل اجرایی یک برنامه (دستور) را پیدا کرد.

مثال

whereis ls

whereis mkdir

whatis command_name

با استفاده از این دستور می‌توان توضیحی مختصر و یک خطی در مورد برنامه(دستور) را مشاهده کرد.

مثال

whatis ls

whatis mkdir

دستور history

ویرایش

با زدن این دستور تمامی تاریخچهٔ یا همان history دستوراتی که تا الان کاربر در shell زده است به اون نشان داده ‌می‌شود.