在输入命令前就已经存在的“[root@linuxprobe~]# 当前登录用户名为root,简要的主机名是linuxprobe,所在目录是~ #表示管理员身份(如果是$则表示普通用户,相应的权限也会小一些)
shell 世界的大门 $美元符号, 表示shell等待用户输入;正斜线/ 反斜线\
bash 手册:
Ctrl+c组合键: 当同时按下键盘上的Ctrl和字母c的时候,意味着终止当前进程的运行。假如执行了一个错误命令,或者是执行某个命令后迟迟无法结束,这时就可以冷静地按下Ctrl+c组合键,命令行终端的控制权会立刻回到我们手中。
将系统的当前时间设置为2020年11月1日8点30分的date命令如下所示:
[root@linuxprobe ~]# date -s "20201101 8:30:00"
Sun Nov 1 08:30:00 CST 2020
把打包后的文件自动按照“年-月-日”的格式打包成“backup-2020-9-1.tar.gz”
查看系统时间与时区的方法如下:
[root@linuxprobe ~]# timedatectl status
Local time: Sun 2020-09-06 19:51:22 CST
Universal time: Sun 2020-09-06 11:51:22 UTC
RTC time: Sun 2020-09-06 19:51:21
Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: no
NTP service: inactive
RTC in local TZ: no
[root@linuxprobe ~]# timedatectl set-timezone Asia/Shanghai 设置查看上海时区
[root@linuxprobe ~]# timedatectl set-time 2021-05-18 修改时间
[root@linuxprobe ~]# poweroff 关闭系统
[root@linuxprobe ~]# reboot 重启系统
当执行ps aux命令后通常会看到如表2-8所示的进程状态 -a展示所有进程(包括其他用户) -u 用户以及其他详细信息 -x 显示没有控制终端的进程
top命令用于动态地监视进程活动及系统负载等信息,输入该命令后按回车键执行即可.
而top命令能够动态地查看系统状态,因此完全可以将它看作是Linux中“强化版的Windows任务管理器”。top是相当好用的性能分析工具,该命令的运行
每个进程的进程号码值(PID)是唯一的,可以用于区分不同的进程
停服务 --杀进程
killall命令来批量结束某个服务程序带有的全部进程
[root@linuxprobe ~]# free -h
1.在RHEL 8及众多的Linux系统中,最常使用的Shell终端是什么?
答:Bash(Bourne-Again SHell)解释器。
2.执行Linux系统命令时,添加参数的目的是什么?
答:为了让Linux系统命令能够更贴合用户的实际需求进行工作。
3.Linux系统命令、命令参数及命令对象之间,应该使用什么来间隔?
答:应该使用一个或多个空格进行间隔。
4.请写出用echo命令把SHELL变量值输出到屏幕终端的命令。
答:echo $SHELL。
5.简述Linux系统中5种进程的名称及含义。
答:
8.使用uptime命令查看系统负载时,对应的负载数值如果是0.91、0.56、0.32,那么最近15分钟内负载压力最大的是哪个时间段?
答:通过负载数值可以看出,最近1分钟内的负载压力是最大的。
9.使用history命令查看历史命令的执行记录时,命令前面的编码数字除了排序外还有什么用处?
答:还可以用“!编码数字”的命令格式重复执行某一次的命令记录,从而避免了重复输入较长命令的麻烦。
10.若想查看的文件具有较长的内容,那么使用cat、more、head、tail中的哪个命令最合适? more cat-n 展示行号 cat命令运行后,操作无法控制; more命令可以翻页 less命令更高级
tail 默认文件后10行; tail -f 保持活动状态 一旦有新内容会自动输出; tail -n展示最后*行
答:文件内容较长,使用more命令;反之使用cat命令。
11.在使用mkdir命令创建有嵌套关系的目录时,应该加上什么参数呢?
答:应该加上-p递归迭代参数,从而自动化地创建有嵌套关系的目录。
12.在使用rm命令删除文件或目录时,可使用哪个参数来避免二次确认呢? rm -r rm -f
答:可使用-f参数,这样即可无须二次确认。
13.若有一个名为backup.tar.gz的压缩包文件,那么解压的命令应该是什么? tar -xzvf backup.tar.gz
答:应该用tar命令进行解压,执行tar -xzvf backup.tar.gz命令即可。
14.使用grep命令对某个文件进行关键词搜索时,若想要进行文件内容反选,应使用什么参数? 反斜杠
答:可使用-v参数来进行匹配内容的反向选择,即显示出不包含某个关键词的行。
管道符 重定向 环境变量
本章首先讲解:与文件读写操作有关的重定向技术,5种模式, 标准覆盖输出重定向,标准追加输出重定向,错误覆盖输出重定向,错误追加输出重定向 输入重定向
深入了解管道符命令: 通配符与常用字符转义 让您输入的linux命令更有意义,为下一章学习编写shell脚本打好功底。
输入重定向:把文件导入到命令中,
输出重定向:把原本要输出到屏幕的数据信息写入到指定文件中,在日常的学习和工作中,相较于输入重定向,我们使用输出重定向的频率更高, 标准输出重定向和错误输出重定向以及覆盖写入和追加写入。
要想把原本输出到屏幕的数据转而写入到文件中,就要区别对待 这2种信息。
通过覆盖写入模式向文件中写入数据时,每一次都会覆盖掉上一次写入的内容,所以最终文件只有最后一次的写入结果:
覆盖模式写入
如何把用户的错误信息输出到一个指定的文件,有助于后面排查错误:
shift+反斜杠(\)键即可是输入管道命令, | 其执行格式为: 命令A|命令B 把前一个命令原本要输出到屏幕的信息当做命令输入到: 举例:
把 ps命令输出到屏幕的内容输入到bash文件中: 命令A|命令B|命令C 如果需要将管道符处理后的结果既输出到屏幕,又同时写入到文件,则可以与tee命令结合使用
ps -ef -e 展示系统运行的进程; -f是扩展 UID启动进程的用户 PID进程号 PPID 父进程号 C Cpu 利用率 STIME 启动系统时的系统时间 TTY 进程启动时的终端设备 TIME 启动需要的累积时间 CMD 启动程序的名称
ps命令只能展示某个特定时间的信息, top命令适用于
查询bash进程,然后输出到屏幕 同时保存到result.txt中
通配符就是通用匹配信息的符号,比如* 号就是代表匹配0个或者多个字符,问号?代表匹配单个字符, 中括号内加上数字[0-9]代表匹配0~~9之间的单个数字的字符。[abc]代表匹配 a b c 三个字符中的任意一个字符。
在Linux系统中,变量名称一般都是大写的,命令则都是小写的
PATH环境变量的查询,多个路径组成的环境变量,由:隔开 冒号隔开。对这些路径的增加和删除操作将影响Bash解释器对linux命令的查找。
linux作为一个多任务多用户的操作系统,能够为每个用户提供独立的、合适的工作运行环境,因此一个相同的变量会因为用户的身份不同而具有不同的值。我们可以自行创建变量来满足工作需要,设置一个名称为workdir的
变量,方便用户更轻松进入一个层次较深的目录:
创建workdir目录,然后赋值给WORKDIR ,cd进入WORKDIR 然后查看其路径 。但是有一个弊端,这样的变量不具有全局性,作用范围有限,默认情况下不能被其他用户使用
如果工作需要,可以将其他变量升为全局变量,这样其他用户就可以使用它了。直接在终端中设置的变量可以立马生效,但是服务重启后就会失效。我们需要将变量和变量值写入.bashrc或者.bash_profile文件中,
以确保永久使用他们。
1.把ls命令的正常输出信息追加写入到error.txt文件中的命令是什么? ls >>eeeor.txt
答:ls >> error.txt(注意区分>和>>的不同)。
2.请简单概述管道符的作用。 把左边前面的命令输出值作为右边 后面命令的输入值 A |B|C
答:把左面(前面)命令的输出值作为右面(后面)命令的输入值以便进一步处理信息。
3.Bash解释器的通配符中,星号(*)代表几个字符? 一个或者多个
答:零个或多个。
4.PATH变量的作用是什么? 设定解释器搜索搜索执行命令的路径,找到其所在位置
答:设定解释器搜索所执行命令的路径,找到其所在位置。
5.一般情况下,为参数添加双引号有什么好处? 通常用户界定参数的个数 间隔参数,避免
答:双引号通常用于界定参数的个数,以免程序或命令在执行时产生歧义,因此参数中若有空格,则建议添加双引号。
6.使用什么命令可以把名为LINUX的一般变量转换成全局变量? expot
答:export LINUX。
VI编辑器与shell脚本
使用vi编辑器编辑和修改文档, shell脚本能够对输入值进行文件 数字 字符串的判断比较。 与 非 或 大家还要充分学习 if for while case 条件测试语句。并通过10多个实战脚本的实操练习,达到在工作中灵活运用的水准
linux系统中一切都是文件,而配置一个服务就是在修改其配置文件的参数。 掌握linux系统运维的方法,而不仅仅是停留在 会用某个操作系统的层面上。
vi编辑器设置了3种模式,-------命令模式,末行模式,编辑模式
命令模式:控制光标移动,可对文件进行复制 粘贴 删除和查找
输入模式:正常的文件录入
末行模式:保存或者退出,以及设置编辑环境
编辑文件----->进入命令模式------->切换到录入模式 按下 i ------->编辑完成,按下esc 退出编辑模式,返回到命令模式-------->按下ctrl+C 然后录入: 冒号,wq 保存后退出 ------->使用cat命令查看文件
dd 删除 整行 5dd删除从光标开始5行,yy 复制光标所在整行;n 现实搜索下一个字符 N 现实搜索上一个字符 :set nu显示行号 :set nonu 不显示行号 ?从下至上搜索 /从上至下搜索
在Linux中大多数主机名保存在/etc/hostname 文件中,接下来将etc/hostname 配置文件的内容修改为“linuxprobe.com”
网卡ip地址配置的是否正确是两台服务器是否可以相互通信的前提。在linux系统中 一切都是文件,因此配置网络服务的工作其实就是编辑网卡配置文件,认真学习完成后,一定会有成就感。
第一块网卡 eth0 eth1 在RHEL7 8 ,网卡配置文件的前缀依然为ifcfg 。 现在有一个名称ifcfg -ens160 的网卡设备,将其配置为开机自动启动,并且ip地址 子网 网关等信息由人工指定,其步骤如下:
第一步:首先切换到 /etc/sysconfig/network-scripts 目录中。(存放着网卡的配置文件)
第二步:使用vi编辑器 修改网卡的ifcfg-ens160 .修改后ifconfig命令查看自行确认各自网卡的默认名称。
设备类型:type=Ethernet
地址分配模式:BOOTPROTO=static
网卡名称:NAME=ens160
是否启动:ONBOOT=yes
IP地址:IPADDR=192.168.10.10
子网掩码:NETMASK=255.255.255.0
网卡地址:GATEWAY=192.168.10.1
DNS地址:DNS1=192.168.10.1
第三步:重启网络服务并测试网络是否连通。
第四步:执行重启网卡设备的命令,然后通过ping命令测试网络是否连通。由于linux系统中ping命令不会自动终止。因此需要手动按下Ctrl+C 组合键强制进行结束。
ping 192.168.10.10
配置软件仓库:
既然要使用软件仓库,就要先搭建起来,然后将其配置规则确定才行。 Yum与DNF 软件仓库的配置文件是通用的
第1步:进入etc/yum.repos.d/目录中.
第2步:编辑vim 编辑器创建一个名为rhel8,repo的新配置文件。(文件名称可随意,但后缀必须为repo.)逐项写下面的配置参数并保存退后。
第3步:按配置参数中所填写的仓库位置挂载光盘,并把光盘挂载信息写入/etc/fstab/文件中。
第4步:使用"dnf install httpd -y" 命令检查软件仓库是否已经可用。---------dnf是新一代的rpm软件包管理器
软件仓库是一种进步一步简化能进一步简化RPM管理软件的难度以及自动分析所需软件包及其依赖关系的技术。
1 仓库名称:具有唯一性标识。不应与其软件仓库发生冲突。
2 描述信息:可以是一些介绍性的词,易于识别软件仓库的用处。
3 仓库位置:软件包的获取方式,可以使用FTP或HTTP下载,也可以是本地的文件(需要在后面添加file参数)
4 是否启用:设置此源是否可用,1 为可用 0为禁用。
5 是否校验:设置此源是否校验文件;1 为校验,0 为不校验
6 公钥位置:若上面的参数开启了校验功能,则此处为公钥文件位置,若没有开启,则省略不写。
在Shell脚本中不仅会用到前面学习过的很多Linux命令以及正则表达式、管道符、数据流重定向等语法规则,还需要把内部功能模块化后通过逻辑语句进行处理,最终形成日常所见的Shell脚本。
其实使用Vim编辑器把Linux命令按照顺序依次写入到一个文件中,就是一个简单的脚本了
举例:
在上面的这个example.sh脚本中实际上出现了3种不同的元素:
第一行的脚本声明(#!)用来告诉系统使用哪种Shell解释器来执行该脚本;------bash 解释器
第二行的注释信息(#)是对脚本功能和某些命令的介绍信息,使得自己或他人在日后看到这个脚本内容时,可以快速知道该脚本的作用或一些警告信息;
第三、四行的可执行语句也就是我们平时执行的Linux命令了
除过运用Bash来运行Shell脚本以外,还可以通过直接运行文件执行。------------./ 运行文件命令 提示没有权限需要给文件赋予 u+x 的权限
mkdir 命令创建文件夹时,需要判断是否存在,存在返回0,不存在直接新建。 条件测试语法可以判断表达式是否成立,成立则返回0 否则返回非0.
文件测试即使用指定条件判断文件是否存在,或权限是否满足等情况的运算符。 -d -e -f -r -w -x
条件测试语法: 成立返回0 否则返回 非0
举例: 使用文件测试语句判断/etc/fstab 是否为一个目录类型的文件。------->通过shell解释器内设$?变量展示上一条命令执行后的返回值。如果为0,则目录存在。如果非0,则意味着不是目录。或目录不存在。
举例:执行顺序:先判断当前登录的user 用户是否是root 。然后取! 反,-------->然后逻辑就变成了 当前用户是否是非root .如果成立则根据&& 运算返回 user.如果条件不成立,则根据|| 返回root
当&&不成立 才执行||
&& 逻辑与 只有当前面语句执行成功才会执行后面语句;
||是逻辑或 只有当签名语句执行失败的时候才能执行后面的语句;
!是逻辑非 代表签名的逻辑执行语句取反;之前若为正则表示错误,若为错误则变成正确
整数比较运算符仅仅是对数字的操作。不能将数字和字符 文件等内容一起比较。而且不能使用< > =.因为会和赋值符号冲突。大于号和小于号分别与输出重定向命令 输入重定向命令冲突。
-eq 是否等于
-ne 是否不等于 -gt 是否大于
-lt 是否小于
-le 是否等于或小于
-ge 是否等于或等于
逻辑 free -m 查询内存使用情况------>使用grep Mem 筛选剩余------>通过awk ‘{print $4}’保留第4列 ------->最后将结果赋值给 FreeMem 变量----->通过-lt 判断是否小于1024 ,如果成立------>&&输出内存不足
字符串比较用于判断是否为空或者是否相等。它经常被用来判断是否未被定义。 字符串比较: = 内容相同 !=内容是否不同 -z 内容是否为空
流程控制语句: if
真实的生产场景要能根据业务实际情况进行命令调整,接下来我们通过 if while for case 4种流程控制语句。
if 条件测试语句可以根据实际情况执行相应的命令。 if语句分为单分支结构,双分支结构,多分支结构。 如果......条件成立.......那么........
举例:使用if then fi 单分支语句判断/media/cdrom 目录是否存在,若不存在就创建目录,反之结束条件判断,并退出shell
[root@linuxprobe ~]# vi mkcdrom.sh
#!/bin/bash
DIR ="/media/cdrom" --------定义变量 dir 并赋值 注意:linux是区分大小写的
if[ ! -d $DIR]-------条件判断 DIR是否目录,如果不是就创建
then
mkdir -p $DIR
fi
[root@linuxprobe~]# bash mkcdrom.sh
[root@linuxprobe~]#cd /media/cdrom
[root@linuxprobe~]#ls
drwxr-xr-x. 2 root root 6 Oct 13 21:34 /media/cdrom
if 条件语句双重判断:进行一次条件匹配的判断,如果条件匹配,则去执行相应命令,否则执行不匹配的命令。相当于口语 如果.....那么.....或者....那么
举例:
用linux的命令 ping尝试与主机网络连通性,linux系统中ping命令不能像windows一样尝试4次就结束。因此为了避免等到时间过长,需要通过-c 参数来规定尝试的次数,使用-i 参数定义每个数据包的发送间隔。-w参数定义每个数据包的发送间隔,以及使用-w 参数定义等待超时。
下面使用双分支的if条件语句来验证某台主机是否在线,然后根据返回值的结果。要么显示主机在线信息,要么显示主机不在信息。
[root@linuxprobe~]# vi chkhost.sh--------------编辑chkhost.sh脚本
!/bin/bash ------------系统默认解释器为bash
ping -c 3 -i 0.2 -w 3 $1 &> /dev/null ping命令 dev/null是一个linux黑洞文件,把输出数据重定向到这个文件等于删除数据。(类似于没有回收功能的垃圾箱)
if[$? -eq 0] -----------------$?变量 显示上一次命令执行返回值, 如果ping命令成功则执行 $? -eq0 如果成功则执行 is On-line 否则执行is off-line
then
echo "Host $1 is On-line"
else
echo"Host $1 is off-line"
fi
if条件语句多重判断:多次 判断中有一次匹配成功后都会执行相应的预设命令。
举例:
使用多分支语句if 来判断用户输入的分数在哪个区间,然后输出如Excellent Pass Fail 等提示信息。
[root@linuxprobe~]#vi chkhost.sh
#!/bin/bash/
read -p "Enter your score (0-100):"GRADE
if[$GRADE -ge 85]&&[$GRADE -le 100];then
echo "$GRADE is Excellent"
elif[$GRADE -ge 70]&&[$GRADE -le 84] ;then
echo "$GRADE is Pass"
else
echo "$GRADE is Fail"
fi
[root@linuxprobe~]#bash chkhost.sh
Enter your score(0-100) : 88
88 is Excellent
[root@linuxprobe~]#bash chkhost.sh
Enter your score(0-100) : 80
80 is Pass
[root@linuxprobe ~]# bash chkscore.sh
Enter your score(0-100):30
30 is Fail
[root@linuxprobe ~]# bash chkscore.sh
Enter your score(0-100):200
200 is Fail
为什么输入的分数为200时,依然显示Fail呢?原因很简单—没有成功匹配脚本中的两个条件判断语句,因此自动执行了最终的兜底策略
for循环:
允许一次循环所有数据,然后逐一执行。适用于处理的数据有循环
举例:
从文件中读取多个用户名,然后创建用户名和密码。
[root@linuxprobe~]vi addusers.sh
andy
barry
carl
duke
eric
george
1.Vim编辑器的3种模式分别是什么? 行尾模式 首行模式
答:命令模式、末行模式与输入模式(也叫编辑模式或插入模式)。
2.怎么从输入模式切换到末行模式? esc
答:需要先敲击Esc键退回到命令模式,然后敲击冒号(:)键后进入末行模式。
3.一个完整的Shell脚本应该包含哪些内容?
答:应该包括脚本声明、注释信息和可执行语句(即命令)。
4.分别解释Shell脚本中$0与$3变量的作用。
答:在Shell脚本中,$0代表脚本文件的名称,$3则代表该脚本在执行时接收的第3个参数。
5.if条件测试语句有几种结构,最灵活且最复杂的是哪种结构?
答:if条件测试语句包括单分支、双分支与多分支等3种结构,其中多分支结构是最灵活且最复杂的结构,其结构形式为if…then…elif…then…else…fi。
6.for条件循环语句的循环结构是什么样子的?
答:for条件循环语句的结构为“for变量名in取值列表do命令序列done”,如图4-21所示。
7.若在while条件循环语句中使用true作为循环条件,那么会发生什么事情?
答:由于条件测试值永久为true,因此脚本中的循环部分会无限地重复执行下去,直到碰到exit命令才会结束。
8.如果需要依据用户的输入参数执行不同的操作,最方便的条件测试语句是什么?
答:case条件语句。
9.Linux系统的长期计划任务所使用的服务是什么,其参数格式是什么?
答:长期计划任务需要使用crond服务程序,参数格式是“分、时、日、月、星期 命令”。
linux系统中的UID是唯一值用来判断用户身份。 管理员UID为0,系统的管理员用户。 管理员UID1~999 普通用户 从1000开始
用户>用户组> UID用户id Gid 用户组id
id命令查询用户 linuxprobe的基本信息
[root@linuxprobe~]#id linuxprobe
uid=1000(linuxprobe) gid=1000(linuxprobe) groups=1000(linuxprobe)
useradd 命令 创建用户账户 默认的用户加目录会被存放在/bin/home 目录中,
-d 指定用户的家目录 - u 指定用户默认的UID -s 指定该用户的默认Shell解释器 id 查询用户账户基本信息
groupadd 命令用于创建新的用户组,
[root@linuxprobe ~]# groupadd ronny
[root@linuxprobe~]# usermod --------------创建用户信息也是修改配置文件的过程,用户信息保存在/etc/password文件中
样例:
[root@linuxprobe ~]#id linuxprobe
uid=1000(linuxprobe) gid=1000(linuxprobe) groups=1000(linuxprobe)
[root@linuxprobe ~]#usermod -G root linuxprobe
[root@linuxprobe ~]id linuxprobe
uid=1000(linuxprobe) gid=1000(linuxprobe) groups=1000(linuxprobe), 0(root) -----将用户linuxprobe天剑到root的组当中
[root@linuxprobe ~]usermod -u 8888 linuxprobe -----u参数修改默认的uid的编号
[root@linuxprobe ~]id linuxprobe
uid=8888(linuxprobe) gid=1000(linuxprobe) groups=1000(linuxprobe),0(root)
password 命令 普通用户只能使用passwd命令修改自己的系统密码。而root管理员有权限修改其他人的密码。
[root@linuxprobe ~]passwd -------------修改自己的密码
changing password for user root
New password:此处输入密码值
Retype new password:再次输入进行确认
passwd:all authentication tokens updated successfully.
[root@linuxprobe~]passwd linuxprobe ---------修改linuxprobe的用户名密码
changing password for user linuxprobe
New password :此处输入密码值
Retype new password :再次输入进行确认
passwd:all authentication tokens updated successfully.
-I 锁定用户,禁止登录 -u 解除锁定,允许登录 -d 使该用户可用空密码登录 -e 强制用户在下次登录时修改密码 -s显示用户是否被锁定
userdel 命令 用户删除已有的用户账户。确认用户后续不使用的话,可以删除。 - f 强制删除 -r 删除同时删除用户家目录
[root@linuxprobe~]#userdel linuxprobe
[root@linuxprobe~]id linuxprobe
id:linuxprobe :no such user
文件归属 文件的所有者 所属组 以及其他人对文件的所有者的可读r 可写 w 可执行x 对于目录来说,可读 --能够读取目录内的文件列表;可写 ---能够在目录内新增 删除 重命名 可执行----能够进入该目录
大家一定要心中牢记,文件的所有者、所属组和其他用户的权限之间无关联。一定不要写成rrwwx----的样子,一定要把rwx权限位对应到正确的位置,写成rw-r-x-w-。
权限分配:文件所有者 文件所属组 其他用户
备注:所有用户都可以修改自己密码,用户名密码保存在/etc/shadow 文件中。
chmod 设置文件的一般权限及特殊权限。
[root@linuxprobe~]# chmod 760 linuxprobe
[root@linuxprobe~]# ls -l linuxprobe
-rwxrw----.1 root root 1407 Jul 21 05:09 linuxprobe
chown 用户设置文件的所有者和所属组,
chattr 命令 用于设置文件的隐藏权限, + 隐藏 -去隐藏
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。