设为首页 收藏本站
查看: 445|回复: 0

[经验分享] 《Unix & Linux 大学教程》

[复制链接]

尚未签到

发表于 2016-3-11 12:55:22 | 显示全部楼层 |阅读模式
  

  
学习笔记,内容基础,适合初学者。

  
阅读之前,请务必花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:命令和定制

《Unix & Linux 大学教程》 - 第十四、十五章 学习笔记     使用shell:初始化文件


《Unix & Linux 大学教程》 - 第十六、十七章 学习笔记 过滤器:简介和基本操作


《Unix & Linux 大学教程》 - 第十八章 学习笔记    过滤器:统计和格式化


《Unix & Linux 大学教程》 - 第十九章(一) 学习笔记    过滤器:选取、排序、组合及变换


《Unix & Linux 大学教程》 - 第十九章(二)、第二十章 学习笔记  过滤器:选取、排序、组合及变换 正则表达式

  《Unix & Linux 大学教程》 - 第二十一章 学习笔记  显示文件
  《Unix & Linux 大学教程》 - 第二十二章(一) 学习笔记  vi文本编辑器(一)
  《Unix & Linux 大学教程》 - 第二十二章(二) 学习笔记  vi文本编辑器 (二)
  《Unix & Linux 大学教程》 - 第二十二章(三) 学习笔记  vi文本编辑器 (三)

《Unix & Linux 大学教程》 - 第二十三章 学习笔记  Unix文件系统

  《Unix & Linux 大学教程》 - 第二十四章 学习笔记  目录操作
  《Unix & Linux 大学教程》 - 第二十五章 学习笔记  文件操作
  《Unix & Linux 大学教程》 - 第二十六章(一) 学习笔记  进程和作业控制
  《Unix & Linux 大学教程》 - 第二十六章(二) 学习笔记  进程和作业控制
  《Unix & Linux 大学教程》 - 附录F 时区与24小时制时间
  
  
  
  
  >>>>和 <<<<之间的内容为没有理解的部分,希望看到文章的各位,如果知道原因,希望能给予解释,感激不尽。
  
  
  第十三章:使用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(感叹号)bang13
历史列表:事件标记
>greater-than sign(大于号)大于15
命令行:重定向输出
-hyphen(连字符)、minus sign(减号)虚线、减号
<less-than sign(小于号)小于15
命令行:重定向输入
#number sign(序数符号)hash、pound14
命令行:注释的开头,忽略该行其余部分
()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说明书页均有介绍

含义BashTcshKorn ShellC-Shell
工作目录:~表示法\w%~XX
工作目录:只有基名\WXXX
工作目录:完整路径名X%/$PWDX
计算机的主机名\h%m`hostname``hostname`
当前用户标识\u%n$LOGNAME$LOGNAME
shell的名称\sX`basename $SHELL``basename $SHELL`
时间:AM/PM表示法\@%@XX
时间:24小时制表示法\A%TXX
日期\dXXX
星期X%dXX
月的第几天X%DXX
X%wXX
X%YXX
历史列表:事件编号\!%!!!
  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文件名补全文件和目录
X X T命令补全命令,包括路径名
X X T变量补全变量
X C T用户标识补全系统上的用户标识
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
  <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  
  
  
  
  转贴请保留以下链接
  本人blog地址
  http://su1216.iyunv.com/
  http://blog.csdn.net/su1216/

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-189433-1-1.html 上篇帖子: 《Unix & Linux 大学教程》 下篇帖子: (转载)Linux下的FTP服务器配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表