A Linux futtatható állományoknál miért nincs kiterjesztés?
Más elven működnek a unix rendszerek. Van egy fájl, legyen annak bármilyen neve, ha adsz neki futtatási jogot akkor futtatható lesz. Persze ha egy képnek adsz futtatási jogot attól még az nem fog csinálni semmit, de futtatható jogot megkapja.
Egyébként az egész fájlrendszer úgy épül fel, hogy mindennek megvan a saját helye. Pl. a futtatható fájlok a /bin, /usr/bin mappákban vannak. A rendszergazdai joghoz kötött futtatható fájlok a /sbin, /usr/sbin mappában találhatóak. A szükséges programkönyvtárak a /lib ill. /usr/lib mappában helyezkednek el. Tehát nem szükséges kiterjesztés, mivel a megfelelő mappában vannak a fájlok.
"jobban tetszene, ha rendesen kiterjesztés hozzáírással lehetne indítani a programokat"
nem értem ezzel mit akarsz mondani
"Na de mi az oka?"
A fájl típusát sok esetben a fájlok elején elhelyezkedő fejlécek határozzák meg, így nincs szükség feltétlen kiterjesztésre - az "csak egy kényelmi szolgáltatás a felhasználónak".
Például futtatható ELF-bináris esetén:
szkriptek (bash, Python, perl,...) esetén a Shebang:
illetve ott vannak még a fájl jogosultságai:
Mert fölösleges. A rendszer tudja, melyik a futtatható fájl, és a felhasználó is el szokta tudni dönteni, így nem sok értelme lenne.
Windowson egyébként alapértelmezetten rejtve van az ismert kiterjesztések elrejtése, így ha csak át nem állítod, ott sem látod a kiterjesztését.
Egyébként Linuxon történelmi okokból jellemzően sokat használjuk a paranccsort (míg a Windows alapvetően GUI-s felhasználásra van tervezve), ahol egy külső parancs megegyezik a futtatható fájl nevével. Ha még a kiterjesztést is oda kellene írni, sokkal többet kellene feleslegesen gépelni. Tehát pl. e helyett:
cat /var/log/authlog | grep "Accepted password"
Mondjuk ezt kéne írnod:
cat.exe /var/log/authlog | grep.exe "Accepted password"
Persze, lehetne aliasokat gyártani tömegesen, de az meg karbantartási szempontból lenne rémálom.
Alapvetően azért, mert fölösleges. Nem tudsz annyiféle kiterjesztést adni, ahányféle fájltípusra lehet szükséged. Ráadásul mondjuk egy .exe fájlkiterjesztés kvázi szabványos jelentéssel bír, de mondjuk egy .nus mit jelent? Vagy egy .con, egy .ktk? Ezeket le kell írni egy szabványban, aztán utána megkövetelni az alkalmazást. De itt két lehetőség van:
1; Minden lehetőséget fel kell sorolni. Ez cirka 20000 eset, mindegyiknek egy rövid leírás is dukál. A fene sem fogja mindig minden fájl esetében megnézni, melyik takarja jól az éppen elkészített fájl jellemzését. És mi van, ha mondjuk két ilyen van?
2; Nem írunk le mindent. Akkor a kimaradó kiterjesztésekkel a probléma megmarad.
A Linux (és a Unix rendszerek úgy általában) más szisztémát követ. Mígy Windowsban az egy alkalmazáshoz tartozó fileok vannak egy helyen (pl. C:\Program Files\Akarmicsoda mappában van a futtatható program, a config file, a DLL-ek és az egyéb fileok is) addig Linuxon az egy funkcióhoz tartozó fileok vannak egy helyen (pl /usr/bin mappában az összes futtatható program, /etc mappában a config). Emiatt fölösleges a kiterjesztés. Nomeg a Linuxban (szerencsére) nem a kiterjesztés dönti el, hogy futtatható-e valami, hanem a jogosultságok. Plusz Linuxon nagyon sok a script file, amik szintén futtathatók. Lehet, hogy egy program egy scriptfile-al indul, lehet, hogy egy ELF binárissal. De neked elég csak a nevét begépelni, ha rajta van a +x jog, akkor tudod futtatni.
Az, hogy neked nem tetszik így, egyéni probléma. A Linuxnak (szerencsére) nem kell úgy működnie, mint a Windowsnak.
Mit ne mondjak, sokkal logikusabb ez a megoldás szerintem.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!