ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

Linux shell和环境变量

2022-06-04 20:04:05  阅读:204  来源: 互联网

标签:shell 命令 Linux 进程 全局变量 环境变量 bash


目录

环境变量

存储有关shell会话和工作环境信息;允许在内存中存储数据。

定义时什么时候要用$ 什么时候不用$:用到变量,需要$;操作变量,不需要$。printenv除外

分为两类:
全局变量:对shell会话及所有生成子shell都可见。局部变量只对创建它们的shell可见
系统环境变量都是大写字母,区别于普通用户的环境变量

全局变量:

查看命令:envprintenv;
显示个别环境变量的值 用printenvecho $NAME

image.png

image.png

局部变量:

没有查看所有局部变量的命令。set命令显示某个特定进程设置的所有环境变量,包括局部、全局、用户自定义变量
image.png

设置用户定义变量

局部用户定义变量

启动一个shell,创建这个shell进程中局部可见的环境变量。

  • 注意用小写字母,避免大写字母和系统环境变量冲突。同个shell中bash创建子shell,仍然可用。新shell不可用。
  • 等号给环境变量赋值,值可以是数值或字符串。
  • 变量名 等号 值 之间不能有空格!否则空格后的值会看做一个单独命令!
  • 子shell不能使用父shell的局部变量
    image.png

全局用户定义变量

  • 先创建一个局部环境变量,然后导入全局变量中
  • export命令,不需要$符号
  • 子shell仍然可用全局变量,子shell中修改并导出不会影响父shell
    image.png

删除环境变量

unset命令,操作时不用$

  • 删除局部环境变量
    image.png
  • 删除全局环境变量,必须在创建全局变量的shell中操作,子shell不影响父shell
    image.png

默认的shell环境变量

默认系统环境变量-表格查阅

设置PATH环境变量

PATH定义用于命令和程序查找的目录,用冒号分割。
image.png

  • 要执行的命令或程序不在这些目录下,无法直接执行(除非绝对路径)
  • 暂时添加:这几种方式退出shell或重启就失效了(持久化见下一节)
  • 添加新目录到现有PATH中 PATH=$PATH:/new/document
  • 将单点符 . 加入PATH环境变量,就可以直接在某个目录下直接执行文件,不需要./ 了
    image.png

定位系统环境变量

启动文件或环境文件启动一个bash shell时,bash会在几个文件中查找命令,这几个文件就是启动文件环境文件
bash检查的启动文件,取决于启动bash shell的方式。有三种:

  • 登录时作为默认登录shell
  • 作为非登录shell的交互式shell
  • 作为运行脚本的非交互shell

1.登录shell

登录启动的bash shell,会从5个启动文件中读取命令:$HOME表示用户主目录,和~作用一样

  • /etc/profile : 主启动文件。每个用户登录时都会执行这个启动文件
  • $HOME/.bash_profile :另外四种是针对用户的,可个人定制
  • $HOME/.bashrc
  • $HOME/.bash_login
  • $HOME/.profile

2.交互式shell进程

命令行输入bash 就是一个交互式shell
这种启动的bash shell,不会访问/etc/profile文件,只检查用户HOME目录中的.bashrc文件

3.非交互式shell

系统执行shell脚本时的shell,没有命令提示符
printenv BASH_ENV 检查启动文件。也会继承父shell的局部和全局变量(父可以是前面的两种:登录shell或交互shell)

4.环境变量持久化

1.全局变量
全局变量可以放在/etc/profile中,但是升级版本之后,这个文件会更新,所有定制过的变量会消失
最好在/etcprofile.d目录中创建一个.sh结尾的文件,把新的全局变量设置放在这里
2.个人用户的bash shell变量
$HOME/.bashrc文件中设置
3.持久化例子

环境变量可以作为数组使用

给某个环境变量设置多个值,用() 中间用空格分割:
mytest=(one two three)
访问单个元素必须用索引值,用{}括起来
显示所有数组值echo $mytest{*}
image.png

shell常用命令

进程相关

ps

这个命令支持三种不同类型的命令行参数:
-ef - 这个符号 Unix风格
aux 无 - BSD风格
--forest -- GNU风格长参数

ps -ef 或 ps aux -p参数指定pid
进程树方式 ps -ejH | grep ptsps --forestpstree
image.png
可以混合使用
image.png

top

实时监测进程

  • 第一行:时间、平均负载(1min 5min 15min内的),一般超过2系统有问题
  • 第二行:进程概要,task 处于运行、休眠、停止 或 僵化(进程完成了但是父进程没有响应)
  • 第三行 cup概要
  • 后面两行:系统内存状态,物理内存 和 系统交换空间
  • 最后:进程详细列表,默认按照%cpu倒序。关注 %cpu进程使用的CPU时间比例 和 %mem 进程内存占可用内存的比例
    image.png
    image.png

kill

linux中,进程之间通过信号来通信,kill -l查看所有信号
kill PID结束某个PID进程,必须是PID
killall http* 可以用进程名来结束进程-小心别误删
image.png
image.png

获取dhcp

sudo dhclient ens33获取网卡动态地址,在ip addr网卡没有ip可用时

磁盘容量

mount / umount 挂载/卸载命令

Linux文件系统把所有磁盘并入一个虚拟目录下。使用新存储媒体前,需要放到虚拟目录下,这个过程叫作挂载。
可移动存储媒体:CD-ROM、软盘、U盘 通常都能自动挂载,mount手动挂载
mount显示当前设备挂载列表;

  • 设备文件名
  • 挂载到虚拟目录的挂载点
  • 文件系统类型
  • 已挂载媒体的访问状态

常见文件系统类型,如果和Windows PC共用存储设备,通常使用以下:

  • vfat:Windows长文件系统,大多数U盘格式化的系统
  • ntfs: Windows NT、XP、Visa 及 Win7 中广泛使用的高级文件系统
  • iso9660 标准 CD-ROM文件系统
    image.png

df -h

所有已挂载磁盘的使用情况

du -h

特定(当前)目录下的磁盘使用情况

常用数据处理命令

排序sort -t分割 -k分割后顺序 -n按字符串数值大小 -r反序

sort -t ':' -k 3 -n /etc/passwd /etc/passwd 中根据用户ID数值排序
image.png
du 命令磁盘占用大小降序输出du -sh * | sort nr
image.png

搜索 grep

bash中可用命令行参数

  • -c string 从string中读取命令处理
  • -i 启动接收用户输入的交互shell
  • -l 以登录shell形式启动
  • -r 用户会受限在默认目录中
  • -s 从标准输入中读取命令

进程列表

(pwd ; ls ; cd /etc ; ls ; echo $BASH_SUBSHELL) 这是进程列表,会生成一个子shell执行命令

后台模式

命令结尾用&

jobs -l查看后台模式的进程

进程列表置入后台

(ls;cd /etc;pwd;ls)&

协程 coproc

在后台生成子shell,在子shell中执行命令
coproc My_Job { sleep 10;}

shell内建命令

外部命令(文件系统命令)

存在于bash shell之外的程序,通常存在于/bin /usr/bin /sbin /usr/sbin文件中,用whichtype -a命令找到
外部命令执行会创建一个子进程来执行(衍生),消耗大

内建命令

不需要创建子进程来执行,是shell工具的一部分,消耗小

命令别名 alias

alias -p查看系统已设置的; alias li='ls -li' 创建自己的命令别名,但是需要加入永久的环境变量才有用。
--color选项表名终端支持彩色模式的列表
image.png

标签:shell,命令,Linux,进程,全局变量,环境变量,bash
来源: https://www.cnblogs.com/echoonly/p/16342567.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有