当前位置: 首页 > news >正文

Bash相关

Bash

shellLinux内核与用户之间的解释器程序

变量

  1. 自定义变量,名称可以用数字、字母、下划线、不能以数字开头,不能使用特殊符号,等号两边不能有空格
    • 格式:变量名称=值
  2. 环境变量,由系统提前定义好,使用时直接调用
    • 当前用户名:USER
    • 当前用户ID:UID
    • 当前家目录:HOME
    • 主机名:HOSTNAME
    • 当前用户的解释器:SHELL
    • 当前位置:PWD
    • 存储命令的路径:PATH
    • 一级提示符:PS1
    • 二级提示符:PS2
  3. 位置变量与预定义变量
    • $1:执行脚本时后面第1个位置参数
    • $2:执行脚本时后面第2个位置参数
    • $3:执行脚本时后面第3个位置参数
    • $*:执行脚本时后面所有位置参数
    • $#:执行脚本时后面位置参数的个数
    • $$:当前程序的进程号
    • $?:判断上一条指令是否执行成功

env查看所有环境变量

set查看所有变量

""双引号,界定范围

''单引号,界定范围,屏蔽特殊符号

``或者$()获取命令的执行结果

指令

read

  • -p可以定义提示信息,u相当于自定义名称
#!/bin/bash
read -p "请输入用户名" u
useradd $u

stty

  • stty -echo:屏蔽回显
  • stty echo:恢复回显

expr

  • 加、减、乘、除、取余,直接输出
a=10
b=20
expr $a + $b  # 30

[ ] 或 []或 [](())

  • 加、减、乘、除、取余,不输出
a=10
b=20
echo $[a+b]  # 30

let

  • 加、减、乘、除、取余,不输出,专门用于变量的创建,或者变量的自增
let a++
let a+=10

bc

  • 加、减、乘、除、取余,可以进行小数计算
echo "1.1+1" | bc
echo "scale=3;10/3" | bc  # 指定小数点后保留3位

条件测试

字符串测试

  • ==:判断等号两边的字符串是否相等
  • !=:判断等号两边的字符串是否不等

[ a == b]

[ a != b]

  • -z:判断变量是否为空
  • ! -z:判断变量是否非空
[ -z $a ]
[ ! -z $a ]

逻辑组合

  • &&:条件成功执行
  • ||:条件失败执行
[ root == $USER ] && exit  # &&左边成功,才会执行exit
[ root == $USER ] || exit  # ||左边失败,才会执行exit

数字判断

  • -eq:等于
  • -ne:不等于
  • -gt:大于
  • -ge:大于等于
  • -lt:小于
  • -le:小于等于

文件判断

  • -e:判断文件是否存在
  • -f:判断文件是否存在,并且是普通文件
  • -d:判断文件是否存在,并且是目录
  • -r:判断当前用户对文件是否有读权限
  • -w:判断当前用户对文件是否有写权限
  • -x:判断当前用户对文件是否有执行权限

字符串处理

  • 字符串截取:${变量:index:step}
  • 字符串拼接:c=aaa$c
  • 字符串替换:${变量/旧/新}(替换一个),${变量//旧/新}(替换全部)
  • 字符串删除:${变量#要删除的内容}(从头部开始,匹配最短,##就是匹配最长),${变量%要删除的内容,}(从尾部开始,匹配最短,%%就是匹配最长)
  • 定义变量初值:${变量:-初值}
# 随机6位数密码
x=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
for i in {1..6}
don={RANDOM&62}a=${x:n:1}c=a$c
done
echo $c# 字符串替换 aaabbbccc -> aasbbbccc
a=aaabbbccc
a=${a/aaa/aas}# 字符串删除,将abcdefg中的abcd删除
a=abcdefg
echo ${a#*d}  # efg# 字符串删除,将abcdefg中的efg删除
echo ${a%e*}  # abcd# 定义变量初值
echo ${n:-123456}  # 123456

三剑客

grep

基本正则列表

正则符号描述
^匹配行首
$匹配行尾
[]集合,匹配集合中的任意单个字符
[^]对集合取反
.匹配任意单个字符
*匹配前一个字符任意次数(*不允许单独使用)
\{n,m\}匹配一个字符n到m次
\{n\}匹配一个字符n次
\{n,\}匹配一个字符n次及以上
\(\)保留,有个分组的意思
grep '^root' /etc/passwd  # 找以root开头的行
grep 'bash$' /etc/passwd  # 找以bash结尾的行
grep '^$' /etc/passwd  # 找到空行
grep -v '^$' /etc/passwd  # 找到非空行grep '[abcd]' /etc/passwd # 显示a、b、c、d任意一个字母
grep '[^abcd]' /etc/passwd  # 找不是a、b、c、d的其他内容
grep '[0-9]' /etc/passwd  # 显示所有数字
grep '[^0-9]' /etc/passwd  # 显示非数字
grep '[a-z]' /etc/passwd  # 显示所有小写字母
grep '[A-Z]' /etc/passwd  # 显示所有大写字母
grep '[0-9a-Z]' /etc/passwd  # 显示所有数字和字母
grep '[^0-9a-Z]' /etc/passwd  # 显示所有字符grep '.' /etc/passwd  # 显示单个字符
grep 'r..t' /etc/passwd  # 找到rt之间有两个任意字符的行
grep 'ro*t' /etc/passwd  # 找到rt,中间有0个或者多个o的的行 rt rot root这样都行
grep '.*' /etc/passwd  # 找任意,包含空行grep 'ro\{1,2\}t' /etc/passwd  # 找到rt,中间的o可以有1~2个
grep 'ro\{2\}t' /etc/passwd  # 找到rt,中间的o必须是2个
grep 'ro\{2,\}' /etc/passwd  # 找到rt,中间的o有2个或者超过两个的

扩展正则列表

正则符号描述
+最少匹配一次,1次到多次
?最多匹配一次,0次到1次
{n,m}匹配n到m次
()组合成整体
|或者
\b单词边界
\w匹配数字、字母、下划线
\s匹配空格
\d匹配数字,grep -P支持

以上命令均可以加-E选项,并且去掉所有的\

grep 'ro\{1,\}t' /etc/passwd
grep -E 'ro+t' /etc/passwd
egrep 'ro+t' /etc/passwdegrep 's?bin' /etc/passwd  # 匹配sbin或者binegrep 'ro{1,5}t' /etc/passwd # 配置rt,中间的o出现1次到5次egrep '(:0)+' /etc/passwd  # 将:0看做一个整体,匹配1次或多次egrep '^bin|^root' /etc/passwd  # 找到以bin或者root开头的行egrep '\bthe\b' test.txt  # test.txt中的the,两边不允许出现数字,字母,下划线

sed

格式:sed 选项 条件 指令 文件

  • 选项
    • -n:屏蔽默认输出
    • -r:支持扩展正则
    • -i:修改源文件
  • 指令
    • p:输出
    • d:删除
    • s:替换
    • a:行下添加
    • i:行下添加
    • c:替换整行
# 输出
sed -n 'p' /etc/passwd  # 输出第一行
sed -n '2p' /etc/passwd  # 输出第二行
sed -n '2,4p' /etc/passwd  # 输出第二行到第四行
sed -n '2p,4p' /etc/passwd  # 输出第二行和第四行
sed -n '3,+1p' /etc/passwd  # 输出第三行和后面一行
sed -n '/^root/p' /etc/passwd  # 输出以root开头的行
sed -nr '/^root|^bin/p' /etc/passwd  # 输出以root或者bin开头的行
sed -n '1!p' /etc/passwd  # 输出除第一行外的其他行
sed -n '$p' /etc/passwd  # 输出最后一行
sed -n '=' /etc/passwd  # 输出行号
sed -n '$=' test.txt  # 输出文件的总行数# 删除
sed 'd' test.txt  # 删除第一行
sed '4d' test.txt  # 删除第四行
sed '4,7d' test.txt  # 删除4~7行
sed '/^bin/d' test.txt  # 删除以bin开头的行
sed '/xml/d' test.txt  # 删除所有包含xml的行
sed '/!xml/d' test.txt  # 删除不包含xml的行
sed '$d' test.txt  # 删除最后一行
sed '/^$/d'test.txt  # 删除所有空行# 替换
sed 's/2222/3333/' test.txt  # 将所有行的第一个2222替换成3333
sed 's/2222/3333/2' test.txt  # 将所有行的第二个2222替换成3333
sed '1s/2222/3333/1' test.txt  # 将第一行的第一个2222替换成3333
sed 's/2222/3333/g' test.txt  # 将所有的2222替换成3333
sed '/^root/s/2222/3333/g' test.txt  # 将以root开头的行里面的所有的2222替换成3333
sed 's@/bin/bash@/sbin/nologin@g' test.txt  # 将所有的/bin/bash改成/sbin/nologin,这里的@理论上可以用所有数字键上的符号# a、i、c
sed 'a haha' test.txt  # 在每行下面添加一行,内容为haha
sed '1a haha' test.txt  # 在第一行下面添加一行,内容为haha
sed '/^root/a haha' test.txt  # 在开头为root的那一行下面添加一行,内容为haha
sed '$a haha' test.txt  # 在最后一行下面添加一行,内容为hahased '/bin/i heihei' test.txt  # 在有bin的行上面添加一行,内容为heiheised '/aaa$/c hoho' test.txt  # 将以aaa结尾的那一行替换成hoho

awk

格式:awk 选项 条件 指令 文件

  • 选项
    • -F:定义分隔符
  • 指令
    • print:输出
  • 条件
    • /字符串/
  • 内置变量
    • $0所有列、$1第一列、$2第二列、$3第三列…
    • NR:行号
    • NF:列号
  • 处理时机
    • BEGIN:执行一次,读取文档之前执行
    • 逐行任务
    • END:执行一次,读取文档之后执行
awk '/to/{print}' test.txt  # 输出带有to的行
awk '/to/{print $2}' test.txt  # 输出带有to的行的第二列
awk '{print $0,$1}' test.txt  # 输出所有列 第一列
awk '/^deb-src/{print NR": "$0}' test.txt  # 输出以deb-src开头的行号: 内容
awk '{print NR,NF}' test.txt  # 输出所有行的行号,列数
awk -F: '{print $1"的home目录"$6}' /etc/passwd  # 以:为分隔符,输出  用户名的home目录/xxx/xxx
df -h | awk '/\/$/{print $4}'  # 输出/根目录还剩多少空间awk -F: '$6~/root/{print}' /etc/passwd  # 输出第6列包含root的行
awk -F: '$6!~/root/{print}' /etc/passwd  # 输出第6列不包含root的行awk -F: '$3<3{print}' /etc/passwd  # 输出第3列小于3的行
awk -F: 'NR==2{print}' /etc/passwd  # 输出第二行
awk -F: 'NR>2{print}' /etc/passwd  # 输出行号大于2的行awk -F: 'NR==2||NR==4{print}' /etc/passwd  # 输出行号等于2或者等于4的行
awk -F: '$7~/bash/&&$3<=500{print}' /etc/passwd  # 第7列包含bash并且第三列小于等于500的行awk -F: 'BEGIN{print "User\tUid\tHome"}{print $1"\t"$3"\t"$6}END{print "Total: "NR}' user
User	Uid	Home
root	0	/root
bin	1	/bin
daemon	2	/sbin
adm	3	/var/adm
lp	4	/var/spool/lpd
Total: 5# 统计ip访问次数
awk '{a[$1]++}END{for(i in a){print i"\t"a[i]}}' /var/log/nginx/access.log

相关文章:

Bash相关

Bash shell是Linux内核与用户之间的解释器程序 变量 自定义变量&#xff0c;名称可以用数字、字母、下划线、不能以数字开头&#xff0c;不能使用特殊符号&#xff0c;等号两边不能有空格 格式&#xff1a;变量名称值 环境变量&#xff0c;由系统提前定义好&#xff0c;使用…...

Flink 流批一体在模型特征场景的使用

摘要&#xff1a;本文整理自B站资深开发工程师张杨老师在 Flink Forward Asia 2023 中 AI 特征工程专场的分享。内容主要为以下四部分&#xff1a; 模型特征场景流批一体性能优化未来展望 一、 模型特征场景 以下是一个非常简化并且典型的线上实时特征和样本的生产过程。 前面…...

06-编辑器

gedit编辑器 gedit是Ubuntu系统自带的编辑器&#xff0c;可以用来轻度编辑和记录一些内容。 在终端中我们通过以下命令打开&#xff1a; gedit 要打开或者新建的文件名虽然Ubuntu的图形界面也能通过gedit打开文件&#xff0c;但是用终端打开gedit可以动用更高的权限&#xff…...

5.3.2 实验2:配置交换机端口安全

1、实验目的 通过本实验可以掌握&#xff1a; 交换机管理地址配置及接口配置。查看交换机的MAC地址表。配置静态端口安全、动态端口安全和粘滞端口安全的方法。 2、实验拓扑 配置交换机端口安全的实验拓扑如图所示。 配置交换机端口安全的实验拓扑 3、实验步骤 &#xff…...

【AIGC调研系列】通义千问、文心一言、抖音云雀、智谱清言、讯飞星火的特点分析

通义千问、文心一言、抖音云雀、智谱清言、讯飞星火这五款AI大模型各有特色&#xff0c;它们在市场上的定位和竞争策略也有所不同。 通义千问&#xff1a;由阿里巴巴推出&#xff0c;被认为是最接近ChatGPT水平的国产AI模型[7]。它不仅提供了长文档处理功能&#xff0c;还能够…...

【JVM】如何定位、解决内存泄漏和溢出

目录 1.概述 2.堆溢出、内存泄定位及解决办法 2.1.示例代码 2.2.抓堆快照 2.3.分析堆快照 1.概述 常见的几种JVM内存溢出的场景如下&#xff1a; Java堆溢出&#xff1a; 错误信息: java.lang.OutOfMemoryError: Java heap space 原因&#xff1a;Java对象实例在运行时持…...

常见网络问题的概述

网络问题概述 网络问题可能包括视频通话延迟、应用或网络速度慢、下载缓冲、VoIP质量差和互联网连接丢失等。 这些问题可能由硬件故障、使用模式变化、安全漏洞等引起&#xff0c;且可能对业务运营产生严重影响。 网络问题对企业的影响 网络问题不可避免&#xff0c;但可以…...

说说你对数据结构-树的理解

对树 - 二叉搜索树的理解 二叉搜索树是一种常见的二叉树结构&#xff0c;它具有以下特点&#xff1a; 每个节点最多只有两个子节点&#xff0c;分别称为左子节点和右子节点&#xff1b;对于任意节点&#xff0c;其左子树中的所有节点均小于该节点&#xff0c;其右子树中的所有…...

Docker实例

华子目录 docker实例1.为Ubuntu镜像添加ssh服务2.Docker安装mysql docker实例 1.为Ubuntu镜像添加ssh服务 (1)访问https://hub.docker.com&#xff0c;寻找合适的Ubuntu镜像 (2)拉取Ubuntu镜像 [rootserver ~]# docker pull ubuntu:latest latest: Pulling from library/ub…...

python基础——模块【模块的介绍,模块的导入,自定义模块,*和__all__,__name__和__main__】

&#x1f4dd;前言&#xff1a; 这篇文章主要讲解一下python基础中的关于模块的导入&#xff1a; 1&#xff0c;模块的介绍 2&#xff0c;模块的导入方式 3&#xff0c;自定义模块 &#x1f3ac;个人简介&#xff1a;努力学习ing &#x1f4cb;个人专栏&#xff1a;C语言入门基…...

【HTML】标签学习(下.2)

&#xff08;大家好哇&#xff0c;今天我们将继续来学习HTML&#xff08;下.2&#xff09;的相关知识&#xff0c;大家可以在评论区进行互动答疑哦~加油&#xff01;&#x1f495;&#xff09; 目录 二.列表标签 2.1 无序列表(重点) 2.2有序列表(理解) 2.3 自定义列表(重点…...

os模块篇(十一)

文章目录 os.chdir(path)os.chmod(path, mode, *, dir_fdNone, follow_symlinksTrue)os.chown(path, uid, gid, *, dir_fdNone, follow_symlinksTrue)os.getcwd()os.getcwdb()os.lchflags(path, flags)os.lchmod(path, mode)os.lchown(path, uid, gid) os.chdir(path) os.chdi…...

编译amd 的 amdgpu 编译器

1,下载源码 git clone --recursive https://github.com/ROCm/llvm-project.git 2, 配置cmake cmake -G "Unix Makefiles" ../llvm \ -DLLVM_ENABLE_PROJECTS"clang;clang-tools-extra;compiler-rt" \ -DLLVM_BUILD_EXAMPLESON …...

github 多个账号共享ssh key 的设置方法

确认本机是否已有ssh key 首先确认自己系统内有没有 ssh key。 bash复制代码cd ~/.ssh ls *.pub # 列出所有公钥文件id_rsa.pub若有&#xff0c;确认使用当前 key 或者生成新 key&#xff0c;若没有&#xff0c;生成新 key。由于我需要登录两个帐号&#xff0c;所以在已经存在…...

dm8修改sysdba用户的密码

1 查看达梦数据库版本 SQL> select * from v$version;LINEID BANNER ---------- --------------------------------- 1 DM Database Server 64 V8 2 DB Version: 0x7000c 3 03134283904-20220630-163817-200052 …...

基于boost准标准库的搜索引擎项目

零 项目背景/原理/技术栈 1.介绍boost准标准库 2.项目实现效果 3.搜索引擎宏观架构图 这是一个基于Web的搜索服务架构 客户端-服务器模型&#xff1a;采用了经典的客户端-服务器模型&#xff0c;用户通过客户端与服务器交互&#xff0c;有助于集中管理和分散计算。简单的用户…...

语言模型进化史(下)

由于篇幅原因&#xff0c;本文分为上下两篇&#xff0c;上篇主要讲解语言模型从朴素语言模型到基于神经网络的语言模型&#xff0c;下篇主要讲解现代大语言模型以及基于指令微调的LLM。文章来源是&#xff1a;https://www.numind.ai/blog/what-are-large-language-models 四、现…...

设计模式之旅:工厂模式全方位解析

简介 设计模式中与工厂模式相关的主要有三种&#xff0c;它们分别是&#xff1a; 简单工厂模式&#xff08;Simple Factory&#xff09;&#xff1a;这不是GoF&#xff08;四人帮&#xff0c;设计模式的开创者&#xff09;定义的标准模式&#xff0c;但被广泛认为是工厂模式的…...

大数据时代的生物信息学:挖掘生命数据,揭示生命奥秘

在当今科技日新月异的时代&#xff0c;大数据如同一座蕴藏无尽宝藏的矿山&#xff0c;而生物信息学则是那把锐利的探矿锤&#xff0c;精准有力地敲击着这座“生命之矿”&#xff0c;揭示出隐藏在其深处的生命奥秘。随着基因测序技术的飞速进步与广泛应用&#xff0c;生物医学领…...

微信小程序开发【从入门到精通】——页面导航

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 抽象 现代智能交通系统 &#xff08;ITS&#xff09; 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 &#xff08;…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源&#xff08;HTML/CSS/图片等&#xff09;&#xff0c;响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址&#xff0c;提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文&#xff1f; 多租户隔离&#xff1a;自动为接入设备追加租户前缀&#xff0c;后端按 ClientID 拆分队列。零代码鉴权&#xff1a;将入站用户名替换为 OAuth Access-Token&#xff0c;后端 Broker 统一校验。灰度发布&#xff1a;根据 IP/地理位写…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

LLM基础1_语言模型如何处理文本

基于GitHub项目&#xff1a;https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken&#xff1a;OpenAI开发的专业"分词器" torch&#xff1a;Facebook开发的强力计算引擎&#xff0c;相当于超级计算器 理解词嵌入&#xff1a;给词语画"…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点&#xff1a; 多级缓存&#xff0c;先查本地缓存&#xff0c;再查Redis&#xff0c;最后才查数据库热点数据重建逻辑使用分布式锁&#xff0c;二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

全面解析数据库:从基础概念到前沿应用​

在数字化时代&#xff0c;数据已成为企业和社会发展的核心资产&#xff0c;而数据库作为存储、管理和处理数据的关键工具&#xff0c;在各个领域发挥着举足轻重的作用。从电商平台的商品信息管理&#xff0c;到社交网络的用户数据存储&#xff0c;再到金融行业的交易记录处理&a…...

ArcGIS Pro+ArcGIS给你的地图加上北回归线!

今天来看ArcGIS Pro和ArcGIS中如何给制作的中国地图或者其他大范围地图加上北回归线。 我们将在ArcGIS Pro和ArcGIS中一同介绍。 1 ArcGIS Pro中设置北回归线 1、在ArcGIS Pro中初步设置好经纬格网等&#xff0c;设置经线、纬线都以10间隔显示。 2、需要插入背会归线&#xf…...

ffmpeg(三):处理原始数据命令

FFmpeg 可以直接处理原始音频和视频数据&#xff08;Raw PCM、YUV 等&#xff09;&#xff0c;常见场景包括&#xff1a; 将原始 YUV 图像编码为 H.264 视频将 PCM 音频编码为 AAC 或 MP3对原始音视频数据进行封装&#xff08;如封装为 MP4、TS&#xff09; 处理原始 YUV 视频…...