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 程序菜单几乎一致,快捷键也几乎相同 | 图形界面风格依发布版不一样而不一样,可能互不兼容。GNU/Linux 的终端机是从 UNIX 传承下来,基本命令和操做方法也几乎一致。 |
驱动程序 | 驱动程序丰富,版本更新频繁。默认安装程序里面通常包含有该版本发布时流行的硬件驱动程序,以后所出的新硬件驱动依赖于硬件厂商提供。对于一些老硬件,若是没有了原配的驱动有时很难支持。另外,有时硬件厂商未提供所需版本的 Windows 下的驱动,也会比较头痛。 | 由志愿者开发,由Linux核心开发小组发布,不少硬件厂商基于版权考虑并未提供驱动程序,尽管多数无需手动安装,可是涉及安装则相对复杂,使得新用户面对驱动程序问题(是否存在和安装方法)会束手无策。可是在开源开发模式下,许多老硬件尽管在 Windows 下很难支持的也容易找到驱动。HP、Intel、AMD 等硬件厂商逐步不一样程度支持开源驱动,问题正在获得缓解。 |
使用 | 使用比较简单,容易入门。图形化界面对没有计算机背景知识的用户使用十分有利。 | 图形界面使用简单,容易入门。文字界面,须要学习才能掌握。 |
学习 | 系统构造复杂、变化频繁,且知识、技能淘汰快,深刻学习困难。 | 系统构造简单、稳定,且知识、技能传承性好,深刻学习相对容易。 |
软件 | 每一种特定功能可能都须要商业软件的支持,须要购买相应的受权。 | 大部分软件均可以自由获取,一样功能的软件选择较少。 |
原生云应用基本都是基于云服务器部署,本地化的 Linux 操做基本也都是在虚拟机中进行模拟操做。故咱们只须要安装虚拟机并在虚拟机上安装对应的 Linux 操做系统便可。本博客所有基于 Ubuntu Server 18.04 LTS 操做系统进行实践。程序员
安装中须要设置镜像地址,咱们使用阿里云镜像地址,http://mirrors.aliyun.com/ubuntu/
web
传统的网络服务程序,FTP、POP、Telnet 本质上都是不安全的,由于它们在网络上经过明文传送口令和数据,这些数据很是容易被截获。SSH 叫作 Secure Shell
。经过 SSH,能够把传输数据进行加密,预防攻击,传输的数据进行了压缩,能够加快传输速度。算法
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 是一个强大的安全终端模拟软件,它支持 SSH1, SSH2, 以及 Microsoft Windows 平台的 TELNET 协议。XShell 经过互联网到远程主机的安全链接以及它创新性的设计和特点帮助用户在复杂的网络环境中享受他们的工做。
XShell 能够在 Windows 界面下用来访问远端不一样系统下的服务器,从而比较好的达到远程控制终端的目的。
目录 | 说明 |
---|---|
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 [-cxzjvf] 压缩打包文档的名称 欲打包目录 | ||
-c | 创建一个归档文件的参数指令 | ||
-x | 解开一个归档文件的参数指令 | ||
-z | 是否须要用 gzip 压缩 | ||
-j | 是否须要用 bzip2 压缩 | ||
-v | 压缩的过程当中显示文件 | ||
-f | 使用档名,在 f 以后要当即接档名 | ||
-tf | 查看归档文件里面的文件 |
例子:
tar -zcvf test.tar.gz test\
tar -zxvf test.tar.gz
命令 | 语法 | 参数 | 参数说明 |
---|---|---|---|
gzip | gzip [选项] 压缩(解压缩)的文件名 | ||
-d | 解压缩 | ||
-l | 对每一个压缩文件,显示压缩文件的大小,未压缩文件的大小,压缩比,未压缩文件的名字 | ||
-v | 对每个压缩和解压的文件,显示文件名和压缩比 | ||
-num | 用指定的数字num调整压缩的速度,-1或–fast表示最快压缩方法(低压缩比),-9或–best表示最慢压缩方法(高压缩比)。系统缺省值为6 |
压缩文件后缀为 gz
命令 | 语法 | 参数 | 参数说明 |
---|---|---|---|
bzip2 | bzip2 [-cdz] | ||
-d | 解压缩 | ||
-z | 压缩参数 | ||
-num | 用指定的数字num调整压缩的速度,-1或–fast表示最快压缩方法(低压缩比),-9或–best表示最慢压缩方法(高压缩比)。系统缺省值为6 |
压缩文件后缀为 bz2
命令 | 说明 |
---|---|
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
Vim 是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被普遍使用。
简单的来讲, vi 是老式的字处理器,不过功能已经很齐全了,可是仍是有能够进步的地方。 Vim 则能够说是程序开发者的一项很好用的工具。
i
进入插入模式,插入文本信息:
进行命令模式:q
:直接退出vi:wq
:保存后退出vi ,并能够新建文件:q!
:强制退出:w file
:将当前内容保存成某个文件/
:查找字符串:set number
: 在编辑文件显示行号:set nonumber
:在编辑文件不显示行号:set paste
:原样粘贴Linux 操做系统是一个多用户操做系统,它容许多用户同时登陆到系统上并使用资源。系统会根据帐户来区分每一个用户的文件,进程,任务和工做环境,使得每一个用户工做都不受干扰。
在实际生产操做中,咱们基本上都是使用超级管理员帐户操做 Linux 系统,也就是 Root 用户,Linux 系统默认是关闭 Root 帐户的,咱们须要为 Root 用户设置一个初始密码以方便咱们使用。
sudo passwd root
su
vi /etc/ssh/sshd_config # Authentication: LoginGraceTime 120 #PermitRootLogin without-password //注释此行 PermitRootLogin yes //加入此行 StrictModes yes # 重启服务 service ssh restart
sudo
命令来执行只有管理员才能执行的命令的。若是不使用 sudo
就是一个普通用户。每一行表明一个帐号,众多帐号是系统正常运行所必须的,例如 bin,nobody 每行定义一个用户帐户,此文件对全部用户可读。每行帐户包含以下信息:
root:x:0:0:root:/root:/bin/bash
为了增长系统的安全性,用户口令一般用 shadow passwords 保护。只有 root 可读。每行包含以下信息:
root:$6$Reu571.V$Ci/kd.OTzaSGU.TagZ5KjYx2MLzQv2IkZ24E1.yeTT3Pp4o/yniTjus/rRaJ92Z18MVy6suf1W5uxxurqssel.:17465:0:99999:7:::
帐号名称: 须要和 /etc/passwd 一致。
密码:
通过加密,虽然加密,但不表示不会被破解,该文件默认权限以下:
最近修改密码日期: 从1970-1-1起,到用户最后一次更改口令的天数
密码最小时间间隔: 从1970-1-1起,到用户能够更改口令的天数
密码最大时间间隔: 从1970-1-1起,必须更改的口令天数
密码到期警告时间: 在口令过时以前几天通知
密码到期后帐号宽限时间
密码到期禁用帐户时间: 在用户口令过时后到禁用帐户的天数
保留
用户组的配置文件
root:x:0:
root:x:0:root
, icast 将用户进行分组是 Linux 对用户进行管理及控制访问权限的一种手段。一个中能够有多个用户,一个用户能够同时属于多个组。该文件对全部用户可读。该文件用户定义用户组口令,组管理员等信息只有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 (显示用户所属组)
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
表示可供存储的块设备文件r
只读,w
可写,x
可执行,-
表示无此权限指有多少个文件指向同一个索引节点。
就是文档属于哪一个用户和用户组。文件所属用户和组是能够更改的
默认是 bytes
是 change owner 的意思,主要做用就是改变文件或者目录全部者,全部者包含用户和用户组
chown [-R] 用户名称 文件或者目录
chown [-R] 用户名称 用户组名称 文件或目录
-R: 进行递归式的权限更改,将目录下的全部文件、子目录更新为指定用户组权限
改变访问权限
chmod [who] [+ | - | =] [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:~$
数字设定法中数字表示的含义
x
w
r
也能够用数字来表示权限如 chmod 755 file\_name
r w x | r – x | r - x |
---|---|---|
4 2 1 | 4 - 1 | 4 - 1 |
user | group | others |
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
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-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
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)
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
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 -u root -p
use mysql;
update user set authentication_string=password('123456') where user='root';
update user set plugin="mysql_native_password";
flush privileges;
exit;
systemctl restart mysql
vi /etc/mysql/mysql.conf.d/mysqld.cnf
#
便可):# bind-address = 127.0.0.1
service mysql restart
mysql -u root -p
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
注意: 配置内容追加到对应节点的底部便可
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
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
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
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
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
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
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]
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
vgextend ubuntu-vg /dev/sdb1 # 输出以下 Volume group "ubuntu-vg" successfully extended
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
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
# 按固定大小追加 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