1.Linux的诞生
Linux的前身是Unix以及Minix。
在20世纪70年代,两位编程界大佬Ken Thompson和Dennis Ritchie基于当时贝尔实验室研究的分时操作系统用汇编语言开发出Unix并开源。
直接听这俩位的名字,有人可能没有印象,但是你一定知道他们创造出来的东西,没错,那就是C语言,在创造出C语言之后,二位还用其对Unix系统进行改进。
当时的计算机巨头企业,例如IBM,hp,Sun,发觉Unix系统非常好,于是基于Unix的内核,开发出了他们各自的操作系统:IBM的AIX,Sun的Solaris以及hp的hpUX,但是他们开发出的系统,只有很高端的服务器才能够使用,而且并不开源还收取高昂费用。在当时那个年代,一台服务器就要上万美金,十分昂贵,因此只有少数企业才可以用的起,普通的计算机爱好者是根本负担不起的。
在这个环境下,又有一位大佬:Richard Stallman 挺身而出提出GNU计划,提倡:在自由的时代,用户应该免费享有对源代码阅读以及修改的权利,软件公司可以靠提供服务和培训获得盈利,既然这些大公司不开放他们操作系统的源码,那我们就自己做一个新的,开源的操作系统出来。
没过多久,Andrew S. Tanenbaum教授发布了一款类Unix的操作系统,叫Minix,该系统完全开源,供研究人员,教师与学生一起学习使用。
LInux的发明人Linus Torvalds就深受Minix系统的影响,也决定和志同道合的人一起开发出一款新的开源操作系统,于是乎Linux最初始的内核就这样开发出来了,现在,Linux成为了全球最流行的操作系统之一,并保持开源,欢迎有道之士一同完善Linux内核,而这也是为何Linux安全漏洞很少的原因之一,每当有人发现系统存在漏洞,就会第一时间进行修复,不像Windows这类闭源的操作系统,经常有漏洞也不能及时被安全管理人员发现。
有一点需要注意,往往我们所说的Linux,只是一个操作系统统称,因为Linux内核是开源的,因此有很多企业厂家对其内核进行改进,推出自己的操作系统,例如RedHat,CentOS,Ubuntu等,他们都是Linux内核的衍生物,因此当我们说Linux系统的时候,往往要指明用的到底是哪一个Linux系统,他们之间是有区别的。
2.Linux的目录结构
Linux的目录结构就是一个单独的树形结构,它只有一个根目录/
,并不像Windows那样,分为C盘,D盘,E盘,每个盘相当于一个单独的树。
而且Linux系统有个特性:一切皆文件。理解这句话很简单,因为对于Linux系统来说,不管是硬件还是软件,都有一个单独的文件夹去管理,例如:你可以在根目录底下找到dev
这个文件夹,这就是用来管理硬件的文件,点开里面会发现有文件夹叫cpu
,disk
看文件名,就知道该文件和什么硬件设备有关:
接下来就说一说系统自带的根目录下的各种目录的作用:
1.bin: *
该文件里存储了Linux系统最常使用的命令,例如cp
(拷贝),cat
(浏览文件):
2.sbin: 存放系统管理员用的高阶系统指令:
3.dev: 用来管理硬件设备:
4.home: *
存放普通用户的主目录,Linux中每个用户都有一个自己的目录,一般该目录是以用户的账号命名
5.root: 系统管理员主目录(我们进入这个目录是需要输入账户密码的)
6.etc: *
存储所有的系统管理所需要的配置文件和子目录,例如我们安装完MySQL,它的配置文件my.cnf
就存放在etc
目录之下:
7.usr: 用户安装的应用程序以及文件,会放在这个目录之下(类似Windows里的program files)
8.boot: *
存放Linux启动时要用到的核心文件,包括一些连接文件以及镜像文件
9.proc,srv,sys: 这三个目录跟Linux内核相关,一般不去对它们进行操作,随意更改会导致系统崩溃
10.tmp: 存放一些临时文件
11.media: *
挂载目录,当你的Linux系统检测到插入的U盘,光驱等一系列设备之后,就会将其挂载在这里
12.mnt: 该目录让用户临时挂载别的文件系统,比如可以设置Windows系统与虚拟机中Linux系统的共享文件夹,那么这个文件夹就会出现在mnt
目录下
13.opt: 一般将各种软件的安装包放在这里
14.var: *
该目录存放不断扩充的东西,习惯将经常被修改的文件放在该目录下,包括各种日志文件
15.lib: 系统开机所需要最基本的动态链接共享库,作用类似于Windows中的DLL文件,几乎所有的应用程序都需要用到这些共享库
3.Linux系统远程访问(Windows远程访问Linux)
如果我们是在云厂商那里购买的服务器,例如阿里云,则可以用他们的UI界面进行登录,当然除了这种方式,我们还可以通过一款软件叫 “Xshell” 进行远程访问。提供这种服务的软件很多,“Xshell”只是其中一种,下载该软件也很容易。
Xshell下载地址:https://www.xshellcn.com/
进入界面后下拉找到Xshell:
点击进入后选择下载,可以免费下载:
之后就是“下一步”安装法,成功安装并打开的页面显示:
然而Xshell只是用来访问Linux系统的一个工具,如果我们想传输文件,还得下载另外一个软件,叫“Xftp”,这个软件是专门用来远程传输文件的,也是被很多人推荐,安装方法同上,网址也一样,安装并打开的界面如下:
但是有一点需要注意,如果要从远程登录Linux系统,该Linux系统必须得开放sshd(ssh daemon,服务端)服务,它会监听22号端口,ssh全称是(secure shell,安全外壳协议)它是专为远程登录会话和其他网络服务提供安全性的协议,并不像telnet那样数据包全以明文形式进行传输,十分可靠,开启方法如下:
注:这里我用的是VMware在本地电脑中安装的CentOS 8虚拟机,想了解如何安装VMware以及在其上安装CentOS 8请看我之前写过的文章:从零开始的VMware以及CentOS
首先在Linux系统内检查sshd服务状态,输入:
$ service sshd status
可以看到现在是关闭状态,接下来我们要输入指令打开该服务:
$ service sshd start
输入该指令后会让你输入一遍用户密码,用户需要具有系统管理权限:
打开之后再次检查一遍sshd服务状态:
发现终于正常启动了。
除了这种启动服务的方式,还有另外一种,使用“ntsysv”,这是一个RetHat公司为方便对Linux系统进行设置从而开发的一款图形化界面,需要我们手动进行安装。
输入指令:
$ sudo yum install ntsysv
注意:这里必须要用root用户权限进行下载,所以使用“sudo”指令
稍作等待,安装完毕后输入以下指令来启动“ntsysv”:
$ sudo ntsysv
之后会提示你输入密码,密码输入正确后便能成功进入该软件(这里也需要root用户权限!指令要加“sudo”)
进去后的界面如下:
通过键盘的上下左右键变换选项,利用Tab切换菜单,空格键进行确认
可以看到,这里我找到了sshd服务的选项,前面有星号,表示该服务已经开启,如果此时我按空格,星号就会消失,确认后,sshd服务就会关闭。
之后我们就可以尝试远程登录了!
我们先不用“Xshell”进行登录,先用普通的cmd进行尝试。
在Windows的cmd中输入指令(注意是小写的p
!!!):
$ ssh 用户名@hostip -p 端口号
这里我输入的是:
$ ssh zyx1340757142@192.168.197.128 -p 22
注:不输端口号,默认22号端口,不输用户名,默认和客户机用户名相同
接下来会让你输入密码,密码输入正确后,便能成功进入系统。
接下来尝试用Xshell 6 连接Linux系统:
打开Xshell 6,找到文件一栏中的新建:
之后进行各种必要设置,设置完毕点击确定:
这样左边的会话管理器就能看到新建的会话:
点击该会话:
提示主机秘钥信息,选择接受并保存
之后再次点击该会话,输入用户名信息:
注:这里的用户名是你要远程登录Linux主机使用的用户名,不是本机用户名
之后再输入密码:
信息正确后点击确定:
成功登录!
接下来我们试一下用Xftp进行文件传输:
首先要新建连接,跟Xshell很像:
输入所需各种信息:
点击确定后可以看到新建的会话:
点击会话并连接,进入以下页面:
注:使用哪个用户登录Linux系统,连接后就会处在哪个用户目录下,如果是用根用户登录,连接后就会处在root目录下
在较低的Xftp版本之下,可能出现中文乱码的情况,这时进行如下操作:
确定之后,刷新一下右半边Linux目录界面就OK了。
接下来演示一下如何传输文件:
在左半边找到你想传输的文件,在右半边找到你想传输的位置,然后双击该文件,即可传输,反之亦然:
这里我将Windows中的“切片”图片传输到了Linux系统中。
现在去Linux系统检查一下:
可以看到,在我的Linux系统中,出现了该文件,传输成功!
3.Linux系统的操作
1.vi和vim编辑器
所有的Linux系统都会自带vi
文本编辑器,而vim
是vi
的增强版本,它可以用字体的颜色辨别语法的正确性,方便程序设计。
vim
编辑器有3种模式:
1.正常模式: vim
打开一个档案,就直接进入一般模式,在此模式中,可以使用“上下左右”键控制光标,可以用delete键删除字符,右键进行复制粘贴操作,但是不能进行输入操作。
2.插入模式/编辑模式: 在一般模式下按i
或者·a
键可以进入该模式,在此模式下可以进行各种编辑操作,例如输入字符
3.命令行模式: 在该模式中,可以提供相关指令来完成,读取,存盘,替换,离开vim
,显示行号等操作。
通过举例说明这三者之间关系,这里我要创建一个叫“hello.java”的文件:
首先输入ll
指令查看当前用户目录下的所有目录以及文件:
接着输入以下指令创建一个文件:
$ vim hello.java
按下回车后进入新创建的文件,此时我们就处在一般模式,无法输入任何字符:
接着按下i
键,进入插入模式,可以看到左下角有“插入”二字:
输入完我们想要的文字后怎么保存呢?接下来就要利用命令行模式。
首先按下ESC
返回到一般模式(返回后想再次编辑,按i
或者a
即可):
接着输入":
"进入命令行模式,然后输入以下指令:
$ :wq
按下回车后,我们就保存并退出了,接下来自动回到初始命令行:
再次利用ll
指令查看当前目录下的文件以及目录:
可以看到hello.java已经存在于此。
此时我们可以再次输入vim hello.java
进入查看该文件,在不进行任何改动的情况下,进入命令行模式,输入:q
即可成功退出返回
注: 若对原文进行了修改,再输入:q
想不保存便退出,这时会有警告,告诉你需要输入:q!
来实现强制退出操作,照做之后,便能不保存此次修改,成功退出。在vim
中带有!
的指令,都有强制的意思。
三种模式的关系如下图所示:来源:https://www.bilibili.com/video/BV1dW411M7xL?p=15
vim常用快捷键(一般模式才可使用)
1.复制光标所在当前行: yy
。复制当前光标所在行以及下面的行,总共m行:myy
(比如要复制5行则是5yy
),粘贴:p
举例:先用指令vim test.java
创建一个文件,然后切换到编辑模式输入几行字:
接下来若想使用快捷键,需要按下ESC
键返回一般模式,不在一般模式,无法使用快捷键。
比如要复制67890
这行,将光标放在该行任意位置,然后按yy
,即可成功复制。
按p
粘贴的时候,被复制的内容会在光标所在行的下面 新建一行 ,然后粘贴上去。
多行复制粘贴同理。
怎么理解粘贴里面的新建一行
呢,这里再举个例子:
现在文档里文字如图所示:
可以发现qwert
下面空一行,再下面才是67890
现在复制67890
这行,接下来粘贴的时候,我把光标放到qwert
这行,然后按p
进行粘贴:
你可以发现,原来空白的那行依然存在,只是往下移了一行,说明新出来的67890
是新建一行产生的。
2.删除光标所在行: dd
。删除当前光标所在行以及下面的行,总共m行:mdd
(比如要删除5行则是5dd
)
举例,原文档如下所示,光标在12345
处:
接下来删除从5行文字,输入5dd
(要在一般模式输入):
可以看到,包括空行在内,5行文字被删除了。
3.在文件中查找某个关键字: 在一般模式下输入/
进入命令行模式,接下来输入/关键字
,按回车,即可查找该关键字,文档中的关键字会被亮色标出,光标会停留在第一个关键字所在位置,按下n
光标会在不同位置的关键字之间按序切换,到结尾最后一个关键字后再按n
,光标会回到第一个关键字位置。
例如我在文档中查找world
:
4.显示行号: 在一般模式下输入:
进入命令行模式,接下来输入:set nu
开启行号显示,输入:set nonu
关闭行号显示。
注:输入指令并按下回车后,虽然下面的命令依旧存在,但是已经进入到一般模式。
举例:
5.快速到达文件内首行,或某尾行: 在一般模式下,输入G
到达末尾行,输入gg
到达首行。(注意大小写)
6.撤销上一次操作: 在一般模式下按u
。
注:这个撤销是还原到上次处在一般模式下的文档内容
7.快速到达指定行号: 分为三步。
第一步:在命令行模式输入:set nu
并回车显示行号。
第二步:输入要达到的行号。(在一般模式下)
第三部:按shift+g
即可跳到指定行号。
2.开机,重启,用户登录注销
1.关机,重启命令:
shutdown -h now
:立即关机
shutdown -h 1
:1分钟后关机,以此类推。(可以中途取消,输入shutdown -c
)
shutdown -r now
:立即重启
halt
:关闭CPU但是不关闭电源,等同于关机
reboot
:重启
注: 在进行重启操作前最好先执行sync
指令,该指令可以将磁盘缓冲区的数据同步到硬盘中,以免数据丢失。
2.用户登录注销:
logout
:注销用户,该指令在图形运行级别无效,在运行级别3有效
换句话说就是在CentOS 8本地命令行中输入该指令无效,通过像“Xshell”这种方式进行的远程登录使用该指令才有效:
注: 登录时尽量少用“root”用户进行登录,因其具有最高系统权限,操作失误可能会导致系统崩溃,一般用普通用户登录,登录后再使用指令:su - 用户名
来切换成系统管理员身份:
3.用户管理:
说明:Linux系统是一个多用户,多任务的操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
首先从整体上看一下Linux进行用户管理的特点:
每个用户新建的时候都会被分到至少一个用户池(组)中,每个不同的池(组)代表不同的权限,之后也可以对用户所在池进行更改。(用户可以处于1个或者多个池)
用户家目录确定了用户可以在哪个目录下进行操作。
添加用户: useradd 用户名
用户创建成功后,会自动的创建和用户同名的家目录。
之后要为该新用户指定密码:passwd 用户名
我们可以尝试用这个用户登录系统:
也可通过指令useradd -d 新目录名 新用户名
来创建用户,该指令会在 “/home/” 目录下新建一个和刚刚起的新目录名同名的目录,并将其作为新用户的家目录。注: 新目录名必须是不在 “/home/” 目录下存在的目录名,否则会出错。
这样虽然也成功创建了用户,但此用户无法正常使用。