10.01.2019

Linux'a Powershell Core kurulumu

Powershell bir süredir açık kaynak kodlu. Aslında açık kaynak kodlu haline Powershell Core deniyor ve github'da kaynak kodları mevcut. Powershell ile aralarında ufak farklılıklar var.

Denemek için Fedora'ya powershell kurmaya karar verdim. Microsoft'un Poweshell bloğu sayfasında linux için kurulum adımlarına rastladım. Gariptir, Ubuntu 14.04 ve 16.04 için çok iyi tarif edilmiş bir kurulum yönergesi mevcutken Fedora için yok. CentOS var, o da yum tabanlı, ben de benzer bir yol izledim. Öncelikle yeni bir depo oluşturmak lazım. Şu adreste depo linki verilmiş. Bunu önce indirdim ve /etc/yum.repos.d altına kopyaladım.
$ curl https://packages.microsoft.com/config/rhel/7/prod.repo > microsoft.repo
$ sudo cp microsoft.repo /etc/yum.repos.d
Sonrasında depoları güncelleyerek kurulum komutunu verdim.  Kurulacak paketin adı powershell.
$ sudo dnf check-update
$ sudo dnf install powershell
50 MB gibi bir boyutu var, 6.1.1 sürmünün. Kurulum tamamlandıktan sonra
$ pwsh
yazarak powershell'e geçiş yaptım. İlk denememi aşağıdaki gibi yaptım.


Dünya garip bir dünya oldu: Microsoft loves Linux!

---
düzeltme (10.01.2019):
Github'da Fedora için kurulum adımları verilmiş. Yakışıklı yönerge şöyl:

# Register the Microsoft signature key
sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc

# Register the Microsoft RedHat repository
curl https://packages.microsoft.com/config/rhel/7/prod.repo | sudo tee /etc/yum.repos.d/microsoft.repo

# Update the list of products
sudo dnf update

# Install a system component
sudo dnf install compat-openssl10

# Install PowerShell
sudo dnf install -y powershell

# Start PowerShell
pwsh

9.01.2019

Linux terminali özelleştirmek

Linux'ta vakit geçirdikçe Windows'un komut satırı pek bi sıradan gözüküyor insanın gözüne. Ama buna çare yok (ya da çare cmder!)


Yukarıda Fedora ile gelen standart terminal penceresi. Renklendirme yok, prompt standart. Biraz kendime göre özelleştirmeye çalıştım. Bunun sonuçlarında da şöyle bir sonuca ulaştım:


Biraz renklendirilmiş, saat ve geçmiş bilgisi eklenmiş. Bu sonuca nasıl vardığımı kısaca anlatayım.

Öncelikle prompt satırında "[" ve "]" arasında yazılmış 3 alan var. Birinci alan varsayılan haliyle

[metin@ozm-fed ~]

kısmı. Burada kullanıcı adı ve bilgisayar adını, sonrasında da bulunduğumuz klasör adını görüyoruz. Bunu kodlamak için

[\u@\h \w]

kullandım.

İkinci kısım ise saati gösteriyor. Bunun için de

[\A]

kullandım.

Üçüncü kısım ise komut geçmişindeki mevcut indeksi gösteriyor. Bunun içinse

[\h]

kullandım. Son prompt karakteri olarak \$ aşikar. Tüm bunları birleştirince şöyle bir dizi çıkıyor:

"[\u@\h \w] [\A] [\h] \$"

Ancak bu renklendirilmemiş hali. Renklendirme işi ise başka bir dünya. Renk kodları vermek için escape karakteri kullanmak gerek. Escape karakteri başlangıcı \[ ile, bitişi ise \] ile belirtiliyor. Renk kodları ise \e[ ile başlayan ve m ile bitecek şekilde belirtiliyor. Garip ama böyle.

Renk kodları şöyle:
  • 30: Siyah
  • 31: Kırmızı
  • 32: Yeşil
  • 33: Sarı
  • 34: Mavi
  • 35: Mor
  • 36: Camgöbeği
  • 37: Beyaz
Ayrıca bir de biçem kodları var:

  • 0: Normal metin
  • 1: Kalın veya ince, terminale göre değişir
  • 4: Altı çizili
Fon rengi kodları da şöyle:
  • 40: Siyah fon
  • 41: Kırmızı fon
  • 42: Yeşil fon
  • 43: Sarı fon
  • 44: Mavi fon
  • 45: Mor fon
  • 46: Camgöbeği fon
  • 47: Beyaz fon

Nihayet sarı bir kullanıcı adı yazmak için şu kodlama gerek:

\[\e[0;33m\]\h

Sarı ile vurgulanan alan sadece \h ile belirtilen kullanıcı adını düz metin (0) ve sarı renk (33) ile yazmak içindi. Eğer bir de arka fon rengi belirtmek istiyorsak 0'dan önce de onu yazmamız gerekecekti, yine noktalı virgille ayırarak. Aşağıda örneği var. Kullanıcı adını sarı ile yazdıktan sonra tekrar @ karakterini varsayılan renkte yazması için sıfırlamak gerek. Bunun için de

\[\e[0m\]

kullanılır. Bu şekilde tüm promptu oluşturmak için şöyle bir kodlama gerekti:

[\[\e[0;33m\]\u\[\e[0m\]@\[\e[0;31m\]\h\[\e[0m\] \w] [\[\e[0;34m\]\A\[\e[0m\]] [\[\e[0;32m\]h:\!\[\e[0m\]] \[\e[43;1;37m\]$\[\e[0m\]

Şu renk kodlamasıyla ayrılan bölüm prompt karakterini sarı fon üzerine beyaz olarak yazmak içindi.

Bu karakter dizisini PS1 adlı bir ortam değişkenine atarak etkin kılabiliriz. Bunu her yeni terminal penceresinde kullanabilmek için ise profil klasörümüzdeki .bashrc dosyasının içine

PS1="[\[\e[0;33m\]\u\[\e[0m\]@\[\e[0;31m\]\h\[\e[0m\] \w] [\[\e[0;34m\]\A\[\e[0m\]] [\[\e[0;32m\]h:\!\[\e[0m\]] \[\e[43;1;33m\]\$\[\e[0m\] "

gibi bir satır ekleyerek yapabiliriz.

ls komutunun renkli çıktı üretmesi için .bashrc dosyasının içine bir alias eklenebilir:

export ls='ls --color=ALWAYS'

Burada, Manjaro için ls= den sonra gelen kısmın tek tırnak içinde olmasına, color'dan sonra iki nokta üstüste değil eşittir kullanılmasına ve ALWAYS'sin büyük harflerle yazılmasına dikkat etmek gerek. Fedora için ise always küçük harflerle yazılmalı.

Ya da ls komutunda gösterilen tarih ve saat biçimini değiştirmek için Manjaro için yine .bashrc'de aşağıdaki gibi bir ortam değişkeni tanımlanabilir:

export SYSTEM_TIME=long-iso

Fedora için ise ls komutu parametresi --time-style=long-iso kullanılabilir. Yukarıdakiyle birleştirildiğinde toplu alias şöyle olabilir:

alias ls='ls --color=always --time-style=long-iso'

2021-12-20 düzenleme: Aşağıdaki bash değişkenlerini tanımlayarak işimizi kolaylaştırabiliriz.

Sari_Siyah = "\[\e[0;33m\]"
Kirmizi_Siyah = "\[\e[0;31m\]"
Mavi_Siyah = "\[\e[0;34m\]"
Yesil_Siyah = "\[\e[0;32m\]"
Sari_Sari = "\[\e[43;1;37m\]"
Sifirla = "\[\e[0m\]"
Kullanici = "${Sari_Siyah}\u${Sifirla}"
Makine = "${Kirmizi_Siyah}\h${Sifirla}"
Konum = "${Kirmizi_Siyah}\w${Sifirla}"
Saat = "${Mavi_Siyah}\A${Sifirla}"
Gecmis = "${Yesil_Siyah}h:\!${Sifirla}"
Prmpt = "${Sari_Sari}\$${Sifirla}"
PS1 = "[${Kullanici}@${Makine} ${Konum}] [${Saat}] [${Gecmis}] ${Prmpt}"


Ya da direk hazır kodlanmışı alıp kopyalayabiliriz.