设计unix 不是为了学习是为了使用 用起来容易,学习起来比较难
思路一 分种类-分层次-分阶段
属性或者类别体系类
文件-变量-命令
查询帮助以及
步骤以及流程类
常用案例法以及项目驱动学习
入门阶段,靠简单好用的命令建立信心;中期,依赖工具库提升效率;高阶阶段,按领域深耕,形成自己的技术栈
思路二:评价和判断
判断类型: 一种是“工具型”,帮你快速解决通用问题 一种是“领域型”,针对某个特定场景特别强大
判断生态与趋势
信息差:我知道的,你不知道 认知差:我懂得东西,你不懂
执行差:你我都懂,你不做我做 竞争差:你我都做,我做的比你好
资源差 环境扰动
shell-用户的环境信息-普通账户
是否交互式(interactive), 是否登录(login)
shell有两种方式,
login shell与non-login shell,它们的区别是读取的配置文件不同
交互性:登录Shell是交互式,非登录Shell可能为交互式或非交互式
判断变量 $- 是否包含i: 如果包含,就是交互式,反之非交互式 (i代表的是interactive) echo $-
01.文件--配置文件
/etc/shells
/etc/profile 是一个系统范围的login shell配置文件,即它会影响所有用户的shell环境设置
/etc/bash.bashrc
~/.bash_profile 是一个用户级别的login shell配置文件,它允许用户设置自己专属的环境变量、别名等
~/.bash_login 是另一个用户级别的login shell配置文件
~/.profile 是一个通用的用户级别的login shell配置文件,它不只限于Bash shell
~/.bashrc 是一个用户级别的non-login shell配置文件
其他类似
Zsh:/etc/zsh/zprofile、~/.zprofile、~/.zlogin
02.环境和变量 以及默认或者缺省配置 以及搜索路径
env printenv locale stty
$0
$SHELL set echo unset
变量设置 = "" $ `` 反引号
export source
03.命令 和 进程
env printenv
/bin/bash
chsh
04.查询和帮助man和help
man bash
which sh whereis bash
echo $SHELL
type source
file /bin/bash
cat /etc/passwd | grep root # 查看root用户默认的shell
05.步骤和执行过程
读取环境设步骤有三步
其他相关
1.和账户相关
普通账户,服务账户
/bin/false使得用户无法登录且无任何提示,
/usr/sbin/nologin 则会礼貌地告知用户账户不可用。 临时禁用账户 测试或维护 安全策略
临时禁用用户: sudo chsh -s /usr/sbin/nologin 用户名
sudo usermod -s /usr/sbin/nologin 用户名
除了用户创建的账号之外,还会产生系统或程序安装过程中产生的许多其他账号,
除了超级用户root外,其他账号都是用来维护系统运作的,
一般不允许登录,常见的非登录用户有bin、adm、mail、lp、nobody、ftp 等。查看/etc/passwd 文件,可以看到多个程序用户。
系统虚拟帐号(也被称为伪用户)
系统服务账户:服务账户: 用于运行特定服务的账户(如apache、ftp等),这些账户不需要直接登录系统 却能够使用系统的很多资源
主要目的是运行后台服务进程,而不是供人类用户登录并执行命令
Dockerfile
RUN 实际上运行一个命令并提交结果;CMD不会在构建时执行任何操作,而是为镜像指定预期的命令
CMD ENTRYPOINT
在Dockerfile中,RUN、CMD和ENTRYPOINT指令都可以使用两种格式:Shell格式和Exec格式。
exec 格式:INSTRUCTION ["executable","param1","param2"]
shell 格式: INSTRUCTION command param1 param2 使用双引号(")而不是单引号(')来包围单词
可以使用SHELL命令更改默认shell
SHELL ["/bin/bash", "-c"]
RUN echo hello
ENTRYPOINT是一个容器启动时执行的命令,它不会被docker run命令中传入的命令覆盖
ENTRYPOINT非常适合用于定义容器的主要功能或应用程序的启动命令。
指定了多个`ENTRYPOINT`指令,只有最后一个`ENTRYPOINT`指令会生效。
CMD命令可以被docker run命令中传入的命令覆盖,因此它通常用于定义一些可选的参数或行为。
Kubernetes进入运行中的容器 Shell
已安装并配置好 kubectl 命令行工具
已连接到目标 Kubernetes 集群
拥有足够的权限访问目标命名空间中的 Pod
kubectl exec -it shell-demo -- /bin/bash
shell
命令参数说明:
-i 或 --stdin:保持标准输入流打开
-t 或 --tty:分配一个伪终端
shell-demo:目标 Pod 名称
--:分隔 kubectl 参数和容器内执行的命令
/bin/bash:在容器内启动的 Shell 程序
不进入 Shell 直接执行命令 kubectl exec shell-demo -- cat /proc/1/mounts