16.10.2024

WSL ile bash veya python betiklerini çalıştırmak

WSL (Windows Subsystem for Linux) kurulu olduğunu varsayıyorum. Windows'un içinde aslında bash hatta python betikleri çalıştırmak mümkün. WSL tarafında bir linux'umuz varsa ve orada /home/metin gibi bir klasör yapısının altında betik1.sh gibi bash betik dosyamızın olduğunu varsayalım. Bu dosyanın çalıştırma yetkilerinin de olması gerek. Yani

chmod +x betik.sh

gibi. Bunu WSL Linux'a girmeden, Windows terminalden nasıl çalıştırırız?

C:\Windows\System32\wsl.exe /home/metin/betik1.sh

yeterli. Peki bir python betiğimiz varsa nasıl olur? Bunun da yine çalıştırma yetkilerinin olduğunu varsayarsak

C:\Windows\System32\wsl.exe "python3" "/home/metin/betik2.py"

şeklinde çalıştırabiliriz. Alternatif olarak hashbang (shebang) yöntemi olarak python betiklerinin ilk satırına

#!/usr/bin/env python

ve aynı şekilde bash betiklerinin ilk satırı olarak da

#!/usr/bin/sh

eklemek mümkün.

WSL'in linux ortamına ait sanal disk dosyasının konumu da

C:\Users\metin\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState

gibi bir yerde, ext4.vhdx gibi bir dosyada.

15.10.2024

Sysinternals handle

Birçok Sysinternals aracının içinde en az kullandığım olabilir, handle. Çünkü daha çok process explorer içinden aynı işi yapıyordum. Son zamanlarda daha fazla handle kullanmaya başladım.

İşletim sistemleri, uygulamaların dosya sistemi, portlar vs gibi kaynaklar üzerinde kullandıkları kaynakları bir kimlik numarası (buna handle denir, sanıyorum Türkçe'ye tutamaç/kulp gibi çevrilebilecek ama teknik olarak işleç olarak ifade edilen bir terim) ile takip eder. Bir dosya bir uygulama tarafından açıldığında, aynı anda bu dosyaya ihtiyaç duyabilecek başka programlarında dosyaya yazıp bozmaması için bu dosyayı kilitler ve ikinci gelene "bu dosya abc programı tarafından kullanılıyor" diye bir mesaj görüntüler. Çoğu zaman çok faydalı olan bu işleyiş bazen sorunlara yol açabilir. Dosyayı normal yollardan açan uygulama beklenmedik bir şekilde sonlanırsa ona ayrılan erişim yetkisi hiç sonlanmamış olabilir ve diğer uygulamaların (hatta tekrar başlatılan uygulamanın kendisinin) o dosyaya erişimi engellenebilir.

Böyle durumlarda bir "aracı"nın müdahale etmesi gerekebilir. İşte handle, bu amaçla açık kalan erişimleri sorgulamaya ve sonlandırmaya yarayan küçük ama faydalı bir uygulamadır. handle ve handle64 olarak 2 farklı mimari için sürümleri mevcuttur. 2024'ün sonlarına doğru artık 32-bitlik sistemler görmek pek mümkün değil, ama 32-bitlik sürüm olan handle.exe'yi, bütün 32-bitlik uygulamalar gibi 64-bitlik bir Windows'da çalıştırmak mümkün. Lakin bazı dezavantajları olur; sadece 32-bitlik süreçlerin açtığı dosyaları sorgulayabilmek, sadece 32-bitlik süreçlerin erişebileceği 4 GB bellek adres alanına erişebilmesi gibi. Bu sebeple sadece 64-bitlik sürümü kullanıyorum.

Genellikle yükseltilmiş ayrıcalıklar ile çalışmayı sever, bu arkadaş. Bu sebeple açtığım terminal penceresinin yükseltilmiş ayrıcalıklara sahip olduğunu varsayıyorum. Tek başına çalıştırınca her süreç için açık kaynakların işleçlerini tek tek listeler. Bu çoğu zaman yapmamamız gereken bir şey. Onun yerine hedefimiz hakkında biraz daha bilgi vermek gerek. Örneğin, işleci (handle) oluşturan uygulamanın adı, süreç numarası veya erişimde sorun yaşadığımız dosyanın adı veya yolu olabilir.

handle64 winword
handle64 -p 11483
handle64 C:\Users\metin\Documents\Liste.docx

Bunların sonucunda bir veya birkaç tane işleç listelenir. Bu işleçlerin bir veya daha fazlasını kapatmak için ise hem işleç numarasını (-c ile) hem de süreç numarasını (-p ile) kullanmak gerekir.

handle64 -c 22AC -p 11483

Bu gibi araçlar eski günlerde daha çok USB belleklerin "çıkarılamaması" gibi sorunların çözümü için işe yarardı.

Tabi henüz geçerliliğini kaybetmemiş bir sürece ait işlev(ler)i zorla kapatmak en azından sürecin artık ilgili kaynağa erişememesine, bazen veri kaybına hatta sistem süreçlerine ait işleçlerin kapatılması durumunda sistem kararsızlığına (mavi ekranlar, beklenmedik sonlanmalar vs) sebep olabilir.

7.10.2024

DHCP sunucu ve Powershell

Çalışan bir DHCP sunucuya rezervasyon (ayırma) ve policy (ilke) eklemek istiyorum. Etkin bir havuz var ve kiralamalar da düzgün çalışıyor. Bununla birlikte DHCP'den yapılacak rezervasyonlarla ilgili elimde CSV dosyasından alınmış şöyle bir liste var:

$rsv = Import-Csv -Path .\reservations.csv
$rsv
MAC HOST IPAd
--- ---- ----
xx-xx-xx-yy-yy-yy bilgisayar01 192.168.22.150
xx-xx-xx-yy-yy-yy bilgisayar02 192.168.22.151
... 

Öncelikle bu MAC-IP ilişkisi için birer rezervasyon oluşturalım.

$rsv | % { Add-DhcpServerv4Reservation -ComputerName dhcpserver 
    -ScopeId "192.168.22.0" -IPAddress $_.IPAd -ClientId $_.MAC 
    -Name $_.HOST -Description -$_.HOST -Type Dhcp }

Daha sonra da aynı $rsv dizisini kullanarak bir politika oluşturalım.

Add-DhcpServerv4Policy -ComputerName dhcpserver -Name "WifiPolicy" -ScopeId "192.168.22.0" 
    -Condition OR -MacAddress EQ,xx-xx-xx-yy-yy-yy,...

Buraya bütün MAC adreslerini en sona tek seferde ekleyebilir, ya da WifiPolicy altına birden fazla koşul girebiliriz. Bu komut sonunda ilke etkin olarak oluşturulur. Oluşturduktan sonra devre dışı kalmasını istersek -Enabled $false ile bunu belirtmeliyiz.

DhcpServer modülü ile gelen 100'den fazla cmdlet var. DHCP sunucuyu sadece powershell'den yönetmek ve izlemek bile mümkün. Tüm komut listesi için

Get-Command -Module DhcpServer

Sonrasında DHCP olaylarını incelemek istersek

Get-WinEvent -Computername DhcpServer 
    -FilterhashTable @{Logname="Microsoft-Windows-Dhcp-Server/Operational";StartTime=(Get-Date).AddHours(-8)}

Bir filter'ımız varsa izin verilmeyen istemciler ile ilgili olay kayıtları "Microsoft-Windows-Dhcp-Server/FilterNotifications" günlüğüne düşer. Görmek için

Get-WinEvent -Computername DhcpServer
    -FilterHashtable @{Logname="Microsoft-Windows-Dhcp-Server/FilterNotifications";StartTime=(Get-Date).AddHours(-8)}

3.10.2024

pacman ile yaşanan bazı hatalar

Manjaro'da uzun bir sürenin ardından pacman ile güncelleştirmeleri yüklemeye çalıştığımda paketlerdeki PGP imzalarının geçersiz olduğu ve doğrulanamadına dair birkaç hata aldım. Şu sayfadaki öneriler sorunu çözdü:

sudo rm -fr /etc/pacman.d/gnupg
sudo pacman-key --init
sudo pacman-key --populate archlinux manjaro
sudo pacman-key --refresh-keys

Başka bir sorun, pacman ile güncelleme yaparken kilitlenen veya başka bir sebeple beklenmedik bir şekilde kapanan/yeniden başlayan sistemlerde veritabanı kilit dosyasının silinmemesinden dolayı güncellemelerin tekrar başlayamaması. Bu durumu "unable to lock database" ya da "veritabanı dosyası kilitlenemedi" gibi hatalarla görüyoruz. Bu durumda /var/lib/pacman/db.lck konumundaki kilit dosyasını silmek işimizi görür.

sudo rm -f /var/lib/pacman/db.lck

Bazen de yüklü paketlerden birinin depodaki sürümden daha yeni olduğuna dair bir mesaj görüntülenir.

uyarı: python-pyqt5: yerel depodaki paket (5.15.6-7.1) extra deposundaki paketten 
(5.15.6-7) daha güncel
yapılacak bir şey yok

Bu durumda Manjaro Forum'da şu önerilmiş:

sudo pacman -Syyuu

1.10.2024

nslookup kullanımı

Bir FQDN'in isim çözümlemesi için

nslookup google.com

Bu isim çözümlemesini belli bir DNS sunucunun yapması için

nslookup google.com 1.1.1.1

Bu alan adına ait özel bir tip isim çözümlemesi için

nslookup -type=ns google.com
nslookup -type=txt google.com 1.1.1.1

Alan adlarını sorgunun sonuna eklememek için (varsayılan olarak içinde en az bir nokta geçen ama nokta ile bitmeyen bütün sorgulara DNS alan adı listesindeki alan adları eklenir)

nslookup -nosearch metin

Bunlar hem Windows'da hem Linux'ta geçerli.

27.09.2024

Düşük güç kipleri

ACPI güç kipleri şöyle [1]:

S0 : Enerji kablosu takılı çalışma.

S0 low-power idle (modern standby): Bilgisayar düşük güç kipinden yüksek güç kipine çık hızlı geçiş yapar. Bu kipi destekleyen sistemler S1-S3 kiplerini desteklemez. Bilgisayarlardaki bu kip, aslında akıllı telefonlardaki yapıdan esinlenir. Bilgisayar düşük enerji kipinde bile ağa bağlıdır, temel bazı arka plan işlevleri (ağa bağlı mesajlaşma gibi işlemler) hala çalışır durumdadır. İşlemciye ayrılan güç kısıtlanır, RAM daha yavaş güncellenir, diğer çevre birimleri de mümkün olduğunca yavaşlar veya kapanır. Yine de S1-S3 kiplerine göre daha fazla güç kullanır.

S1-S3: Bilgisayar kapalı gibi gözükür. Bu tüketimi S1'den S3'e gittikçe düşer. Ama her sistem bu kiplerden sadece birini destekler. S0'a göre daha az güç tüketir, S4'e göre daha fazla tüketir. Bu kipte RAM'deki veriler canlı tutulur. Ayrıca klavye ve fareden açılmanın mümkün olması için bu cihazlar da enerji harcar. Eskiden kullanılan Suspend-to-RAM S3 kipi için söyleniyordu. Buna ek olarak bir de melez uyku (hybrid sleep) kipinde ise sistem hibernation dosyası oluşturarak olası bir güç kaybında kaldığı yerden devam edebilir duruma gelir.

S4: En az güç tüketen kip. Burada RAM içeriği diske yazılır. Bilgisayarın güç düğmesi haricinde de açılabilmesi için bazı sistem bileşenleri (klavye, fare vs) güç kullanır. Bu kipin eski adı Suspend-to-Disk'ti. Şu anda kullanılan terim hibernation, yani kış uykusu. Ama Türkçe'de bu şekilde kullanılmıyor. Buna hazırda bekletme deniyor.

S5: Bilgisayarın kapalı ama güç bağlantısının olduğu durum.

S6: Bilgisayar kapalı, güç bağlantısı yok.

İngilizce ve Türkçe arasındaki geçiş de önemli:

S0 low-power idle
Sleep / Standby
Uyku (Modern bekleme [3])
S1-S3Sleep
Uyku
S4    
Hibernate    
Hazırda Beklet
S5    
Soft off
Kapalı amaç gücü bağlı
S6    
Mechanical off
Kapalı

Önemli, çünkü  standby'a uyku, hibernation'a da hazırda beklet demek benim için büyük bir kafa karışıklığı. Modern bekleme kipi (İngilcesi de Modern Standby, Türkçesi de Modern Bekleme) ve S1-S3'ü de kapsayan kiplere bazen bekleme kipi/modu (Standby) da denebiliyor. Bu kiplerde güç led'i yanıp söner, bazı sistem bileşenlerinin hala güç tükettiğini ve kullanıcı girişi ile sistemin kaldığı yerden devam ettirilebileceğini göstermek için [4].

Bilgisayarımızın desteklediği kipleri görmek için

powercfg /a

Modern bekleme kipini kapatmak için [2]'dek yöntemler uygulanabilir.

Devreden çıkarmak için:

New-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\Power\ 
-Name PlatformAoAcOverride -Value 0 -PropertyType DWord

ya da

reg add HKLM\System\CurrentControlSet\Control\Power /v PlatformAoAcOverride /t REG_DWORD /d 0

tekrar devreye almak için

Remove-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\Power\ 
-Name PlatformAoAcOverride

ya da

reg delete  "HKLM\System\CurrentControlSet\Control\Power" /v PlatformAoAcOverride /f

Bu geçişleri Windows olay görüntüleyicisinden takip etmek için aşağıdaki olayları süzebiliriz:

Günlük: System
Kaynak: Microsoft-Windows-Kernel-Power
Id: 506 (Modern Bekleme kipine giriş), 507 (Modern Bekleme kipinden çıkış)

Bu kapsamda takip edilebilecek olaylar:

Ekran kilitleme/kilidini açma:

Günlük: Security
Kaynak: Microsoft-Windows-Security-Auditing
Id: 4800 (kilitlendi), 4801 (kilit açıldı)

---

[1] https://learn.microsoft.com/en-us/windows-hardware/design/device-experiences/modern-standby-faqs

[2] https://www.elevenforum.com/t/disable-modern-standby-in-windows-10-and-windows-11.3929/

[3] https://learn.microsoft.com/en-us/windows-hardware/design/device-experiences/modern-standby

[4] https://binaryfork.com/sleep-vs-hybrid-sleep-vs-modern-standby-10050/

23.09.2024

Turing testlerinin geçilebilirliği

Yıllar önce Alan Turing, düşünebilen makinelerin sınırlarını düşünmüş. Bugün kullandığımız Turing (ya da CAPTCHA) testi bu çalışmanın sonucu. Geçtiğimiz dönemde bu testlerin amacı, bir web sayfasına erişimin bir insan tarafından mı, yoksa bir makine (yazılım/betik) tarafından mı yapıldığını ayırt etmekti. 2024 itibabiyle artık yapay zekalar Turing testini geçmeyi başardılar. Bu ilginç bir milat olacak. 50'lerde başlayan "düşünen makineler" kavramları hakkında çok hayaller kuruldu, çok farklı projeksiyonlar yapıldı. Genel beklenti 2000'den önce insanlarla eşdeğer düzeyde makineler tasarlanabileceği yönündeydi. Ama bu beklentiler biraz gecikti. Kısmet 2020'lereymiş.

İnsanların bile %67'sini doğru olarak cevaplayabildiği bir testi GPT4 %54 doğruluk payı ile cevaplayabilmiş. Ufukta insanlardan daha zeki makineler var. İnsanların çözemediği sorunları makinelere çözdüreceğiz; insanların taşıyamadığı yükleri iş makinelerine taşıttığımız, insanların altından kalkamayacağı matematiksel işlemleri bilgisayarlara hesaplattığımız gibi. Bunun sonucunda bugün gidilmesi zorunlu olmayan gym salonlarını ve sadece ilkokulda çarpım tablosunun ezberlenmesine benzer şekilde gelecekte belki de temel düzeyde "düşünme" derslerimiz olacak.