shell基础学习

  • 格式:pdf
  • 大小:139.94 KB
  • 文档页数:4

shell基础学习

学习shell我个⼈认为应该先打好基础,基础知识扎实,学起来就轻松些。

前⾔:Shell是系统跟计算机硬件交互时使⽤的中间介质,它只是系统的⼀个⼯具,说的形象⼀些,计算机硬件就相当于⼈的躯⼲,计算机内核相当于⼈的⼤脑,⽽shell就相当于⼈的五官。⽤户把指令告诉给shell,shell再传输给系统内核,内核再去⽀配计算机硬件去执⾏各种操作。

⼀、⼀、关于关于shell

1、记录命令历史:

!!:表⽰执⾏上⼀条指令。

!n:n指的是数字,表⽰执⾏命令历史中的第⼏条指令。

例:

!字符串(字符串⼤于等于1):例如!pw表⽰命令历史中最近⼀次pw开头的命令。

2、命令和⽂件名补全:

tab键可以帮我们补全⼀个指令,连续按两次系统则会把所有的命令或者⽂件名都列出来。

3、别名:

我们可以通过alias把⼀个常⽤的并且很长的指令取名为⼀个简单易记的指令,如果不想⽤还可以使⽤unalias命令解除别名功能。

我们还可以⾃定义命令的别名,格式为alias【命令别名】=【‘具体的命令’】,如下图所⽰:

4、通配符:

在bash下,可以使⽤*来匹配零个或多个字符,⽤?匹配⼀个字符。

5、输⼊/输出重定向:

输⼊重定向⽤于改变命令的输⼊(符号为<),输出重定向⽤于改变命令的输出(符号为>),以及错误重定向2>,以及追加重定向>>。

6、管道符:

|,它⽤于将前⼀个指令的输出作为后⼀个指令的输⼊。

例:cat /etc/passwd |wc -l

7、作业控制:

Ctrl+z: 暂停,fg恢复它,bg使它后台运⾏。

Ctrl+c:停⽌,jobs可以看到当前被暂停或在后台运⾏的任务。

当多个任务被暂停的时候会有编号,再使⽤bg或fg的时候要在后⾯加编号。vmstat是⽤来观察系统状态的⼀个命令。

使⽤&把任务放到后台运⾏时,会显⽰pid信息,如果忘记这个pid,还可以使⽤ps aux 找到那个进程,⽤kill + pid即可结束该进程。

⼆、变量1、命令env:

可列出系统预设的全部系统变量,显⽰的变量只是环境变量。

HOSTNAME:表⽰主机的名称。

SHELL: 表⽰当前⽤户的shell类型。

HISTSIZE: 表⽰历史记录数。

MAIL: 表⽰当前⽤户的邮件存放⽬录。

PATH: 该变量绝定了shell将到哪些⽬录中寻找命令或程序。

PWD:表⽰当前⽬录。

LANG: 这是与语⾔相关的环境变量,多语⾔环境可以修改此环境变量。

HOME: 表⽰当前⽤户的家⽬录。

LOGNAME: 表⽰当前⽤户的登录名。

2、命令set:

set命令与env命令类似,也可以输出环境变量,如下图所⽰:

set还可以显⽰⽤户⾃定义的变量,但是改变量只能在shell中⽣效, 如下图所⽰:

bash表⽰再打开⼀个⼦shell,此时先前设的myname变量已经没了,退出当前shell回到原来的shell发现变量还在。

允许系统内所有⽤户登录后都能使⽤该变量,如下图所⽰:

这⾥的source命令的作⽤是将⽬前设定的配置刷新。

3、在Linux下设置⾃定义变量,有以下规定:

(1)设定变量的格式为a=b,其中a为变量名,b为变量的内容,等号两边不能有空格。

(2)变量名只能由字母、数字以及下划线组成,⽽且不能以数字开头。

(3)当变量内容带有特殊字符(如空格)时,需要加上单引号,⽐如:myname=‘Aming Li’。

(4)当变量本⾝带有单引号,这时就要加双引号了,例如:myname=”Aming’s”。

(5)如果变量内容中需要得到其他命令,运⾏结果可以使⽤反引号,例:myname=`pwd`。

(6)变量内容可以累加其他变量内容,但需要加双引号,例:myname=“$LOGNAME”Aming。

(7)pstree:把系统中的所有进程以树形结构显⽰出来。 #yum install -y psmisc下载该命令。

在⽗shell中设定变量后,进⼊⼦shell时,改变量是不会⽣效的,如下图所⽰:

如果想让这个变量在⼦shell中⽣效,则要⽤到export指令,如果想取消输⼊unset + 变量名即可,如下图所⽰:

4、系统环境变量与个⼈环境变量的配置⽂件:

(1)/etc/profile: 这个⽂件预设了⼏个重要的变量,例如:PATH、USER、LOGNAME、MAIL、INPUTRC、HOSTNAME、HISTSIZE、umask等。(2)/etc/bashrc: 这个⽂件主要预设umask以及PS1。

这⾥,\u指⽤户,\h指主机名,\w指当前⽬录,\$指字符#(如果是普通⽤户,则显⽰为$)。

(3).bash_profile: 该⽂件定义了⽤户的个⼈化路径与环境变量的⽂件名称。

(4).bashrc:该⽂件包含专属于⾃⼰的shell的bash信息,当登录或每次打开新的shell时,该⽂件会被读取。

(5).bash_history: 该⽂件⽤于记录命令历史。

(6).bash_logout: 当退出shell时,会执⾏该⽂件。

5、Linux shell中的特殊符号:

(1)*代表零个或多个任意字符

(2)?只代表⼀个任意的字符

(3)注释符号#,即该符号后⾯的内容都会被忽略,

⽤法如下:

(4)脱义字符\:这个字符会将后⾯的特殊字符(如*)还原为普通字符,

⽤法如下:

(5)再说管道符 | :它的作⽤是将前⾯命令的输出作为后⾯命令的输⼊。1、命令cut:格式为cut -d ‘分隔字符’【-cf】n,这⾥n指数字。

该命令有⼏个选项:-d:后⾯跟分隔字符,分隔字符要⽤单引号括起来。

-c:后⾯接的是第⼏个字符。

-f:后⾯接的是第⼏个区块。

命令⽤法如下图所⽰:

-f和1之间空格可有可⽆,例:# head -n2 /etc/passwd|cut -c2

-c后⾯可以是⼀个数字,也可以是⼀个区间n1~n5,还可以多个数字,n1,n2、n3,如下图所⽰:

2、命令sort:⽤作排序,格式为sort 【-t分隔符】【-kn1,n2】【-nru】,这⾥n1,n2指的是数字,其它的选项如下:

-t:后⾯跟分隔字符,作⽤跟cut的-d⼀样。

-n:表⽰单纯⽤数字排序。

-r:表⽰反向排序。

-u:表⽰去重复。

-kn1,n2:表⽰由n1区间排序到n2区间,可以只写kn1,即对n1字段排序。

3、wc:⽤于统计⽂档的⾏数、字符数或词数,该命令常⽤的选项有-l(统计⾏数)、-m(统计字符数)、-w(统计词数)。

如下图所⽰:

4、uniq:⽤来删除重复的⾏,-c选项⽐较常⽤,它统计重复的⾏数,并把⾏数写在前⾯。使⽤uniq之前必须先给⽂件排序,如下图所⽰:

5、命令tee:作⽤类似于重定向(>),但是它还能把⽂件写⼊后⾯所跟⽂件时,还显⽰在屏幕上。

6、命令tr:⽤于替换字符,常⽤的命令有两个:

-d:表⽰删除某个字符,后⾯跟要删除的字符。

-s:表⽰删除重复的字符。

常常⽤来把⼩写字母变成⼤写字母,⽤法如下图:

7、命令split:⽤于切割⽂档,常⽤选项为-b和-l:

-b:表⽰⼀句⼤⼩来分割⽂档,单位为byte。

-l:表⽰依据⾏数来分割⽂档。

8、特殊符号$:可以⽤作变量前⾯的标识符,还可以和!结合起来使⽤,!$表⽰上条命令中的最后⼀个变量,⽤法如下图所⽰:

9、特殊符号 ; :如果想在⼀⾏中运⾏两个或两个以上的命令,需要加;

10、特殊符号~:代表⽤户的家⽬录,root⽤户的家⽬录是/root,普通⽤户则是/home/username。

11、特殊符号&:如果想把⼀条命令放到后台执⾏,需要加上&。

12、重定向符号>、>>、2>和2>>:>和>>分别表⽰取代和追加的意思,2>和2>>分别表⽰错误定向和错误追加重定向。

13、中括号[ ]:中括号内为字符组合,代表字符组合中的任意⼀个,也可以是⼀个范围(1-3,a-z),⽤法如下:

14、特殊符号&&和||:

(1)command1 ;command2

(2)command1 && command2

(3)command1 || command2

使⽤;时,不管command1是否执⾏成功,都会执⾏command2

使⽤&&时,只有前者执⾏成功,才会执⾏后者。

使⽤||时,前者执⾏成功后则后者不执⾏,否则执⾏command2。

具体操作如下图: