目录
1.Linux背景
什么是Linux?
Linux 是一个操作系统. 和 Windows 是 "并列" 的关系
Unix & Linux 发展历程图

这些我们简要了解即可。而经过这么多年的发展, Linux 已经成为世界第一大操作系统。事实上我们广泛使用的安卓系统本质上就是Linux。Linux主要在以下领域有所应用:
1.服务器领域 2.嵌入式设备 3.移动端
2.Linux环境搭建
要想学习 Linux , 需要先有一个 Linux 的环境 。
关于Linux环境的搭建我们主要有以下四种方式:
1. 直接安装在物理机上. 但是由于 Linux 桌面使用起来非常不友好. [不推荐].2. 使用虚拟机软件, 将 Linux 搭建在虚拟机上. 但是由于当前的虚拟机软件(如 VMWare 之类的)存在一些 bug , 会导致环境上出现各种莫名其妙的问题, 比较折腾. [非常不推荐]
3. 使用 WSL (Windows Subsystem for Linux). 这个是 Windows 近几年开发的新功能, 在 Windows 系统内集成了一个 Linux. 但是目前这个技术还不够成熟. [暂时不推荐].
4. 使用云服务器, 可以直接在 腾讯云, 阿里云或华为云 等服务器厂商处直接购买一个云服务器.[推荐]
同时我们还有一点需要明白的是,我们学习Linux主要是为了能够将我们的项目部署到云服务器上,供他人访问,所以我们需要一个公网IP。而以上四种方法只有使用云服务器能够实现。同时云服务器还有开箱即用的特点,部署Linux非常方便,只需点击几下即可,所以这里我们采用第四种方式。
关于如何去部署Linux,我这里直接放上腾讯云的网址学生云服务器_学生云主机_学生云数据库_云+校园特惠套餐 - 腾讯云,大家进去自己摸索一下应该很快就能搞定,但是需要注意的是在购买服务器之后记得要设置密码。这里我们使用的环境都以CentOs7.6为示例。
3.Linux的基本操作
3.1 使用终端软件连接到Linux
什么是终端软件?
终端软件是一类工具软件, 可以和远程的主机建立网络连接, 从而对主机进行一些操作.
常见的终端软件: XShell Putty MobaXTerm Iterm2 SecureCRT
这里我们以XShell作为示例
这里把下载地址放出来:https://www.netsarang.com/en/free-for-home-school/
下载好后我们需要去连接到我们的服务器上
我们先新建一个会话

之后按照下面的格式来设置

创建完成后我们双击进入会话,会出现以下窗口

用户名我们默认的都是root,接下来我们输入密码

出现类似下面的对话就是成功了

3.2 Linux基本命令
这里我们仅介绍一些常用的指令,其余指令大家可以根据自己实际需求自行到网上学习。
3.2.1 ls
语法: ls [选项] [目录或文件]
功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。
常用选项:
-a 列出目录下的所有文件,包括以 . 开头的隐含文件。
-d 将目录象文件一样显示,而不是显示其下的文件。 如:ls –d 指定目录
-k 以 k 字节的形式表示文件的大小。ls –alk 指定文件
-l 列出文件的详细信息。
-r 对目录反向排序。
-t 以时间排序。
-R 列出所有子目录下的文件。(递归)
举例:
ls -l
当然我这里已经事先创建了一些文件,你们刚创建好的服务器大概率是空的,所以什么也不会显示。
3.2.2 pwd
语法: pwd
功能:显示用户当前所在的目录
举例:
pwd![]()
这就表示我们当前在根目录下。
3.2.3 cd
Linux系统中,磁盘上的文件和目录被组成一棵目录树,每个节点都是目录或文件。
语法: cd 目录名
功能: 改变工作目录。将当前工作目录改变到指定的目录下.
举例:
cd .. : 返回上级目录
cd ~:进入用户家目
cd -:返回最近访问目录
关于Linux目录结构:
首先我们需要有一个宏观的认识,Linux是一个树形目录结构,类似于下图

几个特殊的目录:
/ 称为根目录
. 称为当前目录
.. 称为当前目录的上级目录
绝对路径 与 相对路径
形如: /usr/share/tomcat/logs/ 以根目录开头的, 称为绝对路径.
形如: ./logs 以 . 或者 .. 开头的, 称为相对路径
3.2.4 一些小技巧和注意事项
tab 键补全:
我们敲的所有的 Linux 命令, 都可以使用 tab 键来尝试补全, 加快效率
使用 ctrl + c 重新输入
如果命令或者目录敲错了, 可以 ctrl + c 取消当前的命令
复制与粘贴
如果我们在控制终端想要复制粘贴某段命令,不是使用CTRL+C/V,而是使用
CTRL+INS复制,SHIFT+INS粘贴
3.2.5 touch
语法: touch [选项]... 文件...
功能: touch命令参数可更改文档或目录的日期时间,包括存取时间和更改时间(如果文件已经存在),或者新建一个不存在的文件。
举例:
touch test.txt3.2.6 cat
语法:cat [选项] [文件]
功能: 查看目标文件的内容
常用选项:-n 对输出的所有行编号
cat Test.txt
![]()
比如这样我们就输出了文件中的内容。
3.2.7 echo
语法:echo [选项] [输出内容]
功能:输出指定内容
常用选项:
-e:支持反斜线控制的字符转换
-n:取消输出后行末的换行符号
echo hello![]()
当然echo也可以向文件中写入内容,比如下面的代码,这是一种最简单的写入方法。代表向Test.txt这个文件中写入hello。
echo 'hello' > Test.txt3.2.8 mkdir
语法:mkdir [选项] dirname...
功能:在当前目录下创建一个名为 “dirname”的目录
常用选项:
-p, --parents 可以是一个路径名称。此时若路径中的某些目录尚不存在,加上此选项后,系统 将自动建立好那些尚不存在的目录,即一次可以建立多级目录
举例:
mkdir –p test/test1 : 递归建立多个目录创建完目录后,我们想看一下具体的目录结构怎么办?
我们可以使用tree命令,类似于下图
但是这个命令并不是Linux自带的,我们需要手动引入,用到下面命令:
yum install treeyum可以理解成我们手机的应用商店,可以去里面下载我们需要的东西。当然在执行完上述命令后,它会问你是否确认导入,输入y确认就导入成功了。
3.2.9 rm
语法:rm [-f-i-r-v] [dirName/dir]
功能:删除文件或目录
这就是我们常说的删库跑路需要用到的命令,但是大家千万不要随意尝试。
常用选项:
-f 即使文件属性为只读(即写保护),亦直接删除
-i 删除前逐一询问确认
-r 删除目录及其下所有文件
关于 -r这个选项,如果我们想删除一个文件目录,直接rm是不行的,因为你要删除的文件目录里面可能还有目录,所以必须加上 -r(递归删除)才能执行成功。
举例:
rm test.txt3.2.10 cp
语法:cp [选项] 源文件或目录 目标文件或目录
功能:复制文件或目录
说明:cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存 在的目录,则它会把前面指定的所有文件或目录复制到此目录中。若同时指定多个文件或目录,而最后 的目的地并非一个已存在的目录,则会出现错误信息
常用选项:
-f 或 --force 强行复制文件或目录, 不论目的文件或目录是否已经存在
-i 或 --interactive 覆盖文件之前先询问用户
-r递归处理,将指定目录下的文件与子目录一并处理。若源文件或目录的形态,不属于目录 或符号链接,则一律视为普通文件处理
-R 或 --recursive递归处理,将指定目录下的文件及子目录一并处理
举例:
cp test1.txt test2.txt
3.2.11 mv
语法: mv [选项] 源文件或目录 目标文件或目录
功能:
1. 视mv命令中第二个参数类型的不同(是目标文件还是目标目录),mv命令将文件重命名或将其移至一个新的目录中。
2. 当第二个参数类型是文件时,mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。
3. 当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,mv命令将各参数指定的源 文件均移至目标目录中。
常用选项:
-f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖
-i :若目标文件 (destination) 已经存在时,就会询问是否覆盖
举例:
mv test1.txt test2.txt3.2.12 man
这里的man其实是帮助手册的意思,由于Linux有很多参数命令,我们难以记住,而早期搜索引擎也不发达,所以只能通过自带的帮助手册查询。现在我们大多都采用Google百度等搜索引擎直接查询。
语法: man [选项] 命令
常用选项:
-k 根据关键字搜索联机帮助
num 只在第num章节找
man man 能够看到 man 手册中的若干个章节及其含义.
举例:
man ls3.2.13 less
语法: less [参数] 文件
功能:查看文件内容. 不会立刻把所有文件内容加载到内存中. 也能进行查找.
选项:
j k / 方向键: 向上向下滚动屏幕.
-N 显示每行的行号
/字符串:向下搜索“字符串”的功能
n:重复前一个搜索(与 / 或 ? 有关)
q: 退出
less主要用于查看一些较大的文本文件之类的,因为如果一下子全部加载到内存中首先你来不及看,其次也可能导致服务器处理不过来而卡死。less边看边加载就很好解决了这个问题。
3.2.14 关于管道
管道是一种古老的 "进程间通信" 方式. 在 Linux 指令中可以使用 | 作为管道标记.
意思是将前一个指令标准输出的内容, 作为第二个指令的标准输入内容.
那么管道有啥用呢?我们可以看到下面几个指令。

举例:
grep "hello" Hello.java

举例:
ps aux # 显示系统上所有的进程
ps aux | grep "进程名"
ps aux | grep "进程id"
比如这里我们就可以利用管道将查询到的所有进程进行一个关键字的过滤,来找到我门想要的进程信息。

举例:
netstat -anp
netstat -anp | grep "进程名"
netstat -anp | grep "端口号"可以看到我们很多类似于查询操作的指令都可以使用grep+管道来达到过滤的效果。
3.3 vim的最最最基本用法
vim 是一个知名的文本编辑器. 由于Linux不像Windows可以直接利用记事本来编辑文本,所以我们需要使用 vim 来对文本进行编辑。但是如果想真正精通vim的使用,我们一般需要花费两到三年的时间,这个成本无疑是巨大的,所以我们这里只介绍最基础的用法。
3.3.1 创建文件 / 打开文件
vim [文件名]
3.3.2 进入插入模式
当我们利用vim打开文件后,我们就可以看到文件的具体内容。比如下图:

但是此时我们发现我们并不能对文本内容进行编辑,这是因为vim为了提升编辑效率,引入了“模式”和大量快捷键。vim打开文件后默认进入的是普通模式,此时的键盘按键表示的不是编辑框输入内容,而是表示特殊含义的快捷键。
要想真正能够编辑,就要先进入插入模式。
使用 i 键可以进入到插入模式. (左下角提示 --INSERT-- ) 然后就可以像记事本一样正常编辑了
3.3.3 保存
在插入模式下不能保存文件, 需要先回到 普通模式 . 按下 Esc 回到普通模式. 在普通模式下输入 :w , 再按下回车, 即可保存文件.
3.3.4 退出
在插入模式下不能退出, 需要先回到普通模式.
在普通模式下输入 :q , 再按下回车, 即可退出.
也可以直接使用 :wq 同时执行保存和退出
对vim感兴趣的同学可以参考 vimtutor (直接在终端输入 vimtutor 即可进入官方教程)
3.4 Linux权限
3.4.1 用户操作
Linux下有两种用户:超级用户(root)、普通用户。
超级用户:可以再linux系统下做任何事情,不受限制
普通用户:在linux下做有限的事情。
超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。
我们的服务器买好了, 默认是 root 用户. 但是 root 用户权力比较大, 一旦使用不当可能会造成严重后果 (例如 rm -rf /). 因此我们真正在公司中不会直接使用 root 用户来操作服务器.
1. 创建用户
命令 useradd [用户名]
功能 创建新的用户
示例:
useradd test
2. 配置密码
命令 passwd [用户名]
功能 设置或修改用户密码
示例:
passwd test注意, 输入密码的时候, 在控制台中不会有提示. 但实际上已经输入进去了.
3.4.2 三种角色
访问一个文件的人可能分成三种类别
文件和文件目录的所有者:u---User
文件和文件目录的所有者所在的组的用户:g---Group
其它用户:o---Others
3.4.3 文件类型和访问权限
比如我们用ll来查看一下我们当前的文件

可以发现文件前面有一串字符,它代表的其实就是文件的类型和访问权限,具体内容如下。

此处我们主要关注前面那串字符串代表的含义。
其中第一位代表了文件类型:
d:文件夹
-:普通文件
l:软链接(类似Windows的快捷方式)
b:块设备文件(例如硬盘、光驱等)
p:管道文件
c:字符设备文件(例如屏幕等串口设备)
s:套接口文件
后面的九位分别代表 文件和文件目录的所有者,组内用户和其他用户的权限:
读(r/4):Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
写(w/2):Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
执行(x/1):execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
“-” 表示不具有该项权限
3.4.4 修改文件权限
功能:设置文件的访问权限
格式:chmod [参数] 权限 文件名
常用选项:
R -> 递归修改目录文件的权限
说明:只有文件的拥有者和root才可以改变文件的权限
chmod命令权限值的格式
① 用户表示符 +/-= 权限字符
+:向权限范围增加权限代号所表示的权限
-:向权限范围取消权限代号所表示的权限
=:向权限范围赋予权限代号所表示的权限
用户符号:
u:拥有者
g:拥有者同组用
o:其它用户
a:所有用户
权限字符:
r:读
w:写
x:执行
实例:
# chmod u+w /home/abc.txt
# chmod o-x /home/abc.txt
# chmod a=x /home/abc.txt