Alat Baris Perintah untuk Pengembang

Diterbitkan: 2022-03-11

Di dunia online saat ini, pertempuran untuk menarik pengguna terus berkecamuk, dengan pembuat aplikasi lebih memilih aplikasi seluler atau web. Aplikasi desktop menjadi semakin tidak relevan. Selain itu, mereka juga cenderung tidak lebih dari klien kaya untuk aplikasi web—Electron menjadi platform pilihan yang populer.

Apakah ini berarti kami akan segera meninggalkan desktop sebagai platform? Tidak, tentu saja tidak, saya tidak akan mengatakan itu. Selain itu, sementara aplikasi GUI tampaknya telah terhenti baru-baru ini, ada segmen aplikasi desktop yang terus berkembang.

Pernahkah Anda melihat film yang menampilkan peretas? Lebih sering daripada tidak, orang-orang ini ditampilkan bekerja di depan monitor yang menampilkan semacam terminal (biasanya dengan latar belakang gelap dan latar depan terang). Terminal ini, pada gilirannya, cenderung dibanjiri dengan karakter lewat yang tampaknya memiliki makna bagi orang yang menontonnya.

Ilustrasi: alat baris perintah dan peretasan terlihat lebih keren di film daripada di kehidupan nyata

Representasi aksi peretas seperti itu sering diejek oleh pengembang profesional, dan bahkan ada beberapa program yang mensimulasikan berbagai efek "peretas", hanya untuk bersenang-senang.

Namun, di dunia nyata, alat baris perintah tidak digunakan untuk nilai hiburannya.

Mengapa Kami Masih Menggunakan Alat Antarmuka Baris Perintah

Artikel ini berfokus pada sisi praktis penggunaan alat antarmuka baris perintah (CLI). Mengetahui perintah CLI dan menggunakan alat berkualitas dapat membuat Anda lebih produktif dan juga dapat membuka pintu ke berbagai pendekatan otomatisasi yang jauh lebih praktis dengan antarmuka tekstual daripada dengan aplikasi GUI.

Anda bisa menjadi lebih baik dalam melakukan tugas berulang di GUI, hingga beberapa klik Anda terdengar sebagai satu klik yang panjang. Masalahnya adalah, ini masih tidak akan mengalahkan efisiensi skrip khusus. Terlebih lagi, melakukan operasi yang sama secara manual menimbulkan beban kognitif tambahan dan kemungkinan peningkatan kesalahan manusia. Seperti biasa, kami mengandalkan komputer untuk menangani tugas yang mungkin dianggap membosankan, berulang, atau berlebihan oleh manusia.

Perlu diketahui bahwa alat terminal dapat menawarkan beberapa jenis antarmuka. Ada yang non-interaktif seperti ls, yang hanya mengambil parameter dan memberikan output. Ada antarmuka interaktif atau semi-interaktif yang paling sering ditemukan di manajer paket. (“Apakah Anda yakin ingin melanjutkan penginstalan dari sumber yang tidak diverifikasi?”) Kemudian, ada antarmuka pengguna tekstual (TUI), yang merupakan aplikasi GUI interaktif yang dirancang agar sesuai dengan keterbatasan terminal. Mungkin yang paling terkenal adalah Midnight Commander (mc), tiruan dari Norton Commander yang sangat populer (di tahun 90-an).

Alat Baris Perintah Penting

Jika Anda ingin menjadi penghuni konsol, Anda perlu melengkapi diri Anda dengan alat pengembang baris perintah yang ditetapkan minimum—-hal-hal mendasar. Hal-hal yang Anda pasti tidak dapat hidup tanpanya adalah shell interaktif (bertujuan untuk sesuatu yang modern dengan penyelesaian tab yang nyaman) dan editor teks .

Ilustrasi: alat baris perintah penting

Sekarang, saya akan menyebutkan filosofi UNIX , yang sering menjadi dasar di balik keputusan desain yang dibuat oleh pembuat alat, baik secara sadar atau tidak. Beberapa poin penting dapat diringkas sebagai berikut:

  • Perlakukan semuanya sebagai file.
  • Lakukan hanya satu hal, tetapi lakukan dengan baik.
  • Membaca dari input standar, menulis ke output standar, dan mengkomunikasikan kesalahan ke aliran kesalahan standar.
  • Jika berhasil, kembalikan kode 0. Nilai bukan nol berarti kesalahan (yang dapat ditentukan dengan kode pengembalian yang tepat).
  • Izinkan untuk rantai perintah dan skrip.

Kerang

Hal pertama yang Anda lihat saat membuka terminal adalah shell. Ini adalah bagian yang memungkinkan interaksi antara pengguna dan mesin. Ini menafsirkan perintah Anda, membaginya menjadi nama program dan argumen, dan mengeksekusi semua perintah shell yang Anda berikan padanya.

Secara historis, ada banyak jenis kerang. Di antara yang paling populer adalah csh (C Shell) dan berbagai implementasi Bourne Shell (biasanya hanya dikenal sebagai sh ). Bourne Shell diperluas ke Korn Shell yang juga mendapatkan daya tarik dan masih digunakan oleh para penggemarnya. Csh saat ini merupakan shell default pada beberapa sistem BSD, sementara hampir semua sistem operasi mirip UNIX lainnya lebih menyukai beberapa jenis Bourne Shell. Distribusi Linux cenderung menyukai bash sementara Mac OS X hadir dengan zsh sebagai pilihan default.

Ada kemungkinan lain di luar sana, tetapi mereka jauh kurang populer, kecuali Microsoft PowerShell pada sistem Windows. PowerShell terinspirasi sebagian oleh shell UNIX interaktif seperti zsh dan sebagian oleh runtime .NET. Alih-alih memperlakukan semuanya sebagai teks, sebuah konsep yang umum di dunia UNIX, ini memungkinkan manipulasi data berorientasi objek.

Meskipun Microsoft PowerShell cukup populer di ranah Windows, banyak program dengan asal-usul UNIX (paling terkenal adalah Git, Autotools, atau Make) cenderung memilih beberapa variasi Bourne Shell. Karena itu, proyek seperti msys (dibundel dengan Git untuk Windows), Cygwin, atau WSL terbaru Microsoft lahir. Jika Anda menginginkan perasaan seperti Linux di Windows, MSys adalah pilihan terbaik di sini. Jika Anda ingin lingkungan Linux berfitur lengkap dapat menjalankan binari Linux standar, maka WSL adalah cara yang tepat. Untuk sesuatu di antaranya—UNIX API tetapi dikompilasi sebagai Windows yang dapat dieksekusi (gunakan hanya ketika Anda benar-benar tahu mengapa Anda membutuhkan ini)—Cygwin adalah jawabannya.

Editor

Setelah Anda berkenalan dengan cangkang Anda, Anda akan ingin mengambil beberapa keterampilan yang berguna. Karena sebagian besar pekerjaan pengkodean berkisar pada penulisan teks (kode, README, pesan komit), pengetahuan yang baik tentang editor teks interaktif sangat penting. Ada banyak pilihan, dan karena editor adalah salah satu alat yang paling diperlukan untuk pengembang mana pun, mungkin ada banyak pendapat tentang editor mana yang terbaik.

Ilustrasi: editor baris perintah memiliki antarmuka yang sederhana

Editor teks paling populer dapat dipisahkan menjadi dua kelompok dasar: Editor teks sederhana dan editor teks yang dapat diprogram .

Keduanya bagus untuk menulis kode, tetapi, seperti namanya, yang dapat diprogram menawarkan kemampuan untuk membentuk dan menyesuaikan editor agar sesuai dengan kebutuhan Anda. Namun, ini ada harganya, karena mereka juga cenderung memiliki kurva belajar yang lebih curam dan mungkin memerlukan lebih banyak waktu untuk menyiapkannya.

Editor Teks Dasar

Di antara editor teks sederhana, GNU Nano adalah yang paling luas. Sebenarnya, ini adalah tiruan dari editor pico, jadi jika salah satunya tidak tersedia di sistem Anda, Anda dapat mencoba yang lain. Alternatif lain yang lebih modern untuk keduanya adalah editor mikro. Jika Anda menginginkan sesuatu yang sederhana dan dapat diperluas pada saat yang sama, ini adalah tempat yang baik untuk memulai.

Editor Teks yang Dapat Diprogram

Banyak pengembang mengandalkan editor yang dapat diprogram dari kamp yang berbeda, seperti Vim dan GNU Emacs. Kedua editor dapat berjalan di konsol atau dalam mode GUI, dan keduanya berdampak pada ikatan kunci yang ditemukan di perangkat lunak lain. Keduanya tidak hanya menawarkan API tetapi juga bahasa pemrograman yang sebenarnya built-in. Emacs berfokus pada LISP dan Vim menggunakan VimL-nya sendiri, tetapi juga menawarkan antarmuka ke bahasa skrip populer lainnya (seperti Lua, Perl, Python, atau Ruby). Pendekatan yang lebih baru untuk Vim, yang disebut Neovim, juga layak disebut, karena mulai mendapatkan pengikut yang serius.

Ini mungkin agak membingungkan, tetapi ada juga editor bernama vi yang merupakan pendahulu dari Vim (yang, kebetulan, adalah singkatan dari “ Vi i m proof”). Ini jauh lebih sederhana daripada Vim, tetapi jika Anda memiliki kepercayaan diri yang cukup untuk menulis di Vim, itu seharusnya tidak menjadi tantangan bagi Anda jika Anda merasa perlu menggunakan vi.

Karena pico/GNU Nano dan vi/Vim biasanya sudah diinstal sebelumnya pada berbagai sistem, ada baiknya untuk setidaknya memahami dasar-dasarnya (berhenti dari Vim adalah masalah yang sangat sulit bagi pemula). Dengan cara ini, jika Anda perlu mengedit sesuatu di mesin jarak jauh, Anda akan siap terlepas dari editor apa yang sudah ada di sana. Di perangkat pribadi Anda, silakan gunakan editor apa pun yang menurut Anda paling nyaman.

Editor Sistem Default

Satu hal terakhir yang perlu diperhatikan adalah bahwa sistem Anda mungkin memiliki apa yang disebut editor default .

Variabel lingkungan $EDITOR menunjuk ke editor default dan di shell yang kompatibel dengan Bourne (sh, bash, ksh, zsh) Anda dapat melihatnya dengan memasukkan echo $EDITOR . Jika nilainya berbeda dari pilihan pribadi Anda, Anda dapat mengaturnya sendiri dengan menambahkan export EDITOR=my-awesome-editor ke konfigurasi runtime shell Anda ( ~/.profile , ~./bashrc , ~/.zshrc , dan seterusnya).

Program lain, seperti sistem kontrol versi dan klien email, akan menggunakan editor ini saat mereka membutuhkan input teks yang lebih panjang.

Multiplexer

Segera setelah Anda mulai melakukan hal-hal serius di CLI, Anda akan menghadapi keterbatasan hanya dapat membuka satu aplikasi pada waktu tertentu. Saat coding, Anda mungkin ingin mengedit kode, menjalankannya, memperbaiki kesalahan, dan mengeksekusi lagi. Saat mencari bug, Anda mungkin ingin membuat daftar log dan melihat apa yang dicatat saat Anda mengirim permintaan ke server. Biasanya, ini berarti beralih di antara dua aplikasi secara terus-menerus atau membuka beberapa jendela terminal.

Di sinilah multiplexer terminal dapat membantu Anda. Ketika berbicara tentang multiplexer, beberapa orang langsung menganggap topiknya adalah Layar GNU. Ini adalah alat pertama yang tersebar luas dari jenisnya dan masih sangat populer hingga saat ini (seringkali diinstal secara default). Penggantinya yang modern adalah tmux yang, secara mengejutkan, merupakan singkatan dari “ t erminal mu ltiple x er.”

Keduanya memungkinkan Anda untuk membuka lebih dari satu jendela di sesi terminal tertentu dan beralih di antara sesi tersebut dengan bebas. Mereka memungkinkan Anda untuk membagi jendela menjadi beberapa panel, yang membantu menjalankan beberapa aplikasi secara bersamaan dan mengamati outputnya secara real time (tanpa mengganti jendela apa pun). Juga, mereka bekerja dalam mode client-server, yang berarti Anda dapat melepaskannya kapan saja dan kembali lagi nanti untuk melanjutkan pekerjaan di tempat Anda tinggalkan. Fitur terakhir ini menyebabkan popularitas Screen ketika orang menginginkan sesi IRC yang gigih.

Untuk sebagian besar kasus penggunaan, Layar GNU atau tmux seharusnya bagus untuk Anda, tetapi jika karena alasan tertentu Anda menganggapnya terlalu berat pada sumber daya, ada juga alternatif yang lebih ringan. Ada dtach/attach dan ada abduco. Mereka memang sengaja dibatasi ruang lingkupnya tetapi dapat menjalankan tugasnya masing-masing dengan baik.

Manajer Paket

Pada titik ini, Anda mungkin mulai berpikir untuk menginstal semua perangkat lunak yang disebutkan di atas pada mesin Anda. Satu masalah adalah bahwa masing-masing alat memiliki petunjuk pemasangan yang berbeda. Terkadang, Anda perlu mengunduh sumber dan mengompilasinya sendiri, terkadang Anda mendapatkan biner mandiri, dan terkadang Anda mendapatkan apa yang disebut paket biner , yang biasanya berarti executable yang dikompresi bersama dengan beberapa metadata.

Untuk memudahkan proses instalasi perangkat lunak, pencipta sistem operasi datang dengan konsep manajer paket. Sederhananya, manajer paket seperti toko aplikasi untuk CLI dan aplikasi desktop. Ini mendahului toko aplikasi yang sebenarnya beberapa dekade. Masalahnya adalah hampir setiap sistem memiliki manajer paketnya sendiri. Debian, Ubuntu, dan distribusi GNU/Linux turunan menggunakan APT, distribusi berbasis Red Hat lebih memilih yum atau DNF, distro Linux lainnya memiliki sarana instalasi perangkat lunak yang lebih eksotis dan begitu juga klon BSD yang berbeda. Selain pengelola paket bawaan, ada juga pengelola paket yang diinstal pengguna seperti Chocolatey untuk MS Windows dan Homebrew untuk Mac OS X/macOS. Saat Anda ingin menulis instruksi tentang cara menginstal program Anda, Anda mungkin akan menulis kasus untuk masing-masing sistem tersebut. Sepertinya agak terlalu banyak, bukan?

Untungnya, sistem terakhir yang disebutkan, Homebrew, mungkin yang paling portabel, berkat Linuxbrew, port Homebrew ke sistem GNU/Linux. Lucunya, ini bahkan berfungsi di WSL jika Anda ingin memiliki pengalaman pengguna yang serupa di Microsoft Windows. Perlu diingat bahwa WSL tidak didukung secara resmi.

Jadi, selain portabilitas, apa lagi yang bisa ditawarkan Homebrew? Pertama-tama, itu tidak mengganggu paket sistem, jadi semua yang Anda instal berada pada lapisan terpisah dari sistem operasi. Selain itu, biasanya tidak diperlukan izin root untuk menginstal paket. Oleh karena itu, Anda dapat memiliki paket sistem yang stabil dan teruji tetapi pada saat yang sama memeriksa versi terbarunya tanpa mengorbankan stabilitas sistem.

Jika Anda ingin menguji editor, saya sebutkan sebelumnya bahwa semua yang perlu Anda lakukan pada sistem dengan Homebrew atau Linuxbrew adalah dengan menjalankan perintah ini:

brew install emacs micro nano vim neovim .

Barang Mengkilap

Apa yang telah kita bahas tidak diragukan lagi berguna untuk pekerjaan. Namun ada juga aplikasi yang, meski tidak diperlukan, tetap menghadirkan kenyamanan dalam kehidupan sehari-hari. Anda mungkin tidak membutuhkannya, tetapi selalu berharga untuk mengetahuinya.

Filter Interaktif

Mencari riwayat perintah bisa jadi membosankan. Sementara bash dan zsh memiliki fitur Ctrl+R keybinding, itu hanya menunjukkan satu substitusi pada satu waktu. Terlebih lagi, Anda harus memasukkan teks persis yang Anda gunakan sebelumnya. Karena ini adalah operasi yang cukup umum, setelah Anda mulai menggunakan baris perintah, sepertinya ini adalah tempat yang bagus untuk perbaikan.

Filter interaktif, seperti fzy, percol, peco atau fzf membantu Anda memfilter baris teks yang panjang. Ini bisa berupa riwayat perintah yang disebutkan di atas, semua baris kode dalam direktori proyek, atau daftar nama file yang dihasilkan oleh find . . Ide umum di sini adalah untuk menyajikan Anda terlebih dahulu dengan semua baris yang tersedia dan kemudian mengandalkan algoritma pencarian fuzzy untuk menyaring semua yang tidak cocok.

Misalnya, mengikat Ctrl+R ke fzf menunjukkan kepada Anda daftar perintah terbaru, yang dapat Anda navigasikan ke atas dan ke bawah menggunakan panah, atau Anda dapat mengetik git untuk hanya menampilkan perintah yang menampilkan Git di suatu tempat di dalamnya. Secara pribadi, ketika saya bekerja dengan shell yang tidak memiliki filter interaktif, saya tiba-tiba merasa sedikit tersesat. Fitur ini sangat menarik!

Plus, Anda dapat membuat filter interaktif Anda tersedia di dalam editor teks yang dapat diprogram. Dengan cara ini, Anda akan memiliki kemampuan pencarian terpadu antara shell dan editor Anda.

Navigator Interaktif

Facebook PathPicker sangat membantu ketika saya sebagian besar bekerja dengan proyek C++. Log kesalahan yang dihasilkan oleh kompiler bisa menjadi sangat besar dan sangat buruk, dan kemampuan untuk menemukan jalur sebenarnya di dalam log itu adalah keuntungan produktivitas.

Dalam file teks apa pun, atau konten layar Anda saat digunakan dengan tmux, fpp memfilter semuanya kecuali jalur file. Ini kemudian menyajikan UI di mana Anda dapat memilih satu atau lebih dari jalur tersebut dan menjalankan perintah dengannya. Respons yang paling umum adalah membuka file di editor, tentu saja, yang merupakan tindakan default.

Git UI

Kemungkinan setidaknya salah satu proyek yang Anda kerjakan menggunakan Git sebagai sistem kontrol versi. Meskipun sepenuhnya kuat, Git CLI bukanlah puncak dari pengalaman pengguna yang luar biasa. Untuk menghemat stres Anda membaca semua opsi dalam bantuan Git $SUBCOMMAND , saya sarankan Anda memeriksa tig. Ini menawarkan UI konsol yang bagus untuk operasi yang mendapat manfaat darinya, seperti log atau blame .

Alat lain yang bertujuan untuk membantu pengguna GIt adalah fac, yang merupakan singkatan dari Fix All Conflicts . Seperti yang mungkin sudah Anda duga, ini berguna ketika Anda mengalami konflik saat melakukan penggabungan atau rebase. Ini adalah alternatif untuk alat penggabungan lainnya seperti vimdiff.

Manajer File

Ada waktu di tahun 90-an ketika semua orang menginginkan pengelola file dua panel. Tren dimulai dengan Norton Commander. Banyak orang lain mengikuti jalan yang sama, tetapi yang masih melihat basis pengguna yang stabil adalah Midnight Commander. Kasus penggunaan yang paling jelas adalah menggunakan mc untuk memanipulasi file lokal, tetapi juga sangat berguna saat bekerja dengan mesin jarak jauh.

Seperti kebanyakan program baris perintah, ini sangat ringan, jadi tidak ada masalah menjalankannya di atas ssh dan berkat mendukung protokol FTP dan FISH, Anda dapat memiliki sistem file lokal yang terlihat di satu panel dan remote di panel lainnya—mudah fitur ketika Anda ingin menghindari mengetik atau menyalin nama file sebagai argumen ke scp.

Alat CLI Hanya untuk Bersenang-senang

“Semua bekerja dan tidak bermain membuat Jack menjadi anak yang membosankan,” kata mereka. Ada banyak program, baris perintah dan lainnya, yang hanya melayani hiburan Anda. Video game Rogue termasuk dalam kategori ini. Itu bahkan memberi nama untuk seluruh genre game! Mainan populer lainnya adalah keberuntungan dan cowsay, yang dapat membuat hari Anda sedikit kurang membosankan jika Anda menggunakannya di suatu tempat di skrip CI Anda, misalnya.

Tetapi bagi sebagian dari kita, daya tarik utama menggunakan konsol adalah untuk merasa seperti seorang peretas di film-film. No More Secrets dan Hollywood Hacker mewakili grup ini dengan baik. Cobalah ketika seseorang melihat Anda bekerja, dan kredibilitas peretas Anda pasti akan meningkat!

Baris Perintah dalam Praktek

Jadi, apa yang menarik dari baris perintah yang mengimbangi waktu yang dihabiskan untuk mempelajari cara menggunakan shell, editor, dan semua sakelar berbagai aplikasi? Jawaban singkatnya adalah produktivitas , yang berasal dari dua hal:

  • Salah satunya adalah ketika Anda hanya disajikan dengan jendela terminal dan tidak lebih, Anda dapat fokus lebih intens, karena tidak banyak yang mengganggu Anda. Tidak ada notifikasi yang muncul, tidak ada iklan, tidak ada gambar anak kucing yang cantik. Hanya kamu dan tujuanmu.

  • Hal kedua adalah otomatisasi. Anda dapat menempatkan beberapa tindakan yang sering digabungkan dalam skrip dan memanggilnya nanti secara keseluruhan alih-alih mengetik semuanya dengan tangan setiap kali. Anda dapat dengan cepat kembali ke perintah yang sangat rumit yang pernah Anda tulis dengan menelusuri riwayat shell Anda. Pada dasarnya, Anda dapat merekam dan memutar ulang apa pun, dan kode tersebut tersedia sebagai dokumentasi dari apa yang Anda lakukan.

Kemampuan untuk menambahkan alias juga berkontribusi pada keuntungan. Sebagai contoh, saya menemukan diri saya sering membuat komit di Git dengan memperbarui yang sama hingga sempurna (untuk saat ini). Setelah saya menampilkan file yang diinginkan, saya menjalankan git carmh . Jangan mencoba mencarinya di manual, karena ini adalah alias pribadi saya yang berarti commit --amend --reuse-message=HEAD . Ini menghemat beberapa pengetikan pasti.

Masalahnya, orang bosan mengulangi tindakan yang sama berulang-ulang, dan kebosanan mengurangi fokus. Ini dapat menyebabkan kesalahan dan kesalahan. Satu-satunya cara untuk menghindarinya adalah dengan tidak mengaitkan tindakan fokus tinggi dan fokus rendah. Menulis kode adalah fokus tinggi dan meninjau pesan komit dan konten adalah fokus tinggi, tetapi ketika Anda perlu mengulangi beberapa klik mekanis di sana-sini untuk sampai ke tahap tinjauan komit, kemungkinan fokus Anda diturunkan. Baris perintah tentu saja tidak bebas dari aktivitas mekanis seperti itu, tetapi berkat otomatisasi, Anda dapat menghindari sebagian besar darinya.

Eksplorasi Lebih Lanjut

Anda mungkin sudah mengetahui beberapa atau semua alat baris perintah yang disebutkan dalam artikel ini. Anda mungkin telah mempelajari sesuatu yang baru dan berguna saat membacanya. Jika demikian, bagus sekali—tujuan saya di sini bukan untuk menawarkan tinjauan komprehensif dan perbandingan berbagai alat, tetapi untuk mendemonstrasikan beberapa alat penting yang menurut saya berguna dalam pekerjaan sehari-hari, dengan harapan Anda dapat menemukan beberapa di antaranya berguna, juga.

Ada program baris perintah yang jauh lebih menarik di luar sana, dan jika Anda tertarik dengannya, saya sarankan untuk memeriksa daftar pilihan Awesome Shell dari beberapa alat baris perintah terbaik yang tersedia saat ini.

Sebagian besar aplikasi GUI memiliki rekan terminalnya. Itu termasuk browser web, klien email, klien obrolan (IRC, Slack, XMPP), suite PIM, atau spreadsheet. Jika Anda mengetahui program bagus yang belum saya sebutkan, silakan sampaikan di komentar.