0
点赞
收藏
分享

微信扫一扫

【Notes10】Hash,iNode,文件查找与读取,Linux安全,开机自启动,vi命令

止止_8fc8 2022-01-10 阅读 15

文章目录


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.列操作
在这里插入图片描述
在这里插入图片描述

举报

相关推荐

0 条评论