ما از مسیرهای مطلق و نسبی در کنسول استفاده می کنیم. مبانی لینوکس: مقدمه ای بر نمونه های bash با استفاده از مسیرهای نسبی

اخیراً دستوراتی را برای حرکت در فهرست ها در ترمینال شرح دادم لینوکس... بنابراین تصمیم گرفتم داستان فرمانهای کنسول را ادامه دهم. بنابراین به نظر می رسد حرکات مرتب شده اند. اکنون می خواهم کمی بیشتر در نظر بگیرم که مسیرهای دایرکتوری در کنسول چیست.

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


: ~ $ pwd
/ خانه / دانته


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

مسیرهای نسبی در کنسول ، شمارش دسته ها نسبت به دسته ای که در آن هستید. می توان با آنها استفاده کرد ".." دو نقطه در جلوی پوشه ای که می خواهیم به آن برویم نشان داده شده است. بیایید جایی در سیستم عامل خود برویم. به عنوان مثال در پوشه usrو محتویات آن را با دستور بررسی کنید ls.

[ایمیل محافظت شده]: c $ cd / usr
[ایمیل محافظت شده]: / usr $ ls

[ایمیل محافظت شده]: / usr $

در اینجا لیستی از دایرکتوری های موجود را می بینیم. حالا میریم سراغ دایرکتوری " اشتراک گذاری».

[ایمیل محافظت شده]: c $ cd / usr / share


بنابراین ، اکنون ما در دسته بندی هستیم / usr / shareهمان طور که ما می توانیم ببینیم. حالا بیایید وارد یک دسته شویم که با طبقه ای که در آن قرار داریم همتراز است. به عنوان مثال ، در دسته " محلی" این را می توان با یک مسیر مطلق مانند این انجام داد.

[ایمیل محافظت شده]: ~ $ cd / usr / local

[ایمیل محافظت شده]: / usr / share $ pwd
/ usr / share
[ایمیل محافظت شده]: / usr / share $


همانطور که می بینید ، من برای شما در کنسول ، مسیر کامل را به جایی که در آن هستید نشان دادم. ما می دانیم که فهرست " محلی"در سطح دایرکتوری قرار دارد" اشتراک گذاری"و ما می توانیم از چنین فرمان استفاده کنیم.

[ایمیل محافظت شده]: / usr / share $ cd ../local
[ایمیل محافظت شده]: / usr / $ $


همانطور که می بینید ، دستور پرس و جو بسیار ساده تر شده است. اما این تنها در صورتی است که دایرکتوری هایی را که با دایرکتوری کاری شما در یک سطح هستند ، به خاطر بسپارید ، و من همیشه دایرکتوری های دیگر را در کنسول به خاطر نمی آورم.

برای رفتن به فهرست بعدی ، کافی است دستور را در کنسول نسبت به پوشه کاری خود وارد کنید. برای این اهداف ، به جای آن استفاده کنید ".." دو نکته ، "." یک نقطه و نسبت به فهرست راهنمای کنسولی که در آن لحظه هستید حرکت می کنید. برگردیم به فهرست / usrو دوباره نگاه کن آنچه هست

[ایمیل محافظت شده]: / usr / $ cd / usr محلی
[ایمیل محافظت شده]: / usr $ ls
بازی های bin شامل lib local sbin share src
[ایمیل محافظت شده]: / usr $


حالا میریم سراغ دایرکتوری " اشتراک گذاری»نسبت به دایرکتوری ای که اکنون در آن قرار داریم. برای انجام این کار ، وارد کنسول شوید

[ایمیل محافظت شده]: / usr $ cd ./local
[ایمیل محافظت شده]: / usr / $ $


همانطور که مشاهده می کنید ، استفاده از مسیرهای نسبی می تواند دستورات وارد شده در کنسول را بسیار کوتاه کند. لینوکس.

همه فایلهای لینوکس دارای آدرس خاصی در سیستم فایل هستند که می توانیم با استفاده از فایل منیجر یا ابزارهای کنسول به آنها دسترسی پیدا کنیم. این یک موضوع نسبتاً ساده است ، اما بسیاری از مبتدیان با آن مشکل دارند.

در یادداشت کوتاه امروز ، ما نگاه می کنیم که مسیر یک فایل لینوکس چیست ، چه چیزی می تواند باشد ، چگونه آن را به درستی بنویسیم و موارد دیگر. اگر قبلاً با این مشکل داشتید ، پس از خواندن مقاله همه چیز کاملاً روشن می شود.

مسیرهای فایل در لینوکس

سیستم فایل لینوکس بسیار متفاوت از ویندوز است. ما ساختار آن را در نظر نمی گیریم ، قبلاً انجام شد. ما روی کار با فایل ها تمرکز می کنیم.

مهمترین تفاوت این است که آدرس فایل از درایو شروع نمی شود ، به عنوان مثال ، C: \ یا D: \ همانطور که در Windows اتفاق می افتد ، بلکه از ریشه ، دایرکتوری سیستم ریشه که همه بقیه به آن متصل هستند شروع می شود. آدرس او - /. و در اینجا لازم است در مورد آدرس ها گفته شود. مسیرهای فایل لینوکس از یک علامت جلو "/" برای جدا کردن دایرکتوری ها در یک آدرس استفاده می کنند و این با آنچه که در ویندوز عادت دارید - \ متفاوت است.

به عنوان مثال ، اگر در ویندوز مسیر کامل فایل روی دسکتاپ شبیه C: \ Users \ Sergiy \ Desktop \ بود ، پس مسیر فایل در لینوکس به سادگی / home / sergiy / desktop / خواهد بود. تا اینجا ، همه چیز با این کار ساده و واضح است. اما مشکلات همچنان ادامه دارد.

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

  • مسیر کامل و مطلق لینوکس از ریشه سیستم فایل- شما قبلاً این مسیر را در مثال بالا مشاهده کرده اید ، از ریشه "/" شروع می شود و کل مسیر فایل را شرح می دهد.
  • مسیر نسبی لینوکسمسیر مربوط به پرونده نسبت به پوشه فعلی است ؛ چنین مسیرهایی اغلب باعث سردرگمی می شوند.
  • مسیر مربوط به پوشه اصلی کاربر فعلی.- مسیر در سیستم فایل ، نه تنها از ریشه ، بلکه از پوشه کاربر فعلی.

اکنون بیایید نگاهی دقیق تر به نحوه ظاهر شدن این مسیرها در لینوکس بیندازیم و همچنین چند مثال را تجزیه و تحلیل کنیم تا کاملاً روشن شود. برای نمایش ، از ابزار ls استفاده می کنیم که برای مشاهده محتویات فهرست ها طراحی شده است.

به عنوان مثال ، ما یک پوشه مانند این در پوشه اصلی خود داریم که چهار فایل در آن وجود دارد:

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

ls / home / sergiy / tmp / file1

این یک مسیر نسبی لینوکس است که از پوشه اصلی شروع می شود ، با ~ /مشخص می شود. توجه کنید ، نه ~ ، بلکه ~ /. سپس می توانید زیر پوشه ها را در مورد ما tmp تعیین کنید:

خوب ، یا مسیر فایل در لینوکس ، نسبت به پوشه فعلی:

پیوند اول به پوشه فعلی (.) ، و دوم (..) به پوشه یک سطح بالاتر اشاره می کند. این امکانات گسترده تری را برای پیمایش در فهرست ها باز می کند. به عنوان مثال ، برای مراجعه به یک فایل در پوشه فعلی ، می توانید از ساختار زیر استفاده کنید:

هنگام مشاهده محتویات یک فایل بی فایده است. اما هنگام اجرای برنامه بسیار مهم است. از آنجا که برنامه ابتدا در محیط PATH جستجو می شود ، و فقط در این پوشه. بنابراین ، اگر شما نیاز به اجرای برنامه ای دارید که در پوشه فعلی قرار دارد و دقیقاً مانند برنامه موجود در پوشه / bin نامیده می شود ، هیچ چیزی بدون یک مرجع صریح که فایل باید در پوشه فعلی جستجو شود کار نمی کند.

هنگام تدوین برنامه ها اغلب می توان با چنین سازه هایی روبرو شد. می توانید از همه این نمادها و مسیرهای فایلهای لینوکس نه تنها در ترمینال ، بلکه در هر مدیر فایل نیز استفاده کنید ، که می تواند بسیار راحت باشد.

اما ترمینال لینوکس حتی قوی تر است. می توانید از کاراکترهای جایگزین ساده به طور مستقیم در آدرس فایل یا دایرکتوری استفاده کنید. به عنوان مثال ، می توانید تمام فایلهایی را که با f شروع می شوند فهرست کنید:

یا حتی می توانید نه تنها در پوشه tmp ، بلکه در هر پوشه ای از پوشه اصلی خود جستجو کنید:

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

نتیجه گیری

فقط همین. اکنون شما همه چیز را می دانید تا نه تنها مسیر فایل لینوکس را به درستی بنویسید ، بلکه اقدامات پیچیده تری را انجام دهید ، به عنوان مثال ، جستجوی پرونده ها یا حرکت در فهرستها با استفاده از دستور cd. اگر هنوز سوالی دارید ، در نظرات بپرسید!

مطالب مرتبط:


پس از خواندن این مقاله ، می فهمید که چیست خراب کردن(مترجم فرمان لینوکس استاندارد) ، نحوه مدیریت دستورات استاندارد را بیاموزید: ls, cp, mv... هدف inodes ، پیوندهای سخت و نمادین و موارد دیگر را درک کنید.

این آموزش برای کسانی که تازه وارد لینوکس شده اند و کسانی که می خواهند درک خود را از اصول اولیه لینوکس مانند کپی و انتقال فایل ، ایجاد پیوند ، با استفاده از دستورات استاندارد لینوکس به همراه تغییر مسیرها و لوله ها ، تکرار یا بهبود بخشند ، در نظر گرفته شده است. در این مقاله ، مثالهای زیادی برای روشن شدن مطالب ارائه شده خواهید یافت. برای مبتدیان ، اکثر اطلاعات جدید خواهند بود و برای کاربران پیشرفته تر ، این مطالب می تواند راهنمای عالی برای خلاصه سازی دانش و مهارت های موجود باشد.

مقدمه ای بر bash

پوسته

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

\$

اگر پوسته گرافیکی پس از ورود بارگیری شد ، برای دسترسی به مترجم فرمان ، باید شبیه ساز پایانه (gnome-terminal، xfce4-terminal، konsole، xterm، rxvt ...) را راه اندازی کنید یا به یکی از پایانه های مجازی بروید با کلیک کردن CtrlAltF1یا CtrlAltF2و غیره.

درخواست پوسته در رایانه شما ممکن است با آنچه در مثال نشان داده شده متفاوت باشد. این می تواند شامل نام کاربری ، نام رایانه و نام دایرکتوری فعلی باشد. با وجود همه این تفاوت ها ، برنامه ای که این اعلان را چاپ می کند " پوسته"(Shell) ، و به احتمال زیاد پوسته فرمان شما برنامه ای به نام است خراب کردن.

در حال اجرا هستید؟

با دستور زیر می توانید بررسی کنید که آیا bash اجرا می شود یا خیر:

\$ پژواک \ $ SHELL/ bin / bash

اگر در نتیجه اجرای این دستور خطایی دریافت کردید یا خروجی آن با نمونه مثال متفاوت بود ، ممکن است سیستم شما از bash به عنوان پوسته فرمان استفاده نکند. با وجود این ، اکثر مطالب مرتبط خواهند بود ، اما ما همچنان توصیه می کنیم که به bash تغییر دهید. این را می توان انجام داد (اگر bash روی سیستم نصب شده است) با دستور:

\$ خراب کردن

bash چیست

بش (مخفف " بما آکسب کردن SH ell ") مترجم فرمان استاندارد در اکثر سیستم های لینوکس است. وظایف وی شامل پردازش و اجرای دستوراتی است که کاربر با آنها کامپیوتر را کنترل می کند. پس از اتمام کار خود ، می توانید فرآیند پوسته را پایان دهید. پس از فشار دادن کلیدها Ctrlد، تیم ها خروجیا خروجفرآیند shell به پایان می رسد و صفحه دوباره نام کاربری و رمز عبور خود را از شما درخواست می کند.

استفاده از "cd"

بیایید استفاده از bash را برای حرکت در سیستم فایل آغاز کنیم. ابتدا دستور زیر را تایپ کنید:

$ سی دی /

با این دستور ، ما به bash گفتیم که می خواهیم به فهرست اصلی برویم - / ... همه فهرستهای سیستم در یک ساختار درختی و / این آغاز (یا ریشه) آن است. تیم سی دیبرای تغییر دایرکتوری فعلی کار می کند.

راه ها

برای اینکه بدانید در حال حاضر در کجای سیستم فایل (دایرکتوری کاری فعلی) قرار دارید ، عبارت زیر را تایپ کنید:

\$ pwd /

در مثال بالا / - استدلال فرمان سی دی- تماس گرفت مسیر... این جایی است که ما می خواهیم در سیستم فایل حرکت کنیم. در این مورد / - یک مسیر مطلق ، به این معنی که مسیر نسبت به فهرست اصلی مشخص شده است.

مسیرهای مطلق

در اینجا چند نمونه از مسیرهای مطلق آورده شده است

/ dev / usr / usr / bin / usr / local / bin

همانطور که ممکن است متوجه شده باشید ، همه این مسیرها با این واقعیت که از ابتدا شروع می شوند متحد می شوند / ... با مشخص کردن مسیر / usr / local / bin به عنوان آرگومان فرمان سی دیبه او می گوییم به فهرست اصلی بروید / ، سپس به فهرست usr ، سپس به local و bin. مسیرهای مطلق همیشه با شروع می شوند /

مسیرهای نسبی

نوع دوم مسیرها ، مسیرهای نسبی نامیده می شوند. بش، تیم سی دیو دستورات دیگر این مسیرها را نسبت به فهرست فعلی شمارش می کنند. مسیرهای نسبی هرگز با آنها شروع نمی شوند / ... به عنوان مثال ، اگر ما در / usr هستیم

\$ cd / usr

سپس می توانیم با استفاده از مسیر نسبی به مسیر / usr / local / bin برویم

\$ cd local / bin \$ pwd/ usr / local / bin

استفاده ".."

مسیرهای نسبی می توانند شامل یک یا چند دایرکتوری باشند «..» ... ".." به دایرکتوری اصلی دایرکتوری کاری ما اشاره دارد. مثال:

\$ pwd/ usr / local / bin \ $ سی دی .. \$ pwd/ usr / local

همانطور که مشاهده می کنید ، دستور سی دی .."ما را یک سطح بالاتر می برد."

میتوان افزود .. به مسیری نسبی این به ما اجازه می دهد تا به یک دایرکتوری برویم که در همان سطحی است که در آن قرار داریم. مثال:

\$ pwd/ usr / local \ $ سی دی ../ اشتراک گذاری \$ pwd/ usr / share

مثالهایی با استفاده از مسیرهای نسبی

مسیرهای نسبی می تواند بسیار مشکل باشد. در اینجا چند نمونه آورده شده است. نتیجه اجرای دستور نشان داده نمی شود ، سعی کنید تعیین کنید که در کدام فهرست با استفاده از bash پیدا خواهید شد.

\$ cd / bin \$ cd ../usr/share/zoneinfo \$ cd / usr / X11R6 / bin \$ cd ../lib/X11 \$ cd / usr / bin \$ سی دی ../bin/../bin

دایرکتوری کار "."

قبل از پایان گفتگو در مورد تیم سی دیچند مورد دیگر برای ذکر وجود دارد اول ، یک دایرکتوری خاص دیگر وجود دارد «.» که به دایرکتوری فعلی اشاره می کند. این دایرکتوری برای اجرای فایل های اجرایی واقع در فهرست فعلی استفاده می شود.

\$ ./myprog

در مثال آخر ، myprog یک فایل اجرایی است که در فهرست فعلی قرار دارد و برای اجرا راه اندازی می شود.

cd و فهرست اصلی کاربر

برای رفتن به فهرست اصلی ، باید تایپ کنید

\$ سی دی

بدون استدلال ، cd شما را به فهرست اصلی شما می برد. دایرکتوری خانگی معمولاً / برای superuser و / home / username / برای کاربران عادی است. اما اگر بخواهیم به یک فایل خاص که در فهرست اصلی قرار دارد اشاره کنیم. به عنوان مثال ، به عنوان یک استدلال برای برنامه "برنامه من"؟ می توانید بنویسید:

\$ ./myprog /home/user/myfile.txt

با این حال ، استفاده از مسیرهای فایل مطلق همیشه راحت نیست. همین عملیات را می توان با استفاده از آن انجام داد ~ –تایلد:

\$ ./myprog ~ / myfile.txt

~ نام خاصی است که در bash به فهرست اصلی کاربر اشاره می کند.

فهرست اصلی سایر کاربران

اما اگر ما نیاز به اشاره به یک فایل در فهرست اصلی کاربر دیگر داشته باشیم؟ برای انجام این کار ، پس از tilde ، باید نام این کاربر را مشخص کنید. به عنوان مثال ، برای اشاره به فایل fredsfile.txt واقع در فهرست اصلی کاربر fred:

\$ ./myprog ~ fred / fredsfile.txt

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

مقدمه ای بر ls

احتمالاً شما قبلاً با دستور آشنا هستید lsکه بدون استدلال فراخوانی می شود ، لیستی از فایل های ذخیره شده در فهرست کار را نمایش می دهد:

\$ cd / usr \$ ls X11R6 doc i686-pc-linux-gnu lib man sbin ssl bin gentoo-x86 شامل libexec portage share tmp distfiles i686-linux info local portage.old src

اگر گزینه را مشخص کنید ، می توانید همه پرونده ها ، از جمله پرونده های مخفی (که نام آنها با یک نقطه شروع می شود) را مشاهده کنید.

\$ ls -a... bin gentoo-x86 شامل libexec portage share tmp .. distfiles i686-linux info local portage.old src X11R6 doc i686-pc-linux-gnu lib man sbin ssl

لیست دقیق فهرستها

بعد از خود فرمان lsیک یا چند فایل یا دایرکتوری را می توان به عنوان آرگومان مشخص کرد. اگر نام یک فایل را تعیین کرده اید ، دستور را وارد کنید lsفقط اطلاعات مربوط به این فایل را نمایش می دهد. و اگر نام دایرکتوری را مشخص کنید ، lsهمه محتویات آن را نشان می دهد گزینه '-L'دستورات lsاگر می خواهید علاوه بر نام فایلها (مجوزهای فایل ، نام مالک ، زمان آخرین اصلاح فایل و اندازه آن) اطلاعات بیشتری در مورد آنها بدانید ، بسیار مفید خواهد بود.

مثال زیر استفاده از گزینه را نشان می دهد '-L'برای نمایش اطلاعات مربوط به فایل های ذخیره شده در فهرست / usr

\$ ls -l / usr drwxr-xr-x 7 ریشه ریشه 168 نوامبر 24 14:02 X11R6 drwxr-xr-x 2 ریشه ریشه 14576 دسامبر 08 08:56 bin drwxr-xr-x 2 ریشه ریشه 8856 دسامبر 26 12:47 distfiles lrwxrwxrwx 1 ریشه ریشه 9 22 دسامبر 20:57 doc-> share / doc drwxr-xr-x 62 ریشه ریشه 1856 دسامبر 27 15:54 gentoo-x86 drwxr-xr-x 4 ریشه ریشه 152 دسامبر 12 23:10 i686-linux drwxr-xr-x 4 ریشه ریشه 96 نوامبر 24 13:17 i686-pc-linux-gnu drwxr-xr-x 54 ریشه ریشه 5992 24 دسامبر 22:30 شامل lrwxrwxrwx 1 ریشه ریشه 10 دسامبر 22 20:57 اطلاعات-> اشتراک گذاری / اطلاعات drwxr-xr -x 28 root root 13552 Dec 26 00:31 lib drwxr-xr-x 3 ریشه ریشه 72 نوامبر 25 00:34 libexec drwxr-xr-x 8 ریشه ریشه 240 Dec 22 20:57 lrwxrwxrwx 1 ریشه محلی 9 دسامبر 22 20 : 57 man-> share / man lrwxrwxrwx 1 root root 11 دسامبر 8 07:59 portage-> gentoo-x86 / drwxr-xr-x 60 ریشه ریشه 1864 دسامبر 8 07:55 portage.old drwxr-xr-x 3 root 3096 22 دسامبر 20:57 sbin drwxr-xr-x 46 root root root 1144 Dec 24 15:32 share drwxr-xr-x 8 root root 328 Dec 26 00:07 src drwxr-xr-x 6 ریشه ریشه 176 نوامبر 24 14: 25 ssl lrwxrwxrwx 1 ریشه ریشه 10 دسامبر 22 20:57 tmp -> ../var/tmp

ستون اول اطلاعات مربوط به مجوزهای مربوط به هر فایل در لیست را نشان می دهد. (کمی بعد توضیح می دهم که کدام حرف مخفف چه چیزی است) ستون بعدی تعداد پیوندها را برای هر عنصر لیست نشان می دهد. ستون های سوم و چهارم به ترتیب مالک و گروه فایل هستند. ستون پنجم اندازه است. ششم زمان آخرین تغییر پرونده ("آخرین زمان اصلاح شده" یا mtime) است. آخرین ستون نام فایل یا فهرست (اگر پیوندی است ، پس از ‘ –> 'مخفف نام شیئی است که به آن اشاره می کند).

چگونه فقط دایرکتوری ها را ببینیم

گاهی اوقات نیاز است که فقط اطلاعات مربوط به دایرکتوری ها مورد بررسی قرار گیرد و نه همه محتویات آنها. این گزینه به مقابله با این کار کمک می کند. '-D'که به فرمان می گوید فقط اطلاعات مربوط به دایرکتوری ها را نمایش دهید. مثال:

\$ ls -dl / usr / usr / bin / usr / X11R6 / bin ../ اشتراک گذاری drwxr-xr-x 4 ریشه ریشه 96 دسامبر 18 18:17 ../ اشتراک drwxr-xr-x 17 ریشه ریشه 576 دسامبر 24 09:03 / usr drwxr-xr-x 2 ریشه ریشه 3192 دسامبر 26 12:52 / usr / X11R6 / bin drwxr-xr-x 2 root root 14576 27 دسامبر 08:56 / usr / bin

لیست بازگشتی و اطلاعات inode

اقدام گزینه '-R'در مقابل عمل '-D'... این به شما امکان می دهد اطلاعات مربوط به پرونده های موجود در یک فهرست را به صورت بازگشتی نمایش دهید. ابتدا محتویات فهرست راهنمای سطح بالا نشان داده می شود ، سپس محتویات تمام زیرشاخه ها به نوبه خود نشان داده می شوند و غیره. خروجی این دستور می تواند بسیار طولانی باشد ، بنابراین ما نمونه ای از آن را ارائه نمی دهیم ، اما می توانید خودتان آن را با تایپ کردن 'امتحان کنید. ls -R' یا ' ls -Rl‘.

و در نهایت ، گزینه '-من'برای نمایش inodes هر شیء سیستم فایل استفاده می شود.

\$ ls -i / usr 1409 X11R6 314258 i686-linux 43090 libexec 13394 sbin 1417 bin 1513 i686-pc-linux-gnu 5120 local 13408 share 8316 distfiles 1517 include 776 man 23779 src 43 doc 1386 info 93892 portage 36737 ssl 70744 gentoo 5132 15age

inodes چیست؟

هر شیء سیستم فایل (فایل ، فهرست ...) دارای شماره منحصر به فرد خود است ، به نام inode(شماره inode). این اطلاعات ممکن است بی اهمیت به نظر برسند ، اما درک عملکرد inodes به شما در درک بسیاری از عملیات روی سیستم فایل کمک می کند. به عنوان مثال ، بیایید نگاه کنیم «.» و «..» به عنوان پیوندهای موجود در هر دایرکتوری برای درک اینکه دایرکتوری چیست «..» ، inode دایرکتوری / use / local را پیدا کنید

\$ ls -id / usr / local 5120 / usr / local

همانطور که می بینید ، inode دایرکتوری / usr / local 5120 است. حال بیایید ببینیم پوشه / usr / local / bin / .. دارای چه چیزی است:

\$ ls -id / usr / local / bin / .. 5120 / usr / local / bin / ..

معلوم می شود که اینودهای دایرکتوری / usr / local و / usr / local / bin / .. یکسان هستند! این بدان معناست که inode 5120 با دو نام ارجاع شده است: / usr / local و / usr / local / bin / .. یعنی ، آنها دو نام متفاوت از یک فهرست هستند. هر inode به مکان خاصی از دیسک اشاره می کند.

هر inode می تواند چندین نام شیء سیستم فایل مرتبط با آن داشته باشد. تعداد "مترادف" یک فایل (اشیاء سیستم فایل که به همان اینود اشاره می کند) تعداد ستون دوم " ls -l‘.

\$ ls -dl / usr / local drwxr-xr-x 8 ریشه ریشه 240 دسامبر 22 20:57 / usr / local

در این مثال ، می توانید (ستون دوم) ببینید که فهرست / usr / local توسط 8 شیء مختلف سیستم فایل ارجاع داده شده است. در اینجا نام آنها آمده است:

/ usr / local / usr / local /. / usr / local / bin / .. / usr / local / games / .. / usr / local / lib / .. / usr / local / sbin / .. / usr / local / share / .. / usr / local / src / ..

mkdir

اجازه دهید نگاهی به فرمان بیاندازیم mkdir... این به ایجاد دایرکتوری های جدید کمک می کند. مثال زیر ایجاد سه فهرست جدید (tic ، tac ، toe) را در فهرست / tmp نشان می دهد

\$ cd / tmp $ mkdir tic tac toe

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

\$ mkdir won / der / ful mkdir: نمی توان دایرکتوری "won / der / ful" ایجاد کرد: چنین فایل یا فهرست \ $ وجود ندارد mkdir برنده شد \$ mkdir won / der \$ mkdir won / der / ful

با افزودن گزینه می توانید این عملیات را ساده کنید '-پ'به دستور mkdir این گزینه به شما امکان می دهد یک ساختار دایرکتوری تو در تو ایجاد کنید:

\$ mkdir -p easy / as / pie

برای کسب اطلاعات بیشتر در مورد قابلیت های این ابزار ، راهنما را بخوانید که توسط فرمان فراخوانی شده است مرد مکدیر... تقریباً برای همه دستورات این دفترچه راهنما در دسترس است (برای مثال مرد ls)، جز سی دیاز آنجا که در bash ساخته شده است (برای چنین دستوراتی ، کمک به این صورت فراخوانی می شود: سی دی کمک)

لمس كردن

بیایید به یادگیری دستورات بپردازیم cpو mv، برای کپی ، تغییر نام و انتقال فایلها و فهرستها استفاده می شود. اما قبل از آن ، با استفاده از دستور ، یک فایل خالی در فهرست / tmp ایجاد کنید لمس كردن:

\$ cd / tmp \$ لمس کپی

تیم لمس كردنزمان آخرین دسترسی به فایل (ستون ششم خروجی فرمان) را به روز می کند ls -l) اگر قبلاً وجود داشته باشد یا یک فایل خالی جدید ایجاد کند ، اگر قبلاً وجود نداشته باشد. پس از این عملیات ، باید یک فایل خالی داشته باشیم / tmp / copyme.

پژواک

اکنون که یک فایل خالی داریم ، با استفاده از دستور یک خط متنی در آن بنویسید پژواککه استدلال منتقل شده به آن را در خروجی استاندارد چاپ می کند (در مورد ما یک ترمینال متنی).

\$ پژواک "اولین فایل"اولین فایل

برای نوشتن یک خط در فایل ما ، خروجی دستور را به آن هدایت کنید پژواک:

\$ echo "firstfile"> copyme

امضا کردن > (بیشتر) به پوسته می گوید خروجی فرمان سمت چپ را به فایل سمت راست هدایت کند. اگر فایلی با این نام وجود نداشته باشد ، به طور خودکار ایجاد می شود. و اگر چنین فایلی از قبل وجود داشته باشد ، پس از آن رونویسی می شود (همه محتویات آن قبل از نوشتن خط ما پاک می شود). تیم 'Ls -l'نشان می دهد که اندازه فایل ما اکنون 10 بایت است - نه بایت توسط کلمه "firstfile" اشغال شده است و یک بایت یک کاراکتر تغذیه خط است.

\$ ls -l کپی کنید-rw-r-r-- 1 ریشه ریشه 10 دسامبر 28 14:13 copyme

گربه و cp

برای خروجی محتویات یک فایل به ترمینال ، از دستور استفاده کنید گربه:

\$ گربه کپیاولین فایل

اکنون می توانیم عملکرد اصلی دستور را تجزیه و تحلیل کنیم cp... این دستور دو آرگومان می گیرد. اول نام یک فایل موجود ("copyme") ، دوم نام نسخه جدیدی است که می خواهیم ایجاد کنیم ("copiedme").

\$ cp copyme copiedme

ما می توانیم مطمئن شویم که نسخه جدید فایل دارای شماره inode متفاوتی است (این بدان معناست که ما یک فایل جداگانه واقعاً جدید دریافت کرده ایم ، و نه فقط پیوندی به فایل قدیمی)

\$ ls -i copyme copiedme 648284 copiedme 650704 copyme

mv

حالا بیایید دستور را اعمال کنیم mvبرای تغییر نام فایل ("copiedme" -> "moveme"). شماره inode پس از این عملیات تغییر نمی کند ، فقط نام فایل تغییر می کند.

\$ mv copiedme moveme \$ ls -i moveme 648284 moveme

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

تیم mvبه شما امکان می دهد نه تنها نام فایل ها را تغییر دهید ، بلکه آنها را نیز منتقل کنید. به عنوان مثال ، برای انتقال یک فایل /var/tmp/myfile.txtبه فهرست / خانه / کاربرشما باید دستور دهید:

\$ mv /var/tmp/myfile.txt /home /user

فایل به فهرست اصلی کاربر منتقل می شود کاربرحتی اگر در سیستم فایل دیگری قرار داشته باشد (در این مورد ، فایل در مکان جدیدی کپی می شود و پس از آن فایل اصلی حذف می شود). همانطور که احتمالاً حدس زده اید ، انتقال یک فایل به سیستم فایل دیگر ، inode آن را تغییر می دهد. این به این دلیل است که هر سیستم فایل مجموعه ای از inod های جداگانه خود را دارد.

لازم به ذکر است که این احتمال وجود دارد که شماره inode تازه اختصاص داده شده با شماره قبلی منطبق باشد ، اما بسیار کم است.

برای انتقال چندین فایل به طور همزمان در یک فهرست ، باید بنویسید:

\$ mv /var/tmp/myfile1.txt /var/tmp/myfile2.txt /home /user \$ mv -t /home /user /var/tmp/myfile1.txt /var/tmp/myfile2.txt

اگر گزینه را اضافه کنید '-V'، گزارشی از عملیات انجام شده روی صفحه نمایش داده می شود:

\$ mv -vt /home /user /var/tmp/myfile1.txt /var/tmp/myfile2.txt"/var/tmp/myfile1.txt" -> "/home/user/myfile1.txt" "/var/tmp/myfile2.txt" -> "/home/user/myfile2.txt"