13 puan yazan GN⁺ 2023-06-28 | 5 yorum | WhatsApp'ta paylaş
  • Yalnızca Terminal ile uyku modu, pano, Finder, Spotlight ve güncellemeler gibi macOS’e özgü özellikler yönetilebilir; bu da GUI’deki tekrarlayan işleri azaltabilir
  • caffeinate, pmset, taskpolicy; uyku modunu engelleme, güç durumunu kontrol etme ve süreç çalıştırma önceliğini ayarlama gibi sistem davranışı üzerinde doğrudan etkili olur
  • pbcopy, pbpaste, open, screencapture, say kullanıldığında pano, dosya açma, ekran görüntüsü ve sesli çıktı gibi günlük işler betiklere kolayca eklenebilir
  • sips, textutil, mdfind, mdls; görüntü ve belge dönüştürme, Spotlight tabanlı arama ve meta veri kontrolünü otomatikleştiren dosya işleme araçları olarak kullanılabilir
  • networkQuality, networksetup, softwareupdate, system_profiler; ağ kalitesi, Wi‑Fi/DNS, OS güncellemeleri ve donanım/yazılım bilgilerini hızlıca denetlemeyi sağlar

macOS’e Özgü Komutların Kapsamı

  • macOS, standart Unix araçlarının yanı sıra işletim sistemi özelliklerine erişen özel komut satırı araçları da içerir
  • Her komutun ayrıntılı kullanımını man <command> ile görebilirsiniz
  • Referans ortam macOS Sonoma’dır

Güç, Uyku Modu ve Süreç Kontrolü

  • caffeinate - Mac’in Uykuya Geçmesini Engelleme

    • caffeinate bayrak veya argüman olmadan çalıştırıldığında, komut çalıştığı sürece Mac uyku durumuna geçmez
    • caffeinate -u -t <seconds>, belirtilen saniye boyunca uyku engelleme uygular
    • -d bayrağı eklenirse ekranın uykuya geçmesi de engellenir
    • -w <pid> ile mevcut bir süreç belirtilirse, o süreç sonlandığında caffeinate de biter
    • caffeinate <command>, verilen komutu yeni bir süreç olarak başlatır ve o süreç bitene kadar uyku modunu engeller
  • pmset - Güç Yönetimi Durumunu Görüntüleme ve Kontrol Etme

    • pmset -g, kullanılabilir güç ayarı bilgilerini çıktılar
    • pmset -g assertions, diğer süreçlerin oluşturduğu güçle ilgili assertion’ları gösterir; bu da Mac’in uyumasını engelleyen süreci bulmak için yararlıdır
    • pmset -g thermlog, throttling uygulanan süreç bilgilerini gösterir; benchmark çalıştırırken faydalı olabilir
    • pmset displaysleepnow, tüm sistemi uyutmadan yalnızca ekranı hemen uyku moduna geçirir
    • pmset sleepnow, tüm sistemi hemen uyku moduna geçirir
  • taskpolicy - Süreç Zamanlamasını Kontrol Etme

    • taskpolicy -b <command>, verilen komutu arka planda çalıştırır; Apple silicon Mac’lerde yalnızca verimlilik çekirdeklerinde çalışır
    • taskpolicy -b -p <pid>, mevcut bir süreci arka plan çalışmasına düşürür
    • taskpolicy -B -p <pid>, belirtilen sürecin arka plan çalıştırma durumunu kaldırır
      • Apple silicon Mac’lerde ardından verimlilik veya performans çekirdeklerinde çalışabilir
      • Bu davranış yalnızca sonradan arka plana düşürülen süreçler için geçerlidir; baştan arka planda başlatılan süreçlere uygulanmaz
    • taskpolicy -s <command>, verilen komutu askıya alınmış durumda başlatır; böylece başlangıç anında debugger bağlanabilir

Pano, Uygulama Açma, Ekran Görüntüsü ve Sesli Çıktı

  • pbcopy, pbpaste - Sistem Panosunu Kullanma

    • <command> | pbcopy, komut çıktısını panoya kopyalar
    • pbpaste, pano içeriğini standart çıktıya gönderir
  • open - Dosya ve Uygulama Açma

    • open -a <app> <file>, belirtilen dosyayı belirli bir uygulamayla açar
    • -g bayrağı eklenirse, mevcut uygulamanın odağını koruyarak dosyayı arka planda açar
    • open ., mevcut dizini yeni bir Finder penceresinde açar
    • open -R <file>, belirtilen dosyayı yeni bir Finder penceresinde gösterir
  • screencapture - Ekran Görüntüsü Alma

    • screencapture -c, ekran görüntüsü alır ve panoya kopyalar
    • screencapture <file>, ekran görüntüsünü belirtilen dosyaya kaydeder
    • -T <seconds> bayrağı eklenirse, belirtilen saniye kadar bekledikten sonra çekim yapar
  • say - Metni Sese Dönüştürme

    • say <message>, verilen mesajı sesli olarak okur
    • say -f input.txt -o output.aiff, belirtilen metin dosyasından sesli kitap oluşturur

Görüntü, Belge, Arama ve Meta Veri

  • sips - Görüntü İşleme

    • sips -z <height> <width> <image>, mevcut en-boy oranını yok sayarak görüntüyü belirtilen boyuta yeniden ölçeklendirir
    • sips -Z <size> <image>, en-boy oranını koruyarak en uzun kenarı belirtilen boyuta getirir
    • sips -c <height> <width> <image>, orijinal görüntünün merkezini baz alarak belirtilen boyutta crop uygular
    • sips -r <degrees> <image>, görüntüyü belirtilen açı kadar döndürür
    • Varsayılan davranış, giriş görüntüsünün üzerine yıkıcı biçimde yazmak olduğundan farklı bir çıktı yolu gerekiyorsa -o bayrağı kullanılmalıdır
    • Çıktı dosyası, giriş görüntüsüyle aynı dosya uzantısına sahip olmalıdır
  • textutil - Belge Dosyası Dönüştürme

    • textutil, dosyaları Microsoft Word, düz metin, rich text ve HTML formatları arasında dönüştürebilir
    • textutil -convert html journal.doc, journal.doc dosyasını journal.html dosyasına dönüştürür
    • -convert için kullanılabilecek değerler txt, html, rtf, rtfd, doc, docx’tir
  • mdfind, mdls - Spotlight Araması ve Meta Veri

    • mdfind <query>, verilen sorguyla Spotlight anahtar kelime araması yapar
    • mdfind kMDItemAppStoreHasReceipt=1, Mac App Store’dan yüklenen tüm uygulamaları bulur
    • mdfind -name <name>, belirtilen adla eşleşen tüm dosyaları arar
    • -onlyin <dir> bayrağıyla arama kapsamı belirli bir dizinle sınırlandırılabilir
    • mdls <file-path>, belirtilen dosyaya bağlı tüm Spotlight meta verilerini çıktılar

Ağ, Güncellemeler ve Sistem Bilgisi

  • networkQuality - İnternet Hızını Ölçme

    • networkQuality, Mac üzerinde internet hız testi çalıştırır
    • -v bayrağı eklenirse daha ayrıntılı bilgi görülebilir
    • -I bayrağı, testi belirli bir ağ arayüzünde çalıştırır
  • networksetup - Ağ Ayarlarını Görüntüleme ve Yapılandırma

    • networksetup -listnetworkserviceorder, kullanılabilir ağ servislerinin listesini çıktılar
    • networksetup -getinfo <networkservice>, belirtilen ağ servisinin bilgilerini gösterir
    • networksetup -getdnsservers <networkservice>, belirtilen ağ servisinin DNS sunucularını çıktılar
    • networksetup -setairportnetwork <device> <network> [password], belirtilen Wi‑Fi ağına bağlanır
    • Çoğu durumda <device> argümanı "en0" olur
  • softwareupdate - OS Güncellemelerini Yönetme

    • softwareupdate --list, kullanılabilir yazılım güncellemelerini çıktılar
    • sudo softwareupdate -ia, kullanılabilir tüm güncellemeleri kurar
    • softwareupdate --fetch-full-installer --full-installer-version <version>, belirtilen macOS sürümünün tam yükleyicisini /Applications dizinine indirmeye çalışır
  • system_profiler - Sistem Bilgisi Sorgulama

    • system_profiler, varsayılan olarak kullanılabilir tüm sistem bilgilerini çıktılar ve çıktı genellikle oldukça büyüktür
    • system_profiler <datatype>, yalnızca belirtilen alt sistem bilgisini çıktılar
    • system_profiler -listDataTypes, bilgi alınabilecek tüm alt sistemlerin listesini gösterir
    • Yararlı veri türleri şunlardır
      • system_profiler SPHardwareDataType: mevcut Mac’in donanım özetini, model adını ve seri numarasını çıktılar
      • system_profiler SPSoftwareDataType: mevcut Mac’in yazılım özetini ve tam macOS sürüm numarasını çıktılar
      • system_profiler SPPowerDataType: mevcut AC güç miktarı ve pil döngü sayısı dahil olmak üzere güç ve pil bilgilerini çıktılar
      • system_profiler SPDeveloperToolsDataType: şu anda etkin Xcode geliştirme araçlarını ve SDK sürümlerini çıktılar

5 yorum

 
dansepo 2023-07-07

Hayatta işe yarayan gelişmiş MacBook terminal komutları (genel kullanıcılar için)
https://www.youtube.com/watch?v=EhiqpFtmjig

 
xguru 2023-06-28

macOS’un gelişmiş CLI komutları

Aynı yazının özetini ben de 7 ay önce paylaşmıştım, ama buradaki özet daha okunası olmuş.. hüzünlü yüz

 
edunga1 2023-06-28

Özetlediğiniz kadar kısaltılsa da anlamakta zorlanmıyorum; sanırım bu hali daha da iyi olmuş haha

 
botplaysdice 2023-06-28

Hayır değil...... haha

 
GN⁺ 2023-06-28
Hacker News yorumları
  • sips ve iconutil birlikte kullanılırsa üçüncü parti araç olmadan tek bir 1024×1024 PNG’den uygulamalar için .icns dosyası oluşturulabilir
    mkdir MyIcon.iconset ile ikon seti oluşturup, sips -z ile 16/32/128/256/512 boyutları ve @2x dosyaları üretildikten sonra iconutil -c icns MyIcon.iconset çalıştırmak yeterli
    Bonus olarak ffmpeg -i MyIcon.iconset/icon_256x256.png icon.ico ile .ico da oluşturulabilir
    Ancak sips’in PNG küçültme yöntemi nedeniyle 16px sürümünü doğrudan 1024px’ten oluşturmanın mı yoksa 32px’ten kademeli olarak küçültmenin mi daha iyi olduğu merak konusu

    • Başlangıç dosyası SVG ise cp yerine önce qlmanage kullanılarak 1024×1024 PNG oluşturulabilir
      qlmanage -t -s 1024x1024 -o MyIcon.iconset/Icon1024.png icon.svg
    • Gerçekten iyi görünen küçük ikonlar, özellikle 16×16 ya da 32×32, istiyorsanız küçülttükten sonra elde rötuşlamak netliği artırır
      Yine de macOS sistem ikonlarına bakınca artık bunların elle ayarlanıyor gibi görünmediği söylenmiş
  • Listedekiler arasında özellikle pbcopy ve pbpaste seviliyor
    Sıkıştırılmış JSON ile uğraşırken iTerm’e geçip pbpaste | json_pp | pbcopy çalıştırmak çok kullanışlı; biçimlendirilmiş çıktı doğrudan panoya gidiyor

    • pbpaste | something | pbcopy kalıbı sık kullanıldığından bunu bir shell fonksiyonu yapmak mantıklı
      pbfilter json_pp, pbfilter base64 -d, pbfilter sed 's/this/that/' gibi kullanılabilir
      Argümansız pbfilter çalıştırılırsa panodaki biçimlendirmeyi kaldırıp yalnızca düz metin bırakan bir filtre gibi de davranabilir
      Ancak alias’lar, pipeline’lar ve karmaşık ifadelerle çalışmaz; filtre komutu normal bir komut ya da fonksiyon ve onun argümanları olmalıdır
    • Bu akış, metin problemlerini çözmek için güçlü ve temiz bir yöntem
      Örneğin Windows tarzı kopyala/yapıştırdan kaynaklanan çift boş satırlar alias winlines="sed '/^$/{$!{N;s/\n//;};}'" ve alias pbw="pbpaste | winlines | pbcopy" ile temizlenebilir
      Linux’ta da alias pbcopy='xsel --clipboard --input', alias pbpaste='xsel --clipboard --output' ile macOS’e benzer bir deneyim taklit edilebilir
    • Bunların yalnızca düz metin ve RTF ile çalışması oldukça sinir bozucu
      X11 için xclip[0], Wayland için wl-clipboard[1] var ve başlık ayrıştırma ya da açık MIME türü ayarlama yoluyla ikili dosya biçimlerini de destekliyorlar
      Bu sayede terminalden görsel kopyalayıp tarayıcı veya sohbet istemcisi gibi GUI programlarına yapıştırmak ya da tersini yapmak mümkün oluyor; ayrıca masaüstü otomasyon shell script’lerinde de faydalı
      macOS’te ise osascript ile AppleScript çağırıp set the clipboard to... kullanmak gibi bir dolambaç gerekiyor
      [0] https://github.com/astrand/xclip
      [1] https://github.com/bugaevc/wl-clipboard
    • pbcopy/pbpaste’i telefonla birlikte kullanmak da hoş
      Telefonda metin kopyalayınca bunu Mac komut satırında doğrudan pbpaste ile almak mümkün
    • Pano içeriğini düzenlemek için pbpaste | vipe | pbcopy kullanılıyor
      Buradaki vipe, pipe’ın ortasına bir düzenleyici, genelde vim, ekleyen bir yardımcı araç ve https://joeyh.name/code/moreutils/ adresinde görülebilir
  • Bir komut satırı aracı değil ama Network Link Conditioner da gerçekten çok iyi
    Gecikme, bant genişliği, paket kaybı gibi değerler ekleyerek çok kötü bir ağı simüle edebildiği için testlerde faydalı
    Kamerayı mutlaka açmanızın beklendiği toplantılarda bağlantıyı bilerek berbat hale getirip blok blok görüntü ve robotik ses oluşturduktan sonra herkes videoyu kapatmanızı isteyince “sihirli şekilde” düzeltebilirsiniz

    • Comcast da macOS, BSD ve Linux’ta aynı işi yapıyor; üstelik adı da harika
    • Toxiproxy başka ortamlarda kullanılabilen benzer bir araç; timeout, retry ve paket kaybı gibi kötü koşullarda ağ kodunu test etmeye ve iyileştirmeye yardımcı olmuş
    • Böyle araçların varlığı bilinmiyordu; ayrıca “additional tools for X-Code” paketinin içinde de bilinmeyen başka güzel araçlar var
      https://developer.apple.com/download/all/
    • Linux’ta ağ QoS araçları ile benzer işler çok daha uzman seviyesinde yapılabiliyor
      https://tldp.org/HOWTO/Traffic-Control-HOWTO/components.html
    • NLC, dummynet ve PF(packet filter) için bir GUI arayüzü
      Profiline göre paket gecikmesi ekleyen veya belirli oranda paket düşüren kurallar ayarlıyor
      macOS’te dnctl ve pfctl ile benzer işler, hatta daha fazlası da yapılabiliyor
  • Ses çalma için afplay de mutlaka anılmalı
    Bununla basit bir komut satırı MP3 çaları yapılabilir
    Ayrıca konuşma sentezi için say yardımcı programı da var; TUNE biçimini desteklediği için bir ifadenin tüm melodisini ve zamanlamasını ayarlayıp duyguluymuş gibi duyulmasını sağlayabiliyor
    Apple’ın Speech Synthesis Programming Guide’ı https://josh8.com/blog/img/speech-synthesis.pdf adresinde, ilgili yazı da https://josh8.com/blog/commandline-audio-mac.html adresinde derlenmiş

    • Ne yazık ki TUNE biçimi evrimsel olarak neredeyse çıkmaz bir sokağa yakındı
      Bunu destekleyen son nesil konuşma sentezi, 2007’de eklenen Alex sesiydi ve bunu tekrar görecekmişiz gibi görünmüyor
      Sentezi hassas biçimde kontrol etmek ile doğallık arasında özünde bir gerilim var ve ikincisi çok daha değerli
    • Küçük bir düzeltme olarak, ses listesini görme komutu say -v '?' şeklindedir
  • Verimliliği artırmak istediğimde ya da sunum yaparken masaüstündeki tüm simge ve klasörleri gizliyorum
    defaults write com.apple.finder CreateDesktop 0 sonrasında killall Finder çalıştırılırsa gizleniyor, değeri 1 yapınca yeniden görünüyor
    Bunu açıp kapatan bir bash takma adım da var; gist burada: https://gist.github.com/berndverst/6f58c0d6aedddb6c06c23e57d...

    • Yeni bir Mac kurarken ilk yaptıklarımdan biri masaüstünü kapatmak oluyor
      Yine de ~/Desktop klasörünü sık kullanıyorum; Dock’a koyduğum iki klasörden biri o, diğeri de ~/Downloads
      Öte yandan macOS masaüstüne Stacks gelmesi harikaydı; masaüstü dosyalarla karmakarışık olan herkese bunu hep gösteriyorum
    • Bu yöntemi 10 yıldan uzun süredir kullanıyorum ve öğretmenken buna bir tuş kombinasyonu da atamıştım
      Sunum sırasında gerekebilecek başka ayarlarla birlikte gruplamak iyi olur
  • Güzel bir liste; bir de hidutil var
    https://developer.apple.com/library/archive/technotes/tn2450...
    Örneğin PC klavyedeki, macOS’ta neredeyse işe yaramayan Ins tuşunu PC Execute gibi bir tuşa çevirip sonra Keyboard Maestro ile yakalayarak yeniden eşleyebilirsiniz

    • hidutil property --set '{"UserKeyMapping":[{"HIDKeyboardModifierMappingSrc":0x700000064,"HIDKeyboardModifierMappingDst":0x700000035}]}' ile Avrupa tipi klavyedeki sol üstte bulunan paragraph tuşunu daha kullanışlı bir backtick tuşuna çevirebilirsiniz
    • Bu tür eşlemeleri oluşturan iyi bir üretici var
      https://hidutil-generator.netlify.app/
    • hidutil ile hdiutil karıştırılmamalı
      Örneğin hdiutil detach /Volumes/some-usb-drive ile bir USB sürücüsünü ayırabilir ya da hdiutil makehybrid -joliet -o foo.iso ./srcfolder/ ile ISO oluşturabilirsiniz
  • Birkaç yıl önce büyük bir veri yığınında bir şey arayan ve tamamlanınca haber veren bir betik yazarken sonuna say komutunu koymuştum
    Bunu unutup uyuyakaldım; birkaç saat sonra ev ofisinden, bir “davetsiz misafir”in suç ortağıyla konuşuyormuş gibi gelen bir sesle irkilerek uyandım ve ne olduğunu anlayınca ancak o zaman ciddi biçimde rahatladım

    • Bazı bildirimlerde Pushover kullandığım için, bir zamanlar başlık ve isteğe bağlı gövde alan küçük bir push adlı bash betiği yapmıştım
      ./longRunningCommand && push "Task Done" "Here is a body" gibi kullanmak güzeldi; bilgisayar başındayken tamamlandığını haber vermek için sadece ses çıkaran bir beep betiğiyle de birlikte kullanıyordum
    • Bu amaç için StarCraft’taki research complete örneğini kullanmayı seviyorum
    • Benzer şekilde, sisteme sızdıktan sonra bir Mac’te say komutunu çalıştıran bir Metasploit modülü de var
      Bunu gerçekten kullananı görmedim ama bir gün “müşteri dizüstü bilgisayarında say çağıran bir msf modülü kullandım” diye başlayan bir Twitter zinciri görmeyi bekliyorum
    • Birden fazla terminal sekmesi açıkken, uzun süren bir komutu çalıştırıp başka bir sekmeye geçtikten sonra onu unutmak çok kolay
      Bu yüzden iş 5 saniyeden uzun sürdüyse afplay ile bip sesi çalan bir fish komut tamamlama betiği ekledim
      “Tam unutacak kadar uzun” süren işlerde yeniden odaklanmaya yardımcı oluyor
    • Sesi Arnold’un sesiyle değiştirebilseydim buna epey para verirdim
  • macOS’un diskutil komut satırı yardımcı programı da övgüyü hak ediyor
    Bugün diskin bazı dilimleriyle ilgili bir sorun yaşadım; macOS’un grafiksel Disk Utility aracı bunu düzeltemedi ve bu, daha önce Asahi Linux denememden kalan bir kalıntıydı
    diskutil CLI ile bunu çözmenin bir yolu olmalı diye düşündüm ve çözümü şu başlıkta buldum
    https://apple.stackexchange.com/questions/411544/cant-reclai...
    Artık tüm diski tekrar macOS içinde kullanabiliyorum

    • diskutil harika ama Disk Utility.app’in bu hale gelmesi içler acısı
      APFS geçişinden sonra doğru düzgün bakım görmedi ve diskutilin yapabildiği şeylerde GUI uygulaması bazen tamamen başarısız oluyor
      Arayüz yeniden tasarlanmadan önce, başarısız olsa bile nedenini söyleyen sağlam bir araçtı; şimdi ise ancak flaş sürücü biçimlendiren, bebeklere yönelik LEGO Duplo benzeri bir arayüze dönüştü
  • Komutu veya parametreleri hatırlamadığınızda um da bakmaya değer
    https://github.com/promptops/cli
    Örneğin um prevent my mac from sleeping for 30m yazarsanız caffeinate -u -t 1800 gibi bir çıktı verir

  • open her zaman kullandığım basit ve iyi bir komut
    alias tab='open . -a iterm', alias phpstorm='open -a "PhpStorm"', alias smerge='open -a "Sublime Merge"' gibi tanımlayıp, her uygulamanın Open/Recents iletişim kutularından daha sık kullanıyorum

    • Bahsedilmemiş bayraklardan biri de -n
      Aynı uygulamayı birden fazla instance olarak çalıştırmayı sağlar ve eskiden kişisel olarak en sık kullandığım yardımcı araçlardan biriydi
      Bugünlerde bu kadar ciddi tasarım sorunu olan uygulamalar azaldığı için kullanım sıklığım da düştü
    • open -a ... için sekme ile otomatik tamamlama, Apple tamamlama tanımını güncellemediği için yıllardır korkunç hissettiriyor
      Geçici çözümü şu Stack Overflow yanıtına yazdım: https://stackoverflow.com/a/63097652
    • Sublime Text ve Sublime Merge varsayılan olarak CLI yardımcı araçlarıyla birlikte geliyor ve ek işlevler de sunuyor
      /Applications/Sublime Merge.app/Contents/SharedSupport/bin/smerge ve /Applications/Sublime Text.app/Contents/SharedSupport/bin/subl kullanılabilir
    • Dosyaları rofi ile açmak için bir betik yazdım
      https://github.com/davatorium/rofi
      Görünümü https://i.imgur.com/Hm9TGeV.jpg gibi
      VS Code terminalinde o takma adını kullanırsanız bulunduğunuz konumdan açılır; oradan dosyayı bulup editörde açabilirsiniz
    • Terminalin geçerli dizininden yeni bir Finder penceresi açmak için alias finder='open .' kullanabilirsiniz