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

目录
  • linux用户source .bashrc或.profile找不到文件
  • Linux .bashrc .bash_profile 和 .profile之间的区别
    • 1 概述
    • 2 交互式和非交互式shell
    • 3 bash启动文件
    • 4 区别
  • 总结

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启动文件的重要性。最后,我们检查了这些启动文件之间的差异。

总结

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

(0)

相关推荐

  • Linux bash:./xxx:无法执行二进制文件报错

    今天给客户发了一个ubuntu下的小工具,用户到手后运行不了, 报错: 一开始以为是全权限的问题,所以让她"ls -la"一下,看看权限,但是结果是ok的,权限没问题 后来发现他是用的是32bit的ubuntu系统,而我们使用的是ubuntu64bit编译出来的程序,所以叫她换成64bit的ubuntu,就ok了. 到此这篇关于Linux bash:./xxx:无法执行二进制文件报错的文章就介绍到这了,更多相关Linux 无法执行二进制文件 内容请搜索我们以前的文章或继续浏览下面的相关

  • vue 动态设置img的src地址无效,npm run build 后找不到文件的解决

    动态设置img的src属性无效,而直接写可以 解决办法: imgSrc写成require('path'): 原因: 动态添加src被当做静态资源处理了,没有进行编译 npm run build 后出现 xxxxxxx net::ERR_FILE_NOT_FOUND 解决办法: 进入:build文件夹 > 打开 webpack.prod.conf.js 找到:output 对象 添加:publicPath:'./' 具体写法: publicPath: process.env.NODE_ENV ==

  • Java常见问题之javac Hello.java找不到文件的解决方法

    前言 对于初学者们来说,刚开始编写Java代码时,会遇到很多困难,下面来说一个比较常见的错误,如下: 初学者一般都是从Hello,World开始的学起的,废了好大劲儿,铜鼓了半天,终于要在DOS上运行javac Hello.java时,就会报错:找不到文件 解决办法 要在如下几个步骤中进行排查: 1.检查环境变量是否配置正确.输出一个javac指令,能输出帮助信息,说明配置信息无误(下图说明环境变量配置,没问题). 2.环境配置正确,再看一下执行的java文件所在路径是否正确. 3.这个比较容易

  • linux .bash_profile和.bashrc的什么区别

    /etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行. 并从/etc/profile.d目录的配置文件中搜集shell的设置. /etc/bashrc:为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取. ~/.bash_profile:每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该 文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件. ~/.bashrc

  • 完美解决linux下node.js全局模块找不到的情况

    今天在在linux上用npm安装了pm2准备部署node项目,结果通过pm2命令启动项目的时候报pm2找不到,这很伤,以为pm2没有安装成功,但是在node安装目录下面的bin文件夹里面调用pm2却没问题. /usr/local/node/node-v7.3.0-linux-x64/bin/pm2 list 类似这样调用pm2 list命令查看pm2启动的项目没有任何问题. 原来linux系统上通过npm全局安装了模块以后,不能像windos下面那样自动配置环境变量,需要自己动手配置...好吧,

  • 解决linux下node.js全局模块找不到的问题

    今天在在linux上用npm安装了pm2准备部署node项目,结果通过pm2命令启动项目的时候报pm2找不到,这很伤,以为pm2没有安装成功,但是在node安装目录下面的bin文件夹里面调用pm2却没问题. /usr/local/node/node-v7.3.0-linux-x64/bin/pm2 list 类似这样调用pm2 list命令查看pm2启动的项目没有任何问题. 原来linux系统上通过npm全局安装了模块以后,不能像windos下面那样自动配置环境变量,需要自己动手配置...好吧,

  • Linux用户和用户组管理方法介绍

    目录 一.用户账号的管理 1.添加新的用户账号使用useradd命令,其语法如下: 2.删除帐号 3.修改帐号 4.用户口令的管理 二.用户组的管理 1.增加一个新的用户组使用groupadd命令.其格式如下: 2.如果要删除一个已有的用户组,使用groupdel命令,其格式如下: 3.修改用户组的属性使用groupmod命令.其语法如下: 4.如果一个用户同时属于多个用户组,那么用户可以在用户组之间切换,以便具有其他用户组的权限. 三.与用户账号有关的系统文件 1./etc/passwd文件,

  • Linux用户在第一次登录时强制更改初始密码

    下面介绍如何迫使用户在下一次登录时更改其密码. Linux下的每个用户帐户都与和密码相关的各个配置和信息关联起来.比如说,它记得上一次密码更改的日期.密码更改间隔的最少/最多天数以及何时让当前密码到期失效,等等. 一种名为chage的命令行工具可以访问和调整与密码到期失效有关的配置.你可以使用该工具,迫使任何用户在下一次登录时更改密码. 想查看某一个用户(比如alice)的密码到期失效信息,运行下面这个命令.请注意:只有在你检查你自己之外的其他任何用户的密码有效期信息时,才需要根用户权限. $

  • Linux用户配置sudo权限(visudo)的方法

    sudo的工作过程如下: 1,当用户执行sudo时,系统会主动寻找/etc/sudoers文件,判断该用户是否有执行sudo的权限 2,确认用户具有可执行sudo的权限后,让用户输入用户自己的密码确认 3,若密码输入成功,则开始执行sudo后续的命令 4,root执行sudo时不需要输入密码(eudoers文件中有配置root ALL=(ALL) ALL这样一条规则) 5,若欲切换的身份与执行者的身份相同,也不需要输入密码 visudo使用vi打开/etc/sudoers文件,但是在保存退出时,

  • FTP服务器中将Linux用户限制在自己目录下的方法

    第一步:创建一个 ftp guest 组,用 groupadd 命令,也可以用 ftp 服务器创建的 ftp 组. #less /etc/group  //看看是否存在,如果装了ftp server的话都有这个组存在: 第二步:在 ftp 组中添加 ftp 用户: 第三步:修改 /etc/ftpaccess 文件,加入 guestgroup 的定义: guestgroup ftp; 或者用 guestuser 直接指定 ftp 用户名,如: #guestuser ftpuser: 第四步:向这个

  • Linux用户磁盘配额设置方法

    一:内核中支持QUOTA: [root@localhost /]# grep CONFIG_QUOTA /boot/config-3.10.0-123.el7.x86_64 CONFIG_QUOTA=y CONFIG_QUOTA_NETLINK_INTERFACE=y # CONFIG_QUOTA_DEBUG is not set CONFIG_QUOTA_TREE=y CONFIG_QUOTACTL=y CONFIG_QUOTACTL_COMPAT=y 如果有上列输出,则表示当前内核已经支持q

随机推荐