zzzyuan

导航

shell基础

Shell基础知识

shell

shell 是系统跟计算机硬件交互时使用的中间介质,他只是系统的一个工具。

记录命令历史

执行过的命令会保存在用户的家目录的.bash_history 文件中。但 只有当用户正常退出当前shell 时,在当前shell 中运行的命令才会保存至.bash_hitory 文件中。

!是与命令历史有关的一个特殊字符,该字符常用的应用有以下3个。

l  !!:连续两个!表示执行上一条指令。

# pwd

/root

# !!

pwd

/root

l  !n:这里的n是数字,表示执行命令历史中的第n条指令。

# history |grep 10

# !10

#mkdir -p /data/mysql

l  !字符串(字符串大于等于1)例如pw 表示执行命令历史中最近一次以pw开头的命令

# !pw

pwd

/root

命令和文件名补全

别名

alias,他是bash所特有的功能之一。可以通过alias 把一个常用的并且很长的指令取名为一个简单易记的指令,如果不想用了就可以使用unalias命令提出别名功能。

 

也可以自定义命令的别名,格式为alias[命令别名]=[‘具体的命令’]

 

通配符

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

# ls –d /tmp/4_6/test*

/tmp/4_6/test1  /tmp/4_6/test4  /tmp/4_6/test5

#touch /tmp/4_6/test111

#ls –d /tmp/4_6/test?

/tmp/4_6/test1  /tmp/4_6/test4  /tmp/4_6/test5

输入/输出重定向

输入重定向用于改变命令的输入,输出重定向用于改变命令的输出。

输入重定向是< ,输出重定向是>。

错误重定向2>,追加重定向>>。

# mkdir /tmp/10

# cd /tmp/10

# echo "123" > 1.txt

# echo "123" >> 1.txt

 

管道符

用于将前一个指定的输出作为后一个指令的输入

# cat /etc/passwd|wc –l

作业控制

当运行进程时,可以使用它暂停(Ctrl+Z组合键),然后使用fg (foreground的简写)命令恢复他,或是利用bg(background)命令使他到后台运行。此外,也可以使用(ctrl+c)终止。

# vi test1.txt

Testteststststst  //随意编辑一些内容

//ctrl+z暂停任务

fg 命令恢复,又进入编辑窗口。再次暂停,然后输入jobs可以看到被暂停或者在后台运行的任务。

 

如果想把暂停的任务放在后台重新运行,就使用bg

但是vi并不支持在后台运行,那就换个其他命令。

// ^z处按ctrl+z

多个被暂停的任务会有编号

如何关掉在后台运行的任务。如果没有退出刚才的shell ,那么应该先使用命令fg编号把任务调到前台,然后按ctrl+c结束任务

//^c处按ctrl+c

另一种情况则是,关闭当前的shell,再次打开另一个shell时,使用jobs命令并不会显示在后台运行后者被暂停的任务。要想关闭这些任务,则需要先知道他们的pid。

 

使用&把任务放到后台运行时,会显示pid信息。如果忘记这个pid,还可以使用ps aux命令找到那个进程。如果想结束该进程,需要使用kill

kill [pid]

如果遇到结束不了的进程,可以再kill 后面加一个选项。

kill -9 [pid]

 

变量

 

环境变量PATH,它是shell预设的一个变量。通常shell预设的变量都是大写。变量就是使用一个较简单的字符串来代替某些具有特殊意义的设定以及数据。

命令env

可以列出系统预设的全部系统变量。

常见的环境变量

HOSTNAME:表示主机的名称

SHELL:表示当前用户的shell类型

HISTSIZE:表示历史记录数

MAIL:表示当前用户的邮件存放目录

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

PWD:表示当前目录

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

HOME:表示当前用户的家目录

LOGNAME:表示当前用户的登录名

env命令现实的变量只是环境变量。

Set

和env相似,也可以输出环境变量

set不仅可以显示系统预设的变量,也可以显示用户自定义的变量。

 

虽然可以自定义变量,但是该变量只能在当前shell中生效。

 

bash命令可以再打开一个shell,此时先前设置的myname已经不存在了,退出当前shell回到原来的shell,myname变量还在。

如果想让设置的环境变量一直生效。

²  允许系统内所有用户登录后都能使用该变量。

在/etc/profile文件的最后一行加入export myname=zy,然后运行source /etc/profile就可以生效了。此时在运行bash或者切换到其他用户就可以看到效果。

 

²  仅允许当前用户使用该变量

在用户主目录下的.bashrc文件的最后一行加入export myname=zy,然后运行source  .bashrc就可以生效了。这是再登录test账户,myname变量则不会生效了。这里的source命令的作用是将目前设定的配置刷新,即不用注销再登录也能生效。

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

²  变量名只能是由字母、数字、下划线组成且不能以数字开头。

²  当变量内容带有特殊字符(如空格)时,需要加上单引号

 

变量内容中本身带有单引号,这时就要加双引号了。

 

如果变量中需要用到其他命令,运行结果则可以使用反引号

 

变量内容可以累加其他变量的内容,但需要加双引号。

 

如果不小心把双引号错加为单引号,则得不到想要的结果。

 

系统环境变量与个人环境变量的配置文件

/etc/profile :这个文件预设了几个重要的变量如PATH,USER,LOGNAME,MATL,INPUTRC,HOSTNAME,HISTSIZE,umask等。

/etc/bashrc:这个文件主要预设umask以及PS1.PS1就是我们输入命令时前面的那串字符。

 

/u指用户,/h指主机名,/W指当前目录,/$指字符#(如果是普通用户,则显示为$)

.bash_profile:该文件定义了用户的个人化路径与环境变量的文件名称。

.bashrc:该文件包含专属于自己的shell的bash信息,当登录或每次打开新的shell时,该文件会被读取。

.bash_history:用于记录命令历史

.bash_logout:当退出shell时,会执行该文件。

Linux  shell 中的特殊符号

*代表另个或多个任意字符

?只代表一个任意的字符

#注释符号:表注释说明,即#后面的内容都会被忽略

\脱义字符:会将后边的特殊符号(如*)还原为普通字符。

|管道符:将前面饿的命令的输出作为后面命令的输入。

²  命令cut:用来截取某一个字段,其格式为cut  -d  ‘分隔字符’[-cf]n,这里的n是数字。

-d:后面跟分隔字符,分隔字符要用单引号括起来

-c:后面接的是第几个字符。

-f:后面借的是第几个区块。

cut命令用法:

 

-d后面加冒号作为分隔字符,-f 1表示截取第一段,-f和1之间的空格可有可无。

 

-c选项后面可以是1个数字n,也可以是一个区间n1-n2,还可以是多个数字n1、n2和n3

 

命令sort

用作排序,格式:sort  [-t 分隔符] [-kn1,n2] [-nru],n1和n2指的是数字。

-t:后面跟分隔字符,作用和cut的-d选项一样。

-n:表示使用纯数字排序。

-r:表示反向排序。

-u:表示去重复

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

如果sort不加任何选项,则从首字符向后一次按ASCLL码值进行比较最后将他们按升序输出。

 

命令wc

wc 用于统计文档的行数、字符数或词数。

-l(统计行数)

-m(统计字符数)

-W(统计词数)

 

命令uniq

用来删除重复的行,该宁陵只有-c常用,表示统计重复的行数,并把行数写在前面

# vi testb.txt

111

222

111

333 //写入文件并保存

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

# uniq testb.txt

111

222

111

333

# sort testb.txt |uniq

111

222

333

# sort testb.txt |uniq -c

2 111

1 222

1 333

命令tee

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

 

命令tr

用于替换字符,常用于处理文档中出现的特殊符号。

-d:表示删除某个字符 后面跟要删除的字符

-s:表示删除重复的字符

tr命令常用于把小写字母变成大写字母,如tr ‘[a-z]’ ‘[A-Z]’

 

tr 命令还可以替换一个字符

 

命令split

用于切割文档

-b:依据大小来分割文档,单位为byte

 

如果split不指定目标文件名,则会以xaa、xab…这样的文件名来存取切割后的文件。

我们也可以指定目标文件名。

 

-l:依据行数来分割文档

 

特殊符号$

可以用作变量前面的标识符,还可以和!结合起来使用

 

特殊符号;

如果想在一行中运行两个或两个以上的命令,需要在命令之间加符号;

 

特殊符号~

~表示用户的家目录,root用户的家目录是/root,普通用户则是/homt/username

特殊符号&

如果想把一个命令放到后台执行,则需要加上符号&,常用于命令运行时间较长的情况,比如可以用在sleep后

 

重定向符号>、>>、2>和2>>

>取代

>>追加

2>错误重定向

2>>错误追加重定向

 

中括号[]

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

特殊符号&&和||

间隔符,用于多条命令中间的特殊符号

²  command ; command2

²  command && command2

²  command || command2

使用;时,不管command1是否执行成功,都会执行command2

使用&&时,只有command1执行成功后,command2才会执行,否则不执行

使用||时,command执行成功后则command2不执行,否则执行command2.即command1和command2中总有一条命令会执行

 

只有当ls test2成功执行后,才会执行touch test2,因为test2不存在,ls test2没有执行成功,所以&&后面的touch test2并没有执行

 

若ls test2执行不成功,则会执行touch  test2.因为test2不存在,所以ls test2没有执行成功,转而执行||后面的touch test2,所以增加了test2这个文件。

posted on 2020-01-17 10:40  思远道  阅读(137)  评论(0编辑  收藏  举报