Linux主要发行版: Ubuntu(乌班图)、 **RedHat(红帽)、**CentOS、Debain[蝶变]、Fedora、SuSE、OpenSUSE
常用的: Ubuntu(乌班图),CentOS,RedHat(红帽)
linux文件目录
linux的文件系统是采用级层式的树状目录结构,在此结构中的最上层是根目录“/”,然后在此目录下再创建其他的目录,在Linux世界里,一切皆文件。
重点目录:
/bin (/usr/bin、/usr/local/bin)
是Binary的缩写, 这个目录存放着最经常使用的命令
/home
存放普通用户的主目录,在Linux中每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
/root
该目录为系统管理员,也称作超级权限者的用户主目录。
/etc
所有的系统管理所需要的配置文件和子目录 my.conf
/usr
这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似与windows下的program files目录。
/boot
存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件
/media
linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。
/mnt
系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂载在/mnt/上,然后进入该目录就可以查看里面的内容了。
/opt
这是给主机额外安装软件所摆放的目录。如安装ORACLE数据库就可放到该目录下。
默认为空。
/usr/local
这是另一个给主机额外安装软件所安装的目录。一般是通过编译源码方式安装的程序。
/var
这个目录中存放着在不断扩充着的东西,习惯将经常被修改的目录放在这个目录下。包括各种日志文件。
/selinux [security-enhanced linux]360
SELinux是一种**安全子系统,**它能控制程序只能访问特定文件
/sbin(/usr/sbin、/usr/local/sbin)
s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。
/dev
类似于windows的设备管理器,把所有的硬件用文件的形式存储。
/lib
系统开机所需要最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。
/lost+found
这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
/proc
这个目录是一个虚拟的目录,它是系统内存的映射,访问这个目录来获取系统信息。
/srv
service缩写,该目录存放一些服务启动之后需要提取的数据。
/sys
这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统sy
/tmp
这个目录是用来存放一些临时文件的。
常用目录命令
Ls/
List 列举目录文件
-a 显示当前目录所有文件和目录,包括隐藏的。
-l 以列表的方式显示信息
Cd/
Change directory 切换工作目录/进入指定目录
Cd… 回到当前目录的上一级
Pwd/
Print work dirctory 显示当前工作目录
Clear/
Clear 清屏
Touch/
Touch 修改文件时间/创建文件
多文件创建touch test1.txt test2.txt
Mkdir/
Make directory 创建目录
Mkdir -p 创建多级目录 mkdir -p XXX/XXX/XXX
Rm/
Remove 删除文件或目录
-r 同时删除该目录下的所有文件
-f 强制删除文件或目录
Rmdir/
Remove directory 删除目录
只能删除空目录 有文件使用rm/
Cp/
Copy 复制
-r 整个文件夹
Cp 源文件 目的地文件夹
Cp -r 源文件夹/ 目的地文件夹/
\cp 强制覆盖不需要一个一个Y
Mv/
Move 剪切/移动目标文件/重命名
Mv 123.txt 321.txt 重命名
Mv 源文件 /目标文件夹/ 移动/剪切
Cat
Cat 查看一个文件的内容
-n 显示行号
Cat -n 文件名
Cat 只能看浏览文件 不能修改文件 为了浏览方便一般会带上管道命令|more
Cat -n /文件名 |more
more指令
more指令是一个基于VI编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件的内容。 more指令中内置了若干快捷键
操作功能说明
空白键(space) 代表向下翻一页;
Enter 代表向下翻『一行』;
q 代表立刻离开more ,不再显示该文件内容。
Ctrl + F 向下滚动一屏
Ctrl + B 返回上一屏
= 输出当前行的行号
:f 输出文件名和当前行的行号
less指令用来分屏查看文件内容,它的功能与more指令类似,但是比more指令更加强大,支持各种显示终端。less指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示需要加载内容,对于显示大型文件具有较高的效.
操作 功能说明
空白键 向下翻动一页。
[pagedown] 向下翻动一页。
[pageup] 向上翻动一页;
/字串 向下搜寻『字串』的功能;n:向下查找;N:向上查找;
?字串 向上搜寻『字串』的功能;n:向上查找;N:向下查找;
q 离开less 这个程序;
Head/
Head 查看文件的开头/显示文件开头部分的内容
Head 文件名 显示十行
Head -n (数字) 显示数字行数
Tail/
Tail 查看文件的末尾
Head 文件名 显示十行
Head -n (数字) 显示数字行数
-f 实时查看该文档的所有更新
Useradd 增加用户
-g 加上指定组 useradd -g 组名 用户名
Usermod -g 修改用户的组
Usermod -g 组名 用户名
Usermod -d 目录名 用户名 改变该用户登录的初始目录
Userdel 删除用户
-r 删除用户名并且删除家目录
Id 查询用户信息
Su 更换用户
高到底不需要密码。低到高需要密码。
Exit 切换回上一个用户
Whoami 查看当前用户
Groupadd 增加用户组
Groupdel 删除组
Passwd 设置密码
shutdown -h now 表示立即关机
shudown -h 11 表示1分钟后会关机
shutdown –r now 立即重新启动计算机
halt 关机
reboot 立即重新启动计算机
sync把内存的数据同步到磁盘
logout 注销指令在图形运行级别无效,在运行级别3下有效
管道:用 | 竖线表示
追加:用>> 两个连续的大于符号表示
覆盖:用> 一个大于符号表示
find命令
创建测试数据创建:
echo "hello" > 1.txt
touch b.txt
touch c.txt
mkdir a
mkdir b
mkdir c
开始试验:
查找谁是文件
find . -type f
查找谁是目录
find . -type d
按名称查找
精确查找模式
find . -name 1
模糊查找模式
find . -name "*1*"
查找名字符合正则表达式的文件,注意前面的‘.*’(查找到的文件带有目录)
find . -regex .*.txt
查找目录并列出目录中的文件和目录(级联)(为找到的每一个目录单独执行ls命令,没有选项-print时文件列表前一行不会显示目录名称)
find . -type d -exec ls {} \;
find . -type d -print -exec ls {} \;
find . -type d -print -exec ls -l {} \;
但是不能使用:
find . -type d -print -exec ll {} \; #因为ll是ls -l的alise(别名),而在find命令里,无法解析这个别名,也就是说无法解析ll的功能。
找到1.txt后并显示文件下的内容
find . -name 1.txt -print -exec cat {} \;
找到1.txt后并删除该文件
find . -name 1.txt -exec rm -rf {} \;
二十四之内(今天)哪些目录或文件发生过修改:
find . -mtime 0
或
find . -mtime -1
超过二十四小时 但是 并未超过四十八小时之内 哪些文件或目录发生了修改
find . -mtime 1
或
find . -mtime +0
哪些文件或目录修改的时间超过了四十八小时 但并未超过七十二小时
find . -mtime 2
或
find . -mtime +1
查找文件size小于10个字节的文件或目录
find . -size -10c
查找文件size等于10个字节的文件或目录
find . -size 10c
查找文件size大于10个字节的文件或目录
find . -size +10c
单位还可以是k m g
查找空目录
find . -empty -type d
查找空文件
find . -empty -type f
查找空文件并删除
find . -empty -type f -print -delete
查找空目录并删除
find . -empty -type d -print -delete
查找权限
find . -perm 755
查找所有者权限有读权限的目录或文件
find . -perm -u=r
查找用户组权限有读权限的目录或文件
find . -perm -g=r
查找其它用户权限有读权限的目录或文件
find . -perm -o=r
作业实验:
通过所有者 和 所属组去查找文件
find . -user xxx
find . -group xxx
grep命令
GREP:GREP主要被用来处理文字或字符操作。是我们最常用的命令之一.其中GREP AWK SED又被称为LINUX文本处理三剑客。
| 管道符:管道符主要是用来去拼接多个命令的。并且被管道符拼接起来的命令是从左至右执行的。
命令详细解析:
找到3.txt中,哪些行上的数据出现了database这一个词组。
cat 3.txt | grep database
第一步:cat 3.txt 找到文件中的详细内容。
第二步:找到详细内容以后,会把相关内容存储到内存中进行缓存。
第三步:执行管道符后面的内容(下一步的命令)
第四步:使用grep命令来进行内容匹配。就是讲grep后的database这个内容与内存中缓存的,cat 3.txt的结果进行匹配。
那么由此可知,grep作用就是去匹配正确的内容
找到3.txt中,哪些行上的数据出现了love这一个词。过滤掉带veay相关行。
1 2 3
cat 3.txt | grep love |grep -v very
第一步 :cat 3.txt 找到3.txt文档中详细的内容
第二步 :使用grep love ,匹配出相关的带有love这个词的行。
第三步 :grep -v very ,过滤掉带有very这个单词的行。
由此可知 grep -v 主要作用就是过滤,就是不输出相关的内容。
grep的精确输出:
cat 3.txt |grep 'big database'
单引号:不具备变量置换功能的,引号内所见即所得。
双引号:具备变量置换功能,解析变量后输出,不加引号的话,默认是双引号
单引号还有一种称呼就是定义死文本,什么是死文本呢,就是单引号内容不在发生改变。直接输出,所见即所得。
双引号定义的一般叫做变量文本。变量可以输出变量值。
这里的单引号和双引号是LINUX通配符的一部分。 比如 > >> ' "也是通配符。
上述说的置换变量功能,主要针对的是shell变成这一块。
所谓的通配符一般是用于命令行、脚本等的bash环境。(ls cat sort......)
文本文件在LINUX操作系统中的存储特点:
第一:组成文本文件最基本的单元是行。并且每个行都有属于自己的行号(行编号)
第二:就算是空行(什么内容也没有的行),他也是有自己的行编号的。
第三:行是由一个或多个单词构成的。当然了也可能像第二点说的一样,他里面什么没有。
第四:如果一行中是由若干个单词构成,那么就一定存在分割的问题。分隔符分为可视分隔符(由特殊符号,或者公司自定义的有意义符号短语构成)和不可视分隔符(空格和TAB(横向指标福)构成)。
GREP在数据库中的常用操作:
第一种:检查进程是否存在或者检查相关进程信息。
ps -ef(检查你的操作系统中,所有正在运行的进程)
ps -ef|grep oracle:主要是以检查oracle用户下的进程为主。如果当你的进程中出现oracle字符串的话也会被检查出来。
ps -ef|grep mysql:主要是以检查mysql用户下的进程为主。如果当你的进程中出现mysql字符串的话也会被检查出来。
检查oracle下单一的某一个进程
ps -ef|grep lgwr|grep -v grep (只是单纯的检查lgwr进程,不包含有grep这个命令所产生的进程)
ps -ef|grep 1965 |grep -v grep
第二种:检查数据库日志
为什么要检查ORACLE的alert日志和mysql的error日志。因为当数据库出现问题的时候,检查日志的方法是最直接最见效定位故障最快的方式
ll * /ls *
这里的“*” 是通配符代表任意和所有。那么常用的组合是:rm -rf * (删除目录下的所有)
ll |grep alert 定位alert日志文件
ls |wc -l 查看当前目录下文件或目录的个数(具体文件文件和目录的个数是多少个,主要取决wc -l之前的那个命令,管道符前的那个命令,找到了多少个文件或目录)
cat alert_orcl.log |grep ORA- 找到相关的ORA的报错,看看我们的数据库究竟出了哪些问题,这里是只要带ORA-的就全部算到其中。
cat mysql-error-3306.log | grep Shutdown mysql查看数据库关闭信息
但是有一点需要注意的是,我们的数据库有的时候只看报错可能会缺失掉一部分重要的信息,所以为了更精确,我们需要去定位故障出现问题的记录究竟是在日志中的哪一行,然后通过上下文关系,再去做精准定位。
通配符和正则表达式在*号的歧义。
*号在通配符中代表着任意和所有。但是在正则表达式中,就不是这个意思了。
在正则表达式中也有*这个符号,但是正则表达式中的*,代表的是匹配前面的一个字符任意次,最少一次,且是贪婪模式的,尽可能长的匹配。
我们认真的去观察一下下面这两个命令的输出状态:
在使用grep时ls和ll命令我们需要注意的事情:ls/ll (list)
[root@oracle test]# ls *
1.txt 1.zip 2.txt 2.zip 3.txt 3.zip 4.txt 4.zip 5.txt 5.zip
ls是先遍历这个目录下所有的内容(文件和目录的名称),找到一个存储到内存中一个,再去找下一个。最终把该目录下所有的内容都找到后,并且把找到的最后一个内容的信息写入到内存以后,然后以一行(数组)的方式进行输出就是我们看到的了。
[root@oracle test]# ll *
-rw-r--r--. 1 root root 0 Mar 9 14:24 1.txt
-rw-r--r--. 1 root root 0 Mar 9 14:24 1.zip
-rw-r--r--. 1 root root 0 Mar 9 14:24 2.txt
-rw-r--r--. 1 root root 0 Mar 9 14:24 2.zip
-rw-r--r--. 1 root root 0 Mar 9 14:24 3.txt
-rw-r--r--. 1 root root 0 Mar 9 14:24 3.zip
-rw-r--r--. 1 root root 0 Mar 9 14:24 4.txt
-rw-r--r--. 1 root root 0 Mar 9 14:24 4.zip
-rw-r--r--. 1 root root 0 Mar 9 14:24 5.txt
-rw-r--r--. 1 root root 0 Mar 9 14:24 5.zip
ll是先遍历这个目录下所有的内容(文件和目录的详细信息),找到一个存储到内存中一个,再去找下一个。最终把该目录下所有的内容都找到后,并且把找到的最后一个内容的信息写入到内存以后,然后以多行(每个找到信息都为一行)的方式进行输出就是我们看到的了。
正则表达式中 .代表匹配任意单个字符
rm -rf (强制删除):删库跑路命令
强调一下:虽然管道符可以拼接命令,但是命令还是按照从左至右执行的。
linux目录结构
[root@oracle /]# ll
total 24
lrwxrwxrwx. 1 root root 7 Mar 6 21:42 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 Mar 6 21:55 boot
drwxr-xr-x. 20 root root 3160 Mar 6 21:55 dev
drwxr-xr-x. 132 root root 8192 Mar 6 23:49 etc
drwxr-xr-x. 3 root root 19 Mar 6 21:54 home
lrwxrwxrwx. 1 root root 7 Mar 6 21:42 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 Mar 6 21:42 lib64 -> usr/lib64
drwxr-xr-x. 2 root root 6 Nov 5 2016 media
drwxr-xr-x. 2 root root 6 Nov 5 2016 mnt
drwxr-xr-x. 3 root root 16 Mar 6 21:50 opt
dr-xr-xr-x. 185 root root 0 Mar 6 21:55 proc
dr-xr-x---. 14 root root 4096 Mar 7 00:28 root
drwxr-xr-x. 37 root root 1140 Mar 6 21:57 run
lrwxrwxrwx. 1 root root 8 Mar 6 21:42 sbin -> usr/sbin
drwxr-xr-x. 2 root root 6 Nov 5 2016 srv
dr-xr-xr-x. 13 root root 0 Mar 6 21:55 sys
drwxrwxrwt. 14 root root 4096 Mar 7 00:37 tmp
drwxr-xr-x. 13 root root 155 Mar 6 21:42 usr
drwxr-xr-x. 20 root root 282 Mar 6 21:55 var
以上我们可以看到很多行的第一个字母不是d(目录),而是l。这里l代表软连接
lrwxrwxrwx. 1 root root 7 Mar 6 21:42 bin -> usr/bin
lrwxrwxrwx. 1 root root 7 Mar 6 21:42 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 Mar 6 21:42 lib64 -> usr/lib64
lrwxrwxrwx. 1 root root 8 Mar 6 21:42 sbin -> usr/sbin
我们归纳总结一下:
-> usr/bin 或者 usr/sbin :代表了该目录链接到了/usr/bin或/usr/sbin这个目录下
-> usr/lib 或者 usr/sbin :代表了该目录链接到了/usr/lib或/usr/lib64这个目录下
在LINUX下所谓的软连接其实和windows的快捷方式是一样的。
各个目录解释:
bin:该目录为/usr/bin目录的快捷方式或软连接。这个目录主要存放着常用的系统命令。
boot: 该目录存放linux启动是使用的一些核心文件
dev:这里是DEVICE(设备)的缩写。这里存放的是LINUX的外部设备,比如说IO设备,网络设备等,在LINUX中访问设备的方式和访问文件的方式是相同的。我们在ORACLE ASM安装配置中要使用到和该目录相关的知识。
etc:这里存放的是系统管理或者某些软件管理所需要的配置文件。我们在安装MYSQL时需要和这个文件打交道
home:用户的家目录,在我们的LINUX中,每个用户都有自己的家目录,除了root用户以外其他用户的家目录都在这个home目录下。
lib:他是/usr/lib这个目录的软连接。lib本身是library(库)这个单词的缩写,这个目录里存放着系统最基本的动态共享库。类似于windows下的DLL文件,几乎所有的应程程序都要用到这些库文件。
lib64:他是/usr/lib64这个目录的软连接。lib64实际上也是存放了系统的动态库。
media:LINUX会自动识别一些设备比如U盘或者光驱。当时别后,LINUX会把识别的设备放到该目录下
mnt:挂载别的文件系统或者设备所使用的。
opt:OPTIONAL(可选)的缩写。就是给服务器额外安装的软件一个所盛放的目录。
proc:存储当前内核运行状态的一系列特殊文件,这个目录是一个虚拟的目录,他是内存的映射,我们可以直接从这个目录里获取当前系统信息。proc是process的缩写,所以主要也记录了进程信息。
root:这个目录就是root用户的家目录。
run:是一个临时的文件系统,存储系统自启动以来相关信息当系统重启的时候该目录里的信息将被清空
sbin:他是/usr/sbin这个目录的软连接。超级用户(root)使用的高级管理程序和系统守护程序都在这。
srv:该目录存放一些服务启动之后要提取的数据
sys:这是LINUX 2.6内核的一个很大的变化。改文件系统(目录)是内核设备的一个直观反应。
tmp:是temporary(临时)的缩写,是用来临时存放一些文件的,这里存储的文件或目录会被定时清除掉。在安装MYSQL的时候mysql.sock(MYSQL的套接字文件)这个文件会被放到这里。可能会出现一些问题。不过已经在我的MYSQL-OCP课程中给出了解决方案,请大家放心。
usr:是unix shared resources(UNIX共享资源)的缩写。这个目录非常重要。他想到与windows的program file这个目录。我们LINUX使用的相关的命令库都在这个目录下。并且我们有一些软件比如MYSQL也会被安装到这个目录下,所以使用的时候务必小心,控制好权限等操作。
var:是variable(变量的缩写)。在这个目录中存放着不断扩充和不断改变的文件或内容。比如说系统的日志或者一些系统跟踪文件会存放到这里。并且我们在使用LINUX的时候也会把一些经常改变的文件放到这。大家记住,这是LINUX系统中改变最频繁的地方
linux权限
LINUX的权限:
l rwxrwxrwx(777). 1 root root 7 Mar 6 21:42 bin -> usr/bin
l 说明了目录/文件的类型(l是软连接 -文件 d目录)
u(用户) g(组) o(others其他用户)
rwx 4+2+1 = 7 rwx 4+2+1 = 7 rwx 4+2+1 = 7 目录/文件的权限
所属用户的权限 组权限(所属用户所归属的组) 其他用户对该目录/文件拥有的权限
r-读-4
w-写-2
x-执行-1
一般生产上还是以数字标注法居多
mysql和mysql1都是mysql组的
rwx rwx rwx mysql mysql /mysql
/mysql这个目录的所属用户为mysql组下的mysql用户。
那么mysql用户对这个/mysql目录就具备了可读 可写 可执行权限
那么mysql用户所在的组下的同组用户,也就是mysql1对这个目录也有可读可写可执行权限。
那么其他用户对这个/mysql目录也有可读可写可执行权限。
需要注意的是其他用户不在mysql这个组下
root root 代表该目录/文件所属用户与所属组
ORACLE安装文档中我们可以看到: ch-change
mkdir -p /u01/app/oracle
mkdir -p /u01/oraInventory
chown -R oracle.oinstall /u01
chown -R oracle:oinstall /u01/app/oracle
chmod -R 775 /u01/app/oracle
MYSQL安装文档中我们可以看到:
mkdir -p /data/mysql_data
mkdir -p /data/mysql_log
mkdir -p /data/log-bin
chown -R mysql.mysql /data/mysql_data /data/mysql_log /data/log-bin
chown -R mysql.mysql /usr/local/mysql
chmod改变目录和文件的权限命令。chmod -R 级联改变目录权限命令。所谓的级联就是将这个目录下的所有内容(包括文件和目录都给改成chmod后的权限)
chown改变目录和文件的所有者(这里是包括组的)。
lvm
LVM--->逻辑卷管理LOGICAL VOLUME MANAGER (动态卷管理功能)
老系统弊端(CENTOS 7之前的版本):根目录固定化(容量是固定的,极有可能出现容量用完的情况)。
因为之前的老系统根“/”目录是一个标准的分区,那么当根目录空间用完以后,我们只能删除根目录上没有用的文件,来释放一定的空间,让我们的LINUX可以正常操作。
LVM基本构成:
一个或多个PV(物理卷) ----- >VG(卷组) ---- > 一个或多个LV(逻辑卷)
组成 分出
PV-物理卷
PV是组成VG的一个最重要的结构模块,他提供VG存储空间供其使用,并让VG使用由PV所提供的存储空间创建LV(逻辑卷)。所以PV是LVM的物理组成.
一 PV的基本信息查询
pvscan
pvscan输出信息
[root@mysql ~]# pvscan
PV /dev/sda2 VG centos lvm2 [79.53 GiB / 4.00 MiB free]
Total: 1 [79.53 GiB] / in use: 1 [79.53 GiB] / in no VG: 0 [0 ]
信息详解:
PV /dev/sda2(PV是从哪个磁盘或者分区来)
VG centos (他所属的VG)
lvm2 [79.53 GiB / 4.00 MiB free] PV被使用LVM2的方式进行定义化 总空间79.53G 还有4MB是可以使用的
Total: 1 [79.53 GiB] / in use: 1 [79.53 GiB] / in no VG: 0 [0 ] PV上所有的空间已经被使用了(VG:centos)
pvdisplay 叫做更信息的pv信息详解
[root@mysql ~]# pvdisplay
--- Physical volume ---
PV Name /dev/sda2 PV名称
VG Name centos PV所属的VG
PV Size 79.53 GiB / not usable 3.00 MiB PV的大小 not usable 3.00 MiB(不可用空间3MB)
Allocatable yes 分配状态 yes代表可用-空间可分配
PE Size 4.00 MiB PE是组成PV最基本的读写单元,相当于ORACLE数据块,或者文件系统块。 EXTENT
Total PE 20360 一共有20360块
Free PE 1 现在还有1个PE空闲(现在还有一个PE块没有被使用或者还没有被分配给PV所建立的VG去建立LV使用)
Allocated PE 20359 已使用 20359块
PV UUID ik3n3r-uOzJ-IySu-tVft-71I6-cheL-Aq7oGP PV的设备唯一编号
pvdisplay -v
Wiping internal VG cache 擦除内被VG缓存
Wiping cache of LVM-capable devices 参数支持LVM的设备的缓存
--- Physical volume ---
PV Name /dev/sda2
VG Name centos
PV Size 79.53 GiB / not usable 3.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 20360
Free PE 1
Allocated PE 20359
PV UUID ik3n3r-uOzJ-IySu-tVft-71I6-cheL-Aq7oGP
pvdispaly /dev/sda2 查询指定的pv,当pv过多的时候,我们可以查询指定的pv。
二 创建PV。其实PV既可以使用一块单独的硬盘,也可以使用某个磁盘的分区。
创建pv的命令
pvcreate pv名称
pvcreate /dev/sdc
Physical volume "/dev/sdc" successfully created. 创建成功
pvcreate /dev/sdd1
Physical volume "/dev/sdd1" successfully created.
pvdisplay -v /dev/sdc
Wiping internal VG cache
Wiping cache of LVM-capable devices
"/dev/sdc" is a new physical volume of "20.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdc
VG Name
PV Size 20.00 GiB
Allocatable NO (是因为该PV还没有被分配给某个VG)
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID cNiSwb-hcAc-V543-5HFp-Uhhm-HlBW-WkjwxR
三 删除PV
pvremove pv名称
pvremove /dev/sdc
Labels on physical volume "/dev/sdc" successfully wiped. PV信息(标签)被擦除
pvremove /dev/sdd1
Labels on physical volume "/dev/sdd1" successfully wiped. PV信息(标签)被擦除
VG-卷组:他是由PV组成基本的物理存储空间,在该存储空间上可以划分出逻辑空间给LV(逻辑卷使用),所以他是LVM的核心
一 查看VG的信息
vgscan
vgscan
Reading volume groups from cache. 从VG缓存中读取
Found volume group "centos" using metadata type lvm2 找到一个叫centos的VG,该VG的元数据使用LVM2的协议类型
vgdisplay
vgdisplay
--- Volume group ---
VG Name centos VG名
System ID
Format lvm2 协议方式
Metadata Areas 1 元数据域
Metadata Sequence No 3 元数据序列号
VG Access read/write 该VG可读写
VG Status resizable 该VG可以调整大小
MAX LV 0
Cur LV 2 该VG上有两个LV
Open LV 2 这两个LV都在open状态(可用)
Max PV 0
Cur PV 1 该VG由一个PV组成
Act PV 1 该PV是活动状态(可用状态)
VG Size 79.53 GiB VG的大小为79.53G
PE Size 4.00 MiB PE大小为4MB
Total PE 20360 总共包含20360个PE
Alloc PE / Size 20359 / <79.53 GiB 已分配给VG 20359个PE
Free PE / Size 1 / 4.00 MiB 还有一个PE并未分配(可用)
VG UUID gNnmND-uucY-5s5H-ssJJ-qHmc-LyMN-Z75dKB 设备唯一编号
vgdisplay -v
[root@mysql ~]# vgdisplay -v
--- Volume group ---
VG Name centos
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size 79.53 GiB
PE Size 4.00 MiB
Total PE 20360
Alloc PE / Size 20359 / <79.53 GiB
Free PE / Size 1 / 4.00 MiB
VG UUID gNnmND-uucY-5s5H-ssJJ-qHmc-LyMN-Z75dKB
--- Logical volume ---
LV Path /dev/centos/swap lv路径
LV Name swap lv名称
VG Name centos lv所属的VG
LV UUID eq0jES-nQHg-vlog-T7MX-n3W9-elan-BdQaAt 唯一编号
LV Write Access read/write 可读写状态
LV Creation host, time oracle, 2022-03-06 21:42:07 +0800 创建时间
LV Status available LV是可用的
# open 2
LV Size <7.63 GiB LV的大小
Current LE 1953 LE(逻辑单元) 一个LE的大小是4MB,其实LE就是将P E进行了逻辑化,某整程度上说LE就是PE
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:1
--- Logical volume ---
LV Path /dev/centos/root
LV Name root
VG Name centos
LV UUID G2vqzd-33S2-Lf3o-a8og-3fdi-VEZG-faXLM6
LV Write Access read/write
LV Creation host, time oracle, 2022-03-06 21:42:07 +0800
LV Status available
# open 1
LV Size <71.90 GiB
Current LE 18406
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:0
--- Physical volumes ---
PV Name /dev/sda2
PV UUID ik3n3r-uOzJ-IySu-tVft-71I6-cheL-Aq7oGP
PV Status allocatable
Total PE / Free PE 20360 / 1
二 创建一个VG
vgcreate VG名称 pv名称
vgcreate datavg /dev/sdc
Volume group "datavg" successfully created datavg创建成功
三 删除一个VG
vgremove vg名称
vgremove datavg
Volume group "datavg" successfully removed datavg删除成功
四 VG的扩容
vgextend VG名称 PV名称
vgextend datavg /dev/sdd1
Volume group "datavg" successfully extended datavg扩容成功
五 VG的缩容
vgreduce VG名称 PV名称
vgreduce datavg /dev/sdd1
Removed "/dev/sdd1" from volume group "datavg" PV /dev/sdd1 被从datavg下移除
LV-逻辑卷:逻辑卷指的是从VG上划分出逻辑空间供用户使用,使用的前提是LV需要先按照所需的文件系统格式化,然后再去进行目录的挂载。那么上面我们已经提过了。LV的逻辑单元-LE实际上就是PV的物理单元-PE。
一 查看lv信息
lvscan
lvscan
ACTIVE '/dev/centos/swap' [<7.63 GiB] inherit LV状态时激活状态的,并且使用空间小于7.63G
ACTIVE '/dev/centos/root' [<71.90 GiB] inherit LV状态时激活状态的,并且使用空间小于71.9G
lvdisplay
lvdisplay
--- Logical volume ---
LV Path /dev/centos/swap
LV Name swap
VG Name centos
LV UUID eq0jES-nQHg-vlog-T7MX-n3W9-elan-BdQaAt
LV Write Access read/write
LV Creation host, time oracle, 2022-03-06 21:42:07 +0800
LV Status available
# open 2
LV Size <7.63 GiB
Current LE 1953
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:1
--- Logical volume ---
LV Path /dev/centos/root
LV Name root
VG Name centos
LV UUID G2vqzd-33S2-Lf3o-a8og-3fdi-VEZG-faXLM6
LV Write Access read/write
LV Creation host, time oracle, 2022-03-06 21:42:07 +0800
LV Status available
# open 1
LV Size <71.90 GiB
Current LE 18406
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:0
二 LV的创建
lvcreate -L lv的大小(M|G) -n LV的名字 VG名称
lvcreate -L 97M -n lv01 datavg
Rounding up size to full physical extent 100.00 MiB (LV空间的分配规则:由于LV是由PV上的PE通过VG经过逻辑化所转化的,所以LE也要遵循着PE的大小进行分配,不能将一个完整的PE分隔开,最少分配也应该是一个完整的PE大小也就是4MB。也就是说要遵循PE的整数倍进行空间的划拨与分配。本例中我们的PE大小为4MB,所以我们的LE大小也得是4MB。如果你不够一个PE分配的话,他也会给你一个完整的PE进行LE的逻辑转化。我们从上面可以看出。我要建立的LV大小为97M,所以他大于96MB(24个PE的大小),但是他小于100M(25个PE的大小),所以直接按照25个PE的大小进行PE的分配,最终转换成25个LE也就是100M的空间。)
Logical volume "lv01" created. 逻辑卷 lv01创建成功
做一个计算题:
先创建两个LV:
lvcreate -L 94M -n lv02 datavg
lvcreate -L 91M -n lv03 datavg
lvcreate -L 97M -n lv01 datavg
Rounding up size to full physical extent 100.00 MiB
lvcreate -L 94M -n lv02 datavg
Rounding up size to full physical extent 96.00 MiB
lvcreate -L 91M -n lv03 datavg
Rounding up size to full physical extent 92.00 MiB
我们从上面的命令可以看出来:VG已经从PV上面调用了25+24+23个PE进行逻辑转化,最终产生了72个LE。也就是说我们的VG逻辑转换了72个PE,在进一步的说PV一共给VG提供了72个PE.
另一种创建LV的方式 给出他具体LE的数量
lvcreate -l(小写的L) LE的数量 -n LV的名字 VG名称
lvcreate -L 25 -n lv01 datavg (这种方式是不对滴)
实际执行效果:
lvcreate -L 25 -n lv01 datavg
Rounding up size to full physical extent 28.00 MiB (解释:28M是7个PE,那么这里的25他是按照25M进行计算的,24MB是6个PE)
Logical volume "lv01" created.
另一个测试结果:
lvcreate -l 25 -n lv02 datavg
Logical volume "lv02" created. 直接就创建好了,压根没说什么空间的事
使用lvscan命令查看
lvscan
ACTIVE '/dev/datavg/lv01' [28.00 MiB] inherit
ACTIVE '/dev/datavg/lv02' [100.00 MiB] inherit (这里显示的是100M 25个LE(PE) 说明成功了,说明是小写的L是有效参数)
另另一种创建LV的方式:
lvcreate -l 数字比例(剩余空间)free -n lv02 datavg :根据你所提供的百分比自动分配剩余空间(那么这里就代表创建完lv后 剩余空间=100%-90%=10%,也就是说剩余的空闲空间只有原来总空间的百分之十。而其余百分之九十的空间被拿去建立了lv)
lvcreate -l 90%free -n lv02 datavg
lvcreate -l 90%free -n lv02 datavg
Logical volume "lv02" created. lv02创建完成
三 LV的删除
lvremove lv名字 VG名称 (最常见的错误 VG找不到 然后胡搞)
lvremove VG名称 lv名字 (最常见的错误 虽然找到了VG 但是也瞎搞)
最棒的方式
lvremove lv的名称(lv的绝对路径)
优先先找到各个lv的路径
lvscan
ACTIVE '/dev/datavg/lv02' [96.00 MiB] inherit
ACTIVE '/dev/datavg/lv03' [92.00 MiB] inherit
ACTIVE '/dev/centos/swap' [<7.63 GiB] inherit
ACTIVE '/dev/centos/root' [<71.90 GiB] inherit
确认lv的路径以后使用lvremove lv的名称(lv的绝对路径) 进行删除
lvremove /dev/datavg/lv03
Do you really want to remove active logical volume datavg/lv03? [y/n]: y (会让你去确认是否删除)
Logical volume "lv03" successfully removed lv03删除成功
四 LV的使用
先创建一个LV01
lvcreate -L 10G -n lv01 datavg
Logical volume "lv01" created.
将创建出来的LV01进行格式化
mkfs.xxx LV的名称(绝对路径) 绝对路径的组成:/dev/你创建VG的名字/LV的名字
mkfs.xfs /dev/datavg/lv01
meta-data=/dev/datavg/lv01 isize=512 agcount=4, agsize=655360 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=2621440, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
挂载你的LV
mount LV的名称(绝对路径) 挂载目录名
挂之前:
[root@mysql datavg]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 72G 11G 62G 15% /
devtmpfs 3.9G 0 3.9G 0% /dev
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 3.9G 8.9M 3.9G 1% /run
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/sdb1 100G 33M 100G 1% /data
/dev/sda1 473M 152M 321M 33% /boot
tmpfs 799M 12K 799M 1% /run/user/42
tmpfs 799M 0 799M 0% /run/user/0
开始挂:mount /dev/datavg/lv01 /oradata
挂之后:
[root@mysql datavg]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 72G 11G 62G 15% /
devtmpfs 3.9G 0 3.9G 0% /dev
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 3.9G 8.9M 3.9G 1% /run
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/sdb1 100G 33M 100G 1% /data
/dev/sda1 473M 152M 321M 33% /boot
tmpfs 799M 12K 799M 1% /run/user/42
tmpfs 799M 0 799M 0% /run/user/0
/dev/mapper/datavg-lv01 10G 33M 10G 1% /oradata (看这里 看这里 看这里)
手工摘除LV:
umount 挂载目录名
umount /oradata
命令执行后:
[root@mysql ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 72G 11G 62G 15% /
devtmpfs 3.9G 0 3.9G 0% /dev
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 3.9G 8.9M 3.9G 1% /run
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/sdb1 100G 33M 100G 1% /data
/dev/sda1 473M 152M 321M 33% /boot
tmpfs 799M 12K 799M 1% /run/user/42
tmpfs 799M 0 799M 0% /run/user/0
开机自动挂载LV:
在/etc/fstab目录下加入以下内容
vi /etc/fstab (这个不要粘贴进去 这个只是一个无辜的vi命令,告诉你去编辑哪个文件)
/dev/datavg/lv01 /oradata xfs defaults 0 0
保存退出:wq
说明
/dev/datavg/lv01 /oradata xfs defaults 0 0
LV的名称(绝对路径) 挂载目录 文件格式 默认 默认
/dev/mapper/datavg-lv01这个软连接其实就是该目录(/dev/datavg/lv01),然后被映射到 /dev/dm-2。我们不要去管他
五 增加LV的容量(动态增加)
lvextend -L +容量(M|G) lv的名称
lvextend -L +2G /dev/datavg/lv01
命令执行效果:
lvextend -L +2G /dev/datavg/lv01
Size of logical volume datavg/lv01 changed from 10.00 GiB (2560 extents) to 12.00 GiB (3072 extents).
lv的容量从10个G变成了12个G
Logical volume datavg/lv01 successfully resized.
lv扩容成功
值执行上一步的话,LV的容量是不会马上改变的。我们还需要让我们的xfs文件系统重新适应一下新的容量。也就是说进行xfs文件系统的元数据更新。
xfs_growfs lv名称
xfs_growfs /dev/datavg/lv01
执行后效果
xfs_growfs /dev/datavg/lv01
meta-data=/dev/mapper/datavg-lv01 isize=512 agcount=4, agsize=655360 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=2621440, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 2621440 to 3145728 数据块已经发生改变
另一种方式:
lvextend -l(小写的L) +指定的LE(PE)个数 lv的名称
lvextend -l +512 /dev/datavg/lv01
执行以后的效果
lvextend -l +512 /dev/datavg/lv01
Size of logical volume datavg/lv01 changed from 12.00 GiB (3072 extents) to 14.00 GiB (3584 extents).
lv的容量从12个G变成了14个G
Logical volume datavg/lv01 successfully resized.
lv扩容成功
xfs_growfs /dev/datavg/lv01 此命令再现江湖
meta-data=/dev/mapper/datavg-lv01 isize=512 agcount=5, agsize=655360 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=3145728, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 3145728 to 3670016
另另一种方法:
lvextend -l 5119 /dev/datavg/lv01 (重新定义你的lv的大小,切记重新定义的值不可以小于当前值)
lvextend -l 5119 /dev/datavg/lv01
Size of logical volume datavg/lv01 changed from 14.00 GiB (3584 extents) to <20.00 GiB (5119 extents).
Logical volume datavg/lv01 successfully resized.
xfs_growfs /dev/datavg/lv01 又现江湖
meta-data=/dev/mapper/datavg-lv01 isize=512 agcount=6, agsize=655360 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=3670016, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 3670016 to 5241856
EXT的扩容(单命令)
lvextend -L +2G /dev/data2vg/lvext401
lvextend -L +2G /dev/data2vg/lvext401
Size of logical volume data2vg/lvext401 changed from 10.00 GiB (2560 extents) to 12.00 GiB (3072 extents).
Logical volume data2vg/lvext401 successfully resized.
由于我们现在要给ext4扩容,所以xfs的那一套就不管用了。我们要使用其他的方式:
resize2fs lv的名称
resize2fs /dev/data2vg/lvext401
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/data2vg/lvext401 is mounted on /oradata2; on-line resizing required(需要在线调整)
old_desc_blocks = 2, new_desc_blocks = 2
The filesystem on /dev/data2vg/lvext401 is now 3145728 blocks long.
LV的缩容(减小LV的大小)
lvreduce -L -容量(M|G) lv的名称
lvreduce -L -4G /dev/datavg/lv01
命令执行:
lvreduce -L -4G /dev/datavg/lv01
WARNING: Reducing active and open logical volume to <16.00 GiB.
警告:你现在对一个已经开放并且激活的lv进行缩容操作
THIS MAY DESTROY YOUR DATA (filesystem etc.)
这种方式可能会导致你的数据被破坏
Do you really want to reduce datavg/lv01? [y/n]: y
你是否真的要做次缩容操作 [y/n] y ---确定操作
Size of logical volume datavg/lv01 changed from <20.00 GiB (5119 extents) to <16.00 GiB (4095 extents).
大小被调整
Logical volume datavg/lv01 successfully resized.
lv大小变更成功
[root@mysql oradata]# xfs_growfs /dev/datavg/lv01
meta-data=/dev/mapper/datavg-lv01 isize=512 agcount=8, agsize=655360 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=5241856, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data size 4193280 too small, old size is 5241856 修改容量太小4193280 老容量为5241856
LV缩容操作极度危险!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
如果你的LV被格式化成xfs文件系统的话。千万不要执行缩容操作。最好只选择扩容操作。
EXT4文件系统的缩容:
第一步从目录下降lv卸载
umount /oradata2
第二步
e2fsck -f /dev/data2vg/lvext401 检查磁盘的完整性
e2fsck 1.42.9 (28-Dec-2013)
Pass 1: Checking inodes, blocks, and sizes innodes 数量
Pass 2: Checking directory structure 目录结构
Pass 3: Checking directory connectivity 检查目录连接
Pass 4: Checking reference counts 检查引用数量
Pass 5: Checking group summary information 检查组摘要信息
/dev/data2vg/lvext401: 11/786432 files (0.0% non-contiguous), 92388/3145728 blocks
第三步
resize2fs /dev/data2vg/lvext401 8G(?)
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/data2vg/lvext401 to 2097152 (4k) blocks. 将进行调整
The filesystem on /dev/data2vg/lvext401 is now 2097152 blocks long. 现在你的文件系统就是你调整后的数量
第四步 操作一下lv
lvreduce -L -4G /dev/data2vg/lvext401
WARNING: Reducing active logical volume to 8.00 GiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce data2vg/lvext401? [y/n]: y
Size of logical volume data2vg/lvext401 changed from 12.00 GiB (3072 extents) to 8.00 GiB (2048 extents).
Logical volume data2vg/lvext401 successfully resized.
第五步 验证
vgdisplay -v data2vg
然后再通过df -h命令进行验证:
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 72G 11G 62G 15% /
devtmpfs 3.9G 0 3.9G 0% /dev
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 3.9G 8.9M 3.9G 1% /run
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/sdb1 100G 33M 100G 1% /data
/dev/sda1 473M 152M 321M 33% /boot
/dev/mapper/datavg-lv01 20G 33M 20G 1% /oradata
tmpfs 799M 12K 799M 1% /run/user/42
tmpfs 799M 0 799M 0% /run/user/0
/dev/mapper/data2vg-lvext401 7.8G 37M 7.3G 1% /oradata2 (缩减成功-但是具体缩减的值要根据你的实际情况而定)
mv和软链接
MV的意思代表了:修改文件名称或移动文件
第一种 同目录下修改文件名称,实际上就是修改文件的绝对路径,功能类似于windows的F2
第二种 跨目录下的文件移动,实际上也是修改文件的绝对路径,功能类似于windows的剪切和粘贴
案例分析:
mv testmv.txt testmv1.txt
(文件原名称)(修改以后的名称)
将原来的/root/testmv.txt 绝对路径修改为 /root/testmv1.txt
软连接:所谓的软连接其实就是和我们WINDOWS的快捷方式是一样的。相当于在其他目录下创建文件的快速链接方式,该链接方式可以直接映射回原文件。不需要再对源文件进行相关操作了。
例如:
ln -s /data/mysql_data/mysql.sock /tmp/mysql.sock
scp命令
SCP--->SSH CP(使用ssh协议进行文件和目录复制)
从本机复制到远程的机器上
命令示范:
scp 3.txt root@192.168.100.21:/root
scp 3.txt root@oracle21c:/root
scp 代表命令头
3.txt 代表我要传输的文件
root 代表对方接受的用户
@192.168.100.21或@oracle21c 代表远程主机
:/root 代表对方机器接收文件或目录的位置 “:”必须写别丢了。
但是这里需要注意一点,对方接收的用户和对方接受文件或目录的位置(接受目录),必须要保证权限是没有问题的。接受用户必须对接受目录要有相关的读写权限。
SCP底层机制是:本地服务器先将文件发送到对方机器的内存中(权限是正确的),然后再由对方接受用户写入到接受目录中。所以文件的所属用户与所属组,要根据接受用户的情况发生改变。文件的相关权限也要根据远程服务器接受用户的设置进行改变。
sed命令
SED他是一个很好用的文本处理工具,而且和AWK一样它本身也是一个管道工具,所以SED命令既可以单独使用也可以和其他的命令进行混合使用。
SED的主要功能,可以对文本进行替换 删除 新增和选取等工作。
我们向3.txt文档中的最后一行追加一行数据。
sed '$a GOOD BYE!!!' 3.txt
其中$代表最后一行 而a是sed子命令象征着追加
SED拼接命令 -e
sed -e '$a GOOD BYE!!!' -e '$a GOOD BYEBYE!!!' 3.txt
cat 3.txt | sed -e '$a GOOD BYE!!!' -e '$a GOOD BYEBYE!!!'
向3.txt的第一行插入一行数据
sed '1i 你好!!!' 3.txt
所以这里的1代表的是行数,而i代表的插入
删除3.txt的第一行数据
sed '1d' 3.txt
所以 d就是sed子命令象征着删除
删除3.txt的最后一行数据
sed '$d' 3.txt
删除3.txt从第二行到第八行数据
sed '2,8d' 3.txt
sed查询:
查(打印 print---->p )一下3.txt的第一行
sed '1p' 3.txt 错误
sed -n '1p' 3.txt 正确的
这里 n代表计算行号,p代表输出行号对应的行的内容
查一下3.txt的最后一行
sed -n '10p' 3.txt 这种方法可行 但是需要查询或定位你的最后一行的行号
sed -n '$p' 3.txt 这种方法直接就定位了
查一下3.txt的第七行到第十行的内容
sed -n '7,10p' 3.txt
匹配一下内容
查找database这个单词出现的行
sed -n '/database/p' 3.txt
sed重要特性转义,当文本中有特殊字符,我们又想找到特殊字符所在的行或者内容,那么我们为了避免输出结果扩大化,所以需要优先处理特殊字符,那么就需要转义符帮我们的忙。
例子:在3.txt中找到含有$行数据
sed -n '/\$/p' 3.txt (这里的“\”就代表将后面的$,不再按照命令里的子命令进行转义(不在按照sed中所带代表的最后一行的含义进行解释),只是按照一个普通的字符进行处理,我们称之为转义)而“\”我们称之为转义符。
在sed中 -n选项:只显示匹配处理的行(否则会输出所有行)。
sed -n '/database/p' 3.txt
sed -n '/\$/p' 3.txt
当像下面的例子中出现-n的话代表了匹配了行号
sed -n '10p' 3.txt -n匹配了第十行
sed -n '$p' 3.txt -n匹配了$代表最后一行的意思
上面已经讲完了使用SED对文件进行 增 删 查。
使用sed进行修改:
将3.txt第一行内容给他改成 I LOVE VI!!!
sed '1c I LOVE VI!!!' 3.txt
由上面的命令我们可以得知,c是sed里的改变子命令。 写sed的时候一定要注意,别把命令和文件写到一起。
修改最后一行
sed '$c MYSQL IS 666!!!' 3.txt
修改第二行到第八行的内容
sed '2,8c I LOVE YOU CHINA!!!' 3.txt
当你使用上面的命令时,第二行和第八行的数据将会合并变成一行,而这一行的内容就是你要修改的内容。并且无论你要修改的多行的内容是否相同,他都会按照最终一行的方式给你进行输出。
那么有没有一种就是修改而不会产生删行合并的解决方案呢!
sed '2s/i very love vi/I LOVE YOU CHINA !!!/' 3.txt
这里的s也是sed里子命令,这个子命令的主要作用是替代。
sed '2,8s/i very love vi/I LOVE YOU CHINA !!!/' 3.txt
指令| 修改前的内容 | 修改后的内容 |
分隔符 分隔符 分隔符
从上到下大家需要注意的“/”是分隔符的意思
sed 'ns/i very love vi/I LOVE YOU CHINA !!!/' 3.txt
或
sed 'm,ns/i very love vi/I LOVE YOU CHINA !!!/' 3.txt
上面的m n都是范围(m n都是自然数),如果不加范围的话,如下:
sed 's/i very love vi/I LOVE YOU CHINA !!!/' 3.txt
就代表遇到就改,全部修改。
其他分隔符表述法:
sed 's#i very love vi#I LOVE YOU CHINA !!!#' 3.txt
尤其是在遇到使用sed的s子命令时,如果出现特殊字符转义的话,我们可以使用其他的字符来替代分隔符,前提是你的替代字符最好没有什么其他含义
实际的例子,就是关闭selinux防火墙(ORACLE /MYSQL 安装时候都需要做这一步)
为什么要关闭selinux防火墙:
1 它是由美国海军开发的
2 它可能会莫名其妙的去拦截我们正常的信息
3 在生产中ORACLE和MYSQL一般会以集群的形式出现,所以为了保证集群网络的消息的安全和畅通性建议关闭该防火墙。
vi 关闭法:
vi /etc/selinux/config
第一种方法:
sed 's#SELINUX=enforcing#SELINUX=disabled#' /etc/selinux/config(精确匹配法)
第二种方法:
sed 's#SELINUX=.*#SELINUX=disabled#g' /etc/selinux/config (正则表达式匹配法)
g就代表全部提换,你正则表达式找到的,将其全部替换
####swap空间调整
Swap是存储设备上的一块空间(分区),操作系统可以在这里暂存一些内存里放不下的东西。
这从某种程度上相当于增加了服务器的可用内存。虽然从swap读写比内存慢,但总比没有好,算是内存不足时一种比较不错的解决方案。
如果没有swap,则服务器一旦内存不足,就会开始终止应用以释放内存,甚至会崩溃,这会让你丢失一些还没来得及保存的数据,或者造成宕机。有些应用明确要求系统配置swap以确保数据访问的可靠性。比如说ORACLE数据库。
SWAP设置关系:
4G以内的物理内存,SWAP 设置为内存的2倍。
4-8G的物理内存,SWAP 建议设置为8G。
8-64G 的物理内存,SWAP 设置为16G。
64-256G物理内存,SWAP 设置为32G。
调整SWAP大小:
1 在/var目录下建立一个swap目录
mkdir -p /var/swap
2 进入到该目录下
cd /var/swap
3 创建一个swap分区文件
dd if=/dev/zero of=swapfile bs=1024M count=4
dd if=/dev/zero of=swapfile bs=1G count=4
参数补充:
bs=1024M/1G 代表每个块大小为1G
count=4 代表创建四个块
所以上面的参数就是创建一个4G大小的swapfile文件
4 格式化一下你创建出来的文件
mkswap /var/swap/swapfile
5 让改文件生效
swapon /var/swap/swapfile
6 让swap永久生效
vi /etc/fstab
/var/swap/swapfile swap swap defaults 0 0
tmpfs
什么是tmpfs(临时文件系统)
tmpfs是ramfs的衍生品。
ramfs是基于RAM的文件系统,不能使用swap空间;tmpfs可以动态释放空间、可以使用swap空间。
ramfs不能控制使用内存的大小容易使内存溢出;而tmpfs可以在mount的时候指定size来控制使用内存的大小,不会导致系统崩溃。
tmpfs是存储在VM的文件系统,VM是linux的虚拟内存,由RM(物理内存)和swap组成
RM的读写性能优于swap,swap是物理磁盘虚拟出来的内存空间。
具体tmpfs使用的是RM还是swap是不可控的,这是由linux内核的vm子系统管理的
内核支持
编译内核时,启用“Virtual memory file system support”就可以使用tmpfs,linux kernel从2.4以后都开始支持tmpfs。目前主流的linux系统默认已启用tmpfs,如Redhat CentOS。
tmpfs的优点
使用方便:因为tmpfs是建立在VM(虚拟内存)上的,而不是物理磁盘上,所以不需要格式化就可以使用,所以不用尝试mkfs.tmpfs了:没有这条命令
动态调节大小:tmpfs的大小是动态的,用多少才分配多少,删除文件则会释放相应的VM空间
快:tmpfs大部分时间是驻留在物理内存中,这使得其读写速度超快
tmpfs的缺点
不可持久保存:tmpfs的先天优势变成了他的先天劣势:内存的特性导致位于tmpfs上的数据断电会丢失
成本高:相比较硬盘的价格来说,内存无疑还是很昂贵的,所以用tmpfs的目录不要放太大的东西
tmpfs的应用场景
天生就是为临时目录而生的
适合存储socket、session等,对于高io的临时数据也可以选择进行存储,
对于高io并且还需要持久化到磁盘的,需要通过其他手段,tmpfs可以提高linux系统的性能。
/dev
dev这个目录对所有的用户都十分重要。
因为在这个目录中包含了所有Linux系统中使用的外部设备。但是这里并不是放的外部设备的驱动程序。
它实际上是一个访问这些外部设备的端口。我们可以非常方便地去访问这些外部设备,和访问一个文件,一个目录没有任何区别。
/dev/shm
/dev/shm/是一个设备文件,它使用就是tmpfs文件系统
/run
它被识别为 “tmpfs”(临时文件系统),因此我们知道 /run 中的文件和目录没有存储在磁盘上,而只存储在内存中。
它们表示保存在内存(或基于磁盘的交换空间swap)中的数据,它看起来像是一个已挂载的文件系统,这个可以使其更易于访问和管理。
/sys/fs/cgroup
Cgroup是将任意进程进行分组化管理的Linux内核功能
cgroup本身提供将进程进行分组化管理的功能和接口的基础结构
/run/user/0
我们看到的/run/user/下的每个目录与当前登录的用户或显示管理器 gdm 相关。数字代表他们的 UID。
/run/user/0 表示root用户
/run/user/42 表示某个普通用户
tmpfs操作
查看一下他的结构:
devtmpfs 3.9G 0 3.9G 0% /dev
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
tmpfs 3.9G 8.8M 3.9G 1% /run
tmpfs 799M 8.0K 799M 1% /run/user/42
tmpfs 799M 0 799M 0% /run/user/0
临时修改tmpfs大小
mount -t tmpfs -o size=2048m tmpfs /dev/shm (安全)
mount -t tmpfs -o size=2048m tmpfs /dev (这个不建议修改)
mount -t tmpfs -o size=2048m tmpfs /sys/fs/cgroup (这个不建议修改,改大改小都有问题)
mount -t tmpfs -o size=2048m tmpfs /run/user/0 (安全)
mount -t tmpfs -o size=2048m tmpfs /run (这个不建议需改)
如果出现以下的报错
Failed to talk to init daemon
强制重启系统
reboot -f
持久修改例子:
vi /etc/fstab
tmpfs /dev/shm tmpfs defaults,size=2048m 0 0
卸载tmpfs:
umount /dev/shm(安全)
umount /dev (危险)
出现busy的提示,告诉你进程被占用,杀掉进程:
fuser -km /dev/shm (安全)
fuser -km /dev (危险)
再次卸载tmpfs:
umount /dev/shm
vi编辑器
vi编辑器的简易操作:
我记得有一个面试题说:请你用三种方法,在我们的LINUX下创建一个文件。
第一种方法:
touch xxx (使用touch命令创建文件)
第二种方法:
输出重定向法
echo xxx > xxxx(文件名可以不存在)
> 覆盖/新建式重定向
echo xxx > xxxx(文件名可以不存在)
>> 追加式输出重定向
第三种方法:
vi/vim编辑器法
vi编辑器有两种模式
第一种叫做命令模式。就是我们一进入到vi看到的样子,我们称之为命令模式。命令模式下,可以去进行一些命令指定或编辑的工作。
第二种叫做编辑模式。就是我们可以使用vi去编写一些字符型文件或者更改内容等操作。
那么如何从命令模式进入到编辑模式:
第一种 按“i”键 进入到插入式编辑模式。编辑完成以后可以使用“esc”再退回到命令模式。
如果你需要在文字段落中进行编辑,那么你就将光标移动到需要编辑的地方,按下“i”,就可以进行内容修改了,那么默认是在光标的前一个位置上进行插入修改。
第二种 按"a"键 进入到追加式编辑模式。编辑完成以后可以使用“esc”再退回到命令模式。
如果你需要在文字段落中进行编辑,那么你就将光标移动到需要编辑的地方,按下“a”, 就可以进行内容修改了,那么默认是在光标的后一个位置上进行追加修改。
第三种 按“o”键 直接回跳入到下一样进行编辑模式。编辑完成以后可以使用“esc”再退回到命令模式。
如果你需要在文字段落中的下一段开始进行编辑的话,那么你就直接按“o”键,就可以进行内容修改和编辑了。
删除整行命令 “dd”,这里注意啊注意!是两个小写的d
编译完成后,如何保存退出
1 使用“esc”退回到命令模式
2 请输入“:wq”或“:wq!”保存退出
:的意思是命令控制
w保存的意思
q是退出的意思
!强制的意思
如果你编辑以后觉得文件的内容让你不满意的话,我们可以不保存退出“q!”
替换字符功能:“r”(命令模式下)
vi编译器的复制功能(命令模式下)
按两下"yy"是复制功能
按一下“p”是复制一行
如果想要复制多行的话该怎么办“np” n(代表自然数)
我想快速的查找一些内容(在命令模式下):/strings(只是代表字符串的意思)
如果一次找到多哥的话 使用n去查看下一个
我想查看一下这个文件一共有多少行!
在命令模式下执行
:set nu
然后使用 “shift + g” 跳到最后一行 或者直接开启大写模式 按 大写的G
我现在如何回到第一行 “gg” 在命令模式下按两下小写的g
我如何才能跳到一行的行位 “shift + 4($)”
我如何才能回到一行的行首 “shift + 6(^)”
这里所有的 + 号都是代表你需要进行键位组合,而不是真正的那个 + - * /里的 + 号
关掉行号
:set nonu
关于行号的问题,我们还可以使用
cat -n xxx(文件名) 带行号输出文件的所有内容 以文件的最后一行结尾(自带了最后一行的行号)
head -5 /etc/profile 查看该文件的前5行
tail -5 /etc/profile 查看该文件的后5行
两种可是可以写成 head / tail -n(自然数) xxxx(文件名) 查看文件的相关内容
批量删除行,你先将光标定位到你要删除行的起始位置上 然后使用 “ndd” n代表一个自然数,就是你要删除行的行数即可。(命令模式下的)
我删除错了,想要恢复怎么办啊!命令模式下用 “u” 恢复过程要看你是批量删除的,还是逐行删除的,逐行删除逐行恢复,批量删除按1下u就可以了
yum
什么是YUM
YUM全程(YELLOW DOG UPDATER MODIFIED),他其实就是CENTOS/RHEL/FEDORA下的软件管理工具。基于rpm包进行管理,能够从指定的服务器下(YUM源)自动下载RPM包并安装。可以自动管理rpm包之间的依赖关系的。
常见的YUM源模式:
一 网络YUM源模式:需要依赖网络,但是包的质量和省心程度是最优质的。选择优质的YUM以后,就可以使用该YUM源去安装相关的rpm包形式的软件了。但是,由于我们的数据库服务器大多处于脱网状态,所以这一种往往只是奢望。
二 光盘或光盘镜像YUM源:配置简单,只需要有光盘或者对应的iso文件便可以挂载成YUM源进行使用。但是由于光盘无法进行写入操作,所以造成了某些软件如果你更新的话只能选择其他方法,不能直接进行这种YUM源下的软件安装相关操作,而且这种操作也不具备可持续性,一旦光盘(ISO)被拿走或者损毁就无法复用了。
三 本地YUM源:就是将安装光盘里的Package目录下的所有的rpm包,或者你从其他地方下载下来的rpm包,放入到操作系统的某个目录下。然后将该目录配置成YUM源进行使用。最大的优点可以随时更新你该目录下的软件包,相当于你更新了YUM源。并且不受网络限制,有网没网均可以操作。缺点就是占用磁盘空间。本地YUM源还有一种高端玩法,就是可以通过FTP(文件传输协议)网络,组建自己本地的YUM源网络,将这台机器的本地YUM源贡献给其他机器进行相关的YUM操作。一些比较大型的机房均使用这种方式。
关于YUM源+FTP这种配置在我的RAC课程中有涉及,建议大家可以去看看。
我们在ORACLE-OCP和MYSQL-OCP课程上主要使用的就是本地YUM源模式。
磁盘分区与挂载
首先看一个问题:
通过df -h
我们可以知道,目前根“/”目录剩余62个G。我们现在有一个需求,需要将一个90G大小的文件压缩包保存到我们的LINUX上,并且领导要求不允许使用LVM(后面我们会讲)磁盘管理模式进行存储。只能使用独立的硬盘挂载到LINUX上进行文件的存储。这个硬盘大小为100G。(类似于这种问题老系统CENTOS6 CENTOS5可能会比较多,CENTOS7基本使用的就是LVM的方式)
Linux fdisk 是一个创建和维护分区以及分区表的程序,它兼容多种类型分区以及分区表。他采用了和用户交互的模式方便了分区管理。
fdisk命令相关解释:
Command (m for help): m
Command action
a toggle a bootable flag ----切换可启动标志
b edit bsd disklabel ----编辑BSD磁盘标签
c toggle the dos compatibility flag ----切换DOS兼容性标志
d delete a partition ----------------------删除一个分区
g create a new empty GPT partition table ----创建一个新的空GPT分区表
G create an IRIX (SGI) partition table ----创建IRIX小型机分区表
l list known partition types --------------列出所有分区类型
m print this menu ----------------------打印帮助菜单
n add a new partition ----------------------新建一个分区
o create a new empty DOS partition table -----创建新的空的DOS分区表
p print the partition table --------------打印分区表(指示你要创建的是主分区)
q quit without saving changes --------不保存退出(如果已经用w保存了可以忽略)
s create a new empty Sun disklabel ----创建一个新的空SUN磁盘标签
t change a partition's system id ---改变分区系统ID
u change display/entry units -----更改显示/输出单位
v verify the partition table -----验证你的分区表
w write table to disk and exit --------------将刚刚创建的分区存入到磁盘分区表并退出
x extra functionality (experts only) ---额外功能
GPT--->GUID PARTITION TABLE(GPT) GUID磁盘分区表
传统的LINUX默认使用的是MBR分区表,MBR分区表不支持2.2T以上的磁盘。
GPT分区表支持2.2T以上的磁盘。
文件系统
LINUX两大常见的文件系统:
EXT4(CENTOS 6/RHEL 6): EXT4是第四代扩展文件系统(FOURTH EXTENDED FILESYSTEM)是LINUX下的日志文件系统。是EXT3(CENTOS5 /RHEL5)的升级版本。EXT4比EXT3更加先进,他是一个日志文件系统,意味着他会对文件在磁盘的位置以及任何其他对磁盘记录的更改做到更完善的记录。
ext4系统容量到1EB(1024PB)。而单文件容量支持到(16TB)。对一般的工作站 服务器以及个人台式电脑来说是非常重要的。而且她很好的支持了RAID(磁盘阵列)
ext3只支持32000个子目录。ext4已经彻底的取消了限制,理论是实现了无限个子目录。
XFS(CENTOS 7/RHEL 7以及以后版本): XFS是一种非常优秀的日志文件系统。他是SGI公司设计的。XFS被业界成为更新进的最具可升级性的文件系统
xfs很多方面做的比ext4更好。ext4受限于磁盘结构和兼容性问题。某些可扩展性确实不如XFS。
另外XFS各种文件锁或者文件内事务锁的细化做的也很到位。
每个XFS文件系统最大支持8EB,单个文件最大到16TB.
那么当然了XFS也有缺陷(现阶段)。比如说他不能压缩,当大量删除文件的时候性能就会很差。目前RHEL7/CENTOS7默认的文件系统就是XFS
双机互信
1 首先使用cat /etc/hosts 这个命令在两个机器上查看一下host文件是否已经写好。
我们用这里用mysql(192.168.100.30)和oracle21c(192.168.100.21)这两台机器为例:
192.168.100.30 mysql
192.168.100.21 oracle21c
2 我们在mysql这台机器上生成秘钥
[root@mysql ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:j+eh0N8I6hhWUBRCN8O0AuvqNar6jPr9UQAxfkBp48Y root@mysql
The key's randomart image is:
+---[RSA 2048]----+
| .oO*O. |
| ++B.+ |
| .++.+ |
| . E+ . |
| .. . S |
| . . o o |
|. oo o + + |
|.ooo.o + * + |
|O=+ oo+ . + . |
+----[SHA256]-----+
你用哪个用户生成了秘钥,那么秘钥就在你生成秘钥用户的home的目录下。
3 查询秘钥
ls -al /root/.ssh
4 发送秘钥
cd /root
scp -r .ssh root@oracle21c:/root (这里建议使用主机名)
例子
scp -r .ssh oracle@oracle21c:/home/oracle (这里建议使用主机名)
5 合并秘钥文件(要在oracle21c上做[需要注意的是如果你的主机名不是oracle21c以你的真实环境为准])
cd /root/.ssh
cat id_rsa.pub >> authorized_keys
6 如果实现双机互相信任的话,那么就把oracle21c上的authorized_keys,再传回到mysql这台机器上
用户和组
LINUX中的用户与组:
ORACLE安装文档中:
groupadd oinstall (ORACLE INSTALL)数据库安装于部署组
groupadd dba (ORACLE DBA)数据库管理组
groupadd oper(ORACLE OPER)操作组
useradd -g oinstall -G dba,oper oracle
groupadd -g 500 oinstall
groupadd -g 501 dba
groupadd -g 502 oper
或者
groupadd oinstall
groupadd dba
useradd -g oinstall -G dba oracle
MYSQL安装文档中:
groupadd mysql
useradd -g mysql mysql
说明:一个主组内有一个和组名同名的用户的话 ,删除用户时也会把该组删除掉。
实验:
删除组命令:
groupdel dba
删除用户
userdel -fr (将与用户所有关联的内容统统删除) 强制建议大家使用这个命令
切换用户命令:su
这里分两种 su - 和 su
su - 代表不保留上一个用户的环境变量进行切换用户
su 代表保留上一个用户的环境变量进行切换用户
ps -ef 查看进程命令
为什么在LINUX中,有用户与组的概念。
组(GROUP):他是一组相同职能的用户的集合。
用户(USER):他是登录我们LINUX的最基本的管理或职能单元。
因为,我们的LINUX是一个多用户 多任务(多命令)的系统。所以就可能产生一些用户的功能和权限是完全一致的,为了更好的权限管理和用户统筹需要。所以采用了组(GROUP)的这个概念对用户进行相关的管理。不只是LINUX,包括我们熟知的WINDOWS UNIX也是采用了这种方式进行用户管理。
DBA : 数据库管理员 DATABASE ADMINISTRATOR。
DBA :DATABLOCK ADDRESS 数据块地址
主组(基本组)与附加组概念:
为什么有主组和附属组:因为一个用户可能身兼多职,可能拥有不同的权限,所以我们将其加入到相关的组(附加组)即可。
一个用户只能有一个主组(基本组),但是可以有多个附加组(附属组)。他不能退出他的主组。但是可以退出相关的附加组。
在useradd(添加用户)的这条命令里。
useradd -g oinstall -G dba oracle(用户名)
-g代表他的主组(基本组),-G 代表他的附加组(附属组)
那么我们由这条命令可知:useradd这条命令建立了一个叫做oracle的用户,oracle用户的主组为oinstall,而他的附属组为dba组。
useradd -g mysql mysql
那么我们由这条命令可知,useradd建立了一个叫做mysql的用户,他的主组(基本组)为mysql他没有附加组。
建立用户之前一定要确定用户归属的组一定是存在的。然后再去建立用户。
我们还要知道,建立好用户以后,我们还需要给用户加一个密码。保证用户安全。
创建密码的命令为passwd。
CENTOS/RHEL/ORACLE-LINUX 在6的这个版本的时候安装LINXU时,不会强制你去建立一个用户。但是到了7以后,他会在你安装操作系统的时候强制你去建立一个用户,尽量避免不让你去使用root用户。防止出现高风险事件(误删除 误操作)造成对系统的不良影响。这就是LINUX中的防呆设置。
usermod命令是修改用户所属组的命令
主机名
主机名(HOSTNAME)
我们的操作系统(服务器)一般使用两种方式来认证自己的身份:
第一种方式就是使用IP的方式来认证自己在某个网络下的唯一性。
第二种方式就是通过主机名来验证自己的可识别性。
修改主机名:
临时修改:hostname mysql (hostname命令+修改名称)
持久修改:vi /etc/hostname (使用vi修改hostname里的内容已达到持久修改的目的)
2395

被折叠的 条评论
为什么被折叠?



