shell基础知识

shell基础知识
(1)记录命令历史

我们执行的命令Linux都会记录,这些命令保存在用户的家目录的 .bash_history文件中。只有当用户正常退出当前shell时,在当前shell中运行的命令才会保存至 .bash_history文件中。

!是与命令历史有关的一个特殊字符,该字符常用的应用有以下3个。
  • !!:连续两个!表示执行上一条指令。
    在这里插入图片描述
  • !n:这里的n是数字,表示执行命令历史中的第n条指令。(!101表示执行命令历史中的第101个命令)在这里插入图片描述
  • !字符串(字符串大于等于1):例如!pw表示执行命令历史中最近一次以pw开头的命令。如图。在这里插入图片描述
(2)命令和文件名补全

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

(3)别名

alias是bash所特有的功能之一。我们可以通过alias把一个常用的并且很长的指令另取名为一个简单易记的指令。不想用了,可以使用unalias命令解除别名功能。直接执行alias命令,会看到目前系统预设的别名,如图。

在这里插入图片描述
另外,可以自定义命令的别名,其格式为alias[命令别名]=[‘具体的命令’],如图。
在这里插入图片描述

(4)通配符
在bash下,可以使用*来匹配零个或多个字符,用?匹配一个字符,如图。

在这里插入图片描述

(5)输入/输出重定向

输入重定向用于改变命令的输入,输出重定向用于改变命令的输出。输出重定向更为常用,它经常用于将命令的结果输入到文件中,而不是屏幕上。输出重定向的命令是 <,输出重定向的命令是 >。另外,还有错误重定向命令2>以及追加重定向命令>>,如图。

在这里插入图片描述

(6)管道符
管道符 | ,它用于将前一个指令的输出作为后一个指令的输入。
(7)作业控制
当运行进程时,你可以使它暂停(Ctrl+Z组合键),然后使用fg(foreground的简写)命令恢复它,或是利用bg(background的简写)命令使它到后台运行。此外,也可以使它终止(Ctrl+C组合键)。

#vi test1.txt
testtesttest111

使用vi命令编辑test1.txt,随便输入一些内容,按Esc键后,使用Ctrl+Z组合键暂停任务,如图。在这里插入图片描述
此时提示 vi test1.txt已经停止了,然后使用fg命令恢复它,此时又进入刚才的vi窗口。再次使其暂停,然后输入jobs,可以看到被暂停或者在后台运行的任务,如图。

在这里插入图片描述
如果想把暂停的任务放在后台重新运行,就使用bg命令。

#bg
[1]+ vi test1.txt &
[1]+ Stopped vi test1.txt

但是vi似乎并不支持在后台运行,于是换一个其他命令。

#vmstat 1 > /tmp/1.log
^Z //此处按Ctrl+z
[2]+ Stopped vmstat 1> /tmp/1.log
#jobs
[1]- Stopped vi test1.txt
[2]+Stopped vmstat 1 > /tmp/1.log
#bg 2
[2]+ vmstat 1 > /tmp/1.log &

变量
通常,shell预设的变量都是大写的。变量就是使用一个较简单的字符串来代替某些具有特殊意义的设定以及数据。例如PATH,有了PATH这个变量,我们运行某个命令时,就不再需要输入全局路径,直接输入命令名即可。可以使用echo命令显示变量的值,如图。

在这里插入图片描述

(1)命令env
使用env命令,可列出系统预设的全部系统变量,如图。(截了一部分)

在这里插入图片描述
登陆不同的用户,这些环境变量的值也不同。当前显示的是root账户的环境变量。以下是常见的环境变量。

  • HOSTNAME:表示主机的名称
  • SHELL:表示当前用户的shell类型
  • HISTSIZE:表示历史记录数
  • MAIL:表示当前用户的邮件存放目录
  • PATH:该变量决定了shell将到哪些目录中寻找命令或程序
  • PWD:表示当前目录
  • LNAG:这是与语言相关的环境变量,多语言环境可以修改此环境变量
  • HOME:表示当前用户的家目录
  • LOGNAME:表示当前用户的登陆名
    env命令显示的变量只是环境变量,系统预设的变量其实还有很多,可以使用set命令把系统预设的全部变量都显示出来。
(2)命令set
set命令和env命令相似(只列出了前10行,截了一部分)

在这里插入图片描述
set命令不仅可以显示系统预设的变量,也可以显示用户自定义的变量,如图。
在这里插入图片描述
虽然可以自定义变量,但是该变量只能在当前shell中生效,如图。在这里插入图片描述
使用bash命令可以再打开一个shell,此时先前设置的myname变量已经不存在了,退出当前的shell回到原来的shell,myname变量还在。如果想让设置的环境变量一直生效,如图。

  • 允许系统所有用户登陆后都能使用该变量。具体的操作方法是:在/etc/profile文件的最后一行加入export myname=liao,然后运行source /etc/profile就可以生效了。此时再运行bash命令或者切换到其他账户就可以看效果。

#echo “export myname=liao” >> /etc/profile
#source /etc/profile
#bash
#echo $myname
liao
#exit
exit
#su test
$ echo $myname
liao

  • 仅允许当前用户使用该变量。具体的操作方法是:是用户主目录下的 .bashrc文件的最后一行加入export myname=liao,然后运行source .bashrc就可以生效了。这时再登陆test账户,myname变量则不会生效了。
系统环境变量与个人环境变量的配置文件
  • /etc/profile:这个文件预设了几个重要的变量,例如PATH、USER、LOGNAME、INPUTRC、MAIL、HOSTNAME、HISTSIZE、umask等
  • /etc/bashrc:这个文件主要预设umask以及PS1。这个PS1就是我们在输入命令时前面的那串字符。例如,Linux系统的PS1就是[root@localhost~]#。

echo $PS1
[\u@\h \w]$
其中,\u指用户,\h指主机名,\w指当前目录,$指字符#(如果是普通用户,则显示为$)

  • .bash_profile:该文件定义了用户的个性化路径与环境变量的文件名称。每个用户都可以使用该文件输入专属于自己的shell信息,当用户登陆时,该文件仅仅执行一次。
  • .bashrc:该文件包含专属于自己的shell的bash信息,当登陆或每次打开新的shell时,该文件被读取。
  • .bash_history:该文件用于记录命令历史。
  • .bash_logout:当退出shell时,会执行该文件。可以将一些清理的工作放到这个文件中。
Linux shell中的特殊符号
(1)*代表零个或多个任意字符

在这里插入图片描述

(2)?只代表一个任意字符
不管是数字还是字母,只要是一个字符,都能匹配出来。
(3)注释符号#
表示注释说明,即#后面的内容都会被忽略。

#abc=123 #asdsds
#echo $abc
123

(4)脱义字符\
这个字符会将后面的特殊符号(如*)还原为普通字符。

在这里插入图片描述

(5)管道符|
它的作用是将前面命令的输出作为后面命令的输入。这里提到的后面的命令,并不是所有的命令都可以,一般针对文档操作的命令比较常用。例如cat、less、head、grep、cut、sed、awk等。(wc -l用来计算一个文档有多少行)

#cat test.txt |wc -l
0

(6)命令cut
cut命令用来截取某一个字段,其格式为 cut -d ' 分隔字符 ' [-cf] n,这里的n是数字。
  • -d:后面跟分隔字符,分隔字符要用单引号括起来
  • -c:后面跟的是第几字符
  • -f:后面跟的是第几区块
    如图

在这里插入图片描述

(7)命令sort
sort命令用做排序,其格式为 sort [-t 分隔符] [-kn1,n2] [-nru],这里n1和n2指的是数字
  • -t:后面跟分隔字符
  • -n:表示使用纯数字排序
  • -r:表示反向排序
  • -u:表示去重复
  • -kn1,n2:表示由n1区间排序到n2区间,可以只写-kn1,即对n1字段排序

sort不加任何选项,则从首字符向后依次按ASCII码进行比较,最后将它们按升序输出。在这里插入图片描述
-t后面跟分隔符,-k后面跟单个数字表示对第几个区域的字符串排序,-n则表示使用纯数字排序,如图。在这里插入图片描述
-k后面跟数字n1和n2表示对第n1和第n2区域内的字符串排序,-r则表示反向排序,(-k3,5表示对第3区域至第5区域的字符串排序)如图。

在这里插入图片描述

(8)命令wc
wc命令用于统计文档的行数、字符数或词数。该命令的常用选项有 -l(统计行数)、-m(统计字符)和-w(统计词数)如图。

在这里插入图片描述

(9)命令uniq
uniq命令用来删除重复的行,该命令只有-c比较常用,它表示统计重复的行数,并把行数写在前面。

#vi test.txt \把下面的内容写入test.txt并保存
111
222
111
333

使用uniq前,必须先给文件排序,否则不管用,如图。

在这里插入图片描述

(10)命令tee
tee命令后面跟文件名,其作用类似于重定向>,但它比重定向多一个功能,即把文件写入后面所跟的文件时,还显示在屏幕上。该命令常用于管道符|后,如图。

在这里插入图片描述

(11)命令tr
tr命令用于替换字符,常用来处理文档中出现的特殊符号。
  • -d:表示删除某个字符,后面跟要删除的字符
  • -s:表示删除重复的字符
    tr命令常用于把小写字母变成大写字母,如 tr ‘[a-z]’ ‘[A-Z]’

#head -n2 /etc/passwd |tr ‘[a-z]’ ‘[A-Z]’
ROOT:X:0:0:ROOT:/ROOT:/BIN/BASH
BIN:X:1:1:BIN:/BIN:/SBIN/NOLOGIN

tr命令还可以替换一个字符。不过替换、删除以及去重复等操作都是针对一个字符来讲的,有一定的局限性,如果针对一个字符串,就不能再使用了。

(12)命令split
split命令用于切割文档,常用 -b和 -l。
  • -b:表示依据大小来分割文档,单位为byte,如图。

在这里插入图片描述
如果split不指定目标文件名,则会以xaa、xab…这样的文件名来存取切割后的文件。我们也可以指定目标文件名,如图。

在这里插入图片描述

  • -l:表示依据行数来分割文档,如图。

在这里插入图片描述

(13)特殊符号$
符号$可以用作变量前面的标识符,还可以和!结合起来使用,如图。(!$表示上一条命令中的最后一个变量)

在这里插入图片描述

(14)特殊符号 ;
一般我们都是一行输入一个命令,然后回车就运行了。如果想在一行中运行两个或多个命令,需要在命令之间加符号 ;,如图。

在这里插入图片描述

(15)特殊符号 ~
符号~表示用户的家目录,root用户的家目录是/root,普通用户则是/home/username,如图。

在这里插入图片描述

(16)特殊符号 &
如果想把一条命令放到后台执行,则需要加上符号&,通常用于命令运行时间较长的情况。比如,可以用在sleep后,如图。

在这里插入图片描述

(17)重定向符号 >、>>、2>和2>>
重定向符号>和>>,分别表示取代和追加的意思。当运行一个命令报错时,报错信息会输出到当前屏幕。如果想重定向到一个文本,则要用重定向符号2>或者2>>,分别表示错误重定向和错误追加重定向。

#ls abc123
ls:无法访问abc123:没有那个文件或目录
#ls abc123 2> /tmp/test123
#cat /tmp/test123
ls:无法访问abc123:没有那个文件或目录
#ls abc123 2>> /tmp/test123
#cat /tmp/test123
ls:无法访问abc123:没有那个文件或目录
ls:无法访问abc123:没有那个文件或目录

(18)中括号 [ ]
中括号内为字符组合,代表字符组合中的任意一个,可以是一个范围(1-3,a-z)

在这里插入图片描述

(19)特殊符号&&和| |
前面分号可作为多条命令间的分隔符,其实&&和| |也可以用于多条命令中间的特殊符号。
  • command1 ;command2
  • command1 && command2
  • command1 | | command2
  • 使用;时,不管command1是否执行成功,都会执行command2。
  • 使用&&时,只有command1执行成功后,command2才会执行,否则command2不执行。
  • 使用 | |时,command1执行成功后则command2不执行,否则执行command2,即command1和command2中总有一条命令会执行。

只有当ls test3成功后,才会执行touch test3。因为test3不存在,ls test3没有执行成功,所以&&后面的touch test3并没有执行&&演示(&&演示)

在这里插入图片描述
当ls test3执行不成功,则会执行touch test3。因为test3不存在,所以ls test3没有执行成功,转而执行| |后面的touch test3,所以增加了test3这个文件。

在这里插入图片描述

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值