一些概念
在系统中,一个进程只认为自己存在
父shell 子shell 父子shell之间设置环境互相独立
shell 也是一个程序
cat /etc/shells 查看系统支持的shell ,没有的可以安装,并不说明不支持
exit 退出当前 shell 程序
bash 的特性:
1. 命令历史
2. 管道 重定向
3. 命令别名
4. 命令行编辑
5. 命令行展开
6. 命令行通配
7. 变量
8. 编程
命令历史:
history
1. -c 清空命令历史(仅限于内存缓冲区当中)
2. -d 删除某一条命令历史
3. -w 将命令历史保存到某个文件中,缺省值 .bash_history 文件 // 替换重定向,谨慎使用
4. -a 将命令历史保存到某个文件中,缺省值 .bash_history 文件 // 追加重定向
5. !n 执行命令历史中的第n条命令
6. !-n 执行命令历史中倒数第n条命令
7. !word 执行命令历史中最近一次以 word 开始的命令 不一定是一个单词,一个字母也行,必须要能唯一标识该命令 不错
8. !! 执行上一次命令
9. !$ 引用上一条命令的最后一个参数 比如上一次 ls /etc 那么 ls !$ 就等价于 ls /etc ls + esc + . 也可以达到i相同效果 不错
命令行编辑:
1. ctrl+a 光标快速跳转到命令行行首
2. ctrl+e 光标快速跳转到命令行行尾
3. ctrl+u 快速删除光标位置到命令行行首的字符 不包括当前字符
4. ctrl+k 快速删除光标位置到命令行行尾的字符 包括当前字符
5. ctrl+l 清屏 等同 clear
命令行展开:
1. 命令补齐:在 PATH变量搜索命令并补齐(PATH变量必须正常,输入要补齐命令的字符数一定要能够唯一标识这条命令;tab键补齐) 按两次 tab键 ,会列出以某个或某些字符开始的所有命令
2. 路径和文件补齐:在系统路径中查找
3. 命令行补齐功能不能补齐选项,即参数
4. 命令替换 就是把命令中的子命令替换成子命令执行结果的过程
5. 接上,经常用到shell脚本编程中 $(command) `command`
6. 接上, ""(双引号):弱引用(可以实现变量的替换,把变量名替换为变量值)
7. 接上, `` (反引号): 命令引用
8. 接上, ''(单引号):强引用(不能完成变量替换)
命令别名:
1. alias 别名=command alias 定义的别名只在当前shell生效 直接输入 alias 会打印所有命令别名
2. 执行 alias命令时,command最好用'' (单引号) 含括起来,没有参数不用也行,有参数一定要用 双引号亲测也行
3. unalias 别名 取消 该别名
命令行通配:globbing
1. *:匹配任意长度的任意字符
2. ?:匹配任意单个字符
3. []:匹配指定范围内的任意单个字符
4. [^]:匹配指定范围外的任意单个字符
5. [:space:] : 表示空格
6. [:punct:]:表示所有标点符号
7. [:lower:]:表示所有小写字母
8. [:upper:]:表示所有大写字母
9. [:alpha:]: 表示所有字母(大小写)
10. [:digit:]:表示所有数字
11. [:alnum:]:表示所有数字和大小写字母
12. 并不能很准确的匹配,要追求精确,还是要用正则表达式
管道,IO重定向
计算机体系结构:
控制器:CPU,读取系统指令
运算器:CPU,运算
存储器:RAM(内部存储器:易失性存储器)
输入设备:输入数据,如键盘,硬盘等
输出设备:显示指令执行结果,如显示器,音响,硬盘等
计算机总线:
地址总线:负责内存寻址
数据总线:负责传输数据
控制总线:负责控制指令
寄存器:CPU中临时存储空间
I/O设备
程序:指令+数据
指令:由程序提供,负责加工数据
数据:系统中数据可以有多种来源,比如来自变量,来自文件,来自输入设备等
标准输入输出设备
标准输入设备:文件描述符为 0
标准输出设备:文件描述符 为 1
标准错误输出设备:显示器(stderr) 文件描述符为 2
三种数据流
当在Linux中打开一个文件时,内核会反复调用,对于文件标识就很重要了,用文件描述符来标识文件,文件加载完成后用数字标识
fd:file descriptor (文件描述符)
IO重定向:把默认输入输出数据来源重新定向到其他的文件或设备
输出重定向: 通过重定向到终端名可以实现不同终端之间的交流 (使用 tty 来查看当前终端的名字)
2> 错误覆盖输出重定向
touch /dir_name/{a.txt,b.txt,c.txt} 在其他目录同时创建多个文本
&> 混合覆盖输出重定向 &>> 混合追加输出重定向
输入重定向:
管道:
tr:实现字符转换,不修改源文件 cat /etc/passwd | tr 'a-z' 'A-Z' 把 /etc/passwd 的所有字母转换为大写字母
tee:ls /etc/ | tee cws.txt 同时输出到屏幕和保存到文件中