read命令

read命令的使用  -p -s  -t

read -p “提示文字” 变量名     ###显示提示信息,然后等待输入

read -s 变量名   ###静默输入,输入内容不显示(适合输密码)

read -t   秒数  变量名     ###设置超时时间,到时间不输入就自动跳过

用户和权限管理

             用户:
                    超级用户   root  0

                    普通用户

                                系统级别:1-999

                                普通级别:   1000+

             用户组:

                       通用权限的管理

                     上下文:   context(系统给文件,进程配置的安全标签,用于严格控制访问权限) 

                        查看当前的SELINUX状态,先确认是否开启,上下文是否开启getenforce:

                                    selinux【rocky】:标识安全属性,控制访问权限

                                     apparmor【ununtu】:限制程序权限,防止越权访问。

                    常用命令:

                                  useradd -m:创建用户时,自动创建家目录

       

                                 /etc/default/useradd(useradd命令的默认配置文件)、

                                 useradd -g  Gid:创建用户时指定所属组ID

                                  userdel  -r:删除用户,删除用户家目录

                                  groupadd -g:创建组时指定ID

                                  groupdel(删除用户组)、

                                  gpasswd -a  用户名   用户组  |  -d  用户名   用户组:先将用户加入组,再将该用户从组中删除

                                  chmod  666 文件名:给文件所有人都赋予读,写权限,无执行权限

                                  chown  所有者:所属组  文件名:同时修改文件的所有者和所属组

                                   文件名  如果是目录,需要整体操作需要 -R

       扩展特殊权限:SUID4000(让普通用户临时拥有文件所有者的权限)、

                              SGID2000(执行文件时临时继承文件所属组权限,目录下的新建文件继承该目录的组)、

                             stickbit1000(粘滞位,目录下的文件,只有文件所有者,目录所有者,root才能删除,其他用户不行)

Vim实践

进入编辑模式:

                   a(在光标后面插入) 

                   i (在光标前面插入)

                   o (在当前行下面新开一行) 

                   O(在当前行上面新开一行)

定位: 

        /  (进入查找定位模式,输入关键词快速定位到对应内容,往下查找) 

       ? (从当前位置往上查找内容)

       :数字(直接跳转到第几行)   

          gg(直接跳到文件第一行)   

           G(直接跳到文件最后一行)

          ^(跳到行首)

           $(跳到行尾)

整体操作: 

            dd(删除一整行) 

           dG(从当前行,一直删除到文件最后一行) 

          dgg(从当前行,一直删除到文件第一行)   

          d^(从光标位置删到本行开头)

        d$(从光标位置删到本行末尾)   

         3dd(从当前行开始,一共删3行)     

          yy(复制一整行) 

        3yy(从当前行开始一共复制3行)   

         2p(复制内容粘贴2次)

设置行号

            :set  nu         ######显示行号

            :set nonu       ####隐藏行号

 替换操作

         :s/要改的字/改成的字/g

          :%/旧/新/g  全文替换
撤销操作

      撤销   u

部分操作

             , $(从当前行到最后一行)

              ,$d(从当前行删除到最后一行)

             5,8 d(删除第5行到第8行)

              5;+8 d(从第五行,往下数8行,全部删掉)

              %(全文,所有行) 

               :%d  删除全文

               s///g

                    :s/原来的字/改成的字/g

 块操作

           ctrl + v(进入块选择模式)

            -   delete(删除)

            -  shift + i(在块前面批量插入文字)

两个命令

               cut  -  d  "分隔符"   -f 列号 文件名:按空格分隔文字,取出制定的那一列

               tr -s  "字符"  连续字符的缩减为一个,,比如压缩空格

               tr:"源符号" "替换后的字符" :旧换新

文件管理

文件管理命令

        sort(文本排序)、

        uniq(去重,配合sort使用)、

       rename(批量重命名文件)、

      locate(快速查找文件)、

       find(文件查找命令)、

       grep(文本内容搜索)、

       sed(流式文本编辑,替换操作,删除)、

       awk(文本分析,列处理工具)

正则表达式:

              .*:匹配任意内容,任意长度

              .:任意一个字符

               ?:匹配前面字符0或者1个

                +:匹配前面字符至少一个

                 []:匹配括号里任意一个字符

                 [^]:匹配不是括号里的字符,取反

                   ^:匹配行的开头

                  $:匹配行的结尾

                   ():分组后面可以引用

                    {m,n}:前面字符最少m次,最多n次

                    |:或者,匹配左边或右边

存储管理

   逻辑:准备硬盘 - 附加到 vm-fdisk 分区 - mkfs 格式 - mount 挂载 - fstab 永久挂载

   命令:

           fdisk(磁盘分区命令)、

            df(查看磁盘空间使用情况)、

            du(查看目录文件大小)、

            dd(磁盘数据拷贝,备份命令)、

            blkid(查看磁盘分区的UUID,唯一标识号)、

            lsblk(列出块设备,磁盘分区树形结构)、

            mkfs.(格式化分区,也就是创建文件系统)

   类型、

      mount(挂载分区)、

      umount(卸载挂载点)、

       swapoff(关闭交换分区)、

        swapon()开启交换分区

   数据冗余:磁盘组 - RAID5【数据分片、分布式校验】

     逻辑卷组 - LVM 【通过系统软件来实现,pv(物理卷)、vg(卷组)、lv(逻辑卷)】

1 一个服务器设备,拿到硬盘后,接下来该做什么

         准备硬盘 -> 附加到 vm->fdisk 分区 ->mkfs 格式 ->mount 挂载 ->fstab 永久挂载

2 查看存储信息的命令有哪些

          fdisk(磁盘分区管理工具)、df -h(文件系统磁盘使用情况) 、du -sh(目录,文件大小统计)、lsblk(列出块设备信息)、blkid(查看uuid)等

3 我要修改 file 文件里面第 2 行的第 3 个 sed,变成 SED,怎么做?

            sed -i '2s/sed/SED/3' file

lvm管理

           结构:pv(查看物理卷信息)、

                     vg(查看卷组信息)、

                     lv(查看逻辑卷信息)

实践:

在Ubuntu或者rocky增加5块硬盘

环境部署:

ubuntu系统

yum install  -y lvm2

Rocky系统

创建PV

创建VG

创建LV

apt   install -y  lvm2

软件管理

           类型:源码包、二进制包【别人编译过,然后打包的,rpm、deb】

           rocky环境: rpm 离线安装工具

                                  -i(安装)

                                 -e(卸载)

                                  -q查询) 

                                 -qi(查看软件详情)

                                 -ql(查看安装路径)

                                 -qf(查看文件所属软件)

                     yum | dnf 在线安装工具【自动解决依赖】

                         install(安装) 

                        makecahce(生成缓存)

                        remove(卸载)

                        autoremove(自动卸载无用抵赖)

                        list(列出软件)

                        search(搜索软件)

                         update(更新软件源)

                           /etc/yum.repos.d/xxx.repo(软件源配置文件)

          ubuntu环境:

                     dpkg 离线安装工具

                            -i(安装)

                            -r(卸载)

                            -l(列出已安装文件)

                            -s(查看软件状态)

                             -L(查看软件安装路径)

                             -S(查看文件属于哪个软件)

                     apt 在线安装工具【自动解决依赖】

流程:更新源 → 查包 → 看详情 → 安装 → 升级 → 卸载 → 清理

                               install(安装软件)

                                update(更新软件源列表)

                                purge(卸载软件,加删除配置)

                               autoremove(自动清理无用依赖)

                               list(列出软件)

                                search(搜素软件) 

                                apt-cache(查看软件包信息)

                               upgrade(升级所有已安装的软件)

                               /etc/apt/sources.list(系统的软件源配置文件)

          

源码安装

             下载(xxx.tar.gz) 

              解压(tar -zxf 源码包) 

             ./configure(配置检查环境)

             make(编译)

             make install(安装)

            $ PATH(系统查找命令的路径,配环境变量)

            xxx.service(系统服务配置文件开机自用,配服务)

 服务管理

            命令:

                    systemctl 服务管理

查看服务运行状态:systemctl status cron.servicce

  daemon-reload(重载服务配置)、

  start(启动服务) systemctl start cron.service

  stop(停止服务) systemctl stop cron.service

                      restart(重启服务)、

                      enable(开机自启)、

                       disable(关闭开机自启)、

                       status(查看状态)

           文件格式:

                               [Unit]:依赖启动顺序

                              [Service]:启动命令,运行方式

                               [Install]:开启自启设置

shell 编程基础

        定位:系统管理级别的自动化

        软件:bash默认解释器

        变量:全局(也叫 环境变量,当前Shell及其子进程都生效)、

                  本地:

                       普通本地(自己定义的变量 name=yangfucheng)、

                       命令本地(脚本参数,系统自带,$1:脚本后面第一个参数, $2(脚本后面第二个参数) $?:上一条命令的结果 0=成功 非0失败)、

                  bash 内置:系统自带,直接使用

        作用范围

                        系统级别

                                /etc/profile(所有用户生效) 

                                /etc/profile.d/xxx.sh(所有用户生效)

                        用户级别

                                 /etc/bashrc(所有用户生效)

                                 ~/.bashrc(只自己)

                                ~/.bash_profile(只自己)

                        终端级别

                        文件级别

                         代码级别

1 内置变量

                $0:显示当前shell或脚本名称

               $#:传给脚本或参数的参数个数

               $num:第几个位置参数($1$2$3)

               $?:上一条命令的执行状态

               ${#file}:获取变量file的字符串长度

               ${file:index:length}:字符串切片:从index(从0开始),取length个字符

2 表达式

            运算符 + - * / %

            赋值 = *= /= += -= ++ --

            测试 test、[ 表达式 ]、0代表表达式成立、1代表表达式失败

            逻辑 && 、 ||、!

&& 示例:命令1 && 命令2

                                        如果命令1执行成功,那么我才执行命令2 -- 夫唱妇随

                                          如果命令1执行失败,那么命令2也不执行

 || 示例:命令1 || 命令2     

                                          如果命令1执行成功,那么命令2不执行 -- 对着干

                                           如果命令1执行失败,那么命令2执行

 ! 示例:! 命令

                                            如果命令执行成功,则整体取反状态

            文件 -f -d -x

-d 检查文件是否存在且为目录文件

-f 检查文件是否存在且为普通文件

-S 检查文件是否存在且为socket文件

             数字 -eq -ne -ge -gt -le -lt

            字符串 == != -n -z

逻辑和平时相反,1对 0错,-z为空,-n不为空,0成功,1失败

            多条件:与:全真才真,一假全假

                        或:一真就真,全假才假

-a 是并且,全真才真;-o 是或者,一真就真单括号用 -a/-o,双括号用 &&/||,别混用!

                  [ 条件1 -a 条件2 ] [ 条件1 -o 条件2 ]

                  [[ 条件1 && 条件2 ]] [[ 条件1 || 条件2 ]]

方法1: [ 条件1 -a 条件2 ]

                              - 两个条件都为真,整体为真,否则为假

[ 条件1 -o 条件2 ]

                               - 两个条件都为假,整体为假,否则为真

方法2: [[ 条件1 && 条件2 ]]

                                - 两个条件都为真,整体为真,否则为假

[[ 条件1 || 条件2 ]]

                                - 两个条件都为假,整体为假,否则为真

3 条件判断

       单分支if: if 条件;then 命令;fi

       双分支if: if 条件;then 命令;else 命令;fi

       多分支if: if 条件;then 命令;elif 条件;then 命令;。。。;else 命令;fi

       case语句:

                    case 变量名 in

                            "xxx") 命令;;

                     *)

                                命令;;

                   esac

expr数学运算

expr 即可以做常见的整数运算,还可以做数字比较,字符串计算等操作

一、数字运算规则

1. 支持的运算符 优先级从高到低:

() 括号(必须转义:\( \)) * / % 乘、除、取余 + - 加、减

2. 运算类型与坑点 只支持整数:

expr 1.5 + 2 → 报错,不支持小数。

除法是整数除法(向下取整):expr 11 / 5 → 结果为 2,不是 2.2。

取余:expr 11 % 5 → 结果为 1。

3. 运算符转义规则 这些字符在 Shell 中有特殊含义,必须用 \ 转义:

\* 乘号

\ / 除号

\% 取余

\(` `\) 括号

BC计算器:

定位:任意精度计算器,支持整数 / 小数运算、进制转换、条件 / 循环语法。

常用参数

-l:加载数学库,启用浮点运算,默认小数精度 scale=2  2位

-q:安静模式,不输出欢迎信息

-i:强制进入交互模式

关键变量 scale:小数保留位数,默认 0;

加 -l 后默认 20 ibase:输入进制,默认 10(十进制) obase:输出进制,默认 10(十进制)

测试表达式(test)

       shell 环境根据命令执行后的返回状态值($?)来判断是否执行成功,当返回值为0,表示成功,值为其他时,表示失败。使用专门的测试工具 ----test命令,可以对特定条件进行测试,并根据返回值来判断条件是否成立(返回值0为成立)。

第一种写法:直接用 test 命令,后面跟条件表达式。

第二种写法:用方括号 [ 条件表达式 ],这是更常用的写法。

用方括号这种写法时,左方括号 [ 后面、右方括号 ] 前面,都必须至少留一个空格。

两种写法的效果完全相同:

条件成立 → 执行后的返回状态值是 0

条件不成立 → 执行后的返回状态值是 1

test -v 变量名 是 Shell 中专门用来判断变量是否存在的条件表达式。 如果变量被定义(哪怕是空值),这条命令会返回0(条件成立);如果变量完全不存在,则返回1(条件不成立)。

   

        

                                  

                                  

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐