Bagaimana menjadi wizard baris perintah

Kelas ilmu komputer paling berguna yang mungkin belum pernah Anda ikuti

Gambar dihasilkan dengan Difusi Stabil

OSatu hal yang selalu saya amati sepanjang karier saya adalah bahwa ilmuwan dan insinyur data yang paling produktif biasanya memiliki satu kesamaan: mereka penyihir baris perintah. Mereka dapat menavigasi sistem file komputer mereka, mencari pola dalam file log, dan mengelola pekerjaan, kode sumber, dan kontrol versi, semuanya dari baris perintah, tanpa bergantung pada navigasi lambat dengan mouse dan antarmuka pengguna grafis.

Namun, 'keajaiban' baris perintah ini, seperti yang terlihat oleh seseorang yang tidak terbiasa dengan alat shell, biasanya bukan bagian dari kurikulum ilmu komputer standar. Sebuah kursus MIT sekitar menguasai baris perintah Anda diberi nama yang tepat "Semester yang Hilang dalam Pendidikan Ilmu Komputer Anda".

Posting ini adalah kelas 'command-line wizardry 10' pribadi saya yang berisi 101 pelajaran, ditargetkan untuk pembaca yang ingin bekerja lebih banyak dengan baris perintah dan lebih sedikit dengan antarmuka pengguna grafis. Kami akan membahas dasar-dasar seputar shell dan variabel path, alias, izin file, streaming dan pemipaan, manajemen pekerjaan yang efisien, tmux, ssh, git, dan vim.

Mari kita mulai. Selamat datang di CLW 101.

1. Kerang

Saat Anda membuka terminal, Anda melihat a tempurung, seperti bash (dibawa lagi shell) atau ZSH (z-shell). Shell benar-benar merupakan bahasa pemrograman lengkap dengan akses ke program standar tertentu yang memungkinkan navigasi sistem file dan manipulasi data. Anda dapat mengetahui shell mana yang Anda jalankan dengan mengetik:

echo $ SHELL

Di bash, setiap kali Anda memulai shell baru, shell memuat serangkaian perintah yang ditentukan di dalamnya .bashrc file, yang biasanya ada di direktori home Anda (jika Anda menggunakan Mac, biasanya ada a .bash_profile mengajukan sebagai gantinya). Dalam file itu Anda dapat menentukan hal-hal berguna seperti variabel jalur atau alias Anda (selengkapnya di bawah).

2. Variabel jalur

Saat Anda mengetikkan nama program tertentu ke dalam shell Anda, seperti python, cat, atau ls, bagaimana shell mengetahui dari mana mendapatkan program itu? Itulah tujuan dari variabel jalur. Variabel ini menyimpan daftar semua jalur di mana shell mencari program, dipisahkan dengan titik dua. Anda dapat memeriksa variabel jalur Anda dengan mengetik:

gema $PATH

Dan Anda dapat menambahkan direktori tambahan ke variabel jalur Anda dengan perintah ini:

ekspor PATH="my_new_path:$PATH"

Yang terbaik adalah menambahkan perintah ini ke file bashrc Anda, sehingga direktori tambahan Anda selalu ada di jalur Anda saat Anda memulai shell baru.

3. Alias

alias adalah perintah khusus yang dapat Anda tentukan untuk menghindari mengetik perintah yang panjang berulang kali, seperti:

alias ll="ls -lah"
alias gs = "status git"
alias gp="git push master asal"

Alias โ€‹โ€‹juga dapat digunakan untuk menciptakan perlindungan bagi alur kerja pengembangan Anda. Misalnya dengan mendefinisikan

alias mv = "mv -i"

terminal Anda akan memperingatkan Anda jika file yang akan Anda pindahkan sudah ada di direktori baru, sehingga Anda tidak secara tidak sengaja menimpa file yang tidak ingin Anda timpa.

Setelah Anda menambahkan alias ini ke dalam file bashrc Anda, alias tersebut selalu tersedia saat Anda memulai shell baru.

4. Izin file dan sudo

Ketika beberapa pengguna berbagi mesin, penting untuk mengaturnya izin file yang menentukan pengguna mana yang dapat melakukan operasi apa pada data apa. Saat Anda mengetik ls -l, Anda akan melihat file di direktori Anda saat ini beserta izinnya dalam bentuk berikut:

-rwxrwxrwx

Di sini,

  • rwx masing-masing mewakili hak baca, tulis, dan eksekusi
  • yang 3 rwx blok ditujukan untuk (1) pengguna, (2) grup pengguna, dan (3) orang lain. Dalam contoh yang diberikan, ketiga entitas ini memiliki izin membaca, menulis, dan mengeksekusi.
  • tanda hubung menunjukkan bahwa ini adalah file. Selain tanda hubung, Anda juga dapat melihat a d untuk direktori atau l untuk tautan simbolis.

Anda dapat mengedit izin file dengan chmod. Misalnya, jika Anda ingin membuat file dapat dieksekusi sendiri, ketikkan

chmod u+x my_program.py

๐Ÿ‘‰ Jika suatu file dapat dieksekusi, bagaimana shell mengetahui cara mengeksekusinya? Ini ditentukan dengan 'hashbang' di baris pertama file, seperti #!/bin/bash untuk skrip bash atau #!/bin/python untuk skrip python.

Terakhir, ada 'pengguna super' khusus yang memiliki semua izin untuk semua file. Anda dapat menjalankan perintah apa pun saat pengguna super menulis sudo di depan perintah itu. Anda juga dapat meluncurkan sudo shell yang berdiri sendiri dengan mengeksekusi

sudo su

โš ๏ธ Gunakan sudo dengan hati-hati. Dengan sudo, Anda dapat membuat perubahan pada kode yang mengontrol perangkat keras komputer Anda, dan kesalahan dapat membuat mesin Anda tidak dapat digunakan. Ingat, di balik kekuatan yang besar, terdapat pula tanggung jawab yang besar.

5. Streaming dan perpipaan

Grafik Streaming operator > mengarahkan output dari suatu program ke file. >> melakukan hal yang sama, tetapi menambahkan ke file yang sudah ada alih-alih menimpanya, jika sudah ada. Ini berguna untuk mencatat program Anda sendiri seperti ini:

python my_program.py > file log

Konsep lain yang berguna adalah perpipaan: x | y mengeksekusi program x, dan mengarahkan output dari x ke program y. Misalnya:

  • cat log.txt | tail -n5 : mencetak 5 baris terakhir dari log.txt
  • cat log.txt | head -n5 : mencetak 5 baris pertama dari log.txt
  • cat -b log.txt | grep error : menampilkan semua baris di log.txt yang berisi string 'error', beserta nomor baris (-b)

6. Mengelola pekerjaan

Jika Anda menjalankan program dari baris perintah Anda (mis python run.py), program secara default akan dijalankan di latar depan, dan mencegah Anda melakukan hal lain hingga program selesai. Saat program berjalan di latar depan, Anda dapat:

  • ketik control+C, yang akan mengirimkan sinyal SIGINT (interupsi sinyal) ke program, yang memerintahkan mesin untuk segera menghentikan program (kecuali program memiliki cara untuk menangani sinyal-sinyal ini secara internal).
  • ketik control+Z, yang akan menghentikan sementara program. Setelah dijeda, program dapat dilanjutkan dengan membawanya ke latar depan (fg), atau dengan mengirimkannya ke latar belakang (bg).

Untuk segera memulai perintah Anda di latar belakang, Anda menggunakan & operator:

python run.py &

๐Ÿ‘‰ Bagaimana Anda mengetahui program mana yang sedang berjalan di latar belakang? Gunakan perintah jobs. Ini akan menampilkan nama pekerjaan yang berjalan serta id prosesnya (PID).

Terakhir,kill adalah program untuk mengirimkan sinyal ke program yang berjalan di latar belakang. Misalnya,

  • kill -STOP %1 mengirimkan sinyal STOP, menjeda program 1.
  • kill -KILL %1 mengirimkan sinyal KILL, menghentikan program 1 secara permanen.
Empat panel terminal di terminal Macbook pribadi saya dengan tmux (gambar oleh penulis).

7.tmux

tmux ('terminal multiplexer') memungkinkan Anda membuat terminal baru dengan mudah dan bernavigasi di antara terminal-terminal tersebut. Ini bisa sangat berguna, misalnya Anda dapat menggunakan satu terminal untuk menavigasi sistem file Anda dan terminal lain untuk menjalankan pekerjaan. Dengan tmux, Anda bahkan dapat memiliki keduanya secara berdampingan.

๐Ÿ‘‰ Alasan lain untuk mempelajari tmux adalah pengembangan jarak jauh: ketika Anda keluar dari mesin jarak jauh (baik disengaja atau tidak), semua program yang aktif berjalan di dalam shell Anda akan dihentikan secara otomatis. Di sisi lain, jika Anda menjalankan program di dalam shell tmux, Anda cukup melepaskan jendela tmux, logout, menutup komputer Anda, dan kembali lagi ke shell itu nanti seolah-olah Anda belum pernah logout.

Berikut adalah beberapa perintah dasar untuk membantu Anda memulai dengan tmux:

  • tmux new -s run membuat sesi terminal baru dengan nama 'run'
  • control-BD: lepaskan jendela ini
  • tmux a : lampirkan ke jendela terbaru
  • tmux a -t run : lampirkan ke jendela yang disebut 'jalankan'
  • control-Bโ€œ : tambahkan panel terminal lain di bawah
  • control-B% : tambahkan panel terminal lain di sebelah kanan
  • control-Bโžก๏ธ : pindah ke panel terminal ke kanan (mirip dengan kiri, atas, bawah)

8. SSH dan pasangan kunci

ssh adalah program untuk masuk ke mesin jarak jauh. Untuk masuk ke mesin jarak jauh, Anda harus memberikan nama pengguna dan kata sandi, atau Anda menggunakan pasangan kunci, yang terdiri dari kunci publik (yang dapat diakses oleh kedua mesin) dan kunci pribadi (yang hanya dapat diakses oleh mesin Anda sendiri). memiliki akses ke).

ssh-keygen adalah program untuk menghasilkan pasangan kunci tersebut. Jika kamu lari ssh-keygen, secara default akan membuat kunci publik bernama id_rsa.pub dan kunci pribadi bernama id_rsa, dan tempatkan keduanya ke dalam file Anda ~/.ssh direktori. Anda harus menambahkan kunci publik ke mesin jarak jauh, yang, seperti yang sudah Anda ketahui sekarang, dapat Anda lakukan dengan melakukan pipeline bersama-sama. cat, ssh, dan operator streaming:

kucing .ssh/id_rsa.pub | ssh pengguna@remote 'kucing >> ~/.ssh/authorized_keys'

Sekarang Anda dapat menggunakan ssh ke jarak jauh hanya dengan memberikan kunci pribadi Anda:

ssh jarak jauh -i ~/.ssh/id_rsa

Praktik yang lebih baik lagi adalah membuat file ~/.ssh/config yang berisi semua konfigurasi otentikasi ssh Anda. Misalnya, jika Anda config berkasnya sebagai berikut:

Pengembang tuan rumah
Nama Host jarak jauh
IdentityFile ~/.ssh/id_rsa

Kemudian Anda dapat login ke remote hanya dengan mengetik ssh dev.

9. git

git adalah sistem kontrol versi yang memungkinkan Anda menavigasi riwayat versi dan cabang kode secara efisien dari baris perintah.

๐Ÿ‘‰ Perhatikan itu git tidak sama dengan GitHub: git adalah program mandiri yang dapat mengelola versi kode Anda di laptop lokal Anda, sedangkan GitHub adalah tempat untuk menghosting kode Anda dari jarak jauh.

Berikut adalah beberapa perintah git penting:

  • git add : menentukan file mana yang ingin Anda sertakan dalam komit berikutnya
  • git commit -m 'my commit message' : melakukan perubahan kode
  • git checkout -b dev : membuat cabang baru bernama 'dev' dan memeriksa cabang itu
  • git merge dev : menggabungkan dev ke cabang saat ini. Jika hal ini menimbulkan konflik penggabungan, Anda harus memperbaiki konflik tersebut secara manual, lalu menjalankannya git add file_that_changed; git merge --continue
  • git stash : mengembalikan semua perubahan, dan git stash pop membawa mereka kembali. Ini berguna jika Anda membuat perubahan pada cabang master, dan kemudian memutuskan bahwa Anda benar-benar ingin perubahan tersebut menjadi cabang terpisah.
  • git reset --hard : mengembalikan semua perubahan secara permanen

Dan berikut adalah beberapa perintah git penting untuk menangani host jarak jauh (misalnya GitHub):

  • git clone : mengkloning salinan repo kode ke mesin lokal Anda
  • git push origin master : mendorong perubahan ke host jarak jauh (misalnya GitHub)
  • git pull : menarik versi terbaru dari jarak jauh. (Ini sama dengan berlari git fetch; git merge;).

๐Ÿ‘‰ Sebelum bisa menjalankan perintah seperti git push origin master, Anda harus mengautentikasi dengan keypair ssh (lihat Pelajaran 8). Jika Anda menggunakan GitHub, Anda cukup menempelkan kunci publik di bawah pengaturan profil Anda.

10. vim

Vim adalah editor teks berbasis baris perintah yang kuat. Merupakan ide bagus untuk mempelajari setidaknya perintah paling dasar di vim:

  • sesekali Anda mungkin harus masuk ke mesin jarak jauh dan mengubah kode di sana. vim adalah program standar dan oleh karena itu biasanya tersedia di mesin mana pun yang Anda gunakan.
  • saat berlari git commit, secara default git membuka vim untuk menulis pesan komit. Jadi setidaknya Anda ingin mengetahui cara menulis, menyimpan, dan menutup file.

Hal terpenting untuk dipahami tentang vim adalah adanya mode operasi yang berbeda. Setelah Anda meluncurkan vim, Anda berada di dalam modus navigasi, yang Anda gunakan untuk menavigasi file. Jenis i untuk memulai mode edit, di mana Anda dapat membuat perubahan pada file. Ketik Esc tombol untuk keluar dari mode edit dan kembali ke mode navigasi.

Hal yang berguna tentang mode navigasi adalah Anda dapat menavigasi dan memanipulasi file dengan cepat menggunakan keyboard Anda, misalnya:

  • x menghapus karakter
  • dd menghapus seluruh baris
  • b (kembali) pergi ke kata sebelumnya, n (berikutnya) melanjutkan ke kata berikutnya
  • :wq menyimpan perubahan Anda dan menutup file
  • :q! mengabaikan perubahan Anda dan menutup file

Untuk lebih banyak (lebih banyak lagi!) pintasan keyboard vim, lihat lembar contekan vim ini.

Foto oleh Dengan mudah Koloda on Unsplash

Pesan terakhir

Selamat, Anda telah menyelesaikan 'command line wizardry 101'. Namun, kami hanya menggores permukaannya saja di sini. Sebagai inspirasi, perhatikan masalah berikut:

โ€œDiberikan file teks dan bilangan bulat k, cetak kkata-kata yang paling umum dalam file (dan jumlah kemunculannya) dengan frekuensi yang semakin menurun.โ€

Sebagai seorang data scientist, dorongan pertama saya mungkin adalah meluncurkan notebook jupyter, mungkin memuat data ke dalam pandas, dan kemudian menggunakan fungsi seperti pandas agg. Namun, bagi penyihir baris perintah yang berpengalaman, ini adalah satu kalimat:

tr -cs A-Za-z'' | tr AZ az | urutkan | unik -c | urutkan -rn | sed ${1}q

Ini tidak terlihat jauh berbeda dengan imajinasi Difusi Stabil yang ditampilkan di awal artikel ini. Memang benar sihir.

Cara menjadi penyihir baris perintah Diterbitkan ulang dari Sumber https://towardsdatascience.com/how-to-become-a-command-line-wizard-5d78d75fbf0c?source=rssโ€”-7f60cf5620c9โ€”4 melalui https://towardsdatascience. com/umpan

<!โ€“

->

Stempel Waktu:

Lebih dari Konsultan Blockchain