0%

linux基础知识

1586185429977

引言


开发环境

平时大家大多是在Windows或者Mac操作系统下去编写代码进行开发,在开发环境中安装大量的软件,这样会导致环境的稳定性和安全性降低

生产环境

是将程序运行在此环境中,供用户去使用。这个环境是有专业的人员去维护,一般人是没有权限去操做生产环境的

测试环境

一般克隆一份生产环境,会将开发环境中的程序部署到测试环境中,这个环境的主要目的是去程序进程检测,收集程序中的各种问题,并交给开发人员进行修改

操作系统的选择

生产环境中,常用的操作系统有Windows 2003 service,Linux,Unix等等,Linux操作系统,在生产环境中占据了大量的市场份额,Linux主要以稳定,可靠,免费的特点成为全球使用最多的服务器操作系统。

Linux操作系统现在已经成为后台开发人员必备的技能,并且后期学习的各种知识都会涉及到Linux操作系统。

Linux介绍


Linux介绍

在Linux操作系统出现之前,还有一个操作系统叫做Minix,Minix操作系统是由Andrew的大学教授研发出来的,当时大学教授是为了给学生上课,买了一套Unix操作系统,参考Unix自己写了一个操作系统,并且命名为Minix。同时将Minix开源,供学校内部的研究和教学,到了2000年,Andrew将Minix操作系统完全对外开源。

Minix由于完全对外开源之后,在互联网上迅速的传播,但是大家在使用时,发展Minix不时很完美,内部存在各种各样问题。用户将问题解决后,编写了一个补丁,将补丁以邮件的方式发给Andrew,但是Andrew教授最初的目的只是为了教学和研究。

于此同时,一位芬兰的大学生出现了,叫Linus,在Minix操作系统基础上,自己添加了一些补丁和插件,并将其命名为Linux操作系统,并且完全对外开源,而且开始维护Linux操作系统。

之前学习的Git也时Linus研发的。

Linus Torvalds 和 Linux
1586225837185

Linux的版本

Linux的版本分为两种,一种是Linus团队正在维护的开源内核版本。另一种是一些厂商基于内核版本封装的发行版本。

  • Linux的内核版本官网:https://www.kernel.org/

  • Linux的发行版本,咱们需要学习的发行版本就时CentOS

Linux的常见发行版本
1586227096086

Linux和Windows区别

  • Linux是严格区分大小写的,Windows无所谓。
  • Linux中一切皆是文件。
  • Linux中文件是没有后缀的,但是他有一些约定俗成的后缀。【tar.gz tar】
  • Windows下的软件一般是无法直接运行的Linux中。

Ps:我们在学习Linux时,参考Windows下做了什么,就在Linux中做什么

Linux安装


安装VMware

傻瓜式安装,下一步下一步下一步……

安装Xterm

解压即可以使用……

在VMware中安装Linux

按照下图步骤,逐步安装Linux操作系统……‘

选择安装方式
选择安装方式
1586231357367
指定镜像方式
选择稍后安装操作系统
1586231394510
选择操作系统类型
选择操作系统类型
1586231434814
指定虚拟机名称
指定虚拟机名称,和安装目录
1586231466922
磁盘存储方式
拆分成多个文件存储
1586231519493
指定虚拟机配置

具体配置

  • 内存:4G
  • 处理器:1个【2核】
  • CD/DVD:指定 Centos.iso 文件所在路径【右侧菜单选择使用ISO映射文件】
  • 网络适配器:NAT模式【跟主机共享一块网卡,安装成功后需要分配静态IP】
指定虚拟机的设置
1586231619526
开始安装CentOS
开始界面选择语言
1586231719094
3.3.8 配置虚拟机网络连接
配置安装位置以及网络和主机名(开启)
1586231811319
设置root用户密码
9、开始安装后,设置ROOT用户的密码
1586231864794
安装成功
10、安装成功,并登录
1586232093005

使用Xterm连接Linux

直接在Vmware中操作Linux有很多限制,我们可以在图形化界面中操作Linux操作系统

具体步骤如下……

查看ip地址

在主机【windows】中需要把VMware相关的服务打开【默认自动开启】

  • 右击电脑 –> 管理 –> 服务
windows的服务
image-20200928111441822

查看ip地址
1586238155779
通过Xterm连接
连接上Linux
1588919972667
连接成功
1586238257999

Linux的目录结构


Windows的目录结构是带有盘符的。D: E: C:,而Linux中是没有盘符的

在Xterm中输入ls / 查看Linux的顶级目录。

ls /
1586239207504

Linux的常用目录……

Linux目录树状图
1586239342796
  • root:该目录为系统管理员HOME目录
  • bin:这个目录下放着经常使用的命令
  • boot:这里存放的是启动Linux时的一些核心文件
  • etc:存放系统管理所需要的配置文件和子目录
  • home:普通用户的HOME目录
  • usr:默认安装软件的目录,类似Windows中的Program Files目录
  • opt:是主机额外安装软件摆放的目录

Linux的基本命令


Linux中命令的基本格式:命令 【选项】 【参数】

需要注意,个别命令是不遵循这个格式

当命令中有多个选项时,可以写在一起的,并且选项也是由简写方式的 命令 -选项A选项B

Linux的基本操作命令,不遵循上述格式,但是后期会经常使用……

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 1. 我是谁
who am i

# 2. 我在哪
pwd

# 3. 查看ip 地址
ip a | ip address

# 4. 清屏
clear

# 5. ping域名|ip
ping 地址

# 6. 强制停止
Ctrl + C

Linux目录命令【重点


列出目录

查看指定目录下的内容,默认查看当前目录下内容

Linux中的隐藏文件是以.开头的,当前目录使用.表示,上一级目录使用..表示

1
2
3
4
5
ls [-ald] [目录名]
# 目录名不填写,默认为当前目录。
# -a:列出的全部的文件,包括隐藏文件
# -l:列举出全部的信息 也可以使用简写方式【ll】,这个不是一定可以用
# -d:仅查看目录本身

切换目录

实现目录间切换,使用绝对路径、相对路径、特殊符号

绝对路径:以/开头的

相对路径:不以/开头的

1
cd 具体路径 | 特殊符号
特殊符号 表达的路径
. 当前目录
.. 上一级目录
/ 根目录
~ 当前登录用户的HOME目录
- 返回

创建目录

创建目录,以及创建多级目录方式

1
2
mkdir [-p] 目录名
# -p:代表创建多级目录时,使用

删除目录

删除非空目录或包含内容的目录

1
2
3
4
5
6
7
# 只能删除空目录
rmdir 目录名

# 删除非空目录
rm [-rf] 目录名
# -r:代表递归删除目录下的全部内容
# -f:不询问,直接删除

复制目录

复制目录下的全部内容

1
2
3
4
cp -r 来源目录 目标目录
# -r:递归复制全部内容,必填项
# 把文件复制到同一个目录下,需要改名字
# 把文件复制到不同目录下,可以不改名字

移动、重命名目录

移动、重命名目录,会根据第二个参数指定具体操作逻辑

1
2
3
4
5
mv 目录名 新目录名 | 路径
# mv 目录名 新目录名 代表在当前目录下对目录进行重命名
# mv 目录名 路径 代表把目录移动到指定路径下
# mv 目录名 路径/新目录名 代表把目录移动到指定路径下,并且重命名【新目录名不存在】
# 如果第二个参数指定的路径不存在,就是重命名,如果第二个参数的路径存在,就是移动

Linux的文件命令【重点


创建文件

创建空文件

1
touch 文件名1 文件名2 ……

编辑文件

编辑文件,后期最常的命令之一

1
2
3
4
5
6
7
8
9
10
11
vi 文件名 				# 查看文件。(查看模式)
i | a | o # 进入编辑模式。(编辑模式)
# i:在当前光标处,进入编辑模式。
# a:在当前光标后一格,进入编辑模式。
# o:在当前光标下一行,进入编辑模式。
esc # 退出编辑模式,回到查看模式。
: # 从查看模式进入到底行命令模式。(底行命名模式)
# 在底行命令模式下,输入wq:保存并退出。输入q!:不保存并退出
# :wq 保存并退出 # :q! 不保存退出
# 在查看模式下,摁ZZ,可以快速保存并退出。
dd # 在查看模式,直接按两下d,可以删除当前行

vi文件时,其他操作

编辑文件时,常用的快捷键,方便操作

1
2
3
4
5
6
7
8
9
10
# 在vi文件时,在底行命令模式下可以输入以下常用内容
# 行号操作
set nu # 查看文件的行号
to rownum # 快速的跳转到指定行
set nonu # 取消行号
# 搜索操作
/word # 类似Windows的Ctrl + F搜索文件中的具体内容所在位置,查看下一个可以输入字母n
# 快速定位
G # 快速跳转到最后一行
gg # 快速跳转到第一行

查看文件

根据不同的业务,可以选择不同的查看方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 查看文件

cat 文件名
# 从第一行开始查看文件内容,展示全部

tac 文件名
# 从最后一行开始展示【倒着查看】

nl 文件名
# 显示文件的内容时,展示行号

more 文件名
# 查看大文件时,可以一页一页的向下翻
# 嗯space向下翻页,退出时摁q

less 文件名
# 查看大文件时,可以任意的向上或者向下翻
# 向上或向下翻页摁PageUp和PageDown,一行一行查看,摁光标的↑↓

head 文件名
# 只查看前几行

tail 文件名
# 只查看后几行
# tail -f 日志 监控日志
  • Linux配置环境变量的文件【将来jdk环境变量就会配置在这里】
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# /etc/profile

# System wide environment and startup programs, for login setup
# Functions and aliases go in /etc/bashrc

# It's NOT a good idea to change this file unless you know what you
# are doing. It's much better to create a custom.sh shell script in
# /etc/profile.d/ to make custom changes to your environment, as this
# will prevent the need for merging in future updates.

pathmunge () {
case ":${PATH}:" in
*:"$1":*)
;;
*)
if [ "$2" = "after" ] ; then
PATH=$PATH:$1
else
PATH=$1:$PATH
fi
esac
}


if [ -x /usr/bin/id ]; then
if [ -z "$EUID" ]; then
# ksh workaround
EUID=`/usr/bin/id -u`
UID=`/usr/bin/id -ru`
fi
USER="`/usr/bin/id -un`"
LOGNAME=$USER
MAIL="/var/spool/mail/$USER"
fi

# Path manipulation
if [ "$EUID" = "0" ]; then
pathmunge /usr/sbin
pathmunge /usr/local/sbin
else
pathmunge /usr/local/sbin after
pathmunge /usr/sbin after
fi

HOSTNAME=`/usr/bin/hostname 2>/dev/null`
HISTSIZE=1000
if [ "$HISTCONTROL" = "ignorespace" ] ; then
export HISTCONTROL=ignoreboth
else
export HISTCONTROL=ignoredups
fi

export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL

# By default, we want umask to get set. This sets it for login shell
# Current threshold for system reserved uid/gids is 200
# You could check uidgid reservation validity in
# /usr/share/doc/setup-*/uidgid file
if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
umask 002
else
umask 022
fi

for i in /etc/profile.d/*.sh /etc/profile.d/sh.local ; do
if [ -r "$i" ]; then
if [ "${-#*i}" != "$-" ]; then
. "$i"
else
. "$i" >/dev/null
fi
fi
done

unset i
unset -f pathmunge

移动、重命名文件

移动、重命名目录,会根据第二个参数指定具体操作逻辑

1
2
mv 文件名 新文件名 | 路径
# 如果第二个参数指定的路径不存在,就是重命名,如果第二个参数的路径存在,就是移动

复制文件

复制文件到指定目录下

1
cp 文件名 目录

删除文件

删除文件方式

1
2
rm [-f] 文件名
# -f:是否询问

Linux的压缩包命令【重点


针对tar命令

Linux中常用的压缩包,大多是.tar,.tar.gz,tgz的

解压压缩包

针对压缩包后缀的情况,采用不同的参数,否则可能会损失文件

1
2
3
4
5
6
tar [-zxvf] 压缩包名称 [-C 路径]
# -z: 代表压缩包后缀是.gz的
# -x: 代表解压
# -v: 解压时,打印详细信息
# -f: -f选项必须放在所有选项的最后,代表指定文件名称
# -C 路径: 代表将压缩包内容解压到指定路径
打包成压缩包

可以将多个文件以及目录打包成压缩包,根据选择的参数指定压缩包名

1
2
3
tar [-zcvf] 压缩包名称 文件1 文件2 目录1 目录2 ...
# -c: 代表打包
# 其他参数同上

针对zip类型压缩包

Linux不仅仅针对tar类型的压缩包,也支持zip,rar这种Windows下的压缩包。

不过需要安装软件针对对各种类型压缩包的操作

安装软件
1
2
yum -y install zip     # 打包程序
yum -y install unzip # 解压程序
解压以及打包
1
2
3
4
5
# 解压
unzip 压缩包名称

# 打包
zip 压缩包名称 文件1 文件2 目录1 目录2 ...

用户&用户组的操作


用户的常用操作命令

Linux是一个多用户的操作系统,任何一个用户想要操作Linux操作系统,必须向系统管理员申请一个账号才可以,并且以这个账号的身份去操作Linux。

用户的账号一方面可以帮助系统管理员追踪当前用户的操作。另一方面可以控制当前用户对系统资源访问。

查看用户
1
2
# 查看当前系统所有用户
cat /etc/passwd
用户的创建
1
useradd 用户名
设置用户密码
1
passwd 用户名
查看用户在哪个组
1
2
groups [user]
#user不写,则代表当前用户
切换用户
1
2
3
su 用户名
# [root@localhost ~]# -> root用户在本地登录,并且当前在~目录下,#代表是超级管理员
# [java2003@localhost ~]$ -> java2003用户在本地登录,并且当前在~目录下,$代表是普通用户

su 用户名在切换用户时,由超级管理员切换到其他用户,是不需要输入密码的。

反之,则需要输入密码以保证安全。

1597818343188
删除用户
1
2
userdel [-r] 用户名
# -r: 代表删除用户的同时,删除该用户的HOME目录
1
2
3
# 如果出现如下错误,原因是因为多次切换用户,造成进程被占用,使用Ctrl+d退出即可(多退出几次)
[root@localhost ~]# userdel -r java2003
userdel: user java2003 is currently used by process 1742
修改用户
1
2
3
4
usermod [-cgd] [选项指定的具体内容] 用户名
# -c:代表comment,给用户添加一段注释
# -g:代表group,可以修改用户的所在组
# -d:代表指定用户的HOME目录

用户组的操作

用户的身份除了用户本身,还会分配到指定的用户组,可以通过用户组对设置一些文件的操作权限

创建用户组
1
groupadd 用户组名
修改用户组
1
2
groupmod [-n] [选项指定的具体内容] 用户组名
# -n 修改用户组名称
删除用户组
1
2
3
groupdel 用户组名
# 只能删除不存在用户的用户组
# 只能删除一个没有用户的组

文件权限的修改【重点


首先我们要清楚Linux文件的权限信息

在Linux中输入ls -l 或者 ll查看文件和目录的详细信息

文件详情
1586268971368
1597819507393

实例中,a目录的第一个属性用“d”标识这个a是一个目录。

anaconda-ks.cfg第一个属性用“-”标识他是一个文件。

bin第一个属性用“l”标识他是一个链接

在Linux文件详情的后面属性需要分为三组查看

  • rwx: 代表文件拥有者的权限
  • rwx: 代表文件所属组用户的权限
  • rwx: 代表其他用户对当前文件的操作权限
    • r: 代表read,读的权限
    • w: 代表write,写的权限
    • x: 代表execute,代表执行权限

其余信息

  • 后续的第一个root:代表当前文件的拥有者

  • 后续的第二个root: 代表当前文件的所属组

  • 后续分别为:文件的大小和最后修改时间等信息

对文件的权限修改

使用chmod对文件的权限进行修改,一种使用数字,一种使用符号……

  • 数字方式方便操作,不过要修改整体权限信息
  • 符号方式更细粒度华,不过操作麻烦
数字方式【推荐】
1
2
3
chmod [-R] 777 文件|目录
# rwx在这三个权限中r:4,w:2,x:1
# -R: 当修改一个目录权限时,可以添加-R,将目录下的全部内容,都修改权限。
符号方式
1
2
3
4
5
chmod [-R] a=rw 文件|目录
# user:u,group:g,other:o,all:a
# read:r,write:w,execute:x
# 赋予权限的方式 , 添加:+,减掉:-,设定:=
# -R: 当修改一个目录权限时,可以添加-R,将目录下的全部内容,都修改权限。

文件拥有者及所属组修改

chown可以直接修改拥有者和所属组,chgrp只能修改所属组……

1
2
3
4
5
6
# 修改文件的拥有者和所属组
chown [-R] 拥有者:所属组 文件|目录
# 修改文件的拥有者
chown [-R] 拥有者 文件|目录
# 修改文件的所属组
chgrp [-R] 所属组 文件|目录

Linux的其他操作命令【重点


进程的操作

需要用到类似Windows的结束进程时,在Linux下需要使用如下命令

1
2
3
4
5
ps -ef 
# 查看全部正在运行的进程
ps -ef | grep 搜索的内容
# 杀死进程
kill -9 pid
1
2
# 查看防火墙进程
ps -ef | grep firewalld

1596635179099

服务的操作

和Windows下的服务操作一致,只需使用如下命令,默认为centos7版本

1
2
3
4
5
6
# 针对服务的启动,停止,重启,开机自动启动,禁止开机自动启动,查看服务状态。
systemctl start|stop|restart|enable|disable|status 服务名称

systemctl stop firewalld #关闭防火墙,仅本次有效,下次开机,依旧会启动防火墙
systemctl disable firewalld #永久关闭防火墙,重启后有效
reboot #重启

端口号查看

如发现端口号被占用,可以使用如下方式查找pid,并结束进程

1
2
3
4
# 想使用指定的命令需要事先下载netstat
yum -y install net-tools
# 查看端口号占用情况
netstat -naop | grep 端口号

访问地址

类似浏览器访问路径,无法图形化显示,一般用于测试

1
2
3
4
curl 访问地址

#访问百度,会返回百度的内容
curl www.baidu.com

查找文件

在Linux中查找指定文件,参数较多,如下为根据文件名称查询

1
find 路径 -type f | grep profile

历史记录

1
2
#获取曾经操作过的所有命令
history

重点命令

6、7、8、10、11

Linux下安装软件


安装JDK

在Linux下安装JDK,并配置JAVA_HOME环境变量……

下载JDK的压缩包

去逛网下载压缩包,由于oracle官网更新,需要登录并同意协议才允许下载

https://www.oracle.com/cn/java/technologies/javase/javase-jdk8-downloads.html

将jdk压缩包拉取到Linux系统中

需要使用图形化界面的Sftp拖拽到Linux操作系统

Xterm的Sftp图
1589258771046
将jdk的压缩包解压

后期大多软件都安装在/usr/local下,直接使用tar解压

1
tar -zxvf jdk-8u261-linux-x64.tar.gz -C /usr/local
将jdk的目录名修改一下

为了方便配置环境变量,修改一下目录名称

1
2
cd /usr/local
mv jdk1.8.0_261 jdk8
配置环境变量

Linux提供了两种环境变量的文件

  • 第一个是用户级别的环境变量,存放在:~/.bashrc
  • 第二个是系统级别的环境变量,存放在:/etc/profile

修改哪个文件都可以,毕竟虚拟机就我们自己使用

1
2
3
4
5
6
7
# 在环境变量文件中,添加如下内容
export JAVA_HOME=/usr/local/jdk8
export PATH=$JAVA_HOME/bin:$PATH
# 重新加载环境变量文件
source /etc/profile
# 最终测试
java -version
测试效果
1596638102097

安装MySQL

在MySQL下用yum的方式安装MySQL……

安装MySQL的YUM存储库

使用wget下载即可,不过需要先下载wget,再通过wget下载rpm包

1
2
3
4
# 首先通过yum下载wget命令
yum -y install wget
# 通过wget下载MySQL存储库
wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
安装下载好的rpm包

使用rpm包的命令直接安装

1
2
3
4
5
6
# 安装rpm包
rpm -Uvh mysql80-community-release-el7-3.noarch.rpm
# 查看rpm包
rpm -qa | grep 内容
# 卸载rpm (不需要指定当前命令。。。)
rpm -e --nodeps rpm名称
选择发行版本

由于默认安装8.0版本的MySQL,我们需要修改为5.7版本

1
2
3
# 查看一下默认选择的发行版本
yum repolist all | grep mysql

1596636795087

1
2
3
# 通过编辑/etc/yum.repos.d/mysql-community.repo文件,去修改发行版本
vi /etc/yum.repos.d/mysql-community.repo
# 将80的enabled更改为0,将57的enabled更改为1,保存即可,再次通过yum repolist all | grep mysql查看

1596636951178

1
2
#再次查看
yum repolist all | grep mysql
MySQL安装版本
1586309805089
安装MySQL社区版服务

开始安装,这一步需要下载一段时间,下载失败就是网络较差了,学会科学上网

1
yum -y install mysql-community-server
启动MySQL服务,并连接

安装成功后,手动启动,并使用日志中的密码登陆,而且第一个操作必须是修改密码,才可后续正常操作

1
2
3
4
5
6
7
8
9
10
# 启动MySQL服务
systemctl start mysqld.service
# 查看初始化密码
grep 'temporary password' /var/log/mysqld.log
# 连接MySQL服务
mysql -u root -p
Enter password:随机密码
# 修改密码
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'P@ssw0rd';
# 要求密码,必须携带大写字母,小写字母,数字,特殊符号
开启远程连接

默认MySQL禁止远程链接,需要单独创建一个用户开启远程链接,这样就可以在windows下使用图形化工具连接

1
2
3
4
mysql> GRANT ALL PRIVILEGES ON *.* TO 'ghy'@'%' IDENTIFIED BY 'P@ssw0rd' WITH GRANT OPTION;
#ghy为用户名,远程登录时,需要使用此用户登录

mysql> FLUSH PRIVILEGES;

安装Tomcat

在Linux下安装Tomcat,以便部署工程到Linux操作系统

下载Tomcat的压缩包

下载安装包

  1. http://tomcat.apache.org/
  2. 1596638379754
  3. 1596638542579
  4. 下载后,拖动到linux中即可
解压压缩包

一样解压到/usr/local目录下

1
tar -zxvf apache-tomcat-8.5.53.tar.gz -C /usr/local
启动Tomcat并监听日志

通过./执行可运行文件,并使用tail监控日志信息

1
2
3
4
5
6
7
8
# 跳转到tomcat的bin目录
cd /usr/local/apache-tomcat-8.5.53/bin
# 启动
./startup.sh
# 监控日志
cd ../logs
tail -f catalina.out
# 启动成功如下
日志及Tomcat首页
1586313889843
1586313916362
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!-- 依赖 -->
<build>
<plugins>
<!-- tomcat插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<!-- http://localhost -->
<port>80</port>
<path>/</path>
<uriEncoding>UTF-8</uriEncoding>
</configuration>
</plugin>
</plugins>
</build>