🍐1 硬件、核心与shell:
🍌概念
主管kernel的控制工作,通过shell将我们输入的指令与kernel沟通,好让kernel可以控制硬件来工作
shell提供了使用者使用os的一个接口,其本质是调用其他的应用程序(man, chmod 等等)来调用kernel实现功能
h/w | Kernel | user 关系如下:
🍎种类:
Bourne Shell(Sh)
C Shell (sun使用)
KSHell
TCsh
Bourne SHell(bash)是sh的增强版本,linux使用的常见版本
ps:第一个流行的shell是Steven bourne发明的,为了纪念他bash才叫bourne shell哦!
默认登录使用的shell在/etc/passwd中记录!
🍉功能:
命令编修能力(history) 指令记录保存在主文件夹的==.bash_history==中,为上一次登录的指令记录,本次的会先存在内存中,退出了才写入history!
命令与文件补全(tab)
设置别名(alias)
可直接在命令行设置:
例如: alias lm = 'ls -al'
工作控制,前景背景控制?
脚本(scripts)
万用字符(Wildcard)
🫒查看指令是否为bash内置指令
type命令:
🥭2. shell变量功能
🫛变量:
以一组文字或者符号,来取代一些设置或者是保留一串数据 可变性与方便性 脚本设计的好帮手(更换时只需要修改少量代码)
🥐变量取用,设置,取消
echo + $: 取得变量内容
规则:
等号
不能直接接空格(可用 \, "", ''解决)
嵌套指令(``或者 $)
扩增变量内容($)
其他子程序执行该变量(export设置成环境变量)
unset取消变量
🥒环境变量
PATH定义:os ➡ PATH ➡ 去PATH路径中搜索
env:列出目前shell环境下所有的环境变量与其内容
set:观察所有变量(环境变量 + 自定变量)
PS:命令提示符,每次按下enter后自动会读取的变量值,PS有很多自带的符号意义,比如"[\u@\h\W]$" ➡ "[qhr@ubuntu ~]$"
$:关于本shell 的pid
?:上个执行指令的回传值
OSTYPE HOSTTYPE MACHTYPE :主机硬件与核心等级
export:
环境变量与自订变量区别:在于是否会被==子程序==继承! 父子程序示例:
export的作用:让自定变量能继续在子程序中使用
ps:declare可以让环境变量转化为自订变量
🍋🟩语系变量
Linux支持的语系查询: locale -a ps:仅设置LANG和LC_ALL的话,其他的语系变量也会被这两个的取代
系统修改语系: /etc/locale.conf
暂时修改:修改LANG和LC_ALL变量(LC_ALL要用export)
🍇变量的有效范围
前面说过通过export可将自订变量转换成环境变量
原理:
启动shell,os会给shell分配内存,shell将其环境变量写入内存
export让自订变量也写入shell的内存,这样相当于变成了”环境变量“!
子程序调用时,会将shell的内存信息写入自己的内存块中,实现父子的继承
🐝变量键盘读取、阵列与宣告:read, array, declare
read:
declare/typeset:
作用:宣告变量的类型
var[index] = content阵列变量:
🧅与文件系统及程序的限制关系: ulimit
ulimit作用:限制使用者的某些系统资源,包括可以打开的文件数量,可以使用的cpu时间,内存总量等等
复原方式:登出再登录,否则就需要重新设置ulimit
3 🧄变量内容的删除、取代、替换(optional)
作用:变量内容的==微调==
1. 删除
#:从变量内容的最前面开始向右删除,且仅删除最短的 ##:从变量内容最前面开始向右删除,且仅删除最长的
示例:
\%:从后面往前删除,最短 \%\%:从后面往前删除,最长
2.取代
下划线/:第一个旧字串会被新子串取代 双下划线//:全部旧子串会被新子串取代
3.测试替换
横杠-:若变量存在则返回值,不存在则创建,以-后的内容作为变量的值
ps:避免空子串赋值,可以在大括号里加上冒号”:“来避免
🥥 命令别名与历史命令
alias: 设置别名 alias xx = 'xxx '
unalias: 取消设置
history:
ps:history不仅可以查询,还可以帮我们简化执行命令(无法记录时间但是)
🧄4 Bash shell 的操作环境
4.1 路径与指令搜索顺序
绝对相对路径 ➡ alias查找 ➡ bash内置(builtin)指令 ➡ $PATH
type -a 命令
:
4.2 bash的进站与欢迎信息
/etc/issue:==展示登录欢迎信息== 内部含有的代码(与PS1变量功能类似)
/etc/mtod: 可写入信息在登录时展示
4.3 bash的环境配置文件
4.3.1 login shell与 non-login shell
login shell:取得bash需要完整的登录流程
non-login shell:取得bash不需要重复登录的举动
配置文件:
/etc/profile:系统整体设置,最好不修改 ➡ login-shell才有
包含一些变量,比如PATH, MAIL,USER, HOSTNAME,HISTSIZE, umask
/etc/profile还会读取
/etc/profile.d/ *.sh(包含多个sh后缀文件) ➡ 调用/etc/loace.conf(从/etc/profile.d/lang.sh调用)
/etc/profile.d/bash_complemention.sh ➡ 调用/usr/share/bash-complemention/completions/ *
下三种属于使用者个人配置, 也是login-shell才会读取,只读下面三个文件的其中一个,若不存在就按顺序度下一个。
~/.bash_profile:
~/.bash_login
~/.profile
综上,整个bash的配置文件读取流程可以这么描述:
实线为主线流程,虚线的方向为被调用的配置文件。
4.3.2 source
作用:读入环境配置文件的指令
区别于/etc/profile:不需要login-shell登出后再登入才能使用,而是直接启动则加载
示例:
~/.bashrc: non-login shell下只会读取该配置文件
其他相关配置文件
/etc/man_db.conf : 规定了下达man的时候,去哪里查看素具的路径设置(偶尔需要把某个命令的man文件手动添加在mandb.conf中)
~/.bash_history:获取命令执行记录
~/.bash_logout: 记录了登出bash时,系统需要做的一系列离开前的操作(默认只是清空屏幕讯息)
4.4 终端机的环境设置: stty, set
stty(setting tty):
查询目前一些按键内容(-a),设置组合hotkey对应的功能(stty 【功能】 【hotkey】)
set:除了设置一些变量之外,还可以设置指令输入/输出环境
4.5 万用字符和特殊字符
万用字符:
特殊字符:
🍖5. 数据流重导向
5.1 重定向类型
std output 指的是指令执行所回传的正确的讯息
std error output 指的是指令执行失败后,所回传的错误讯息
std in 指的是将原本需要由键盘输入的数据,改由文件内容来取代
5.1.2 重定向传送的特殊字符形式
5.1.3重定向的方法(覆盖 or 累加?)
分别存入不同文件(正确 or 错误)
5.1.4 /dev/null 垃圾桶黑洞设备与特殊写法
错误信息导入黑洞
正确和错误信息写入同一个文件
5.2 命令执行的判断依据: ;,&&,||
如何做到一次性执行很多指令?
shell script(后续学习)
一次输入多重命令
5.2.1 cmd ;cmd
在指令与指令中间利用分号(;)隔开,这样会连续执行多条命令
5.2.2 $?(指令回传值)与 && 或 ||
运用场景:两个指令之间存在相依性,主要是判断前一个指令是否执行正确
ps:==若前一个指令执行的结果为正确,在Linux下会回传一个 $? = 0 的值
🥗6. 管线命令(pipe)
符号: |
作用: 仅能处理经由前面一个指令传来的正确信息,也就是standard output的信息,对于standard error 并没有直接处理的能力
示意图如下:
ps: 管线命令必须要接受来自前一个指令的数据,否则无效
6.1 撷取命令: cut,grep
cut:==以行为单位==将一段讯息”切“出来
示例:
grep:在一段讯息中,按行分析,==取出所需要信息的行==
示例:
6.2 排序命令
sort: 排序命令
uniq:使重复的数据仅列出一个显示
wc:word count 统计行数,字数,字符数
6.3 双向重导向: tee
tee:同时将数据流分送到文件和屏幕
6.4 字符转换命令
tr:删除或者替换
col:可以简单处理tab为对等的空白键
join: 两个文件当中,有”相同数据“的那一行,才将他加在一起 在处理多个有相关性的文件的时候,很方便将有相关性的数据结合在一起查看
ps:使用join之前要先用sort进行排序,否则可能有些比对的项目会被略过!
expand: 将tab转换成空白键
6.5 分区命令
split: 大文件分区(按大小,按行)
xargs: xargs可以读取stdin的数据,并且以空白字符或者断行字符作为分辨,将stdin的数据分割为arguments ps:很多数据并不支持管线命令,用xargs可以引用stdin的数据来处理!!
6.7 减号-的用途
在管线命令中,若某些指令需要用到文件名称(但在管线中可能是stdin或者stdout)时,可以用”-“来代替stdin,stdout