RHEL9基础(四)

变量

变量的概述:存储变化数据的内存空间地址;变化的是数据,不变的是内存的空间地址

数学的概念:x+2=4  x=2

x是变量,2就是变量的值

x是内存空间地址,2是内存的数据

例如:变量ip_address,值是$(ifconfig | grep netmask | awk ‘{print $2}’)

变量ip_addess是不变的,变的是$(ifconfig | grep netmask | awk ‘{print $2}’)

系统想要使用这个值的话,只需要找到ip_addess这个变量即可

变量的组成:

变量名=变量值

变量名:数字、下划线、字母组成;不能以数字开头

定义变量:

A=100   变量名=变量值

export  A=100 变量名=变量值

变量类型:

本地变量:用户自定义的变量

环境变量:存储系统相关的变量

(系统变量)

PATH变量:记录系统中可执行文件的路径了,在此目录中才能够作为命令执行

PS1变量:命令的提示符

引用变量:

$变量名   ${变量名}

查看变量:

set 查看所有的变量(包括本地变量以及环境变量)

env 查看环境变量

本地变量和环境变量的区别:

作用范围:本地变量--->当前的shell中生效

 环境变量--->当前的shell和子shell中生效

取消变量:

unset 变量名

引号和反斜杠

引号和反斜杠都是属于转义字符,是为了去掉后面符号的特殊意义

\ 反斜杠,去掉反斜杠后面单个字符的意义

eg : echo  \$5

单引号:去掉引号内部所有字符的特殊意义(强引用)

双引号:去掉引号内部所有字符的特殊意义(弱引用)有缺陷的

有4个符号无法去掉: $变量引用符号   \ 反斜杠 !历史条目调用  ` `  命令的执行符号

别名

系统当中的别名是为了简化命令的执行;例如grep 命令的别名是grep –color=auto 所以grep才有高亮

定义别名:

alias 别名=’执行的命令’

查看别名:

alias 查看系统中全部的别名

alias 别名  查看指定的别名

取消别名:

unalias 别名

用户登录shell

用户通过不同的登录方式可以获取到不同的shell操作环境;如果你是使用图形化登录,或者是命令行(字符页面)登录,或者是su – 切换用户,都会获取到不同的shell操作环境

类型:

登录shell(理解为用户登录到了系统,一般需要输入账号密码)

图形化登录;字符页面登录;su – 切换用户

非登录shell(理解为用户没有登录到这个系统,只是登录到了shell的操作环境)

su 切换用户;打开虚拟终端/伪终端;执行脚本

区别:

登录shell指登录到了操作系统;

非登录shell指用户获得了shell的操作环境;

它们的区别其实在于登录shell和非登录shell所触发的变量文件(触发shell的文件)是不一样的

变量文件:

/etc/bashrc   /etc/profile   ~username/.bashrc   ~username/.bash_profile

登录shell触发的文件:  su – 用户

/etc/profile   全局文件

/etc/bashrc 全局文件

~username/.bashrc 用户文件

~username/.bash_profile 用户文件

非登录shell触发的文件:

/etc/bashrc

~username/.bashrc

系统中所有的用户 变量A的值都是100,只有user用户变量A的值是1000

在/etc/bashrc中写入 A=100,在~user/.bashrc中写入A=1000

触发变量文件的优先级:

先加载的是全局文件,再加载用户文件

/etc/bashrc  -> /etc/profile  -> ~username/.bashrc -> ~username/.bash_profile

变量文件中推荐定义的方式:

无论是登录shell还是非登录shell,切换用户想要让变量和别名都生效的话,那么就将变量或者别名写入到~username/.bashrc

无论是登录shell还是非登录shell,想要所有的用户的变量和别名都生效的话,那么就写入/etc/bashrc

用户登出shell

触发配置文件:~username/.bash_logout

当退出系统才会触发此文件,图形化的终端标签页退出、注销、重启不会触发;

触发机制: 远程ssh连接退出触发;字符页面exit退出再次登录触发

进程管理

进程是应用程序运行的时候产生的,也是一个程序运行的实例;

在Linux中,运行某个命令或者启动服务,都会有一个进程;

每一个进程在系统中会分配一个唯一的ID号(PID)

当程序结束的时候,PID会被回收,下一次其他的程序运行时可能会将ID分配出去

进程的权限来自于用户的权限,继承用户的权限;哪个用户运行,那么进程就进程哪个用户的UID和GID

ps查看静态进程

    PID TTY          TIME CMD

   2213 pts/0    00:00:00 bash

   5072 pts/0    00:00:00 ps

PID:进程ID号

TTY:得到终端的方式

pts表示伪终端(远程ssh连接、图形化登录)

tty[1-6]  表示终端设备,显示屏直连,tty2表示有桌面的环境

? 表示没有终端,是内核进程

TIME:表示进程的持续时间;0表示刚刚发起或者一直在运行

CMD:运行的命令

w 查看当前系统登录的用户(who)

ps 选项:

ps -a 查看所有终端执行的进程

ps -ax 查看不属于终端的进程

x表示查看内核进程;Tty是? 表示是内核运行的进程

ps -ao user,%cpu,%mem,command

-o 指定选项

ps -ef === ps -aux

-e 查看所有进程

-f  查看用户 PID  PPID C(cpu资源占比) STIME(系统启动时间) command

--sort:指定排序的参数;例如 ps -aux --sort=-%cpu  按照cpu占比大小进行降序

ps -aux --sort=%cpu   | tail

eg:ps -aux --sort=-%cpu  | head  查看cpu占比最高的进程

  ps -aux --sort=%cpu  | tail   查看cpu占比最高的进程

RHEL9中,有考题会考到,编写一个脚本监控系统状态,监控CPU和内存的资源状态

top实时查看系统进程

默认每3秒刷新一次

-d 指定刷新间隔时间(top -d 2)

-p 查看指定pid的进程状态

top - 11:38:40 up 9 days,  2:42,  2 users,  load average: 0.00, 0.00, 0.00

load average:平均负载时间(每分钟、每5分钟、每15分钟)

和CPU相关

以单核CPU为例:

以每分钟为例

如果负载小于1,表示CPU空闲

如果负载等于1,表示CPU全力运行

如果负载大于1,表示CPU超负荷

进程有父进程和子进程的概念

系统中有两个较为特殊的进程:僵尸进程、孤儿进程

如果是僵尸进程,一定要特别重视,会消耗系统的cpu 内存资源

如果是孤儿进程,不会占用系统的cpu 内存资源,PID为1的进程会接管孤儿进程然后关闭它

产生的原因:

系统中的进程有父进程的概念,父进程会派出子进程干活;

孤儿进程:(父进程退出了,子进程还在干活;父进程先一步比子进程退出)

产生原因:用户手动关闭父进程或者程序BUG导致父进程比子进程先退出

派出来的子进程在干活中,父进程可能因为程序BUG或者特殊原因退出了,子进程就成为了孤儿进程。这个时候系统PID为1的进程会接管孤儿进程(rhel7是init,rhel7以后是systemd,是系统启动运行的第一个进程,也是系统的守护进程),然后关闭孤儿进程。

僵尸进程:(子进程已经干完活了,要告诉父进程我的活儿已经干完了,需要父进程接受我的信息,释放我)

产生原因:程序BUG或者人为故意放出病毒,子进程干完活儿了向父进程发送退出的信息,父进程没接收到,进程就会一直向父进程发送,成为僵尸进程

0.4 us,  0.6 sy,  0.0 ni, 98.7 id,  0.0 wa,  0.2 hi,  0.1 si,  0.0 st

us:用户空间占用cpu百分比

例如shell程序、开启的应用软件、桌面等

sy:内核空间占用cpu百分比

例如系统分配内存、执行的IO操作等

ni:用户自定义优先级的进程占用cpu百分比

id:cpu的空闲百分比

wa:等待磁盘IO操作的时间

时间越长,表示cpu和磁盘的性能差距越大,要检测是不是系统有非常的IO

hi:硬中断

表示硬盘、网卡等硬件设备发送CPU的中断消息,CPU处理消耗的时间

si:软中断

表示软件发送CPU的中断消息,CPU处理消耗的时间

st:虚拟机等待cpu的时间

只有当系统是虚拟机的时候关注此项

top命令过程可以使用一些交互式的命令

1 查看每个逻辑cpu的资源信息

M 按照占用内存的百分比进行排序

m 查看内存进度条模式的百分比

P 按照CPU的百分比进行排序

c 显示命令的名称

T 根据占用的时间进行排序

k 杀死pid

pgrep 通过信息查询进程

-U 通过用户名查找进程

-G 通过用户组查找进程

-u 通过uid查找进程

-g 通过gid查找进程

-P 通过父进程查找子进程

-l  打印命令

-o 如果有多个进程运行,则查找最早运行的进程

-n 如果有多个进程运行,则查找最晚运行的进程

eg:pgrep -n / -o  vim

-d 指定分隔符(shell脚本中应用的较多)

可以把过滤出来的进程根据分隔符进行分割

pidof 根据进程名称查询

pgrep 模糊查询

pidof 精确查询

eg: pidof ssh   和  pgrep  ssh

只要包含关键字ssh,pgerp就可以查询到

pidof必须写全

进程之间的通信方式

进程和进程直接按的沟通?

管道、信号、消息队列、共享内存、socket套接字

Linux中默认使用信号进行通信

 当进程接受到信号后,优先执行信号的操作;

信号的产生:

内核产生;用户手动发送信号

常用的信号:

列出信号  kill -l

signal 15   默认,关闭程序

signal  9 强制退出 (一般不建议使用,会造成文件无法写入数据)

rhel9中,vim更加灵活,使用-9  强制结束不会出现.swap文件(vim 文件 命令模式)

rhel8中,使用-9 强制结束会出现.swap文件(vim 文件,无论是什么模式)

signal 1  重新加载配置文件

发送信号:

根据进程id    kill 工具

根据进程名     killall  (会一并关闭所有的进程)

结束一整个中断的进程  pkill  -t  pts/2

pkill  : ps和kill结合

可以结束一个终端、一个用户的所有进程

pkill -t tty1    结束终端1下的进程

pkill -kill  / -9   -t  pts/2   踢用户

pkill -u 用户     结束指定用户的所有进程

pkill  -9  vim 强制结束进程

进程的优先级

在系统繁忙的时候,高优先级的进程最优先分配CPU资源

优先级越高,进程越优先分配cpu资源

Linux进程中有两种优先级:

PR 动态优先级 (内核自动调整)

NI  静态优先级 (用户手动调整)

ni优先级的范围:-20~19  ;(数字越小,优先级越高;root用户才能修改ni值)

调整ni值

修改已经启动的ni值: renice -n 15  8004

在启动进程的时候调整ni值:nice -n -20  vim a

后台作业

将一个进程放入到后台执行,让前端终端能够输入命令,不被进程占用;

格式: 命令  & (&符号表示将作业放入后台)

jobs查看当前终端的作业

kill %1 结束作业

bg %1 后台运行

fg %1 前台运行

Ctrl+z 或者 kill  -19   停止作业

  • 15
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值