Linux命令之env的用法
Linux命令之env的⽤法
今天咱们来学⼀下Linux家族中的⼀个成员----env(确认过眼神,这就是我学过的那个单词environment的简写,我记得我写了⼋百遍才记住的)。
env命令⽤于显⽰系统中已存在的环境变量,以及在定义的环境中执⾏指令。该命令只使⽤"-"作为参数选项时,隐藏了选项"-i"的功能。若没有设置任何选项和参数时,则直接显⽰当前的环境变量。
env是显⽰当前⽤户的环境变量。你可以在shell 命令⾥⾯键⼊ env试试。跟环境变量有关的还有:set 显⽰当前shell的变量,包括当前⽤户的变量,export 显⽰当前导出成⽤户变量的shell变量
分析:
set = 当前⽤户变量(evn)+ 当前shell独有的变量
⽽export可以把当前shell独有的变量 变成 ⽤户变量,例如:
在PATH变量⾥⾯加⼊:/sbin
1. $export PATH=$PATH:/sbin
#⼀般会把此命令加⼊到.bashrc⽂件中,再⽤source执⾏,这样当前shell就⽣效了。
提⾼部分:
.bashrc和.bash_profile区别
.bash_profile会⽤在login shell.bashrc 使⽤在interactive non-login shell
使用Goenv命令设置Go的环境
使⽤Goenv命令设置Go的环境
前⾔
在进⾏Go开发的时候,设置Go的环境变量信息是必须的。下⾯介绍windows和Linux,以及Go⾃⾝提供的命令进⾏设置的形式
Linux的设置
In Linux or macOS, you can execute the below commands.(在Linux或者macOS,你可以执⾏下⾯的命令)
# Enable the go modules feature
export GO111MODULE=on
# Set the GOPROXY environment variable
export GOPROXY=https://goproxy.io
但是这种有个不好的地⽅,就是如果换⼀个终端或者重新开机,就没有了。那么我推荐,在/etc/profile.d/这个⽂件夹下⾯,写⼀个go.sh⽂件,把上⾯两句抄上就⾏。当然,你也可以只给⾃⼰当前的登录⽤户使⽤,那就设置⾃⼰的profile的加载.
那就是这俩⽂件:.bashrc或者.bash_profile⽂件(Or, write it into the .bashrc or .bash_profile file.)
复制代码
Windlows设置
In Windows, you can execute the below commands.(在Windlows中,你可以执⾏下⾯的命令)
# Enable the go modules feature
$env:GO111MODULE="on"
# Set the GOPROXY environment variable
$env:GOPROXY="https://goproxy.io"
注意:不过我还是建议使⽤:我的电脑-->属性--->环境变量 这种操作来进⾏配置
复制代码
Go version >= 1.13 当你的GO的版本⼤于1.13的时候
当你安装的GO的语⾔版本⼤于1.13的时候,那么就不⽤这么⿇烦了,直接使⽤go env -w命令就⾏了
浅谈export以及环境变量
浅谈export以及环境变量
简要说⼀下env,set,export的区别:env命令显⽰环境变量,set和export显⽰环境变量和⾃定变量.
export:可以讲⾃定变量转化为环境变量之前有⼀个疑惑,我们定义环境变量PATH时习惯性的前⾯加⼀个export ,但是后来我测试不加
export直接定义环境变量也会在export⾥⾯存在,经过查看资料研究才发现,系统的环境变量具有继承性,设置环境变量时不加export也会继
承下去,但是⾃定变量就不⼀样了.必须前⾯加上export(或者declare -x 变量名)才具有继承性.具体原因如下:当你登⼊ Linux 并取得⼀个bash 之后,你的 bash 就是⼀个独⽴的程序,这个程序的识别使⽤的是⼀个称为程序识别码,被称为 PID . 接下来你在这个 bash 底下所下
达的任何指令都是由这个 bash 所衍⽣出来的,那些被下达的指令就被称为⼦程序了。 我们在原本的 bash 底下执⾏另⼀个 bash ,结果操
作的环境介⾯会跑到第⼆个 bash 去(就是⼦程序), 那原本的 bash 就会在暂停的情况 (睡著了,就是 sleep)。若要回到原本的 bash 去, 就
只有将第⼆个 bash 结束掉 (下达 exit 或 logout) 才⾏。
这个程序概念与变数有啥关系啊?关系可⼤了!因为⼦程序仅会继承⽗程序的环境变数, ⼦程序不会继承⽗程序的⾃订变数啦!所以你在原
本 bash 的⾃订变数在进⼊了⼦程序后就会消失不见, ⼀直到你离开⼦程序并回到原本的⽗程序后,这个变数才会⼜出现!
换个⾓度来想,也就是说,如果我能将⾃订变数变成环境变数的话,那不就可以让该变数值继续存在于⼦程序了? 呵呵!没错!此时,那个export 指令就很有⽤啦!那么如何将环境变量转化为⾃定变量呢declare +x 变量名即可 (其实export +变量 =declare -x 变量名)
具体例⼦如下 :⾃定变量 [root@qike ~]# a=b[root@qike ~]# echo $a
Linux系统编程之进程控制(进程创建、终止、等待及替换)
Linux系统编程之进程控制(进程创建、终⽌、等待及替换)
进程创建
在上⼀节讲解进程概念时,我们提到fork函数是从已经存在的进程中创建⼀个新进程。那么,系统是如何创建⼀个新进程的呢?这就需要我们更深⼊的剖析fork
函数。1.1 fork函数的返回值
调⽤fork创建进程时,原进程为⽗进程,新进程为⼦进程。运⾏man fork后,我们可以看到如下信息:#include
pid_t fork(void);
fork函数有两个返回值,⼦进程中返回0,⽗进程返回⼦进程pid,如果创建失败则返回-1。
实际上,当我们调⽤fork后,系统内核将会做:
分配新的内存块和内核数据结构(如task_struct)给⼦进程
将⽗进程的部分数据结构内容拷贝⾄⼦进程
添加⼦进程到系统进程列表中fork返回,开始调度
1.2 写时拷贝
在创建进程的过程中,默认情况下,⽗⼦进程共享代码,但是数据是各⾃私有⼀份的。如果⽗⼦只需要对数据进⾏读取,那么⼤多数的数据是不需要私有的。这
⾥有三点需要注意:
第⼀,为什么⼦进程也会从fork之后开始执⾏?
因为⽗⼦进程是共享代码的,在给⼦进程创建PCB时,⼦进程PCB中的⼤多数数据是⽗进程的拷贝,这⾥⾯就包括了程序计数器(PC)。由于PC中的数据是即
将执⾏的下⼀条指令的地址,所以当fork返回之后,⼦进程会和⽗进程⼀样,都执⾏fork之后的代码。
第⼆,创建进程时,⼦进程需要拷贝⽗进程所有的数据吗?
⽗进程的数据有很多,但并不是所有的数据都要⽴马使⽤,因此并不是所有的数据都进⾏拷贝。⼀般情况下,只有当⽗进程或者⼦进程对某些数据进⾏写操作时,操作系统才会从内存中申请内存块,将新的数据拷写⼊申请的内存块中,并且更改页表对应的页表项,这就是写时拷贝。原理如下图所⽰:
第三,为什么数据要各⾃私有?
这是因为进程具有独⽴性,每个进程的运⾏不能⼲扰彼此。1.3 fork函数的⽤法及其调⽤失败的原因
fork函数的⽤法:
⼀个⽗进程希望复制⾃⼰,通过条件判断,使⽗⼦进程分流同时执⾏不同的代码段。例如,⽗进程等待客户端请求,⽣成⼦ 进程来处理请求。
Linux课程笔记用户身份切换命令
Linux课程笔记⽤户⾝份切换命令
超级⽤户root具有超级管理权限,由于权限太⼤,如果管理不好,就会对系统安全带来安全隐患。在⼯作场景中,⼀般临时性处理⼯作,都是以普通⽤户的⾝份完成,只在必要时才使⽤超级⽤户root。
1 su命令
1.1 su介绍
通过su命令可以在⽤户之间切换,超级⽤户root向普通⽤户或虚拟⽤户切换不需要密码(这就是超极权限所在)。其他普通⽤户之间或者普通⽤户切换到root,都需要切换⽤户的秘密验证。
su参数选项注释说明-,-l,--login使⼀个shell成为登陆的shell,如执⾏su - oldboy,表⽰该⽤户改变⾝份为oldboy,并且使⽤oldboy⽤户的环境变量配置。-c,--command=COMMAND切换到⼀个shell下,执⾏⼀个命令,然后退出所切换的⽤户环境-m,--presserve-environment切换⽤户时,不重置⽤户环境变量,-p的功能同-m,这个参数为su的默认值,较少使⽤-s,--shell=SHELL如果/ec/shell允许,则运⾏指定的shell
su实例:
[qinbf@qinbf ~]$ whoami
qinbf
[qinbf@qinbf ~]$ su - #输⼊的是root的密码
⼝令:[root@qinbf ~]# whoami
root
[root@qinbf ~]# env
HOSTNAME=qinbf
SHELL=/bin/bash
TERM=linux
HISTSIZE=1000
USER=root
……
PWD=/root
LANG=zh_CN.UTF-8
SHLVL=1
HOME=/root
LOGNAME=root
[root@qinbf ~]# su - qinbf
[qinbf@qinbf ~]$ whoami
qinbf
[qinbf@qinbf ~]$ env
HOSTNAME=qinbfHOSTNAME=qinbf
SHELL=/bin/bash
linuxset命令详解
linux set命令详解
set命令是linux系统下的一个命令,那它有什么用处呢?下面由店铺为大家整理了linux系统下set命令的相关知识,希望大家喜欢!
linux set命令
功能说明:设置shell。
语法:set [+-abCdefhHklmnpPtuvx]
补充说明:用set 命令可以设置各种shell选项或者列 出shell变量.单个选项设置常用的特性.在某些选项之后-o参数将特殊特性打开.在某些选项之后使用+o参数将关闭某些特性,不带任何参数的set命 令将显示shell的全部变量.除非遇到非法的选项,否则set总是返回ture.
参数:
allexport -a 从设置开始标记所有新的和修改过的用于输出的变量
braceexpand -B 允许符号扩展,默认选项
emacs 在进行命令编辑的时候,使用内建的emacs编辑器, 默认选项
errexit -e 如果一个命令返回一个非0退出状态值(失败),就退出.
histexpand -H 在做临时替换的时候允许使用!和!! 默认选项
history 允许命令行历史,默认选项
ignoreeof 禁止coontrol-D的方式退出shell,必须输入exit。
interactive-comments 在交互式模式下, #用来表示注解
keyword -k 为命令把关键字参数放在环境中
monitor -m 允许作业控制
noclobber -C 保护文件在使用重新动向的时候不被覆盖
noexec -n 在脚本状态下读取命令但是不执行,主要为了检查语法结构。
noglob -d 禁止路径名扩展,即关闭通配符
notify -b 在后台作业以后通知客户
nounset -u 在扩展一个没有的设置的变量的时候, 显示错误的信息 onecmd -t 在读取并执行一个新的命令后退出
physical -P 如果被设置,则在使用pwd和cd命令时不使用符号连接的路径 而是物理路径
linux查看系统资源命令
linux查看系统资源命令
lsof -n | grep log
lsof -p 进程id 能看到这个进程加载了哪些资源,连接了哪些⽂件,⾃⼰⽹络链接
虽然平时⼤部分⼯作都是和Java相关的开发, 但是每天都会接触Linux系统, 尤其是使⽤了Mac之后, 每天都是⼯作在⿊⾊背景的命令⾏环境中. ⾃⼰记忆⼒不好, 很多有⽤的Linux命
令不能很好的记忆, 现在逐渐总结⼀下, 以便后续查看.
基本操作
Linux关机,重启
# 关机
shutdown -h now
# 重启
shutdown -r now
查看系统,CPU信息
# 查看系统内核信息
uname -a
# 查看系统内核版本
cat /proc/version
# 查看当前⽤户环境变量
env
cat /proc/cpuinfo
# 查看有⼏个逻辑cpu, 包括cpu型号
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
# 查看有⼏颗cpu,每颗分别是⼏核
cat /proc/cpuinfo | grep physical | uniq -c
# 查看当前CPU运⾏在32bit还是64bit模式下, 如果是运⾏在32bit下也不代表CPU不⽀持64bit
getconf LONG_BIT
# 结果⼤于0, 说明⽀持64bit计算. lm指long mode, ⽀持lm则是64bit
cat /proc/cpuinfo | grep flags | grep ' lm ' | wc -l
建⽴软连接
ln -s /usr/local/jdk1.8/ jdk
rpm相关
# 查看是否通过rpm安装了该软件
rpm -qa | grep 软件名
sshkey
# 创建sshkey
ssh-keygen -t rsa -C your_email@
#id_rsa.pub 的内容拷贝到要控制的服务器的 home/username/.ssh/authorized_keys 中,如果没有则新建(.ssh权限为700, authorized_keys权限为600)
Linux里设置环境变量的方法(exportPATH)
Linux⾥设置环境变量的⽅法(exportPATH)
1.动态库路径的设置
Linux下调⽤动态库和windows不⼀样.linux 可执⾏程序是靠配置⽂件去读取路径的,因此有些时候需要设置路径 具体操作如下export LD_LIBRARY_PATH=/home/.....(动态库的⽬录)
不过这种设置⽅法只是在当前的session中有效
你可以修改配置⽂件实现任何session都有效
2.环境变量的设置
⼀般来说,配置交叉编译⼯具链的时候需要指定编译⼯具的路径,此时就需要设置环境变量。例如我的mips-linux-gcc编译器在“/opt/au1200_rm/build_tools/bin”⽬录下,build_tools就是我的编译⼯具,则有如下三种⽅法来设置环境变量:
2.1、直接⽤export命令:
#export PATH=$PATH:/opt/au1200_rm/build_tools/bin 查看是否已经设好,可⽤命令export查看: 可以看到,环境变量已经设好,PATH⾥⾯已经有了我要加的编译器的路径。
2.2、修改profile⽂件:
#vi /etc/profile 在⾥⾯加⼊: export PATH="$PATH:/opt/au1200_rm/build_tools/bin"
让环境变量⽴即⽣效需要执⾏如下命令:#source /etc/profile
2.3. 修改.bashrc⽂件:
# vi /root/.bashrc 在⾥⾯加⼊: export PATH="$PATH:/opt/au1200_rm/build_tools/bin"
后两种⽅法⼀般需要重新注销系统才能⽣效,最后可以通过echo命令测试⼀下: # echo $PATH 看看输出⾥⾯是不是已经有了/my_new_path这个路径了。 -----------------------------------------------------------------------------------
setenv函数
- 1 - setenv函数
setenv函数是UNIX/Linux系统中环境变量设置的一种重要方式。它的定义是用于设置或修改指定的环境变量。它也可以用来检查给定名称的环境变量是否存在,并且返回该变量的值。
setenv函数最常见的用途是用来设置环境变量。它用于设置一个新的环境变量,或修改一个既有的环境变量的值。为了使改变对所有进程都有效,必须使用setenv来更新环境变量。
它的使用方法是,首先找到您想要添加或修改的环境变量的名称,然后指定它的值,最后使用setenv函数来设置环境变量。其格式是:
int setenv(const char *name, const char *value, int
overwrite);
其中,name参数指定要设置的环境变量的名称,value参数指定要设置的环境变量的值,overwrite参数指示是否覆盖已有环境变量的值。如果overwrite参数被设置为0,则设置新的环境变量。如果overwrite参数被设置为1,则修改已有的环境变量的值。
setenv函数返回0表示成功,返回-1表示失败。
除了设置环境变量,setenv函数还可以用来检查给定名称的环境变量是否存在,并且返回该变量的值。使用setenv函数检查环境变量的方式类似于设置环境变量的方式,只是不设置overwrite参数,如果该变量存在,则返回变量的值,否则返回NULL。 - 2 - 下面是一个setenv函数的实例,该实例用于以指定名称设置一个环境变量:
#include
int main()
{
setenv(TEST_VAR 123456 0);
printf(TEST_VAR=%s
getenv(TEST_VAR);
return 0;
}
以上程序首先使用setenv函数设置TEST_VAR变量,其值为“123456”,然后使用getenv函数输出TEST_VAR变量的值。
【IT专家】linux查看硬件和系统信息的相关命令简介
本文由我司收集整编,推荐下载,如有疑问,请与我司联系linux查看硬件和系统信息的相关命令简介
2011/11/05 0 [root@smile.gelila ~] # uname -a # 查看内核/操作系统/CPU信息
的linux系统信息命令[root@smile.gelila ~] # head -n 1 /etc/issue # 查看操作系统版
本,是数字1不是字母L[root@smile.gelila ~] # cat /proc/cpuinfo # 查看CPU信息的
linux系统信息命令[root@smile.gelila ~] # hostname # 查看计算机名的linux系统信
息命令[root@smile.gelila ~] # lspci -tv # 列出所有PCI设备[root@smile.gelila ~] #
lsusb -tv # 列出所有USB设备的linux系统信息命令[root@smile.gelila ~] # lsmod #
列出加载的内核模块[root@smile.gelila ~] # env # 查看环境变量资源
[root@smile.gelila ~] # free -m # 查看内存使用量和交换区使用量[root@smile.gelila ~]
# df -h # 查看各分区使用情况[root@smile.gelila ~] # du -sh # 查看指定目录的大小
[root@smile.gelila ~] # grep MemTotal /proc/meminfo # 查看内存总量
[root@smile.gelila ~] # grep MemFree /proc/meminfo # 查看空闲内存量
[root@smile.gelila ~] # uptime # 查看系统运行时间、用户数、负载[root@smile.gelila
~] # cat /proc/loadavg # 查看系统负载磁盘和分区[root@smile.gelila ~] # mount |
Linux命令行中的环境变量导出和导入技巧
Linux命令行中的环境变量导出和导入技巧
一、导出环境变量
在Linux命令行中,我们经常需要设置环境变量来指定程序的执行路径或配置其他相关信息。而导出环境变量则是将这些变量设置为全局可用,使得其他程序或命令能够访问和使用这些变量。
要导出环境变量,可以使用以下命令:
export VARIABLE_NAME=value
其中,VARIABLE_NAME是要导出的环境变量的名称,value是该变量的值。例如,我们要导出一个名为PATH的环境变量,用于指定程序的执行路径,可以使用以下命令:
export PATH=/usr/local/bin:$PATH
这样,我们就将/usr/local/bin目录添加到了PATH环境变量中,并使其成为全局可用的变量。
二、导入环境变量
除了手动导出环境变量,我们还可以从外部文件导入环境变量。这对于配置多个环境变量或在不同的环境中使用相同的配置非常有用。
1. 使用source命令导入环境变量
要导入环境变量,我们可以使用source命令,并指定一个包含环境变量的文件。例如,我们有一个名为env.sh的文件,其中包含了多个环境变量的定义,可以使用以下命令导入这些变量: source env.sh
通过这种方式,我们可以一次性导入多个环境变量,而无需逐个手动导出。
2. 将环境变量写入~/.bashrc或~/.bash_profile文件
另一种常见的导入环境变量的方式是将其写入用户主目录下的.bashrc或.bash_profile文件中。这样,在每次登录时,这些文件会自动加载,从而导入相应的环境变量。
首先,打开一个文本编辑器,并添加以下内容到.bashrc文件中:
export VARIABLE_NAME=value
保存并关闭文件后,使用以下命令使更改生效:
source ~/.bashrc
同样地,我们也可以将环境变量写入.bash_profile文件中,不过需要注意的是,这个文件只在用户登录时加载一次。
