命令行

作者: 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 == 编译 + 运行

相关文章

  • MAC命令行

    命令行命令行

  • 常用命令行

    命令行中英文对照 命令行缩写 常用命令行 如何使用 explainshell.com 这个网站 网站链接:命令行释...

  • 命令行开启、关闭adb

    命令行开启adb: 命令行关闭adb:

  • 命令行

    基本命令行: 文件路径命令行:

  • 开发常用命令

    命令行启动服务 命令行启动activity 命令行发送广播 monkey启动应用 java打堆栈

  • 2018-12-20

    lolcat 彩色命令行cowsay 命令行加动物

  • Linux 3.bash

    命令行跳转:Ctrl+a:跳到命令行首Ctrl+e:跳到命令行尾Ctrl+u:删除光标至命令行首的内容Ctrl+k...

  • 初识命令行之ls cat mv touch

    目录:一. 如何查找命令行的常见用法二. 几个命令行的常见用法三. 如何查找命令行释义 一.如何查找命令行的常见用...

  • #python入门1#入门

    终端进入命令行模式 python 命令行退出终端 exit() 命令行执行.py脚本 python hello.p...

  • 命令行基础

    命令行基础 命令行是什么? 命令行界面(command-line interface), 缩写CLI, 是在图形用...

网友评论

      本文标题:命令行

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