shell是系统跟计算机硬件交互时使用的中间介质,他是系统的一个工具。
实际上,shell和计算机硬件之间还有一层东西——系统内核。
用户直接面对的不是计算机硬件而是shell,用户把指令告诉shell,shell再传给系统内核,内核再之配硬件执行
我们执行的命令都会记录在家目录的.bash_history文件中
#!!
//连续两个!表示执行上一条命令
#!n
//这里n代表数字,表示执行历史的第n条命令
#!字符串(字符串大于等于1)
//例如 !pw 表示执行命令历史最近一次以pw开头的命令
tab键可以帮我们补全一个指令,一个文件或一个路径
连续按两次tab键,会列出所有文件名或命令
#alisa
//展示目前系统预设的别名
另外,我们也可以自定义别名,格式:alisa[命令别名]=[‘具体命令‘]
#alisa aming=‘pwd‘
#aming
/root
#unalisa aming
//删除自定义别名
#aming
bash:aming:未找到命令...
在bash下,可以用*匹配零个或多个字符,用?匹配一个字符
< 输入重定向
> 输出重定向(存在则取代)
>> 追加输出重定向(继续添加)
前面已经提过管道符 | ,它用于将前一个指令的输出作为后一个指令的输人
当运行进程时,可以将它暂停(Ctrl+Z),然后使用fg命令恢复他。
使用bg调到后台运行,使用Ctrl+C终止
使用命令env可以列出系统预设的所有系统变量
#env
下面介绍几个常用的环境变量
·HOSTNAME:表示主机名称
·SHELL:表示当前用户的shell类型
·HISTSIZE:表示历史记录数
·MAIL:表示当前用户的邮件存放目录
·PATH:该变量决定了shell将到哪个目录里寻找命令或程序
·PWD:表示当前目录
·LANG:与语言有关的环境变量,多语言环境可修改此环境变量
·HOME:表示当前用户的家目录
·LOGNAME:当前用户登录的用户名
使用命令set可以列出系统预设的所有系统变量
#set
set命令不仅能显示系统预设的变量,也能显示用户自定义的变量
#myname=Aming
#echo $myname
Aming
#set |grep myname
#exit
exit
#echo $myname
Aming
使用bash命令可以再打开一个shell,此时先前设置的myname变量就已经不存在了
退出当前的shell回到原来的shell,myname变量还在。
如果想一直存在的操作方法是:
□允许系统内所有用户登录后都能使用该变量。具体的操作方法是:在/etc/profile文件的最后一
行加入export myname=Aming, 然后运行source /etc/profile就可以生效了。此时再运行bash .
命令或者切换到其他账户(如su - test)就可以看到效果。如下所示:
#echo "export myname=Aming" >> /etc/profile
#source !$
source /etc/profile
#bash
#echo $myname
Aming
#exit
exit
#su - test
$echo $myname
Aming
□仅允许当前用户使用该变量。具体的操作方法是:在用户主目录下的.bashrc文件的最后一行
加入export myname=Aming,然后运行source .bashrc就可以生效了。这时再登录test账户,
myname变量则不会生效了。这里source命令的作用是将目前设定的配置刷新,即不用注销再
登录也能生效。
阿铭在上例中使用myname=Aming来设置变量myname,在Linux下设置自定义变量,有哪些规则呢?
□设定变量的格式为a=b,其中a为变量名,b为变量的内容,等号两边不能有空格。
□变量名只能由字母、数字以及下划线组成,而且不能以数字开头。
□当变量内容带有特殊字符(如空格)时,需要加上单引号。示例命令如下:
# myname=‘Aming Li‘
# echo $myname
Aming Li
有一种情况需要你注意,就是变量内容中本身带有单引号,这时就需要加双引号了。示例命令如下:
# myname="Aming‘s"
# echo $myname
Aming‘s
如果变量内容中需要用到其他命令,运行结果则可以使用反引号。示例命令如下:
# myname=`pwd`
# echo $myname
/root
变量内容可以累加其他变量的内容,但需要加双引号。示例命令如下:
# myname= " $LOGNAME " Aming
# echo $myname
rootAming
如果你不小心把双引号错加为单引号,则得不到你想要的结果。示例命令如下:
□/etc/profile:这个文件预设了几个重要变量,例如:PATH,USER,LOGNAME,MAIL,INPUTRC,HOSTNAME,HISTSIZE,umask等
□/etc/bashrc:这个文件主要预设umask以及PS1。PS1就是我们在输入命令时前面的那串字符。
# echo $PS1
[\u@\h \W]\$
其中,\u指用户,\h指主机名,\W指当前目录,\$ 指字符# (如果是普通用户,则显示为$ )。
□.bash_ profile: 该文件定义了用户的个人化路径与环境变量的文件名称。
每个用户都可使用该文件输人专属于自己的shell信息,当用户登录时,该文件仅仅执行一次。
□.bashre:该文件包含专属于自己的shell的bash信息,当登录或每次打开新的shell时,
该文件会被读取。例如,你可以将用户自定义的别名或者自定义变量写到这个文件中。
□.bash_history:用于记录命令历史的
□.bash_ logout: 当退出shell时,会执行该文件。你可以将一些清理的 工作放到这个文件中。
这个字符前面已经介绍过,这里再次提到,它的用法如下:
# ls /tmp/4_6/test*
/tmp/4_6/test1 /tmp/4_6/test111 /tmp/4_6/test4 /tmp/4_6/test5
这个字符的用法如下:
# touch /tmp/4_6/testa
# ls -d /tmp/4_6/test?
/tmp/4_6/test1 /tmp/4_6/test4 /tmp/4_6/test5 /tmp/4_6/testa
不管是数字还是字母,只要是一一个字符,都能匹配出来。
这个符号在Linux中表示注释说明,即#后面的内容都会被忽略。用法如下:
# abc=123 #aaaa
# echo $abc
123
这个字符会将后面的特殊符号(如* )还原为普通字符。用法如下:
# ls -d test\*
ls:无法访问test*:没有那个文件或目录
这个字符前面曾多次出现过,它的作用是将前面命令的输出作为后面命令的输入。这里提到的后
面的命令,并不是所有的命令都可以的,一般针对文档操作的命令比较常用。
例如cat、less、head 、tail、grep、cut、sort、WC、uniq、tee、 tr、split、sed、 awk等,
其中grep、sed和awk是正则表达式
必须掌握的工具,在第11章中会详细介绍。管道符的用法如下:
# cat testb.txt |wc -1
0
格式:cut -d ‘分割字符‘ -cf n (n代表数字)
□ -d:后面接分割字符,分割字符要用单引号括起来
□ -c:后面接的是第几个字符
□ -f:后面接第几个区块
cut命令的用法如下:
# cat /etc/passwd|cut -d ‘:‘ -f 1 |head -5
root
bin
daemon
adm
lp
-d选项后面加冒号作为分隔字符,-f 1表示截取第- -段, - f和1之间的空格可有可无。
sort命令是用来排序的
格式:sort [-t 分隔符] [-kn1,n2] [-nru] n1和n2值得是数字
□ -t:后面跟分隔符
□ -n:表示使用纯数字排序
□ -r:表示反向排序
□ -kn1,n2:表示由n1区间排序到n2区间,可以只写-kn1,即对n1字段进行排序
如不加任何选项,则按照首字符向后按ASCII码值进行比较,升序输出
wc命令用于统计文档的行数、字符数和词数。
常用选项:-l(统计行数),-m(统计字符数),-w(统计词数)
uniq命令用来删除重复的行。
该命令只有-c选项比较常用,它表示统计重复的行数,并把行数写在前面。
(使用uniq前,必须给文件排序‘sort’,否则不管用)
tee命令后面跟文件名,其作用类似于重定向>,但它比重定向多一个功能,即把文件写人后面所
跟的文件时,还显示在屏幕上。该命令常用于管道符|后。示例命令如下:
# echo " aaaaaaaaaaaaaaaaaaaaa"I tee testb.txt
aaaaaaaaaaaaaaaaaaaaaaaaa
# cat testb. txt
aaaaaaaaaaaaaaaaaaaaaaaaa
tr命令是用来替换字符的
□ -d:表示删除某个字符,后面要跟删除的字符
□ -s:表示删除重复的字符
例如:把/etc/passwd头两行小写换成大写字母
#head -n2 /etc/passwd |tr ‘[a-z]‘ ‘[A-Z]‘
split命令用于切割文档,常用-b和-l
□ -b:表示依据大小来分割文档,单位byte
#split -b 500 文件名
□ -l:表示依据行数分割文档
#split -l 10 文件名
符号$可以用作变量前面的标识符,还可以和!结合起来使用。
通常,我们都是在一-行中输入- -个命令,然后回车就运行了。
如果想在一行中运行两个或两个以上的命令,需要在命令之间加符号;。
符号~表示用户的家目录,root用户的家目录是/root,普通用户则是/home/username。
如果想把一条命令放到后台执行,则需要加上符号&,它通常用于命令运行时间较长的情况。比
如,可以用在sleep后,如下所示:
# sleep 30 &
[1] 3808
# jobs
[1]+ 运行中 sleep 30 &
代表错误重定向和错误追加重定向
中括号内为字符组合,代表字符组合中的任意-一个,可以是-一个范围(1-3,a-z)
举例说明两方的区别
□ command1 ; command2
□ command1 && command2
□ command1 || command2
使用;时,不管command1是否执行成功,都会执行command2。
使用&&时,只有command1执行成功后,command2才会执行,否则command2不执行。
使用||时,command1执行成功后 则command2不执行,否则执行command2 ,
即command1 和command2中总有一条命令会执行。
原文:https://www.cnblogs.com/wft9/p/12186036.html