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

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

[复制链接]

尚未签到

发表于 2016-3-8 09:29:39 | 显示全部楼层 |阅读模式
  

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

  
阅读之前,请务必花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:初始化文件
  初始化文件(initialization file)
  登录文件(login file):存放着所有希望在每次登录时自动执行的命令。
  环境文件(environment file):存放着所有希望在新shell启动时自动执行的命令。
  注销文件(logout file):存放注销时自动运行的命令。
  

shell登录文件环境文件注销文件
C-Shell.login.cshrc.logout
Tcsh.login.tcshrc、.cshrc.logout
Bourne Shell.profile----
Korn Shell.profile$ENV--
Bash(默认).bash_profile、.bash_login.bashrc.bash_logout
Bash(POSIX).profile$ENV.bash_logout
  注:
  1.Korn Shell和Bash(POSIX)不使用标准的环境文件名称。可以将ENV变量设置为希望使用的任意文件的名称。
  2.如果shell不支持注销文件,可以通过捕获EXIT信号使用注销文件。
  
  POSIX标准要求shell应该支持登录文件和环境文件,没有要求注销文件。
  如果默认不执行注销文件,则可以在登录文件中捕获EXIT信号来执行注销文件。

trap '. ${HOME}/.logout; exit' EXIT
  登录文件名应为.profile,为了保持灵活性,环境文件名称没有固定而是保存到环境变量ENV中。
  Bash可以以两种模式运行,默认模式(追求灵活性)和POSIX模式(追求兼容性)。
  Bash支持POSIX标准的增强版,在POSIX模式中,Bash严格遵循1003.2标准。
  
  POSIX模式中运行Bash
  1.通用方法
  bash --posix
  2.部分适用(大多数Linux)
  bash命令以默认方式启动,sh命令以POSIX模式启动
  
  
  隐藏文件:点文件,文件名以点开头。
  rc(run commands,运行命令)文件:文件名以点开头,以rc结尾。通常用于存放初始化命令。
  ls -a:列举出所有文件,包括隐藏文件
  
  登录shell:登录时启动的shell
  非登录shell:其他的交互式shell
  1.打开一个终端窗口,只是启动一个非登录shell,ctrl+alt+f1进行登录,则启动一个登录shell
  2.任何时候都可以通过输入shell的名称启动一个新shell,新shell是一个非登录shell
  3.使用ssh远程连接主机,必须登录,所以启动的是登录shell
  
  登录shell执行登录文件和环境文件
  非登录shell只执行环境文件
  
  上面的规则也有特殊的情况,比如Bash默认模式
  Bash(默认模式)
  1.登录shell:.bash_profile
  2.非登录shell:.bashrc
  
  Bash(POSIX模式)
  1.登录shell:.profile,然后$ENV
  2.非登录shell:$ENV
  
  
  Korn Shell
  1.登录shell:.profile,然后$ENV
  2.非登录shell:$ENV
  
  (C-Shell部分在297页)
  
  登录文件应该包含下述命令
  1.创建或者修改环境变量的命令
  2.执行所有一次性操作的命令
  由于环境自动被所有子进程继承,所以环境变量只需要在登录文件中设置一次。在环境文件中设置环境变量是没有意义的,环境文件中设置的变量在新的shell启动时将被复位。
  环境变量设置不能在环境中保存的自定义项,特别是shell选项、别名和函数。因为这些没有存储在环境中,所以每次启动新shell时必须重新创建他们。
  
  
  名词解释:
  CTSS(Compatible Time Sharing System):兼容分时系统。
  
  
  
  
  第十五章:标准I/O:重定向和管道
  
  标准输入:stdin
  标准输出:stdout
  标准错误:stderr
  标准I/O:上述三者总称
  
  重定向标准输出、标准输入
  >>:可以将输出重定向到文件,但是是追加到文件末尾
  >:可以将输出重定向到文件,文件不存在则建立,如果存在,则删除之前内容。
  <:可以将输入从键盘重定向到文件等。

sort < 1.txt > report
  上面例子中, sort先从1.txt中读取数据,排序之后输出到report文件中。
  
  shell选项:noclobber
  开启此选项可以防止文件被重定向替换或创建。

$ ls > 1.txt
$ ls > 1.txt
bash: 1.txt: cannot overwrite existing file
  我连续两次将ls输出重定向到1.txt,原始状态是没有1.txt这个文件的,第一个命令创建了这个文件,再此执行的时候,由于设置了noclobber=on(set -o noclobber),所以会提示错误。
  如果依然想执行这条命令,将1.txt的内容替换掉,那么可以使用:
  ls >| 1.txt
  这样就能强制输出到1.txt文件中。(C-Shell使用ls >! 1.txt)
  Bourne shell中,noclobber不会影响“>>”(C-Shell会影响,如果指定的文件不存在,则会出现错误提示,可以通过“ls >>! 1.txt”临时执行)。
  
  文件描述符(file descriptor)
  Unix进程中,每个输入源和每个输出目标都有一个唯一的数字标识,这个数字称为文件描述符。
  在编写程序时,使用文件描述符控制I/O,每个文件使用一个文件描述符。
  
  Bourne Shell家族中,重定向输入或输出的正式语法是:在文件描述符数字之后使用小于号或大于号。
  calculate 8> results
  表示calculate将输出写入到文件描述符为8的results中。
  
  Unix为每个进程提供3个预定义的文件描述符。
  标准输入:0
  标准输出:1
  标准错误:2
  只能省略标准输入和标准输入的文件描述符,标准错误不能省略。
  calculate 0< results同calculate < results
  calculate 1> results同calculate > results
  calculate 2> results不能省略
  
  进程就是加载到内存中并且准备运行的程序,以及程序的数据和跟踪程序所需的信息。当进程需要启动另一个进程时,这个进程就创建一个副本进程。原始进程称为父进程,副本进程称为子进程。
  子进程开始运行后,父进程等待子进程死亡(结束)。一旦子进程死亡,父进程就会被唤醒,重新获得控制权并再次开始运行,此时子进程消失。
  
  当创建子shell时,它继承父shell的环境。但是子shell对环境的修改不会传递到父shell。
  两种方式创建子shell
  1.输入shell名启动shell,^D后退出。
  2.将命令用圆括号括起来,临时使用子shell执行。位于圆括号中的这些命令被称为一个编组(grouping)
  使用编组和子shell的最常见的原因是防止cd命令影响当前的shell,其通常格式为:
  (cd directorycommand)
  
  组合标准输出和标准错误
  下面将标准输出和标准错误输出到同一个文件中,语法如下
  command x> outputfile y>&(这里x和y是文件描述符)
  例如,ls filename,如果存在此file,那么终端则显示,如果没有,终端则输出错误提示。

ls: cannot access a: No such file or directory
  现在在我的工作目录下,有一个文件为1.txt,但是没有2.txt
  执行:ls 1.txt 2.txt
  则输出

ls: cannot access 2.txt: No such file or directory
1.txt
  如果执行:ls 1.txt 2.txt > 1.txt
  则在终端只显示

ls: cannot access 2.txt: No such file or directory
  打开1.txt则只有一行为:

1.txt
  改用下面的命令即可将标准输出和标准错误都重定向写入到1.txt中
  ls 1.txt 2.txt > 1.txt 2>&1
  当然也可以使用:ls 1.txt 2.txt 1> 1.txt 2>&1
  当然,也可以先考虑标准错误,使用:ls 1.txt 2.txt 2> 1.txt 1>&2
  
  对于Bash来说,可以使用下面命达到同样效果:
  ls 1.txt 2.txt &> 1.txt
  ls 1.txt 2.txt >& 1.txt
  但是如果想把输出追加到文件末尾,那么还得使用之前的方法:
  ls 1.txt 2.txt >> 1.txt 2>&1
  
  *注意区分:ls 1.txt 2.txt 2>&1 > 1.txt
  上面的命令意思为:先将标准错误重定向到与标准输出同一个位置,但是此时标准输出还没有被重定向,标准输出发送给了shell,所以导致标准错误也发送给了shell。之后的事情大家就都知道了,重定向了标准输出。最后结果,终端会显示标准错误,标准输出被重定向到了1.txt中。
  
  如果一条命令中,向同一个文件重定向两次的话,一个重定向就会覆盖另一个。所以下面的命令不能正常工作。
  ls 1.txt 2.txt > 1.txt 2> 1.txt
  
  抛弃输出与错误
  位桶(bit bucket):/dev/null
  发给/dev/null的任何东西都会消失。
  所以我们如果不想看到标准输出,可以这样:
  ls 1.txt 2.txt > /dev/null
  如果不想看到标准错误:
  ls 1.txt 2.txt 2> /dev/null
  如果都不想看到:
  ls 1.txt 2.txt > /dev/null 2>&1
  
  Bourne shell重定向元字符总结

元字符动作
<重定向标准输入(同0<)
>重定向标准输出(同1>)
>|重定向标准输出:强制重写
>>追加标准输出(同1>>)
2>重定向标准错误
2>>追加标准错误
2&>1将标准错误重定向到标准输出
>&或者&>重定向标准输出+标准错误(只适用于Bash)
|将标准输出通过管道传送给令一条命令
2>&1|将标准输出+标准错误通过管道传送给令一条命令
  管道线
  shell允许创建一序列命令,在这一序列命令中,一个程序的标准输出可以自动的发送给下一个程序的标准输入。两个程序之间的连接就是管道(pipe),而命令序列本身称为管道线(pipeline)
  Bourne shell可以将标准输出和标准错误组合在一起发送给另一个程序:
  command1 2>&1 | command2
  C-Shell版为:
  command1 |& command2
  
  当创建管道线时,必须使用能够从标准输入读取文本,并向标准输出写入文本的程序。这样的程序称为过滤器
  
  管道线分流
  tee [-afile...
  tee从标准输入读取数据,并向文件和标准输出各发送一份数据。
  ls | tee 1.txt
  这样就能将ls的输出显示到屏幕上面并且同时保存到1.txt中一份。
  如果tee后面的文件参数不存在,则自动创建一份,如果存在,则覆盖旧文件,可以使用-a(append)改为追加。
  
  条件执行
  伪代码:

if(action1()){
action2();
}
if(!action1()){
action2();
}
  上面两段代码在shell中分辨对应
  command1 && command2
  command1 || command2
  如果grep成功,则在标准输出显示结果,如果grep失败,则不显示任何内容。
  现在我有一个名text.txt的文本文件,里面只有一行字符串:this is a test
  现在查找this单词,如果存在,则显示success
  grep this text.txt && echo "success"
  现在查找these单词,如果不存在,则显示fail
  grep these text.txt || echo "fail"
  我们发现,当grep成功的时候,会把满足条件行显示在屏幕上,如果不想显示,我们可以考虑将标准输出重定向到/dev/null中。
  grep this text.txt > /dev/null && echo "success"
  
  如果想实现下面的功能,应该如何做呢

if(action1()){
action2();
}else{
action3();
}
  书中没有给出答案,下面是我的想法
  
  grep word text.txt && echo "success" || echo "fail"
  如果grep word text.txt成功了,那么应该执行echo "success",所以echo "success"也成功了,那么后面的||就不会执行了。
  如果grep word text.txt失败了,那么echo "success"不会执行,所以echo "success"失败了,那么后面的||应该执行。
  不要想着使用括号提高运算级别,使用括号会启动子shell。
  
  
  
  
  转贴请保留以下链接
  本人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.yunweiku.com/thread-187879-1-1.html 上篇帖子: Linux系统内存占用90%以上——解决方法 下篇帖子: linux 音频驱动介绍(alas和oss的联系)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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