学习笔记,内容基础,适合初学者。
阅读之前,请务必花30秒查看前言说明(在第一、二章前面部分)
《Unix & Linux 大学教程》 - 第一、二章 学习笔记 Unix简介 & 什么是Linux?什么是Unix
《Unix & Linux 大学教程》 - 第三、四章 学习笔记 Unix连接 & 开始使用Unix
《Unix & Linux 大学教程》 - 第五、六章 学习笔记 GUI:图形用户界面 & Unix工作环境
《Unix & Linux 大学教程》 - 第七、八章 学习笔记 Unix键盘使用 & 能够立即使用的程序
《Unix & Linux 大学教程》 - 第九、十章 学习笔记 文档资料:Unix手册与Info & 命令语法
《Unix & Linux 大学教程》 - 第十一、十二章 学习笔记 shell & 使用shell:变量和选项
《Unix & Linux 大学教程》 - 第十三章 学习笔记 使用shell:命令和定制
>>>>和 <<<<之间的内容为没有理解的部分,希望看到文章的各位,如果知道原因,希望能给予解释,感激不尽。
第十三章:使用shell:命令和定制
元字符:
字符
|
英文名称
|
Unix绰号
|
章号
|
作用
|
& |
ampersand(和号) |
-- |
26 |
作业控制:在后台运行命令 |
' |
apostrophe(撇号) |
引号、单引号 |
12 |
引用:取消所有的替换 |
* |
asterisk(星号) |
星号 |
24 |
文件名扩展:匹配0个或多个字符 |
@ |
at sign(at符号) |
at |
|
|
` |
back quote(反引号) |
反引号(backtick) |
13 |
命令行:命令替换 |
\ |
backslash(反斜线) |
-- |
12 |
引用:下一个字符转义 |
{} |
bracebrackets(花括号) |
花括号,波型括号 |
12 |
变量:确定变量名称的界限 |
{} |
bracebrackets(花括号) |
花括号,波型括号 |
24 |
花括号扩展:生成一种字符模式 |
^ |
circumflex(音调符号) |
插入记号 |
|
|
: |
colon(冒号) |
-- |
|
|
, |
comma(逗号) |
-- |
|
|
$ |
dollar sign(美元符号) |
美元 |
12 |
变量:用变量的值替换 |
<Return> |
enter、return(回车) |
新行 |
7 |
空白符:标记一行结束 |
= |
equal sign(等号) |
等号 |
|
|
! |
exclamation mark(感叹号) |
bang |
13 |
历史列表:事件标记 |
> |
greater-than sign(大于号) |
大于 |
15 |
命令行:重定向输出 |
- |
hyphen(连字符)、minus sign(减号) |
虚线、减号 |
|
|
< |
less-than sign(小于号) |
小于 |
15 |
命令行:重定向输入 |
# |
number sign(序数符号) |
hash、pound |
14 |
命令行:注释的开头,忽略该行其余部分 |
() |
parentheses(圆括号) |
-- |
15 |
命令行:在子shell中运行命令 |
% |
percent sign(百分比符号) |
百分比 |
|
|
. |
period(点号) |
点 |
|
|
+ |
plus sign(加号) |
加 |
|
|
? |
question mark(问号) |
-- |
24 |
文件名扩展:匹配任意一个字符 |
" |
quotation mark(引号) |
双引号 |
12 |
引用:取消大部分替换 |
; |
semicolon(分号) |
-- |
10 |
命令行:用于分割多条命令 |
/ |
slash(斜线) |
正斜线 |
|
|
<Space> |
space(空格) |
-- |
10 |
空白符:在命令行中分割单词 |
[] |
square brackets(方括号) |
方括号 |
24 |
文件名扩展:与一组字符中的字符匹配 |
<Tab> |
tab(制表符) |
-- |
10 |
空白符:在命令行中分割单词 |
~ |
tilde(波浪号) |
-- |
24 |
文件名扩展:插入home目录的名称 |
_ |
underscore(下划线) |
-- |
|
|
| |
vertical bar(竖线) |
管道 |
15 |
命令行:创建一个管道线 |
(注1:文件名扩展也成为“通配globbing”)
(注2:连字符:年轻人称之为dash,年长者称之为minus;序数符号:年轻人称之为hash,年长者成为pound)
这里双引号和单引号作用的区别是:单引号取消所有的替换(单引号中,所有元字符都将失效,变为普通字符),双引号取消大部分的替换,其中有三个符号特例,分别为:美元符号($)、反引号(`)、反斜线(\)
单引号也称之为强引用(strong quote),双引号称之为弱引用(weak quote)。(反斜线是所有引用中最强的)
当“\<Return>”位于命令行一行的末尾时,光标会换行,但是由于新行字符被转义,所以它不再是一行结束的信号。
~$ echo this is a \
> test
this is a test
感觉只是因为一行写不下了,换了个行,方便阅读而已,实际上还是一行。
下面看看单引号
$ echo 'this is a
test'
输出
this is a
test
命令行只有一个单引号(双引号也一样),输入换行之后shell还在等待更多的输入,直到补全单引号。在C-Shell或Tcsh会报错
内部命令:通常成为内置命令(builtin command,或者简称builtin),shell可以直接解释他们。
外部命令:除了内部命令的命令,必须独自运行独立程序。
每条命令的第一部分都是命令的名称,其他部分为选项或参数。
当输入内部命令时,shell在自己的进程内运行该命令。
输入外部命令时,shell创建一个子进程,然后等待。子进程开始执行实际程序。当程序终止时,子进程也将终止,然后控制将返回给父进程,从而导致子进程消失。接着父进程显示一个shell提示,邀请用户输入另一条命令。
区分内外部命令
1.外部命令都拥有自己的说明书页,内部命令没有。
2.使用type命令:type command...
$ type date time set
date is /bin/date
time is a shell keyword
set is a shell builtin
date是外部命令,time和set是内部命令
学习内部命令
所有内部命令都记录在shell说明书页中。所以可以使用下面命令查看:
man bash
man ksh
man tcsh
man csh
说明书页中查找builtin
apropos builtin(apropos = man -k,见《Unix & Linux 大学教程》 - 第九、十章 学习笔记)
如果存在这样的说明书页,那么可以使用man builtin查看
$ apropos builtins
bash-builtins (7) - bash built-in commands, see bash(1)
builtins (7) - bash built-in commands, see bash(1)
这里使用man builtins,结果如下
BASH-BUILTINS(7) BASH-BUILTINS(7)
NAME
bash-builtins - bash built-in commands, see bash(1)
SYNOPSIS
……
BASH BUILTIN COMMANDS
Unless otherwise noted, each builtin command documented in this section as accepting options preceded by - accepts -- to signify the end of the options. The :,
true, false, and test builtins do not accept options and do not treat -- specially. The exit, logout, break, continue, let, and shift builtins accept and process
arguments beginning with - without requiring --. Other builtins that accept arguments but are not specified as accepting options interpret arguments beginning with
- as invalid options and require -- to prevent this interpretation.
: [arguments]
No effect; the command does nothing beyond expanding arguments and performing any specified redirections. A zero exit code is returned.
. filename [arguments]
source filename [arguments]
……
alias [-p] [name[=value] ...]
……
也可使用help命令,可以以若干种方式显示builtin说明书也中的信息。
help [-s] [command...]
$ help -s pwd help
pwd: pwd [-LP]
help: help [-dms] [pattern ...]
只希望查看命令的语法则使用-s(syntax,语法)选项即可。
查看关键字语法最快捷的方式是使用help
搜索路径:环境变量PATH,包含所有外部命令的程序的目录列表。shell通过它找到外部命令位置。
修改搜索路径的时候可以使用export,如果要在PATH后面添加一个路径,不要这样
export PATH="新添加路径"
这样只会把PATH设置成上面的路径。
可以使用export PATH="$PATH:新添加路径"
shell按顺序检查PATH列表的路径,如果找到了要执行的程序,那么它就停止搜索并执行程序。所以,如果想使用自己的程序,那么只需把自己程序的路径配置到PATH的前面即可。
可以在PATH中使用点号(.)来添加自己的当前正在工作的目录。
export PATH="$PATH:$HOME/bin:."
注意:如果加入工作目录到PATH中,最好放置它到PATH末尾
如果用户A加入到PATH开头,并且用户A具有超级权限或者特殊权限,那么当切换到另一个用户B的home目录时,在此执行的程序也许并非是用户A想要执行的那个(比如用户B写了一个自己ls放在其home目录下,并且用户A在此执行了ls,那么会执行用户B的ls命令而非系统的),所以可能会被其他人利用。
提示符:
shell类型
|
提示符
|
Bash |
$ |
Korn Shell |
$ |
C-Shell |
% |
Tcsh |
%或者> |
超级用户 |
# |
根据惯例:标准的shell提示由一个字符及其后面的一个空格组成。
修改shell提示:修改环境变量PS1即可。
export PS1='$ '
书中使用双引号,但是之前说过,美元符在双引号中为元字符。所以还是不要使用双引号了。
当然,如果要使用变量,那么还是需要双引号的。比如:
export PS1="${USER}$ "
当在命令中使用'${VARIABLE}'时,所有字符都去字面含义,$字符保留下来,以便稍后使用其原本含义。
当在命令中使用“${VARIABLE}”时,$字符就被解释成元字符,整个表达式在这个时刻就被替换为VARIABLE的值。
当需要变量引用时,考虑变量在使用前会不会发生变化,如果会,则使用单引号来防止$被解释,直至需要他们。否则使用双引号,从而$立即被解释。
export PS1='${RANDOM} $'
这里使用单引号,因为变量RANDOM使用前会发生变化。这样,每次输入命令的时候,都是计算一次RANDOM。
如果使用双引号,则相当于计算出一个RANDOM赋值到PS1中,所以每次输入命令的时候,前面的提示符都是固定的一个数字。
使用转义符的特殊码
Bash和Tcsh允许使用特殊码在shell提示中插入信息。
下表为部分特殊码,在shell说明书页均有介绍
含义
|
Bash
|
Tcsh
|
Korn Shell
|
C-Shell
|
工作目录:~表示法 |
\w |
%~ |
X
|
X
|
工作目录:只有基名 |
\W |
X
|
X
|
X
|
工作目录:完整路径名 |
X
|
%/ |
$PWD |
X
|
计算机的主机名 |
\h |
%m |
`hostname` |
`hostname` |
当前用户标识 |
\u |
%n |
$LOGNAME |
$LOGNAME |
shell的名称 |
\s |
X
|
`basename $SHELL` |
`basename $SHELL` |
时间:AM/PM表示法 |
\@ |
%@ |
X
|
X
|
时间:24小时制表示法 |
\A |
%T |
X
|
X
|
日期 |
\d |
X
|
X
|
X
|
星期 |
X
|
%d |
X
|
X
|
月的第几天 |
X
|
%D |
X
|
X
|
月 |
X
|
%w |
X
|
X
|
年 |
X
|
%Y |
X
|
X
|
历史列表:事件编号 |
\! |
%! |
! |
! |
X表示相应的shell不支持该选项,可以通过下面介绍的命令替换来设置。
例如:
export PS1="\u$ "
命令替换
命令替换(command substitution):命令替换允许在一条命令中嵌入另一条命令。shell首先执行嵌入的命令,并且用输出替换该命令。然后再执行整个命令。
例如:
$ echo "today is `date` "
today is 2012年 08月 13日 星期一 16:23:26 CST
这里先执行`date`,它的输出为2012年 08月 13日 星期一 16:23:26 CST,然后将它的结果替换掉`date`
现在变为cho "today is 2012年 08月 13日 星期一 16:23:26 CST"
其实我觉得命令替换很好理解,和$类似。只不过$变量,输出的是变量值,然后将变量用变量值替换;而命令替换则是执行命令而不是取变量值而已。
比如:
$ echo $TERM
xterm
可以理解为先计算$TERM为xterm,然后用其输出“xterm”替换$TREM,变为echo xterm。
历史列表
在输入命令时,shell会将命令保存到历史列表中,而无论命令是否有错误。
可以通过Up和Down调用历史列表,但一次只能显示一条。
历史列表中,每条命令称为一个事件,每个事件都有一个内部编号,称为事件编号。所以可以通过编号调用历史命令。
fc(fix command)
fc -l(同history):查看历史列表
fc -s 编号(同!编号):执行此编号的命令
fs -s(或!!):执行上一条命令
重新执行命令前修改命令
fc -s pattern=replacement number(类似!number:s/pattern/replacement,此方式只替换一次)
在第number号命令中搜索字符串pattern,将其替换为replacement
2024 date
2025 history
suzhaoqiang-一 8月 13$ fc -s e=a 2024
data
No command 'data' found, did you mean:
Command 'dat' from package 'liballegro4.2-dev' (universe)
Command 'date' from package 'coreutils' (main)
data: command not found
把2024号命令中e替换为a。
(我暂时觉得,还是复制粘贴过来的好,如果命令较长,其中有多个e,那就麻烦了,它会全部替换,或者替换第一个)
修改上次命令
fc -s pattern=replacement(类似^pattern^replacement,此方式只替换一次)
^R:重新调用包含该模式的最近一条命令。
(reverse-i-search)`l': ls -l
输入ctrl+R后,开始准备查找命令,然后输入ls,它就会找到我最近一次执行的ls命令为:ls -l。
历史列表大小
通过设置HISTSIZE环境变量设置,例如
export HISTSIZE=50
rm可以指定一系列模式。比如temp*表示文件名以temp开头的文件,temp?表示文件名以temp开头但是后面根一个字符的文件。
所以执行“rm temp* extra?”之前,要先"ls temp* extra?",确保不会删错文件,然后执行“fc -s ls=rm”即可
自动补全
shell类型
|
自动补全
|
补全对象
|
B K C T |
文件名补全 |
文件和目录 |
B X X T |
命令补全 |
命令,包括路径名 |
B X X T |
变量补全 |
变量 |
B X C T |
用户标识补全 |
系统上的用户标识 |
B X X X
|
主机名补全 |
局域网上的计算机 |
(B=Bash,K=Korn Shell,C=C-Shell,T=Tcsh,X表示对应的shell类型不支持该特性)
别名
alias、unalias
alias [name=commands]
如果你经常输入cd ../.. 那么可能会觉得这样很麻烦,如果能让cd2与cd ../..功效一样该多好
那么我们给cd ../..起一个别名,别名就叫cd2
alias cd2='cd ../..'
这时再输入cd2就可以了。
当然你也可以给alias起别名
alias a=alias
你也可以给多条命令起别名,比如:
alias test='cd;ls'
也可以把命令本身修改了,比如:
alias ls='ls -l'
那么运行ls的时候则相当于执行ls -l,如果想临时执行一下原来的ls命令,那么需要在命令前加“\”
\ls
则相当于最初的ls命令
查看别名定义
alias name
type name
$ type cd2
cd2 is aliased to `cd ../..'
$ alias cd2
alias cd2='cd ../..'
取消别名
unalias name
unalias -a(取消所有别名)
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
作者提到,由于技术原因,下面的命令不能应用别名:
alias del='^ls^rm'(C-Shell风格,Bash中执行^ls^rm是可以的)
但是可以使用下面的:
alias del='fc -s ls=rm'
不清楚原因,所以就先记住好了,猜测是由于脱字符的关系吧。
可以给下面命令起别名,达到同样的目的:
(1) rm !ls:*
(2) alias del='rm \!ls:*'(为什么叹号前面要加“\”?)
但是我的机器只能执行(1),却不能执行(2)(叹号前面不加也一样无法执行),希望路过的同学能帮忙解答一下。
写道
rm: cannot remove `!ls:*': No such file or directory
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
更多详细信息请查看
java教程网 http://www.itchm.com/forum-59-1.html
分享到:
相关推荐
UNIX&LINUX;大学教程.pdf
Unix & Linux大学教程Unix & Linux大学教程Unix & Linux大学教程
Linux内核最初只是由芬兰人李纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的。 Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和...
UNIX&LINUX大学教程重点整理终极版.docx
被誉为最好的Linux shell入门教程
《Unix & Linux大学教程》内容简介:Unix是计算机发展历史上最成功的...在《Unix & Linux大学教程》中,不仅可以全面学习到Unix和Linux操作系统的工作原理和主要命令,还可以知晓Unix和Linux发展史上的许多奇闻趣事。
vi 学习笔记——取自《Unix&Linux;大学教程》,vi 学习笔记——取自《Unix&Linux;大学教程》
本教程为外文资料中文版,主要讲述Linux和Unix的基础知识,是一份非常适合初学者的Linux资料
高教类课件:Unix & Linux 大学教程
Unix&Linux大学教程+实验+样题.7z
大学经典的教材,Unix&Linux;大学教程,这个ppt就是和这本书配套的。
在本书中,不仅可以全面学习到Unix和Linux操作系统的工作原理和主要命令,还可以知晓Unix和Linux发展史上的许多奇闻趣事。 另外,本书还解释了622个Unix专业术语,许多术语都给出了其历史来源;书中的示例涵盖了...
UNIX&Linux;大学教程,是国外一本经典的UNIX入门教程,该资源为英文原版。希望学习UNIX的同学可以下载下来看一看,挺好的一本书。
根据原著勘误表及本人阅读过程中发现的错误,以pdf文档的注释形式将所有错误进行全部更正。
电子科技大学<UNIX&Linux操作系统编程>课程课件1,详细讲解Linux操作系统命令等基础知识
UNIX&Linux操作系统编程-操作系统基本知识.ppt
【Unix&Linux;】较全的文档,文件大小100多mb,入门学习;
Unix&Linux;资料
IBM UNIX&Linux- AIX 5L 系统管理技术 于宁斌,很好的aix入门书籍。由于是影印版,个头比较大,分为两部分。