Linus哲学思想:

  1. 一切皆文件:所有文件的配置、执行结果、网络通信、硬件管理等操作都是通过文件操作来实现的
  2. 一个命令只完成一项任务,复杂功能通过命令组合来实现,例如通过管道符“I”’可以将前一个命令的执行结果交给后一个命令继续执行

避免一切不必要的交互

Linux系统的启动流程

  1. 加电自检(检查硬件)
  2. 启动BIOS固件(主板中的程序、启动项、按键、显示模式、WIFI启动等功能)
  3. 引导加载系统启动程序(硬盘第一个分区、u盘、光盘)
  4. 内核初始化(将内核加载到内存中运运行)
  5. 初始化进程(systemd的PID是1,管理整个系统运行)
  6. 启动用户空间(根据系统运行级别启动相应的后台服务与用户设置的自启动服务)
  7. 用户登录

远程连接

SSH:安全的远程访问协议,C/S架构

服务端安装:openssh-server

客户端安装:ssh命令、xshell、PUTTY、mobaxterm

  服务器的IP地址:ip  a

  SSH服务端口:22

Ssh  root@192.168.8.30  # yes 输入root密码

排错思路:

  1. 检查网络连接模式
  2. 检查IP、网关、掩码
  3. 真机网络适配器设置

忘记root密码后进行重置

Linux基础命令

命令结构: 命令  【选项】 【参数】

*命令:用于调用系统中的可执行程序

*选项:- / --开头的之后跟字母,可以通—help查看命令的常用选项

*参数:一般是文件或者目录

  1. ls查看目录中的文件

-l:查看文件详情

-a:查看所有文件,包括命令结构隐藏文件(开头的文件)

1.#查看/etc目录中的所有文件

2.ls-la   /etc

2.pwd查看当前工作目录中的路径

3.cat查看文件中的所有内容

4.cd:改变当前路径到某一个新的路径

*文件路径:/etc/xxx/xxx

*/根目录:Linux的

绝对路径:从/开始

例如:/etc/sysconfig/network/scripts/ifcfg-ens33

*相对路径:从当前目录开始到目标目录的路径

Shell中文是“壳”的意思,在Linux中作为用户和系统之间交互的工具

*bash:大多数Linux操作系统默认的shell版本

*SH:最初的shell,较为原始,不推荐使用

ZSH:功能更加强大

5.fell:查看文件类型

  1. file 文件名
  2. -普通文件(二进制executable、)文本文件(ASCII text、UTF-8 Unicode text)
  3. l链接文件(symbolic link)
  4. d目录文件(directory)
  5. b块文件(block special)磁盘或光盘
  6. c字符文件(character special)输入输出设备:显示器、打印机、键盘鼠标
  7. s套接字文件(socket)进程间通信
  8. p管道符服务文件(fifo(named pipe))多进程通信

6.touch:创建普通文件(更新文件修改时间)

(1)touch a.txt

(2)touch 1.txt  2.txt  3.txt

(3)touch{1…100}.txt

7.rm: 删除文件或目录

(1)rm -f强制删除

(2)rm -r递归删除目录和目录中的所有内容

(3)rm -rf目录(极度危险慎用)

8.vi/vim:神的编辑器

(1)进入编辑模式 i/a/o

(2)保存退出:esc:wq

(3)esc(返回命令模式)

(4):末行模式

(5)w保存

(6)q退出

#vim三种基本模式

Vim

  1. 命令模式:复制、剪切、跳转、撤销、找回、删除等功能
  2. 编辑模式(插入模式):对文件内容进行编辑
  3. 末行模式(末行命令):对编辑进行一些设置,行号、查找、替换、保存、退出

#命令模式快捷键

  1. gg 光标跳转到第一行
  2. GG 光标跳转到最后一行
  3. dd  删除光标所在的一行   10dd删除当前行向下的10行
  4. u  撤销操作
  5. Ctrl+r 取消上一次的撤销(恢复)
  6. yy    复制一行    3yy   复制三行
  7. p   粘贴一行   10p 粘贴10行

#编辑模式

进入编辑模式

  1. i:在光标当前位置进行编辑
  2. a:光标后一位进行编辑
  3. o:光标向下新建一行进行编辑
  4. I:将光标移动到当前行的开头然后编辑
  5. A:将光标移动到当前行的结尾
  6. O:光标向上新建一行进行编辑

Esc先进入末行模式然后输入冒号

(1):set nonu取消行

(2):Set  nu 显示行号

(3):q 不保存直接退出

(4):w  保存

(5):wq  保存并退出

(6):x  保存并退出

(7):q!  强制退出

(8):wq!  强制保存并退出

(9)/关键字  n向下查找  N向上查找

(10):s/old/new/ 替换光标所在行第一个找到的关键字

(11):s/old/new/g 替换光标所在行找到的所有关键字

(12):%s/old/new/全文替换

9.cp:复制文件或目录

10.mv:移动文件(改名)

(1)mv  原文件  路径

(2)mv  old  new

11.mkdir:创建目录

mkdir -p AA/BB/CC

12.rmdir删除空目录

rmdir  dir01

13.date:查看系统时间

(1)date

(2)自定义时间显示的格式:时间格式化

(3)%Y xxx年     %m xx月   %d xx日  %H(xx小时)  %M(XX分钟) %s (xx秒)

(4)%F  xxxx-xx-xx  

(5)%T HH:MM:SS

(6)时间格式化显示当前时间     date+%Y-%m-%d  %H:%M:%S

(7) 使用时间同步服务器恢复系统时间ntpdate ntp.aliyun.com

(8)修改时间  date-s  

14.man:查看命令帮助文档

(1)man date

15.cal : 显示日历

16.free:显示内存占率

(1)free -h:显示人类可读的单位

17.df:查看磁盘与分区的占用率

(1)df -h  显示人类可读的单位

(2)df -ht 显示磁盘的文件类型

18.du:查看目录大小

(1)du:默认会显示目录中每个子目录的大小

(2)du -s:只总的大小

(3)du-sh:显示人类可读单位

19.uname:查看系统基本信息,内核版本

(1)uname -a

20.lscpu:查看cpu的基本信息

(1)lscpu

21:lsblk:查看磁盘分区

22.lsof:查看端口是否被占用

(1)lsof -i:端口号

23.init:设置系统启动级别

(1)init 0 关机

(2)init 1  单用户模式,仅允许root登录,救援模式

(3)init2   多用户、不支持网络文件系统

(4)init3  多人多用户的命令行模式

(5)init4  未占用

(6)Init5  带图形界面的多人多用户模式

(7)init6  重启模式

24.wget:下载网络文件

(1)wget URL

(2)wget -0指定下载路径名称  URL

(3)下载华为yum源

(4)cd/ etc/yum.repos.d/

(5)cp -a /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak

(6)wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.huaweicloud.com/repository/conf/CentOS-7-anon.repo

25.yum:rpm包安装命令

(1)yum makecache 建立yum源的元缓存

(2)yum install -y  软件名称 #安装软件

(3)yum  remove -y 软件名称 #卸载软件

(4)yum update   #更新系统中所有的软件

(5)yum info  软件名称  #查看软件的基本信息

(6)yum search  软件名  #通过软件名称搜索软件包

(7)yum group list    #显示软件分组

(8)yum groupinstall   #安装一组软件

(9)yum list installed   #显示安装的软件

(10)yum clean all     #清除所有的yum缓存

使用安装光盘作为YUM源,适合没有网络的环境中使用

使用虚拟机加载安装光盘

挂载光盘到系统目录:/media/cdrom

配置光盘YUM源文件

26.mount:挂载磁盘、光盘、网络文件系统

(1)mkdir /media/cdrom

(2)# -r挂载只读文件时使用

(3)mount -r /dev/sr0 /media/cdrom

(4)#挂载:将系统中的目录和存储设备进行关联,通过该目录可以正常使用存储设备

(5)cd /etc/yum.repos.d/

(6)vim cdrom.repo

27.nmtui:半图形化网卡设置

(1)nmtui

(2)直接修改配置文件

(3)vim /etc/sysconfig/network-scripts/ifcfg-ens33

(15).重启系统网卡

(16)systemectl restart network

28.alias:给命令起别名

(1)alias   vinet= vim /etc/sysconfig/network-scripts/ifcfg-ens33

(2)alias  rennet= systemectl restart network

(3)默认只在当前终端中生效,在新终端中无效

(4)vim /etc/profile  让所有用户生效

(5)vim ~/.bashrc   让当前用户生效

29.unalias:清除别名

(1)unalias -a  清除所有别名

30.:source:重新加载配置,让配置文件立即生效

(1)source .bashrc   #   .bashrc是bash的配置文件,用户登录时,自动执行

(2)source /etc/profile  # /etc/profile系统启动完成时,自动执行

31.type:显示命令的类型

(1)type  命令

(2)shell 内部命令:shell内部自带的命令

(3)外部命令:/usr/bin/python

(4)别名:使用alias起到别名

(5)函数:包含一组命令的集合

(6)shell脚本关键字: if   for  while...

.用户与权限管理

32.useradd:创建新用户

(1)useradd  用户名

(2)默认创建用户:

(3)创建用户家目录, /home/家目录

(4)允许用户登录系统,

(5)系统默认的shell - /bin/bash

(6)创建一个和用户相同名称的组名,它是用户的主组,不添加附加组

(7)-b, --base-dir BASE_DIR 新账户的主目录的基目录

 (8) -c, --comment COMMENT         新账户的 GECOS 字段

 (9) -d, --home-dir HOME_DIR       新账户的主目录

  (10)-D, --defaults 显示或更改默认的 useradd 配置

(11) -e, --expiredate EXPIRE_DATE  新账户的过期日期

 (12) -f, --inactive INACTIVE       新账户的密码不活动期

  (13)-g, --gid GROUP 新账户主组的名称或 ID

  (14)-G, --groups GROUPS 新账户的附加组列表

(15)  -h, --help                    显示此帮助信息并推出

 (16) -k, --skel SKEL_DIR 使用此目录作为骨架目录

  (17)-K, --key KEY=VALUE           不使用 /etc/login.defs 中的默认值

 (18) -l, --no-log-init 不要将此用户添加到最近登录和登录失败数据库

 (19) -m, --create-home 创建用户的主目录

  (20)-M, --no-create-home 不创建用户的主目录

 (21) -N, --no-user-group 不创建同名的组

  (22)-o, --non-unique 允许使用重复的 UID 创建用户

(23)  -p, --password PASSWORD 加密后的新账户密码

 (24) -r, --system                  创建一个系统账户

  (25)-R, --root CHROOT_DIR         chroot 到的目录

 (26) -P, --prefix PREFIX_DIR       prefix directory where are located the /etc/* files

 (27) -s, --shell SHELL 新账户的登录 shell

  (28)@-u, --uid UID 新账户的用户 ID

  (29)-U, --user-group 创建与用户同名的组

 (30) -Z, --selinux-user SEUSER 为 SELinux 用户映射使用指定 SEUSER

(31)存放用户信息

(32)/etc/passwd

(33)tom:x:1002:1002::/home/tom:/bin/bash

(34)用户名:密码占位:用户ID:主组ID:简介:用户家目录:启动时运行的shell

(35)软件用户不允许登录系统

(36)useradd -M -s /usr/sbin/nologin  mysql

(37)useradd -u  9527  yqq
(38)UID:用户id    0:超级管理员的id    1~999系统用户的id范围   1000+普通用户范围

(39)useradd -g root admin  将admin用户的主组设置为root

(40)主组:和用户绑定的组,用户创建、复制、剪切的文件会自动属于该组

(41)附加组:加入该组的用户拥有该组的组权限

(42)useradd -G root user1  将user1用户加入到root中

(43)vim /etc/group  存放组信息的文件

(44)root:x:0: user1,user2    组名:组密码占位:GID:用户1,用户2

33.usermod:修改已有用户的设置

(1)usermod -aG  root  tom  将tom加入root组

34.userdel删除用户

(1)userdel -r用户  #删除用户、用户家目录、邮箱目录

35.passwd:给用户创建密码或修改密码

(1)root用户可以修改所有用户的密码

(2)普通用户只能修改自己的密码,除非使用sudo

(3)passwd  用户名

36.su:切换用户

(1)su用户  #当前目录直接切换用户

(2)su  - 用户  #切换用户并在它的家目录登录

(3)su  -       #切换root用户

(4)root用户切换普通用户不需要密码,普通用户切换需要密码

37sudo:让普通用户临时使用root的身份执行命令

38.id:查看用户的UID

39.groupadd:创建组

(1)groupadd  组名

(2)groupadd test  #创建组

(3)groupadd  -aG  test# 将用户添加到该组

40.groupmod:修改组

(1)groupmod -g  组名 #修改组ID

41.groupdel:删除组

(1)groupdel:组名

文件权限

rwx  rwx   rwx

42.start:查看文件详情

43.chmod:修改文件的权限

数值

字母

文件含义

目录含义

1

--x

可执行

可以进入目录

2

-w-

只写

创建、剪切、删除

3

-wx

可写可执行

进入目录可修改

4

r--

只读

可以查看目录中内容

5

r-x

可读可执行

查看、进入目录

6

rw-

可读可写

不能cd进入目录

7

rwx

可读可写可执行

拥有目录的所有权

0

---

无权限

无权限

字母

含义

a

所有用户

u

所有者(属主)

g

同组成员(属组)

o

其他成员

+

增加权限

-

减少权限

=

赋予权限

  1. chmod  权限值 文件
  2. chmod  权限值 -R 目录 #递归修改权限
  3. chmod 755 dir   #rwxr-xr-x
  4. chmod 700 dir  #rwx------
  5. chmod 644 file  #re-r-r—
  6. chmod 600 file  #rw------
  7. chmod +x file  #rwx—x—x
  8. chmod u-w file #r-x—x—x
  9. chmod u+w,g=rw,o=r file #rwxrw-r--

44.umask:设置创建文件或目录时默认的权限

(1)umask   #0022               

(2)#0666-0022=0644  rw-r--r—

(3)#0777 -0022=0755  rwxr-xr-x

45.chown:修改文件的所有者

(1)chown  用户名  文件名

(2)chown  用户名.组名  -R 目录名

46.chgrp:只修改文件的属组

(1)chgrp  组名 文件名

特殊权限:

SUID:让其他用户可以使用属主的权限执行该命令;passwd命令被设置SUID

没有root权限,普通用户无法修改自己的密码;因为修改/etc/shadow需要root权限

Root无视普通权限,/etc/shadow为了安全性考虑,只能由root用户修改

chmod u+s  /bin/paswd

chmod 4755 file

s/S:s  SUID生效,S  没有生效,没有x可执行权限,则SUID无法生效

SGID: rwxr-sr-x  让其他用户可以使用属组的权限执行该命令

chmod g+s  xxx

chmod 2755  xxx

Sticky  bit: rwxrwxrwt粘滞位 给共享目录设置特殊权限,使用t/T,存放在该目录的文件仅允许其属主执行删除、移动等操作

chmod o+t  /tmp

chmod 1777 /tmp

隐藏权限:

47.lsattr:查看隐藏权限

48.chattr:设置隐藏权限

chattr  选项  文件

a   对文件只能追加内容,不能编辑、修改、删除文件

i  锁定文件,只能查看,复制文件,不能做任何修改

chattr +a xxx.log   #对一些特殊的日志添加

echo “字符串”>> test.txt

#   >>实现追加重定向

## 输出重定向,将屏幕上输出的内容保存到文件当中

49.ech:在Shell中输出内容

echo “hello”

ACL访问控制列表:

*属主、属组、其他用户

*ACL对于权限管理更加灵活一些,最主要的功能给其他某个用户或某组用户设置独立的权限

*rw-r-----: u:root  单独给tom一个rw-权限

50.getfacl:查看文件是否设置ACL权限

(1)getfacl file

51.setfacl:设置及文件的ACL权限

(1)-m添加或修改acl权限

(2)-x  删除指定的权限

(3)-b  删除所有的acl权限

(4)#添加或修改用户或组的权限

(5)setfacl -m u:tom:rw filename

(6)setfacl -m g:tom:r-x filename

(7)#指定删除权限
(8)setfacl -x u:tom filename

(9)删除文件的所有ACL权限

(10)setfacl -b filename

(11)目录设置ACL权限后,目录中新建的文件后自动添加ACL权限

(12)setfacl -m d:u:tom:rw dir01

sudo与sudoers

  1. sudo  可以让普通用户临时使用root的身份执行命令
  2. sudo 命令

52.visudo:使用vi编辑器打开/etc/sudoers文件

53.reboot:重启系统

54.shutdown:关机

55.which:查找命令的路径

(1)which 命令

56.who:查看登录的用户

57.whoami:查看当前终端中登录的用户

58.w:查看登录的用户的状态

59.uptime:查看系统负载

文件查看

60.tac:反向查看,从最后一行倒叙输出文本内容

61.head:查看前n行

(1)head -5 /etc/passwd

62.tail:查看后n行

(1)tail -5 /etc/passwd

(2)#监控日志,事实显示最新的日志内容

(3)tail -f /var/log/xx.log

管道符:将前一个命令执行结果通过“|”符号交给后一个命令继续执行

63.more:查看内容较多的文件时,可以向下翻页

(1)more /etc/sudoers

64.less:more升级版,可以上下自由查看文件

(1)less /etc/sudoers

(2)/关键字  n向下查找,N向上查找

(3)q退出

65.find:在系统中查找文件

(1)find  路径  查找条件(可以多条件查找)…

(2)#查找条件

(3)-name: 按文件名查找,可以使用“*”通配符进行模糊查询,会区分大小写

(4)-iname:不区分大小写

(5)-type:按文件类型查询   f普通文件  d目录  l链接  b块文件  c字符文件  s套接字  p管道符

(6)-size:根据文件大小匹配  +大于  -小于  约等于k  m  g

(7)-mtime:根据文件的修改时间查找,单位是天  +  -  =

(8)find /etc -size 10k -type f

(9)-exec #使用其他命令处理查询到的结果

(10)#找到系统中的所有log日志,自动复制到/tmp/logs中

(11)mkdir /tmp/logs

find / -name “*.log” -type f -exec cp {} /tmp logs \;

(12)find ./ -size -100k -exec rm {} \;     删除当前目录下小于100k的文件

66.rpm:RedHat的软件包管理工具

(1)rpm -I    xxx.rpm      #安装rpm包的系统中

(2)rpm -ivh  xxx.rpm     #安装rpm包时,显示进度条

(3)rpm -e     xxx        #在系统中移除该软件

(4)rpm -evh    xxx    #删除软件时,显示进度条

(5)wegt http://xxx

查看软件包

(6)rpm -qa   #查询所有安装上的软件包

(7)rpm -qi  xxx  #查询某个软件包的详细信息

(8)rpm -ql  xxx  #查询某个软件包的安装路径

67.grep:通过条件查找过滤文件或命令结果中的内容

(1)rpm -qa  / grep tree

68.wc:world count 单词统计命令

(1)wc -l 文件  #统计行数

(2)-c     字节数

(3)-w    单词数

69.tar:归档、压缩、解压缩命令

(1)#归档:将一个目录打包成一个文件

(2)tar -cvf xxx.tar  目录名

(3)-c  创建归档

-x解压缩

(4)-v    显示过程

(5)-f  指定打包后的文件

(6)-z  Gzip 压缩格式

(7)-j  Bzip2压缩格式

(8)-J  XZ压缩格式

(9)-c   指定解压缩目录

#压缩目录

tar -czvf xxx.tar.gz   目录

tar -cjvf xxx.tar.bz2  目录

tar -cJvf xxx.tar.xz   目录

# 解压缩目录

tar -xvf  xxx.tar  -C  /tmp

70.sz:通过xshell之类的终端进行文件下载

(1)yum install lrzsz

(2)#下载文件

(3)sz  文件

71.rz:通过xshell之类的终端进行文件上传

72.zip/unzip:压缩与解压缩zip文件

zip -r etc.zip /etc

unzip etc.zip

73.gzip

(1)gzip  文件  #文件.gz

(2)gzip -d   文件.gz

74.bzip2

(1)bzip2   文件  #文件.bz2

(2)bzip2 -d  文件.bz2

75.xz

(1)xz 文件 #文件xz

(2)xz -d

Linux  安装软件的方法:

*Rpm包安装:需要自己查找依赖关系,按顺序安装软件包

*Yum安装:需要配置好yum源,一键安装软件

*源码编译安装:需要下载源代码,安装编译环境,自定义安装路径和设置

*二进制包安装:将编译好的程序解压到系统中,进行简单配置

*容器化安装:使用docker镜像进行服务的安装运行

源码安装案例:

nginx:开源web服务器,支持反向代理、负载均衡、静态文件web服务

*下载源代码:https://www.nginx.org

#关闭防火墙:systemctl stop firewalld

开机不启动防火墙:systemctl disable firewalld

76.make:C语言编译工具,执行Makefile文件,调用GCC进行编译

(1)cd  源码目录

(2)make -j2   #使用2个线程编译

(3)make install  #将项目安装到安装目录

77.systemctl:服务管理工具

(1)systemctl start   服务  启动服务

(2)systemctl stop   服务  #关闭服务

(3) systemctl status  服务    #查看服务状态

(4) systemctl enable   服务   #开机启动服务

(5) systemctl disable  服务  #开机不启动服务

YUM源

yum软件包的一键安装工具,rpm包(Linu60,x中较为常用的一种软件安装包)

yum是使用Python编写的一个rpm包下载安装管理工具

  1. 自动下载rpm包
  2. 一键安装rpm包
  3. 自动解决依赖关系,自动安装软件依赖的软件包

yum源:rpm包的下载路径,包含rpm和相关信息

(1)/etc/yum.repos.d/xxx.repo

(2)备份默认的yum源

(3)配置yum源

#输入vim   CentOS-Base.repo

[base]  # yum名称

name=CentOS-$releasever – Base  #简介

mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra

#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

enabled=1  #开启当前yum源

磁盘管理

分区:在一块磁盘上可以划分多个分区,每个分区相对独立,可以将系统、软件、数据存放在不同的分区;

格式化:在分区上建立文件系统,inode存储元数据、block存储块数据;

*文件系统:管理磁盘上的文件,文件的操作的底层实现

windows:NTFS

Linux:ext4、xfs

*Indoe:I节点存储元数据,文件的描述,文件名、权限、类型、大小、修改时间、硬链接、数据块地址等信息;

*block:块文件,默认:4k,小文件会占用一个blog块,大文件数据会被拆分到多个块中;

添加新硬盘

磁盘的分区:

fdisk/gdisk

fdisk:只能支持2T及内磁盘分区,只能分4个主分区,可以在某个主分区上建立扩展分区,扩展分区可以划分逻辑分区;

*MBR(Master Boot Record)分区表存在天然瓶颈,这是导致2TB限制的根本原因。

*GPT的优势:GPT(GUID Partition Table)分区表采用64位寻址,理论上支持的磁盘容量可达18EB(1EB=1024PB=1048576TB),完全满足大磁盘需求,同时还支持更多分区(最多128个主分区)。

78.fdisk:对2T以内磁盘的分区

(1)fdisk -l  #查看分区信息

(2)fdisk /dev/sdb    #对磁盘进行分区

(3)命令(输入m获取帮助):m

(4)命令操作

(5)d  删除分区

(6)l   显示分区的类型

(7)m  显示命令菜单

(8)n   创建新分区

(9)p   打印分区表

(10)q  不保存退出命令

(11)t  根据类型id,设置类型

(12)w  保存分区信息并退出

(13)n  建立分区     p建立主分区   设置磁盘大小

(14)w  保存退出

79.mkfs.格式

(1)mkfs.xfs /dev/sdb1

(2)Mkfs.ext4

(3)mkdir /mnt/data1

(4)挂载磁盘分区到系统:mount /dev/sdb1 /mnt/data1

(5)mkdir /dev/sdb1  /mnt/data1

(6)mout /dev/sdb2  /mnt/data2

(7)umount /dev/sdb1  卸载磁盘

80.mkswap:将分区格式化为交换分区

内存:运行内存,系统与程序运行时占用的存储空间,读写速度非常快;IO(input/output)性能高

硬盘:持久化存储,但是读写的速度相对较慢,容量大;

交换分区:内存不足时,可以临时在磁盘上存储内存的数据,防止系统由于内存不足而崩溃;

(1)#swap格式化磁盘      mkswap /dev/sdb6

(2)开启swap分区(临时开启,重启系统失败)  swapon /dev/sdb6

(3)关闭swap     swapoff /dev/sdb6

当inode或block被占满时,无法创建新文件;

磁盘容量剩余很多,但是无法创建新文件;inode不足,df -hi查看一下

开机自动挂载

*硬链接:ln 原文件  连接文件 硬链接和原文件本身就是同一个文件,共享同一个inode节点,只是名称或路径不一致;不能跨分区、跨文件系统;

*软链接:ln -s 原文件 软连接 软连接和原文件是两个文件,原文件被删除、移动、改名都会导致软链接失效;可以跨分区和文件系统,没有限制;

81.gdisk:大硬盘分区

  1. yum install -y gdisk

LVM(Logical Volume Management)

逻辑卷管理技术,物理磁盘pv -> 卷组 -> 逻辑卷lv

实现逻辑卷容量的扩容、缩容;

  1. 添加物理磁盘

功能/命令

物理卷管理

卷组管理

逻辑卷管理

扫描

pvscan

vgscan

lvscan

建立

pvcreate

vgcreate

lvcreate

显示

pvdisplay

vgdisplay

lvdisplay

删除

pvremove

vgremove

lvremove

扩展

vgextend

lvextend

缩小

vgreduce

lvreduce

将物理磁盘进行转换为pv(物理卷)

  1. yum install -y lvm2
  2. 扫描物理卷   

  3. pvscan
  4. No matching physical volumes
  5. 创建物理卷pv

  6. pvcreate  /dev/sdb  /dev/sdc  /dev/sdd

  1. 将PV(物理卷)合并成VG(卷组)
  1. #创建VG
  2. 86.vgcreate vg1  /dev/sdb /dev/sdc

4.在VG(卷组)上划分LV(逻辑卷)

5.格式化LV(逻辑卷)

6.挂载LV到系统中

pv -> vg ->lv

lv扩容

lv扩容

(1)卸载lv

umount /dev/vg1/lv1

(2)增加容量

lvextend -L 50G  /dev/vg1/lv1

(3)数据完整性检查

#ext4文件系统命令

 e2fsck -f  /dev/vg1/lv1

#xfs命令

xfs_repair -f /dev/vg1/lva

(4)重置系统

#ext4文件系统命令

resize2fs /dev/vg1/lv1

#xfs命令

xfs_growfs /dev/vg1/lv1

(5)重新挂载

mount /dev/vg1/lv1 /mnt/lvm1

lv缩容:

lv缩容:

(1)卸载磁盘

umount /dev/vg1/lv1

(2)检查文件系统的完整性。

#ext4文件系统命令

e2fsck -f  /dev/vg1/lv1

#xfs命令

xfs_repair -f /dev/vg1/lv1

(3)通知系统内核将逻辑卷lv1的容量减小到10G

#ext4文件系统命令

Resize2fs /dev/vg1/lv1 10G

#xfs命令

xfs_growfs /dev/vg1/lv1 10G

(4)将LV逻辑卷的容量修改为10G

lvreduce -L 10G /dev/vg1/lv1

(5)重新挂载

mount /dev/vg1/lv1 /mnt/lvm1/

VG缩容

1.备份数据:缩容操作具有破坏性风险,必须提前备份所有重要数据。

2.检查VG状态:使用`vgdisplay`命令查看卷组的状态,确认VG是`resizeable`且活跃的。同时,使用`pvs -o+pv_used`命令查看物理卷(PV)的使用情况,确定要移除的PV。

3.迁移目标PV数据:使用`pvmove`命令将目标PV上的数据迁移到同VG的其他PV上。例如,要将`/dev/sdb1`上的数据迁移到其他PV上,可以执行`pvmove /dev/sdb1`。在迁移过程中,确保VG中有足够的其他PV容纳迁移的数据,并且目标PV不能包含VG的元数据(可以使用`pvdisplay -m /dev/sdb1`检查)。

4. 从VG移除PV:当目标PV上的数据全部迁移完成后,使用`vgreduce`命令将该PV从卷组中移除。例如,要从名为`vg_name`的卷组中移除`/dev/sdb1`,可以执行`vgreduce vg_name /dev/sdb1`。

5. 检查VG容量变化:再次使用`vgdisplay`命令查看卷组的容量,确认VG已经成功缩容。

 6. (可选)彻底删除PV标记:如果确定不再使用该PV,可以使用`pvremove`命令删除PV上的LVM标记。例如,`pvremove /dev/sdb1`,这样该PV就可以重新用于其他用途或被删除。

RAID技术

将数据拆分到多块硬盘中进行存储提升容量和IO性能、数据冗余功能

RAID 0:数据条带化

  • 最少需要两块磁盘
  • 数据条带式分布
  • 没有冗余,性能最佳(不存储镜像、校验信息)
  • 不能应用于对数据安全性要求高的场合
  • 个人应用、游戏、影音娱乐

RAID 1:数据镜像化

  • 最少需要2块磁盘
  • 提供数据块冗余
  • 性能和一块硬盘无区别

RAID 5/RAID 6:奇偶校验码

  • 最少3块磁盘可以在损坏一块硬盘的时刻,恢复数据
  • 数据条带形式分布
  • 以奇偶校验作冗余
  • 适合多读少写的情景,是性能与数据冗余最佳的折中方案

RAID 10:RAID 1+RAID 0

  • 最少需要4块磁盘
  • 先按RAID 0分成两组,再分别对两组按RAID 1方式镜像
  • 兼顾冗余(提供镜像存储)和性能(数据条带形分布)
  • 在实际应用中较为常用

软RAID/硬RAID

  1. 安装软件RAID工具

数据处理命令

90.grep:通过关键字过滤查找文件的某行

  1. grep  “关键字”  file
  2. 命令  | grep “关键字”
  3. grep -n 显示行号
  4. #在目录中查找所有包含关键字的文件
  5. grep -r “关键字” 目录
  6. #正则表达式
  7. .   匹配任意一个字符
  8. 【0-9】 匹配任意一个数字
  9. 【a-z】 匹配任意一个小写字母
  10. 【0-9A-Za-z】 匹配数字字母
  11. ^      匹配以xxx开头
  12. $       匹配以xxx结尾
  13. ^$     匹配空行
  14. {1,3} 重复次数,1-3次
  15. *    任意次
  16. ()  分组
  17. \  转义字符
  18. # -E 正则扩展
  19. grep -Ern ‘([0-9]{1,3}\.){3}[0-9]{1,3}’ /etc
  20. # -v 反向匹配
  21. grep -v nologin /etc/passwd
  22. grep -v ‘^$’
  23. #显示非注释和非空白内容
  24. cat /etc/sudoers/grep -Ev “^$^#”   

91.sed:流编辑器,按行编辑、查找、替换文件内容

  1. #文案内容替换
  2. ##显示替换结果,并不真正修改
  3. sed ‘s/old/new/’ file  #每行第一个关键字被修改
  4. sed ‘s/old/new/g’ file  #全局替换
  5. ## -i或 -i.bak  修改原文件
  6. sed -i  ‘s/old/new/g’ file
  7. sed -i.bak  ‘s/old/new/g’ file  #先备份再删除
  8. #文件内容删除
  9. sed -i ‘2d’ file  #删除第二行
  10. sed -i ‘3,10’ file #删除3-10行
  11. sed -i  ‘/Docker/d’ test.txt  #通过关键字查找并删除
  12. ##按行查找
  13. sed -n ‘/关键字/p’ file   #关键字查找
  14. sed -n ‘5p’  file    #查看第n行
  15. ## 在关键字行上方插入新行
  16. sed -i ‘/Redis/i AAAA’ test.txt
  17. ## 在第3行下方添加一行
  18. sed -i ‘3 a BBB’ test.txt

92.awk:一种强大的数据处理语言

  1. awk -F “分隔符”  ‘{print $1}’ file
  2. $0 显示一行内容
  3. $1~$n  显示第n行的内容
  4. NR   表示行数
  5. $NF  表示最后一列,$(NF-1)倒数第二列
  6. Ip a/grep inet/sed -n ‘3p’/awk ‘{print $2}’/awk -F“/” ‘{PRINT $1}’

Linux中的常用符号

  1. *  代表任意字符串,所有文件
  2. cp /abc/*  /tmp/

  1. ?  表示一个字符
  2. cp  a?C.txt
  1. / 表示根目录或目录分隔符
  2. /usr/local/src
  1. \  换行符
  1. $ 获取变量的值
  2. $PATH  可执行命令的路径
  3. $HOME  当前用户的家目录
  4. $PWD  当前目录
  5. $SHELL 当前使用的SHELL
  1. ‘’单引号  字符本身
  2. “”双引号  普通衣服显示自身,变量会显示变量的值
  3. ``反引号  获取命令执行后的结果
  4. $()  获取命令的执行结果
  1. 命令1  &&  命令2  “与运算”  当前一个命令成功执行后,才会执行第二命令
  2. 命令1  //  命令2   “或运输”  当前一个命令失败时,才会执行第二命令
  3. 命令1  ;  命令2   “分隔命令”  按顺序执行所有命令
  4. 命令1  /  命令2   “管道符”  将前一个命令的运行结果交给后一个命令继续执行
  1. #输出重定向
  2. 命令 > file.txt      #文件不存在,会创建文件,文件存在会被覆盖内容
  3. 命令  >>  file.txt    #追加命令的执行结果到文件中,最后一行添加新内容
  4. 标准输出   stdio   显示上输出的正确的内容
  5. 命令 i>> file.txt
  6. 标准错误  stderr
  7. 命令 2>> file.txt
  8. 命令的所有执行结果,包括错误结果
  9. 命令  &>> file.txt
  10. # &  写在命令执行的最后方时,让命令在后台执行
  11. #输入重定向
  12. 命令 < file.txt  #将文件中的内容交由命令执行
  13. 命令 << 键盘输入  #让命令将键盘输入的内容作为文件处理
  14. cat << EOF
  15. 1.配置IP地址
  16. 2.配置yum源
  17. 3.优化系统设置
  18. EOF  
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐