什么是Linux,怎么又多出了一个Unix?
在知道它是什么之前,我们先来了解一下它是怎么来的
1969年,在kenthompson在AT&T贝尔实验室出生,说的是汇编语言。
1973年,KenThompson和DennisRitchie教会了它C语言,让它走了出去正式面向大众。
首先它是一个操作系统,除了可以作为网络操作系统,还可以作为单机操作系统使用。Unix作为一种开发平台和台式操作系统获得了广泛使用,目前主要用于工程应用和科学计算等领域
现在UNIX系统的用户日益增多,应用范围也日益扩大。无论在各种类型的微型机、小型机,还是在中、大型计算机,以及在计算机工作站甚至个人计算机上,很多都已配有UNIX系统。不仅新推出的机型配有UNIX系统,而且一些历史较久的生产厂商,也竞相将原有机型配上UNIX系统以便打开销路、争取市场。
当然,Linux也是一种操作系统,但是比Unix出生的要晚。
1991年,芬兰赫尔辛基大学的学生Linux Torvals为了能在家里的PC机上使用与学校一样的操作系统,开始编写了类UNIX.
是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统,反正很好用就对了。。。
Red Hat(红帽)公司(NYSE:RHT)是一家开源解决方案供应商,也是标准普尔500指数成员,是我们比较熟知的一个Linux发行版本
CentOS(Community Enterprise Operating System,中文意思是社区企业操作系统)是Linux发行版之一,它是来自于Red Hat Enterprise Linux依照开放源代码规定释出的源代码所编译而成,跟Red Hat好像还挺亲的
接下来就是我们之后一直会用的Ubuntu,Ubuntu是一个以桌面应用为主的Linux操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu"一词,意思是“人性”“我的存在是因为大家的存在",是非洲传统的一种价值观。
从前人们认为Linux难以安装、难以使用,在Ubuntu出现后这些都成为了历史。
哈哈,所以我们就开始使用它吧!
在快乐的玩耍之前我们首先需要一个Ubuntu系统,这个吗?去官网下或者自行百度。
然后呢?有了它之后,我们的PC一般都是windows的吧!所以我们需要一个虚拟机来运行我们的Ubuntu
好的,我们就下了VMware(软件安装管家可以了解一下),然后一顿操作之后我们就可以在虚拟机上运行我们的Ubunto了,好的我们可以开始玩耍了。
VMware:
然后我们就进入到Ubunto的操作界面了!!!
好兴奋啊!我们要开始编程了吗?
还没,我们要先进入命令终端,知道怎么使用它之后。。。
因为是图像界面吗,所以可以直接点击打开
你是不是觉得这样一点都不高级,一点都不快捷啊
所以我们来点有趣的
Ctrl + Alt + T
我们就能打开一个终端了(Terminal是终端的英文容易记快捷键哦TTTTT)
这样我们就又打开了一个终端
接着我们可以再用用
Ctrl + Shift +T
我们就在同一终端打开了一个标签
好的,知道如何花式打开终端之后,我们就要开始看看如何使用终端
内容 | |
---|---|
命令名称 | pwd |
命令格式 | pwd [OPTION] … |
命令功能 | 用于显示当前的工作目录 |
OPTION | -L 从环境中使用pwd,即使它包含符号链接 |
-P 避免所有符号链接 | |
–help 显示该帮助并退出 | |
–version 显示版本信息并退出 |
内容 | |
---|---|
命令名称 | cd |
命令格式 | cd [dirname] |
命令功能 | 用于切换当前目录到目标目录 |
dirname | 要切换的目标目录 |
cd的基本用法实例
回到家目录
cd
回到上一级目录
cd ..
回到上一目录
cd -
到指定目录
cd ./pyystd/level2
内容 | |
---|---|
命令名称 | ls |
命令格式 | ls [OPTION] [FILE] |
命令功能 | 显示指定工作目录下的内容 |
OPTION | -a 显示所有文件及目录 |
-l 除文件名称外,将文件型态、权限、拥有者、文件大小等资讯详细列出 | |
-r 将文件以相反次序显示(原定依英文字母次序) | |
-t 将文件依建立时间之先后次序列出 | |
-R 若目录下有文件,则以下之文件亦皆依序列出 | |
FILE | 指定目录(为空是当前目录) |
ls的基本用法实例
显示当前目录内容
ls
显示以d开头的目录及目录下的所有文件
ls d*
显示所有文件目录
ls -a
若目录下有文件,则依次列出
ls -l
列出目录下文件及其详细信息
ls -r
以相反次序显示目录
ls -t
建立时间先后顺序显示
ls -R
列出指定地址里的目录
ls ./day2
内容 | |
---|---|
命令名称 | cat |
命令格式 | cat [OPTION] [FILE] |
命令功能 | |
OPTION | -n 由 1 开始对所有输出的行数编号 |
-b 和 -n 相似,只不过对于空白行不编号 | |
-s 当遇到有连续两行以上的空白行,就代换为一行的空白行 | |
FILE | 指定目录(为空是当前目录) |
cat基本用法实例
显示文件内容
cat hello.c
对文件进行行编号显示
cat -n hello.c
对文件进行行编号显示,空行不标号
cat -b hello.c
当遇到有连续两行以上的空白行,就代换为一行的空白行
cat -b hello.c
内容 | |
---|---|
命令名称 | head |
命令格式 | head [OPTION] [FILE] |
命令功能 | 连接文件并打印从头开始的指定内容到标准输出设备上 |
OPTION | -c 打印每个文件的前c个字节 |
-n 打印每个文件的前n行内容 | |
-q 不显示处理信息 | |
-v 显示详细的处理信息 | |
FILE | 指定目录(为空是当前目录) |
head基本用法实例
默认显示文件前10行
head s2.c
显示文件前100字节
head -c 100 s2.c
显示文件前20行
head -n 20 s2.c
显示详细的处理信息再默认显示前10行
head -v s2.c
内容 | |
---|---|
命令名称 | tail |
命令格式 | tail [OPTION] [FILE] |
命令功能 | 连接文件并打印从后开始的指定内容到标准输出设备上 |
OPTION | -c 打印每个文件的后c个字节 |
-n 打印每个文件的后n行内容 | |
-q 不显示处理信息 | |
-v 显示详细的处理信息 | |
FILE | 指定目录(为空是当前目录) |
tail的基本用法实例
默认显示文件后10行内容
tail s2.c
显示文件后200字符
tail -c 200 s2.c
显示文件后20行
tail -n 20 s2.c
显示文件的详细信息
tail -v s2.c
内容 | |
---|---|
命令名称 | touch |
命令格式 | touch [OPTION] [FILE] |
命令功能 | 创建一个文件或修改文件的属性 |
OPTION | -a 改变档案的读取时间记录 |
-m 改变档案的修改时间记录 | |
-c 假如目的档案不存在,不会建立新的档案 | |
-f 不使用,是为了与其他 unix 系统的相容性而保留 | |
-r 使用参考档的时间记录,与 --file 的效果一样 | |
-d 设定时间与日期,可以使用各种不同的格式 | |
-t 设定档案的时间记录 | |
FILE | 指定目录(为空是当前目录) |
touch的基本用法实例
创建文件
touch a.c
内容 | |
---|---|
命令名称 | rm |
命令格式 | rm [OPTION] [FILE] |
命令功能 | 删除一个文件或目录 |
OPTION | -i 删除前逐一询问确认 |
-f 即使原档案属性设为唯读,亦直接删除,无需逐一确认 | |
-r 将目录及以下之档案亦逐一删除(用于删除目录) | |
FILE | 指定目录(为空是当前目录) |
rm的基本用法实例
删除文件
rm a.c
删除文件时查询
rm -i a.c
删除文件夹
rm -rf afile
内容 | |
---|---|
命令名称 | mv |
命令格式 | mv [OPTION] 文件名 文件名 将源文件名改为目标文件名 |
mv [OPTION] 文件名 目录名 将文件移动到目标目录 | |
mv [OPTION] 目录名 目录名 目标目录已存在,将源目录移动到目标目录 | |
命令功能 | 用来为文件或目录改名或将文件或目录移入其他位置 |
OPTION | -i 若指定目录已有同名文件,则先询问是否覆盖旧文件 |
-f 在mv操作要覆盖某已有的目标文件时不给任何指示 |
mv的基本用法实例
将文件的文件名aaa改为bbb
mv aaa bbb
将文件aaa移到unit4目录下
mv aaa ./unit4
将目录aaa移到unit4目录下
mv ./aaa ./unit4
内容 | |
---|---|
命令名称 | cp |
命令格式 | cp [OPTION] sourse dest |
命令功能 | 用于复制文件或目录 |
OPTION | -a 此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容 |
-d 复制时保留链接 | |
-f 覆盖已经存在的目标文件而不给出提示 | |
-i 与-f选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖 | |
-p 除复制文件的内容外,还把修改时间和访问权限也复制到新文件中 | |
-r 若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件 | |
-l 不复制文件,只是生成链接文件 | |
sourse | 源文件地址 |
dest | 目标文件地址 |
cp的基本用法实例
复制文件aaa到unit1目录
cp aaa ./unit1
复制目录aaa到unit1目录
cp -r aaa ./unit1
内容 | |
---|---|
命令名称 | mkdir |
命令格式 | mkdir [OPTION] dirname |
命令功能 | 建立名为dirname的子目录 |
OPTION | -m 设置建立模式 |
-p 确保目录名称存在,不存在的就建一个 | |
-v 为每个创建的文件夹打印一条消息 | |
dirname | 文件夹的名称 |
mkdir的基本用法实例
创建文件夹
mkdir aaa
内容 | |
---|---|
命令名称 | man |
命令格式 | man [章节] [内容] |
命令功能 | 在线参考手册 |
章节 | |
1 | 标准用户命令 |
2 | 系统调用 |
3 | 库函数 |
4 | 特殊文件(设备文件)的访问入口 |
5 | 文件格式(配置文件的语法),指定程序的运行特性 |
6 | 游戏 |
7 | 杂项 |
8 | 管理命令 |
9 | 跟kernel有关的文件 |
内容 | 需要查询帮助的内容 |
手册格式 | NAME 命令名称及功能简要说明 |
SYNOPSIS 用法说明,包括可用的选项 | |
DESRIPTION 命令功能的详细说明,可能包括每一个选项的意义 | |
OPTIONS 说明每一项的意义 | |
FILES 此命令相关的配置文件 | |
BUGS | |
EXAMPLES 使用示例 | |
SEE ALSO 另外参照 |
man 的基本用法实例
查询ls参考手册
man ls
对了,记得按q键退出帮助查询界面哦
vim由于要讲的东西很多,我们就单独放在后面详细讲讲
不过这里我可以先查查它的参数手册
man vi
vi是什么呢?
在上一节中我们已经通过man命令查看一下它的参考手册,但是还是一头雾水是不是。
现在我们就来正式介绍它
我们的vi编辑器
vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器
下面是它的键盘图欣赏一下(瑟瑟发抖)
当然这里不会讲解所有的命令,会讲解一些常用和好用的命令,其他的大家可以自己去扩展,有机会以后补充哦(主要是有些作者其实也不太会用-)
好的,好的,我们进入正题,下面的思维导图给大家理清了整个结构和我要讲解的内容,大家可以先大致了解一下vi的一些基本操作
可以看出在vi编辑器下,我们大致可以分为三种模式,也就是命令行模式(Command mode)、底行模式(Last line mode)和输入模式(Insert mode)。
命令行模式(Command mode):在命令行模式下用户可以输入命令来控制屏幕光标的移动,删除字符、单词或行,移动复制某区段,也可以进入到底行模式或者输入模式
底行模式(Last line mode):用户可以将文件保存或退出vi,也可以设置编辑环境,如查找字符串、显示行号等。
输入模式(Insert mode):用户只有在这个模式下才可以进行字符串输入
刚刚了解了三种模式,但是我们怎么才能进入vi编辑器呢?我们又该如何在不同的模式之间进行切换呢?不同模式又该如何使用呢?
可怕的三连问可难不倒我,现在就来一一进行解答
首先让我们看看该如何进入和退出vi编辑器
vi test1.c
这样 我们就进入到vi编辑器了,同时当我们进入到vi编辑器之后,我们所处的默认模式就是命令行模式
除了这么直接的进入方法之外,还可以稍微扩展一下
在命令终端输入
vi test1.c +3
这样在我们进入vi编辑器的同时,光标会定位到指定的位置,这种用法一般在进行改错的时候比较常用,某行出了问题可以直接跳转过去(是不是很方便啊!!!)
退出vi编辑器
既然已经进来了,现在就来看看怎么出去
出去方法也有好几种,看你想怎么出去咯
保存文档并退出
关于保存文档有两种方法,效果都是一样的,大家可以根据爱好自行选择使用
命令行模式(底行模式)——> 输入模式
在正式介绍之前,我们先来看个表格
指令 | 作用 |
---|---|
a | 从光标所在位置后面开始新增资料,光标后的资料随新增资料向后移动 |
A | 从光标所在列最后面的地方开始新增资料 |
i | 从光标所在位置前面开始插入资料,光标后的资料随新增资料向后移动 |
I | 从光标所在列的第一个非空白字符前面开始输入资料 |
o | 在光标所在列下新增一列,并进入输入模式 |
O | 在光标所在列上方新增一列,并进入输入模式 |
看过之后对于进入输入模式应该有了初步了解,接下来就来详细说说
在命令行模式下输入a
在命令行模式下输入A
然后我们在同样的位置
在命令行模式下输入i
在命令行模式下输入I
使用这个命令是不是觉得很方便添加注释
输入模式——>命令行模式(底行模式)
相对于命令行模式(底行模式)——> 输入模式,那么切换回去就相对简单了
只需要输入ESC(键盘左上角的那个)就能回到命令行模式
在vi编辑器下,这两个模式的区别其实不大,只需要输入:,命令行模式就会切换到底行模式等待底行命令的输入
光标就会移动到底行
是不是很简单呢!
介绍完模式之间的切换,我们来看看各个模式都能干什么解决最后一个问题
删除
如果我们想在命令行模式对内容进行删除操作
那么就输入s,删除光标所在的字符,并进入输入模式
这样就完成了字符的删除以及模式的切换
在命令行模式输入S,删除光标所在的行,并进入输入模式
指令 | 作用 |
---|---|
s | 删除光标所在的字符,并进入输入模式 |
S | 删除光标所在的行,并进入输入模式 |
剪切
在介绍剪切之前需要先介绍两个简单的命令
这两个命令使用,才能更好的观察剪切命令的使用效果
为了演示效果我们假设已经复制了该行
一个是p,将缓冲区的字符黏贴到光标所在的位置
一个是u,取消上一次的文本编辑操作
我们之前复制的操作就被取消了,并在底行给出了信息
命令 | 作用 |
---|---|
p | 将缓冲区的字符黏贴到光标所在的位置 |
u | 取消上一次的文本编辑操作 |
介绍完他们开始正式介绍剪切
在命令行模式输入nx,剪切从光标所在的字符开始的n个字符
在命令行模式输入ncb,剪切光标所在的前n个单词
在命令行模式输入ncw,剪切光标所在的后n个单词
在命令行模式输入c$,剪切从光标所在的字符到行尾的所有字符
在命令行模式输入ndd,剪切自光标所在的行开始的n行,到结尾不足n行,则至结尾
命令 | 作用 |
---|---|
nx | 剪切从光标所在的字符开始的n个字符 |
ncb | 剪切光标所在的前n个单词 |
ncw | 剪切光标所在的后n个单词 |
c$ | 剪切从光标所在的字符到行尾的所有字符 |
ndd | 剪切自光标所在的行开始的n行,到结尾不足n行,则至结尾 |
修改
修改的命令一共有两个,也比较简单
在命令行模式输入** r** 待修改字符,修改光标所在的字符
在命令行模式输入R,进入取代状态,直到输入ESC退出
这个命令的好处是一次命令能进行多字符修改
命令 | 作用 |
---|---|
r | 待修改字符,修改光标所在的字符 |
R | 进入取代状态,直到输入ESC退出 |
复制
复制命令与剪切命令很类似,选取内容不会消息,而是复制了一份
在命令行模式下输入nyb,复制光标所在的前n个单词
在命令行模式下输入nyw,复制光标所在的后n个单词
在命令行模式下输入y$,复制从光标所在的字符到行尾的所在字符
命令 | 作用 |
---|---|
nyb | 复制光标所在的前n个单词 |
nyw | 复制光标所在的后n个单词 |
y$ | 复制从光标所在的字符到行尾的所在字符 |
nyy | 复制光标自所在的行开始,向下n行 |
光标移动
关于光标移动的内容有点多,这里就不一一讲解,下面给出功能列表
指令 | 作用 | 指令 | 作用 |
---|---|---|---|
0 | 移动到光标所在行的最前面 | h | 光标向前移动一个字符 |
$ | 移动到光标所在行的最后面 | l | 光标向后移动一个字符 |
Ctrl+d | 光标向下移动半页 | k | 光标向上移动一行 |
Ctrl+f | 光标向下移动一页 | j | 光标向下移动一行 |
H | 光标移动到当前屏幕的第一列第一列 | e | 移动到下一个字的最后一个字母 |
gg | 光标移动到当前屏幕的第一行第一列 | ^ | 移动到光标所在行的第一个非空白字符 |
M | 光标移动到当前屏幕中间行的第一列 | n- | 向上移动n行 |
L | 光标移动到当前屏幕最后行的第一列 | n+ | 向下移动n行 |
b | 移动到上一个字的第一个字母 | nG | 移动到第n行 |
w | 移动到下一个字的第一个字母 | :n | 光标移动到第n行 |
查找
在命令行模式下输入/ <要查找的字符>或?<要查找的字符>,查找字符
就会高亮显示我们查找的内容
替换
在命令行模式下输入: range s/string1/string2/gc,替换字符
具体的参数说明,将在后面表格给出
行号显示
在命令行模式下输入set nu或set number,显示行号
在命令行模式下输入set nonu或set nonumber,隐藏行号
分类 | 命令 | 作用 |
---|---|---|
查找 | / <要查找的字符> | 查找字符 |
?<要查找的字符> | 查找字符 | |
替换 | range s/string1/string2/gc | 替换字符:range要替换的范围(%所有行,.当前行,$最末行)s:转入替换模式 string1查找的内容 string2替换成的内容g只替换第一字符c替换前询问 |
行号显示 | set nu或set number | 显示行号 |
set nonu或set nonumber | 隐藏行号 |
输入模式就是正常程序编写的操作,这里就不多做讲解了
Linux-C P2 数据类型
Linux-C P3 运算符和表达式
Linux-C P4 输入输出
Linux-C P5 控制语句
Linux-C P6 数组
Linux-C P7 指针
Linux-C P8 函数
Linux-C P9 内存管理
Linux-C P10 结构体细讲