设为首页 收藏本站
查看: 156|回复: 0

[经验分享] bash基础和环境变量相关配置

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-9-6 08:48:55 | 显示全部楼层 |阅读模式
1、bash的基础特性

   (1) 命令历史
     bash会记录此前用户在shell会话中执行的命令于缓冲区中;正常退出时,会被记录于当前用户家目录下隐藏文件.bash_history中;
     环境变量:
       HISTSIZE:命令历史记录的条数;
       HISTFILE:命令历史文件路径;
       HISTFILESIZE:
     history命令:

       -c:清空命令历史;
       -d #: 删除历史中指定的命令;
       -a: 当缓冲区中的历史手动追加文件;
       history #: 显示最近的多少条命令;


     调用过去执行过的命令:
       !#:调用历史中的第#条命令;
       !!: 重复执行上一条命令
       !string:调用历史中最近一个以string开头的命令;

     调用过去执行过的命令的最后一个参数:
       !$:
       ESC, .
       Alt+.

   (2) 命令补全
     bash内建命令
       外部命令
       命令搜索机制:

       PATH环境变量:由冒号分隔的路径

     hash:把此前搜索到路径缓存到内存中;
       kv: key-value
       ls --> /bin/ls


   (3) 路径补全

     把用户给出的路径字符串当前路径起始,并在其指定的上级目录下搜索以指定的字符串开头的文件名;
     如果惟一:直接补全;
     否则:两次Tab,可列出;

   (4) 命令行展开的功能
     ~: 展开为当前用户的主目录;
     ~USERNAME:展开为指定用户的家目录;
     {}:可承载一个以逗号分隔的列表,并其展开为多个路径;
     /var/{log,cache,run} = /var/log /var/cache /var/run

   (5) 命令的执行结果状态,由bash追踪和保存
     成功:0
     失败:1-255

       bash使用特殊变量$?保存最近一条命令的状态结果;
       程序的执行结果有两种:

       程序的返回值;
       程序的状态结果;

   (6) 命令别名
     命令的另一个引用符号,由bash程序维护;
     alias/unalias

       alias: 查看所有已经定义别名;

       alias NAME=COMMAND:定义别名;
     如果别名同原命令名,想直接执行原命令,则需使用\COMMAND
       unalias NAME: 撤消别名;

2、bash的基础特性
   (1) glob
     文本名“通配”
       *:匹配任意长度的任意字符;
       ?:匹配任意单个字符;
       a*b: aab, ab, a123b;
       a?b:
       []: 匹配指定范围内的任意单个字符;
       [0-9]
       [^]:匹配范围外的任意单个字符;
       [^a-b]

     字符集合:
       [:lower:]
       [:upper:]
       [:alnum:]
       [:digit:]
       [:space:]
       [:punct:]
       [:alnum:]

     Ctrl+l:清屏

     Ctrl+a: 切换至命令行首
     Ctrl+e:切换至命令行尾
     Ctrl+c:取消命令执行
     Ctrl+u:删除光标所在处至行首的内容;
     Ctrl+k: 删除光标所在处至行尾的内容;

3、bash环境配置
(1)配置文件,生效范围划分,存在两类:

   全局配置:
     /etc/profile, /etc/profile.d/*.sh
     /etc/bashrc
   个人配置:
     ~/.bash_profile
     ~/.bashrc

(2)按功能划分,存在两类:
   profile类:为交互式登录的shell提供配置
     /etc/profile, /etc/profile.d/*.sh
    ~/.bash_profile
    做用:

       定义环境变量,例如PATH、PS1
      运行命令或脚本

(3)bashrc类:为非交互式登录shell提供配置
   /etc/bashrc
   ~/.bashrc
     做用:

       (1) 定义命令别名;
       (2) 定义本地变量;

(4)变量:内存空间,变量名
   类型:
     环境变量:作用范围当前shell进程及其子进程
     本地变量:作用范围当前shell进程
     局部变量:作用范围仅为当前shell进程中某代码片断(通常为函数上下文)
     位置变量:$1, $2
     特殊变量:$?

(5)变量定义方式:
   bash内置变量:可直接调用,内置了许多环境变量,例如PATH等
     自定义变量:name=value
     变量赋值:变量名=值

(6)bash弱类型:
   变量存储数据时,默认均采用字符形式;任何变量可以不经声明,直接引用;
     120:24bits

     120: 8bits

(7)定义环境变量:
   export name=value
   declare -x name=value

查看:env, printenv, export,set

(8)撤消变量:
   unset name

(9)引用变量:
   ${name}, $name

例子:
1
2
3
4
5
[iyunv@localhost /]# animal='dog'
[iyunv@localhost /]# echo "There are some $animals."
There are some .
[iyunv@localhost /]# echo "There are some ${animal}s."
There are some dogs.




(10)bash中的引用符号:
   '': 强引用,变量替换不会发生
   "":弱引用
   ``: 命令引用

例子:
1
2
3
4
5
6
[iyunv@localhost /]# ls -l `which cat`
-rwsr-xr-x. 1 root root 48568 10月 15 2014 /bin/cat
[iyunv@localhost /]# echo "$animal"
dog
[iyunv@localhost /]# echo '$animal'
$animal




(11)常用的环境变量
   PATH 决定了shell将到哪些目录中寻找命令或程序
   HOME 当前用户主目录
   HISTSIZE 历史记录数
   LOGNAME 当前用户的登录名
   HOSTNAME 指主机的名称
   SHELL 当前用户Shell类型
   LANGUGE  语言相关的环境变量,多语言可以修改此环境变量
   MAIL 当前用户的邮件存放目录
   PS1 基本提示符,对于root用户是#,对于普通用户是$

(12)Linux的变量种类
   按变量的生存周期来划分,Linux变量可分为两类:
     1. 永久的:需要修改配置文件,变量永久生效。
     2. 临时的:使用export命令声明即可,变量在关闭shell时失效。


(13)shell登录类型:
   交互式登录:
   直接通过终端进行的登录;
   通过su -l Username命令实现的用户切换;

(14)非交互式登录:
   图形界面下打开的命令行窗口;
   执行脚本;
   su Username;

(15)配置文件作用次序:
   交互式登录:
     etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc

(16)非交互式登录:
     ~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh

(17)编辑配置文件定义的新配置如何生效?
   重新登录;
   让当前shell进程去重新读取指定的配置文件;
     source /PATH/TO/SOMEFILE
     . /PATH/TO/SOMEFILE
注意:副作用

问题:
1、定义对所有用都生效的别名?
答:echo "alias cdnet='cd /etc/sysconfig'" >> /etc/bashrc


2、如果仅需要PATH环境变量的修改仅对root用户生效,该如何操作?

答:sed -i '10s/$/:\/usr\/local\/apache2\/bin/' ./.bash_profile



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-109914-1-1.html 上篇帖子: btrfs文件系统管理(centos7) 下篇帖子: linux磁盘管理及文件系统
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表