linux用戶source .bashrc或.profile找不到文件的解決
linux用戶source .bashrc或.profile找不到文件
之前在debian遇到這種情況,新增加的用戶,每次登入的路徑都顯示sh-42$必須su - 用戶名才能恢復(fù)正常,并且用戶目錄下的.bashrc和其他的配置文件都沒(méi)有辦法source,導(dǎo)致一系列問(wèn)題。
如果是這種情況,極有可能是linux的默認(rèn)啟動(dòng)shell不正確,su切換成超級(jí)用戶,vi /etc/passwd查看用戶相應(yīng)的啟動(dòng)shell,對(duì)比其他正常的用戶的啟動(dòng)shell,如果不一樣則修改成相同即可。。
例如其他正常用戶的shell為/bin/bash ,異常用戶對(duì)應(yīng)的shell是/bin/sh,則將其改為/bin/bash。
Linux .bashrc .bash_profile 和 .profile之間的區(qū)別
1 概述
bash shell使用一些啟動(dòng)文件去設(shè)置環(huán)境變量,這些啟動(dòng)文件為shell本身和系統(tǒng)用戶確定某些bash shell配置,在本文中,我們將了解.bashrc .bash-profile 和 .profile之間的區(qū)別。
2 交互式和非交互式shell
- Bash在交互式shell中提供了兩種模式選項(xiàng),登錄和非登錄 (login and non-login)。
- 當(dāng)我們使用ssh登錄到系統(tǒng)時(shí),我們得到一個(gè)交互式登錄的shell (interactive login shell),這個(gè)shell在被調(diào)用時(shí)會(huì)讀取啟動(dòng)文件。
- 然而,當(dāng)我們?cè)谝粋€(gè)已經(jīng)登錄的shell上調(diào)用一個(gè)新的shell時(shí),我們得到的是一個(gè)交互式的、非登錄的shell。這個(gè)shell只執(zhí)行.bashrc文件
當(dāng)shell不需要任何人類干預(yù)即可執(zhí)行命令時(shí),我們將其稱為非交互式shell (non-interactive shell)。例如,當(dāng)腳本生成子shell來(lái)執(zhí)行命令時(shí),子shell是非交互式shell,子shell不會(huì)執(zhí)行任何啟動(dòng)文件,它從創(chuàng)建它的shell中繼承了環(huán)境變量。
3 bash啟動(dòng)文件
啟動(dòng)文件包含shell啟動(dòng)時(shí)需要執(zhí)行的命令。因此,shell會(huì)自動(dòng)執(zhí)行這些啟動(dòng)文件中的命令來(lái)設(shè)置shell。這個(gè)過(guò)程發(fā)生在顯示命令提示符之前。
3.1 .bash_profile 的意義
.bash_profile文件包含用于設(shè)置環(huán)境變量的命令,因此shell將繼承這些變量。
在交互式登錄shell中,bash首先查找 /etc/profile 文件。如果找到,bash將在當(dāng)前shell中讀取并執(zhí)行它。結(jié)果是 /etc/profile為所有用戶設(shè)置環(huán)境配置
類似地,bash然后檢查主目錄(cd ~ 進(jìn)入的目錄為主目錄)中是否存在 .bash_profile。如果存在,則bash在當(dāng)前shell中執(zhí)行 .bash_profile,Bash然后停止尋找其他文件,如 .bash_login 和 .profile。
如果bash沒(méi)有找到 .bash_profile,那么它將按照順序查找 .bash_login 和 .profile,并只執(zhí)行第一個(gè)可讀的文件。
讓我們研究一個(gè)示例 .bash_profile文件。這里我們重新設(shè)置并導(dǎo)出PATH變量
echo "Bash_profile execution starts.." ? PATH=$PATH:$HOME/bin;? export PATH;? echo "Bash_profile execution stops.."
在交互式登錄shell的命令提示符之前,我們將看到下面的輸出
Bash_profile execution starts..? Bash_profile execution stops..? [example@example ~]$
3.2 .bashrc 的意義
.bashrc包含特定于bash shell的命令。每個(gè)交互式非登錄shell首先讀取 .bashrc,通常,.bashrc是添加別名和bash相關(guān)功能的最佳場(chǎng)所。
bash shell在主目錄中查找 .bashrc文件,并使用source在當(dāng)前shell中執(zhí)行它。
讓我們通過(guò)樣例認(rèn)識(shí) .bashrc文件
echo "Bashrc execution starts.."? alias elui='top -c -u $USER'? alias ll='ls -lrt'? echo "Bashrc execution stops.."
在交互式非登錄shell的命令提示符之前,我們將看到下面的輸出
[example@example ~]$ bash Bashrc execution starts..? Bashrc execution stops..? [example@example ~]$
3.2 .profile 的意義
在交互式shell登錄過(guò)程中,如果在主目錄中不存在 .bash_profile,則bash尋找 .bash_login,如果發(fā)現(xiàn)**.bash_login** 則bash執(zhí)行它。如果 .bash_login 不存在主目錄中,則bash尋找 .profile 并執(zhí)行它。
.profile 可以保持與 .bash_profile 或 .bash_login 的配置。它控制著出現(xiàn)的提示,鍵盤聲音,要打開的 shell 以及覆蓋 /etc/profile文件中設(shè)置的變量的單個(gè)配置文件設(shè)置。
4 區(qū)別
在每次交互登錄時(shí),bash shell都會(huì)執(zhí)行 .bash_profile。如果在主目錄中找不到 .bash_profile,bash將執(zhí)行從 .bash_login 和 .profile 中找到的第一個(gè)可讀文件。但是,在每次交互式非登錄shell啟動(dòng)時(shí),bash都會(huì) .bashrc。
通常情況下,環(huán)境變量會(huì)被放入 .bash_profile。由于交互式登錄shell是第一個(gè)shell,因此環(huán)境設(shè)置所需的所有默認(rèn)設(shè)置都被放入**.bash_profile**。因此,它們只設(shè)置一次而且在所有子shell中繼承。
同樣地,別名和函數(shù)也會(huì)被放入 .bashrc 確保每次從現(xiàn)有環(huán)境中啟動(dòng)shell時(shí)都加載這些
然而,為了避免登錄和非登錄交互shell設(shè)置的差異。.bash_profile 調(diào)用 .bashrc。因此,我們將看到下面的代碼片段被插入**.bash_profile**,以便在每個(gè)交互式登錄shell上 .bashrc 也在同樣shell執(zhí)行:
if [ -f ~/.bashrc ]; then? ? ? . ?~/.bashrc;? fi? PATH=$PATH:$HOME/bin export PATH
注意:
總而言之,在使用環(huán)境之前,shell需要其啟動(dòng)文件以配置shell環(huán)境。
在本文中,我們檢查了各種shell模式。然后,我們了解了各種bash啟動(dòng)文件的重要性。最后,我們檢查了這些啟動(dòng)文件之間的差異。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
怎樣給centos系統(tǒng)擴(kuò)展磁盤分區(qū)的實(shí)現(xiàn)方法
這篇文章主要介紹了怎樣給centos系統(tǒng)擴(kuò)展磁盤分區(qū)的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12阿里云centos7服務(wù)器搭建nginx web服務(wù)經(jīng)驗(yàn)示例
本篇文章主要介紹了阿里云centos7服務(wù)器搭建nginx web服務(wù)經(jīng)驗(yàn)示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-08-08快速搭建簡(jiǎn)易、高效、多線程http服務(wù)器
通過(guò)Node.js來(lái)快速高效的搭建一個(gè)高性能http服務(wù)器,github上Charlie Robbins分享了一個(gè)開源項(xiàng)目,讓大家都可以輕松的搭建臨時(shí)高性能http服務(wù)器2018-02-02Linux虛擬主機(jī)面板 kloxo安裝及漢化教程分享
Kloxo的前身是lxadmin,是一款免費(fèi)的虛擬主機(jī)管理系統(tǒng),安裝簡(jiǎn)單,功能強(qiáng)大,可以快速地在red hat,centos系列l(wèi)inux系統(tǒng)的主機(jī)上搭建LAMP環(huán)境。新版以完全解除限制無(wú)限域名綁定2012-09-09詳解Linux系統(tǒng)無(wú)法上網(wǎng)解決方案
本篇文章主要介紹了詳解Linux系統(tǒng)無(wú)法上網(wǎng)解決方案,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-06-06linux云服務(wù)搭建七日殺服務(wù)器的詳細(xì)流程
這篇文章主要介紹了linux云服務(wù)搭建七日殺服務(wù)器的詳細(xì)流程,本文通過(guò)實(shí)例相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-08-08