本文时间 2023-05-19
作者:sugerqube漆瓷
本文重理解,!!忽略环境变量加载原理!!
本文目标:理解六大环境变量配置,选择合适的配置文件进行配置
以shell编程为例
现在我们想要运行名为"sugerqube.sh"的脚本需要运行的命令是
./sugerqube.sh
即在命令行输入脚本的地址
注:./
是当前目录的意思
同理当我们再其他目录想要运行它的时候需要打的命令就会变化。
操作系统为我们提供管理名为环境变量的东西,环境变量中配置了放置这些命令的文件夹。
这样我们就能在任意地方直接使用命令完成。
类似vi
,mv
等常见命令其实就是
/usr/local/sbin:
/usr/local/bin:
/sbin:/bin:
/usr/sbin:
/usr/bin
等下的命令文件,所以当这些常见命令用不了的时候,大概率说明环境便量配置出问题了。
可以创建临时变量:来进行抢救,后文还会再提及。
export PATH=$PATH:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
接下来我会用魔法咒语的概念来简述Linux如何寻找环境变量。
现在想要发动名为“watherboom”的魔法。(自定linux命令)
你问法杖会不会(查看临时环境变量)
会(存在临时环境变量),咒语生效
换跟不会的法杖(新的bash窗口),咒语失效
魔杖不会,你思索自己会不会(查看用户环境变量/home/user/.bash_profile)
会(存在环境),咒语生效
其他人不会(切换用户),咒语无法发动
你不会,你问老大会不会(查看root环境变量/etc/profile)
会(存在环境),咒语生效
老大也不会(未配置文件),咒语无法发动
老大不会,问老天爷(查看系统环境变量/etc/environment)
会(存在环境),咒语生效
老天爷也不会(未配置文件),咒语无法发动
因为是先问法杖,再层层向上,所以如果法杖直接回答了,无论他是否正确,都会采取法杖的方案。
以上是四个环境变量会存在的地址,那还有两个在哪?
作为魔法师,有些事不能总亲力亲为,你需要小精灵(bash脚本)帮你做事。
所以还存在你的小精灵指南(~/.bashrc)
你还可以问老大的小精灵所以有(/etc/bashrc)
这些书都是“你” 写的,所上面的魔法(命令),你也会;当你转职(非bash)你就只能拜托小精灵帮你。
注:这一段简单说明了profile和bashrc的区别,前者是全范围涵盖的,后者是针对bash的。
平时我们用的都是bash命令,所以看起来好像是bashrc>profile,实际上是他们有不同的关注点。
平时我们用的都是non-login进入的bash运行现成脚本,所以看起来bashrc更有用,而profile仅登录能操作
直接在命令行输入以下命令
export PATH=/home/sugerqube/bin:$PATH
/home/bin
为要添加到环境变量的文件夹。
:$PATH
不可省略,他的存在是将你新的环境变量地址存到原先PATH的前面。
有shell基础的会知道这里的$
是对PATH地址的一种引用。
同理也可以放到前面:export PATH=$PATH:/home/sugerqube/bin
注意事项:
包括后文的注意事项都引用自下文,ps:原文<方法一>存在错误。
http://blog.csdn.net/xishining/article/details/119283522
直接在命令行输入以下命令
cd
vi .bash
最后一行输入
export PATH=$PATH:/home/sugerqube/bin
注意事项:
直接在命令行输入以下命令
cd
vi .bash_profile
最后一行输入
export PATH=$PATH:/home/sugerqube/bin
注意事项:同方法2,但是用户不登录也能生效(non-login 方式进入 bash 运行的命令)
直接在命令行输入以下命令,需要权限 vi退出时wq!
强制写入
sudo vi /etc/bashrc
最后一行输入
export PATH=$PATH:/home/sugerqube/bin
注意事项:
直接在命令行输入以下命令,需要权限 vi退出时wq!
强制写入
sudo vi /etc/profile
最后一行输入
export PATH=$PATH:/home/sugerqube/bin
注意事项:同方法4,但是用户不登录也能生效(non-login 方式进入 bash 运行的命令)
直接在命令行输入以下命令,需要权限 vi退出时wq!
强制写入
sudo vi /etc/environment
最后一行输入
export PATH=$PATH:/home/sugerqube/bin
注意事项:通方法5。
以上就是个人对六中环境变量配置的理解
笔者在之前讲解g1youngGC源码的中提到过关于g1写屏障和Rset(记忆集合)等相关知识点,之前限于文章长度(ps:全部介绍完博客会比较长)跳过了这个部分只是简单介绍了下概念,今天我们来继续从源码出发,探究g1的写屏障和记忆集合等相关技术内幕。一.写屏障(writebarrier)关于写屏障,其实要从垃圾回收的三色标记说起,网上关于三色标记的文章很多,具体说明也比较详细,笔者在这里就不在进行详细说明,本文的重点还是放在源码解析与阅读上。在三色标记算法中,只有同时满足以下两种条件就会产生漏标的问题:灰色对象断开了白色对象的引用(直接或间接的引用);即灰色对象原来成员变量的引用发生了变化。黑色对象重新引用了该白色对象;即黑色对象成员变量增加了新的引用。我们只要破坏其中一个条件就可以解决这个问题,而解决这个问题就需要用到读屏障和写屏障,在jvm的垃圾回收器中,zgc使用的是读屏障,笔者有篇相关博客专门介绍了zgc的技术内幕而我们现在说的g1则是使用的写屏障,准确的说是SATB+写屏障(cms用的是写屏障+增量更新)。写屏障是在对象属性引用另一个对象的时候才会触发,我们先写一段这样的jav
最近学员群又有人问到了Agilent-012391WholeHumanGenomeOligoMicroarrayG4112A这样的芯片数据,我让学生打包数据成为rdata发给我,我检查了一下,发现里面的基因ID其实是有问题的,如下所示:>as.numeric(exprSet['GAPDH',]) [1]-0.251630-0.155540-0.273550-0.380700-0.428190-0.392950 [7]-0.103190-0.414220-0.314840-0.357170-0.356710-0.413600 [13]-0.255290-0.411110-0.309840-0.393780-0.350690-0.141290 [19]-0.381040-0.360000-0.322420-0.254410-0.219950-0.465110 [25]-0.463820-0.151940-0.389230-0.412180-0.215320-0.395210 [31]-0.444730-0.349110-0.252500-0.492400-0.34
前言师傅,我常常听别人说,不要在并发情况下使用HashMap,可能会出现死循环,这个死循环是怎么形成的呢?一尘慧能这个听为师慢慢道来我们都知道,HashMap的底层是由数组加链表来实现的当往HashMap中put一个键值对时,如果HashMap中的键值对数量size大于或等于阈值(threshold)并且null!=tablebucketIndex时会进行扩容bucketIndex为该键值对最后被散列到hash表table的位置比如table的初始容量为4,加载因子为0.75,此时阈值为3,table已有三个元素,现在put一个元素<1,”A”>,<1,”A”>被散列到table1处,而table1!=null,此时满足扩容条件阈值=容量*加载因子threshold=capacity*loadFactor扩容时先生成一个是table大小2倍的newTable,然后把table中的元素迁移到newTable中,迁移的工作就由transfer方法来完成,这个方法就是引起死循环的原因所在环的形成现在我们来模拟一下环是如何形成的,设HashMap的初始容量为4,先往Ha
wait()方法和sleep()方法区别wait方法会释放对象的锁标志,当调用一个对象的wait方法的时候,会使当前线程暂停执行,并将当前线程放到对象队列池,直到调用notify方法,会把对象队列池的任意一个线程放入锁标记等待池,只有锁标记等待池才可能获取锁,并时刻准备获取锁,如果是notifyAll方法,会把对象等待池所有线程放入到锁标记等待池sleep需要指定等待时间,他可以让线程在指定时间内暂停执行,但是他并不会释放锁标记,如果是使用synchronizd同步代码块,其他线程也不能共享数据,其他同等级的或者高优先级的线程获取锁执行的机会,等级低的也有可能获取执行的机会wait只能在同步代码块会同步代码方法使用,而sleep可以在任何地方使用wait无需要捕获异常,而sleep需要,且sleep是Thread方法,而wait是object类的方法。notify和notifyAll使用那个唤醒线程建议使用notifyAll,两个虽然都是唤醒线程,但是还是有区别的,notify是随机唤醒等待线程池的一个线程,而notifyAll会唤醒对象等待队列池的所有线程,看上去使用notify更好
#python基础数据类型 #1.int整数 #2.str字符串.不会用字符串保存大量的数据 #3.bool布尔值.True,False #4.list列表(重点)存放大量的数据 #5.dict字典key:value查找会比较快 #6.set集合无序不能重复 #7.bytes一堆字节。我们程序处理的最小单位 #8.tuple元组不可变的列表复制1.整数(int) 在python3中所有的整数都是int类型.但在python2中如果数据量比较⼤.会使⽤long类型.在python3中不存在long类型int的操作,xxx.bit_length()可计算,返回二进制长度1a=8 2print(a.bit_length())#.bit_length()返回二进制长度复制2.布尔值(bool)取值只有True,False.bool值没有操作. 转换:1#bool-intFalse-0True-1 2#int-bool0-False非零-True如: 3x=False 4print(int(x))#输出为0 5 6while1: 7print("循环循环") 8#str-bo
当大家看到这个标题时可能会问:什么是负体验的产品?其实很简单,就是用了这款产品,在某些场景下你可能得到不良的体验。大家心里可能会有100个问号,那你开发这款产品出来干嘛?这个问题让社区成员ML01-薛志荣TVB给大家解答,以下时间交给他~ 薛志荣:“答案很简单,我觉得开发这款产品是一件非常有必要的事情。今年我大部分的时间都花在研究人工智能和写书上(文章后面有书的进展,出版社编辑终于可以让我公布出来了哈哈哈),在快要到10月份的时候,我大学毕业时立下的“一年开发一个产品”目标还没开始实现,我觉得不能再这样拖下去了,于是开始构思今年要做什么。我认为独立完成一个项目是一个很好的学习机会,而且我不愿意错过人工智能这个浪潮,所以我决定今年的产品是跟人工智能有关的。在10月的时候我开始去学习深度学习相关内容,在这里要推荐一本非常不错的书籍,名叫《Python深度学习》,它是Keras之父的最新之作,深入浅出地介绍了深度学习的相关知识和工程。从10月份到现在,虽然我的知识还是只有半桶水,但我深深觉得,深度学习比前端开发和手机开发有趣多了,如果5年前已有相关知识的话,我现在应该不是一名交互设计师了…P
除了车辆时速、行车环境等相关信息的显示之外,苹果这一项技术还支持不同车辆的驾驶员通过FaceTime进行视频通话。今天,外媒报道苹果目前申请了一项新的有关汽车的专利。即将汽车的前挡风玻璃变成增强现实显示屏,可显示导航通话、车辆信息等内容。去年6月库克公开承认苹果正在研发自动驾驶系统,而一直以来苹果也申请了多项有关于汽车的专利技术。这一项专利申请是在8月1日被公开。专利的详细信息显示这是一个增强现实挡风玻璃显示系统,也能够称之为抬头显示,以增强现实的方式,将一些信息显示在挡风玻璃上面。虽然这一专利将挡风玻璃变成了AR显示屏,但并不会影响汽车驾驶员的实现,其信息将以透明的方式显示在玻璃上,而驾驶员不用低头就能够看到,在一定程度上或许还能够提高行车的安全性。针对这项专利,苹果表示,能够在玻璃上提供车辆速度、行车环境等方面的信息,并且还能够将相关的信息提供给其他车辆。不过,如果要实现这一计划,需要外部的众多传感器和其他设备提供相应的数据,其中包括,可见光摄像、红外摄像、光速扫描、超声波传感器、音频传感器、深度摄像设备、雷达、位置探测设备等。除了车辆时速、行车环境等相关信息的显示之外,据了解,苹
2017全球创想家VR视频大赛(GCCVRShortFilmFestival2017)是由虚拟现实行业最早期的连接者和创想者UCCVR发起,携手重磅合作伙伴SMG、Jaunt中国、优酷VR联合举办推出,是专注于挖掘优秀VR影视作品和内容的行业专业赛事,也是顶级影视制作人与优秀创想家的最佳交流和展示舞台,汇聚了全球活跃的内容投资者全程关注。SMG党委书记、著名电视艺术家、导演滕俊杰先生为颁奖典礼致辞SMG战略投资部主任吴霄峰带来行业精彩分享本届大赛共揭晓9大奖项,来自海内外的三十多支VR影视拍摄队伍共同上台合影UCCVR创始人&CEO符国新先生与Jaunt中国CEOJames先生同台分享对于VR影视行业的看法本次大赛是GCC全球创想家社区推出的VR视频系列赛事的第二届,作品较上一届在整体制作水准上有显著提升,国内与全球作品同台竞技,不相上下。全球化专业赛事,300多部国内外VR影视作品同台竞技获奖名单大揭晓本届大赛在2017年1月推出,历时5个多月,吸引了国内外超过300款VR影视作品和视频内容参加,题材丰富多元。参赛队伍不仅来自北京、上海、广州、深圳、沈阳、南京、成都等,更有来
文/孟永辉其实,监管政策的出台从某种程度上已经吹响了互联网金融转型的号角。随着互金行业的不断合规,单纯地依靠流量方式来获得增长的做法已经难以为继。很多互金平台都在思考以后的发展道路,其中拥抱已经到来的金融科技时代就是诸多发展新模式当中的一个。同P2P、网络信贷的乱象不同,众筹似乎是互金领域的一股清流。人们好像在开发一块新大陆一样,不断从众筹的身上寻找着破解难题的方式方法。很多人并不将众筹看作互金的一个门类。的确,如果严格来讲,众筹完全可以自立门派,成为一个全新流派。同互金领域的过山车式的发展不同,众筹的发展似乎有些不瘟不火。它既没有互金的高潮迭起,树倒猢狲散,也没有网络信贷的错乱和迷失。即使是在监管风声趋紧的时刻,众筹依然在按照自己的节奏蹒跚前行。之所以用“蹒跚”这个词,主要是由于当下的众筹行业还处于一个初级阶段,距离真正的成熟还有很长的路要走。那么,众筹发展到怎样的程度才算是真正成熟了呢?蹒跚前行,众筹发展成熟的标志有哪些?其实,众筹是一个能够涵盖很多行业的门类,这是由它的多重属性来决定的。金融属性仅仅只是众筹的一个属性而已,社交属性、电商属性、社群属性……这些都是能够与众筹产生联系
前端周刊发表每周前端技术相关的大事件、文章教程、一些框架的版本更新、以及代码和工具。每周定期发表,欢迎大家关注、转载。 欢迎关注公众号「前端每周看」 工具 vscode vscode可以说是前端最流行的编辑器,其有丰富的插件系统。不同开发人员对编辑器设置不同,比如缩进是用空格还是tab,缩进几个等等。如果多人开发同一个项目,必然会引起文件冲突,所以一个团队最好能统一编辑器。 参考:https://editorconfig.org,在项目根目录新建.editconfig文件 root = true[*]charset = utf-8indent_style = spaceindent_size = 2end_of_line = lfinsert_final_newline = truetrim_trailing_whitespace = true[*.md]insert_final_newline = falsetrim_trai
多运行时是一个非常新的概念。在2020年,BilginIbryam提出了Multi-Runtime(多运行时)的理念,对基于Sidecar模式的各种产品形态进行了实践总结和理论升华。那到底什么是多运行时呢?首先还是得从分布式应用的四大类基本需求讲起。简单来讲任何分布式应用都存在的四大类基本需求: 1、生命周期:包括部署,健康检查,水平扩展,配置管理等,目前这些需求的最佳实践,都陆续在kubernetes上有了落地。 2、网络:网络方面的需求是serviceMesh的主战场,比如istio可以满足这里绝大部分需求,除了pub/sub。 3、状态:包括数据的读写,状态其实是非常难以管理的,涉及幂等,缓存,数据流等等。 4、绑定:主要是指和系统外部资源的交互。 在传统软件时代,是耦合在应用代码里的,但现如今,有越来越多的分布式能力从应用中剥离,而剥离的方式也在逐渐变化,从最早期,这些能力从业务代码剥离到依赖库中,然后有一些特性剥离到平台层(kubernetes)。而如今会有更多的非业务能力,剥离到sidecar中。作者预测:理论上每个微服务可以有多个r
1.修改tomcat窗口名称 启动tomcat服务器,窗口名称默认是tomcat,若需要改变名称,找到tomcat-》bin->catalina.bat->set_EXECJAVA=start"%TITLE%"%_RUNJAVA%将 %TITLE%修改为自己项目名称,保存即可。 复制 2.关于Tomcat启动报错:FailedtoinitializeendpointassociatedwithProtocolHandler["http-apr-8080"] 一般是Tomcat的默认端口被占用,或者Tomcat进程没有关掉。(这个可以通过任务管理器查看一下,如果发现Tomcat进程开着,那就结束它再启动Tomcat就可以了。) 解决办法: 1.先查看占用此端口的玩意儿的PID 运行cmd,命令行输入:netstat-ano|findstr8080(这里我的Tomcat的端口是使用的默认的8080),会发现有个占用了8080的PID 2.然后运行:taskkill/f/pidPID(就是上一条命令查出来的PID),回车,当提示终止成功,说明可以了,现在再重新启动To
FullCalendar提供了丰富的属性设置和方法调用,开发者可以根据FullCalendar提供的API快速完成一个日历日程的开发,本文将FullCalendar的常用属性和方法、回调函数等整理成中文文档,以供参阅。当前版本1.6.4。 普通显示设置 属性 描述 默认值 header 设置日历头部信息。如果设置为false,则不显示头部信息。包括left,center,right左中右三个位置,每个位置都可以对应以下不同的配置:title:显示当前月份/周/日信息prev:用于切换到上一月/周/日视图的按钮next:用于切换到下一月/周/日视图的按钮prevYear:用于切换到上一年视图的按钮nextYear:用于切换到下一年视图的按钮 {left:'title',center:'',right:'todayprev,next'} theme 是否允许使用jquery的ui主题,如果设置为true,则需要加载jqueryui相关css和js文件。 查看演示 false buttonIcons 设置header中使用的prev,next等
当手工删除了归档日志以后,Rman备份会检测到日志缺失,从而无法进一步继续执行。所以此时需要手工执行crosscheck过程,之后Rman备份可以恢复正常。[执行顺序如下:手工删除archivelog--->crosscheck--->deleteexpired最后可以用listcopy检查]试验如下:1.Crosscheck日志RMAN>crosscheckarchivelogall;2、使用deleteexpiredarchivelogall命令删除所有过期归档日志:RMAN>deleteexpiredarchivelogall;3、使用listcopy查看RMAN>listcopy;4、简要介绍一下reportobsolete命令使用reportobsolete命令报告过期备份RMAN>reportobsolete;5.使用deleteobsolete命令删除过期备份: RMAN>deleteobsolete;也可以手工删除备份集,之后用如下命令同步删除过期的备份集合RMAN>crosscheckbackup;RMAN&g
打开CMD的方式 1.开始菜单+系统+命令提示 2.Win+R再输入cmd打开控制台 3.在资源管理器栏前面加上cmd路径(记得加空格) 常见的dos命令 记得所有的文字输入要将输入法切换成英文的 #盘符的切换相应的盘符的的名字+: #查看当前目录下的所有文件dir #切换目录cd+/d 注意:要是你要切换的目录是在当前目录内的,只需要cd+空格+目录名称就可以啦 cd..表示的是返回上一目录 cd/表示回到根目录 #清除屏幕cls #退出终端exit #查看电脑的ipipconfig #打开应用 calc计算器 mspaint画图软件 notepad记事本 #在cmd中粘贴是直接鼠标右击点一下就好 #ping命令(可以查看网站的ip) 如:ping+“空格”+网站 pingwww.baidu.com #创建文件夹md+空格+创建文件夹的名称 #创建文件cd+>+文件名称和相应的后缀 如cd>a.txt #删除文件夹之前先将文件删除rd+空格+文件夹名称 #删除文件del+空格+文件名称 复制
目录 导入:什么是插值?什么是拟合?插值 导入:什么是插值?什么是拟合? 假设我们现在通过做实验得到了一批数据点,但光有点我们还无法知道这些数据代表了什么,到底数据点之间存在线性关系还是指数关系,对这些我们一概不知。因此我们需要找到一些方法来对散点进行处理得到变量之间的关系曲线,这样我们才好分析。(PS:已经了解插值与拟合概念的读者可以点击目录下方链接到达感兴趣的部分) 假设小明同学正在做实验,他得到的实验原始数据为:x=1:1:17;y=[3.544.34.64.74.84.84.74.643.93.32.82.52.21.81.3],而他想知道数据x与y之间有什么关系,但遗憾的是,这位同学并没有什么特别的天赋能从数据中直接看出x和y之间的关系,那么怎样才能拥有这种“天赋”呢。 他很快想到了,虽然我们不能直接看出数据点之间的关系,但可以把这些点画在图上再观察啊!说干就干,小明立刻把数据点标在了图上。 好像还不是很直观,如果我们能根据数据点做出一条连续的线来那效果一定会更好,那么我们想办法将这些数据用线连起来吧。 既然是基于这些数据点来画图,那么我们来试试连点成线,先用直
题意 构造了一个数组,其中每相邻三个数(a,b,c)为一组,满足a<b<c,且abc==0,数组字典序最小并且没有重复的数 1e5组询问,问你第n项是多少,n<=1e15 思路 果断打表,每组分开看,发现单看a是一个第i组开头为\(4^{i-1}\),长度为\(4^{i-1}\)的序列 而b的规律就比较难看了,由于题目中的异或可以想到打下二进制的表 发现b的二进制中每两位与对应的a的二进制每两位呈映射关系 a与b:0对应0,1对应2,2对应3,3对应1 然后对于每次询问我们只需要O(30)得到a的值,继而可以得到b,c 代码 这种规律我是想不到的 llpo[55]; lls(intx){ if(x==0)return0; return(po[x]-1)/3; } intmain(){ intt; po[0]=1; for(inti=1;i<=31;i++)po[i]=po[i-1]*4; scanf("%d",&t); while(t--){ lln; scanf("%lld",&n); llid=(n+2)/3; llnow; for(inti
网络的工具类,url,方法名“POST/GET”二选一不填为GET,参数(POST才需要填) importjavax.net.ssl.*; importjava.io.BufferedReader; importjava.io.InputStream; importjava.io.InputStreamReader; importjava.io.OutputStream; importjava.io.UnsupportedEncodingException; importjava.net.URL; importjava.net.URLEncoder; importjava.security.cert.CertificateException; importjava.security.cert.X509Certificate; /** *访问网络用到的工具类 */ publicclassNetWorkHelper{ /** *发起Https请求 *@paramreqUrl请求的URL地址 *@paramrequestMethod *@return响应后的字符串 */ publicS