自学内容网 自学内容网

linux学习week4+5

linux学习

十四.shell编程

9.单分支多分支

基本语法:

if [ 条件 ]
then
  代码
elif [ 条件 ]
then
  代码
fi

10.case语句

基本语法:

case $变量名 in
"值1")
程序1(如果变量的值等于值1,则执行程序1)
;;
"值2")
;;
*)
(当值不等于以上值,则执行此程序)
;;
esac

11.for循环

基本语法:

for 变量 in 值1 值2 值3..或者for ((初始值;循环控制条件;变量变化))
do
程序
done

12.while循环

基本语法:

while [ 条件 ]
do
程序
done

注意:while和[之间有空格

13.read读取控制台输入

基本语法:read(选项)(参数)
选项:
-p:指定读取值时的提示符
-t:限制读取时间,超过时间自动退出
参数为指定读取值的变量名
如:read -t 10 -p “请输入一个数NUM=” NUM

14.系统函数

basename:返回完整路径最后/的后面部分,常用于获取文件名
基本语法:basename 完整路径 [suffix](suffix为后缀,若suffix被指定,则自动将路径中的suffix去掉)

dirname:返回完整路径最后/的前面部分
基本语法:dirname 路径

15.自定义函数

基本语法:

[function] 函数名[()]
{
  程序;
  [return int;]
}

在编写函数时,我们可以用$1,$2等来传参,这样更简洁
案例:

my_function {
    echo "Hello, \$1! Welcome to \$2."
}

# 调用函数并传递参数
my_function Alice Wonderland

十五.Ubuntu

1. 安装

ubuntu也是基于linux的,所以大部分命令和centos差不多
ubuntu一般是Python开发者用的
安装的步骤:

  1. 检查是否开启虚拟网络支持
  2. 在VMware中新建虚拟机
  3. 将下载的镜像文件安装
  4. 以下略

2.中文支持

步骤:
请添加图片描述

3.ubuntu的root用户

ubuntu安装后都是普通用户权限
一般用su命令来直接切换到root用户,但是如果没有给root设置密码,就会抛出问题
给root设置密码:

  1. sudo passwd命令,输入一般用户密码并设置root密码
  2. 设置后用su命令切换到root用户
  3. 输入exit命令,就可以退出

4.Python程序开发

①vi hello.py:编写Python程序
②Python3 hello.py:运行Python程序

5.APT原理

apt是安装包管理工具,类似于Windows的软件管理工具
原理图:
请添加图片描述

6.软件操作的相关命令

图片消失了

备份系统文件:sudo cp /etc/apt/sources.list /etc/apt/sources.list.bakup

7.远程登录

ssh:Secure Shell,SSH为建立在应用层和传输层基础上的安全协议
与centos不同,ubuntu没有默认的SSHD的服务,需要安装(使用netstate -anp | more命令查看,apt install net-tools安装)
安装SSH:sudo apt-get install openssh-server(安装SSH的服务端和客户端)
启动:service sshd restart(启动sshd服务,会监听端口22)

创建服务器集群时,会使用到从一台linux系统远程登录另一个linux系统的技术
基本语法:ssh 用户名@IP,如:ssh hspedu@192.168.200.222
使用ssh访问,如果出现错误,可查看是否有该文件 ~ /.ssh/known_ssh尝试删除该文件解决,一般不会有问题
登出:exit或者logout

十六.日志管理

1.基本介绍

日志文件记录了许多重要的系统事件,/var/log就是系统日志文件存放的位置
系统常用的日志:
请添加图片描述

2.日志服务原理

centos7.6的日志服务是rsyslogd,centos6.x的日志服务是syslogd
请添加图片描述

3.日志管理配置文件

查询linux中的rsyslogd是否启动:ps aux | grep “rsyslog” | grep -v “grep”
查询rsyslogd服务的自启动状态:systemctl list-units-files | grep rsyslog
配置文件:/etc/rsyslog.conf
编辑文件的格式为*.*,其中第一个*代表日志类型,第二个*代表日志级别
日志类型:
请添加图片描述

日志级别:
请添加图片描述

由日志服务rsyslogd记录的日志文件,日志文件的格式包含以下4列:

  1. 事件产生的时间
  2. 产生事件的服务器的主机名
  3. 产生事件的服务名或程序名
  4. 事件的具体信息

如:
请添加图片描述

4.日志轮替

日志轮替就是把旧的文件移动并改名,同时建立新的空日志文件,当旧日志文件超出保存范围时就会进行删除
日志轮替文件命名:
请添加图片描述

logrotate配置文件:/etc/logrotate.conf为logrotate的全局配置文件
文件示例:
请添加图片描述

5.自定义轮替

配置文件中的参数说明:

  1. daily:日志轮替的周期是每天
  2. weekly:日志轮替的周期是每周
  3. monthly:日志轮替的周期是每月
  4. rotate 数字:保留的日志文件的个数。0指没有备份
  5. compress:日志轮替时,对旧的日志进行压缩
  6. create mode owner group:建立新日志,同时指定新日志的权限与所有者和所属组
  7. mail address:当日志轮替时,输出内容通过邮件发送到指定的邮件地址
  8. missingok:如果日志不存在,则忽略该日志的警告信息
  9. notifempty:如果日志为空文件,则不进行日志轮替
  10. minsize 大小:日志轮替的最小值。也就是日志一定要达到这个最小值才会轮替
  11. size 大小:日志只有大于指定大小才进行日志轮替,而不是按照时间轮替
  12. dateext:使用日期作为日志轮替文件的后缀
  13. sharedscripts:在此关键字之后的脚本只执行一次
  14. prerotate/endscript:在日志轮替之前执行脚本命令
  15. postrotate/endscript:在日志轮替之后执行脚本命令

自定义日志文件方法:
①直接在/etc/logrotate.conf配置文件中写入该日志的轮替策略
②在/etc/logrotate.d/目录中新建立该日志的轮替文件,在该轮替文件中写入正确的轮替策略,因为该目录中的文件都会被"include"到主配置文件中,所以可以把日志加入轮替
推荐第二种方法,第一种文件的可管理性差
案例:直接在/etc/logrotate.d/下创建文件log并编写如下内容
请添加图片描述

6.日志轮替机制

日志轮替之所以可以在指定的时间备份日志,是依赖系统定时任务。在/etc/cron.daily/目录,就会发现有个目录中有logrotate文件(可执行),logrotate通过这个文件依赖定时任务执行的

7.内存日志

系统用于记录内存的使用情况的日志就是内存日志
journalctl:可以查看内存日志
常用选项:
journalctl -n 3:查看最新的3条
journalctl --since 19:00 --until 19:10:10:查看起始时间到结束时间的日志,可追加日期
journalctl -p err:报错日志
journalctl -o verbose:日志详细内容
journalctl_PID=1234 _COMM=sshd:查看包含这些参数的日志
后者journalctl | grep sshd
注意:journalctl查看的是内存日志,重启清空

十七.定制linux

1.基本原理

linux启动流程:

  1. 自检:检查硬件有没有故障
  2. 如果有多块启动盘的话,需要在BIOS中选择启动盘
  3. 启动MBR中的bootloader引导程序
  4. 加载内核文件
  5. 执行所有进程的父进程、老祖宗进程systemd
  6. 欢迎界面

加载内核文件时的关键文件:
1)kernel文件:vmlinuz
2)initrd文件:initramfs

思路:
请添加图片描述

十八.阅读源码

1.好处

阅读linux内核,会对整个计算机体系有一个更深刻的认识
面试找工作需要

2.linux0.0.1内核源码

linux的内核源码可以从网上下载,解压缩后文件一般也都位于linux目录下
内核源码版本很多,可以从linux0.0.1入手,总共1w行左右

3.技巧

图片消失了

4.内核升级

内核地址:https://www.kernel.org/查看
下载的命令:wget https…/linux-版本号.tar.gz
解压:tar -zxvf 上面下载的文件
升级相关命令:
yum info kernel -q:检测内核版本,显示可以升级的版本
uname -a:查看当前的内核版本
yum update kernel:升级内核
yum list kernel -q:查看已经安装的内核
注意:需要重启后选择新安装的内核

4.备份与恢复

实体机无法做快照,如果系统出现异常或数据损坏,后果严重,所以需要备份和恢复
如果没有dump和restore指令,需要先安装:yum -y install dump和yum -y install restore(安装dump时可能会附带安装restore)

(1)dump备份

基本介绍:
dump支持分卷和增量备份(所谓增量备份是指每次备份时只备份自上次完整备份或增量备份以来发生更改的数据,也称差异备份)
语法:
dump [-cu] [-123456789] [-f<备份后文件名] [-T<日期>] [目录或文件系统]
选项说明:
请添加图片描述

案例:
dump -0uj -f /opt/book.bak0.bz2 /boot:将boot分区压缩并备份到指定目录下,备份层级为0
dump -1uj -f /opy/boot.bak1.bz2 /boot:将boot分区剩下的文件压缩并备份
技巧:通过dump命令和crontab可以实现无人值守备份
dump -W:显示需要备份的文件及其最后一次备份的层级、时间、日期
查看备份时间文件:cat /etc/dumpdates
注意:dump只支持增量备份分区,不支持增量备份目录,只能使用0级备份

如果是重要的文件,比如数据区,建议将其上传到其它服务器保存

(2)restore恢复

restore用来恢复已备份的文件,可以从dump生成的备份文件中恢复原文件
基本语法:restore [模式选项] [选项]
模式选项(只能选择其中一种):
-C:使用对比模式,将备份的文件与已存在的文件相互对比
-i:使用交互模式,在进行还原操作时,restore指令将依序询问用户
-r:进行还原模式
-t:查看模式,看备份文件有哪些

选项:
-f<备份设备>:从指定的文件中读取备份数据,进行还原操作

案例:
restore -C -f boot.bak1.bz2:将文件还原到boot.bak1.bz2并将对比信息打印出来
restore -t -f boot.bak0.bz2:将文件还原到boot.bak0.bz2并将备份文件打印出来
对于还原模式,如果有增量备份,则需要把增量备份的文件也进行恢复,按顺序恢复:
restore -r -f boot.bak0.bz2:恢复到第一次完全备份状态
restore -r -f boot.bak1.bz2:恢复到第二次增量备份状态

十九.可视化管理

1.webmin

管理员可以通过浏览器访问webmin的各种管理功能进行管理操作
下载并在linux安装后要重置密码和修改端口号(出于安全目的)
修改后重启webmin,并让防火墙对修改后的端口放开
登录:http://ip:修改后的端口号

2.常用功能

修改密码、任务调度、进程管理、MySQL数据库管理、执行脚本

3.bt宝塔

bt宝塔linux面板是提升运维效率的服务器管理软件
安装:yun install -y wget && wget -O install.sh 下载地址
如果bt用户名密码忘了,可以使用bt default命令查看

二十.面试题

1.统计访问量和连接数


请添加图片描述

解:cat t.log(打印) | cut -d ‘/’ -f 3(按/分割并选择第三段) | sort(排序) | uniq -c(统计,需要先排序) | sort -nr(倒序排序)


请添加图片描述

解:netstate -an(打印连接情况) | grep ESTABLISHED(筛选出有ESTABLISHED字样的行) | awk -F " " ‘{print $5}’(按空格分割并输出第五段) | cut -d “:” -f 1(按:分割并选择第一段) | sort | uniq -c | sort -nr

2.找回MySQL的root密码

①在/etc/my.cnf中写入skip-grant-tables
②重启mysqld服务
③直接用空密码登入root用户
④将数据库mysql中的user表中的authentication_string修改为新密码
⑤刷新权限
⑥退出mysqld服务
⑦将①中写入的删除然后用新密码登录

3.访问量排名和tcpdump


请添加图片描述

解:cat access.log | awk -F " " ‘{print $1}’ | sort | uniq -c | sort -nr | head -2(前两位)

请添加图片描述

解:tcpdump -i ens33 host 192.168.200.1 and port 22 >> /opt/tcpdump.log
③常用的Nginx模块,用来做什么
解:
请添加图片描述

4.系统权限划分

进行系统权限划分时,应考虑哪些因素
解:
首先阐述linux权限的对象:文件权限的rwx,目录的rwx,权限修改方式
注意权限分离,系统权限和数据库权限不要在一个部门
权限最小原则,不给多余的权限
减少使用root用户,尽量使用普通用户+sudo提权
重要的系统文件,用chattr锁定
使用SUID、SGID、Sticky设置特殊权限
用chkrookit/rookit hunter等检测rookit脚本(rootkit是入侵者使用工具)
用Tripwire检测文件系统完整性

5.权限思考题

图片消失了

解:

  1. 可以读、不能改、可以删
  2. 不能读、不能改、不能删
  3. 可以读、不能改、不能删
  4. 可以读、不能改、可以删

6.centos7启动流程详解

问:说明centos7启动流程,并说明与6的不同

linux7启动过程
1.硬件引导启动阶段
2.GRUB2启动引导阶段
3.内核引导阶段
4.systemd初始化阶段
Power on
BIOS
POST:初始化硬件
查找启动介质
MBR
Boot.img
Core.img
*.mod
grub.cfg
/boot/vmlinuz
/boot/initramfs
内核初始化
/user/lib/systemd/systemd

启动流程:
请添加图片描述

区别:centos7用的是grub2

7.io读写监控

问:列举linux高级命令
解:netstat、top、lsblk、find、ps -aux、chkconfig、systemctl
问:linux查看内存、io读写、磁盘存储、端口占用、进程查看命令是什么
解:top、iotop(yum install iotop)、df -lh、netstat -tunlp、ps -aux
问:用linux命令计算t2.txt的第二列的和并输出
解:cat t2.txt | awk -F " " ‘{sum+=$2}’ END {print sum}

8.统计文件数和行数

问:shell脚本里如何检查一个文件是否存在,并给出提示
解:if [ -f 文件名 ] then echo “存在” else echo “不存在” fi
问:shell脚本里如何将文本文件中的一列数字倒序排序,并将总和输出
解:sort -nr t3.txt | awk ‘{sum+=$0; print $0} END {print “和=sum”}’
问:用指令写出查找当前文件夹(/home)下所有文本文件内容中包含有字符"cat"的文件名称
解:grep -r “cat” /home | cut -d “:” -f 1
问:写出统计/home下所有文件个数和所有文件总行数的指令
解:find /home/test -name “*.*” | wc -l和find /home/test -name “*.*” | xargs wc -l

9.无人值守备份目录

问:列出你了解的web服务器负载架构
解:Nginx、Haproxy、Keepalived、LVS
问:每晚10点30分,打包站点目录/var/spool/mail备份到/home目录下(每次备份产生不同的备份包)
解:

#!/bin/bash
cd /var/spool/ && /bin/tar zcf /home/mail- `date +Y-%m-%d_%H%M%S`.tar.gz mail/

chmod u+x mail.sh
crontab -e

30 20 * * * /root/mail/sh

10.如何优化linux系统

需要解决的问题:网络带宽、磁盘IO、文件连接数、安全性、防火墙、内存

  1. 对linux的架构的优化
  2. 对linux系统本身的优化-规则:
  3. 不用root用sudo
  4. 定时的自动更新服务时间,使用nptdate npt1.aliyun.com,让croud定时更新
  5. 配置合理yum源,指向国内镜像
  6. 只打开必要的端口
  7. 打开最大文件数
  8. 配置合理的监控策略
  9. 配置合理的系统重要文件备份策略
  10. 对安装的软件进行优化
  11. 内核参数进行优化
  12. 锁定一些重要的系统文件
  13. 禁用不必要的服务:setup,ntsysv

原文地址:https://blog.csdn.net/weixin_74078488/article/details/140595220

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!