Linux系统运维相关命令实践(二)
read命令read命令的使用 -p -s -tread -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:创建用户时指定所属组IDuserdel -r:删除用户删除用户家目录groupadd -g:创建组时指定IDgroupdel(删除用户组)、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 filelvm管理结构pv(查看物理卷信息)、vg(查看卷组信息)、lv(查看逻辑卷信息)实践:在Ubuntu或者rocky增加5块硬盘环境部署ubuntu系统yum install -y lvm2Rocky系统创建PV创建VG创建LVapt 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.serviccedaemon-reload(重载服务配置)、start(启动服务) systemctl start cron.servicestop(停止服务) systemctl stop cron.servicerestart(重启服务)、enable(开机自启)、disable(关闭开机自启)、status(查看状态)文件格式[Unit]:依赖启动顺序[Service]:启动命令,运行方式[Install]:开启自启设置shell 编程基础定位系统管理级别的自动化软件bash默认解释器变量全局(也叫 环境变量,当前Shell及其子进程都生效)、本地:普通本地(自己定义的变量 nameyangfucheng)、命令本地(脚本参数系统自带$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 命令ficase语句case 变量名 inxxx) 命令;;*)命令;;esacexpr数学运算expr 即可以做常见的整数运算还可以做数字比较字符串计算等操作一、数字运算规则1. 支持的运算符 优先级从高到低() 括号必须转义\( \) * / % 乘、除、取余 - 加、减2. 运算类型与坑点 只支持整数expr 1.5 2 → 报错不支持小数。除法是整数除法向下取整expr 11 / 5 → 结果为 2不是 2.2。取余expr 11 % 5 → 结果为 1。3. 运算符转义规则 这些字符在 Shell 中有特殊含义必须用 \ 转义\* 乘号\ / 除号\% 取余\( \) 括号BC计算器:定位任意精度计算器支持整数 / 小数运算、进制转换、条件 / 循环语法。常用参数-l加载数学库启用浮点运算默认小数精度 scale2 2位-q安静模式不输出欢迎信息-i强制进入交互模式关键变量 scale小数保留位数默认 0加 -l 后默认 20 ibase输入进制默认 10十进制 obase输出进制默认 10十进制测试表达式(test)shell 环境根据命令执行后的返回状态值$?来判断是否执行成功当返回值为0表示成功值为其他时表示失败。使用专门的测试工具 ----test命令可以对特定条件进行测试并根据返回值来判断条件是否成立返回值0为成立。第一种写法直接用 test 命令后面跟条件表达式。第二种写法用方括号 [ 条件表达式 ]这是更常用的写法。用方括号这种写法时左方括号 [ 后面、右方括号 ] 前面都必须至少留一个空格。两种写法的效果完全相同条件成立 → 执行后的返回状态值是 0条件不成立 → 执行后的返回状态值是 1test -v 变量名 是 Shell 中专门用来判断变量是否存在的条件表达式。 如果变量被定义哪怕是空值这条命令会返回0条件成立如果变量完全不存在则返回1条件不成立。