Linux 中 ~/.profile 和 ~/.bashrc
2026/6/16 12:58:07 网站建设 项目流程

一、主要内容

理解 ~/.profile和~/.bashrc的区别,知道他们是干什么的,会一些实际应用。

二、概念理解

(1)./profile主要针对ssh等远程登录会话有效。

(2).bashrc主要针对当前本地登录的终端bash。

(3)profile 和 bashrc 都是配置shell 终端的命令;只是加载时机、适用场景、承载内容有严格区分

(3)shell是一个壳,里面有很多程序,bash只是里面一种终端交互进程。

shell里面常用的两个交互程序: 1. bash(Bourne-Again Shell,Linux 默认交互 Shell,你日常用的) 程序文件:/bin/bash 定位:sh 的超集,完全兼容 sh,增加大量独有功能 独有特性:alias、自定义函数、[[ ]] 条件、数组、PS1 提示符、补全增强、source、~/.bashrc 使用场景:桌面终端、SSH 远程登录、日常手动敲命令 配套配置:.bashrc、.bash_profile 2. dash(Debian Almquist Shell,Ubuntu 系统专用轻量 sh) 程序文件:/bin/dash 特点:体积极小、启动速度飞快,功能阉割,只实现 POSIX 标准,无 bash 扩展 Ubuntu 规则:系统默认把 /bin/sh 链接到 dash,所有开机、apt、服务启动脚本都用它,加快开机速度 缺点:不识别 alias、bash 数组、[[ ]] 等语法

下面是使用ssh 远程登录 的查看进程所属关系,目前进程使用的bash。

pstree命令可查看: systemd─| ├─sshd─┬─sshd───sshd─┬─bash───pstree │ │ └─bash───sleep │ └─sshd───sshd───sftp-server

ssh远程登录使用dash 命令 进入dash后

//使用dash 零时进入dash ;再 pstree 命令 systemd─┬ ├─sshd─┬─sshd───sshd─┬─bash───dash───pstree │ │ └─bash───sleep │ └─sshd───sshd───sftp-server

三、图示比较

维度~/.profile~/.bashrc
加载次数登录仅 1 次每开终端执行一次
适用 shell所有 POSIX shell(sh/bash/dash)仅 bash
存放内容全局环境变量 PATH、SDK 路径alias、函数、提示符、交互设置
刷新命令source ~/.profile(仅 SSH / 登录会话生效)source ~/.bashrc(新开终端立刻生效)
你容易踩坑放 alias 会失效(非 bash 登录 shell 不认)放大量 export 会重复加载,拖慢终端启动

四、修改用户前缀

修改前:

PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '

修改后:

PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '

修改内容去掉:@\h就会改变终端的显示
效果:修改前 kickpi@kickpi:~$ 修改后: kickpi:~$

修改文件~/.bashrc #60 和 #62 if [ "$color_prompt" = yes ]; then #PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' else PS1='${debian_chroot:+($debian_chroot)}\u:\w\$ ' #PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ' fi 立即生效命令 resource ~/.bashrc

五、profile文件分析

下面是默认的profile文件,会加载~/.bashrc,所以不管是

  • 先判断现在是不是 bash;
  • 如果是 bash,再检查有没有.bashrc
  • 文件存在就加载它;
if [ -n "$BASH_VERSION" ]; then # include .bashrc if it exists if [ -f "$HOME/.bashrc" ]; then . "$HOME/.bashrc" fi fi # set PATH so it includes user's private bin if it exists if [ -d "$HOME/bin" ] ; then PATH="$HOME/bin:$PATH" fi # set PATH so it includes user's private bin if it exists if [ -d "$HOME/.local/bin" ] ; then PATH="$HOME/.local/bin:$PATH" fi

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询