نام پرونده (رایانه): تفاوت میان نسخه‌ها

بدون خلاصۀ ویرایش
(خنثی‌سازی ویرایش 27709553 از 5.236.161.246 (بحث))
برچسب: خنثی‌سازی
بدون خلاصۀ ویرایش
 
یک نام پرونده، به‌طور معمول از اجزای زیر تشکیل می‌گردد:
* '''میزبان''' (یا '''گره''' یا '''کارگزار (سرور)''') - دستگاه شبکه‌ای که پرونده‌ها را در بر می‌گیرد.
* '''دستگاه''' (یا '''درایو''') - دستگاه یا درایو سخت افزاریسخت‌افزاری
* شاخه (Directory) یا مسیر (Patch) - (مانند: \TEMP, [USR.LIB.SRC], etc.)
* نام پرونده
* [[پسوند نام فایل]] (مانند: txt, exe,،exe، com‫com)
* نسخه (Version)-، شمارهٔ تولید یا چاپ اصلاح شدهاصلاح‌شده
ترکیب و قالب یک فایل معتبر مانند مؤلفه‌های لازم برای شناسایی فایل، در سیستم عامل‌های مختلف متفاوتند.
 
مباحث پیرامون نام پرونده به دلیل فقدان استانداردسازی این واژه پیچیده هستند. نام پرونده گاهی برای نام کامل مانند نام ویندوز مثل c:\directory\myfile.txt به کار می‌رود. گاهی برای اشاره به اجزا استفاده می‌شود؛ در این مثال myfile.txt. بعضاً ارجاعیستارجاعی است که یک افزونه را مشخص می‌کند، بنابراین در این حالت نام پروندهmyfileپرونده myfile خواهد بود. چنین ابهاماتی متداول است و این مقاله تلاش نمی‌کند هیچ یک از معانی را تعریف کند، و فعلاً ممکن است هریک از آن‌ها را استفاده کنیم. بعضی سامانه‌ها ممکن است نام‌گذاری استاندارد خود را پذیرفته باشند مانند «نام مسیر» (path name)، ولی همین اسامی نیز در سراسر سیستم استاندارد نیستند.
 
== تاریخچه ==
در گذشته، تنها نویسه‌ها (کاراکترها) ی [[حرفی عددی]] در نام پرونده مجاز بودند اما با گذشت زمان تعداد کاراکترهای مجاز افزایش یافت؛ که این باعث ایجاد مشکلات همسازی در زمان انتقال پرونده‌ها از یک فایل سیستم به دیگری شد.<ref name="solaris presentations IUC29-FileSystems">{{cite web|author=David Robinso|author2=Ienup Sung|author3=Nicolas Williams |date=March 2006 |url=http://developers.sun.com/global/products_platforms/solaris/reference/presentations/IUC29-FileSystems.pdf |title=Solaris presentations: File Systems, Unicode, and Normalization |location=San Francisco |publisher=Sun.com |deadurl=no |archiveurl=https://web.archive.org/web/20120704003732/http://developers.sun.com/global/products_platforms/solaris/reference/presentations/IUC29-FileSystems.pdf |archivedate=July 4, 2012}}</ref>
 
در حدود سال ۱۹۹۵، یکی از افزونه‌های فایل سیستم FAT به نام [[جدول تخصیص فایل]] دروینوز۹۵ و ویندوزNT3ویندوز NT3.5 معرفی شد. در این افزونه علاوه بر نام‌های کلاسیک "۸٫۳" نام پرونده‌های طولانی [[یونی کد|یونی‌کد]] نیز مجاز بود.
 
در سال ۱۹۸۵، RFC959 تعریف رسمی زیر را برای نام مسیر(path name) ارائه کرد:رشته‌ای از کاراکترهاکهکاراکترها که باید توسط کاربر برای شناسایی فایل وارد فایل سیستم شود.<ref>{{IETF RFC|959}}
[http://www.ietf.org/rfc/rfc959.txt IETF.org] {{IETF RFC|959}}, File Transfer Protocol (FTP)</ref>
 
=== مهاجرت به یونی کد ===
یک مسئله تغییر شیوهٔ نام‌گذاری به یونی کد بود. به این منطورمنظور شرکت‌ها ی نرم افزاری بسیاری، نرم افزارهایی برای مهاجرت نام پرونده‌ها به رمزگذاری یونی کد جدید فراهم کردند.
* Microsoft برای تمامی کاربران تکنولوژی vfat، نرم افزار migration transparent را ارئهارائه داد
* Apple نرم افزارFile Name Encoding Repair Utility v1.0 را ارائه کرد<ref>{{cite web|url=http://support.apple.com/downloads/File_Name_Encoding_Repair_Utility |title=File Name Encoding Repair Utility v1.0 |publisher=Support.apple.com |date=June 1, 2006 |accessdate=September 17, 2013}}</ref>
* Linux community نرم افزار convmv را ارائه داد<ref>{{cite web|url=http://www.j3e.de/linux/convmv/man/ |title=convmv - converts filenames from one encoding to another |publisher=J3e.de |date= |accessdate=September 17, 2013}}</ref>
بعضی فایل سیستم‌ها طول نام پرونده را محدود می‌کنند. در بعضی موارد این طول‌ها در نام کامل پرونده اعمال می‌شوند مانند ۴۴ کاراکتر در IBM S/370.<ref name="44_char">{{cite web|title=ddname support with FTP, z/OS V1R11.0 Communications Server IP User's Guide and Commands z/OS V1R10.0-V1R11.0 SC31-8780-09 |publisher=IBM.com |url=http://publib.boulder.ibm.com/infocenter/zos/v1r11/index.jsp?topic=/com.ibm.zos.r11.halu001/dd_name_support.htm}}</ref> در سایر موارد، ممکن است محدودیت‌های طول در بخش‌های خاصی از نام پرونده، از قبیل نام فایل در فهرست یا نام فهرست اعمال شوند. برای مثال: ۹ کاراکتر یا بایت (مانند [[جدول تخصیص فایل]] ۸ بیتی در Standalone Disk BASIC)، ۱۱ کاراکتر یا بایت (مانند [[جدول تخصیص فایل]]۱۲، [[جدول تخصیص فایل]]۱۶، [[جدول تخصیص فایل]]۳۲ در DOS)، ۱۴ کاراکتر یا بایت (مانند Unix اولیه)، ۲۱ کاراکتر یا بایت(Human68K)، ۳۱، ۳۰ کاراکتر یا بایت (مانند Apple DOS ورژن ۳٫۳ و۳٫۲)، ۱۵ کاراکتر یا بایت (مانند Apple ProDOS)، ۴۴کاراکتر یا بایت (مانند IBM S/370)، یا۲۵۵ کاراکتر یا بایت (مانند Berkeley Unix اولیه). محدودیت‌های طول عموماً نتیجهٔ تخصیص فضای معینی در فایل سیستم برای ذخیرهٔ مؤلفه‌های نام است، به همین دلیل محدودیت‌های بیشتر همانند اختصاص دادن فضای بیشتر نیازمند یک تغییر ناسازگارند.
 
یک مسئلهٔ مهم در رابطه با فایل سیستم‌هایی که اطلاعات را در فهرست‌های تودرتو ذخیره می‌کنند این است که شاید امکان ایجاد پرونده‌ای که اسم کامل آن از محدودیت‌های پیاده‌سازی تجاوز کند وجود داشته باشد، زیرا ممکن است بررسی طول به جای نام کامل برای بخش‌های مجزای نام به تنهایی انجام شود. حداکثر محدودهٔ (MAX_PATH) بسیاری از نرم افزارهای کاربردی ویندوز ۲۶۰ است، درحالیدر حالی که نام پرونده‌های ویندوز به راحتی می‌توانند از این محدوده تجاوز کنند.
 
== افزونه ها(extensions) نام پرونده ==
بسیاری از فایل سیستم‌ها، مانند سیستم‌های [[جدول تخصیص فایل]]، [[ان تی اف اس]] و [[OpenVMS|vms]] به یک [[پسوند نام پرونده|افزونهٔ نام پرونده]] اجازه می‌دهند نام پرونده را به دو بخش تقسیم کند: یک ''نام اصلی'' یا ''ریشه'' و یک ''افزونه'' یا ''پسوند'' که بعضی از نرم افزارهای کاربردی برای تشخیص [[قالب پرونده]] از آن استفاده می‌کنند. افزونهٔ نام فایل از یک یا چند کاراکتر تشکیل می‌شود که پیروی آخرین بخش نام پرونده می‌آیند. پرونده‌های دارای خروجی چندگانه توسط نرم افزارهای کاربردی که از نام اصلی یکسان و افزونه‌های متفاوت استفاده می‌کنند ایجاد می‌شوند. برای مثال، ممکن است یک کامپایلرازکامپایلر از افزونه‌های <code>FOR</code> برای پروندهٔ ورودی منبع (برای کد Fortran), <code>OBJ</code> برای خروجی شیء و <code>LST</code> برای فهرست‌نویسی استفاده کند. با اینکه تعدادی افزونهٔ متداول وجود دارد اما این افزونه‌ها قراردادی هستند و ممکن است یک نرم افزار کاربردی دیگر از <code>REL</code> و <code>RPT</code> استفاده کند. معمولاً پرونده‌ها درفایل سیستم‌هایی که افزونه‌ها را جدا نمی‌کنند، افزونهٔ طولانی تری دارند مانند <code>html</code>.
 
== قابلیت‌های همکاری رمزگذاری ==
برای نام پرونده‌ها یک رمزگذاری استاندارد عمومی وجود ندارد.
 
چراکهچرا که نام پرونده‌ها باید میان نرم افزارها مبادله شوتدشوند (انتقال فایل شبکه، ذخیرهٔ فایل سیستم، نرم افزار پشتیبانی و هماهنگ سازی پرونده، مدیریت پیکربندی، فشرده سازی و بایگانی داده و…)، این بسیار مهم است که اطلاعات نام پرونده میان دو نرم افزار کاربردی از دست نرود. این مسئله موجب پذیرش گستردهٔ یونی کدیونی‌کد به عنوان استانداردی برای رمزگذاری پرونده‌ها شد، گرچه برخی نرم افزارهای قدیمی ممکن است یونی کدیونی‌کد را متوجه نشوند.
 
=== قابلیت همکاری نشانهٔ رمزگذاری ===
در گذشته، نام پرونده‌ها درهردر هر کاراکتری را تاجاییتا جایی که برای فایل سیستم ایمن بود در نام پرونده‌های خود مجاز می‌دانستند. با اینکه این روش استفاده از هرگونه رمزگذاری را مجاز می‌داند، و به همین دلیل امکان نمایش هر متن محلی را در هر سامانهٔ محلی فراهم می‌کند، منجر به بسیاری از قابلیت‌های همکاری می‌شود.
 
یک نام پرونده داخل یک کشور ممکن است با استفاده از رشته‌های بایتی متفاوتی در سامانه‌های متمایز ذخیره شده باشد، مثلاً یکی با استفاده از رمزگذاری Japanese Shift یا JIS و دیگری از رمزگذاری Japanese EUC. تبدیل ممکن نبوده زیرا بیشتر سامانه‌ها شرحی از رمزگذاری که برای یک نام پرونده استفاده شده را به عنوان قسمتی از اطلاعات فایل توسعه یافته نمایش نمی‌دادند.
 
یک راه حل پذیرش یونی کدیونی‌کد برای رمزگذاری نام پرونده‌ها بود.
 
اما در Mac OS کلاسیک رمزگذاری نام پرونده‌ها همراه خصوصیات نام پرونده ذخیره می‌شد.
استاندارد یونی کد مسئلهٔ تشخیص رمزگذاری را برطرف کرد.
 
با این حال، بعضی مسائل قابلیت همکاری محدود از قبیل هنجارسازی یا normalazationnormalization (هم ارزیهم‌ارزی)، یا نسخهٔ در حال استفادهٔ یونی کد باقی ماند. برای نمونه، UDF به یونی کد ۲٫۰ محدود شد؛ Mac OS هنجارسازی ینی کدیونی‌کد NFD که به‌طور اختیاری می‌تواند به حروف کوچک و بزرگ حساس باشد (به‌طور پیش فرض حساس نیست) را اعمال می‌کند. حداکثر طول نام پرونده استاندارد نیست و ممکن است به اندازهٔ واحد کد وابسته باشد. اگرچه این یک مسئلهٔ جدی است، در اکثر موارد یک مسئلهٔ محدود است. در لینوکس به این معناست که نام پرونده برای باز کردن آن کافی نیست: علاوه بر آن، نمایش دقیق بایتی نام پرونده روی دستگاه حافظه نیاز است. این با تعدادی فراخوانی‌های هنجار سازی مکارانه در سطح نرم افزار قابل حل است.<ref>{{cite web|url=http://nedbatchelder.com/blog/201106/filenames_with_accents.html |title=Filenames with accents |publisher=Ned Batchelder |date= |accessdate=September 17, 2013}}</ref>
 
این مسئله از هم ارزی یونی کدیونی‌کد را «برخورد با نام نرمال» می‌نامند. یک راه حل ''آگاهی از ترکیب غیر نرمال یونی کد'' است که در تخریب و سرقت از جوامع فنی استفاده می‌شود.<ref>{{cite web|url=http://wiki.apache.org/subversion/NonNormalizingUnicodeCompositionAwareness |title=NonNormalizingUnicodeCompositionAwareness - Subversion Wiki |publisher=Wiki.apache.org |date=January 21, 2013 |accessdate=September 17, 2013}}</ref> این راه حل مسیرهای داخل حافظه را هنجارسازی نمی‌کند. مسیرها تنها برای مقایسه هنجارسازی می‌شوند. با این حال، بعضی جوامع این راهبرد را انحصاری کردند، به‌طوری‌که استفاده از آن در سایر جوامع ممنوع باشد.
 
=== چشم اندازها ===
برای محدود کردن مسائل قابلیت همکاری بعضی اندیشه‌ها که توسط Sun شرح داده شده عبارتند از:
* استفاده از یک رمزگذاری یونی کدیونی‌کد (مانند[[جدول تخصیص فایل]]_۸)
* انجام تبدیلات شفاف کد روی نام پرونده‌ها
* ذخیرهٔ نام پرونده‌های هنجارسازی نشده
نام پرونده‌ها داخل یک فهرست باید یکتا باشند. از آن جا که ترکیب مربوط به نام پرونده برای فهرست‌ها نیز اعمال می‌شود، امکان ایجاد یک فایل و ورودی‌های فهرست با نام یکسان وجود ندارد. البته فایل‌های متعدد در فهرست‌های مختلف می‌توانند نام یکسانی داشته باشند.
 
رویکرد یکتایی می‌تواند حساسیت نسبت به حروف کوچک و بزرگ و شکل استانداردسازی یونی کدیونی‌کد را تغییر دهد مانند NFC و NFD. یعنی دو پروندهٔ مجزا می‌توانند با متن نام پروندهٔ یکسان و پیاده‌سازی بایتی متفاوت از آن نام پرونده ایجاد شوند.<ref>{{cite web|url=http://www.gamedev.net/topic/628734-cross-platform-filepath-naming-conventions/ |title=Cross platform filepath naming conventions - General Programming |publisher=GameDev.net |date= |accessdate=September 17, 2013}}</ref>
 
== حفاظت از بزرگی یا کوچکی حروف ==
بعضی فایل سیستم‌ها، مانند [[جدول تخصیص فایل]]، نام پرونده‌ها را بدون توجه به کوچک یا بزرگ بودن حروف آن‌ها با حروف بزرگ ذخیره می‌کنند. برای مثال، اگر پرونده‌ای با نام "«MyName.Txt"» یا "«myname.txt"» ایجاد شده باشد با نام پروندهٔ "«MYNAME.TXT"» ذخیره خواهد شد. هر تغییری در حروف کوچک و بزرگ می‌تواند برای ارجاع به یک پروندهٔ یکسان استفاده شود. این نوع فایل سیستم‌ها '''غیر حساس به حروف کوچک و بزرگ (case-insensitive)''' نامیده می‌شوند و '''محافظ کوچکی و بزرگی حروف(case-preserving)''' نیستند. بعضی فایل سیستم‌ها اجازه نمی‌دهند در نام پرونده‌ها فقط از حروف کوچک استفاده شود.
 
بعضی فایل سیستم‌ها نام پرونده‌ها را به همان شکلی که ایجاد شدند ذخیره می‌کنند؛ به این فایل سیستم‌ها '''نگهدارندهٔ حروف کوچک و بزرگ (case-retentive)''' یا '''محافطمحافظ حروف کوچک و بزرگ(case-preserving)''' می‌گویند. چنین فایل سیستمی می‌تواند نسبت به حروف کوچک و بزرگ حساس یا غیر حساس باشد. اگر حساس باشد آنگاه "MyName.Txt" و "myname.txt" می‌توانند به دو فایل مختلف در یک فهرست یکسان اشاره کنند، و به هر پرونده باید دقیقا با همان ترکیبی از حروف کوچک و بزرگ که با آن نام‌گذاری شده ارجاع داده شود. از سوی دیگر در یک فایل سیستم غیر حساس به حروف کوچک و بزرگ فقط یکی از نام‌های "MyName.Txt" و "myname.txt" و "Myname.TXT" می‌توانند هم زمان در یک فهرست نام یک پرونده باشند، و به یک پرونده با یکی از این نام‌ها با هر ترکیبی از حروف کوچک و بزرگ می‌توان ارجاع داد.
 
Unix و سامانه‌های فرعی آن از شروع اصلیش محافظ حروف کوچک و بزرگ بودند. اما، همه انواع فایل سیستم‌های Unix حساس به حروف کوچک و بزرگ نیستند؛ به‌طور پیش فرض، HFS+ در macOS نسبت به حروف کوچک و بزرگ حساس است، و کارگزاران SMB([[بلوک پیام سرور]])رفتارهای غیر حساس به حروف کوچک و بزرگ ارائه می‌دهند (حتی زمانی که فایل سیستم اصلی به حروف کوچک و بزرگ حساس باشد، مانند [[سامبا (نرم‌افزار)|سامبا]] در بیشتر سامانه‌های شبیه به Unix) و فایل سیستم کاربر SMB رفتار غیرحساس نسبت به حروف کوچک و بزرگ ارائه می‌دهد. حساسیت یا عدم حساسیت فایل سیستم به حروف کوچک و بزرگ یک چالش قابل توجه برای نرم افزار است مانند سامبا و [[واین (لایه سازگاری)|واین]]، که باید به‌طور کارآمد همکاری کند هم با سامانه‌هایی که با پرونده‌های با حروف بزرگ و پرونده‌های با حروف کوچک متفاوت رفتار می‌کنند و هم سامانه‌هایی که با آن‌ها یکسان برخورد می‌کنند.<ref>{{cite web |url=http://wiki.winehq.org/CaseInsensitiveFilenames |title=CaseInsensitiveFilenames - The Official Wine Wiki |publisher=Wiki.winehq.org |date=November 8, 2009 |accessdate=August 20, 2010 |archiveurl=https://web.archive.org/web/20100818055054/http://wiki.winehq.org/CaseInsensitiveFilenames |archivedate=۱۸ اوت ۲۰۱۰ |dead-url=yes }}</ref>
کاربر ناشناس