• Linux Shell相关记笔记


    Shell几个重点解释

    #! /bin/bash 脚本解释器,特定约定
    # 注释
    $a 值替换,`if [-n "$a"]` 替换变量a的值到字符串中进行比较
    '' 单引号,字符串限定,内部的内容不进行解析,只当作普通字符串
    "" 双引号,内部的内容不能识别命令,只进行变量的解析`$a`
    `` 反斜单引号(倒引号),内部命令会当作shell指令执行,然后组合其他字符组成最后的字符串。`test=`date +%F`; echo "Tody $test";`
    \ 转义字符,与C类似
    {} 大括号,与$配合来连接字符串。`$a; ${a};` 一般是等价的。
    () 小括号,命令组,命令替换,初始化数组
    [] 中括号,一般用来进行流控,`if []; then fi`
    ; 分号,同一行的不同语句,与C类似。
    = 变量定义,等号两边不能有空格。`a="abc"`
        由于变量使用弱类型,所以`a=xyz; a='xyz'; a="xyz";`表达的结果一致。如果式数字,不使用引号
        但是有单引号双引号等的区别,建议一般情况时使用双引号,防止出现意外的结果。
        变量赋值时,不用加引号`a="123"; b=a;`
        变量获取`v1=$(pwd); v2=`pwd`; ` 
    unset v1; 删除变量
    
    $0 当前脚本文件名
    $n(n>=1) 传入脚本/函数的第n个参数
    $# 传入的参数个数
    $* 以一个单字符串显示所有向脚本传递的参数
    $@ 与$*类似,一般加双引号, 但是它将每个参数单独显示,而$*把所有参数当作一个显示
    $? 显示最后命令的退出状态或者函数的返回值,0表示没有错误
    $$ 脚本运行的当前进程号
    
    ${#a} 获取字符串a的长度
    ${a:1:2} 字符串a第二哥开始,长度为2的子字符串
    
    a=("1" "3" "a") 定义一个数组,空格为分隔符
    ${a[1]} / ${a[@]} / ${a[*]} 获取数组的元素
    ${#a[@]} 获取数组长度
    
    :<
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95

    环境变量

    Shell中存在三种变量:

    1. 局部变量,脚本中定义使用的
    2. Shell变量,shell程序自己设定的特殊变量
    3. 系统环境变量,是由操作系统提供,在shell启动时,加载到shell变量中。

    按变量的 生存周期 来划分:

    • 永久环境变量:在环境变量脚本文件中配置,变量永久生效,用户每次登录时会自动执行这些脚本。
    • 临时环境变量:在 Shell 中临时定义的,使用 export 命令声明,变量在关闭 shell 时失效。

    按变量的 生效范围 来划分:

    • 系统环境变量:公共的,对全部的用户都生效。
    • 用户环境变量:用户私有的,只对该用户生效。

    一些常用的环境变量:

    PATH :可执行程序的搜索目录,决定了shell 将到哪些目录中寻找命令或程序
    HOME :当前用户主目录
    USER :当前登录用户的用户名
    HISTSIZE  :保存历史命令的数目
    LOGNAME :当前用户的登录名
    HOSTNAME :指主机的名称
    SHELL :当前用户 Shell 解析器
    LANG :Linux系统的语言、地区、字符集
    LANGUGE  :语言相关的环境变量,多语言可以修改此环境变量

    在 Linux 中,与环境变量有关的文件如下:

    • 全局配置
    • /etc/profile
      全局配置,所有用户登录时都会读取该文件。
      登录用户以后重新打开终端吗,这个/etc/profile不会再执行。意思就是登录以后临时在这个文件里面添加的变量,需要重启重启生效或者手动执行 source /etc/profile
    • /ect/bashrc
      全局配置,所有用户登录时都会读取该文件,该文件配置的环境变量将会影响全部用户使用的bash shell ,不管是何种方式执行 bash ,都会读取此文件。
      Ubuntu没有此文件,与之对应的是/ect/bash.bashrc
      登录用户以后重新打开终端吗,这个/ect/bash.bashrc还会执行。开一次终端就执行一次,意思就是登录以后临时在这个文件里面添加的变量,重新打开终端就能立即生效。
    • /etc/profile.d目录
      /etc/profile在每次启动时会执行 /etc/profile.d下全部的脚本文件。
    • 用户配置
    • ~/.profile
      当前用户登录的时候执行,若 bash 是以 login 方式执行时,读取~/.bash_profile,若它不存在,则读取 ~/.bash_login,若前两者不存在,读取~/.profile
      另外,图形模式登录时,此文件将被读取,即使存在~/.bash_profile~/.bash_login
      登录用户以后重新打开终端吗,这个~/.profile不会再执行,同上面/etc/profile类似理解。
    • ~/.bash_login
      若 bash 是以 login 方式执行时,读取~/.bash_profile,若它不存在,则读取~/.bash_login,若前两者不存在,读取~/.profile
    • ~/.bash_profile
      当用户登录时执行,每个用户都可以使用该文件来配置专属于自己的环境变量。
      只有 bash 是以 login 形式执行时,才会读取此文件。通常该配置文件还会配置成去读取~/.bashrc
      Ubuntu 没有此文件。
    • ~/.bashrc
      当用户登录时以及每次打开新的Shell时该文件都将被读取。
      当 bash 是以 non-login 形式执行时,读取此文件。若是以 login 形式执行,则不会读取此文件。
      登录用户以后重新打开终端吗,这个~/.bashrc还会执行。开一次终端就执行一次,同上面/ect/bashrc类似理解。
    • ~/.bash_logout
      当每次退出系统(退出bash shell)时执行该文件。
      注销时,且是 longin 形式,此文件才会读取。也就是说,在文本模式注销时,此文件会被读取,图形模式注销时,此文件不会被读取。

    shell 执行顺序

    根据不同的登录模式,Shell 的执行顺序也有一定的区别,一般情况如下:

    1. 图形模式登录:/etc/profile —>~/.profile
    2. 图形模式登录后,打开终端时,读取顺序:/etc/bash.bashrc—>~/.bashrc
    3. 文本模式登录时:/etc/bash.bashrc—>/etc/profile—>~/.bash_profile
      凡是读取到~/.bash_profile的,若该文件不存在,则读取~/.bash_login,若前两者不存在,读取~/.profile

    ❤️ 结合我们上面的文件程序,我们可以得出来,在我使用的虚拟机 Ubuntu 上的 Shell 脚本执行顺序为:

    /etc/profile—>/etc/bashrc—>/etc/profile.d—>~/.profile—>~/.bashrc

    dpkg 工具

    dpkg 工具,Ubuntu 底层的包管理工具,主要用于对已下载到本地和已经安装的deb包进行管理。

    这个工具记住他的使用就可以,他的常用命令如下:

    安装软件: dpkg -i xxxx.deb
    查看安装目录:dpkg -L xxxx   #使用此命令不需要加.deb后缀,下面没有后缀的相同
    显示版本:dpkg -l xxxx
    查找包的详细信息:dpkg -s xxxx
    列出deb包的内容:dpkg -c xxxx.deb
    卸载软件(保留配置):dpkg -r xxxx
    卸载软件(不保留配置):dpkg -P xxxx
    解开 deb 包的内容 :dpkg –unpack xxxx.deb
    配置包:dpkg –configure xxxx
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    apt 是新版的包管理工具,解决apt-get命令过于分散的问题。
    简单来说就是:apt = apt-get、apt-cache 和 apt-config 中最常用命令选项的集合。
    apt 可以看作 apt-get 和 apt-cache 命令的子集, 可以为包管理提供必要的命令选项。
    apt-get 命令同上面 dpkg 一样记住使用就可以,他的常用命令如下:

    更新源文件,并不会做任何安装升级操作:apt-get update						
    升级所有已安装的包 :apt-get upgrade					
    安装指定的包:apt-get install packagename		
    仅升级指定的包:apt-get install packagename --only-upgrade		
    重新安装包:apt-get install packagename --reinstall   		
    修复安装:apt-get -f install   					
    安装相关的编译环境:apt-get build-dep packagename				
    下载该包的源代码:apt-get source packagename  				
    升级系统:apt-get dist-upgrade 					
    使用 dselect 升级:apt-get dselect-upgrade 				
    删除包(不删除配置文件) :apt-get remove packagename				  
    删除包(删除配置文件):apt-get remove packagename -- purge 			
    清理无用的包:apt-get clean 						  
    清理无用的包:apt-get autoclean 					 
    检查是否有损坏的依赖:apt-get check 		
    查询指定的包 :apt-cache search packagename 				 
    显示包的相关信息:apt-cache show packagename 				
    使用该包依赖哪些包:apt-cache depends packagename 		
    查看该包被哪些包依赖:apt-cache rdepends packagename 				
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    磁盘管理

    `df -h -T` 输出硬盘使用状况和类型
    `du -h --max-depth=1` 查看文件夹下文件夹大小
    `lsblk` 列出所有磁盘情况
    `fdisk -l` 打印硬盘硬件详细信息
    `cat /proc/partitions` 查看磁盘分区blocks
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
  • 相关阅读:
    自然语言处理(NLP)技术介绍
    芒果YOLOv8改进104:主干Backbone篇之DCNv3结构:即插即用|使用pytorch代码实现,并针对YOLOv8专门优化模块
    Linux内核代码分析集合(持续更新中)
    【C#】使用Windows窗体实现链接跳转功能
    大学生抗疫逆行者网页作业 感动人物HTML网页代码成品 最美逆行者dreamweaver网页模板 致敬疫情感动人物网页设计制作
    RGB转Bayer,一个小数点引发的血案
    【Redis】List列表相关的命令
    永磁同步电机谐波抑制算法(7)——基于自适应陷波(adaptive notch filter,ANF)的精确谐波电流抑制策略
    【数据库】事务与并发控制
    【LeetCode 150】逆波兰式求值
  • 原文地址:https://blog.csdn.net/bbdxf/article/details/126246271