Korábban írtam egy blogbejegyzést, hogyan lehet listázáskor oktális formában látni az állományok jogosultságait. Az nem működött jól, ha bizonyos speciális bitek (például a STICKY) be voltak kapcsolva. Erre megírtam egy szkriptet, ami lekezeli e problémát. Be is írtam azt abba a blogbejegyzésbe, reakció nem jött rá.
Bár az a szkript jól működik, de lassúnak találtam, aminek nyilván az volt az oka, hogy rengeteg stringműveletet végez, s ehhez mindig hívogatja parancssorból a processzeket. Gondoltam, megírom C nyelven. Illetve, ez inkább C++, mert használja a "new" operátort. A program elkészült és működik. Természetesen nincs GUI-ja, parancssoros, és nem használ dinamikus könyvtárakat, szerintem elfut a kenyérpirítón is. Gyors. Na most ha már megírtam, úgy írtam meg, hogy sokkal többet tudjon mint a korábbi szkriptem. Hogy mit tud? Idemásolom a helpjét:
user@Csiszilla:~$ kiir -h
E szkriptet készítette: Viola Zoltán ( violazoli@gmail.com )
Licenc: GPL
Mit csinál: kb ugyanazt mint az ls -l
parancs, a következő különbségekkel: a fájl vagy könyvtár jogosultságait 4 oktális számjeggyxel írja ki,
például: 0777
Rendesen lekezeli az USERID, GROUPID és STICKY biteket is. (Ezek a kilistázott 4 karakteres
oktális szám legnagyobb helyiértékű azaz baloldali számjegyét alkotják).
A legelső karakter a kilistázott sorban egy "-" ha fájl, és "d" ha könyvtár, ezután jön egy szóköz.
Legelőször kilistázza az összes könyvtárat, utána a többi fájlt.
Így kell lefordítani:
g++ kiir.cpp -o kiir
Használat:
kiir — ez az aktuális könyvtárban listáz
kiir állománynév — a megadott állományt listázza ki.
kiir könyvtárnév — a megadott könyvtárat listázza ki.
kiir -? — kiírja ezt a helpet
kiir -h — kiírja ezt a helpet
kiir "formátumstring" könyvtárnév — a megadott könyvtárat listázza ki a formátumstringben specifikált módon.
kiir -kapcsolók "formátumstring" könyvtárnév — a megadott könyvtárat listázza ki a formátumstringben specifikált módon, a kapcsolók szerint.
kiir -kapcsolók ÁllománynévVagyKönyvtárnév - az adott állományt vagy könyvtárat listázza ki a kapcsolóknak megfelelően
A kapcsolókból akármennyit meg lehet adni, egyetlen "-" jel után, pld: -pPo
A kapcsolók jelentése:
p = listázza a "." és a ".." tartalomjegyzékeket is. (Kis p)
P = listázza a rejtett tartalomjegyzékeket is (amiknek a neve ponttal kezdődik). (Nagy P)
(Csak akkor listázza a . és a .. valamint a rejtett tartralomjegyzékeket, ha a p és P kapcsolók mindegyikét megadtuk!)
o = kirírja a lista végére az altartalomjegyzékek és a fájlok darabszámát
d = nem listázza a könyvtárakat (A . és .. nevűt sem!)
f = nem listázza a fájlokat (A rejtett állományokat sem!)
L = nem listázza a linkeket
R = rekurzíven listáz. E kapcsoló esetén nem listázza külön előbb a tartalomjegyzékeket majd a linkeket majd fájlokat az egyes
altartalomjegyzékekben, hanem minden almappa tartalmát kilistázza olyan sorrendben ahogy azt az "ls -R" tenné.
Ellenben ezesetben ha megadtuk a -o kapcsolót, a fájlok összmérete az összes kilistázott könyvtár összes fájljának méretét tartalmazza majd.
M = Kiírja az "ls -a -l" parancs esetén kapott azon sorokat is, amelyek nem fájl- vagy könyvtárbejegyzések
A = az alapértelmezett formátumstring szerint listáz, azaz mintha ezt adtuk volna meg:
"%d %O %10T %10G %D %I %20M %n"
Ez a kapcsoló felülbírálja az esetlegesen külön megadott formátumstringet!
A formátumstringre vonatkozó szabályok:
Ha nincs megadva formátumstring, akkor az "ls -l" esetén szokásos módon listáz, azt kivéve, hogy az attributumstring helyett
oktális formában írja ki a jogosultságokat.
A formátumstringben a speciális jelentéssel bíró karaktereket a % jel kell megelőzze.
Ha a % jelet olyan karakter követi melynek nincs meghatározott jelentése, kiírja a % jelet is és e karaktert is.
Ami karaktert nem előz meg % prefix, azt is kiírja.
A speciális karakterek:
%% - a % jel
%/ - újsor karakter
%d - egy karakter, mely azt jelzi, könyvtár-e vagy fájl. Könyvtár esetén ez "d", fájl esetén "-" karakter. link esetén "l" karakter.
%a - az "ls" esetén szokásos 9 karakteres attributumstring (például "rwxrwxrwx")
%s - a chmod parancsnál megadható legnagyobb helyiértékű oktális számjegy, ez tartalmazza a STICKY, GROUPID és USERID biteket.
%t - a chmod parancsnál megadható jobbról a harmadik oktális számjegy, a fájl tulajdonosának jogait határozza meg.
%c - a chmod parancsnál megadható jobbról a második oktális számjegy, a csoport jogait határozza meg.
%m - a chmod parancsnál megadható jobbról az első oktális számjegy, amely a "mindenki más" jogait határozza meg.
%O - a chmod parancsnál oktális módon megadható mind a 4 számjegy egymás után.
%l - a fájla mutató hard linkek számát írja ki.
%T - A tuladonos neve
%G - A csoport neve
%M - Az állomány mérete
%D - A dátum
%I - Az idő
%n - Az állomány neve
A formátumstringben megadható bizonyos tételek mezőhossza és igazitási módja. Azon tételeknél, melyek hossza változó lehet.
Ezek a következők: %l, %T, %G, %M, %n
A hossz és formátummegadás a következőképp történik:
%j15M - ez a méretet 15 karakteres mezőben írja ki, jobbra igazítva.
%j30n - ez a file (vagy a könyvtár) nevét 30 karakteres mezőben írja ki, jobbra igazítva.
%b15M - ez a méretet 15 karakteres mezőben írja ki, balra igazítva.
%b30n - ez a file (vagy a könyvtár) nevét 30 karakteres mezőben írja ki, balra igazítva.
Hasonlóképp adhatjuk meg a többi felsorolt mezőnél is.
Ha nem adunk meg b vagy j karaktert csak számot, akkor alapértelmezés szerinti irányba igazít. Ez a következő:
nevek esetében ( %T, %G, %n ) balra igazít, számok esetében ( %l, %M ) jobbra.
Például: %20M egy 20 karakteres mezőbe írja ki jobbra zárva a méretet.
%20n egy 20 karakteres mezőbe írja ki balra zárva a file nevét.
Ha nem fér bele a mezőhosszba a kiiratandó adat, akkor nem veszi figyelembe a mezőhosszat hanem kiírja az egészet.
Ha olyan adatnál adunk hossz-specifikációt (akár j vagy b-vel együtt akár enélkül) amely fix hosszúságú, azaz nem a fentebb felsoroltak
valamelyike, akkor azt a hosszt egyszerűen nem veszi figyelembe, hanem kiírja a maga megszokott fix hosszúságában. Például:
%45O vagy %j45O - ez hiába adtunk meg 45-öt, akkor is csak 4 karakter hosszan írja ki a file jogosultságainak oktális értékét.
----------------------------------------------------------------------------------
Eddig a helpje. (egyelőre). Azt szeretném kérdezni, hogy
1. Egyáltalán érdekel-e ez a program errefelé valakit? Ha nem, nekem úgy is jó, mert nem bántam meg a megírását, sokat tanultam közben, s a SZÁMOMRA igenis hasznos e program, mert mindigis rühellettem "rxw" stílusban látni a jogokat oktális helyett. Amiatt kérdem mégis, mert HA akad aki szeretné, közreadom szívesen.
2. Ha kell valakinek, hová másoljam fel? Kicsit nagyon hosszú lenne a fórumba feltölteni a forráskódot. Meg akkor már feltölteném a binárist is, hátha valaki nem akar szenvedni a fordítással. Bár az olyan iszonyatosan bonyolult, hogy egyetlen sorral elintézhető. Szerepel fentebb a helpben.
3. ötleteket szívesen fogadok a továbbfejlesztésre hogy mit tudjon még. A flame-ot hagyjuk. Aki nem szereti a parancssort, annak erre a progira nyilván marhára semmi szüksége, de AZ KÉREM NE IS SZÓLJON HOZZÁ E TOPIKHOZ! Abszolút nem érdekel az efféle emberkék véleménye. Itt nem akarok erről vitázni, s előre kérem a moderátorokat hogy az efféle hozzá(be...) szólásokat törölje.
4. Azt is hagyjuk, hogyan kéne szépen kinéznie egy forráskódnak. Tudom hogy ocsmány. De legalább teletűzdeltem megjegyzésekkel, ami megkönnyíti a megértést.