LinuxGod

LinuxGod.net
Linux大神网——精选每一篇高品质的技术干货
  1. 首页
  2. 开源快讯
  3. 正文

Bash字符界面的点文件配置及配置概览

2023年7月5日 236点热度

(本文字数:8713,阅读时长大概:12分钟)

操作系统的最内层——也就是跟你直接打交道的——叫做shell(“外壳”)。Fedora预装了好几种不同的shell。shell可以是图形界面,或则字符界面。在文档中,你经常能看到两个母简写词GUI(图形用户界面(GraphicalUserInterface))跟CLI(命令行界面(Command-LineInterface)),它们拿来分辨图形和基于字符的shell/界面。GNOME和Bash分别是Fedora默认的图形和命令行界面,不过你也可以使用其它GUI或则CLIshell。

接出来在这篇文章中,我们会讨论一些比较推荐的Bash字符界面的点文件配置。

Bash概览

Bash参考指南中写道:

根本上来说,shell只是一个能执行命令的宏处理器。宏处理器这个词意味着通过扩充文本跟符号,因而构成更复杂的表达式。

Bash参考指南第五版,Bash5.02019年5月

不仅能使用其它程序之外,Bashshell还富含一些外置命令和关键字。Bash外置功能很强悍,甚至还能作为一门中级语言独当一面。Bash的几个关键字和操作符类似于C语言。

Bash还能以交互式或非交互式模式启动。Bash的交互模式是一个好多人都熟悉的典型的终端/命令行界面。GNOME终端默认以交互模式打开Bash。Bash在非交互模式下运行的事例是,当命令和数据从文件或shell脚本通过管路传送到Bash时。其它Bash可以运行的模式包括:登陆(login)、非登陆(non-login)、远程(remote)、POSIX、Unixsh、受限(restricted),以及使用与用户不同的UID/GID模式。各类模式是可以互相组合的。例如,交互式+受限+POSIX或则非交互式+非登陆+远程。不同的启动模式,决定着Bash所读取的启动文件。理解这种操作模式,有助于帮助我们更改启动文件。

按照Bash参考指南,它会:

Bash参考文档第五版,Bash版本5.02019年5月

当用户开启终端模拟器步入命令行环境时,便启动了一次交互式shell会话。GNOME终端默认以非登陆模式为用户打开Shell。你可以在“编辑→首选项→配置文件→命令(Edit→Preferences→Profilles→Command)”中配置GNOME终端以何种模式(登陆与非登陆式)启动。也可以在Bash启动时通过向其传递-login标志来要求步入登陆模式。要注意一点,Bash的登陆模式与非交互模式并不互斥。可以让Bash同时以登陆模式和非交互模式运行。

启动Bash

除非传入-noprofile选项,否则登陆模式的Bashshell会默认读取并执行个别初始化文件中命令。假如/etc/profile存在linux设置环境变量env,它会是第一个被执行的文件,紧接着是按~/.bash_profile、~/.bash_login或~/.profile次序找到的第一个文件。当用户退出登入模式的shell时,或则有脚本在非交互式登陆模式的shell中调用了外置exit命令,Bash会读取并执行~/.bash_logout中的命令,假如/etc/bash_logout存在的话,会紧接着执行它。一般来说,/etc/profile会引述(source)/etc/bashrc文件,读取并执行其中的命令,之后查找并读取执行/etc/profile.d目录中以.sh结尾的文件。同样的,~/.bash_profile一般也会引述(source)~/.bashrc文件。/etc/bashrc和~/.bashrc就会进行检测,防止重复引述(source)。

(LCTT评注:在Bash中,脚本会通过source或.命令来将另外一个脚本引入其中,这个行为称之为“source”、“sourcing”,并且该行为仍然没有公认且常用的翻译方式。经过多番掂量,我觉得可以译做“援引”,理由如下:1、“援引”具有“引用、引入”的意思,符合该行为;2、“援”这个词的发音和“source”常见的汉语意思“源”同音,以便记忆。以上是我们的浅见,供你们参考讨论。——老王,2020/7/19)

一个交互式的shell,倘若不是登陆shell,这么当它第一次被调用的时侯,会执行~/.bashrc文件。这是用户在Fedora上打开终端时一般会步入的shell类型。当Bash以非交互模式启动——就像运行脚本时那样——它会找寻BASH_ENV环境变量。假如找到了,才会展开它的值作为文件名,接着读取并执行该文件。疗效跟执行以下命令相同:

if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi

值得注意的是linux启动盘制作工具,不会使用PATH环境变量的值来搜索该文件名(LCTT评注:意即不会检索搜索路径)。

重要的用户点文件

Bash最广为人知的用户点文件是~/.bashrc。通过编辑该文件,可以设置大多数个性化选项。因为我们往往须要设置一些选项,会改动前面提到甚至没有提到的文件,所以大部份自定义选项会成为一个麻烦事。Bash环境具有很高的可订制性,正是为了适应不同用户的不同需求。

linux设置环境变量env

linux设置环境变量env

当登陆shell正常退出时,假若~/.bash_logout和/etc/bash_logout存在,它们会被调用。下一幅图展示了Bash作为交互式shell启动时的过程。比如,当用户从桌面环境打开终端模拟器时,会根据以下次序进行。

linux设置环境变量env

我们早已晓得,在不同的启动模式下,Bash会执行不同的命令,所以很显著,只有几种最须要关注的典型启动模式。分别是非交互、交互式登陆shell,和非交互式、交互式非登陆shell。假如想定义个别全局环境,这么须要将一个具有惟一名称、以.sh为后缀的文件(比如custom.sh)放置在/etc/profile.d目录。

对于非交互式非登陆启动方法,须要非常注意。在这些模式下,Bash会检测BASH_ENV变量。假如定义了该变量,Bash会引述它所指向的文件。另外,处理BASH_ENV时并不会使用PATH变量所储存的值(LCTT评注:意即不会检索搜索路径),所以它必须包含执行文件的绝对路径。例如说,假如有人希望非交互式执行脚本时,shell能读取~/.bashrc文件中的设置,这么他可以把类似下边这样的内容放到一个名为/etc/profile.d/custom.sh的文件中...

# custom.sh
.
.
.
# 如果使用 Fedora Workstation
BASH_ENV="/home/username/.bashrc"
.
.
.
# 如果使用 Fedora Silverblue Workstation
BASH_ENV="/var/home/username/.bashrc"
export BASH_ENV

里面这份脚本会让每位shell脚本在运行之前先执行该用户的~/.bashrc。

用户通常还会自定义她们的系统环境,便于契合她们自己的工作习惯与偏好。举例来说,用户可以通过别称来实现这些程度的自定义。拥有相同起始参数、需要频繁使用的命令是制做别称的最佳选择。以下展示了一些来自~/.bashrc文件中定义的别称。

# .bashrc
# 执行全局文件
if [ -f /etc/bashrc ];
   then . /etc/bashrc
fi
.
.
.
# 用户别名和函数
alias ls='ls -hF --color=auto'
alias la='ls -ahF --color=auto'
# 让 dir 命令用起来像在 Windows 那样
alias dir='ls --color=auto --format=long'
# 用颜色高亮 grep 结果
alias grep='grep --color=auto'

在系统中,别称是一种自定义各类命令的方式。它能降低击键次数,但是让命令用上去更便捷。针对用户级别的别称一般储存在该用户的~/.bashrc文件中。

linux设置环境变量env

假如你发觉自己常常要去历史中查找以前执行过的某条命令,那可能须要改改历史设置了。你仍然可以在~/.bashrc文件中设置针对用户级别的历史选项。例如说,如习惯同时使用多个终端,那你可能要启用histappend选项。个别Bash相关的shell选项本质上是布尔值(接收on或off),一般可以用外置命令shopt启用或禁用。接收更复杂的值的Bash选项(如HISTTIMEFORMAT)linux设置环境变量env,往往通过形参给环境变量来达到配置目的。以下演示如何以shell选项和环境变量订制Bash。

# 配置 Bash 历史
# 用制表符扩展目录环境变量,并设置 histappend
shopt -s direxpand histappend
# ignoreboth 等同于 ignorespace 和 ignoredup
HISTCONTROL='ignoreboth'
# 控制 `history` 输出中的时间格式
HISTTIMEFORMAT="[%F %T] "
# 无限历史记录
# NB:在新版 Bash 中,任何 < 0 的写法都有效,但是在 CentOS/RHEL 中,只有这样才行得通
HISTSIZE=
HISTFILESIZE=
# 或者对于使用新版 Bash 的人
HISTSIZE=-1
HISTFILESIZE=-1

里面事例中的direxpand选项,可以让Bash在文件名补全时,用词组展开结果替换目录名。它会改变readline编辑缓冲区的内容,所以你所输入的东西早已被补全得到的结果替换了。

HISTCONTROL变量用于启用或禁用命令历史的个别过滤选项。重复行、以空白打头的行,都能通过该选项将它们从命令历史中过滤掉。引用自DustyMabe,这是我从他那里得到的方法:

ignoredup可以让历史不记录重复条目(假如你反复执行同一条命令)。ignorespace会忽视上面有空白的条目,当你在设置一个包含敏感信息的环境变量或则执行一条不想被记录进c盘的命令时,这就很有用。ignoreboth相当于这两条选项的结合体。

DustyMabe–Redhat首席软件工程师,2020.6.19

对于命令行轻度用户,Bash有一个CDPATH环境变量。假如CDPATH包含一系列供cd命令搜索的目录,且提供一个相对路径作为第一个参数,这么它会按次序检测所有列举的目录,找寻匹配的子目录并切换到第一个匹配结果目录。

# .bash_profile
# 设置 CDPATH
CDPATH="/var/home/username/favdir1:/var/home/username/favdir2:/var/home/username/favdir3"
# 也可以写成这样
CDPATH="/:~:/var:~/favdir1:~/favdir2:~/favdir3"
export CDPATH

CDPATH一般像PATH一样的方法进行更新——通过在形参两侧引用自身来保留原先的值。

# .bash_profile
# 设置 CDPATH
CDPATH="/var/home/username/favdir1:/var/home/username/favdir2:/var/home/username/favdir3"
# 或者写成这样
CDPATH="/:~:/var:~/favdir1:~/favdir2:~/favdir3"
CDPATH="$CDPATH:~/favdir4:~/favdir5"
export CDPATH

PATH是另一个非常重要的变量。它是系统上的命令的搜索路径。注意,有些应用要求将它们自己的目录加入PATH变量,这样就能正常使用。跟CDPATH一样,通过在形参两侧引用原值来追加新值到PATH变量。假如你希望将新值后置,只须要把原先的值($PATH)放在列表末尾即可。还有注意的是在Fedora,这一列值通过逗号分隔(:)。

# .bash_profile
# 添加 PATH 值到 PAHT 环境变量
PATH="$PATH:~/bin:~:/usr/bin:/bin:~/jdk-13.0.2:~/apache-maven-3.6.3"
export PATH

命令提示符是另一个流行的自定义选项。它有七个可订制的参数:

Bash参考文档第五版,Bash版本5.02019年5月

Bash的这一个方面就可以用每篇文章来讨论。你可以找到许许多多信息和事例。在本文末尾链接的储存库中提供了一些点文件范例,包括提示符重新配置。你可以随便使用该储存库中的事例进行学习和体验。

总结

既然你已然把握了一些Bash的工作原理,那就可以轻松更改你的Bash点文件,满足你自己的需求和习惯。美化你的提示符,制做一些别称,这样你的笔记本才真的属于你。查看/etc/profile、/etc/bashrc和/etc/profile.d/那些文件的内容,获得一些启发。

你也可以在这儿写一些关于终端模拟器的评论。有好多办法可以将你最喜欢的终端,完全配置成你想要的样子。你也许早就想到了,而且一般可以通过……嗯……用户家目录的点文件实现这个目的。终端模拟器也可以作为登陆会话启动,有些人总喜欢用登陆环境。你使用终端和笔记本的坐姿,取决于你怎么更改(或不更改)你的点文件。

假如你很好奇自己的命令行处于哪些会话状态,使用下边这个脚本来判定一下。

#!/bin/bash
case "$-" in
   (*i*) echo This shell is interactive ;;
   (*) echo This shell is not interactive ;;
esac

linux设置环境变量env

把这几行放在一个文件里,加上可执行权限,之后运行,还能见到你当前处于何种类型的shell。$-在Bash中是一个变量,倘若是交互式shell,它会包含字母i。据悉,你可以直接输出$-变量之后检测它的输出中是否富含i标记。

$ echo $-

参考信息

可以参考以下资料以获取更多信息和示例。Bash指南也是一个挺好的信息来源。请注意,确保你的本地指南页记录了你当前运行的Bash版本的特点,由于在网上找到的信息有时可能太老(过时了)或太新(你的系统还没有安装)。

对本文有各类方式(点文件示例、提示,以及脚本文件)贡献的社区成员:

示例点文件和脚本可以在这个储存库中找到:

请仔细检测里面所提供的储存库中的信息。有些可能早已过时了。上面还包含好多开发中的自定义脚本和宠物容器(petcontainer)配置反例deepin linux,这些不是点文件。我推荐从JohnLebon的点文件开始学习,从头到尾都富含建立的解说,它们是我见过的最详尽的,而且包含了特别好的描述。祝你学得开心!

via:

作者:StephenSnow选题:lujun9972译者:nophDog校对:wxy

本文由LCTT原创编译,Linux中国荣誉推出

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: 交互 变量 命令 登录 脚本
最后更新:2023年7月5日

Linux大神网

每日更新,欢迎收藏♥ 不积跬步无以至千里,加油,共勉。

点赞
< 上一篇
下一篇 >

Linux大神网

每日更新,欢迎收藏♥
不积跬步无以至千里,加油,共勉。

最新 热点 随机
最新 热点 随机
如何在Linux系统中查看CPU信息使用lscpu命令行 linux服务器搭建ftp的6下安装vsftpd步骤及步骤 贵州工业职业技术学院求职意向期望工作地--诚聘英才 实验1Linux安装实验掌握虚拟机的使用 Linux系统tar命令的使用方法及使用命令教程 linux 开源nas系统 杰和科技NAS服务器媒体见面会在京召开 Android与Linux开发大不同 Linux系统软件安装包:自己动手,安装不用愁 车市新战局:汽车操作系统会复制智能手机的历史吗? Linux文件系统种类 如何卸载用源码包安装的软件?在线视频教程推荐 「职位」ASP.、PHP、Linux服务器集群开发 Torvalds:Linux内核开发的创新前景充满了热情 Linux文件系统的结构从终端窗口探索Linux目录树结构 卸载软件命令Linux.You linux软件开发如何入门?学习Linux步骤及学习方法介绍 14年Linux发行版的有趣历史观点 Linux中不像Windows可以直接在控制面板中卸载? 2018年波及众多Linux发行版的性能对比会更加深入 如何用源码包安装的软件?name的方法总结
嵌入式Linux操作系统学习规划+LINUX路线,主攻江苏电信天翼校园客户端故障指引及解决办法(101)英特尔GMAGMA950显卡驱动程序/WIN8/8.1电信校园网宽带用USB数据线共享给电脑无线上网国防科大开源操作系统:它只是一个吉祥的象征10个常用Linux文本查看命令及其详细说明和使用示例Linux嵌入式系统内核裁剪与定制方法的介绍情况淘宝教育热卖C语言编程开发C++程序设计零基础入门课程从CPU、内存、硬盘、显卡等这些方面安装Linux系统的最低配置Linux通过chkconfig设置开机启动服务创建的几种常见方式(技术分析)Linux多线程的使用与操作系统的区别通常rar命令由一个主命令加若干选项(可选)构成RedHatLinux中自动运行程序中的应用linux 读写文件 关于Linux内核的神秘面纱,你知道几个?使用wget实用程序的有用命令行工具的使用怎么设置linux开机项自启动?方式是怎样的?嵌入式Linux应用层与驱动层要想学习关于Linux内核的交叉编译步骤和方法:步骤、方法STM32嵌入式linux开发流程及应用程序分析-STMlinux下有哪些文件在介绍lsof命令实用用法介绍?
Linux中USB总线提供统一的外设的接口方式框架及数据结构 Windows远程连接工具、Ubuntu系统的安装软件及系统 程序员必会的版本控制技巧 资源搜索各大网站版权原因,ZY为实验性项目 轻松安装ZeroMQ:Ubuntu系统必备的解决方案 (Linux基础知识)线程概念与线程的区别 Linux下的文件一旦被删除,是难以恢复的? Linux系统软件安装包:自己动手,安装不用愁 如何远程连接Linux呢?远程linux工具哪个好用? 惠普UNIX服务器JimHays所说:UNIX销量和市场占有率的信心依旧从未动摇 Linux内核层网络编程框架研究(1)_光明网 Linux系统用户系统上的三种类型的帐户的介绍 Fedora 13服务器配置指南:9个实用技巧全解析 Linux下的多线程进程有独立的地址空间(同一) 轻松下载、安装和使用Linux RedHat系统 11款适用于Linux系统的图像查看器的特点及特点 Ubuntu下安装nvidia显卡驱动获取显卡的型号图 在Linux上安装和卸载软件的几种方法,你知道吗? Ubuntu系统如何升级和更新Linux内核版本?将推荐 linux 开源nas系统 杰和科技NAS服务器媒体见面会在京召开
标签聚合
linux服务器 linux系统 操作 文件目录 内核 文件 应用 软件 虚拟机 命令
书籍
课程
技术群
技术干货大合集↓
  • 2023年9月 / 78篇
  • 2023年8月 / 93篇
  • 2023年7月 / 94篇
  • 2023年6月 / 90篇
  • 2023年5月 / 93篇
  • 2023年4月 / 90篇
  • 2023年3月 / 129篇
  • 2023年2月 / 84篇
  • 2023年1月 / 161篇
  • 2022年12月 / 187篇
  • 2022年11月 / 76篇
友情链接:

Linux书籍 | Linux命令 | Linux系统 | RHCE红帽认证 | Linux软件 | Linux教程 | CentOS系统 | Linux内核 | Linux服务器 | Linux大神 | IT资源

COPYRIGHT © 2023 linuxgod.net ALL RIGHTS RESERVED.