GNU/Linux >> Znalost Linux >  >> Linux

Jaké znaky jsou v názvech adresářů Windows a Linux zakázány?

Pojďme to zjednodušit a nejprve odpovězte na otázku.

  1. Zakázané tisknutelné znaky ASCII jsou:

    • Linux/Unix:

      / (forward slash)
      
    • Windows:

      < (less than)
      > (greater than)
      : (colon - sometimes works, but is actually NTFS Alternate Data Streams)
      " (double quote)
      / (forward slash)
      \ (backslash)
      | (vertical bar or pipe)
      ? (question mark)
      * (asterisk)
      
  2. Netisknutelné znaky

    Pokud vaše data pocházejí ze zdroje, který povoluje netisknutelné znaky, pak je třeba zkontrolovat více.

    • Linux/Unix:

      0 (NULL byte)
      
    • Windows:

      0-31 (ASCII control characters)
      

    Poznámka: I když je v souborových systémech Linux/Unix legální vytvářet soubory s řídicími znaky v názvu souboru, pro uživatele může být noční můra zabývat se takovými soubory.

  3. Vyhrazené názvy souborů

    Následující názvy souborů jsou vyhrazeny:

    • Windows:

      CON, PRN, AUX, NUL 
      COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9
      LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9
      

      (jak samostatně, tak s libovolnými příponami souborů, např. LPT1.txt ).

  4. Další pravidla

    • Windows:

      Názvy souborů nemohou končit mezerou ani tečkou.


„Komplexní průvodce“ zakázanými znaky souborů nebude ve Windows fungovat, protože si vyhrazuje názvy souborů i znaky. Ano, znaky jako * " ? a další jsou zakázány, ale existuje nekonečné množství jmen složených pouze z platných znaků, které jsou zakázané. Například mezery a tečky jsou platné znaky názvu souboru, ale názvy složené pouze z těchto znaků jsou zakázány.

Windows nerozlišuje mezi velkými a malými písmeny, takže nemůžete vytvořit složku s názvem A pokud se jmenuje a již existuje. Horší, zdánlivě povolená jména jako PRN a CON , a mnoho dalších, jsou vyhrazeny a nejsou povoleny. Windows má také několik omezení délky; název souboru platný v jedné složce se může stát neplatným, pokud se přesune do jiné složky. Pravidla pro pojmenovávání souborů a složek jsou v dokumentech Microsoft.

Obecně nemůžete k vytváření názvů adresářů Windows používat text generovaný uživatelem. Pokud chcete uživatelům umožnit pojmenovat cokoli chtějí, musíte vytvořit bezpečné názvy jako A , AB , A2 et al., ukládat uživatelsky vygenerovaná jména a jejich ekvivalenty cest do datového souboru aplikace a provádět mapování cest ve vaší aplikaci.

Pokud bezpodmínečně musíte povolit názvy složek generované uživateli, jediným způsobem, jak zjistit, zda jsou neplatné, je zachytit výjimky a předpokládat, že název je neplatný. I to je plné nebezpečí, protože výjimky pro odepřený přístup, offline disky a nedostatek místa na disku se překrývají s těmi, které mohou být vyvolány pro neplatná jména. Otevíráte jednu obrovskou plechovku bolesti.


V Linuxu a dalších unixových systémech se v názvu souboru nebo adresáře nemohou objevit pouze dva znaky, a to NUL '\0' a lomítko '/' . Lomítko se samozřejmě může objevit v názvu cesty, oddělující složky adresáře.

Říká se, že Steven Bourne (známý „skořápka“) měl adresář obsahující 254 souborů, jeden na každé písmeno (znakový kód), které se může objevit v názvu souboru (kromě / , '\0'; název . byl samozřejmě aktuální adresář). Byl použit k testování Bourne shellu a rutinně způsobil zmatek na neopatrných programech, jako jsou zálohovací programy.

Jiní lidé se zabývali pravidly Windows.

Všimněte si, že MacOS X má systém souborů bez ohledu na velikost písmen.

Byl to Kernighan &Pike v The Practice of Programming, kdo řekl tolik v kapitole 6, Testování, §6.5 Zátěžové testy:

Když Steve Bourne psal svůj unixový shell (který začal být známý jako Bourne shell), vytvořil adresář 254 souborů s jednoznakovými jmény, jeden pro každou hodnotu bajtu kromě '\0' a lomítko, dva znaky, které se nemohou objevit v názvech souborů Unix. Použil tento adresář pro všechny druhy testů porovnávání vzorů a tokenizace. (Testovací adresář byl samozřejmě vytvořen programem.) Po mnoho let byl tento adresář zkázou programů pro procházení stromem souborů; testovalo je to k destrukci.


Linux
  1. Linux – Co je velká a nízká paměť v Linuxu?

  2. V jakých jazycích jsou napsány Windows, Mac OS X a Linux?

  3. Jaká jsou nativní volání OS/systému Windows a Linuxu prováděná z malloc()?

  1. Co je dvojitá tečka (..) a jedna tečka (.) v Linuxu?

  2. Jaký souborový systém použít, když používáte Windows i Linux?

  3. Jak se liší \n a \r na Linuxu a Windows?

  1. VirtualBox na Linuxu:Jaký obraz Windows použít a kde jej získat?

  2. Jaké jsou tyto procesy Windows v systému Linux?

  3. Co je velká a nízká paměť v Linuxu?