计算机组成 -- First Draft
从输入设备读取输入信息,通过运算器和控制器来执行存储在存储器里的程序,最终把结果输出到输出设备中
参考资料深入浅出计算机组成原理
计算机组成 -- 知识地图
参考资料深入浅出计算机组成原理
Linux使用 -- awk
awk sed
awk更像是脚本语言
awk:用于比较规范的文本处理,用于统计数量并输出指定字段
sed:用于将不规范的文本,处理为比较规范的文本
控制流程
输入数据前例程**BEGIN{}**
主输入循环**{}**
所有文件读取完成例程**END{}**
记录和字段
每行称为AWK的记录
使用分隔符(可以自定义,默认是空格和制表符)分隔开的单词称为字段
字段的引用
$1 $2 ... $n:表示每一个字段
-F:自定义分隔符,可以使用正则表达式
1234567[root@localhost ~]# awk -F"'" '/^menu/{print $2}' /boot/grub2/grub.cfgCentOS Linux (3.10.0-1062.el7.x86_64) 7 (Core)CentOS Linux (0-rescue-6a299ef164734d338007f5e88cee6be0) 7 (Core)[root@localhost ~]# awk -F ...
Linux使用 -- sed
sed awk
sed:一般用于对文本内容做替换
awk:一般用于对文本内容进行统计、按需要的格式进行输出
替换指令模式空间
将文件以行为单位读取到内存(模式空间)
使用sed的每个脚本对该行进行操作
处理完成后输出该行
替换命令s123sed 's/old/new/' filenamesed -e 's/old/new/' -e 's/old/new/' filename ...sed -i 's/old/new/' 's/old/new/' filename ...
带正则表达式的替换命令s
12sed 's/正则表达式/new/' filenamesed -r 's/扩展正则表达式(+、?、|)/new/' filename
样例基本使用12345678910111213141516[root@localhost ~]# echo a a a > afile[root@localhost ~]# sed 's/a/aa/' afi ...
Linux使用 -- 元字符
元字符
.:匹配除换行符外的任意单个字符
*:匹配任意一个跟在它前面的字符
作为通配符(*、?)时是可以单独使用的,但作为元字符时必须与前面的字符一起使用
[]:匹配方括号中字符类中的任意一个
^:匹配开头
$:匹配结尾
\:转义后面的特殊字符
扩展元字符
+:匹配前面的正则表达式出现至少一次
?:匹配前面的正则表达式出现零次或一次
|:匹配它前面或后面的正则表达式
grep12345678910111213141516171819202122232425262728293031323334353637[root@localhost ~]# grep password /root/anaconda-ks.cfg# Root password[root@localhost ~]# grep pass.... /root/anaconda-ks.cfgauth --enableshadow --passalgo=sha512# Root password[root@localhost ~]# grep pass....$ /root/anaconda-ks.cfg# Root password[roo ...
Linux使用 -- 脚本控制
优先级控制
使用nice和renice来调整脚本优先级
避免出现不可控的死循环(导致CPU占用过高或死机)
Fork炸弹123456789101112131415161718# 大部分限制对root无效[root@localhost ~]# ulimit -acore file size (blocks, -c) 0data seg size (kbytes, -d) unlimitedscheduling priority (-e) 0file size (blocks, -f) unlimitedpending signals (-i) 3795max locked memory (kbytes, -l) 64max memory size (kbytes, -m) unlimitedopen files (-n) 1024pipe size (512 bytes, -p) 8POSIX ...
Linux使用 -- Shell
转义 + 引用
特殊字符
一个字符不仅有字面意义,还有元意(meta-meaning)
如# ; \ " '
转义
\n \r \t
\$ \" \\
引用
":不完全引用,解析里面的变量
':完全引用,不做任何解析
`:运行命令
12345678[root@localhost ~]# echo "$a"[root@localhost ~]# echo "\$a"$a[root@localhost ~]# echo " abc"x"edf " abcxedf[root@localhost ~]# echo " abc\"x\"edf " abc"x"edf
12345[root@localhost ~]# var1=123[root@localhost ~]# echo "$var1"123[root@localhost ~]# echo '$var'$var ...
Linux使用 -- 变量
命名规则
字母、数字、下划线
不以字母开头
赋值
基本概念
Shell变量是弱类型的变量
方式
变量名=变量值
a=123,等号左右不能出现空格
使用let为变量赋值
let a=10+20,Shell是解释性语言,尽量不要进行运算
将命令赋值给变量
l=ls
将命令结果赋值给变量,使用$()或者``
letc=$(ls -l /etc)
变量值有空格等特殊字符可以包含在""或者''中
a='hello world'
1234567[root@localhost ~]# a=123[root@localhost ~]# a =123-bash: a: 未找到命令[root@localhost ~]# a = 123-bash: a: 未找到命令[root@localhost ~]# a= 123-bash: 123: 未找到命令
123[root@localhost ~]# l=ls[root@localhost ~]# $lanaconda-ks.cfg a.sh a.txt b.txt combine ...
Linux使用 -- 管道 + 重定向
管道
管道是进程通信的方式
信号也是进程通信的方式,例如kill -9 pid是让进程处于某种运行状态
匿名管道(管道符|)是Shell编程经常用到的通信工具
管道符是|,将前一个命令执行的结果传递给后面的命令
;只是隔开多条命令,顺序执行,命令之间没有任何关系
Session A1234567$ cat | tail -f | ps -fUID PID PPID C STIME TTY TIME CMDroot 2348 2344 0 16:12 pts/1 00:00:00 -bashroot 2971 2348 0 19:13 pts/1 00:00:00 catroot 2972 2348 0 19:13 pts/1 00:00:00 tail -froot 2973 2348 0 19:13 pts/1 00:00:00 ps -f
cat的本质:将文本内容作为输入,与终端建立连接
管道符|给两边的外部命令分别创建了对应的子进程,对应pid为2971 ...
Linux使用 -- 执行脚本方式
2.sh12345#!/bin/bash# demo 2.shcd /tmppwd
执行方式子进程bash ./filename.sh在当前终端下面产生一个bash子进程,bash子进程再去解释filename.sh(不需要x权限)
12345678[root@localhost ~]# ll 2.sh-rw-r--r--. 1 root root 37 10月 16 16:30 2.sh[root@localhost ~]# bash 2.sh/tmp[root@localhost ~]# pwd/root
./filename.sh同样产生一个子进程,但使用的是Sha-Bang(即#!)来解释filename.sh
12345678910[root@localhost ~]# ./2.sh-bash: ./2.sh: 权限不够[root@localhost ~]# chmod u+x 2.sh[root@localhost ~]# ./2.sh/tmp[root@localhost ~]# pwd/root
当前进程source ./filename.sh在当前进程 ...