码迷,mamicode.com
首页 > 其他好文 > 详细

了解bash及其基本使用

时间:2015-09-30 14:38:46      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:history   type   变量   alias   path   chsh   

一、linux命令解释器

       linux中命令的执行依赖于shell解释器,shell是用户与操作系统之间的接口,它解释用户输入的命令并将其送入内核。常见的shell有bash(linux系统默认shell),csh,ksh等。shell也是一种特殊的程序,例如bash,其二进制程序文件为/bin/bash

       1、查看当前使用的shell类型:echo $SHELL

       2、改变用户登录时使用的shell,可使用chsh命令

             用法:chsh [选项] [参数]

             常用选项:

                     -s:指定用户登录的shell(需为完整路径名,如/bin/csh)              

                     -l:列出当前系统可用的shell

             例如:chsh -s /bin/csh


二、linux命令类型

       根据linux命令与shell的关系,可将命令分为两类:

       1、内置命令:是shell内置的一些特殊指令,没有单独的对应的系统文件,随着解释器被自动载入内存,直接供用户使用

       2、外部命令:本身是一个独立的可执行文件,命令名即为程序文件名

       要查看命令的类型,可使用type命令:内置命令会显示为builtin,外部命令会显示其绝对路径)

       用法:type [option]... command

       常用选项:

              -a:显示该命令所有可能的信息,包括alias

              -p:后面接的命令与外部命令时,才会显示完整路径

              -t:输出“file”、“alias”或者“builtin”,分别表示给定的命令为“外部指令”、“命令别名”或者“内部指令”

[root@localhost ~]# type cd
cd is a shell builtin
[root@localhost ~]# type -a ls
ls is aliased to `ls --color=auto‘
ls is /bin/ls


三、bash变量

       变量实质上是有名称的内存空间

       1、bash变量的类别

             1)本地变量:只对当前shell进程有效,对其它shell进程(包括当前shell进程的子进程)无效

             2)环境变量对当前shell及其子进程有效,对其它shell进程无效,通常是shell内置的一些变量(如PATH,HISTSIZE,LANG,RANDOM,SHELL等)及通过export命令导出的变量,要查看当前shell进程的所有环境变量,可直接使用export,env,printenv命令

             3)局部变量:对shell脚本中某代码片断有效,通常用于函数本地,local VAR_NAME=VALUE

             4)只读变量:readonly var_name

             5)位置变量:如$1(第一个参数),$2...

             6)特殊变量:

                          $?上条命令的状态返回值,主要用于判断程序或脚本是否执行成功,0表示成功,1-255表示失败

                          $#:参数的个数

                          $*:参数列表)

                          $0:命令或脚本本身

        2、变量类型:

              分为字符型(默认)和数值型,变量类型决定了变量的存储机制、存储空间、参与的运算方式

        3、除了shell内置的环境变量,我们也可自定义变量,直接用ValriablName=VALUE(注意:等号两边没有空格)的方式即可,如pretty=beauty

        4、查看所有变量(包括环境变量和自定义变量):set

              另外,set命令可设置bash的某些特性:

                     set -C:指定不覆盖已存在的文件   set +C:指定可覆盖已存在的文件

        5、要获取某个变量的值,可使用echo $变量名,如echo $PATH

        6、取消变量的值unset 变量名,如unset  pretty

        7、变量设定的几个重要规则:

              1)变量名只能是英文和数字和下划线,且不能使用程序中的关键字,不能以数字开头,如2mouse=bro 错误。应尽量做到见名知义

              2)变量名中若包含空格,需要使用引号(或转义字符/),但单双引号的功能是有区别的:

                            双引号:弱引用,双引号内若包含变量,会被替换,如echo  "I love my $HOME"会显示为I love my /home/tesla

                            单绰号:强引用,引号中的内容会直接显示,echo  "I love my $HOME"会显示为I love my $HOME

              3)使用转义字符\将特殊字符(如空格、ENTER、$、‘等)变成一般字符

                    如name=bluce\ lee  echo $name结果为bluce lee

              4)扩增变量内容

                     变量名="$变量名"新增内容,例如PATH="$PATH":/usr/loca/mysql/bin

              5)使用export命令将自定义变量(包括被修改的原环境变量)转为环境变量

                     export 变量名,如export LANG=en(表示使用英文编码,通常用于临时解决乱码问题)

       8、PATH环境变量

            当我们执行外部命令时,系统是透过shell内置的PATH环境变量所定义的路径中从左往右依次寻找的,这就是为何我们很多时候只需输入命令名而非其绝对路径的原因,而且我们可以自由地将某个命令的路径添加进PATH变量中,由此给工作带来了很大便利

            更改PATH环境变量的方法

            1)直接使用export命令,如export PATH="$PATH:/usr/loca/mysql/bin",该设置会在终端断开后失效,若要持久有效,需修改/etc/profile

            2)编辑/etc/profile文件或/etc/profile.d/*.sh,在文档最后添加export PATH="$PATH:新增内容",保存退出,然后重新读取该文件(. filesource file),该设置对全局有效

        9、设置命令提示符

              bash命令提示符即命令行窗口起头的那一段,如[root@localhost ~]#,是透过shell内置的变量PS1显示的。PS1可用到的一些符号意义说明:

              \u:当前用户的名称

              \d:可显示出“星期 月 日”的日期格式

              \H:完整的主机名称,如web.diaozt.com

              \h:仅取主机名称的第一小段,如web

              \t:显示精确到秒的24小时格式的时间,如15:20:10

              \T:显示精确到秒 的12小时格式的时间,如09:20:10

              \@:显示时间,为12小时格式的AM/PM样式,如06:22 AM

              \w:完整的工作目录名,家目录为以~取代,如 /home/tesla/test

              \W:路径的基名,即以basename命令取得的名称,如test

              \$:提示字符,root用户初始时为#,其它为$

[root@localhost test]# echo $PS1
[\u@\h \W]\$
[root@localhost test]# PS1="\u@\H \@ \w]\$"
root@localhost.localdomain 06:45 AM /home/tesla/test]$

         10、通过键盘读取变量的值

              使用read命令可从键盘读取变量的值,可同时读取多个变量的值,输入时以空格隔开,该命令常用于bash脚本中

              用法:read [option]... variable...

              选项:

                      -p:指定读取值时的提示符

                      -t:指定读取值时的等待时间

              例 read -p "Please input two words:" -t 5 a1 a2


四、命令历史

        history命令用来显示命令历史

        用法:

                直接使用该命令显示所有历史命令

                history N:显示最近N条命令(包括当前history命令自身)        

                history -d 命令编号 :删除指定命令条目

                history -a [/path/to/some_history_file]:将当前会话的命令历史写入指定文件

        与命令历史相关的几个环境变量:

                HISFILE:用户退出时命令历史的持久保存位置,默认为~/.bash_history

                HISTFILESIZE:命令历史文件所能记录的最大条目数

                HISTSIZE:history所能显示的命令历史的最大条目数                

        在我们登出bash时,我们下达过的命令的历史默认为会被保存至用户家目录的~/.bash_history文件中,每次登录bash时,系统会自动读取该文件,这就是为何使用history命令还能看到以前bash进程中命令历史的原因。那么~/.bash_history会记录多少条历史条目呢?这个数据保存于环境变量HISTFILESIZE中,默认为1000。当命令历史条目超过该数值时,旧的记录会被冲掉。区别于HISTFILESIZE,HISTSIZE变量保存的是history的条目数

         使用命令历史可简化命令的操作:

                !N:执行命令历史中的第N条命令

                !!:执行上一个命令

                !string:执行命令历史中最近一次以string开头的命令

                !$(加在命令command后):调用上一个命令的最后一个参数

                command后按ESC松开然后按【.】:功能同!$

[root@localhost tesla]# ls /home/tesla
inittab  iron  test
[root@localhost tesla]# ls !$
ls /home/tesla
inittab  iron  test
[root@localhost tesla]# !!
ls /home/tesla
inittab  iron  test
[root@localhost tesla]# date
Tue Aug 11 13:05:30 CST 2015
[root@localhost tesla]# !d
date
Tue Aug 11 13:05:34 CST 2015
[root@localhost tesla]#


五、命令别名

       有时要输入一长串的命令比较麻烦,可使用alias命令指定其为一个较短的别名

       用法:

              不带任何参数则直接显示所有已定义的别名

              指定别名:alias name(别名)=value(原命令),如alias rm=‘rm -i‘,alias ls=‘ls --color=auto‘

              若别名与原命令相同,而想执行原命令,可使用绝对路径或\command

              撤消指定别名:unalias name

              撤消所有别名:unalias -a

[root@localhost tesla]# alias
alias cp=‘cp -i‘
alias l.=‘ls -d .* --color=auto‘
alias ll=‘ls -l --color=auto‘
alias ls=‘ls --color=auto‘
alias mv=‘mv -i‘
alias rm=‘rm -i‘
alias which=‘alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde‘
[root@localhost tesla]# date
Tue Aug 11 13:00:47 CST 2015
[root@localhost tesla]# alias dt=date
[root@localhost tesla]# dt
Tue Aug 11 13:01:04 CST 2015
[root@localhost tesla]# unalias dt
[root@localhost tesla]# dt
-bash: dt: command not found
[root@localhost tesla]


六、如何获取命令帮助?       

  • 内部命令:command  help

  • 外部命令:

              1)command  --help  

              2)手册manual(简写为man):man [章节] command,例如man ifconfig;手册有章节之分(1-9),一个命令可能存在于多个章节中,可使用whatis command查看该command命令存在于哪些章节中。

  • 帮助中的格式字串:[ ]表示可省略    < >表示不可省略    /表示二选一或多选一   ……同类内容可以出现多个

  • 在man中翻屏:

               空格键:向文件尾部翻一屏,b:向文件首部翻一屏,回车键:向文件尾部翻一行,k:向文件首部翻一行,ctrl+d:向文件尾部翻半屏,ctrl+u:向文件首部翻半屏

  • 在man中也可搜索字串,方法同vim中字串搜索

  • man能够为除命令之外的配置文件、系统调用、库调用等提供帮助手册,它们分别位于不同的章节中     1:用户命令  2:系统调用  3:库调用  4:设备文件  5:配置文件  6:游戏  7:杂项  8:管理命令

  • info命令:获取在线文档,仅在man手册无法获取到足够信息,或想了解程序的开发历史时才使用


七、命令的搜索顺序       

       1、以绝对/相对路径执行命令

       2、由alias找到该命令来执行

       3、作为bash内置命令来执行

       4、通过PATH环境变量搜索到的第一个命令执行

       例如,ls的别名与其自身名称相同,由于alias优先于搜索PATH,所以我们使用ls实际是执行其别名命令,即ls --color=auto,若要执行原命令,则使用绝对路径/bin/ls


八、bash快捷键

       ctrl+a:跳至行首(或home键)  ctrl+e:跳至行尾(或end键)

       ctrl+u:删除命令行首至当前光标处的所有内容

       ctrl+k:删除当前光标处至命令行尾的所有内容

       ctrl+l:清屏(或clear)  

       ctrl+c:中止或取消

       ctrl+z:将当前命令送至后台执行


九、bash重要特性之命令(或路径)补全

       如果用户指定的开头字符串能惟一标识某命令(或路径),则按tab键能补全该命令,否则,再次tab键可显示所有以指定字符开头的命令


十、shell特殊符

       单引号‘ ‘(硬引用)、双引号" "(软引用)和转义符【\】,这三种字符前面已作说明,此处不再赘述


十一、shell登录类型       

       交互式(login shell):

              1)直接通过终端输入帐号和密码登录的

              2)使用su -l username 或 su - username登录的

       非交互式(non-login shell):

              1)su  username

              2)图形界面下打开的终端

              3)执行脚本


十二、bash配置文件

  • 分为两类:      

              profile类:为交互式登录的用户提供配置

                   全局:/etc/profile/etc/profile.d/*.sh

                   用户:~/.bash_profile

                   功用:1、设定环境变量  2、运行命令或脚本                    

              bashrc类:为非交互式的用户提供配置

                   全局:/etc/bashrc

                   用户:~/.bashrc

                   功用:1、设定本地变量   2、定义命令别名       

  • 通过编辑配置文件修改的配置如何生效?

               1、退出并重新登录   2、让bash重读此配置文件( . file或source file)

  • bash配置文件的读取顺序:

              交互式登录用户:/etc/profile→/etc/profile.d/*.sh→~/.bash_profile→~/.bashrc→/etc/bashrc

                       交互式登录用户读取的配置文件其实只有/etc/profile,但此文件会呼叫其它配置文件

              非交互式登录用户:~/.bashrc→/etc/bashrc→/etc/profile.d/*.sh


了解bash及其基本使用

标签:history   type   变量   alias   path   chsh   

原文地址:http://9124573.blog.51cto.com/9114573/1699516

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!