فصل سوم - فایل‌ها

از Linuxreview Wiki
پرش به: ناوبری, جستجو

در سیستم‌های یونیکسی همه چیز به صورت فایل است. در این فصل و فصل بعد به برخی ار ویژگی‌های انواع فایل در سیستم‌های یونیکسی میپردازیم.


فایل‌ها

محتویات

[نهفتن]

مشاهدهٔ لیست و مشخصات فایل‌ها

برای مشاهده لیست فایل‌های یک دایرکتوری از دستور ls استفاده می‌شود. به طور خلاصه شکل استفاده‌ی عمومی تر از این دستور به شکل زیر است:

$ ls

که این دستور لیست فایل‌های موجود در دایرکتوری جاری را نمایش می‌دهد.

نکته: در خروجی این دستور، احتمالاً رنگ انواع مختلف فایل(فایل عادی، دایرکتوری، لینک و فایل‌های خاص) با هم تفاوت دارد.


بررسی چند آپشن کاربردی

آپشن F
این آپشن همانند دستور بالا عمل میکند با این تفاوت که در خروجی فایل‌ها، دایرکتوری‌ها و فایل‌های خاص را با درج یک کاراکتر در انتهای اسم آنها هنگام نمایش از هم جدا میکند. این کاراکتر برای دایرکتوری‌ها اسلش / ، و برای فایل‌های خاص بسته به نوع ورژن ls ممکن است ! , @ , # باشد و برای فایل‌های معمولی هم چیزی درج نمیشود. برای اطلاعات دقیق از نوع کاراکتری که شل شما برای مشخص کردن فایل‌های خاص استفاده میکند میتوانید به man ls مراجعه کنید.

$ ls -F

مثال:

baroon/ دایرکتوری 
ch07 فایل عادی
nam@ فایل خاص



آپشن 1
با استفاده از این آپشن هر فایل را در یک خط نمایش داده می‌شود.

$ ls -1

مثال:

$ ls -1
baroon
ch04.txt
nam


نکته: این آپشن معمولاً برای استفاده در حلقه‌ها در اسکریپت، یا برای فرستادن به دستور دیگر، مفید است. چون نام فایل/دایرکتوری ممکن است شامل فاصله باشد ولی احتمالاً شامل کاراکتر «سر خط» نیست (و اگر هم باشد، ls بجای آن علامت سوال نشان می‌دهد).



آپشن a
استفاده از این آپشن در دستور ls، علاوه بر نمایش فایل‌های غیرمخفی فایل‌های مخفی را نیز نمایش میدهد.

$ ls -a



اشاره: فایل‌های مخفی در خط فرمان سیستم‌های مبتنی بر یونیکس، اسم‌شان با نقطه(.) شروع می‌شوند (البته در file manager های گرافیکی حالت‌های دیگری هم برای پنهان بودن/کردن فایل وجود دارد)

اشاره: در دستور ls امکان ادغام آپشن‌ها وجود به طور مثال دستورهای زیر با معال هم هستند:

$ ls -F -1 -a
$ ls -F1 -a
$ ls -aF1

بررسی نوع فایل‌

برای مشخص شدن نوع یک فایل از دستور ls به همراه آپشن l می‌توان استفاده کرد.
مثال:

$ ls -l /home/baroon/.profile

که خروجی زیر را تولید میکند:

-rwxr-xr-x 1 baroon users 2368 Jul 11 15:57 .profile*

در اینجا شما چندین کاراکتر (-) مشاهده میکنید که شروع با (-) نشان دهنده‌ی فایل معمولی(regular file).
برای فایل‌های ویژه کاراکتر اول یکی از موارد جدول زیر است:

- : Regular file
l : Symbolic link
c : Character special
b : Block special
p : Named pipe
s : Socket
d : Directory file

مثال:

$ ls -ld /home/ranga
drwxr-xr-x 27 ranga users 2048 Jul 23 23:49 /home/ranga

که حرف d (در ابتدای خروجی) نشان می‌دهد که فایل از نوع دایرکتوری است.

نکته: آپشن d در دستور ls به این معنی است که اگر آرگومان داده شده دایرکتوری بود، جزئیات خود دایرکتوری را نشان دهد، نه محتویات آن را.



فایل‌های معمولی(regular)

متداول ترین نوع فایلی که با آن سروکار دارید، فایل‌های معمولی(regular file) هستند. در این نوع از فایل تقریبا هر نوع داده‌ای از قبیل یک متن، یک برنامه کاربردی، فیلم، فایل‌های باینری یا تصویر را میتوان ذخیره کرد.
یونیکس توانایی درک داده‌های موجود در یک regular file را ندارد. یک فایل معمولی میتواند به هر شکلی یک داده خام را ذخیره کند. زیرا یونیکس عمل تفسیر بر روی داده‌های یک فایل را انجام نمیدهد.

اشاره: معمولا فایل‌های معمولی میتوانند اطلاعات اندکی از نوع داده‌هایی که در خودشان ذخیره کرده‌اند به شما بگویند. که برای این منظور دستور file بسیار مفید است.


شکل کلی دستور file:

file filename

مثال:

$ file /sbin/sh

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

/sbin/sh: ELF 32-bit MSB executable SPARC Version 1, statically linked, stripped

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


دایرکتوری‌ها

که در فصل بعدی(فصل ۴) پوشش داده شده‌اند نوعی از فایل‌ها هستند که میتوانند هم شامل فایل‌های عادی و هم دایرکتوری باشند. به عبارتی محتوای یک فایل از نوع دایرکتوری لیست از فایل‌ها است که در آن ذخیره شده است. (معادل دایرکتوری در سیستم‌های مبتنی بر ویندوز و مک "folder" است.)


Symbolic Links

کمی شبیه shortcut ها در ویندوز هستند، و شما را قادر میسازند که برای دسترسی به یک فایل از نام‌ها یا مسیرهای متعددی استفاده کنید. گرچه در این حد بدانید که shortcut ها در ویندوز فقط جنبهٔ گرافیکی دارند و برنامه‌های مختلف (غیر از خود ویندوز) با آن نمی توانند مثل فایل اصلی برخورد کنند. یکی از مزایای یونیکس بر ویندوز، پشتیبانی بسیار بهتر از لینک‌ها است. یک لینک سمبلیک، فایلی ویژه برای اشاره به یک فایل دیگر میباشد. این فایل‌ها آدرس یک فایل دیگر را در خود ذخیره کرده‌اند. زمانی که شما به یکی از این نوع فایل‌ها دستیابی پیدا میکنید، از آدرس ذخیره شده، برای دستیابی به فایلی که آدرس به آن اشاره میکند، استفاده میشود. شما میتوانید لینک‌‌های سمبلیک متعددی در مکان‌های مختلف و با نام‌های مختلف برای دستیابی به یک فایل(از هر نوعی) استفاده کنید.

نکته: در سیستم‌های مبتنی بر ویندوز و مک معادل لینک سمبلیک، shortcut یا alias میباشد.


مثال:

lrwxrwxrwx 1 root root 9 Oct 23 13:58 /bin/ -> ./usr/bin/

که حرف l نشان دهنده‌ی یک لینک سمبلیک است. در واقع فایل bin یک لینک به /usr/bin/. میباشد.

توجه: آدرس نسبی نشان داده شده در این خروجی، ارتباطی به مسیرجاری شما ندارد. در واقع این آدرس وابسته به مسیر لینک است، نه مسیر جاری شما. به عبارت دیگر علامت نقطه نماد دایرکتوری والد لینک است، و .. نماد دایرکتوری والد والد لینک. در این مثال bin در دایرکتوری ریشه ساکن است، در نتیجه /usr/bin/. نشان‌دهنده‌ی این است که bin/ یک لینک به فایل usr/bin/ است.



نحوه‌ی ایجاد symbolic link

برای ایجاد یک لینک سمبلیک از دستور ln به شکل زیر استفاده می‌شود:

ln -s source destination

که در اینجا source مسیر نسبی یا مطلق فایل اصلی و اسم فایل سمبلیکی است که باید ساخته شود.

مثال:

$ ln -s /home/httpd/html/users/baroon /home/ranga/public_html

یا

$ cd
$ ln -s ../httpd/html/users/baroon ./public_html

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


دو خطای رایج در اجرای این دستور موارد زیر هستند:

  1. فایل مقصد (destination) از قبل موجود باشد
  2. فایل مقصد یک دایرکتوری باشد
  3. دایرکتوری والد فایل مقصد، موجود نباشد
  4. کاربر مجوز نوشتن در مسیر فایل مقصد را نداشته باشد


نکته: مسیر مبدأ در هنگام لینک دادن بررسی و اعتبارسنجی نمی‌شود، اگر مسیر مبدأ به هیچ نوع فایلی (از جمله دایرکتوری، لینک و غیره) اشاره نکند، خطایی نشان داده نمی‌شود، ولی لینک بوجود آمده در مسیر مقصد، یک لینک خراب (broken link) خواهد بود و در هنگام خواندن این لینک جدید، خطا رخ خواهد داد. همینطور اگر بعد از ایجاد لینک، فایل اصلی را جابجا کنید یا تغییرنام دهید، لینک اشارهٔ کننده به آن، broken خواهد شد.



مثال: دستور زیر با فرض اینکه فایل exrc. از قبل موجود باشد منجر به خطا میشود:

$ ln -s /etc/exrc .exrc
ln: cannot create .exrc: File exists

مگر آنکه از آپشن f برای جایگزین کردن استفاده کنید:

$ ln -sf /etc/exrc .exrc

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


در حالت دوم، یعنی وقتی که فایل مقصد یک دایرکتوری باشد، دستور ls موجب ایجاد یک لینک سمبلیک در دایرکتوری مقصد با همان اسم فایل مبدا میشود.

مثال:

$ ln -s /home/ftp/pub/baroon pub

این دستور فایل با نام baroon در دایرکتوری pub ایجاد میکند. این حالت به این خاطر به عنوان یک خطا ذکر شده زیرا اغلب این رویه فراموش میشود.

نوع فایل Device

در سیستم‌های یونیکسی هر device از طریق یک فایل قابل دسترسی است، این نوع از فایل‌ها روی هیچ دیسکی وجود ندارند و فقط در RAM توسط هسته(kernel) تعریف شده اند، تنها یک نقطه‌ی دسترسی به یک ابزار است (مانند فلش یا هارد یا پارتیشن‌های آن، cd-rom). دو نوع از این فایل‌ها موجود است. اکثر این فایل‌ها در دایرکتوری dev/ قرار دارند.
یک نوع character و نوع دیگر block نام دارند.

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

I: نوع فایل Character device

به منظور مهیا کردن مکانیسمی برای ارتباط با deviceها به طوری که در هر زمان یک کاراکتر جابجا میشود. این مکانیسم معمولا برای ارتباط با raw deviceها(دستگاه‌های اولیه) استفاده میشود.
مثال:

crw------- 1 ranga users 4, 0 Feb 7 13:47 /dev/tty0

که حرف c در ابتدای خط نمایانگر Character special است. علاوه بر حرف c شما دو حرف دیگر نیز مشاهده میکند. حرف اول major number و حرف دوم minor number نامیده میشود. یونیکس از این دو عدد برای مشخص کردن درایوری سخت‌افزاری که با آن ارتباط دارد استفاده میکند.


II:‌ نوع فایل Block device

مکانیسمی برای ارتباط با راه‌اندازهای سخت‌افزاری به وسیله‌ی سیستم‌فایل. این نوع فایل‌ها block device نامیده میشوند زیرا در هر زمان میتوانند حجم‌ زیادی داده را جابجا کنند. این نوع فایل‌ها معمولا نشان دهنده‌ی هارد یا رسانه‌های جداشدنی مانند فلش میباشند.
مثال:

brw-rw---- 1 root disk 8, 0 Feb 7 13:47 /dev/sda

که حرف c در ابتدای خط به معنی block special است. این فایل نیز همانند character special، یک شماره major و یک minor دارد.

سوکت‌ها

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


مجوزها، مالک‌ها و گروه‌های یک فایل

مشخصه‌های مالک، مجوزهای دسترسی و گروه‌ها برای یک فایل یکی از ویژگی‌های بسیار مهم سیستم‌های یونیکسی است که روش‌های ایمنی را برای ذخیره کردن فایل‌ها مهیا میکند. هر فایل در یونیکس سه مشخصه مهم دارد:


مجوز مالک مشخص کننده‌ي عملیاتی است که مالک آن میتواند انجام دهد. مجوز گروه مشخص کننده‌ی عملیات قابل اجرا در گروهی که کاربر در آن قرار دارد و مجوز دیگران مشخص کننده‌ی عملیات قابل انجام برای کاربرانی است که عضو گروه مالک فایل نیستند.

همچنین برای هر فایل میتوان سه عمل را انجام داد:

که به ترتیب به معنی خواندن محتوای فایل، تغییر محتوای فایل و اجرای فایل به عنوان یک برنامه، می‌باشند.


مشاهده‌ی مجوز‌ها

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

نمادهای سه مجوز پایه‌ای که کمی قبل‌تر ذکر شدند به صورت زیر می‌باشند:

  1. r خواندن فایل
  2. w نوشتن
  3. x اجرا کردن


مثال:

$ ls -l /home/baroon/.profile
-rwxr-xr-x 1 baroon users 2368 Jul 11 15:57 .profile*

چون کاراکتر اول خط با (-) شروع شده پس میدانیم که فایل معمولی است. کاراکترهای بعد از (-) در عبارت rwxr-xr-x- هر کدام معنی خاصی دارند. سه کاراکتر اول نشان دهنده‌ی مجوزهای مالک، کاراکترهای بعد از خط تیره دوم نشان‌دهنده‌ی مجوزهای گروه و کاراکترهای آخر مجوزهای دیگران میباشد.
در این مثال مالک(در اینجا baroon) فایل مجوز خواندن، نوشتن و اجرا کردن، گروه (در اینجا users) مجوز اجرا و خواندن و دیگران (دیگر گروه‌ها) تنها مجوز اجرا کردن دارند.

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

مجوزهای دایرکتوری

مجوز اجرا(x): امکان دستیابی به یک دایرکتوری را مهیا میسازد. در صورتی که این مجوز به یک دایرکتوری داده نشود، مجوزهای خواندن و نوشتن تاثیری ندارند.
مجوز خواندن (r): امکان مشاهده‌ی لیست و صفت فایل‌های موجود در دایرکتوری با استفاده از دستور ls را مهیا میسازد.
مجوز نوشتن (w): امکان اضافه یا حذف فایل در دایرکتوری را مهیا میسازد.

نکته: در صورتی که یک دایرکتوری تنها مجوز اجرا کردن داشته باشد، کاربر قادر مشاهده یا تغییر فایل‌های ذخیره شده در آن دایرکتوری نخواهد و تنها میتواند فایل‌های موجود در دایرکتوری را اجرا کند.


مجوزهای SUID و SGID

مکانیسمی برای دادن مجوزهای اضافی به برخی برنامه هاSUID) set user id) یا SGID) set group id) نام دارد. به عنوان مثال زمانی که شما برنامه‌ای را که suid آن فعال است اجرا میکنید ، در واقع مجوزهای این برنامه از مجوزهای مالک برنامه ارث‌بری میشود. در واقع اگر فايلى داراى مجوز SUID باشد، كاربرانى كه مجوز اجراى آن فایل را داشته باشند همانند مالک فايل در نظر گرفته مى شوند. همچنین برای sgid هم همین رابطه برقرار است. یعنی برنامه‌هایی که بیت sgid مجوز آنها فعال است، مجوزهای خود را از گروه به ارث میبرند و همانند گروه فایل در نظر گرفته می‌شوند.

نکته: بیت suid و sgid با حرف s نمایش داده میشود.


مثال:

$ ls -l /usr/bin/passwd
-r-sr-xr-x 1 root bin 19031 Feb 7 13:47 /usr/bin/passwd*

که نمایان گر این است که بیت suid فعال است و مالک فایل ریشه است.

مجوز sticky یا sticky bit

اين مجوز اصولا به دایرکتوری‌ها داده مى شود. فايل‌های درون دایرکتوری‌هایی که دارای این مجوز هستند تنها از طريق مالک آن فايل مى توانند حذف شوند، حتى اگر آن فايل براى همه كاربران داراى مجوز write باشد.
نکته: بیت sticky با حرف t نمایش داده میشود.

تعیین مجوزها برای فایل و دایرکتوری

شما میتوانید با استفاده از دستور chmod مجوزها را برای یک فایل یا دایرکتوری تغییر دهید. شکل کلی این دستور به صورت زیر است:

chmod expression files

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

روش سمبلیک

شکل کلی یک عبارت سمبلیک به صورت زیر است:

(who)(action)(permissions)


در این عبارت هر یک از بخش‌های who, action و permissions به صورت جداول زیر می باشند:
who:

actions:

permissions:

t : sticky bit

چندمثال:

$ chmod a=r *
$ chmod guo=r *

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

$ chmod ug-w .profile

مجوز نوشتن از گروه و مالک حذف میشود.

$ cd ; chmod go-rwx *
$ cd ; chmod go= *

تمام مجوز‌های فایل‌های دایرکتوری خانه برای گروه و دیگران حذف میشوند.(امکان دسترسی به فایل‌ها در این حالت فقط برای مالک وجود دارد)


$ chmod guo+rx *
$ chmod uog+xr *

دادن مجوز خواندن و اجرا کردن همه فایل‌ها به همه گروه‌ها

نکته:میتوان با استفاده (,) چند مجوز را به طور همزمان برای یک فایل مشخص کرد.


$ chmod go-w,a+x a.out

حذف مجوز نوشتن از گروه و دیگران و اضافه کردن مجوز اجرا به همه.

$ cd ; chmod ug+s .

دادن مجوز suid و sgid به دایرکتوری خانه


همچنین میتوان با استفاده از آپشن R در دستور chmod، مجوز تمام زیردایرکتوری و فایل‌های موجود در یک دایرکتوری را تغییر داد.
مثال:

$ ls pub
./ ../ README faqs/ src/
$ chmod -R o+r pub

که در این حالت علاوه بر اضافه کردن مجوز خواندن به فایل README، به تمام فایل‌های موجود در دایرکتوری‌های faqs و src نیز مجوز خواندن داده میشود.

روش مبنای هشت

در این روش تنها تغییر مجوز به روش صریح امکان پذیر است و باید تمام مجوزها را به طور صریح مقدار دهی کرد.
مقدار عددی هر یک از مجوزها به شرح زیر است:

برای این منظور یک عدد چهار رقمی مبنای هشت(هر رقم میتواند از ۰ تا ۷ باشد) را نظر بگیرید. مقدار هر رقم آن به شرح زیر است:
اولین رقم از سمت چپ: نشان دهنده‌ی suid یا sgid میباشد. که برای suid برابر ۴ و برای sgid برابر ۲ میباشد.
دومین رقم از سمت چپ: نشان دهنده‌ی مجوز مالک که از حاصل جمع مقدار عددی مجوزها بدست می‌آید.
سومین رقم از سمت چپ: نشان دهنده‌ی مجوز گروه که از حاصل جمع مقدار عددی مجوزها بدست می‌آید.
آخرین رقم از سمت چپ: نشان دهنده‌ی مجوز دیگران که از حاصل جمع مقدار عددی مجوزها بدست می‌آید.
مثال:

chmod 0600 .profile

که به معنی مجوز خواندن و نوشتن(۴+۲) به مالک فایل و بقیه گروه‌ها هیچ مجوزی ندارند.

نکته: در این روش فقط امکان مقدار دهی مجوزها وجود و امکان تغییر مجوزها قرار وجود ندارد. به عنوان مثال برای دستور زیر نمیتوان با این روش معادلی پیدا کرد:

chmod u+rw .profile


تغییر مالک‌ها و گروه‌ها

دو دستور زیر برای این منظور در دسترس است:

chown
chgrp

که دستور اول(change owner) برای تغییر مالک و دستور دوم (change group) برای تغییر گروه به کار میرود.


تغییر مالک(chown)

شکل کلی این دستور به صورت زیر است:

chown options user:group

که در آن user نام یکی از کاربرهای سیستم یا شماره‌کاربر (uid) آن میباشد. و group نام یکی از گروه‌های موجود در سیستم یا شماره‌گروه (gid)
مثال:

chown baroon:video /home/httpd/html/users/pic

که مالک دایرکتوری را به baroon و گروه آن‌را به video تغییر میدهد.

همچنین میتوان از آپشن R برای تغییر مالکیت تمام زیردایرکتوری‌ها استفاده کرد.
مثال:

chown -R baroon /home/httpd/html/users/pic

برای اطلاعات بیشتر به man chown مراجعه کنید.

تغییر گروه (chgrp)

شکل کلی این دستور به صورت زیر است:

chgrp options group files

که در آن group میتواند نام یا شماره یک گروه در سیستم باشد.

مثال:

chgrp authors /home/ranga/docs/ch5.doc

که گروه فایل به aouthors تغییر پیدا میکند.

همچنین میتوان برای تغییر گروه همه زیردایرکتوری‌های یک شاخه از آپشن R مشابه دستور chown استفاده کرد.




مشاهده‌ی محتوای فایل‌ها

مشاهده‌ی لیست فایل‌ها قابلیت مفیدی است ولی ما در شل(shell) نیاز به مشاهده‌ی محتوای فایل‌ها هم داریم. برای این منظور یکی از دستوراتی که میتوان استفاده کرد، دستور cat است.

شکل کلی دستور cat به صورت زیر است.

cat [option] filenames

به طور مثال:

$ cat hosts

یا برای نمایش همزمان دوفایل یا چند فایل:

$ cat hosts users


همچنین میتوان از آپشن n یا b برای نمایش شماره هر خط استفاده کرد با این تفاوت که در آپشن b تنها خطوطی که محتوای آنها خالی نیست شمار گذاری میشود. به مثال توجه کنید:

$ cat -n file
1 baroon
2 ranga
3 
4 rain


$ cat -b user
1 baroon
2 ranga

3 rain

شمارش تعداد کلمات، خطوط و کارکترهای یک فایل

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

شکل کلی دستور:

wc [options] files

اگر قسمت option خالی باشد wc به ترتیب تعداد خط‌ها، تعداد کلمات، تعداد کاراکترها و در پایان نام فایل را نمایش میدهد

مثال:

$ wc .rhosts
7 14 179 .rhosts

نکته: دستور wc -l برای شمارش خطوط خروجی یک دستور دیگر هم می‌تواند استفاده شود، مثلاً برای شمارش فایل‌های دایرکتوری جاری:

ls -1 | wc -l


میتوان نام چند فایل را پشت سرهم نوشت و با یک فاصله(space) از هم جدا کرد.

$ wc .rhosts .profile
7 14 179 .rhosts
133 405 2908 .profile
140 419 3087 total

همچنین با استفاده از optionها میتوان تنها یک یا چند مشخصه را به صورت زیر انتخاب کرد (در همه حالات اسم فایل در پایان آورده میشود):

$ wc -l file

تعداد خط‌ها

$ wc -w file

تعداد کلمات

$ wc -c file

تعداد کاراکترها


مثال:

$ wc -w .rhosts
14 .rhosts

یا

$ wc -cw test_results
606 3768 test_results

دستکاری فایل‌ها

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


کپی کردن

شکل کلی دستور کپی(cp) به صورت زیر است (که در این دستور src در des کپی میشود.):

cp src des

مثال:

$ cp test_results test_results.orig


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

  1. فایل src یک دایرکتوری باشد
  2. فایل src وجود نداشته باشد
  3. دایرکتوری والد فایل des ایجاد نشده باشد
  4. کاربر مجوز خواندن فایل src را نداشته باشد
  5. کاربر مجوز نوشتن در دایرکتوری والد فایل des (یا مجوز بازنویسی فایل موجود) را نداشته باشد

اخطار: در صورتی که فایل des قبلا وجود داشته باشد بدون هیچ پیغامی فایل src رو آن نوشته میشود که در بسیار موارد میتواند مشکل ساز شود. برای جلوگیری از بروز خطاهای ناخواسته‌ی ناشی از انجام این دستور، معمولا دستور cp را به صورت زیر به کار میرود:

cp -i src des 

در این صورت اگر فایل des قبلا وجود داشته باشد ابتدا از کاربر پرسیده میشود که آن را بازنویسی کند یا خیر. به مثال توجه کنید:

$ cp -i test_results test_results.orig
overwrite test_results.orig? (y/n)

نکته: در صورتی که des به جای یک فایل، یک دایرکتوری باشد، یک کپی از فایل با همان نام در دایرکتوری مقصد کپی میشود. به مثال توجه کنید:

$ cp test_results /home/baroon/work/


کپی کردن یک دایرکتوری
از آپشن r برای این مقصود استفاده می‌شود

cp -r ~/projects/ ~/projects-bak


کپی کردن چند فایل
در صورتی که دستور cp بیشتر از یک آرگومان به عنوان ورودی داشته باشد، آخرین آرگومان مقصد(des) و بقیه آرگومان‌ها به عنوان مبدا(src) در نظر گرفته میشوند.


مثال:

$ cp res.01 res.02 res.03 work/

که در آن سه فایل res.01 res.02 res.03 در مقصد کپی میشوند.


نکته ۱: در این شکل از دستور cp حتما باید آخرین آرگومان یک دایرکتوری باشد و در صورتی که مقصد در این حالت فایل باشد، دستور منجر به تولید خطا میشود.
نکته ۲: در این دستور بیش از یک دایرکتوری نمیتواند وجود داشته باشد.
مثال:

$ cp hw1 hw2 hw3
cp: hw3: No such file or directory
$ cp res.01 work/ docs/ pub/
cp: work: is a directory
cp: docs: is a directory

تغییر نام و جابجا کردن (mv)

mv src des

در صورتی که مبدا(src) و مقصد در یک دایرکتوری باشد تغییر نام و در غیر اینصورت عمل جابجایی(move)‌ انجام میگیرد.
مثال:

$ mv test_result test_result.orig
$ mv test_result ~/test_result.orig

بقیه موارد از جمله حالت‌هایی که دستور منجر به بروز خطا میشود، بازنویسی فایل مقصد در صورتی که از قبل موجود باشد و حالت تعاملی این دستور با استفاده از آپشن i مشابه دستور cp هستند.

حذف فایل (rm)

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

$ rm files

مثال:

$ rm res.01 res.02

که پس از اجرای این دستور فایل‌های res.01 res.02 حذف میشوند.


نکته: مواردی که منجر به بروز خطا میشوند مشابه دستور کپی(cp) است.


نکته: میتوان با استفاده از آپشن i، برای حذف هر فایل یک درخواست تایید نمایش داده شود.
مثال:

$ rm -i hw1 hw2 hw3
hw1: ? (n/y) y
hw2: ? (n/y) n
hw3: ? (n/y) y



بارون ‏۱۵ مارس ۲۰۱۲، ساعت ۱۵:۱۵ (UTC)
Eman ‏۱۵ فوریهٔ ۲۰۱۲، ساعت ۱۱:۵۱ (UTC)

ابزارهای شخصی
گویش‌ها
فضاهای نام
عملکردها
گشتن
کتاب‌ها
مقاله‌ها
جعبه‌ابزار