Linux

2023-05-16

Linux

1、计算机硬件体系

1.1冯诺依体系

由运算器、控制器、存储器、输入设备和输出设备五部门组成。

顺序执行程序

计算机处理数据和指令一律用二进制表示

1.2硬件组成

存储器

随机存储内存RAM,内存,逻辑IO

只读内存ROM,硬盘,物理IO

1.3硬盘分类

硬盘是随机读取的,不是顺序读取,否则会浪费效率

机械硬盘(HHD):

硬盘的转速限制着读写速度,7200转/min≈100-200M/s

硬盘盘面是凹凸不平的,凸起是被磁化代表1,凹陷是没有被磁化代表0,以二进制存储数据信息

PtoP协议损坏硬盘

机械硬盘盘面由 划线的磁道、磁道分割的扇区,扇区组成的扇面,扇面组成的簇

存储实际大小大于占用空间的原因

磁盘存储数据是按照扇区进行分化的,而扇区的大小是固定的。举例假设一个扇区可以存4kb数据,但是实际存储数据有9.27kb,那么磁盘会划分三个扇区给该数据,这就导致第三个扇区的数据没有存满该扇区,但是仍然占据该扇区,所以导致实际数据大小小于占用空间

固态硬盘(SSD):

闪存颗粒(固态电子存储颗粒)

顺序读取效率:内存>机械硬盘>固态硬盘

随机读取效率:固态>机械>内存

2、网络

子网掩码分离主机地址和网络地址(与IP做与运算)

IP=网络地址+主机地址

192.168.123.100=1100 0000. 1010 1000.0111 1011.0110 0100

255.255.255.0 =1111 1111.1111 1111.1111 1111.0000 0000

与运算后结果1100 0000.1010 1000.0111 1011.0000 0000 = 192.168.123.0(网络地址)

**网关:**负责总体网络数据发送关口发送数据到上级网络,负责转发消息,没有网关,消息收发送无效

域名:windows 存储位置C:\Windows\System32\drivers\etc\hosts

我们可通过修改这个文件来让域名跑向其他网址,也就是域名劫持

当前百度ip为110.242.68.3,知乎ip为113.1.0.71,

修改host,这样访问www.zhihu.com就会变成访问百度,ping检测

在这里插入图片描述
g)]

2.1连接模式

主机模式(host-onboy)

某些特殊网络环境调试要求真实环境和虚拟环境隔离开,可以采用此模式。

此模式下所有虚拟主机可以相互通信,但是与实际环境是分隔开的

此模式下虚拟环境的TCP/IP配置信息是由虚拟机虚拟网络dhcp动态分配

桥接模式(bridged)

虚拟机的操作系统是局域网内独立主机,可以访问内网任何机器

桥接模式下虚拟机和真实环境宿主主机是模拟为一条网线上的,也就是模拟真实主机

网络地址转换模式(NAT)

nat模式就是虚拟系统借助nat功能,通过宿主机器的网络访问公网

nat下虚拟机TCP/IP配置信息是由虚拟网络的dchp分配

此状态下虚拟系统不能与本局域网内的其它真实主机通讯

3、版本

redhat(Centos)可执行文件后缀rpm

debian(ubuntu)可执行文件后缀名db

4、Linux_centos7.6虚拟机安装

注意hre-v和虚拟机不能同时运行,需要使用vm15.5.6以上版本才能支持虚拟机和hre-v

虚拟机无法使用。删除虚拟机镜像文件里的lck文件

4.1首先配置网络

vi /etc/sysconfig/network-scripts/ifcfg-ens33

#进入网卡信息配置页面

信息配置如下
在这里插入图片描述

删除uuid款,将onboot=yes,网关gateway为虚拟网络编辑器NAT模式下的nat设置指定的网关,BOOTPROTO=static设置为静态网络

在这里插入图片描述

设置完成后重启网卡服务

systemctl restart network.service

4.2其次配置防火墙

端口需要被访问就需要关闭防火墙

systemctl stop firewalld #本次开机关闭防火墙

systemctl disable firewalld #服务器重启后防火墙禁用

4.3安装软件的限制

vi /etc/sysconfig/selinux #进入文件修改

设置SELINUX=disabled

4.4虚拟机远程连接

putty远程连接

xshell7连接

5、Linux基本命令

5.1帮助文档命令

help

man

命令后面是单词用–,简写的用-

5.2常用命令

$命令提示符 root用户提示符是¥
whereis ping #寻找命令位置,在哪
#ping:/usr/bin/ping /usr/share/man/man8/ping.8.gz

file /usr/bin/cd #查看文件的类型
#/usr/bin/cd: POSIX shell scripts,ASCII text executable

who#查看当前登录信息
#root  tty1  2022-01-23 11:24
#root pts/0  2022-01-23 11:25(192.168.188.1)


whoami#查看当前登录用户
#root

pwd#查看当前所在文件位置
#/root

uname -a#查看内核信息
#Linux Centos7.6 3.10.0-957.el7.x86_64 #1 SMP THu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 GNU/Linux 

echo hello #打印语句
hello

clear#清屏

reboot #重启

5.3特殊字符

.#当前目录

..#上一级目录

$ #说明这是一个变量,shell命令,支持置换命令
hello=Prince
echo $name
#Prince

#有其他含义的特殊字符和需要\进行屏蔽内容
echo "pay \$15.5"
echo "tom :\"what fuck?\""

*#通配符
ll -a /etc/*a #替换任意多字符,单字符是?,表示范围[]
cd /etc/yum.repos.d |ls -l [Centos]*


""  表示引用的是一个不可分割的整体
''  引号内容当作字符串
awk 'BEGIN{system("date +'%Y%M%D%H'")}'
#两个命令同时需要执行,但是不能放在一个双引号里,就需要单引号,表示引用的引用

``反引号
#具有优先性,任何情况下优先执行反引号命令
echo "Now time: `date +'%Y%M%D'`"
#或者引用更长命令
echo "are you using this system users:`who | awk '{ARR[FNR]=$1;}END{printf "%s %s\n",ARR[1],ARR[2];}'`" #显示当前使用系统的用户
 #are you using this system users:root 
#命令后面是单词用--,简写的用-
#使用变量保存当前日期并输出
date=`date`
echo "host namesi :$date"

#$置换命令
ls -l $(cat /etc/shells)#优先读取cat /etc/shells内容,然后根据读取内容(目录)ls展示

5.4正则表达式

在这里插入图片描述

/content/ 正则表达式规范
#zj.txt
abc
bca
;;;;
cda

aacb
ccba
abcd
sjkl
qiwi
sjndaj
ka;a;
a;ld
dlkd

grep "a\{1\}" zj.txt
grep "\<aa" zj.txt 或则 grep "<aa" zj.txt
grep "a;." zj.txt
grep "[sj]" zj.txt
grep "a{1,2}b" #ab作为一个整体,a可以出现一次或两次
\<disc #disc开头的单词
disc/> #disc结尾的单词
\<disc\>/#之查找disc
m\{5\}#m出现5次的单词
m\{5,\} #m连续出现至少5次的单词
m\{4,10\} #m出现次数在4到10之间的单词
^$ #去除文本空行

6、Linux系统

6.1文件系统

linux的一切都是文件构成包括线程。Linux访问文件不参考windows盘符方式访问文件。

linux文件系统是树状结构模型,只有一个根节点/,根节点下支持多个子节点,同理子节点。

linux支持磁盘空间挂载扩容,防止空间溢出

在这里插入图片描述

假设一共/下只有64gb空间,/usr下也需要存储2t东西,这时我们需要新安装一个2t磁盘,若是windows就需要重新进行磁盘分配才能使用,而linux可以通过在upload下重新挂载那个2t的硬盘,这样2t空间就不会占用/下的64g空间而是占用挂载的2t空间

mount /dev/disk1 /usr/download #download文件挂载disk1磁盘的1t空间
disk1 1T

mount /dev/disk2 /usr/upload
disk2 2t

mount /dev/disk3 /usr/upload/video
disk 1p

linux查找文件方式

1、相对路径:以当前路径为基准点查找资源,vi …/etc/sysconfig/network-scripts/ifcfg-ens33

2、绝对路径:以根目录为节点查找资源,vi /etc/sysconfig/network-scripts/ifcfg-ens33

3、如果是配置文件查找尽量写绝对路径,也就是根节点方式

6.1.1linux根目录节点目录详解

bin目录为可执行文件位置:命令脚本

boot目录引导分区(linux启动时引导程序)

dev设备信息

etc目录,系统配置文件目录

home目录,普通用户目录,硬盘

lib目录,可调用类库

media目录,媒体目录

mnt目录,硬盘挂载目录

opt目录,软件安装位置()

proc目录,进程目录

root目录,超级管理员用户目录

sbin目录,超级管理员可执行命令目录

srv目录,系统服务启动后需要提取的数据

sys目录,系统内核

tmp目录,临时数据(变量等)目录,重启后数据被清楚

var目录,临时数据(变量等)目录,重启后数据不会清楚,存日志信息不错

usr目录,用户共享区域

进程查看

ps -ef 
echo $$ #查看当前进程编号

6.1.2文件操作命令

pwd #查看当前目录

mkdir aa#创建aa文件夹
mkdir -p /home/rince/aa/bb/cc #-p直接创建没有的文件夹
mkdir -p /home/rince/a3{_a1,_a2,_a3} #在/home/rince下创建a3_a1,a3_a2,a3_a3三个文件夹,{}表示并列关系,所有命令都能使用


cp /etc/yum.conf /home/rince #拷贝命令,复制yum.conf 到/home/rince,只能拷贝文件不能拷贝文件夹
cp -r /etc/yum.repos.d /home/rince #可以拷贝问价夹下所有内容 -r


#移动文件命令
mv /home/rince/aa* /home/prince #拷贝a开头的所有文件夹到prince


#删除
rm -rf a #文件夹不为空就能使用 -rf强制删除
rmdir aa #文件夹内部为空才能使用
rmdir /home/rince/aaa/a3{a1,a2,a3}
rm /home/rince/yum.conf #删除文件,会跳出确认删除输入y同意,n不同意
rm -rf /home/rince#强制删除文件夹
rm /home/rince

#touch创建文件
touch /home/aa{a1,a2}.txt

#stat 文件状态信息
stat /jingye 
#Access 使用文件最近使用时间 Modify改变数据内容时间  change修改原数据信息时间
stat jingye#stat+已存在文件会将文件的access、modify、change时间同步
6.1.2.1文件软硬链接
#软链接
touch /home/rince/lntest
vi /home/rince/lntest #修改内容进去
ln -s lntest lln#创建文件lln同时链接到lntest
cat lntest
cat lln  #可以看到lln内容随着lntest改变而进行变化

#硬链接
ln lntest hmtest 

#可以通过ll看到lntest指向lln,但是硬链接,没有指向显示
#若此时删除lntest,软连接的lln会失效,但是硬链接仍旧存在

在这里插入图片描述

硬链接的话是文件执行存储位置,让存储位置的link变为2,所以当删除源文件后links变为了1,存储空间的link不为0仍旧有效,所以硬链接仍旧指向文件存储空间所以可以显示内容。

软连接的文件是指向源文件的而不指向存储空间,所以当源文件删除后,无论存储空间内容是否删除,都不会拿到数据

6.1.2.2文件操作
cat yyds#正序展示文件
tac yyds#倒叙展示文件


cat >person.txt<<KOF#使用一条cat命令创建多行文本包含上面内容,以KOF为结束结束文本创建


#以上两个会占据大量空间,也就是一次性全部加载出来,不推荐
more yyds #一行一行,回车展示;一页一页,空格展示;b 后退;q 退出; 查看文件
less yyds #作用与more基本一致,多了很多命令 h查看


#查看文件某几行
head -10 /etc/profile #查看文件的前10行
tail -10 /etc/profile #查看文件后10行
head -10 /etc/profile|tail -1 #查看文件的第10行
head -10 /etc/profile|tail -3#产看文件的第10、9、8行

#xshell多窗口
ping www.baidu.com>> /home/rince/pingText

tail -f /home/rince/pingText
#实时显示文件内容,监控的是文件的inode,也就是存储位置,在此存储空间的links为1时若删除原文件pingText则对应inode也会被删除。实时显示会报错,此时重建一个pingText文件时,仍旧报错,因为新创建的pingText的inode已经发生改变,而还在运行的tail -f找不到原本的inode了。

tail -F /home/rince/pingText 
#实时显示文件内容,监控的是文件本身,也就是pingText,此时删除源文件后在新创建一个同名文件 tail —F仍旧能正常显示,因为文件名字没变
 

在这里插入图片描述

快速寻找文件find

find / -name hadoop #根目录找Hadoop文件
find /etc -name hadoop #在etc下找hadoop文件
#都会翻找子目录

vi编辑器

vi +8 profile#定位最后一行
vi + profile #定位最后一行
vi +/if profile #找if,n找下一个

vi三种模式:编辑模式、输入模式、末行(命令行)模式

vi编辑模式下 :set nu进入命令行模式

编辑模式 
a追加,i插入,I行首,A行尾,o下一行 O上一行

esc回到编辑模式
编辑模式:进入末行模式
shift zz #保存并推出

末行模式:set nu

#是依据光标位置来确定

#dd删除一行 3dd删除三行

#yy复制一行
#dw删除一个单词
#3dw删除三个单词
#p粘贴
#yw 复制一个单词,3yw复制三个单词
#u撤销
#zz 保存退出

#不要碰
ctrl+s锁屏 ctrl+q解锁

编辑模式

:wq 保存退出
:q! 强制退出
:set nu 行号
:set nonu 取消行号
:/libai #查找libai字符

:s/libai/jl/g #更换当前行内所有libai为jl
:s/libai/jl #更换光标后第一个libai为jl
:g/libai/s//jl/g #文件内所有libai换成jl

如果使用vim修改文件后没有正确退出,linux会自动生成一个以该文件名的.swp文件存储修改内容,再次vi 文件后会提示你,所以必须删除文件名.swp才会不提示

6.1.3计算机之间传输文件

windows和linux

yum install lrzsz -y
rz #xshell直接打开上传即可
sz profile#下载profile到windows

linux和linux

#本机地址192.168.188.108
cd /etc
scp bashsrc root@192.168.188.109:/home/rince #向109传输文件

scp root@192.168.188.109:/home/rince/bashsrc /home/prince 
#去109拿取bashsrc到本机prince位置上

6.1.4文件大小df/du

df -h#查看文件分区

du查看指定文件大小

du -h --max-depth=1 /etc #迭代深度为1,也就是对多到etc的子节点为止所有文件大小展示

6.1.5文件解压缩

tar

#tar解压
tar -zxvf apache-tomcat-8.5.47.tar.gz 
 #zx解压,v过程,f文件

#tar压缩 
tar -zcf tomcat.tar.gz apache-tomcat-8.5.47
  #tomcat.tar.gz压缩后名字,apache-tomcat-8.5.47压缩的文件夹
  tar -zxf tomcat.tar.gz -C /opt/
  

zip

yum install zip#安装
zip -r tomcat.zip apache-tomcat-7.0.61 #压缩为tomcat.zip
unzip tomcat.zip

6.2网络系统

路由表

route -n
route add defaul gw 192.168.204.1 # 添加默认路由一个 gw表示默认
 route del default gw 192.168.204.1 #删除默认路由
 
 #共有gw和dev两个参数,分别表示设定下一跳路由位置和要使用的网络接口
 route add -net 192.168.205.0/24 gw 192.168.204.1 dev ens33
 #添加一条默认路由,发送至192.168.205.0/24的信息通通选择192.168.204.1转发出去,通过ens33接口(网卡)出动
 
 route add -host 192.168.78.25 gw 192.168.204.1
 #此命令后可以访问主机ip为192.168.78.25的主机了,

注意上述添加路由方式在主机重启后都不会保存,所以我们要把命令写在 /etc/rc.d/rc.local下,开机自动执行命令

6.2.1普通网络命令

**安装网络命令:**yum install net-tools -y

ifconfig -a # 查看所有网络接口(卡)信息 
ip addr#centos用这个新的 
ifconfig ens33 192.168.188.108 netmask 255.255.255.0 或者 ifconfig ens33 192.168.188.108/24
ifconfig ens33 192.168.188.108/24 up #立即生效

#网卡信息配置文件 /etc/sysconfig/network-scripts/ifcfg-网卡名称

#网络重启
service network stop
service network start

/etc/init.d/network restart

ifconfig ens33 down  
ifconfig ens33 up

ifdown ens33
ifup ens33

#域名服务器配置文件
cat /etc/resolv.conf
#ping
ping -f -c 2000 192.168.188.106 #发送2000个数据包,采用权限设置
ping -s 10000 192.168.188.106 #指定发送10000大小的数据包
ping -I eth0 192.168.188.106 #指定测试eth0网卡


#traceroute 测试路由通信情况
traceroute 192.168.188.108 # 测试本机到192.168.188.108之间所有路由通信情况 

#netstat 产看网络接口使用情况
netstat -i  #网络接口情况
netstat -t #tcp接口使用情况
netstat -u #udp使用情况
netstat -n #ip接口使用情况
netstat -a #套接字使用情况
   #套接字Socket:支持TCP/IP路通信的基本操作单元,可以将套接字看作不同主机之间的进程进行双端通信的端点。套接字只与同一域下的套接字交换数据,不同进程使用相同的域通过Internet协议簇通信。网络进程通信的API接口
   #通信时一个网络应用长须将要传输的一段信息写入他所在主机的Socket套接字内,该socket通过与网络接口相连的传输介质(网线?)将这段信息传入到另一台主机的Socket里,使对方接收信息。
   #Socket由ip地址和端口结合的,提供向应用层发送数据包的机
   #ip地址192.168.188.108 端口为23 则套接字socket为192.168.188.108:23
netstat -atu #查看所有端口协议使用状态   

主机名称

#修改hostname
 hostname school #临时修改,重启后失效
 vi /etc/hostname#修改hostname文件永久改变

#主机配置文件
cat /etc/sysconfig/network
#NETWORKING=yes
#NETWORKING_IPV6=no 不开启ipv6
#HOSTNAME=Web1.example.com 主机名修改 还是建议上面方法修改
service network restart 

dns解析

#windows c:\Windows\System32\drivers\etc\hosts

#linux cat /etc/hosts
vi /etc/hosts
#增加192.168.188.108 node
#可以通过ping node直接访问该ip
#dig域名解析工具,无法登陆访问,可以通过这个检查解析内容‘
  #能被解析,即本地hosts无误,本地系统与dns服务器可以双向通讯
yum install bind-utils #安装dig和nslookup

dig baidu.com #解析百度地址 下图server为dns服务器地址
#/etc/resolv.conf  存储dns服务器地址
dig @61.139.2.69 www.163.com #指定dns服务器地址61.139.2.69去解析地址www.163.com

在这里插入图片描述

**环回地址:**自己访问本机也需要ip,这个地址为环回地址

核心路由表:存储ip与子网掩码与运算后的网络地址指向

netstat #查看网络状态
netstat -anp #查看端口使用情况

netstat -r #核心路由表,存储ip与子网掩码与运算后的网络地址指向

telnet与ping

ping #查看ip地址是否通
ping 192.168.188.109

telnet #查看某一个端口是否同
telnet 192.168.188.109 22

curl网络地址资源定位

curl baidu.com #
curl -x get http://www.baidu.com

6.2.2防火墙

centos7使用firewalld代替iptables命令

systemctl status firewalld.service #查看防火墙状态
systemctl stop firewalld.service   #本次开机关闭防火墙
systemctl disable firewalld.service#永久关闭防火墙

firewall-cmd --state

#防火墙开启端口正确操作
#添加 
firewall-cmd --zone=public --add-port=80/tcp --permanent
 firewall-cmd --reload#重新载入
 firewall-cmd --zone=public -- quert-port=80/tcp#查看端口
 firewall-cmd --zone=public --remove-port=80/tcp --permanent#删除端口

在这里插入图片描述

6.2.3机密算法

不可逆加密算法

加密后无法计算出原始数据

hash算法和md5算法

md5用于文件校验

对称加密算法

先加密在解密,使用相同的密钥对数据进行加解密。

登录信息用户名和密码加密、传输加密、指令加密

DES、3DES、RC4、Blowflsh

原文、密钥(私钥),密钥不对数据加解密失败

非对称加密算法

公钥和私钥,加密密钥和解密密钥不同,公钥密钥和私有密钥是一对的

加解密速度慢、计算量大

算法:RSA、DSA

6.2.4主机间相互免密钥(非对称加密,公私钥)

#通过ssh命令免密钥连接到其他主机
 #生成密钥
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa 
  #生成私钥id_rsa、公钥id_rsa.pub
#发送公钥钥给对方
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.188.109

#去对面192.168.188.109查看公钥是否发送成功
cat ~/.ssh/authorized_keys

#去对端查看发送过来的公钥信息
cat /root/.ssh/known_host


#对端拥有公钥后ssh链接时跳出 are  you sure you want to continue connecting?
  #是known_host内容被被写入,有两个解决方案
 ssh-v -o GSSAPIAuthentication=no root@192.168.188.109
 #修改ssh_config文件
 vi /etc/ssh/ssh_config
  #此文件最后添加
    #StrictHostKeyChecking no
    #UserKnownHostsFile /dev/null

在这里插入图片描述

上面是发送数据流程,两次校验主要时怕数据发生改变

6.2.5 linux的bonding

支持bonding服务需要有bios芯片才能生效

linux2.4版本以上提供bonding技术,把服务器上n格物理网卡在系统内部抽象为一个逻辑上网卡,用以提高网络吞吐量,实现网络冗余负载等

**负载均衡模式:**多个网络接口绑定为一个网络接口,这些网络接口都使用同一个ip地址mac地址发送信息,发送信息时会根据不同算法选择不同的网络接口发送

**冗余模式:**保证每个服务器都有两个链路,即使主链路断开也有备用链路传输

在这里插入图片描述

modinfo bonding #查看bonding模块信息

bonding设置有七种模式

  1. 0,轮转策略模式会将要发送的数据平均的从所有绑定的网络接口中发送提供负载均衡和网络冗余,默认启用

  2. 1,主备模式,主连接断开启用备用连接(接口),提供网络冗余,容错高,端口利用率低

  3. 2,基于地址的抑或算法,作用与1模式一致,算法不同,不常用

  4. 3,将所有要发送的数据从所有网络连接里发送出去,只提供网络冗余

  5. 4,利用802.3ad协议对网络连接聚合,需要交换机才能使用

  6. 5,自适应负载均衡模式,系统自动测定发送和接收使用的接口和速度

  7. 6,使用ARP控制的负载均衡模式,不需要交换机也能使用

Centos7配置bonding

将服务器内两张物理网卡ens33\ens34绑定为一个逻辑网卡bond0

linux下网卡bonding配置 - opss - 博客园 (cnblogs.com)

#关闭和停止networkmanager服务
systemctl stop NetworkManager.service #stop service
systemctl disable NetworkManagre.service#stop restart service 
#加载bonding模块
lsmod | grep bonding #确认模块是否先开启,已开启就不用加载
  #bonding  13151 0
modprobe --first-time bonding
#创建基于bond0接口的配置文件,添加逻辑网卡
vi /etc/sysconfig/network-scripts/ifcfg-bond0

DEVICE=bond0
TYPE=Bond
IPADDR=172.16.0.183 
NETMASK=255.255.255.0
GATEWAY=172.16.0.1
DNS1=114.114.114.114
USERCTL=no
BOOTPROTO=none
ONBOOT=yes
BONDING_MASTER=yes
BONDING_OPTS="mode=6 miimon=100"

#修改网卡ens33配置信息
vi /etc/sysconfig/network-scripts/ifcfg-ens33

DEVICE=ens33
USERCTL=no
ONBOOT=yes
MASTER=bond0 # 需要和上面的ifcfg-bond0配置文件中的DEVICE的值对应
SLAVE=yes
BOOTPROTO=none
#修改网卡ens34配置信息
vi /etc/sysconfig/network-scripts/ifcfg-ens34

DEVICE=ens34
USERCTL=no
ONBOOT=yes
MASTER=bond0 # 需要和上面的ifcfg-bond0配置文件中的DEVICE的值对应
SLAVE=yes
BOOTPROTO=none

#重启网络服务 测试
systemctl restart network 
 #查看接口状态信息,无报错就正确
 cat /proc/net/bonding/bond0
 #查看网卡信息
 ifconfig -a

6.2.6 网络接口设置

创建与删除虚拟网卡(虚拟机)

(4条消息) Linux下创建虚拟网卡_sun1 72270102的博客-CSDN博客_linux创建虚拟网卡

sudo ifconfig eth0:0 192.168.1.5/24 up
sudo ifconfig eth0:0 down

6.3 linux的时间与日期

date #日期
date -s # 修改时间
date -s 2022-01-22
date -s'2022-01-24 11:11:11'
date '+%Y%M%D%H%M%S'
#

时间同步策略

防止因不同服务器时间不同步导致的服务无法执行

#时间同步策略ntp
yum install ntp -y

ntpdate cn.ntp.org.cn#同步远程服务器的时间

#ntp时间配置文件
vi /etc/ntp.conf


#本地搭建ntp服务器
service ntpd start
vi /etc/ntp.conf


#ntp.conf

#权限控制
restrict default kod nomodify notrap nopeer noquery #拒绝v4用户
restrict -6 default kod nomodify notrap nopeer noquery #拒绝v6用户
 #打开一部分ip允许访问
restrict 210.72.145.44#授权国家授时中心服务器访问本地NTP
restrict 133.100.11.8#授权133.100.11.8访问本地ntp
restrict 127.0.0.1
restrict -6 ::1
restrict 192.168.188.2 mask 255.255.255.0 nomodify #本地网段授权访问
#源服务器
server cn.ntp.org.cn prefer
#差异分析
driftfile /var/lib/ntp/drift
keys /etc/ntp/keys

6.4用户-组-权限

6.4.1用户

添加用户(建议root下)

对于新用户会创建同名的组和家目录(在home下)

useradd libai #home在 /home/libai
pwd libai

删除用户(建议root下)

userdel -r libai

修改用户信息

usermod -l libai baijuyi#用户libai更改为baijuyi
usermod -L libai#锁定libai用户
usermod -U libai#解锁libai用户

切换用户

su baijuyi

配置文件

cat /etc/shadow
#存储所有用户名密码,包括root

cat /etc/passwd
#用户名、编号、组编号、家目录位置
7.6 0-999为系统用户 1000+为普通用户
6.5 0-499系统用户 500+普通用户

6.4.2用户组

groupadd tang #创建组
groupdel tang#删除组
groups libai#查看用户对应组
groupmod -n tang song#修改组名

usermod -g tang libai #用户libai添加到tang组(主组)
usermod -G song libai#用户libai添加附属组song(附属)

groups libai
#libai: tang song

用户组权限设置

权限展示,去掉前面的d是三个一组

第一组是所属用户权限,第二组是所属用户组的权限 第三组是其他人(不是该用户也不属于此组)的权限

#第一组是所属用户权限,第二组是所属用户组的权限 第三组是其他人(不是该用户也不属于此组)的权限
r-x#读和执行权限
rw-#读写权限
r--#只读权限
---#没有权限

drw-r--rwx libai song 131 124 12:24:56 kkkk.txt
#libai用户有读写kkkk.txt权限,song用户组对于kkkk.txt只有读权限,其他用户有读写执行的三个权限

6.4.3用户权限修改

Linux权限是UGO模型,即用户本人权限+用户组权限+其他人的权限。

修改文件权限要从rwx和ugo入手

修改文件权限

对于没权限用户要如何修改文件,以下两个思路

1、更换文件的ugo权限

2、更改文件的所属组或者所属用户

chown libai /var/lucky
#将lucky文件所属用户更改为libai
chown :tang /var/lucky #文件所属组更换为tang


chmod o+w /var/lucky 
#为lucky文件的其他人权限加上w写权限

chmod go+w /var/lucky #用户组和其他人添加w写权限

6.5管道与重定向

6.5.1管道

进程之间进行信息交互的手段,也就是把前面计算结果传递给后面

cat profile|grep if

目前区分为两种:匿名管道和命名管道

匿名管道指不带名字标识的管道,用于父进程与其子进程之间的通信

命名管道则是带有名字标识符的管道,支持任意两个进程之间的通信。

命名管道 Linux命令?管道符号-grep\head\tail\wc\ls?

ls -l|wc、grep apple.txt| grep configure、管道命令符|

6.5.2重定向

更改数据显示位置

改变数据输出的位置,方向-

0 in 1 out 2 err #1标准输出,2是错误输出
o ls ! 1> lucky标准输出。ls / > lucky标准输出o ls abcd 2:lucky销误输出>替换>>追加
。 ls ! 1>> luckyo ls ! 1> lucky·结合使用
ls !etc. i abc > lucky 2>&1o ls !etc iabc >> lucky 2>&1·信息黑洞
ls fetc iabc ;> /dev/null 2>&1

ll /opt > test #输送显示信息到test 单箭头覆盖双箭头追加
ll /root >> test
ll /opt 2> test02 #错误信息覆盖到test02
ll /etc/as >> test02 2>&1 #无论错误正确信息都追加到test02

6.6LINUX进程信息

6.6.1进程信息

linux里所有进程都实例化为文件

前台进程

ps -ef #进程ID PID;开启当前进程的父进程ID PPID
#进程ID PID;开启当前进程的父进程ID PPID   
ps -aux #所有信息
ps -aux --sort -pcpu #所有信息排序
 top #系统内存使用情况
#干掉进程
kill -9 8605 #加上进程编号

后台进程

ping www.baidu.com >> /home/rince/baidu & #变成后台进程

nohup ping www.baidu.com >> /home/rince/baidu 2>&1 &
#nohub防止后台进程关闭,正确错误信息都输入到baidu里,才不会报错
jobs -l #查看后台进程信息 jobs简略信息

6.7 Linux软件安装

6.7.1环境变量

执行命令时会从当前的目录找,如果找不到会去环境变量$path查找安全1

$PATH #查看环境变量文件位置
Linux每次修改完成后都需要重新加载环境变量文件:source /etc/profile
cat /etc/profile #linux系统环境变量文件
#修改内容就添加到最后即可


#用户环境变量,设置后只对用户管用
cat /root/.bash_profile

6.7.2 rpm软件安装与卸载

java linux环境安装rpm

rpm -ivh jdk-7u67-linux-x64.rpm #固定rpm -ivh +文件名

#检查安装是否成功要记得查找软件的真实名字,不是真实名字无法判断是否成功
rpm -qa #显示已安装软件的所有信息,显示软件安装后的真实名字
rpm -qa | grep jdk
rpm -q jdk

find / -name java
whereis java  #查找java位置

#本次测试安装的是jdk环境,所以需要配置环境变量
vi /etc/profile
 #后缀添加
 export JAVA_HOME=/usr/java/jdk1.7.0_67
 export PATH=$JAVA_HOME/bin:$PATH
 #修改完成后重新加载配置文件
 source /etc/profile

#卸载软件,必须使用软件的真实名字
rpm -q jdk-17-17.0.2-ga.x86_64

tomcat 压缩包安装

tar -zxvf apache-tomcat-8.5.75.tar.gz#解压缩文件
mv apache-tomcat-8.5.75 /opt #将解压后文件夹移动到opt软件安装位置
ll
cd /opt/apache-tomcat-8.5.75/bin #进入tomcat配置使用界面
./ startup.sh#启动tomcat

cat ../webapps/ROOT/index.jsp #tomcat主页面

安装mysql,这里提供一个最快方案

#1、安装mysql依赖环境
yum install perl net-tools -y
#卸载mariadb
rpm -qa| grep mariadb
rpm -e --nodeps mariadb-libs-5.5.60-1.el7_5.x86_64
rpm -qa| grep mariadb

#2、安装mysql,通过其他方式传递mysql压缩包过来,建议按照顺序安装,否则可能安装失败

    tar -xvf mysq7-8.o.18-1.e17.x86__64. r pm-bund1e.tar
     #必须按照顺序安装
     # CentOS安装rpm安装MySQL时爆出警告: 警告:MySQL-server-5.5.46-1.linux2.6.x86_64.rpm: 头V3 DSA/SHA1 Signature, 密钥 ID 5072e1f5: NOKEY 原因:这是由于yum安装了旧版本的GPG keys造成的 解决办法:后面加上  --force --nodeps 如:  rpm -ivh MySQL-server-5.5.46-1.linux2.6.x86_64.rpm --force --nodeps 从 RPM 版本 4.1 开始,在安装或升级软件包时会检查软件包的签名。
    rpm -ivh mysq1-community-common-8.0.18-1.e17.x36_64.rpm # --force --nodeps 后缀报错后需要添加
    rpm -ivh mysq7-community-1ibs-8.0.18-1.e17.xE6_64.rpm # --force --nodeps 后缀报错后需要添
    rpm -ivh mysq7-community-client-8.0.18-1.e17.x86_64.rpm # --force --nodeps 后缀报错后需要添
    rpm -ivh mysq7-community-server-8.0.18-1.e17.x86_64 .rpm # --force --nodeps 后缀报错后需要添



#3、启动软件,查看mysql安装状态
systemctl start mysqld
systemctl status mysqld


#4、mysql安装成功后初始密码查询
cat /var/log/mysqld.log | grep password
 #进入mysql修改密码
 mysql -u root -p
 
#5、修改密码
#5.1、----------修改Mysq1密码8.0版本输入命令: 
#mysql安全性较强,新数据设置密码必须先按照默认规定设置一个密码然后才能修改variables里的密码属性规则 所以先执行一个设置新密码操作,然后查看variables修改规则
 ALTER USER 'root'@'localhost' IDENTIFIED BY 'aA@123456789'; 
 show variables like '%validate%'#查看密码规则属性
set g1obal validate_password.po1icy=Low;
set global validate_password.1ength=6;
#更改密码
ALTER USER 'root'@'1ocalhost'IDENTIFIED BY '123456' 
#更新用户密码加密
#ALTER USER 'root'@'localhost'IDENTIFIED wITH mysql_native_password BY '123456';

#刷新权限
FLUSH PRIVILEGES;
#5.2、一——-------修改Mysq1密码5.7版本输入命令:
set global validate_password_po1icy=Low;
set global validate_password_length=6;
alter user root@1ocalhost identified by '123456 ';

#6、修改mysql链接地址,mysql上面的密码只支持本机本地登录,所以需要我们开启远程登陆
use mysql; #使用mysql库
select host,user from user; #可以看到目前不同会话下可以访问数据库只有本地localhost,这里localhost可以改成ip,指定只有某一个远程主机能访问数据库

update user set host='%' where user = 'root';
commit;
exit;

#7、设定完成后重启mysql
systemctl restart mysqld;
#拿workbenach或者native远程连接试一下
 

6.7.3 yum安装与修改源

自动指定软件安装中的依赖关系,软件缺依赖就自动安装依赖

yum search ifconfig #搜索包所需要依赖
yum install net-tools #安装依赖

yum info net-tools #查看安装包的信息 

yum list #查看安装包信息
yum list | grep jdk



更换yum的下载原

#下载wget软件
yum install wget -y

#进入yum配置文件
cd /etc/yum.repos.d
vi CentOS-Base.repo


#[base]
#name=Centos-sreleasever - Base
#mirrorlist=http://mirrorlist.centos.org/?#release=$releasever&arch=$basearch&repo=0s&infra=$infra#baseurl=http: / /mirror.centos.org/centos/$releasever/os/$basearch/

#gpgcheck=1
#gpgkey=file : / lletc/ pki/ rpm-gpg/RPM-GPG-KEY-Centos-7
#released updates
#[updates]
#name=Centos-$releasever - Updates
#mirrorlist=http://mirrorlist.centos.org/?#release=$releasever&arch=$basearch&repo=updates&infra=$infra#baseurl=http: / /mirror.centos.org/centos/$releasever/updates/sbasearch/
#gpgcheck=l
#gpgkey=file:  i fetc/pki/ rpm-gpg/RPM-GPG-KEY-Cent0S-7
#additional packages that may be useful
#[extras]
#centos-Base.repo"44L,1664c

#此处更换阿里云下载源
vi Cent0s-Base.repo
mv /etc/yum.repos.d/CentOS-Base.repo letclyum.repos.d/Cent0S-Base.repo.backup #存一下原来镜像地址防止配置失败
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo 
#是大写的o
yum clean all #清空以前的yum下载镜像缓存
yum makecache #重新创建yum,也就是刚才加入的文件

安装mysql

6.8 Linux处理文本常用命令

6.8.1 切分cut 、排序sort 、统计wc

cut

cp /etc/passwd /home/rince
cut -d ':' -f1,2,3,4,7 passwd | grep root
#切分文件passwd,选择文件中含有root的行以:进行切割,显示该行的1,2,3,4,7列
cut -d ':' -f1,2,5,7 passwd 
cut -d ':' -f2,3,7 passwd
#切分文件中所有行的1、2、5、7列展示

sort

sort passwd #排序passwd文件内容,默认按照首字母顺序

sort -t ':' -k3 passwd #每一行数据切分,按照第三列排序正序
#实际排列出来不是按照数字顺序排列的,字符串按顺序比较,按照我的理解是1001与2比,2补正成2000,2000>1001所以2的放后面。待定
#
sort -t ':' -k3 -r passwd#逆序排列
sprt -t ':' -k3 -n passwd#按照数值大小排列,字母排在数字前面

在这里插入图片描述

wc统计单词等

wc passwd 
#返回:22 31 983 passwd
#依次是文件行数、单词数量、字符数量、被统计的文件名
#单词数量少是因为,判断是不是单词按照的是空格,前后有空格的算单词,以空格分割单词,没有的不算单词,所以实际统计单词数量会变少
wc -l passwd # 22
wc -w passwd#31
wc -c passwd #983

6.8.2 标配查找grep

ps -ef | grep ifconfig
ll | grep passwd
grep root /home/prince/passwd /etc/shadow#查找passwd和shawdow里的root信息
grep -n root /home/prince/passwd#显示行号
grep -nvi root passwd --color=auto

6.8.3 中配流编辑器sed

利用脚本处理文本文件,编辑文件,seq命令是操作,常用增删改查

Linux实战教学笔记12:linux三剑客之sed命令精讲 - 陈思齐 - 博客园 (cnblogs.com)

cat /etc/redhat-release #查看linux版本
uname -r
sed --version #查看seq version
sed [options] [sed-commands] [input-file]
#选项 sed命令 输入命令
# sed软件从文件或管道中读取一行、处理一行、输出一行;以此循环

#[options] 选项
-n #取消默认sed软件输出,与p连用
-e #一行命令执行多条语句
-f # 后接sed脚本文件名
-r #正则表达式
-i #直接修改文件内容(磁盘上),不输出到终端。不用i修改只是修改内存中数据,不会更改原本数据

#[sed-commands]sed命令
a 追加,在指定行后添加一行或多行文本*#5a
c 取代指定的行
d 删除指定的行*
D 删除模式空间的部分内容,直到遇到换行符\n结束操作,与多行模式相关
i 插入,在指定行前添加一行或多行文本*
h 把模式空间的内容复制到保持空间
H 把模式空间的内容追加到保持空间
g 把保持空间的内容复制到模式空间
G 把保持空间的内容追加到模式空间
x 交换模式空间和保持空间的内容打印不可见的字符
n 清空模式空间的内容并读入下一行
N 不清空模式空间,并读取下一行数据并追加到模式空间*
p 打印模式空间内容,通常p会与选项-n一起使用*(大写)打印模式空间的内容,直到遇到换行符\n结束操作
q 退出Sed从指定文件读取数据
s 取代, s#oldt#new#g==>这里g是s命令的替代标志,注意和g命令区分。*
w 另存,把模式空间的内容保存到文件中
y 根据对应位置转换字符
: label 定义一个标签
b label 执行该标签后面的命令



cat >person.txt<<KOF
#使用一条cat命令创建多行文本包含上面内容,以KOF为结束结束文本创建
# KOF表示终止输入
#单行增
sed '5a 106,dandan,CTO' /home/prince/person.txt
 #在文件第五行后面添加内容 106,dandan,CTO
sed '2a 106,dandan,CTO' /home/prince/person.txt
 #在文件第2行后面添加内容,文件显示在第三行
 
#多行增方式一 \n
sed '2a 106,dandan,CSO\n107,bingbing,CCO' /home/prince/persion.txt



#引号作用 
sed '2a 106,dandan,CTO' /home/prince/person.txt 
#单引号:所见即所得,将单引号内的内容原样输出,阻止所有字符的转义
#双引号:优先执行输出内容的命令然后输出内容
sed "6i $PATH" person.txt

在这里插入图片描述

#seq删除 d
sed '3d' /home/prince/persion.txt #第三行被删除
sed '2,5d' /home/prince/persion.txt #2到5行内容删除
#使用正则表达式
 #sed使用正则表达式会找到所有相关字段
sed '/zhangyang/d' /home/prince/persion.txt 
$代表行尾

6.8.4 顶配awk

太多了自己查

awk常见操作整理(更新) - Peterer~王勇 - 博客园 (cnblogs.com)

(7条消息) awk常用操作_baidu_38981831的博客-CSDN博客

awk常见基本使用 - H&K - 博客园 (cnblogs.com)

ifconfig -a|grep -o -e 'inet [0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}'|grep -v "127.0.0"|awk '{print $2}'
#获取本地ip

ifconfig -a|grep -o -e 'inet [0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}'
#获取本地ip

ifconfig | grep broadcast| awk "NR==1" | awk -F" " '{print $2}'

7、Linux系统启动流程

CentOS7启动流程 - 苦逼运维 - 博客园 (cnblogs.com)

7.1、启动计算机硬件BIOS

  • 读取时间
  • 选择对应启动模式(U盘USB、HDD系统盘)

7.2、LINUX系统回去找/boot目录,也就是目录引导分区目录,引导系统启动

系统会转交控制权给引导装载程序GRUB ,会读取/boot/grub/grub.conf内容,根据内容加载linux内核

#centos6 grub配置文件是 /boot/grub/grub.conf

#centos7 /boot/grub/存的是硬盘第一分区
#centos7 以上是 /boot/grub2/grub.cfg、/etc/grub.d、/etc/default/grub三个位置
 #/boot/grub2/grub.cfg,规定了配置文件的执行顺序

#一般 /etc/grub2.cfg调用/etc/grub.d/10_linux配置不同内核,这里就导致开机入口会出现两个默认选项的系统,一个普通模式一个救援模式,下图二

在这里插入图片描述
在这里插入图片描述

(5条消息) Centos7 grub的配置文件及排错 (转载)_人生需要改变,学习需要实践-CSDN博客_centos grub

#修改grub配置,不要直接修改/etc/grub2.cfg。如果后期升级内核,所有的配置都会失效。如果需要自定义这个文件,我们可以修改对应的脚本或者 /etc/default/grub 文件,然后通过grub2-mkconfig重新生成grub.cfg

#修改默认启动等待时间(动了上下键之后才能生效),上图二
 vi /etc/default/grub 
   #修改GRUB_TIMEOUT=-1 每次都需要手动确认
 grub2-mkconfig -o /boot/grub2/grub.cfg #重新编译生成配置执行顺序文件  
 
#grub 编辑界面加密
#开机界面输入e进入编辑窗口,进入rescue emergency或者shell模式,有需要会对进入时进行加密
vi /etc/grud.d/00_header #文件末尾加入
 #cat <<EOF
 #set superusers='admin'
 #password admin pwd123
 #EOF
 grub2-mkconfig -o /boot/grub2/grub.cfg
#之后开机界面输入e是就需要用户密码进入了

7.3系统初始化阶段

简述流程

  1. 初始化系统,依照/etc/inittab文件,初始化进程是systemd,默认执行target配置文件/etc/systemd/system/default.target。

  2. 然后执行sysinit.target来初始化系统和basic.target来准备操作系统

  3. 启动multi-user.target下的本机与服务器,检查/etc/rc.d/rc.local文件是否有用户自定义脚本执行(即开机自启动服务脚本)

  4. 之后执行multi-user的getty.target登陆服务,检查default.target是否有其他服务启动

    ll 检查可知

    /etc/systemd/system/default.target指向了/lib/systemd/system/目录下的graphical.target或multiuser.target。

    而graphical.target依赖multiuser.target,multiuser.target依赖basic.target,basic.target依赖sysinit.target,所以倒过来执行。

CentOS7启动流程 - 苦逼运维 - 博客园 (cnblogs.com)

7.3.1算机系统开始启动读取初始化配置文件,找到runlevel的运行级别。

  • vi /etc/inittab

在这里插入图片描述

图形界面默认状态5,没图形默认runlevel=3

  • 启动时控制计算机运行级别runlevel

  • runlevel级别

0halt关机
1single user mode单用户模式
2multiuser withoutnfs 多用户无网络状态·
3full multiuser mode多用户完整模式
4unused保留模式
5x11用户界面模式
6reboot重启模式

runlevel=3时开始启动对应服务和组件,一般正常启动默认模式3

systemctl set-default TARGET.target#设置系统默认启动等级,正常启动的等级

System概述

linux下初始化init软件,提供更加优秀的框架以表示服务间关系

7.3.2开始默认引导公共组件或者服务

vi /etc/rc.d/rc0/1/2/3/4/5/6.d /rc.sysinit/init.d

在这里插入图片描述

#rc.d里面有rc0-6个文件夹,代表7个启动等级完全启动所需的不同引导文件,还含有公共信息init.d文件夹,存储共同所需内容

#rc.local文件夹下添加开机就启动的服务
#开机就启动的服务设置有两种方式

7.4、开始加载对应runlevel的服务

vi /etc/rc.d/rc3.d
#k开头文件,代表关机时需要启动服务
#S开头,代表启动时需要加载服务
#数字开头,代表开启或关闭时的顺序
#对应runlevel的启动文件都是软连接,连接到/etc/rc.d/init.d

开机就启动的服务设置有两种方式

  1. 添加到/etc/rc.d/rc.local文件下或者添加到对应等级的文件加下;
  2. 如无界面的centos默认正常开启等级是runlevel=3,将设置添加到/etc/rc.d/rc3.d,或者选择添加到/etc/rc.d/rc.local文件内

5.1开机自启动服务,rc.local启动文件下

#创建一个脚本文件夹
mkdir -p /usr/local/scripts

vi /usr/local/scripts/hello.sh
#  #!/bin/bash
#  yum info ntp && ntpdate cn.ntp.org.cn 
chmod ugo+x /usr/local/scripts/hello.sh

vi /etc/rc.d/local.d
 #添加语句
 # /usr/local/scripts/hello.sh

date -s '21:21:21'
date

reboot
date

5.2 rc3.d开机自启动方式

#首先创建一个脚本
vi /home/rince/initdate.sh

# #!/bin/bash
# #chkconfig: 2345 88 99 
   #这里表示runlevel等级2345都添加一个,88表示启动时显示是s88执行的顺序,99表示是k99删除时顺序
# #description : auto_run4
# #开机自启动同步时间
#yum info ntp &&ntpdate cn.ntp.org.cn

#添加执行权限
chmod a+x initdate.sh

#复制文件到目录下
cp initdate.sh /etc/init.d/

#添加服务
chkconfig --add /etc/init.d/initdate.sh

reboot

7.6、定时任务设定

系统服务中心,由crond服务负责执行启动周期任务

systemctl status crond.service #检查crond服务状态

crontab -e #添加任务编辑当前用户任务列表文件修改

#crontab -e修改规则
 # *表示任意时间 -表示区间 ,表示分割时段 /n表示分割
 #*/5 * * * *command 每5分钟执行一次
# * * * * * command 分时日月周+命令
30 21 * * * /usr/local/etc/rc.d/lighttpd restart
30 21 1,10,20 * * /usr/local/etc/rc.d/lighttpd restart #每月的1,10,20号的21:30进行执行服务
30-40 21 * * * /usr/local/etc/rc.d/lighttpd restart #每天的21:30到21:40之间执行服务
*/5 * * * * /usr/local/etc/rc.d/lighttpd restart #每5分钟执行一次
0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart #每周一到周三在4号当天11点执行服务
0 12-21/5 * * * /usr/local/etc/rc.d/lighttpd 
#每天12点到21点中每隔5小时执行一次

举例

#编写一个脚本test.sh 位置/home/rince
vi /home/rince/test.sh

##!/bin/bash
#dname = `date "+%Y%M%D%H"`
#mkdir -p /home/rince


chmod a+x /home/rince/test.sh

crontab -e #执行任务列表

#重启cront服务让其生效
systemctl restart crond.service

cront用法

systemctl restart crond.service#重启crond服务
crontab -I#查看当前定时任务
vi /var/spool/mail/root #查看任务的历史,每个用户单独一个文件
crontab -r #清楚任务

开机自启动脚本,编写脚本尽量在linux里编写,否则会因为windows里换行符等问题使其运行不了,千万注意

#!/bin/bash

echo -e "\e[1;31m【--------------------------------opt和var下创建lucky文件夹】\e[0m" 
mkdir -p /opt/lucky
mkdir -p /var/lucky
mkdir -p /usr/local/script

echo -e "\e[1;31m【--------------------------------禁用防火墙】\e[0m"
systemctl stop firewalld
systemctl disable firewalld
systemctl status firewalld

echo -e "\e[1;31m【--------------------------------修改selinux】\e[0m"
#关闭selinux模块
sed -i '/^SELINUX=/c SELINUX=disabled' /etc/selinux/config

echo -e "\e[1;31m【--------------------------------install wget】\e[0m"
yum install wget -y

echo -e "\e[1;31m【--------------------------------修改yum原】\e[0m"
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all
yum makecache

echo -e "\e[1;31m【--------------------------------安装常用软件】\e[0m"
yum install man man-pages ntp vim lrzsz zip unzip telnet perl net-tools -y
echo -e "\e[1;31m【--------------------------------同步系统时间】\e[0m"
yum info ntp && ntpdate cn.ntp.org.cn

echo -e "\e[1;31m【--------------------------------DNS域名配置,免除解析】\e[0m"
echo "192.168.108.110 root ">> /etc/hosts
echo "192.168.108.108 basenode ">> /etc/hosts

echo -e "\e[1;31m【--------------------------------安装jdk\e\e[0m"
rpm -ivh /home/prince/jdk-17_linux-x64_bin.rpm
echo echo 'export JAVA_HOME=/usr/java/jdk1.7.0_67'>> /etc/profile
echo 'export PATH=$JAVA_HOME/bin:$PATH'>> /etc/profile

8、SELINUX安全增强型linux模块

linux的安全子系统,2.6版本以上内核自动集成selinux模块

8.1selinux基本概念

**主体Subject:**等同于进程

**对象Object:**被主体subject访问的资源,可以是文件目录端口设备

政策与规则(Policy和Rule):系统中有大量文件和进程,为节省时间和系统开销,选择性对某些进程进行管制、

一个政策对应多项规则,规则可以手动添加

Centos7有三套政策:

  1. targeted:对大部分网络进程进行管制,系统默认使用
  2. minimum:以targeted为基础只对选定的网络服务进程管制
  3. mls:多级安全保护,对所有进程管制,最严格的政策,配置难度大

安全上下文(Security Context):

selinux核心所在,自己分为进程安全上下文文件安全上下文

进程安全上下文:文件安全上下文=1:n

只有以上两者对应上了进程才能访问文件,对应关系由政策中的规则决定。

文件安全上下文由文件创建位置和创建文件的进程决定,有一套系统默认值设置

  1. 安全上下文有四个字段用:隔开 system_u:object_r:admin_home_t:s0

单纯的文件移动不能改变文件的安全上下文

Selinux工作模式

  1. **强制enforcing:**违反selinux规则行为会被阻止然后记录到日志中
  2. 宽容permissive: 违反规则的行为会记录到日志中,调试使用
  3. **关闭disabled:**关闭selinux
#selinux工作模式配置文件
/etc/selinux/config
#selinux日志
auditd.service

8.2 selinux基本操作

#安装软件包
yum  install policycoreutils-python -y
#查询安全上下文(文件)
ls -Z /etc
ls -Z /home/prince

#查询进程的安全上下文
ps auxZ | grep -v grep | grep nginx
ps axuZ | grep -v grep | grep bash #查找脚本执行的进程上下文 最左边就是,如果selinux是disable状态则不会显示上下文

#手动修改文件或目录的安全上下文
 #chcon -u修改安全上下文用户字段 -r修改安全上下文角色字段 -t修改安全上下文类型字段 -l修改安全上下文级别字段
 # -reference修改与指定文件或目录一致的安全上下文 -R递归操作 -h修改软连接的安全上下文
chcon -u aaa_u -r bbb_r -t ccc_t test
 #test文件或目录安全上下文修改为aaa_u:bbb_r:ccc_t:s0

#文件或目录安全上下文恢复到默认值
restorecon
restorecon -R /usr/share/nginx/html/ #添加一些网页文件到Nginx服务器目录之后为这些新文件设置正确的安全上下文

#查询系统中布尔类型规则及其状态 重要
getsebool -a


#开关一个布尔型规则
setsebool
setsebool -p httpd_anon_write on #开启httpd_anon_write规则

#添加目录默认安全上下文 与grep连用
semanage fcontext -a -t "(/.*)?"

-----安装jdk\e】\e[0m"
rpm -ivh /home/prince/jdk-17_linux-x64_bin.rpm
echo echo ‘export JAVA_HOME=/usr/java/jdk1.7.0_67’>> /etc/profile
echo ‘export PATH= J A V A H O M E / b i n : JAVA_HOME/bin: JAVAHOME/bin:PATH’>> /etc/profile


## 8、SELINUX安全增强型linux模块

linux的安全子系统,2.6版本以上内核自动集成selinux模块

### 8.1selinux基本概念

**主体Subject:**等同于进程



**对象Object:**被主体subject访问的资源,可以是文件目录端口设备



**政策与规则(Policy和Rule)**:系统中有大量文件和进程,为节省时间和系统开销,选择性对某些进程进行管制、

一个政策对应多项规则,规则可以手动添加

 Centos7有三套政策:

1. targeted:对大部分网络进程进行管制,系统默认使用
2. minimum:以targeted为基础只对选定的网络服务进程管制
3. mls:多级安全保护,对所有进程管制,最严格的政策,配置难度大



**安全上下文(Security Context):**

selinux核心所在,自己分为**进程安全上下文**和**文件安全上下文**

进程安全上下文:文件安全上下文=1:n

只有以上两者对应上了进程才能访问文件,对应关系由政策中的规则决定。

文件安全上下文由文件创建位置和创建文件的进程决定,有一套系统默认值设置

1. 安全上下文有四个字段用:隔开 system_u:object_r:admin_home_t:s0

   

单纯的文件移动不能改变文件的安全上下文

**Selinux工作模式**:

1. **强制enforcing:**违反selinux规则行为会被阻止然后记录到日志中
2. **宽容permissive:** 违反规则的行为会记录到日志中,调试使用
3. **关闭disabled:**关闭selinux

```shell
#selinux工作模式配置文件
/etc/selinux/config
#selinux日志
auditd.service

8.2 selinux基本操作

#安装软件包
yum  install policycoreutils-python -y
#查询安全上下文(文件)
ls -Z /etc
ls -Z /home/prince

#查询进程的安全上下文
ps auxZ | grep -v grep | grep nginx
ps axuZ | grep -v grep | grep bash #查找脚本执行的进程上下文 最左边就是,如果selinux是disable状态则不会显示上下文

#手动修改文件或目录的安全上下文
 #chcon -u修改安全上下文用户字段 -r修改安全上下文角色字段 -t修改安全上下文类型字段 -l修改安全上下文级别字段
 # -reference修改与指定文件或目录一致的安全上下文 -R递归操作 -h修改软连接的安全上下文
chcon -u aaa_u -r bbb_r -t ccc_t test
 #test文件或目录安全上下文修改为aaa_u:bbb_r:ccc_t:s0

#文件或目录安全上下文恢复到默认值
restorecon
restorecon -R /usr/share/nginx/html/ #添加一些网页文件到Nginx服务器目录之后为这些新文件设置正确的安全上下文

#查询系统中布尔类型规则及其状态 重要
getsebool -a


#开关一个布尔型规则
setsebool
setsebool -p httpd_anon_write on #开启httpd_anon_write规则

#添加目录默认安全上下文 与grep连用
semanage fcontext -a -t "(/.*)?"

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux 的相关文章

  • vmsplice() 和 TCP

    在原来的vmsplice 执行 有人建议 http lwn net Articles 181169 如果您的用户态缓冲区是管道中可容纳的最大页面数的 2 倍 则缓冲区后半部分成功的 vmsplice 将保证内核使用缓冲区的前半部分完成 但事
  • 仅使用containerd(不使用Docker)修剪容器镜像

    如果我刚刚containerd安装在 Linux 系统上 即 Docker 是not安装 如何删除未使用的容器映像以节省磁盘空间 Docker 就是这么方便docker system prune https docs docker com
  • Linux 中 m 标志和 o 标志将存储在哪里

    我想知道最近收到的路由器通告的 m 标志和 o 标志的值 从内核源代码中我知道存储了 m 标志和 o 标志 Remember the managed otherconf flags from most recently received R
  • ALSA:snd_pcm_writei 调用时缓冲区不足

    当运行我最近从灰烬中带回来的旧程序时 我遇到了缓冲区不足的情况 该程序将原始声音文件完全加载到内存中 2100 字节长 525 帧 并准备 ALSA 进行输出 44 1khz 2 通道 有符号 16 位 if err snd pcm set
  • 在 C 中使用单个消息队列是否可以实现双向通信

    我希望服务器向客户端发送一些消息 并让客户端确认它 我被分配了这个任务 我可以在 C linux 中使用单个消息队列来完成它还是我需要创建两个 谢谢 是的 可以使用 sysV 消息队列来做到这一点 从您之前的问题来看 您正在使用该队列 您可
  • docker 非 root 绑定安装权限,WITH --userns-remap

    all 尝试让绑定安装权限正常工作 我的目标是在容器中绑定安装卷 以便 a 容器不以 root 用户身份运行入口点 二 docker daemon 配置了 userns remap 这样容器 主机上没有 root c 我可以绑定挂载和读 写
  • 通过 Visual Studio 2017 使用远程调试时 Linux 控制台输出在哪里?

    我的Visual Studio 2017 VS2017 成功连接Linux系统 代码如下 include
  • 在 Linux 上以编程方式设置 DNS 名称服务器

    我希望能够通过我的 C C 程序为 Linux 上的 DNS 名称服务器添加 IP 地址 我在一个带有只读 etc resolv conf 的嵌入式平台上 这意味着我不能简单地将 nameserver xxx xxx xxx xxx 行添加
  • 如何根据标签将单个 XML 文件拆分为多个

    我有一个带有标签的 XML 文件 我想像这样分割文件
  • 使用循环在 C 中管道传输两个或多个 shell 命令

    我正在尝试执行ls wc l通过 C 语言程序 而不是使用命令行 这是我当前的工作代码 int main int pfds 2 pipe pfds pid t pid fork if pid 0 The child process clos
  • 并行运行 shell 脚本

    我有一个 shell 脚本 打乱大型文本文件 600 万行和 6 列 根据第一列对文件进行排序 输出 1000 个文件 所以伪代码看起来像这样 file1 sh bin bash for i in seq 1 1000 do Generat
  • 使用包管理器时如何管理 Perl 模块?

    A 最近的问题 https stackoverflow com questions 397817 unable to find perl modules in intrepid ibex ubuntu这让我开始思考 在我尝试过的大多数 Li
  • 从 Xlib 转换为 xcb

    我目前正在将我的一个应用程序从 Xlib 移植到 libxcb 但在查找有关我有时使用的 XInput2 扩展的信息时遇到了一些麻烦 libxcb 中有 XInput2 实现吗 如果是的话 在哪里可以找到文档 目前我在使用此功能时遇到问题
  • 如何在 Linux 中使用 C 语言使用共享内存

    我的一个项目有点问题 我一直在试图找到一个有据可查的使用共享内存的例子fork 但没有成功 基本上情况是 当用户启动程序时 我需要在共享内存中存储两个值 当前路径这是一个char and a 文件名这也是char 根据命令参数 启动一个新进
  • Intel 上的 gcc 中的 _mm_pause 用法

    我参考过这个网页 https software intel com en us articles benefitting power and performance sleep loops https software intel com
  • 使用 python 脚本更改 shell 中的工作目录

    我想实现一个用户态命令 它将采用其参数之一 路径 并将目录更改为该目录 程序完成后 我希望 shell 位于该目录中 所以我想实施cd命令 但需要外部程序 可以在 python 脚本中完成还是我必须编写 bash 包装器 Example t
  • 在生产服务器上使用 Subversion 使文件生效的最佳方法是什么?

    目前我已经设置了 subversion 这样当我在 Eclipse PDT 中进行更改时 我可以提交更改 它们将保存在 home administrator 中项目文件 该文件具有 subversion 推荐的 branches tags
  • 绕过 dev/urandom|random 进行测试

    我想编写一个功能测试用例 用已知的随机数值来测试程序 我已经在单元测试期间用模拟对其进行了测试 但我也希望用于功能测试 当然不是全部 最简单的方法是什么 dev urandom仅覆盖一个进程 有没有办法做类似的事情chroot对于单个文件并
  • 使用 gdb 调试 Linux 内核模块

    我想知道 API 在内核模块 中返回什么 从几种形式可以知道 这并不是那么简单 我们需要加载符号表来调试内核模块 所以我所做的就是 1 尝试找到内核模块的 text bss和 data段地址 2 在 gdb 中使用 add symbol f
  • 从 Linux 内核模块中调用用户空间函数

    我正在编写一个简单的 Linux 字符设备驱动程序 以通过 I O 端口将数据输出到硬件 我有一个执行浮点运算的函数来计算硬件的正确输出 不幸的是 这意味着我需要将此函数保留在用户空间中 因为 Linux 内核不能很好地处理浮点运算 这是设

随机推荐

  • opengl 摘要

    一 创建opengl工程 1 第一步设置像素格式 如支持双缓冲 xff0c 设置颜色模式 xff0c 如是rgba xff0c 还是颜色索引 xff08 需调色板 xff09 xff0c 设置模板缓冲区的特征值 2 第二步创建绘制环境 且自
  • Watchdog

    一 简介 软件狗 类似硬件狗 xff0c 硬件狗是被动等 喂 xff0c 系统主要线程主动调用硬件接口 xff0c 告诉系统本线程是正常的 但android 这种framework层中的软件狗本身是一个线程 xff0c 会主动询问系统关键线
  • android Binder 学习

    一 面向过程调用与面向对象调用的区别 1 面向过程调用同一时刻只能服务一个客户 xff0c 而且该过程必须具有锁功能 xff0c 如果有其他客户想要访问 xff0c 则需要等待前一客户完成操作 2 面向对象则能同时服务多个客户 xff0c
  • QEMU KVM 虚拟机移植之性能提高篇小结(android 虚拟机双系统方案)

    一 提升性能核心要素 1 将 OPENGL 接口进行穿透调用 xff0c 下面对opengl穿透做个小结 2 在arm开发板上打开kvm特性 xff0c 这个qcom amp mtk都是实现了的 xff0c 只需要打开开关即可 二 ANDR
  • android 系统基础知识

    一 Activity 启动模式 Activity有四种启动模式 xff1a standard singleTop singleTask singleInstance 可以在AndroidManifest xml中activity标签的属性a
  • android 内存管理概要

    一 zram zram swap 主要原理就是从内存分配一块区域出来用作 swap 分区 xff0c 每次如果内存空间不够了 xff0c 不是把应用程序杀掉 xff0c 而是把应用程序所占用的内存数据复制到 swap 分区 xff0c 等切
  • python统计从1970/1/1 08:00:00到某个时刻的总秒数

    使用场景 xff0c 比如需要从一堆文件中 xff0c 选出时间属性在2017年12月13日00 00 00以后的所有文件 span class token keyword import span os statinfo span clas
  • art知识简要概括

    一 GC分类 1 kGcCauseForAlloc 当没有足够的内存分配时触发 2 kGcCauseBackground 当已使用的内存超过最大值时触发 3 kGcCauseExplicit 当使用System GC时触发 二 GC守护线程
  • SEAndroid 知识点

    一 DAC 1 自主访问控制 Linux上的安全模型叫DAC xff0c 进程的权限与执行它的用户的权限一致 xff0c file针对所有者 所有者组 其他用户制定相关权限 二 MAC 1 强访问控制 SELinux上的安全模型叫MAC x
  • Cgroup 理解

    一 综述 1 cgroup 可以控制进程组的资源 xff08 cpu memory i o等 xff09 2 cgroup 采用树型结构来控制进程组的资源 3 cgroup 利用资源子系统来分割资源 4 cgroup 是lxc xff0c
  • namespace 理解

    当调用clone时 xff0c 设定了CLONE NEWPID xff0c 就会创建一个新的PID Namespace xff0c clone出来的新进程将成为Namespace里的第一个进程 一个PID Namespace为进程提供了一个
  • Bionic 学习

    一 基本概况 1 不与其他libc库兼容 xff0c 有自己的动态链接器 linker 2 不支持c 43 43 异常抛出 3 一共有libc xff08 c基础库 xff09 libm xff08 数学库 xff09 libdl xff0
  • 基于容器原理(docker、lxc、cells)的Android 双系统设计概要

    写在前面 前几年预研加开发android双系统 xff0c 中途用过不少开源代码或者研读过大牛BLOG xff0c 现开放双系统设计原理来回报社区 android容器技术已在android 6 7 8 9 10 11 12 13版本中分别实
  • Android手机可信引导解决方案

    1 概述 Android手机的可信引导过程 xff0c 主要分为三部分 xff0c lk的可信 xff0c boot的可信 xff0c 和system的可信 xff1b 系统上电到lk的启动过程验证 因为和硬件联系紧密 xff0c 基本都由
  • Android智能手机安全解决方案

    1 终端安全解决方案全景 1 1 Android系统框架预览 此外 xff0c 鉴于许多硬件厂商不希望公开其设备驱动程序 xff0c GOOGLE在运行时库层对下屏蔽实现细节 xff0c 对上提供统一接口增加了硬件抽象层 1 2 Andro
  • EFI secure boot

    一 EFI secure boot 是EFI BIOS中的一个子标签 xff0c 同时EFI BIOS提供证书管理功能 xff0c 系统可以同时拥有多个证书供用户选择 EFI只能执行经过正确签名的固件 EFI 证书种类比较多 xff1a P
  • TPM2.0读书笔记

    三种关联性技术 1 Intel TXT技术 2 TrustZone技术 3 AMD PSP技术 TPM实体 1 持久性hierarchy TPM RH PLATFORM 平台 TPM RH OWNER 存储 TPM RH ENDORSEME
  • 适用各种语言的字符串jaccard相似度的计算

    要计算两个文本的相似度 xff0c 现在可能大多会通过相似度模型来计算 xff0c 或者是通过embedding向量来计算 但可解释性差一些 xff0c 有些情况下 xff0c 可能直接用两个文本共同的字符数来计算更直观一些 Jaccard
  • windows下PowerShell别名使用

    个人在windows下习惯用PowerShell替代CMD作为命令行工具 如何自定义命令来提高生产力呢 xff1f linux中有alias工具 xff0c 如 span class token builtin class name ali
  • Linux

    Linux 1 计算机硬件体系 1 1冯诺依体系 由运算器 控制器 存储器 输入设备和输出设备五部门组成 顺序执行程序 计算机处理数据和指令一律用二进制表示 1 2硬件组成 存储器 随机存储内存RAM xff0c 内存 xff0c 逻辑IO