什么是shell
shell是系统跟计算机硬件交互时使用的中间介质。是系统的一个工具。实际上,在shell和计算机硬件之间还有一层东西——系统内核,用户直接面对的不是计算机硬件而是shell,用户把指令告诉shell,然后shell在传输给系统内核,接着内核再去支配计算机硬件去执行各种操作。
记录命令历史
!是与命令有关的一个特殊字符
!!:连续两个!表示执行上一条指令。
!n:这里的n是数字,表示执行命令历史中的第n条指令。
!字符串(字符串大于等于1)举例,比如!pw就等于执行命令最近一次以pw开头的命令
命令和文件补全
一次tab键可以帮我们补全一个指令,一个路径或者一个文件名;两次tab键,系统则会把所有的命令或者文件名都列出来。
别名
bash所特有的功能之一 alias,我们可以通过alias把一个常用的并且很长的指令另取名为一个简单易记的指令。如果不想用,可以用unalias命令接触别名功能。
另外,我们可以自定义命令的别名;格式:alias [命令别名]=['具体的命令']
通配符
在bash下,可以使用*来匹配零个或者多个字符。
输入/输出重定向
输入重定向用于改变命令的输入,输出重定向用于改变命令的输出。
管道符
用于将一个命令的输出作为后一个命令的输入。
作业控制
在进行进程时你可以通过Ctrl+Z(暂停),fg命令恢复,或者利用bg命令使它在后台运行,也可以终止(Ctrl+C)
停止
恢复
后台运行
终止后台(用bg调到后台后,用fg回到前台再用ctrl+c终止/直接查进程,直接杀死)
变量
环境变量PATH是shell预设的一个变量。通常,shell预设的变量都是大写的。变量就是使用一个较简单的字符串来替代某些具有特殊意义的设定以及数据;PATH代替了所有常用命令的绝对路径的设定。有了PATH这个变量,我们运行某个命令时,就不需要输入全局路径,直接输入命令名即可。可以使用echo命令显示变量的值。
env
可列出系统的预设的全部系统变量
HOSTBNAME:表示主机的名称;
SHELL:表示当前用户的shell类型;
HISTSIZE:表示当前历史记录数;
MAIL:表示当前用户的邮件存放目录;
PATH:该变量决定了shell将到哪些中寻找命令或程序;
PWD:表示当前目录;
LANG:这是与语言相关的环境变量,多语言环境可以修改此环境变量;
HOME:表示当前用户的家目录;
LOGBNAME:表示当前用户的登录名。
env命令显示的变量只是环境变量,系统预设的变量还有很多,可以使用set命令把系统预设的全部变量都显示出来。
set
跟env类似,输出变量
set命令不仅可以显示系统的预设变量,也可以显示用户自定义的变量。
但该变量只能在当前shell生效
要让环境变量一直生效有两种情况
1是允许系统内所有用户登录后都能使用该环境变量
2是仅允许当前用户使用该变量(在用户主目录下.bashrc文件最后一行加入export myname=zjh ,然后运行source ,bashrc就会生效)
设定变量的格式为a=b,其中a为变量名,b为变量的内容,等号两边不能有空格;
变量名只能由字母,数字以及下划线组成,而且不能以数字开头;
当变量内容带有特殊字符(如空格)时,需要加上单引号;
特殊情况:变量内容中本身带有单引号,这时就需要加双引号
如果变量内容中需要用到其他命令,运行结果则可以使用反引号。
变量内容可以累加其他变量的内容,但需要加双引号
如果要是不小心把双引号错加为单引号,则得不到想要的结果。
使用单引号时,里面的特殊字符将全部失去其本身的作用(例如$)
bash命令:如果当前shell中运行bash指令,则会进入一个全新的shell,这个shell就是原来shell的子shell。
在父shell中设定变量后,进入子shell时,该变量是不会生效的。
如果想要这个变量在子shell中生效,则要用到export指令。
想要取消某个变量,只需要输入unset变量名
系统环境变量与个人环境变量的配置文件
/etc/profile:这个文件预设了几个重要的变量,例如PATH、USER、LOGNAME、MAIL、INPUTRC、HOSTNAME、 HISTSIZE、umask等
/etc/bashrc:这个文件主要预设umask以及PS1。这个PS1就是输入命令时前面那串字符
-.bash_profile:该文件定义了用户的个人化路径与环境变量的文件名称。每个用户都可使用该文件输入专属于自己的shell信息,当用户登录时,该文件仅仅执行一次
.bashrc:该文件包括专属于自己的shell的bash信息,当登录或每次打开新的shell时,该文件会被读取。例如,你可以将用户自定义的别名或者自定义变量写到这个文件中
.bash_history:该文件用于记录命令历史
.bash_logout:当退出shell时,会执行该文件,可以将一些清理的工作放到这个文件中
Linux shell中的特殊符号
*代表零个或多个任意字符
?只代表一个任意字符
注释符号#
脱义字符\(这个字符会将后面的特殊字符(如*)还原为普通字符)
管道符| 作用是将前面的命令的输出作为后面命令的输入,一般针对文档操作命令比较常用
cut(用来截取某一个字段)
cut命令用来截取某一个字段,格式为:==cut -d ‘分隔字符’ [-cf] n,==这里的n是数字。
-d:后面跟分隔字符,分隔字符要用单引号括起来
-c:后面接的是第几个字符
-f:后面接的是第几个区块
-d选项后面加冒号作为分隔字符,-f 1表示截取第一段,-f和1之间的空格可有可无。
-c选项后面可以是一个数字n,也可以是一个区间n1-n2,还可以是多个数字n1,n2,和n3。
sort
sort命令用做排序,格式为sort [-t 分隔符] [-kn1,n2] [-nru],这里n1和n2指的是数字
-t:后面跟分隔字符,作用跟cut的-d选项一样
-n:表示使用纯数字排序
-r:表示反向排序
-u:表示去重复
-kn1,n2:表示由n1区间排序到n2区间,可以只写-kn1,即对n1字段排序
(sort后不加任何选项,则从首字母开始排序)
-t选项后面跟分隔符。-k选项后面跟单个数字表示对第几个区域的字符串排序,-n选项则表示使用纯数字排序。
-k选项后面跟数字n1和n2表示对第n1和n2区域内的字符串排序,-r选项则表示反向排序。
wc
(用于统计文档的行数,字符数或词数)该命令常用的选项-l(统计行数),-m(统计字符数),-w(统计词数)
如果wc不跟任何选项,直接跟文档。则会把行数。词数和字符数依次输出
uniq
用来删除重复的行,该命令只有-c选项比较常用,他表示统计重复的行数,并把行数写在前面。
tee
后面跟文件名,其作用类似于重定向>
他比重定向多一个功能,即把文件写入后面所跟的文件时,还显示在屏幕上。该命令常用于管道符|后。
tr
用于替换字符,常用来处理文档中出现的特殊符号
-d:表示删除某个字符,后面要跟删除的字符
-s:表示删除重复的字符
split
用于切割文档
-b:表示依据大小来分隔文档,单位为byte
-l:表示依据行数来分割文档
特殊字符$
可以用作变量前面的标识符,还可以和!结合起来使用
特殊符号;
如果我们想在一行中运行两个或两个以上的命令,需要在命令之间加符号;
特殊符号 ~
符号~表示用户的家目录,root用户的家目录是/root,普通用户的则是/home/username
特殊符号&
如果想把一个命令放在后台执行,则需要加上符号&,它用于命令运行时间较长的情况
重定向符号
>(取代),>>(追加),2>(错误重定向)和2>>(错误追加重定向)
中括号[]
中括号内为字符组合,代表字符组合中的任意一个,可以是一个范围(1-3,a-z)
特殊符号&&和||
用于多条命令中间的特殊符号
command1 ; command2
command1 && command2
command1 | | command2
使用 ;时,不管command1是否执行成功,都会执行command2
使用 && 时,只有command1执行成功后,才会执行command2,否则不执行command2
使用 || 时,command1执行成功后则command2不执行,否则执行command2,即command1和command2中总有一条命令执行