文章目录
- 1.Hash:传统/一致性
- 2.iNode:磁盘中块和扇区
- 3.文件查找与读取命令:C语言中‘\0’(对应的ASCLL码值为0)表示的空字符
- 4.攻击:生产环境都Linux,为了保护程序会采取一些措施,常见的攻击类型有哪些呢?
- 5.安全策略:软件及时更新,端口服务
- 6.Linux下开机自动重启脚本:/etc/rc.local,Crontab,Systemd
- 7.vi命令:三种模式切换
1.Hash:传统/一致性
Hash(散列、杂凑)算法(应用于哈希表和摘要密码学),是把任意长度的输入通过特定的算法变换成固定长度的输出,输出的值就是hash值。这个特定的算法就叫hash算法,hash算法并不是一个固定不变的算法。只要是能达到这个目的的算法都可以说hash算法
。例如MD5,SHA,String.hashcode()都是hash算法。
不同的输入可能会得出相同的hash值,那么这种现象称为hash碰撞
,无论是采用那种hash算法,hash碰撞都是不可避免的,我们只能通过改进hash算法,把出现碰撞的概率降低。hash英语中的意思是剁碎的食物,反应在计算机领域大概就是把任意数据切割打碎,输出固定长度的数据。
如下三台缓存服务器S0,S1,S2
,有三万张图片进行缓存,最好能均匀缓存到服务器上分担缓存压力。简单做法对缓存下来的键key哈希计算得到整数,再用缓存服务器数量对这个值取模
,用取模产生的余数来决定数据应该缓存在哪台服务器上。对同一个图片名称即key编号做相同哈希计算时得到hash值不变的,所以当需要访问图片时再次对图片名称进行hash计算和取模计算就能知道图片存放在哪台服务器上。
增加服务器时,图片之前存在S0上,S2服务器读不到,大量缓存失效导致缓存雪崩。所以要用到一致性哈希
。
如下的圆有2的32次方个点组成,称为hash环。A,B,C三台缓存服务器的编号做hash计算即用2的32次方取模,得出的结果一定在0到2的32次方之间的整数对应hash环上一点。a.jpg找到图片的key,相同方法映射到hash环上。缓存服务器和图片
都映射到了hash环上了,现在要确定图片应该被缓存在哪台服务器上?
沿顺时针方向。。。加入新服务器D时,c.jpg会缓存到D上,不会到A上,但其他不变。
一致性hash算法有个问题就是hash偏斜
即A,B,C三台服务器太靠一起,导致大量图会缓存到一台服务器上。解决:还是三台物理服务器,多加点虚拟节点进行分布。
2.iNode:磁盘中块和扇区
linux文件系统中iNode用来存储文件原数据信息
,不存储文件内容
,原数据信息
包括:
类型
:这个文件是个目录还是普通文件。
拥有者
:这个文件是owner还是group owner。
时间
:ctime
:上次inode变动时间。atime
:上次访问时间。mtime
:上次文件内容发生变动时间。
连接数
:有多少文件名同时指向inode。一个文件名只对应一个inode
,但一个inode可能被多个文件名同时指向。
文件内容所在的位置
:文件真正内容所在磁盘块的标号。
1.
文件系统fs在格式化好后,inode以什么样格式存储的呢?整个inode以数组形式存储,每个元素是一个inode
,每个inode大小根据当前文件系统以及整个磁盘大小,inode会有一个固定128或256字节
大小。
2.
除了inode数组,fs初始化好后还会生成一个Map映射关系表
(存储filename和inode index)。现在要读取/ect/1.txt,整个过程怎么样?
先根据文件名到Map中找到inode index,找到下标为假如是3的inode后拿出来如下图左边整个框。当前在读取/ect/1.txt,所以查看是否有读权限,如果有读权限就继续往下,找到文件内容
所在位置(磁盘上块的下标)。
文件内容在磁盘中存储区域如下:以块
进行分隔,每个块大小
也是根据当前fs和整个磁盘大小决定,并不是一个特定大小【扇区在磁盘生产时
有多少个扇区,每个大小是定的,早期扇区512byte,现在4k】。文件系统fs在文件访问过程中不可能直接使用扇区,扇区是硬件
的概念,所以抽象出一个概念:fs角度去看最小文件存储单元就是块
,一个块可以有一个或多个扇区组成(2的幂次方即1,2,4…个扇区)。
一个块采用多少扇区也是有权衡的,比如一个块有好几兆,存一个1k文件也要占一个文件块,造成磁盘空间浪费。块选择过小的话也不好,如果一个块大小1bit,导致一个文件假如是1kb,它所在的块由1千个块组成
,在inode中存储文件内容所在位置这个字段时候造成存1千个块信息(1千个块下标),一个inode(存1千个块下标)不可能128/256字节大小了
,一个inode会很大,进而导致inode数组会很大,整个inode区大,这样导致磁盘损耗大量空间存储inode信息,较少的空间存储真正文件内容。
即使进行权衡,目前存在问题,如经常听到inode用完了即inode数组初始化大小用完了
,声明完数组大小后不能增加或减少了。inode数组用完了即使磁盘还有额外空间也不能存储文件了,常见特别零碎文件数量又特别多占据磁盘大量inode导致整个inode用完。如早期docker采用overlay文件存储格式导致镜像的碎文件很多,导致inode用尽这样问题,后面采用overlay2文件存储格式一定程度上解决了这问题。
查看linux系统中inode数组以及每个文件所对应inode标号:df -i(inode)
,查看当前文件夹下文件所在的inode标号是什么ls -il
。访问1.txt先查文件名和inode标号映射即Map,1.txt能找到270306
这个标号。根据这个标号到1183200这个数组中拿取第270306个
标号的inode。根据这个inode信息查看权限,最终找到1.txt在磁盘中存储位置,最后把这些磁盘块进行读取,最终读取到1.txt这个文件。
如果是一块移动硬盘,在其他设备上创建了文件 把这个移动硬盘拿到linux上面,有没有inode呢?
1.
os可以支持多种fs。2.
inode是在ext2/3/4等linux支持的文件系统(fs)有的。所以移动硬盘看是什么文件系统
了,如果是ntfs或者exfat、fat32等等就是另一种访问形式了,inode其实是文件系统里的概念,而不是linux的概念。
3.文件查找与读取命令:C语言中‘\0’(对应的ASCLL码值为0)表示的空字符
3.1 find:找文件
过滤一下看文件大小:-print0将如上三行打印为1行并用null即‘\0’隔开,再用xargs -0即用‘\0’再分开(原因是默认管道到下一个里面空格会出错)。
如上/是整个系统搜索慢,如下是当前路径搜索快。
日志文件没清空非常大,要找到删除,如下找系统中大文件,超过10M。
如下查找文件夹,文件夹有相应名字或大小属性。
如下基于修改时间,time是天。-1
:今天一天之内。1
:1天前这一天。+1
:1天前。
如下指定最大文件深度。
如下是find指令总结。
3.2 grep:找文件中内容
echo “aa” >> 1.txt,追加内容。cat -n 1.txt(行号:number)。grep “a” 1.txt。
如下*
可换成* .txt
。
-r:递归子路径,-n:显示行号。-i:忽略大小写。
如下用于java日志文件非常大,要grep出某个异常如ioexception,且需要打印出exception下面几行看什么出了错。
3.3 cat/more:查看文件全部内容
cat的文件非常大,非常占用cpu和内存,这时候可以每次读取一小部分。
如下通过空格往后翻页。
如下指定从第四行开始读。
如下查看前后10行。
3.4 head/tail:查看文件部分内容
如下打印文件最后两行,tail -f 阻塞监控。
df -h查看磁盘使用,占用率太高就需要使用前面find,grep指令并进行删除。
如上找出占空间的文件夹再去里面找。
题目:输出当前路径及当前路径子路径下所有.txt文件,要求大小超过1M,并且按照从大到小
顺序进行排序输出前10个?
先通过find . -name '*.txt' -size +1M -type f
查看是否有大于1M的txt文件,没有的话就不用继续了。
再通过find . -name '*.txt' -size +1M -type f -print0|xargs -0 du -m|sort -nr|head -10
。
4.攻击:生产环境都Linux,为了保护程序会采取一些措施,常见的攻击类型有哪些呢?
1.密码暴力破解
:目的明确,通过工具破解用户密码,进入服务器获取资源进行系统的破坏。想象一个字典,字典足够强大,逐一匹配就可以找到服务器的密码。
2.拒绝服务攻击
:通过大量的请求来占用足够多的服务资源,使得网络阻塞或者服务器死机,导致 Linux 服务器无法给用户提供服务。常见的拒绝服务攻击有Dos与分布式拒绝服务攻击。
3.应用程序漏洞攻击
:常见如sql注入,漏洞攻击,网页权限漏洞等。
如何进行防范呢?彻底防范不可能,但可尽全力防范,通常需要一系列的安全设备和规则进行约束。
1.网络传输的安全
:常见的网络安全设备有硬件防火墙,网络入侵检测,路由器,交换机等。防火墙对进出网络的主机进行规则匹配,尽量保证合法的主机进入网络。可是有些攻击行为是在防火墙允许的范围内,这个时候防火墙就无所能及了,就要诸如IDS设备来辅助
(IDS会对系统的整体运行情况进行监控,尽全力发现攻击企图,从而保证网络系统资源的机密性,完整性和可用性)。
2.操作系统的安全
:服务器本身的一些安全设置和优化,如系统内核的定期升级,自带软件的更新,配置 iptable规则,关闭无关服务等。很多常见的病毒程序,防火墙很难阻止,用系统杀毒工具。
3.应用软件安全
:部署在服务器中应用的安全策略配置,如对数据库进行配置防止非规则内连接数据库等,再如SQL注入,跨站脚本都属于应用软件安全漏洞造成的攻击。
5.安全策略:软件及时更新,端口服务
在Linux操作系统中,系统定义了 65535 个端口,这些端口又分为两个部分:按1024分割分为只有root用户
才能启用的端口和客户端的端口
。对于只有root用户才能启动的端口:即0-1023 的端口,要root才能启用,因为这些端口预留给一些预设的服务使用,不经常使用的端口最好关闭,比如Ftp的21端口,25的Mail服务端口。
5.1 客户端的端口:1024端口以上的通常给客户端软件使用,由软件随机分配,不受root的限制,如默认3306就是数据库端口
如下查看端口状态,发现启用了22端口,默认打开了,我的XSHELL就是连接的这个端口。
查看端口对应的什么服务执行如下,经常听到什么服务对应什么端口
,他们两是对应关系,没有服务运行即没有端口对应,那是不是这些服务都必须使用默认的端口呢?不是,大部分的软件都会有配置文件,根据相应的配置就好了。
Linux中服务启动和关闭管理
有两种方式:第一种方式是直接启动脚本,Centos7之前是在 /etc/init.d目录下的服务启动和关闭。Centos7后,用systemctl工具来完成,启动sshd 服务如下:
另一种方式通过超级服务管理
常用网络服务,如Centos的超级服务Xinetd,这个服务可以管理的服务如Vsftpd等,我们可以通过 /etc/init.d/xinted restart来完成服务的重启。Linux中通过chkconfig命令或者systemctl判断服务是否开启。
Linux守护进程(init.d和xinetd):经常用linux作为服务器,用来提供一些服务。每一个服务的实现后台都需要有一个daemon监听在某个套接字上。daemon可分为两类:standalone(独立守护进程)和super daemon(超级守护进程)
。
独立守护进程
:服务自我进行管理,启动后就一直占用内存与系统资源,在内存中持续提供服务,响应速度快,如httpd进程一直监听在tcp的80端口上。
超级守护进程
:xinetd,比如telnet是受xinetd管理的,telnet本身不启动,xinetd代为监听23号端口,用户请求访问时telnet时,请求先被提交给xinetd,xinetd临时性唤醒telnet-server,根据用户请求按需启动。
5.2 其他安全设置:软件防火墙iptables
1.禁止系统响应任何从外部来的 ping 请求
:如能ping 通,攻击者就知道这是一个活跃的机器,如下禁止 ping请求。
2.删除不必要的用户组
:删除系统不必要的用户userdel username,删除系统不必要的组groupdel groupname。
3.关闭 selinux
:它是内核强制访问控制安全系统,由于它和现在的Linux应用程序和内核模块有一些兼容问题,如要查看是否已启用。通过使用getenforce或setenforce,要关闭selinux,将其值赋为0。
6.Linux下开机自动重启脚本:/etc/rc.local,Crontab,Systemd
$ crontab -e:@reboot sleep 300 && /home/wwwjobs/clean-static-cache.sh
(在启动 5 分钟后运行指定脚本)
update-rc.d管理。 mv new_service.sh /etc/init.d/,cd /etc/init.d/,update-rc.d new_service.sh defaults 90(90表明一个优先级,越高表示执行的越晚)。在/etc/init.d目录下的可执行程序的优先级会高于/etc/systemd/system/下的.service文件(如果同时存在)。serivice xxxx start|stop|restart
相当于是对/etc/init.d下的xxxx的封装,相当于是一个管理命令,实际执行的是/etc/init.d下的可执行程序。如果/etc/init.d下没有该服务的可执行程序,则使用.service文件。
7.vi命令:三种模式切换
1.插入
:前后上下,以下命令都在命令行模式下。
2.上下左右
:j下,k上,h左,l右。
3.翻页
4.跳光标
5.删字符和行
6.复制粘贴
7.替换
8.撤,接
9.行,找
10.重复,大小写
11.存盘
12.列操作