Linux-环境变量
文章目录
- 第6章 Linux 环境变量
- 6.1 环境变量简介?
- 6.2 全局变量
- 6.3 局部环境变量
- 6.4 设置用户自定义变量
- 6.4.1 设置局部用户自定义变量
- 6.4.2 设置全局环境变量
- 6.4.3 删除环境变量
- 6.5 默认的shell环境变量
- 6.6 设置PATH环境变量
- 6.7 定位系统环境变量
- 6.7.1 登录shell
- 6.7.2 /etc/profile文件
- 6.7.3 $HOME目录下的启动文件
- 6.7.4 交互式shell进程
- 6.7.5 非交互式shell
- 6.8 环境变量持久化
- 6.9 数组变量
第6章 Linux 环境变量
6.1 环境变量简介?
Linux环境变量能帮你提升Linux shell体验。很多程序和脚本都通过环境变量来获取系统信息、存储临时数据和配置信息。在Linux系统上有很多地方可以设置环境变量,了解去哪里设置相应的环境变量很重要。
本章将带你逐步了解Linux环境变量:它们存储在哪里,怎样使用,以及怎样创建自己的环境变量。最后以数组变量的用法作结。
- bash shell使用环境变量来存储shell会话和工作环境的相关信息(这也是被称作环境变量的原因)。环境变量允许在内存中存储数据,以便shell中运行的程序或脚本能够轻松访问到这些数据。这也是存储持久数据的一种简便方法。
- bash shell中有两种环境变量。
- 全局环境变量:
- 局部环境变量:
6.2 全局变量
全局环境变量对于shell会话和所有生成的子shell都是可见的,这让全局环境变量对那些所创建的子shell需要获取父shell信息的程序来说非常有用。
# 可以使用env命令或printenv命令来查看全局变量:
[root@Fedora-Desktop ~]# env | grep -i PATH
PATH=/root/.local/bin:/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/0/bus
[root@Fedora-Desktop ~]# # 显示个别
[root@Fedora-Desktop ~]# printenv PATH
/root/.local/bin:/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
[root@Fedora-Desktop ~]# # echo $
也可以使用echo命令显示变量的值。在引用某个环境变量时,必须在该变量名前加上美元符号($):
[root@Fedora-Desktop ~]# echo $HOME
/root
[root@Fedora-Desktop ~]# # 在echo命令中,在变量名前加上$可不仅仅是要显示变量当前的值。它能够让变量作为命令
行参数。
[root@Fedora-Desktop ~]# ls $HOME
anaconda-ks.cfg doc.tar documents music music.tar zy.mp4 zy.txt
[root@Fedora-Desktop ~]#
[root@Fedora-Desktop ~]# ls /root
anaconda-ks.cfg doc.tar documents music music.tar zy.mp4 zy.txt
[root@Fedora-Desktop ~]# # 全局环境变量可用于进程的子shell,用zsh命令生成一个子shell后,显示了HOME环境变量的当前值,这个值和
父shell中的一模一样,都是/home/Chrisine
[root@Fedora-Desktop ~]# zsh
[root@Fedora-Desktop]~# ps -f
UID PID PPID C STIME TTY TIME CMD
root 2185 2170 0 11:12 pts/0 00:00:00 -bash
root 2370 2185 0 11:15 pts/0 00:00:00 zsh
root 2388 2370 0 11:15 pts/0 00:00:00 ps -f
[root@Fedora-Desktop]~# echo $HOME
/root
[root@Fedora-Desktop]~# exit
[root@Fedora-Desktop ~]#
6.3 局部环境变量
局部环境变量只能在定义它的进程中可见。尽管它们是局部的,但是和全局环境变量一样重要 。
Linux系统也默认定义了标准的局部环境变量。不过你也可以定义自己的局部变量,如你所想,这些变量被称为用户定义局部变量。
set
命令可以显示某个特定进程的所有环境变量,既包括局部变量、全局变量,也包括用户自定义变量:
[root@Fedora-Desktop ~]# set
······
[root@Fedora-Desktop ~]#
可以看到,所有通过printenv
命令能看到的全局环境变量都出现在了set
命令的输出中。但在set
命令的输出中还有其他一些环境变量,即局部环境变量和用户定义变量。
set命令既会显示全局和局部环境变量、用户自定义变量以及局部shell函数,还会按照字母顺序对结果进行排序。
与set命令不同,env命令和printenv命令既不会对变量进行排序,也不会输出局部环境变量、局部用户自定义变量以及局部shell函数。在这种情况下,env命令和printenv命令的输出是重复的。不过,env命令有printenv命令不具备的一个功能,这使其略胜一筹。
6.4 设置用户自定义变量
可以在bash shell中直接设置自己的变量,也可以在shell脚本程序中创建自己的变量并引用它们。
6.4.1 设置局部用户自定义变量
- 启动bash shell(或者执行shell脚本)之后,就能创建仅对该shell进程可见的局部用户自定义变量。可以使用等号为变量赋值,值可以是数值或字符串。
[root@Fedora-Desktop ~]# echo $my_variable01[root@Fedora-Desktop ~]# my_variable01=123456
[root@Fedora-Desktop ~]# echo $my_variable01
123456
[root@Fedora-Desktop ~]# # 如果用于赋值的字符串包含空格,则必须用单引号或双引号来界定该字符串的起止:
[root@Fedora-Desktop ~]# echo $my_variable02[root@Fedora-Desktop ~]# my_variable02='Hello World'
[root@Fedora-Desktop ~]# echo $my_variable02
Hello World
[root@Fedora-Desktop ~]#
# 注意,你定义的局部变量用的是小写字母,而系统环境变量均用的都是大写字母。
# 在变量名、等号和值之间没有空格,这一点非常重要。如果在赋值表达式中加上了空格,那么bash shell会将值视为单独的命令# 设置好局部变量后,就能在shell进程中随意使用了。但如果又生成了另一个shell,则该变量在子shell中不可用:
[root@Fedora-Desktop ~]# zsh
[root@Fedora-Desktop]~# echo $0
zsh
[root@Fedora-Desktop]~# echo $my_variable02
[root@Fedora-Desktop]~# exit
[root@Fedora-Desktop ~]#
[root@Fedora-Desktop ~]# echo $my_variable02
Hello World
[root@Fedora-Desktop ~]# # 类似地,如果你在子进程中设置了一个局部变量,那么一旦你退出了子进程,那个局部环境变量就不可用。
[root@Fedora-Desktop ~]# zsh
[root@Fedora-Desktop]~# echo $my_child_variable[root@Fedora-Desktop]~# my_child_variable="I an Local now"
[root@Fedora-Desktop]~# echo $my_child_variable
I an Local now
[root@Fedora-Desktop]~# exit
[root@Fedora-Desktop ~]#
[root@Fedora-Desktop ~]# echo $my_child_variable[root@Fedora-Desktop ~]#
# 当我们回到父shell时,子shell中设置的局部变量就不存在了。可以通过将局部的用户定义变量变成全局变量来改变这种情况。
6.4.2 设置全局环境变量
全局环境变量在设置该变量的父进程所创建的子进程中都是可见的。创建全局环境变量的方法是先创建局部变量,然后再将其导出到全局环境中。
# 通过export命令加要导出的变量名
[root@Fedora-Desktop ~]# echo $my_variable03[root@Fedora-Desktop ~]# my_variable03="I am Global now"
[root@Fedora-Desktop ~]# export my_variable03
[root@Fedora-Desktop ~]# echo $my_variable03
I am Global now
[root@Fedora-Desktop ~]# # 子shell中也可见
[root@Fedora-Desktop ~]# zsh
[root@Fedora-Desktop]~# ps -f
UID PID PPID C STIME TTY TIME CMD
root 2185 2170 0 11:12 pts/0 00:00:00 -bash
root 2523 2185 0 11:53 pts/0 00:00:00 zsh
root 2546 2523 99 11:54 pts/0 00:00:00 ps -f
[root@Fedora-Desktop]~#
[root@Fedora-Desktop]~# echo $my_variable03
I am Global now
[root@Fedora-Desktop]~# # 修改子shell中的全局环境变量并不会影响父shell中该变量的值
[root@Fedora-Desktop]~# zsh
[root@Fedora-Desktop]~# my_variable03="NULL"
[root@Fedora-Desktop]~# echo $my_variable03
NULL
[root@Fedora-Desktop]~# exit
[root@Fedora-Desktop]~# echo $my_variable03
I am Global now
[root@Fedora-Desktop]~# # 子shell甚至无法使用export命令改变父shell中全局环境变量的值,尽管子shell重新定义并导出了变量my_variable,但父shell中的my_variable变量依然保
留着原先的值
[root@Fedora-Desktop]~# zsh
[root@Fedora-Desktop]~# my_variable03="NULL"
[root@Fedora-Desktop]~# export my_variable03
[root@Fedora-Desktop]~# echo $my_variable03
NULL
[root@Fedora-Desktop]~# exit
[root@Fedora-Desktop]~#
[root@Fedora-Desktop]~# echo $my_variable03
I am Global now
[root@Fedora-Desktop]~#
6.4.3 删除环境变量
1. unset 删除环境变量
[root@Fedora-Desktop ~]# echo $my_variable04[root@Fedora-Desktop ~]#
[root@Fedora-Desktop ~]# my_variable04="I want delete"
[root@Fedora-Desktop ~]# echo $my_variable04
I want delete
[root@Fedora-Desktop ~]# unset my_variable04
[root@Fedora-Desktop ~]# echo $my_variable04[root@Fedora-Desktop ~]# # 窍门: 如果要用到(doing anything with)变量,就使用$;如果要操作(doing anything to)变量,则不使用$。这条规则的一个例外是使用printenv显示某个变量的值。# 子进程中删除了一个全局环境变量,那么该操作仅对子进程有效。该全局环境变量在父进程中依然可用。
[root@Fedora-Desktop ~]# echo $my_variable05[root@Fedora-Desktop ~]# my_variable05="I am Global now"
[root@Fedora-Desktop ~]# export my_variable05
[root@Fedora-Desktop ~]# zsh
[root@Fedora-Desktop]~# echo $my_variable05
I am Global now
[root@Fedora-Desktop]~# unset my_variable05
[root@Fedora-Desktop]~# echo $my_variable05[root@Fedora-Desktop]~# exit
[root@Fedora-Desktop ~]# echo $my_variable05
I am Global now
[root@Fedora-Desktop ~]#
# 和修改变量一样,在子shell中删除全局变量后,你无法将效果反映到父shell中
6.5 默认的shell环境变量
在默认情况下,bash shell会用一些特定的环境变量来定义系统环境。这些变量在你的Linux系统中都已设置好,只管放心使用就行了。
bash shell源自当初的Unix Bourne shell,因此也保留了Unix Bourne shell里定义的那些环境变量。
bash shell支持的Bourme变量
变量 | 描述 |
---|---|
CDPATH | 冒号分隔的目录列表,作为cd命令的搜索路径 |
HOME | 当前用户的主目录 |
IFS | shell用来将文本字符串分割成字段的一系列字符 |
当前用户收件箱的文件名( bash shell会检查这个文件,看看有没有新邮件) | |
MAILPATH | 冒号分隔的当前用户收件箱的文件名列表( bash shell会检查列表中的每个文件,看看有没有新邮件) |
OPTARG | getopts命令处理的最后一个选项参数值 |
OPTIND | getopts命令处理的最后一个选项参数的索引号 |
PATH | shell查找命令的目录列表,由冒号分隔 |
PS1 | shell命令行界面的主提示符 |
PS2 | hell命令行界面的次提示符 |
bash shell环境变量
变量 | 描述 |
---|---|
BASH | 当前shell实例的全路径名 |
BASH_ALIASES | 含有当前已设置别名的关联数组 |
BASH_ARGC | 含有传入子函数或shell脚本的参数总数的数组变量 |
BASH_ARCV | 含有传入子函数或shell脚本的参数的数组变量 |
BASH_CMDS | 关联数组,包含shell执行过的命令的所在位置 |
BASH_COMMAND | shell正在执行的命令或马上就执行的命令 |
BASH_ENV | 设置了的话,每个bash脚本会在运行前先尝试运行该变量定义的启动文件 |
BASH_EXECUTION_STRING | 使用bash -c选项传递过来的命令 |
BASH_LINENO | 含有当前执行的shell函数的源代码行号的数组变量 |
BASH_REMATCH | 只读数组,在使用正则表达式的比较运算符=~进行肯定匹配( positive match)时,包含了匹配到的模式和子模式 |
······· | |
你可能已经注意到,不是所有的默认环境变量都会在运行set命令时列出。尽管这些都是默认环境变量,但并不是每一个都必须有一个值。
6.6 设置PATH环境变量
# 当你在shell CLI中输入一个外部命令,shell必须搜索系统,从中找到对应的程序。PATH环境变量定义了用于查找命令和程序的目录。
[root@Fedora-Desktop ~]# echo $PATH
/root/.local/bin:/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
[root@Fedora-Desktop ~]# # PATH中的目录之间以冒号分隔。
# 输出中显示共有7个目录,shell会在其中查找命令和程序。如果命令或者程序所在的位置没有包括在PATH变量中,那么在不使用绝对路径的情况下,shell是无法找到的。shell在找不到指定的命令或程序时会产生错误信息:
[root@Fedora-Desktop ~]# start-dfs.sh
bash: start-dfs.sh: 未找到命令...
[root@Fedora-Desktop ~]# # 你可以把新的搜索目录添加到现有的PATH环境变量中,无须从头定义。PATH中各个目录之间以冒号分隔。只需引用原来的PATH值,添加冒号(:),然后再使用绝对路径输入新目录即可。将该目录加入PATH环境变量之后,就可以在虚拟目录结构的任意位置执行这个程序了。
[root@Fedora-Desktop ~]# PATH=$PATH:/home/zy/Desktop/hadoop-3.1.3/sbin
[root@Fedora-Desktop ~]# start-dfs.sh
Starting namenodes on [Fedora-Desktop]
[root@Fedora-Desktop ~]# # 如果希望子shell也能找到你的程序的位置,一定要记得把修改后的PATH环境变量导出。
对PATH变量的修改只能持续到退出或重启系统。这种效果并不能一直持续。在下一节中,你会学到如何永久保持环境变量的修改效果。
6.7 定位系统环境变量
环境变量的作用持久化
当你登录Linux系统启动bash shell时,默认情况下bash会在几个文件中查找命令。这些文件称作启动文件或环境文件。bash进程的启动文件取决于你启动bash shell的方式。
启动bash shell有以下3种方式:
- 登录时作为默认登录shell
- 作为交互式shell,通过生成子shell启动
- 作为运行脚本的非交互式shell
下面几节介绍了bash shell在不同的方式下启动文件。
6.7.1 登录shell
当你登录Linux系统时,bash shell会作为登录shell启动。
登录shell通常会从5个不同的启动文件中读取命令。
1. /etc/profile
2. $HOME/.bash_profile
3. $HOME/.bashrc
4. $HOME/.bash_login
5. $HOME/.profile# /etc/profile文件是系统中默认的bash shell的主启动文件,系统中的每个用户登录时都会执行这个启动文件。# 注意: 要留意的是有些Linux发行版使用了可拆卸式认证模块(pluggable authentication module,PAM)。在这种情况下,PAM文件会在bash shell启动之前被处理,前者中可能会包含环境变量。PAM文件包括/etc/environment文件和$HOME/.pam_environment文件。
另外4个启动文件是针对用户的,位于用户主目录中,可根据个人具体需求定制。下面来仔细看看各个文件。
6.7.2 /etc/profile文件
1. /etc/profile文件是bash shell默认的主启动文件。只要登录Linux系统,bash就会执行/etc/profile启动文件中的命令。不同的Linux发行版在这个文件中放置了不同的命令。
[root@Fedora-Desktop ~]# cat /etc/profile
# /etc/profile# System wide environment and startup programs, for login setup
# Functions and aliases go in /etc/bashrc# It's NOT a good idea to change this file unless you know what you
# are doing. It's much better to create a custom.sh shell script in
# /etc/profile.d/ to make custom changes to your environment, as this
# will prevent the need for merging in future updates.pathmunge () {case ":${PATH}:" in*:"$1":*);;*)if [ "$2" = "after" ] ; thenPATH=$PATH:$1elsePATH=$1:$PATHfiesac
}# 每个发行版的/etc/profile文件都有不同的设置和命令。2. 不同发行版的/etc/profile文件都用到了同一个特性: for语句。它用来迭代/etc/profile.d目录下的所有文件。这为Linux系统提供了一个放置特定应用程序启动文件的地方,当用户登录时, shell会执行这些文件。
[root@Fedora-Desktop ~]# ls /etc/profile.d
bash-color-prompt.sh colorls.sh csh.local gawk.sh lang.csh nano-default-editor.sh vte.sh
bash_completion.sh colorxzgrep.csh debuginfod.csh gnome-ssh-askpass.csh lang.sh PackageKit.sh which2.csh
colorgrep.csh colorxzgrep.sh debuginfod.sh gnome-ssh-askpass.sh less.csh sh.local which2.sh
colorgrep.sh colorzgrep.csh flatpak.sh kde.csh less.sh toolbox.sh
colorls.csh colorzgrep.sh gawk.csh kde.sh nano-default-editor.csh vte.csh
[root@Fedora-Desktop ~]# # 有些文件与系统中的特定应用程序有关。大部分应用程序会创建两个启动文件:一个供bash shell使用(扩展名为.sh),另一个供C shell使用(扩展名为.csh)。
6.7.3 $HOME目录下的启动文件
# 其余的启动文件都用于同一个目的:提供用户专属的启动文件来定义该用户所用到的环境变量。
大多数Linux发行版只用这4个启动文件中的一两个。
1. $HOME/.bash_profile
2. $HOME/.bashrc
3. $HOME/.bash_login
4. $HOME/.profile# 注意,这些文件都以点号开头,说明属于隐藏文件(不会出现在一般的ls命令输出中)。因为它们位于用户的$HOME目录下,所以每个用户可以对其编辑并添加自己的环境变量,其中的环境变量会在每次启动bash shell会话时生效。# 注意: Linux发行版在环境文件方面存在的差异非常大。本节所列出的$HOME文件下的那些文件并非每个用户都有。例如,有些用户可能只有一个$HOME/.bash_profile文件。这很正常。# shell会按照下列顺序执行第一个被找到的文件,余下的则被忽略。
1. $HOME/.bash_profile
2. $HOME/.bash_login
3. $HOME/.profile# 你会发现这个列表中并没有$HOME/.bashrc文件。这是因为该文件通常通过其他文件运行。
# 提示 记住,$HOME代表某个用户的主目录,和波浪号(~)的效果一样。Fedora Linux系统中的.bash_profile文件的内容如下:
[root@Fedora-Desktop ~]# cat $HOME/.bash_profile
# .bash_profile# Get the aliases and functions
if [ -f ~/.bashrc ]; then. ~/.bashrc
fi# User specific environment and startup programs
[root@Fedora-Desktop ~]# # .bash_profile启动文件会先检查$HOME目录中是不是还有一个名为.bashrc的启动文件。如果有,就先执行该文件中的命令。
6.7.4 交互式shell进程
1. 如果不是在登录系统时启动的bash shell(比如在命令行中输入bash),那么这时的shell称作交互式shell。与登录shell一样,交互式shell提供了命令行提示符供用户输入命令。作为交互式shell启动的bash并不处理/etc/profile文件,只检查用户$HOME目录中的.bashrc文件。
[root@Fedora-Desktop ~]# cat .bashrc
# .bashrc# Source global definitions
if [ -f /etc/bashrc ]; then. /etc/bashrc
fi# User specific environment
if ! [[ "$PATH" =~ "$HOME/.local/bin:$HOME/bin:" ]]
thenPATH="$HOME/.local/bin:$HOME/bin:$PATH"
fi
export PATH# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=# User specific aliases and functionsalias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
[root@Fedora-Desktop ~]# # .bashrc文件会做两件事:首先,检查/etc目录下的通用bashrc文件;其次,为用户提供一个定制自己的命令别名和私有脚本函数。
6.7.5 非交互式shell
1. 非交互式shell,系统执行shell脚本时用的就是这种shell。不同之处在于它没有命令行提示符。但是,当你在系统中运行脚本时,也许希望能够运行一些特定的启动命令。# 脚本能以不同的方式执行。只有部分执行方式会启动子shell。2. bash shell提供了BASH_ENV环境变量。当shell启动一个非交互式shell进程时,会检查这个环境变量以查看要执行的启动文件名。如果有指定的文件,则shell会执行该文件里的命令,这通常包括shell脚本变量设置。那如果未设置BASH_ENV变量,shell脚本到哪里去获取其环境变量呢?别忘了有些shell脚本是通过启动一个子shell来执行的。子shell会继承父shell的导出变量。如果父shell是登录shell,在/etc/profile文件、/etc/profile.d/*.sh文件和$HOME/.bashrc文件中设置
并导出了变量,那么用于执行脚本的子shell就能继承这些变量。# 任何由父shell设置但未导出的变量都是局部变量,不会被子shell继承。对于那些不启动子shell的脚本,变量已经存在于当前shell中了。就算没有设置BASH_ENV,也可以使用当前shell的局部变量和全局变量。3. 如果变量未设置, echo命令会显示一个空行,然后返回CLI提示符。
6.8 环境变量持久化
对全局环境变量(Linux系统的所有用户都要用到的变量)来说,可能更倾向于将新的或修改过的变量设置放在/etc/profile文件中,但这可不是什么好主意。# 如果升级了所用的发行版,则该文件也会随之更新,这样一来,所有定制过的变量设置可就都没了,最好在/etc/profile.d目录中创建一个以.sh结尾的文件。把所有新的或修改过的全局环境变量设置都放在这个文件中。在大多数发行版中,保存个人用户永久性bash shell变量的最佳地点是$HOME/.bashrc文件。这适用于所有类型的shell进程。但如果设置了BASH_ENV变量,请记住:除非值为$HOME/.bashrc,否则,应该将非交互式shell的用户变量放在别的地方。注意 图形化界面组成部分(比如GUI客户端)的环境变量可能需要在另外一些配置文件中设置,这和设置bash shell环境变量的文件不一样。第5章讲过,alias命令设置无法持久生效。你可以把个人的alias设置放在$HOME/.bashrc启动文件中使其效果永久化。
6.9 数组变量
1. 环境变量的一个很酷的特性是可以作为数组使用。数组是能够存储多个值的变量。这些值既可以单独引用,也可以作为整体引用。
要给某个环境变量设置多个值,可以把值放在括号里,值与值之间用空格分隔。
[root@Fedora-Desktop ~]# mytest=(zero one two three four)
[root@Fedora-Desktop ~]# echo $mytest
zero
[root@Fedora-Desktop ~]# # 输出指定索引下标的值
[root@Fedora-Desktop ~]# echo ${mytest[2]}
two
[root@Fedora-Desktop ~]# # 通配符 * 全部输出数组
[root@Fedora-Desktop ~]# echo ${mytest[*]}
zero one two three four
[root@Fedora-Desktop ~]# # 更改某个索引的值
[root@Fedora-Desktop ~]# mytest[2]=seven
[root@Fedora-Desktop ~]# echo ${mytest[2]}
seven
[root@Fedora-Desktop ~]# # unset删除数组中的某个值
[root@Fedora-Desktop ~]# unset mytest[2]
[root@Fedora-Desktop ~]# echo ${mytest[2]}[root@Fedora-Desktop ~]# echo ${mytest[*]}
zero one three four
[root@Fedora-Desktop ~]# # unset 删除整个数组
[root@Fedora-Desktop ~]# unset mytest
[root@Fedora-Desktop ~]# echo ${mytest[*]}[root@Fedora-Desktop ~]#
相关文章:
Linux-环境变量
文章目录 第6章 Linux 环境变量6.1 环境变量简介?6.2 全局变量6.3 局部环境变量6.4 设置用户自定义变量6.4.1 设置局部用户自定义变量6.4.2 设置全局环境变量6.4.3 删除环境变量 6.5 默认的shell环境变量6.6 设置PATH环境变量6.7 定位系统环境变量6.7.1 登录shell6.…...
DISCUZ论坛中 “阅读权限10“这几个字的修改教程以及后台目录路径修改后的管理路径
第一篇:修改“阅读权限10”这几个字 首先找到目录: source\language\lang_message.php 找到这个文件 查找: thread_nopermission 首发地址:玖毅论坛 第二篇:后台管理路径 看到好多人在网上问discuz管理路径怎么…...
springboot 整合spring-boot-starter-data-elasticsearch
依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId></dependency> 配置 spring:elasticsearch:rest:uris: "http://localhost:9200" # Elastics…...

Element UI中el-dialog作为子组件如何由父组件控制显示/隐藏~
1、这里介绍的是将el-dialog作为组件封装便于复用,如何通过父组件控制子组件dialog的显示与隐藏。 2、思路:首先el-dialog是通过dialogVisible的值是否为true或false来控制显示与隐藏的。那么我们可以通过父传子props来将true(即showFlag的值࿰…...

【vue讲解:es6导入导出语法、 vue-router简单使用、登录跳转案例、scoped的使用、elementui使用】
1 es6导入导出语法 # 做项目:肯定要写模块--》导入使用# 默认导出和导入 在某个js中 # 命名导出和导入1.1 默认导出和导入 // #########导出语法########### // export default name // 只导出变量 // export default add // 只导出函数// export default {nam…...

#beego的orm一直引入失败#
在导入beego的orm的时候,一直导入失败,orm显示红色,表示导入失败 解决办法: 1:升级go,由1.7升级到1.8 2:执行以下命令 go clean go get github.com/astaxie/beego/orm go mod tidy go mod vendor 3:测试在vendor中可以看到…...

Vue插值:双大括号标签、v-text、v-html、v-bind 指令
创建应用程序实例后,需要通过插值进行数据绑定。数据绑定是 Vue.js 最核心的一个特性。建立数据绑定后,数据和视图会相互关联,当数据发生变化时,视图会自动进行更新。这样就无须手动获取 DOM 的值,使代码更加简洁&…...

实验五之用Processing绘画
1.案例代码如下: import generativedesign.*; import processing.pdf.*; import java.util.Calendar; Tablet tablet; boolean recordPDF false; float x 0, y 0; float stepSize 5.0; PFont font; String letters "Sie hren nicht die folgenden Gesnge…...

Apache CloudStack Official Document 翻译节选(七)
关于 Apache CloudStack 的 最佳实践 (一) Best Practices 部署Apache CloudStack是极具挑战性的,在整个部署过程中需要你做出形形色色的技术性选择。Apache CloudStack的配置条目是相当灵活的,这是因为在组合和配置具体条目时有…...

动态创建 Delphi 按钮的完整指南:基于配置文件的 `TGridPanel` 实现
在 Delphi 开发中,我们经常需要根据不同的配置动态生成 UI 元素。本文将带你通过一个完整的示例,演示如何根据配置文件动态创建按钮,并将它们排列在一个 TGridPanel 中。每个按钮的标题、链接、颜色和大小都将从配置文件中读取。 “C:\myApp\…...
【设计模式】工厂模式和抽象工厂模式
工厂模式 function User(role, pages) {this.role role;this.pages pages; }// new User(admin, [home, user, setting]); // new User(user, [home, user]); // new User(guest, [home]);function UserFactory(role) {switch (role) {case admin:return new User(role, [ho…...

【xilinx】Versal Adaptive SoC DDRMC - NoC QoS 选项卡未出现
在 2024.1 之前的 Vivado 版本中,用户在使用 NoC 验证块设计时可以访问 NoC 对象窗口和 QoS 选项卡。 Vivado 2024.1 中存在一个已知问题,即 NoC 对象窗口和 QoS 选项卡不出现。 要显示 NoC 对象窗口和 QoS 选项卡,请保存块设计,…...

融合创新:EasyCVR视频汇聚平台云计算技术与AI技术共筑雪亮工程智能防线
随着信息技术的飞速发展,视频云计算技术作为云计算领域的一个重要分支,正逐步在公共安全、社会治理等领域展现出其独特的优势。特别是在雪亮工程这一群众性治安防控工程中,视频云计算技术更是发挥了不可替代的作用。本文将从视频云计算技术的…...
keepalived的技术原理及其在负载均衡场景中的应用
keepalived的技术原理及其在负载均衡场景中的应用 深入探讨Keepalived及其在负载均衡场景中的应用1. **Keepalived概述**2. **Keepalived的技术原理**2.1 **VRRP协议**2.2 **健康检查机制**2.3 **脚本管理** 3. **Keepalived与LVS的结合应用**3.1 **LVS优缺点** 4. **Nginx与HA…...
树的重心 by江河湖海
引入 重心是什么? 想象你有一个由线悬挂的秋千,秋千的两端坐着两个人,如果这两个人坐在秋千的重心上,秋千就会保持平衡。在树的结构中,重心就是那个让所有节点到它那里的“距离”(可以理解为线的长度)总和最小的点。 重心为什么最多只有两个? 假设树的重心有两个,…...
MySQL存储过程深入指南
MySQL存储过程深入指南 存储过程是MySQL中一个强大的功能,能够显著提升数据库操作的效率和灵活性。本文将全面介绍存储过程的概念、语法、使用方法及最佳实践,帮助读者熟练掌握存储过程的使用。 1. 什么是存储过程? 存储过程(Stored Procedure)是预先编译并存储在数据库…...

牛客算法小题
目录 牛客.求和编辑 牛客.abb 牛客.合并k个有序链表 牛客.滑雪(暴力->递归->记忆化搜索) 牛客.旋转字符串 牛客.求和 我没想到是dfs,另外我的dfs能力确实也不强,另外难度大的是他的那个输出 import java.util.Scanne…...

小米SU7销量超特斯拉,新车明年上半年发布
小米 SU7,一款国内新能源车品牌纯血新势力旗下首款轿车,上市短短 4 个月卖出超 4 万台,月均销量过万。 该说不说,这放在整个新能源汽车工业史上也足以称得上是一件小刀喇拍屁股,让人开了眼的事儿。 就在本月初&#x…...

基于Java语言的光伏监控系统+光伏发电预测+光伏项目+光伏运维+光伏储能项目
基于Java语言的光伏监控系统光伏发电预测光伏项目光伏运维光伏储能项目 介绍 基于Java语言的光伏监控系统光伏发电系统光伏软件系统光伏监控系统源码光伏发电系统源码 基于Java语言的光伏监控系统光伏发电预测光伏项目光伏运维光伏储能项目 安装教程...

unity json 处理
1. c#对象 -> json public class Item {public int id;public int num;public Item(int id, int num){this.id id;this.num num;} } public class PlayerInfo {public string name;public int atk;public int def;public float moveSpeed;public double roundSpeed;publi…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...

ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...

网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...

脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)
一、OpenBCI_GUI 项目概述 (一)项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台,其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言,首次接触 OpenBCI 设备时,往…...

云安全与网络安全:核心区别与协同作用解析
在数字化转型的浪潮中,云安全与网络安全作为信息安全的两大支柱,常被混淆但本质不同。本文将从概念、责任分工、技术手段、威胁类型等维度深入解析两者的差异,并探讨它们的协同作用。 一、核心区别 定义与范围 网络安全:聚焦于保…...

Mysql故障排插与环境优化
前置知识点 最上层是一些客户端和连接服务,包含本 sock 通信和大多数jiyukehuduan/服务端工具实现的TCP/IP通信。主要完成一些简介处理、授权认证、及相关的安全方案等。在该层上引入了线程池的概念,为通过安全认证接入的客户端提供线程。同样在该层上可…...
基于 HTTP 的单向流式通信协议SSE详解
SSE(Server-Sent Events)详解 🧠 什么是 SSE? SSE(Server-Sent Events) 是 HTML5 标准中定义的一种通信机制,它允许服务器主动将事件推送给客户端(浏览器)。与传统的 H…...