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) 安装

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

#非必要步骤:测试安装

#[[email protected] 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

智能推荐

android automate 教程,Automate app-能让机器搞定的事情,就别浪费力气啦#Android_weixin_39789646的博客-程序员秘密

Automate 是 Android 下一款自动化处理应用,和 iOS 上的 Workflow 有些相似。Automate 能做的事情很多,不夸张的说,你的想象力有多大,Automate 就能做到多少。Android上有很多这一类的应用,像是 Tasker 和 Trigger ,但是我还是觉得 Automate 是最好用的一款。Automate 是为数不多的支持流程图的应用,借助流程图我们可以直...

codeup|扩展欧几里得|逆元|问题 A: 同余方程-NOIP2012TGD2T1_不要秃头、的博客-程序员秘密

题目描述题目描述求关于x的同余方程ax≡1(mod b)的最小正整数解。输入格式每组输入数据只有一行,包含两个正整数a, b,用一个空格隔开。数据规模:对于40%的数据,2≤b≤1,000;对于60%的数据,2≤b≤50,000,000;对于100%的数据,2≤a, b≤2,000,000,000。输出每组输出只有一行,包含一个正整数x0,即最小正整数解。输入数据保证一定有解。样例输入3 10样例输出7代码#include<stdio.h>int exGCD(

CRC校验_位文杰TOP的博客-程序员秘密

什么是CRC校验?CRC即循环冗余校验码:是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。CRC校验原理:其根本思想就是先在要发送的帧后面附加一个数(这个就是用来校验的校验码,但要注意,这里的数也是二...

用户未处理的异常 System.InvalidOperationException:““GridView1”上同时定义了 DataSource 和 DataSourceID。请移除一个定义。”_gridview1.datasource_灵活的小胖zhi的博客-程序员秘密

背景:看牛腩视频,测试查询category表中的所有数据并显示出来,首先,在窗体上添加GridView控件,之后,绑定数据库,最后,在窗体加载方法里加上下面代码:GridView1.DataSource = new CategoryDAO().SelectAll();GridView1.DataBind();问题:解决:很明显,我们重复定义了GridView1,那么,我们就...

修改表名称?_yecats的博客-程序员秘密

修改表名称?使用sp_rename 对表进行重命名,语法:sp_rename(old table),(new table)将【学生信息表】重命名为student,执行下列语句。EXEC sp_rename '学生信息表','student'

Linux 查询oracle错误日志&警告日志_a77687789的博客-程序员秘密

  1 通过命令查看错误日志目录:show parameter background_dump_dest  /usr/oracle/app/diag/rdbms/orcl/orcl/trace    2 根据错误提示的PID:3159 模糊查询对应的错误日志  find -name "*ora*3159*.trc"  more orcl_ora_3...

随便推点

Python使用yagmail库实现发送邮件功能_Music 爱好者的博客-程序员秘密

yagmail库的安装pip install yagmailyagmail的使用:'''@brief:自动发送邮件功能:用来通知以及debug'''import yagmailyag = yagmail.SMTP(user='[email protected]',password='xxxxxx',host='smtp.qq.com')contents = {'Hell...

Java线程池ThreadPoolExecutor_weixin_33755554的博客-程序员秘密

为什么80%的码农都做不了架构师?>>> ...

android组建学习之 GridView与BaseAdapter_CoderLv IT世界的博客-程序员秘密

实验案例5-2 GridView与BaseAdapter【实验目的】 进步掌握BaseAdapter类的功能及其使用方法;掌握GridView通过BaseAdapter关联到数据的方法。【实验目标】1.图片列表 通过GridView实现图片列表。运行的效果如图1所示。图12.功能扩展对上面进行扩展,当单击网格视图中任意一个小图片时,打开一个新页面满屏显示这张图...

Java编程思想--第八章 多态_岁月无痕study的博客-程序员秘密

在面向对象的程序设计语言中,多态是继数据抽象和继承之后的第三种基本特征。 多态通过分离做什么和怎么做,从另一个角度将接口和实现分离开来,多态不但能够改善代码的组织结构和 可读性,还能够创建可扩展的程序—即无论在项目最初创建时还是在需要添加新功能时都可以生长的程序。 “封装”通过合并特征和行为来创建新的数据类型。“实现隐藏”则通过将细节“私有化”把接口和实现 分离开来。这种类型的组织机制对那

计算机体系结构量化研究方法(六)——流水线基础与中级概念_tristan_tian的博客-程序员秘密

计算机体系结构量化研究方法——流水线基础与中级概念流水线什么是流水线RISC基本指令集基础知识RISC指令集简单实现经典五级流水线流水化的基本性能问题流水线冒险停顿流水线性能结构冒险数据冒险利用转发技术将数据冒险停顿减至最少需要停顿的数据冒险分支冒险降低流水线分支分支预测的性能通过预测降低分支成本静态分支预测动态分支预测和分支预测缓冲区如何实现流水化MIPS简单实现MIPS基本流水线流水线什么是流水线流水线是一种将多条指令重叠执行的实现技术。一条指令的执行需要多个操作,流水线技术充分利用了这些操作之间

黑马程序员-- C语言变量作用域与代码块_weixin_33872660的博客-程序员秘密

这里通过变量作用域的两种错误用法来介绍一下C语言变量作用域其次对代码块的使用进行了简单说明:#include<stdio.h>1.变量的作用域(作用范围) 变量定义的那一行开始,直到变量所在的代码块结束为止。2.代码块 作用:及时回收不再使用的变量,提高程序性能----------------------------------------...

推荐文章

热门文章

相关标签