首页
学习
活动
专区
圈层
工具
发布

linux

作者头像
用户9409530
发布2022-02-17 16:14:48
发布2022-02-17 16:14:48
1.8K0
举报

在输入命令前就已经存在的“[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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档