Sự khác biệt giữa .profile và .bash_profile và tại sao tôi không có tệp .profile trên hệ thống của mình?


12

Vì vậy, tôi khá mới với Linux và gần đây đã cài đặt Fedora 19 trên netbook của tôi. Tôi muốn hiểu sâu hơn về Linux và CLI vì vậy bây giờ tôi đang đọc Tìm hiểu về Linux: Con đường khó khăn .

Trong bài tập 3 tác giả đưa ra các lệnh sau:

  • ls -al
  • mèo.

Tôi cố gắng làm theo các hướng dẫn này nhưng vô ích. Không có tệp .profile trong thư mục tên người dùng của tôi như tôi có thể thấy từ ls -al. Từ những gì tôi đã học được tệp .bash_profile và .profile thực tế giống nhau. Sự khác biệt duy nhất tôi đã kết luận từ nghiên cứu của mình là .bash_profile được kiểm tra trước.

Điều tôi không hiểu là tại sao có nhiều tệp cho cùng một chức năng trong Linux, tại sao Tác giả sử dụng .profile chứ không phải .bash_profile (nếu tôi hiểu chính xác .profile sẽ không được đọc khi hệ thống tìm thấy .bash_profile trước) và tại sao tôi không có tệp .profile trên hệ thống của mình?


Xem thêm unix.stackexchange.com/questions/45684/ mà trả lời một phần câu hỏi của bạn. Hơn nữa, unix.stackexchange.com/questions/67940/ cho thấy một trong những lý do tại sao các tệp khác nhau này có thể dẫn đến sự nhầm lẫn cho các nội dung nâng cao hơn bạn có thể xử lý.
msw

Câu trả lời:


13

Những .profilengày trở lại vỏ Bourne ban đầu được gọi là sh. Vì shell GNU bashlà (tùy thuộc vào các tùy chọn của nó) là một superset của shell Bourne, cả hai shell đều có thể sử dụng cùng một tệp khởi động. Đó là, với điều kiện chỉ shcác lệnh được đưa vào.profile

Ví dụ, aliaslà một lệnh tích hợp hợp lệ bashnhưng không xác định sh. Do đó, nếu bạn chỉ có một .profiletrong thư mục nhà của bạn và đặt một aliastuyên bố trong đó, shsẽ phàn nàn. Vì vậy, có một tệp cụ thể bash có các lệnh khởi tạo shell mà bash sẽ đọc nếu và chỉ khi không có .profiletệp nào.

Trên thực tế, đó là một chút đơn giản hóa trong một số cài đặt và tôi không quen với Fedora. Trong bash, /etc/profileđược đọc bởi shell trước bất kỳ tệp nào trong thư mục chính của bạn. Nếu có một kịch bản khởi tạo trên toàn hệ thống, nó thường nói một cái gì đó như

if there is a $HOME/.profile:
   source it
elseif bash is my shell and there is a $HOME/.bash_profile:
   source that

Tại sao lại như vậy? Một nỗ lực tương thích qua nhiều thập kỷ phương ngữ vỏ. Tại sao hướng dẫn được viết theo cách đó? Vỏ Bourne thường không được sử dụng nhiều nữa và một số người thậm chí không biết rằng có vỏ nào khác giống Bourne hơn bash. Ngay cả khi cú pháp Bourne (giới hạn) được sử dụng để tương thích đa nền tảng lớn hơn, nó vẫn thường được chạy dashhoặc bash trong chế độ tương thích POSIX. Thật vậy, nguồn shell Bourne thực tế có lẽ là một thành phần bản quyền của Unix System V dường như là tài sản của Novell nhưng tôi không biết họ đang làm gì với nó.

Đối với người dùng mới bắt đầu, sử dụng một trong hai $HOME/.profilehoặc $HOME/.bash_profilekhông phải cả hai và bạn sẽ ổn. Vì bạn đã có một .bash_profilecông việc với điều đó bởi vì nó có thể có những thứ cụ thể của hệ thống trong đó mà bạn cần cài đặt.


Cảm ơn! Tôi nghĩ rằng tôi hiểu nó tốt hơn một chút bây giờ, vẫn còn rất nhiều điều để học tôi đoán.
Emiroe

Rất nhiều trong số đó là rác lịch sử mà bạn thực sự không cần phải biết; chỉ tập trung vào đoạn cuối của câu trả lời của tôi. Ngoài ra, vì bạn là người mới ở đây, bạn có thể nâng cấp chấp nhận câu trả lời là hình thức cảm ơn cao nhất ở đây.
msw

Vâng, tôi đã chấp nhận câu trả lời của bạn. Tôi không mong đợi ai đó sẽ nỗ lực nhiều như vậy nên tôi rất biết ơn. Tôi đã chấp nhận câu trả lời của bạn nhưng tôi không thể đưa ra câu trả lời vì nó yêu cầu 15 danh tiếng và tôi chỉ có 8. Rất tiếc vì điều đó!
Emiroe

Tôi quên mất giới hạn 15 rep; Bạn đúng.
msw

4
Phần thưởng lịch sử số 1 : vỏ Bourne thực sự cuối cùng đã thoát khỏi cảnh giam cầm. minnie.tuhs.org có mã nguồn đầy đủ của V7 (bản phát hành unix đầu tiên với vỏ Bourne) và heirloom.sourceforge.net có phiên bản vỏ Bourne gần đây hơn một chút mà vẫn có thể sử dụng được. Phần thưởng lịch sử số 2 : aliasđược POSIX yêu cầu nên không có nhiều người shxung quanh không biết về nó.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.