如何优化 Linux系统(可以不说太具体)?
1、root,添加普通用户,通过sudo授权管理;2、更改默认的远程连接SSH服务端口及禁止root用户远程连接;3、自动更新服务器时间;4、配置国内yum源;5、关闭selinux及iptables(iptables工作场景如果有外网IP一定要打开,高并发除外); 6、调整文件描述符的数量;7、精简开机启动服务(crond rsyslog network sshd);8、内核参数优化(/etc/sysctl.conf);9、更改字符集,支持中文,但建议还是用英文字符集,防止乱码;10、锁定关键系统文件;11、清空/etc/issue,去除系统及内核版本登录前的屏幕显示
Centos开机流程:
1、开机加电自检,加载BIOS的硬件信息,获取第一个启动设备;2、读取第一个启动设备MBR的引导加载程序(grub)的启动信息;3、加载核心操作系统的核心信息,核心开始解压缩,并尝试驱动所有的硬件设备;4、核心执行init程序,并获取默认的运行信息;5、init程序执行/etc/rc.d/rc.sysinit文件;6、启动核心的外挂模块;7、init执行运行的各个批处理文件scripts;8、init执行/etc/rc.d/rc.local;9、执行/bin/login程序,等待用户登录;10、登录后开始以shell控制主机。
1、root,添加普通用户,通过sudo授权管理;2、更改默认的远程连接SSH服务端口及禁止root用户远程连接;3、自动更新服务器时间;4、配置国内yum源;5、关闭selinux及iptables(iptables工作场景如果有外网IP一定要打开,高并发除外); 6、调整文件描述符的数量;7、精简开机启动服务(crond rsyslog network sshd);8、内核参数优化(/etc/sysctl.conf);9、更改字符集,支持中文,但建议还是用英文字符集,防止乱码;10、锁定关键系统文件;11、清空/etc/issue,去除系统及内核版本登录前的屏幕显示
Centos开机流程:
1、开机加电自检,加载BIOS的硬件信息,获取第一个启动设备;2、读取第一个启动设备MBR的引导加载程序(grub)的启动信息;3、加载核心操作系统的核心信息,核心开始解压缩,并尝试驱动所有的硬件设备;4、核心执行init程序,并获取默认的运行信息;5、init程序执行/etc/rc.d/rc.sysinit文件;6、启动核心的外挂模块;7、init执行运行的各个批处理文件scripts;8、init执行/etc/rc.d/rc.local;9、执行/bin/login程序,等待用户登录;10、登录后开始以shell控制主机。
redhat 6.X版本系统 和 centos 7.X版本有啥区别?
桌面系统(6/GNOE2.x、7/GNOME3.x)、文件系统(6/ext4、7/xfs)、内核版本(6/2.6x、7/3.10x)、防火墙(6/iptables、7/firewalld)、默认数据库(6/mysql、7/mariadb)、启动服务(6/service启动、7/systemctl启动)、网卡(6/eth0、7/ens192)
centos7破解root口令:
1、首先在菜单界面按【e】键,进入启动文件界面后;2、按【↓】拉到底部
在 "LANG=zh_cn.UTF-8" 同行后面加上“init=/bin/sh” ;然后按【Ctrl+X】进入“单用户模式”
3、输入【ls】,回车,再输入【mount –o remount ,rw / 】,回车 (注意空格)
4、输入【passwd】(注意:密码不能少于8位),重复输入两次密码
5、输入【touch /.autorelabel】,回车,再输入【exec /sbin/init】回车,以便重启系统。
安装虚拟机时修改网卡名称为eth0的方法:(按tab键即会弹出)
web服务器的负载架构:
用tcpdump嗅探80端口的访问看看谁最高:
tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print $1"."$2"."$3"."$4}'| sort | uniq -c | sort -nr |head -20
统计/var/log/httpd/access.log日志访问频繁前十的地址,并从大到小排序。
cat access.log |cut -d" " -f1 |sort |uniq -c |sort -nr|head -n10
常见的Linux发行版本都有什么?你最擅长哪一个?它的官网网站是什么?说明你擅长哪一块?
常见的Linux发行版本有Redhat、Centos、Debian、Ubuntu、Suse
最擅长Redhat和Centos;Redhat官网:www.redhat.com; Centos官网:www.centos.org
我最擅长Linux基本命令操作及相关服务搭建
用虚拟机安装了一台Linux系统,突然想克隆一台服务器,克隆后发现无法上网,如何解决?要使服务器上外网,必须满足的条件有哪些?需要配置什么?
a、编辑网卡配置文件/etc/sysconfig/network-scripts/ifcfg-eth0,将HWADDR和MAC地址这两行删除。b、修改文件/etc/udev/rules.d/70-persistent-net.rules,删除之前eth0所在的行,将下一行eth1修改为eth0;c、reboot
要上外网需要:能够链接internet的网线(或无线)、有网卡; 需要配置:IP、netmask、gateway、dns(自动或手动都ok,服务器一般自动)
某天误操作,执行了rm -rf * ,会有哪些情况发生?请举例。
a、如果当前目录为"/tmp" ,那么这个目录下的东西会全部删除(默认不包含隐藏文件) b、如果当前目录为"/",那么系统上的数据将会丢失,且无法启动,系统崩溃(谨慎使用这个命令)
软硬:{共性}:修改软硬链接文件,所有的文件都是同步修改的。
硬链接: 本质:同一个文件多个名字、链接数:有一个以上的链接,不可跨分区,只允许对文件创建链接,不依赖原始文件,删除硬链接文件的源文件,硬链接文件仍然存在,不占用空间,格式:ln 目标文件 链接名
软连接:本质: 一个文件对应快捷方式,是不同文件,链接数:只有一个链接,可以跨分区,可以对目录和文件夹进行链接,依赖于原始文件,删除源文件,软连接则指向一个空文件,它具有依赖性,占用磁盘空间,格式: ln -s 目标文件 源文件
取IPV4地址:ifconfig ens33| grep -Eo "([0-9]{1,3}.){3}[0-9]{1,3}" head -1
取分区利用率:df | grep " /dev/sd " | grep -o " [0-9]{1,3}%" | grep -o " [0-9]+ " | sort -nr | head - n1
取分区利用率:sed -rn ' s/^([^[:space:]]+).([0-9]+)%./\2/p'
用户:sed -rn ' s/^([^[:space:]]+).([0-9]+)%./\1/p'
查看版本型号: cut -d "." -f1 /etc/redhat-release |egrep -o "[0-9]+"
查看版本型号:grep -o " [0-9]+. " /etc/redhat-release | grep -o " [0-9]+ "
查看版本型号:sed -rn " s/.([0-9]+)../\1/p " /etc/redhat-release
匹配手机号码:egrep -o " 1[0-9]{10} " tel.txt
匹配email邮箱:egrep -o "([[:alnum:]]|_)+@[[:alnum:]]+.com$" mail.txt
使用sed命令取IPV4地址:
1、|sed -n '2p' |sed -r 's/inet//' |sed -r 's/netmask.//' |tr -d " " 2、|sed -n '2p' sed -e 's/^.inet//' -e 's/.//' 3、|sed -n -e '2s/^.inet//' -e '2s/ .//p' 4、|sed -nr '[email protected] (.) .n.@\1@p' 5、|sed -nr '2s/[^0-9]+([0-9.]+)./\1/p'
在Linux系统中,以文件方式访问设备。每个文件用索引节点来标识。 Linux内核引导时,从文件/etc/fstab中读取要加载的文件系统。全部磁盘块由四个部分组成,分别为引导块、专用块、i节点表块和数据存储块。 内核分为:进程管理系统、内存管理系统、I/O管理系统、文件管理系统。
网络管理具备:配置管理、故障管理、性能管理、安全管理和计费管理等功能。网络管理的重要任务是:控制、监控 。网络管理员对WWW服务器进行访问、控制存取和运行等控制,这些控制可在 httpd.conf 文件中体现。PHP和MySQL的联合使用解决了:在WWW服务器上处理数据库的访问问题。
进程的运行有两种方式,即:独立运行和使用父进程运行。 进程查看的命令:ps、top;进程调度的命令:at、crontab、batch、kill。
为何要给硬盘分区:①、易于管理和使用;②、有利于数据安全;③、节约寻找文件的时间
①、文件系统查看命令:df;②、统计目录或文件大小:du;③、文件系统修复命令:fsck;④、显示磁盘状态命令:dumpe2fs;实现从IP地址到以太网MAC地址转换的命令为:arp
快速查找/root目录中大于2M的文本,并将文件中的magedu,换成www.magedu.com :
find /root --size +2M -type f -exec sed -i 's/magedu/www.magedu.com/g' {} \;
以txt结尾,30天没有修改的文件大小大于20K同时具有执行权限的文件并备份到/data/backup/目录下:
find / -name *txt -mtime +30 -type f -size +20k -perm a=x -exec cp {} /data/backup/ \;
每次开机在/tmp目录下创建一个当天的日期文件夹(提示:当前日期表示的方法为:
date +%Y%m%d
):echo "mkdir /tmp/
date +%Y%m%d
" >> /etc/rc.d/rc.local如何开启linux服务器路由转发功能? echo "1" > /proc/sys/net/ipv4/ip_forward
如何将本地80端口的请求转发到8080端口,当前主机ip 192.168.16.1,网卡eth0:
iptables -t nat -A PREROUTING -i eth0 -d 192.168.16.1 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080
如何添加一块新的50G硬盘到linux服务器系统作为单独的分区,并正常使用?
a、格式化分区用fdisk命令进行,b、制作文件系统用mkfs.xfs命令进行,c、挂载用mount命令进行,d、编辑配置文件“ /etc/fstab ”实现自动挂载。
说出配置过的路由器型号?并举例常用的配置命令?
H3C路由器;system-view 进入系统视图模式、display ip routing-table 显示当前路由表、 shutdown 关闭以太网端口、quit 退出。
交换机的端口模式有几种?各有什么功能?
1、RJ-45接口。这种接口应用最为普遍。因其适配线缆\传输介质制作简单,传输速率快。支持的双工工作方式齐全。
2、BNC。所用的传输介质为细同轴电缆,当前已不常见。不要以为一讲以太网就都是RJ-45接口的,只不过双绞线类型的RJ-45接口在网络设备中非常普遍而已。
3、AUI。所用的传输介质为粗同轴电缆。当前多是广电宽带采用同轴电缆作为网络传输介质,范围不广。为了在RJ-45接口的基础上兼顾同轴电缆介质的网络连接,配上BNC或AUI接口。
有客户反映原来能通47.58.23.99的ip,现在不通了,应该怎么排查?
先看水晶头是否松动,再看网络适配器是否连接,再看onboot是否为yes,再检查客户端是否指定DNS,是否能ping通百度。
su、su -、sudo三者区别:
su:非交互式登录,在环境变量下不切换。su-:交互式登录(完全切换),当前目录改变为切换用户,在家目录,连同环境一同切换。sudo相对于权限无限制性的su来说,还是比较安全的,所以sudo也能被称为受限制的su,另外sudo是需要授权许可的,所以也被称为授权许可的su。sudo执行命令的流程是当前用户切换到root,然后以root身份执行命令,执行完成后,直接退回到当前用户,而这些的前提是要通过sudo的配置文件/etc/sudoers来进行授权。
三个私有地址网络: A:10.0.0.0/8~10.255.255.255/8 A类保留1个网络数为私有地址:10.0.0.0 B、172.16.0.0/16 ~ 172.31.255.255/16 31-16+1=16个地址用于内部 C、192.168.0.0/24 ~ 192.168.255.255/24255-0+1=256个地址用于内部
cp /etc/fstab /data/dir 问:它需要有最小权限是什么?
1、探究cp外部命令有啥权限,它至少必须要有x:执行权限。2、/etc/fstab:/fstab 只要有读权限就可以了,前提是/etc要有x执行权限,/etc可以没有读权限,只要/etc有基本可执行权限进得去就可以。3、/data/dir:至少要有执行和写权限。
cpu单核和多核有啥区别?
双核CPU就是能处理多份任务,顺序排成队列来处理。单核CPU一次处理一份任务,轮流处理每个程序任务。双核的优势不是频率,而是对付同时处理多件事情。单核同时只能干一件事,比如你同时在后台BT下载,前台一边看电影一边拷贝文件一边QQ。
网络稳定性如果保证?
1.选用可靠的设备,规范的综合布线,打造稳定的基础网络;2.对网络进行约束,上网行为管理;避免病毒,p2p下载。3.有效的网络监控,对网络的主干线路进行速率监控。
应用系统中常见的网络故障有哪些,如何去分析和解决这些问题?
1.病毒问题:遭遇DOOs对网络造成波动。或者是大规模的丢包。断网,或者是网络地址被欺骗;2.线路回路:会造成网络频繁的中断,甚至彻底中断。3.设备老化:高温。粉尘,不稳定电压等因素都会造成设备的不稳定。很多时候重启设备就恢复正常。4.地址冲突:网络配置错误会直接造成重要设备的网络中断。
web网站访问缓慢排查思路:
1、服务器状态:负载情况,CPU,网络,内存,日志是否做切割。如果单台服务器性能受限,可以调整为分布式架构,LB数 据库分库分表索引等。
2、DB响应慢:检查慢查询日志,show processlist查看当前DB状态,看哪些请求停留较多;代码中记录SQL执行时间;分析SQL性能,考虑是否优化索引,或者分库分表,增加缓存;检查磁盘IO;查看binlog的写入速率。 3、前端问题:减少HTTP请求;页面设计不佳。
阐述iptables的工作原理,四表五链:
iptables是工作在TCP/IP的2、3、4层,当主机收到一个数据包后,数据包先在内核空间处理,若发现目标地址是自身,则传到用户空间中交给对应的应用程序处理,若发现目标不是自身,则会将包丢弃或进行转发。
4表:raw表:关闭连接追踪;mangle表:报文修改;nat表:地址转换;filter表:过滤;5链:input、output、forward、prerouting、postrouting。
流入本机:PREROUTING --> INPUT-->用户空间进程
流出本机:用户空间进程 -->OUTPUT--> POSTROUTING
转发:PREROUTING --> FORWARD --> POSTROUTING
内网至外网用postrouting sNAT 外网至内网用prerouting DnAT
1、链管理: -N: new 自定义一条新的规则链 -X: delete 删除自定义的空的规则链 -P:policy 设置默认策略:ACCEPT:接受 DROP:丢弃 -E:重命名自定义链
2、查看:-L: list, -n:以数字格式显示地址和端口号 -v:详细信息
3、规则管理:-A : append 追加 -I:insert 插入, -D:delete 删除 -F:flush 清空指定规则链 -R:replace 替换指定链上的规则编号 -Z: zero :置零
mysql部分:四种隔离级别:
A、READ UNCOMMITTED(未提交读),事务中的修改,即使没有提交,对其他事务也都是可见的,事务可以读取未提交的数据,也被称为脏读(Dirty Read),这个级别会导致很多问题
B、READ COMMITTED(提交读),大多数数据库系统的默认隔离级别,一个事务开始时,只能“看见”已经提交的事务所做的修改,一个事务从开始直到提交之前,所做的任何修改对其他事务都是不可见的,也叫不可重复读(nonrepeatable read),有可能出现幻读(Phantom Read),指的是当某个事务在读取某个范围内的记录时,另外一个事务又在该范围内插入了新的记录,当之前的事务再次读取该范围的记录时,会产生幻行(Phantom Row)
C、REPEATABLE READ(可重复读),通过InnoDB和XtraDB存储引擎,是MySQL的默认事务隔离级别
D、SERIALIZABLE(可串行化)最高级别,通过强制事务串行执行,避免了幻读问题,会在读取的每一行数据上都加锁,可能导致大量的超时和锁争用的问题。
MySQL事务ACID:
原子性(atomicity):一个事务必须被视为一个不可分割的最小工作单元,整个事务中所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一部分操作
一致性(consistency):数据库总是从一个一致性的状态转换到另外一个一致性的状态
隔离性(isolation):一个事务所做的修改在最终提交以前,对其他事务是不可见的
持久性(durability):一旦事务提交,则其所做的修改就会永久保存到数据库中
MySQL索引的优点:
三个优点:1、索引大大减少了服务器需要扫描的数据量 ;2、索引可以帮助服务器避免排序和临时表;3、索引可以将随机I/O变为顺序I/O
什么情况下应不建或少建索引:
1、表记录太少;2、经常插入、删除、修改的表;3、数据重复且分布平均的表字段,假如一个表有10万行记录,有一个字段A只有T和F两种值,且每个值的分布概率大约为50%,那么对这种表A字段建索引一般不会提高数据库的查询速度。4、经常和主字段一块查询但主字段索引值比较多的表字段
行级锁定的优缺点:
优点:1、当在许多线程中访问不同的行时只存在少量锁定冲突;2、回滚时只有少量的更改 3、可以长时间锁定单一的行
缺点:1、比页级或表级锁定占用更多的内存;2、当在表的大部分中使用时,比页级或表级锁定速度慢,因为你必须获取更多的锁;3、如果你在大部分数据上经常进行GROUP BY操作或者必须经常扫描整个表,比其它锁定明显慢很多;4、用高级别锁定,通过支持不同的类型锁定,你也可以很容易地调节应用程序,因为其锁成本小于行级锁定
key和index的区别:
1、key是数据库的物理结构,它包含两层意义和作用,一是约束(偏重于约束和规范数据库的结构完整性),二是索引(辅助查询用的)。包括primary key,unique key,foregin key等
2、index是数据库的物理结构,它只是辅助查询的,它创建时会在另外的表空间(mysql中的innodb表空间)以一个类似目录的结构存储。索引要分类的话,分为前缀索引、全文本索引等
Mysql主从配置:1、master开启二进制日志;2、master和slave配置不同的server_id;3、slave配置中继日志;4、master做账户授权;5、slave开启同步。
MySQL主从同步过程:
1:Slave端的IO线程连接上Master,并向Master请求指定日志文件的指定位置(新部署的Master和Slave从最开始的日志)之后的日志。2:Master接收到来自Slave的IO线程请求,负责IO复制的IO线程根据Slave的请求信息读取相应的日志内容,然后将本地读取的bin-log的文件名、位置及指定位置之后的内容一起返回给Slave的IO线程处理。 3:Slave的IO线程将接收到的信息依次添加到Slave端的relay-log文件的最末端,并将读取到的Master端的bin-log的文件名和位置记录到Master-info文件中,以便在下一次读取的时候能够清楚的告诉Master“我需要从哪个bin-log的哪个位置开始往后的日志内容请发给我”。
4:Slave的sql线程检查到relay-log中新增了内容后,会马上将relay-log中的内容解析为在Master端真实执行时候的可执行命令,并顺序执行,从而保证对Slave的MySQL进行响应的增加或删除等操作,最终实现和Master数据保持一致。
MySQL主从复制原理以及流程:
一、l 主节点 binary log dump 线程
当从节点连接主节点时,主节点会创建一个log dump 线程,用于发送bin-log的内容。在读取bin-log中的操作时,此线程会对主节点上的bin-log加锁,当读取完成,甚至在发动给从节点之前,锁会被释放。
二、l 从节点I/O线程
当从节点上执行
start slave
命令之后,从节点会创建一个I/O线程用来连接主节点,请求主库中更新的bin-log。I/O线程接收到主节点binlog dump 进程发来的更新之后,保存在本地relay-log中。三、l 从节点SQL线程
SQL线程负责读取relay log中的内容,解析成具体的操作并执行,最终保证主从数据的一致性。
MySQL数据库自身提供的主从复制功能可以方便的实现数据的多处自动备份,实现数据库的拓展。多个数据备份不仅可以加强数据的安全性,通过实现读写分离还能进一步提升数据库的负载性能。
下图就描述了一个多个数据库间主从复制与读写分离的模型
在一主多从的数据库体系中,多个从服务器采用异步的方式更新主数据库的变化,业务服务器在执行写或者相关修改数据库的操作是在主服务器上进行的,读操作则是在各从服务器上进行。如果配置了多个从服务器或者多个主服务器又涉及到相应的负载均衡问题,关于负载均衡具体的技术细节还没有研究过,今天就先简单的实现一主一从的主从复制功能。
MySQL之间数据复制的基础是二进制日志文件(binary log file)。一台MySQL数据库一旦启用二进制日志后,其作为master,它的数据库中所有操作都会以“事件”的方式记录在二进制日志中,其他数据库作为slave通过一个I/O线程与主服务器保持通信,并监控master的二进制日志文件的变化,如果发现master二进制日志文件发生变化,则会把变化复制到自己的中继日志中,然后slave的一个SQL线程会把相关的“事件”执行到自己的数据库中,以此实现从数据库和主数据库的一致性,也就实现了主从复制。
Mysql中的myisam与innodb的区别:
1、InooDB支持事务,而MyISAM不支持事务;2、InnoDB支持行级锁,而MyISAM支持表级锁;3、InnoDB支持MVCC,而MyISAM不支持;4、InnoDB支持外键,而MyISAM不支持;5、InnoDB不支持全文索引,而MyISAM支持
B树和B+树的区别
1、B树,每个节点都存储key和data,所有的节点组成这可树,并且叶子节点指针为null,叶子节点不包含任何关键字信息
2、B+树,所有的叶子节点中包含全部关键字的信息,及指向含有这些关键字记录的指针,且叶子节点本身依关键字的大小自小到大的顺序链接,所有的非终端节点可以看成是索引部分,节点中仅含有其子树根节点中最大(或最小)关键字
写一个脚本将数据库备份并打包至远程服务器192.168.1.1 /backup目录下:
mount 192.168.1.1:/backup /mnt
cd /mnt
/usr/local/mysql/bin/mysqldump -hlocalhost -uroot
test >test.sql
tar czf test.sql.tar.gz test.sql
rm -f test.sql
HTTP和Nginx的状态码解析:
1XX 它表示请求已经被接受,正在继续处理,这种响应是临时响应,不会返回响应体。
2XX 成功处理并返回,它表示在服务器内已经被接收,被知晓,并处理完成。
200: 成功,请求数据通过响应报文的entity-body部分发送;OK
3XX 重定向功能,告知客户端需要继续执行操作才可以完成请求。
301: 请求的URL指向的资源已经被删除;但在响应报文中通过首部Location指明源现在所处的新位置;302: 响应报文Location指明资源临时新位置;304: 客户端发出了条件式请求,但服务器上的资源未曾发生改变,则通过响应此状态码通知客户端;
4XX 出现问题,和客户端有关系,比如401表示权限问题,404表示访问了一个不存在的URL。
401: 需要输入账号和密码认证方能访问资源;403禁止访问:1、将nginx.config的user改为和启动用户一致;2、配置文件中index index.html index.htm这行指定的文件。3、修改web目录的读写权限,或者是把nginx的启动用户改成目录的所属用户,4、关闭/etc/selinux/config;404: 服务器无法找到客户端请求的资源;原因:有可能location路径写错 了,要在nginx.conf/index.html 文件中添加缺失文件。
5XX 出现问题,和服务端有关,比如500表示内部错误,原因是:ASP语法出错、ACCESS数据库连接语句出错、文件引用与包含路径出错(如未启用父路径)、使用了服务器不支持的组件,如FSO等。502 Bad Gateway错误是FastCGI有问题, 1.FastCGI进程是否已经启动 ;2.FastCGI worker进程数是否不够; 3、增加缓冲区容量大小;503: 服务不可用,临时服务器维护或过载,服务器无法处理请求;排查方法:1、管理员可能关闭应用程序池以执行维护。2、当请求到达时应用程序池队列已满。3、应用程序池的性能选项卡的请求队列限制所填的数值太小,默认为1000。
504 网关超时;1. 优化业务代码:一个接口调用超过一分钟,一定有可以优化的地方,看看数据库或者接口的调用是否合理,是否可以合并请求。2. 修改Nginx的服务器配置:如果实在是优化不了了,可以把Nginx的超时时间上调。
HTTP1.1与1.0的区别、HTTP与HTTPS的区别?
1、引入持久连接,即 在同一个TCP的连接中可传送多个HTTP请求 & 响应2、多个请求 & 响应可同时进行、可重叠;3、引入更加多的请求头 & 响应头
在linux系统中,一般都会有swap内存,你觉得使用swap内存有什么好处,在什么情况下swap内存才会被使用?你觉得在生产环境中要不要用swap内存?
答:好处:在内存不够用的时候,将部分内存上的数据交换到swap空间上,以便让系统不会因为内存不够用而导致紧急情况出现。
什么情况下会用swap:当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到swap空间中,等到那些程序要运行时,再从swap中恢复保存的数据到内存中。这样,系统总是在物理内存不够时,才进行swap交换。
简述进程的启动、终止的方式以及如何进行进程的查看:
答:在Linux中启动一个进程有手工启动和调度启动两种方式:
(1)手工启动:用户在输入端发出命令,直接启动一个进程的启动方式。可以分为:①前台启动:直接在SHELL中输入命令进行启动。②后台启动:启动一个目前并不紧急的进程,如打印进程。
(2)调度启动:系统管理员根据系统资源和进程占用资源的情况,事先进行调度安排,指定任务运行的时间和场合,到时候系统会自动完成该任务。 经常使用的进程调度命令为:at、batch、crontab。
什么是静态路由,其特点是什么?什么是动态路由,其特点是什么?
答:静态路由是由系统管理员设计与构建的路由表规定的路由。适用于网关数量有限的场合,且网络拓朴结构不经常变化的网络。其缺点是不能动态地适用网络状况的变化,当网络状况变化后必须由网络管理员修改路由表。
动态路由是由路由选择协议而动态构建的,路由协议之间通过交换各自所拥有的路由信息实时更新路由表的内容。动态路由可以自动学习网络的拓朴结构,并更新路由表。其缺点是路由广播更新信息将占据大量的网络带宽。
简述网络文件系统NFS,并说明其作用:
答:网络文件系统是应用层的一种应用服务,它主要应用于Linux和Linux系统、Linux和Unix系统之间的文件或目录的共享。对于用户而言可以通过 NFS方便的访问远地的文件系统,使之成为本地文件系统的一部分。采用NFS之后省去了登录的过程,方便了用户访问系统资源。
有状态和无状态的服务区别:
答:无状态的HTTP协议:http(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议,常基于TCP的连接方式,绝大多数的Web开发,都是构建在HTTP协议之上的Web应用。协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话。
有状态就是多次访问之间有关联关系,需要记录多次之间的访问关系。
Redis怎么保证数据高可用和业务的并发能力?
Redis:是开源的、基于内存的非关系型键值数据库;易扩展、高性能、具备数据持久化等功能;在高并发、低延迟的环境中应用广泛。
Redis 高可用:如果是做主从架构部署,那么加上哨兵就可以了,就可以实现任何一个实例宕机,可以进行主备切换:master node 在故障时,自动检测,并且将某个 slave node 自动切换成 master node 的过程。Redis 实现高并发主要依靠主从架构,一主多从,如果想要在实现高并发的同时,容纳大量的数据,那么就需要 redis 集群,使用 redis 集群之后,可以提供每秒几十万的读写并发。
Redis哨兵的功能及redis主备复制流程?
哨兵的功能:集群监控:负责监控 redis master 和 slave 进程是否正常工作。消息通知:如果某个 redis 实例有故障,那么哨兵负责发送消息作为报警通知给管理员。故障转移:如果 master node 挂掉了,会自动转移到 slave node 上。配置中心:如果故障转移发生了,通知 client 客户端新的 master 地址。
Redis集群的原理,redis分片是怎么实现的,公司redis用在了哪些环境?
答:redis3.0版本之前是不支持集群的,官方推荐最大的节点数量为1000,至少需要3(Master)+3(Slave)才能建立集群,是无中心的分布式存储架构,可以在多个节点之间进行数据共享,解决了Redis高可用、可扩展等问题。集群可以将数据自动切分(split)到多个节点,当集群中的某一个节点故障时,redis还可以继续处理客户端的请求。
redis分片:分片(partitioning)就是将你的数据拆分到多个 Redis 实例的过程,这样每个实例将只包含所有键的子集。当数据量大的时候,把数据分散存入多个数据库中,减少单节点的连接压力,实现海量数据存储。分片部署方式一般分为以下三种:
(1)在客户端做分片;这种方式在客户端确定要连接的redis实例,然后直接访问相应的redis实例;
(2)在代理中做分片;这种方式中,客户端并不直接访问redis实例,它也不知道自己要访问的具体是哪个redis实例,而是由代理转发请求和结果;其工作过程为:客户端先将请求发送给代理,代理通过分片算法确定要访问的是哪个redis实例,然后将请求发送给相应的redis实例,redis实例将结果返回给代理,代理最后将结果返回给客户端。
(3)在redis服务器端做分片;这种方式被称为“查询路由”,在这种方式中客户端随机选择一个redis实例发送请求,如果所请求的内容不再当前redis实例中它会负责将请求转交给正确的redis实例,也有的实现中,redis实例不会转发请求,而是将正确redis的信息发给客户端,由客户端再去向正确的redis实例发送请求。
redis用在:java、php环境用到redis,主要缓存有登录用户信息数据、设备详情数据、会员签到数据等。
Redis的特性及应用场景?
支持数据的持久化:可以将内存中的数据保持在磁盘中,重启 redis 服务或者服务器之后可以从备份文件中恢复数据到内存继续使用。
支持的数据类型:支持 string(字符串)、hash(哈希数据)、list(列表)、set(集合)、zet(有序集合)
支持数据的备份:master-slave 模式的数据备份,快照+AOF。
支持集群横向扩展:基于 redis cluster 的横向扩展,可以实现分布式集群,大幅提升性能和数据安全性。
应用场景:1、Session 共享:常见于 web 集群中的 Tomcat 或者 PHP 中多 web 服务器 session 共享;2、消息队列:ELK 的日志缓存、部分业务的订阅发布系统;3、计数器:访问排行榜、商品浏览数等和次数相关的数值统计场景;4、缓存:数据查询、电商网站商品信息、新闻内容;5、微博/微信社交场合:共同好友、点赞评论等
Redis持久化是如何实现(一种是RDC、一种是AOF、),说一下二者区别:
RDB:就是在不同的时间点,将redis存储的数据生成快照并存储到磁盘等介质上;redis在进行数据持久化的过程中,会先将数据写入到一个临时文件中,待持久化过程都结束了,才会用这个临时文件替换上次持久化好的文件。正是这种特性,让我们可以随时来进行备份,因为快照文件总是完整可用的。redis会单独创建(fork)一个子进程来进行持久化,而主进程是不会进行任何IO操作的,这样就确保了redis极高的性能。如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效。缺点:RDB需要定时持久化,风险是可能会丢两次持久之间的数据,量可能很大。
AOF:将执行过的写指令记录下来,在数据恢复时按照从前到后的顺序再将指令都执行一遍。通过配置redis.conf中的appendonly yes就可以打开AOF功能。如果有写操作(如SET等),redis就会被追加到AOF文件的末尾。默认的AOF持久化策略是每秒钟fsync一次(fsync是指把缓存中的写指令记录到磁盘中),即使redis故障,也只会丢失最近1秒钟的数据。如果在追加日志时,恰好遇到磁盘空间满、inode满或断电等情况导致日志写入不完整,也没有关系,redis提供了redis-check-aof工具,可以用来进行日志修复。缺点:AOF每秒fsync一次指令硬盘,如果硬盘IO慢,会阻塞父进程;风险是会丢失1秒多的数据;在Rewrite过程中,主进程把指令存到mem-buffer中,最后写盘时会阻塞主进程。
使用Redis做缓存时,出现过什么问题?
1、参数;在RDB快照失败时,必须要允许写入数据,2、redis集群中的服务器更换问题;备份数据,拷贝RDB/AOF文件,3、监控的颗粒度要做的足够精细;info、check信息。
MySQL和Redis的区别:
mysql是关系型数据库,是持久化存储的,查询检索的话,会涉及到磁盘IO操作,为了提高性能,可以使用缓存技术,而memcached就是内存数据库,数据存储在内存中(当然也可以进行持久化存储),可以用作缓存数据库。用户首先去memcached查询数据,如果未查询到(即缓存未命中),才去MySQL中查询数据,查询到的数据会更新到缓存数据库中,提供给下次可能进行的查询。提高了数据查询方面的性能。
Redis是内存数据库,数据保存在内存中,访问速度快。MySQL是关系型数据库,功能强大,存储在磁盘中,数据访问速度慢。像memcached,MongoDB,Redis等,都属于No sql系列。
你会使用哪些虚拟化技术?
答:vmware vsphere及kvm,我用得比较多的是vmware vsphere虚拟化,基本上生产环境都用的vmware vsphere,kvm我是用在测试环境中使用。vmware 是属于原生架构虚拟化技术,也就是可直接在硬件上运行。kvm属于寄居架构的虚拟化技术,它是依托在系统之上运行。vmware vcenter管理上比较方便,图形管理界面功能很强大,稳定性强,一般比较适合企业使用。KVM管理界面稍差点,需要管理人员花费点时间学习它的维护管理技术。
nginx中rewrite有哪几个flag标志位(last、break、redirect、permanent),说一下都什么意思?常用的Nginx模块,用来做什么的?在proxy模块中你配置过哪些参数?
答:last : 相当于Apache的[L]标记,表示完成当前的rewrite规则
break : 停止执行当前虚拟主机的后续rewrite指令集
redirect : 返回302临时重定向,地址栏会显示跳转后的地址
permanent : 返回301永久重定向,地址栏会显示跳转后的地址、
301和302不能简单的只返回状态码,还必须有重定向的URL,这就是return指令无法返回301,302的原因了。这里 last 和 break 区别有点难以理解:
last一般写在server和if中,而break一般使用在location中
last不终止重写后的url匹配,即新的url会再从server走一遍匹配流程,而break终止重写后匹配
break和last都能组织继续执行后面的rewrite指令
1、rewrite模块,实现重写功能 2、access模块:来源控制 3、ssl模块:安全加密 4、ngx_http_gzip_module:网络传输压缩模块 5、ngx_http_proxy_module 模块实现代理 6、ngx_http_upstream_module模块实现定义后端服务器列表 7、ngx_cache_purge实现缓存清除功能
proxy模块中配置过:proxy_set_header、proxy_connect_timeout、proxy_send_timeout、proxybuffer
如何优化Nginx?
1.nginx配置的优化:从进程数、链接设置、缓存设置方面进行优化;2、从集群架构优化;3. 让worker进程使用普通用户运行,使用非root运行nginx master;4. 配置nginx worker进程个数,worker进程为用户提供服务一般设置为cpu核数×2,修改nginx.conf配置文件第一行 : worker_processes 4;
什么是运维:
运维是指大型组织已经建立好的网络软硬件的维护,就是要保证业务的上线与运作的正常,在他运转的过程中,对他进行维护,他集合了网络、系统、数据库、开发、安全、监控于一身的技术;运维又包括很多种,有DBA运维、网站运维、虚拟化运维、监控运维、游戏运维等等。
现在给你三百台服务器,你怎么对他们进行管理?
管理3百台服务器的方式:
1)设定跳板机,使用统一账号登录,便于安全与登录的考量。
2)使用salt、ansiable、puppet进行系统的统一调度与配置的统一管理。
3)建立简单的服务器的系统、配置、应用的cmdb信息管理。便于查阅每台服务器上的各种信息记录。
简述raid0 raid1 raid5 三种工作模式的工作原理及特点:
RAID,可以把硬盘整合成一个大磁盘,还可以在大磁盘上再分区,放数据,还有一个大功能,多块盘放在一起可以有冗余(备份)
RAID整合方式有很多,常用的:0 1 5 10
RAID 0,可以是一块盘和N个盘组合
优点:读写快,是RAID中最好的 缺点:没有冗余,一块坏了数据就全没有了
RAID 1,只能2块盘,盘的大小可以不一样,以小的为准;10G+10G只有10G,另一个做备份。它有100%的冗余,缺点:浪费资源,成本高
RAID 5,3块盘,容量计算10(n-1),允许损失一块盘特点,读写性能一般,读还好一点,写不好
冗余从好到坏:RAID1 RAID10 RAID 5 RAID0
性能从好到坏:RAID0 RAID10 RAID5 RAID1
成本从低到高:RAID0 RAID5 RAID1 RAID10
单台服务器:很重要盘不多,系统盘,RAID1
数据库服务器:主库:RAID10 从库 RAID5RAID0(为了维护成本,RAID10)
WEB服务器,如果没有太多的数据的话,RAID5,RAID0(单盘)
有多台,监控、应用服务器,RAID0 RAID5
LVS、Nginx、HAproxy有什么区别?工作中你怎么选择?
答:LVS: 是基于四层的转发;HAproxy:是基于四层和七层的转发,是专业的代理服务器;Nginx:是WEB服务器,缓存服务器,又是反向代理服务器,可以做七层的转发
区别: LVS由于是基于四层的转发所以只能做端口的转发;而基于URL的、基于目录的这种转发LVS就不行
工作选择:HAproxy和Nginx由于可以做七层的转发,所以URL和目录的转发都可以做;在很大并发量的时候我们就要选择LVS,像中小型公司的话并发量没那么大;选择HAproxy或者Nginx足已,由于HAproxy由是专业的代理服务器;配置简单,所以中小型企业推荐使用HAproxy。
什么是中间件?什么是jdk?
中间件:叫作中间件服务器或应用服务器;是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源;中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯;是连接两个独立应用程序或独立系统的软件。相连接的系统即使它们具有不同的接口;但通过中间件相互之间仍能交换信息。执行中间件的一个关键途径是信息传递;通过中间件,应用程序可以工作于多平台或OS环境。常见中间件有:kafka、rabbitMQ;
jdk:jdk是Java的开发工具包;它是一种用于构建在Java平台上发布的应用程序、applet和组件的开发环境。
Tomcat8005、8009、8080三个端口的含义?如何查看8080端口
8005:关闭时使用;8009:为AJP端口;即容器使用,如Apache能通过AJP协议访问Tomcat的8009端口;8080:默认端口,一般应用使用。netstat -anlp | grep 8080 or lsof -i:8080
Tomcat中使用的连接器是什么?
在Tomcat中,使用了两种类型的连接器:
HTTP连接器:它有许多可以更改的属性,以确定它的工作方式和访问功能,如重定向和代理转发。
AJP连接器:它以与HTTP连接器相同的方式工作,但是他们使用的是HTTP的AJP协议。AJP连接器通常通过插件技术mod_jk在Tomcat中实现。
什么叫CDN?CDN连接失败的原因有哪些?
答:即内容分发网络;基本原理是广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或网络中,在用户访问网站时,利用全局负载技术将用户的访问指向距离最近的工作正常的缓存服务器上,由缓存服务器直接响应用户请求。其目的是通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到最接近用户的网络边缘;使用户可就近取得所需的内容,提高用户访问网站的速度,解决不同运营商之间的互联,因为可以让联通的网络访问联通让电信的网络访问电信,起到加速用户访问的目的。
1、CDN服务器网络间接性的故障。2、CDN节点出现故障,主要原因是CDN服务商所提供的节点分布有限或不均衡。3、本地网络处于不正常的状态。4、数据传输过程中,网络出现网络拥堵或发生故障。5、CDN节点被大量的DDoS或CC。
什么叫网站灰度发布?
答:灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式;挑出部分主机让其上线,待这些主机没有重大问题的时候,再发布至所有服务器。
简述DNS进行域名解析的过程?
答:用户要访问 www.baidu.com, 会先找本机的host文件,再找本地设置的DNS服务器,如果也没有的话,就去网络中找根服务器,根服务器反馈结果,说只能提供一级域名服务器.cn,就去找一级域名服务器,一级域名服务器说只能提供二级域名服务器.com.cn,就去找二级域名服务器,二级域服务器只能提供三级域名服务器.baidu.com.cn,就去找三级域名服务器,三级域名服务器正好有这个网站www.baidu.com, 然后发给请求的服务器,保存一份之后,再发给客户端。
RabbitMQ是什么东西?
答:RabbitMQ也就是消息队列中间件,消息中间件是在消息的传息过程中保存消息的容器;消息中间件再将消息从它的源中到它的目标中标时充当中间人的作用;队列的主要目的是提供路由并保证消息的传递;如果发送消息时接收者不可用;消息队列不会保留消息,直到可以成功地传递为止,当然,消息队列保存消息也是有期限地。
优势:(1).RabbitMQ易于使用和部署,适宜于很多场景如路由、负载均衡或消息持久化等,用消息队列只需几行代码即可搞定。(2).对外提供客户端API,支持多种编程语言。(3).基于erlang语言开发具有高可用高并发的优点,适合集群服务器。(4). 健壮、稳定、易用、开源、跨平台、支持多种语言、文档齐全。(5). 有消息确认机制和持久化机制,可靠性高。
劣势:(1).这使得它的可扩展性差,速度较慢,因为中央节点增加了延迟,消息封装后也比较大。
Kafka:具有以下特性:快速持久化,可以在O(1)的系统开销下进行消息持久化;高吞吐,在一台普通的服务器上既可以达到10W/s的吞吐速率;完全的分布式系统,Broker、Producer、Consumer都原生自动支持分布式,自动实现负载均衡;支持Hadoop数据并行加载,Kafka通过Hadoop的并行加载机制来统一在线和离线的消息处理。
优势:(1).通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。(2).高吞吐量:即使是非常普通的硬件kafka也可以支持每秒数十万的消息,适合产生大量数据的互联网服务的数据收集业务。(3).支持通过kafka服务器和消费机集群来分区消息。(4).支持Hadoop并行数据加载。
zookeeper=文件系统+通知机制;是一个分布式的,开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和 命名服务等。Zookeeper是hadoop的一个子项目,其发展历程无需赘述。在分布式应用中,由于工程师不能很好地使用锁机制,以及基于消息的协调 机制不适合在某些应用中使用,因此需要有一种可靠的、可扩展的、分布式的、可配置的协调机制来统一系统的状态。
Leader主要有三个功能:1 .恢复数据; 2 .维持与Learner的心跳,接收Learner请求并判断Learner的请求消息类型; 3 .Learner的消息类型主要有PING消息、REQUEST消息、ACK消息、REVALIDATE消息,根据不同的消息类型,进行不同的处理。
Follower主要有四个功能:1. 向Leader发送请求(PING消息、REQUEST消息、ACK消息、REVALIDATE消息);2 .接收Leader消息并进行处理;3 .接收Client的请求,如果为写请求,发送给Leader进行投票;4 .返回Client结果。
Keepalived的工作原理?如何做健康检查
答:在一个虚拟路由器中,只有作为MASTER的VRRP路由器会一直发送VRRP通告信息,BACKUP不会抢占MASTER,除非它的优先级更高。当MASTER不可用时(BACKUP收不到通告信息),多台BACKUP中优先级最高的这台会被抢占为MASTER。这种抢占是非常快速的(<1s),以保证服务的连续性;由于安全性考虑,VRRP包使用了加密协议进行加密。BACKUP不会发送通告信息,只会接收通告信息。
keepalived主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式,vrrp模块是来实现VRRP协议的;
Keepalived健康检查方式配置
HTTP_GET|SSL_GET
HTTP_GET | SSL_GET
{
url {
path /# HTTP/SSL 检查的url可以是多个
digest <STRING> # HTTP/SSL 检查后的摘要信息用工具genhash生成
status_code 200# HTTP/SSL 检查返回的状态码
}
connect_port 80 # 连接端口
bindto<IPADD>
connect_timeout 3 # 连接超时时间
nb_get_retry 3 # 重连次数
delay_before_retry 2 #连接间隔时间
}
讲述一下LVS三种模式的工作过程?
LVS 有三种负载均衡的模式,分别是VS/NAT(nat 模式) VS/DR(路由模式) VS/TUN(隧道模式)
一、NAT模式(VS-NAT):
原理:当包到达 LVS 时,LVS 做目标地址转换(DNAT),将目标 IP 改为 RS 的 IP。RS 接收到包以后,仿佛是客户端直接发给它的一样。RS 处理完,返回响应时,源 IP 是 RS IP,目标 IP 是客户端的 IP。这时 RS 的包通过网关(LVS)中转,LVS 会做源地址转换(SNAT),将包的源地址改为 VIP,这样,这个包对客户端看起来就仿佛是 LVS 直接返回给它的。
优点:集群中的物理服务器可以使用任何支持TCP/IP操作系统,只有负载均衡器需要一个合法的IP地址。
缺点:扩展性有限。当服务器节点(普通PC服务器)增长过多时,负载均衡器将成为整个系统的瓶颈;因为所有的请求包和应答包的流向都经过负载均衡器。当服务器节点过多时;大量的数据包都交汇在负载均衡器那,速度就会变慢!
二、IP隧道模式(VS-TUN)
原理:首先要知道,互联网上的大多Internet服务的请求包很短小,而应答包通常很大;那么隧道模式就是,把客户端发来的数据包,封装一个新的IP头标记(仅目的IP)发给RS;RS收到后,先把数据包的头解开,还原数据包,处理后,直接返回给客户端,不需要再经过负载均衡器。注意,由于RS需要对负载均衡器发过来的数据包进行还原,所以说必须支持 IP TUNNEL协议,所以,在RS的内核中,必须编译支持IPTUNNEL这个选项。
优点:负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户;所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,就能处理很巨大的请求量;这种方式,一台负载均衡器能够为很多RS进行分发。而且跑在公网上就能进行不同地域的分发。
缺点:隧道模式的RS节点需要合法IP,这种方式需要所有的服务器支持 ”IP Tunneling” (IP Encapsulation)协议,服务器可能只局限在部分Linux系统上。
三、直接路由模式(VS-DR)
原理:一个请求过来时,LVS 只需要将网络帧的 MAC 地址修改为某一台 RS 的 MAC,该包就会被转发到相应的 RS 处理,注意此时的源 IP 和目标 IP 都没变,LVS 只是做了一下移花接木。RS 收到 LVS 转发来的包时,链路层发现 MAC 是自己的,到上面的网络层,发现 IP 也是自己的,于是这个包被合法地接受,RS 感知不到前面有 LVS 的存在。而当 RS 返回响应时,只要直接向源 IP(即用户的 IP)返回即可,不再经过 LVS。
优点:和TUN(隧道模式)一样,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端;与VS-TUN相比,VS-DR这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务器。
缺点:要求负载均衡器的网卡必须与物理网卡在一个物理段上。
mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟?
mysql的innodb如何定位锁问题:
在使用 show engine innodb status检查引擎状态时,发现了死锁问题;在5.5中,information_schema 库中增加了三个关于锁的表(MEMORY引擎)
innodb_trx ## 当前运行的所有事务 innodb_locks ## 当前出现的锁 innodb_lock_waits ## 锁等待的对应关系
mysql如何减少主从复制延迟:
如果延迟比较大,就先确认以下几个因素:
1、从库硬件比主库差,导致复制延迟;2、主从复制单线程,如果主库写并发太大,来不及传送到从库就会导致延迟。更高版本的mysql可以支持多线程复制;3、慢SQL语句过多;4、网络延迟;5、master负载:主库读写压力大,导致复制延迟,架构的前端要加buffer及缓存层;6、slave负载:一般的做法是,使用多台slave来分摊读请求,再从这些slave中取一台专用的服务器。
MySQL数据库主从同步延迟解决方案
最简单的减少slave同步延时的方案就是在架构上做优化,尽量让主库的DDL快速执行;还有就是主库是写,对数据安全性较高,比如sync_binlog=1,innodb_flush_log_at_trx_commit= 1 之类的设置,而slave则不需要这么高的数据安全,完全可以讲sync_binlog设置为0或者关闭binlog。innodb_flushlog也可以设置为0来提高sql的执行效率。另外就是使用比主库更好的硬件设备作为slave。
如何重置mysql root密码?
答:一、在已知MYSQL数据库的ROOT用户密码的情况下,修改密码的方法:
1、在SHELL环境下,使用mysqladmin命令设置: mysqladmin –u root –p password “新密码” 回车后要求输入旧密码
2、在mysql>环境中,使用update命令,直接更新mysql库user表的数据: Update mysql.user set password=password(‘新密码’) where user=’root’; / flush privileges; 注意:mysql语句要以分号”;”结束
3、在mysql>环境中,使用grant命令,修改root用户的授权权限。
grant all on . to root@’localhost’ identified by ‘新密码’;
忘记了mysql数据库的ROOT用户的密码,又如何做呢?方法如下:
1、关闭当前运行的mysqld服务程序:service mysqld stop(要先将mysqld添加为系统服务)
2、使用mysqld_safe脚本以安全模式(不加载授权表)启动mysqld 服务 /usr/local/mysql/bin/mysqld_safe --skip-grant-table &
3、使用空密码的root用户登录数据库,重新设置ROOT用户的密码 #mysql -u root / Mysql> Update mysql.user set password=password(‘新密码’) where user=’root’;
Mysql> flush privileges;
lvs/nginx/haproxy优缺点
Nginx的优点是:
1、跨平台:Nginx 可以在大多数 Unix like OS编译运行;
2、Master/Worker 结构:一个 master 进程,生成一个或多个 worker 进程;
3、配置异常简单:非常容易上手。
4、非阻塞、高并发连接:官方测试能够支撑5万并发连接。
5、内置的健康检查功能:如果 Nginx 代理的后端的某台 Web 服务器宕机了,不会影响前端访问;
6、稳定性高:用于反向代理,宕机的概率微乎其微。
Nginx的缺点/瓶颈是:
1、Nginx仅能支持http、https和Email协议,这样就在适用范围上面小些,这个是它的缺点。
2、对后端服务器的健康检查,只支持通过端口来检测,不支持通过url来检测;不支持Session的直接保持,但能通过ip_hash来解决;
LVS:使用Linux内核集群实现一个高性能、高可用的负载均衡服务器;它具有很好的可伸缩性(Scalability)、可靠性(Reliability)和可管理性(Manageability)
LVS的优点是:
1、抗负载能力强、是工作在网络4层之上仅作分发之用,没有流量的产生;这个特点也决定了它在负载均衡软件里的性能最强的,对内存和cpu资源消耗比较低;
2、配置性比较低,这是一个缺点也是一个优点,因为没有可太多配置的东西;所以并不需要太多接触,大大减少了人为出错的几率
3、工作稳定,因为其本身抗负载能力很强,自身有完整的双机热备方案:如LVS+Keepalived,不过我们在项目实施中用得最多的还是LVS/DR+Keepalived、
4、无流量,LVS只分发请求,而流量并不从它本身出去,这点保证了均衡器IO的性能不会收到大流量的影响。
5、应用范围较广,因为LVS工作在4层,所以它几乎可对所有应用做负载均衡,包括http、数据库、在线聊天室等
LVS的缺点是:
1、软件本身不支持正则表达式处理,不能做动静分离;而现在许多网站在这方面都有较强的需求,这个是Nginx/HAProxy+Keepalived的优势所在;
2、如果是网站应用比较庞大的话,LVS/DR+Keepalived实施起来就比较复杂了;后面有Windows Server的机器的话,如果实施及配置还有维护过程就比较复杂了相对而言,Nginx/HAProxy+Keepalived就简单多了。
HAProxy的特点是:
1、HAProxy也是支持虚拟主机的。
2、HAProxy的优点能够补充Nginx的一些缺点,比如支持Session的保持,Cookie的引导;同时支持通过获取指定的url来检测后端服务器的状态。
3、HAProxy跟LVS类似,本身就只是一款负载均衡软件;单纯从效率上来讲HAProxy会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的。
4、HAProxy支持TCP协议的负载均衡转发,可以对MySQL读进行负载均衡;对后端的MySQL节点进行检测和负载均衡,大家可以用LVS+Keepalived对MySQL主从做负载均衡。
5、HAProxy负载均衡策略非常多,Round-robin(轮循)、Weight-round-robin(带权轮循)、source(原地址保持)、RI(请求URL)、rdp-cookie(根据cookie)。
Tomcat/Apache/Nginx区别:
Apache HTTP服务器是一个模块化的服务器,可以运行在几乎所有广泛使用的计算机平台上。其属于web服务器。Apache支持模块多,性能稳定,Apache本身是静态解析,适合静态HTML、图片等,但可以通过扩展脚本、模块等支持动态页面等。
Tomcat是应用(Java)服务器,它是一个Servlet容器,可以认为是Apache的扩展,但是可以独立于Apache运行。
Nginx是一个高性能的HTTP和反向代理服务器。Nginx优点:负载均衡、反向代理、处理静态文件优势。nginx处理静态请求的速度高于apache;
mysql数据备份工具:
mysqldump工具:
mysqldump是mysql自带的备份工具,目录在bin目录下面:/usr/local/mysql/bin/mysqldump;支持基于innodb的热备份,但是由于是逻辑备份,所以速度不是很快,适合备份数据比较小的场景,Mysqldump完全备份+二进制日志可以实现基于时间点的恢复。
基于LVM快照备份:
在物理备份中,有基于文件系统的物理备份(LVM的快照),也可以直接用tar之类的命令对整个数据库目录进行打包备份,但是这些只能进行泠备份,不同的存储引擎备份的也不一样,myisam自动备份到表级别;而innodb不开启独立表空间的话只能备份整个数据库。
tar包备份:
percona提供的xtrabackup工具:支持innodb的物理热备份,支持完全备份,增量备份,而且速度非常快,支持innodb存储引起的数据在不同数据库之间迁移,支持复制模式下的从机备份恢复备份恢复,为了让xtrabackup支持更多的功能扩展;可以设立独立表空间,打开 innodb_file_per_table功能,启用之后可以支持单独的表备份。
说说TCP/IP的七层模型:
应用层 (Application):网络服务与最终用户的一个接口。
协议有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP
表示层(Presentation Layer):数据的表示、安全、压缩。(在五层模型里面已经合并到了应用层)
格式有,JPEG、ASCll、DECOIC、加密格式等。
会话层(Session Layer):建立、管理、终止会话。(在五层模型里面已经合并到了应用层);对应主机进程,指本地主机与远程主机正在进行的会话。
传输层 (Transport):定义传输数据的协议端口号,以及流控和差错校验。协议有:TCP UDP,数据包一旦离开网卡即进入网络传输层。
网络层 (Network):进行逻辑地址寻址,实现不同网络之间的路径选择。
协议有:ICMP IGMP IP(IPV4 IPV6) ARP RARP
数据链路层 (Link):建立逻辑连接、进行硬件地址寻址、差错校验等功能。(由底层网络定义协议);将比特组合成字节进而组合成帧,用MAC地址访问介质,错误发现但不能纠正。
物理层(Physical Layer):是计算机网络OSI模型中最低的一层;物理层规定:为传输数据所需要的物理链路创建、维持、拆除而提供具有机械的,电子的,功能的和规范的特性;简单的说,物理层确保原始的数据可在各种物理媒体上传输。局域网与广域网皆属第1、2层;物理层是OSI的第一层,它虽然处于最底层,却是整个开放系统的基础;物理层为设备之间的数据通信提供传输媒体及互连设备,为数据传输提供可靠的环境;如果您想要用尽量少的词来记住这个第一层,那就是“信号和介质”。
正向代理:是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。
正向代理的用途:1、访问原来无法访问的资源,如google;2、可以做缓存,加速访问资源;3、对客户端访问授权、上网进行认证;4、代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息。
反向代理:实际运行方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
反向代理的用途:1、保证内网的安全,可以使用反向代理提供WAF功能,阻止web;2、大型网站,通常将反向代理作为公网访问地址,Web服务器是内网。
所谓四层负载均衡,也就是主要通过报文中的目标地址和端口,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。
所谓七层负载均衡,也称为“内容交换”,也就是主要通过报文中的真正有意义的应用层内容,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。
三次握手and四次挥手:
第一次握手:建立连接时,客户端发送同步序列号syn=1,随机产生seq数据包,发送seq=x到服务器,并进入syn_sent状态,等待服务器确认。
第二次握手:服务器收到报文请求,由syn=1知道客户端要建立连接请求,向客户端发送ack(ack=x+1),syn=1,同时自己也会发送一个syn(seq=y),即syn+ack包,此时服务器进入syn_sent状态。
第三次握手:客户端收到服务器syn+ack数据包,向服务器发送确认包ack(ack=y+1),同时发送序号:seq=x+1。此包发送完毕客户端与服务器进入建立连接状态。
第一次断开:客户方发给服务器一个FIN为1的请求,FIN为1表示是一个断开连接的请求,即表示数据传输完毕请求断开,并发送seq序列号和Ack确认号。
第二次断开:服务器收到客户端请求并返回ACK标志位为1,Ack为Seq+1等于201,并将对方的Ack作为自己的Seq序列号的确认数据包,biao 接收到请求同意断开。
第三次断开:服务器发送ACK=1,FIN=1,Seq等于客户端第一次请求断开的Ack确认号+1,即Seq等于501的断开请求给客户端。
第四次断开:客户端发送ACK=1,Ack在上一步Seq上+1等于502,并使用在第二次断开中服务器发送的Ack确号201作为本次的序列号发给服务器表示同意断开,服务器收到后验证序列号是第二次的,验证Ack是第三次+1的,确认没有问题后同意断开,然后将端口置为TIME_WAIT状态,等待2 MSL时间后置为关闭状态,被动方收到主动方的报文确认Ack确认号没有问题后将端口置为CLOSED,至此端口关闭。
docker打镜像的过程;docker的优势:
1、启动一个临时容器;2、顺序执行dockerfile命令;3、build -t 保存并更名为指定的名称做本地保存;4、把临时容器删除;
Docker 的优势: 快速部署:高效虚拟化:节省开支:简化配置:快速迁移和扩展: 缺点:隔离性:各应用之间的隔离不如虚拟机。
Nginx中配置CPU亲和性,workerprocesses和workerCPU_affinity有什么好处?
降低了系统对CPU和内存的开销,主要是nginx的工作进程内存开销和回收。
Nginx默认几种调度算法:3种
常用的有3种调度算法(轮询、ip hash、权重)。
轮询:upstream按照轮询(默认)方式进行负载,每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。ip hash:每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。权重:指定轮询几率,权重(weight)和访问比率成正比,用于后端服务器性能不均的情况。
Apache默认几种工作模式:3种
1、Prefork MPM: 预派生模式,有一个主控制进程,然后生成多个子进程,使用select模型,最大并发1024,每个子进程有一个独立的线程响应用户请求,相对比较占用内存,但是比较稳定,可以设置最大和最小进程数,是最古老的一种模式,也是最稳定的模式,适用于访问量不是很大的场景。优点:稳定;缺点:慢,占用资源,不适用于高并发场景 2、woker MPM:是一种多进程和多线程混合的模型,有一个控制进程,启动多个子进程,每个子进程里面包含固定的线程,使用线程来处理请求,当线程不够使用的时候会再启动一个新的子进程,然后在进程里面再启动线程处理请求,由于其使用了线程处理请求,因此可以承受更高的并发。优点:相比prefork 占用的内存较少,可以同时处理更多的请求;缺点:使用keep-alive的长连接方式,某个线程会一直被占据,即使没有传输数据,也需要一直等待到超时才会被释放。如果过多的线程,被这样占据,也会导致在高并发场景下的无服务线程可用。比prefork 占用的内存较少,可以同时处理更多的请求; 3、event MPM:Apache中最新的模式,属于事件驱动模型(epoll),每个进程响应多个请求,在现在版本里的已经是稳定可用的模式。它和worker模式很像,最大的区别在于,它解决了keep-alive场景下,长期被占用的线程的资源浪费问题(某些线程因为被keep-alive,空挂在哪里等待,中间几乎没有请求过来,甚至等到超时)。event MPM中,会有一个专门的线程来管理这些keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务线程,执行完毕后,又允许它释放。这样增强了高并发场景下的请求处理能力。 优点:单线程响应多请求,占据更少的内存,高并发下表现更优秀,会有一个专门的线程来管理keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务线程,执行完毕后,又允许它释放 缺点:没有线程安全控制。
说一下你们公司的代码是怎么发布的?
发布:jenkins配置好代码路径(SVN或GIT),然后拉代码,打tag。需要编译就编译,编译之后推送到发布服务器(jenkins里面可以调脚本),然后从分发服务器往下分发到业务服务器上。
elk中的logstash是怎么收集日志的,在客户端的logstash配置文件主要有哪些内容?
input、output两大块配置;input中指定日志(type、path)等,output指定日志输出的目标(host、port)等。
ansible:src是文件的来源目标;dest是文件的目的方向;幂等性:一个任务执行一次和执行n次效果一样,不因重复执行带来意外情况;
ansible命令执行过程: 1. 加载自己的配置文件默认/etc/ansible/ansible.cfg;2. 加载自己对应的模块文件,如command;3. 通过ansible将模块或命令生成对应的临时py文件,并将该文件传输至远程服务器的对应执行用户$HOME/.ansible/tmp/ansible-tmp-数字/XXX.PY文件;4. 给文件+x执行;5. 执行并返回结果;6. 删除临时py文件,退出
执行状态:绿色:执行成功并且不需要做改变的操作;×××:执行成功并且对目标主机做变更;红色:执行失败
command与shell的功能:command是默认模块,只能对远程主机进行显示和文件的修改;command模块不支持重定向以及管道;shell模块支持重定向以及管道;
ansible web -m copy -a 'src=/data/config dest=/data2/selinux/' 将文件复制到web服务器下,如目标文件目录不存在,则会全部创建,无论几级。
copy模块能够传输和创建文件及指定权限:ansible 172.18.27.27 -m copy -a 'content="woai\nni" dest=/data/woaini.txt(存在会创建,不存在则不会创建,存在会覆盖之前内容)
可以将playbook文件进行加/解密:ansible-vault en/decrypt hello.yml 加/解密
ansible你用过它的哪些模块,ansbile同时分发多台服务器的过程很慢(它是逐台分发的),你想过怎么解决吗?
用过ansible的(copy file yum ping command shell)等模块;ansible默认只会创建5个进程,所以一次任务只能同时控制5台机器执行.如果有大量的机器需要控制,或者希望减少进程数,可以采取异步执行.ansible的模块可以把task放进后台,然后轮询它.这使得在一定进程数下能让大量需要的机器同时运作起来。
现在有一批机器的root用户和密码,怎么实现ansible主机和这批机器之间免秘钥认证呢?
1、ssh-keyscan 主机名 >> /root/.ssh/known_hosts;2、配置hosts文件,带密码参数ansible_ssh_pass;3、配置yml文件;4、运行ansible-playbook -i hosts ssh-addkey.yml
编写剧本:当主机为7,安装nginx、当主机为6,安装httpd;
[root@centos7 ~]#cat nginx_httpd_role.yml
hosts: web:app
roles:
-{ role: nginx, when: ansible_distribution_major_version == "7", tags: ["web","nginx"] }
-{ role: httpd, when: ansible_distribution_major_version == "6", tags: ["web","httpd"] }
编写剧本测试是哪个版本:
vim when.yml
-hosts: web
tasks:
-name: when6
file: path=/data/f6.txt state=touch
when: ansible_distribution_major_version == "6"
-name: when7
file: path=/data/f7.txt state=touch
when: ansible_distribution_major_version == "7" ansible-playbook when.yml
编写nginx.yml剧本:
[root@centos7 ~]#cat nginx.yml- hosts: app
tasks:- name: install
yum: name=nginx - name: config
template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
notify: restart - name: data
copy: src=/data/index.html dest=/usr/share/nginx/html/ - name: service
service: name=nginx state=started enabled=yes
handlers: - name: install
- name: restart
service: name=nginx state=restarted
编写mysql.yml的playbook剧本:
vim mysql.yml
-hosts:app
tasks:
-name:group
group:me=mysql system=yes
-name: user
user: name=mysql system=yes home=/data/mysql shell=/sbin/nologin group=mysql
-name: unarchive
unarchive: src=/data/mariadb-10.2.22-linux-x86_64.tar.gz dest=/usr/local
-name: mysqldir dir owner group
file: path=/usr/local/mariadb-10.2.22-linux-x86_64 state=directory owner=root group=root
recurse=yes
-name: mysqldir link
file: src=/usr/local/mariadb-10.2.22-linux-x86_64 path=/usr/local/mysql state=link
-name: data file
shell: chdir=/usr/local/mysql/ ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql
-name: config
copy: src=/data/my.cnf dest=/etc/ backup=yes
-name: script
copy: src=/data/myqld dest=/etc/init.d/ mode=755
-name: service
shell: /etc/init.d/mysqld start
zabbix 监控了多少客户端 客户端是怎么进行批量安装的?
根据实际公司台数回答。1、使用命令生成密钥。2、将公钥发送到所有安装zabbix客户端的主机。3、安装 ansible 软件,(修改配置文件,将zabbix 客户机添加进组)。4、创建一个安装zabbix客户端的剧本。5、执行该剧本。6、验证。
zabbix 怎么开启自定义监控:1、写一个脚本用于获取待监控服务的一些状态信息。2、在zabbix客户端的配置文件zabbix_agentd.conf中添加上自定义的“UserParameter”,目的是方便zabbix调用我们上面写的那个脚本去获取待监控服务的信息。3、在zabbix服务端使用zabbix_get测试是否能够通过第二步定义的参数去获取zabbix客户端收集的数据。4、在zabbix服务端的web界面中新建模板,同时第一步的脚本能够获取什么信息就添加上什么监控项,“键值”设置成前面配置的“UserParameter”的值。5、数据显示图表,直接新建图形并选择上一步的监控项来生成动态图表即可。
zabbix 自定义发现是怎么做的?
1、首先需要在模板当中创建一个自动发现的规则,这个地方只需要一个名称和一个键值。2、过滤器中间要添加你需要的用到的值宏。3、然后要创建一个监控项原型,也是一个名称和一个键值。4、然后需要去写一个这样的键值的收集。
自动发现实际上就是需要首先去获得需要监控的值,然后将这个值作为一个新的参数传递到另外一个收集数据的item里面去。
zabbix 是怎么实施监控的:
一个监控系统运行的大概的流程是这样的:agent需要安装到被监控的主机上,它负责定期收集各项数据,并发送到zabbix server端,zabbix server将数据存储到数据库中,zabbix web根据数据在前端进行展现和绘图。
【主动监测】通信过程如下:
zabbix首先向ServerActive配置的IP请求获取active items,获取并提交active tiems数据值server或者proxy。
获取ACTIVE ITEMS列表
Agent打开TCP连接(主动检测变成Agent打开)
Agent请求items检测列表
Server返回items列表
Agent 处理响应
关闭TCP连接
Agent开始收集数据
主动检测提交数据过程如下:
Agent建立TCP连接
Agent提交items列表收集的数据
Server处理数据,并返回响应状态
关闭TCP连接
【被动监测】通信过程如下:
Server打开一个TCP连接
Server发送请求agent.ping\n
Agent接收到请求并且响应
Server处理接收到的数据
关闭TCP连接
zabbix主被动模式有啥区别:zabbix有啥特点:
被动模式:此模式为zabbix默认的工作模式,由zabbix server向zabbix agent发出指令获取数据,zabbix agent被动地去获取数据并返回给zabbix server,zabbix server会周期性地向agent索取数据。此模式的最大问题就是会增加zabbix server的工作量,在大量的服务器环境下,zabbix server不能及时获取到最新的数据。
主动模式:即由zabbix agent主动采集数据并返回给zabbix server,不需要zabbix server的另行干预,因此使用主动模式能在一定程序上减轻zabbix server的压力。
zabbix可横向扩展、自定义监控项、支持多种监控方式、可监控网络与服务等。
centos 7 卸载 mariadb 的正确命令
列出所有被安装的rpm package rpm -qa | grep mariadb
卸载 rpm -e mariadb-libs-5.5.37-1.el7_0.x86_64
错误:依赖检测失败:
libmysqlclient.so.18()(64bit) 被 (已安裝) postfix-2:2.10.1-6.el7.x86_64 需要
强制卸载,因为没有--nodeps rpm -e --nodeps mariadb-libs-5.5.37-1.el7_0.x86_64
rpm -q tree &> /dev/null || yum -q -y install vsftpd 这是一键安装脚本。
RAID-10的工作原理
RAID10结合RAID1和RAID0,先镜像,再条带化;
特点: 磁盘数:最低4个,2n个,n大于等于2;
优点:读性能很高,写性能比较好,数据安全性好,允许同时有N个磁盘失效;
缺点:利用率只有50%,开销大;
可用空间:N*min(S1,S2,...其中最小空间)/2;
有容错能力:每组镜像最多只能坏一块;
适用领域:多用于要求高可用性和高安全性的数据库应用;
RAID-01:先分成两组做成RAID-0,再把组成的RAID-0做成RAID-1;不符合常用方法,每一组有一块坏的硬盘可能性大;
RAID-50的工作原理
是RAID5和RAID0的结合,先实现RAID5,再条带化;(先做RAID-5在做RAID-0,最少6块盘,每组允许坏1块盘,空间利用率灵活)、RAID7(某家公司的私有技术,实际是文件服务器)
特点:磁盘数:最低6个;
优点:比RAID5有更好的读性能,比相同容量的RAID5重建时间更短,可以容许N个磁盘同时失效;
缺点:设计复杂,比较难实现;同一个RAID5组内的两个磁盘失效会导致整个阵列失效;
适用领域:大型数据库服务器、应用服务器、文件服务器等应用;
重启linux网络的时候出现 this device is not active的解决办法
1.service NetworkManager stop
2.chkconfig NetworkManager off
3./etc/init.d/inetwork restart
进入救援模式的几种方法
列出所有被安装的rpm package rpm -qa | grep mariadb
卸载 rpm -e mariadb-libs-5.5.37-1.el7_0.x86_64
错误:依赖检测失败:
libmysqlclient.so.18()(64bit) 被 (已安裝) postfix-2:2.10.1-6.el7.x86_64 需要
强制卸载,因为没有--nodeps rpm -e --nodeps mariadb-libs-5.5.37-1.el7_0.x86_64
rpm -q tree &> /dev/null || yum -q -y install vsftpd 这是一键安装脚本。
RAID-10的工作原理
RAID10结合RAID1和RAID0,先镜像,再条带化;
特点: 磁盘数:最低4个,2n个,n大于等于2;
优点:读性能很高,写性能比较好,数据安全性好,允许同时有N个磁盘失效;
缺点:利用率只有50%,开销大;
可用空间:N*min(S1,S2,...其中最小空间)/2;
有容错能力:每组镜像最多只能坏一块;
适用领域:多用于要求高可用性和高安全性的数据库应用;
RAID-01:先分成两组做成RAID-0,再把组成的RAID-0做成RAID-1;不符合常用方法,每一组有一块坏的硬盘可能性大;
RAID-50的工作原理
是RAID5和RAID0的结合,先实现RAID5,再条带化;(先做RAID-5在做RAID-0,最少6块盘,每组允许坏1块盘,空间利用率灵活)、RAID7(某家公司的私有技术,实际是文件服务器)
特点:磁盘数:最低6个;
优点:比RAID5有更好的读性能,比相同容量的RAID5重建时间更短,可以容许N个磁盘同时失效;
缺点:设计复杂,比较难实现;同一个RAID5组内的两个磁盘失效会导致整个阵列失效;
适用领域:大型数据库服务器、应用服务器、文件服务器等应用;
重启linux网络的时候出现 this device is not active的解决办法
1.service NetworkManager stop
2.chkconfig NetworkManager off
3./etc/init.d/inetwork restart
进入救援模式的几种方法
centos7最小化安装,在默认情况下,会出现如下界面:
Install centos 7
Test this media & install centos 7
Troubleshooting
将鼠标置于第一项,按tab键,会弹出:
vlinuz initrd=initrd.ing inst.stage2=hd:LABEL=centos\x207\x28x86_64 quiet
此处输入一个参数即可进入救援模式,或者 输入rescue 加参数 也行
鼠标置于Troubleshooting,按tab键,会弹出:
vlinuz initrd=initrd.ing inst.stage2=hd:LABEL=centos\x207\x28x86_64 rescue quiet
或者:鼠标置于Install centos 7 按esc键,会出现
boot:此时输入“rescue” 也能进入救援模式
shell脚本常见面试题
1 Shell脚本是什么、它是必需的吗?
答:一个Shell脚本是一个文本文件,包含一个或多个命令。作为系统管理员,我们经常需要使用多个命令来完成一项任务,我们可以添加这些所有命令在一个文本文件(Shell脚本)来完成这些日常工作任务。
答:一个Shell脚本是一个文本文件,包含一个或多个命令。作为系统管理员,我们经常需要使用多个命令来完成一项任务,我们可以添加这些所有命令在一个文本文件(Shell脚本)来完成这些日常工作任务。
2、什么是默认登录shell,如何改变指定用户的登录shell
答:在Linux操作系统,“/bin/bash”是默认登录shell,是在创建用户时分配的。使用chsh命令可以改变默认的shell。示例如下所示:
#chsh <用户名> -s <新shell>
#chsh linuxtechi -s /bin/sh
答:在Linux操作系统,“/bin/bash”是默认登录shell,是在创建用户时分配的。使用chsh命令可以改变默认的shell。示例如下所示:
#chsh <用户名> -s <新shell>
#chsh linuxtechi -s /bin/sh
3、可以在shell脚本中使用哪些类型的变量?
答:在shell脚本,我们可以使用两种类型的变量:
系统定义变量
用户定义变量
系统变量是由系统系统自己创建的。这些变量通常由大写字母组成,可以通过“set”命令查看。
答:在shell脚本,我们可以使用两种类型的变量:
系统定义变量
用户定义变量
系统变量是由系统系统自己创建的。这些变量通常由大写字母组成,可以通过“set”命令查看。
用户变量由系统用户来生成和定义,变量的值可以通过命令“echo $<变量名>”查看。
4、如何将标准输出和错误输出同时重定向到同一位置?
答:有两种方法:
A、2>&1 (如# ls /usr/share/doc > out.txt 2>&1 )
B、 &> (如# ls /usr/share/doc &> out.txt )
答:有两种方法:
A、2>&1 (如# ls /usr/share/doc > out.txt 2>&1 )
B、 &> (如# ls /usr/share/doc &> out.txt )
5、 shell脚本中“if”语法如何嵌套?
答:基础语法:
if [ 条件 ]
then
命令1
命令2
…..
else
if [ 条件 ]
then
命令1
命令2
….
else
命令1
命令2
…..
fi
fi
答:基础语法:
if [ 条件 ]
then
命令1
命令2
…..
else
if [ 条件 ]
then
命令1
命令2
….
else
命令1
命令2
…..
fi
fi
6、shell脚本中“$?”标记的用途是什么?
答:在写一个shell脚本时,如果你想要检查前一命令是否执行成功,在if条件中使用“$?”可以来检查前一命令的结束状态。简单的例子如下:
root@localhost:~# ls /usr/bin/shar
/usr/bin/shar
root@localhost:~# echo $?
0 如果结束状态是0,说明前一个命令执行成功。
root@localhost:~# ls /usr/bin/share
ls: cannot access /usr/bin/share: No such file or directory
root@localhost:~# echo $?
2 如果结束状态不是0,说明命令执行失败。
答:在写一个shell脚本时,如果你想要检查前一命令是否执行成功,在if条件中使用“$?”可以来检查前一命令的结束状态。简单的例子如下:
root@localhost:~# ls /usr/bin/shar
/usr/bin/shar
root@localhost:~# echo $?
0 如果结束状态是0,说明前一个命令执行成功。
root@localhost:~# ls /usr/bin/share
ls: cannot access /usr/bin/share: No such file or directory
root@localhost:~# echo $?
2 如果结束状态不是0,说明命令执行失败。
7、在shell脚本中如何比较两个数字 ?
答:在if-then中使用测试命令( -gt 等)来比较两个数字,例子如下:
答:在if-then中使用测试命令( -gt 等)来比较两个数字,例子如下:
#!/bin/bash
x=10
y=20
if [ $x -gt $y ]
then
echo “x is greater than y”
else
echo “y is greater than x”
fi
8、shell脚本中break命令的作用 ?
答:break命令一个简单的用途是退出执行中的循环。我们可以在while和until循环中使用break命令跳出循环。
9、 shell脚本中continue命令的作用 ?
答:continue命令不同于break命令,它只跳出当前循环的迭代,而不是整个循环。continue命令很多时候是很有用的,例如错误发生,但我们依然希望继续执行大循环的时候。
答:break命令一个简单的用途是退出执行中的循环。我们可以在while和until循环中使用break命令跳出循环。
9、 shell脚本中continue命令的作用 ?
答:continue命令不同于break命令,它只跳出当前循环的迭代,而不是整个循环。continue命令很多时候是很有用的,例如错误发生,但我们依然希望继续执行大循环的时候。
10、 告诉我shell脚本中Case语句的语法 ?
case 变量 in
值1)
命令1
命令2
…..
最后命令
!!
值2)
命令1
命令2
……
最后命令
;;
esac
case 变量 in
值1)
命令1
命令2
…..
最后命令
!!
值2)
命令1
命令2
……
最后命令
;;
esac
11、shell脚本中while循环语法 ?
答:如同for循环,while循环只要条件成立就重复它的命令块。不同于for循环,while循环会不断迭代,直到它的条件不为真。基础语法:
while [ 条件 ]
do
命令…
done
答:如同for循环,while循环只要条件成立就重复它的命令块。不同于for循环,while循环会不断迭代,直到它的条件不为真。基础语法:
while [ 条件 ]
do
命令…
done
12、 如何使脚本可执行 ?
答:使用chmod命令来使脚本可执行。例子如下:
答:使用chmod命令来使脚本可执行。例子如下:
chmod a+x myscript.sh
13、“#!/bin/bash”的作用 ?
答:#!/bin/bash是shell脚本的第一行,称为释伴(shebang)行。这里#符号叫做hash,而! 叫做 bang。它的意思是命令通过 /bin/bash 来执行。
答:#!/bin/bash是shell脚本的第一行,称为释伴(shebang)行。这里#符号叫做hash,而! 叫做 bang。它的意思是命令通过 /bin/bash 来执行。
14、 shell脚本中for循环语法 ?
答:for 循环的基础语法:
for 变量 in 循环列表
do
命令1
命令2
….
最后命令
done
答:for 循环的基础语法:
for 变量 in 循环列表
do
命令1
命令2
….
最后命令
done
15、 如何调试shell脚本 ?
答:使用'-x'参数(sh -x myscript.sh)可以调试shell脚本。另一个种方法是使用‘-nv’参数( sh -nv myscript.sh)。
答:使用'-x'参数(sh -x myscript.sh)可以调试shell脚本。另一个种方法是使用‘-nv’参数( sh -nv myscript.sh)。
16、shell脚本如何比较字符串?
答:test命令可以用来比较字符串。测试命令会通过比较字符串中的每一个字符来比较。
答:test命令可以用来比较字符串。测试命令会通过比较字符串中的每一个字符来比较。
17、Bourne shell(bash) 中有哪些特殊的变量 ?
答:下面的表列出了Bourne shell为命令行设置的特殊变量。
内建变量 解释
$0 命令行中的脚本名字
$1 第一个命令行参数
$2 第二个命令行参数
….. …….
$9 第九个命令行参数
$# 命令行参数的数量
$* 所有命令行参数,以空格隔开
答:下面的表列出了Bourne shell为命令行设置的特殊变量。
内建变量 解释
$0 命令行中的脚本名字
$1 第一个命令行参数
$2 第二个命令行参数
….. …….
$9 第九个命令行参数
$# 命令行参数的数量
$* 所有命令行参数,以空格隔开
18、 在shell脚本中,如何测试文件 ?
答:test命令可以用来测试文件。基础用法如下表格:
Test 用法
-d 文件名 如果文件存在并且是目录,返回true
-e 文件名 如果文件存在,返回true
-f 文件名 如果文件存在并且是普通文件,返回true
-r 文件名 如果文件存在并可读,返回true
-s 文件名 如果文件存在并且不为空,返回true
-w 文件名 如果文件存在并可写,返回true
-x 文件名 如果文件存在并可执行,返回true
答:test命令可以用来测试文件。基础用法如下表格:
Test 用法
-d 文件名 如果文件存在并且是目录,返回true
-e 文件名 如果文件存在,返回true
-f 文件名 如果文件存在并且是普通文件,返回true
-r 文件名 如果文件存在并可读,返回true
-s 文件名 如果文件存在并且不为空,返回true
-w 文件名 如果文件存在并可写,返回true
-x 文件名 如果文件存在并可执行,返回true
19、在shell脚本中,如何写入注释 ?
答:注释可以用来描述一个脚本可以做什么和它是如何工作的。每一行注释以#开头。例子如下:
#!/bin/bash
#This is a command
echo “I am logged in as $USER”
答:注释可以用来描述一个脚本可以做什么和它是如何工作的。每一行注释以#开头。例子如下:
#!/bin/bash
#This is a command
echo “I am logged in as $USER”
20、如何让 shell 就脚本得到来自终端的输入?
答:read命令可以读取来自终端(使用键盘)的数据。read命令得到用户的输入并置于你给出的变量中。例子如下:
#vi /tmp/test.sh
#!/bin/bash
echo ‘Please enter your name’
read name
echo “My Name is $name”
#./test.sh
Please enter your name
LinuxTechi
My Name is LinuxTechi
答:read命令可以读取来自终端(使用键盘)的数据。read命令得到用户的输入并置于你给出的变量中。例子如下:
#vi /tmp/test.sh
#!/bin/bash
echo ‘Please enter your name’
read name
echo “My Name is $name”
#./test.sh
Please enter your name
LinuxTechi
My Name is LinuxTechi
21、如何取消变量或取消变量赋值 ?
答:“unset”命令用于取消变量或取消变量赋值。语法如下所示:
#unset <变量名>
答:“unset”命令用于取消变量或取消变量赋值。语法如下所示:
#unset <变量名>
22、 如何执行算术运算 ?
答:有两种方法来执行算术运算:
1.使用expr命令
#expr 5 + 2
2.用一个美元符号和方括号($[ 表达式 ])例如:
test=$[16 + 4] ; test=$[16 + 4]
答:有两种方法来执行算术运算:
1.使用expr命令
#expr 5 + 2
2.用一个美元符号和方括号($[ 表达式 ])例如:
test=$[16 + 4] ; test=$[16 + 4]
23、do-while语句的基本格式 ?
答:do-while语句类似于while语句,但检查条件语句之前先执行命令(LCTT 译注:意即至少执行一次。)。下面是用do-while语句的语法
do
{
命令
} while (条件)
答:do-while语句类似于while语句,但检查条件语句之前先执行命令(LCTT 译注:意即至少执行一次。)。下面是用do-while语句的语法
do
{
命令
} while (条件)
24、在shell脚本如何定义函数呢 ?
答:函数是拥有名字的代码块。当我们定义代码块,我们就可以在我们的脚本调用函数名字,该块就会被执行。示例如下所示:
$ diskusage () { df -h ; }
译注:下面是我给的shell函数语法,原文没有
[ function ] 函数名 [()]
{
命令;
[return int;]
}
答:函数是拥有名字的代码块。当我们定义代码块,我们就可以在我们的脚本调用函数名字,该块就会被执行。示例如下所示:
$ diskusage () { df -h ; }
译注:下面是我给的shell函数语法,原文没有
[ function ] 函数名 [()]
{
命令;
[return int;]
}
centos6、7上禁用防火墙、启动at任务、时间同步
centos6
service atd start 这次立即启动
chkconfig atd on 下次开机启动
service iptables stop 这次立即停止防火墙
chkconfig iptables off 下次开机时也不要启动
centos7
systemctl start atd.service 这次立即启动
systemctl enable atd.service 下次开机启动
systemctl stop firewalld 这次已经启动,立即停止防火墙
systemctl disable firewalld 这次运行时关闭,下次开机时也不要启动
centos6、7都要做的一步:
时间同步:crontab -e
计划任务:*/30 * * * * /usr/bin/ntpdate 172.20.0.1 &> /dev/null
date命令:系统时间
date [OPTION]... [+FORMAT]:显示日期时间;
date [MMDDhhmm[[CC]YY][.ss]]:设定日期时间;
FORMAT:格式说明
%F:日期,显示为数字,格式为:2016-03-02;
%D:显示英制格式,月日年,显示格式为:03/02/16;
%T:时间,显示为数字,格式为:15:52:16;
%Y:年份,只显示完整年份数字(4位数字),显示格式为:2016;
%y:显示年份的后两位,显示格式为:16;
%m:月份,只显示数字,显示格式为:03;
%d:日期,只显示数字,显示格式为:02;
%H:小时,只显示数字,显示格式为(00..23):15;
%k:小时,显示格式为(0..23);
%I:小时,格式为(01..12);
%l:小时,显示格式为(1..12);
%h:显示月份,显示格式为:3月;
%M:分钟,只显示数字,显示格式为:52;
%S:秒钟,只显示数字,显示格式为:16;
%a:缩写星期;
%A:完整星期;
%b:缩写月份;
%B:完整月份;
%r:显示格式为(11:11:04 PM);
%R:同%H%M,格式为(23:37)
%s:从1970年1月1日至此刻所经历的秒数;timestamp;显示格式为:1456905397;
date [OPTION]... [+FORMAT]:显示日期时间;
date [MMDDhhmm[[CC]YY][.ss]]:设定日期时间;
FORMAT:格式说明
%F:日期,显示为数字,格式为:2016-03-02;
%D:显示英制格式,月日年,显示格式为:03/02/16;
%T:时间,显示为数字,格式为:15:52:16;
%Y:年份,只显示完整年份数字(4位数字),显示格式为:2016;
%y:显示年份的后两位,显示格式为:16;
%m:月份,只显示数字,显示格式为:03;
%d:日期,只显示数字,显示格式为:02;
%H:小时,只显示数字,显示格式为(00..23):15;
%k:小时,显示格式为(0..23);
%I:小时,格式为(01..12);
%l:小时,显示格式为(1..12);
%h:显示月份,显示格式为:3月;
%M:分钟,只显示数字,显示格式为:52;
%S:秒钟,只显示数字,显示格式为:16;
%a:缩写星期;
%A:完整星期;
%b:缩写月份;
%B:完整月份;
%r:显示格式为(11:11:04 PM);
%R:同%H%M,格式为(23:37)
%s:从1970年1月1日至此刻所经历的秒数;timestamp;显示格式为:1456905397;
文件系统的挂载:把额外的文件系统与当前根文件系统上的某个目录建立关联关系,并以之作为新的文件的访问入口的操作过程,就叫做挂载(mount),拆除此关联关系的过程,即为卸载(umount);
破解centos7,centos6和centos5 的root口令
一、centos5,6破解root口令,前提:待在电脑前,重启电脑
1、在滚动条出现时,按esc键,出现菜单界面,按“ a ”键,输入“ 1 ”模式,(注意:quit后要空一格输入),此时效果为:无需任何操作即可进入root用户的命令行,
2、在命令行输入“ passwd ”,即可更改新口令,输入2次,
一、centos5,6破解root口令,前提:待在电脑前,重启电脑
1、在滚动条出现时,按esc键,出现菜单界面,按“ a ”键,输入“ 1 ”模式,(注意:quit后要空一格输入),此时效果为:无需任何操作即可进入root用户的命令行,
2、在命令行输入“ passwd ”,即可更改新口令,输入2次,
二、centos7破解root口令,
1、首先在菜单界面按【e】键,进入启动文件界面后
2、按【↓】拉到底部
在 "LANG=zh_cn.UTF-8" 同行后面加上“init=/bin/sh”
然后按【Ctrl+X】进入“单用户模式”
3、输入【ls】,回车,再输入【mount –o remount ,rw / 】,回车 (注意空格)
4、输入【passwd】(注意:密码不能少于8位),重复输入两次密码
5、输入【touch /.autorelabel】,回车,再输入【exec /sbin/init】回车
以便重启系统。
安装虚拟机时修改网卡名称为eth0的方法:(按tab键即会弹出)
[root@centos7 network-scripts]#vi ifcfg-eth0
BOOTPROTO=none
DEVICE=eth0
ONBOOT=yes
IPADDR=192.168.141.200
DNS1=192.168.0.1
DNS2=114.114.114.114 #仅主机不需加网关!
[root@centos7 network-scripts]#vi ifcfg-eth1
BOOTPROTO=none
DEVICE=eth1
ONBOOT=yes
IPADDR=172.18.9.200
GATEWAY=172.18.0.1 #加上网关即可ping通外网!
DNS1=172.18.0.1
一、修改命令提示符:
[root@200 ~]#cd /etc/profile.d
[root@200 profile.d]#vim env.sh
PS1="[\e[1;32m][\u@\h \W]\$[\e[0m]" #命令提示符为淡绿色!不用source生效即可永久保存!
1、首先在菜单界面按【e】键,进入启动文件界面后
2、按【↓】拉到底部
在 "LANG=zh_cn.UTF-8" 同行后面加上“init=/bin/sh”
然后按【Ctrl+X】进入“单用户模式”
3、输入【ls】,回车,再输入【mount –o remount ,rw / 】,回车 (注意空格)
4、输入【passwd】(注意:密码不能少于8位),重复输入两次密码
5、输入【touch /.autorelabel】,回车,再输入【exec /sbin/init】回车
以便重启系统。
安装虚拟机时修改网卡名称为eth0的方法:(按tab键即会弹出)
[root@centos7 network-scripts]#vi ifcfg-eth0
BOOTPROTO=none
DEVICE=eth0
ONBOOT=yes
IPADDR=192.168.141.200
DNS1=192.168.0.1
DNS2=114.114.114.114 #仅主机不需加网关!
[root@centos7 network-scripts]#vi ifcfg-eth1
BOOTPROTO=none
DEVICE=eth1
ONBOOT=yes
IPADDR=172.18.9.200
GATEWAY=172.18.0.1 #加上网关即可ping通外网!
DNS1=172.18.0.1
一、修改命令提示符:
[root@200 ~]#cd /etc/profile.d
[root@200 profile.d]#vim env.sh
PS1="[\e[1;32m][\u@\h \W]\$[\e[0m]" #命令提示符为淡绿色!不用source生效即可永久保存!
二、系统添加一块新硬盘不用关闭系统即可加载硬盘信息的操作:
[root@centos7 ~]#ls /sys/class/scsi_host
host0 host1 host2
[root@centos7 ~]#echo "- - -" > /sys/class/scsi_host/host0/scan
[root@centos7 ~]#ls /sys/class/scsi_host
host0 host1 host2
[root@centos7 ~]#echo "- - -" > /sys/class/scsi_host/host0/scan
三、设置命令别名(简化操作,节省时间):
[root@centos7 ~]#ls -a
. .. anaconda-ks.cfg .bash_history .bash_logout .bash_profile .bashrc .cshrc .tcshrc
[root@centos7 ~]#vi .bashrc
alias cdnet='cd /etc/sysconfig/network-scripts/'
alias xy='systemctl restart network'
alias scan='echo "- - -" > /sys/class/scsi_host/host0/scan'
[root@centos7 ~]#source .bashrc #source 使其生效!
[root@centos7 ~]#ls -a
. .. anaconda-ks.cfg .bash_history .bash_logout .bash_profile .bashrc .cshrc .tcshrc
[root@centos7 ~]#vi .bashrc
alias cdnet='cd /etc/sysconfig/network-scripts/'
alias xy='systemctl restart network'
alias scan='echo "- - -" > /sys/class/scsi_host/host0/scan'
[root@centos7 ~]#source .bashrc #source 使其生效!
四、创建本地光盘yum源:
yum install gcc gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel systemd-devel net-tools vim iotop bc zip unzip zlib-devel lrzsz tree screen lsof tcpdump wget ntpdate
1、挂载本地光盘;mount /dev/sr0 /mnt
[root@centos6 ~]# mount /dev/sr0 /mnt
mount: block device /dev/sr0 is write-protected, mounting read-only
2、清空/etc/yum.repos.d/的自带文件
[root@centos6 ~]# cd /etc/yum.repos.d/
[root@centos6 yum.repos.d]# ls
CentOS-Base.repo CentOS-Debuginfo.repo CentOS-fasttrack.repo CentOS-Media.repo CentOS-Vault.repo
[root@centos6 yum.repos.d]# rm -f *
3、编辑base.repo文件
[root@centos6 ~]# vim /etc/yum.repos.d/base.repo
[base]
name=file
baseurl=file:///mnt
gpgcheck=0
yum install gcc gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel systemd-devel net-tools vim iotop bc zip unzip zlib-devel lrzsz tree screen lsof tcpdump wget ntpdate
1、挂载本地光盘;mount /dev/sr0 /mnt
[root@centos6 ~]# mount /dev/sr0 /mnt
mount: block device /dev/sr0 is write-protected, mounting read-only
2、清空/etc/yum.repos.d/的自带文件
[root@centos6 ~]# cd /etc/yum.repos.d/
[root@centos6 yum.repos.d]# ls
CentOS-Base.repo CentOS-Debuginfo.repo CentOS-fasttrack.repo CentOS-Media.repo CentOS-Vault.repo
[root@centos6 yum.repos.d]# rm -f *
3、编辑base.repo文件
[root@centos6 ~]# vim /etc/yum.repos.d/base.repo
[base]
name=file
baseurl=file:///mnt
gpgcheck=0
#[epel]
#name=epel
#baseurl=https://mirrors.aliyun.com/epel/6/x86_64/
#gpgcheck=0 因为更多的在用本地光盘yum源,所以把aliyun源给禁用,要注释掉,避免冲突
4、清除yum缓存,重读repolist列表:
[root@centos7 yum.repos.d]# yum clean all
Loaded plugins: fastestmirror, langpacks
Cleaning repos: base
Cleaning up list of fastest mirrors
[root@centos7 yum.repos.d]# yum repolist
Loaded plugins: fastestmirror, langpacks
Determining fastest mirrors
base | 3.6 kB 00:00:00
(1/2): base/group_gz | 166 kB 00:00:00
(2/2): base/primary_db | 6.0 MB 00:00:00
repo id repo name status
base file 10,019
repolist: 10,019
5、使用本地yum源安装目标软件:yum install xxxx
#name=epel
#baseurl=https://mirrors.aliyun.com/epel/6/x86_64/
#gpgcheck=0 因为更多的在用本地光盘yum源,所以把aliyun源给禁用,要注释掉,避免冲突
4、清除yum缓存,重读repolist列表:
[root@centos7 yum.repos.d]# yum clean all
Loaded plugins: fastestmirror, langpacks
Cleaning repos: base
Cleaning up list of fastest mirrors
[root@centos7 yum.repos.d]# yum repolist
Loaded plugins: fastestmirror, langpacks
Determining fastest mirrors
base | 3.6 kB 00:00:00
(1/2): base/group_gz | 166 kB 00:00:00
(2/2): base/primary_db | 6.0 MB 00:00:00
repo id repo name status
base file 10,019
repolist: 10,019
5、使用本地yum源安装目标软件:yum install xxxx
当出现如下问题时:#yum install -y redis
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
No package redis available.
Error: Nothing to do
解决办法:
#wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
#rpm -ivh epel-release-6-8.noarch.rpm
#yum -y install redis 即可安装成功!
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
No package redis available.
Error: Nothing to do
解决办法:
#wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
#rpm -ivh epel-release-6-8.noarch.rpm
#yum -y install redis 即可安装成功!
绝对路径:以正斜杆开头,完整的文件的位置路径,可用于任何想指定一个文件的时候。 相对路径:不以斜杠开头,指定相对于当前工作目录或某目录的位置。硬链接:ln 目标文件名 链接名,软连接: ln -s 目标文件名
软硬:{共性}:修改软硬链接文件,所有的文件都是同步修改的。
硬链接: 本质:同一个文件多个名字、链接数:有一个以上的链接,不可跨分区,只允许对文件创建链接,不依赖原始文件,删除硬链接文件的源文件,硬链接文件仍然存在,不占用空间,格式:ln 目标文件 链接名
软连接:本质: 一个文件对应快捷方式,是不同文件,链接数:只有一个链接,可以跨分区,可以对目录和文件夹进行链接,依赖于原始文件,删除源文件,软连接则指向一个空文件,它具有依赖性,占用磁盘空间,格式: ln -s 目标文件 源文件
自定义分区:
/dev/sda1 /boot 1G
/dev/sda2 / 50G
/dev/sda3 swap 2G
/dev/sda4 扩展分区
/dev/sad5 /data 10G
软硬:{共性}:修改软硬链接文件,所有的文件都是同步修改的。
硬链接: 本质:同一个文件多个名字、链接数:有一个以上的链接,不可跨分区,只允许对文件创建链接,不依赖原始文件,删除硬链接文件的源文件,硬链接文件仍然存在,不占用空间,格式:ln 目标文件 链接名
软连接:本质: 一个文件对应快捷方式,是不同文件,链接数:只有一个链接,可以跨分区,可以对目录和文件夹进行链接,依赖于原始文件,删除源文件,软连接则指向一个空文件,它具有依赖性,占用磁盘空间,格式: ln -s 目标文件 源文件
自定义分区:
/dev/sda1 /boot 1G
/dev/sda2 / 50G
/dev/sda3 swap 2G
/dev/sda4 扩展分区
/dev/sad5 /data 10G
Centos7 重启网卡命令:systemctl restart network
Centos6 重启网卡命令:service network restart
设置主机和IP绑定信息:cat /etc/hosts
查看内存信息: cat /proc/meminfo
修改IP地址: vim /etc/sysconfig/network--scripts/ifcfg--ens33
su 与 su-的区别:
su:非交互式登录,在环境变量下不切换
su-:交互式登录(完全切换),当前目录改变为切换用户,在家目录,连同环境一同切换。
对/etc/目录,分别执行命令,实现以下功能
(1)按从大到小顺序显示文件列表 : ll -S /etc
(2)只显示隐藏文件 :ll -d /etc/.
(3)只显示目录 : ll -d /etc//
(4)按mtime时间显示文件列表 : ll -t /etc
(5)按atime时间显示文件列表 : ll -u /etc
正则表达式部分:
0-9: [0-9] 10-99: [1-9][0-9] 100-199:1[0-9][0-9] 200-249:2[0-4][0-9] 250-255:25[0-5]
过滤ifconfig命令结果中所有大于0且小于255的三位数
ifconfig | egrep -o "\<((1[0-9]{2}|2[0-4][0-9]|25[0-4]))"
取IPV4地址:ifconfig ens33| grep -Eo "([0-9]{1,3}.){3}[0-9]{1,3}" head -1
取分区利用率:df | grep " /dev/sd " | grep -o " [0-9]{1,3}%" | grep -o " [0-9]+ " | sort -nr | head - n1
取分区利用率:sed -rn ' s/^([^[:space:]]+).([0-9]+)%./\2/p'
用户:sed -rn ' s/^([^[:space:]]+).([0-9]+)%./\1/p'
查看版本型号: cut -d "." -f1 /etc/redhat-release |egrep -o "[0-9]+"
查看版本型号:grep -o " [0-9]+. " /etc/redhat-release | grep -o " [0-9]+ "
查看版本型号:sed -rn " s/.([0-9]+)../\1/p " /etc/redhat-release
匹配手机号码:egrep -o " 1[0-9]{10} " tel.txt
匹配email邮箱:egrep -o "([[:alnum:]]|_)+@[[:alnum:]]+.com$" mail.txt
取/etc/sysconfig/network-scripts/ifcfg-ens33基名,用两种方法实现。
A、basename /etc/sysconfig/network-scripts/ifcfg-ens33
B、echo /etc/sysconfig/network-scripts/ifcfg-ens33 | egrep -o "[^/]+$"
|grep -o ".[^/] 取基名 |egrep -o "[^/]+$" 取/下的基名
|egrep -o "[^/]+/?$" 取/前的目录名
|sed -r 's@(./)([^/]+)/?@\2@' 取基名
|sed -r 's@(./)([^/]+)/?@\1@' 取目录名
使用sed命令取IPV4地址:
1、|sed -n '2p' |sed -r 's/inet//' |sed -r 's/netmask.//' |tr -d " "
2、|sed -n '2p' sed -e 's/^.inet//' -e 's/.//'
3、|sed -n -e '2s/^.inet//' -e '2s/ .//p'
4、|sed -nr '2s@.inet (.) .n.@\1@p'
5、|sed -nr '2s/[^0-9]+([0-9.]+)./\1/p'
统计/var/log/httpd/access.log日志访问频繁前十的地址,并从大到小排序。
cat access.log |cut -d" " -f1 |sort |uniq -c |sort -nr|head -n10
例题:一块新硬盘插入linux主机后,怎样才能正常使用:
1、格式化分区用fdisk命令进行,2、制作文件系统用mkfs.xfs命令进行,3、挂载用mount命令进行,4、编辑配置文件“ /etc/fstab ”实现自动挂载。
Centos6 重启网卡命令:service network restart
设置主机和IP绑定信息:cat /etc/hosts
查看内存信息: cat /proc/meminfo
修改IP地址: vim /etc/sysconfig/network--scripts/ifcfg--ens33
su 与 su-的区别:
su:非交互式登录,在环境变量下不切换
su-:交互式登录(完全切换),当前目录改变为切换用户,在家目录,连同环境一同切换。
对/etc/目录,分别执行命令,实现以下功能
(1)按从大到小顺序显示文件列表 : ll -S /etc
(2)只显示隐藏文件 :ll -d /etc/.
(3)只显示目录 : ll -d /etc//
(4)按mtime时间显示文件列表 : ll -t /etc
(5)按atime时间显示文件列表 : ll -u /etc
正则表达式部分:
0-9: [0-9] 10-99: [1-9][0-9] 100-199:1[0-9][0-9] 200-249:2[0-4][0-9] 250-255:25[0-5]
过滤ifconfig命令结果中所有大于0且小于255的三位数
ifconfig | egrep -o "\<((1[0-9]{2}|2[0-4][0-9]|25[0-4]))"
取IPV4地址:ifconfig ens33| grep -Eo "([0-9]{1,3}.){3}[0-9]{1,3}" head -1
取分区利用率:df | grep " /dev/sd " | grep -o " [0-9]{1,3}%" | grep -o " [0-9]+ " | sort -nr | head - n1
取分区利用率:sed -rn ' s/^([^[:space:]]+).([0-9]+)%./\2/p'
用户:sed -rn ' s/^([^[:space:]]+).([0-9]+)%./\1/p'
查看版本型号: cut -d "." -f1 /etc/redhat-release |egrep -o "[0-9]+"
查看版本型号:grep -o " [0-9]+. " /etc/redhat-release | grep -o " [0-9]+ "
查看版本型号:sed -rn " s/.([0-9]+)../\1/p " /etc/redhat-release
匹配手机号码:egrep -o " 1[0-9]{10} " tel.txt
匹配email邮箱:egrep -o "([[:alnum:]]|_)+@[[:alnum:]]+.com$" mail.txt
取/etc/sysconfig/network-scripts/ifcfg-ens33基名,用两种方法实现。
A、basename /etc/sysconfig/network-scripts/ifcfg-ens33
B、echo /etc/sysconfig/network-scripts/ifcfg-ens33 | egrep -o "[^/]+$"
|grep -o ".[^/] 取基名 |egrep -o "[^/]+$" 取/下的基名
|egrep -o "[^/]+/?$" 取/前的目录名
|sed -r 's@(./)([^/]+)/?@\2@' 取基名
|sed -r 's@(./)([^/]+)/?@\1@' 取目录名
使用sed命令取IPV4地址:
1、|sed -n '2p' |sed -r 's/inet//' |sed -r 's/netmask.//' |tr -d " "
2、|sed -n '2p' sed -e 's/^.inet//' -e 's/.//'
3、|sed -n -e '2s/^.inet//' -e '2s/ .//p'
4、|sed -nr '2s@.inet (.) .n.@\1@p'
5、|sed -nr '2s/[^0-9]+([0-9.]+)./\1/p'
统计/var/log/httpd/access.log日志访问频繁前十的地址,并从大到小排序。
cat access.log |cut -d" " -f1 |sort |uniq -c |sort -nr|head -n10
例题:一块新硬盘插入linux主机后,怎样才能正常使用:
1、格式化分区用fdisk命令进行,2、制作文件系统用mkfs.xfs命令进行,3、挂载用mount命令进行,4、编辑配置文件“ /etc/fstab ”实现自动挂载。
搜狐面试题:echo " a b c " |read x y z ;echo x=$x y=$y z=$z
结果:x= y= z=
echo " a b c " |{ read x y z ;echo x=$x y=$y z=$z;}
结果:x=a y=b z=c
echo " a b c" | {read x y z ;echo x=$x y=$y z=$z;}
结果:x=a y=b z=c
echo " a b c " | while read x,y,z;do echo x=$x y=$y z=$z,done
结果:x=a y=b z=c
若cat > f1 --->abc xx yy zz 234
cat f1 |while read x y z ;do echo x=$x y=$y z=$z;done
结果:x=a y=b z=c
x=xx y=yy z=zz
x=2 y=3 z=4
新浪面试题:cp /etc/fstab /data/dir 问:他需要有最小权限是什么?
答:分三步:1、探究cp外部命令有啥权限,他至少必须要有x:执行权限。2、
/etc/fstab:/fstab 只要有读权限就可以了,前提是/etc要有x执行权限,/etc可以没有读权限,只要/etc有基本可执行权限进得去就可以。3、/data/dir:至少要有执行和写权限。
总结:命令的权限:1、cp:这是个程序,至少要有执行权限,2、要拷贝的文件:/etc/fstab:/fstab 至少要有读权限,而所在文件夹必须要有可执行权限,要不进不去,3、要拷贝的目标文件夹至少要有执行和写权限。
usermod [OPTION] login
-u UID: 新UID
-g GID: 新主组
-G GROUP1[,GROUP2,...[,GROUPN]]]:新附加组,原来的附加组将会被覆盖;若保留原有,则要同时使用-a选项
-s SHELL:新的默认SHELL
-c 'COMMENT':新的注释信息
-d HOME: 新家目录不会自动创建;若要创建新家目录并移动原家数据,同时使用-m选项
-l login_name: 新的名字
-L: lock指定用户,在/etc/shadow 密码栏的增加 !
-U: unlock指定用户,将 /etc/shadow 密码栏的 ! 拿掉
例题:创建下面的用户、组和组成员关系
名字为webs 的组
用户nginx 使用webs 作为附属组
用户varnish,也使用webs 作为附属组
用户mysql,不可交互登录系统,且不是webs 的成员, nginx, varnish, mysql密码都是magedu
[root@magedu ~]# groupadd webs
[root@magedu ~]# useradd -G webs nginx
[root@magedu ~]# useradd -G webs varnish
[root@magedu ~]# useradd -s /sbin/nologin mysql
[root@magedu ~]# echo "magedu"|passwd --stdin nginx
[root@magedu ~]# echo "magedu"|passwd --stdin varnish
[root@magedu ~]# echo "magedu"|passwd --stdin mtsql
/etc/fstab:/fstab 只要有读权限就可以了,前提是/etc要有x执行权限,/etc可以没有读权限,只要/etc有基本可执行权限进得去就可以。3、/data/dir:至少要有执行和写权限。
总结:命令的权限:1、cp:这是个程序,至少要有执行权限,2、要拷贝的文件:/etc/fstab:/fstab 至少要有读权限,而所在文件夹必须要有可执行权限,要不进不去,3、要拷贝的目标文件夹至少要有执行和写权限。
usermod [OPTION] login
-u UID: 新UID
-g GID: 新主组
-G GROUP1[,GROUP2,...[,GROUPN]]]:新附加组,原来的附加组将会被覆盖;若保留原有,则要同时使用-a选项
-s SHELL:新的默认SHELL
-c 'COMMENT':新的注释信息
-d HOME: 新家目录不会自动创建;若要创建新家目录并移动原家数据,同时使用-m选项
-l login_name: 新的名字
-L: lock指定用户,在/etc/shadow 密码栏的增加 !
-U: unlock指定用户,将 /etc/shadow 密码栏的 ! 拿掉
例题:创建下面的用户、组和组成员关系
名字为webs 的组
用户nginx 使用webs 作为附属组
用户varnish,也使用webs 作为附属组
用户mysql,不可交互登录系统,且不是webs 的成员, nginx, varnish, mysql密码都是magedu
[root@magedu ~]# groupadd webs
[root@magedu ~]# useradd -G webs nginx
[root@magedu ~]# useradd -G webs varnish
[root@magedu ~]# useradd -s /sbin/nologin mysql
[root@magedu ~]# echo "magedu"|passwd --stdin nginx
[root@magedu ~]# echo "magedu"|passwd --stdin varnish
[root@magedu ~]# echo "magedu"|passwd --stdin mtsql
编写显示系统信息的脚本:(要考虑到可更改性,可维护性)
[root@centos7 script35]# vim systeminfo.sh
#!/bin/bash
#********************************************************************
#Author: Xingxiaoyatongxue
#QQ: 1098775809
#Date: 2019-02-05
#FileName: systeminfo.sh
#URL: http://www.magedu.com
#Description: The test script
#Copyright (C): 2019 All rights reserved
#********************************************************************
COLOR="\e[1;31m"
COLOREND="\e[0m"
echo -e "my host name is $COLOR`hostname`$COLOREND"
echo -e "my Adress is $COLOR`ifconfig ens38|grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}'|head -n1`$COLOREND"
echo -e "OS version is $COLOR`cat /etc/centos-release`$COLOREND"
echo -e "Kernel version is $COLOR`uname -r`$COLOREND"
echo -e "CPU type is $COLOR`lscpu |grep "Model name" |tr -s " " |cut -d: -f2`$COLOREND"
echo -e "Mem total is $COLOR`head -n1 /proc/meminfo|grep -o "[0-9].*"`$COLOREND"
echo -e "Disk is $COLOR`lsblk|grep -Eo "[0-9]+G" |head -1`$COLOREND"
[root@centos7 script35]# bash systeminfo.sh
my host name is centos7.localdomain
my Adress is 192.168.141.130
OS version is CentOS Linux release 7.6.1810 (Core)
Kernel version is 3.10.0-957.el7.x86_64
CPU type is Intel(R) Core(TM) i5-5200U CPU @ 2.20GHz
Mem total is 2379348 kB
Disk is 200G
[ $ver -eq 5 ] && echo ver is 5 || echo ver is not 5
释义:若 [ $ver -eq 5 ] 为真,就执行 echo ver is 5
若 [ $ver -eq 5 ] 为假,就执行 echo ver is not 5
cmd1 短路与&& cmd2
若cmd1 真,执行cmd2 结果未知
若cmd1 假,不执行cmd2 结果为假
cmd1 短路或|| cmd2
若cmd1 真,不执行cmd2 结果为真
若cmd1 假,执行cmd2 结果未知
设置本地解析器/etc/hosts,在使用dns前检查
添加本机地址为172.18.119.74解析映射为magedu.com,172.18.0.1映射为server.com
[root@node1 ~]# vim /etc/hosts
添加内容:
172.18.119.74 magedu.com
172.18.0.1 server.com
进程管理部分:
buffer 缓冲区 多次write,合并成一次write
cache 缓存 从高速设备代替慢速
“ lsof -i ”:查看某个端口是哪个进程在使用, “ iotop ”:查看是哪个进程带来了大量的磁盘I/O,(查看哪个进程让磁盘I/O)特别繁忙。“ pid ”:每个进程系统都会分配一个数字。
网段数:2^(可变的网络ID), 划分子网数:2^(网ID借主ID), 主机数:2^主机ID位-2, 网络ID:IP与子网掩码,
1、tar的意思是Together ARchive(打包归档)。我们可以用来打包,也可以用来解压包,而且还支持打包后用各种格式压缩(gz、bz2、xz等)。
单个参数意义:
f: 归档file
v: verbose(注:详细),显示压缩过程的详细信息
t: list,显示归档的内容
x: extract,解压
c: compress,压缩
z: gzip格式压缩,后缀为.gz
j: bzip2格式压缩,后缀为.bz2
J: xz格式压缩,后缀为.xz
常用组合:
组合参数 意义 压缩文件后缀
cvf 原始tar包,不压缩 .tar
zcvf 先tar,后gzip压缩 tar.gz 、tgz
jcvf 先tar,后bzip2压缩 tar.bz2 、tbz2
Jcvf 先tar,后xz压缩 tar.xz、txz
xvf 解压所有格式,通用解压命令 -
(1)、 简述raid0、raid1、raid5三种工作模式的工作原理及特点
(2)描述linux系统下创建软RAID5的命令和步骤
(1)、RAID0
RAID 0亦称为带区集。它将两个以上的磁盘并联起来,成为一个大容量的磁盘。在存放数据时,分段后分散存储在这些磁盘中,因为读写时都可以并行处理,所以在所有的级别中,RAID 0的速度是最快的。但是RAID 0既没有冗余功能,也不具备容错能力,如果一个磁盘(物理)损坏,所有数据都会丢失。
RAID1
两组以上的N个磁盘相互作镜像,在一些多线程操作系统中能有很好的读取速度,理论上读取速度等于硬盘数量的倍数,与RAID 0相同。另外写入速度有微小的降低。只要一个磁盘正常即可维持运作,可靠性最高。其原理为在主硬盘上存放数据的同时也在镜像硬盘上写一样的数据。当主硬盘(物理)损坏时,镜像硬盘则代替主硬盘的工作。因为有镜像硬盘做数据备份,所以RAID 1的数据安全性在所有的RAID级别上来说是最好的。但无论用多少磁盘做RAID 1,仅算一个磁盘的容量,是所有RAID中磁盘利用率最低的一个级别。
如果用两个不同大小的磁盘建RAID 1,可用空间为较小的那个磁盘,较大的磁盘多出来的空间也可以分区成一个区来使用,不会造成浪费。
RAID5
RAID Level 5是一种储存性能、数据安全和存储成本兼顾的存储解决方案。它使用的是Disk Striping(硬盘分区)技术。RAID 5至少需要三块硬盘,RAID 5不是对存储的数据进行备份,而是把数据和相对应的奇偶校验信息存储到组成RAID5的各个磁盘上,并且奇偶校验信息和相对应的数据分别存储于不同的磁盘上。当RAID5的一个磁盘数据发生损坏后,可以利用剩下的数据和相应的奇偶校验信息去恢复被损坏的数据。RAID 5可以理解为是RAID 0和RAID 1的折衷方案。RAID 5可以为系统提供数据安全保障,但保障程度要比镜像低而磁盘空间利用率要比镜像高。RAID 5具有和RAID 0相近似的数据读取速度,只是因为多了一个奇偶校验信息,写入数据的速度相对单独写入一块硬盘的速度略慢,若使用“回写缓存”可以让性能改善不少。同时由于多个数据对应一个奇偶校验信息,RAID 5的磁盘空间利用率要比RAID 1高,便宜。
添加本机地址为172.18.119.74解析映射为magedu.com,172.18.0.1映射为server.com
[root@node1 ~]# vim /etc/hosts
添加内容:
172.18.119.74 magedu.com
172.18.0.1 server.com
进程管理部分:
buffer 缓冲区 多次write,合并成一次write
cache 缓存 从高速设备代替慢速
“ lsof -i ”:查看某个端口是哪个进程在使用, “ iotop ”:查看是哪个进程带来了大量的磁盘I/O,(查看哪个进程让磁盘I/O)特别繁忙。“ pid ”:每个进程系统都会分配一个数字。
网段数:2^(可变的网络ID), 划分子网数:2^(网ID借主ID), 主机数:2^主机ID位-2, 网络ID:IP与子网掩码,
1、tar的意思是Together ARchive(打包归档)。我们可以用来打包,也可以用来解压包,而且还支持打包后用各种格式压缩(gz、bz2、xz等)。
单个参数意义:
f: 归档file
v: verbose(注:详细),显示压缩过程的详细信息
t: list,显示归档的内容
x: extract,解压
c: compress,压缩
z: gzip格式压缩,后缀为.gz
j: bzip2格式压缩,后缀为.bz2
J: xz格式压缩,后缀为.xz
常用组合:
组合参数 意义 压缩文件后缀
cvf 原始tar包,不压缩 .tar
zcvf 先tar,后gzip压缩 tar.gz 、tgz
jcvf 先tar,后bzip2压缩 tar.bz2 、tbz2
Jcvf 先tar,后xz压缩 tar.xz、txz
xvf 解压所有格式,通用解压命令 -
(1)、 简述raid0、raid1、raid5三种工作模式的工作原理及特点
(2)描述linux系统下创建软RAID5的命令和步骤
(1)、RAID0
RAID 0亦称为带区集。它将两个以上的磁盘并联起来,成为一个大容量的磁盘。在存放数据时,分段后分散存储在这些磁盘中,因为读写时都可以并行处理,所以在所有的级别中,RAID 0的速度是最快的。但是RAID 0既没有冗余功能,也不具备容错能力,如果一个磁盘(物理)损坏,所有数据都会丢失。
RAID1
两组以上的N个磁盘相互作镜像,在一些多线程操作系统中能有很好的读取速度,理论上读取速度等于硬盘数量的倍数,与RAID 0相同。另外写入速度有微小的降低。只要一个磁盘正常即可维持运作,可靠性最高。其原理为在主硬盘上存放数据的同时也在镜像硬盘上写一样的数据。当主硬盘(物理)损坏时,镜像硬盘则代替主硬盘的工作。因为有镜像硬盘做数据备份,所以RAID 1的数据安全性在所有的RAID级别上来说是最好的。但无论用多少磁盘做RAID 1,仅算一个磁盘的容量,是所有RAID中磁盘利用率最低的一个级别。
如果用两个不同大小的磁盘建RAID 1,可用空间为较小的那个磁盘,较大的磁盘多出来的空间也可以分区成一个区来使用,不会造成浪费。
RAID5
RAID Level 5是一种储存性能、数据安全和存储成本兼顾的存储解决方案。它使用的是Disk Striping(硬盘分区)技术。RAID 5至少需要三块硬盘,RAID 5不是对存储的数据进行备份,而是把数据和相对应的奇偶校验信息存储到组成RAID5的各个磁盘上,并且奇偶校验信息和相对应的数据分别存储于不同的磁盘上。当RAID5的一个磁盘数据发生损坏后,可以利用剩下的数据和相应的奇偶校验信息去恢复被损坏的数据。RAID 5可以理解为是RAID 0和RAID 1的折衷方案。RAID 5可以为系统提供数据安全保障,但保障程度要比镜像低而磁盘空间利用率要比镜像高。RAID 5具有和RAID 0相近似的数据读取速度,只是因为多了一个奇偶校验信息,写入数据的速度相对单独写入一块硬盘的速度略慢,若使用“回写缓存”可以让性能改善不少。同时由于多个数据对应一个奇偶校验信息,RAID 5的磁盘空间利用率要比RAID 1高,便宜。
(2)、新增加一块硬盘sdb,200G
划分4个分区,分别为20G
fdisk /dev/sdb,具体过程不贴了,最后的效果是这样:
Device Boot Start End Blocks Id System
/dev/sdb1 2048 41945087 20971520 83 Linux
/dev/sdb2 41945088 83888127 20971520 83 Linux
/dev/sdb3 83888128 125831167 20971520 83 Linux
/dev/sdb4 125831168 419430399 146799616 5 Extended
/dev/sdb5 125833216 167776255 20971520 83 Linux
划分4个分区,分别为20G
fdisk /dev/sdb,具体过程不贴了,最后的效果是这样:
Device Boot Start End Blocks Id System
/dev/sdb1 2048 41945087 20971520 83 Linux
/dev/sdb2 41945088 83888127 20971520 83 Linux
/dev/sdb3 83888128 125831167 20971520 83 Linux
/dev/sdb4 125831168 419430399 146799616 5 Extended
/dev/sdb5 125833216 167776255 20971520 83 Linux
sdb1,sdb2,sdb3,sdb5各20G
#创建md0的软raid5阵列
mdadm -C /dev/md0 -a yes -l 5 -n 3 -x 1 /dev/sdb1 /dev/sdb2 /dev/sdb3 /dev/sdb5
#格式化
mkfs.xfs /dev/md0
#挂载
mkdir /mnt/raid5
mount /dev/md0 /mnt/raid5
每天的2 点和12 点整,将/etc 备份至/testdir/backup目录中,保存的文件名称格式为etcbak-yyyy-mm-dd-HH.tar.xz
crontab -e
0 2,12 * /usr/bin/tar -Jcvf etcbak-
列出三个私有地址网络,用 CIDR 表示,并将 10.100.208.0/20 网络划分成 8 个子网,写出最大子网络的 IP 范围。
三个私有地址网络:
10.0.0.0/8~10.255.255.255/8
11.172.16.0.0/16 ~ 172.31.255.255/16 16个地址用于内部
192.168.0.0/24 ~ 192.168.255.255/24 256个地址用于内部
划分后的最大子网络的IP范围为: 10.100.222.1-10.100.223.255
给CentOS6 eth0 网 卡 , 分 别 设 置 三 个 IP 地 址 :10.0.0.200/8,172.18.0.200/16,192.168.0.200/24,请写出步骤
临时配置:
ifconfig eth0:0 10.0.0.200 netmask 255.0.0.0 up
ifconfig eth0:1 172.18.0.200 netmask 255.255.255.0 up
ifconfig eth0:2 192.168.0.200 netmask 255.255.255.0 up
永久生效:
vim /etc/sysconfig/network-scripts/ifcfg-eth0:0
DEVICE=eth0:0
ONBOOT=yes
BOOTPROTO=static
IPADDR=10.0.0.200
PREFIX=8
vim /etc/sysconfig/network-scripts/ifcfg-eth0:1
DEVICE=eth0:1
ONBOOT=yes
BOOTPROTO=static
IPADDR=172.18.0.200
PREFIX=16
vim /etc/sysconfig/network-scripts/ifcfg-eth0:2
DEVICE=eth0:2
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.0.200
PREFIX=24
mdadm -C /dev/md0 -a yes -l 5 -n 3 -x 1 /dev/sdb1 /dev/sdb2 /dev/sdb3 /dev/sdb5
#格式化
mkfs.xfs /dev/md0
#挂载
mkdir /mnt/raid5
mount /dev/md0 /mnt/raid5
每天的2 点和12 点整,将/etc 备份至/testdir/backup目录中,保存的文件名称格式为etcbak-yyyy-mm-dd-HH.tar.xz
crontab -e
0 2,12 * /usr/bin/tar -Jcvf etcbak-
data +%F-%H
.tar.xz /etc列出三个私有地址网络,用 CIDR 表示,并将 10.100.208.0/20 网络划分成 8 个子网,写出最大子网络的 IP 范围。
三个私有地址网络:
10.0.0.0/8~10.255.255.255/8
11.172.16.0.0/16 ~ 172.31.255.255/16 16个地址用于内部
192.168.0.0/24 ~ 192.168.255.255/24 256个地址用于内部
划分后的最大子网络的IP范围为: 10.100.222.1-10.100.223.255
给CentOS6 eth0 网 卡 , 分 别 设 置 三 个 IP 地 址 :10.0.0.200/8,172.18.0.200/16,192.168.0.200/24,请写出步骤
临时配置:
ifconfig eth0:0 10.0.0.200 netmask 255.0.0.0 up
ifconfig eth0:1 172.18.0.200 netmask 255.255.255.0 up
ifconfig eth0:2 192.168.0.200 netmask 255.255.255.0 up
永久生效:
vim /etc/sysconfig/network-scripts/ifcfg-eth0:0
DEVICE=eth0:0
ONBOOT=yes
BOOTPROTO=static
IPADDR=10.0.0.200
PREFIX=8
vim /etc/sysconfig/network-scripts/ifcfg-eth0:1
DEVICE=eth0:1
ONBOOT=yes
BOOTPROTO=static
IPADDR=172.18.0.200
PREFIX=16
vim /etc/sysconfig/network-scripts/ifcfg-eth0:2
DEVICE=eth0:2
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.0.200
PREFIX=24
在 CentOS6 中,误删除/boot 下所有文件后无法启动,写出恢复的详细步骤。
救援模式进入系统
chroot /mnt/sysimage
mount /dev/sr0 /mnt
rpm -ivh /mnt/Packages/kernel-2.6.32-696.el6.x86_64.rpm --force
grub-install /dev/sda
手写/boot/grub/grub.conf
default =0
timeout=5
root (hd0,0)
title CentOS 6.9
kernel /vmlinuz-2.6.32-696.el6.x86_64 root=/dev/sda2
init initramfs-2.6.32-696.el6.x86_64.img
退出重启
救援模式进入系统
chroot /mnt/sysimage
mount /dev/sr0 /mnt
rpm -ivh /mnt/Packages/kernel-2.6.32-696.el6.x86_64.rpm --force
grub-install /dev/sda
手写/boot/grub/grub.conf
default =0
timeout=5
root (hd0,0)
title CentOS 6.9
kernel /vmlinuz-2.6.32-696.el6.x86_64 root=/dev/sda2
init initramfs-2.6.32-696.el6.x86_64.img
退出重启
快速查找/root目录中大于2M的文本,并将文件中的magedu,换成www.magedu.com
find /root --size +2M -type f -exec sed -i 's/magedu/www.magedu.com/g' {} \;
find /root --size +2M -type f -exec sed -i 's/magedu/www.magedu.com/g' {} \;
若系统检测到***用root用户登录了系统,如何将***所登录的终端杀死,并立即对root用户修改密码。
root用户执行who查看登录的终端信息(TERMINAL)
ps -t |grep TERMINAL查看终端的进程号
kill -9 PID按终端的进程号号杀掉异常的终端进程
echo xxxx |passwd --stdin rootxxxx为新的密码
简述CentOS6开机启动流程
post–mbr grub 1stage–stage1.5–stage 2 /boot/grub—/boot/grub/grub.conf —kernel /vmlinuz.XXX root=— /boot/initramfs |/boot/initrd.XX.img —/sbin/init –/etc/inittab —/etc/rc.d/rc.sysinit(/etc/fstab) —/etc/rc5.d/K,S —/etc/rc.d/rc.local –login
POST加电自检
引导加载器bootloader
bootloader的引导程序GRUB的一部分放在MBR中
引导加载器程序GRUB
grub 1.5阶段和2阶段
加载内核模块
先加载vmliuz内核,然后加载initramfs文件initd.img(里面都是预加载用到的的模块)
运行init,挂载硬盘和启动程序
运行init程序,init去读inittab启动模式,读取/etc/rc.d/rc.sysinit(里面有硬盘的挂载),找到相应模式对应的程序启动脚本,比如在5模式,去/etc/rc5.d里按顺序启动程序
sbin/init –/etc/inittab —/etc/rc.d/rc.sysinit(/etc/fstab) —/etc/rc5.d —/etc/rc.d/rc.local
登录
Linux现连接一个新的存储(如/dev/sdb,容量为10T)一人应用程序需要在/data目录使用此存储的100G的存储空间,若做成LVM需要哪些步骤,请描述
#让服务器识别硬盘
echo '- - -' /sys/class/scsi_host/host2/scan
#lsblk可以看到硬盘
lsblk
lvm创建过程:
pvcreate /dev/sdb
vgcreate vg1 /dev/sdb
lvcreate -L 100G -n lv1 vg1
mkfs.ext4 /dev/vg1/lv1
mkdir /data
mount /dev/vg1/lv1 /data
如果要加到fstab里设成开机启动:
echo "/dev/vg1/lv1 /data ext4 defaults 0 0" >> /etc/fstab
#让服务器识别硬盘
echo '- - -' /sys/class/scsi_host/host2/scan
#lsblk可以看到硬盘
lsblk
lvm创建过程:
pvcreate /dev/sdb
vgcreate vg1 /dev/sdb
lvcreate -L 100G -n lv1 vg1
mkfs.ext4 /dev/vg1/lv1
mkdir /data
mount /dev/vg1/lv1 /data
如果要加到fstab里设成开机启动:
echo "/dev/vg1/lv1 /data ext4 defaults 0 0" >> /etc/fstab
修改上述网站的http 端口为9527 ,并为之增加SELinux 端口标签。
sed -i.bak 's/Listen\ 80/Listen\ 9527/g' /etc/httpd/conf/httpd.conf # 修改端口为9527
semanage port -l| grep http_port_t # SELinux策略里没有9527端口
semanage port -a -t http_port_t -p tcp 9527 # 添加9527端口
semanage port -l| grep http_port_t # 再次查看有了
查看crond进程打开了哪些文件
lsof -c crond|grep REG|tr -s " " |cut -d" " -f9
请完成以下操作
1)查询file.txt文件里第一列数据数值之和(字段以&符号分隔)
2)查询Hie.txt第7行之前添加一行,内容为”#注释”
3)打印出file.txt文件第6到第10行
awk -F'&' 'NR==1 {for (i=1;i<=NF;i++){sum+=$i};print sum}' file.txt
sed -i.bak '7i/#注释' Hie.txt
awk 'NR >=6 && NR<=10' file.txt
1)查询file.txt文件里第一列数据数值之和(字段以&符号分隔)
2)查询Hie.txt第7行之前添加一行,内容为”#注释”
3)打印出file.txt文件第6到第10行
awk -F'&' 'NR==1 {for (i=1;i<=NF;i++){sum+=$i};print sum}' file.txt
sed -i.bak '7i/#注释' Hie.txt
awk 'NR >=6 && NR<=10' file.txt
编写脚本,利用变量RANDOM生成10个随机数字,输出这10个数字,并显示其中的最大值和最小值,用两种方法实现
1、for i in
array[$i]=$RANDOM
echo ${array[$i]}
done
echo "the min number:"
echo ${array[]}|awk -v RS=' ' -v ORS="\n" '{print $0}'|sort -n|grep -v '^$'|head -1
echo "the max number:"
echo ${array[]}|awk -v RS=' ' -v ORS="\n" '{print $0}'|sort -n|grep -v '^$'|tail -1
2、for i in
j=$RANDOM
echo $j
if [ $i -eq 1 ];then
max=$j
min=$j
else
if [ $j -ge $max ];then
max=$j
fi
if [ $j -le $min ];then
min=$j
fi
fi
done
1、for i in
seq 0 9
;doarray[$i]=$RANDOM
echo ${array[$i]}
done
echo "the min number:"
echo ${array[]}|awk -v RS=' ' -v ORS="\n" '{print $0}'|sort -n|grep -v '^$'|head -1
echo "the max number:"
echo ${array[]}|awk -v RS=' ' -v ORS="\n" '{print $0}'|sort -n|grep -v '^$'|tail -1
2、for i in
seq 10
;doj=$RANDOM
echo $j
if [ $i -eq 1 ];then
max=$j
min=$j
else
if [ $j -ge $max ];then
max=$j
fi
if [ $j -le $min ];then
min=$j
fi
fi
done
echo max number is $max
echo min number is $min
echo min number is $min
vim
复制/etc/ssh/sshd_config 到/tmp/中并更名为sshd_config.bak。将/tmp/sshd_config.bak文件中所有以非#号开头与包含空白字符的行保存至/tmp/sshd_config中。
cp /etc/ssh/sshd_config /tmp/sshd_config.bak
cat /tmp/sshd_config.bak |grep "^[^#]"|grep "^[^[:space:]*$]"
导航命令:% 括号匹配 插入命令: i 在当前位置生前插入、I 在当前行首插入、a 在当前位置后插入、A 在当前行尾插入、o 在当前行之后插入一行、O 在当前行之前插入一行
查找命令:/text 查找text,按n健查找下一个,按N健查找前一个。 ?text 查找text,反向查找,按n健查找下一个,按N健查找前一个。
替换命令:ra 将当前字符替换为a,当期字符即光标所在字符。
s/old/new/ 用old替换new,替换当前行的第一个匹配
%s/old/new/ 用old替换new,替换所有行的第一个匹配
移动命令:^ 移动到本行第一个非空白字符上。 0(数字0)移动到本行第一个字符上, <HOME> 移动到本行第一个字符。同0键。 $ 移动到行尾 gg 移动到文件头。 = [[ G(shift + g) 移动到文件尾。 = ]]
跳到指定行,冒号+行号,回车,比如跳到240行就是 :240回车。另一个方法是行号+G,比如230G跳到230行。
Ctrl + e 向下滚动一行 Ctrl + y 向上滚动一行 Ctrl + d 向下滚动半屏 Ctrl + u 向上滚动半屏 Ctrl + f 向下滚动一屏 Ctrl + b 向上滚动一屏
x 删除当前字符 3x 删除当前光标开始向后三个字符
X 删除当前字符的前一个字符。X=dh
dl 删除当前字符, dl=x dh 删除前一个字符 dd 删除当前行 dj 删除上一行 dk 删除下一行 10d 删除当前行开始的10行。
D 删除当前字符至行尾。D=d$ d$ 删除当前字符之后的所有字符(本行)
1,10d 删除1-10行 11,$d 删除11行及以后所有的行
删除全文:光标放置文首,:.,$d
拷贝粘贴:ddp交换当前行和其下一行 xp交换当前字符和其后一个字符
MYSQL部分
A.并发控制
1.共享锁(shared lock,读锁):共享的,相互不阻塞的 2.排他锁(exclusive lock,写锁):排他的,一个写锁会阻塞其他的写锁和读锁
B.事务
1.事务ACID
* 原子性(atomicity)一个事务必须被视为一个不可分割的最小工作单元,整个事务中所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一部分操作
* 一致性(consistency)数据库总是从一个一致性的状态转换到另外一个一致性的状态
* 隔离性(isolation)一个事务所做的修改在最终提交以前,对其他事务是不可见的
* 持久性(durability)一旦事务提交,则其所做的修改就会永久保存到数据库中
2.四种隔离级别
* READ UNCOMMITTED(未提交读),事务中的修改,即使没有提交,对其他事务也都是可见的,事务可以读取未提交的数据,也被称为脏读(Dirty Read),这个级别会导致很多问题
* READ COMMITTED(提交读),大多数数据库系统的默认隔离级别,一个事务开始时,只能“看见”已经提交的事务所做的修改,一个事务从开始直到提交之前,所做的任何修改对其他事务都是不可见的,也叫不可重复读(nonrepeatable read),有可能出现幻读(Phantom Read),指的是当某个事务在读取某个范围内的记录时,另外一个事务又在该范围内插入了新的记录,当之前的事务再次读取该范围的记录时,会产生幻行(Phantom Row)
* REPEATABLE READ(可重复读),通过InnoDB和XtraDB存储引擎,是MySQL的默认事务隔离级别
* SERIALIZABLE(可串行化)最高级别,通过强制事务串行执行,避免了幻读问题,会在读取的每一行数据上都加锁,可能导致大量的超时和锁争用的问题
3.死锁:指两个或多个事务在同一资源上相互占用,并请求锁定对方占用的资源,从而导致恶性循环的现象
4.事务日志:存储引擎在修改表的数据时只需要修改其内存拷贝,再把该修改行为记录到持久在硬盘上的事务日志中,而不用每次都将修改的数据本身持久到磁盘。事务日志持久以后,内存中被修改的数据在后台可以慢慢地刷回到磁盘,称为预写式日志(Write-Ahead Logging)
A.索引基础
1.索引可以包含一个或多个列的值,如果索引包含多个列,那么列的顺序也十分重要,因为MySQL只能高效地使用索引的最左前缀列
2.ORM工具能够产生符合逻辑的、合法的查询,除非只是生成非常基本的查询,否则它很难生成适合索引的查询
3.在MySQL中,索引是在存储引擎层而不是服务器层实现的,所以,并没有统一的索引标准:不同存储引擎的索引的工作方式并不一样,也不是所有的存储引擎都支持所有类型的索引
4.B-Tree意味着所有的值都是按顺序存储的,并且每一个叶子页到根的距离相同,能够加快访问数据的速度,从索引的根节点开始进行搜索,适用于全键值、键值范围或键前缀查找
B.索引的优点
1.三个优点: * 索引大大减少了服务器需要扫描的数据量 * 索引可以帮助服务器避免排序和临时表 * 索引可以将随机I/O变为顺序I/O
查询执行路径
* 客户端发送一条查询给服务器 * 服务器先检查查询缓存,如果命中则立刻返回,否则进入下一阶段 * 服务器端进行SQL解析、预处理,再由优化器生成对应的执行计划 * MySQL根据优化器生成的执行计划,调用存储引擎的API来执行查询 * 将结果返回给客户端
B.视图
1.视图本身是一个虚拟表,不存放任何数据,返回的数据是MySQL从其他表中生成的
2.MySQL使用两种算法:合并算法(MERGE)和临时表算法(TEMPTABLE),会尽可能地使用合并算法
3.如果视图中包含GROUP BY、DISTINCT、任何聚合函数、UNION、子查询等,只要无法在原表记录和视图记录中建立一一映射的场景中,MySQL都将使用临时表算法来实现视图
4.可更新视图(updatable view)是指可以通过更新这个视图来更新视图涉及的相关表,CHECK OPTION表示任何通过视图更新的行,都必须符合视图本身的WHERE条件定义
5.在重构schema的时候可以使用视图,使得在修改视图底层表结构的时候,应用代码还可能继续不报错运行
6.MySQL中不支持物化视图(指将视图结果数据存放在一个可以查看的表中,并定期从原始表中刷新数据到这个表中)
7.不会保存视图定义的原始SQL语句
HTTP部分:
http协议常用的状态码
200: 成功,请求数据通过响应报文的entity-body部分发送;OK
301: 请求的URL指向的资源已经被删除;但在响应报文中通过首部Location指明源现在所处的新位置;Moved Permanently
302: 响应报文Location指明资源临时新位置 Moved Temporarily
304: 客户端发出了条件式请求,但服务器上的资源未曾发生改变,则通过响应此状态码通知客户端;Not Modified
401: 需要输入账号和密码认证方能访问资源;Unauthorized
403: 请求被禁止;Forbidden 404: 服务器无法找到客户端请求的资源;Not Found
500: 服务器内部错误;Internal Server Error
502: 代理服务器从后端服务器收到了一条伪响应,如无法连接到网关;Bad Gate
503: 服务不可用,临时服务器维护或过载,服务器无法处理请求
504
No comments:
Post a Comment