Bash相关
Bash
shell是Linux内核与用户之间的解释器程序
变量
- 自定义变量,名称可以用数字、字母、下划线、不能以数字开头,不能使用特殊符号,等号两边不能有空格
- 格式:
变量名称=值
- 格式:
- 环境变量,由系统提前定义好,使用时直接调用
- 当前用户名:
USER - 当前用户ID:
UID - 当前家目录:
HOME - 主机名:
HOSTNAME - 当前用户的解释器:
SHELL - 当前位置:
PWD - 存储命令的路径:
PATH - 一级提示符:
PS1 - 二级提示符:
PS2
- 当前用户名:
- 位置变量与预定义变量
$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内核与用户之间的解释器程序 变量 自定义变量,名称可以用数字、字母、下划线、不能以数字开头,不能使用特殊符号,等号两边不能有空格 格式:变量名称值 环境变量,由系统提前定义好,使用…...
Flink 流批一体在模型特征场景的使用
摘要:本文整理自B站资深开发工程师张杨老师在 Flink Forward Asia 2023 中 AI 特征工程专场的分享。内容主要为以下四部分: 模型特征场景流批一体性能优化未来展望 一、 模型特征场景 以下是一个非常简化并且典型的线上实时特征和样本的生产过程。 前面…...
06-编辑器
gedit编辑器 gedit是Ubuntu系统自带的编辑器,可以用来轻度编辑和记录一些内容。 在终端中我们通过以下命令打开: gedit 要打开或者新建的文件名虽然Ubuntu的图形界面也能通过gedit打开文件,但是用终端打开gedit可以动用更高的权限ÿ…...
5.3.2 实验2:配置交换机端口安全
1、实验目的 通过本实验可以掌握: 交换机管理地址配置及接口配置。查看交换机的MAC地址表。配置静态端口安全、动态端口安全和粘滞端口安全的方法。 2、实验拓扑 配置交换机端口安全的实验拓扑如图所示。 配置交换机端口安全的实验拓扑 3、实验步骤 ÿ…...
【AIGC调研系列】通义千问、文心一言、抖音云雀、智谱清言、讯飞星火的特点分析
通义千问、文心一言、抖音云雀、智谱清言、讯飞星火这五款AI大模型各有特色,它们在市场上的定位和竞争策略也有所不同。 通义千问:由阿里巴巴推出,被认为是最接近ChatGPT水平的国产AI模型[7]。它不仅提供了长文档处理功能,还能够…...
【JVM】如何定位、解决内存泄漏和溢出
目录 1.概述 2.堆溢出、内存泄定位及解决办法 2.1.示例代码 2.2.抓堆快照 2.3.分析堆快照 1.概述 常见的几种JVM内存溢出的场景如下: Java堆溢出: 错误信息: java.lang.OutOfMemoryError: Java heap space 原因:Java对象实例在运行时持…...
常见网络问题的概述
网络问题概述 网络问题可能包括视频通话延迟、应用或网络速度慢、下载缓冲、VoIP质量差和互联网连接丢失等。 这些问题可能由硬件故障、使用模式变化、安全漏洞等引起,且可能对业务运营产生严重影响。 网络问题对企业的影响 网络问题不可避免,但可以…...
说说你对数据结构-树的理解
对树 - 二叉搜索树的理解 二叉搜索树是一种常见的二叉树结构,它具有以下特点: 每个节点最多只有两个子节点,分别称为左子节点和右子节点;对于任意节点,其左子树中的所有节点均小于该节点,其右子树中的所有…...
Docker实例
华子目录 docker实例1.为Ubuntu镜像添加ssh服务2.Docker安装mysql docker实例 1.为Ubuntu镜像添加ssh服务 (1)访问https://hub.docker.com,寻找合适的Ubuntu镜像 (2)拉取Ubuntu镜像 [rootserver ~]# docker pull ubuntu:latest latest: Pulling from library/ub…...
python基础——模块【模块的介绍,模块的导入,自定义模块,*和__all__,__name__和__main__】
📝前言: 这篇文章主要讲解一下python基础中的关于模块的导入: 1,模块的介绍 2,模块的导入方式 3,自定义模块 🎬个人简介:努力学习ing 📋个人专栏:C语言入门基…...
【HTML】标签学习(下.2)
(大家好哇,今天我们将继续来学习HTML(下.2)的相关知识,大家可以在评论区进行互动答疑哦~加油!💕) 目录 二.列表标签 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若有,确认使用当前 key 或者生成新 key,若没有,生成新 key。由于我需要登录两个帐号,所以在已经存在…...
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的搜索服务架构 客户端-服务器模型:采用了经典的客户端-服务器模型,用户通过客户端与服务器交互,有助于集中管理和分散计算。简单的用户…...
语言模型进化史(下)
由于篇幅原因,本文分为上下两篇,上篇主要讲解语言模型从朴素语言模型到基于神经网络的语言模型,下篇主要讲解现代大语言模型以及基于指令微调的LLM。文章来源是:https://www.numind.ai/blog/what-are-large-language-models 四、现…...
设计模式之旅:工厂模式全方位解析
简介 设计模式中与工厂模式相关的主要有三种,它们分别是: 简单工厂模式(Simple Factory):这不是GoF(四人帮,设计模式的开创者)定义的标准模式,但被广泛认为是工厂模式的…...
大数据时代的生物信息学:挖掘生命数据,揭示生命奥秘
在当今科技日新月异的时代,大数据如同一座蕴藏无尽宝藏的矿山,而生物信息学则是那把锐利的探矿锤,精准有力地敲击着这座“生命之矿”,揭示出隐藏在其深处的生命奥秘。随着基因测序技术的飞速进步与广泛应用,生物医学领…...
微信小程序开发【从入门到精通】——页面导航
👨💻个人主页:开发者-曼亿点 👨💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨💻 本文由 曼亿点 原创 👨💻 收录于专栏:…...
Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...
【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...
盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...
ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...
安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖
在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会࿰…...
MySQL 知识小结(一)
一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...
Linux 中如何提取压缩文件 ?
Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...
