linux入门笔记01

目录

目录

一、linux安全模型

1、用户:

2、用户组:

3、进程

二、用户、用户组管理及权限设置

1、用户管理

1.1、用户的增删改查

1.2、用户密码的增删改查

2、用户组管理

2.1、用户组的增删改查

2.2、用户组密码的增删改查

三、用户、用户组权限管理及特殊权限

1、权限管理

1.1、权限介绍

1.2、权限编辑

1.3、特殊权限①:针对普通用户

1.4、缺省权限umask

1.5、特殊权限②:针对root

2、acl权限

2.1、普通文件的acl权限

2.2、目录文件的acl权限

2.3、mask权限阈值

四、vim文本编辑器

1、命令模式

2、编辑模式(插入模式)

3、末行模式

4、可视化模式

5、异常处理

五、其他文本处理工具

1、find

2、grep

3、printf

4、grep配合正则表达式

六、shell脚本

1、shell变量

七、硬盘

八、分区结构差异

1、MBR

2、GPT

九、分区操作、文件系统、swap操作

1、分区

2、格式化

3、挂载

4、swap操作

十、raid差异

十一、lvm操作


一、linux安全模型

linux安全涉及2个方面,一个是用户、一个是进程;这2项的资源分配过程都如下:

  • Authentication:认证;根据登录信息进行验证
  • Authorization:授权;验证完成根据不同用户授予不同权限
  • Accouting|Audition:审计;

1、用户:

根据用户的uid来作为识别用户的唯一标识;linux中一切皆文件,所以通过设置用户对文件的所拥有的权限来对用户进行管理

管理员:uid: 0

    root

普通用户:    uid: 1-60000

    系统用户:1-999(centos7及以后);1-499(centos7之前);

        对守护进程获取资源进行权限分配(shell都为nologin)

    登录用户:1000-60000(centos7及之后);500-60000(centos7之前)

        给用户进行交互式登录(如pts、tty)

2、用户组:

为了批量对用户进行管理,可以通过设置用户组对文件的所拥有的权限,然后讲用户加入用户组的方式对用户权限进行管理;用户组分为:主要组(primary)和附加组(attached);私有组(private)只在创建用户时未指定主要组时产生;

一个用户必须属于一个主要组(primary group);可也以同时属于多个附加组(attached)

3、进程

进程权限可以通过安全上下文来管理;在默认进程运行中,进程拥有进程运行者的权限;简单理解就是root用户运行的进程将拥有和root同样的权限,这是非常危险的;

安全上下文:

安全上下文对进程运行所正常需要的文件进行标记,来确保进程不会操作到非正常需要的文件,以此来保障系统的安全运行

二、用户、用户组管理及权限设置

1、用户管理

1.1、用户的增删改查

增:useradd

useradd test     #新建用户test ,根据配置文件信息,也会自动配置UID,新建家目录,shell

useradd test  -u 2000  -d /home/test -s /bin/bash      #新建用户test ,同时指定uid为 2000 、家目录/home/test、shell为;/sbin/nologin

rhel新建用户默认shell为/bin/bash

ununtu新建用户默认shell为/bin/sh;需要注意;

有些服务账号为了安全不用做登录账户,rhel需要指定 -s /sbin/nologin;ubuntu需要指定-s /usr/sbin/nologin

/etc/skel/

新建用户会有默认家目录,默认家目录下会有一些配置文件。

这些文件依据/etc/skel/ 下的文件生成,skel下有什么,用户的默认家目录里也会有什么。

可以在useradd -M 使用-M参数再创建user是不会创建家目录,需要手动创建,不会使用/etc/skel/下的默认文件

/etc/default/useradd :新建用户的默认信息配置文件。

如:shell类型、指定SKEL的路径

删:userdel

userdel test #删除用户test,但默认不会删除家目录、邮箱....

userdel -r test #删除用户test及所有信息,会同时删除家目录、邮箱...

改:usermod(可修改某一项或多项)

-u 1000 预设用户的UID为1000 (1000以上为普通用户uid)

-d /home/xx 修改家目录为 /home/xx

-s /bin/bash 修改shell为 /bin/bash

-g groupbane 修改主要组 例:usermod -g group1 test 修改test用户的主要组为group1

-G groupbane 修改附加组(只加入一个附加组) 例:usermod -G group2 test 修改test用户的附加组为group1

-aG groupbane 添加附加组(同时属于多个附加组) 例:usermod -aG group3 test 修改test用户的附加组,添加至组group1

usermod test -u 2000 -d /home/test1 -s /bin/bash -g zu1 -G fushuzu -aG fushuzu2 修改用户test的uid,家目录(修改前要先创建出家目录),shell,主要组或附加组

-M 虽然指定家目录,但是不创建家目录

-m 指定家目录后创建(默认项)

-r 指定为系统账户

查:id

id test 查看用户 test的信息,会显示用户名,uid,gid(主要组),所属组(所有组调用/etc/shadow)

getent passwd test #内查看单个用户test 的信息(共7列,以 :分隔开)

第一列:username用户名

第二列:密码,但已被移除,用x表示

第三列:用户的UID,不能重复

第四列:用户所属组ID,private group ID,任何用户都要有所属组,可以属于一个主要组或者一个或多个附加组

第五列:描述信息,如:邮箱,电话....

第六列:用户的家目录信息

第七列:用户的登录shell

1.2、用户密码的增删改查

  :getent

getent shadow username #显示用户 username的密码信息(以:分割为9列)

例:test:$6$sdfdsfgfdg$............:18263:0:99999:7:::

第一列:用户名称

第二列:用户密码,非明文,加密方式在/etc/login.defs下ENCRYPT_METHOD项;第一个$$间是加密方式,第二个$$间是加密时间;

第三列:密码上次修改时间,是1970-1-1日(unix1969年诞生后的第一个元旦)距今天多少天

第四列:密码允许修改的最小间隔,0表示任意时间,1表示要想下次修改密码至少一天后才能修改,根据第三列时间来计算

第五列:密码多久后失效,密码修改多少天后失效,无法登录,根据第三列时间来计算;但可以根据第7列时间来延长失效时间

第六列:密码失效提示,据第五列时间多少天时,会提示你密码何时失效;如5,密码失效前5天会提示

第七列:密码失效延长时间,密码失效后,还允许几天可用,不会立即失效;

第八列:用户失效日期,直接指定用户失效日期

第九列:保留项

改:passwd

passwd username  #为用户username 设置密码

-d 删除用户密码

-e 重置密码,使第三列变为0,密码立即失效,下次登录必须重新设置密码

-n 5 修改第四列允许修改最小有效间隔时间为5

-x 10 修改第五列密码将在10天后失效

-w 1 修改第六列,密码将在过期前1天提示

-i 2 修改第七列,密码大气候宽限2天

-l 锁定用户,此时只有root能切换到该用户,同时/etd/shadow文件下该用户第二列前出现!!;例:test:!!$6$sdfdsfgfdg$............:18263:0:99999:7:::

-u 解除锁定

--standin passwd --stdin test mima 将用户test 的密码修改为文档mima内的内容 (因密码需要加密,所以不能直接使用文本重定向,但8.0使用过能通过)

echo “123“ |passwd --stdin test 将用户test 的密码修改为123(也可以不带“”)

ubuntu不支持passwd --stdin命令;可以使用passwd "123456\n123456" |passwd usrname

改:chage

用法:chage -d 0 -m 0 -M 99999 -W 2 -I 3 -E 2022-11-11 username

-d 上次修改密码时间,一般不设置或者设置为0,表示下次登陆需修改密码

-m 5 修改第四列允许修改最小有效间隔时间为5

-M 10 修改第五列密码将在10天后失效

-W 1 修改第六列,密码将在过期前1天提示

-I 2 修改第七列,密码大气候W宽限2天

-E 2022-11-11 修改第8列,过期时间为2022-11-11,/etc/shadow下还是显示距离1970-1-1日的天数

2、用户组管理

/etc/group 存放用户组信息(以:分割为4列)

/etc/gshadow 存放用户组密码信息

user-group主要组关联性:一个用户必须属于一个主要组(私有组也是一种主要组),在创建一个用户时,若未将其划入组,则默认创建一个同名的私有组private group;

user-group附加组关联性:对于附加组attached group,一个用户可以同时属于0个,一个或者多个附加组;

2.1、用户组的增删改查

增 :groupadd

groupadd testzu #创建用户组 testzu

groupadd testzu -g 2000 #创建用户组 testzu,同时指定其组ID为2000

删 :groupdel

groupdel testzu #删除用户组 testzu

改: groupmod

-g 3000 #修改组ID为3000 例:groupmod testzu -g 2000

-n new #重命名组名称为new 例:groupmod testzu -n testzu1

查: getent group 组名 (以:分割为4列)

第一列:组名称

第二列:组密码,实际存放在/etc/gshadow

第三列:组ID

第四列:组成员

2.2、用户组密码的增删改查

gpasswd:管理组,

用法:gpasswd[-a user][-d user][-A user,...][-M user1,user2...][-r][-R] groupname

gpasswd groupname #为用户组设置密码

-a user:添加用户user到附加组

-d user:从附加组删除用户user

-r:删除密码

-A user:指定管理员为用户 user

-M user:指定组成员为用户 user和-A的用途差不多

-R:限制用户登入组,只有组中的成员才可以用newgrp加入该组

默认的,一个用户创建的文件属于其主要组,但是当这个用户同时属于其他的附加组时,在该用户shell下使用newgrp groupname,可以临时切换至其附加组groupname,此时创建的为文件属于其附加组;若用户组groupname有密码,在输入newgrp groupname后会提示需要输入组密码,此时即使该用户不在groupname组,不以此组为附加组或主要组,只要输入groupname组密码,创建的文件也属于groupname组;exit 退出临时切换组状态

gpasswd -d username groupname    #从groupname组中删除用户username

三、用户、用户组权限管理及特殊权限

1、权限管理

su - username -c “command" #通过su命令直接让用户 username使用命令command,而不用切换用户

1.1、权限介绍

权限:是指文件/目录的所属用户user,所属的组group(所属用户不一定在所属组内),和其他other 对该文件/目录可进行什么操作的权限,

具体:对文件 r(读)w(写)x(执行)-(无对应权限)

对目录 r(可查看目录下文件属性)w(目录下可增删改文件)x(可进入该目录下)-(无对应权限)

查看:ls -ld

drwxr-x---. 3 root root 4096 Oct 26 04:01

第1个字母:一般为d表示此文件是目录,-表示为文档,l表示为链接,b表示为块设备...

第2-4字母:表示文件所有者User对该文件的权限

第5-7字母:表示文件所属组Group对该文件的权限

第8-10字母:表示其他Other对该文件的权限

1.1.1、普通文件权限

r:表示该文本文件可以被查看、拷贝内容,如:cat,less,more。。。

w:表示该文本文件内容可以被增删改,如vi,>>。。。

x:表示该文本文件可以作为脚本来执行,当一个脚本对其没有x权限时,除了root,其他用户无法执行该脚本

文件的所有者也受权限限制,但是文件所有者即使没有任何权限,也能通过修改文件权限来获取rwx权限;

root用户只受x权限限制:即root没有rx权限也能对文件进行读写,没有x权限就不能执行;但可以自己加x权限;

软连接的权限操作:修改软连接的权限其实是对指向文件进行操作

1.1.2、目录文件权限

r:表示该目录文件内的子文件可以被查看,有哪些子文件。如:ls。。。

w:表示该目录文件内子文件可以被增删,如touch、rm...修改子文件的所有者,所有组,touch,更改子文件权限。。。

x:表示可以进入该目录文件下,如cd;若只有r或w权限无x权限,虽然也能通过绝对路径对目录进行一些操作,如ls -l file;stat file;但是属于异常权限;

对于目录文件只有3种权限设置有意义:--- 无任何权限;r-x 有完整的读权限,rwx 有完整的读写权限(目录的w权限要慎重,普通用户有此权限可删除目录内任意文件);

特殊的:X权限

chmod -R a+x filename #递归为 filename内的所有文件都赋予x执行权限

chmod -R a+X filename #递归为 filename内的所有目录都赋予x执行权限,不对文本文件操作

1.2、权限编辑

chown:修改文件所有者

chown user filename #修改文件filename的所有者为user

chown :group filename #修改文件filenam的所属组为group

chown user:group filename #同时修改文件filenam的所有者为user,所属组为group

chgrp:修改文件所属组

chgrp group filename #修改文件filename 的所属组为group;等同 chown :group filename

1.2.1、字符和10进制

目录权限

0 --- 0

1 --x

2 -w-

3 -wx

4 r--

5 r-x 5

6 rw-

7 rwx 7

即:chmod 777 filename 等同于 chmod u+rwx,g+rwx,o+rwx filename

1.2.2、普通文件权限编辑

chmod 编辑文件权限

u 表示所有者user

g 表示所属组group

o 表示其他other

+r 表示增加权限r

-r 表示删除权限r

=rwx 表示编辑权限为rwx ,所有权限都有

chmod u+w filename #只修改文件 filename的所有者user的权限,增加w权限

chmod u+w,g-w,o=r-x filename #修改文件 filename的所有者user的权限,增加w权限,所属组group,取消w权限,其他other其权限为r-x权限

1.3、特殊权限①:针对普通用户

当文本出现s,S,t,T,这种情况是由于对文件有无x权限导致的显示差异,小写s,t 表示有x权限,S,T 表示没有x权限

①SUID(set uid)4

此权限常用于可执行文本,此文档在被任何非所有者用户执行时,可以临时获取到文档所有者的权限;文件背景为红色

例:root用户的文档此权限,普通用户执行时,可以获取到root权限进行一些操作,

如: /bin/passwd,用户可以使用passwd修改自己的密码 -rwsr-xr-x. 1 root root 33424 Feb 18 2022 /bin/passwd

chmod u+s filename 或 chmod 4755 filename #755为文件原权限;

chmod u-s filename  或 chmod 0755 filename #755为文件原权限;

②SGID(set gid)2

此权限常用于目录文件,任何用户在此目录内创建的文件,其所属组都属 于此目录文件所属组;文件背景为黄色

若用于可执行文本,用户在执行此文件将继承程序所属组的权限,没啥意义,进程将拥有所属组的权限???;那SGID+提升root组权限,是否具有root权限?,不行。用户首先需要x权限才能对sgid文件进行操作,但是可以做到无w权限将文件删除。

chmod g+s filename  或 chmod 2755 filename   # 修改gid,755为文件原权限;

chmod g-s filename  或 chmod 0755 filename    # 修改gid,755为文件原权限;

③sticky 1

此权限用于目录文件,有此权限的目录,任何用户在该目录下创建的文件,只有文件所有者和root可以删除

例:/tmp drwxrwxrwt. 10 root root 4096 Oct 27 20:17 .

chmod o+t filename

chmod o-t filename

1.4、缺省权限umask

缺省情况下,任何用户创建目录文件的最高权限是777,即 rwxrwxrwx;文本文件的最高权限是666,即 rw-rw-rw-(防止文本文件有问题被随意执行);但为了保证文件的安全,使用umask来限制非文件所有者的权限,umask是二进制数字,需要转化为字符,再用默认权限, rwxrwxrwx (目录)和 rw-rw-rw- (文本)减去umask扣除的权限

root用户的umask 二进制是0022 (只看后三位);即:--- -w- -w-;所以默认权限最大:rwx r-x r-x(目录) rw- r-- r--(文本)

普通用户的umask 二进制是0002(只看后三位);即:--- --- -w-;所以默认权限最大:rwx rwx r-x(目录)rw- rw- r--(文本)

umask 查看当前用户的umask

umask 0033 #临时修改当前用户的umask为 --- r-- r--(退出shell失效)

vim /etc/bashrc #通过修改环境变量文件永久修改所有用户的umask,添加:umask 222

vim ~/.bashrc #直接插入umask数值,永久修改当前用户的umash,添加:umask 222

(umask 777;touch a.txt) #()内的命令临时有效,即:先修改umask,再创建文件a.txt;执行完成后umask恢复默认

1.5、特殊权限②:针对root

lsattr filename #查看文件的管理员特殊权限;

chattr +i filename #文件赋予i特殊权限,文件将不能被修改属性、删除;

charrt -i filename #取消文件的i权限;

chattr +a filename #文件赋予a特殊权限,文件可以被查看、追加(>>);不能删除、修改、不能vi编辑;

2、acl权限

2.1、普通文件的acl权限

当一个文件需要对多个用户、用户组设置不同权限时,chmod 命令就不能满足需求了,这时候就需要通过使用acl来对文件设置特殊权限,使用完acl设置权限后在 drwxrwxrwx+ 权限的最后一个字符一个+号,表示有acl权限;其acl权限的优先级从上往下依次降低;

增加acl权限:

setfacl -m u:user:rwx filename #设置用户user对文件filename的acl权限为rwx

setfacl -m g:group:rwx filename #设置group组对文件filename的acl权限为rwx

移除acl权限:

setfacl -x u:user: filename #移除用户user对文件filename的acl权限

setfacl -x g:group: filename #移除group组对文件filename的acl权限

setfacl -d filename #清除文件 filename 的所有acl权限

查看acl权限:

getfacl mima1 #查看文件 mima1的acl权限有哪些设置,如下 ,

# file: mima1 =====> 文件名

# owner: root =====>所有者

# group: root =====>所属组

user::rw- =====>所有者权限 chmod修改

user:hx:rwx =====>acl设置的用户hx的权限

group::r-- =====>所属组权限 chmod修改

group:hanxin:rwx =====>acl设置的组hanxxin的权限

mask::rwx

other::r-- =====>其他的权限 chmod修改

2.2、目录文件的acl权限

目录文件的acl权限和文本文件不一样,目录文件的acl权限的意义是:在该目录下创建的文件继承了该目录的acl权限设置;其acl权限的优先级从上往下依次降低

增加acl权限:

setfacl -m d:u:hx:rw test #设置用户hx对目录文件 test的acl的default继承权限为rw

setfacl -m d:g:hanxix:r test #设置hanxin组对目录文件 test的acl的default继成权限为r

setfacl -m d:u::rw test #设置所有者用户对目录文件 test的acl的default继成权限为rw

setfacl -m d:g::r test #设置所属组对目录文件 test的acl的default继成权限为r

移除acl权限:

setfacl -x d:u:user: filename #移除用户user对目录文件filenameacl的default继成权限

setfacl -x d:g:group: filename #移除group组对目录文件filenameacl的default继成权限

setfacl -d filename #清除目录文件 filename 的所有acl的default继成权限

查看acl权限:

getfacl mima1 #查看目录文件 mima1的acl权限有哪些设置,如下

# file: test =====>文件名

# owner: root =====>所有者

# group: root =====>所属组

user::rwx =====>所有者权限 chmod修改

group::r-x =====>所属组权限 chmod修改

other::r-x =====>其余权限 chmod修改

default:user::rwx =====>所有者的继承权限

default:user:hx:rw- =====>上面添加的用户hx的集成权限

default:group::r-x =====>所属组的集成权限

default:group:hanxin:r-- =====>上面添加的用户组的继承权限

default:mask::rwx =====>缺省mask权限(所有的用户和组的继承权限不能比mask高,特殊的:所有者即使没有任何权限,也能进行所有操作)

default:other::r-x =====>其余的继承权限

修改umask:(修改目录文件acl)

setfacl -m d:mask:rwx filename

2.3、mask权限阈值

mask权限:

文件的mask权限默认为rw-;目录的mask权限默认为rwx;默认下非所有者的权限不能超过mask;mask作为权限阈值;

setfacl -m mask:rwx filename #设置文件的mask权限为rwx

说明

默认权限=mask-umask;

最终权限=mask与acl

四、vim文本编辑器

 文本编辑:VI/VIM编辑器;一次将整个文件加载至内存再处理

vi/vim 有四种模式:命令模式编辑模式末行模式视图模式

vi/vim /etc/xxx   #对/etc/xxx 文档进行编辑;此时先进入命令模式

vim配置文件:

全局:/etc/vimrc

用户:~/.vimrc

配置文件内容及建议设置

  • syntax on #开启高亮
  • set ts=4 #tab转为4 个空格
  • set expandtab #开启tab自动转空格
  • set shiftwidth=4 #设置缩进默认为4 个字符
  • set cul #突出显示光标行,光标行带下划线
  • set ai #开启自动缩进
  • set paste #开启原格式粘贴

多文件打开

vim -o file1 file2 #2个文件按上下分屏同时打开

vim -O file1 file2 #2个文件按左右分屏同时打开

vim -d file1 file2 #直接对比2个文件,左右分屏显示差异;等同vimdiff

ctrl+w 然后按 ←→ 或者↑↓ 切换

:wqall  #保存这2个文件并退出

1、命令模式

此模式下主要是查看文档内容并可进行简单编辑;任何模式下按Esc都可返回到命令模式。

查看文档内容:

⬅⬆⬇➡或者hjkl来进行左上下右的移动光标来查看文本

gg    #光标跳转到首行行首

^   #跳转到光标行行首

$  # 跳转到光标行行尾

9G #光标跳转到第9行行首

G #光标跳转到尾行行首

ZZ #保存修改并退出

ZQ #不保存修改直接退出

0 #跳到光标行行首

^ #跳到光标上非空的第一个字符

$ #跳到光标行行尾

b #当前或前一个单词词首; 5b #依次跳转5个单词

w #跳到下一个单词词首;5w #依次跳转至5个单词

e #跳到下一个单词词尾;5e #依次跳转5个单词

>> #使光标所在行向右缩进;可配合 :set shiftwidth=4 调整缩进距离

<< #使光标所在行向左缩进;可配合 :set shiftwidth=5 调整缩进距离

(  #跳至上一句;句子间以. 或者空格隔开

)  #跳至下一句

{  #跳至上一个段落;段落间以空行隔开

}  #跳至下一个断了;

ctrl+b #向上翻屏

ctrl+f #向下翻屏

替换命令:

r #然后输入字符,替换光标右侧第一个字符;

R #替换光标右侧多个字符,此时底部出现replace;输入多少个替换多少个;

简单编辑操作:

x #剪切光标右侧第一个字符,可以使用p/P粘贴

X #剪切光标左侧第一个字符

xp #将光标右侧2个字符切换位置

~ #光标当前字符切换大小写

J #删除当前行尾的换行符;即将此行和下一行合为一行

D #删除从当前光标到光标所在行尾的全部字符;等同 d$

d^ #删除光标至非空行首

dd 删除光标所在行 5dd 删除光标行及往下共5行内容

P/p 粘贴剪切板上内容,

  • 剪切板上内容若为若干行时: P 粘贴至光标上一行;p 粘贴至光标下一行
  • 剪切板上内容若为若干字符时:P 粘贴至光标所在字符左侧;p 粘贴至光标所在字符右侧

d0  #从光标左侧删除至行首 

d$  #从光标右侧删除至行尾

dH #从光标左侧删除至首行

 dL  #从光标右侧删除至尾行

yy #复制光标行

5yy #复制光标行往下共5行内容  ;配合 P/p 粘贴,此时删除的内容在剪切板上,可以移动光标到某行,P 粘贴至光标上一行;p 粘贴至光标下一行

di"  #光标在" "符号内时,删除""内的字符;其他字符 () <> {} [] `` "" '' 也可以

yi(  #光标在( )符号内时,复制( )内的字符;其他字符 ()<> {} [] `` "" '' 也可以

100iipesc键 #在本行连续插入100次ip

100ihan回车 esc键 #插入100行,每行内容都是han

u #回退,返回上次操作,多次按 u 能多次回退

U #回退,取消本行所有操作

ctr+r #取消回退

切换到其他模式:

O #跳转到到当前光标的上一行行首并进入编辑模式

i  # 跳转到光标左侧并进入编辑模式

a #跳转到光标右侧并进入编辑模式

I #跳转到光标所在行行首并进入编辑模式

A #跳转到光标所在行行尾并进入编辑模式

o #跳转到到当前光标的下一行行首并进入编辑模式

: 或者 /   #进入末行模式

2、编辑模式(插入模式)

此模式下主要是对文档内容进行编辑;

⬅⬆⬇➡l来进行左上下右的移动光标,在光标处对文本内容进行增删

删除键 和 Del来对文档进行向左向右的删除

Enter键进行换行

切换到其他模式:

Esc 进入命令模式

3、末行模式

此模式下主要是对文档内容进行查找、复杂操作或批量编辑

:w  #保存对当前文本的修改,但不退出;

:w filename  #另存为 filename文件;

:r filename  #将文件filename内容复制到当前光标处

:q  #退出当前文本(未对文本进行操作时使用;若已修改,则会提示你未保存修改)

:wq #保存当前修改并退出(等同命令模式下直接ZZ)

:x  #保存,等同 :wq

:X  #对当前文件进行加密(然后输入2次加密密码,加密后不能正常查看)/解密(然后输入1次加密密码)

:q! 强制退出当前文本(已进行修改,但不保存)

:!command  #在不退出当前文本的情况下,执行command命令,输出也会在当前界面底部显示

:r!command #将当前命令command的执行结果复制到光标处

:r! head -n 10 /tmp/aa|tail -n +5 #将/tmp/aa的5-10行追加到本文本内

输入“:”后,按↑↓箭头可以查看末行模式的历史命令

范围界定:

:% #表示全文,相当于1,$;

:$ #表示最后一行;$-1表示倒数第二行;

:1,7 #表示1-7行;

:3,+2 #表示3-5行,

:3;7;9 #表示第3 7 9行

:3,6d #表示删除3-6行,

:3,6y #表示复制3-6行,然后使用p或者P粘贴到光标下一行或上一行

:5,10 w>>/tmp/aa #将本文本的5-10行追加到/tmp/aa

:5,10 w!/tmp/aa #将本文本的5-10行覆盖到/tmp/aa

:/one/  #从当前行向下查找,直到匹配到出现one的所有行

:/one/,/two/  #从当前行向下,匹配到one的首行到匹配到two的首行的所有行

:/one/,$  #从当前行向下,匹配到one的首行到尾行的所有行

界定范围后的操作:

d #删除剪切,可配合p/P粘贴

y #复制,可配合p/P粘贴

w file #将范围内的行另存到指定文件file;输出至 file

r file #在指定位置插入file文件的所有内容;读取 file至

t 5 #将范围内的行复制到第5行后

m 7 #将范围内的行移动到第7行后

查找:

/abc #从光标处往下查找abc,此时按n继续往下查找下一个;按N逆向往上查找上一个

?abc #从光标处往上查找abc,此时按n继续往下查找上一个;按N逆向往下查找下一个

替换:(可以配合范围界定只替换部分区域,)

格式:s/a/b/ s#a#b# s@a@b@

:1,$s/aa/bb/g #从第1行至最后一行开始,将全文aa替换为bb(global或g表示将每行的所有aa都替换,没有global则表示只替换每行的第一个aa)

:5,10s/aa/bb/  #从第5行至10行,将每行的第一个aa替换为bb

:%s/aa/bb/   #全文替换,将每行的第一个aa替换为bb

:/aa/,/cc/s/aa/bb/ #从找到第一个aa到找到第一个cc这些行的范围内,将每行的第一个aa替换为bb

set功能:(若保存在vimrc文件下为默认配置,不需要带:号)

:set number #显示文本的行号

:set nonumber #取消显示行号

:set list #显示行尾标识$符号、table等特殊符号

:set nolist #取消显示特殊符号

:set ignorecase #忽略字符大小写;简写:set ic

:set noic #取消忽略字符大小写

:set autoindent #自动缩进:回车换行时,和上一行行首缩进同样的字符,用于写shell脚本;简写:set ai;当使用set ai,且当前行已经缩进时,再使用粘贴功能时,所粘贴内容每一行都会自动缩进

:set noai #取消自动缩进

:set paste #原格式粘贴;配合set ai使用,将粘贴内容原格式粘贴,不会再自动缩进

:set nopaste #取消原格式粘贴;

:set fileformat=dos #启用或将当前文档格式转化为win格式(类似unix2dos) 简写:set ff=dos

:set fileformat=unix #启用或将当前文档格式转化为unix格式 (类似dos2unix) 简写:set ff=unxi

:syntax on #开启语法高亮,建议开启

:syntax off #关闭语法高亮

:hlsearch #设置搜索内容高亮,所有文档中都高亮; 简写:shl

:nohlsearch #关闭搜索内容高亮;建议开启此项 简写:nohl

:set expandtab #启用tab键用8个空格代替,可配合set ts;简写 :set et

:set noexpandtab # 取消用tab键用空格代替,简写 :set noet

:set tabstop=4 #指定4个空格代替tab(敲tab时转化为个4空格)简写 :set ts=4

:set shifwidth=4 #设置缩进为4个字符;

:set cursorline #光标所在行带下划线突出显示 ;简写:set cul

:set nocursorline #取消光标行突出功能

:set key=1234 #设置加密密码为1234

:set key= #取消加密

:set all #查看所有的set功能

4、可视化模式

此模式下主要是对文档内容进行范围性的选择,然后复制或删除;在命令模式下按v或V或者ctrl+v,3种方式进行不同操作。

v #对文本进行条形选择,按v后左右移动光标选择一行某一部分,然后x删除,y复制;最后p粘贴

V #对文本进行多行选择(同ndd或nyy),按上下移动光标选择某几行,然后x删除,y复制;最后p粘贴

ctrl+v #对一行或多行进行矩形范围选择(如第5-10行的第20-40字节区域),按上下左右移动光标选择,然后x删除,y复制;最后p粘贴

对区域内进行添加:

  • ctrl+v 选择,
  • 按 I(大写的i)在所选区域左侧插入;A在右侧插入
  • 输入内容如#;
  • 然后按esc,#会应用到所选整个区域左侧

5、异常处理

主要是对文档异常问题进行处理(多人编辑同一文本或未正常退出编辑模式等)

vi编辑器原理:将xx文件加载至缓存,生成.xx.swp文件;在.swp文件内进行修改,保存退出时再将.swp文件变化加载至原xx文件。若意外终止vi编辑,则再次编辑时会提示已存在.xx.swp文件。

O #只读原文件

E #强制再次编辑

R #恢复.swp至原文件

D #删除.swp文件

五、其他文本处理工具

1、find

find #文件查找,在指定路径下依照 所有的条件列出选定文件,包括隐藏和所有子文件,默认递归所有路径;默认支持通配符;默认多个条件写在一起是并的关系

-maxdepth 3 #最多显示3级子目录文件;find /etc/ -maxdepth 3 -maxdepth 2

-mixdepth 2 #至少显示2级子目录文件

-depth #先处理文件,再处理目录本身,防止先处理文件夹影响文件;默认先显示目录文件

-name "*.cfg" #查找指定文件,以.cfg结尾的文件

-iname "*.cfg" #查找指定文件,不区分大小写以.cfg结尾的文件

-type p #查找文件类型为管道文件;f 普通文本、s 套接字文件、b 块设备、c 字符文件

-regex "pattern" #用正则表达式方式匹配整个路径pattern,而不是文件名,如".*\.conf"

-user root #查找属于用户root的文件

-nouser #查找用户被删除的用户文件

-empty #空文件或目录

-not 或 ! #表示非; ! -type d 表示非目录文件

-a #默认,可省略,多个条件且关系; -type d -a -type p

-o #多个条件为或关系 ; -type d -o -type p

非a且非b = 非(a或b)==> !\( -type d -o -type p \) =非目录、非管道文件, ( 右侧要留空格

非a或非b = 非(a且b)==> !\( -type d -a -type p \) =非目录 或 非管道文件,只要不是同时属于目录和管道的文件就行

-prune #排除,排除左边的条件; -path '/etc/serurity ' -a -prune; -a可以省略

-size 4k #以大小为过滤标准,4k表示3-4k,不含3k,含4k;+4k表示大于4k;-4k表示小于等于4-1k;

-atime 5 #默认以天为单位,24小时内为1天;5表示等于5到5+1天;+5表示大于5+1天;-1表示0-1天之内

-mtime

-ctime

-amin 5 #表示一分钟为单位;查找access时间;5表示等于5-5+1分钟,不含第5+1分钟;+5表示大于5+1分钟,-4表示小于4分钟

-mmin

-cmin

-perm 755    #指定权限755;

/222 :u g o 只要有一个满足x权限就行;-222 :u g o都要有x权限;-匹配的范围少

-006 :o有r且w权限 /006: o有r或w权限

-ls #找到文件后执行”ls file“

-fls file #查找到文件后执行“-ls > file

-exec ls {} \; #对查找到的文件执行 ls命令

示例:

find / -regex '/.*/.*/.*/.*\.conf' #查找/下的路径下目录级别为4级的以.conf结尾的文件

find /etc -path '/etc/serurity ' -a -prune #先查找出/etc下的所有文件,再排除/etc/serurity之后的文件

find /etc -path '/etc/security' -a -prune -o -name "*.conf" #查找/etc下,除security目录外的这些文件中.conf以结尾

find /etc \( -path "/etc/security" -o -path "/etc/systemd" -o -path "/etc/dbus-1" \) -a -prune -o -name "*.conf"

find /etc/ ! \( -path /etc/security* -o -path /etc/sustemd* \) -o -name '*.conf'

find /etc/ -name xx1 #在/etc/ 下查找文件名为xx1的文件位置

find / -size +300M #在/中查找大小大于300M大小的文件

find / -size +100 -size -300M #在/中查找大于100小于300M的文件

find / -user aaa #在/中查找所有者为aaa的文件

find /etc/ -user test -exec cp -arf {} /tmp/ \; #在/etc/下查找属于用户test的文件,将这些文件在不改变文件属性的情况下复制到/tmp/下

find /etc/ -user test -delete #直接删除找到的文件

find /etc/ -user test -fls filename #将找到的文件长格式信息保存到指定文件filename 中

find -type f name '*.txt' -print0 |xarge -n1 rm #以null字符作为find查找到的文件名分隔符,再将其删除;用于文件名中出现空格的情况

seq 60|xargs -i -P10 wget -P /data http://10.0.0.1/{}.html #并发执行10个进程,将60个下载点的编号以10为进程书来下载;

并发下载bilibili视频实例:

yum install python3-pip -y

pip3 install you-get

seq 60 | xargs -i -P3 you-get https://www.bilibili.com/video/BV14K411W11W7UF?p={}

2、grep

grep a /tmp/abc 逐行在内存引入/tmp/abc文本过滤 每行中含a的行,输出含a的行;也可使用 | 配合其他命令处理文档;

-i a 不区分大小写过滤a或者A

-v a 反向过滤不含a的行

-m 5 #只显示前5行

-n 过滤并显示行号

-e xx1 -e xx1 #多个-e一起使用,满足一个-e的内容即可

-w xxx #只匹配单独的单词xxx,而不显示其他包含xxx的单词,如xxxb不显示;

-A 5 过滤出内容行显示出后5行或个

-B 5 过滤出内容行显示前5行或个

-C 5 #过滤出内容行并显示前后各5 行

-E 使用正则表达式高级功能时使用,如?其余符号如^ $ . *可以不添加-E也能识别;等同egrep

-c xxx 统计关键字xxx出现次数

-o xxx #只显示字符 xxx,本行别的字符不显示;只要xxx存在,只显示xxx

-q xx #不显示查找到的内容,配合$?使用

-f file1 file2 #以file1的内容为条件来逐行过滤file2

-r #递归处理目录内内容,但不处理软连接

-R #递归并处理软连接指向的内容

示例:

grep -c processor /proc/cpuinfo #显示当前主机cpu核数

grep -v "#" /etc/bashrc #不显示文件 /etc/bashrc中含#的行;

grep -r ansible.cfg /etc/* #递归在/etc/所有文件中搜索ansible配置文件

3、printf

4、grep配合正则表达式

正则表达式:(匹配文本内容中的字符串)

通用技术,其他的编程语言的win系统也支持,并非linux特有的;分为基本正则表达式和扩展正则表达式

一般正则表达式需要用 "正则表达式 " 或 ' 正则表达式 ' ;

基本正则表达式在出现() {} | 这3个符号时使用 \ 进行转义

扩展的正则表达式 grep -E或egrep 来使用() {} | 这3个符号时可以省略“\”,不需要转义;

基本的正则表达式:

元字符:

* . ^ $ ? 通常配合grep来匹配文本内某些行内容;

^ $ #表示开头和结尾

. #任意一个字符、文字(也可以代表空,除了\n换行符);若放在[ ]内,仅表示符号. 无其他意义;

* #上一个字符连续重复任意次(0到无数次);"goo*gle"

.* #表示任意长度、任意字符; "goo.*gle"

n\? #上一个字符n出现0次或1次; "goo\?gle" ; 扩展的正则表达式 匹配次数可省略“\”;

n\+ #上一个字符n至少出现1次及以上; "goo\+gle" ; 扩展的正则表达式匹配次数可 省略“\”;

n\{8\} #上一个字符n出现8次; "goo\{8\}gle"; 扩展的正则表达式匹配次数可 省略“\”;

n\{1,3\} #上一个字符n出现1到3次; 扩展的正则表达式匹配次数可 省略“\”;

"[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\" #表示IPv4地址; 扩展的正则表达式 匹配次数可省略“\”;

[#$] #表示普通字符#$中的任意一个,[]中的元字符只表示普通字符

字母、数字、下划线都属于单词;其余字符都能分隔单词

^n 以n这个字符开头的行

n$ 以n这个字符结束的行

^$ 表示空行

^[[:blank:]]$ #表示空白行

\xxx 或 等同 \bxxx #表示以xxx开头的单词;"\

xxx\> 或 等同 xxx\b #表示以xxx结尾的单词; "google\>" ;

\xxx\> #表示单词xxx; "\\>" ; 等同 \bxxx\b

表达式1\|表达式2 # 表示表达式间的或关系,字符也可以;即a或者b "^#\|^$" ;扩展的正则表达式 省略“\”;

(abc) #单词abc作为一个整体,需要配合其他内容使用;

"(abc)\{2\}(ef)" #即 abc重复2次,即abcabcef;

反向引用:表达式内出现一个或多个()时;可以用\0,\1,\2...依次代表之前的 第1个 第2个 ...()内的内容;

如:grep -E "(ha{3}) hello \1" 即:grep “haaa hello haaa”

[xy] #[]内的任意一个字符

[^xy] #除了[]里的任意单个字符

[:lower:] #任意一个小写字母,使用示例:[[:lower:]]

[:upper:] #任意一个大写字母

[:alpha:] #任意一个大写或小写字母

[:alnum:] #任意一个数字

[:blank:] #空白字符

[:space:] #包括空格、制表符(水平和垂直)、换行符、回车...

[:cntrl:] #不可打印的控制字符(退格、删除、警铃....)

[:difit:] #十进制数字

[:xdifit:] #十六进制数字

[:print:] #可打印字符

[:graph:] #可打印的非空白字符

[:punct:] #标点符号

不常用:

\s #匹配任何非空白字符,包括空格、制表符、换页符等。等价[\f\r\t\v]。注意unicode正则表达式会匹配全角空格符

\S #匹配任何非空白字符。等价[^\f\t\t\v]

\w #匹配一个字母、数字、下划线、汉字、其他国家的文字字符。等价[_p:alnum:]字符]

\W #匹配一个非字母、数字、下划线、汉字、其他国家的文字字符。等价[^_[:alnum:]字符]

s/(a)(b)(c)/\2/ #后向引用;配合sed查找到abc,然后只显示第2个()内的内容,即b

^[0-9]*$ 数字

^\d{n}$ n位的数字

^\d{n,}$ 至少n位的数字

^\d{m,n}$ m-n位的数字

^(0|[1-9][0-9]*)$ 零和非零开头的数字

示例:

grep -v '^#\|#' /etc/bashrc #表示先过滤文件/etc/bashrc中的注释行和含#的行;再反向选择输出其余的行

grep -v '^#\|^$' /etc/bashrc #表示先过滤文件/etc/bashrc中的注释行和空行;再反向选择输出其余的行

grep '(ab)\{3}' /etc/bashrc #表示过滤文件 /etc/bashrc中的含ababab的行

六、shell脚本

1、shell变量

linux系统内置变量:PS1,PATH,SHELL,UID,$$,HOSTNAME,$?,HISTSIZE,PPID,BASHPID

$? #系统自带变量,表示上一个命令返回值0-255;0表示上条命令执行成功,1-255都表示失败;用来判断上条命令执行结果;

$$ #将始终返回与脚本关联的第一个进程 ID

$BASHPID #将显示当前 bash 的进程 ID

$PS1 #表示提示窗口 [root@Rocky8 ~]#

$PPID #表示当前进程的父进程ID

shell中指定$?变量值:

exit 200 #直接在shell中一个单独行添加行;指定状态变量$?的返回结果是200,并且后续命令不在执行,直接退出shell;

变量数据类型(shell不区分):

字符:

数值:整型、浮点型,bash不支持浮点数

变量命名要求:

区分大小写;

不要使用程序中的保留字和内置变量;如:if,for;

只能使用数字、字母及下划线(单词的组成);且不支持“-”;

变量命名习惯:

见名知意,以英文单词命名,体现出实际作用;

变量名大写;

局部变量小写

函数名小写;

大驼峰StudentFirstName:由多个单词组成,每个单词首字母大写,其余小写;

小驼峰studentFirstName:由多个单词组成,从第二个单词开始首字母大写,其余小写;

下划线:student_name

变量的定义和引用:

创建普通变量: NAME=12 ; NAME="12" ;USER=`whoami` ;ALL=$NAME$USER ; ALL="$NAME$USER"

调用变量:echo $NAME ;echo ${NAME} ;

取消普通变量:unset NAME1 NAME2 ... ;

临时变量只能在当前bash下使用,退出或切换bash临时变量失效(查看当前bash编号:echo $BASHPID);

在环境变量配置文件:/etc/profile /etc/profile.d/ ~/.bash_profile ; /etc/bashrc ~/.bashrc 下的变量不会随shell退出而失效

变量的内容:

可以使普通字符;可以用"字符"包围起来

也可以是其他变量;注意,2个变量名中间间隔符不能是_

也可以是命令执行结果;需要用 `command` 格式包围起来

变量分类:

普通变量只能在当期shell下使用;例:()内的临时shell中的变量执行完就失效;

环境变量可以在当前shell的所有子bash下使用;

本地变量只能在当前shell进程中某段代码片段中(通常指函数)生效

环境变量位置:

/etc/profile #对所有用户生效

/etc/profile.d/*.sh #对所有用户生效

/etc/bashrc #对所有用户生效

~/.bash_profile #对特定用户生效

~/.bashrc #对特定用户生效

profile :放一些定义的环境变量;运行的命令或脚本

bashrc :别名和函数;定义本地变量

临时创建环境变量:

export NAME=12

declare -x NAME=12

查看环境变量:

env

declare -x

export

printenv

只读变量(常量):如UID

查看只读变量:readonly -p ;declare -r

只能创建和删除,不能再次编辑;退出bash后失效;

创建只读变量: readonly NAME=12 ; declare -r NAME=12 ;

位置变量:

$1 $2 $3....${10}...${n} #依次表示执行脚本时后面跟的第1个,第2,第3,第10。。。第n个参数

$0 #表示脚本名称

$# #表示输入的位置变量数量

$* #表示所有参数;只有被" "引用时才和$@ 有差异,此时所有参数是一个整体的字符串;

$@ #表示所有参数;只有被" "引用时才和$* 有差异,此时所有参数都是独立的字符串;

set -- #清空所有位置变量

2、shell脚本:鸡兔同笼

30鸡和兔的头,80鸡和兔的脚,分别有几只鸡,几只兔? 

[root@rocky ~]# ./chicken_rubbit.sh 30 80
the number of chicken: 10
the number of rubbit: 20

3、shell脚本:for循环

 

七、硬盘

硬盘存储术语 head:磁头 track:磁道 cylinder: 柱面; sector: 扇区,512bytes

八、分区结构差异

1、MBR

MBR分区:

0磁道0扇区512bytes:boot loader-444bytes;分区表-64bytes,每个分区需要16bytes来标识;结束标识:0x55 0xAA占2bytes。3个主分区+扩展分区(扩展分区内可分为多个逻辑分区);单分区最大2TB

GPT分区:

2、GPT

UEFI硬件支持GPT;可分为1024主分区+扩展分区;单分区最大18EB

支持128个分区,

九、分区操作、文件系统、swap操作

1、分区

分区的扇区soctor必须是连续的

查看:

fdisk -l #查看所有分区情况;如disklabel type、

fdisk -l /dev/sda #可查看某个分区或硬盘的使用情况

hexdump -Cn 512 /dev/sda #查看物理盘sda的前512Byte

备份mbr分区表:dd if=/dev/sda of=/back/mbr bs=1 count=64 skip=446 #备份sda的mbr至/back/mbr,跳过源文件of的前446B,每次执行1B,执行64次;seek是跳过目标文件of的bs次数

MBR分区:

(若分区数量大于4,可以先创建3个主分区,再创建一个扩展分区,再在扩展分区内分逻辑分区;或直接全分为扩展分区,再分逻辑分区)

fdisk /dev/sda txt &>>/dev/nill #按照txt内容自动分区,输出结果不在终端显示 (txt内为:n p +20G w q 回车 。。。)

fdisk /dev/sda #手动分区

p #查看当前分区

n #创建分区(前0-2047扇区共1MB保留,用来保证后续可以转换为GPT分区格式;创建分区所使用的扇区必须连续的)

p #创建主分区(最多只能创建4个主分区;若分区要4个,需要3个主分区,第四个为扩展分区,扩展分区内创建逻辑分区)

e #创建扩展分区(将除了前3个主分区外的所有空间都分给扩展分区,然后才能再p创建逻辑分区;也可先创建extend扩展分区,然后将全部创建逻辑分区。逻辑分区分区号从5开始;而且逻辑分区如6被删除,sdc7会变成sdc6,后面的都会前移,主分区不会变)

t #更改分区类型;8e 为lvm;82 为swap...

d #删除分区;

w #保存修改,立即生效;修改完要保存

q #退出不保存

GPT分区:

操作命令为gdisk /dev/sdb ;其余内容差不多;w保存后生效

parted高级分区:(实时生效)

1>格式: parted (磁盘)mkpart (分区格式gpt/msdos)

parted /dev/sdb mklabel gpt #/dev/sdb进行分区,分区格式为gpt 。也可按需要改为msdos(mbr)

2>格式: parted (磁盘)mkpart (分区类型一般都选primary) (开始) (结束)

parted /dev/sdb mkpart primary 0% 100% #创建分区为主分区,大小为全部。

或 parted /dev/sdb mkpart primary 1 100% # 默认单位为M,也可分多个区,大小可以用百分比,也可以用G、T调整。(第0M保留分区信息)

删除分区:

parted /dev/sdb rm 1 #删除分区1

查看:

parted -l #列出分区信息;也能看到mbr分区,但是label显示unknow;

刷新:

cat /proc/partitions #查看内核是否已识别新的分区

partprobe -s #重新设置内存中的内核分区表版本(一般是系统盘分区后,需要刷新分区表)

2、格式化

linux分区格式化后就会生成文件系统,格式化过程相当于对分区创建文件系统。会预留5%给root使用。

格式化过程:

立即划分一部分空间作为idode空间(元数据),若inode被使用完,即使BLOCK空间有剩余也不能再使用

将剩下的空间划分为block,每个block包含多个扇区,管理粒度更大,读取次数降低、效率提高。但block太大会造成空间浪费

mkfs.ext4 /dev/sda1 #将sda1分区格式化为ext4格式

-b 4094 #指定block块大小4094,即4M

mkfs.xfs /dev/sda2 #将sda2分区格式化为xfs格式

- i 8192 #每8KB空间分配一个inode(参考,自己分区xfs文件系统按照2k一个idnode)

-N 3000000 #当前分区一共创建3000000个indoe

此时,格式化完成的分区会生成唯一的SSID;block大小和inode数量,这些格式化完成后就不能再 需改

blkid /dev/sda1 #查看分区的UUID、TYPE、等信息

查看ext4文件系统信息

tune2fs -l /dev/sda1 #查看ext4文件系统分区 /dev/sda1的详细参数信息

dumpe2fs /dev/sda1 #查看ext4文件系统分区分组(将文件系统分为若干个block group,每个group组都有super block、GDT 、block bitmap、indoe bitmap、inode table、date blocks(真实的数据块))

如:

du #只能看到文件的date blocks大小,删除文件后,立即释放空间

df #能看到date blocks、super blick、等的占用空间;删除文件后,若文件正在使用,不会立即释放空间

查看xfs文件系统信息

xfs_info /dev/sda2 #查看xfs文件系统/dev/sda2的参数信息

文件系统修复

先解除挂载,再修复文件系统,只能修复文件系统

e2fsck /dev/sda1 #修复ext系列文件系统 /dev/sda1

-y #自动回答为yes

-f #强制修复

-p #自动进行安全的修复文件系统问题

xfs_repair

-f #修复文件而非设备

-n #只检查

-d #允许修复只读的挂载设备,在单用户下修复/根时使用,然后立即reboot

3、挂载

格式化后的文件系统需要挂载到系统目录下才能进行读写使用。

同一个设备可以同时挂在到多个文件;

同一个挂载点同时只能有一个设备被挂载;

临时挂载,重启后失效:

mount -t 文件系统 分区路径 挂载点路径 #文件系统若是linux原生文件系统,在不需要-t 指定;

mount /dev/sda1 /mnt #临时将sda1挂载到mnt目录

unount /mnt #取消分区挂载,或挂载点

注意:正在使用的文件系统是不能解除挂载的

fuser -v /date/mysql #查看当前哪个用户、进程在使用挂载点/date/mysql

fuser -km /date/mysql #踢掉对文件挂载点date/mysql的所有访问,包括自己

mount #列出所有挂载信息

查看:

df -h #查看挂载点空间信息,大小转换率1024

df -H #查看挂载点空间信息,大小转换率1000

df -i #查看挂载点inode信息,iNode使用情况

永久挂载:

将挂载信息写入/etc/fatab,建议使用UUID,盘符可能会飘,其内容如下:

/dev/sda1 / xfs defaults 0 0

第一列:文件系统所在分区路径(也可以是UUID)

第二列:文件系统的挂载点

第三列:文件系统的类型,如xfs、ext4 。。。

第四列:挂载参数,默认用defaults;defaults,_netdev表示在网络启动后挂载,在关闭网络前卸载,用于网络存储、vdo.....;ro 只读,

第五列:转储频率;0 不做分区备份(常用) ;1 每天转储;2 隔天转储

第六列:fsck检查的文件系统顺序;0 不自检(常用);1 优先自检,一般rootfs使用;2 非rootfs使用;

ls /dev/disk/by-uuid/ -l # 查看UUID:

修改完/etc/fstab后,使用下面命令:

mount -a #将fstab中未挂载的文件挂载,保证fstab立即生效

光盘:/dev/cr0; 光盘也需要挂载才能访问

u盘:lsblk #查看新增的U盘名称,再挂载

4、swap操作

swap:使用硬盘空间模拟内存,当内存空间不足时当做内存使用。swap可以直接类似lvm灵活扩容

/proc/sys/vm/swappiness #物理内存剩余空间量为%多少时,开始使用swap;为0则物理内存使用完再用swap

free -h #查看内存使用情况

fisk分区-swap格式化-swapon挂载

格式化:

mkswap /dev/sdb1 #将分区后的分区格式化为swap格式

挂载:

将挂载信息输入/etc/fstab,

格式:/dev/mapper/xxx none swap defaults 0 0

然后执行下面命令挂载或者重启

swapon -a #根据fstab内的所有swap分区内容挂载

取消swap,先修改/etc/fstab文件,或在swap挂在信息前加#,在按下面命令执行

swap -s #查看哪个设备作为swap使用

swapoff -a #根据fstab内的所有swap分区内容卸载

swapon /dev/sdb1 #将swap挂载

将文件作为swap:

dd if=/dev/zero of= /swapfile bs=1M count=1024

mkswap /swapfile

chmod 600 /swapfile

vim /fstab ;使用名称挂载 /swapfile none swap defaults 0 0

十、raid差异

RAID0:读写性能都提高,性能最好;读写时都进行并行处理,但没有冗余能力;数据分成若干份chunk分布到不同盘;

raid1:读性能提高写;写不变;数据有镜像的2份,能防止硬盘损坏造成的损失;有效空间为50%;

raid5:读写性能提升;通过将数据分为若干份和校验,数据能恢复;只能允许一块盘故障;有效空间(n-1)/n;RAID5校验数据均匀分布在n块盘上;raid4校验数据集中在一块盘上,这块盘故障率很高,已被淘汰

raid10:读写性能提升;2块盘先做raid1,再将2个raid1做成raid0;安全性比raid10高;有效空间为50%;

raid01:读写性能提升;2块盘先做raid0,再将2个raid1做成raid1;安全性比raid10低;有效空间为50%;

JBOD:将多块盘看成一块盘使用,没有冗余型,没有性能提升

十一、lvm操作

顺序:PV-VG-LV

pv

pvs #简单查看所有pv

pvdisplay /dev/sda #显示pv中某个物理设备信息

创建

pvcreate /dev/sda #将硬盘sda创建为物理卷(硬盘或分区都可;但分区需要修改分区ID和TYPE类型,fdisk 中使用t修改)

删除

pvremove /dev/sda #从pv中删除硬盘sda

vg

vgs #简单查看vg

vgdisplay #查看vg详细信息

创建

vgcreate vg1 /dev/sda -s 8M #将分区或硬盘加入vg1,此时在/dev/下生成vg1,同时指定pe大小为8M(硬盘或者分区必须属于pv;否则os会自动将分区和硬盘加入pv)

扩容

vgextend vg2 /dev/sdb #扩容sdb硬盘至vg2(可以使硬盘或者分区;分区要先修改ID和TYPE ,fdisk命令t修改)

删除

vgremove vg1 #删除vg1;但必须先删除vg1上的lv逻辑卷

缩容

vgreduce vg2 /dev/sdb #缩容vg2,sdb硬盘移出vf2(慎重)

lv

lvs #简单查看lvm

lvdisplay #查看lvm详细信息

创建

lvcreate -n lv-1 -L 2G vg2 #使用vg2创建lv-1,大小2G;使用的vg是vg2;

-l 45 #是指定空间大小为使用45个PE块;PE数量*PE大小=lvm大小

mkfs.xfs /dev/xx/lv-1 #格式化lv1为xfs格式再挂载就可以使用了,使用绝对路径。lvs查看lvm卷名字看绝对路径

扩容

lvextend /dev/vg2/lv1 -L +1G #扩容lv1逻辑卷大小扩容为1G;此时lsblk 查看块大小能看到,但df -h查看文件系统大小未更新

lvextend -r -l +100%free lvname #扩容lv1逻辑卷为vg所有空间,并自动更新文件系统大小,不需要使用下面的更新命令

更新文件系统

resize2fs /dev/vg2/lv01 #ext4文件系统刷新/dev/vg2/lv01,新扩容的1G就可以识别到;

xfs_growfs /mountpoint/xxx #xfs文件系统只能更新挂载点,才能识别到xfs文件系统的扩容空间

删除(先取消挂载)

lvremove /dev/vg2/lv1 #删除lv1,必须用绝对路径

缩容(移除硬盘)

lvreduce -L 8G -r /dev/xxx/lv01 #缩容lvm至8G,并更新文件系统;只支持ext系列,不支持xfs缩容,有大风险

lvm卷硬盘更换

首先要保障lvm剩余可用空间大小>需要更换硬盘sdc;不足需要先扩容lvm

pvmove /dev/sdc #将sdc盘的数据移动到lvm中的其余盘上

vgreduce vg1 /dev/sdc #先将sdc从对应的vg中移除

pvremove /dev/sdc #再从pv中移除sdc盘

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值