定义:BashShell是一个命令解释器,主要负责用户程序与内核进行交互操作的一种接口,将用户输入的命令翻译给内核,由内核驱动硬件,最终将处理后的结果输出至BashShell屏幕[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kCo3xYPe-1690465877801)(shell.assets/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MDY2ODM3NA==,size_16,color_FFFFFF,t_70.png)]
定义:BashShell是一个命令解释器,主要负责用户程序与内核进行交互操作的一种接口,将用户输入的命令翻译给内核,由内核驱动硬件,最终将处理后的结果输出至BashShell屏幕[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YubvMjnI-1690465877802)(shell.assets/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MDY2ODM3NA==,size_16,color_FFFFFF,t_70.png)]
-
ctrl+a:光标移动到行首
-
ctrl+e:光标移动到行尾
-
ctlr+l:清屏(对应的命令clear)
-
ctrl+c:结束当前的任务;非常常用
-
ctrl+k:删除光标以后的所有内容
-
ctrl+u:删除光标以前的所有内容
-
ctrl+w:按照单词进行删除,删除光标以前的内容
-
ctrl+d:退出当前的bash会话,并不影响服务器运行的后台程序
-
ctrl+左右:按照单词进行跳跃
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AF8e0CxA-1690465877803)(shell.assets/1.gif)]
- -N: 显示历史记录中最近的N个记录;
- -c:清空当前历史命令;
- -a:将历史命令缓冲区中命令写入历史命令文件中;
- -r:将历史命令文件中的命令读入当前历史命令缓冲区;
- -w:将当前历史命令缓冲区命令写入历史命令文件中;
- -d :删除历史记录中第offset个命令
- -n :读取指定文件
对历史记录操作不会影响历史文件,历史记录存在历史文件里。如果历史文件改变,那么记录也会改变。
注: 如想查询某个用户在系统上执行了什么命令,可以使用root用户身份登录系统,检查该用户目录下的文件,该文件记录了用户所使用的命令和历史信息。
**注:**alias的效力仅于该次登入的操作。若要每次登入是即自动设好别名,可在.bashrc中设定指令的别名。
- unalias :删除别名
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r0bd9smb-1690465877803)(shell.assets/d0c50-linux2bfile2bsystem2bhierarchy.jpg)]
系统启动必须:
-
**/boot:**存放的启动Linux 时使用的内核文件,包括连接文件以及镜像文件。
-
/etc:存放所有的系统需要的配置文件和**子目录列表,**更改目录下的文件可能会导致系统不能启动。
-
/lib:存放基本代码库(比如c++库),其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。
-
/sys: 这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息:针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中
指令集合:
-
**/bin:**存放着最常用的程序和指令
-
**/sbin:**只有系统管理员能使用的程序和指令。
外部文件管理:
-
**/dev :**Device(设备)的缩写, 存放的是Linux的外部设备。**注意:**在Linux中访问设备和访问文件的方式是相同的。
-
/media:类windows的**其他设备,**例如U盘、光驱等等,识别后linux会把设备放到这个目录下。
-
/mnt:临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了。
临时文件:
-
/run:是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。
-
/lost+found:一般情况下为空的,系统非法关机后,这里就存放一些文件。
-
/tmp:这个目录是用来存放一些临时文件的。
账户:
-
/root:系统管理员的用户主目录。
-
/home:用户的主目录,以用户的账号命名的。
-
/usr:用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录。
-
**/usr/bin:**系统用户使用的应用程序与指令。
-
**/usr/sbin:**超级用户使用的比较高级的管理程序和系统守护程序。
-
**/usr/src:**内核源代码默认的放置目录。
运行过程中要用:
-
/var:存放经常修改的数据,比如程序运行的日志文件(/var/log 目录下)。
-
/proc:管理**内存空间!**虚拟的目录,是系统内存的映射,我们可以直接访问这个目录来,获取系统信息。这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件来做修改。
扩展用的:
-
/opt:默认是空的,我们安装额外软件可以放在这个里面。
-
/srv:存放服务启动后需要提取的数据**(不用服务器就是空)**
FQ:/abc/test 和 abc/test 是一样的吗?
- 如果现在在根目录下两者一样,因为/代表根目录
- 如果现在在别的目录前者就是根目录下的abc,而后者是现在目录下的abc
**创建文件:**touch
- 创建多个有规律的文件 touch {A…Z}
**创建目录:**mkdir
- -p:递归创建
- 创建多个有规律的目录 mkdir {A…Z}
**删除文件或者目录:**rm
- -r:递归删除子目录
**复制文件或者目录:**cp
-
-r:递归
-
如果有重复文件,cp是原生指令不会提示覆盖,而cp别名为cp -i会提示是否覆盖
-
一次拷贝多个文件目录,最后一个如果是目录必须存在
-
-p:保持复制的文件与源文件一样的属性,所属组一样
**移动文件或者目录:**mv
- cat:-n 带行号查看
- less,more:分页查看
- ctrl+f:下一页
- ctrl+b:上一页
- more:有百分比显示
- head,tail:
- tail -f(tailf): 实时追踪尾部变化
- which:查找命令绝对类路径
- whereis:
- -b:查看二进制文件
-
wget,curl:从网络下载资源
-
wget -O:下载文件并重命名
-
curl -o:下载文件并重命名
-
-
sz:Linux下载到Windows。不能超过4g,不支持断点续传,不能下载文件夹。
-
rz:Windows上传到Linux。
-
sort:
- -t:以哪个字符分割,默认为空格
- -k:分割后第几列
- m.n:第几列.第几个字符
- -n:按照number方式排列
- -r:反转
-
uniq:去重复
- -c:统计出现次数
-
wc:统计行数
- -l:统计行数
-
基本正则表达式BRE集合
- :转义字符,匹配特殊含义的字符,还原本意
- :用于模式的最左侧。如yu,匹配以yu单词开头的行
- ,匹配以yu单词结尾的行
- ^前面什么也没写,也表示空
- .:匹配任意一个且只有一个字符,不能匹配空行。如.ab,匹配xab字符
- *:匹配一个字符(连续出现)0次或1次以上,重复0次代表空,即匹配所有内容,如a* 表示匹配a,0次或多次
- .*:匹配任意长度的任意字符
- ^.*:匹配任意多个字符开头的内容
- .*$:匹配任意多个字符结尾的内容
- [abc]:匹配[]集合内的任意一个字符,a或b或c,可以写成[a-c]
- [a-z]匹配所有小写单个字母
- [A-Z]匹配所有单个大写字母
- [a-zA-Z]匹配所有的单个大小写字母
- [0-9]匹配所有单个数字
- [a-zA-Zo-9]匹配所有数字和字母
- [abc]:匹配除了后面的任意字符,a或b或c,^表示对[abc]的取反
-
扩展正则表达式ERE集合:必须用grep -E才能生效
- +:匹配前一个字符1次或多次
- [😕]+:匹配括号内的":“或者”/"字符1次或多次 [ab]+
- ?:匹配前一个字符0次或1次
- |:表示或者,同时过滤多个字符串
- ():分组过滤,被括起来的内容表示一个整体
- a{n,m}:匹配前一个字符最少n次,最多m次
- a{n,} :匹配前一个字符最少n次
- a{n}:匹配前一个字符正好n次
- a{,m}:匹配前一个字符最多m次
-
grep:过滤行
-
例子
-
grep -v “ftp” pass:匹配除了包含ftp的内容,其他全部打印
-
grep -n “.” /var/log/secure:显示行号
-
grep -n -A 2 “Failed” /var/log/secure:匹配/var/log/secure文件中Failed字符串打印本行以及它的下2行
-
grep -n -B 2 “Failed” /var/log/secure:匹配/var/log/secure文件中Failed字符串,并打印本行以及它的上2行
-
grep -n -C 2 “Failed” /var/log/secure:匹配/var/log/secure文件中Failed字符串,并打印本行以及它的上下2行
-
-
-
sed:替换字符串
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8fHO1o1a-1690465877804)(shell.assets/webp.webp)]
-
sed匹配范围
-
空地址:全文处理
-
单地址:指定文件某一行
-
/pattern/:被模式匹配到的那一行
-
范围区间:例如:10,20表示十到二十行;10,+5第10行向下5行
-
步长:例如,12,表示1、3、5、7、9行;22,表示2、4、6、8、10
-
-
内置命令字符:sed的内置命令字符用来对文件进行不同的操作功能,如对文件增删改查
-
a:append,对文本追加,在指定行后面添加一行/多行文本
-
d:delete,删除匹配行
-
i:insert,表示插入文本,在指定行前添加一行/多行文本
-
p:print,打印匹配行的内容,通常p与-n一起用
-
s/正则/替换内容/g:匹配正则内容,然后替换内容(支持正则),结尾g代表全局匹配
- s///g,s###g,s@@@g一样
-
-
-
awk:查找行列
-
awk内置变量
-
$n:指定分隔符后,当前记录的第n个字段,也就是第n列
-
$0:打印所有内容
-
FS:输入字段分隔符,默认为空白字符
-
OFS:输出字段分隔符,默认为空白字符
-
NF:分割后,统计字段数
-
NR:行数,可以大于,小于,不等于等等条件
-
RS:输入记录分隔符(输入换行符),指定输入时的换行符
-
ORS:输出记录分隔符(输出换行符),输出时用指定符号代替换行符
-
FNR:多个文件分别计数的行号
-
FILENAME:当前文件名
-
ARGC:命令行参数的个数
-
ARGV:数组,保存的是命令行所给定的各参数
-
-
awk自定义变量
-
printf格式化输出
- %c:显示字符的ASCII码
- %d,%i:十进制整数
- %e,%E:科学计数法显示数值
- %f:显示浮点数
- %g,%G:以科学计数法的格式或浮点数的格式显示数值
- %s:显示字符串
- f1a;无符号整数
- %%:显示%自身
- -:左对齐,例如:%-25s表示-左对齐25个字符长度
- +:显示数值符号,例如:printf “%+d”
-
awk模式
- BEGIN模式是处理文本之前需要执行的操作
- END模式是处理完所有行之后执行的操作
-
在Linux中,一个文件数据可分为两大类:数据和元数据
- 数据:泛指普通文件中的实际数据
- 元数据:用来描述一个文件的特征的系统数据
在Linux中,一个文件的存储也会被分为两部分:inode和block
- inode:用来存储文件的元数据
- block:用来存储文件的真实数据,一个block空间是4k
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z1iLbR5m-1690465877805)(shell.assets/image-20230420133604372.png)]
文件类型:
-
当为 d 则是目录(directory)
-
当为 - 则是普通文件;
-
若是 l 则表示为链接文档(link File);
-
若是 b 则是设备文件(block块设备文件)和存储相关的设备,举例:硬盘,U盘,磁盘分区
-
若是 c 则表示为设备文件(char字符设备文件)和字符相关的设备,举例:打印机,终端
-
若是 s 则表示为socket安全套接字文件,网络编程(同一个服务器两个进程通信)
-
若是 p 则表示为pipe管道文件,父进程与子进程之间的通信文件
硬链接:硬链接和原文件对应一个inode,就是对应一个文件,可以理解成一个文件有几个别名。
- ln 源文件 链接名
软链接:软链接可以理解成快捷方式,和原文件的inode号不一样,它和Windows下的快捷方式的作用是一样的,软链接数据块中记录的亦是相对路径指向。
- ln -s 源文件 链接名
注意:链接的源文件路径要写绝对路径,否则会报错
硬链接与软链接区别
- 目录不能创建硬链接,并且硬链接不可以跨越分区系统。
- 目录软链接特别常用,并且软链接支持跨越分区系统。
- 硬链接文件与源文件的inode相同,软链接文件与源文件inode不同。
- 删除软链接文件,对源文件及硬链接文件无任何影响。
- 删除文件的硬链接文件,对源文件及链接文件无任何影响。
- 删除链接文件的源文件,对硬链接无影响,会导致软链接失效。
- 删除源文件及其硬链接文件,整个文件会被真正的删除。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3qtA6ZZz-1690465877805)(shell.assets/image-20230421140455358.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TI3dTKCA-1690465877806)(shell.assets/下载.png)]
添加用户useradd username
需求:创建用户,UID为,基本组,附加组,注释信息,登陆shell为
修改用户usermod username
删除用户userdel username
- 超级管理员
- 随意修改任何人的密码,密码强度可以随意
- 普通用户执行
- 仅修改自己的密码,不可以修改其他人,密码强度必须满足8个字符及以上
系统创建用户参考的两个配置文件
-
/etc/login.defs
-
/etc/default/useradd
创建组groupadd
修改组groupmod
删除组groupdel
-
组中存在成员怎么办?
-
如果组是附加组:
- 如果附加组中只有附加组成员,直接删除,而用户附加组信息会自动被移除
- 如果附加组中有附加组成员和基本组成员,需要先从基本组中删除该成员,然后再直接删除该附加组
-
如果组是基本组:
- 只有移除基本组中最后一个用户,该组才可以删除
-
预备知识
- Linux Shell主要分为如下几类
- 交互式shell,等待用户输入执行的命令(终端操作,需要不断提示)
- 非交互式shell,执行shell脚本,脚本执行结束后shell自动退出
- 登陆shell,需要输入用户名和密码才能进入Shell,日常接触的最多的一种
- 非登陆shell,不需要输入用户和密码就能进入Shell,比如运行bash会开启一个新的会话窗口
- bash shell配置文件介绍(文件主要保存用户的工作环境)
- 个人配置文件:,
- 全局配置文件:,,
- profile类文件,设定环境变量,登陆前运行的脚本和命令
- bashrc类文件,设定本地变量,定义命令别名
- 注意:如果全局配置和个人配置产生冲突,以个人配置为准
- 登陆系统后,环境变量配置文件的应用顺序
- 登录式shell配置文件执行顺序: → → → →
- 非登陆式shell配置文件执行顺序: → →
su 切换身份
-
su UserName相当于非登陆式shell,配置文件少,不推荐 ❌
-
su - Username相当于登录式shell ✔
-
在root用户下直接借助Username用户身份去运行命令
-
有些程序不支持root直接启动,必须是普通用户。所以普通用户不需要登录系统,只是用来完成服务的启动,通过 su - username -c “command” 来完成服务的启动。
-
sudo 提取权限
权限与用户关系
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mDpuoB6X-1690465877806)(shell.assets/image-20230423152750425.png)]
rwx对文件和目录影响
- 总结:
- 文件rwx权限只能读,写,执行。如果想要删除,移动,复制文件需要该目录有rwx权限才行
- 文件r权限, 只给用户查看,无其他操作
- 文件rw权限, 可以查看和编辑文件内容
- 文件rx权限, 允许查看和执行文件、但不能修改文件----->(脚本文件、命令文件)
- 文件rwx权限, 能读,能写,能执行,但不能删除,因为删除需要看上级目录的权限有没有w----->(谨慎赋予)
- 目录rx权限, 允许浏览目录内文件以及子目录, 不允许在该目录下创建文件、删除文件
- 目录rw权限, 能查看目录,能往目录写入文件,但无法进入目录----->(使用的情况太少)
- 文件的x权限小心给予,通常设定的权限是644
- 目录的w权限小心给予,通常设定的权限是755
变更属主和属组
- 变更属主和属组的场景
- www最开始没有访问index的资格,需要修改属主,属组和权限才能访问
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B0CVfZLG-1690465877807)(shell.assets/image-20230423183618706.png)]
注意:如果原来x位置上有权限则为小写,如果没有为大写
setuid(4):
-
增加权限:或者
-
取消权限:或者
-
setuid(suid):不可以对目录执行,他只针对二进制文件(命令)
-
例子1:当普通用户oldxu执行passwd命令会发生什么变化
-
由于passwd命令拥有suid特殊权限(在命令属主权限位有一个s)
-
所以passwd命令在执行的过程中,会以命令的属主身份(也是root身份)去运行该命令
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WKmjXKhm-1690465877807)(shell.assets/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzNDc5NDMy,size_16,color_FFFFFF,t_70.png)]
-
-
例子2:jack通过cat如何查看/etc/shadow文件:
-
jack执行cat命令查看/etc/shadow。cat是由jack运行的,能不能查看,取决于jack用户对/etc/shadow有没有权限,/etc/shadow默认任何人都无权限,所以查看失败,提示 Permission denied
-
解决:
-
setgid(2):
-
增加权限:或者
-
取消权限:或者
-
命令赋予setgid后,任何用户在执行命令时,以这个命令的属组身份去运行
-
目录赋予setgid后,所有该目录下创建的文件,都按照属组的身份来
-
场景:假设系统中有两个账号,分别是与,这两个人除了自己群组之外还共同支持一个名为的组。假设这两个用户需要共同拥有目录的开发权,互相之间能修改彼此的文件,且该目录不允许其他人进入查阅,请问该目录的权限设定应为何?
-
创建组,以及用户
-
创建项目目录,分配权限。禁止其他人访问该目录,同时还要保证user1,user2能正常读写执行
-
给目录增加sgid
-
user1创建文件,测试user2能否正常修改,并且属组没有变化
-
setbit(1):
- Sticky粘滞位目前只对目录有效,作用如下:目录一旦被赋予了粘滞位,除了root 可以删除所有文件,普通用户对该目录就算拥有 w 权限,也只能删除自己建立的文件,而不能删除其他用户建立的文件。
- 增加权限:或者
- 取消权限:或者
特殊属性:加特殊属性chattr,查看特殊属性lsattr
- 作用:
- 加特殊属性后,它不允许被修改、移动、删除、包括root都不行。适合/etc/passwd文件
- 加特殊属性后,只希望往文件里面追加数据,不允许修改、移动、删除。适合sudo审计日志
- 命令格式:chattr [±=] [选项] 文件或目录名
- =是设置为指定的属性,而忽略原有的属性设置,±为在原有参数的基础上,操作
- a:可对文件进行追加内容
- i:锁定文件,不允许其他操作
umask:
-
定义:umask设置了用户创建文件的默认权限,它与chmod的效果刚好相反,umask设置的是权限“补码”。
- 一般在/etc/profile、$ [HOME]/.bash_profile或$[HOME]/.profile中设置umask值。
-
例子:
**重定向:**将原本要输出到屏幕的数据信息,重新定向到某个指定的文件中,或者定向到黑洞中
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UuEL66OO-1690465877809)(shell.assets/image-20230425124910396.png)]
案例1:正确输出到文件,错误输出到屏幕
案例2:正确错误都输出到一个文件中
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I2x6oif9-1690465877810)(shell.assets/image-20230425132106500.png)]
案例3:输出到/dev/null。是一个特殊的设备文件,它相当于一个黑洞,任何写入它的数据都会被丢弃。因此,不会占用额外的空间。
管道:输出变成下一个输入,但是只能把标准输出,输入到下一个进程中
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VDtD3WvE-1690465877810)(shell.assets/image-20230425134022181.png)]
-
管道中tee:在输出屏幕的同时可以把内容存入到文件中
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LNTyj1VI-1690465877811)(shell.assets/image-20230425135240261.png)]
-
xargs:把前面内容变成我这条命令的参数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xQPqfSe1-1690465877811)(shell.assets/image-20230425135937883.png)]
- xargs -nx:分组,每行x个
-
按照文件类型搜索
-
按照文件名搜索
-
按照文件大小搜索
- -size[±]大小:按照指定大小搜索文件
- "+"的意思是搜索比指定大小还要大的文件
- “-” 的意思是搜索比指定大小还要小的文件
- -size[±]大小:按照指定大小搜索文件
-
按照修改时间搜索
- -5:代表5天内修改的文件
- 5:代表前5~6天那一天修改的文件
- +5:代表6天前修改的文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fIdh94uk-1690465877811)(shell.assets/2-1P930143J9411.jpg)]
-
按照所有者和所属组搜索
-
按照权限搜索
-
逻辑运算符
- -a:and逻辑与
- -o:or逻辑或
- -not:not逻辑非
-
执行动作
动作 含义 -print 打印查找到的内容(默认) -Is 以长格式显示的方式打印查找到的内容 -delete 删除查找到的文件(仅能删除空目录) -ok 后面跟自定义shell命令(会提示是否操作,写法同-еxес) -еxес 后面跟自定义 shell命令(标准写法 -exec 命令x {};) - “-exec"选项的作用是把 find 命令的结果放入”{}"中,再由命令x 直接处理。
- gzip
-
bzip2
-
zip/unzip
-
tar
-
打包
-
解压
-
排除文件:–exclude=
-
排除多个文件:X指定从哪个文件中读取要排除的文件名称
-
-
Linux常见软件包
安装软件常见方法
RPM软件包命名规则
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eSO0NT8Z-1690465877812)(shell.assets/image-20230506203305582.png)]
-
RPM安装
-
RPM查询
-
RPM升级
-
RPM卸载
-
RPM检验
配置其他服务源:
- 书写配置文件
- 下载安装对应的源的软件包,例如:xxx-release.rpm(包含repo文件),安装后就有对应repo文件了
- yum下载软件时会自动从所有可用的源中选择最快的一个下载。如果您想要指定从某个特定的源下载软件,可以使用yum命令的–enablerepo选项。例如,如果您想要从nginx源下载软件,可以使用以下命令:yum --enablerepo=nginx install nginx。
服务端:自己的yum仓库,每一个客户端只能上内网,所以只能局域网yum安装
客户端:配置服务端的yum
编译环境:gcc、make
依赖环境:pcre、openssl
三部曲:
- 第一步:https://blog.csdn.net/yy549159265/article/details/configure(定制组件 配置)
- 指定安装路径,编译安装默认路径 /usr/local/ ,例如 --prefix=/app/web/nginx-1.18.0
- 启用或禁用某项功能, 例如 --enable-ssl
- 和其它软件关联,例如–with-pcre
- 检查安装环境,例如是否有编译器 gcc,是否满足软件的依赖需求
- 检测通过后生成Makefile文件
- 第二步:make(源代码编译—>二进制命令)
- 执行make命令进行编辑, 可以使用-j指定CPU编译
- -J 并发执行编译安装
- -j 以cpu核心总数一致
- 按Makefile文件进行编译, 编译成可执行二进制文件
- 生成各类模块和主程序
- 第三步:make install(安装)
- 按Makefile定义好的路径拷贝至安装目录中
RAID0:
- 将多块磁盘组合在一起形成一个大容量的存储。当我们要写数据的时候,会将数据分为N份,以独立的方式实现N块磁盘的读写,那么这N份数据会同时并发的写到磁盘中,因此执行性能非常的高。
- RAID0 的读写性能理论上是单块磁盘的N倍(仅限理论,因为实际中磁盘的寻址时间也是性能占用的大头)
- 但RAID0的问题是,它并不提供数据校验或冗余备份,因此一旦某块磁盘损坏了,数据就直接丢失,无法恢复了。因此RAID0就不可能用于高要求的业务中,但可以用在对可靠性要求不高,对读写性能要求高的场景中。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wK60weeS-1690465877813)(shell.assets/image-20230522192605197.png)]
RAID1:
- RAID1 是磁盘阵列中单位成本最高的一种方式。因为它的原理是在往磁盘写数据的时候,将同一份数据无差别的写两份到磁盘,分别写到工作磁盘和镜像磁盘,那么它的实际空间使用率只有50%了,两块磁盘当做一块用,这是一种比较昂贵的方案。
- RAID1其实与RAID0效果刚好相反。RAID1 这种写双份的做法,就给数据做了一个冗余备份。这样的话,任何一块磁盘损坏了,都可以再基于另外一块磁盘去恢复数据,数据的可靠性非常强,但性能就没那么好了。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-i1zSxbKE-1690465877813)(shell.assets/image-20230522192818102.png)]
RAID5:
- 把校验码信息PARITY分布到各个磁盘上。例如,总共有N块磁盘,那么会将要写入的数据分成N份,并发的写入到N块磁盘中,同时还将数据的校验码信息也写入到这N块磁盘中(数据与对应的校验码信息必须得分开存储在不同的磁盘上)。一旦某一块磁盘损坏了,就可以用剩下的数据和对应的奇偶校验码信息去恢复损坏的数据。
- 最少需要三块磁盘来组建磁盘阵列,允许最多同时坏一块磁盘。如果有两块磁盘同时损坏了,那数据就无法恢复了。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yPxsxtKT-1690465877814)(shell.assets/image-20230522192840604.png)]
RAID10:
- RAID10兼备了RAID1和RAID0的有优点。首先基于RAID1模式将磁盘分为2份,当要写入数据的时候,将所有的数据在两份磁盘上同时写入,相当于写了双份数据,起到了数据保障的作用。且在每一份磁盘上又会基于RAID0技术讲数据分为N份并发的读写,这样也保障了数据的效率。
- 但也可以看出RAID10模式是有一半的磁盘空间用于存储冗余数据的,浪费的很严重,因此用的也不是很多。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kwevAebu-1690465877814)(shell.assets/image-20230522192853661.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tHb62N4l-1690465877814)(shell.assets/image-20230522193548924.png)]
**mbr分区表:**主引导记录,还可以叫做主引导扇区。它的运行机制存在于硬件的基础之上,它存储在硬盘的第一个扇区上。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XJoTiJMX-1690465877815)(shell.assets/image-20230525220136831.png)]
- 主分区:数量至少1个,最多4个(如果存在扩展分区,则最多3个)。主分区可以直接使用,主分区本身不能继续分区,一个主分区就是一个逻辑磁盘。
- 扩展分区: 为了突破这最多四个主分区的限制,Linux系统引入了扩展分区。0个或1个,会占用一个主分区号,不能直接使用,必须在其上建立逻辑分区后才能用。 其实就是把1个主分区拿过来进行分区扩展了。
- 逻辑分区:扩展分区的容量是所有逻辑分区容量之和。
使用率:
当前读写速度:
磁盘分区:
- fdisk磁盘分区:
- parted磁盘分区:
**格式化:**创建文件系统make file system mkfs
挂载:
磁盘空间不足
-
block满了一
-
原因: 磁盘有大量的文件占用空间,导致空间不足
-
-
block满了二
-
原因: 删除大文件时,大文件有其他使用者访问(进程未清除,或者硬链接还有)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-foDNvpSQ-1690465877815)(E:运维学习shell.assetsimage-20230529221131450.png)]
-
-
inode满了
-
原因: 磁盘上面有大量小文件,占用了大量的inode,最终磁盘空间不足
-
内存不足占用
-
swap交换分区:内存不足的时候临时充当内存
-
增加swap方法:
-
通过创建文件增加swap
-
磁盘分区作为swap
-
-
永久增加swap方法:
-
swapon /tmp/swap 放入/etc/rc.local。同永久挂载
-
写入到 /etc/fstab
-
-
buffer:写缓冲区,目的是加速写入的速度
cache:读缓存区,目的是加速读取的速度
root密码忘记:
-
开机的时候,选择第1个,按e编辑
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jHUYpwYs-1690465877816)(E:运维学习shell.assetsimage-20230531121009720.png)]
-
然后找到linux16的行,在这一行的最后添加rw init=/bin/sh,按ctrl+x
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X2H6LKDZ-1690465877816)(E:运维学习shell.assetsimage-20230531121106893.png)]
-
重新设置root密码,重启系统
-
故障:救援模式修改密码之后,无法进入系统,读条的时候卡住:selinux没关闭
Linux7系统的开机启动过程如下:
-
开机自检(检查硬件)
-
MBR/GPT引导系统启动
-
GRUB菜单,多个内核选择哪个启动
-
加载内核选项
-
内核初始化使用systemd进程(启动的Linux系统的第1个进程 systemd)
-
读取运行级别(桌面模式,命令行模式)/etc/systemd/system/default.target
-
初始化系统(挂载,启动网络,主机名,…)/usr/lib/systemd/system/sysinit.target
-
根据运行级 别、并行启动服务(网络服务,ssh服务,定时任务服务…)
-
关机 重启 其他 shutdown -h 10 shutdown -r 10 shutdown -h now/0 shutdown -r now/0 halt (关闭系统,手动断电) reboot poweroff init 0 #centos 6常用 init 6 #centos 6常用 systemctl halt/poweroff systemctl reboot poweroff:关机同时关闭电源,会发送一个ACPI信号通知系统关机
half:关机但是不关闭电源,需要手动关闭电源
shutdown:关机同时关闭电源,只有拥有root权限的用户才可以执行
可用撤回的开关机
运行级别
centos6叫做runlevelsystemd目标名称 作用 0 poweroff.target 关机 1 rescue.target 单用户模式级别。root 权限,用于系统维护(或修复系统,或重置系统密码信息),禁止远程登录 2 multi-user.target 多用户模式级别。该级别下没有NFS和网络的支持 3 multi-user.target 完整的多用户文本模式级别。登录后进入到控制台命令行模式 4 multi-user.target 预留级别。该级别系统未使用 5 graphical.target 图形化模式级别。登录后进入图形GUI模式 6 reboot.target 重启 修改系统运行级别:
systemd相关配置文件:
systemd管理服务相关命令:
systemctl服务状态:
服务状态 状态说明 loaded 服务单元的配置文件已经被处理,配置放在了/usr/lib/systemd/system/ active(running) 服务的一个或多个进程在运行中最常见的状态 start active(exited) 一次性运行的服务成功被执行并退出(服务运行后完成任务,相关进程会自动退出) active(waiting) 服务已经运行但在等待某个事件 inactive 服务没有在运行 stop enabled 服务设定为开机运行 disabled 服务设定为开机不运行 static 服务会随着系统的启动而启动,并且会一直运行,直到系统关闭或服务被手动停止 systemctl的日志:
进程正常处理流程:
- 子进程在处理任务代码时,父进程会进入等待状态中…
- 子进程在处理任务代码后,会执行退出,然后唤醒父进程来回收子进程的资源。
- 如果子进程在处理任务过程中异常退出,而父进程没有回收子进程的资源,会导致子进程虽然运行实体已经消失,但仍然在内核中的进程表中占据一条记录,长期下去对系统中资源是一个浪费。(僵尸进程)
- 如果子进程在处理任务过程中,父进程退出了,子进程没有退出,那么子进程就没有父进程来管理了,由系统的system进程管理。(孤儿进程)
ps -aux解释:
STAT解释:
STAT基本状态 描述 STAT状态符号 描述 R(running) 进程运行 s 进程是控制进程,Ss进程为父进程 S 可中断进程处于等待状态(可以随时停止) < 进程运行在高优先级上,S<优先级较高的进程 T(terminate) 进程被暂停(挂起) N 进程运行在低优先级上,SN优先级较低的进程 D 不可中断进程(IO) + 当前进程运行在前台,R+该表示进程在前台运行 Z 僵尸进程 l(小写L) 进程是多线程的,Sl表示进程是以线程方式运行 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NzIJTPhn-1690465877816)(E:运维学习shell.assetsimage-20230605184233085.png)]
参数:
**平均负载:**单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数
- 可运行状态进程:指正在使用 CPU 或者正在等待 CPU 的进程,也就是我们ps 命令看到处于 R 或 S 状态的进程
- 不可中断进程:系统中最常见的是等待硬件设备的 I/O 响应,也就是我们 ps 命令中看到的 D 状态(也称为Disk Sleep)的进程。
平均负载案例分析
**stress:**是 Linux 系统压力测试工具,这里我们用作异常进程模拟平均负载升高的场景
**mpstat:**是多核 CPU 性能分析工具,用来实时查看每个 CPU 的性能指标,以及所有 CPU 的平均指标
**pidstat:**是一个常用的进程性能分析工具,用来实时查看进程的 CPU、内存、I/O 以及上下文切换等性能指标场景一:CPU 密集型进程
场景二:I/O 密集型进程
**总结:**平均负载提供了一个快速查看系统整体性能的手段,反映了整体的负载情况。但只看平均负载本身,我们并不能直接发现,到底是哪里出现了瓶颈。
- 平均负载高有可能是 CPU 密集型进程导致
- 平均负载高还有可能是 I/O 更繁忙
- 当发现负载高的时候,使用 mpstat、pidstat 等工具,辅助分析负载的来源
- w/uptime, 查看负载
- ps aux/top 看看 cpu百分比, iowait或者是内存占用的高? (三高cpu,io,内存)
- top检查具体是哪个进程,找出可疑进程
- 追踪这个进程使用情况,做什么的?
- 看看对应日志是否有异常
- 系统日志: /var/log/messages(系统通用日志) /var/log/secure(用户登录情况)
- 服务软件的日志
配置文件位置:/etc/crontab
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UbDh5R1P-1690465877817)(E:运维学习shell.assetsimage-20230606190229685.png)]
符号 含义 * 每(每小时 每天 每周 每月) / 每隔(表示每隔多久执行一次) , 独立的时间(例如:7点,6点,9点) - 范围(10-30,20-55之类) 参数 含义 crontab -e edit 编辑定时任务 crontab -l list 查看当前用户的定时任务 crontab -r remove 清空/删除当前用户的所有定时任务 crontab -u user 编辑user的定时任务,配置文件对应/var/spool/cron/user下 笔记:
-
在root用户下 执行crontab -e -u aaa 和在aaa用户下执行crontab -e -u aaa 有什么区别吗?
-
当以root用户身份执行"crontab -e -u aaa"时,可以编辑aaa用户的crontab文件,因为root用户具有最高权限。
-
而当以aaa用户身份执行"crontab -e -u aaa"时,只能编辑自己的crontab文件
-
-
crontab -e 会自动更新配置文件,所以每次写入新任务不用重新加载服务的配置文件
-
每2分钟输出oldboy追加到/tmp/oldboy.txt
-
使用root用户每分钟执行一次时间同步
-
给定时任务注释,
-
将需要定期执行的任务脚本中,避免直接使用命令无法执行的情况
- 需要使用转义,但是写入脚本就不用转义,直接定时这个sh脚本就行
-
定时任务的结尾一定要有 或者 将结果追加到文件
-
注意有些命令是无法成功执行的 echo “123” >>/tmp/test.log &>/dev/null
-
如果一定要是用命令,命令必须使用绝对路径
-
crond备份
- 备份日志,通过查找中执行的记录,去推算任务执行的时间
- 定时的备份配置{username}的文件,
-
crond拒绝某个用户使用
- 增加频率
- 调整任务每分钟执行的频率, 以便做后续的调试。
- 调整系统时间
- 执行脚本输出到文件(排查错误)
- 如果使用cron运行脚本,请将脚本执行的结果写入指定日志文件, 观察日志内容是否正常。
- 命令使用绝对路径, 防止无法找到命令导致定时任务执行产生故障。
- 通过查看/var/log/cron日志,以便检查我们执行的结果,方便进行调试。
-
手动执行命令,然后保留执行成功的结果
-
编写脚本
- 统一路径:脚本需要统一路径/scripts
- 复制:脚本内容复制第一步执行成功的命令(减少每个环节出错几率)
- 简单粗暴:脚本内容尽可能的优化,使用一些变量或使用简单的判断语句
- 定向到空:脚本执行的输出信息可以重定向至其他位置保留或写入/dev/null
-
执行脚本
- 使用bash命令执行,防止脚本没有增加执行权限(/usr/bin/bash)
- 执行脚本成功后,复制该执行的命令,以便写入cron
-
编写计划任务
- 加注释:加上必要的注释信息
- 改时间:设定计划任务执行的周期
- 去粘贴:粘贴执行脚本的命令(不要手敲)
-
调试计划任务增加任务频率测试
- 检查环境变量问题:使用命令绝对路径
- 看日志:检查crond服务日志
- 看结果
交换机:实现同一个局域网通信工具,用于连接多个计算机或网络设备,并在它们之间传输数据。
- 交换机能够根据目的地址在不同端口之间转发数据包
- 基于MAC地址、IP地址或虚拟局域网(VLAN)来进行转发
- MAC地址:唯一
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nlwpKJmJ-1690465877817)(E:运维学习shell.assetsimage-20230616193124878.png)]
路由器:实现多个网段数据传输
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VTPiPcmI-1690465877817)(E:运维学习shell.assetsimage-20230616193217776.png)]
网关:实现不同网段之间通讯需要经过一条必经之路。 (交换机,路由器)默认的出口/入口
网络追踪命令:
网络层次结构
- 核心层:主要部署路由器设备,用于连接外网线路,还要具备冗余能力
- 汇聚层:主要部署三层交换设备,用于相应安全访问控制 进行链路汇聚
- 链路聚合是把两台设备之间的多条物理链路聚合在一起,当做一条逻辑链路来使用,可以增加带宽,负载分担
- 接入层:主要部署二层交换设备,用于终端设备接入
网络七层
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CDpSNytq-1690465877818)(E:运维学习shell.assetsimage-20230616230622638.png)]
含义 涉及协议或内容 应用层 应用软件,接口,各种协议 http https dns smtp … 表示层 会话层 传输层 数据如何传输到对端 tcp udp 端口 网络层 网络路由和寻址 IP 3层路由器 数据链路层 通过mac地址识别设备,进行传输 mac 2层交换机 物理层 数据转换为010101010,通过网络介 数据封包解包过程
-
封包
- 应用层:原始数据被转换成二进制数据
- 传输层:二进制数据被分割成小的数据段,并封装TCP头部 (数据段)(TCP头部的关键信息–端口号)
- 网络层:传输层传来的数据被封装上IP头部 (数据包)(IP头部的关键信息–IP地址)
- 数据链路层:网络层传来的数据被封装上MAC头部 (数据帧)(MAC头部的关键信息–MAC地址)
- 物理层:二进制数据组成的比特流转化为电信号在网络中传输 (比特流)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ai9dxa2Y-1690465877818)(E:运维学习shell.assetsimage-20230617195706240.png)]
-
解包
- 物理层:将电信号转化为二进制数据,并将其送至数据链路层
- 数据链路层:查看MAC地址,地址是自己,就拆掉MAC头部,继续传输地址不是自己,就丢弃数据
- 网络层:查看IP地址,地址是自己,就拆掉IP头部,继续传输地址不是自己,就丢弃数据
- 传输层:查看TCP头部,判断应该传到哪里,然后重组数据,传输到应用层
- 应用层:二进制转化为原始数据
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m1SoueX3-1690465877819)(E:运维学习shell.assetsimage-20230617195842029.png)]
本地IP 阿里云服务器IP 222.27.64.17 47.93.18.99 握手
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qouDpOph-1690465877819)(E:运维学习shell.assetsimage-20230617215221702.png)]
-
第一次
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DCSNn6Ca-1690465877819)(E:运维学习shell.assetsimage-20230617215847584.png)]
-
第二次
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uRQjrWhT-1690465877819)(E:运维学习shell.assetsimage-20230617220302439.png)]
-
第三次
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kiTXrNU4-1690465877820)(E:运维学习shell.assetsimage-20230617220818468.png)]
挥手
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IkHgT7Ed-1690465877820)(E:运维学习shell.assetsimage-20230617215305072.png)]
总结:
- ack为上一次握手/挥手的seq+1:确认接收端的请求或回应
- seq为上一次握手/挥手的ack:保证数据的有序传输和确认的准确性
- 定义:将IP地址解析为MAC地址,维护映射的缓存
- 划分网络:子网的引入可以将一个大型网络划分为更小的子网,有助于管理和组织网络。每个子网可以独立地进行管理,简化网络结构。
- 控制广播范围:在没有子网的情况下,广播消息将在整个局域网中传播,导致广播风暴和带宽浪费。通过子网,可以限制广播消息的范围在子网内部,减少广播对整个网络的影响。
- 提高网络性能:当网络中有大量设备时,所有设备发送请求到同一个网关可能导致网关负载过高。通过子网,可以将设备分散到不同的子网中,减轻了每个子网的负载,提高了整体网络性能。
- 安全性增强:子网可以通过实施子网间的访问控制列表(ACL)和防火墙规则来增强网络的安全性。不同子网之间的通信可以受到限制,有助于保护敏感数据和资源的安全。
- A记录是"Address"记录的缩写,用于将域名解析为IPv4地址。当用户输入一个域名时,DNS服务器会查询该域名的A记录,返回与之对应的IPv4地址。这样,用户的计算机就能够通过该IPv4地址与目标服务器建立连接。
- CNAME记录是"Canonical Name"记录的缩写,用于创建域名的别名。CNAME记录将一个域名指向另一个域名,实现域名之间的关联。当用户查询一个使用CNAME记录的域名时,DNS服务器会返回与之关联的目标域名的A记录。这样,用户的计算机就可以通过目标域名的A记录找到目标服务器的IPv4地址。
- :指定网络接口设备的名称,这里是 ,表示以太网卡设备的第一个接口。
- :指定接口的启动协议,常见取值有 、、 等。 表示不使用任何协议, 表示使用静态 IP 地址, 表示使用 DHCP 协议从 DHCP 服务器获取 IP 地址。
- :指定静态 IP 地址,当 设置为 时生效。
- :指定子网掩码,用于确定网络中 IP 地址的网络部分和主机部分。
- :指定默认网关的 IP 地址,用于将网络流量转发到其他网络。
- 和 :指定首选和备用 DNS 服务器的 IP 地址,用于解析域名到 IP 地址。
- :指定网络接口是否在系统启动时自动激活,常见取值有 和 。
- :指定网卡设备的硬件 MAC 地址。
- :指定网络接口的网络前缀长度,用于确定网络部分的位数。例如,如果网络前缀是 24,则表示前 24 位用于网络部分,后 8 位用于主机部分。
- :指定网络接口的类型,常见取值有 、 等,表示不同类型的网络接口设备。
- :指定是否使用从 DHCP 服务器获取的 DNS 服务器配置。如果设置为 ,则使用从 DHCP 服务器获取的 DNS 服务器;如果设置为 ,则不使用 DHCP 提供的 DNS 服务器配置。
- :指定是否启用 IPv6 支持。如果设置为 ,表示启用 IPv6;如果设置为 ,表示禁用 IPv6。
![](E:运维学习shell.assetsout (1)-16877082738067.jpg)
-
网络命令
-
排查
- 检查 路径是否通畅
- ping
- traceroute/tracert
- 检查服务是否开启
- 检查端口
- telnet ip 端口
- nmap -p端口 ip
- nmap -p端口x-端口y ip
- nmap -p端口 ip/网段
- 检查进行
- ps -ef
DEVICEens33`,表示以太网卡设备的第一个接口。
- ps -ef
- 检查端口
- 检查 路径是否通畅
- :指定接口的启动协议,常见取值有 、、 等。 表示不使用任何协议, 表示使用静态 IP 地址, 表示使用 DHCP 协议从 DHCP 服务器获取 IP 地址。
- :指定静态 IP 地址,当 设置为 时生效。
- :指定子网掩码,用于确定网络中 IP 地址的网络部分和主机部分。
- :指定默认网关的 IP 地址,用于将网络流量转发到其他网络。
- 和 :指定首选和备用 DNS 服务器的 IP 地址,用于解析域名到 IP 地址。
- :指定网络接口是否在系统启动时自动激活,常见取值有 和 。
- :指定网卡设备的硬件 MAC 地址。
- :指定网络接口的网络前缀长度,用于确定网络部分的位数。例如,如果网络前缀是 24,则表示前 24 位用于网络部分,后 8 位用于主机部分。
- :指定网络接口的类型,常见取值有 、 等,表示不同类型的网络接口设备。
- :指定是否使用从 DHCP 服务器获取的 DNS 服务器配置。如果设置为 ,则使用从 DHCP 服务器获取的 DNS 服务器;如果设置为 ,则不使用 DHCP 提供的 DNS 服务器配置。
- :指定是否启用 IPv6 支持。如果设置为 ,表示启用 IPv6;如果设置为 ,表示禁用 IPv6。
![](E:运维学习shell.assetsout (1)-16877082738067.jpg)
-
网络命令