13 poin oleh GN⁺ 2023-06-28 | 5 komentar | Bagikan ke WhatsApp
  • Hanya dengan Terminal, Anda bisa menangani fitur khas macOS seperti mode tidur, clipboard, Finder, Spotlight, dan pembaruan, sehingga pekerjaan berulang di GUI bisa dikurangi
  • caffeinate, pmset, taskpolicy secara langsung memengaruhi perilaku sistem, seperti mencegah tidur, memeriksa status daya, dan menyesuaikan prioritas eksekusi proses
  • Dengan pbcopy, pbpaste, open, screencapture, say, tugas sehari-hari seperti clipboard, membuka file, tangkapan layar, dan keluaran suara jadi mudah dimasukkan ke dalam skrip
  • sips, textutil, mdfind, mdls digunakan sebagai alat pemrosesan file untuk mengotomatiskan konversi gambar dan dokumen, pencarian berbasis Spotlight, serta pemeriksaan metadata
  • networkQuality, networksetup, softwareupdate, system_profiler membantu memeriksa dengan cepat kualitas jaringan, Wi‑Fi/DNS, pembaruan OS, serta informasi perangkat keras dan perangkat lunak

Cakupan perintah khusus macOS

  • Selain alat Unix standar, macOS juga menyertakan alat command line khusus untuk mengakses fungsi sistem operasi
  • Cara penggunaan rinci tiap perintah dapat dilihat dengan man <command>
  • Lingkungan acuan yang digunakan adalah macOS Sonoma

Daya, mode tidur, dan kontrol proses

  • caffeinate - Mencegah Mac masuk tidur

    • Menjalankan caffeinate tanpa flag atau argumen akan membuat Mac tidak masuk ke mode tidur selama perintah berjalan
    • caffeinate -u -t <seconds> menerapkan pencegahan tidur selama jumlah detik yang ditentukan
    • Menambahkan flag -d juga mencegah layar masuk tidur
    • Dengan -w <pid>, Anda dapat menunjuk proses yang sudah ada, dan caffeinate akan berakhir saat proses tersebut selesai
    • caffeinate <command> memulai perintah yang diberikan sebagai proses baru dan mencegah tidur sampai proses itu selesai
  • pmset - Memeriksa dan mengontrol status manajemen daya

    • pmset -g menampilkan informasi pengaturan daya yang tersedia
    • pmset -g assertions menampilkan assertion terkait daya yang dibuat proses lain, berguna untuk mencari proses yang mencegah Mac tidur
    • pmset -g thermlog menampilkan informasi proses yang di-throttle, sehingga bisa dijadikan referensi saat menjalankan benchmark
    • pmset displaysleepnow segera membuat hanya layar masuk mode tidur tanpa menidurkan seluruh sistem
    • pmset sleepnow segera membuat seluruh sistem masuk mode tidur
  • taskpolicy - Mengontrol penjadwalan proses

    • taskpolicy -b <command> menjalankan perintah yang diberikan di latar belakang, dan pada Mac Apple silicon hanya akan berjalan di core efisiensi
    • taskpolicy -b -p <pid> menurunkan proses yang sudah ada ke eksekusi latar belakang
    • taskpolicy -B -p <pid> menghapus status eksekusi latar belakang dari proses yang ditentukan
      • Pada Mac Apple silicon, setelah itu proses dapat berjalan di core efisiensi atau core performa
      • Perilaku ini hanya berlaku untuk proses yang diturunkan ke latar belakang, dan tidak berlaku untuk proses yang sejak awal dimulai di latar belakang
    • taskpolicy -s <command> memulai perintah yang diberikan dalam status ditangguhkan, sehingga debugger dapat dipasang saat awal eksekusi

Clipboard, menjalankan aplikasi, tangkapan layar, dan keluaran suara

  • pbcopy, pbpaste - Menggunakan clipboard sistem

    • <command> | pbcopy menyalin hasil keluaran perintah ke clipboard
    • pbpaste mengirim isi clipboard ke keluaran standar
  • open - Membuka file dan aplikasi

    • open -a <app> <file> membuka file yang ditentukan dengan aplikasi tertentu
    • Jika menambahkan flag -g, file akan dibuka di latar belakang sambil mempertahankan fokus pada aplikasi saat ini
    • open . membuka direktori saat ini di jendela Finder baru
    • open -R <file> menampilkan file yang ditentukan di jendela Finder baru
  • screencapture - Mengambil tangkapan layar

    • screencapture -c mengambil tangkapan layar dan menyalinnya ke clipboard
    • screencapture <file> menyimpan tangkapan layar ke file yang ditentukan
    • Jika menambahkan flag -T <seconds>, pengambilan dilakukan setelah menunggu selama jumlah detik yang ditentukan
  • say - Teks ke suara

    • say <message> mengeluarkan pesan yang diberikan dalam bentuk suara
    • say -f input.txt -o output.aiff membuat audiobook dari file teks yang ditentukan

Gambar, dokumen, pencarian, dan metadata

  • sips - Manipulasi gambar

    • sips -z <height> <width> <image> mengubah ukuran gambar ke ukuran yang ditentukan dengan mengabaikan rasio aspek yang ada
    • sips -Z <size> <image> menyesuaikan sisi terpanjang ke ukuran yang ditentukan sambil mempertahankan rasio aspek
    • sips -c <height> <width> <image> melakukan crop ke ukuran yang ditentukan berdasarkan pusat gambar asli
    • sips -r <degrees> <image> memutar gambar sebesar sudut yang ditentukan
    • Perilaku default-nya adalah menimpa secara destruktif gambar input, jadi jika membutuhkan jalur keluaran lain gunakan flag -o
    • File keluaran harus memiliki ekstensi file yang sama dengan gambar input
  • textutil - Konversi file dokumen

    • textutil dapat mengonversi file antara format Microsoft Word, teks biasa, rich text, dan HTML
    • textutil -convert html journal.doc mengonversi journal.doc menjadi journal.html
    • Nilai yang dapat digunakan untuk -convert adalah txt, html, rtf, rtfd, doc, docx
  • mdfind, mdls - Pencarian Spotlight dan metadata

    • mdfind <query> menjalankan pencarian kata kunci Spotlight dengan kueri yang diberikan
    • mdfind kMDItemAppStoreHasReceipt=1 menemukan semua aplikasi yang dipasang dari Mac App Store
    • mdfind -name <name> mencari semua file yang cocok dengan nama yang ditentukan
    • Dengan flag -onlyin <dir>, cakupan pencarian dapat dibatasi ke direktori tertentu
    • mdls <file-path> menampilkan semua metadata Spotlight yang terhubung ke file yang ditentukan

Jaringan, pembaruan, dan informasi sistem

  • networkQuality - Mengukur kecepatan internet

    • networkQuality menjalankan uji kecepatan internet di Mac
    • Menambahkan flag -v akan menampilkan informasi yang lebih rinci
    • Flag -I menjalankan pengujian pada antarmuka jaringan tertentu
  • networksetup - Memeriksa dan mengonfigurasi pengaturan jaringan

    • networksetup -listnetworkserviceorder menampilkan daftar layanan jaringan yang tersedia
    • networksetup -getinfo <networkservice> menampilkan informasi layanan jaringan yang ditentukan
    • networksetup -getdnsservers <networkservice> menampilkan server DNS dari layanan jaringan yang ditentukan
    • networksetup -setairportnetwork <device> <network> [password] terhubung ke jaringan Wi‑Fi yang ditentukan
    • Dalam kebanyakan kasus, argumen <device> adalah "en0"
  • softwareupdate - Mengelola pembaruan OS

    • softwareupdate --list menampilkan pembaruan perangkat lunak yang tersedia
    • sudo softwareupdate -ia memasang semua pembaruan yang tersedia
    • softwareupdate --fetch-full-installer --full-installer-version <version> mencoba mengunduh installer penuh untuk versi macOS yang ditentukan ke /Applications
  • system_profiler - Mengambil informasi sistem

    • system_profiler secara default menampilkan semua informasi sistem yang tersedia, dan jumlah keluarannya umumnya sangat banyak
    • system_profiler <datatype> hanya menampilkan informasi subsistem yang ditentukan
    • system_profiler -listDataTypes menampilkan daftar semua subsistem yang informasinya dapat diambil
    • Tipe data yang berguna antara lain
      • system_profiler SPHardwareDataType: menampilkan ringkasan perangkat keras Mac saat ini, nama model, dan nomor seri
      • system_profiler SPSoftwareDataType: menampilkan ringkasan perangkat lunak Mac saat ini dan nomor versi macOS yang tepat
      • system_profiler SPPowerDataType: menampilkan informasi daya dan baterai, termasuk daya AC saat ini dan jumlah siklus baterai
      • system_profiler SPDeveloperToolsDataType: menampilkan alat pengembang Xcode yang sedang aktif dan versi SDK

5 komentar

 
dansepo 2023-07-07

Perintah terminal MacBook tingkat lanjut yang berguna dalam kehidupan (untuk orang awam)
https://www.youtube.com/watch?v=EhiqpFtmjig

 
xguru 2023-06-28

Perintah CLI macOS tingkat lanjut

Saya pernah mengunggah ringkasan tulisan yang sama sekitar 7 bulan lalu, tetapi ringkasan yang ini lebih menarik untuk dibaca.. huhu

 
edunga1 2023-06-28

Saya malah merasa lebih baik begini, mungkin karena meski diringkas sampai sekitar tingkat ringkasan yang Anda buat, tetap tidak sulit untuk dipahami hehe

 
botplaysdice 2023-06-28

Tidak begitu...... hehe

 
GN⁺ 2023-06-28
Opini Hacker News
  • Dengan menggunakan sips dan iconutil bersama, kita bisa membuat file .icns untuk aplikasi dari satu PNG 1024×1024 tanpa alat pihak ketiga
    Buat icon set dengan mkdir MyIcon.iconset, lalu gunakan sips -z untuk menghasilkan ukuran 16/32/128/256/512 serta file @2x, setelah itu jalankan iconutil -c icns MyIcon.iconset
    Sebagai bonus, .ico juga bisa dibuat dengan ffmpeg -i MyIcon.iconset/icon_256x256.png icon.ico
    Namun, karena cara sips mengecilkan PNG, jadi penasaran apakah lebih baik membuat versi 16px langsung dari 1024px, atau menurunkannya bertahap dari 32px

    • Jika file awalnya SVG, alih-alih cp kita bisa memakai qlmanage lebih dulu untuk membuat PNG 1024×1024
      qlmanage -t -s 1024x1024 -o MyIcon.iconset/Icon1024.png icon.svg
    • Jika ingin ikon kecil yang benar-benar enak dilihat, terutama 16×16 atau 32×32, hasilnya akan lebih tajam jika diperkecil lalu dirapikan manual
      Tapi setelah melihat ikon sistem macOS, sepertinya sekarang sudah tidak lagi disesuaikan manual
  • Dari daftar itu, yang paling disukai terutama pbcopy dan pbpaste
    Saat menangani JSON yang terkompres, sangat praktis membuka iTerm lalu menjalankan pbpaste | json_pp | pbcopy, karena output yang sudah dirapikan langsung masuk ke clipboard

    • Karena pola pbpaste | something | pbcopy sering dipakai, rasanya layak dijadikan fungsi shell
      Bisa dipakai seperti pbfilter json_pp, pbfilter base64 -d, pbfilter sed 's/this/that/'
      Menjalankan pbfilter tanpa argumen juga bisa berfungsi sebagai filter untuk menghapus formatting clipboard dan menyisakan teks polos saja
      Tapi ini tidak bisa dipakai untuk alias, pipeline, atau ekspresi yang rumit; perintah filternya harus berupa perintah biasa atau fungsi beserta argumennya
    • Alur ini adalah cara yang kuat dan rapi untuk menyelesaikan masalah teks
      Misalnya, baris kosong ganda yang muncul dari copy/paste ala Windows bisa dibersihkan dengan alias winlines="sed '/^$/{$!{N;s/\n//;};}'" dan alias pbw="pbpaste | winlines | pbcopy"
      Di Linux juga bisa ditiru agar mirip macOS dengan alias pbcopy='xsel --clipboard --input', alias pbpaste='xsel --clipboard --output'
    • Cukup menjengkelkan bahwa ini hanya bekerja untuk teks biasa dan RTF
      Di X11 ada xclip[0], di Wayland ada wl-clipboard[1], dan keduanya juga mendukung format file biner melalui parsing header atau pengaturan tipe MIME eksplisit
      Jadi kita bisa menyalin gambar dari terminal lalu menempelkannya ke program GUI seperti browser atau klien chat, atau sebaliknya, dan ini juga berguna untuk skrip shell otomatisasi desktop
      Di macOS perlu jalan memutar dengan memanggil AppleScript lewat osascript dan memakai set the clipboard to...
      [0] https://github.com/astrand/xclip
      [1] https://github.com/bugaevc/wl-clipboard
    • Memakai pbcopy/pbpaste bersama ponsel juga keren
      Saat menyalin teks di ponsel, kita bisa langsung mengambilnya di command line Mac dengan pbpaste
    • Saat mengedit isi clipboard, digunakan pbpaste | vipe | pbcopy
      Di sini vipe adalah utilitas yang menyisipkan editor, biasanya vim, di tengah pipe, dan bisa dilihat di https://joeyh.name/code/moreutils/
  • Memang bukan alat command line, tapi Network Link Conditioner juga sangat bagus
    Kita bisa mensimulasikan jaringan yang sangat buruk dengan menambahkan latensi, bandwidth, packet loss, dan sebagainya, sehingga berguna untuk pengujian
    Bahkan dalam rapat yang mewajibkan kamera menyala, kita bisa sengaja membuat koneksi berantakan agar video tampak pecah-pecah dan suara seperti robot, lalu setelah semua orang meminta video dimatikan, koneksi bisa “pulih” secara ajaib

    • Comcast juga melakukan hal yang sama di macOS, BSD, dan Linux, dan namanya pun brilian
    • Toxiproxy adalah alat serupa yang bisa dipakai di lingkungan lain, dan membantu menguji serta memperbaiki kode jaringan dalam kondisi buruk seperti timeout, retry, dan packet loss
    • Tidak tahu sebelumnya bahwa alat seperti ini ada, dan di dalam paket “additional tools for X-Code” juga ada lebih banyak alat keren yang belum diketahui
      https://developer.apple.com/download/all/
    • Di Linux, hal serupa juga bisa dilakukan secara sangat canggih dengan alat QoS jaringan
      https://tldp.org/HOWTO/Traffic-Control-HOWTO/components.html
    • NLC adalah antarmuka GUI untuk mengendalikan dummynet dan PF(packet filter)
      Ia menetapkan aturan untuk menyuntikkan latensi paket atau menjatuhkan paket dengan persentase tertentu sesuai profil
      Di macOS, hal serupa—bahkan lebih banyak lagi—bisa dilakukan dengan dnctl dan pfctl
  • afplay untuk memutar audio juga wajib disebut
    Dengan ini, kita bisa membuat pemutar MP3 baris perintah sederhana
    Ada juga utilitas say untuk sintesis suara, yang mendukung format TUNE sehingga melodi dan timing keseluruhan ujaran bisa diatur dan dibuat terdengar seolah punya emosi
    Apple's Speech Synthesis Programming Guide ada di https://josh8.com/blog/img/speech-synthesis.pdf, dan tulisan terkait dirangkum di https://josh8.com/blog/commandline-audio-mac.html

    • Sayangnya, format TUNE nyaris merupakan jalan buntu evolusioner
      Generasi terakhir sintesis suara yang mendukungnya adalah suara Alex yang disertakan pada 2007, dan tampaknya sangat kecil kemungkinan kita akan melihatnya lagi
      Kontrol presisi terhadap sintesis dan kealamian pada dasarnya berada dalam hubungan yang saling tegang, dan yang terakhir jauh lebih bernilai
    • Sedikit koreksi: perintah untuk melihat daftar suara adalah say -v '?'
  • Kalau ingin meningkatkan produktivitas atau saat presentasi, sembunyikan semua ikon dan folder di desktop
    Jalankan defaults write com.apple.finder CreateDesktop 0 lalu killall Finder untuk menyembunyikannya, dan ubah nilainya menjadi 1 agar muncul lagi
    Saya juga membuat alias bash untuk toggle ini, dan gist-nya ada di https://gist.github.com/berndverst/6f58c0d6aedddb6c06c23e57d...

    • Salah satu hal pertama yang saya lakukan saat menyiapkan Mac baru adalah mematikan desktop
      Meski begitu, saya tetap sering memakai ~/Desktop sehingga itu menjadi salah satu dari dua folder yang saya taruh di Dock; satunya lagi adalah ~/Downloads
      Di sisi lain, masuknya Stacks ke desktop macOS adalah hal yang bagus, dan ini fitur yang selalu saya tunjukkan kepada orang yang desktop-nya berantakan penuh file
    • Saya sudah memakai cara ini selama lebih dari 10 tahun, dan saat masih menjadi guru, saya bahkan menugaskannya ke kombinasi tombol
      Bagus kalau digabung dengan pengaturan lain yang mungkin dibutuhkan saat presentasi
  • Daftar yang bagus, dan ada juga hidutil
    https://developer.apple.com/library/archive/technotes/tn2450...
    Misalnya, di keyboard PC Anda bisa mengubah tombol Ins, yang di macOS hampir tidak berguna, menjadi tombol seperti PC Execute, lalu menangkapnya di Keyboard Maestro untuk dipetakan ulang

    • Dengan hidutil property --set '{"UserKeyMapping":[{"HIDKeyboardModifierMappingSrc":0x700000064,"HIDKeyboardModifierMappingDst":0x700000035}]}', Anda bisa mengubah tombol paragraph di kiri atas pada keyboard Eropa menjadi backtick yang lebih berguna
    • Ada generator yang lumayan bagus untuk membuat pemetaan seperti ini
      https://hidutil-generator.netlify.app/
    • hidutil dan hdiutil jangan sampai tertukar
      Misalnya, Anda bisa melepas drive USB dengan hdiutil detach /Volumes/some-usb-drive, atau membuat ISO dengan hdiutil makehybrid -joliet -o foo.iso ./srcfolder/
  • Beberapa tahun lalu saya pernah membuat skrip yang mencari sesuatu dalam bongkahan data besar dan memberi tahu saat selesai, lalu saya menaruh perintah say di bagian akhirnya
    Saya lupa soal itu lalu tertidur, dan beberapa jam kemudian saya terbangun kaget oleh suara dari kantor rumah yang terdengar seperti “penyusup” sedang berbicara kepada kaki tangannya; saya baru benar-benar lega setelah sadar apa yang terjadi

    • Saya memakai Pushover untuk beberapa notifikasi, jadi dulu saya membuat skrip bash kecil bernama push yang menerima judul dan isi opsional
      Enak dipakai seperti ./longRunningCommand && push "Task Done" "Here is a body", dan juga saya gunakan bersama skrip beep yang hanya membunyikan suara saat selesai ketika saya sedang berada di depan komputer
    • Untuk keperluan seperti ini, saya suka memakai sampel research complete dari StarCraft
    • Mirip dengan itu, ada juga modul Metasploit yang membuat Mac yang sudah ditembus menjalankan perintah say
      Saya belum pernah melihatnya dipakai sungguhan, tapi saya menantikan suatu hari ada thread Twitter yang dimulai dengan “Saya memakai modul msf yang memanggil say di laptop pelanggan”
    • Jika Anda membuka banyak tab terminal, mudah sekali menjalankan perintah yang lama lalu pindah ke tab lain dan melupakannya
      Karena itu saya menambahkan skrip penyelesaian perintah fish yang membunyikan bip lewat afplay jika tugasnya memakan waktu lebih dari 5 detik
      Ini membantu saya kembali fokus pada tugas yang “cukup lama untuk terlupakan”
    • Kalau suaranya bisa diubah menjadi suara Arnold, saya rela membayar cukup mahal
  • Utilitas baris perintah diskutil di macOS juga layak dipuji
    Hari ini saya mengalami masalah dengan sebagian slice disk, dan Disk Utility grafis macOS tidak bisa memperbaikinya; itu adalah sisa-sisa dari saat dulu mencoba menjalankan Asahi Linux
    Saya menduga pasti ada cara menyelesaikannya lewat CLI diskutil, dan saya menemukan solusinya di thread berikut
    https://apple.stackexchange.com/questions/411544/cant-reclai...
    Sekarang seluruh disk bisa saya gunakan lagi sepenuhnya di macOS

    • diskutil memang hebat, tetapi keadaan Disk Utility.app sekarang benar-benar menyedihkan
      Sejak transisi APFS, aplikasi ini seperti tidak terurus dengan baik, dan ada kasus ketika diskutil bisa melakukan sesuatu tetapi aplikasi GUI-nya gagal total
      Sebelum perombakan antarmuka, ini adalah alat yang tangguh yang setidaknya memberi tahu alasan kegagalan; sekarang rasanya seperti antarmuka LEGO Duplo untuk bayi yang nyaris cuma bisa memformat flash drive
  • Saat tidak ingat perintah atau parameternya, um juga layak dicoba
    https://github.com/promptops/cli
    Misalnya, jika memasukkan um prevent my mac from sleeping for 30m, hasilnya akan seperti caffeinate -u -t 1800

  • open adalah perintah sederhana dan bagus yang selalu dipakai
    Buat alias seperti alias tab='open . -a iterm', alias phpstorm='open -a "PhpStorm"', alias smerge='open -a "Sublime Merge"', lalu dipakai lebih sering daripada dialog Open/Recents di masing-masing aplikasi

    • Pelengkapan tab untuk open -a ... terasa buruk selama bertahun-tahun karena Apple tidak memperbarui definisi completion
      Solusinya saya tinggalkan di jawaban Stack Overflow ini: https://stackoverflow.com/a/63097652
    • Di antara flag yang belum disebut, ada juga -n
      Ini memungkinkan menjalankan beberapa instance dari aplikasi yang sama, dan dulu secara pribadi merupakan utilitas yang paling sering saya pakai
      Sekarang frekuensi pemakaiannya menurun karena makin sedikit aplikasi dengan masalah desain yang separah itu
    • Sublime Text dan Sublime Merge secara bawaan juga menyertakan utilitas CLI, plus fitur tambahan
      Anda bisa memakai /Applications/Sublime Merge.app/Contents/SharedSupport/bin/smerge dan /Applications/Sublime Text.app/Contents/SharedSupport/bin/subl
    • Saya membuat skrip untuk membuka file dengan rofi
      https://github.com/davatorium/rofi
      Tampilannya seperti https://i.imgur.com/Hm9TGeV.jpg
      Di terminal VS Code, jika memakai alias o, akan terbuka dari lokasi saat ini, lalu dari sana bisa mencari file dan membukanya di editor
    • Untuk membuka jendela Finder baru dari direktori saat ini di terminal, cukup gunakan alias finder='open .'