《Linux命令行与shell脚本编程大全》 第五章理解shell
5.1
1. cat /etc/passwd
可以查看每个用户自己的默认的shell程序。
2.默认的交互shell会在用户登录某个虚拟控制台终端时启动。
不过还有另外一个默认的shell是/bin/sh,它作为默认的shell,用于那些需要在启动时使用的shell脚本
ls -l /bin/sh 进行查看
乌班图的发行版中默认的系统shell(dash shell)和默认的交互shell(bash shell)并不相同。
可以直接 dash 来启动 dash shell
exit 退出
5.2 shell 的父子关系
一个shell可以创建另外一个shell(子shell)。
ps -f 查看一下。
bash shell就是一个进程(运行的程序)。
输入bash就会创建一个子shell。exit退出。 ps- f --forest。可以展示进程间的嵌套结构。
5.2.1 进程列表
$ pwd; ls; pwd; cd /; echo $BASH_SUBSHELL
这样可以让命令依次执行。这是在当前shell中执行的。
$(pwd; ls; echo $BASH_SUBSHELL;) // 这个是在子shell中执行。
() 还可以嵌套,比如pwd;(pwd; (ls; cd /home))
echo $BASH_SUBSHELL 若返回0,表示没有子shell。
$sleep 300& // 后台运行命令,& 就是把命令置入后台模式
jobs 可以查看后台作业信息
还可以这样,将进程列表置入后台。
$(sleep 2; echo $BASH_SUBSHELL; sleep 2;)&
协程:可以同时做两件事,它在后台生成一个子shell,并在这个子shell中执行命令。
使用coproc命令进行协程处理:
$ coproc sleep 10
还可以这样:
$coproc MyJob { sleep 10; } // 相当于给sleep 10取了个名字。注意那几个空格
5.3 理解shell的内建命令
1.外部命令:又称文件系统命令,存在与bash shell之外的命令。并不是shell程序的一部分
通常位于 /bin /usr/bin /sbin /usr/sbin中。
外部 命令执行时会创建一个子进程。这种操作叫 衍生(forking)。
比如ps是一个外部命令,可以使用which 和 type命令找到它
$which ps
$ type -a ps
$ ls -l /bin/ps
2. 内建命令:不需要子进程来执行,和shell是一体的,不需要借助外部程序文件来运行。
(1)比如 exit 和 cd是内建命令
$type exit
$type cd
有些命令有多种实现,比如pwd和echo既有外部命令也有内建命令
#type -a echo
which 只显示出外部命令文件。
type -a 显示出每个命令的两种实现。
窍门:对于多种实现的命令,默认执行是内建的,若想要执行外部命令可以指定对应的文件就好了。
比如
$pwd // 执行的是内部命令
$/bin/pwd // 执行的外部命令
(2)查看历史执行的命令
$ history // 这个是内建命令
可以看到之前执行的命令,前面有个数字,代表命令编号。比如是38
$ !38 // 表示执行第38条命令
(3)$ !! 这个是执行上一条输入的命令。
(4)命令别名
alias 也是内建命令
$alias -p // 查看当前可用的别名
创建自己的命令
$alias xcyls='ls -al'
一个别名仅仅在它所被定义的shell进程中才有效。在 ~/.bashrc下修改可以对所有shell都有效
shell 子shell 进程 子进程 都会受到环境变量的影响。
《Linux命令行与shell脚本编程大全》 第五章理解shell的更多相关文章
- 《Linux命令行与shell脚本编程大全 第3版》Shell脚本编程基础---57
以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:
- 《Linux命令行与shell脚本编程大全》23章24章
第二十三章 使用其他shell bash shell是linux发行版中最广泛使用的shell.但是它并不是唯一的选择,还有其他的shell可以供你选择. 23.1 什么是dash shell 百度百 ...
- 《Linux命令行与shell脚本编程大全》第九章 安装软件程序
包管理系统(PMS):用来进行软件安装.管理和删除的命令行工具 9.1包管理基础 1.主流的Linux发行版都采用了某种形式的包管理系统来控制软件和库的安装 2.PMS用一个数据库来记录:系统上安装了 ...
- Linux命令行与shell脚本编程大全.第3版(文字版) 超清文字-非扫描版 [免积分、免登录]
此处免费下载,无需账号,无需登录,无需积分.收集自互联网,侵权通知删除. 点击下载:Linux命令行与shell脚本编程大全.第3版 (大小:约22M)
- 《Linux命令行与shell脚本编程大全 第3版》创建实用的脚本---11
以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:
- 《Linux命令行与shell脚本编程大全 第3版》高级Shell脚本编程---47
以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:
- 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---57
以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:
- 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---56
以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:
- 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---55
以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:
- 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---54
以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:
随机推荐
- 计算机基础知识 一 Basic knowledge of computers One
计算机硬件由CPU(Central Processing Unit).存储器.输入设备.输出设备组成. CPU通常由控制单元(控制器)和算数逻辑单元(运算器)组成. 运算器:负责进行算数运算和逻辑运算 ...
- [翻译]:Cinemachine 官方文档(0)
目录 Overview : Installation and Getting Started :安装并开始 User Guide :用户指南 What is Cinemachine? : 什么是Cin ...
- 主流蓝牙芯片盘点,Nordic/TI/博通哪家强?
无线通信技术自19世纪中期诞生以来,从使用狼烟.火炬.闪光镜.信号弹等在视距内传输信息,到1838年塞缪尔・莫尔斯发明电报网,再到电报网被电话取代,再到几十年后的1895年马可尼首次从英国怀特岛到30 ...
- c#版flappybird 未完全实现
这些天开始在深圳找工作,想着把从前有些淡忘的技术再温故下.看到尊敬的<传智播客>有一期公开课,讲的是用c#编写flappybird小游戏,也就自己搜了下游戏资源,也来试试看. 其实用到的技 ...
- 第三周:构造一个简单的LINUX系统MENUOS
吕松鸿 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.Linux内 ...
- linux内核分析第五周学习笔记
linux内核分析第五周学习笔记 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.co ...
- 初学Hadoop之单机模式环境搭建
本文仅作为学习笔记,供大家初学Hadoop时学习参考.初学Hadoop,欢迎有经验的朋友进行指导与交流! 1.安装CentOS7 准备 CentOS系统镜像CentOS-7.0-1406-x86_64 ...
- Bean的加载
ClassPathXmlApplicationContext存储内容 为了更理解ApplicationContext,拿一个实例ClassPathXmlApplicationContext举例,看一下 ...
- PAT 甲级 1106 Lowest Price in Supply Chain
https://pintia.cn/problem-sets/994805342720868352/problems/994805362341822464 A supply chain is a ne ...
- Cucumber java + Webdriver(一)
一.打开Eclipse,新建一个maven项目,打开pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xm ...