Ders 01 / 16
Sertleştirme İlkeleri
Kursun ölçü birimi kurulur: varsayılan kurulumun dört makine sınıfında bıraktığı 84 tutunma noktası sayılır, gereksiz kalemin ayıklanması 40'ını kapatır, 44'ü yalnız taban çizgisine yazılır ve kapatmanın meşru işe bedeli 41 elle adım olarak çıkar.
İçindekiler
Önceki kurs kimliği bir köke bağladı: anahtarın kime ait olduğu artık adlandırılmış bir zincire dayanıyor. Zincirin tamamı doğru kurulmuş olsa bile o kök bir makinenin üzerinde duruyor ve makine ele geçirilirse zincir saldırganın elinde geçerli kalmaya devam eder.
Bu kurs oradan başlar ve önceki dört kurstan farklı bir varsayımla açılır: kod bir kez uçta çalıştı. Sayılan şey artık girişin engellenmesi değil, girişten sonra kalıcı olmanın kaç noktadan mümkün olduğudur. Bir kez çalışan kod, makine yeniden başladığında ya da kullanıcı oturum açtığında kendiliğinden yeniden çalışmıyorsa tek seferliktir; yeniden çalışabilmesi için makinenin kendi otomatik çalıştırma düzenine bir kalem eklenmesi gerekir. O düzendeki her kalem bir tutunma noktasıdır ve sayılabilir. Bu ders kursun ölçü birimini kurar.
Tutunma Noktası ve Kurulu Kalem
Bir envanter kalemi, çalıştırılması için kimsenin bir şey yapması gerekmiyorsa tutunma noktasıdır. Beş tür bu tanıma girer: açılış girişi, servis tanımı, zamanlanmış görev, oturum betiği ve yapılandırma kancası. Ortak yanları biçimsel değil işlevseldir — her biri bir tanım taşır ve o tanımı yazabilen, makinenin bir sonraki açılışında ya da bir sonraki oturum açılışında kendi seçtiği şeyin çalışmasını sağlar.
Kurulu bir paket bu tanıma girmez. Diskte duran bir ikili kendiliğinden çalışmaz; çalışması için ya bir kullanıcının onu çağırması ya da yukarıdaki beş türden birinin onu adıyla anması gerekir. Ayrım ölçümü küçültür ve keskinleştirir: envanterin tamamı değil, otomatik çalışan bölümü sayılır. Bu kursta bir tutunma noktasının nasıl tanımlandığı — hangi dosyaya ne yazıldığı — hiçbir yerde yazılmaz; sayılan şey türün var olması ve kaç tane olduğudur.
Ölçüm kurgu bölgesel ölçüm ağının dört makine sınıfında yapılır: saha ekiplerinin dizüstü bilgisayarları, şube uçları, sayaç toplayıcı makineler ve merkezî işleme sunucuları.
- SS1. Otuz üç kalemlik envanter ve dört sınıf modeldir; gerçek bir makine taranmıyor, gerçek bir kaldırma yapılmıyor.
- SS2. Tutunma noktası sayımına yalnız beş otomatik tür girer; kurulu paket ayrı sayılır.
- SS3. “Gerekli” sütunu iş tanımından türetilmiş sayılır ve modelde sabittir. Gerçekte bu sütun bir envanter çalışmasıyla doldurulur ve rol değiştikçe değişir.
- SS4. Kaldırma bedeli, kalem kaldırıldığında elle adıma düşen meşru iş sayısıdır; elle yazıldı.
- SS5. Kaldırma tamdır: kalem ya vardır ya yoktur. Devre dışı bırakma ile kaldırma arasındaki ayrım modellenmiyor; ikincisi tanımı da siler, birincisi bırakır.
- SS6. Tanımı yazabilen alan tek değer taşır ve en geniş yetkiyi gösterir.
// sert/envanter.mjs — varsayilan kurulumun biraktigi kalem envanteri MODELIDIR. // Gercek bir makine taranmaz, gercek bir kaldirma yapilmaz; sayilar bu dosyadan turer. export const SINIF = ['saha-dizustu', 'sube-ucu', 'toplayici', 'islem-sunucusu']; // Otomatik calistirilan bes kalem turu tutunma noktasi sayilir; 'paket' sayilmaz. export const NOKTA_TUR = ['acilis', 'servis', 'gorev', 'oturum', 'kanca']; // satir: ad | tur | kurulu maskesi | gerekli maskesi | tanimini yazabilen | kaldirma bedeli // maske dort karakter, sirasiyla SINIF; 'k' var, '.' yok. // bedel: kalem kaldirilinca elle adima dusen mesru is sayisi. export const KALEM = ` acilis-yoneticisi-girisi acilis kkkk kkkk yonetici 0 kurtarma-acilis-girisi acilis kkkk .... yonetici 2 ag-uzerinden-acilis acilis .kkk ..k. yonetici 0 uzak-yonetim-hizmeti servis kkkk .kkk yonetici 0 yazdirma-kuyrugu servis kk.. .k.. yonetici 0 kesif-yayini servis kkkk .... yonetici 1 uzak-masaustu servis kk.. .k.. yonetici 0 olcut-toplayici-ajani servis kkkk kkkk yonetici 0 gunluk-aktarim-ajani servis kkkk kkkk yonetici 0 yama-ajani servis kkkk kkkk yonetici 0 yardimci-arac-hizmeti servis kkkk .... yerel-yonetici 0 bulut-esitleme-hizmeti servis k... .... kullanici 2 sayac-alim-hizmeti servis ..k. ..k. yonetici 0 is-kuyrugu-hizmeti servis ...k ...k yonetici 0 guncelleme-denetimi gorev kkkk kkkk yonetici 0 disk-bakimi gorev kkkk kkkk yonetici 0 telemetri-gonderimi gorev kkkk .... yonetici 0 yardimci-arac-guncellemesi gorev kkkk .... yerel-yonetici 1 kullanici-gorev-klasoru gorev kk.. .... kullanici 3 yedek-tetigi gorev ..kk ..kk yonetici 0 oturum-acilis-betigi oturum kk.. kk.. yonetici 0 kullanici-baslangic-klasoru oturum kk.. .... kullanici 3 kabuk-yapilandirma-dosyasi oturum kkkk k.k. kullanici 2 paket-yoneticisi-kancasi kanca kkkk ...k yonetici 1 surucu-yukleme-kancasi kanca kkkk kk.. yonetici 0 kimlik-dogrulama-eklentisi kanca kkkk .kkk yonetici 0 kabuk-eklenti-dizini kanca kk.. .... kullanici 2 belge-duzenleyici paket kk.. kk.. - 0 arsiv-araci paket kkkk kkkk - 0 betik-calisma-zamani paket kkkk ..kk - 1 veri-tabani-istemcisi paket ..kk ..kk - 0 tanilama-araci-takimi paket kkkk .... - 3 saha-olcum-uygulamasi paket k... k... - 0` .trim().split('\n').map((r) => { const [ad, tur, kurulu, gerek, yazan, bedel] = r.trim().split(/\s+/); return { ad, tur, kurulu, gerek, yazan, bedel: Number(bedel), nokta: NOKTA_TUR.includes(tur) }; }); export const varMi = (k, i) => k.kurulu[i] === 'k'; export const gerekli = (k, i) => k.gerek[i] === 'k'; // Bir sinifta kurulu olan, gerekmeyen ve bu yuzden kaldirilabilen kalemler. export const fazla = (i) => KALEM.filter((k) => varMi(k, i) && !gerekli(k, i)); export const noktalar = (i) => KALEM.filter((k) => k.nokta && varMi(k, i)); export const kalanlar = (i) => noktalar(i).filter((k) => gerekli(k, i)); export const olc = (i) => ({ kurulu: KALEM.filter((k) => varMi(k, i)).length, nokta: noktalar(i).length, kapanan: fazla(i).filter((k) => k.nokta).length, kalan: kalanlar(i).length, bedel: fazla(i).filter((k) => k.nokta).reduce((a, k) => a + k.bedel, 0), });
Envanterin Sayımı
// sert/say.mjs — dort makine sinifinda tutunma noktasi, kapanan nokta ve kaldirma bedeli import { SINIF, NOKTA_TUR, KALEM, olc, varMi, gerekli, noktalar, kalanlar, fazla } from './envanter.mjs'; const y = (g, ...s) => console.log(s.map((v, i) => (g[i] < 0 ? String(v).padEnd(-g[i]) : String(v).padStart(g[i]))).join('').trimEnd()); const top = (f) => SINIF.reduce((a, _, i) => a + f(i), 0); console.log(`${KALEM.length} envanter kalemi; ${KALEM.filter((k) => k.nokta).length} tanesi ` + `otomatik calistirilan turden (${NOKTA_TUR.join(', ')})`); const A = [-16, 8, 7, 9, 7, 8]; console.log('\n1. sinif basina sayim'); y(A, 'sinif', 'kurulu', 'nokta', 'kapanan', 'kalan', 'bedel'); for (const [i, s] of SINIF.entries()) { const o = olc(i); y(A, s, o.kurulu, o.nokta, o.kapanan, o.kalan, o.bedel); } y(A, 'toplam', top((i) => olc(i).kurulu), top((i) => olc(i).nokta), top((i) => olc(i).kapanan), top((i) => olc(i).kalan), top((i) => olc(i).bedel)); const B = [-8, 7, 9, 7, 8]; console.log('\n2. tur basina, dort sinifin toplami'); y(B, 'tur', 'nokta', 'kapanan', 'kalan', 'bedel'); for (const t of NOKTA_TUR) y(B, t, top((i) => noktalar(i).filter((k) => k.tur === t).length), top((i) => fazla(i).filter((k) => k.nokta && k.tur === t).length), top((i) => kalanlar(i).filter((k) => k.tur === t).length), top((i) => fazla(i).filter((k) => k.nokta && k.tur === t).reduce((a, k) => a + k.bedel, 0))); console.log('\n3. sinifa gore ayrisan nokta (bir sinifta gerekli, otekinde fazla)'); const ayrisan = KALEM.filter((k) => k.nokta && SINIF.some((_, i) => varMi(k, i) && gerekli(k, i)) && SINIF.some((_, i) => varMi(k, i) && !gerekli(k, i))); for (const k of ayrisan) y([-30, -8, -6], k.ad, k.tur, k.gerek); const yz = (i) => noktalar(i).filter((k) => k.yazan !== 'yonetici'); console.log(`\nayri karar isteyen nokta ${ayrisan.length} kalem, ` + `${top((i) => ayrisan.filter((k) => varMi(k, i)).length)} karar`); console.log(`yoneticisiz tanimlanabilen nokta ${top((i) => yz(i).length)} karar, ` + `kapanan ${top((i) => yz(i).filter((k) => !gerekli(k, i)).length)}, ` + `kalan ${top((i) => yz(i).filter((k) => gerekli(k, i)).length)}`); console.log(`kaldirilabilir paket ${top((i) => fazla(i).filter((k) => !k.nokta).length)} karar, ` + `bedel ${top((i) => fazla(i).filter((k) => !k.nokta).reduce((a, k) => a + k.bedel, 0))}`); console.log(`toplam nokta karari ${top((i) => olc(i).nokta)}: ` + `kapatilan ${top((i) => olc(i).kapanan)}, ` + `yalniz taban cizgisine yazilan ${top((i) => olc(i).kalan)}`);
33 envanter kalemi; 27 tanesi otomatik calistirilan turden (acilis, servis, gorev, oturum, kanca) 1. sinif basina sayim sinif kurulu nokta kapanan kalan bedel saha-dizustu 28 23 14 9 15 sube-ucu 27 23 11 12 15 toplayici 23 19 7 12 5 islem-sunucusu 23 19 8 11 6 toplam 101 84 40 44 41 2. tur basina, dort sinifin toplami tur nokta kapanan kalan bedel acilis 11 6 5 8 servis 31 12 19 6 gorev 20 10 10 10 oturum 8 4 4 10 kanca 14 8 6 7 3. sinifa gore ayrisan nokta (bir sinifta gerekli, otekinde fazla) ag-uzerinden-acilis acilis ..k. uzak-yonetim-hizmeti servis .kkk yazdirma-kuyrugu servis .k.. uzak-masaustu servis .k.. kabuk-yapilandirma-dosyasi oturum k.k. paket-yoneticisi-kancasi kanca ...k surucu-yukleme-kancasi kanca kk.. kimlik-dogrulama-eklentisi kanca .kkk ayri karar isteyen nokta 8 kalem, 27 karar yoneticisiz tanimlanabilen nokta 19 karar, kapanan 17, kalan 2 kaldirilabilir paket 6 karar, bedel 14 toplam nokta karari 84: kapatilan 40, yalniz taban cizgisine yazilan 44
Kapatılan Nokta ile Kayda Geçen Nokta
Toplam satırı kursun iki sütununu birden veriyor. Dört sınıfta 84 tutunma noktası kararı var; gereksiz kalemin ayıklanması bunların 40’ını kapatıyor ve 44’ü açık kalıyor. Açık kalan 44 nokta için yapılabilecek tek şey tanımlarının bir taban çizgisine yazılması ve sonraki sapmaların o çizgiyle karşılaştırılmasıdır. Bu bir kapatma değildir; kaydedilmiş bir nokta kullanıldığında hâlâ çalışır, yalnız karşılaştırma yapıldığında görülür.
İki sütunun ayrı tutulması bu kursun kuralıdır. “Sertleştirildi” cümlesi tek başına hangi sütuna yazıldığını söylemez. Kapatılan nokta bir daha kullanılamaz; kayda geçen nokta kullanılabilir ve yalnız birileri kaydı okuduğunda fark edilir.
Model bir kalemi ya var ya yok sayıyor (SS5) ve bu, gerçekte iki ayrı işlemi tek sayıya indiriyor. Bir servisi devre dışı bırakmak onun tanımını yerinde bırakır ve yalnız çalıştırma bayrağını kapatır; kaldırmak tanımı da siler. Sayım açısından fark şudur: devre dışı bırakılmış bir kalem kapatılan sütununa değil, kayda geçen sütununa aittir, çünkü tanımı yazabilen biri bayrağı geri açabilir. Aradaki fark ölçüldüğünde çoğu envanterde 40 sayısı düşer — kaldırılamayan ama devre dışı bırakılabilen kalemler kapatılmış sanılır. Bu dersin sayımı, kaldırmanın gerçekten yapıldığını varsayar; bir uçta yapılmadıysa o kalem ikinci sütuna taşınır.
Sınıf satırları ters bir dağılım gösteriyor. Saha dizüstü bilgisayarı en çok kalem taşıyan sınıftır (28 kurulu, 23 nokta) ve en çok temizlenen sınıftır: 14 nokta kapanıyor, 9 kalıyor. Toplayıcı makinede 19 noktanın yalnız 7’si kapanıyor, çünkü kurulu olan neredeyse hep gereklidir. Yani temizlik en çok, tek bir işi olmayan ve çok amaçlı kurulan makinede kazandırır; tek işi olan makinede kazanılacak alan zaten dardır.
Tür tablosu kalan tarafın nerede toplandığını veriyor. Otuz bir servis tanımının yalnız 12’si kapanıyor; 19 servis kalıyor ve bu, kalan 44 noktanın en büyük parçasıdır. Ölçüt toplayıcı, günlük aktarımı, yama ajanı ve kimlik doğrulama eklentisi kaldırılamaz, çünkü makinenin yönetilebilir olması bunlara bağlıdır. Sertleştirmenin sınırı burada görünür: bir uç noktayı yönetilebilir kılan kalemler, o uçta kalıcı olmanın da yollarıdır.
Kimin Yazabildiği, Kaç Tane Olduğundan Önemli
Ayrı satır 84 noktanın 19’unu işaretliyor: yönetici yetkisi olmadan tanımlanabilen noktalar. Kullanıcı görev klasörü, kullanıcı başlangıç klasörü, kabuk eklenti dizini, kabuk yapılandırma dosyası, bulut eşitleme hizmeti ve yerel yönetici yetkisiyle gelen iki yardımcı araç kalemi bu kümededir. Temizlik bunların 17’sini kapatıyor, geriye 2 kalıyor.
Sayının küçüklüğü sonucun önemini azaltmaz. Yönetici yetkisi gerektiren bir tutunma noktası, o yetkiyi zaten elde etmiş birinin kullanabileceği bir kalemdir; yönetici yetkisi gerektirmeyen bir nokta, sıradan bir kullanıcı oturumunda çalışan koda açıktır. İki kalem arasındaki fark sayıda değil, hangi adımdan sonra kullanılabildiğindedir. Kalan iki kalem — saha dizüstü bilgisayarında ve toplayıcı makinede kabuk yapılandırma dosyası — kaldırılamaz, çünkü iki sınıfta da işin kendisi kabuk üzerinden yürüyor.
Sınıfa Göre Ayrışan Kalem
Üçüncü blok sekiz kalemi ayırıyor: her biri bir sınıfta gerekli, ötekinde fazla. Uzak yönetim hizmeti üç sınıfta zorunlu, saha dizüstü bilgisayarında gereksiz. Yazdırma kuyruğu yalnız şube ucunda gerekli. Ağ üzerinden açılış yalnız toplayıcı makinede. Paket yöneticisi kancası yalnız işleme sunucusunda.
Bu sekiz kalem 27 karar üretiyor ve tek bir kurumsal “kaldırılacaklar listesi” bunları çözemez. Liste sekiz kalemi de kaldırırsa üç sınıfta yönetim erişimi kapanır; hiçbirini kaldırmazsa saha dizüstü bilgisayarında gereksiz bir nokta açık kalır. Doğru olan sınıf başına ayrı karar vermektir ve bakım maliyeti tam olarak budur: dört liste, 84 karar ve her rol değişikliğinde yeniden bakılması gereken 8 sınır kalemi.
Kapatmanın Bedeli
Bedel sütunu 41 elle adım gösteriyor ve dağılımı da terstir: en çok nokta kapatılan iki sınıf en yüksek bedeli ödüyor (15 ve 15), en az kapatılan iki sınıf en düşüğü (5 ve 6). Tür tablosunda oran daha keskin: oturum betiklerinde 4 kapanan noktaya 10 bedel düşüyor, servis tanımlarında 12 kapanan noktaya 6. Kullanıcının kendi kurduğu kalemleri kapatmak, servis tanımlarını kapatmaktan yaklaşık beş kat pahalıdır — çünkü kullanıcı o kalemi bir işi yürütmek için kurmuştu ve kalem kapandığında iş yönetime düşer.
Kalemler adıyla okunduğunda bedel somutlaşıyor. Kurtarma açılış girişi dört sınıfta da fazladır ve kaldırıldığında yerinde onarım taşınabilir ortam ister; dört sınıfta 8 elle adım. Kullanıcı görev klasörü ve başlangıç klasörü, kullanıcıların kendi zamanlamalarını kurma yoludur; kapatıldığında her istek bir yönetim işine dönüşür.
Paket tarafı ayrı sayılıyor: 6 kaldırma kararı ve 14 elle adım. Tanılama araç takımı dört sınıfta da fazladır ama sorun giderme onunla yapılır; kaldırılırsa her olayda yeniden kurulum gerekir. Bu paket bir tutunma noktası değildir — kendiliğinden çalışmaz — ama disk üzerinde durduğu sürece onu çağırabilecek bir noktanın işine yarar. Aynı kalem uygulama izin listesi dersinde yeniden sayılacak.
Özet
- Tutunma noktası, çalıştırılması için kimsenin bir şey yapması gerekmeyen kalemdir: açılış girişi, servis tanımı, zamanlanmış görev, oturum betiği ve yapılandırma kancası. Kurulu paket bu kümeye girmez ve ayrı sayılır.
- Dört makine sınıfında 101 kurulu kalem kararının 84’ü tutunma noktasıdır; gereksiz kalemin ayıklanması 40’ını kapatır, 44’ü açık bırakır. Açık kalanlar için yapılabilecek tek şey taban çizgisine yazmaktır — bu bir kapatma değil, görünür kılmadır.
- Servis tanımları kalan tarafın en büyük parçasıdır: 31 noktanın 19’u kaldırılamaz, çünkü uç noktayı yönetilebilir kılan kalemler aynı zamanda orada kalıcı olmanın yollarıdır.
- Yönetici yetkisi olmadan tanımlanabilen 19 noktanın 17’si kapanır, 2’si kalır. Bir noktanın kim tarafından yazılabildiği, kaç tane olduğundan daha çok karar taşır.
- Sekiz kalem sınıfa göre ayrışır ve 27 karar üretir; tek bir kurumsal liste bunları ya bir sınıfta gereksiz iş ya ötekinde eksik kapatma olarak çözer.
- Kapatmanın bedeli 41 elle adımdır ve en çok temizlenen sınıflarda en yüksektir; oturum betiklerinde kapanan nokta başına bedel, servis tanımlarının yaklaşık beş katıdır.
Sonraki Adım
Kalan 44 nokta kapatılamıyor, çünkü iş onları gerektiriyor. Ama bu noktaları taşıyan bileşenler durdukları yerde eskiyor: bir servis tanımının arkasındaki ikilide kusur duyurulduğunda o nokta, kaldırılamadığı için, yama uygulanana kadar kullanılabilir kalır. Sonraki dersin ölçüsü bu yüzden penceredir: yayımla uygulama arasında geçen gün, o pencerede açık kalan nokta sayısı ve ikisinin çarpımı. Acil yama pencereyi kısaltır ama sınama adımlarının kaçını atladığı ve kaç kesinti ürettiği ayrıca sayılır. Yamanın kapattığı şeyin ne olduğu da ayrı bir sorudur: bir yama tutunma noktasını kaldırmaz, yalnız o noktaya ulaşmanın bilinen bir yolunu kapatır.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.