linux用户source .bashrc或.profile找不到文件的解决

 更新时间:2023年04月28日 09:02:43   作者:OctopusMonster  
这篇文章主要介绍了linux用户source .bashrc或.profile找不到文件的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

linux用户source .bashrc或.profile找不到文件

之前在debian遇到这种情况,新增加的用户,每次登入的路径都显示sh-42$必须su - 用户名才能恢复正常,并且用户目录下的.bashrc和其他的配置文件都没有办法source,导致一系列问题。

如果是这种情况,极有可能是linux的默认启动shell不正确,su切换成超级用户,vi /etc/passwd查看用户相应的启动shell,对比其他正常的用户的启动shell,如果不一样则修改成相同即可。。

例如其他正常用户的shell为/bin/bash ,异常用户对应的shell是/bin/sh,则将其改为/bin/bash。

Linux .bashrc .bash_profile 和 .profile之间的区别

1 概述

bash shell使用一些启动文件去设置环境变量,这些启动文件为shell本身和系统用户确定某些bash shell配置,在本文中,我们将了解.bashrc .bash-profile 和 .profile之间的区别。

2 交互式和非交互式shell

  • Bash在交互式shell中提供了两种模式选项,登录和非登录 (login and non-login)。
  • 当我们使用ssh登录到系统时,我们得到一个交互式登录的shell (interactive login shell),这个shell在被调用时会读取启动文件。
  • 然而,当我们在一个已经登录的shell上调用一个新的shell时,我们得到的是一个交互式的、非登录的shell。这个shell只执行.bashrc文件

当shell不需要任何人类干预即可执行命令时,我们将其称为非交互式shell (non-interactive shell)。例如,当脚本生成子shell来执行命令时,子shell是非交互式shell,子shell不会执行任何启动文件,它从创建它的shell中继承了环境变量。

3 bash启动文件

启动文件包含shell启动时需要执行的命令。因此,shell会自动执行这些启动文件中的命令来设置shell。这个过程发生在显示命令提示符之前。

3.1 .bash_profile 的意义

.bash_profile文件包含用于设置环境变量的命令,因此shell将继承这些变量。

在交互式登录shell中,bash首先查找 /etc/profile 文件。如果找到,bash将在当前shell中读取并执行它。结果是 /etc/profile为所有用户设置环境配置

类似地,bash然后检查主目录(cd ~ 进入的目录为主目录)中是否存在 .bash_profile。如果存在,则bash在当前shell中执行 .bash_profile,Bash然后停止寻找其他文件,如 .bash_login 和 .profile。

如果bash没有找到 .bash_profile,那么它将按照顺序查找 .bash_login 和 .profile,并只执行第一个可读的文件。

让我们研究一个示例 .bash_profile文件。这里我们重新设置并导出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的命令。每个交互式非登录shell首先读取 .bashrc,通常,.bashrc是添加别名和bash相关功能的最佳场所。

bash shell在主目录中查找 .bashrc文件,并使用source在当前shell中执行它。

让我们通过样例认识 .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登录过程中,如果在主目录中不存在 .bash_profile,则bash寻找 .bash_login,如果发现**.bash_login** 则bash执行它。如果 .bash_login 不存在主目录中,则bash寻找 .profile 并执行它。

.profile 可以保持与 .bash_profile 或 .bash_login 的配置。它控制着出现的提示,键盘声音,要打开的 shell 以及覆盖 /etc/profile文件中设置的变量的单个配置文件设置。

4 区别

在每次交互登录时,bash shell都会执行 .bash_profile。如果在主目录中找不到 .bash_profile,bash将执行从 .bash_login 和 .profile 中找到的第一个可读文件。但是,在每次交互式非登录shell启动时,bash都会 .bashrc。

通常情况下,环境变量会被放入 .bash_profile。由于交互式登录shell是第一个shell,因此环境设置所需的所有默认设置都被放入**.bash_profile**。因此,它们只设置一次而且在所有子shell中继承。

同样地,别名和函数也会被放入 .bashrc 确保每次从现有环境中启动shell时都加载这些

然而,为了避免登录和非登录交互shell设置的差异。.bash_profile 调用 .bashrc。因此,我们将看到下面的代码片段被插入**.bash_profile**,以便在每个交互式登录shell上 .bashrc 也在同样shell执行:

if [ -f ~/.bashrc ];
then 
    .  ~/.bashrc; 
fi 
PATH=$PATH:$HOME/bin export PATH

注意:

总而言之,在使用环境之前,shell需要其启动文件以配置shell环境。

在本文中,我们检查了各种shell模式。然后,我们了解了各种bash启动文件的重要性。最后,我们检查了这些启动文件之间的差异。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 怎样给centos系统扩展磁盘分区的实现方法

    怎样给centos系统扩展磁盘分区的实现方法

    这篇文章主要介绍了怎样给centos系统扩展磁盘分区的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • 阿里云centos7服务器搭建nginx  web服务经验示例

    阿里云centos7服务器搭建nginx web服务经验示例

    本篇文章主要介绍了阿里云centos7服务器搭建nginx web服务经验示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • Linux加载vmlinux调试

    Linux加载vmlinux调试

    今天小编就为大家分享一篇关于Linux加载vmlinux调试,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02
  • Centos/Ubuntu下安装nodejs教程

    Centos/Ubuntu下安装nodejs教程

    本篇文章主要介绍了Centos/Ubuntu下安装nodejs教程,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • 快速搭建简易、高效、多线程http服务器

    快速搭建简易、高效、多线程http服务器

    通过Node.js来快速高效的搭建一个高性能http服务器,github上Charlie Robbins分享了一个开源项目,让大家都可以轻松的搭建临时高性能http服务器
    2018-02-02
  • Linux虚拟主机面板 kloxo安装及汉化教程分享

    Linux虚拟主机面板 kloxo安装及汉化教程分享

    Kloxo的前身是lxadmin,是一款免费的虚拟主机管理系统,安装简单,功能强大,可以快速地在red hat,centos系列linux系统的主机上搭建LAMP环境。新版以完全解除限制无限域名绑定
    2012-09-09
  • 详解Linux系统无法上网解决方案

    详解Linux系统无法上网解决方案

    本篇文章主要介绍了详解Linux系统无法上网解决方案,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • Ubuntu下Telnet服务器的配置方法

    Ubuntu下Telnet服务器的配置方法

    这篇文章主要介绍了Ubuntu下Telnet服务器的配置方法的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-11-11
  • linux云服务搭建七日杀服务器的详细流程

    linux云服务搭建七日杀服务器的详细流程

    这篇文章主要介绍了linux云服务搭建七日杀服务器的详细流程,本文通过实例相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • linux文件目录管理命令整理总结

    linux文件目录管理命令整理总结

    在本篇文章里小编给大家整理的是关于linux文件目录管理命令整理总结,需要的朋友们参考下。
    2019-11-11

最新评论