20.01.2022

Uzak bilgisayardaki açık dosyaların listelemek

Yerel bilgisayarda açık dosyaların listesini değişik şekillerde alınabiliyor. Resource Monitor, Process Monitor veya komut satırından handles.exe ile bunu yapmak mümkün. Ama uzak bilgisayardaki açık dosyalar için aynı şeyi yapmak zor. Her seferinde uzak masaüstünden bağlanıp bunu yapmak da istemiyorum. Önce psexec ile handles'i uzak bilgisayarda çalıştırmayı düşündüm ama hem çok yavaş sonuç döndü, hem de dönen sonuçlarda görmeyi istediğim açılan dosya ile bu dosyayı açan proses aynı satırda yer almadığı için find.exe veys findstr.exe ile süzmek mümkün olmadı.

Sonra bugün öğrendiğim başka bir araç buldum: openfiles.exe

Bugüne kadar kullanmamış olmama şaşırmakla birlikte aynı anda şu adreste gösterilen şekilde powershell ile birlikte kullanmak çok hoşuma gitti.

PS> openfiles /Query /S SERVER01 /FO CSV /V | ConvertFrom-Csv | Out-GridView

Bu şekilde gelen grid nesnesinin içinde kelime araması yapmak da mümkün.

Bunu bir powershell fonksiyonu yaparak sadece bilgisayar adını değiştirerek çağırmak da güzel oldu:

function Get-OpenFiles
{
   [CmdletBinding()]
   param(
      [string]$Computername=$env:COMPUTERNAME,
      [string]$Output
   )

   if ($Output -eq "table")
   {
      openfiles /Query /S $Computername /FO TABLE /V
   }
   elseif ($Output -eq "csv")
   {
      openfiles /Query /S $Computername /FO CSV /V
   }
      elseif ($Output -eq "list")
   {
      openfiles /Query /S $Computername /FO LIST /V
   }
   else
   {
      openfiles /Query /S $Computername /FO CSV /V | ConvertFrom-Csv | Out-GridView
   }
}

Bu şekilde hiçbir Output parametresi verilmezse grid yeni bir pencerede grid nesnesinde görüntülenecek. Diğer seçeneklerde de console host içinde tablo, liste ve csv formatında çıktı almak mümkün.

18.01.2022

Powershell ile diskleri yönetmek

Yeni bir disk geldi. Bilgisayara bağlantısını yaptıktan sonra ilk açılışta elbette gözükmeyecek. Öncelikle diski initialize (Diski Başlat) edip disk bölümleri oluşturmalıyız. Bunu grafik arayüz yerine powershell'den yapalım.

Önce bilgisayarda takılı diskleri listeyelelim

> Get-Disk

Number Friendly Name               HealthStatus   OperationalStatus   Total Size Partition Style
------ -------------               ------------   -----------------   ---------- ----------
0      Samsung SSD 860 PRO 512GB   Healthy        Online               476.94 GB GPT
1      TOSHIBA HDWL120             Healthy        Online                 1.82 TB RAW

Son satırda Partition Style olarak RAW gözüken disk, yeni takılan diskimiz. Bunun üzerinde yeni bölümler oluşturmadan önce bu diski initialize etmemiz gerek.

> Get-Disk -Number 1 | Initialize-Disk -PartitionStyle GPT

Initialize-Disk cmdlet'inin varsayılan partition style'ı GPT, yani yazmaya gerek yok aslında. MBR yapmak için açıkça belirtmek gerek.

Bu işlemden sonra diskimiz bir GPT disk olarak bölümlendirmeye hazır. Yeni bir disk bölümü oluşturalım:

> Get-Disk -Number 1 | New-Partition -Size 500GB -Driveletter P -Offset 500GB

Bu komut ile önce disk listesinde görülen 1 numaralı diski seçip new-partition cmdlet'ine gönderdim. Bu cmdlet ile de üzerinde 500 GB'lık bir disk bölümü oluşturup P: sürücü harfi ile erişilmesini istedim. Offset parametresinin varlığını göstermek istediğim için kullandım. Disk bölümünü boş diskin başında değil de ortasında yaratmak istersek bunu kullanabiliriz. Boyut olarak bütün diski kullanmasını istersek -UserMaximumSize parametresini kullanabiliriz.

Son aşamada bu sürücüyü biçimlendirmemiz gerek.

> Format-Volume -Driveletter P -Filesystem NTFS -AllocationUnitsize 8192

Bu komut ile de P: sürücümüzü NTFS dosya sistemi kullanarak biçimlendirip her disk biriminin (segment) 8192 Byte boyutunda olmasını sağladık.

Daha sonra bu disk bölümünün boyutunu değiştirmek istediğimizi varsayalım. Yanlış disk/bölüm üzerinde işlem yapmamak için önce Get-* cmdlet'leriyle seçimizi yapıp sonrasında bu seçimi boru "|" karakteriyle işlemi yapacak cmdlet'e gönderelim:

> Get-Disk -Number 1 | Get-Partition -PartitionNumber 2 | Set-Partition -size 512GB

Daha kısa bir şekilde

> Get-Partition -Driveletter P | Resize-Partition -Size 512GB

da diyebilirdik.

Var olan bir disk bölümünden kurtulmak için

> Get-Partition -Driveletter P | Remove-Partition

Bir diskteki bütün disk bölüm yapısını silmek için

> Clear-Disk -Number 1

Offline bir diski online yapmak için

> Get-Disk -Number 1 | Set-Disk -IsOffline $False


16.01.2022

Çalışan linux sistemde DNS ve DHCP sunucuları bulmak

Açık bir linux sistemimiz var. Geçerli DNS sunucuyu ve eğer IP ataması otomatik yapılmışsa bu atamayı yapan sunucuyu (DHCP) nasıl buluruz?

$ resolvectl dns

Global:
Link 3 (wlp4s0): 8.8.8.8 1.1.1.1

Bu komutla sistemimize ataması yapılmış olan 2 DNS sunucu gözüküyor. Ama bunlardan biri aktif. Diğeri yedek. Hangisi aktif, onu bulmak için de:

$ resolvectl status

Link 3 (wlp4s0)
...
Current DNS Server: 1.1.1.1
...

Şu an çalışan sunucu 1.1.1.1'miş.

Peki DHCP sunucu? Çalışan sistem IP adresini bir DHCP sunucudan almışsa muhtemelen journalctl loglarına bir kayıt düşmüştür. Ama atamayı yapan sunucunun IP adresi geçmiyor olabilir. Fedora'da DHCPACK anahtar kelimesiyle yapılan aramada sonuca ulaştım.

$ journalctl -b -g DHCPACK

Jan 16 02:39:33 fedora dhclient[43751]: DHCPACK of 192.168.0.13 from 192.168.0.1 (xid=0x3ef11a2b)

Bu bir sonuç vermezse dhcpcd paketi işimizi görebilir:

$ dhcpcd -T wlp4s0

...

wlp2s0: offered 192.168.0.13 from 192.168.0.1

...

Ağda gerçekleşen trafiği izlemek de bir seçenek olabilir:

$ sudo tcpdump -i wlp4s0 udp port 67 and port 68 -vvv

IP yenileme sürecini tetiklemek:

$ sudo dhclient -d -nw wlp4s0

Ya da dhclient.leases dosyasına bakmak (root ile)

# less /var/lib/dhcp/dhclient.leases

Bazı sistemlerde

# less /var/lib/NetworkManager/internal-d785775d-11eb-47a9-84bf-40f2cf9426bb-wlp4s0.lease

Belki de nmap ile bir DHCPDISCOVER broadcast'ı yapmak

$ sudo nmap --script broadcast-dhcp-discover -e eth0


11.01.2022

Ubuntu yansılarını değiştirmek

Ubuntu güncelleştirmeleri için kullanılan sunuculara yansı (mirror) deniyor. Dünya üzerinde, hatta Türkiye'de bile bir sürü yansı var. Bunların hepsi her durumda aynı performansı vermiyor. Hatta bazen erişimlerle ilgili hatalar yaşanabiliyor. Bu durumda değiştirmek gerekebiliyor.

Değiştirme yöntemlerinden biri apt-mirror-updater. Ama bu apt ile değil, pip ile yükleniyor. Yüklü değilse önce pip'i yüklemek gerek:

$ sudo apt install python3-pip

ardından pip ile hedef paketimiz apt-mirror-updater'ı yüklemek gerek

$ sudo pip3 install apt-mirror-updater

Bu paketle birlikte apt-mirror-updater'in aşağıdaki parametrelerine sahip oluyoruz:

apt-mirror-updater -l  # --list-mirrors; yansıları listele
apt-mirror-updater -a  # --auto-change-mirror; otomatik değiştir
apt-mirror-updater -b  # --find-best-mirror; en iyiyi bul
apt-mirror-updater -c  # --change-mirror=MIRROR_URL; verileni seç
apt-mirror-updater -u  # --update (apt update'i kullan ve başarılı sonuç elde edene kadar ara)

Başka bir alternatif de yine pip ile kurulabilen apt-select:

$ sudo pip3 install apt-select

Bununla ülke bazlı bir seçim yapılabilir:

$ sudo apt-select --country TR

Ya da ülkedeki en iyi 3 tanesi seçilebilir:

$ sudo apt-select --country TR -t 3 --choose

---

[1] https://askubuntu.com/questions/1093451/how-to-switch-apt-mirror-from-the-commandline

Ubuntu'yu yükseltmek

Ubuntu'nun normal ve LTS (Long Term Support) olarak iki farklı yayını (release) var. Normal için yılda 2 kez güncelleme yayınlanıyor. LTS ise daha uzun süre desteğe sahip. Bu yayındaki paketler için de normal yayında olduğu gibi güncellemeler geliyor ama dağıtım (distro) güncellemesi 2 yılda bir. Her ikisi için de yükseltme süreci aynı.

İlk iş mevcut depolarda paket güncelleştirmeleri var mı yok mu bakmak:

$ sudo apt update && sudo apt dist-upgrade

Bu adımda normalde dist-upgrade yerine sadece upgrade kullanırdım. İkisinin farkı şöyle açıklanmış; upgrade sadece var olan paketleri yenileri ile değiştirir. Bağımlılık çakışmalarını (dependency conflict) çözmek için ekranda sorular sorar. dist-upgrade ise bağımlılık çakışmalarını yükseltmekten yana çözer, kalkması gereken paketleri kaldırır, yenileriyle değiştirir vs.

Bu aşamadan sonra sistem bir yeniden başlatmaya ihtiyaç duyabilir. 

$  cat /var/run/reboot-required
*** System restart required ***

ile bakıp gerekiyorsa bir yeniden başlatma yapmamız gerek.

Dağıtım güncellemesini komut satırından yapmak için update-manager-core paketini kurmalıyız. Bazı kaynaklarda ubuntu-release-upgrader-core paketi de önerilmiş, ama gerekli olduğunu görmedim.

$ sudo apt install update-manager-core

Sistemimiz LTS ise normal yayın güncelleştirmelerini almayacaktır. Bir kontrol edelim:

$ cat /etc/update-manager/release-upgrades |grep Prompt

Buradan dönen değer LTS ise sistemimiz bir sonraki LTS güncelleştirmesini bekliyor demektir. Beklemeyelim, hemen güncelleştirip normal döngüye dönelim dersek ilgili dosyadaki LTS'yi normal (hepsi küçük harf olur) ile değiştirmek gerek.

Bu aşamadan sonra dağıtım güncelleştirmesini başlatalım:

$ sudo do-release-upgrade

Kararlı sürüme geçmeden önce geliştirme aşamasında (development) olan sürüme geçiş yapmayı zorlamak için yukarıdaki  komutu -d parametresi ile çalıştırmak gerek:

$ sudo do-release-upgrade -d

Ubuntu GNOME'da GUI ile güncelleştirmelerin kontrolü

$ update-manager -c

ile yapılabilir. Ayrıca yeni yayın geldiğinde bunu bildiren grafik arayüzü tekrar göstermek istersek

$ /usr/lib/ubuntu-release-upgrader/check-new-release-gtk

Fedora'yı yükseltmek

Fedora her yıl 2 kez yeni sürüm çıkartıyor. Birisi Nisan gibi yılın ilk yarısında, ikincisi de Ekim gibi yılın ikinci yarısında. Ocak 2022 itibariyle güncel sürüm 35. Nisan gibi 36'nın çıkması bekleniyor.

Tümü komut satırından gerçekleşecek bir yükseltme için öncelikle mevcut paketlerimi güncel sürümlerine yükseltmem öneriliyor:

$ sudo dnf update -y

Bu adımda yeni çekirdek kurulumu yapıldıysa sistemi bir kez yeniden başlatmak gerek. Kurulmadıysa bir sonraki adımda sistem yükseltmesi için ihtiyaç duyulan dnf eklentisini kurmam gerek:

$ sudo dnf install dnf-plugin-system-upgrade

Şu anda amacımız sürüm 36'ya yükseltmek olduğu için aşağıda releasever=36 yazacağız ama daha sonraki yükseltmelerde bu daha yeni sürümler de olabilir.

$ sudo dnf system-upgrade download --refresh --releasever=36

Buradaki --refresh parametresinin amacı, en son update yaptıktan sonra depolara bir kez daha bakıp yeni güncellenmiş paket var mı yok mu, kontrol etmek. Bu komut duruma göre 1 GB'tan daha fazla verinin indirilmesini gerektireceği için uzun sürecektir. İndirme sırasında, yeni yüklenmekte olan sürüme ait deponun GPG anahtarını doğrulamanız istenecek. GPG Fedora yüklemesini yaptığımız DVD/USB imajı Fedora'nın sitesinden indirildiyse ve çok büyük bir kumpasın içinde değilsek bu zaten doğru anahtar olacaktır ama yine de bir kontrol etmek için https://getfedora.org/security/ adresine girip bakabilir, yeni sürüme ait anahtarı ekranda yazan ile karşılaştırabiliriz. Benzer şekilde rpmfusion deposu kuruluysa bu depoların da (free ve non-free) GPG anahtlarını https://rpmfusion.org/keys adresinden doğrulayabiliriz.

İndirme tamamlandıktan sonra ekranda bir sonraki adımda çalıştırılması gereken adımlar yazacak:

$ sudo dnf system-upgrade reboot

Bu adımda az önce indirilen paketlerin tümünün kurulması gerçekleşecek. Fedora eğer grub menüsünde ilk sırada değilse başında durum açılmasını sağlamak ya da belki grub'da geçici bir süre varsayılan yapmak gerekebilir. Tüm kurumlum işlemleri tamamlandıktan sonra, hiç ciddi bir sorunla karşılaşmadım, umuyorum ki normal açılacak. Sonra kısa bir temizlik yapmak iyi olabilir:

$ sudo dnf system-upgrade clean

$ sudo dnf clean packages


snap

Fedora'nın flatpak'ine karşı Ubuntu'unun snap'i. Elbette bir tek bu iki dağıtımda değil, başka dağıtımlarda da kullanılıyor, ikisi de. Wikipedia'ya göre önce Flatpak yayınlanmış, sonra snap. Flatpak'e girdikten sonra snap'e de bir giriş yapayım.

Varsayılan olarak kurulu geliyor, gelmiyorsa

$ sudo apt install snapd

ile kurulabilir. Kurduktan sonra bir paket aratmak için find komutu kullanılır:

$ snap find spotify

ya da kurulu olan paketleri görmek için

$ snap list

bir paket ismi ile de listeleme yapılabilir

$ snap list spotify

Kurmak içinse 

$ snap install spotify

Kurulu snap paketleri için güncellemeleri görmek için

$ snap refresh --list

Bir paketi (örneğin spotify) güncellemek için

$ snap refresh spotify

Tüm güncellemeleri kurmak için ise

$ snap refresh

Snap logları journalctl ile kaydediliyor. Görmek için 

$ journalctl -u snapd

Snap ile kurulan spotify şöyle bir konumdan çalışır:

/snap/spotify/56/usr/share/spotify/spotify