命令行

作者: bowen_wu | 来源:发表于2022-05-20 18:21 被阅读0次

    概述

    包括一切通过字符终端控制计算机的方式

    • Kernel & Shell
    • 命令行 vs GUI

    命令的要素

    • Executable => 可执行程序
    • Parameter => 参数
    • Working Directory => 工作目录
    • Environment Variable => 环境变量
    ls -l
    // ls -> 可执行程序
    // -l 及后面所有的 -> 参数
    

    可执行程序

    • UNIX | Linux => 可执行权限 => x 权限
    • 哪里找命令 => PATH 环境变量中查找 => echo $PATH
    • 在脚本的第一行指定解释器 => shebang
      #!/usr/bin/env node    // node shebang
      

    参数

    UNIX 参数约定

    • 使用一个 - 后面只能跟一个字符,这代表一个参数
    • 使用两个 -- 后面可以跟着一个单词
    ls -a -l -t -h
    
    // 上面四个参数可以合并,等价于
    ls -alth
    
    ls -a // 等价于
    ls --all 
    

    参数中包含空格或字符串

    • 单引号 => 作为一个整体参数传入进去,不要将其中的变量展开 => 命令行不做任何处理
    • 双引号 => 作为一个整体参数传入进去,并且将其中的变量展开 => 命令行会对里面的变量进行替换和展开

    想传入进去单引号这个符号的话,可以加双引号或者转义

    echo "'I am a boy'"
    echo \'I am a boy\'
    

    可以通过使用单引号将通配符的通配性取消,让可执行程序去解释,而不是使用命令行的传递给执行权限的值

    git add * // 将所有的文件传递给 git 
    git add '*' // 将 * 传递给 Git,Git 自己去解释 * 的含义
    

    Working Directory

    • 启动命令的路径
    • 相对路径都是相对于工作目录的路径
    • 工作目录决定了程序中相对路径起始的位置
    • 绝对路径 => 从根目录开始的路径
    • 相对路径 => 相对于当前工作目录的路径

    Environment Variable

    环境变量是存在于环境中的一组键值对,会影响所有在这个环境中启动的程序的行为

    • 进程 => 进程是计算机程序运行的最小单元 => 独占自己的内存空间和文件资源
    • 每个进程都和一组变量相绑定 => 传递不同的环境变量可以让程序表现出不同的行为
    • 在进程的 fork 过程中,环境变量可以被完全继承
    • 所有的操作系统编程语言都支持环境变量
    • 通过 export 设置环境变量,通过 echo 读取环境变量
      export AAAAA=12345
      echo $AAAAA
      
    • 容器是有点特殊的进程,它的环境变量不会受到外面环境变量的影响
    • 快速传递一个环境变量 => AAAAA=12345 source .file => file 中可以读取到环境变量 AAAAA,值为 12345,退出后这个环境变量就没有了

    权限系统

    permission_system

    三个为一组:

    • 第一组 => 当前用户权限
    • 第二组 => 本用户组
    • 第三组 => 其他用户组

    每个组中:

    • r => readable => 读 => 二进制 100
    • w => writable => 写 => 二进制 010
    • x => executable => 可执行 => 二进制 001

    更改权限

    chmod => change mode => 一条在 Unix 系统中用于控制用户对文件的权限的命令(change mode)和函数。可以使用绝对模式(八进制数字模式),符号模式指定文件的权限

    例:chmod 756

    • 7 => 当前用户权限 => 二进制 111 => 可读可写可执行
    • 5 => 本用户组 => 二进制 101 => 可读可执行
    • 6 => 其他用户组 => 二进制 110 => 可读可写

    输入 & 输出

    • Stdin => standard input => 标准输入
    • Stdout => standard output => 标准输出
    • Stderr => standard error => 标准错误

    输出重定向

    • > => 将标准输出重定向到后面的文件中 => echo 'Hello World!' > temp.txt => 会覆盖
    • >> => 将标准输出追加在后面的文件中

    在进程中

    • Stdout => 进程描述符为1号输出 => 1> 等价于 >
    • Stderr => 进程描述符为2号输出 => 2> 将标准错误重定向
    • java Main > output 2>&1将标准输出和标准错误同时重定向到一个文件中

    垃圾桶

    • 垃圾桶路径 => /dev/null
    • 将标准错误丢掉,丢到垃圾桶 => java Main 2> /dev/null

    Java & 命令行

    • 源代码(.java文件) -- 编译 --> 字节码(.class文件) -- 运行 --> JVM 只认识字节码(.class 文件)
    • jar包 => 一堆字节码的结合
    // HelloWorld.java
    public class HelloWorld {
        public static void main(String[] args) {
            System.out.println("Hello World!");
        }
    }
    

    编译 => javac HelloWorld.java

    // HelloWorld.class
    public class HelloWorld {
        public HelloWorld() {
        }
    
        public static void main(String[] var0) {
            System.out.println("Hello World!");
        }
    }
    

    执行字节码 => java HelloWorld

    System Property 系统属性

    在 JVM 中有 System Property,System Property 就是 JVM 里面的环境变量

    public class Main {
        public static void main(String[] args) {
            System.out.println("Hello World");
            System.out.println("args:" + java.util.Arrays.toString(args));
            System.out.println("env:" + System.getenv("AAA")); // Java 获取环境变量
            System.out.println("property:" + System.getProperty("AAA"));  // Java 获取系统属性,只在 JVM 中有效
            System.out.println("java version:" + System.getProperty("java.version"));
            System.out.println("user.dir:" + System.getProperty("user.dir"));
        }
    }
    
    javac & java

    java command

    • -D => 传递系统属性 => java -DAAA=456 Main 1 2 3
    • -classpath(-cp) => 用于传递 jar 包 => javac -classpath commons-lang3-3.9.jar XXX.java
    • java -cp commons-lang3-3.9.jar:. XXX => 启动 java,java 运行所需要的类在 jar 包中查找同时也在当前目录下查找,并启动 XXX 类

    常用命令

    cd // change directory
    cat // 查看一个文件的内容 concatenate and print files
    pwd // print working directory
    ps aux // mac 查看进程列表
    docker run -it ubuntu // 使用 Linux 命令行,装 docker,之后启动 ubuntu
    docker run -it -e AAAAA=12345 ubuntu // 环境变量 AAAAA 值为 12345
    source // Shell 内置命令,用以在当前上下文中执行某文件中的一组命令,source 命令可简写为一个点(.)
    grep // 最初用于 Unix 操作系统的命令行工具。在给出文件列表活标准输入后,grep 会对匹配一个或多个正则表达式的文本进行搜索,并值输出匹配或者不匹配的行或文本
    

    知识点

    1. idea 中的 run == 编译 + 运行

    相关文章

      网友评论

          本文标题:命令行

          本文链接:https://www.haomeiwen.com/subject/oxmtprtx.html