Apa Perbedaan Antara .bashrc dan .profile di Linux?

Diterbitkan: 2022-09-29
Laptop Linux menampilkan prompt bash
fatmawati achmad zaenuri/Shutterstock.com

Masuk ke mesin Linux yang menjalankan Bash menyebabkan file tertentu dibaca. Mereka mengonfigurasi lingkungan shell Anda. Tapi file mana yang dibaca, dan kapan, bisa membingungkan. Inilah yang sebenarnya terjadi.

Berbagai Jenis Shell

Lingkungan yang Anda dapatkan saat meluncurkan shell ditentukan oleh pengaturan yang disimpan dalam file konfigurasi atau profil . Ini menyimpan informasi yang menetapkan hal-hal seperti warna teks Anda, prompt perintah Anda, alias, dan jalur yang dicari untuk file yang dapat dieksekusi saat Anda mengetikkan nama program.

Ada sejumlah file berbeda—di lokasi berbeda dalam sistem file—tempat pengaturan ini disimpan. Tetapi sebelum kita melihat file mana yang dibaca saat Anda meluncurkan shell, kita harus jelas tentang jenis shell yang Anda gunakan.

Apa yang Terjadi Saat Anda Menyalakan Komputer?
TERKAIT Apa yang Sebenarnya Terjadi Saat Anda Menyalakan Komputer?

Shell login adalah shell tempat Anda masuk. Saat Anda mem-boot komputer Anda dan masuk, di bawah lingkungan desktop grafis Anda ada shell login. Jika Anda terhubung ke komputer lain melalui koneksi SSH, Anda juga akan masuk ke shell login.

Jenis shell yang Anda dapatkan saat membuka jendela terminal adalah shell non-login. Anda tidak perlu mengautentikasi untuk meluncurkan shell ketika Anda sudah login. Shell login dan non-login adalah shell interaktif. Anda menggunakannya dengan mengetik instruksi, menekan tombol "Enter", dan membaca respons di layar.

Ada juga cangkang non-interaktif juga. Ini adalah jenis shell yang diluncurkan saat skrip dieksekusi. Script diluncurkan di shell baru. Shebang #!/bin/bash di bagian atas skrip menentukan shell mana yang harus digunakan.

 #!/bin/bash

echo -e "Halo, Dunia!\n"

Skrip ini akan dijalankan di shell Bash non-interaktif. Perhatikan bahwa meskipun shell non-interaktif, skrip itu sendiri bisa. Skrip ini dicetak ke jendela terminal, dan dapat dengan mudah menerima masukan pengguna.

TERKAIT: 9 Contoh Skrip Bash untuk Memulai Anda di Linux

Cangkang Non-Interaktif

Shell non-interaktif tidak membaca file profil apa pun saat diluncurkan. Mereka memang mewarisi variabel lingkungan, tetapi mereka tidak akan tahu apa-apa tentang alias, misalnya, apakah mereka didefinisikan di baris perintah atau di file konfigurasi.

Anda dapat menguji apakah shell interaktif atau tidak dengan melihat opsi yang diberikan padanya sebagai parameter baris perintah. Jika ada "i" di opsi, shell bersifat interaktif. Parameter khusus Bash $- berisi parameter baris perintah untuk shell saat ini.

 [[ $- == *i* ]] && echo 'Interaktif' || echo 'Non-interaktif' 

Tes bash untuk mengidentifikasi sesi shell interaktif dan non-interaktif

Mari kita buat alias bernama xc yang artinya “kucing”. Kami juga akan memeriksa apakah kami memiliki set variabel $PATH .

 alias xc=kucing
 gema $PATH 

Menyetel alias dan menggemakan nilai $PATH

Kami akan mencoba mengakses keduanya dari dalam skrip kecil ini. Salin skrip ini ke editor dan simpan sebagai "int.sh."

 #!/bin/bash

xc ~/text.dat
echo "Variabel=$PATH"

Kita harus menggunakan chmod untuk membuat skrip dapat dieksekusi.

 chmod +x int.sh 

Menggunakan chmod untuk membuat skrip dapat dieksekusi

Mari kita jalankan skrip kita:

 ./int.sh 

Menjalankan skrip yang tidak dapat mengakses alias tetapi dapat mengakses variabel lingkungan yang diwarisi

Dalam shell non-interaktifnya, skrip kita tidak dapat menggunakan alias, tetapi dapat menggunakan variabel lingkungan. Shell interaktif lebih menarik dalam penggunaan file profil dan konfigurasi.

TERKAIT: Cara Mengatur Variabel Lingkungan di Bash di Linux

Shell Login Interaktif

Ada dua jenis shell login interaktif. Salah satunya adalah shell yang memungkinkan Anda masuk ke komputer Anda. Di desktop, ini biasanya shell yang mendasari lingkungan desktop Anda. Baik Anda menggunakan lingkungan desktop berjendela atau ubin, sesuatu harus mengautentikasi Anda dengan sistem Linux dan mengizinkan Anda untuk masuk.

Pada server tanpa lingkungan desktop yang diinstal, Anda masuk langsung ke shell interaktif. Anda dapat melakukan hal yang sama pada komputer desktop jika Anda keluar dari lingkungan desktop dan mengakses terminal. Di GNOME Anda dapat melakukan ini dengan kombinasi tombol Ctrl+Alt+F3. Untuk kembali ke sesi GNOME Anda, tekan kombinasi tombol Ctrl+Alt+F2. Shell yang Anda sambungkan melalui SSH juga merupakan shell login.

Profil dan file konfigurasi yang dipanggil dapat diatur menggunakan variabel lingkungan, sehingga dapat bervariasi dari distribusi ke distribusi. Selain itu, tidak semua file digunakan oleh setiap distribusi. Dalam instalasi Bash generik, shell login interaktif membaca file “/etc/profile”. Ini memegang opsi konfigurasi shell di seluruh sistem. Jika ada, file ini juga membaca file seperti "/etc/bash.bashrc" dan "/usr/share/bash-completion/bash_completion".

Bash kemudian mencari file “~/.bash_profile”. Jika tidak ada, Bash mencari file “~/.bash_login”. Jika file itu tidak ada, Bash mencoba mencari file ".profile". Setelah salah satu file ini ditemukan dan dibaca, Bash berhenti mencari. Jadi dalam kebanyakan kasus, "~/.profile" tidak mungkin dibaca sama sekali.

Seringkali, Anda akan menemukan sesuatu seperti ini di "~/.bash_profile" Anda atau, sebagai semacam backstop, di file "~/.profile" Anda:

 # jika menjalankan bash
jika [ -n "$BASH_VERSION" ]; kemudian
  # sertakan .bashrc jika ada
  if [ -f "$HOME/.bashrc" ]; kemudian
    . "$HOME/.bashrc"
  fi
fi

Ini memeriksa bahwa shell aktif adalah Bash. Jika ya, ia akan mencari file “~/.bashrc” dan membacanya jika ditemukan.

Shell Non-Login Interaktif

Shell non-login interaktif Bash membaca "/etc/bash.bashrc" dan kemudian membaca file "~/.bashrc". Ini memungkinkan Bash untuk memiliki pengaturan di seluruh sistem dan khusus pengguna.

Perilaku ini dapat diubah dengan flag kompilasi ketika Bash dikompilasi, tetapi akan menjadi keadaan yang langka dan aneh untuk menemukan versi Bash yang tidak sumber dan membaca file “/etc/bash.bashrc”.

Setiap kali Anda membuka jendela terminal di desktop Anda, kedua file ini digunakan untuk mengonfigurasi lingkungan shell non-login interaktif itu. Hal yang sama terjadi untuk shell yang diluncurkan oleh aplikasi, seperti jendela terminal di Geany IDE.

Di Mana Anda Harus Meletakkan Kode Konfigurasi Anda?

Tempat terbaik untuk meletakkan kode kustomisasi pribadi Anda adalah di file “~/.bashrc” Anda. Alias ​​dan fungsi shell Anda dapat didefinisikan di "~/.bashrc", dan mereka akan dibaca dan tersedia untuk Anda di semua shell interaktif.

Jika distribusi Anda tidak membaca "~/.bashrc" Anda di shell login, dan Anda menginginkannya, tambahkan kode ini ke file "~/.bash_profile" Anda.

 # jika menjalankan bash
jika [ -n "$BASH_VERSION" ]; kemudian
  # sertakan .bashrc jika ada
  if [ -f "$HOME/.bashrc" ]; kemudian
    . "$HOME/.bashrc"
  fi
fi

Modularitas Adalah Yang Terbaik

Jika Anda memiliki banyak alias, atau Anda ingin menggunakan alias yang sama di sejumlah mesin, yang terbaik adalah menyimpannya di file mereka sendiri, dan sama dengan fungsi shell Anda. Anda dapat memanggil file-file itu dari file “~/.bashrc” Anda.

Di komputer uji kami, alias disimpan dalam file bernama ".bash_aliases" dan file bernama ".bash_functions" menyimpan fungsi shell.

Anda dapat membacanya dari dalam file “~/.bashrc” Anda seperti ini:

 # baca di alias saya
if [ -f ~/.bash_aliases ]; kemudian
  . ~/.bash_aliases
fi

# baca di fungsi shell saya
jika [ -f ~/.bash_functions ]; kemudian
  . ~/.bash_functions
fi 
Cara Membuat Alias ​​​​dan Fungsi Shell di Linux
TERKAIT Cara Membuat Alias ​​​​dan Fungsi Shell di Linux

Ini memungkinkan Anda dengan mudah memindahkan alias dan fungsi antar komputer dengan mudah. Anda hanya perlu menambahkan baris di atas ke file “~/.bashrc” di setiap komputer dan menyalin file yang berisi alias dan fungsi shell ke direktori home Anda di setiap komputer.

Artinya, Anda tidak perlu menyalin semua definisi dari "~/.bashrc" di satu komputer ke file "~/.bashrc" di masing-masing komputer lainnya. Ini juga lebih baik daripada menyalin seluruh file "~/.bashrc" antar komputer, terutama jika mereka menjalankan Bash pada distribusi yang berbeda.

Kesimpulan

File yang benar-benar perlu Anda ketahui adalah:

  • /etc/profile : Pengaturan konfigurasi seluruh sistem. Digunakan oleh shell login.
  • ~/.bash_profile : Digunakan untuk menyimpan pengaturan untuk pengguna individu. Digunakan oleh shell login.
  • ~/.bashrc : Digunakan untuk menyimpan pengaturan untuk pengguna individu. Digunakan oleh shell non-login interaktif. Mungkin juga dipanggil dari file “~/.bash_profile” atau “~/.profile” Anda untuk shell login.

Salah satu metode mudah adalah dengan menempatkan pengaturan pribadi Anda di "~/.bashrc", dan pastikan file "~./bash_profile" Anda memanggil file "~/.bashrc" Anda. Itu berarti pengaturan pribadi Anda disimpan dalam satu file tunggal. Anda akan mendapatkan lingkungan shell yang konsisten di seluruh shell login dan non-login. Menggabungkan ini dengan menyimpan alias dan fungsi shell Anda di file non-sistem adalah solusi yang rapi dan kuat.