Linux/macOS的环境配置文件(startup文件)

本文详细介绍了Linux和macOS系统中Shell的启动文件,包括如何查看和切换Shell,以及不同类型的Shell模式。重点讲解了bash的startup文件,如`profile`和`rc`系列,它们在登录和非登录shell、交互式和非交互式shell中的执行场景。通过实验展示了startup文件的调用关系,如`.bash_profile`、`.bashrc`、`.bash_logout`等,强调了理解启动文件执行时机在设置环境变量和功能的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

查看本机所有Shell

liaijie@Silence  ~  cat /etc/shells
# List of acceptable shells for chpass(1).
# Ftpd will not allow users to connect who are not using
# one of these shells.

/bin/bash
/bin/csh
/bin/dash
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh

使用cat /etc/shells可以看到本机有多种shell

查看当前使用的Shell

liaijie@Silence  ~  echo $SHELL
/bin/zsh

使用echo $SHELL打印输出当前使用的命令行工具,可以看到我这里使用的是zsh

切换不同的Shell

使用chsh命令切换shell

liaijie@Silence  ~  chsh -s /bin/bash
Changing shell for liaijie.
Password for liaijie: 

再次查看当前shell

Silence:~ liaijie$ echo $SHELL
/bin/bash

(以上操作环境为macOS,这里只是为了演示,我最后又切回了zsh)


shell的不同模式

以是否登录划分

  • 需要登录的shell(login shell): 需要用户名、密码登录后才能进入的shell,例如远程终端工具(secureCRT、xshell、putty)、开机shell登录、ssh登录、通过su - username切换到新用户

  • 不需要登录的shell(non-login shell):在图形界面中启动一个终端shell、在login shell终端输入bash打开一个新的shell、通过su username切换到新用户

Suswitch user set user id的一个缩写
su 只能获得root的执行权限,不能获得环境变量
su - 能切换到root并获得root的环境变量及执行权限

以交互划分

  • 交互式shell(interactive shell): shell等待你输入命令并解释和执行这些命令,你按了回车以后它会执行你的命令,然后继续等待下一个命令,例如我们直接打开macOS终端。
  • 非交互式shell(non-interactive shell): 一般是指执行shell脚本时的模式,通过bash test.sh这种形式执行脚本文件,它并不与用户交互,而是一次性执行脚本 当脚本执行完毕 shell即终止。

通过echo $-可以查看当前是否为交互式shell,包含i即为交互式,反之则为非交互式

直接打开mac的终端输入一下命令

liaijie@Silence  ~ echo $-
569JNRXZghiklms

可以看到包含i,即为交互式sehll


编写一个.sh脚本,并在脚本中输出$-

#!/bin/zsh
echo $-

运行

zliaijie@Silence  ~ zsh 01.sh
569X

可以看到不包含i,即在运行脚本时为非交互式shell


在一般的 linux或者 unix(macOS也是unix内核)系统中, 都可以通过编辑 bashrcprofile 来设置用户的工作环境, 很多文章对于 profilebashrc 也都有使用, 但究竟每个文件都有什么作用和该如何使用呢?

bash的startup文件

我们一般叫环境配置文件,bash手册中把这类文件成为startup文件,可以想象成是一个脚本,每次启动的时候都会初始化一遍,当然这不是bash才独有的

Linux shell是用户与Linux系统进行交互的媒介,而bash作为目前Linux系统中最常用的shell,它支持的startup文件也并不单一,甚至让人感到费解。本文以CentOS 7系统为例,对bashstartup文件进行一些必要的梳理和总结。

(1)先来看看bash手册上的描述

/etc/profile
The systemwide initialization file, executed for login shells。系统初始化文件,在login shells时执行
/etc/bash.bash_logo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值