Linux基础

本文最后更新于:2 年前

Linux基础

包含了 Linux 基础知识,以及常用的命令。学习 Linux 起因是为了参加 红帽挑战赛 ,后来学习大数据再一次感受到熟练掌握 Linux 的重要性。

目录结构

Windows系统目录结构:

C、D、E、F…

C 盘存储操作系统,D盘安装软件,E、F盘个人资料

Linux目录结构

Linux的文件系统是采用级层式的树状结构,在此结构的最上层是根目录 “/” ,然后在此目录下再创建其他目录:

在Linux世界里,一切皆文件 (!!)

11312

常见的目录结构:

d0c50-linux2bfile2bsystem2bhierarchy.jpg

  • /bin

    Binary 的缩写,存放着最经常使用的命令

  • /etc

    所有的系统管理所需要的配置文件和子目录,比如安装的 mysql 的 my.conf

  • /dev

    类似于 windows 的设备管理器,把所有的硬件用文件的形式存储

  • /home

    存放普通用户的主目录,在 Linux 中每个用户都有一个自己的目录,一般该目录名是以用户的账号命名

  • /root

    该目录为系统管理员,也称作超级权限者的用户主目录

  • /usr

    这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似与 windows 下的 program files 目录。

  • /boot

    存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件

  • /sbin

    s 是 Super User 的缩写,这里存放的是系统管理员使用的系统管理程序。

  • /mnt

系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂载在 /mnt 上,然后进入该目录就可以查看里的内容了。d:/myshare

  • /mdia

linux 系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux 会把识别的设备挂载到这个目录下

  • /var

    这个目录中存放着在不断扩充着的东西,习惯将经常被修改的目录放在这个目录下。包括各种日志文件

  • lopt

    这是给主机额外安装软件所存放的目录。如安装 ORACLE 数据库就可放到该目录下。默认为空

  • /proc [不能动]

    这个目录是一个虚拟的目录,它是系统内存的映射,访问这个目录来获取系统信息

  • /srv [不能动]

    service缩写,该目录存放一些服务启动之后需要提取的数据

  • /sys [不能动]

    这是liux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs

  • /lost+found

    这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件

  • /selinux

    security-enhanced linux 。SELinux是一种安全子系统,它能控制程序只能访问特定文件,有三种工作模式,可以自行设置。

破解登录密码

  1. 重启计算机,开机后会有一个 6s 倒计时,按上下键(或双击),选择第一个菜单,按e编辑

    clipboard (3)

    按上下键,找 linuxlinux16

    11349000

    把后面的 ro 改为 rw,后面再手动添加输入 空格 rd.break

    ro 代表 read only 系统是只读的,无法破解修改密码,所以修改为rw(read write)可读可写,添加 rd.break 代表进入救援模式

    编辑完成后,按Ctrl+X

  2. 打开计算机的根目录

    clipboard (4)

    chroot /sysroot/

    修改 root 的密码(不需要旧密码,这里的密码不显示,不推荐使用小键盘,数字密码用大键盘)

    passwd root

    默认在红帽和 Centos 系统中有一条看门狗(SELinux),它发现你在篡改密码时,会拦截。在计算机根目录下创建一个隐藏文件 /.autorelabel,就可以蒙蔽狗的眼睛

    touch /.autorelabel

  3. 破解完成,退出重启。

    exit

    reboot

    破解密码后,第一次启动会比较慢。

IP地址

每台电脑都需要有一个唯一的IP地址,电脑之间才能互相通讯!

地址格式

点分10进制,4组数字,比如:10.10.10.10,1.1.1.1,37.25.81.128 ,每一组 IP 范围是 0-255

子网掩码:

255.0.0.0,255.255.0.0,255.255.255.0

子网掩码和 IP 结合,可以把 IP 地址分为网络位和主机位,类似于电话号码的:区号-座机号。子网掩码有几个 255 ,代表 ip 前几位是区号。

255.0.0.0,也可以表示为 /8
255.255.0.0,也可以表示为 /16
255.255.255.0,也可以表示为 /24

  • 例1

    1
    2
    IP1地址:192.168.4.5	配合子网掩码255.255.255.0
    IP2地址:192.168.5.5 配合子网掩码255.255.255.0

    子网掩码都有3个255 ,代表 ip 前三位是区号。ip1区号为192.168.4,ip2区号为192.168.5,区号不同,所以这两个ip不能互相通讯,两个主机不在一个网段。

  • 例2

    1
    2
    IP1地址:192.168.4.5	配合子网掩码255.255.0.0
    IP2地址:192.168.5.5 配合子网掩码255.255.0.0

    子网掩码都有2个255 ,代表 ip 前两位是区号。两个ip区号都是192.168,区号相同,所以这两个ip可以互相通讯,两个主机在一个网段。

最终IP地址:

192.168.4.5/24 的意思是:IP地址=192.168.4.5,子网掩码=255.255.255.0

我和另一个IP不在一个网段,但是我想和他通讯,需要走路由器出去(像跨省的电话局),网关就是你去其他网段要走的路由器,它的IP地址

IP地址不容易记住,给IP地址可以对应域名(需要额外购买),我们需要一台服务器(DNS),记录IP和域名的关系。当用户浏览器上网,输入域名的时候(计算机通讯使用的是IP地址),此时,就需要找DNS服务器,问域名对应的IP是多少。

配置网络

网络配置原理

image-20211103195741878

  1. 准备环境

    配置网络前必须确保 虚拟机 在安装时打开了以太网开关,否则网卡会识别不到,也加不上。

    给虚拟机额外添加一块网卡,也可以不添加直接改默认网卡。

    image-20211101101415969
  2. 给网卡配置网络参数

    在命令行终端查看网卡名称和IP地址:ip a s

    image-20211101103240798

    在输出的结果中,ens160 是环境原来自带的网卡,ens224 是刚刚添加的新网卡。不同版本的环境,则添加出来的网卡名称,可能不一样,比如(eth0,eth1…)

    命令行输入:nmtui

    image-20211101104856148

    image-20211101104747592

    选择 Edit a connection 回车,去编辑网卡的配置;

    找到需要编辑的网卡名称。这里我们直接从新配置默认网卡。如果要配置新网卡,就选新网卡,后续操作一致。

    使用tab键,选择后面的《Edit》后·回车

    image-20211101105044728

    image-20211101110922515

    image-20211101113845431

    image-20211101125209015

  3. 去激活网卡

    image-20211101114105875

    image-20211101114252683

    网卡激活成功后,就可以在终端查看到我们重新配置后的网卡:

    image-20211101121638585

  4. 更改子网 ip 和子网掩码

    image-20211101122857164

    image-20211101122949304

    image-20211101123430148

  5. 配置完成。此时可能需要重启虚拟机。

常用基础命令

关机和重启命令

  • 立该进行关机:

    shutdown -h now

    h 代表的是 halt (停止),后面跟的是关机的时间

  • 一分钟后关机并提示:

    shutdown -h "hello,1分钟后会关机了"

  • 立刻重启计算机:

    shutdown -r now

    r 代表 reboot (重启)

  • 快捷关机:halt

  • 重启:reboot

  • 把内存的数据同步到硬盘:sync

    1. 不管是重启系统还是关闭系统,首先要运行sync命令,把内存中的数据写到硬盘中;
    2. 虽然目前 shutdown/reboot/halt 等命令均已经在关机前自动执行了sync ,但小心驶得万年船。

查看文档资料

  1. 列出根目录 / 下的所有目录:ls /

    image-20211027171353912

  2. 查看当前目录下的资料:ls

    image-20211027172020276

  3. 查看当前目录的资料:ls -a

    -a显示所有资料all,包括隐藏文件和目录,在Linux系统中,文件名或目录名,以.点开始代表隐藏文件

    image-20211027172344701

  4. 查看 /etc/ 目录下的资料:ls /etc

    image-20211027171708138

  5. 查看当前目录:pwd

    image-20211030200132231

vim快速入门

vi 和 vim 的基本介绍

Linux系统 会内置 vi文本编辑器

Vim 具有程序编辑的能力,可以看做是 Vi 的增强版本,可以主动的以字体颜色辨别语法的正确性,方便程序设计。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。

vi 和 vim 常用的三种模式

  • 正常模式

    以 vim 打开一个档案就直接进入一般模式了(这是默认的模式)。

    在这个模式中,你可以使用『上下左右』按键来移动光标,你可以使用『删除字符』或『删除整行』来处理档案内容,也可以使用『复制、粘贴』来处理你的文件数据。

  • 插入模式

    按下 i, I, o, O, a, A, r, R 等任何一个字母之后才会进入编辑模式。一般来说按 i 即可。

  • 命令行模式

    输入 esc 再输入 : 。在这个模式当中,可以提供你相关指令,完成读取、存盘、替换、离开 vim 、显示行号等的动作则是在此模式中达成的 !

各种模式的切换

image-20211028145912905

vi 和 vim快捷键

常用快捷键

  • 一般模式

    1. 拷贝当前行:yy

      拷贝当前行向下的5行:5yy,并粘贴:p

    2. 删除当前行:dd

      删除当前行向下的5行:5dd

    3. 到达文档的最末行:G

      回到达文档的最首行:gg

    4. 快速定位到某20行:先敲20,再按shift+g

    5. 撤销动作:u

  • 命令行下

    1. 在文件中查找某个单词:/关键字,回车查找;

      光标跳转到下一个结果:n

      再次输入/关键字继续查找下一个内容

    2. 设置文件的行号:set nu

      取消文件的行号:set nonu

其他快捷键大全:

16540

2

快捷键

5

6

vi / vim 键盘图

用户管理

Linux系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。

用户登录和注销

登录时尽量少用 root 帐号登录,因为它是系统管理员,最大的权限,避免操作失误。

可以利用普通用户登录,登录后再用su - 用户名命令来切换成系统管理员身份。在提示符下输入 logout 即可注销用户。logout 注销指令在图形运行级别无效,在运行级别 3 下有效。

image-20211030185953788

添加用户:

添加用户的值令:useradd 用户名

当创建用户成功后,会自动的创建和用户同名的家目录。

添加一个用户 tom,默认该用户的家目录在 */home/tom。image-20211030191421350也可以通过useradd -d指定目录―新的用户名,给新创建的用户指定家目录。

设置、修改密码:

使用 passwd 用户名 指令修过对应用户的密码:

image-20211030191308230

删除用户:

  • 使用userdel 用户名指令删除用户,不会删除用户的主目录:image-20211030194050029image-20211030194116010

  • 使用 userdel -r tom 删除用户的同时,会删除用户的主目录:image-20211030194552888该命令删除用户的同时也会删除用户的资料,要慎用该命令。一般情况应该保留家目录。

查询用户信息:

使用 id 用户名 指令查询用户信息:

image-20211030195142882

切换当前用户

语法格式: su - 用户名

image-20211030195303056

  • 切换到高权限用户:su -

    在操作 Linux 中,如果当前用户的权限不够,可以通过 su -指令,切换到高权限用户,比如 root

    image-20211030195509930

  • 切换到高权限用户

    从权限高的用户切换到权限低的用户,不需要输入密码,反之需要。当需要返回到原来用户时,使用 exit/logout指令。image-20211030195931451

用户组

类似于角色,系统可以对有共性/权限的多个用户进行统一的管理。同一组的用户具有相同的权限。

新增组

语法:groupadd 组名

image-20211030200730893

删除组

语法:groupdel 组名

image-20211030200835944

增加用户同时指定组

语法:useradd -g 用户组 用户名

image-20211030201314251

如果增加用户时没有指定组,会默认生成并加入到一个和用户同名的组:

image-20211030201529484

修改用户的组

语法:usermod -g 用户组 用户名

image-20211030201903099

用户和组相关的文件

  • /etc/passwd 文件

    用户 (user)的的配置文件,记录用户的各种信息。

    image-20211030202729999

    每行的含义:用户名 : 口令 : 用户标识号 : 组标识号 : 注释性描述 : 主目录:登录Shell

    shell 翻译指令,交给内核执行。

  • /etc/shadow 文件

    口令的配置文件。

    image-20211030203014181

    每行的含义:登录名 : 加密口令 : 最后一次修改时间 : 最小时间间隔:最大时间间隔 : 警告时间 : 不活动时间:失效时间 : 标志

  • etc/group 文件

    (group) 的配置文件,记录 Linux 包含的组的信息。

    image-20211030203315650

    行含义:组名 : 口令 : 组标识号 : 组内用户列表

组管理和权限管理

Linux组

在 linux 中的每个用户必须属于一个组,不能独立于组外。在 linux 中每个文件有所有者、所在组、其它组的概念。

文件/目录 所在组

一般为文件的创建者,谁创建了该文件,就自然的成为该文件的所有者。

  • 查看文件的所在组:ls -ahl

    image-20211110145205558

  • 修改文件/目录所在的组:chgrp 组名 文件名

    image-20211110151429452

其他组

除文件的所有者和所在组的用户外,系统的其它用户都是文件的其它组。

用户所在组

在添加用户时,可以指定将该用户添加到哪个组中,同样的用 root 的管理权限可以改变某个用户所在的组。

  • 添加用户时指定所在组:useradd -g 用户名
  • 改变用户所在组:usermod -g 新组名 用户名
  • 改变用户登录的初始目录:usermod -d 目录名 用户名

Linux权限

查看目录信息

查看当前目录下资料的详细信息(含权限)

语法:ls -l

image-20211030191636749

anaconda-ks.cfg 是文件名

Oct 26 04:51 是文件的时间

1317 是文件的容量大小(字节)

1 root root 该文件属于root用户、root组

**-rw*—*—-. 是文件的权限(三个字符为一组)**

第一组:对应文件所有者的权限

第二组:对应文件所属组的权限

第三组:对应其他所有人的权限

字符 描述 数字格式
r read 读权限 4
w write 写权限 2
x execute 执行权限 1

备注:x对于文件而言,就是程序是否可执行;x对于目录而言,就是该目录是否可以cd进去:
$$
r=4; w=2; x=1
$$
rwx=7 rw-=6 r-x=5 —=0 r–=4 -wx=3

修改文件或目录的权限:

语法:chmod <权限> <文件名或目录名>

  1. 新建 /root/test.txt 文件:touch /root/test.txt

    image-20211030154137734

  2. 查看该文件默认权限: ls -l /root/test.txt

    image-20211030154455880

    root 用户可读写, root 组可读,其他人可读

  3. 修改权限:chmod 777 /root/test.txt

    image-20211030154820020

    此时 root 用户可读写执行,root 组可读写执行,其他人可读写执行。

  4. 再次修改权限:chmod 655 /root/test.txt

    image-20211030155312924

    此时 root 用户可读写,root 组可读执行,其他人可读执行。

  5. 修改移除所有人的权限:chmod 000 /root/test.txt

    image-20211030155603300

设置ACL权限

前面的基本权限,只能对用户或目录的用户、组或其他人设置权限。

假设有一个文件 a.txt,属于 root用户: root组,需要让 user1 对 a.txt 有读写权限
如果修改文件权限 666,则任何人都可读写(x);
如果:chown 则会导致文件所有者方式变化(x);
如果:把 user1 加入 root 组,任何属于 root 组的文件,user1 都可读写。

对某一个人设置权限,可以使用 ACL

1
setfacl   -m   u:用户:权限      文件或目录

-m (modify 修改), u (user 用户)

  • 创建2个用户

    image-20211029195145156

    新建文件 /tmp/root.txt,内容是 hello,并使用cat命令查看

    image-20211030191819649

    修改*/tmp/root.txt* 文件的权限,root能读写,student1对该文件无权限

    -rw-r-----. 1 root root 6 Oct 29 19:46 /tmp/root.txt

    image-20211030191929466

    使用su命令切换用户到student1,并用cat命令查看 /tmp/root.txt 文件,提示无权限被拒绝

    image-20211030192440451

    使用exit命令退出 student1用户,返回 root 用户

    image-20211030192150876

    修改权限,让 student1 可以读写 /tmp/root.txt 文件

    image-20211029203351232

    此时用su命令切换换到 student1 用户,用 cat 命令就可以查看 /tmp/root.txt 文件了


计划任务

在企业中有时候我们需要定期执行一些任务,比如:每周五凌晨备份数据

创建计划任务的命令

crontab -e -u 用户

crontab 是创建计划任务的程序,-e(modify)修改计划任务,-u(user)指定是哪个用户的计划任务。

计划任务的格式:

分 时 日 月 周 命令

分:(00-59),也可以是(所有),/2(每隔2分钟)
时:(00-23),也可以是(所有),/3(每隔3小时)
日: (1-31),也可以是(所有), … …
月: (1-12),也可以是
(所有), … …
周: (1-7), … … … …

  • 例子:

    每天05点03分,重启计算机

    1
    03    05    *     *     *       /sbin/reboot

    每月5号,05点03分,重启计算机

    1
    03    05    05     *     *       /sbin/reboot

    每一年6月5日,05点03分,重启计算机

    1
    03    05    05     06     *       /sbin/reboot

    6月5日 且得是个周3的时候,05点03分,重启计算机

    1
    03    05    05     06    3       /sbin/reboot

    每周五,每分钟都再重启

    1
    *       *    *		*	 5       /sbin/reboot

定时获取时间

查看计算机的时间 : date

image-20211031015412061

查看时间导入到一个文件中:date >> /tmp/root.xt

image-20211031015652578

image-20211031015722161

做一个计划任务,每分钟把时间写入到一个文件:
输入命令crontab -e -u root

image-20211031015916938

i编辑,内容如下:

1
*  *  *  *  *    /bin/date  >>  /tmp/date.log

image-20211031015835028

等一分钟,用 cat 命令查看:

image-20211031020102842

删除计划任务:crontab -e -u root,删除之前添加的计时器可以用dd快捷键直接删除该行

image-20211031020324430

image-20211031015835028

实用指令

运行级别

运行级别说明:

​ 0 : 关机

​ 1 : 单用户【找回丢失密码】

​ 2 : 多用户状态没有网络服务

3 : 多用户状态有网络服务

​ 4 : 系统未使用保留给用户

​ 5 : 图形界面

​ 6 : 系统重启

常用运行级别是35,也可以指定默认运行级别。

切换运行级别:init 级别编号

切换到级别3,此时无图形界面:

image-20211030204640820

image-20211030204908634

切换回级别5 图形界面 :

image-20211030205045613

查看当前默认运行级别:systemctl get-default

image-20211030205440943

可以看到,当前默认运行级别是图形化界面 5,每次开机就是级别5 图形化界面。

修改默认运行级别:systemctl set-default multi-user.target

image-20211030210036409

此时默认运行级别为级别 3,以后开机就不会进入图形化界面 3 了。

帮助指令

man 获得帮助信息

1
man		[命令或配置文件]
  • 查看ls命令的帮助信息:man ls

    image-20211031021609089

help指令

1
help	命令

获得shell 内置命令的帮助信息。

  • 查看cd命令帮助信息:help cd

    image-20211031023736451

文件目录类

pwd指令

显示当前工作目录的绝对路径。

image-20211031024422112

绝对路径是指从根目录 (/) 开始定位,相对于根目录,以根目录 / 开头。相对路径是从当前路径开始定位,相对于当前路径,以当前目录的下一级目录开头。

ls指令

1
ls	[选项]	[目录或是文件]

-a 显示当前目录所有的文件和目录,包括隐藏的

-1 以列表的方式显示信息

  • 查看当前目录下的资料:ls

    image-20211027172020276

  • 列出根目录 (/)下的所有目录:ls /

    image-20211027171353912

  • 查看当前目录信息:ls -al

    -al里的 a (all) 表示输出隐藏文件。在 linux 下,隐藏文件是以.开头,选项可以组合使用。

    image-20211031022137762

  • 查看指定目录信息:ls -al /home

    image-20211031023131472

cd指令

切换到指定目录。

1
cd	[参数]
  • 回到自己的家目录:cd ~ cd

    image-20211031112736750

  • 回到上一级目录:cd ..

    image-20211031112934800

  • 使用绝对路径定位:cd /home/tom

    绝对路径是指从根目录 (/) 开始定位,以根目录 / 开头。image-20211031113733757

  • 使用相对路径定位:cd ../../root

    相对路径是从当前路径开始定位,相对于当前路径,以当前目录的下一级目录开头。

    image-20211031113556958

mkdir指令

用于创建目录。

1
mkdir	[选项]	要创建的目录

-p : 创建多级目录

  • 创建一级目录:mkdir /home/dog

    image-20211031114549457

  • 创建多级目录:mkdir -p /home/animal/tiger

    image-20211031114835715

rmdir指令

删除目录。

1
rmdir	[选项]	要删除的目录

-rf :递归强制删除

  • 删除空目录:rmdir /home/dog

    image-20211031115406956

  • 删除非空目录:rmdir -rf animal

    rmdir命令删除的只能是空目录,如果目录下有内容时无法删除。如果需要删除非空目录,需要使用rm -rf命令递归删除。

    image-20211031115555665

touch指令

创建空文件。

1
touch	文件名称
  • 创建一个空文件:touch hello.txt

    image-20211031120105380

cp指令

拷贝文件到指定目录。

1
cp	[选项]	source	dest

-r:递归复制整个文件。

  • 拷单个文件:cp /home/hello.txt /home/king/

    image-20211031160249172

  • 复制整个多级目录: cp -r /home/zwj/animal/ /home/tom/

    zwj 文件夹下所有目录文件复制到 tom 目录下。

    image-20211031121349163

  • 强制覆盖不提示:\cp /home/hello.txt /home/king/

    如果复制前已存在同名文件,复制时会提示要不要覆盖。使用 \cp命令可强制赋值不提示。

    image-20211031161946419

rm指令

移除文件或目录。

1
rm	[选项]	要移除的文件或目录

-r :递归删除整个目录

-f :强制删除不提示

  • 删除单个文件有提示 :rm /home/hello.txt

    image-20211031162438383

  • 删除单个文件不提示 :rm -f /home/hello.txt

    image-20211031163115120

  • 强制删除整个文件夹不提示:rm -rf /home/zwj/animal/

    该命令要特别小心使用。

    image-20211031163134058

mv指令

移动或重命名文件目录。

1
2
mv	oldNameFile	newNameFile
mv /temp/movefile /targetFolder
  • 重命名文件:mv cat.txt dog.txt

    image-20211031163716302

  • 移动文件:mv /home/dog.txt /home/king/

    image-20211031164024902

  • 移动并重命名文件:mv /home/king/dog.txt /home/cat.txt

    image-20211031164314072

  • 移动整个目录:mv /home/tom/animal/ /home/zwj/

    image-20211031195458725

cat指令

查看文件的内容。

cat只能浏览文件,而不能修改文件,为了浏览方便,一般会带上管道命令| more进行交互。

1
cat	[选项]	要查看的文件

-n :显示行号。

  • 查看文件并显示行号:cat -n /etc/profile

    image-20211031195836936

  • 加上管道命令:cat -n /etc/profile | more

    image-20211031200229113

    此时可以结合下面的more指令使用,如enter键可以翻行,空格翻页。

    image-20211031200411287

more指令

more 指令是一个基于 vi 编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件的内容。more 指令中内置了若干快捷键(交互的指令)。

1
more	要查看的文件
  • 操作说明:
操作 功能
空白键(space) 代表向下翻一页
Enter 代表向下翻『一行』
q 代表立刻离开 more ,不再显示该文件内容
ctrl+F 向下滚动一屏
Ctrl+B 返回上一屏
= 输出当前行的行号
:f 输出文件名和当前行的行号

less指令

less 指令用来分屏查看文件内容,它的功能与 more指令类似,但是比 more 指令更加强大,支持各种显示终端。less指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示需要加载内容,对于显示大型文件具有较高的效率。

1
less	要查看的文件
  • 按键操作说明:
操作 功能
空白键 向下翻动一页
PageDown 向下翻动一页
PageUp 向上翻动一页
/字串 向下搜寻『字串』的功能。n:向下查找;N:向上查找
?字串 向上搜寻『字串』的功能。n:向上查找;N:向下查找
q 离开less这个程序

echo指令

echo输出内容到控制台。

1
echo	[选项]	[输出内容]
  • 输出主机名:echo $HOSTNAME

    image-20211031201724981

  • 输出内容到控制台:echo "hello world !"

    image-20211031201939882

head指令

用于显示文件的开头部分内容,默认情况下 head 指令显示文件的前10行内容.

1
2
head	文件
head -n 行数 文件
  • 查看文件开头 10 行:head /etc/profile

    image-20211101030743949

  • 查看文件开头 5 行:head -n 5 /etc/profile

    image-20211101031037599

tail指令

用于显示文件的末尾部分内容,默认情况下 tail 指令显示文件的最后10行内容。

1
2
tail	文件
tail [选项] 行数 文件

-n :指定行数.

-f : 实时追踪文档更新.

  • 查看文件最后 10 行:tail /etc/profile

    image-20211101031832879

  • 查看文件最后 5 行:tail -n 5 /etc/profile

    image-20211101032012384

  • 实时追踪文档更新:tail -f hello.txt

    image-20211101215714560

which指令

查看某个指令在哪个目录下。

1
which	 要查的指令
  • 查看 ls指令在哪个目录:

    image-20211101215037678

>指令 和 >>指令

>指令 也叫输出重定向指令,写入时会用新内容覆盖掉原内容;>>指令 也叫追加指令,写入内容时不会覆盖原内容,会将内容追加在原内容后面。

1
2
3
4
ls	-l	  >	  文件
ls -al >> 文件
cat 文件1 > 文件2
echo "内容" >> 文件
  • 将文件列表覆盖写入:ls -l > /home/info.txt

    将 /home 目录下的文件列表覆盖写入到 /home/info.txt 中。info.txt 不存在会自动创建。

    image-20211101035211431

  • 将内容覆盖写入:echo "hello" > /home/info.txt

    image-20211101035506625

  • 将文件内容追加写入:cat /home/world.txt >> /home/info.txt

    image-20211101035940406

  • 将日历追加写入:cal >> /home/info.txt

    cal用于查看当前日历。

    image-20211101040213173

ln指令

软链接也称为符号链接,类似于 windows 里的快捷方式,主要存放了链接其他文件的路径。

1
ln	-s	[原文件或目录]	[软链接名]
  • 给 /root 目录创建软连接:ln -s /root /home/myroot

    image-20211101162909807

    当我们使用pwd指令查看目录时,仍然看到的是软链接所在目录:

    image-20211101163123084

  • 删除软连接:rm -f /home/myroot

    删除时后面不要带 /,不然会被当成一个目录。

    image-20211101163438847

history指令

查看已经执行过的历史命令,也可以执行历史指令。

1
history		[要查看的数量]
  • 显示所有的历史命令:history

    image-20211101164009878

  • 显示最近使用过的 5 个指令:history 10

    image-20211101164150216

  • 执行编号为 6 的指令:!6

    image-20211101164412761

时间日期类

date显示时间指令

显示当前日期。

1
date		[选项]
  • 显示当前时间:date

    image-20211101164811520

  • 显示当前年份: date +%Y

    image-20211101165044844

  • 显示当前月份:date +%m

    image-20211101165115035

  • 显示当前是哪一天:date +%d

    image-20211101165147022

  • 显示年月日时分秒:date "+%Y-%m-%d %H:%M:%S"

    image-20211101165312680

date设置时间指令

设置系统当前时间。

1
date	-s	字符串时间
  • 修改当前时间:date -s "2020-11-0320:02:10"

    image-20211101170046753

cal指令

查看日历指令。

1
cal		[选项]
  • 显示当前日历:cal

    image-20211101170238241

  • 显示 2020 年日历:cal 2020

    image-20211101170352279

搜索查找类

find指令

从指定目录向下递归地遍历其各个子目录,将满足条件的文件或者目录显示在终端.

1
find		[搜索范围]		[选项]
常用选项 功能
-name <查询方式> 按照指定的文件名查找模式查找文件
-user <用户名> 查找属于指定用户名所有文件
-size <文件大小> 按照指定的文件大小查找文件
  • 按文件名在已知目录查找:find /home -name hello.txt

    image-20211101171129115

  • 按拥有者查找:find /home/ -user root

    image-20211101171613003

  • 查找整个 linux 系统下大于 200M 的文件:find / -size +200M

    +n 大于、 -n 小于、n等于,单位有k,M,G。

    image-20211101214140232

locate指令

locate 指令可以快速定位文件路径。locate 指令利用事先建立的系统中所有文件名称及路径的 locate数据库,实现快速定位给定的文件。Locate指令无需遍历整个文件系统,查询速度较快。为了保证查询结果的准确度,管理员必须定期更新locate时刻

由于 locate 指令基于数据库进行查询,所以第一次运行前,必须使用 updatedb 指令创建 locate 数据库。

1
locate		搜索的文件
  • 创建 locate 数据库:updatedb

    快速定位 hello.txt 文件所在目录:locate hello.txt

    image-20211101214741897

grep指令

grep 过滤查找。

管道符,”|”,表示将前一个命令的处理结果输出传递给后面的命令处理。

1
grep	[选项]	查找内容	源文件
常用选项 功能
-n 显示匹配行及行号。
-i 忽略字母大小写
  • 过滤查找 yes :cat hello.txt | grep "yes"

    image-20211101222011568

  • 过滤查找并显示行号:cat hello.txt | grep -n "yes"

    image-20211101222128324

  • 另一种写法:grep -n "yes" hello.txt

    image-20211101222327878

压缩和解压类

在Windows系统中常见的压缩格式为 rar,zip,7z;在Linux系统中常见的压缩格式为 gzip,bzip2,xz

假设 /var/log 是非常重要的数据,我需要打包备份,在linux 中打包的软件是 tar,压缩的软件是 gzip,bzip2。如果没有软件,可以用 yum install 命令安装软件。

gzip/gunzip指令

gzip 指令用于压缩文件,gunzip 指令用于解压文件。其中,gzip 指令只能将文件压缩为 **.gz* 文件。

1
2
gzip		文件
gunzip 文件.gz
  • 使用 gzip 指令压缩文件:gzip /home/hello.txt

    image-20211102104249450

  • 使用 gunzip 指令解压缩文件:gunzip /home/hello.txt.gz

    image-20211102104414245

zip/unzip指令

zip 用于压缩文件,unzip 用于解压的,这个在项目打包发布中很有用的。

1
2
3
zip	[选项]	XXX.zip	  要压缩的文件

unzip [选项] XXX.zip
常用选项 功能
-r 递归压缩,即压缩目录
-d <目录> 指定解压后文件的存放目录
  • 将 /home 下所有文件夹压缩:zip -r myhome.zip /home/

    将home目录及其包含的文件和子文件夹都压缩

    image-20211102121403385

  • 将 myhome.zip 解压到 myzip 文件夹:unzip -d myzip myhome.zip

    image-20211102122116086

tar指令

tar 指令是打包指令,最后打包后的文件是 .tar.gz 的文件。

1
tar	[选项]	XXX.tar.gz
常用选项 功能
-c 产生 .tar 打包文件
-v 显示详细信息
-f 指定压缩后的文件名
-z 打包同时压缩
-x 解包 .tar 文件
  • 压缩多个文件并显示信息:tar -czvf pc.tar.gz pig.txt cat.txt

    image-20211102164724316

  • 压缩整个目录:tar -zcvf myhome.tar.gz /home/

    image-20211102164217489

  • 解压缩 .tar.gz 文件到当前目录: tar -zxvf pc.tar.gz

    image-20211102164902537

  • 解压 .tar.gz 文件到指定目录:

    tar -zxvf /home/myhome.tar.gz -C /home/mytar

    -C 指定位置。

    image-20211102165457913

    image-20211102165535424

  • 查看目录大小:du -sh /var/log

    du 命令可以查看目录大小,-s 查看总大小,*-h* 显示容量单位。

    image-20211030150408998

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
#### 打包命令:

##### `tar -cf /root/log.tar /var/log`

![image-20211029212538028](http://gao8847.oss-cn-hangzhou.aliyuncs.com/image-20211029212538028.png)

使用 tar 命令把 */var/log* 目录打包,打包后放到 */root/log.tar*。-c(create)创建打包文件,-f(file文件),这里没压缩。

#### 查看是否有打包好的文件:

##### `ls -lh /root/log.tar`

![image-20211029212305061](http://gao8847.oss-cn-hangzhou.aliyuncs.com/image-20211029212305061.png)

#### 查看文件是否被压缩

##### `ls -lh /root/log.tar.gz`

![image-20211029212952846](http://gao8847.oss-cn-hangzhou.aliyuncs.com/image-20211029212952846.png)

#### 使用tar命令打包并压缩文件

##### `tar -czf /root/log.tar.gz /var/log`

使用`tar`命令把 */var/log* 目录打包,并调用 gzip 对文件压缩,打包压缩后放到 */root/log.tar.gz*

再次查看文件是否被压缩:`ls -lh /root/log.tar.gz`

![image-20211030150754163](C:\Users\86186\AppData\Roaming\Typora\typora-user-images\image-20211030150754163.png)

可以看到压缩文件存在,压缩后的文件明显比之前小很多,说明压缩成功了。

#### 使用tar命令解压文件

##### `tar -xf /root/log.tar.gz`

##### `tar -xf /root/log.tar.bz2`

![image-20211030151435358](http://gao8847.oss-cn-hangzhou.aliyuncs.com/image-20211030151435358.png)

使用 `tar` 命令解压文件,`-x` 解压,`-f`是文件。不管是 gzip 格式,还是 bzip2 格式的压缩包,都是 `-xf`。`tar`命令可以自动判断文件格式,自己解压。默认解压到当前目录。

#### 解压文件到指定的目录

##### `tar -xf /root/log.tar.bz2 -C /目录名`

通过`-C`指定解压的目录

磁盘分区与挂载

Linux普通分区

  1. 所有的操作系统都需要对硬盘进行分区、格式化之后才能使用,windows的格式化文件系统NTFS,格式化完成后,系统会自动绑定一个盘符,比如C盘,D盘。

    在Linux系统中,我们也需要分区、格式化,格式化之后需要我们自己手动绑定分区到一个目录(挂载)

    image-20211104154243789

  2. 硬盘为什么分区、格式化?

    不格式化,直接往硬盘中写入数据,犹如往沙漠中投了一粒沙子,投放简单,再找出来的时候,非常难!

    所以,硬盘需要分区,格式化,把硬盘划分为N多小格子,每个格子都有唯一的编号,这样数据导入格子中,后期就可以快速定位读取数据出来。

    045

  3. 在Linux中硬盘的命名规则:

    依据硬盘类型取名:

    • IDE硬盘:/dev/hda(第一块硬盘),/dev/hdb(第二块硬盘)

    • SATA、SCSI硬盘:/dev/sda(第一块硬盘),/dev/sdb(第二块硬盘)

    • 固态nvme硬盘:/dev/nmve0n1….

    • 如果是linux的kvm虚拟硬盘: /dev/vda(第一硬盘),/dev/vdb(第二块硬盘)

原理介绍:

  1. 对 Linux 来说无论有几个分区,分给哪一目录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构,。Linux中每个分区都是用来组成整个文件系统的一部分。

  2. Linux 采用了一种叫 “载入” 的处理方法,它的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录联系起来。这时要载入的一个分区将使它的存储空间在一个目录下获得。

  3. 示意图

    image-20211102170131021

硬盘说明

  1. Linux硬盘分 IDE硬盘和 SCSI硬盘,目前基本上是 SCSI 硬盘;
  2. 对于 SCSI 硬盘则标识为 “sdx”,SCSI硬盘是用 “sc” 来表示分区所在设备的类型的。”x” 为盘号 (a 为基本盘,b 为基本从属盘,c 为辅助主盘,d 为辅助从属盘)。““ 代表分区,前四个分区用数字1 到 4 表示,它们是主分区或扩展分区,从 5 开始就是逻辑分区。
  3. 对于 IDE 硬盘,驱动器标识符为 “hdx~” ,其中”hd”表明分区所在设备的类型,这里是指IDE硬盘了。其余则和 SCSI 硬盘的表示方法一样。例,hda3表示为第一个IDE硬盘上的第三个主分区或扩展分区,hdb2表示为第二个IDE硬盘上的第二个主分区或扩展分区。

查看所有设备挂载情况

lsblk 或者 lsblk -f

image-20211102171559333

image-20211102171941739

硬盘的挂载

以增加一块硬盘为例,来熟悉下硬盘的相关指令和深入理解硬盘分区、挂载、卸载的概念。

想要增加一块硬盘,可以分为五个步骤:虚拟机添加硬盘、分区、格式化、挂载、设置可以自动挂载。

1. 给虚拟机增加硬盘

在【虚拟机】菜单中,选择【设置】,然后设备列表里添加硬盘,然后一路【下一步】,中间只有选择硬盘大小的地方需要修改,至到完成。然后重启系统(才能识别) !

image-20211102193221169

1121

image-20211102193104986

在系统中执行lsblk查看是否有硬盘,

lsblk查看硬盘信息,如果没有识别,则重启计算机。可以看到多了一块硬盘 nvme0n2,大小为 20G。

image-20211102193913750

2. 给硬盘分区

使用 fdisk 分区命令给新添加的硬盘分区。

1
fdisk	/dev/硬盘名

选择我们新添加到硬盘,使用fdisk 指令开始分区:fdisk /dev/nvme0n2

image-20211102195703896

分区菜单选项:

分区命令 功能
m 显示命令列表
p 显示硬盘分区,同 fdisk -l
n 新增分区
d 删除分区
w 写入并退出

开始分区后输入 n,代表新增分区;然后输入 p ,选择分区类型为主分区。(输入e代表选择扩展分区)image-20211102200917421

此时输入分区编号,因为硬盘里还没有创建分区,所以默认为1,表示新建的是硬盘的第一个分区。

接着会让我们选择分区开始的位置,不输入敲回车会默认从上一分区结束的位置开始分区。因为此时硬盘还没有分区,所以默认是从硬盘开始位置分区。

接下来会让我们输入新建的分区的空间大小,单位可以说K,M,G,T,P。记住前面要带加号。无输入回车会默认将硬盘剩余所有空间分配给该分区。这里我们选择给 1 号分区分 5G 空间。

回车,会看到一号分区创建成功。

重复上述步骤,在同一硬盘再建一个分区,默认编号为2。理论上同一分区最好只有一个主分区。此时分区默认开始位置是上一分区(即刚刚创建的1好分区)结束的位置。2号分区大小不能超过15G,因为硬盘总空间是 20G,1号分区已经用了 5G。

最后输入 w 写入分区并退出,若不保存退出输入 q

分区

此时就可以用 lsblk查看我们添加硬盘的分区信息,就可以看到我们添加硬盘上已经有指定大小的两个分区了,分别是 nvme0n2p1nvme0n2p2

image-20211103003954746


分区创建好了,在fdisk命令下,我们可以使用 p选项打印出分区信息:

image-20211103012041762

使用d 选项,选择要删除的分区号就可以删掉分区:

image-20211103012624285

3. 格式化硬盘

挂载分区之前我们必须对分区进行格式化,给分区指定文件类型。Linux 格式化的类型有ext3, ext4, xfs, vfat….

格式化之后,会给每个分区分配一个40 位的唯一不重复的字符串,作为分区号 UUID,此时分区才能挂载使用。

1
2
mkfs	-t	分区类型	/dev/分区名
mkfs.分区类型 /dev/分区名

这里我们选择将分区格式化为红帽所推荐的 xfs 类型:

  • 方式1:使用第一种命令:mkfs -t 类型 /dev/分区名

    image-20211103015144257

  • 方式2:使用第二种命令:mkfs.xfs /dev/分区名

    image-20211103020033957

4.挂载分区到目录(临时)

将一个分区与一个目录联系起来。这种挂载方式是临时的,重启计算机后挂载信息就没了。

1
2
mount	/dev/分区名	挂载的目录
umount /dev/分区名 或 挂载点
  1. 创建一个目录,用于挂载分区:mkdir newdisk

    挂载的目录位置随意,可以在任意位置。这里挂载在根目录 / 下是为了方便。

    image-20211103023313339

  2. 将分区挂载到 /newdisk 目录上:mount /dev/分区名 /newdisk

    image-20211103023431683

此时就挂载完成了,我们用 lsblk -f指令查看硬盘信息,会发现新建的两个分区有了挂载点:

image-20211103023914805

但是我们使用 df -h /newdisk/ 指令查看挂载点的信息时,只能看见第二个分区 nvme0n2p2。这是因为虽然同一个挂载点可以挂载多个分区,但后挂载的分区会把先挂载的隐藏掉(前一分区还在,只是从目录上就只能看见后一分区的信息)

image-20211103024612469

此时我们在挂载点 /newdisk/ 下创建文件,该文件就会存放在 nvme0n2p2 分区了。


取消挂载(类似于把u盘拔出)

  • 方式一:umount /dev/分区名

    image-20211103031629487

    这是我们可以看到,分区 nvme0n2p2 已经被取消挂载了。此时之前被隐藏的 nvme0n2p1 就可以查看到了。

  • 方式二:umount 挂载点

    可以看到分区无挂载点了。

    image-20211103032916138

5.挂载硬盘到目录(永久)

把硬盘挂载信息记录添加到系统配置文件 /etc/fstab 中,/etc/fstab 文件中记录了所有开机需要挂载的信息。系统开机读到取到挂载关系后会自动挂载该硬盘。

修改系统配置文件:vim /etc/fstab

image-20211103034223749

在最后面添加我们格式化后的分区信息:

image-20211103170046568

把什么设备,挂载到什么目录,什么格式,什么属性,0 0 代表是否对硬盘做磁盘扫描检查(0代表不检查)。

实际操作时发现,仅添加这一行信息,只用硬盘的绝对路径并不能成功挂载硬盘到目录上。重启后系统无法进入图形化界面。解决方法是这里还需添加硬盘的 UUID ,使用 blkid命令查看后发现,新硬盘并没有 UUID。

swap交换分区

内存比较小,硬盘比较大,我们可以把硬盘的一部分空间拿出来,当内存用。

swapfqu

查看内存信息:free -h

可以看到虚拟机差不多有 2G 的内存,2G 的交换分区。image-20211103154812972

我们再加一块新硬盘,并创建一个分区,演示如何将其做成 swap交换分区:

image-20211103160917276

从实用性上讲 swap交换分区 超过内存大小就没有意义了。这里我们只做展示,不考虑实用性。

格式该分区为交换分区:mkswap /dev/分区名

image-20211103161211417

将该硬盘挂载信息记录到系统配置文件 /etc/fstab 中,系统开机读到取到挂载关系后会自动挂载该硬盘和硬盘上的 swap交换分区。

修改配置文件 /etc/fstab :vim /etc/fstab

image-20211103161614531

添加分区挂载信息:

image-20211103164239930

读取 fstab文件并刷新,激活 swap分区:swapon -a

image-20211103163259562

查看效果,有2个交换分区,其中一个就是/dev/nvme0n3p1

image-20211103164411688

查看内存信息:free -h

可以看到,虚拟机中多了一个我们新加的 swap分区:image-20211103164615566

磁盘情况查询

  • 查询磁系统整体磁盘使用情况:

    1
    df		-h

    image-20211103190856590

  • 查询指定目录的磁盘占用情况

    1
    du   -h		/目录

    不带目录默认查询当前目录。

    常用参数 功能
    -s 指定目录占用大小汇总
    -h 带计量单位
    -a 含文件
    –max-depth=1 子目录深度
    -c 列出明细的同时,增加汇总值

    查询 /opt目录的磁盘占用情况: du -ha --max-depth=1 /opt

    image-20211103192041222

  • 统计 /opt 文件夹下文件的个数:

    1
    ls   -l   /opt | grep  "^-"  |  wc -l  

    image-20211103194222980

  • 统计 /opt 文件夹下目录的个数:

    1
    ls   -l   /opt | grep  "d"  |  wc -l  

    image-20211103194412998

  • 统计/opt文件夹下文件的个数,包括子文件夹里的:

    1
    ls -lR /opt | grep "^-" | we -l
  • 统计 /opt 文件夹下目录的个数,包括子文件夹里的

    1
    ls   -lR   /opt  |  grep    "^d"   |   wc    -l
  • 以树状显示目录结构 tree目录 :tree /目录

    如果没有tree ,则使用 yum install tree指令 安装

    image-20211103194801501

Linux逻辑卷分区

采用普通的分区方式,最大的缺点就是不能动态调整大小!如果有一个分区,分了20G,觉得不合适,无法重新调整!

因此我们引入了卷的概念。卷可以动态调整大小的,Linux系统 中硬盘卷可以是 LVM卷 或者 VDO卷。

LVM逻辑卷

  • 硬盘或普通分区(裸盘):像原始的大树

  • pv(物理卷):人工处理成的木块

  • vg(卷组): 使用木块组合成一堆模块,鞋柜模块、衣柜模块放仓库,仓库中有很多模块

  • lv(逻辑卷):举例(从仓库中提取一部分模块使用)

可以把多个硬盘做成 pv,也可以把多个分区做成 pv。

256115

2571150000

1.准备环境

在虚拟机中添加两块硬盘,用于展示 Linux 中的逻辑卷分区。容量大小随意,类型尽量保持和之前的硬盘一致。

image-20211105033147813

可以查看到我们新添加的两块硬盘,分别是 nvme0n2 和 nvmen03,容量都是20G:

image-20211105033642299

2. 创建 pv(物理卷)

硬盘nvme0n2 做成 pv(物理卷)pvcreate /dev/nvme0n2

可以理解为:把大树,砍成木块。

image-20211105034322067

3. 创建 vg(卷组)

物理卷/dev/nvme0n2 做成 vg(卷组)vgcreate -s 16M myvg /dev/nvme0n2

创建一个卷组,起名为 myvg,大小是20G。卷组的最小单位16M。16M是卷组的扩展单元大小(PE大小)。可以理解为:使用 /dev/nvme0n2木块 做成N多鞋柜放到仓库。每个鞋柜尺寸为16M,仓库的名字是 myvg。

image-20211105040045514

查看计算机中的 vg(卷组):vgs

image-20211105040941298

查看 /dev/nvme0n2下面的 myvg卷组 的信息:lvdisplay /dev/myvg

image-20211105042850499

4. 创建 lv(逻辑卷)

卷组myvg 做成 lv(逻辑卷)lvcreate -n mylv -L 1700M myvg

-n 指定逻辑卷名称,-L 指定逻辑卷总容量。

从 myvg卷组 中提取空间,创建容量为 1700M 的逻辑卷,名称为mylv。可以理解为:从myvg仓库中提取1700M的鞋柜,一个鞋柜16M,大约107个。

image-20211105042416381

查看计算机中的 lv(逻辑卷):lvs

image-20211105043233662

查看 myvg 下面的 mylv逻辑卷 的信息:lvdisplay /dev/myvg/mylv

image-20211105043018894

5. 格式化逻辑卷

格式化 逻辑卷mylv:mkfs.xfs /dev/myvg/mylv

格式化逻辑卷的方式与格式化普通分区一样,这里我们将 mylv逻辑卷 格式化为 xfs类型。

image-20211105044916371

6. 挂载逻辑卷到目录

Linux 中分区和逻辑卷 需挂载到目录才能使用。

创建 /mydisk目录 用于挂载逻辑卷:mkdir /mydisk

image-20211105045339039

将 mylv逻辑卷 挂载到 /mydisk 目录上:mount /dev/myvg/mylv /mydisk

image-20211105045720786

查看 /mydisk目录 上的挂载状况:df -h /mydisk/

可以看到:/mydisk/目录 上已经挂载了我们的 mylv逻辑卷:

image-20211105045919675

7. 使用卷组扩容挂载点

假设经过一段时间后,发现容量不够。myvg卷组 总共20G,我们只使用了 1.7G 做 mylv逻辑卷,还有18G 的卷组没有使用。

mylv逻辑卷 容量只有 1.7G,我们现在需要 15G 的容量,可以扩容现有的逻辑卷到 15G。

把现有的 /dev/myvg/mylv逻辑卷 扩容到 15G:lvextend -L 15G /dev/myvg/mylv

image-20211105170407710

查看是 mylv逻辑卷 否扩容:lvs /dev/myvg/mylv

image-20211105170840779

查看挂载目录:df -h /share/

容量还是1.7G,因为扩容之前已经挂载了

image-20211105045919675

把挂载点文件系统扩容: xfs_growfs /mydisk/

image-20211105172329922

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
假设经过一段时间,发现容量还是不够**

myvg目前总共20G,已经使用了15G做mylv

现在mylv是大约15G,需要35G,而现在myvg没有空间了

就需要扩容VG,再扩容LV,再扩容挂载点

[root@server1 ~]# **vgextend myvg /dev/sdc**

Physical volume "/dev/sdc" successfully created.

Volume group "myvg" successfully extended

//使用/dev/sdc硬盘,扩容myvg

[root@server1 ~]# **vgs myvg**

VG #PV #LV #SN Attr VSize VFree

myvg 2 1 0 wz--n- <**39.97**g <**24.97**g

[root@server1 ~]# **lvextend -L 35G /dev/myvg/mylv**

Size of logical volume myvg/mylv changed from 15.00 GiB (960 extents) to 35.00 GiB (2240 extents).

Logical volume myvg/mylv successfully resized.

//扩容逻辑卷到35G空间

[root@server1 ~]# **xfs_growfs /share/**

//把挂载点文件系统扩容

[root@server1 ~]# **lvs /dev/myvg/mylv**

//查看是否扩容

[root@server1 ~]# **df -h /share/**

//查看是否扩容

几种 /etc/fstab 常见错误

fstab参数信息错误
  • 可能是没有设备

  • 可能有设备,没有分区

  • 可能有设备,有分区,但是后来做其他实验,删除了分区

  • 设备有,分区有,/etc/fstab文件字母错误

模拟错误场景

假设计算机中没有 sde 设备,也没有该设备的分区,但 /etc/fstab 中最后一行有如下错误挂载信息:

/dev/sde3 /media xfs defaults 0 0

此时重启虚拟机,会进入救援模式,不能正常启动:


问题分析:

计算机没有 sde 设备,更没有分区,而计算机开机第一件事读取操作系统内核,第二件事就是读取 /etc/fstab,找设备,挂载设备。

这里找设备找不到,无法挂载,计算机就会进入**救援模式 (emergency mode)**;

解决方法:

  1. 在上面图形界面,输入 root 密码(密码不显示),进入救援模式:

  2. 更改 /etc/fstab 默认配置文件:

    编辑文件,找到最后添加的一行新内容,找到错误的内容,修改正确或者删除错误内容:

  3. 重启计算机:

    排除错误后重启成功:

  • 光盘没有或者没有连接

    image-20211106114832792

    默认无法编辑,按i键,编辑文件,在最后添加一行新内容

    /dev/sr0 /media iso9660 defaults 0 0

    重启计算机:reboot

    重启后,系统再次进入救援模式:

    image-20211106115002368

    1)添加光盘文件或者连接光驱设备

    2)修改/etc/fstab,删除对应的设备挂载信息

    image-20211106115122244

VDO卷分区

VDO卷 和 LVM卷 有很多相同的特性,比如可以组合,调整大小。另外VDO卷还可以:数据去重、预分配功能。

  • 数据去重:

    传统的硬盘,一样的文件存两次,会占用硬盘2份空间容量。比如:网络下载一个 电影 (a.mp4),后面忘记了,又下载取名为 b.mp4,如果视频为 1G 视频,则最后占用硬盘 2G 空间。

    image-20211106172704536

    DOV分区的硬盘具有数据去重功能,重复存储一样的数据,计算机自动去除重复数据。像百度云盘,就有数据去重功能。

    image-20211106173002415

  • 预分配:

    是我暂时硬盘只有 20G,但是 vdo 可以创建出100G 的卷

1. 添加硬盘

在虚拟机中新添加一块硬盘 nvme02,用于创建 VDO分区。

image-20211109113710970

2. 安装vdo软件

创建 VDO分区 需要用到对应的软件工具,安装的前提是 YUM 已经配置好了。

安装 vdo 软件:yum -y install vdo

image-20211106180202208

启动 vdo程序 ,设置为开机自启:

image-20211106180306955

3. 创建 VDO卷

查看帮助:vdo create -h

image-20211106180521984

创建一个 vdo卷:

1
vdo   create   -n   myvdo     --device=/dev/nvme0n2   --vdoLogicalSize=100G

-n: 指定卷的名字,名字任意;--device :指定使用哪个硬盘做卷;--vdoLogicalSize:指定预分配的容量大小。

命令执行后,会提示做完的卷在计算机的什么位置: /dev/mapper/myvdo

image-20211109115221290

格式化 myvdo 卷:mkfs.xfs /dev/mapper/myvdo

image-20211109115915436

创建一个目录,用来挂载 vdo 卷:

image-20211109120231190

挂载 myvdo 卷到 /vblock 目录 :

image-20211109120358885

查看 /vblock/ 目录信息,已成功挂载上了 myvdo 卷:

image-20211109120710308

也可以永久挂载:

修改 /etc/fstab 分区文件:

image-20211109121453420

添加挂载点目录信息:

image-20211109121248314

NFS文件系统(网络文件系统)

前面的分区挂载,卷挂载,都是本地设备。如果本地没有设备了,我还需要扩容呢?比如自己的电脑 4 个硬盘接口已经用完了,无法再添加硬盘,但是还需要更多容量呢?

一个电脑把硬盘格式化挂载到某个目录,挂载后将该目录共享给其他主机,则其他主机就可以访问该共享目录,获得存储的空间容量。

PC1 做共享服务器操作:

  1. 安装nfs需要的软件: yum -y install nfs-utils

  2. 创建一个共享目录:mkdir /share

  3. 修改nfs软件的配置文件(文件默认是空的):vim /etc/exports

    添加以下内容: **/share (rw)*

    将/share目录共享给所有人( * 代表所有人),权限是 rw,可读可写

  4. 启动服务:systemctl start nfs-server

  5. 设置下服务为开机自启动:systemctl enable nfs-server

  6. 设置防火墙信任所有:firewall-cmd --set-default-zone=trusted

  7. 查看自己的IP地址:ip a s

PC2做客户端,访问共享:

  1. 安装nfs需要的软件: yum -y install nfs-utils

  2. 挂载共享文件夹到自己的 /mnt 目录:mount 172.25.0.254:/share /mnt

    将 172.25.0.254 这个电脑的/share共享目录,挂载到自己的/mnt目录。这里 172.25.0.254是之前查看的 PC1 的 IP 地址。

  3. 查看 /mnt 目录上是否成功挂载:df -h /mnt

  4. 如果永久挂载,只需编辑 /etc/fstab 分区文件添加共享文件夹信息:vim /etc/fstab

    添加内容格式: 172.25.0.254:/share /mnt nfs defaults 0 0

Linux软件管理(YUM)

Linux管理软件使用的是应用商店的模式(软件仓库),提前把软件都放到一个目录下,或者访问http共享里面。这里面仓库了比如9000多软件,和手机的应用商店概念一样,华为做一个应用商店服务器,存放所有软件,每个人手机连接华为的服务器,在线下载安装软件。

配置YUM软件仓库

  1. 把光盘插入到虚拟光驱里面,添加完光盘ISO文件

    image-20211029113202794

  2. 把光盘挂载到 /media 目录

    在命令终端编辑fstab文件:vim /etc/fstab

    在文件最后,添加新内容:/dev/sr0 /media iso9660 defaults 0 0

    image-20211029115233637

    /dev/sr0 就是光盘设备,把这个光盘挂载到 /media 目录,*/media* 目录是 linux系统自带的一个默认目录(默认里面是空的)iso9660 是光盘的标准格式,defaults 代表模式属性。

    0 0 代表不检查光盘内容

    读取 /etc/fstab 文件,刷新,挂载光盘到 /mediamount -a

    image-20211109114102456

    查看 /dev/sr0 是否挂载到了 /mediadf -h

    image-20211029135713554

    如果是 CentOS8 或者 RHEL8,则在/media目录下会包含:AppStream目录、BaseOS目录,这两个目录里面有软件;

    如果是CentOS7或者RHEL7,则在/media目录下会包含:没有AppStream目录、BaseOS目录,所有软件都在/media/Packages/目录。

    到此,我们的软件商店(软件仓库)已经准备好!这里的 /media 就是软件仓库!

  3. 修改 YUM配置文件,告诉计算机仓库在哪里

    1. 删除系统已有的 YUM配置文件:rm -rf /etc/yum.repos.d/*

      image-20211029160232928

      注意后面必须有*,有*是删除目录里面的文件,没有*,是删除整个目录。

    2. 新建 YUM 配置文件:vim /etc/yum.repos.d/nb.repo

      image-20211029162559706

      YUM 配置文件必须在 /etc/yum.repos.d/ 目录下,YUM配置文件名可以任意,但扩展名必须是 .repo

      • 7版本系统环境,软件在*/media下YUM* 配置文件内容为:

        1
        2
        3
        4
        [nb]
        name=nb
        baseurl=file:///media
        gpgcheck=0

        [nb] 是软件仓库的商标;name 是商店的名字,名称任意;baseurl 定义软件在哪里;file:// 是标准格式,*/media* 是目录;gpgcheck 是不检查软件包来源。

      • 8版本系统环境,软件在*/media下YUM* 配置文件内容为:

        1
        2
        3
        4
        5
        6
        7
        8
        [appstream]
        name=appstream
        baseurl=file:///media/AppStream
        gpgcheck=0
        [baseos]
        name=baseos
        baseurl=file:///media/BaseOS
        gpgcheck=0

        image-20211031015122496

        [appstream] 是软件仓库的商标;name 是商店的名字,名称任意;baseurl定义软件在哪里;file:// 是标准格式;*/media/AppStream* 是目录区分大小写;gpgcheck 是不检查软件包来源。

    3. 查看已配置的所有可用仓库:yum repolist -v

      image-20211031014859623

      image-20211029171845847

      我们可以看到,以配置的软件仓库中有几千个软件包,说明我们配置成功了。可以安装软件来。

Web服务器软件

安装软件:yum -y install httpd

image-20211030152130028

image-20211030152204270

没有该软件则安装,已经有了,会提示已经安装:already installed(已经安装)。该软件默认存放网页的目录是 /var/www/html/,默认为空。

编写网页

新建一个html网页文件:vim /var/www/html/index.html

image-20211031015253402

i键编辑,文件内容如下:

1
2
3
4
5
6
<html>
<body>
<h1>我和我的祖国</h1>
<h2>我和我的祖国</h2>
</body>
</html>

image-20211031015217376

启动服务:systemctl start httpd

image-20211031015331025

设置服务为开机自启动服务:systemctl enable httpd

image-20211030153406356

验证网页:

在浏览器中输入IP地址:http://127.0.0.1/

image-20211030153625593

调整命令字体大小:ctrl shift +

调整命令字体大小:ctrl -

防火墙相关操作

  • 查看防火墙状态:systemctl status firewalld

    可以看到,防火墙处于开启状态。

    image-20211104155620057

  • 关闭防火墙:systemctl stop firewalld

    关闭后可以看到防火墙服务已处于终止状态。

    image-20211104155933637

  • 启动防火墙:systemctl start firewalld

    image-20211108091434063

  • 重启防火墙:systemctl restart firewalld

    image-20211108091924683

  • 在开机时启用防火墙:systemctl enable firewalld

    image-20211108092228191

  • 在开机时禁用防火墙:systemctl disable firewalld

    image-20211104160252744

JavaEE定制

如果需要在 Linux 下进行 JavaEE 的开发,我们需要安装如下软件:

image-20211108212024502

安装配置JDK8

  1. 新建 /opt/jdk 目录,并用 xftp6 上传 jdk 文件压缩包

    image-20211108214315284

    image-20211108214227040

  2. 解压 jdk 压缩包并重命名

    image-20211108214715317

    image-20211108215027002

  3. 创建 /usr/local/java 目录,将 jdk 移动到该目录

    /usr/local 是用户级的程序目录,可以理解为 C:/Program Files/image-20211108215521470

  4. 配置环境变量

    如果不配置环境变量,java程序只有在 /user/local/java/jdk1.8/bin 目录下才能编译和执行,非常不方便。

    查看已有的环境变量:image-20211108223257508

    编辑环境变量配置文件: vim /etc/profile

    image-20211108223808267

    在最后添加 jdk 环境变量:

    image-20211108224207857

  5. 刷新配置文件,让新的环境变量生效:source /etc/profile

    image-20211108224405225

  6. 检查环境变量是否配置成功

    如果配置成功,可以查看到 jdk 的版本信息:

    image-20211108143135984

    编写一个 Hello.java 程序,可以运行输出:

    image-20211108210035686

安装 Tomcat

  1. 新建 /opt/tomcat 目录,上传安装文件并解压缩

    image-20211108154252138

  2. 进入解压目录/bin ,启动 tomcat的命令是 ./startup.sh

    image-20211108155942935

  3. 放开防火墙的 8080 端口号:

    image-20211108231102641

    重载使更改生效:

    image-20211108231347734

    查询端口是否打开:

    image-20211108231402947

  4. 访问 http://ip:8080 ,检查是否配置成功

    image-20211108233444578

安装 idea2020

  1. 新建 /opt/idea 目录,上传安装文件并解压缩

    image-20211109000009804

  2. 切换到解压后文件夹的 bin 目录,在有界面环境下运行 ./idea.sh 脚本文件,即可启动 idea。

    image-20211109005224193

安装 mysql5.7

  1. 新建 /opt/mysql 目录,下载或上传安装文件并解压缩:

    image-20211110161651650

    image-20211110161803731

  2. Centos7.6 自带的类 mysql 数据库是 mariadb,会与 mysql 冲突,需要先删除:

    image-20211110162704032

    image-20211110162746541

    image-20211110162814778

  3. 安装 mysql ,依次运行以下命令:

    image-20211110163100301

    image-20211110163206235

    image-20211110163309435

    image-20211110163440583

    image-20211110163651113

  4. 启动 mysql

    image-20211110163820581

  5. 查看默认密码,登录到 mysql

    mysql 会自动给 root 用户设置随机密码,运行 grep "password" /var/log/mysqld.log 指令可以查看到当前密码:

    image-20211110164352012

    运行 mysql -u root -p 指令,输入上述密码,即可登录进入 mysql 命令行:

    image-20211110164719027

  6. 重新设置 mysql 的 root 密码

    使用 set global validate_password_policy=0 指令更改 mysql 的密码设置策略:

    mysql 的 validate_password_policy 默认为1,改成 0 复杂度最低,最高为2

    image-20211110165244054

    执行 set password for 'root'@'localhost' = password('778874315'); 指令重新设置密码:

    image-20211110165738190

    运行 flush privileges; 使密码生效:

    image-20211110170008048

    此时退出 mysql ,就可以用新密码重新登录了:

    image-20211110170137956

  7. 安装完成,测试 mysql 是否可以正常使用

    image-20211110170607910


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!