• [技术干货] 使用shell脚本编写点名器
    脚本:[root@lzw oldboy]# more classbook.sh #!/bin/bashwhile :  do     line=`cat classbook.txt | wc -l`    num=$[ RANDOM%line+1 ]    sed -n "${num}p" classbook.txt    sleep 2    clear  done[root@lzw oldboy]# more classbook.txt lzw1lzw2lzw3lzw4lzw5lzw6lzw7lzw8lzw9lzw10测试:[root@lzw oldboy]# cat  name.txt | sort -n | uniq -c | sort -nr     66 lzw8     66 lzw1     65 lzw6     65 lzw4     60 lzw3     59 lzw5     59 lzw10注释:本脚本用于上课环境教师点名。脚本主要通过while循环语句对classbook.txt人名统计总行数,并通过RANDOM获取随机数。sed命令打印随机产生的行数并输入对应人名。通过name.txt出现的次数对比每个人名出现概率基本相同。
  • [问题求助] 【MRS】hbase shell 查表数据失败
    【功能模块】MRS Hbase shell 进行count查询时有的表能查询成功,有的查询失败,如图。网络应该不存在问题,Hbase其他命令都可以执行。截图如下:请专家帮看下怎么解决呢?
  • [交流分享] 希尔排序(Shell Sort)
    4.1 算法描述先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行依次直接插入排序。选择一个增量序列t1,t2,…,tk,其中ti>tj,tk=1;按增量序列个数k,对序列进行k 趟排序;每趟排序,根据对应的增量ti,将待排序列分割成若干长度为m 的子序列,分别对各子表进行直接插入排序。仅增量因子为1 时,整个序列作为一个表来处理,表长度即为整个序列的长度。如何对原始数组进行预处理呢?聪明的科学家想到了一种分组排序的方法,以此对数组进行一定的“粗略调整”。所谓分组,就是让元素两两一组,同组两个元素之间的跨度,都是数组总长度的一半,也就是跨度为4。接下来,我们让每组元素进行独立排序,排序方式用直接插入排序即可。由于每一组的元素数量很少,只有两个,所以插入排序的工作量很少。 这样一来,仅仅经过几次简单的交换,数组整体的有序程度得到了显著提高,使得后续再进行直接插入排序的工作量大大减少。这种做法,可以理解为对原始数组的“粗略调整”。但是这样还不算完,我们可以进一步缩小分组跨度,重复上述工作。把跨度缩小为原先的一半,也就是跨度为2,如图所示,元素5,1,9,6一组,元素2,3,8,7一组,一共两组。接下来,我们继续让每组元素进行独立排序,排序方式用直接插入排序即可。此时,数组的有序程度进一步提高,为后续将要进行的排序铺平了道路。最后,我们把分组跨度进一步减小,让跨度为1,也就等同于做直接插入排序。经过之前的一系列粗略调整,直接插入排序的工作量减少了很多上面示例中所使用的分组跨度(4,2,1),被称为希尔排序的增量,增量的选择可以有很多种,我们在示例中所用的逐步折半的增量方法,是Donald Shell在发明希尔排序时提出的一种朴素方法,被称为希尔增量。4.3 代码实现def Shell_Sort(arr):    length = len(arr)    if (length < 1):        return     gap = length//2    while gap > 0:        for i in range(gap, length):            j = i            while j >= gap and arr[j-gap] > arr[j]:                arr[j-gap], arr[j] = arr[j], arr[j-gap]                j -= gap        gap = gap//2
  • [技术干货] linux shell编写一个简单的菜单
    shell中,使用select语句生成一个简单的菜单选项。[root@k8s-master-c71e shell]# vi sec.sh#!/bin/shPS3="What you like most of the open source system?"select i in CentOS RedHat Ubuntudoecho "Your Select System: "$idone[root@k8s-master-c71e shell]# chomd o+x sec.sh[root@k8s-master-c71e shell]# ./sec.sh1) CentOS2) RedHat3) UbuntuWhat you like most of the open source system?1Your Select System: CentOSWhat you like most of the open source system?2Your Select System: RedHatWhat you like most of the open source system?3Your Select System: UbuntuWhat you like most of the open source system?^C[root@k8s-master-c71e shell]# 
  • [基础组件] 【MRS】【Spark-shell功能】使用spark-shell去读mysql中的数据失败
    【功能模块】MRS 8.0.2混合云版本   Spark 组件  spark-shell功能模块【操作步骤&问题现象】1、进入MRS客户端,source环境变量后完成用户kinit认证2、执行命令启动spark-shell:spark-shell --jars /opt/bdos/bdos-runner-server/lib/mysql-connector-java-8.0.21.jar3、执行命令读取mysql数据:val a = spark.read.format("jdbc").option("url", "jdbc:mysql://172.16.149.167:3306/test").option("query", "select id from test").option("user", "root").option("password", "AHiXitVt6f3gmW3JQII=").option("driver", "com.mysql.jdbc.Driver").load()【截图信息】
  • [基础组件] 运行spark-shell时报错UnresolvedAddressException
    【功能模块】MRS3.0.2 spark-shell【操作步骤&问题现象】1、source bigdata_env     kinit admin2、进到spark下输入bin/spark-shell完整日志内容见附件【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [技术干货] Shell 脚本中 break 命令的作用?
    break 命令一个简单的用途是退出执行中的循环。我们可以在 while 和 until 循环中使用 break 命令跳出循环。 Shell 脚本中 continue 命令的作用? continue 命令不同于 break 命令,它只跳出当前循环的迭代,而不是整个循环。 continue 命令很多时候是很有用的,例如错误发生,但我们依然希望继续执行大循环的时候。
  • [技术干货] shell检查硬盘状态
    脚本:[root@lzw oldboy]# more check_fdisk.sh #!/bin/bash#check fdisk#2019-10-23DATE=$( date +%F" "%H:%M)IP=$(ifconfig eth0 | grep "inet" | awk -F[" "]+ '{ print $3 }' )MAIL="xxxxx@qq.com"TOTAL=$(fdisk -l |awk -F '[: ]+' 'BEGIN{OFS="="}/^Disk \/dev/{printf "%s=%sG,",$2,$3 }' )PART_USE=$(df -h | awk 'BEGIN{OFS="="}/^\/dev/{ print $1,int($5),$6}' )for i in $PART_USE;do    PART=$(echo $i |cut -d"=" -f 1 )    USE=$(echo $i |cut -d"=" -f 2 )    MOUNT=$(echo $i |cut -d"=" -f 3)  if [ $USE -gt 20 ]       then         echo "            Date: $DATE            Host: $IP            Total:$TOTAL            Problem: $PART=$USE($MOUNT) " | mail -s "Disk monitor" $MAIL  fidone测试:Message-Id: <20191023073143.36EB56178116@lzw.localdomain>From: root@lzw.localdomain (root)            Date: 2019-10-23 15:31            Host: 192.168.189.144fe80::20c:29ff:fe57:d2fe            Total:/dev/sda=21.5G,/dev/mapper/rhel-root=18.8G,/dev/mapper/rhel-swap=2147G,            Problem: /dev/mapper/rhel-root=28(/) --36EB56178116.1571815906/lzw.localdomain--注释:本脚本用于检测系统磁盘使用的情况。如果超出预定的阈值则通过邮箱发送给指定的用户。脚本和检查cpu、memory方法类似,这里不做多余的阐述。通过fdisk -l查看系统总的磁盘大小。然后使用df -h 查看系统使用情况。通过awk命令过滤出所要的关键信息。设定for循环依次对PART_USE变量获取的信息截取关键参数。if语句,判断USE截取的数字对比 设定的阈值比较大小是否要报警。本例为了实现报警,设置磁盘使用20%,实际业务中可以根据客户需求更改,一般设置80%。
  • [技术干货] 测试工程师必学——Shell脚本
    掌握shell脚本,包括shell基础与应用、shell逻辑控制、shell逻辑函数等。
  • [技术干货] shell过滤防火墙日志
    脚本:[root@lzw firewall]# more firewall_SourceIp.sh #/bin/bash#source ip #2019-10-8cd /root/firewallgrep $1 192.168.0.1.log | grep 'Oct  8' >>nat.logmore nat.log | grep 'NAT' | awk -F[" :"]+ '{ print $11 }'>>sourceIP.logmore sourceIP.log | sort | uniq -c | sort -nr >>SourceNum.txt防火墙日志格式:[root@lzw firewall]# more 192.168.0.1.log Oct  8 04:23:26 59.203.40.2 DCFW-1800(root) 44243606 Traffic@SECURITY: SESSION: 59.203.33.34:34842->59.203.11.19:61492(ICMP), interface ethernet0/2, vr trust-vr, policy 1, user -@-, host -, session startOct  8 04:23:26 59.203.40.2 DCFW-1800(root) 4424360a Traffic@SECURITY: SESSION: 59.203.33.34:34842->59.203.11.19:61492(ICMP), application , interface , vr trust-vr, policy 1, user -@-, host -, send packets 2,send bytes 158,receive packets 2,receive bytes 196,start time 2019-10-08 04:23:26,close time 2019-10-08 04:23:26,session end查看源地址信息:[root@lzw firewall]# more SourceNum.txt    1761 10.15.157.122    223 10.23.101.131    118 10.15.105.118    101 10.23.89.125     93 172.29.0.73     87 10.13.42.2     70 10.15.105.76     58 10.12.66.171     57 172.24.64.201     53 172.29.0.31注释:    本脚本用于防火墙日志服务器查询哪些源地址通过具体ip映射出去。脚本先根据映射ip过滤出具体时间的日志,然后根据日志格式,把源地址过滤出来。再次,通过sort和uniq命令对源地址的重复项整理排序。根据结果,可判断出源地址通过输入的映射公网地址次数过多,检查源地址是否攻击存在。
  • [技术干货] shell检查内存
    脚本:[root@lzw oldboy]# more check_memory.sh #!/bin/bash#check memory#2019-10-7DATE=$( date +%F" "%H:%M)IP=$(ifconfig eth0 | grep "inet" | awk -F[" "]+ '{ print $3 }' )MAIL="xxxxxx@qq.com"TOTAL=$(free -m |awk '/Mem/{print $2 }' )USE=$(free -m | awk '/Mem/{ print $3-$6-$7}' )FREE=$(($TOTAL-$USE))if [ $FREE -lt 1600 ]    then       echo "            Date: $DATE            Host: $IP            Problem: Total=$TOTAL,Use=$USE,Free=$FREE " | mail -s "Memory monitor" $MAILfi结果:  Date: 2019-10-07 20:43            Host: 192.168.189.144fe80::20c:29ff:fe57:d2fe            Problem: Total=1826,Use=371,Free=1455 注释:本脚本和检查cpu的案例基本流程顺序相似,定义变量日期、地址、邮箱、总内存、使用内存和剩余内存。考察的是free -m 命令的理解。[root@lzw oldboy]# free -m             total       used       free     shared    buffers     cachedMem:          1826        584       1242          8          1        204-/+ buffers/cache:        379       1447Swap:         2047          0       2047可根据实际情况定义内存的报警阈值,一般定义为总内存的80%左右。超出设定阈值即可发送邮箱。摘录:Linux公社“buffers” 表示块设备(block device)所占用的缓存页,包括:直接读写块设备、以及文件系统元数据(metadata)比如SuperBlock所使用的缓存页;“cached” 表示普通文件数据所占用的缓存页。链接:https://www.linuxidc.com/Linux/2016-01/127869.html
  • [技术干货] shell检查CPU信息
    脚本:[root@lzw ~]# more check_cpu.sh #!/bin/bash#check cpu#2019-9-30DATE=$( date +%F" "%H:%M)IP=$(ifconfig eth0 | grep "inet" | awk -F[" "]+ '{ print $3 }' )MAIL="1157415404@qq.com"if ! which vmstat &>/dev/null    then       echo " vmstat command no found ,please install procps package."    exit 1fi  US=$(vmstat |awk 'NR==3{print $13}')  SY=$(vmstat |awk 'NR==3{print $14}')  IDLE=$(vmstat |awk 'NR==3{print $15}')  WAIT=$(vmstat |awk 'NR==3{print $16}')  USE=$(($US+$SY))if [ $USE -ge 1 ]    then       echo "            Date: $DATE            Host: $IP            Problem: CPU utilization $USE " | mail -s "cpu monitor" $MAILfi 结果:Return-Path: <root@lzw.localdomain>Received: by lzw.localdomain (Postfix, from userid 0)    id 7DFBA6178101; Mon, 30 Sep 2019 17:37:12 +0800 (CST)Date: Mon, 30 Sep 2019 17:37:12 +0800To: xxxxxxx@qq.comSubject: cpu monitorUser-Agent: Heirloom mailx 12.5 7/5/10MIME-Version: 1.0Content-Type: text/plain; charset=us-asciiContent-Transfer-Encoding: 7bitMessage-Id: <20190930093712.7DFBA6178101@lzw.localdomain>From: root@lzw.localdomain (root)            Date: 2019-09-30 17:37            Host: 192.168.189.144fe80::20c:29ff:fe57:d2fe            Problem: CPU utilization 1 --7DFBA6178101.1569836234/lzw.localdomain--注释:本脚本主要用于检测系统CPU使用率,如果超出预定阈值通过设定邮箱告诉管理员。脚本首先定义时间、地址和邮箱。其次,CPU检测使用vmstat命令来查询。通过which命令判断是否安装,如果没有安装提示安装。然后通过vmstat命令与awk命令分别过滤出US、SY、IDLE、WAIT的值。判断USE值是否大于设定阈值,如果大于,则发送对应邮箱。邮箱内容包括发生的时间、主机地址和问题。   本系统是redhat 7,针对大多数业务系统是6版本,变量IP可更换:ifconfig eth1 | awk -F '[ :]+' '/inet addr/{ printf $4 }'。摘录(Linux公社):CPU       These are percentages of total CPU time.       us: Time spent running non-kernel code. (user time, including nice time)   用户时间                 处于用户模式的时间百分比       sy: Time spent running kernel code. (system time)                                           系统时间                 处于内核模式的时间百分比       id: Time spent idle. Prior to Linux 2.5.41, this includes IO-wait time.              CPU空闲时间        空闲时间百分比       wa: Time spent waiting for IO. Prior to Linux 2.5.41, included in idle.            CPU 空闲时间,在此期间系统有未完成的磁盘/NFS I/O 请求       st: Time stolen from a virtual machine. Prior to Linux 2.6.11, unknown.         来自于虚拟机偷取的CPU所占的百分比   (这个不会翻译...)  cpu us: 持续大于50%,服务高峰期可以接受, 如果长期大于50 ,可以考虑优化    cpu sy: 现实内核进程所占的百分比,这里us + sy的参考值为80%,如果us+sy 大于 80%说明可能存在CPU不足。  cpu wa: 列显示了IO等待所占用的CPU时间的百分比。这里wa的参考值为30%,如果wa超过30%,说明IO等待严重,这可能是磁盘大量随机访问造成的, 也可能磁盘或者磁盘访问控制器的带宽瓶颈造成的(主要是块操作)。    cpu id:  CPU 空闲时所占百分比  平常持续小于50,服务高峰期可以接受。
  • [技术干货] shell定时压缩文件
    脚本:[root@newsyslog sbin]# more ftpput #!/bin/sh FILE=natlog.old.$(date -d yesterday +%Y%m%d) cd /var/log/work/10.12.0.100/  mv 10.12.0.100_$(date -d yesterday +%Y-%m-%d).log  $FILE  gzip $FILEfind  /var/log/work/10.12.0.100 -mtime +7  -name "*" -exec rm -f {} \;定时任务:[root@newsyslog 10.12.0.100]# crontab -l0 6 * * * /usr/local/sbin/ftpput > /dev/null 2>&1查看结果:[root@newsyslog sbin]# cd /var/log/work/10.12.0.100/[root@newsyslog 10.12.0.100]# ls10.12.0.100_2019-09-17.log    natlog.old.20190916.gz注释:本脚本主要对业务当中定期压缩日志归档整理。本次案例作为syslog日志服务器,收集10.12.0.100设备的日志并放入/var/log/work/10.12.0.100目录下压缩昨天的日志。脚本先通过定义变量FILE,进入要压缩文件的目录。更改文件的命名格式后,然后,再进行压缩。压缩方法有多种,也可以用tar来执行。随后,设置压缩文件的合理保留时间,超过设置时间定时清理。进而保证服务器的硬盘空间足够使用。日志服务器的收集,往往是以时间戳来命名,在写脚本的时候根据收集日志文件格式来编写以防造成不必要的错误。
  • [技术干货] shell检查443端口
    脚本如下:[root@lzw oldboy]# more check_443.sh #!/bin/bash#check_443_port#2019-8-27PORT=443count=0for i in $(cat ip_list.dat)   do     ((count++))   echo "count=$count"  ( sleep 1;) | telnet $i $PORT >>telnet_result.txt   donecat telnet_result.txt | grep -B 1 \] | grep [0-9] | awk '{print $3}' | cut -d '.' -f 1,2,3,4 >> telnet_alive.txtcat ip_list.dat telnet_alive.txt | sort | uniq -u >>telnet_die.txt检查IP地址列表:[root@lzw oldboy]# more ip_list.dat 220.178.124.93220.178.124.94220.178.124.132220.178.124.133运行脚本:[root@lzw oldboy]# sh check_443.sh count=1Connection closed by foreign host.count=2telnet: connect to address 220.178.124.94: Connection refusedcount=3Connection closed by foreign host.count=4telnet: connect to address 220.178.124.133: Connection refused查看脚本运行结果:[root@lzw oldboy]# more telnet_result.txt Trying 220.178.124.93...Connected to 220.178.124.93.Escape character is '^]'.Trying 220.178.124.94...Trying 220.178.124.132...Connected to 220.178.124.132.Escape character is '^]'.Trying 220.178.124.133...查看开通443端口的地址:[root@lzw oldboy]# more telnet_alive.txt 220.178.124.93220.178.124.132查看未开通443端口的地址:[root@lzw oldboy]# more telnet_die.txt 220.178.124.133220.178.124.94注释:本案例首先要检查是否安装Telnet包,Linux系统默认没有安装。本脚本主要定义本次要探测IP端口,通过for循环依次读取ip_list.dat文件中每行的IP地址,当读取第一行的IP地址220.178.124.93时,Telnet220.178.124.93地址是否开通443端口,检查结果写入telnet_result.txt文件。依次类推,读取完ip_list.dat文件中IP地址跳出循环,生成最终的telnet_result.txt文件。    接下来,只是对telnet_result.txt文本的编辑。可以通过分开执行命令理解脚本的含义:    1)过滤出符号 ] 之前的一行:[root@lzw oldboy]# cat telnet_result.txt | grep -B 1 \]Connected to 220.178.124.93.Escape character is '^]'.--Connected to 220.178.124.132.Escape character is '^]'.2)过滤出包含数字的0-9行:[root@lzw oldboy]# cat telnet_result.txt | grep -B 1 \] | grep [0-9] Connected to 220.178.124.93.Connected to 220.178.124.132.3)输出第三个域的字符串,每个域以空格隔开。[root@lzw oldboy]# cat telnet_result.txt | grep -B 1 \] | grep [0-9] | awk '{print $3}'220.178.124.93.220.178.124.132.4)剪切符号.之前的数字[root@lzw oldboy]# cat telnet_result.txt | grep -B 1 \] | grep [0-9] | awk '{print $3}' | cut -d '.' -f 1,2,3,4 220.178.124.93220.178.124.1325)对比ip_list.dat telnet_alive.txt 文件内容,列出不同的内容放到telnet_die.txt文件。
  • [其他] 训练作业调用shell脚本执行.sh文件
    ModelArts支持调用shell脚本,可以使用python调用“.sh”。具体操作步骤如下:上传“.sh”脚本至OBS桶,例如“.sh”所在存储位置为 “ /bucket-name/code/test.sh”。在本地创建“.py”文件,例如“test.py”。由于后台会自动将代码目录下载至容器的“/home/work/user-job-dir/”目录下,因此您可以在启动文件“test.py”中通过如下方式调用“.sh”文件:import os os.system('bash /home/work/user-job-dir/code/test.sh')     3.将“test.py”文件上传至OBS中,则该文件存储位置为“/bucket-name/code/test.py”。     4.创建训练作业时,指定的代码目录为“/bucket-name/code/”,启动文件目录为“/bucket-name/code/test.py”。训练作业创建完成之后就可以使用python调用“.sh”文件。
总条数:136 到第
上滑加载中