Bash Shell的操作环境

news2025/1/7 21:11:34

目录

1、路径与指令搜寻顺序

2、bash的进站(开机)与欢迎信息:/etc/issue,/etc/motd

(1)/etc/issue

(2)/etc/motd

 3、bash的环境配置文件

(1)login与non-login shell

(2)/etc/profile(login shell才会读取)

(3) ~./bash_profile(login shell才会读取)

(4)source:读入环境配置文件的指令

(5)~/.bashrc(non-login shell 会读取)

(6)bash的其他相关配置文件

4、终端机的环境设定:stty、set

5、通配符与特殊符号 


是否记得我们登入主机的时候,屏幕上头会有一些说明文字,告知我们的 Linux 版本啊什么的, 还有,登入的时候我们还可以给予用户一些讯息或者欢迎文字呢。此外, 我们习惯的环境变量、命令别名等等的,是否可以登入就主动的帮我设定好? 这些都是需要注意的。另外,这些设定值又可以分为系统整体设定值与各人喜好设定值, 仅是一些文件放置的地点不同啦!这我们后面也会来谈一谈的!

1、路径与指令搜寻顺序

现在我们知道系统里面其实有不少的 ls 指令,或者是包括内建的 echo 指令, 那么来想一想,如果一个指令 (例如 ls) 被下达时, 到底是哪一个 ls 被拿来运作?很有趣吧!基本 上,指令运作的顺序可以这样看:

  1. 以相对/绝对路径执行指令,例如『 /bin/ls 』或『 ./ls 』;
  2. alias 找到该指令来执行;
  3. bash 内建的 (builtin) 指令来执行;
  4.  透过 $PATH 这个变量的顺序搜寻到的第一个指令来执行。

举例来说,你可以下达 /bin/ls 及单纯的 ls 看看,会发现使用 ls 有颜色但是 /bin/ls 则没有颜色。因为 /bin/ls 是直接取用该指令来下达,而 ls 会因为『 alias ls='ls --color=auto' 』这个命令别名而先使用! 如果想要了解指令搜寻的顺序,其实透过 type -a ls 也可以查询的到啦!上述的顺序最好先了解喔!

[dmtsai@study ~]$ alias echo='echo -n'
[dmtsai@study ~]$ type -a echo
echo is aliased to `echo -n'
echo is a shell builtin
echo is /usr/bin/echo

注意:指令通常指的是二进制的可执行文件,系统在安装时就已经编译好的文件;shell脚本是一种文本文件,依赖shell解释器来执行。

2、bash的进站(开机)与欢迎信息:/etc/issue,/etc/motd

(1)/etc/issue

issue有冒出之意--可理解为开机冒出来的讯息

bash 也有进站画面与欢迎讯息喔?真假?真的啊! 还记得在终端机接口 (tty1 ~ tty6) 登入 的时候,会有几行提示的字符串吗?那就是进站画面啊!那个字符串写在哪里啊?呵呵!在 /etc/issue 里面啊!先来看看:

[root@localhost ~]# cat /etc/issue
\S
Kernel \r on an \m

就如同 $PS1 这变量一样,issue 这个文件的内容也是可以使用反斜杠作为变量取用喔!你可以 man issue 配合 man agetty 得到底下的结果:

 

vi /etc/issue
\S (terminal: \l)
Date: \d \t
Kernel \r on an \m
Welcome!

要注意的是,除了 /etc/issue 之外还有个 /etc/issue.net 呢!这是啥?这个是提供给 telnet 这个远 程登录程序用的。 当我们使用 telnet 连接到主机时,主机的登入画面就会显示 /etc/issue.net 而不是 /etc/issue 呢!

(2)/etc/motd

多嘴几句:motd是message of the day的缩写

etc是et cetera即等等的意思。“et” 在拉丁语中是 “和、与” 的意思,“cetera” 是 “其余的、其他的” 意思,合起来就是 “和其他的”。

至于如果您想要让使用者登入后取得一些讯息,例如您想要让大家都知道的讯息, 那么可以将讯息 加入 /etc/motd 里面去!例如:当登入后,告诉登入者, 系统将会在某个固定时间进行维护工作, 可以这样做 (一定要用 root 的身份才能修改喔!)

[root@study ~]# vim /etc/motd
Hello everyone,
Our server will be maintained at 2015/07/10 0:00 ~ 24:00.
Please don't login server at that time. ^_^
那么当你的使用者(包括所有的一般账号与 root)登入主机后,就会显示这样的讯息出来:

Last login: Wed Jul 8 23:22:25 2015 from 127.0.0.1
Hello everyone,
Our server will be maintained at 2015/07/10 0:00 ~ 24:00.
Please don't login server at that time. ^_^


###我的阿里云的例子
[root@ptivitic ~]# vi /etc/motd

Welcome to Alibaba Cloud Elastic Compute Service !

Welcome to Langxi's ptivitic home

 3、bash的环境配置文件

我们什么动作都没有进行,但是一进入 bash 就取得一堆有用的变量了,这是因为系统有一些环境配置文件的存在,让 bash 在启动时直接读取这些配置文件,以规划好 bash的操作环境!

而这些配置文件又可以分为全体系统的配置文件以及用户个人偏好配置文件。要注意的是, 前面谈到的命令别名啦、自定义的变量,在你注销 bash 后就会失效,所以你想要保留你的设定, 就得要将这些设定写入配置文件才行

(1)login与non-login shell

在介绍bash的配置文件前,先知道login与non-login,重点在于有没有登入(login)- 用户密码

  • login shell:取得 bash 时需要完整的登入流程的,就称为 login shell。举例来说,你要由 tty1 ~ tty6 登入, 需要输入用户的账号与密码,此时取得的 bash 就称为『 login shell 』啰;
  • non-login shell:取得 bash 接口的方法不需要重复登入的举动,举例来说,你在原本的 bash 环境下再次下达 bash 这个指令,同样的也没有输入账号密码, 那第二个 bash (子程序) 也是 non-login shell 。

login Shell:它会读取一系列的系统配置文件,比如/etc/profile和用户主目录下的~/.bash_profile等文件来初始化环境。

  • /etc/profile:这是系统整体的设定,你最好不要修改这个文件;
  • ~/.bash_profile 或 ~/.bash_login 或 ~/.profile:属于使用者个人设定,你要改自己的数据,就写入这里!

non - login Shell:它不会像登录 shell 那样读取所有的登录相关配置文件,而是只读取一些部分配置文件,如~/.bashrc

(2)/etc/profile(login shell才会读取)

这个配置文件可以利用使用者的标识符 (UID) 来决定很多重要的变量数据, 这也是每个使用者登入取得 bash 一定会读取的配置文件! 所以如果你想要帮所有使用者设定整体环境,那就是改这里啰!这个文件设定的变量主要有:

  • PATH:会依据 UID 决定 PATH 变量要不要含有 sbin 的系统指令目录;
  • MAIL:依据账号设定好使用者的 mailbox /var/spool/mail/账号名;
  • USER:根据用户的账号设定此一变量内容;
  • HOSTNAME:依据主机的 hostname 指令决定此一变量内容;
  • HISTSIZE:历史命令记录笔数。CentOS 7.x 设定为 1000
  • umask:包括 root 默认为 022 而一般用户为 002 等!

 /etc/profile 可不止会做这些事而已,他还会去呼叫外部的设定数据喔!在 CentOS 7.x 默认的情况下,底下这些数据会依序的被呼叫进来:

  • /etc/profile.d/*.sh:只要在 /etc/profile.d/ 这个目录内且扩展名为 .sh ,另外,使用者能够具有 r 的权限, 那么该文件就会被 /etc/profile 呼叫进来。在 CentOS 7.x 中,这个目录底下的文件规范了 bash 操作接口的颜色、 语系、ll ls 指令的命令别名、vi 的命令别名、which 的命令别名等等。如果你需要帮所有使用者设定一些共享的命令别名时, 可以在这个目录底下自行建立扩展名为 .sh 的文件,并将所需要的数据写入即可喔!

  • /etc/locale.conf:这个文件是由 /etc/profile.d/lang.sh 呼叫进来的!这也是我们决定 bash 预设使用何种语系的重要配置文件! 文件里最重要的就是 LANG/LC_ALL 这些个变量的设定。

  • /usr/share/bash-completion/completions/*: [tab] 的妙用吧。除了命令补齐、档名补齐之外,还可以进行指令的选项/参数补齐功能!那就是从这个目录里面找到相对应的指令来处理的! 其实这个目录底下的内容是由/etc/profile.d/bash_completion.sh 这个文件载入的。

bash login shell 情况下所读取的整体环境配置文件其实只有 /etc/profile,但是 /etc/profile 还会呼叫出其他的配置文件。

(3) ~./bash_profile(login shell才会读取)

bash 在读完了整体环境设定的 /etc/profile 并藉此呼叫其他配置文件后,接下来则是会读取使用者的个人配置文件。 在 login shell bash 环境中,所读取的个人偏好配置文件其实主要有三个,依序分别是:

1. ~/.bash_profile

2. ~/.bash_login

3. ~/.profile

其实 bash login shell 设定只会读取上面三个文件的其中一个, 而读取的顺序则是依照上面的顺 序。也就是说,如果 ~/.bash_profile 存在,那么其他两个文件不论有无存在,都不会被读取。

[root@ptivitic ~]# cat .bash_profile 
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
	. ~/.bashrc                   ###这里是判断是否存在,如果存在就进行读取
fi

### bash 配置文件的读入方式比较有趣,主要是透过一个指令『 source 』来读取的!
### 也就是说 ~/.bash_profile 其实会再呼叫 ~/.bashrc 的设定内容


# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH

这个文件内有设定 PATH 这个变量。由于PATH /etc/profile 当中已经设定过,所以在这里就以累加的方式增加用户家目录下的 ~/bin/ 为额外的执行文件放置目录。这也就是说,你可以将自己建立的执行档放置到你自己家目录下的 ~/bin/ 录啦! 那就可以直接执行该执行档而不需要使用绝对/相对路径来执行该文件

整个 login shell 的读取流程:

 

实线的的方向是主线流程,虚线的方向则是被呼叫的配置文件!从上面我们也可以清楚的知道,在 CentOS 的 login shell 环境下,最终被读取的配置文件是『 ~/.bashrc 』这个文件喔!所以,你当然可以将自己的偏好设定写入该文件即可。 底下我们还要讨论一下 source ~/.bashrc 喔!

(4)source:读入环境配置文件的指令

利用 source 或小数点 (.) 都可以将配置文件的内容读进来目前的 shell 环境中! 举例来说,我修改 了 ~/.bashrc ,那么不需要注销,立即以 source ~/.bashrc 就可以将刚刚最新设定的内容读进来目前的环境中。

[dmtsai@study ~]$ source 配置文件档名

范例:将家目录的 ~/.bashrc 的设定读入目前的 bash 环境中
[dmtsai@study ~]$ source ~/.bashrc <==底下这两个指令是一样的!
[dmtsai@study ~]$ . ~/.bashrc

(5)~/.bashrc(non-login shell 会读取)

当你取得 non-login shell 时,该 bash 配置文件仅会读取 ~/.bashrc 而已啦!那么预设的 ~/.bashrc 内容是如何?--rc=run - commands

[root@ptivitic ~]# cat ~/.bashrc 
# .bashrc

# User specific aliases and functions

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'

# Source global definitions
if [ -f /etc/bashrc ]; then
	. /etc/bashrc
fi
alias php81='php81 -c /www/server/php/81/etc/php-cli.ini'

root ~/.bashrc 中其实已经规范了较为保险的命令别名了。 此外,咱们的 CentOS 7.x 还会主动的呼叫 /etc/bashrc 这个文件喔!为什么需要呼叫 /etc/bashrc 呢? 因为 /etc/bashrc 帮我们的 bash 定义出底下的数据:

  • 依据不同的 UID 规范出 umask 的值;
  • 依据不同的 UID 规范出提示字符 (就是 PS1 变量)
  • 呼叫 /etc/profile.d/*.sh 的设定

要注意的是,这个 /etc/bashrc CentOS 特有(其实是 Red Hat 系统特有的),其他不同的 distributions 可能会放置在不同的档名就是了。由于这个 ~/.bashrc 会呼叫 /etc/bashrc 及 /etc/profile.d/*.sh , 所以,万一你没有 ~/.bashrc (可能自己不小心将他删除了),那么你会发现你的bash 提示字符可能会变成这个样子:

-bash-4.2$

不要太担心啦!这是正常的,因为你并没有呼叫 /etc/bashrc 来规范 PS1 变量啦!而且这样的情况也不会影响你的 bash 使用。 如果你想要将命令提示字符捉回来,那么可以复制 /etc/skel/.bashrc 到你的家目录,再修订一下你所想要的内容, 并使用 source 去呼叫 ~/.bashrc ,那你的命令提示字符就会回来啦!

(6)bash的其他相关配置文件

  • /etc/man_db.conf:这文件的内容『规范了使用 man 的时候, man page 的路径到哪里去寻找!』所以说的简单一点,这个文件规定了下达 man 的时候,该去哪里查看数据的路径设定!
  • ~/.bash_history:预设的情况下,我们的历史命令就记录在这里!而这个文件能够记录几笔数据,则与 HISTFILESIZE 这个变量有关啊。每次登入 bash 后,bash 会先读取这个文件,将所有的历史指令读入内存, 因此,当我们登入 bash 后就可以查知上次使用过哪些指令啰。
  •  ~/.bash_logout:这个文件则记录了『当我注销 bash 后,系统再帮我做完什么动作后才离开』的意思。 你可以去读取一下这个文件的内容,预设的情况下,注销时, bash 只是帮我们清掉屏幕的讯息而已。 不过,你也可以将一些备份或者是其他你认为重要的工作写在这个文件中 (例如清空暂存盘), 那么当你离开 Linux 的时候,就可以解决一些烦人的事情啰!

4、终端机的环境设定:stty、set

举例来说,我们可以利用退格键(backspace,就是那个←符号的按键) 来删除命令行上的字符, 也可以使用 [ctrl]+c 来强制终止一个指令的运行,当输入错误时,就会有声音跑出来警告。这是怎么办到的呢? 很简单啊!因为登入终端机的时候,会自动的取得一些终端机的输入环境的设定。

 可以利用stty(setting teletypewriter)帮助设定终端机的输入按键代表的意义:

[root@localhost ~]# stty -a

speed 38400 baud; rows 36; columns 81; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
...

如果出现 ^ 表示 [Ctrl] 那个按键的意思。举例来说, intr = ^C 表示利用 [ctrl] +c 来达成的。几个重要的代表意义是:

  • intr : 送出一个 interrupt (中断) 的讯号给目前正在 run 的程序 (就是终止啰!);^C
  • quit : 送出一个 quit 的讯号给目前正在 run 的程序;^\
  • erase : 向后删除字符,^?
  • kill : 删除在目前指令列上的所有文字;^U
  • eof : End of file 的意思,代表『结束输入』。^D
  • start : 在某个程序停止后,重新启动他的 output。^Q
  • stop : 停止目前屏幕的输出;^S
  • susp : 送出一个 terminal stop 的讯号给正在 run 的程序。^Z

删除字符就是 erase 的设定值啦! 如果你想要用 [ctrl]+h 来进行字符的删除,那么可以下达:

stty erase ^h # 这个设定看看就好,不必真的实做!不然还要改回来!
经常在 Windows/Linux 之间切换,在 windows 底下,很多软件默认的储存快捷按钮是 [crtl]+s ,
所以习惯按这个按钮来处理。
不过,在 Linux 底下使用 vim 时,却也经常不小心就按下 [crtl]+s !问题来了,
按下这个组合钮之后,整个 vim 就不能动了 (整个画面死锁)! 请问该如何处置?
答:
参考一下 stty -a 的输出中,有个 stop 的项目就是按下 [crtl]+s 的!那么恢复成 start 就是 [crtl]+q 啊!因此,
尝
试按下 [crtl]+q 应该就可以让整个画面重新恢复正常咯!

除了 stty 之外,其实我们的 bash 还有自己的一些终端机设定值呢!那就是利用 set 来设定的! 我 们之前提到一些变量时,可以利用 set 来显示,除此之外,其实 set 还可以帮我们设定整个指令输 出/输入的环境。 例如记录历史命令、显示错误内容等等。

[dmtsai@study ~]$ set [-uvCHhmBx]
选项与参数:
-u :预设不启用。若启用后,当使用未设定变量时,会显示错误讯息;
-v :预设不启用。若启用后,在讯息被输出前,会先显示讯息的原始内容;
-x :预设不启用。若启用后,在指令被执行前,会显示指令内容(前面有 ++ 符号)
-h :预设启用。与历史命令有关;
-H :预设启用。与历史命令有关;
-m :预设启用。与工作管理有关;
-B :预设启用。与刮号 [] 的作用有关;
-C :预设不启用。若使用 > 等,则若文件存在时,该文件不会被覆盖。
范例一:显示目前所有的 set 设定值
[dmtsai@study ~]$ echo $-
himBH
# 那个 $- 变量内容就是 set 的所有设定啦! bash 预设是 himBH 喔!
范例二:设定 "若使用未定义变量时,则显示错误讯息"
[dmtsai@study ~]$ set -u
[dmtsai@study ~]$ echo $vbirding
-bash: vbirding: unbound variable
# 预设情况下,未设定/未宣告 的变量都会是『空的』,不过,若设定 -u 参数,
# 那么当使用未设定的变量时,就会有问题啦!很多的 shell 都预设启用 -u 参数。
# 若要取消这个参数,输入 set +u 即可!

另外,其实我们还有其他的按键设定功能。就是在 /etc/inputrc 这个文件里面设定。 还有例如 /etc/DIR_COLORS* /usr/share/terminfo/* 等,也都是与终端机有关的环境配置文件案。

bash 默认的组合键汇整如下:

5、通配符与特殊符号 

在 bash 的操作环境中还有一个非常有用的功能,那就是通配符 (wildcard) ! 我们利用 bash 处理数据就更方便了!底下我们列出一些常用的通配符喔:

符号
意义
*代表0~无穷多个任意字符

?

[]

[-]

代表一定有一个任意字符

例如 [abcd] 代表『一定有一个字符, 可能是 a, b, c, d 这四个任何一个』
若有减号在中括号内时,代表『在编码顺序内的所有字符』。例如 [0-9] 代表 0 9 之间的所有数字, 因为数字的语系编码是连续的!
[^]
表示『反向选择』,例如 [^abc] 代表 一定有一个字符,只要是非 a, b, c 的其他字符就接受的意思。
[dmtsai@study ~]$ LANG=C <==由于与编码有关,先设定语系一下
范例一:找出 /etc/ 底下以 cron 为开头的档名
[dmtsai@study ~]$ ll -d /etc/cron* <==加上 -d 是为了仅显示目录而已
范例二:找出 /etc/ 底下文件名『刚好是五个字母』的文件名
[dmtsai@study ~]$ ll -d /etc/????? <==由于 ? 一定有一个,所以五个 ? 就对了
范例三:找出 /etc/ 底下文件名含有数字的文件名
[dmtsai@study ~]$ ll -d /etc/*[0-9]* <==记得中括号左右两边均需 *
范例四:找出 /etc/ 底下,档名开头非为小写字母的文件名:
[dmtsai@study ~]$ ll -d /etc/[^a-z]* <==注意中括号左边没有 *
范例五:将范例四找到的文件复制到 /tmp/upper 中
[dmtsai@study ~]$ mkdir /tmp/upper; cp -a /etc/[^a-z]* /tmp/upper

 除了通配符之外,bash 环境中的特殊符号有哪些呢?底下我们先汇整一下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2272204.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何在没有 iCloud 的情况下将联系人从 iPhone 传输到 iPhone

概括 近期iOS 13.5的更新以及苹果公司发布的iPhone SE在众多iOS用户中引起了不小的轰动。此外&#xff0c;不少变化&#xff0c;如暴露通知 API、Face ID 增强功能以​​及其他在 COVID-19 期间与公共卫生相关的新功能&#xff0c;吸引了 iPhone 用户尝试新 iPhone 并更新到最…

网站设计总结后期维护与更新的重要性

当我们谈论网站设计时&#xff0c;往往会聚焦在初始阶段的创意和实现上。然而&#xff0c;一旦网站建成并上线&#xff0c;后期维护与更新的重要性就显得尤为突出。一个网站的成功不仅取决于其初始设计&#xff0c;更在于持续的维护与更新。 首先&#xff0c;后期维护能够确保网…

Android NDK开发实战之环境搭建篇(so库,Gemini ai)

文章流程 音视频安卓开发首先涉及到ffmpeg编译打包动态库&#xff0c;先了解动态库之间的cpu架构差异性。然后再搭建可运行的Android 环境。 So库适配 ⽇常开发我们经常会使⽤到第三库&#xff0c;涉及到底层的语⾳&#xff0c;视频等都需要添加so库。⽽so库的体积⼀般来说 ⾮…

数据仓库中的指标体系模型介绍

数据仓库中的指标体系介绍 文章目录 数据仓库中的指标体系介绍前言什么是指标体系指标体系设计有哪些模型?1. 指标分层模型2. 维度模型3. 指标树模型4. KPI&#xff08;关键绩效指标&#xff09;模型5. 主题域模型6.平衡计分卡&#xff08;BSC&#xff09;模型7.数据指标框架模…

unity学习11:地图相关的一些基础

目录 1 需要从 unity的 Asset Store 下载资源 1.1 下载资源 1.2 然后可以从 package Manager 里选择下载好的包&#xff0c;import到项目里 2 创建地形 2.1 创建地形 2.2 地形 Terrain大小 2.3 各种网格的尺寸大小 2.4 比较这个地形尺寸和创建的其他物体的大小对比 3 …

jenkins入门--安装jenkins

下载地址https://www.jenkins.io/ jdk 安装 &#xff1a;Jenkins需要安装对应版本的jdk,我在安装过程中显示需要21,17 Java Downloads | Oracle jenkins安装过程参考全网最清晰Jenkins安装教程-windows_windows安装jenkins-CSDN博客 安装完成后&#xff0c;浏览器输入127.0.…

第0章 机器人及自动驾驶SLAM定位方法全解析及入门进阶学习建议

嗨&#xff0c;各位同学大家好&#xff01;笔者自985硕士毕业后&#xff0c;在机器人算法领域已经深耕 7 年多啦。这段时间里&#xff0c;我积累了不少宝贵经验。本专栏《机器人工程师带你从零入门SLAM》将结合下面的SLAM知识体系思维导图及多年的工作实战总结&#xff0c;将逐…

springCloud 脚手架项目功能模块:Java分布式锁

文章目录 引言分布式锁产生的原因:集群常用的分布式锁分布式锁的三种实现方式I ZooKeeper 简介zookeeper本质上是一个分布式的小文件存储系zookeeper特性:全局数据一致性ZooKeeper的应用场景分布式锁(临时节点)II 基于ZooKeeper 实现一个排他锁创建锁获取锁释放锁Apache Zo…

如何配置【Docker镜像】加速器+【Docker镜像】的使用

一、配置Docker镜像加速器 1. 安装/升级容器引擎客户端​ 推荐安装1.11.2以上版本的容器引擎客户端 2. 配置镜像加速器​ 针对容器引擎客户端版本大于1.11.2的用户 以root用户登录容器引擎所在的虚拟机 修改 "/etc/docker/daemon.json" 文件&#xff08;如果没有…

Docker- Unable to find image “hello-world“locally

Docker- Unable to find image “hello-world“locally 文章目录 Docker- Unable to find image “hello-world“locally问题描述一. 切换镜像1. 编辑镜像源2. 切换镜像内容 二、 检查设置1、 重启dockers2、 检查配置是否生效3. Docker镜像源检查4. Dokcer执行测试 三、自定义…

go项目zero框架中用gentool解决指定MYSQL表生成结构体被覆盖的解决方案

在使用 GoZero 框架进行项目开发时&#xff0c;gentool 是一个非常方便的工具&#xff0c;它可以根据数据库表结构自动生成 Go 语言结构体和其他相关文件。然而&#xff0c;在使用 gentool 生成结构体时&#xff0c;可能会遇到一个问题&#xff1a;如果多次运行 gentool&#x…

深入Android架构(从线程到AIDL)_11 线程之间的通信架构

目录 5、 线程之间的通信架构 认识Looper与Handler对象 主线程丢信息给自己 子线程丢信息给主线程 替子线程诞生Looper与MQ 5、 线程之间的通信架构 认识Looper与Handler对象 当主线程诞生时&#xff0c;就会去执行一个代码循环(Looper)&#xff0c;以便持续监视它的信息…

今日自动化编辑部今日自动化杂志社2024年第19期部分目录

智能控制技术 无人机视觉支持下的输电线路安全距离巡检系统探究 贺凌飞 王骋昊1-2,36 基于虚拟现实技术的安全警示系统设计 黄奇 李光辉 徐奎 许兆辉3-5 火焰自动焊接技术对泄漏率的影响研究 孙天鸽5-7 PLC在闸门自动化控制系统中的应用 黎芳8-9,23 智能控制算法在二次供水系统…

【双层模型】考虑供需双侧的综合能源双层优化模型

目录 主要内容 内容研究 1.模型简介 2 程序释义 部分代码 运行结果 下载链接 主要内容 该程序实现一个综合能源系统的优化调度双层模型&#xff0c;上下层分别采用差分进化算法和规划算法进行求解。模型考虑了多种能源设备&#xff0c;包括燃气轮机、燃气锅炉、风电…

单片机-串转并-74HC595芯片

1、74HC595芯片介绍 74HC595 是一个 8 位串行输入、并行输出的位移缓存器&#xff0c;其中并行输出为三态输出&#xff08;即高电平、低电平和高阻抗&#xff09;。 15 和 1 到 7 脚 QA--QH&#xff1a;并行数据输出 9 脚 QH 非&#xff1a;串行数据输出 10 脚 SCLK 非&#x…

(框架漏洞)

1.Thinkphp 1.Thinkphp5x远程命令执⾏及getshell 搭建靶场环境 vulhub/thinkphp/5-rce docker-compose up -d #启动环境 ?sindex/think\app/invokefunction&functioncall_user_func_array&vars[0]system&vars[1][]whoami ?s/Index/\think\app/invokefunctio…

[SMARTFORMS] 输出文本变量绑定

在SMARTFORMS表单中的表格接口的"导入"页签处添加导入参数IV_EBELN 参数IV_EBELN为采购凭证编号&#xff0c;并为该参数添加默认值 在SMARTFORMS表单中的全局定义中的"全局数据"页签定义变量 结构ZSPO_HEADER_437、ZSPO_ITEM_437与表类型ZTPO_ITEM_437的定…

【DevOps】Jenkins部署

Jenkins部署 文章目录 Jenkins部署资源列表基础环境一、部署Gilab1.1、安装Gitlab1.2、修改配置文件1.3、加载配置文件1.4、访问Gitlab1.5、修改root登录密码1.6、创建demo测试项目1.7、上传代码1.8、验证上传的代码 二、部署Jenkins所需软件2.1、部署JDK2.2、部署Tomcat2.3、部…

Redis(二)value 的五种常见数据类型简述

目录 一、string&#xff08;字符串&#xff09; 1、raw 2、int 3、embstr 二、hash&#xff08;哈希表&#xff09; 1、hashtable 2、ziplist 三、list&#xff08;列表&#xff09; ​编辑 1、linkedlist 2、ziplist 3、quicklist&#xff08;redis 3.2后的列表内…

PyQt实战——将pcm文本数据转换成.pcm的二进制文件

系类往期文章&#xff1a; PyQt5实战——多脚本集合包&#xff0c;前言与环境配置&#xff08;一&#xff09; PyQt5实战——多脚本集合包&#xff0c;UI以及工程布局&#xff08;二&#xff09; PyQt5实战——多脚本集合包&#xff0c;程序入口QMainWindow&#xff08;三&…