linux 笔记

1、脚本实现登陆远程主机。(使用expect和shell脚本两种形式)。

方式1:

#!/usr/bin/expect
spawn ssh 10.0.0.7
expect {
	"yes/no" { send "yes\n";exp_continue }
	"password" { send "123456\n" }
}
expect eof

方式2:

#!/bin/bash
expect <<EOF
set timeout 20
spawn ssh root@x.x.x.x
expect {
        "yes/no" { send "yes\n";exp_continue }
        "password" { send "123456\n" }
}
expect "]#"
send "date\n"
expect eof
EOF

2、生成10个随机数保存于数组中,并找出其最大值和最小值

#!/bin/bash
declare -i min max
declare -a nums
for ((i=0;i<10;i++));do
    nums[$i]=$RANDOM
    [ $i -eq 0 ] && min=${nums[0]} &&  max=${nums[0]}&& continue
    [ ${nums[$i]} -gt $max ] && max=${nums[$i]} && continue
    [ ${nums[$i]} -lt $min ] && min=${nums[$i]}
done
echo "All numbers are ${nums[*]}"
echo Max is $max

3、输入若干个数值存入数组中,采用冒泡算法进行升序或降序排序

#!/bin/bash
#输入提示
echo "input several number:"
#-a将输入的值读取到数组array里
read -a array
#将数组的长度单独拿出来可以提高效率,使用let使变量-1,${#array[*]}获取数组的长度
let length=${#array[*]}-1
#冒泡排序的双层循环,$length获取length的值
for((i=0;i<$length;i++)){
  for((j=0;j<$length-i;j++)){
    if [ ${array[j]} -gt ${array[j+1]} ];then
      #交换数据
      temp=${array[j]}
      array[j]=${array[j+1]}
      array[j+1]=$temp
    fi
  }
}
#输出排序后的数组,${array[*]}输出数组中的所有元素`

4、总结查看系统负载的几种命令,总结top命令的指标大概什么含义(不要求全部写出来)

 top命令是我们经常使用的查看进程系统资源使用情况的工具,那么top有什么常用的选项、各个显示项又代表什么呢?

常用参数

# 常用参数
d   指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之
p   通过指定监控进程ID来仅仅监控某个进程的状态
c   显示进程名称或整个运行命令
s  使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险
i   使top不显示任何闲置或者僵死进程
S  指定累计模式 

实例:

# top          //每隔5秒显式所有进程的资源占用情况
# top -d 2         //每隔2秒显式所有进程的资源占用情况
# top -c           //每隔5秒显式进程的资源占用情况,并显示进程的命令行参数(默认只有进程名)
# top -p 12345 -p 6789        //每隔5秒显示pid是12345和pid是6789的两个进程的资源占用情况
# top -d 2 -c -p 123456       //每隔2秒显示pid是12345的进程的资源使用情况,并显式该进程启动的命令行参数

参数详解

  以下图为例对top命令结果做详细记录

img

注:top命令执行以后,大写M,按内存使用情况排序;****大写P,按cpu使用情况排序;大写H,显示线程数;数字1,可查看CPU个数,限于屏幕大小原因可能显示不完成,可通过/proc/cpuinfo中搜索"model name"查看具体个数。

①、第一行任务队列信息,同uptime命令效果相同

02:22:03 当前时间
up 1 day, 18:09 系统运行时间
1 user 当前登陆用户数
load average: 0.00, 0.00, 0.00  系统负载,即任务队列的平均长度。三个数值分别为 1分钟、5分钟、15分钟前到现在的系统平均负载。

  什么是系统平均负载?平均负载可以理解为当前系统的平均活跃进程数,包含了系统处于可运行状态和不可中断状态的平均进程数,就是平均活跃进程数。

  那么知道了什么是系统平均负载,那么它为多少时代表我们的系统负载较高呢?比如,此时1分钟的平均负载为5.6,而我们的操作系统是4个CPU,那么就代表此时系统负载过高,意味着有160%的的超载进程竞争不到CPU;若负载为2.0,则意味着有50%的CPU空闲。

②、第二、三行为进程和CPU的信息。当有多个CPU时,这些内容可能会超过两行。内容如下:(top命令回车后,按数字"1"就会显示cpu的核数,前提是当前屏幕足够大,能够全部显示cpu核数

total 进程总数
running 正在运行的进程数
sleeping 睡眠的进程数
stopped 停止的进程数
zombie 僵尸进程数
Cpu(s):
0.3% us 用户空间占用CPU百分比
0.3% sy 内核空间占用CPU百分比
0.0% ni 用户进程空间内改变过优先级的进程占用CPU百分比
99.5% id 空闲CPU百分比
0.0% wa 等待输入输出的CPU时间百分比
0.0%hi:硬件CPU中断占用百分比
0.0%si:软中断占用百分比
0.0%st:虚拟机占用百分比

  从上我们可以看到进程的状态都处于S状态,那么除了S,还有其他进程状态么?当然除了S状态,还有R、D、Z、I 等几个状态,它们分别是什么意思呢?

  • R 是 Running 或 Runnable 的缩写,表示进程在 CPU 的就绪队列中,正在运行或者正在等待运行。
  • D 是 Disk Sleep 的缩写,也就是不可中断状态睡眠(Uninterruptible Sleep),一般表示进程正在跟硬件交互,并且交互过程不允许被其他进程或中断打断。
  • Z 是 Zombie 的缩写,它表示僵尸进程,也就是进程实际上已经结束了,但是父进程还没有回收它的资源(比如进程的描述符、PID 等)。
  • S 是 Interruptible Sleep 的缩写,也就是可中断状态睡眠,表示进程因为等待某个事件而被系统挂起。当进程等待的事件发生时,它会被唤醒并进入 R 状态。
  • I 是 Idle 的缩写,也就是空闲状态,用在不可中断睡眠的内核线程上。硬件交互导致的不可中断进程用 D 表示,但对某些内核线程来说,它们有可能实际上并没有任何负载,用 Idle 正是为了区分这种情况。D 状态的进程会导致平均负载升高, I 状态的进程却不会。

③、第四、五行为内存信息

Mem:
65724264k total    物理内存总量
37653788k used    使用的物理内存总量
28070476k free    空闲内存总量
371320k buffers    用作内核缓存的内存量
Swap:
32767996k total    交换区总量
0k used            使用的交换区总量
32767996k free    空闲交换区总量
31845892k cached    缓冲的交换区总量,内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,该数值即为这些内容已存在于内存中的交换区的大小,相应的内存再次被换出时可不必再对交换区写入

④、进程信息区统计信息区域的下方显示了各个进程的详细信息。

 列名    含义
 PID     进程id
 PPID    父进程id
 RUSER   Real user name
 UID     进程所有者的用户id
 USER    进程所有者的用户名
 GROUP   进程所有者的组名
 TTY     启动进程的终端名。不是从终端启动的进程则显示为 ?
 PR      优先级
 NI      nice值。负值表示高优先级,正值表示低优先级
 P       最后使用的CPU,仅在多CPU环境下有意义
 %CPU    上次更新到现在的CPU时间占用百分比
 TIME    进程使用的CPU时间总计,单位秒
 TIME+   进程使用的CPU时间总计,单位1/100%MEM    进程使用的物理内存百分比
 VIRT    进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
 SWAP    进程使用的虚拟内存中,被换出的大小,单位kb。
 RES     进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
 CODE    可执行代码占用的物理内存大小,单位kb
 DATA    可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
 SHR     共享内存大小,单位kb
 nFLT    页面错误次数
 nDRT    最后一次写入到现在,被修改过的页面数。
 S       进程状态(D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程)
 COMMAND 命令名/命令行
 WCHAN   若该进程在睡眠,则显示睡眠中的系统函数名
 Flags   任务标志,参考 sched.h

以上则为本次top命令的各参数含义记录。

5、编写脚本,使用for和while分别实现192.168.200.0/24网段内,地址是否能够ping通,若ping通则输出"success!",若ping不通则输出"fail!"

方式1:

#!/bin/bash
GREEN="\033[1;32m"
RED="\033[1;31m"
END="\033[0m"

net=192.168.200
for i in {1..254};do
    {
        if ping -c1 -W1 $net.$i &> /dev/null;then
            echo -e "${GREEN}Success:${END} $net.$i is up"
        else
            echo -e "${RED}Fail:${END} $net.$i is down"
        fi
    }&
done
wait

方式2:

#!/bin/bash
GREEN="\033[1;32m"
RED="\033[1;31m"
END="\033[0m"

net=192.168.200
i=1
while [ $i -lt 255 ]
do
    let i=$i+1
    {
        if ping -c1 -W1 $net.$i &> /dev/null;then
            echo -e "${GREEN}Success:${END} $net.$i is up"
        else
            echo -e "${RED}Fail:${END} $net.$i is down"
        fi
    }&
done
wait

6、每周的工作日1:30,将/etc备份至/backup目录中,保存的文件名称格式 为“etcbak-yyyy-mm-dd-HH.tar.xz”,其中日期是前一天的时间:

crontab -e
30 1 * * * 1-5 tar -Jcvf /backup/`date -d '-1 day' +%F-%H`.tar.xz /etc
posted @   ccccsss  阅读(44)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
点击右上角即可分享
微信分享提示