在这里插入图片描述

Shell 基础

变量定义和查看

Linux 使用变量临时字符串值,便于后续引用。变量值存储在当前会话内存中。

变量名只能包含:字母、数字、下划线。变量名不能以数字开头。

shell中变量的类型,一般不需要明确指明。

# ====================== EDITOR 环境变量:指定visudo使用的编辑器 ======================
# visudo 默认调用vi编辑sudo配置文件/etc/sudoers,无语法高亮
[root@centos7 ~]# visudo

# 全局临时设置编辑器为vim,后续所有visudo都用vim打开
[root@centos7 ~]# export EDITOR=/bin/vim
# 单次执行visudo时临时指定vim,仅本次命令生效
[root@centos7 ~]# EDITOR=/bin/vim visudo
# 使用vim编辑/etc/sudoers,自带语法高亮,防止sudo配置语法错误


# ====================== LANG 环境变量:控制系统语言、日期、字符编码 ======================
# 查看当前中文格式日期
[root@centos7 ~]# date
202211月 07日 星期一 13:38:31 CST

# 临时切换系统语言为英文utf8编码
[root@centos7 ~]# export LANG=en_US.utf8
# 切换后日期显示英文格式
[root@centos7 ~]# date
Mon Nov  7 13:38:55 CST 2022

# 切回简体中文utf8编码
[root@centos7 ~]# export LANG=zh_CN.utf8
# 恢复中文日期展示
[root@centos7 ~]# date
202211月 07日 星期一 13:40:49 CST

# 常用LANG编码对照表
# 英语:en_US.utf8
# 简体中文:zh_CN.utf8
# 繁体中文:zh_TW.utf8


# ====================== PATH 环境变量:系统检索外部命令的目录列表 ======================
# 查看当前系统命令搜索路径
[root@centos7 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

# 将ls命令从系统目录移到家目录,PATH找不到ls命令
[root@centos7 ~]# mv /usr/bin/ls .
# 执行ls报错command not found
[root@centos7 ~]# ls
bash: ls: command not found...
Similar command is: 'lz'
# 查找ls命令位置,无法检索到
[root@centos7 ~]# which ls
alias ls='ls --color=auto'
Similar command is: 'lz'

# 手动重置PATH为系统默认原始值
[root@centos7 ~]# PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
# 在原有PATH尾部追加/root目录,让系统识别家目录内的ls
[root@centos7 ~]# export PATH=$PATH:/root
# 再次执行ls可正常运行
[root@centos7 ~]# ls
anaconda-ks.cfg  initial-setup-ks.cfg  ls
# 查看ls检索路径,此时读取/root/ls
[root@centos7 ~]# which ls
alias ls='ls --color=auto'
    /root/ls

# 将ls命令移回系统默认命令目录/usr/bin,恢复原始环境
[root@centos7 ~]# mv ./ls /usr/bin


# ====================== PS1 环境变量:自定义终端命令行提示符样式 ======================
# 查看meng用户默认提示符配置
[meng@centos7 ~]$ echo $PS1
[\u@\h \W]\$

# 查看bash官方手册,搜索PROMPTING关键字查看所有提示符转义符说明
man bash
# 提示符转义符扩展说明:
# \h     主机名,第一个 `.` 之前的短主机名
# \H     完整主机名
# \n     换行符
# \t     当前时间,24小时制 HH:MM:SS
# \T     当前时间,12小时制 HH:MM:SS
# \@     当前时间,12小时制带am/pm标识
# \A     当前时间,24小时制 HH:MM
# \u     当前登录用户名
# \w     当前完整工作目录
# \W     当前目录最后一级名称(简化目录)
# \$     root用户显示#,普通用户显示$

# 修改提示符固定为 HELLO
[meng@centos7 ~]$ PS1='HELLO '
HELLO echo hello world
hello world

# 自定义提示符:用户名@短主机名+简化目录+24小时时分秒
[meng@centos7 ~]$ PS1='[\u@\h \W \t]\$ '
[meng@centos7 ~ 13:52:08]$ 

# 自定义提示符:显示完整工作路径+时间
[meng@centos7 ~]$ PS1='[\u@\h \w \t]\$ '
[meng@centos7 ~ 13:52:56]$ cd /usr/share/doc
[meng@centos7 /usr/share/doc 13:53:04]$

# ====================== 彩色提示符颜色控制编码 ======================
# 颜色转义代码说明
# \[\e[0;30m\]:黑色
# \[\e[0;31m\]:红色
# \[\e[0;32m\]:绿色
# \[\e[0;33m\]:黄色
# \[\e[0;34m\]:蓝色
# \[\e[0;35m\]:紫色
# \[\e[0;36m\]:青色
# \[\e[0;37m\]:白色
# \[\e[0m\]:恢复终端默认颜色

环境变量

根据变量是否是用户定义:

  • shell 环境内置变量:设置shell的运行环境。
  • 用户自定义变量:字面意思,用户自己定义的变量,也就是普通变量。

部分shell环境变量如下:

环境变量名 作用
EDITOR 默认编辑器
HISTFILE 历史文件位置
HISTFILESIZE 历史命令个数
HISTTIMEFORMAT 历史命令时间格式
PS1 命令行提示符
LANG shell 环境语言
PATH 命令搜素路径
HOME 当前用户家目录
USER 当前用户
PWD 当前shell路径

完整的shell 环境变量参考bash(1)。

题目

  1. 创建 operator1 用户
  2. 使用 id 验证 operator1 用户信息
  3. 查看 /etc/passwd 中对应条目
  4. 密码设置为 redhat
  5. 修改 operator1 用户uid为1088
  6. 修改 operator1 用户描述信息为"Operator One"
  7. 将 wheel 组作为补充组添加给 operator1 用户
  8. 查看 /etc/group 中对应条目
  9. 删除 operator1 用户
# 1. 创建 operator1 用户
useradd operator1

# 2. 使用 id 验证 operator1 用户信息
id operator1

# 3. 查看 /etc/passwd 中 operator1 对应条目
grep operator1 /etc/passwd

# 4. 设置用户密码为 redhat(--stdin 标准输入免交互设置密码)
echo redhat | passwd --stdin operator1

# 5. 修改 operator1 用户UID为1088
usermod -u 1088 operator1

# 6. 修改用户描述信息为 "Operator One",-c 指定注释信息
usermod -c "Operator One" operator1

# 7. 将 wheel 组作为补充附加组添加,-a 追加、-G 附加组
usermod -aG wheel operator1

# 8. 查看 /etc/group 中和 operator1 相关的组信息
grep operator1 /etc/group

# 9. 删除用户前置:杀掉该用户所有运行进程,否则删用户会报错占用
pkill -u operator1

# 10. 彻底删除用户,-r 同时删除家目录、邮箱、私有用户组
userdel -r operator1
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐