Linux中的shell与shell命令.docx
《Linux中的shell与shell命令.docx》由会员分享,可在线阅读,更多相关《Linux中的shell与shell命令.docx(40页珍藏版)》请在冰豆网上搜索。
Linux中的shell与shell命令
shell与shell命令
本章主要内容:
shell基本功能及种类
shell基本概念
I/O重定向与管道
shell的启动
基本shell命令
3.1shell基本功能与基本概念
3.1.1shell基本功能
shell是用户和Linux内核之间的接口程序。
shell是一个命令语言解释器,它拥有自己内建的shell命令集,shell也能被系统中其他应用程序所调用。
shell一个解释型的程序设计语言,shell程序设计语言支持绝大多数在高级语言中能见到的程序元素,如函数、变量、数组和程序控制结构
shell具有以下基本功能:
1.命令解释执行2.文件名替换.3.输入输出重定向4.连通管道建立5.系统环境设置6.shell编程
3.1.2字符与保留字
1.字符
(1)白空格
(2)通配符
*:
代表从它所在位置开始的任何字符串。
?
:
代表它所在位置上的任何单个字符。
[]:
代表一个指定范围的字符。
方括号中的字符范围可以由直接给出的字符组成,也可以由表示限定范围的起始字符、终止字符及中间的连字符“-”组成。
通配符
模式串
意义
*
当前目录下所有文件名,但不包括.开头的文件。
例如abc但不是.abc
*Text*
当前目录下所有文件名中包含有Text的文件名,但不包括.开头的文件
[ab-dm]*
当前目录下所有以a、b、c、d、m开头的文件名
[ab-dm]?
当前目录下所有以a、b、c、d、m开头且后面只跟有一个字符的文件名
[!
ab-dm]?
或[^ab-dm]?
当前目录下所有不以a、b、c、d、m开头且后面只跟有一个字符的文件名
/dev/hd?
目录/dev下所有以hd开头且只有三个字符的文件名
(3)注释符与注释
在shell命令或shell编程中从字符“#”开始以后到行末的部分作为注释,因此以“#”开头的行是注释行。
(4)转义字符
转义字符
所代表的意义
转义字符
所代表的意义
\a
响铃符
\t
Tab键
\b
退格键
\v
垂直制表符
\f
换页
\\
\
\n
换行
\0?
?
?
8进制表示
\x?
?
16进制表示
\’
’
\`
`
\”
”
(5)Linux系统的特殊键
特殊键
意义
Ctrl+D
结束当前程序输入或终止当前程序或从系统中注销
Ctrl+C
终止当前程序的执行
Ctrl+\
终止当前程序的执行(系统内部处理时不同于Ctrl+C)
Ctrl+Z
挂起当前程序执行,将推到后台
Ctrl+S/Ctrl+Q
暂停/继续屏幕的输出,必须配合使用
ScrollLock
暂停/继续屏幕的输出,开关键
Ctrl+Alt+Del
默认动作为重启系统
Alt+F#
字符终端切换。
比如Alt+F2将终端切换至F2
Ctrl+Alt+F#
从图形介面切换终端到字符终端。
比如Ctrl+Alt+F1从图形界面切换至F1
2.保留字
任何编程语言或系统都有一定数量的保留字,bashell的部分保留字如下:
!
,[,],(,),{,},break,continue,cd,echo,eval,exec,exit,export,function,getopts,hash,pwd,read,readonly,return,select,set,shift,test,time,trap,type,ulimit,unset,umask,wait,for,do,done,case,in,esac,if,else,elif,if,while,until
3.1.3文件命名及文件类型
1.文件与文件名
文件是被命名(称为文件名)的存储在某种介质(如磁盘、光盘和磁带等)上的一组信息的集合。
UNIX/Linux的文件均为无结构的字符流形式。
文件名是文件的一种标识,一般情况下,它由字母、数字、下划线和圆点组成的字符串来构成。
Linux支持长文件名,但要求文件名的长度限制在255个字符以内。
2.文件类型
UNIX/Linux系统中有三种基本的文件类型:
普通文件
目录文件
设备文件
3.1.4目录结构与路径
1.目录与目录结构
UNIX/Linux系统以文件目录的方式来组织和管理系统中的所有文件。
所谓文件目录就是将所有文件的说明信息采用树型结构组织起来——即目录。
UNIX/Linux系统中,整个文件系统有一个“根”(root),然后在根上分“杈”(directory),任何一个分杈上都可以再分杈,也可以长出“叶子”。
“根”和“杈”在Linux中被称为“目录”或“文件夹”,而“叶子”则是一个个的文件。
在UNIX/Linux系统中文件系统的根目录用符号“/”表示。
Linux是一个多用户系统,操作系统本身的程序或数据存放在以根目录开始的某些专用目录中,有时被指定为系统目录
2.工作目录、用户主目录与路径
自从用户登录到系统中之后,每时每刻都“处在”某个目录之中,此目录被称作工作目录或当前目录(WorkingDirectory)。
工作目录用“.”表示,且可以随时改变。
用户刚登录到系统中时,其工作目录便是该用户主目录。
root用户的主目录为/root,其它用户的主目录是在/home下的与登录名相同的目录。
路径是指从树型目录中的某个目录层次到某个文件或目录路线。
对任一文件在文件系统中的位置可以由相对路径或绝对路径来决定。
绝对路径是指从“根”开始的路径;相对路径是从用户工作目录开始的路径。
3.1.5shell命令解释及执行
命令格式如下:
命令名[选项][参数][…]
在Linux系统中默认的分隔符为白空格。
参数是Linux命令操作的对象,而选项则影响命令对对象的操作行为。
选项是由符号“-”引导的字符或字符串,“-”是必须的,Linux用它来区别选项和参数。
在Linux系统中选项有两种形式:
一种是传统UNIX风格的选项,以“-”开始,紧跟一个字符;另一种是GNU风格的选项,以“--”开始,紧跟着完整的英文单词或由“-”连接的单词组合,来说明选项的意义。
bash命令行具有命令和文件名扩展特性。
bash也能列出当前目录下部分匹配的文件名来完成文件名扩展。
bash还允许用户对正在输入的命令行进行编辑。
Linux的回车后命令也被保留在历史记录中,通过光标键“↑”和“↓”上下翻动历史记录,对出现的当前记录可以进行编辑和使用。
若用户要重新执行某条历史记录的命令可以使用格式:
!
记录编号
用户还可使用格式:
historyn
bash命令行编辑键
编辑键
意义
Ctrl+A
光标移至行首
Ctrl+E
光标移至行尾
Alt+F
光标前移至右一词末
Alt+B
光标后移至左一词前
Ctrl+L
清屏并在屏幕顶端重显当前行
Ctrl+-
恢复上一次的操作
Ctrl+K
删除光标处至行末内容
Ctrl+U
删除光标处至行首内容
Alt+D
删除光标处至单词末内容
Alt+DEL
删除光标处至单词首内容
Ctrl+W
删除光标处左一词至词首内容
Ctrl+Y
将刚删除的内容插入到光标处
3.1.6环境变量与变量
1.环境变量
shell在开始执行时就已经定义了一些和系统的工作环境有关的变量,用户还可以重新定义这些变量。
环境变量可用命令env来查询。
常用的shell环境变量有:
HOME:
根目录。
LOGNAME:
登录用户名。
IFS:
命令行内部域分割符:
空格,tab。
PATH:
命令搜索路径。
TERM:
终端的类型。
PWD:
当前工作目录的绝对路径名,该变量的取值随cd命令的使用而变化。
PS1:
主提示符,默认情况下,超级用户的主提示符是#,普通用户主提示符是$。
PS2:
辅助提示符,提示用户继续输入命令的其余部分,默认的辅助提示符是“>”
2.变量
在UNIX/Linux系统中,除了环境变量外,用户还可以定义自己的变量。
定义后的变量就像在其它程序设计语言里一样被引用。
变量引用时需要使用“$”作为变量名的前导字符。
变量的定义方法:
var_name=var_value
3.1.7标准流与输入输出重定向
当执行一个命令时,shell通常会自动为其打开三个标准文件,即标准输入文件、标准输出和标准错误。
文件号
描述符
使用设备
标准输入
0
stdin
键盘
标准输出
1
stdout
屏幕
标准错误
2
stderr
屏幕
I/O重定向(也称作改道)是指通过文件的形式实现I/O输入和输出。
I/O重定向可以通过以下符号实现:
◆<:
输入重定向。
◆>:
以覆盖方式实现输出重定向。
◆>>:
以追加方式实现输出的重定向。
◆&>:
标准输出和标准错误同时重定向。
3.1.8管道
◆管道机制是在两个或多个进程之间建立一种连接,使得前一个命令的输出作为后一个命令的输入。
◆管道机制常用于进程间的通信。
◆实现管道机制的符号是“|”,其方法为:
⏹命令1|命令2|…|命令n
◆有时候需要对某文件处理既要在屏幕上看到输出同时又要保存一个副本。
这时使用管道与tee命令配合来实现。
◆tee命令的功能是读取标准输入的数据,并将其内容输出到指定文件,其用法为:
tee[-ai][文件…]
⏹-a追加方式。
⏹-i忽略中断信号
3.1.9引号机制、命令替换与参数替换
1.引号机制
◆在shell中引号分为三种:
单引号(’),双引号(”)和反单引号(`)。
◆由单引号括起来的字符都作为普通字符。
◆反单引号的作用是命令替换。
◆命令替换的另一种形式是:
$(cmd)它的作用与`cmd`相同。
◆双引号的作用与单引号的功能基本一样,可用来定义变量,所不同的是在双引号内可进行变量和命令替换。
例:
#string=’$PATH’#定义string变量
#echo$string#显示变量的值
$PATH
#x=`pwd`#通过命令pwd替换定义变量x。
pwd的功能是显示用户工作目录
#y=`whoami`#通过命令whoami替换定义变量y。
whoami的功能是显示用户名
#echo$x$y#显示变量x和y的内容
/rootroot
#MyVar=$(whoami)#通过命令whoami替换定义变量MyVar
#echo$MyVar$(pwd)#显示变量MyVar和$(pwd)的值
root/root
#myname=`whoami`#通过命令替换定义变量myname
#定义变量myself。
注意使用了变量替换和命令替换
#myself=”Iamastudentmyunameis$mynameandmyworkdiris`pwd`.”
#定义变量myself1。
注意使用了继续行和转义字符
#myself1=”Iamastudentmyunameis\”$myname\”\
andmyworkdiris\”`pwd`\”.”
#echo$myself
Iamastudentmynameisrootandmyworkdiris/root.
#echomyself1
Iamastudentmyunameis“root”andmyworkdiris“/root”.
2.参数替换
参数替换主要是指命令行参数的替换。
在执行命令时,它的命令行参数也可以是变量,也可以包括命令替换。
设有命令DispAllVar用于显示所有的命令行参数,有变量x其值为testparm,则命令
DispAllVarIam`whoami`thevalueofxis$x的输出为:
Iamrootthevalueofxistestparm
在程序的执行过程中`whoami`被替换为root,变量x的值被替换为其值testparm。
shell种类
UNIX/Linux中的shell有多种类型,其中最常用的几种是Bourneshell(sh或bsh)、Bourneagainshell(bash),Cshell(csh)、tcshell(tcsh)、Kornshell(ksh)和Zshell(zsh)等。
3.2shell启动
3.3Linux系统的基本命令
3.3.1目录基本操作命令
1.列目录内容(ls)
其用法为:
ls[选项]…[文件]…
例:
1)列出目前工作目录下所有名称是s开头的文件,按修改时间倒排序
#ls-ltrs*
2)递归列/bin目录及其子目录
#ls-lR/bin
3)列当前目录,在目录名后加/,可执行文件名后加*
#ls–AF
选项
意义
-a
列所有文件及目录(Linux规定以点“.”开头为隐藏文件,默认情况下不会列出)
-A
同-a,但不列出.和..
-b
以八进制数字方式列不可显示的文件
-i
列目录时显示i节点信息
-l
长格式列表
-F
短格式列表,文件名称后加一符号表示属性:
可执行文件加*.目录/
-r
将文件以相反排序方式列出(默认按文件名ASCII码值排序)
-R
递归列目录及其子目录
-t
按文件依修改时间排序
-U
以不排列方式列目录
2.建立子目录(mkdir)
用法:
mkdir[-p][-mMODE]dirnames
-p:
如果要创建的目录存在也不报错,必要时可一同创建父目录。
-m,--mode=MODE:
按照权限MODE创建子目录。
例:
1)在工作目录下,建立一个名为temp的子目录
#mkdirtemp
2)一次创建多个目录
#mkdirtemp2temp3temp4
3)在子目录temp下创建子目录child,若父目录不存在,则一同创建之
#mkdir–ptemp5/child
3.目录删除(rmdir)
用法为:
rmdir[-p]dirName
例:
删除子目录temp,若非空则报错
#rmdirtemp
4.改变工作目录(cd).
用法为:
cd[dirName]
例:
#cd/tmp#切换到目录/tmp
#cd/usr/bin#切换到目录/usr/bin
#cd..#切换到上级目录
#cd#切换到家目录$HOME
5.显示当前目录(pwd)
用法为:
pwd
3.3.2文件操作基本命令
1.显示文件的内容或合并文件(cat)
其用法为:
cat[-options]filenames
选项
意义
-E
在行显示$符号
-n
为所有行添加行号
-s
当有一个或多个空行时只显示一个
-T
将Tab建显示为^I(Ctrl+I)
-v
显示所有内容
显示文件的内容或合并文件(cat)
例:
1)显示文件test.txt的内容
#cattest.txt
2)显示文件test.txt的内容,并为所有行添加行号
#cat-ntest.txt
3)显示所有的*.txt文件
#cat*.txt
4)将文件test1.txt和test2.txt合并为test.txt
#cattest1.txttest2.txt>test.txt
5)从键盘读入内容并将其保存到文件myfile
#cat>myfile
2.文本编辑命令(vi)
vi有三种工作模式:
命令模式、编辑模式和命令项模式。
◆命令模式:
当进入vi时,它处在命令模式。
在这种模式下,用户可通过vi的命令对文件的内容进行处理,比如删除、移动、复制等;也可通过命令进入编辑模式。
◆编辑模式:
用户可在命令模式下通过o,O,a,A,I,I等命令使vi进入编辑模式。
在编辑模式下,用户能在光标处输入内容,或通过光标键移动光标。
也可通过按ESC键返回命令模式。
◆命令项模式或叫底行模式:
也是命令模式的一种,在命令模式下用户输入冒号后光标会跳到底行,输入相关命令后可完成指定操作。
使用方式:
vi[-options]files
vi的命令选项
选项
功能描述
+[#]
进入vi后光标直接定位到第#行,若不指定#,则光标定位到文件尾
-r/-L
列出当前目录内所有因vi非正常退出而残留的交换文件,以使恢复
-R<.#.swp>
以交换文件.#.swp中恢复文件
-rfile
从vicrash或非正常退出中恢复文件
-R
以只读方式编辑文件,使用此参数时,被编辑的文件不能回存,但可以另存
vi启动的常用方法
命令
功能描述
命令
功能描述
vifile
从第一行开始
vi+#file
从第#行开始
vi+file
从文件尾开始
vi+/patternfile
从指定的模式匹配处开始
vi–rfile
从瘫痪恢复
vi–L/-r
从瘫痪中列恢复列表
vi的插入模式功能键
键或命令
功能描述
键或命令
功能描述
i
光标处插入
I
行首插入
a
光标后追加
A
行末追加
o
当前行下面插入新行
O
当前行上面插入新行
vi的删除命令
命令
功能描述
命令
功能描述
x
删除光标处的字符
X
删除光标前的字符
d0
从光标处删除到行首
dw
删除光标后的下个word
#d
删除(含)光标所在后的#行
#x
删除光标所在处的#个字符
vi的修改与替换命令
命令
功能描述
命令
功能描述
R/cc
替换/修改一整行
cw
修改一个字
C
修改光标后的部分
s
替换光标处的字符
S
替换光标所在的行
r
替换当前一个字符
R
从当前字符开始替换
vi的搜索与定位命令
命令
功能描述
命令
功能描述
O
定位行首
$
定位行末
:
#
定位到#行
:
$
定位到文件尾
/exp
后向定位到exp
?
exp
前向定位到exp
/^exp
定位到行首为exp的行
/exp$
定位到行末为exp的行
n,m?
|/exp
在n-m行前/后向搜索exp
n
重复以前定位,即继续查找
vi的搜索与替换命令
命令
功能描述
:
s/exp1/exp2/g
将当前行的exp1替换成exp2
:
n,ms/exp1/exp2/g
将从n到m行中的exp1替换为exp2
:
n,mg/exp1/s/exp2/g
将从n到m行中的exp1替换为exp2
:
g/exp1/s//exp2/g
将全文中的exp1替换为exp2
vi的文件内容的移动、复制、删除和保存
命令
功能描述
:
n1,n2d
删除n1-n2行的内容
:
n1,n2w[!
][file]
将n1-n2行内容写入文件file
:
n1,n2tn3
将n1-n2行内容复制到n3
:
n1,n2mn3
将n1-n2行内容移动到n3
说明:
在表示行号和范围有以下规定
.
当前行
%
1,$
vi的缓冲区使用命令
命令
功能描述
Y/yy
将当前行放入无名缓冲区
P/p
将缓冲区中的内容粘贴当前行的上/下一行
”cyy
将当前行放入缓冲区c
”cd
将当前行删除,内容放入缓冲区c
cP/cp
将缓冲区c中的内容粘贴到当前行的上/下一行
vi的退出
命令
功能描述
:
w
保存文件,但不退出
:
x
保存文件,且推出vi
:
q
退出(若文件已更改,则不能退出)
:
q!
不保存退出
:
zz
保存文件且退出vi
:
wq
保存退出
:
wq!
保存退出
:
w>>file
将现行文件的内容,追加到文件file
:
wfile
将现行文件的内容,写入file
:
w!
file
将现行文件的内容,写入已存在的file
3.分屏显示文件内容(more)
用法为:
more[-dflpcsu]-lines[+linenum|+/pattern]filenames
参数
意义
+/pattern
从第一个正规表达式pattern处开始显示
+linenum
从第linenum行开始显示
-lines
指定满屏行数为lines,默认时为24行
-d
屏幕底端的提示行改为:
--more—(##%)[Hitspacetocontinue,rubouttoabort]。
-I
模式匹配时忽略大小写
-l
忽略^L(换页)。
默认时遇到^L时会暂停
-s
压缩多个空行为一行
more命令的屏幕操作命令
命令
功能
命令
功能
Q/q/^C
退出
!
cmd
执行shell命令
=
显示当前行行号
:
n
下一文件
#d/#b
向前/后滖动#行
:
p
上一文件
空格
向前翻一屏
:
f
显示当前文件名和行号行号
回车
向前翻一行
^L
重显本屏内容
?
/h
帮助
.
重复上一命令
4.使用less命令浏览文件
▪less命令和more命令一样都是分页处理命令,但是less命令的功能比more命令更强大。
less命令提供了许多比more命令优秀的功能:
▪可以使用光标键在文本文件中前后滚屏。
▪可以用行号或百分比作为书签来浏览文件。
▪可以实现在多个文件中进行复杂的检索、模式匹配、高亮度显示等操作。
▪键盘操作与字处理程序如vi兼容。
▪阅读到文件结束或者标准输入结束的时候less命令不会退出。
▪屏幕底部的信息提示更容易控制使用,而且提供了更多的信息。
▪带有许多的附件,包括一个独立的键定义程序lesskey,这样就可以定义和使用键来控制less命令。
5.修改文件存取时间或创建空文件(touch)
用法为:
touch[-acm][-rref_file][-t[[CC]YYMMDDhhmm[.ss]]file…
touch[-acm][-tMMDD[yy]files…
例:
1)将文件的修改时间改为当前时间,若不存在则创建之
#touchmyfile
2)修改文件的存取时间
#touch–a–tmyfileyourfile
3)修改文件的修改时间
#touch–m–tmyfile
#touch–m–d”Feb2200618:
20”/tmp/tmpf
Touch
选项
功能描述
-a
改变文件的访问时间
-m
改变文件的修改时间
-c
假如目的文件不存在,禁止创建新文件
-ddatestr
设定日期。
-ttimestamp
设定文件日期和时间记录。
6.删除文件(rm)
使用方式为:
rm[options]file...
选项
功能描述
-I
删除前逐一询问确认(此为默认选项)。
-f
强迫删除,删除时不进行提示
-r/-R
递归删除。
删除目录连同其子目录一起删除
--
删除以-开头的文件
删除文件(rm)
例:
1)删除文件
#rmmyfilehisfile#交互式删除,删除前需要用户确认
2)删除文件和目录
#rm-r-fmyf.cmydir#同时删除文件和目录
3)删除具有特殊名字的文件
#rm---xyz#删除-xyz文件
#rm\*\\#删除名字为*和\的文件名
选项
功能描述
-b
若需覆盖,则在覆盖前备份。
行为受-S和-V参数影响,默认时在被覆盖的文件名后追加~
-f
参见rm
-I
参见rm
-u
若