【BASH】回顾与知识点梳理 七
- 七. 前六章知识点总结及练习
- 7.1 总结
- 7.2 练习
该系列目录 --> 【BASH】回顾与知识点梳理(目录)
七. 前六章知识点总结及练习
7.1 总结
- 由于核心在内存中是受保护的区块,因此我们必须要透过『 Shell 』将我们输入的指令与 Kernel 沟通,好让 Kernel 可以控制硬件来正确无误的工作。用户不能直接操作内核,如果要操作内核只能通过两个途径:
- 调用system call接口
- glibc为用户封装了库函数,用户通过glibc间接调用system call接口
- 学习 shell 的原因主要有:文字接口的 shell 在各大 distribution 都一样;远程管理时文字接口速度较快;shell 是管理 Linux 系统非常重要的一环,因为 Linux 内很多控制都是以 shell 撰写的。
- 系统合法的 shell 均写在 /etc/shells 文件中;
[root@node-135 ~]# cat /etc/shells /bin/sh /bin/bash /usr/bin/sh /usr/bin/bash
- 用户默认登入取得的 shell 记录于 /etc/passwd 的最后一个字段;
- bash 的功能主要有:命令编修能力;命令与文件补全功能;命令别名设定功能;工作控制、前景背景控制;程序化脚本;通配符
- type 可以用来找到执行指令为何种类型,亦可用于与 which 相同的功能;主要参数:
-p -t -a
- 变量就是以一组文字或符号等,来取代一些设定或者是一串保留的数据
- 变量主要有环境变量与自定义变量,或称为全局变量与局部变量
- 使用 env 与 export 可观察环境变量,其中 export 可以将自定义变量转成环境变量;
declare/typeset -x
和export用法和功能相同 - set 可以观察目前 bash 环境下的所有变量;unset取消变量
- $? 亦为变量,是前一个指令执行完毕后的回传值。在
Linux 回传值为 0 代表执行成功
; - locale 可用于观察语系资料;
- 可用 read 让用户由键盘输入变量的值;主要参数:
-p -t
- ulimit 可用以限制用户使用系统的资源情况;常用参数:
-u -f -n
- bash 的配置文件主要分为 login shell 与 non-login shell。login shell 主要读取 /etc/profile 与 ~/.bash_profile,non-login shell 则仅读取 ~/.bashrc
- 在使用 vim 时,若不小心按了 [crtl]+s 则画面会被冻结。你可以使用 [ctrl]+q 来解除冻结
- 通配符主要有:
*, ?, []
等等 - 数据流重导向透过 >, 2>, < 之类的符号将输出的信息转到其他文件或装置去;
- 连续命令的下达可透过 ; && || 等符号来处理
- 管线命令的重点是:『管线命令仅会处理 standard output,对于 standard error output 会予以忽略』 『管线命令必须要能够接受来自前一个指令的数据成为 standard input 继续处理才行。』
- 管线命令主要有:
cut, grep, sort, wc, uniq, tee, tr, col, join, paste, expand, split, xargs
等,有些命令虽然不是管线命令,但仍可以和管线命令组合使用,例如ls
7.2 练习
- 情境模拟题一:由于 ~/.bash_history 仅能记录指令,我想要在每次注销时都记录时间,并将后续的指令 50 笔记录下来, 可以如何处理?
o 目标:了解 history ,并透过数据流重导向的方式记录历史命令;
o 前提:需要了解本章的数据流重导向,以及了解 bash 的各个环境配置文件信息。
答:其实处理的方式非常简单,我们可以了解 date 可以输出时间,而利用 ~/.myhistory 来记录所有历史记录,而目前最新的 50 笔历史记录可以使用 history 50 来显示,故可以修改 ~/.bash_logout 成为底下的模样:
[dmtsai@study ~]$ vim ~/.bash_logout
date >> ~/.myhistory
history 50 >> ~/.myhistory
- 在 Linux 上可以找到哪些 shell(举出三个) ?那个文件记录可用的 shell ?而 Linux 预设的 shell 是?
bashshcsh/etc/shellsbash
- 你输入一串指令之后,发现前面写的一长串数据是错的,你想要删除游标所在处到最前面的指令串内容,应该如何处理?
ctrl + u
ctrl + k 向后删
ctrl + a 移动行首
ctrl + e 移到行尾 - 在 shell 环境下,有个提示字符 (prompt),他可以修改吗?要改什么?默认的提示字符内容是?
可以
环境变量PS1
$,『[\u@\h \W]$』==> [“目前使用者的账号名称”@“仅取主机名在第一个小数点之前的名字” “当前工作目录名”]$ - 如何显示 HOME 这个环境变量?
[root@node-135 ~]# echo $HOME
/root
- 如何得知目前的所有变量与环境变量的设定值?
环境变量:env,export
所有变量:decaler,set
[root@node-135 ~]# abcde=1234
[root@node-135 ~]# env|grep abcde
[root@node-135 ~]# export|grep abcde
[root@node-135 ~]# declare|grep abcde
abcde=1234
[root@node-135 ~]# set|grep abcde
abcde=1234
- 我是否可以设定一个变量名称为 3myhome ?
不可以,变量名有数字、字母和下划线组成,第一位不可以是数字 - 在这样的练习中『A=B』且『B=C』,若我下达『unset $A』,则取消的变数是 A 还是 B?
B
unset $A 相当于 unset B - 如何取消变量与命令别名的内容?
unset unalias - 如何设定一个变量名称为 name 内容为 It’s my name ?
name=“It’s my name” - bash 环境配置文件主要分为哪两种类型的读取?分别读取哪些重要文件?
login-shell/no-login-shell
login-shell读取/etc/profile和~/.bash_profile
no-login-shell读取~/.bashrc - CentOS 7.x 的 man page 的路径配置文件案?
/etc/man_db.conf - 试说明 ', ", 与
这些符号在变量定义中的用途? 双单引号':标记字符串,字符串内容不支持转义 双双引号":标记字符串,字符串内容支持转义 双撇\
:用于执行其内的命令,同$() - 跳脱符号 \ 有什么用途?
- 在echo -e 字符串中能够转义
[root@node-135 ~]# echo -e "123\t123">123 [root@node-135 ~]# cat 123 123 123
- 成为一般字符
[root@node-135 ~]# echo "\"it is cat"\" "it is cat" [root@node-135 ~]# echo "it is cat" it is cat
- 逃脱符号,命令过长能进行换行
- 连续命令中, ;, &&, || 有何不同?
;:命令顺序执行,cmd1 ; cmd2,不管前一个命令cmd1 是否成功,cmd2都会执行
&&:cmd1 && cmd2 ,cmd1执行成功,执行cmd2。cmd1执行失败,不执行cmd2。
||:cmd1 || cmd2 ,cmd1执行成功,不执行cmd2。cmd1执行失败,执行cmd2。 - 如何将 last 的结果中,独立出账号,并且印出曾经登入过的账号?
last|cut -d' ' -f 1
last|cut -d' ' -f 1|sort |uniq
- 请问 foo1 && foo2 | foo3 > foo4 ,这个指令串当中, foo1/foo2/foo3/foo4 是指令还是文件? 整串指令的意义为?
foo1,2,3指令,foo4文件
foo1执行失败,则程序结束
foo1执行成功,foo2执行成功,把stdout输出给foo3作为stdin,执行foo3,foo3执行完成后的结果输出给foo4
foo1执行成功,foo2执行失败,把空输出给foo3作为stdin,执行foo3,foo3执行完成后的结果输出给foo4,foo4里什么都没有 - 如何秀出在 /bin 底下任何以 a 为开头的文件文件名的详细资料?
[root@node-135 ~]# ls /bin/a* -l
- 如何秀出 /bin 底下,文件名为四个字符的文件?
ls -ld /bin/????
- 如何秀出 /bin 底下,档名开头不是 a-d 的文件?
ll /bin/[^a-d]*
- 我想要让终端机接口的登入提示字符修改成我自己喜好的模样,应该要改哪里?(filename)
[root@node-135 ~]# cat /etc/issue
\S (terminal: \l)
Date: \d \t
Kernel \r on an \m
Welcome!
- 承上题,如果我是想要让使用者登入后,才显示欢迎讯息,又应该要改哪里?
[root@node-135 ~]# cat /etc/motd
Hello everyone,
Our server will be maintained at 2015/07/10 0:00 ~ 24:00.
Please don't login server at that time. ^_^
该系列目录 --> 【BASH】回顾与知识点梳理(目录)