什么是shell
- 用户面对的不是计算机硬件而是shell
- 用户把指令告诉shell→shell再传输给系统内核→内核去支配计算机硬件去执行各种操作
记录命令历史
Linux中执行过的命令会保存在用户的家目录的.bash_history文件中,只有当用户正常退出当前shell时,命令才会保存到.bash_history.
- !是与命令历史有关的特殊字符,该字符常用的应用:
- !!:表示执行上一条指令
例: - !n:n指数字,表示执行命令历史中的第n条指令
例:
- !字符串(字符串大于等于1):例如!pw表示执行命令历史中最近一次以pw开头的命令
例:
命令和文件名补全
tab键可以帮我们补全一个指令、一个路径或一个文件名;连续按两次,系统则会把所有的命令或文件名列出来。
别名
- alias是bash所特有的功能之一。
- 可以通过alias把一个常用并且很长的指令另取一个简单易记的指令。
- 如果不想用,可以用unalias命令解除别名功能。
- 直接执行alias命令,会看到目前系统预设的别名。
- alias也可以自定义命令的别名
格式:alias [命令别名]=[‘具体的命令’]
示例命令:
通配符
- 在bash下,可以用*来匹配零个或多个字符,用?匹配一个字符
输入/输出重定向
- 输入重定向用于改变命令的输入;
- 输出重定向用于改变命令的输出,它用于将命令的结果输入到文件中,而不是屏幕上;
- 输入重定向命令的<,输出重定向命令的>
- 错误重定向命令2>,追加重定向命令>>
示例命令:
管道符
- 管道符用于将前一个指令的输出作为后一个指令的输入
如所示:
作业控制
- ** 当运行进程时,按Ctrl+Z组合键可以暂停,fg(foreground的简写)命令可以恢复进程,bg(background的简写)命令使它到后台运行,也可以按Ctrl+C组合键终止。
**
示例命令:
Ctrl+C:
Ctrl+Z:
bg:
变量
- 环境变量PATH,它是shell预设的一个变量;
- shell预设的变量都是大写的;
- 变量就是使用一个较简单的字符串来替代某些具有特殊意义的设定以及数据,,就PATH讲,PATH就代替了所有常用命令的绝对路径的设定;
- 有了PATH这个变量,运行某个命令时,就不需要输入全局路径,直接输入命令名。
- $:取一个变量的值
如所示:
命令env
- 使用env命令,可列出系统预设的全部系统变量。
如所示:
当显示的是root账户的环境变量,那常见的环境变量:
HOSTNAME:表示主机的名称。
SHELL:表示当前用户的shell类型。
HISTSIZE:表示历史记录数。
MAIL:表示当前用户的邮件存放目录。
**PATH:**该变量决定了shell将到哪些目录中寻找命令或程序。
**PWD:**表示当前目录。
LANG:这是与语言相关的环境变量,多语言环境可以修改此环境变量。
**HOME:**表示当前用户的家目录。
**LOGNAME:**表示当前用户的登录名。 - env命令显示的变量知识环境变量。
命令set
- set命令可以把系统预设的全部变量都显示出来
如所示:
- set命令不仅可以显示系统预设的变量,也可以显示用户自定义的变量。
如所示:
- ** 虽然可以自定义变量,但是该变量只能在shell生存;使用bash命令打开一个shell,而设置的myname变量已经不存在了。**
如所示:
- 允许系统内所有用户登录后都能使用自定义变量。具体操作方法是:在/etc/profile文件的最后一行加入export
例:myname=Aming,然后运行source /etc/profile就可以生效。再运行bash命令或者切换到其他账户就可看到效果。
如所示:
- 仅允许当前用户使用该变量。具体操作方法:在用户主目录下的.bashrc文件的最后一行加入export
myname=aming,然后运行source
.bashrc就可以生效了。source命令的作用是将目前设定的配置刷新,即不用注销再登录也能生效。
如所示:
系统环境变量与个人环境变量的配置文件
- /etc/profile:这个文件预设了几个重要的变量,例如PATH、USER、LOGNAME、MAIL、INPUTRC、HOSTNAME、HISTSIZE、umask等
- /etc/bashrc:这个文件主要预设umask以及PS1。这个PS1就是在输入命令时前面的那串字符。
图所示:
PS1的值,如所示:
- \u指用户,\h指主机名,\W指当前目录,$指字符#(如果是普通用户,则显示为$)
除了以上两个系统级别的配置文件外,每个用户的主目录下还有几个隐藏文件: - .bash_profile:该文件定义了用户的个人化路径与环境变量的文件名称。每个用户都可使用该文件输入专属于自己的shell信息,当用户登录时,该文件仅仅执行一次。
- .bashrc:该文件包含专属于自己的shell的bash信息,当登录或每次打开新的shell时,该文件会被读取。例,可以将用户自定义的别名或自定义变量写到此文件中。
- .bash_history:该文件用于记录命令历史。
- .bash_logout:当退出shell时,会执行该文件。可以将一些清理的工作放到此文件中。
Linux shell中的特殊符号
*代表零个或多个任意字符
?只代表一个任意的字符
用法如下:
注释符号#
用法如下:
脱义字符\
- 此字符会将后面的特殊字符(如*)还原为普通字符
用法如下:
再说管道符|
- 作用:将前面的命令的输出作为后面命令的输入
命令cut
- 用来截取某一个字段
- 格式:cut -d ‘分隔字符’ [-cf] n,n是数字
- -d:后面跟分隔字符,分隔字符要用单引号括起来
- -c:后面接的是第几个字符
- -f:后面接的是第几个区块
- 用法如下:
-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不加任何选项,则从首字符向后依次按ASCII码值进行比较,最后将它们按升序输出。
示例命令:
原本的就已经按照-n选项使用纯数字排序 - -k选项后面跟数字n1和n2表示对第n1和第n2区域内的字符串排序,-r选项则表示反向排序。
示例命令:
命令wc
- wc命令用于统计文档的行数、字符数或词数。该命令常用的选项有-l(统计行数)、-m(统计字符数)和-w(统计词数)。
- 如果wc不加任何选项,直接跟文档,则会把行数、词数和字符数依次输出。
示例命令:
命令uniq
- uniq命令用来删除重复的行,该命令常用选项-c,表示统计重复的行数,并把行数写在前面。
示例命令:
- 使用uniq前,必须先给文件排序,否则不管用。
示例命令:
命令tee
- tee命令后面跟文件名,作用类似于重定向,但比重定向多一个功能,即把文件写入后面所跟的文件时,还显示在屏幕上
- 该命令常用于管道符|后
示例命令:
命令tr
- tr命令用于替换字符,常用来处理文档中出现的特殊符号,如DOS文档中出现的符号^M。
- 常用选项:
-d:表示删除某个字符,后面跟要删除的字符
-s:表示删除重复的字符 - tr命令常用于把小写字母变成大写字母
示例命令:
命令split
- split命令用于切割文档,常用选项为-b和-l
- -b:表示依据大小来分割文档,单位为byte
- -l表示依据行数来分割文档
特殊符号$
- 符号$可以用作变量前面的标识符,还可以和!结合起来使用
示例命令:
- !$表示上条命令中的最后一个变量
特殊符号;
- 如果想在一行中运行两个或两个以上的命令,需要在命令之间加符号;。
示例命令:
特殊符号~
- 符号~表示用户的家目录,root用户的家目录是/root,普通用户的家目录是/home/usename
特殊符号&
- 如果想把一条命令放到后台执行,则需要加上符号&,它通常用于命令运行时间较长的情况。
- 例:sleep &
重定向符号>、>>、2>和2>>
-
、>>分别表示取代和追加的意思
- 2>、2>>分别表示错误重定向和错误追加重定向
示例:
中括号[]
- 中括号内为字符组合,代表字符组合中的任意一个,可以是一个范围(1-3,a-z)
特殊符号&&和||
- command1 ; command2
- command1 && command2
- command1 || command2
使用;时,不管command1是否执行成功,都会执行command2
使用&&时,只有command1执行成功,command2才会执行,否则command2不执行
使用||时,command1执行成功后则command2不执行,否则执行command2,即command1和command2中总有一条命令会执行