草庐IT

【运维】运维常用命令

笑起来贼好看 2023-08-09 原文

shell大全

读取文件每一行内容

while read line
do
  echo $line
done < a.txt

文件是否存在

if [ ! -d "/data/" ];then
  mkdir /data
else
  echo "文件夹已经存在"
fi

说明

-e 判断对象是否存在
-d 判断对象是否存在,并且为目录
-f 判断对象是否存在,并且为常规文件
-L 判断对象是否存在,并且为符号链接
-h 判断对象是否存在,并且为软链接
-s 判断对象是否存在,并且长度不为0
-r 判断对象是否存在,并且可读
-w 判断对象是否存在,并且可写
-x 判断对象是否存在,并且可执行
-O 判断对象是否存在,并且属于当前用户
-G 判断对象是否存在,并且属于当前用户组
-nt 判断file1是否比file2新  [ "/data/file1" -nt "/data/file2" ]
-ot 判断file1是否比file2旧  [ "/data/file1" -ot "/data/file2" ]

数组定义和循环取值

arr=(a b c)

echo ${arr[0]}	#获取第一个元素的值
echo ${arr[-1]}	#获取最后一个元素的值
# 获取所有元素的值
echo ${arr[*]}
echo ${arr[@]}
# 统计数组的长度
echo ${#arr[*]}
# 打印数组的下标值
echo ${!arr[@]}

# 循环 方式一 直接取值
for i in ${arr[@]}
do
  echo $i
done
# 循环 方式二 下标取值
for i in ${!arr[@]}
do
  echo ${arr[i]}
done
# 循环 方式三
for((i=0;i<${#arr[@]};i++))
do
  echo ${arra[i]}
done

变量循环

for i in $(seq 1 $1)
do
  echo $i
done

for (( i = 1; i < $line; i++ ))
do
  echo $i
done

流程控制语句:case

  case $1 in
    "start")
      op start $2
      ;;
    "stop")
      op stop $2
      ;;
    "status")
      op status $2
      ;;
    *)
      echo "Usage: service $2 start|stop|status"
      ;;
  esac

判断数值相等/大于/小于

# 整数比较
-eq     等于,如:if ["$a" -eq "$b" ]
-ne     不等于,如:if ["$a" -ne "$b" ]
-gt     大于,如:if ["$a" -gt "$b" ]
-ge    大于等于,如:if ["$a" -ge "$b" ]
-lt      小于,如:if ["$a" -lt "$b" ]
-le      小于等于,如:if ["$a" -le "$b" ]
<  小于(需要双括号),如:(("$a" < "$b"))
<=  小于等于(需要双括号),如:(("$a" <= "$b"))
>  大于(需要双括号),如:(("$a" > "$b"))
>=  大于等于(需要双括号),如:(("$a" >= "$b"))

判断字符串相等

if [ "$test"x = "test"x ]; then

# = 等于,如:if [ "$a" = "$b" ]

# == 等于,如:if [ "$a" == "$b" ],与 = 等价

这里的关键有几点:

  • 使用单个等号
  • 注意到等号两边各有一个空格:这是unix shell的要求
  • 注意到"$test"x最后的x,这是特意安排的,因为当$test为空的时候,上面的表达式就变成了x = testx,显然是不相等的。而如果没有这个x,表达式就会报错:[: =: unary operator expected

awk求和、平均、最大、最小

# 科学计数法打印
bin/hdfs dfs -du  /warehouse/hive/ | awk '{sum+=$1} END {print "Sum = ", sum/1024/1024}'

# 非科学计数法打印
bin/hdfs dfs -du  /warehouse/hive/ | awk '{sum+=$1} END {printf("%d\n", sum/1024/1024)}'

1、求和
awk '{sum+=$1} END {print "Sum = ", sum}' number.txt
 
2、求平均
awk '{sum+=$1} END {print "Average = ", sum/NR}' number.txt
 
3、求最大值
awk 'BEGIN {max = 0} {if ($+0 > max+0) max=$1} END {print "Max=",max}' number.txt
 
4、求最小值(min的初始值设置一个超大数即可)
awk 'BEGIN {min = 1999999} {if ($1<min) min=$1 fi} END {print "Min=", min}' number.txt
 
5. 输出排序最大值所在行内容
 
如下,以第一列排序
 
cat num.txt
858   mail
1858  nginx
8502  tomcat
1145  zabbix
3457  mongodb
1356  redis
974   Mysql
 
记录最大值的时候,同时记录一下当前行,后面输出这个变量即可      此处的的content可随意定义
 
awk 'BEGIN {max = 0} {if ($1+0 > max+0) {max=$1 ;content=$0} } END {print content}' num.txt

sed用法

# 取 1到3 行的内容 重定向到 b.txt
sed -n "1,3p" a.txt > b.txt

# 替换
sed -i "s/abc/def/g" ./a.txt

如果我们使用sed命令时,如果出现特殊字符,可能会报错,示例如下:

# /不可以作为界定符,因为会与里面的内容冲突
sed -i 's/flink//etc/g' 

# 井号#不可以作为界定符,因为会与里面的内容冲突
sed -i 's#jdbc://127.0.0.1&password=1#aa$username=root#g' 

# @不可以作为界定符,因为会与里面的内容冲突
sed -i 's@jdbc://127.0.0.1&password=1@aa$username=root@g'

那该如何解决呢?

我们得看来里面的内容来选择特定的界定符,例如:

里面含有"/",可以选择“#”或“ @”作为界定符;
里面含有“#”,可以选择“@”或“/”作为界定符;
里面含有“@”,可以选择“/”或“#”作为界定符。
那么如果都有以上的内容呢?只能在被替换文本中使用转义符号 “\”了,如:

sed -i 's/oracle/\/etc\/oracle/g'

expr

expr支持普通的算术操作,算式表达式优先级低于字符串表达式,高于逻辑关系表达式。

  • + - 加减运算。两端参数会转换为整数,如果转换失败则报错;
  • * / % 乘,除,取模运算。两端参数会转换整数,如果转换失败则报错;
  • () 可以用来表示优先级,但需要用反斜杠转义。
a=3
b=4
 
echo `expr $a + $b`        #输出7
echo `expr $a - $b`        #输出-1
echo `expr $a \* $b`       #输出12,*需要转义
echo `expr $a / $b`        #输出0,整除
echo `expr $a % $b`        #输出3
echo `expr \($a + 1\)\*\($b+1\)` #输出20,值为(a+1)*(b+1)

bc计算器

echo '6.5/2.7' | bc
2

echo 'scale=5;6.5/2.7' | bc    #其中scale是控制小数点位数
2.40740

echo "5+3" | bc
8

echo "(2+6)*3" | bc
24

#关系运算符
||, &&, !, =, ==
#基本数学运算
+, -, *, /, %, ^,
#自增,自减
++, --
#逻辑运算符
<, >, <=, >=, !=

length()    #用于求表达式的结果长度
length(300)
3

scale()  #用于获取表达式小数点后位数
scale(3.14)
2

sqrt()  #求平方根
scale=6;sqrt(21)
4.582575

#如果使用了bc -l,可以将预置的数学运算导入
s(x)    	#sin函数,x为弧度
s(3.14)
.00159265291648695254

c(x)		#cos函数
c(0)
1.00000000000000000000

a(x)		#arctang函数
a(sqrt(2)/2)
0.61547970867038734106

l(x)		#自然对数
l(10)
2.30258509299404568401

e(x)		#自然数为底的指数函数
e(2)
7.38905609893065022723


j(n,x)	#Basel函数,n阶
j(1,3)
0.33905895852593645892

有关【运维】运维常用命令的更多相关文章

  1. 华为常用命令 - 2

    system-view进入系统视图quit退到系统视图sysname交换机命名vlan20创建vlan(进入vlan20)displayvlan显示vlanundovlan20删除vlan20displayvlan20显示vlan里的端口20Interfacee1/0/24进入端口24portlink-typeaccessvlan20把当前端口放入vlan20undoporte1/0/10删除当前VLAN端口10displaycurrent-configuration显示当前配置02配置交换机支持TELNETinterfacevlan1进入VLAN1ipaddress192.168.3.100

  2. 从零开始学习Linux运维,成为IT领域翘楚(二) - 2

    文章目录🔥Linux系统目录结构🔥Linux用户和用户组🔥Linux用户管理🔥Linux系统目录结构文件系统组织结构⭐ /lib系统开机所需要最基本的动态链接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。⭐ /lost+found一般情况下是空的,当系统非法关机后,这里就存放了一些文件。⭐ /etc所有系统管理所需要的配置文件和子目录my.conf⭐ /usr用户的很多应用程序和文件都放在这个目录下。⭐ /bin是Binary的缩写,这个目录存放着经常使用的命令⭐ /sbin(usr/sbin、/usr/local/sbin)sbin就是peruse

  3. 通过可视化运维配置,实现故障秒级自愈 - 2

    急促的告警铃声响彻寂静的夜晚。对运维人来说,晚间值守耗费更大的精力,往往一个简单的磁盘使用率告警通知,就不得不爬起来进行处理,毕竟告警无小事,对于小问题,运维人也不能心存侥幸心理。虽然有着值班人员和团队的支撑,但频繁的告警还是让运维人员精疲力竭,如何让系统的稳定性提高,减轻一线人员的工作量,减轻一线人员的压力?通过智能运维,实现故障自愈将成为不可避免的选择。故障自愈是提升企业网络系统可用性和降低故障处理的人力投入,实现故障自愈从"人工处理"到"无人值守"的变革。通过实时发现告警,进行预诊断分析,判断告警类型和级别,如果是一般告警,平台进行自动恢复,如果是严重复杂告警则通过告警通知、运维工单等形

  4. 零基础学Linux运维,看这一篇就够了(含30G自学教程笔记) - 2

    作为一个10年老运维,在开始这篇文章之前,先送给大家一句话:干啥不好,非要做运维,听人劝,吃饱饭,趁年轻,换行吧!好了,不开玩笑了,回到正文中来。当谈到运维职业发展情况时,很多人都会说运维做不长久,然后劝人做两年就赶快转研发吧!总之是全面唱衰运维!但作为一个老运维,我想说的是:运维转开发确实是一个不错的选择,但运维做不长久则完全是对运维的偏见了!很多人有运维做不长久的偏见的原因其实和运维职业的特性有关,运维有三个老生常谈的特点:打杂,背锅,睡的少!说运维打杂,是说运维工作比较宽泛,运维职业门槛不高,什么都得会一点。公司里但凡跟计算机有关的事,可能都会找到运维,这就导致了运维工作比较杂!至于背黑

  5. 运维职场精英必须熟悉的武器库,yyds - 2

    前言大家好,我是互联网老辛,专注云原生领域布道的终身学习者,本文是新班第一课需要准备的工具库,也是大家日后工作必备的武器库,能够提高学习和沟通效率,更好的完成运维工作。🏠个人主页:[互联网老辛](https://zmedu.blog.csdn.net)🧑个人简介:互联网老辛,云原生领域讲师,创业公司负责人😉😉💕座右铭:向内归因,一切问题先从自身找原因🍺🍺🍺💕欢迎大家:这里是CSDN,我总结知识的地方,喜欢的话请三连,有问题请私信😘文章目录前言一.常用工具1.1linux系统篇1.2效率工具包1.3其他辅助工具1.4个人网站类工具二.书籍推荐总结一.常用工具1.1linux系统篇以下分享,部分在

  6. git常用命令 - 2

    gitclonehttp:www.git.com.cn........ 克隆git项目gitbranch 查看分支gitbranch-r查看远程分支gitpushorigin--delete分支名 删除远程分支tmpgitcheckout切换分支gitcheckout-b切换并创建分支gitcheckout-b分支名origin/分支名(如果远程分支已存在最好用此命令,在创建分支时会把远程分支最新代码一并拉下来,不会把原分支代码带过来)gitbranch-D删除分支gitpushorigin--delete分支名gitpush--set-upstreamorigin分支名 推送本地分支到远端g

  7. Git的常用命令介绍 - 2

    Git整体工作流程:Workspace:工作区Index/Stage:暂存区Repository:仓库区(或本地仓库)Remote:远程仓库一、版本仓库: 1.通过命令gitinit把这个目录变成git可以管理的仓库(这就欧科啦)(会生成.git文件)默认.git文件不显示2.gitadd xxxxx (将工作区的指定文件添加到暂存区中)              没有任何提示,说明已经添加成功了3.gitcommit-m ‘一些提交注释’(把文件提交到本地仓库)4.gitstatus (查看是否有文件没有被提交)     展示说明没有任何文件未提交,但是我现在继续来改下readme.txt内

  8. FFmpeg常用命令汇总 - 2

    FFmpeg的命令繁多,为了方便查询,在此作一个汇总可参考:https://ffmpeg.org/ffmpeg.html#Options目录一、命令基本格式及参数二、基本信息查询命令三、分解、复用四、处理原始数据五、滤镜六、拼接与裁剪七、直播八、ffplay九、其它一、命令基本格式及参数ffmpeg[global_options]{[input_file_options]-iinput_url}... {[output_file_options]output_url}...一些参数:参数说明-ffmt(输入/输出)强制输入或输出文件格式-y(全局参数)覆盖输出文件而不询问-n(全局参

  9. 【2023】DevOps、SRE、运维开发面试宝典之Kafka相关面试题 - 2

    文章目录1、消息队列的流派2、kafka的优势3、Kafka与Zookeeper的关系4、Kafka消息队列各组件概念5、Kafka消息队列应用场景6、Kafka消息收发的过程7、Kafka消息数据存储概念8、kafka消息的偏移量概念原理9、Kafka消息数据的顺序消费概念原理10、Kafka单播消费消息的原理11、Kafka多播消费概念12、Kafka集群模式下Broker|主题|分区|副本的概念13、Kafka集群中各组件的概念14、kafka如何防止消息被重复消费15、如何保证消息的顺序消费16、如何解决消息积压的问题1、消息队列的流派1)有Broker的消息队列中间件

  10. 智慧轨道交通运维监控解决方案 - 2

        交通作为国民经济和社会发展的基础性、先行性产业,在整个社会经济、民生发展中占有举足轻重的地位,随着包括5G基站建设、城际高速铁路和城市轨道交通、大数据中心、工业互联网在内的新基建按下加速键,轨道交通云联网加速实施。    随着铁路运输建设全面提速,轨道网络构建方式正逐步从单线独立网络向综合化转变,各系统设备型号日益多元,各线路间相互关联日益密切,给铁路运输行业网络运维管理带来更大的风险与挑战。第1章铁路运输行业背景1.1.运维设备多更新快是难点    铁路运输行业网络建设需规模庞大的前后端设备,涉及多种供应商、工程商,上百种产品、品牌、型号,包括多种网络结构和组网形式,多种协议及通讯机

随机推荐