فصل سوم - فایلها
در سیستمهای یونیکسی همه چیز به صورت فایل است. در این فصل و فصل بعد به برخی ار ویژگیهای انواع فایل در سیستمهای یونیکسی میپردازیم.
فایلها
محتویات[نهفتن] |
مشاهدهٔ لیست و مشخصات فایلها
برای مشاهده لیست فایلهای یک دایرکتوری از دستور 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 ایجاد میشود.
دو خطای رایج در اجرای این دستور موارد زیر هستند:
- فایل مقصد (destination) از قبل موجود باشد
- فایل مقصد یک دایرکتوری باشد
- دایرکتوری والد فایل مقصد، موجود نباشد
- کاربر مجوز نوشتن در مسیر فایل مقصد را نداشته باشد
نکته: مسیر مبدأ در هنگام لینک دادن بررسی و اعتبارسنجی نمیشود، اگر مسیر مبدأ به هیچ نوع فایلی (از جمله دایرکتوری، لینک و غیره) اشاره نکند، خطایی نشان داده نمیشود، ولی لینک بوجود آمده در مسیر مقصد، یک لینک خراب (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 استفاده میشود.
نمادهای سه مجوز پایهای که کمی قبلتر ذکر شدند به صورت زیر میباشند:
- r خواندن فایل
- w نوشتن
- 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:
- u : مالک
- g : گروه
- o : دیگر
- a : تمام کاربران
actions:
- + : برای اضافه کردن یک یا چند مجوز
- - : برای حذف مجوز یک یا چند مجوز
- = : مشخص کردن صریح مجوزها
permissions:
- r : خواندن
- w : نوشتن
- s : sgid , suid
t : sticky bit
- x : اجرا
چندمثال:
$ 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
در صورتی که عمل کپی موفقیت آمیز باشد هیچ خروجی تولید نمیکند. در دو حالت دستور کپی موفقیت آمیز نیست و منجر به بروز خطا میشود:
- فایل src یک دایرکتوری باشد
- فایل src وجود نداشته باشد
- دایرکتوری والد فایل des ایجاد نشده باشد
- کاربر مجوز خواندن فایل src را نداشته باشد
- کاربر مجوز نوشتن در دایرکتوری والد فایل 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)