Linux基础知识与实操-篇四:初识bash与配置

本文详细介绍了Bash shell的基础知识,包括命令行操作、变量定义规则、别名设置、历史命令使用以及环境配置文件的读取流程。重点讨论了如何通过/etc/profile和~/.bash_profile等文件定制用户环境,还提到了非登录shell下~/.bashrc的配置。同时,文章提及了资源限制的ulimit命令以及变量的删除、替换和别名的取消。此外,还强调了安全性和历史命令管理在日常使用中的重要性。

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

认识与学习Bash

指令下达,可以直接 回车,敲入的命令就会直接执行,如果命令一行太长,就可以使用 \ 操作符,表示 下一个 回车后 继续键入命令,在新行中,会有一个 > 表示 可以继续输入指令
一定要注意 \+Enter 中间不能有其他字符,一定是紧跟着的两个操作

如果要快速删除指令,可以采用下面的快捷方式:
image

bash中变量的定义规则:

  • 变量与变量的内容通过= 连接,等号两边不能直接有空格
  • 变量名称只能是英文字母和数字,开头字符不能是数字
  • 变量内容如果有空格符可以使用双引号"' 将变量内容 结合起来
    • 双引号"" 内的特殊字符,如$可以保持原有的特性
    • 单引号'' 内的特殊字符,如$就认为是一般字符,就是纯文本
  • 使用 跳脱字符\(转义字符), 可以将特殊符号($, ,, 等)变为一般字符
  • 在 一串指令的执行中,如果需要 借助其他额外的 指令提供的信息,可以使用 反撇号 , 或者 $
    一般使用 反撇号 包起来的指令,会被优先执行,执行的结果会作为 外部的输入信息
  • 若变量需要在其他 子程序中执行,则需要用 export 来使变量生成环境变量
    子程序就是在当前shell 下 启动另外一个新的shell
  • 通常大写字符为系统默认变量,自行设定的变量可以使用小写字符,方便判断(只是一般的习惯,不是约定)
  • 取消变量使用 unset + 变量名称

image

可以查看系统的环境变量:
image

系统预设变量

$:表示当前 shell 的进程代号,即 process ID

?: 上个执行指令的 返回值,一般 执行成功就返回0,否则就返回 非0

image

限制关系

bash可以限制用户的某些资源,包括开启的文件数量、CPU使用时间、内存使用量等,使用 ulimit 命令实现,主要参数如下:
image

想要复原ulimit 的设定最简单的方法就是 注销再登录,否则就需要重新用 ulimit 设定
这里要注意的是,如果一般身份的使用者,使用ulimit 设定了 -f 选项的文件大小,那么此用 只能继续减小文件容量,无法增加文件容量

变量的删除、取代与替换

变量设定好了之后,不仅仅可以进行删除,也可以进行取代和替换,基本规则如下:
image

个人感觉使用不多,就不再 赘述了,具体参见 10.2.8

变量别名

alias 可以给 某个命令设置一个别名,比如很常用的 ls -l 命令,设置别名为 ll

alias ll='ls -l'

alias 的定义规则与 变量的定义规则基本一致,alias 别名='指令 选项'

取消别名使用unalias 实现,unalias +别名 就可以实现取消这个 别名 的定义

获取历史命令

可以直接查询 曾经执行过的命令:
image

使用 history -w 可以将目前的 历史命令全部 写入到 histfile 文件中,在默认情况下,历史记录会写入 ~/.bash_history
正常情况下,历史命令的读取过程如下:

  • 用户登录系统后,系统自动读取 家目录下的~/.bash_history,读取以前下达过的指令,该文件存储的 历史指令的数量,由 上面系统变量中的 HISTFILESIZE 值的记录有关
  • 在 注销登录后,系统会将 最近的 HISTFILESIZE 条记录保存到 ~/.bash_history 文件中,每次都保留最新的,舍弃旧的
  • 使用 history -w 可以强制 写入 文件,即使还没有注销登录

在使用了history 命令之后,我们可以使用相关的功能帮我们执行命令:
image

基本上 history 的用途很大的!但是需要小心安全的问题!尤其是 root 的历史纪录文件,这是 Cracker
的最爱!因为不小心的 root 会将很多的重要数据在执行的过程中会被纪录在 ~/.bash_history 当中,
如果这个文件被解析的话,后果不堪吶!无论如何,使用 history 配合『 ! 』曾经使用过的指令下
达是很有效率的一个指令下达方法

如果在使用 xshell 这样的远程软件,有多个 root 用户登录,那么 history 该怎么保存?

因为等到注销时才会更新记录文件,所以, 最后 注销 的那个 bash 才会是最后写入的数据。唔!如此一来其他 bash 的指令操作就不会被记录下来了 (其实有被记录,只是被后来的最后一个 bash 所覆盖更新了)

bash 的环境配置文件

首先要知道两个区别,因为这两个读取的文件是不同的

  • login shell: 取得 bash 时需要完整的登录流程(需要输入 用户名和密码的过)
  • non-login shell: 不需要重复登录使用 的shell,比如登录图形化界面后打开终端的shell、在任意终端敲入的第二个shell命令,都不再需要重复 输入用户名和密码,都是 non-login shell

上面中两种方式中,取得 bash 的情况是不同的,一般来说:login shell 只会读取以下这两个文件:
/etc/profile:系统的整体设定,轻易不要修改
~/.bahs_profile 或 ~/.bash_login 或 ~/.profile:不同用户设定,个性化数据

/etc/profile 整体bash文件

每个使用者登录 bash 一定会读取的配置文件,如果要配置所有使用者的整体环境,就需要在此文件中修改,有如下几个重要变量:

  • PATH :依据 UID 决定 PATH变量要不要含有 sbin 的系统指令目录
  • MAIL : 依据账号设定好的 使用者的 mailbox 到 /var/spool/mail/username
  • USER : 根据用户的账号设置这个内容
  • HOSTNAME : 根据主机的 hostname 指令决定此变量内容
  • HISTSIZE : 历史命令记录笔数,CentOS7 设定为 1000
  • umask : 包括 root 默认为 022,一般用户为 002,用于设定用户权限

/etc/profile 不止有上面的这几个字段,还会 使用很多配置文件来 进行设置,如下

  • /etc/profile.d/*.sh: 在 该目录下,拓展名为 .sh 的,并且当前用户对该文件有 r 权限,就可以被执行,主要用于 规范 bash 操作接口的 颜色、语系、llls 命令的别名、viwhich 命令的别名等,如果要自行建立 配置文件,就可以在此目录下 自行建立 .sh 后缀的文件。
  • /etc/locale.conf : 由 /etc/profile.d/lang.sh 文件 引入,决定 bash 预设 使用哪个语系
  • /user/share/bash-completion/completions/* : 进行 指令的 选项/参数 补齐,由 /etc/profile.d/bash_completion.sh 文件载入

bash 的 login shell 情况下所读取的整体环境配置文件其实只有 /etc/profile,但是/etc/profile 还会呼叫出其他的配置文件,所以让我们的 bash 操作接口变的非常的友善啦

用户个人配置文件

用户个人的配置文件主要有三个,按照次序分别为以下三个:

  • ~/.bash_profile
  • ~/.bash_login
  • ~/.profile

bash 的 登录脚本,只会读取上面三个文件中的一个,读取的顺序就是 按照上面 文件排列的原则 进行读取,如果有上面的文件,并且读取了,那么下面的文件就不会在读取了

查看 ~/.profile 文件源码如下:

[root@AliComputer etc]# cat ~/.bash_profile
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
	. ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH

判断家目录下的 ~/.bashrc 存在否,若存在则读入 ~/.bashrc

所以 bash 配置文件整体的读入流程如下:
image

读入环境配置文件:source

由于 /etc/profile~/.bash_profile 文件都是在 取得 登录脚本之后才会读取的文件,所以如果在本地登录期间,修改了 配置文件,并不会立即生效,而是需要 注销后重新登录才会生效,这里使用 source 命令 可以是实现 直接重新读取配置文件而不用注销登录:
image

非登录环境配置和其他相关配置文件

如果是 non-login shell 这种非登录的情况,会读取 ~/.bashrc ,该文件如下:

[root@AliComputer etc]# cat ~/.bashrc
# .bashrc

# User specific aliases and functions

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'

# Source global definitions
if [ -f /etc/bashrc ]; then
	. /etc/bashrc
fi
# added by Anaconda3 5.3.1 installer
# >>> conda init >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$(CONDA_REPORT_ERRORS=false '/root/anaconda3/bin/conda' shell.bash hook 2> /dev/null)"
if [ $? -eq 0 ]; then
    \eval "$__conda_setup"
else
    if [ -f "/root/anaconda3/etc/profile.d/conda.sh" ]; then
        . "/root/anaconda3/etc/profile.d/conda.sh"
        CONDA_CHANGEPS1=false conda activate base
    else
        \export PATH="/root/anaconda3/bin:$PATH"
    fi
fi
unset __conda_setup
# <<< conda init <<<
alias php='php -c /www/server/php/74/etc/php-cli.ini'
alias php56='php56 -c /www/server/php/56/etc/php-cli.ini'
alias php74='php74 -c /www/server/php/74/etc/php-cli.ini'
[root@AliComputer etc]#

该文件会主动的呼叫 /etc/bashrc 这个文件,因为 /etc/bashrc 帮我们的 bash 定义出底下的数据:

  • 依据不同的 UID 规范出 umask 的值;
  • 依据不同的 UID 规范出提示字符 (就是 PS1 变量);
  • 呼叫 /etc/profile.d/*.sh 的设定

*你要注意的是,这个 /etc/bashrc 是 CentOS 特有的 (其实是 Red Hat 系统特有的),其他不同的
distributions 可能会放置在不同的文件就是了。由于这个 ~/.bashrc 会呼叫 /etc/bashrc
/etc/profile.d/*.sh

其他会影响 bash操作的文件如下:

  • /etc/man_db.conf
    该文件 规范了 man 操作 的查找路径
  • ~/.bash_history
    预设的 历史命令 的存储路径
  • ~/.bash_logout
    注销登录后,系统要执行的操作

最后

一起提高,慢慢变强。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值