type
date
status
slug
summary
tags
category
password
icon
😀
学习Shell(Bash): 认识Linux的第一步。

Shell变量的设置与使用

变量的显示

变量的设置规则

这里近记录几条重要且不熟悉的用法:
  • 在一串命令的执行中,还需要借由其他额外的命令所提供的的信息时,可以使用反单引号[`命令`]或者【$(命令)】。
  • 若需要该变量在其他子程序中执行,需要以export来使变量成为环境变量:export PATH.
  • 取消变量的方法为实用unset: unset 变量名
几个特殊的范例:

给变量设置默认值

环境变量

查看shell环境中默认的环境变量

用env观察环境变量

env(environment)

关键环境变量解释

  • HOME: 代表用户的根目录, 例如cd 命令就会用到这个变量。
  • SHELL: 代表目前实用SHELL的程序。
  • PATH: 执行文件的查找路径,目录与目录中间以冒号隔开,由于文件的查找是依序由PATH的变量内的内容的目录来查询,所以,目录的顺序也是重要的。
  • LANG: 语系数据,在解析文本文件是会用到,很重要,有时候需要手动调整。

用set观察所有变量(包括环境变量和自定义变量)

bash不只有环境变量,还有一些与bash操作界面有关的变量,以及用于自定义变量。
$ set
在Linux默认的情况中,实用{大写字母}来设置的变量一般为系统内定需要的变量。

关键变量解释

  • PS1: 提示字符设置
  • $: 关于本shell的PID。美元符号本身也是个变量,其代表目前这shell的进程号即PID(Process ID).因此你可以实用echo $$来获取你的进程号。
  • ?: 上个执行命令的返回值。一般来说,如果成功执行一条命令,则会返回0值,否则返回非0.

    自定义变量转成环境变量

    环境变量与自定义变量的区别在于:该变量是否会被子进程所继续引用。
    共享自己的变量设置给后来调用的文件或其他使用。
    如果仅执行export,则会将所有的环境变量输出出来。

    Bash shell 的操作环境

    命令查找及运行顺序:
    1. 以相对/绝对路径执行命令,例如【/bin/ls】或【./ls】;
    1. 由alias找到该命令来执行;
    1. 由bash内置的(builtin)命令来执行;
    1. 通过$PATH顺序查找到的第一个命令来执行。

    Bash的环境配置文件

    当我们进入bash的时候,系统会自动读入一些bash配置文件,自动设置一些变量,以规划好bash的操作环境。

    Bash环境配置文件的两种读入方式

    • login shell: 取得bash需要完整的登录流程;
    • non-login shell: 取得bash不需要重复登录的操作,例如从X Window接入bash,或者在原本的bash里面启动bash子程序。

    login shell读取环境配置文件

    1. /etc/profile: 系统整体的设置。
    1. ~/.bash_profile 或者 ~/.bash_login 或者 ~/.profile: 属于个人用户设置,你要添加自己的数据。

    non-login shell读取环境配置文件

    这种情况下,系统只会自动读取~/.bashrc文件

    读入shell环境配置文件

    • source 配置文件名 : 读入环境配置文件的命令,source可以用小数点.替换;
    • . 配置文件名

    使用stty(setting tty)进行终端环境设置

    • 使用stty -a 列出所有的按键与按键的内容。
    • 使用man stty 来获取该工具更多信息。

    使用set命令设置整个命令输入输出的环境

    若v变量不存在,当你调用echo $v 时,系统默认输出空白,如果先使用set -u 则报错。

    通配符与特殊符号

    notion image

    数据流重定向

    标准输入输出

    • 标准输入(stdin): 代码为0,使用<或<<;
      • <<: 代表【结束的输入字符】的意思。例如:我想用cat直接将输入的信息输出到catfile中,且当由键盘输入eof时,该次输入就结束:cat > catfile <<"eof"
    • 标准输出(stdout): 代码为1,使用>或>>;
      • 若>指向的文件不存在,则自动建立新文件;
      • 若文件存在,则将文件内容清空,再将数据写入;
      • >>: 将输出内容追加到其所指向文件之后;
    • 标准错误输出(stderr): 代码为2,使用2>或2>>.

    /dev/null黑洞设备与特殊写法

    /dev/null能够吃掉任何导向该设备的信息。
    如果要将输出和错误输出导向同一个设备,应使用如下写法:
    第一种写法错误的原因: 两股数据同时写入一个文件,可能会导致交叉写入,造成次序错乱。
    示例:

    命令执行的判定依据(;、&&、||)

    • ; : 分隔两个先后执行的命令。
    • $? 与 &&或||
      • 若前一个命令执行的结果为正确,在Linux下面会返回一个$?=0的值;
      • cmd1 && cmd2
        • 若cmd1执行完毕并且正确执行,则开始执行cmd2;
        • 若cmd1执行完毕并且错误执行,则cmd2不执行;
      • cmd1 || cmd2
        • 若cmd1执行完毕并且正确执行,则cmd2不执行;
        • 若cmd1执行完毕并且错误执行,则开始执行cmd2;
    范例:
    注意,Linux下面的命令都是自左往右执行的,这里值分析/tmp/abc存在的情况:
    ls /tmp/abc return 0, so mkdir /tmp/abc will not be executed, and then the ls’s 0 will be relayed to later, so touch /tmp/abc/hehe will be executed.

    管道命令(pipe)(|)

    将cmd1的标准输出作为cmd2的标准输入执行。
    需要注意:
    • 管道命令仅会处理标准输出,对于标准错误会予以忽略,不过可以使用2>&1来使能该行为;
    • 管道命令必须能够接受来自前一个命令的数据成为标准输入继续处理才行。

    选取命令

    • cut: cut的用途足在于将一行里面的数据进行分解,最常使用在分析一些数据或文字数据的时候;有时候我们会以某些字符当做划分的参数,然后来将数据加以分割,以取得我们所需要的数据。
    • grep: grep分析一行信息,如果当中有我们想要的信息,就将该行拿出来;

    排序命令

    • sort: 对结果进行排序(以换行等作为分割);
    • uniq: 用于将重复的数据仅列出一个显示;
    • wc: 统计输出里面有多少字、行、字符等。

    双向重定向(tee)

    tee会同时将数据流分送到文件与屏幕,而输出到屏幕的,其实就是stdout,就可以让下个命令继续处理了。

    字符串转换命令

    • tr: 用来删除一段信息当中的文字,或是进行文字信息的替换;
    • col: filter reverse line feeds from input,可以用来简单地处理将[tab]按键替换成为空格键;
    • join: 用来处理两个文件之间的数据,即两个文件当中,有相同数据的那一行,才将它加在一起(同一结构);
    • paste: paste直接将两个文件贴在一起,且中间以[tab]键隔开;
    • expand: 将tab按键转换成空格键;
    • unexpand: 将空格键转换成tab键;

    划分命令(split)

    将大文件划分成为很多歌小文件。

    参数代换命令(xargs)

    xargs: 产生某个命令的参数,其可以读入stdin的数据,并且以空格符或者换行符作为识别符,将stdin的数据分隔成参数。
    很多命令其实并不支持管道命令,因此我们可以通过xargs来提供该命令使用标准输入。

    关于减号(-)的用法

    在管道命令中,常常会使用到前一个命令的stdout作为这次的stdin,某些命令需要用到文件名(例如tar、vim)来进行处理,该stdin与stdout可以利用减号“-”来替代。

    Bash命令行快捷键

    太多了,不想写了,直接摆烂!!

    移动光标

    1. ^+A: 将光标移动到行首;
    1. ^+E: 将光标移动到行尾;S
    1. ^+F: 将光标向前移动一个字符;
    1. ^+B: 非破坏性退格,将光标向后移动一个字符;
    1. alt+F: 光标向前跳一个词;

    中断进程

    1. ^+C: 中断;
    1. ^+s: 锁定屏幕输出;
    1. ^+q: 恢复屏幕输出;

    删除字符

    1. ^+D: “EOF”(文件结尾:end of file),用于表示标准输入的结束;删除光标下的字符;
    1. ^+H: 删除光标前的一个字符;
    1. ^+L: 清屏/换页;
    1. ^+U: 擦除从光标位置开始到行首的所有内容,不包括当前字符;
    1. ^+W: 删除当前光标向后到第一个空白符的内容;

    切换历史命令

    1. ^+P: 召回命令;
    1. ^+N: 擦除历史命令;

    Shell压缩命令

    tar命令最初是一个对多个文件进行打包的命令,以便使得使用gzip、bzip2、xz等压缩命令对多个文件进行打包,不过后来为了方便,骇客门就将打包命令集成到了tar命令之中。

    TMUX(终端复用器)


    新建会话

    tmux new -s <session-name>

    剥离当前会话

    ^+B + d

    杀死并退出当前会话

    ^d

    切换会话

    tmux swtich -t <session-name>

    查看所有会话,并进行选择接入

    ^B + s

    重命名当前会话

    ^B + $

    重新接入会话

    tmux attach -t <session-name>

    列出所有会话

    tmux ls

    新建窗口

    ^B + c

    关闭当前窗口

    ^B + &

    打开指定序号的窗口

    ^B + n(0-9)

    列出所有窗口以供选择

    ^B + w

    上/下一个窗口

    ^B + p

    重命名当前窗口

    ^B + ,

    根据关键词定位窗口

    ^B + f

    分割pane

    • 上下分:^B + “
    • 左右分:^B + %

    关闭当前面板

    ^B + x

    最大化当前面板

    ^B + z

    显示面板序号

    ^B + q, 需要消失前可选择

    将当前面板独立为一个窗口

    ^B + !

    调整面板大小

    ^B +
    • ^+j;
    • ^+k;
    • ^+h;
    • ^+l;

    参考博客:

    man page中SYNOPSIS语法解析

    该部分语法源于巴克斯范式,有如下4个语法规则:
    • []: 代表可选的;
    • |:代表二选一;
    • …: 代表可重复n次;
    • <>: 代表必选

    vim关键字补齐的默认查找路径

    默认将在以下来源中查找关键字:
    • 在当前缓冲区中进行查找;
    • 在其他窗口中进行查找;
    • 在其他已载入的缓冲区中进行查找;
    • 在没有载入缓冲区的文件中进行查找;
    • 在当前的标签(tags)列表进行查找;
    • 在由当前文件(如#include)包含进来的头文件中进行查找。
    tmux tutorialVerilog