Linux
type
status
date
slug
summary
tags
category
icon
password
Property
 

年鉴

20世纪60年代,MIT开发分时操作系统(Compatible TIme-Sharing System),支持30台终端访问主机;主机负责运算,而终端负责输入输出;
1965年,Bell实验室、MIT、GE(通用电气公司)准备开发Multics系统,为了同时支持300个终端访问主机,但是1969年失败了;刚开始并没有鼠标、键盘,输入设备只有卡片机,因此如果要测试某个程序,则需要将读卡纸插入卡片机,如果有错误,还需要重新来过;Multics:Multiplexed Information and Computing Service
1969年,Ken Thompson(C语言之父)利用汇编语言开发了FIle Server System(Unics,即Unix的原型)因为汇编语言对于硬件的依赖性,因此只能针对特定硬件;只是为了移植一款“太空旅游”的游戏;
1973年,Dennis Ritchie和Ken Thompson发明了C语言,而后写出了Unix的内核将B语言改成C语言,由此产生了C语言之父;90%的代码是C语言写的,10%的代码用汇编写的,因此移植时只要修改那10%的代码即可;
1977年,Berkeley大学的Bill Joy针对他的机器修改Unix源码,称为BSD(Berkeley Software Distribution)Bill Joy是Sun公司的创始人;
1979年,Unix发布System V,用于个人计算机;
1984年,因为Unix规定:“不能对学生提供源码”,Tanenbaum老师自己编写兼容于Unix的Minix,用于教学;
1984年,Stallman开始GNU(GNU’s Not Unix)项目,创办FSF(Free Software Foundation)基金会;产品:GCC、Emacs、Bash Shell、GLIBC;倡导“自由软件”;GNU的软件缺乏一个开放的平台运行,只能在Unix上运行;自由软件指用户可以对软件做任何修改,甚至再发行,但是始终要挂着GPL的版权;自由软件是可以卖的,但是不能只卖软件,而是卖服务、手册等;
1985年,为了避免GNU开发的自由软件被其他人用作专利软件,因此创建GPL(General Public License)版权声明;
1988年,MIT为了开发GUI,成立了XFree86的组织;
Bash和Shell
type
status
date
slug
summary
tags
category
icon
password
Property
 
 
计算机硬件是由运算器、控制器、存储器、输入/输出设备等共同组成的,而让各种硬件设备各司其职且又能协同运行的东西就是系统内核。Linux系统的内核负责完成对硬件资源的分配、调度等管理任务。
系统内核对计算机的正常运行来讲是太重要了,一般不建议直接去编辑内核中的参数,而是让用户通过基于系统调用接口开发出的程序或服务来管理计算机,以满足日常工作的需要。
notion image
Shell就是这样的一个命令行工具。Shell(也称为终端或壳)跟 kernel(内核)相对应,比喻内核外面的一层,充当的是人与内核(硬件)之间的翻译官,用户把一些命令“告诉”终端,它就会调用相应的程序服务去完成某些工作。
 
首先,Shell 是一个程序,提供一个与用户对话的环境。这个环境只有一个命令提示符,让用户从键盘输入命令,所以又称为命令行环境(command line interface,简写为 CLI)。Shell 接收到用户输入的命令,将命令送入操作系统执行,并将结果返回给用户。 其次,Shell 是一个命令解释器,解释用户输入的命令。它支持变量、条件判断、循环操作等语法,所以用户可以用Shell命令写出各种小程序,又称为脚本(script)。这些脚本都通过 Shell 的解释执行,而不通过编译。
notion image
Shell 有很多种,只要能给用户提供命令行环境的程序,都可以看作是 Shell,主要的 Shell 有下面这些:
  • Bourne Shell(sh)
  • Bourne Again shell(bash)
Vim编辑器
type
status
date
slug
summary
tags
category
icon
password
Property
 
 
Vim编辑器中设置了三种模式—命令模式、末行模式和编辑模式,每种模式分别又支持多种不同的命令快捷键,大大提高了工作效率
notion image
  • 命令模式:控制光标移动,可对文本进行复制、粘贴、删除和查找等工作
  • 输入模式:正常的文本录入
  • 末行模式:保存或退出文档,以及设置编辑环境
 
每次运行Vim编辑器时,默认进入命令模式,此时需要先切换到输入模式后再进行文档编写工作,而每次在编写完文档后需要先返回命令模式,然后再进入末行模式,执行文档的保存或退出操作。在Vim中,无法直接从输入模式切换到末行模式。
Vim中常用的命令
命令
作用
模式扩展
type
status
date
slug
summary
tags
category
icon
password
Property
 
Shell接收到输入的命令后,会根据空格将用户的输入,拆分成一个个词元(token)。然后,扩展词元里面的特殊字符,扩展完成后才会调用相应的命令。这种特殊字符的扩展,称为模式扩展(globbing)。其中有些用到通配符,又称为通配符扩展(wildcard expansion)
 
Bash是先进行扩展,再执行命令。因此,扩展的结果是由 Bash 负责的,与所要执行的命令无关。命令本身并不存在参数扩展,收到什么参数就原样执行。
模式扩展与正则表达式的关系是,模式扩展早于正则表达式出现,可以看作是原始的正则表达式。它的功能没有正则强大灵活,但优点是简单和方便。
Bash允许用户关闭扩展:
重新打开扩展:
 
 
Bash一共提供八种扩展:
Bash 变量
type
status
date
slug
summary
tags
category
icon
password
Property

 
Bash 变量分成环境变量和自定义变量两类

环境变量

环境变量是Bash环境自带的变量,进入Shell时已经定义好了,可以直接使用。它们通常是系统定义好的,也可以由用户从父Shell传入子Shell
env命令或printenv命令,可以显示所有环境变量:
一些常见的环境变量:
  • BASHPID:Bash 进程的进程 ID。
字符串
type
status
date
slug
summary
tags
category
icon
password
Property
目录
目录

Bash 只有一种数据类型,就是字符串。不管用户输入什么数据,Bash 都视为字符串。
 

转义

某些字符在Bash里有特殊含义(比如$&*)。
输出$date不会有任何结果,因为$是一个特殊字符。如果想要原样输出这些特殊字符,就必须在它们前面加上反斜杠,使其变成普通字符。这就叫做转义(escape)
 
运算
type
status
date
slug
summary
tags
category
icon
password
Property
 

 

算术表达式 

((...))语法可以进行整数的算术运算
 
((...))会自动忽略内部的空格,所以下面的写法都正确,得到同样的结果。
行操作
type
status
date
slug
summary
tags
category
icon
password
Property
 
目录
目录

 
Bash内置了Readline库,具有这个库提供的很多“行操作”功能,比如命令的自动补全,可以大大加快操作速度。默认采用 Emacs 快捷键,也可以改成 Vi 快捷键。
 
如果想永久性更改编辑模式(Emacs / Vi),可以将命令写在~/.inputrc文件,这个文件是 Readline 的配置文件。
 
脚本(script)
type
status
date
slug
summary
tags
category
icon
password
Property
 

 
脚本(script)就是包含一系列命令的一个文本文件。Shell 读取这个文件,依次执行里面的所有命令,就好像这些命令直接输入到命令行一样。所有能够在命令行完成的任务,都能够用脚本完成。
脚本的好处是可以重复使用,也可以指定在特定场合自动调用,比如系统启动或关闭时自动执行脚本。
 

Shebang 行

脚本的第一行通常是指定解释器,即这个脚本必须通过什么解释器执行。这一行以#!字符开头,这个字符称为Shebang,所以这一行就叫做 Shebang 行。
read
type
status
date
slug
summary
tags
category
icon
password
Property
 
 
有时,脚本需要在执行过程中,由用户提供一部分数据,这时可以使用read命令。它将用户的输入存入一个变量,方便后面的代码使用。用户按下回车键,就表示输入结束。
read命令的格式如下。
options是参数选项,variable是用来保存输入数值的一个或多个变量名。如果没有提供变量名,环境变量REPLY会包含用户输入的一整行数据。
 
demo.sh
上面例子中,先显示一行提示文本,然后会等待用户输入文本。用户输入的文本,存入变量text,在下一行显示出来。
 
条件判断和循环
type
status
date
slug
summary
tags
category
icon
password
Property
 

条件判断

if 结构

if是最常用的条件判断结构,只有符合给定条件时,才会执行指定的命令:
这个命令分成三个部分:ifelifelse,后两个部分是可选的。
 
if关键字后面是主要的判断条件,elif用来添加在主条件不成立时的其他判断条件,else则是所有条件都不成立时要执行的部分。
1
...
34567
...
78