Apa perbedaan antara ~ / .profile, ~ / .bashrc, ~ / .bash_profile, ~ / .gnomerc, / etc / bash_bashrc, / etc / screenrc…?

68

Jawaban atas pertanyaan pada SO dan askubuntu , bersama dengan menusuk (dan membaca header) $HOMEdan /etc/, menunjukkan sejumlah file yang dapat digunakan untuk mengatur variabel lingkungan, termasuk:

  • ~/.profile
  • ~/.bashrc
  • ~/.bash_profile
  • ~/.gnomerc
  • ~/.Rprofile
  • /etc/bash_bashrc
  • /etc/profile
  • /etc/screenrc

Saya mengumpulkan bahwa file dalam /etc/pekerjaan untuk semua pengguna sedangkan file dalam $HOMEadalah khusus pengguna. Saya juga mengumpulkan yang .profiledimuat saat login sedangkan .bashrcdimuat ketika /bin/bashdijalankan. Saya juga mengerti bahwa program yang berbeda memiliki file pengaturan yang berbeda (misalnya .Rprofileuntuk R). Tetapi saya akan menghargai beberapa klarifikasi:

  • Apakah *rcdan *profilefile pada dasarnya berbeda?
  • Apa ruang lingkup file tersebut (misalnya file mana yang biasanya digunakan dengan Linux)
  • Apakah ada hierarki (misalnya, .bashrcvariabel yang ditimpa diatur di .settings)
  • Apa referensi yang bagus untuk kelas file ini? Untuk opsi dalam file ini?

Pertanyaan terkait

Abe
sumber
3
Lihat INVOCATIONbagian dalam man bash. Lihat FHSartikel wiki di sistem file Linux. Itu akan memberi Anda awal yang baik dan menjawab beberapa pertanyaan ini. File dengan titik sebelumnya ( .) biasanya khusus pengguna - mereka berada di $HOMEdirektori pengguna .
3
Mereka semua? Benarkah?
Ignacio Vazquez-Abrams
@ IgnacioVazquez-Abrams Saya tidak mencari detailnya, hanya gambaran umum tentang bagaimana mereka berhubungan dan kapan satu harus digunakan di atas yang lain.
Abe

Jawaban:

48

Pengaturan file konfigurasi jauh lebih seragam daripada pertanyaan Anda tampaknya menyiratkan. Tidak ada "kelas", tidak ada "hierarki", dan tidak ada "konfigurasi czar" global atau komite yang menetapkan sintaksis umum atau generalisasi bersih yang bagus lainnya seperti yang Anda cari. Hanya ada banyak aplikasi yang terpisah seperti R, bash, screendan lingkungan desktop GNOME, semuanya memiliki cara mereka sendiri dalam melakukan sesuatu, sehingga Anda harus melihat dokumentasi untuk setiap program individu untuk menjawab spesifik pertanyaan tentang file tertentu. Jika tampaknya ad-hoc, itu karena: sebagian besar perangkat lunak Unix / Linux di luar sana dikembangkan untuk tujuan yang berbeda oleh orang yang berbeda yang semuanya melakukan konfigurasi sedikit berbeda.

Untuk menjawab pertanyaan Anda secara langsung:

  • *rcdan *profiletidak terlalu berarti, jadi pertanyaan ini tidak bisa dijawab. "rc" hanyalah singkatan atau akhiran yang biasa digunakan untuk file konfigurasi. Etimologinya kembali ke zaman kuno (pada tahun-tahun komputer), dan mungkin berarti menjalankan perintah (dari runcom ). Hanya karena aplikasi menggunakan kata yang sama tidak berarti mereka menyetujui konvensi. "profil" adalah sufiks yang jauh lebih jarang.

  • Tentukan "ruang lingkup". Sebagian besar aplikasi tidak berbagi file konfigurasi dengan aplikasi lain yang tidak terkait. Satu-satunya pengecualian yang mungkin adalah /etc/profiledan .profile, yang dapat digunakan oleh beberapa shell yang berbeda (termasuk setidaknya shdan bash). Ada sesuatu yang disebut lingkungan yang terkait dengan setiap proses yang berjalan yang dapat berisi variabel yang dapat mempengaruhi perilaku proses tersebut. Secara umum, variabel lingkungan diatur oleh file konfigurasi shell yang sesuai, atau mungkin file konfigurasi lingkungan desktop grafis apa pun yang Anda gunakan. Ada juga file konfigurasi untuk "perpustakaan", seperti .inputrcuntuk readline dan .gtkrc*untuk GTK, yang akan memengaruhi setiap aplikasi yang menggunakan perpustakaan.

  • Tidak, tidak ada hierarki global untuk file konfigurasi. Sekali lagi, lihat dokumentasi untuk program spesifik yang dimaksud, misalnya, bashmanual untuk bash. Konvensi umum yang biasanya dapat Anda andalkan adalah pengaturan pengguna dalam $HOMEmengesampingkan konfigurasi seluruh sistem di /etc. Ini biasanya dilakukan dengan membaca file pengguna setelah sistem, sehingga pengaturan kemudian menimpa yang sebelumnya. Namun, ini bukan jaminan, dan untuk jawaban pasti Anda harus merujuk ke dokumentasi untuk program khusus yang Anda gunakan.

  • Tidak ada "kelas", setidaknya tidak ada yang cukup umum untuk mencakup semua file yang Anda daftarkan dalam pertanyaan Anda, jadi pertanyaan tentang referensi untuk "kelas" seperti itu masih bisa diperdebatkan. Sekali lagi, lihat dokumentasi program khusus yang Anda gunakan.

jw013
sumber
5

Saya pikir pertanyaan ini terlalu luas pada banyak tingkatan, misalnya Anda mengajukan pertanyaan tentang setidaknya empat program berbeda dalam satu pertanyaan. Saya hanya akan melihat perbedaan antara file konfigurasi di /etcdan $HOME.

Unix adalah sistem operasi multi-user, ini berarti banyak orang yang berbeda dapat menggunakan sistem, baik dengan menggunakan ssh, telnetatau Xorg. Untuk memberikan konfigurasi standar bagi pengguna Anda, Anda dapat memberikan konfigurasi seluruh sistem /etc/, ini biasanya juga digunakan oleh Distribusi Anda untuk memberikan konfigurasi global untuk misalnya bashatau screen.

Di sisi lain, beberapa pengguna ingin menyesuaikan pengaturan untuk program mereka sendiri seperti ikatan kunci, warna, atau tampilan. Ini dilakukan melalui file konfigurasi di file $HOME. Jadi singkatnya /etc/memberikan konfigurasi sistem lebar sedangkan file konfigurasi dalam $ HOME memungkinkan pengguna untuk mengubah / mengganti konfigurasi sistem lebar.

Ulrich Dangel
sumber
3

Sebagian dari jawabannya berasal dari pos ini :

.bashrc adalah skrip shell yang dijalankan Bash setiap kali dijalankan secara interaktif.

Kontras .bash_profiledan .profileyang hanya berjalan di awal shell login baru. (bash -l)

Anda memilih apakah perintah masuk .bashrcvs .bash_profiletergantung pada apakah Anda ingin dijalankan sekali atau untuk setiap shell interaktif mulai.

Stan
sumber