- 浏览: 672083 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
yigeisme:
你好,不已.html和.jsp和.jpg结尾的正则表达式怎么写 ...
深入入门正则表达式(java) - 2 - 基本实例 -
su1216:
多谢指正yigeisme 写道1-12(小时,月份)正则:^( ...
深入入门正则表达式(java) - 2 - 基本实例 -
yigeisme:
1-12(小时,月份)正则:^(1[012]|\d)$应该改成 ...
深入入门正则表达式(java) - 2 - 基本实例 -
heikefangxianceshi:
小三将军 写道楼主,我想问下你给的Real.tar.gz是什么 ...
android手机root后的安全问题 (一) -
heikefangxianceshi:
这个程序运行的前提是手机root,但你的手机怎么root的呢? ...
android手机root后的安全问题 (一)
学习笔记,内容基础,适合初学者。
阅读之前,请务必花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 大学教程》 - 第二十二章(一) 学习笔记 vi文本编辑器(一)
《Unix & Linux 大学教程》 - 第二十二章(二) 学习笔记 vi文本编辑器 (二)
《Unix & Linux 大学教程》 - 第二十二章(三) 学习笔记 vi文本编辑器 (三)
《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 directory; command)
组合标准输出和标准错误
下面将标准输出和标准错误输出到同一个文件中,语法如下
command x> outputfile y>&x (这里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 [-a] file...
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地址
发表评论
-
Linux书籍笔记目录
2013-12-12 10:53 0内建命令 命令 描述 章节 页码 章节 ... -
《Unix & Linux 大学教程》 - 附录F
2012-11-15 22:15 2598学习笔记,内容基础,适合初学者。 阅读之前,请务必 ... -
《Unix & Linux 大学教程》 - 第二十六章(二) 学习笔记
2012-11-13 23:26 3281学习笔记,内容基础,适合初学者。 阅读之前,请务 ... -
《Unix & Linux 大学教程》 - 第二十六章(一) 学习笔记
2012-11-07 11:15 2415学习笔记,内容基础,适合初学者。 阅读之前,请务 ... -
《Unix & Linux 大学教程》 - 第二十五章 学习笔记
2012-10-31 16:22 2822学习笔记,内容基础,适合初学者。 阅读之前,请务必 ... -
《Unix & Linux 大学教程》 - 第二十四章 学习笔记
2012-10-25 16:34 2605学习笔记,内容基础,适合初学者。 阅读之前,请 ... -
《Unix & Linux 大学教程》 - 第二十三章 学习笔记
2012-10-23 13:31 2001学习笔记,内容基础,适合初学者。 阅读之前,请务 ... -
《Unix & Linux 大学教程》 - 第二十二章(三) 学习笔记
2012-10-19 18:54 2192学习笔记,内容基础,适合初学者。 阅读之前,请务 ... -
《Unix & Linux 大学教程》 - 第二十二章(二) 学习笔记
2012-10-18 14:43 1754学习笔记,内容基础,适合初学者。 阅读之前,请务 ... -
《Unix & Linux 大学教程》 - 第二十二章(一) 学习笔记
2012-10-09 17:30 2636学习笔记,内容基础,适合初学者。 阅读之前,请务 ... -
《Unix & Linux 大学教程》 - 第二十一章 学习笔记
2012-09-24 16:30 2532学习笔记,内容基础,适合初学者。 阅读之前,请务 ... -
《Unix & Linux 大学教程》 - 第十九章(二)、第二十章 学习笔记
2012-09-17 18:48 2660学习笔记,内容基础,适合初学者。 阅读之前,请务 ... -
《Unix & Linux 大学教程》 - 第十九章(一) 学习笔记
2012-09-14 18:11 2576学习笔记,内容基础,适合初学者。 阅读之前,请务 ... -
《Unix & Linux 大学教程》 - 第十八章 学习笔记
2012-08-22 15:40 2487学习笔记,内容基础,适合初学者。 阅读之前,请务 ... -
《Unix & Linux 大学教程》 - 第十六、十七章 学习笔记
2012-08-21 10:57 2921学习笔记,内容基础,适合初学者。 阅读之前,请务 ... -
《Unix & Linux 大学教程》 - 第十三章 学习笔记
2012-08-14 11:43 4605学习笔记,内容基础,适合初学者。 阅读之前,请务 ... -
《Unix & Linux 大学教程》 - 第十一、十二章 学习笔记
2012-08-08 18:24 4151学习笔记,内容基础,适合初学者。 阅读之 ... -
《Unix & Linux 大学教程》 - 第九、十章 学习笔记
2012-08-07 15:07 2448学习笔记,内容基础,适合初学者。 阅读之前, ... -
《Unix & Linux 大学教程》 - 第七、八章 学习笔记
2012-08-06 17:16 3049学习笔记,内容基础,适合初学者。 阅读之前,请务 ... -
《Unix & Linux 大学教程》 - 第五、六章 学习笔记
2012-08-03 13:52 3599学习笔记,内容基础,适合初学者。 阅读之前,请务 ...
相关推荐
Linux是一种免费使用和自由传播的类UNIX计算机操作系统的内核,其源代码可以免费获得。它诞生于1991年,由芬兰赫尔辛基大学的学生Linus Torvalds首次发布,并逐渐发展成为当今最流行的操作系统之一。Linux不仅广泛...
### 鸟哥的私房菜Linux学习笔记关键知识点解析 #### 第一章 计算机概论 **1. CPU的种类** - **精简指令集(RISC)** - 特点:指令数量少,每条指令执行周期简单且快速。 - 例子:ARM架构。 - **复杂指令集...
本资料“Linux学习笔记.pdf”将带你深入理解Linux的基础知识和高级应用。 一、Linux系统概述 1. Linux的起源:Linux的诞生源于托瓦兹对Minix系统的不满,他决定创建一个符合个人需求的、免费的Unix-like操作系统...
netstat 命令 netstat是用来显示网络的连接,路由表和接口统计等网络的信息.netstat有许多的 选项 我们常用的选项是 -an 用来显示详细的网络...的服务 我们可以调用第四个函数,相反为了得到端口号可以调用第三个函数.
Linux学习笔记概述 Linux是一种自由和开放源代码的操作系统,其设计目标是提供一个轻量级、高效且安全的计算平台。Linux系统采用类UNIX目录结构,每个目录都有特定的功能和用途。以下是对Linux主要目录及其内容的...
集合了 所有的 Unix命令大全 登陆服务器时输入 公帐号 openlab-open123 telnet 192.168.0.23 自己帐号 sd08077-you0 ftp工具 192.168.0.202 tools-toolss 老师测评网址 http://172.16.0.198:8080/poll/ 各个 ...
### Linux系统学习笔记 #### 一、Linux系统Shell介绍 1. **Linux系统Shell类型**:Linux系统提供了多种Shell供用户选择,常见的包括Bourne shell (`sh`), C shell (`csh`), Korn shell (`ksh`)等。其中,`sh`是Unix...
- 第一部分的第二个至第十个字符分为三个三元组(triplet),分别表示文件属主、组用户和其他用户的权限。 - 第二部分表示文件的硬链接数目。 - 第三部分表示文件属主。 - 第四部分表示文件属主所在的默认组。 - 第...
#### 第十四章 高级I/O - **记录锁**:防止多个进程同时修改同一文件。 - **SysV STREAMS机制**:用于实现网络通信的一种模型。 - **非阻塞I/O**:使I/O操作不阻塞进程。 - **I/O多路转接**:如`select`和`poll`...
通过“嵌入式Linux入门笔记”,学习者将能了解嵌入式系统的基础概念,熟悉Linux内核、设备驱动、Bootloader的工作原理,掌握构建和调试嵌入式系统的技能,为成为一名合格的嵌入式Linux开发者打下坚实基础。
- **主要内容**: 包括了 Oracle 11g 的基础学习内容,覆盖了第 1 至 6 章以及第 11、12、14、22 和 23 章。 #### 二、Oracle 服务器端安装 ##### 2.2 Oracle 安装 - **最低安装要求**: - 内存: 通常建议至少 2GB ...
以下是对"第11章 Linux操作系统基础"的主要知识点的详细阐述。 一、Linux操作系统简介 Linux是基于Unix的操作系统,由林纳斯·托瓦兹于1991年创建。它的内核是开源的,允许全球开发者对其进行修改和优化。Linux系统...
### Bash Shell 学习笔记知识点概览 #### 1. 引言 - **Shell**:作为用户与操作系统之间的桥梁,Shell提供了一种与系统进行交互的方式,支持用户执行命令和编写脚本来自动化任务。 - **Bash**:是Bourne-Again ...
本章主要探讨的是"Linux全攻略第一章:目录认识",这对于初学者来说是一份非常实用的学习资料。Linux的目录结构是其核心组成部分,理解它对于高效地操作和管理Linux系统至关重要。 Linux基于Unix系统,采用的是单一...
IPv4由32位二进制组成,通常以四段十进制表示,如192.168.78.22;IPv6则为128位二进制,以十六进制表示,如fe80::bc92:8。随着IPv4地址的枯竭,IPv6正在逐渐普及。 总的来说,这个PDF教程旨在帮助读者掌握Linux环境...
Linux操作系统是开源的类Unix系统,广泛应用于服务器、嵌入式设备和桌面环境中。了解Linux的基础知识,特别是其目录结构和命令行操作,对于软件开发人员来说至关重要。 首先,让我们来详细了解一下Linux的目录结构...
### Shell脚本编程知识点概述 #### 一、预备知识与基本概念 在开始Shell脚本文档的学习之前,首先需要理解Shell...以上就是文档《总结搜集的shell脚本学习笔记(完结篇)》中所涵盖的主要知识点,希望对你有所帮助。
**cMake 学习笔记,快速入门** cMake 是一种跨平台的构建系统,用于管理软件项目的构建过程。它能够生成各种编译器所需的构建文件,如Visual Studio的解决方案文件或Unix Makefiles,使得开发者无需关心底层构建...