第四周作业

1.

主机名 显示主机名:hostname  显示IP地址:hostname -i  临时定制主机名:hostname ubuntu-test  永久设置主机名:hostnamectl [OPTIONS...] COMMAND

IP命令:-V:显示命令的版本信息。-s:输出更详细的信息。-f:强制使用指定的协议族,如inet(IPv4)、inet6(IPv6)等。-4:指定使用的网络层协议是IPv4协议。-6:指定使用的网络层协议是IPv6协议。-0:输出信息每条记录输出一行,即使内容较多也不换行显示。-r:显示主机时,不使用IP地址,而使用主机的域名。

看链路层信息:ip link 查看网卡ip地址信息:ip address  查看主机的路由信息:ip route

ifconfig  :查看IP和掩码;查看网关:ip route show;查看DNS:cat /etc/resolv.conf

2.DEVICE:网络接口  address1:IP地址   method:分配方式  dns:解析服务器

4.ifconfig -a

5.ss-r

6.

#!/bin/bash

sum=0

while IFS=: read -r username password uid gid gecos home shell; do
    # 累加用户 ID
    ((sum += uid))
done < /etc/passwd

echo "所有用户 ID 的总和是: $sum"

7.基于索引找内容:

 ${array_name[index]}
        ${array_name[@]:起始位置:获取数量}

${!array_name[index]}    #数组的所有索引

  ${#array_name[index]}        #获取数组长度的方法

定制关联数组 - 数组的索引是自定义的字母:

定制一个空内容的数组
[root@rocky9 ~]# declare -a course
 [root@rocky9 ~]# declare -a | grep course
 declare -a course='()'
定制一个包含元素的数组
[root@rocky9 ~]# course=(yuwen shuxue yingyu)
 [root@rocky9 ~]# declare -a | grep course
 declare -a course='([0]="yuwen" [1]="shuxue" [2]="yingyu")'


关联数组的操作
[root@rocky9 ~]# score=([yingyu]="32" [yuwen]="67" [shuxue]="65")
 [root@rocky9 ~]# declare -A | grep score
 declare -A score='([yingyu]="32" [yuwen]="67" [shuxue]="65" )'
 [root@rocky9 ~]# echo ${!score[@]}
 yingyu yuwen shuxue
 [root@rocky9 ~]# echo ${score[@]}
 32 67 6
字符串处理

str="hello world"
echo ${#str}  # 输出:11   #字符串长度
#字符串替换
# 替换首个匹配项
echo ${str/world/universe}  # 输出:hello universe

# 替换所有匹配项
echo ${str//o/O}  # 输出:hellO wOrld
#高级变量
# 若变量未定义,则使用默认值
name=${username:-"guest"}  # 若username未定义,name为"guest"

# 若变量未定义,则设置默认值并使用
name=${username:="guest"}  # 若username未定义,设置其为"guest"

# 若变量为空字符串,使用默认值
name=${username:+"default"}  # 若username非空,name为"default"

8.

#!/bin/bash
numbers=(3 7 2 9 1 8 4 6 5 10)
max=${numbers[0]}
min=${numbers[0]}

for num in "${numbers[@]}"; do
    if [[ $num -gt $max ]]; then
        max=$num
    fi
    if [[ $num -lt $min ]]; then
        min=$num
    fi
done

echo "最大值: $max, 最小值: $min"

10.11.进程状态

D:不可中断的睡眠状态。
R:运行或可运行状态。
S:可中断的睡眠状态。
T:停止或被跟踪状态。
l:代表多线程
Z:僵尸状态(已经终止,但父进程尚未读取其退出状态)。
I:空闲(Idle)或可中断的睡眠状态(Interruptible Sleep)的变种。    
I 后跟 < 或 > 可能表示特定的内核线程状态,不是严格意义上的“睡眠”状态。
I<:表示一个低优先级的内核线程,它正在等待某个事件,但可以被信号中断。
I>:这个组合不太常见,理论上可能表示一个高优先级的内核线程

12.IPC:管道(PIPE):一对一的单向传输 无名管道:是UNIX系统IPC最古老的形式,它是半双工的(即数据只能在一个方向上流动),具有固定的 读端和写端,只能用于具有亲缘关系的进程之间的通信(如父子进程或兄弟进程之间)。 命名管道(FIFO):可以在无关的进程之间交换数据,与无名管道不同,FIFO有路径名与之相关联,以 一种特殊设备文件形式存在于文件系统中。 信号量(Semaphore): 是一个计数器,用于实现进程间的互斥与同步,而不是用于存储进程间通信数据。信号量基于操作系统的 PV操作,程序对信号量的操作都是原子操作。 共享内存(Shared Memory): 指两个或多个进程共享一个给定的存储区,这是最快的一种IPC方式,因为进程是直接对内存进行存取。 由于多个进程可以同时操作共享内存,因此需要进行同步,通常结合信号量使用。 套接字: socket 同一台主机上,可以通过 套接字文件【ip:port】 来实现双工通信。 消息队列: 是消息的链接表,存放在内核中。一个消息队列由一个标识符(即队列ID)来标识,消息队列是面向记录 的,其中的消息具有特定的格式以及特定的优先级。消息队列独立于发送与接收进程,进程终止时,消息队列 及其内容并不会被删除。 套接字(Socket)与Streams: 支持不同主机上的两个进程进行IPC。

RPC:

RPC 是一种跨网络的进程间通信机制,允许程序调用远程服务器上的函数,就像调用本地函数一样。

核心组件
  1. 客户端(Client):调用远程函数的程序。
  2. 服务器(Server):提供函数实现的程序。
  3. Stub:客户端和服务器的代理代码,负责序列化 / 反序列化参数和结果。
  4. 传输层:底层通信协议(如 TCP、HTTP)。

13.守护进程: daemon,在系统引导过程中启动的进程,和终端无关进程-

前台进程:跟终端相关,通过终端启动的进程

将后台作业调回前台(使用 fg) 将已运行的前台作业转为后台(使用 Ctrl+Z + bg)

14.

touch /tmp/to_be_deleted.txt
crontab -e
0 1 * * * rm -f /path/to/your/file

15.

chmod +x /scripts/monthly_backup.sh
crontab -e
0 2 1 * * /scripts/monthly_backup.sh

16.

 # 定制普通变量
head="$1"
 feet="$2"
 # 计算逻辑
# 每个头至少两只脚,多出的脚都是兔子的
rabbit_num=$(( ($feet - $head - $head) / 2))
 chick_num=$[ $head - $rabbit_num ]
 # 结果输出
 echo "鸡的数量: ${chick_num}"
 echo "兔的数量:${rabbit_num}"

17

# 定制普通变量
user_file='/tmp/user.txt'
 # 保证文件可用
[ -f ${user_file} ] && > ${user_file}
 # 定制批量创建用户的业务逻辑
for i in {1..100}
 do
 # 创建用户
useradd user-$i
 # 生成密码
password=$(head /dev/urandom | tr -dc '[:alnum:]' | head -c 8)
 # 为用户添加密码
echo ${password} | passwd --stdin user-$i > /dev/null 2>&1
 # 信息输出
echo "用户: user-$i, 密码: ${password}" >> ${user_file}
 echo -e "\e[31m用户 user-$i 创建成功\e[0m"
 done

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值