命令行入门、历史与启动
-
内核就是和硬件交互的那部分代码,负责cpu的调度,进程的调度的核心代码
- linux内核的代码
https://github.com/torvalds/linux
- shell 壳和内核kernel相对
什么是命令⾏行行
-
广义的命令⾏行行包括一切通过字符终端控制计算机的⽅方式
- Windows - cmd/PowerShell/Git bash
- UNIX/Linux系列列:sh/zsh/Terminal, etc.
为什么需要命令行
-
你不得不用
- 因为所有公司的服务器都运行在Linux上
-
将⼯工作⾃自动化
- 自动化是⼀切⽣产⼒的根源
-
举个栗⼦
- 相比GUI,命令⾏ 更容易开发维护
- 说⽩了就是bug更少
-
远程连接时命令⾏占⽤用资源远低于GUI
- 命令⾏上的开发者⼯具更丰富
命令行的历史与流派
-
UNIX家族
- POSIX标准
- macOS
- Linux
- Windows Subsystem for Linux
-
Windows
- 奇葩
1.png
工作目录和环境变量
- 可执⾏行行程序(Executable)
- 参数
- 环境变量量(Environment variable)
- 工作目录(Working directory),当前所处的目录
- 以上四个要素相同,就可以完全地“重现”⼀一个命令
- 你碰到的各种各样古怪的问题,原因⼀一定是上述四个要素之⼀一
ls -l
// ls称为可执行参数,后面的都是参数
// ~代表home目录
命令的组成部分
-
工作目录
- 启动命令的路径
- 相对路路径都是相对于这个路径
- 在Java中的应⽤用
进程
-
进程(Process)
- 进程是计算机程序运行的最⼩单位
- 独占自⼰的内存空间和⽂件资源
-
每个进程都和一组变量相绑定
- 传递不同的环境变量可以让程序表现出不同的⾏为
- CLASSPATH/GOPATH
export FANGFANG=congmingren
// process.env.FANGFANG就会有值
- 在进程的fork过程中,环境变量可以被完全继承,fork可以理解成生儿子
- 所有的操作系统/编程语⾔都支持环境变量 2.png
- 局部和全局的环境变量
export列出当前环境的所有环境,它爹有很多环境变量
环境变量量实战
- 通过export/set设置环境变量,通过echo读取环境变量
- 从Java/Go/Python/Node.js中读取环境变量
- 向Docker容器器传递环境变量
- 快速传递一个环境变量
AAAAA=1 go run main.go - 使⽤环境变量 控制程序的行为
- 环境变量只对当前一个命令有效
AAAAA=1 go run main.go - 全局的环境变量,配置好了记得source,bash_profile只对bash有效
vi ~/.bash_profile
可执行程序
-
UNIX/Linux:x权限 - 可执⾏权限
- linux和unix有个x权限才是可执行程序
chomd 777 echo.sh如果强行加可以执行x权限,可以自动跑- 教终端做人,
# !/user/bin/env node第一行告诉终端如何解释和执行。env代表从环境中读取,更安全
-
Windows:exe/bat/com
-
去哪里找程序?
-
Windows:Path环境变量 + 当前⽬录
-
UNIX/Linux:PATH环境变量
-
在脚本的第⼀行指定解释器(shebang)
-
别名(alias)
参数
-
把可执行程序后面的参数直接丢给可执行参数
-
unix的约定
ls -a -l -t -h后面四个- 可以进行合并,合并成ls -alth- 两个-,
ls -a和ls --all相同,git push --force=git push -f
-
java不鸟unix的约定
-
参数最坑爹的事情
- 通过把''参数强合到一起传给程序
- 需要注意java文件名的符号,会被环境变量替换进去,用单引号强行保持符号,会被环境变量替换进去,用单引号强行保持不替换
- 换成双引号会展开
ls *.go会展开所有的go文件传入,除非用*.go括起来就可以取消掉通配性
Linux文件权限
输入与输出
-
标准输⼊stdin
-
标准输出stdout
-
标准错误 stderr
-
输出的重定向
- 覆盖⽂文件
- 追加⽂文件
- 改变流向
- /dev/null,垃圾桶概念,
java Main 2> /dev/null就会丢失错误的输出
-
标准输出,
>重定向到某个文件,会覆盖,>>表示追加 -
1号是标准输出,2号四号标准错误,
java Main 2> output.txt- 同时输出
java Main >output.txt 2>&1\
- 同时输出
Linux常用命令详解
- 进入目录 cd (change directory)
- 展示⽂件 ls/ll/ls -alth (list)
- 移动/重命名⽂件 mv (move)
- 删除⽂件 rm/rm -r/rm -rf (remove)
- 拷⻉贝⽂件 cp/cp -r (copy)
- 显示变量 echo,可以快速创建环境变量
- 导出变量 export
- Git系列列操作 git pull/push/add/commit/...
- 新建目录 mkdir/mkdir -p (make directory)
- 当前目录 pwd (print working directory)
- 显示⽂件 cat (concatenate and print files)
- 编辑文件 vi
如何学好命令行
-
自⼰对着书敲命令
-
尽可能地在开发中使用命令⾏
- vi/git/mkdir, etc.
-
使⽤命令行的各种⼩工具
-
开发命令⾏的程序
-
⾃行在云服务器上开发部署博客
-
⾃行在云服务器器上进⾏持续集成实战
-
⽇常使⽤Linux进⾏开发
java和命令行
-
Java世界里的⼀切工具都只做⼀件事:拼接命令行
-
javac Main编译成字节码 -
java Main执行字节码 -
使⽤用命令行编译、运行Java程序
-
Java程序中的环境变量与系统属性详解,只针对jvm内部叫做系统属性,就是jvm里面的环境变量
- 传递系统属性, -D在java中非常常用,需要注意左侧是传递给jvm的参数\
-
java -cp commons-lang3-3.9.jar:. StringIsBlank 1 2 3 -
使⽤Java程序启动新的进程
- 好处: 1.工作中不可避免的要folk其他进程,比如需要用到视频分割,不可避免用到ffmpeg的库
-
windows用git bash还算能用
安装maven
maven clean test,没安装的情况,无法使用