linux bash命令安装文件或目录,Bash Shell的安装和升级(源码安装)-程序员宅基地

技术标签: linux bash命令安装文件或目录  

一般而言,Bash Shell 是很多 Linux 发行版的默认 Shell,所以会随着系统的安装而自动安装。不过确实有一部分读者想要安装较新版本的 Bash Shell,所以本节会具体讲一下其安装方法,希望可以作为读者全新安装 Bash Shell 或者虽然已经安装但希望升级的参考。

确定你的 Shell 版本

如果你安装的 Linux 是 RedHat、CentOS、Fedora、Ubuntu、Debian 等主流发行版,那么在你的系统中很可能已经预装了 Bash Shell,只需要确认一下是否确实已经安装以及预装的版本即可。具体的方法是:

# 确认系统中使用的 Shell 是 bash

$ echo $SHELL

/bin/bash

# 查看系统中 Bash Shell 的版本(方法一)

$ bash --version

GNU bash, version 3.2.25(1)-release (i686-redhat-linux-gnu)

Copyright (C) 2005 Free Software Foundation, Inc.

# 查看系统中 Bash Shell 的版本(方法二)

$ echo $BASH_VERSION

3.2.25(1)-release

源码方式安装 Bash

Linux 下安装软件的方式无非是 RPM 包安装、yum 安装、源码安装三种方式,读者可以任选一种方式。

不过,相对来说 RPM 包安装和 yum 安装方式比较简单,若再考虑各种包的依赖关系,这两种方式中又属 yum 安装更为简单。这里就不详细介绍这两种安装方法了,下面会具体示范使用源码安装 bash 的过程。

首先访问 http://www.gnu.org/software/bash/bash.html 页面,在 Downloads 中选择一个下载的链接,笔者选择了中国科技大学提供的FTP下载目录:ftp://mirrors.ustc.edu.cn/gnu/bash/。

当前很多生产环境的系统中使用的 bash 版本还是 3.2 版,读者可以根据实际需要选择具体的版本。在笔者撰写本教程时,最新的版本是 4.2 版本,所以这里使用这个版本来做示范。

1) 使用wget下载最新的 bash 源码包

具体操作如下所示:

$ wget ftp://mirrors.ustc.edu.cn/gnu/bash/bash-4.2.tar.gz

--2013-04-11 19:37:41-- ftp://mirrors.ustc.edu.cn/gnu/bash/bash-4.2.tar.gz

=> `bash-4.2.tar.gz'

Resolving mirrors.ustc.edu.cn... 202.141.160.110, 2001:da8:d800:95::110

Connecting to mirrors.ustc.edu.cn|202.141.160.110|:21... connected.

Logging in as anonymous ... Logged in!

==> SYST ... done. ==> PWD ... done.

==> TYPE I ... done. ==> CWD /gnu/bash ... done.

==> SIZE bash-4.2.tar.gz ... 7009201

==> PASV ... done. ==> RETR bash-4.2.tar.gz ... done.

Length: 7009201 (6.7M)

100%[==========================================>] 7,009,201 1.93M/s in 3.5s

2013-04-11 19:37:46 (1.89 MB/s) - `bash-4.2.tar.gz' saved [7009201]

2) 解压源码包

解压源码包并进入生成的目录中:

# 解压后会在当前目录下生成一个bash-4.2目录

$ tar zxvf bash-4.2.tar.gz

#进入目录bash-4.2

$ cd bash-4.2

$

3) 准备配置(configure)

最简单的配置方式是直接运行当前目录下的 configure,这会将 bash 安装到 /usr/local 目录中,不过编译安装软件时,好的习惯是使用--prefix参数指定安装目录。所以这里采用下面的配置方式。该条命令将会产生大量的输出,一开始会检查系统的编译环境以及相关的依赖软件。

最常见的错误可能是系统中没有安装 gcc 造成无法继续,如果是这个原因,使用 yum install gcc 命令进行安装。如果配置过程出现致命错误会立即退出,请读者注意输出内容中的 error 部分。

$ ./configure --prefix=/usr/local/bash4.2

checking build system type... i686-pc-linux-gnu

checking host system type... i686-pc-linux-gnu

Beginning configuration for bash-4.2-release for i686-pc-linux-gnu

checking for gcc... gcc

checking for C compiler default output file name... a.out

checking whether the C compiler works... Yes

......(略去内容)......

#如果大量的 checking 没问题,则配置环境检测通过。如果读者看到如下的输出内容,说明配置成功

configure: creating ./config.status

config.status: creating Makefile

config.status: creating builtins/Makefile

config.status: creating lib/readline/Makefile

config.status: creating lib/glob/Makefile

config.status: creating lib/intl/Makefile

config.status: creating lib/malloc/Makefile

config.status: creating lib/sh/Makefile

config.status: creating lib/termcap/Makefile

config.status: creating lib/tilde/Makefile

config.status: creating doc/Makefile

config.status: creating support/Makefile

config.status: creating po/Makefile.in

config.status: creating examples/loadables/Makefile

config.status: creating examples/loadables/perl/Makefile

config.status: creating config.h

config.status: executing default-1 commands

config.status: creating po/POTFILES

config.status: creating po/Makefile

config.status: executing default commands

#如果配置成功,会在当前目录中生成Makefile

$ ll Makefile

-rw-r--r-- 1 root root 77119 Apr 11 19:49 Makefile

4) 正式编译

#编译过程会产生大量输出

$ make

rm -f mksyntax

gcc -DPROGRAM='"bash"' -DCONF_HOSTTYPE='"i686"'

-DCONF_OSTYPE='"linux-gnu"' -DCONF_MACHTYPE='"i686-pc-linux-gnu"'

-DCONF_VENDOR='"pc"'

-DLOCALEDIR='"/usr/local/bash4.2/share/locale"'

-DPACKAGE='"bash"' -DSHELL -DHAVE_CONFIG_H -I. -I. -I./include

-I./lib -g -o mksyntax ./mksyntax.c

......(略去内容)......

5) 安装

有时在安装前也可以进行测试,但是一般情况下这不是必需的。

#非必要步骤:测试安装

#[root@localhost bash-4.2]# make test

#安装

$ make install

#安装其实就是将make产生的文件复制到指定的目录中,在这里指定的目录就是之前我们用 --prefix 参数指定的/usr/local,可以在该目录中发现bash4.2目录

$ ls -ld /usr/local/bash4.2/

drwxr-xr-x 4 root root 4096 Apr 11 20:08 /usr/local/bash4.2/

到此为止,最新版本的 bash 就已经安装好了,确切地说是安装到了 /usr/local/bash4.2 中。

使用新版本的 Bash Shell

虽然最新版的 bash 已经安装到系统中,但是还需要经过一些设置才能使用。首先需要将最新的 bash 的路径写到 /etc/shells 中,以向系统注册新 Shell 的路径。可以采取直接编辑 /etc/shells 文件的方式,或者采用如下更简单的方式:

$ echo "/usr/local/bash4.2/bin/bash" >> /etc/shells

然后使用命令 chsh(change shell 的简写)修改登录 Shell。

$ chsh

Changing shell for root.

New shell [/bin/bash]: /usr/local/bash4.2/bin/bash #输入要修改的shell

Shell changed. #显示成功修改了shell

#此处chsh并没有附加参数,所以默认是修改root的shell,如要改变其他用户的登录shell,可以在后面跟上用户名,使用这种方式给用户john更改shell

$ chsh john

chsh 命令做的工作就是修改了 /etc/passwd 文件中登录 Shell 的路径,所以如果明白了 chsh 的原理,实际上可以手工编辑 /etc/passwd 文件,将 root 用户的这行改成下面的样子(这又一次印证了 Linux 中一切皆文件的说法):

$ cat /etc/passwd | grep bash4.2

root:x:0:0:root:/root:/usr/local/bash4.2/bin/bash

最后还需要重新登录以获得 Shell,登录后再次验证一下当前的 Shell 版本。

$ echo $BASH_VERSION

4.2.0(1)-release

#请注意,如果这时候你使用下面的命令可能会犯迷糊:为什么版本是3.2.25呢?不是已经是4.2了吗?

$ bash --version

GNU bash, version 3.2.25(1)-release (i686-redhat-linux-gnu)

Copyright (C) 2005 Free Software Foundation, Inc.

#通过使用 whereis bash 命令可了解当前运行的 bash 命令真实运行的是/bin/bash,也就是说现在是在版本为 4.2 的 bash 中运行了一个 3.2.25 版本的 bash 命令。如果要想每次运行 bash 的时候使用的是 4.2 的版本,需要修改 PATH 变量的值,读者可以自行完成这个任务

$ whereis bash

bash: /bin/bash /usr/local/bash4.2 /usr/share/man/man1/bash.1.gz

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_28818721/article/details/116635321

智能推荐

vue3+ts+element-plus el-table组件二次封装(2024-03-20 TTable组件新增新增第一列既显示(复选、单选)和序列号)_vue3+ts+element plus封装表格-程序员宅基地

文章浏览阅读6.6k次,点赞2次,收藏20次。vue3+ts+element-plus el-table组件二次封装(新增动态设置列的显示与隐藏并且可以随意拖地排序功能、改用vitepress编辑组件文档;新增了单元格编辑功能))新增了单元格编辑键盘事件及第三方组件事件功能;2023-06-08 TTable组件新增整行拖拽排序功能;TTable组件修复表头合并插槽使用失效;TTable组件单元格编辑新增表单校验功能/表格内操作按钮权限配置)新增展开行功能;2024-03-20 TTable组件新增新增第一列既显示(复选、单选)和序列号_vue3+ts+element plus封装表格

如何系统的学习Java达到工作要求?_java自学怎样才能达到企业要求-程序员宅基地

文章浏览阅读270次。1.制定好一下系统的学习规划,每天定量,学完什么知识点就掌握,能自己应用,而不是能看懂,写不出来东西。因为现在有很多人都是这样,表面上我是学会了,但是以上手去写但是怎么也写不出来。2.不要自己一个人闷头学,找一套质量不错的视频教程跟着去学习,听课的过程当中一定要把笔记记录下来。笔记当中只记忆重点的结论。把不懂的地方记下来,有时间就去解决。要学会在学习中记好笔记,一定要记得去复习。3.机会都是留给有准备的人,坚持每天学习也考验你的耐性和毅力,中途如果没有什么事情千万不能松懈,一天都不可以,保持一周6天的学_java自学怎样才能达到企业要求

JS中的async/await的用法和理解_js await-程序员宅基地

文章浏览阅读2.2w次。1、首先需要理解async 和 await的基本含义 async 是一个修饰符,async 定义的函数会默认的返回一个Promise对象resolve的值,因此对async函数可以直接进行then操作,返回的值即为then方法的传入函数// 0. async基础用法测试async function fun0() { console.log(1) return 1}fun0().then( x => { console.log(x) }) // 输出结果 1,.._js await

Android studio Log日志找不到_重启安卓日志没了怎么办-程序员宅基地

文章浏览阅读5.7k次。摘要(Abstract)必备技能,使用日志工具 LogCat,并尝试解决真机调试没有日志的问题。日志工具(LogCat)日志在任何项目的开发过程中都会起到非常重要的作用,在 Android 项目中如果你想要查看日志则必须要使用 LogCat 工具。在 android Studio 最下方的 Status Bar 中找到 6:Android,点击她。如下图_重启安卓日志没了怎么办

ROS - 在ROS中使用YOLO_ros yolo-程序员宅基地

文章浏览阅读8.5k次,点赞6次,收藏123次。在ros中使用yolo一、[安装CUDA](https://developer.nvidia.com/cuda-downloads)二、[安装cuDNN](https://developer.nvidia.com/rdp/cudnn-download)三、下载usb-cam驱动四、下载darknet_ros五、修改文件,使usb-cam发布的话题能被darknet接收到一、安装CUDA安装最新版即可。二、安装cuDNN安装说明说明:在官方提供的安装说明里面,有一步是验证cuDNN安装是否正确。_ros yolo

Visio图片插入到word中只显示一部分_wps插入visio后只占1/4-程序员宅基地

文章浏览阅读2.3w次,点赞13次,收藏5次。Word——Word中粘贴Visio图只显示下面一部分1. 问题发现前段时间帮朋友整理一篇学位论文,发现在Word中粘贴画好的Visio图时,只能显示Visio图的下面一部分(一行宽左右)。通过:右键-->“设置图片格式”-“版式”-“环绕方式”-“嵌入型”,发现环绕方式正确无误。换Word版本和Visio版本均无效。 2. 问题原因学位论文_wps插入visio后只占1/4

随便推点

html-1 圆角边框的常用写法_html圆角矩形边框-程序员宅基地

文章浏览阅读2.3k次,点赞3次,收藏15次。<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width,initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <tit_html圆角矩形边框

mysql 有链接不上去_求助:MySQL 出现间歇性链接不上~~-程序员宅基地

文章浏览阅读568次。程序平时运行正常,每天总能出现几次,数据库链接不上异常,ORM 使用的是 iBatis ,那位兄弟遇到过呀?未经处理的异常: IBatisNet.DataMapper.Exceptions.DataMapperException: Unable to open connection to "ADO.Net driver for MySQL". ---> System.Security.Au..._为验证提供的消息或签名已被更改

Android面试必刷的200道真题,成功定级腾讯T3-2_android面试高级200-程序员宅基地

文章浏览阅读92次。为什么想跳槽?简单说一下当时的状况,我在这家公司做了两年多,这两年多完成了一个大项目,作为开发的核心主力,开发压力很大,特别是项目上线前的几个月是非常辛苦,几乎每晚都要加班到12点以后,周末最多只有一天休息。在最困难的时候,老板给大家打气,“大家再坚持坚持,项目上线赚钱了,就给大家涨工资,公司是绝对不会亏待大家的”,在老板豪情壮语的加薪鼓励下,大家要紧牙关拼上了。终于,半年前,项目上线了,运行也慢慢稳定了,公司赚钱也多了起来。是的,公司赚钱了,利润很可观,这是大家都知道的事情。但是,一两个月过去了,加薪_android面试高级200

SBT 运行出现 module java.base does not “opens java.lang“ to unnamed module错误_错误: 目标 8 不允许选项 --add-opens-程序员宅基地

文章浏览阅读2.3k次。这两天拿到DXP项目,运行怎么也跑不起来,刚开始以为是SBT 版本的问题,把SBT各个版本都装了个遍,愣是没解决。修复之前本机环境:OpenJDK 18.0.1 , SBT 1.6.0 网上解决方案修改JDK启动参数,也不能解决卸载OpenJDK18,到Archive | Adoptium 下载OpenJDK 11,重新安装重启电脑后 问题解决。..._错误: 目标 8 不允许选项 --add-opens

SIP协议详解(中文)-2_sip stateful proxy-程序员宅基地

文章浏览阅读2.9k次。在对话中,有其他的相关会被发送。一个对话是一个持续一定时间的两个用户之间的端到端的SIP关系。对话过程要求两个用户代理之间的信息是有序的而且请求被正确路由传输的。在这个规范中,只有INVITE请求可以用来建立会话。当一个UAC在一个对话中发出请求的时候,它不仅遵循第8节描述的一般UAC规则而且也遵循对话中的请求规则。第12节讲述了对话并且讨论了对话的创建和维持,以及在对话中创建一个请求。S_sip stateful proxy

机器学习安全:对抗样本生成与防御-程序员宅基地

文章浏览阅读674次,点赞13次,收藏31次。1. 背景介绍随着机器学习技术的广泛应用,越来越多的应用场景需要对模型进行安全性保护。然而,机器学习模型的安全性并不是一件容易的事情。在实际应用中,机器学习模型往往面临着各种攻击,其中最常见的攻击方式就是对抗样本攻击。对抗样本攻击是指通过对原始数据进行微小的修改,使得机器学习模型产生错误的分类结果。这种攻击方式对于许多应用场景来说都是非常危险的,例如自动驾驶、金融风控等领域。为了解决对抗样..._对抗样本防御

推荐文章

热门文章

相关标签