Linux进阶之路-Ubuntu版

Linux进阶之路

Linux 简介

概述

Linux 是一种自由和开放源码的类 UNIX 操做系统,使用 Linux 内核。目前存在着许多不一样的 Linux 发行版,可安装在各类各样的电脑硬件设备,从手机、平板电脑、路由器和影音游戏控制台,到桌上型电脑,大型电脑和超级电脑。 Linux 是一个领先的操做系统,世界上运算最快的 10 台超级电脑运行的都是 Linux 操做系统。java

Linux 操做系统也是自由软件和开放源代码发展中最著名的例子。只要遵循 GNU 通用公共许可证,任何人和机构均可以自由地使用 Linux 的全部底层源代码,也能够自由地修改和再发布。严格来说,Linux 这个词自己只表示 Linux 内核,但在实际上人们已经习惯了用 Linux 来形容整个基于 Linux 内核,而且使用 GNU 工程各类工具和数据库的操做系统 (也被称为 GNU/ Linux)。一般状况下,Linux 被打包成供桌上型电脑和服务器使用的 Linux 发行版本。一些流行的主流 Linux 发行版本,包括 Debian (及其衍生版本 Ubuntu),Fedora 和 OpenSUSE 等。Kernel + Softwares + Tools 就是 Linux Distributionnode

目前市面上较知名的发行版有:Ubuntu、RedHat、CentOS、Debian、Fedora、SuSE、OpenSUSE、TurboLinux、BluePoint、RedFlag、Xterm、SlackWare等。mysql

Linux 与 Windows 比较

目前国内 Linux 更多的是应用于服务器上,而桌面操做系统更多使用的是 Windows。主要区别以下linux

比较 Windows Linux
界面 界面统一,外壳程序固定全部 Windows 程序菜单几乎一致,快捷键也几乎相同 图形界面风格依发布版不一样而不一样,可能互不兼容。GNU/Linux 的终端机是从 UNIX 传承下来,基本命令和操做方法也几乎一致。
驱动程序 驱动程序丰富,版本更新频繁。默认安装程序里面通常包含有该版本发布时流行的硬件驱动程序,以后所出的新硬件驱动依赖于硬件厂商提供。对于一些老硬件,若是没有了原配的驱动有时很难支持。另外,有时硬件厂商未提供所需版本的 Windows 下的驱动,也会比较头痛。 由志愿者开发,由Linux核心开发小组发布,不少硬件厂商基于版权考虑并未提供驱动程序,尽管多数无需手动安装,可是涉及安装则相对复杂,使得新用户面对驱动程序问题(是否存在和安装方法)会束手无策。可是在开源开发模式下,许多老硬件尽管在 Windows 下很难支持的也容易找到驱动。HP、Intel、AMD 等硬件厂商逐步不一样程度支持开源驱动,问题正在获得缓解。
使用 使用比较简单,容易入门。图形化界面对没有计算机背景知识的用户使用十分有利。 图形界面使用简单,容易入门。文字界面,须要学习才能掌握。
学习 系统构造复杂、变化频繁,且知识、技能淘汰快,深刻学习困难。 系统构造简单、稳定,且知识、技能传承性好,深刻学习相对容易。
软件 每一种特定功能可能都须要商业软件的支持,须要购买相应的受权。 大部分软件均可以自由获取,一样功能的软件选择较少。

安装 Linux 操做系统

原生云应用基本都是基于云服务器部署,本地化的 Linux 操做基本也都是在虚拟机中进行模拟操做。故咱们只须要安装虚拟机并在虚拟机上安装对应的 Linux 操做系统便可。本博客所有基于 Ubuntu Server 18.04 LTS 操做系统进行实践。程序员

安装中须要设置镜像地址,咱们使用阿里云镜像地址,http://mirrors.aliyun.com/ubuntu/web

Linux 远程控制管理

概述

传统的网络服务程序,FTP、POP、Telnet 本质上都是不安全的,由于它们在网络上经过明文传送口令和数据,这些数据很是容易被截获。SSH 叫作 Secure Shell。经过 SSH,能够把传输数据进行加密,预防攻击,传输的数据进行了压缩,能够加快传输速度。算法

OpenSSH

SSH 是芬兰一家公司开发。可是受到版权和加密算法限制,如今不少人都使用 OpenSSH。OpenSSH 是 SSH 的替代软件,免费。OpenSSH 由客户端和服务端组成。sql

  • 基于口令的安全验证: 知道服务器的账号密码便可远程登陆,口令和数据在传输过程当中都会被加密。
  • 基于密钥的安全验证: 此时须要在建立一对密钥,把公有密钥放到远程服务器上本身的宿主目录中,而私有密钥则由本身保存。

安装流程以下:shell

  • 检查软件是否安装
sudo apt-cache policy openssh-client openssh-server
  • 安装服务端
sudo apt-get install openssh-server
  • 安装客户端
sudo apt-get install openssh-client

OpenSSH 服务器的主要配置文件为 /etc/ssh/sshd\_config,几乎全部的配置信息都在此文件中。数据库

XShell

XShell 是一个强大的安全终端模拟软件,它支持 SSH1, SSH2, 以及 Microsoft Windows 平台的 TELNET 协议。XShell 经过互联网到远程主机的安全链接以及它创新性的设计和特点帮助用户在复杂的网络环境中享受他们的工做。

XShell 能够在 Windows 界面下用来访问远端不一样系统下的服务器,从而比较好的达到远程控制终端的目的。

Linux 目录管理

目录结构

img

目录 说明
bin 存放二进制可执行文件(ls, cat, mkdir 等)
boot 存放用于系统引导时使用的各类文件
dev 用于存放设备文件
etc 存放系统配置文件
home 存放全部用户文件的根目录
lib 存放跟文件系统中的程序运行所须要的共享库及内核模块
mnt 系统管理员安装临时文件系统的安装点
opt 额外安装的可选应用程序包所放置的位置
proc 虚拟文件系统,存放当前内存的映射
root 超级用户目录
sbin 存放二进制可执行文件,只有 root 才能访问
tmp 用于存放各类临时文件
usr 用于存放系统应用程序,比较重要的目录 /usr/local 本地管理员软件安装目录
var 用于存放运行时须要改变数据的文件

操做文件目录

命令 说明 语法 参数 参数说明
ls 显示文件和目录列表 ls [-alrtAFR] [name…]
-l 列出文件的详细信息
-a 列出当前目录全部文件,包含隐藏文件
mkdir 建立目录 mkdir [-p] dirName
-p 父目录不存在状况下先生成父目录
cd 切换目录 cd [dirName]
touch 生成一个空文件
echo 生成一个带内容文件 echo abcd > 1.txt,echo 1234 >> 1.txt
cat 显示文本文件内容 cat [-AbeEnstTuv][–help] [–version] fileName
cp 复制文件或目录 cp [options] source dest
rm 删除文件 rm [options] name…
-f 强制删除文件或目录
-r 同时删除该目录下的全部文件
mv 移动文件或目录 mv [options] source dest
find 在文件系统中查找指定的文件
-name 文件名
grep 在指定的文本文件中查找指定的字符串
tree 用于以树状图列出目录的内容
pwd 显示当前工做目录
ln 创建软连接
more 分页显示文本文件内容
head 显示文件开头内容
tail 显示文件结尾内容
-f 跟踪输出

压缩解压缩

tar

命令 语法 参数 参数说明
tar tar [-cxzjvf] 压缩打包文档的名称 欲打包目录
-c 创建一个归档文件的参数指令
-x 解开一个归档文件的参数指令
-z 是否须要用 gzip 压缩
-j 是否须要用 bzip2 压缩
-v 压缩的过程当中显示文件
-f 使用档名,在 f 以后要当即接档名
-tf 查看归档文件里面的文件

例子:

  • 压缩文件夹:tar -zcvf test.tar.gz test\
  • 解压文件夹:tar -zxvf test.tar.gz

gzip

命令 语法 参数 参数说明
gzip gzip [选项] 压缩(解压缩)的文件名
-d 解压缩
-l 对每一个压缩文件,显示压缩文件的大小,未压缩文件的大小,压缩比,未压缩文件的名字
-v 对每个压缩和解压的文件,显示文件名和压缩比
-num 用指定的数字num调整压缩的速度,-1或–fast表示最快压缩方法(低压缩比),-9或–best表示最慢压缩方法(高压缩比)。系统缺省值为6

压缩文件后缀为 gz

bzip2

命令 语法 参数 参数说明
bzip2 bzip2 [-cdz]
-d 解压缩
-z 压缩参数
-num 用指定的数字num调整压缩的速度,-1或–fast表示最快压缩方法(低压缩比),-9或–best表示最慢压缩方法(高压缩比)。系统缺省值为6

压缩文件后缀为 bz2

Linux 系统管理

系统管理命令

命令 说明
stat 显示指定文件的相关信息,比 ls 命令显示内容更多
who 显示在线登陆用户
hostname 显示主机名称
uname 显示系统信息
top 显示当前系统中耗费资源最多的进程
ps 显示瞬间的进程状态
du 显示指定的文件(目录)已使用的磁盘空间的总量
df 显示文件系统磁盘空间的使用状况
free 显示当前内存和交换空间的使用状况
ifconfig 显示网络接口信息
ping 测试网络的连通性
netstat 显示网络状态信息
clear 清屏
kill 杀死一个进程

开关机命令

shutdown 命令能够用来进行关机程序,而且在关机之前传送讯息给全部使用者正在执行的程序,shutdown 也能够用来重开机。

命令 语法 参数 参数说明
shutdown shutdown [-t seconds] [-rkhncfF] time [message]
-t seconds 设定在几秒钟以后进行关机程序
-k 并不会真的关机,只是将警告讯息传送给全部只用者
-r 关机后从新开机(重启)
-h 关机后停机
-n 不采用正常程序来关机,用强迫的方式杀掉全部执行中的程序后自行关机
-c 取消目前已经进行中的关机动做
-f 关机时,不作 fcsk 动做(检查 Linux 档系统)
-F 关机时,强迫进行 fsck 动做
time 设定关机的时间
message 传送给全部使用者的警告讯息

重启

  • sudo reboot
  • sudo shutdown -r now

关机

  • shutdown -h now

Linux Vim 编辑器

概述

Vim 是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被普遍使用。

简单的来讲, vi 是老式的字处理器,不过功能已经很齐全了,可是仍是有能够进步的地方。 Vim 则能够说是程序开发者的一项很好用的工具。

运行模式

  • 编辑模式:等待编辑命令输入
  • 插入模式:编辑模式下,输入 i 进入插入模式,插入文本信息
  • 命令模式:在编辑模式下,输入 : 进行命令模式

命令模式

  • :q:直接退出vi
  • :wq:保存后退出vi ,并能够新建文件
  • :q!:强制退出
  • :w file:将当前内容保存成某个文件
  • /:查找字符串
  • :set number: 在编辑文件显示行号
  • :set nonumber:在编辑文件不显示行号
  • :set paste:原样粘贴

Linux 用户和组管理

概述

Linux 操做系统是一个多用户操做系统,它容许多用户同时登陆到系统上并使用资源。系统会根据帐户来区分每一个用户的文件,进程,任务和工做环境,使得每一个用户工做都不受干扰。

使用 Root 用户

在实际生产操做中,咱们基本上都是使用超级管理员帐户操做 Linux 系统,也就是 Root 用户,Linux 系统默认是关闭 Root 帐户的,咱们须要为 Root 用户设置一个初始密码以方便咱们使用。

  • 设置 Root 帐户密码
sudo passwd root
  • 切换到 Root
su
  • 设置容许远程登陆 Root
vi /etc/ssh/sshd_config

# Authentication:
LoginGraceTime 120
#PermitRootLogin without-password     //注释此行
PermitRootLogin yes                             //加入此行
StrictModes yes

# 重启服务
service ssh restart

用户帐户说明

  • 普通用户: 普通用户在系统上的任务是进行普通操做
  • 超级管理员: 管理员在系统上的任务是对普通用户和整个系统进行管理。对系统具备绝对的控制权,可以对系统进行一切操做。用 root 表示,root 用户在系统中拥有最高权限,默认下 Ubuntu 用户的 root 用户是不能登陆的。
  • 安装时建立的系统用户: 此用户建立时被添加到 admin 组中,在 Ubuntu 中,admin 组中的用户默认是可使用 sudo 命令来执行只有管理员才能执行的命令的。若是不使用 sudo 就是一个普通用户。

组帐户说明

  • 私有组: 当建立一个用户时没有指定属于哪一个组,Linux 就会创建一个与用户同名的私有组,此私有组只含有该用户。
  • 标准组: 当建立一个用户时能够选定一个标准组,若是一个用户同时属于多个组时,登陆后所属的组为主组,其余的为附加组。

扩展阅读

帐户系统文件说明

/etc/passwd

每一行表明一个帐号,众多帐号是系统正常运行所必须的,例如 bin,nobody 每行定义一个用户帐户,此文件对全部用户可读。每行帐户包含以下信息:

root:x:0:0:root:/root:/bin/bash
  • 用户名: 就是帐号,用来对应 UID,root UID 是 0。
  • 口令: 密码,早期 UNIX 系统密码存在此字段,因为此文件全部用户均可以读取,密码容易泄露,后来这个字段数据就存放到 /etc/shadow 中,这里只能看到 X。
  • 用户标示号(UID): 系统内惟一,root 用户的 UID 为 0,普通用户从 1000 开始,1-999 是系统的标准帐户,500-65536 是可登录帐号。
  • 组标示号(GID): 与 /etc/group 相关用来规定组名和 GID 相对应。
  • 注释: 注释帐号
  • 宿主目录(主文件夹): 用户登陆系统后所进入的目录 root 在 /root/itcast
  • 命令解释器(shell): 指定该用户使用的 shell ,默认的是 /bin/bash

/etc/shadow

为了增长系统的安全性,用户口令一般用 shadow passwords 保护。只有 root 可读。每行包含以下信息:

root:$6$Reu571.V$Ci/kd.OTzaSGU.TagZ5KjYx2MLzQv2IkZ24E1.yeTT3Pp4o/yniTjus/rRaJ92Z18MVy6suf1W5uxxurqssel.:17465:0:99999:7:::
  • 帐号名称: 须要和 /etc/passwd 一致。

  • 密码:

    通过加密,虽然加密,但不表示不会被破解,该文件默认权限以下:

    • -rw------- 1 root root 1560 Oct 26 17:20 passwd-
    • 只有root能都读写
  • 最近修改密码日期: 从1970-1-1起,到用户最后一次更改口令的天数

  • 密码最小时间间隔: 从1970-1-1起,到用户能够更改口令的天数

  • 密码最大时间间隔: 从1970-1-1起,必须更改的口令天数

  • 密码到期警告时间: 在口令过时以前几天通知

  • 密码到期后帐号宽限时间

  • 密码到期禁用帐户时间: 在用户口令过时后到禁用帐户的天数

  • 保留

/etc/group

用户组的配置文件

root:x:0:
  • 用户组名称
  • 用户组密码: 给用户组管理员使用,一般不用
  • GID: 用户组的ID
  • 此用户支持的帐号名称: 一个帐号能够加入多个用户组,例如想要 itcast 加入 root 这个用户组,将该帐号填入该字段便可 root:x:0:root, icast 将用户进行分组是 Linux 对用户进行管理及控制访问权限的一种手段。一个中能够有多个用户,一个用户能够同时属于多个组。该文件对全部用户可读。

/etc/gshadow

该文件用户定义用户组口令,组管理员等信息只有root用户可读。

root:\*::
  • 用户组名
  • 密码列
  • 用户组管理员的帐号
  • 用户组所属帐号

帐户管理经常使用命令

增长用户

useradd 用户名
useradd -u (UID号)
useradd -p (口令)
useradd -g (分组)
useradd -s (SHELL)
useradd -d (用户目录)

如:useradd luxiu

增长用户名为 luxiu 的帐户

修改用户

usermod -u (新UID)
usermod -d (用户目录)
usermod -g (组名)
usermod -s (SHELL)
usermod -p (新口令)
usermod -l (新登陆名)
usermod -L (锁定用户帐号密码)
usermod -U (解锁用户帐号)usermod -u (新UID)usermod -d (用户目录)usermod -g (组名)usermod -s (SHELL)usermod -p (新口令)usermod -l (新登陆名)usermod -L (锁定用户帐号密码)usermod -U (解锁用户帐号)

如:usermod -u 1024 -g group2 -G root luxiu

将 luxiu 用户 uid 修改成 1024,默认组改成系统中已经存在的 group2,而且加入到系统管理员组

删除用户

userdel 用户名 (删除用户帐号)
userdel -r 删除帐号时同时删除目录

如:userdel -r luxiu

删除用户名为 luxiu 的帐户并同时删除 luxiu 的用户目录

组帐户维护

groupadd 组帐户名 (建立新组)
groupadd -g 指定组GID
groupmod -g 更改组的GID
groupmod -n 更改组帐户名
groupdel 组帐户名 (删除指定组帐户)

口令维护

passwd 用户帐户名 (设置用户口令)
passwd -l 用户帐户名 (锁定用户帐户)
passwd -u 用户帐户名 (解锁用户帐户)
passwd -d 用户帐户名 (删除帐户口令)
gpasswd -a 用户帐户名 组帐户名 (将指定用户添加到指定组)
gpasswd -d 用户帐户名 组帐户名 (将用户从指定组中删除)
gpasswd -A 用户帐户名 组帐户名 (将用户指定为组的管理员)

用户和组状态

su 用户名(切换用户帐户)
id 用户名(显示用户的UID,GID)
whoami (显示当前用户名称)
groups (显示用户所属组)

Linux 文件权限管理

查看文件和目录的权限

概述

ls –al 使用 ls 不带参数只显示文件名称,经过 ls –al 能够显示文件或者目录的权限信息。

ls -l 文件名 显示信息包括:文件类型 (d 目录,- 普通文件,l 连接文件),文件权限,文件的用户,文件的所属组,文件的大小,文件的建立时间,文件的名称

-rw-r--r-- 1 luxiu luxiu 675 Oct 26 17:20 .profile
  • -:普通文件
  • rw-:说明用户 luxiu 有读写权限,没有运行权限
  • r--:表示用户组 luxiu 只有读权限,没有写和运行的权限
  • r--:其余用户只有读权限,没有写权限和运行的权限
-rw-r–r-- 1 luxiu luxiu 675 Oct 26 17:20 .profile
文档类型及权限 链接数 文档所属用户 文档所属组 文档大小 文档最后被修改日期 文档名称
- rw- r– r–
文档类型 文档全部者权限(user) 文档所属用户组权限(group) 其余用户权限(other)

文档类型

  • d 表示目录
  • l 表示软链接
  • 表示文件
  • c 表示串行端口字符设备文件
  • b 表示可供存储的块设备文件
  • 余下的字符 3 个字符为一组。r 只读,w 可写,x 可执行,- 表示无此权限

链接数

指有多少个文件指向同一个索引节点。

文档所属用户和所属组

就是文档属于哪一个用户和用户组。文件所属用户和组是能够更改的

文档大小

默认是 bytes

更改操做权限

chown

是 change owner 的意思,主要做用就是改变文件或者目录全部者,全部者包含用户和用户组

  • chown [-R] 用户名称 文件或者目录
  • chown [-R] 用户名称 用户组名称 文件或目录

-R: 进行递归式的权限更改,将目录下的全部文件、子目录更新为指定用户组权限

chmod

改变访问权限

  • chmod [who] [+ | - | =] [mode] 文件名

who

表示操做对象能够是如下字母的一个或者组合

  • u:用户 user
  • g:用户组 group
  • o:表示其余用户
  • a:表示全部用户是系统默认的

操做符号

  • +:表示添加某个权限
  • -:表示取消某个权限
  • =:赋予给定的权限,取消文档之前的全部权限

mode

表示可执行的权限,能够是 r、w、x

文件名

文件名可使空格分开的文件列表

示例

luxiu@UbuntuBase:~$ ls -al test.txt 
-rw-rw-r-- 1 luxiu luxiu 6 Nov  2 21:47 test.txt
luxiu@UbuntuBase:~$ chmod u=rwx,g+r,o+r test.txt 
luxiu@UbuntuBase:~$ ls -al test.txt 
-rwxrw-r-- 1 luxiu luxiu 6 Nov  2 21:47 test.txt
luxiu@UbuntuBase:~$

数字设定法

数字设定法中数字表示的含义

  • 0 表示没有任何权限
  • 1 表示有可执行权限 = x
  • 2 表示有可写权限 = w
  • 4 表示有可读权限 = r

也能够用数字来表示权限如 chmod 755 file\_name

r w x r – x r - x
4 2 1 4 - 1 4 - 1
user group others
  • 若要 rwx 属性则 4+2+1=7
  • 若要 rw- 属性则 4+2=6
  • 若要 r-x 属性则 4+1=5
luxiu@UbuntuBase:~$ chmod 777 test.txt 
luxiu@UbuntuBase:~$ ls -al test.txt 
-rwxrwxrwx 1 luxiu luxiu 6 Nov  2 21:47 test.txt
luxiu@UbuntuBase:~$ chmod 770 test.txt 
luxiu@UbuntuBase:~$ ls -al test.txt 
-rwxrwx--- 1 luxiu luxiu 6 Nov  2 21:47 test.txt

Linux 软件包管理

概述

APT(Advanced Packaging Tool) 是 Debian/Ubuntu 类 Linux 系统中的软件包管理程序, 使用它能够找到想要的软件包, 并且安装、卸载、更新都很简便;也能够用来对 Ubuntu 进行升级; APT 的源文件为 /etc/apt/ 目录下的 sources.list 文件。

修改数据源

因为国内的网络环境问题,咱们须要将 Ubuntu 的数据源修改成国内数据源,操做步骤以下:

查看系统版本

lsb_release -a

# 输出以下
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.2 LTS
Release:        18.04
Codename:       bionic

注意: Codename 为 bionic,该名称为咱们 Ubuntu 系统的名称,修改数据源须要用到该名称

编辑数据源

vi /etc/apt/sources.list

删除所有内容并修改成

deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse

更新数据源

apt-get update

经常使用 APT 命令

  • 安装软件包:apt-get install <Package Name>
  • 删除软件包:apt-get remove <Package Name>
  • 更新软件包列表:apt-get update
  • 升级有可用更新的系统(慎用):apt-get upgrade
  • 搜索:apt-cache search <Package Name>
  • 获取包信息:apt-cache show <Package Name>
  • 删除包及配置文件:apt-get remove <Package Name> --purge
  • 了解使用依赖:apt-cache depends <Package Name>
  • 查看被哪些包依赖:apt-cache rdepends <Package Name>
  • 安装相关的编译环境:apt-get build-dep <Package Name>
  • 下载源代码:apt-get source <Package Name>
  • 清理无用的包:apt-get clean && apt-get autoclean
  • 检查是否有损坏的依赖:apt-get check

Linux 部署应用程序

安装 Java

解压缩并移动到指定目录

  • 解压缩:tar -zxvf jdk-8u152-linux-x64.tar.gz
  • 建立目录:mkdir -p /usr/local/java
  • 移动安装包:mv jdk1.8.0_152/ /usr/local/java/
  • 设置全部者:chown -R root:root /usr/local/java/

配置环境变量

  • 配置系统环境变量:vi /etc/environment
  • 修改系统环境变量
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
export JAVA_HOME=/usr/local/java/jdk1.8.0_152
export JRE_HOME=/usr/local/java/jdk1.8.0_152/jre
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
  • 配置用户环境变量:vi /etc/profile
  • 修改用户环境变量
if [ "$PS1" ]; then
  if [ "$BASH" ] && [ "$BASH" != "/bin/sh" ]; then
    # The file bash.bashrc already sets the default PS1.
    # PS1='\h:\w\$ '
    if [ -f /etc/bash.bashrc ]; then
      . /etc/bash.bashrc
    fi
  else
    if [ "`id -u`" -eq 0 ]; then
      PS1='# '
    else
      PS1='$ '
    fi
  fi
fi
export JAVA_HOME=/usr/local/java/jdk1.8.0_152
export JRE_HOME=/usr/local/java/jdk1.8.0_152/jre
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOME/bin
if [ -d /etc/profile.d ]; then
  for i in /etc/profile.d/*.sh; do
    if [ -r $i ]; then
      . $i
    fi
  done
  unset i
fi
  • 使用户环境变量生效:source /etc/profile

验证安装是否成功

java -version

# 输出以下
java version "1.8.0_152"
Java(TM) SE Runtime Environment (build 1.8.0_152-b16)
Java HotSpot(TM) 64-Bit Server VM (build 25.152-b16, mixed mode)

安装 Tomcat

解压缩并移动到指定目录

  • 解压缩:tar -zxvf apache-tomcat-8.5.23.tar.gz
  • 变动目录:mv apache-tomcat-8.5.23 tomcat
  • 移动目录:mv tomcat/ /usr/local/

验证安装是否成功

  • 启动:
    • /usr/local/tomcat/bin/startup.sh
    • ./startup.sh
  • 中止:
    • /usr/local/tomcat/bin/shutdown.sh
    • ./shutdown.sh

安装 MySQL

安装

  • 更新数据源:apt-get update
  • 安装数据库:apt-get install mysql-server

注意: 系统将提示您在安装过程当中建立 root 密码。选择一个安全的密码,并确保你记住它,由于你之后须要它。接下来,咱们将完成 MySQL 的配置。

配置

注意: 由于是全新安装,您须要运行附带的安全脚本。这会更改一些不太安全的默认选项,例如远程 root 登陆和示例用户。在旧版本的 MySQL 上,您须要手动初始化数据目录,但最新的 MySQL 已经自动完成了。

mysql_secure_installation

这将提示您输入您在以前步骤中建立的 root 密码。您能够按 Y,而后 ENTER 接受全部后续问题的默认值,可是要询问您是否要更改 root 密码。您只需在以前步骤中进行设置便可,所以无需如今更改。

验证安装是否成功

按上边方式安装完成后,MySQL 应该已经开始自动运行了。要测试它,请检查其状态。

systemctl status mysql

# 输出以下
● mysql.service - MySQL Community Server
   Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2017-11-21 13:04:34 CST; 3min 24s ago
 Main PID: 2169 (mysqld)
   CGroup: /system.slice/mysql.service
           └─2169 /usr/sbin/mysqld
Nov 21 13:04:33 ubuntu systemd[1]: Starting MySQL Community Server...
Nov 21 13:04:34 ubuntu systemd[1]: Started MySQL Community Server.

经常使用命令

  • 查看版本:mysqladmin -p -u root version
  • 启动:service mysql start
  • 中止:service mysql stop
  • 重启:service mysql restart
  • 登陆:mysql -u root -p
  • 受权:grant all privileges on *.* to 'root'@'%' identified by 'Your Password';

扩展阅读

配置使用密码方式登陆

在安装过程当中可能没有提示密码设置的环节此时默认使用的是 auth_socket 方式登陆,咱们须要修改成 mysql_native_password 方式,操做步骤以下

  • 本地登陆 MySQL,此时无需输入密码
mysql -u root -p
  • 切换数据库到 mysql
use mysql;
  • 修改 root 帐号密码
update user set authentication_string=password('123456') where user='root';
  • 设置登陆模式
update user set plugin="mysql_native_password";
  • 刷新配置
flush privileges;
  • 退出 MySQL
exit;
  • 从新启动 MySQL
systemctl restart mysql

配置远程访问

  • 修改配置文件
vi /etc/mysql/mysql.conf.d/mysqld.cnf
  • 注释掉(语句前面加上 # 便可):
# bind-address = 127.0.0.1
  • 重启 MySQL
service mysql restart
  • 登陆 MySQL
mysql -u root -p
  • 受权 root 用户容许全部人链接
grant all privileges on *.* to 'root'@'%' identified by 'Your Password';

因弱口令没法成功受权解决步骤

  • 查看和设置密码安全级别
select @@validate_password_policy;
set global validate_password_policy=0;
  • 查看和设置密码长度限制
select @@validate_password_length;
set global validate_password_length=1;

其它配置

修改配置文件:vi /etc/mysql/mysql.conf.d/mysqld.cnf

[client]
default-character-set=utf8
[mysqld]
default-storage-engine=INNODB
character-set-server=utf8
collation-server=utf8_general_ci
lower-case-table-names=1

注意: 配置内容追加到对应节点的底部便可

Linux LVM 磁盘扩容

LVM 的基本概念

  • 物理卷 Physical Volume (PV): 能够在上面创建卷组的媒介,能够是硬盘分区,也能够是硬盘自己或者回环文件(loopback file)。物理卷包括一个特殊的 header,其他部分被切割为一块块物理区域(physical extents)
  • 卷组 Volume group (VG): 将一组物理卷收集为一个管理单元
  • 逻辑卷 Logical volume (LV): 虚拟分区,由物理区域(physical extents)组成
  • 物理区域 Physical extent (PE): 硬盘可供指派给逻辑卷的最小单位(一般为 4MB)

磁盘操做相关命令

  • 查看挂载点
df -h
# 输出以下
Filesystem                         Size  Used Avail Use% Mounted on
udev                               955M     0  955M   0% /dev
tmpfs                              198M  1.8M  196M   1% /run
## 此处为咱们磁盘的挂载点
/dev/mapper/ubuntu--vg-ubuntu--lv   19G  6.0G   12G  35% /
tmpfs                              986M     0  986M   0% /dev/shm
tmpfs                              5.0M     0  5.0M   0% /run/lock
tmpfs                              986M     0  986M   0% /sys/fs/cgroup
/dev/loop1                          91M   91M     0 100% /snap/core/6350
/dev/loop0                          89M   89M     0 100% /snap/core/6964
/dev/sda2                          976M  143M  767M  16% /boot
  • 显示当前的 logical volume:lvdisplay
lvdisplay
# 输出以下
--- Logical volume ---
LV Path                /dev/ubuntu-vg/ubuntu-lv
LV Name                ubuntu-lv
VG Name                ubuntu-vg
LV UUID                e2fKkR-oZeH-WV2A-ltCi-P76v-N9yv-aUtIg1
LV Write Access        read/write
LV Creation host, time ubuntu-server, 2019-05-14 03:13:57 +0800
LV Status              available
# open                 1
LV Size                <19.00 GiB
Current LE             4863
Segments               1
Allocation             inherit
Read ahead sectors     auto
- currently set to     256
Block device           253:0
  • 显示当前的 volume group
vgdisplay
# 输出以下
--- Volume group ---
VG Name               ubuntu-vg
System ID             
Format                lvm2
Metadata Areas        1
Metadata Sequence No  2
VG Access             read/write
VG Status             resizable
MAX LV                0
Cur LV                1
Open LV               1
Max PV                0
Cur PV                1
Act PV                1
## 这里应该是你当前的可用空间大小,待扩容完毕,这里显示的应该是最终的大小
VG Size               <19.00 GiB
PE Size               4.00 MiB
Total PE              4863
Alloc PE / Size       4863 / <19.00 GiB
Free  PE / Size       0 / 0   
VG UUID               dhI9ns-7lOI-pXf8-IOWL-F96N-JIYG-ZF6u82
  • 显示当前的 physical volume
pvdisplay
# 输出以下
--- Physical volume ---
PV Name               /dev/sda3
VG Name               ubuntu-vg
PV Size               <19.00 GiB / not usable 0   
Allocatable           yes (but full)
PE Size               4.00 MiB
Total PE              4863
Free PE               0
Allocated PE          4863
PV UUID               TDFe2b-xsce-R8So-ldxR-ohcp-fx5J-n2JNOa

开始 LVM 扩容

查看 fdisk

fdisk -l
# 输出以下
Disk /dev/loop0: 88.4 MiB, 92733440 bytes, 181120 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/loop1: 91 MiB, 95408128 bytes, 186344 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/sda: 20 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: F96F20D7-1F28-4B03-87CF-4FA3E81FDE29
Device       Start      End  Sectors Size Type
/dev/sda1     2048     4095     2048   1M BIOS boot
/dev/sda2     4096  2101247  2097152   1G Linux filesystem
/dev/sda3  2101248 41940991 39839744  19G Linux filesystem
Disk /dev/mapper/ubuntu--vg-ubuntu--lv: 19 GiB, 20396900352 bytes, 39837696 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

查看全部储存设备

fdisk -l |grep '/dev'
# 输出以下
Disk /dev/loop0: 88.4 MiB, 92733440 bytes, 181120 sectors
Disk /dev/loop1: 91 MiB, 95408128 bytes, 186344 sectors
## 目前只有一块磁盘 sda
Disk /dev/sda: 20 GiB, 21474836480 bytes, 41943040 sectors
/dev/sda1     2048     4095     2048   1M BIOS boot
/dev/sda2     4096  2101247  2097152   1G Linux filesystem
/dev/sda3  2101248 41940991 39839744  19G Linux filesystem
Disk /dev/mapper/ubuntu--vg-ubuntu--lv: 19 GiB, 20396900352 bytes, 39837696 sectors


# 在虚拟机中挂载多一块磁盘,再操做
fdisk -l |grep '/dev'
# 输出以下
Disk /dev/loop0: 88.4 MiB, 92733440 bytes, 181120 sectors
Disk /dev/loop1: 91 MiB, 95408128 bytes, 186344 sectors
## 挂载的第一块磁盘 sda
Disk /dev/sda: 20 GiB, 21474836480 bytes, 41943040 sectors
/dev/sda1     2048     4095     2048   1M BIOS boot
/dev/sda2     4096  2101247  2097152   1G Linux filesystem
/dev/sda3  2101248 41940991 39839744  19G Linux filesystem
## 挂载的第二块磁盘 sdb
Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors
Disk /dev/mapper/ubuntu--vg-ubuntu--lv: 19 GiB, 20396900352 bytes, 39837696 sectors

建立 sdb 分区

fdisk /dev/sdb
# 输出以下
Welcome to fdisk (util-linux 2.31.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x0de15f1d.
## 在此处输入命令
## n:新建分区
## l: 选择逻辑分区,若是没有,则首先建立主分区(p),而后再添加逻辑分区(硬盘最多四个分区 P-P-P-P 或 P-P-P-E)
Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p):
Using default response p.
Partition number (1-4, default 1): 
First sector (2048-41943039, default 2048): 
Last sector, +sectors or +size{K,M,G,T,P} (2048-41943039, default 41943039): 
Created a new partition 1 of type 'Linux' and of size 20 GiB.
## 在此处输入命令
## w:写入磁盘
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

格式化磁盘

  • 查看分区
fdisk -l |grep '/dev'
# 输出以下
Disk /dev/loop0: 88.4 MiB, 92733440 bytes, 181120 sectors
Disk /dev/loop1: 91 MiB, 95408128 bytes, 186344 sectors
Disk /dev/sda: 20 GiB, 21474836480 bytes, 41943040 sectors
/dev/sda1     2048     4095     2048   1M BIOS boot
/dev/sda2     4096  2101247  2097152   1G Linux filesystem
/dev/sda3  2101248 41940991 39839744  19G Linux filesystem
Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors
## 此时能够看见新建立的分区 /dev/sdb1
/dev/sdb1        2048 41943039 41940992  20G 83 Linux
Disk /dev/mapper/ubuntu--vg-ubuntu--lv: 19 GiB, 20396900352 bytes, 39837696 sectors
  • 格式化
mkfs -t ext4 /dev/sdb1
# 输出以下
mke2fs 1.44.1 (24-Mar-2018)
Creating filesystem with 5242624 4k blocks and 1310720 inodes
Filesystem UUID: 6f11063f-c118-4099-90fc-2b083c181b23
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
        4096000
Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

建立 PV

pvcreate /dev/sdb1
# 输出以下
WARNING: ext4 signature detected on /dev/sdb1 at offset 1080. Wipe it? [y/n]: y
  Wiping ext4 signature on /dev/sdb1.
  Physical volume "/dev/sdb1" successfully created.

查看卷组

pvscan
# 输出以下
PV /dev/sda3   VG ubuntu-vg       lvm2 [<19.00 GiB / 0    free]
PV /dev/sdb1                      lvm2 [<20.00 GiB]
Total: 2 [<39.00 GiB] / in use: 1 [<19.00 GiB] / in no VG: 1 [<20.00 GiB]

扩容 VG

  • 查看 VG
vgdisplay
# 输出以下
--- Volume group ---
## 咱们须要用到 VG Name
VG Name               ubuntu-vg
System ID             
Format                lvm2
Metadata Areas        1
Metadata Sequence No  2
VG Access             read/write
VG Status             resizable
MAX LV                0
Cur LV                1
Open LV               1
Max PV                0
Cur PV                1
Act PV                1
VG Size               <19.00 GiB
PE Size               4.00 MiB
Total PE              4863
Alloc PE / Size       4863 / <19.00 GiB
Free  PE / Size       0 / 0   
VG UUID               dhI9ns-7lOI-pXf8-IOWL-F96N-JIYG-ZF6u82
  • 扩容 VG
vgextend ubuntu-vg /dev/sdb1
# 输出以下
Volume group "ubuntu-vg" successfully extended

扩容 LV

  • 查看 VG
vgdisplay
# 输出以下
--- Volume group ---
VG Name               ubuntu-vg
System ID             
Format                lvm2
Metadata Areas        2
Metadata Sequence No  3
VG Access             read/write
VG Status             resizable
MAX LV                0
Cur LV                1
Open LV               1
Max PV                0
Cur PV                2
Act PV                2
VG Size               38.99 GiB
PE Size               4.00 MiB
Total PE              9982
Alloc PE / Size       4863 / <19.00 GiB
## 这里是能够扩容的大小
Free  PE / Size       5119 / <20.00 GiB
VG UUID               dhI9ns-7lOI-pXf8-IOWL-F96N-JIYG-ZF6u82
  • 查看 LV
lvdisplay
# 输出以下
--- Logical volume ---
## 咱们须要用到 LV Path
LV Path                /dev/ubuntu-vg/ubuntu-lv
LV Name                ubuntu-lv
VG Name                ubuntu-vg
LV UUID                e2fKkR-oZeH-WV2A-ltCi-P76v-N9yv-aUtIg1
LV Write Access        read/write
LV Creation host, time ubuntu-server, 2019-05-14 03:13:57 +0800
LV Status              available
# open                 1
LV Size                <19.00 GiB
Current LE             4863
Segments               1
Allocation             inherit
Read ahead sectors     auto
- currently set to     256
Block device           253:0
  • 扩容 LV
# 按固定大小追加
lvextend -L +10G /dev/ubuntu-vg/ubuntu-lv
# 按百分比追加
lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
# 输出以下
Size of logical volume ubuntu-vg/ubuntu-lv changed from <19.00 GiB (4863 extents) to 38.99 GiB (9982 extents).
Logical volume ubuntu-vg/ubuntu-lv successfully resized.
  • 刷新分区
resize2fs /dev/ubuntu-vg/ubuntu-lv
# 输出以下
Filesystem at /dev/ubuntu-vg/ubuntu-lv is mounted on /; on-line resizing required
old_desc_blocks = 3, new_desc_blocks = 5
The filesystem on /dev/ubuntu-vg/ubuntu-lv is now 10221568 (4k) blocks long.
  • 验证是否成功
lvdisplay
--- Logical volume ---
LV Path                /dev/ubuntu-vg/ubuntu-lv
LV Name                ubuntu-lv
VG Name                ubuntu-vg
LV UUID                e2fKkR-oZeH-WV2A-ltCi-P76v-N9yv-aUtIg1
LV Write Access        read/write
LV Creation host, time ubuntu-server, 2019-05-14 03:13:57 +0800
LV Status              available
# open                 1
## 能够看到磁盘扩容成功了
LV Size                38.99 GiB
Current LE             9982
Segments               2
Allocation             inherit
Read ahead sectors     auto
- currently set to     256
Block device           253:0

注意: 不要卸载扩容的磁盘,可能出现丢失数据或是系统没法启动

附:异常处理

动态扩容提示空间不足

动态扩容时可能会提示 /etc/lvm/archive/.lvm_xxxxxx: write error failed: No space left on device 的错误,这是因为磁盘空间使用量已经 100% 了,咱们可使用 lvresize 的方式扩容

lvresize -A n -L +10G /dev/ubuntu-vg/ubuntu-lv
resize2fs -p /dev/ubuntu-vg/ubuntu-lv