目录
一、Shell命令概述
1.Shell 简介
Shell是Linux的一个特殊程序,也是内核与用户的接口,它还是命令语言、命令解释程序及程序设计语言的统称。Shell是一个命令语言解释器,它拥有内置的Shell命令集,Shell也被系统中其他应用程序所调用。
2.常用的Shell命令
1.目录的创建与删除命令
(1)mkdir命令
格式:mkdir [选项] 目录
功能:创建目录
-m :创建目录的同时设置目录访问权限
- p : 一次性创建多级项目
(2)mkdir命令
格式:mkdir [选项] 目录
功能:从一个目录中删除一个或多个子项目,要求目录在被删除之前必须为空
- p : 递归删除目录,当子目录被删除后其父目录为空时,也一同被删除
2.改变工作目录命令cd
格式:cd [目录]
功能:将当前目录改为指定目录。若没有指定目录,则返回到用户的主目录,也可以使用“cd..” 返回到系统上一级目录。该命令可以使用通配符。
3.显示路径的命令
格式:pwd
功能:显示当前目录的绝对路径
4.显示目录内容命令ls
格式:ls 【选项】 【文件】【目录】
功能:显示指定目录中的文件和子目录信息。当不指定目录时,显示当前目录下的文件和子目录信息。
-a:显示所有文件和子目录(包含隐藏文件和隐藏子目录)。RHEL中的隐藏文件和隐藏子目录以”.“开头。
-l:显示文件和目录的详细信息,如文件类型、权限、所有者和所属群组、文件大小、最后修改时间、文件名等。
-d:如果是参数目录,只显示目录信息,二不显示其中所包含文件的信息。
-t:按时间顺序显示。
-R:不仅显示指定目录下的文件和子目录信息,而且递归地显示各个子目录中地文件和子目录信息。
5.显示文件内容命令
(1)cat命令
格式:cat [选项] 文件名
功能:依次读取其后所指文件的内容并将内容输出到标准输出设备上。另外,该命令还能用来连接两个或多个文件,形成新的文件。
(2)more 命令
格式:mkdir [选项] 文件名
功能:分屏显示文件内容。
-p:显示下一屏之前先清屏
-s:将文件中连续的空白行压缩成一个空白行显示
(3)less 命令
相似于more但能查看二进制文件
(4)head命令
格式:head [选项] 文件名
功能:显示文件的前几行内容
-n:指定显示文件的前n行,如果没有给出n值,默认设置为10。
(5)tail 命令
格式:tail [选项] 文件名
功能:将一个文件从指定位置到文件结束处的内容显示在标准输出上
+n:从n行以后开始显示
-n:从距文件尾n行处开始显示。如果省略n,系统默认值为10。
6.文件内容查询命令grep(老师没讲,我不想记了)
7.文件查找命令find
8.文件内容统计命令
9.文件的复制、移动和删除命令
(1)cp命令
格式:cp [选项] 源文件或源目录目标文件或目标目录
功能:将给出的文件或目录复制到另一个文件或目录中
-b:若存在同名文件,覆盖前备份原来的文件。
-f:强制覆盖同名文件
-r或-R:按递归方式,保留原目录结构复制文件。
(2)mv 命令
格式:mv [选项] 源文件或源目录目标文件或目标目录
功能:移动或重命名文件/目录
-b:若存在同名文件,覆盖前备份原来的文件
-f:强制覆盖同名文件
(3)rm命令
格式:rm [选项] 文件或目录
功能:删除文件或目录
-f:强制删除,不出现确认信息
-r或-R:按递归方式删除目录,默认只删除文件
10.查看手册命令man
格式:man 命令名
功能:显示指定命令的手册页帮助信息
11.清屏命令clear
格式:clear
功能:清楚当前终端屏幕内容
二、BASH的应用
1.自动补齐命令
在用户输入命令时,只需要输入命令的开头字母,然后连续按两次Tab键
2.自动补齐文件名或目录名
输入字母“t”后按tab键
3.命令历史记录histsize
(1)
格式:history 【n】
功能:查看Shell命令历史记录
(2)
格式:history 【r】【w】【a】【n】【文件名】
功能:修改命令历史记录列表文件内容
-r:读出命名历史记记录列表文件的内容,并将他们当作当前的命令历史记录列表
-w:将当前命令历史记录写入文件,并覆盖文件原来内容。
-a:将当前命令历史记录追加到文件尾部
-n 【文件名】:读取文件中的内容,并加入当前命令历史记录列表中。如果没有指定文件名,history命令将用变量hisfile的值来代替。
4.命令别名
格式:alias 【别名=‘标准shell命令行’】
功能:查看和设置别名
设置别名命令 pd ,其功能时打开/ect/passwd文件。
[root@localhost ~]# alias pd='vim /etc/passwd'
[root@localhost ~]# pd
5.通配符
三、正则表达式、管道与重定向
四、文本编辑器Vim
Vim(Visual Interface Improved)是RHEL系统上的全屏幕交互式文本编辑器。它可以执行输出、删除、查找、替换、块操作等众多文本操作,而且用户可以根据自己的需要对其进行定制。Vim不是一款排版软件,它不像Microspft Word 或WPS那样可以对字体、格式、段落等进行编排,它只是一款文本编辑软件。
1.Vim的三种模式
- 命令模式
- 插入模式
- 末行模式
2.Vim的进入与退出
进入:
- vim:鼠标光标第一行第一列
- vim file1:如果不存在,则建立此文件;如果存在则将其复制到临时缓冲区,鼠标光标第一行第一列
- vim+file1:如果不存在,则建立此文件;如果存在则将其复制到临时缓冲区,鼠标光标在最后一行第一列
- vim+#file1(#为数字):如果不存在,则建立此文件;如果存在则将其复制到临时缓冲区,鼠标光标在第#行第一列
- vim+/string file:如果不存在,则建立此文件;如果存在则将其复制到临时缓冲区,鼠标光标在第一次出现字符串string的首行位置上
- vim-r filename:如果在上次正使用Vim进行编辑时发生系统崩溃,则可以使用该命令恢复filename文件
- vim filename1 filename2....filename n:打开多个文件,依次进行编辑。
退出:在退出Vim前,先按Esc键,以确保当前Vim的工作模式为命令模式,然后输入Vim。
- :w: 保存命令
- :q: 退出Vim。
- :wq: 存盘退出。
- :w filename: 指定文件另存为filename。
- :x和ZZ:功能与: wq等价,注意,ZZ前没有“:”,且要大写。
- :q!或:quit: 放弃刚才编辑的内容,强行退出Vim。
3.Vim的基本操作命令
1.移动光标命令
h:将光标左移一个字符
l:将光标右移一个字符
j:将光标移动到下一行当前列
k:将光标移动到上一行当前列
2.添加文本命令
i:在光标当前位置插入文本
a:在光标当前位置前面开始添加文本
I:在光标所在行的行首插入文本
A :在光标所在行的行末插入文本
o:在光标所在行的下面插入一个空行
O:在光标所在行的上面插入一个空行
3.删除文本命令
利用Vim 提供的删除命令,用户可以删除一个或多个字符,还可以删除一个字或一行的部分或全部内容。常用的删除命令如下。
s : 删除光标后的一个字符,然后进入插入模式。
S : 删除光标所在的行,然后进入插入模莫式。
x : 删除光标所在位置的字符。
X:删除光标前的一个字符。
#x:删除#个字符,#表示数字。例如,4x表示删除从当前光标开始的4个字符。
d$:删除从当前光标位置至行尾的内容。
do:删除从当前光标位置至行首的内容。
dd:删除光标所在的当前一行。
#dd:删除#行。例如,4dd表示删除光标所在行,以及光标下面的3行。
dw:删除一个字。
#dw:删除#个单词。例如,3dw表示删除包含光标所在单词的3个连续单词,不包含空格。
Ctrl+u:删除插入模式下所输人的文本。
J:清除光标所处的行与上一行之间的空格,把光标行和上一行接在一起。
4.文本替换命令
替换文本是用新输入的内容替换原文档中的内容。在命令模式下和末行模式下都可以执行文本替换操作。
在命令模式下的Vim中,替换的命令又可以分为取代命令、替换命令和字替换命令。
(1)取代命令
r:用即将输人的一个字符代替当前光标处的字符。
#r:用即将输入的字符取代从当前光标处开始的#个字符。例如,3rS是将当前光标处的字符及其后 的两个字符都取代为"S"。
(2)替换命令
s:用即将输入的文本替换当前光标处的字符。如果只输人一个新字符,s命令与r命令功能
类似,但r命令仅完成替换,s命令在完成替换的同时,工作模式从命令模式转为插入模式。
#s:用即将输人的文本替换从光标所在字符开始的#个字符。例如,3sA命令将从当前光标开始的3个字符替换为一个字符"A"。
(3)字替换命令
cw:替换当前光标所在的字。例如在命令模式下输人cw,接着输入hello,则原先光标处的字被"hello"替换掉。该命令等同于ce命令。
使用末行模式下的替换命令时,要先输入“:”,确保切换到末行模式。末行模式下的替换命
到插人 令格式为:
[range]s/pattern/string/[选项]
常用选项说明如下。
c:每次替换前都要进行询问,要求用户确认。
e:不显示错误。
g:对指定范围内的字符完成替换,替换时不进行询问。
i:替换时不区分大小写。
示例如下所示。
:s/a/b:将当前行中所有a均用b替换
:12,23s/a/b/c;将第 12~23 行中所有a均用b替换,替换前要求用户确认。
ts/a/b/g;将文件中所有a均用b替换。
5. 复制和粘贴命令
#yw:复制从当前字开始的#个字到缓冲区。
yy:复制光标所在行到缓冲区。
#yy:制包含光标所在行的#行数据到缓冲区。例如,3yy示将该行及下面
两行文字复制到缓冲区。
p:将缓冲区的内容粘贴到当前光标右侧,如果缓冲区内容为一行,则复制到光标下面一行。
P:将缓冲区的内容粘贴到当前光标左侧,如果缓冲区内容为一行,则复制到光标上面一行。所有与“”制命需要与p”或“P”命令组合使用才能完成复制与粘贴功能
6.查找和替换命令
pattern:光标开始处向文件尾搜索
pattern,若遇到文件尾,则从头再开始。
?pattern:从光标开始处向文件首搜索 pattem,若遇到文件首,则从文件尾再开始。
/pattern/+#:将光标停在包含pattern的行后面第#行上。
/pattern/-#:将光标停在包含pattern的行前面第#行上。
n:按原搜索方向重复上一次搜索命令。
N:相反向重上一次索命令。
7.重复命令
重复命令也是一个经常用到的命令。在文本编辑中经常会需要重复一些操作,这时就需要用到重复命令,它可以让用户方便地再执行一次前面的命令。重复命令只能在Vim 的命令模式下使用,在该模式下按“”键即可。执行一个重复命令时,其操作结果是针对光标当前位置进行的。
8. 取消命令
取消命令用于取消前一次的误操作,使操作恢复到这种误操作被执行之前的状态。
取消上一个命令有两种形式,在命令模式下输入字符u和U,它们的功能都是取消刚才输的命令,恢复到原来的状态。大写U命令的功能是恢复到误操作命令前的状态,即如果插入命后使用U命令,就删除刚刚插入的内容;如果删除命令后使用U命令,就相当于在光标处又插刚刚删除的内容。
4.Vim 的高级命令
1.多文件编辑命令
n:编辑下一个文件。
:2n:编辑下两个文件。:N:编辑前一个文件。
:ls:列出目前 Vim 中打开的所有文件。
:f:显示当前正在编辑文件的文件名、是否被修改过,以及光标目前的位置。该命令等同于按 Ctrl+G组合键。
:e filename:在Vim中打开当前目录下的另一个文件filename
:e!:重新装入当前文件,若当前文件有改动,则放弃以前的改动。
:e#:编辑前一个文件(此处#是一个字符)。该命令等同于:N命令或按 Ctrl+^组合键。
:e+filename:使用filename 激活 Vim,并从文件尾部开始编辑。
:e+number filename:使用 filename激活 Vim,并在第 number 行开始编辑。
:rfilename:读取filename文件,并将其内容添加到当前文件后。
:r!command:执行command文件,并将其输出加到当前文件后。
:ffilename:将当前文件重命名为filename。
2.在Vim 中运行Shell 命令
在使用Vim的过程中,用户可以在不退出 Vim的同时执行其他Shell命令,这时需要在末行模式下操作。
:sh:启动 Shell,从 sh 中返回可按 Exit 键或 Ctrl +D组合键。
:!command:执行命令 command
:!:重新执行上次的:!command命令。
在:! command 命令中,用户可以用“%”引用当前文件名,用“#”引用上一个编辑的文件,用“!”引用最近运行的一次命令。
3.块标记命令
在命令模式下,用户可以标记文本的某个区域,再使用d、yp等命令对标记的内容进行删除、复制或粘贴等操作。常用标记命令如下
按下v键后移动光标,光标所经过的地方就会被标记,再按一次v键,结束标记。
按下V键后标记整行,移动上、下方向键可标记多行,再按一次V键,结束标记
Ctrl+V组合键作为块标记命令,可纵向标记矩形区域,再按一次Ctrl+V组合键结束块标记。
4. Vim 环境设置命令
这里的Vim 环境是指 Vim 运行时的运行方式。在末行模式下,用户可以通过set命令进行 Vim环境设置。set 后面加选项名来进行该功能选项的设置,如果选项名前输人“no”,则表示关闭该选项。
常用的 Vim 环境设置命令如下。
:set all:列出所有选项设置的情况。
:set number:在编辑文件时显示每行的行号。该命令等同于 set nu命令。
:set nonumber:不显示文件的行号。
五、Shell编程
Shell脚本和编程语言很相似,也有变量和流程控制语句,但Shell脚本是解释执行的,不需要编译;Shell程序从脚本中一行一行读取并执行这些命令,相当于一个用户把脚本中的命令一行一行敲到Shell提示符下执行。
1. 分为编译型和解释性语言
2.Shell特点
- 简单性
- 可移植性
- 开发容易
但是,考虑到Shell脚本的命令限制和效率问题,下列情况一般不使用Shell
(1)资源密集型的任务,尤其在需要考虑效率时(比如排序、hash等)。
(2)需要处理大任务的数学操作,尤其是浮点运算、精确运算,或者复杂的算术运算(这种情况一般使用C++或FORTRAN来处理)。
(3)有跨平台(操作系统)移植需求(一般使用C或Java)。
(4)复杂的应用,在必须使用结构化编程的时候(需要变量的类型检查、函数原型等)。(5)影响系统全局性的关键任务应用。
(6)对于安全有很高要求的任务,比如需要一个健壮的系统来防止入侵、破解、恶意破坏等。(7)项目由连串的依赖的各个部分组成。(8)需要大规模的文件操作。(9)需要多维数组的支持。
(10)需要数据结构的支持,比如链表或数组等数据结构。(11)需要产生或操作图形化界面 GUI。(12)需要直接操作系统硬件。(13)需要I/O或Socket接口。
(14)需要使用库或者遗留下来的老代码接口。
(15)需要私人的、闭源的应用(但Shell脚本把代码就放在文本文件中,“全世界”都能看到)。如果用户的应用符合上边的任意一条,那么就考虑一下更强大的语言吧,比如 Perl、Tcl、Python、Ruby,或更高层次的编译语言,比如C/C++、Java。