由运算器、控制器、存储器、输入设备和输出设备五部门组成。
顺序执行程序
计算机处理数据和指令一律用二进制表示
存储器
随机存储内存RAM,内存,逻辑IO
只读内存ROM,硬盘,物理IO
硬盘是随机读取的,不是顺序读取,否则会浪费效率
机械硬盘(HHD):
硬盘的转速限制着读写速度,7200转/min≈100-200M/s
硬盘盘面是凹凸不平的,凸起是被磁化代表1,凹陷是没有被磁化代表0,以二进制存储数据信息
PtoP协议损坏硬盘
机械硬盘盘面由 划线的磁道、磁道分割的扇区,扇区组成的扇面,扇面组成的簇
存储实际大小大于占用空间的原因
磁盘存储数据是按照扇区进行分化的,而扇区的大小是固定的。举例假设一个扇区可以存4kb数据,但是实际存储数据有9.27kb,那么磁盘会划分三个扇区给该数据,这就导致第三个扇区的数据没有存满该扇区,但是仍然占据该扇区,所以导致实际数据大小小于占用空间
固态硬盘(SSD):
闪存颗粒(固态电子存储颗粒)
顺序读取效率:内存>机械硬盘>固态硬盘
随机读取效率:固态>机械>内存
子网掩码分离主机地址和网络地址(与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检测
主机模式(host-onboy)
某些特殊网络环境调试要求真实环境和虚拟环境隔离开,可以采用此模式。
此模式下所有虚拟主机可以相互通信,但是与实际环境是分隔开的
此模式下虚拟环境的TCP/IP配置信息是由虚拟机虚拟网络dhcp动态分配
桥接模式(bridged)
虚拟机的操作系统是局域网内独立主机,可以访问内网任何机器
桥接模式下虚拟机和真实环境宿主主机是模拟为一条网线上的,也就是模拟真实主机
网络地址转换模式(NAT)
nat模式就是虚拟系统借助nat功能,通过宿主机器的网络访问公网
nat下虚拟机TCP/IP配置信息是由虚拟网络的dchp分配
此状态下虚拟系统不能与本局域网内的其它真实主机通讯
redhat(Centos)可执行文件后缀rpm
debian(ubuntu)可执行文件后缀名db
注意hre-v和虚拟机不能同时运行,需要使用vm15.5.6以上版本才能支持虚拟机和hre-v
虚拟机无法使用。删除虚拟机镜像文件里的lck文件
vi /etc/sysconfig/network-scripts/ifcfg-ens33
#进入网卡信息配置页面
删除uuid款,将onboot=yes,网关gateway为虚拟网络编辑器NAT模式下的nat设置指定的网关,BOOTPROTO=static设置为静态网络
设置完成后重启网卡服务
systemctl restart network.service
端口需要被访问就需要关闭防火墙
systemctl stop firewalld #本次开机关闭防火墙
systemctl disable firewalld #服务器重启后防火墙禁用
vi /etc/sysconfig/selinux #进入文件修改
设置SELINUX=disabled
putty远程连接
xshell7连接
help
man
命令后面是单词用–,简写的用-
$命令提示符 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 #重启
.#当前目录
..#上一级目录
$ #说明这是一个变量,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展示
/content/ 正则表达式规范
#zj.txt
abc
bca
;;;;
cda
aacb
ccba
abcd
sjkl
qiwi
sjndaj
ka;a;
a;ld
dlkd
grep "a\{1\}" zj.txt
grep "\ zj.txt 或则 grep " 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之间的单词
^$ #去除文本空行
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、如果是配置文件查找尽量写绝对路径,也就是根节点方式
bin目录为可执行文件位置:命令脚本
boot目录引导分区(linux启动时引导程序)
dev设备信息
etc目录,系统配置文件目录
home目录,普通用户目录,硬盘
lib目录,可调用类库
media目录,媒体目录
mnt目录,硬盘挂载目录
opt目录,软件安装位置()
proc目录,进程目录
root目录,超级管理员用户目录
sbin目录,超级管理员可执行命令目录
srv目录,系统服务启动后需要提取的数据
sys目录,系统内核
tmp目录,临时数据(变量等)目录,重启后数据被清楚
var目录,临时数据(变量等)目录,重启后数据不会清楚,存日志信息不错
usr目录,用户共享区域
进程查看
ps -ef
echo $$ #查看当前进程编号
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时间同步
#软链接
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仍旧有效,所以硬链接仍旧指向文件存储空间所以可以显示内容。
软连接的文件是指向源文件的而不指向存储空间,所以当源文件删除后,无论存储空间内容是否删除,都不会拿到数据
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才会不提示
windows和linux
yum install lrzsz -y
rz #xshell直接打开上传即可
sz profile#下载profile到windows
linux和linux
#本机地址192.168.188.108
cd /etc
scp bashsrc [email protected]:/home/rince #向109传输文件
scp [email protected]:/home/rince/bashsrc /home/prince
#去109拿取bashsrc到本机prince位置上
df -h#查看文件分区
du查看指定文件大小
du -h --max-depth=1 /etc #迭代深度为1,也就是对多到etc的子节点为止所有文件大小展示
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
路由表
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下,开机自动执行命令
**安装网络命令:**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
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#删除端口
不可逆加密算法
加密后无法计算出原始数据
hash算法和md5算法
md5用于文件校验
对称加密算法
先加密在解密,使用相同的密钥对数据进行加解密。
登录信息用户名和密码加密、传输加密、指令加密
DES、3DES、RC4、Blowflsh
原文、密钥(私钥),密钥不对数据加解密失败
非对称加密算法
公钥和私钥,加密密钥和解密密钥不同,公钥密钥和私有密钥是一对的
加解密速度慢、计算量大
算法:RSA、DSA
#通过ssh命令免密钥连接到其他主机
#生成密钥
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
#生成私钥id_rsa、公钥id_rsa.pub
#发送公钥钥给对方
ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
#去对面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 [email protected]
#修改ssh_config文件
vi /etc/ssh/ssh_config
#此文件最后添加
#StrictHostKeyChecking no
#UserKnownHostsFile /dev/null
上面是发送数据流程,两次校验主要时怕数据发生改变
支持bonding服务需要有bios芯片才能生效
linux2.4版本以上提供bonding技术,把服务器上n格物理网卡在系统内部抽象为一个逻辑上网卡,用以提高网络吞吐量,实现网络冗余负载等
**负载均衡模式:**多个网络接口绑定为一个网络接口,这些网络接口都使用同一个ip地址mac地址发送信息,发送信息时会根据不同算法选择不同的网络接口发送
**冗余模式:**保证每个服务器都有两个链路,即使主链路断开也有备用链路传输
modinfo bonding #查看bonding模块信息
bonding设置有七种模式
0,轮转策略模式会将要发送的数据平均的从所有绑定的网络接口中发送提供负载均衡和网络冗余,默认启用
1,主备模式,主连接断开启用备用连接(接口),提供网络冗余,容错高,端口利用率低
2,基于地址的抑或算法,作用与1模式一致,算法不同,不常用
3,将所有要发送的数据从所有网络连接里发送出去,只提供网络冗余
4,利用802.3ad协议对网络连接聚合,需要交换机才能使用
5,自适应负载均衡模式,系统自动测定发送和接收使用的接口和速度
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
创建与删除虚拟网卡(虚拟机)
(4条消息) Linux下创建虚拟网卡_sun1 72270102的博客-CSDN博客_linux创建虚拟网卡
sudo ifconfig eth0:0 192.168.1.5/24 up
sudo ifconfig eth0:0 down
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
添加用户(建议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+普通用户
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 1月 24 12:24:56 kkkk.txt
#libai用户有读写kkkk.txt权限,song用户组对于kkkk.txt只有读权限,其他用户有读写执行的三个权限
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写权限
进程之间进行信息交互的手段,也就是把前面计算结果传递给后面
cat profile|grep if
目前区分为两种:匿名管道和命名管道
匿名管道指不带名字标识的管道,用于父进程与其子进程之间的通信
命名管道则是带有名字标识符的管道,支持任意两个进程之间的通信。
命名管道 Linux命令?管道符号-grep\head\tail\wc\ls?
ls -l|wc、grep apple.txt| grep configure、管道命令符|
更改数据显示位置
改变数据输出的位置,方向-
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
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简略信息
执行命令时会从当前的目录找,如果找不到会去环境变量$path查找安全1
$PATH #查看环境变量文件位置
Linux每次修改完成后都需要重新加载环境变量文件:source /etc/profile
cat /etc/profile #linux系统环境变量文件
#修改内容就添加到最后即可
#用户环境变量,设置后只对用户管用
cat /root/.bash_profile
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远程连接试一下
自动指定软件安装中的依赖关系,软件缺依赖就自动安装依赖
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
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
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
利用脚本处理文本文件,编辑文件,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
$代表行尾
太多了自己查
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}'
CentOS7启动流程 - 苦逼运维 - 博客园 (cnblogs.com)
系统会转交控制权给引导装载程序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 <
#set superusers='admin'
#password admin pwd123
#EOF
grub2-mkconfig -o /boot/grub2/grub.cfg
#之后开机界面输入e是就需要用户密码进入了
简述流程:
初始化系统,依照/etc/inittab文件,初始化进程是systemd,默认执行target配置文件/etc/systemd/system/default.target。
然后执行sysinit.target来初始化系统和basic.target来准备操作系统
启动multi-user.target下的本机与服务器,检查/etc/rc.d/rc.local文件是否有用户自定义脚本执行(即开机自启动服务脚本)
之后执行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)
图形界面默认状态5,没图形默认runlevel=3
启动时控制计算机运行级别runlevel
runlevel级别
0 | halt关机 |
---|---|
1 | single user mode单用户模式 |
2 | multiuser withoutnfs 多用户无网络状态· |
3 | full multiuser mode多用户完整模式 |
4 | unused保留模式 |
5 | x11用户界面模式 |
6 | reboot重启模式 |
runlevel=3时开始启动对应服务和组件,一般正常启动默认模式3
systemctl set-default TARGET.target#设置系统默认启动等级,正常启动的等级
System概述
linux下初始化init软件,提供更加优秀的框架以表示服务间关系
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文件夹下添加开机就启动的服务
#开机就启动的服务设置有两种方式
vi /etc/rc.d/rc3.d
#k开头文件,代表关机时需要启动服务
#S开头,代表启动时需要加载服务
#数字开头,代表开启或关闭时的顺序
#对应runlevel的启动文件都是软连接,连接到/etc/rc.d/init.d
开机就启动的服务设置有两种方式
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
系统服务中心,由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
linux的安全子系统,2.6版本以上内核自动集成selinux模块
**主体Subject:**等同于进程
**对象Object:**被主体subject访问的资源,可以是文件目录端口设备
政策与规则(Policy和Rule):系统中有大量文件和进程,为节省时间和系统开销,选择性对某些进程进行管制、
一个政策对应多项规则,规则可以手动添加
Centos7有三套政策:
安全上下文(Security Context):
selinux核心所在,自己分为进程安全上下文和文件安全上下文
进程安全上下文:文件安全上下文=1:n
只有以上两者对应上了进程才能访问文件,对应关系由政策中的规则决定。
文件安全上下文由文件创建位置和创建文件的进程决定,有一套系统默认值设置
单纯的文件移动不能改变文件的安全上下文
Selinux工作模式:
#selinux工作模式配置文件
/etc/selinux/config
#selinux日志
auditd.service
#安装软件包
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
#安装软件包
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 "(/.*)?"