运维 FAQ

Table of Contents

1. Shell

1.1. 登录读取配置的流程

广义的 shell 分两种,一种为 login shell(通过终端登录),另外一种为 non-login shell(通过图形界面登录)。

所有 shell 都会走的流程:

  1. /etc/profile: 系统整体的设置,不建议修改
  2. /etc/inputrc: 设置终端热键,声音等
  3. /etc/profile.d/*sh: 设置 bash 操作接口的颜色、语系、ll 与 ls 命令的别名、vi 命令的别名,which 的命令的别名等
  4. /etc/profile.d/i18n.sh: 设置语言,CentOS 7 是 lang.sh 脚本

1.1.1. login shell

  1. ~/.bash_profile
  2. ~/.bash_login
  3. ~/.profile

bash 的 login shell 只会读取上面三个文件中的一个,而读取的顺序则是按照上面的顺序。而一般情况下 ~/.bash_profile 中会有这样一块代码:

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

如果存在 ~/.bashrc 则使用它,而 ~/.bashrc 中又会包含这样一段代码:

# Source global definitions
if [ -f /etc/bashrc ]; then
    . /etc/bashrc
fi

触发加载 /etc/bashrc 的内容。整理下来 login shell 的读取流程是: ~/.bash_profile => ~/.bashrc => /etc/bashrc

1.1.2. non-login shell

仅仅会读 ~/.bashrc > =/etc/bashrc

扩展: TheBash Shell Startup Files

1.2. ~/.profile~/.bashrc 的区别

  • 这两者都具有个性化定制功能
  • ~/.profile 可以设定本用户专有的路径、环境变量等等,它只能登入的时候执行一次
  • ~/.bashrc 也是某用户专有设定文档,可以设定路径,命令别名,每次 shell script 的执行都会使用它一次

1.3. /etc/bashrc 做了哪些事?

  1. 依据不同的 UID 规定 umask 的值
  2. 依据不同的 UID 规定提示符(PS1变量)
  3. 调用 /etc/profile.d/*.sh 的设置

1.4. ~/.bash_history 是干嘛的?

历史命令记录,登录之后读入内存。

1.5. ~/.bash_logout 是干嘛的?

记录了当我注销 bash 后系统再帮我做完指定的操作才能离开。

1.6. 查看当前 shell

  • 所有的系统Shell: cat /etc/shells
  • 查看用户对应的 shell: cat /etc/passwd 或者 echo $SHELL

2. 如何矫正系统时间

  • 修改时区: sudo cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
  • 时间同步: sudo ntpdate time.windows.com

3. 如何查看机器基本信息(发行版本,CPU,内存等)

  • cat /etc/os-release: 发行版本
  • cat /etc/issue: 操作系统版本
  • cat /etc/inittab: 查看启动项,使用 systemd 的系统,已经不再需要这个文件
  • cat /etc/passwd: 查看所有用户的列表
  • cat /etc/group: 查看用户组
  • cat /proc/version: Linux 版本号,相当于 uname -r=,=uname-a 查看更多信息
  • cat /proc/cpuinfo: CPU 信息
  • cat /proc/meminfo: 内存信息(i.e. mem used, free, swap size)
  • cat /proc/partitions: 所有设备的所有分区
  • cat /proc/swasps: 所有 swap 分区的信息
  • df -h: 查看硬盘大小
  • du -sh: 查看当前文件夹大小
  • free: 查看系统可用内存,可选参数 -m -h

4. apt-get update 和 apt-get upgrade 的区别

先运行 update ,然后再运行 upgrade 。它们两个没有包含对方的功能,各自做的事情不同。

  • apt-get update 更新可用包列表和他们的版本,但是不安装和升级任何版本
  • apt-get upgrade 升级你已有包的到最新版本,更新列表之后,程序包管理器将会了解你已经安装的软件的可用更新。 这就是为什么首先你需要 update

还有一个命令是 dist-upgrade ,它跟 upgrade 的区别:

  • upgrade 是对当前已经安装的包升级到最新版本(你首先要 update ),升级的规则是:在任何情况下安装的软件包都不会被删除,或者未安装的包被检索和安装。如果更新对你很重要,要使用 upgrade
  • dist-upgrade 除了执行 upgrade 之外,还会智能的处理包的依赖关系,所以说 dist-upgrade 可能会移除一些包。如果你想事情「正常工作」,可能要使用 dist-upgrade 来确保解决依赖关系

来自:

First created: 2018-09-11 15:29:32
Last updated: 2022-12-11 Sun 12:49
Power by Emacs 29.0.91 (Org mode 9.6.6)