N80-42 河北-王滔 4星期作业

发布时间 2023-07-30 00:41:25作者: bbbbbadvs
Xshell 7 (Build 0128)
Copyright (c) 2020 NetSarang Computer, Inc. All righ

Type `help' to learn how to use Xshell prompt.
[C:\~]$ ssh root@192.168.124.144


Connecting to 192.168.124.144:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.

WARNING! The remote SSH server rejected X11 forwarding request.
Activate the web console with: systemctl enable --now cockpit.socket

Last login: Sat Jul 29 21:29:42 2023 from 192.168.124.1
[root@zhu ~]# ls
1
1.txt
2.sh
2.sql
定时脚本和自定义脚本.sh
anaconda-ks.cfg
full.tar
hellodb_innodb.sql
mysql80-community-release-el7-1.noarch.rpm
nohup.out
percona-xtrabackup-80-8.0.26-18.1.el8.x86_64.rpm
percona-xtrabackup-80-8.0.32-26.1.el8.x86_64.rpm
Webyog-SQLyog-Ultimate12.0.8.0.zip
wordpress
wordpress-6.2.2-zh_CN.zip
[root@zhu ~]# mv 定时脚本和自定义脚本.sh  dingshi.sh
[root@zhu ~]# vim dingshi.sh 
[root@zhu ~]# cd  /usr/lib
[root@zhu lib]# ls
binfmt.d       jvm-private     python3.6
cpp            kbd             realmd
debug          kdump           rpm
dracut         kernel          sendmail
eclipse        libkmip.a       sendmail.postfix
environment.d  libkmippp.a     sse2
firewalld      locale          sysctl.d
firmware       mdadm           sysimage
fontconfig     modprobe.d      systemd
games          modules         sysusers.d
gcc            modules-load.d  tmpfiles.d
grub           NetworkManager  tuned
java           os-release      udev
jvm            polkit-1
jvm-commmon    private
[root@zhu lib]# vim /etc/system
systemd/            system-release-cpe
system-release      
[root@zhu lib]# vim /etc/system
systemd/            system-release-cpe
system-release      
[root@zhu lib]# vim /etc/systemd/system
system/      system.conf  
[root@zhu lib]# vim /etc/systemd/system/tmp-ll-wc.service 
[root@zhu lib]# vim /etc/systemd/system/tmp-ll-wc.service 
[root@zhu lib]# systemctl  enable my-demo.service
Failed to enable unit: Unit file my-demo.service does not exist.
[root@zhu lib]# systemctl  enable  --now   my-demo.service
Failed to enable unit: Unit file my-demo.service does not exist.
[root@zhu lib]# systemctl  enable  --now  tmp-ll-wc.service
Created symlink /etc/systemd/system/multi-user.target.wants/tmp-ll-wc.service → /etc/systemd/system/tmp-ll-wc.service.
Job for tmp-ll-wc.service failed because the control process exited with error code.
See "systemctl status tmp-ll-wc.service" and "journalctl -xe" for details.
[root@zhu lib]# ls
binfmt.d       jvm-private     python3.6
cpp            kbd             realmd
debug          kdump           rpm
dracut         kernel          sendmail
eclipse        libkmip.a       sendmail.postfix
environment.d  libkmippp.a     sse2
firewalld      locale          sysctl.d
firmware       mdadm           sysimage
fontconfig     modprobe.d      systemd
games          modules         sysusers.d
gcc            modules-load.d  tmpfiles.d
grub           NetworkManager  tuned
java           os-release      udev
jvm            polkit-1
jvm-commmon    private
[root@zhu lib]# cd ~
[root@zhu ~]# vim dingshi.sh 
[root@zhu ~]# vim dingshi.sh 
[root@zhu ~]# systemctl  enable  --now  tmp-ll-wc.service
Job for tmp-ll-wc.service failed because the control process exited with error code.
See "systemctl status tmp-ll-wc.service" and "journalctl -xe" for details.
[root@zhu ~]# vim /etc/init.d/
functions  README     
[root@zhu ~]# ls
1
1.txt
2.sh
2.sql
anaconda-ks.cfg
dingshi.sh
full.tar
hellodb_innodb.sql
mysql80-community-release-el7-1.noarch.rpm
nohup.out
percona-xtrabackup-80-8.0.26-18.1.el8.x86_64.rpm
percona-xtrabackup-80-8.0.32-26.1.el8.x86_64.rpm
Webyog-SQLyog-Ultimate12.0.8.0.zip
wordpress
wordpress-6.2.2-zh_CN.zip
[root@zhu ~]# vim 2.sh
[root@zhu ~]# cp 2.sh /etc/init.d/
[root@zhu ~]# cd  /etc/init.d/
[root@zhu init.d]# ls
2.sh  functions  README
[root@zhu init.d]# vim functions 
[root@zhu init.d]# chkcofig --add 2.sh 
-bash: chkcofig: 未找到命令
[root@zhu init.d]# ls
2.sh  functions  README
[root@zhu init.d]# /etc/init.d/2.sh start
-bash: /etc/init.d/2.sh: 权限不够
[root@zhu init.d]# chmod 700 2.sh 
[root@zhu init.d]# /etc/init.d/2.sh start
[root@zhu init.d]# cat<<EOF>0.sh
> :^C
[root@zhu init.d]# chkconfig --add chen
服务 chen 信息读取出错:没有那个文件或目录
[root@zhu init.d]# chkconfig --add 2.sh 
服务 2.sh 不支持 chkconfig
[root@zhu init.d]# 2.sh    --add chen
-bash: 2.sh: 未找到命令
[root@zhu init.d]# chkconfig --add 2.sh 
服务 2.sh 不支持 chkconfig
[root@zhu init.d]# chkconfig --add 4
服务 4 信息读取出错:没有那个文件或目录
[root@zhu init.d]# chkconfig --add chen
服务 chen 信息读取出错:没有那个文件或目录
[root@zhu init.d]# chkconfig --add chen
服务 chen 信息读取出错:没有那个文件或目录
[root@zhu init.d]# chkconfig chen off
服务 chen 信息读取出错:没有那个文件或目录
[root@zhu init.d]# cd ~
[root@zhu ~]# vim dingshi.sh 
[root@zhu ~]# bash dingshi.sh 
1) 定时任务
2) 自定时务
3) 定时任务sh
4) 自定服务
5) 退出
输入操作:4
自定服务完成
输入操作:2
dingshi.sh: /etc/init.d/8.sh: bin/bash: 解释器错误: 没有那个文件或目录
自定时务完成
[root@zhu ~]# 1
-bash: 1: 未找到命令
[root@zhu ~]# vim dingshi.sh 
[root@zhu ~]# bash dingshi.sh 
1) 定时任务
2) 自定时务
3) 定时任务sh
4) 自定服务
5) 退出
输入操作:4
dingshi.sh: /etc/init.d/8.sh: bin/bash: 解释器错误: 没有那个文件或目录
自定服务完成
输入操作:5
退出完成
[root@zhu ~]# vim /etc/init.d/8.sh 
[root@zhu ~]# bash dingshi.sh 
1) 定时任务
2) 自定时务
3) 定时任务sh
4) 自定服务
5) 退出
输入操作:4
dingshi.sh: /etc/init.d/8.sh: bin/bash: 解释器错误: 没有那个文件或目录
自定服务完成
输入操作:^[[A^[[A5
错误 
输入操作:^[[A
错误 
输入操作:5
退出完成
[root@zhu ~]# vim dingshi.sh 
[root@zhu ~]# vim /etc/init.d/8.sh 
[root@zhu ~]# bash dingshi.sh 
1) 定时任务
2) 自定时务
3) 定时任务sh
4) 自定服务
5) 退出
输入操作:4
dingshi.sh: /etc/init.d/8.sh: bin/bash: 解释器错误: 没有那个文件或目录
自定服务完成
输入操作:^[[A^[[A5
错误 
输入操作:
1) 定时任务
2) 自定时务
3) 定时任务sh
4) 自定服务
5) 退出
输入操作:5
退出完成
[root@zhu ~]# vim /etc/init.d/8.sh 
[root@zhu ~]# bash  /etc/init.d/8.sh 
/etc/init.d/8.sh: 第 9 行:[: 参数太多
[root@zhu ~]# vim /etc/init.d/8.sh 
[root@zhu ~]# bash  /etc/init.d/8.sh 
[root@zhu ~]# vim dingshi.sh 

#!/bin/bash



function aa(){

  read -p "输入 要创建的文件 "

cat<<EOF> /etc/cron.d/2
* * * * *  bash  tmp/1.sh
* * * * * ll
* * * * * wc -l
* * * * *  data
* * * * *  dn -l
EOF
}


function cc(){
read -p "输入要执行的日期 " aa
read -p "输入要执行的命令 " bb
                                 16,1         顶端
View Code

 

#!/bin/bash



function aa(){
    
  read -p "输入 要创建的文件 "

cat<<EOF> /etc/cron.d/2
* * * * *  bash  tmp/1.sh
* * * * * ll
* * * * * wc -l
* * * * *  data
* * * * *  dn -l
EOF
}


function cc(){
read -p "输入要执行的日期 " aa
read -p "输入要执行的命令 " bb
read -p "输入要创建的文件名 " dd
cat <<EOF>/etc/cron.d/$dd
$aa  $bb
EOF
~                                                  
~                  




}


function hh (){

read -p "输入要执行的日期 " aa
read -p "输入要创建的文件名 " dd
cat <<EOF>/etc/cron.d/$dd
$aa  ll /tmp |wc -l

EOF





}













function bb(){
PS3='输入操作:'
foods=("定时任务"  "自定时务"  "定时任务sh" "自定服务"  "退出")
select bb in "${foods[@]}";do
	case $bb in
		"定时任务")
			
		        aa || echo "没完成1";exit; 
			echo "定时任务完成" 
			exit
			      
			      ;;
		"自定时务")

			cc
			echo "自定时务完成"
			exit
                         ;;
                "定时任务sh")
                        hh
			echo "用定时任务来运行sh脚本完成"
                         ;;

                "自定服务")
echo "自定服务完成"
                         ;;

                "退出")
echo "退出完成"  
exit
                         ;;

		* )
    echo "错误 "
                       ;;
       esac
done       
}
bb

 

  

 

部分代码

 

 

                                                                         

                                                                           

 

     Linux的进程和内存的概念

 

1、进程相关概念

  进程:正在运行中的程序

  内核功用:进程管理、文件系统、网络功能、内存管理、驱动程序、安全功能等

  Process:运行中的程序的一个副本,是被载入内存的一个指令集合
    进程 ID(Process ID,PID)号码被用来标记各个进程
    通常从执行进程的用户来继承,存在生命周期

  task struct 任务结构表:Linux 内核存储进程信息的数据结构格式

  task list 任务列表:多个任务的 task struct 组成的链表

  进程创建:
    都由其父进程创建,父好关系,CoW(写时复制,不发生改变时父子都指向同一文件;发生改变时,则复制)
    init:第一个进程(centos6:init,centos7:systemd)
    守护进程:随着计算机的开启、关闭而随之开启、关闭。

2、进程,线程和协程:

  

  注:一个进程里至少有一个线程;线程之间由操作系统进行调度,包括进程中使用的资源也由操作系统进行调度;协程相当于线程中的语句块,由线程控制。

3、Page Frame:页框,用存储页面数据,存储 Page,每个进程要使用的分配空间
  虚拟内存(线性内存):进程运行的时候以为自己拥有了全部的内存空间
  物理地址空间和线性地址空间:
    MMU:负责转换线性和物理地址(虚拟内存和物理内存)
    TLB:翻译后备缓冲器,用于保存虚拟地址和物理地址映射关系的缓存
    LRU:近期最少使用算法,释放内存

4、用户空间和内核空间:

  

5、进程之间基本状态和转换:

  

  创建状态:进程在创建时需要申请一个空白 PCB(进程控制块),向其中填写控制和管理进程的信息,完成资源分配。如果创建工作无法完成,比如资源无法满足,就无法被调度运行,把此时进程所处状态称为创建状态。
  就绪状态:进程已准备好,已分配到所需资源,只要分配到 CPU 就能够立即运行。
  执行状态:进程处于就绪状态被调度后,进程进入执行状态。
  阻塞状态:正在执行的进程由于某些事件(I/O 请求,申请缓存区失败)而暂时无法运行,进程受到阻塞,在满足请求时进入就绪状态等待系统调用。
  终止状态:进程结束,或出现错误,或被系统终止,进入终止状态,无法再执行。

  状态之间转换六种情况:
  运行 → 就绪:1,主要是进程占用 CPU 的时间过长,而系统分配给该进程占用 CPU 的时间是有限的;2,在采用抢先式优先级调度算法的系统中,当有更高优先级的进程要运行时,该进程就被迫让出 CPU,该进程便由执行状态转变为就绪状态。
  就绪 → 运行:运行的进程的时间片用完,调度就转到就绪队列中选择合适的进程分配 CPU。
  运行 → 阻塞:正在执行的进程因发生某等待事件而无法执行,则进程由执行状态变为阻塞状态如发生了 I/O 请求。
  阻塞 → 就绪:进程所等待的事件已经发生,就进入就绪队列。
  以下两种状态是不可能发生的:
  阻塞 → 运行:即使给阻塞进程分配 CPU,也无法执行,操作系统在进行调度时,不会从阻塞队列进行挑选,而是从就绪队列中选取。
  就绪 → 阻塞:就绪态根本就没有执行,谈不上进入阻塞态。

6、IPC 进程间通信:
  同一主机:
    pipe 管道,一个写入管道文件,一个读(单向)
    socket 套接字文件,进程间交换数据(双工工作方式)
    signal 信号
    shm shared memory,共享内存
    semaphore 信号量,一种计数器,分配资源
  不同主机:
    socket ip 和端口号
    RPC 远程过程调用
    MQ 消息队列,如:Kafka , RabbitMQ,ActiveMQ

7、进程优先级

  

  实时进程(realtime),基于 FIFO 先进先出或 RR 轮询
  非实时进程:nice 按时间片分配进程
  取 139 个队列,将相同优先级的放在一个队列中,运行一个时间片后从运行队列转至过期队列。轮回运行队列和过期队列互调,再运行。

  

  进程优先级:
系统优先级:数字越小,优先级越高
0-139:各有 140 个运行队列和过期队列
    实时优先级:99-0 值最大优先级最高
    nice 值:-20 到 19,对应系统优先级 100-139

  Big 0:时间复杂度,用时和规模的关系
    0(1),O(logn),O(n)线性,O(n^2)抛物线,O(2^n)

8、进程状态:
  Linux 内核:抢占式多任务,按时间片分配任务
  进程类型:
    守护进程:daemon,在系统引|导过程中启动的进程,和终端无关进程
    前台进程:跟终端相关,通过终端启动的进程,用户执行命令等
    注意:两者可相互转化
  进程状态:
    运行态:running
    就绪态:ready
    睡眠态:
      可中断:interruptable
      不可中断:uninterruptable
    停止态:stopped,暂停于内存,但不会被调度,除非手动启动
    僵死态:zombie,结束进程,父进程结束前,子进程不关闭

9、进程工具

9.1 系统管理工具:
  进程的分类:
    CPU-Bound:CPU 密集型,非交互
      编译安装、大量计算等
    IO-Bound:IO 密集型,交互
      拷贝大文件等 DMA:直接内存访问

启动流程

就有5个流程

  • 内核的引导。
  • 运行 init。
  • 系统初始化。
  • 建立终端 。
  • 用户登录系统
  •  

 

  开机 开机先取blos自检   按照blos设置的启动设备来启动

操作系统接管硬件以后,首先读入 /boot 目录下的内核文件。

运行init

init 进程是系统所有进程的起点,你可以把它比拟成系统所有进程的老祖宗,没有这个进程,系统中任何进程都不会启动。

init 程序首先是需要读取配置文件 /etc/inittab。   所有的子进程的都是由init来衍生的

Linux系统有7个运行级别(runlevel):

  • 运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
  • 运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登录
  • 运行级别2:多用户状态(没有NFS)
  • 运行级别3:完全的多用户状态(有NFS),登录后进入控制台命令行模式
  • 运行级别4:系统未使用,保留
  • 运行级别5:X11控制台,登录后进入图形GUI模式
  • 运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动

系统初始化

在init的配置文件中有这么一行: si::sysinit:/etc/rc.d/rc.sysinit 它调用执行了/etc/rc.d/rc.sysinit,而rc.sysinit是一个bash shell的脚本,它主要是完成一些系统初始化的工作,rc.sysinit是每一个运行级别都要首先运行的重要脚本。

它主要完成的工作有:激活交换分区,检查磁盘,加载硬件模块以及其它一些需要优先执行任务。

建立终端

rc执行完毕后,返回init。这时基本系统环境已经设置好了,各种守护进程也已经启动了。

init接下来会打开6个终端,以便用户登录系统。在inittab中的以下6行就是定义了6个终端:

1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6

用户登录系统

一般来说,用户的登录方式有三种:

主要是启动blos的流程   但linux的文件不止512个字节   太大 blos无法加载  所以先去一个小的linux系统  让他加载去加载大的linux系统 让init去开启所有的服务和文件这个512个字节可在挂载磁盘可看

(这个引导系统   可以进安全修复模式 可看  可进    可以去还原linux系统)
linux内核编译博客
yum install   gcc   环境
 
  tar -xf linux-4.19.275.tar.xz
  sudo mv linux-4.19.275 /usr/src/linux-4.19.275

将当前内核的.config复制到新内核目录下

  cp /boot/config-5.4.0-144-generic .config

先进入图形化配置界面menuconfig

  make menuconfig

 

编译

 make bzImage   

make modules

make modules_install

make install

AWK的效率使用

1处理rdis集群时 ,用scp 复制过来的文件ip修

2大文件的数据修改

3打印文件的相关信息 和gerp  相比 下awk对文件的处理更细化

更适合shell编写