《鸟哥的Linux私房菜基础学习篇》总结,本文为第三部分:学习shell 与shell script(9-11章)
9 vim程序编辑器
-
Linux 底下的配置文件多为文本文件,故使用 vim 即可进行设定编辑;
-
vim 可视为程序编辑器,可用以编辑 shell script, 配置文件等,避免打错字;
-
vi 为所有 unix like 的操作系统都会存在的编辑器,且执行速度快速;
-
vim 有三种模式,一般指令模式可变换到编辑与指令列模式,但编辑模式与指令列模式不能互换;
-
常用按键有
i
,[Esc]
,:wq
等; -
vim 的画面大略可分为两部份,(1)上半部的本文与(2)最后一行的状态+指令列模式;
-
数字是有意义的,用来说明重复进行几次动作的意思,如 5yy 为复制 5 列之意;
-
光标的移动中,
G
经常使用,尤其是 1G, G 移动到文章的头/尾功能; -
vim 的取代功能
:n1,n2s/old/new/g
要特别注意学习; -
小数点
.
为重复进行前一次动作,也是经常使用的按键功能; -
进入编辑模式:
i,
o
,R
,尤其是新增一列的 o 与取代的 R; -
vim 会主动的建立 swap 暂存档,所以不要随意掉线;
-
如果在文章内有对齐的区块,可以使用 [ctrl]-v 进行复制/贴上/删除的行为;
-
使用
:sp
功能可以分区窗口; -
若使用 vim 来撰写网页,若需要 CSS 元素数据,可透过 [crtl]+x, [crtl]+o 这两个连续组合按键来取得关键词;
-
vim 的环境设定可以写入在 ~/.vimrc 文件中;
-
可以使用
iconv
进行文件语系编码的转换; -
使用 dos2unix 及 unix2dos 可以变更文件每一列的行尾断行字符。
-
vim常用指令示意图:
10 认识与学习Bash
-
由于核心在内存中是受保护的区块,因此我们必须要通过 Shell 将我们输入的指令与 Kernel 沟通,让 Kernel 可以控制硬件来正确无误的工作;
-
操作系统合法的 shell 均写在 /etc/shells 文件中;
-
用户默认登录取得的 shell 记录于 /etc/passwd 的最后一个字段;
-
bash 的功能主要有:历史命令、命令与文件补全功能、命令别名设定功能、工作控制、前台后台控制、程序化脚本、通配符;
-
type
命令可以用来找到执行指令为何种类型,亦可用于与 which 相同的功能; -
变量就是以一组文字或符号等,来取代一些设定或者是一串保留的数据,变量主要有环境变量与自定义变量,或称为全局变量与局部变量;
- 使用
env
命令与export
命令可观察环境变量,其中export
命令可以将自定义变量转成环境变量,set
命令可以观察目前 bash 环境下的所有变量,$?
亦为变量,是前一个指令执行完毕后的回传值,在 Linux 回传值为 0 代表执行成功; locale
命令可用于观察语系数据;- 可用
read
命令让用户由键盘输入变量的值;
- 使用
-
可使用
alias和unalias
设置命令别名; -
ulimit
命令可用以限制用户使用系统的资源情况 -
bash 的配置文件主要分为 login shell 与 non-login shell,ogin shell 主要读取 /etc/profile 与 ~/.bash_profile,non-login shell 则仅读取 ~/.bashrc;
-
bash默认的组合键:
组合按键 执行结果 Ctrl + C 终止目前的命令 Ctrl + D 输入结束 (EOF) Ctrl + M Enter Ctrl + S 暂停屏幕的输出 Ctrl + Q 恢复屏幕的输出 Ctrl + U / K 在提示字符下,向前/后删除命令串 Ctrl + A / E 让光标移动到整个命令串的最前 / 最后面 Ctrl + Z 暂停目前的命令 -
通配符:
符号 意义 * 代表 0 个到无穷多个任意字符 ? 代表一定有一个任意字符 [ ] 代表一定有一个在括号内的字符(非任意字符) [ - ] 代表在编码顺序内的所有字符 [^ ] 反向选择 -
特殊符号
-
数据流重定向通过
>, 2>, <
之类的符号将输出的信息转到其他文件或设备去; -
连续命令的执行可通过
; && ||
等符号来处理 -
管道命令的重点:
- 管道命令仅会处理 standard output,对于 standard error output 会予以忽略;
- 管道命令必须要能够接受来自前一个指令的数据成为 standard input 继续处理才行;
- 本章介绍的管线命令主要有:
- 选取命名:
cut
,grep
; - 排序命令:
sort
,wc
,uniq
; - 双向重定向:
tee
; - 字符转换命令:
tr
,col
,join
,paste
,expand
; - 划分命令:
split
; - 参数代换:
xargs
等。
- 选取命名:
11 正则表达式与文件格式化处理
-
正则表达式就是处理字符串的方法,他是以行为单位来进行字符串的处理行为;
-
正则表达式通过一些特殊符号的辅助,可以让使用者轻易的达到查找、删除、替换某特定字符串的处理程序;
-
只要工具程序支持正则表达式,那么该工具程序就可以用来作为正则表达式的字符串处理之用;
-
正则表达式与通配符是完全不一样的东西,通配符 (wildcard) 代表的是 bash 操作接口的一个功能, 但正则表达式则是一种字符串处理的表示方式;
-
使用 grep 或其他工具进行正则表达式的字符串比对时,因为编码的问题会有不同的状态,因此, 最好将 LANG 等变量设定为 C 或者是 en 等英文语系;
-
grep 与 egrep 在正规表示法里面是很常见的两个程序,其中, egrep 支持更严谨的正则表达式的语法;
-
由于编码系统的不同,不同的语系 (LANG) 会造成正规表示法选取数据的差异,因此可利用特殊符号如[:upper:] 来替代编码范围较佳;
特殊符号 代表意义 [:alnum:] 代表英文大小写字符及数字,亦即 0-9, A-Z, a-z [:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z [:blank:] 代表空格键与 [Tab] 按键两者 [:digit:] 代表数字而已,亦即 0-9 [:lower:] 代表小写字符,亦即 a-z [:upper:] 代表大写字符,亦即 A-Z [:print:] 代表任何可以被打印出来的字符 [:cntrl:] 代表键盘上面的控制按键,亦即包括 CR, LF, Tab, Del… 等等 [:space:] 任何会产生空白的字符,包括空格键, [Tab], CR 等 -
由于严谨度的不同,正规表示法之上还有更严谨的延伸正则表达式;
-
基础正则表达式的特殊字符有: *, ., [], [-], [^], ^, $ 等;
-
扩展正则表达式,如
egrep
支持扩展正则表达式; -
常见的支持正则表达式的工具软件有: grep , sed, vim 等;
-
printf
可以通过一些特殊符号来将数据进行格式化输出; -
awk
可以使用字段为依据,进行数据的重新整理与输出; -
文件的比对中,可利用
diff
指令及cmp
指令进行比对,其中 diff 主要用在纯文本文件方面的新旧版本比对; -
patch
指令可以将旧版数据更新到新版 (主要亦由 diff 建立 patch 的补丁来源文件);