饥人谷java体系课
命令行
kernel 内核
shell 壳 通过壳与内核交互
⼴义的命令⾏包括⼀切通过字符终端控制计算机的⽅式
Windows - cmd/PowerShell/Git bash
UNIX/Linux系列:sh/zsh/Terminal, etc
命令行的历史与流派
UNIX家族
- POSIX标准
- macOS
- Linux
- Windows SubSystem for Linux
命令行是默认的交互方式,GUI(图形界面)是扩展的
Windows
- 奇葩
命令行的开启
Windows:cmd/PowerShell/WSL
UNIX/Linux:⼀开机就是,不⽤找
macOS:终端
命令行的全部要素
可执⾏程序(Executable)
参数
环境变量(Environment variable)
作⽬录(Working directory)
以上四个要素相同,就可以完全地“重现”⼀个命令
你碰到的各种各样古怪的问题,原因⼀定是上述四个要素之⼀
工作目录
启动命令的路径
相对路径都是相对于这个路径
绝对路劲:从根目录开始的路径
相对路径:相对于当前工作目录的路径
环境变量
进程(Process)
- 进程是计算机程序运行的最小单位
- 独占自己的内存空间和文件资源
每个进程都和一组变量相绑定
- 传递不同的环境变量可以让程序表现出不同的⾏为
CLASSPATH/GOPATH
在进程的fork过程中,环境变量可以被完全继承
所有的操作系统/编程语⾔都⽀持环境变量
局部和全局的环境变量()()环境变量实战
通过export/set设置环境变量,通过echo读取环境变量
• 从Java/Go/Python/Node.js中读取环境变量
• 向Docker容器传递环境变量
• 快速传递⼀个环境变量
• 使⽤环境变量控制程序的⾏为可执行程序
• Windows:exe/bat/com
• UNIX/Linux:x权限 - 可执⾏权限
• 去哪⾥找程序?
• Windows:Path环境变量 + 当前⽬录
• UNIX/Linux:PATH环境变量
• 在脚本的第⼀⾏指定解释器(shebang)
• 别名(alias)
java -version
java-可执行程序 -version参数参数
UNIX参数的约定——然鹅Java并不⻦这个约定
-后面只能一个字符 —后面可以跟一个单词
参数中包含空格或者字符串
单引号 强制传递,变量不展开 取消通配符的通配性
双引号 展开变量
参数的展开输入输出
• 标准输⼊ stdin
• 标准输出 stdout
• 标准错误 stderr
• 输出的重定向xxx.x把标准输出的内容重定向到xxx.x文件(覆盖)
xxx.x把标准输出的内容追加到xxx.x文件 要将标准输出和标准错误都输出到文件中 2>&1 >xxx.x 先把2号输出重定向到一号输出,再把一号输出重定向到文件
• 覆盖⽂件
• 追加⽂件
• 改变流向
• /dev/null
Linux常用命令
• 进⼊⽬录 cd (change directory)
cd . 进入当前目录
cd ..进入父目录
• 展示⽂件 ls/ll/ls -alth (list)
ls 显示当前文件非隐藏的目录 不显示任何以 . 开头的文件
ls -l ==ll 列出详细信息
ls -a 显示所有文件
la -a -l显示所有文件的详细信息
• 移动/重命名⽂件 mv (move)
mv xx/xxx.xx xx/xxx.xxx 重命名
• 删除⽂件 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