查看: 4078|回复: 0

[RedHat系统故障] 红帽RHEL8版本培训之使用必须要掌握的命令

[复制链接]

 成长值: 14990

20

主题

4

回帖

659

积分

超级版主

Rank: 28Rank: 28Rank: 28Rank: 28Rank: 28Rank: 28Rank: 28

积分
659
发表于 2020-10-11 11:05:54 | 显示全部楼层 |阅读模式
逸学已用学习网-免责声明
【逸学已用学习网】保证站内提供的所有可下载资源(软件等等)都是按照“原样”提供,并未对其做过任何改动。但【逸学已用学习网】不保证本站提供的下载资源的准确性、安全性和完整性。同时,【逸学已用学习网】也不承担用户因使用这些下载资源对自己和他人造成任何形式的损失或伤害。
本帖最后由 xiaoqiu 于 2020-10-14 18:55 编辑

目录:

一、 强大好用的SHELL(理论介绍)
二、 执行命令的必备知识(理论介绍)
三、 终端窗口放大,放小方法(介绍及操作)
四、 常用系统工作命令(介绍及操作十三个命令)
五、 系统状态检测命令(介绍及操作十一个命令)
六、 查找定位文件命令(介绍及操作七个命令)
七、 文本文件编辑命令(介绍及操作十二个命令)
八、 文件目录管理命令(介绍及操作八个系统)


一、 强大好用的SHELL(理论介绍)
      一台完整的计算机是由运算器、控制器、存储器、输入输出等多种硬件设备共同组成的,而能让各种硬件设备各司其职且又能协同运行的东西就是系统内核,Linux系统的内核负责完成对硬件资源的分配、调度等管理任务,对系统的正常运行起着十分重要的作用
       与修改Windows系统中的注册表类似,直接改动内核参数的难度比较大,而且一旦“手滑”还有可能导致系统直接崩溃,由此不建议直接去编辑内核中的参数,而是用基于系统调用接口所开发出来的程序或服务来管理计算机,以满足日常的工作需要。
       人类用户是无法直接控制硬件的(想象一个人捧着块硬盘自言自语的滑稽场景)。硬件设备由系统内核直接管理,但也由于复杂性和危险性太高,用户依然不能直接使用。系统提供出的API(系统调用接口)虽然一经调用就能实现某个功能,但恐怕最基本的想传输一条讯息给别人,都要手动调用几十次API接口才能实现,依然太不切实际。而最外层的服务程序则是最贴近于用户端的,这些是集成了大量API接口所开发出的完整软件,例如微信、QQ、游戏都是这样来的。


    讲到这里相信大家已经能够明白服务程序对用户和硬件的作用了。如果把整台电脑比喻成人类社会,那么服务程序就是一名翻译官,将用户提出的需求转换成硬件能够接收的指令代码,再将处理结果反馈成用户能够读懂的内容格式,一来一回,用户便使用上硬件资源了。



    看到被一层层“包裹”起来的硬件设备,有没有感觉像一只蜗牛的壳呢?英文中的壳叫做shell,由此我们在行业中便将用户终端程序也叫做了shell,方便好记。

    Shell就是终端程序的统称,它担当起了人与内核(硬件)之间的翻译工作,用户把一些命令“告诉”终端程序,它就会调用相应的程序服务去完成某些工作。现在包括红帽系统在内的许多主流Linux系统默认使用的终端是Bash(Bourne-Again SHell)解释器,主要有以下4项优势,可以在今后的学习和生产工作中细细体会Linux系统命令行的美妙之处,真正从心里爱上它们。
    1:通过上下方向键来调取过往执行过的Linux命令;
    2:命令或参数仅需输入前几位就可以用Tab键补全;
    3:强大的批处理脚本;
    4:实用的环境变量功能。


    Shell与Bash是包含的关系,举例来说:社会中有翻译官这个职业,它是由许多个从业者共同组成的职业名称,而Bash则是其中的一个最出色的成员,是Shell终端程序中的一份子。

    必须肯定的是,Linux系统中有些图形化工具(比如逻辑卷管理器[Logical Volume Manager,LVM])确实非常好用,极大地降低了运维人员出错的概率,值得称赞。但还有一些图形化工具其实只是调用了命令脚本来完成相应的工作,或往往只是为了完成某种特定工作而设计的,缺乏了Linux命令原有的灵活性及可控性。再者,图形化工具相较于Linux命令行界面会更加消耗系统资源,因此经验丰富的运维人员甚至都不会给Linux系统安装图形界面,需要开始运维工作时直接通过命令行模式远程连接过去,不得不说这样做确实挺高效的。


二、 执行命令的必备知识(理论介绍)
    既然Linux系统中已经有了Bash这么好用的“翻译官”,那么接下来就有必要好好学习下怎么跟它沟通了。要想准确、高效地完成各种任务,仅依赖于命令本身是不够的,还应该根据实际情况来灵活调整各种命令的参数。比如,我们切寿司时尽管可以用菜刀,但米粒一定会撒得满地都是,因此寿司刀上设计的用于透气的圆孔就是为了更好地适应场景而额外增加的参数。当您学完本书并具备一定的工作经验之后,一定能够领悟Linux命令的奥秘。常见执行Linux命令的格式是这样的:

命令名称     [命令参数]     [命令对象]


命令名称:就是我们语法中的“动词”,表达的是想要做的事情,例如创建用户、查看文件、重启系统等等的操作。
命令参数:用于对命令进行调整,让“修改”过的命令能更好的贴合于工作需求,达到事半功倍的效果。就像买衣服一样,默认尺码总会感觉偏大或偏小,要不只能将就着穿,要不就再裁剪修改一下,而这种对命令进行“修改”的行为就叫做加参数。参数可以用长格式(完整单词),也可以用短格式(单个字母缩写),两者分别用“--”与“-”作为前缀。
长格式
man --help
短格式
man -h
命令对象:一般指要处理的文件、目录、用户等资源名称,也就是命令执行后的“承受方”。
注意:命令名称、命令参数与命令对象之间要用空格进行分隔,且严格区分大小写字母。

    初学Linux系统时不会执行命令大多是因为参数比较复杂,参数值需要随不同的命令和实际工作情况而发生改变。有些朋友可能会想:“Linux系统中有那么多命令,我怎么知道某个命令是干嘛用的?在日常工作中遇到了一个不熟悉的Linux命令,我又怎样才能知道它有哪些可用参数呢?”接下来,就拿man这个命令作为本篇文章第一个学习的Linux命令了。
步骤一、点一下桌面左上角的“Activities”按钮,弹出选项菜单后,打开终端


步骤二、打开“终端”窗口后,敲命令man man,然后回车,可以看到关于man的帮助信息
命令:man
读法:【后期完善语音读法】
解析:man命令就是manual的缩写,可以查看一些不熟悉的命令的使用方法,还可以用来查询系统库文件中的一些函数定义和使用方法




当前界面就是关于man命令中相关的使用方法,还可以用来查询系统库文件中的一些函数定义和使用方法



[root@linuxqiu ~]# Man
bash: Man: command not found...(报错提示:没有找到命令)
Similar command is: 'man'      (报错提示:类似的命令是:“man”)
[root@
linuxqiu ~]#
[root@
linuxqiu ~]#
[root@
linuxqiu ~]# MAN
bash: MAN: command not found...(报错提示:没有找到命令)
Similar command is: 'man'      (报错提示:类似的命令是:“man”)
[root@
linuxqiu ~]#
[root@
linuxqiu ~]#
[root@
linuxqiu ~]# man         (命令没错,后面加参数,如man man)
What manual page do you want?  (你想要什么样的手册页?)


比如我想看关于:man命令的帮助手册,那么命令就是上面的 man man
(进入帮助手册界面后,我们可以使用下面的按键去操作)
按键 作用
空格键 向下翻一页
PaGe down(按键在数字键左侧) 向下翻一页
PaGe up(按键在数字键左侧) 向上翻一页
home(按键在数字键左侧) 直接前往首页
End(按键在数字键左侧) 直接前往尾页
Enter(回车键)
向下一行
/ 从上至下搜索某个关键词,如“/linux”
? 从下至上搜索某个关键词,如“?linux”
n 定位到下一个搜索到的关键词
N 定位到上一个搜索到的关键词
q 退出帮助文档

上面我们知道怎么操作翻页、搜索了。那么这里我们介绍一下man命令查看到的帮助内容信息目录结构和操作方法。   
结构名称
代表意义
NAME
命令的名称
SYNOPSIS
参数的大致使用方法
DESCRIPTION
介绍说明
EXAMPLES
演示(附带简单说明)
OVERVIEW
概述
DEFAULTS
默认的功能
OPTIONS
具体的可用选项(带介绍)
ENVIRONMENT
环境变量
FILES
用到的文件
SEE ALSO
相关的资料
HISTORY
维护历史与联系方式

在我们输入命令前就已经存在的“[root@linuxqiu ~]#”这部分内容叫做终端提示符,它用于提醒用户一些基本信息,当前登录用户名为root,简要主机名是linuxqiu,所在目录是~(这里的~指用户家目录,以及如果结尾是#号代表管理员身份,而以$号结尾则代表为普通用户身份,权限较小一些。

还有4个快捷键请查收:
Tab键:在Bash解释器的快捷键中,Tab绝对是使用频率最高的,它能够实现对命令、参数或文件的内容补全。例如想执行reboot重启命令,但一时想不起来了,可以这样输入:
[root@
linuxqiu ~]# re<Tab键><Tab键>  (假设我们只记得re开头的话,那么我们敲re然后按两下Tab键,就可以显示re开头相关的)
read                    redhat-access-insights  rescan-scsi-bus.sh
readarray               reject                  reset
readelf                 remotectl               resize2fs
readlink                rename                  resizecons
readmult                renew-dummy-cert        resizepart
readonly                renice                  resolvconf
readprofile             report-cli              resolvectl
realm                   reporter-rhtsupport     restorecon
realpath                reporter-upload         restorecon_xattr
reboot                  report-gtk              return
recode-sr-latin         repquota                rev
red                     request-key     
[root@linuxqiu ~]# reb<Tab键>   (假设我们只记得reb开头的话,那么我们敲reb然后按一下Tab键,就可以显示reb开头相关的,如果就一个reb相关的话,那么它会默认补全命令
[root@linuxqiu ~]# reboot

上面的实验中,先输入了两个字母“re”,随后敲击了两下Tab键,但由于re开头的命令不止一个,所以系统全都帮我们显示出来了。而第二次输入的“reb”后再敲击一下Tab键,就没有其他以reb开头的重复命令了,一下子就显示出了完整的reboot重启命令。
对于文件名也是一样的,只需要输入前面的一部分名称,只要没有重名的歧义存在,嗖的一下就会自动补全,不仅速度快,而且免掉了手动输入有可能出错的问题。


Ctrl+c键:当同时按下键盘上的“Ctrl”和字母“c”的时候,意味着对当前进程进行终止操作。假如执行了一个错误命令,又或者执行命令后无法结束了,这种情形下一定要保持冷静的按下“Ctrl+c”键,马上命令行终端的控制权又纂回我们手中。

执行下面命令的效果是每间隔一秒钟刷新一次系统负载情况,直到按下“Ctrl+c”键才会终止。
[root@linuxqiu ~]# watch -n 1 uptime
Every 1.0s: uptime localhost.localdomain: Mon Sep 28 19:11:44 2020
19:11:44 up 59 min,  2 users,  load average: 0.00, 0.00, 0.00
<Ctrl>+<c>
[root@linuxqiu ~]#

命令:watch -n 1 uptime
读法:【后期完善语音读法】
命令解析:watch:可以周期性的方式执行指定的指令,指令输出以全屏方式显示;-n:指定指令执行的间隔时间(秒);1:(意思就是1秒);uptime:能够显示系统总共运行了多长时间和系统的平均负载
内容解析:19:11:44(现在时间) up 59 min(系统已经运行了多长时间),  2 users(目前有多少登陆用户),load average: 0.00, 0.00, 0.00(系统在过去的1分钟、5分钟和15分钟内的平均负载。)

Ctrl+d键:当同时按下键盘上的“Ctrl”和字母“d”的时候,代表键盘输入结束(End OF Input),简称EOF。(也可以说:关闭当前终端窗口)

Ctrl+l键:清空当前终端中已有的内容,相当于清屏操作。


三、 终端窗口放大,放小方法(介绍及操作)
终端窗口放大方法:按住Ctrl键,在按Shift键,在按+键,就可以将终端窗口放大


终端窗口缩小方法:按住Ctrl键,在按-键(是加减乘除的:减键),就可以将终端窗口缩小



四、 常用系统工作命令(介绍及操作)
学习命令一、echo命令
echo命令用于在终端设备上输出字符串或变量提取后的值,语法格式为:“echo  [字符串] [$变量]”。
这是在Linux系统中最常用的几个命令之一,但操作却非常简单,执行“echo 字符串”或“echo $变量”就可以,其中$符号意思是提取变量的实际值,以便后续的输出操作。

例如,把指定字符串“linuxqiu.com”输出到终端屏幕的命令为:
[root@linuxprobe ~]# echo “linuxqiu.com”
该命令会在终端屏幕上显示如下信息:
LinuxProbe.com


命令:echo linuxqiu.com
读法:【后期完善语音读法】
命令解析:
内容解析:echo命令,命令功能是在显示器上显示一段文字,一般起到一个提示的作用。echo会将输入的字符串送往标准输出。输出的字符串间以空白字符隔开, 并在最后加上换行号。


下面,我们使用“$变量”的方式提取变量出SHELL的值,并将其输出到屏幕上:
[root@linuxqiu ~]# echo $SHELL
/bin/bash




学习命令二、date命令
date命令用于显示或设置系统的时间与日期,语法格式为:“ date [+指定的格式]”。
用户只需在强大的date命令后输入以“+”号开头的参数,即可按照指定格式来输出系统的时间或日期,这样在日常工作时便可以把备份数据的命令与指定格式输出的时间信息结合到一起。例如,把打包后的文件自动按照“年-月-日”的格式打包成“backup-2020-9-1.tar.gz”,用户只需要看一眼文件名称就能大概了解到每个文件的备份时间了。

date命令中常见的参数格式及作用
参数
作用
%S
秒(00~59)
%M
分钟(00~59)
%H
小时(00~23)
%I
小时(00~12)
%m
月份(1~12)
%p
显示出AM或PM
%a
缩写的工作日名称(例如:Sun)
%A
完整的工作日名称(例如:Sunday)
%b
缩写的月份名称(例如:Jan)
%B
完整的月份名称(例如:January)
%q
季度(1~4)
%y
简写年份(例如:20)
%Y
完整年份(例如:2020)
%d
本月中的第几天
%j
今年中的第几天
%n
换行符(相当于按下回车键)
%t
跳格(相当于按下Tab键)
使用命令查看当前系统时间
[root@linuxqiu ~]# date
Sat Sep 5 09:13:45 CST 2020


使用命令查看当前系统的“年-月-日 小时:分钟:秒”
[root@linuxqiu ~]# date "+%Y-%m-%d %H:%M:%S"
2020-09-05 09:14:35

使用命令查看当前系统的“年-月-日”
[root@linuxqiu ~]# date "+%Y-%m-%d"
2020-09-05


使用命令设置系统时间为2020年11月1日8点30分
[root@linuxqiu ~]# date -s "20201101 8:30:00"
Sun Nov 1 08:30:00 CST 2020

再次使用查看当前系统时间,可以看到已经修改成上面我们设置的时间了
[root@linuxqiu ~]# date
Sun Nov 1 08:30:08 CST 2020

date命令中的参数%j可以用来查看今天是当年中的第几天。这个参数能够很好地区分备份时间的新旧,即数字越大,越靠近当前时间。
[root@linuxqiu ~]# date "+%j"
306

提示:date命令大小写严格区分


学习命令三、timedatectl命令
timedatectl命令用于设置系统的时间,英文全称为:“time date control”,语法格式为:“ timedatectl [参数]”。
发现电脑时间跟实际不符?如果只差几分钟的话,我们可以直接调整,但如果差几个小时,那么除了调整当前的时间,还有必要检查下时区了。

timedatectl命令常见的参数格式及作用
参数
作用
status
显示状态信息
list-timezones
列出已知时区
set-time
设置系统时间
set-timezone
设置生效时区

查看系统时间与时区:
[root@linuxqiu ~]# timedatectl status
               Local time: Sun 2020-10-11 14:54:14 EDT
           Universal time: Sun 2020-10-11 18:54:14 UTC
                 RTC time: Sun 2020-10-11 21:59:53
                Time zone: America/New_York (EDT, -0400)
System clock synchronized: no
              NTP service: active
          RTC in local TZ: no

如果您查到的时区不是上海(Asia/Shanghai),可以手动进行设置:
[root@linuxqiu ~]# timedatectl set-timezone Asia/Shanghai

如果时间还是不正确,我们可以手动的修改系统日期:
[root@linuxqiu ~]# timedatectl set-time 2020-10-11

如果想修改时间的话,也可以:
[root@linuxqiu ~]# timedatectl  set-time 22:00
[root@
linuxqiu ~]# date
Mon Oct 12 22:00:01 CST 2020


如果想直接设置系统年月日 小时 分钟 秒
[root@localhost ~]# timedatectl set-time "2020-10-15 20:00:00"
[root@localhost ~]# date
Thu Oct 15 20:00:07 CST 2020
温馨提示:一定要加双冒号。如果没加,会报错哦!


故障问题:如果修改时间提示报错怎么办?
[root@localhost ~]# timedatectl  set-time 22:05
Failed to set time: NTP unit is active
解决方法是:禁用NTP时间同步

命令:timedatectl set-ntp false

其它常用命令

命令
作用
timedatectl list-timezones
查看所有可用时区
timedatectl set-local-rtc 1
设置硬件时钟为本地时间
timedatectl set-local-rtc 0
设置硬件时钟为UTC时间
timedatectl set-ntp true
启动NTP时间同步(启用NTP服务或者Chrony服务)
timedatectl set-ntp false
禁用NTP时间同步


学习命令四、reboot命令
reboot命令用于重启系统,输入后回车执行即可。
由于重启计算机这种操作会涉及硬件资源的管理权限,因此最好使用root管理员来重启,普通用户可能会被拒绝,其命令如下:
[root@linuxqiu ~]# reboot



学习命令五、poweroff命令
poweroff命令用于关闭系统,输入后回车执行即可。
该命令也会涉及到硬件资源的管理权限,因此最好还是用root管理员来关闭电脑,其命令如下:
[root@linuxqiu ~]# poweroff


这里我们介绍一下其他几种关机命令(大家主用poweroff关机也可以)
poweroff
shutdown
halt
init 0
其它几种关机命令描述:
halt:关机但是不关闭电源,需要手动关闭电源(加p参数会关闭电源),不加参数时调用shutdown来关机。halt被称为最简单的关机命令,它会通知硬件停止所有的CPU功能,执行时会杀死进程,执行sync系统调用文件系统写操作,完成后就会停止内核。若系统的run level在0-6中,则关闭系统,否则调用shutdown -h来取代。
#halt -p相当于poweroff
#halt -f强制关机
#halt -i关机或重启前关闭所有网络接口


poweroff:关机同时关闭电源,会发送一个ACPI信号通知系统关机,在多用户方式下(run level3)下不建议使用。
#poweroff -f 强制关机


shutdown:命令是一种安全关闭Linux操作系统的命令,Linux系统与Windows系统不同,Linux在后台运行很多线程,强制关机会导致线程数据丢失,甚至有直接关机有可能损坏硬件的风险。

加参数时为如下意义:
#shutdown -r 关机后立即重新启动
#shutdown -P 相当于poweroff
#shutdown -H 关机后不重新启动
#shutdown -k 并不是真正关机,只是发出警告信息给所有用户

#shutdown -n 快速关机,不经过init程序

#shutdown 加时间,如# shutdown now / # shutdown 22:22可以在指定时间关机,在关机前,也可以执行#shutdown -c取消定时关机命令。
但是此指令没有-f强制参数

案例:
立即关闭系统:shutdown -h now
立即重启系统:shutdown -r now
定时45分钟后关闭系统:shutdown -h 45
重新启动系统,并发出警告信息:shutdown –r now “system will be reboot now!”


init:所有进程的祖先,进程号永远为1,linux系统操作中不可缺少的程序之一,所有发送TERM信号给init会终止所有用户进程、守护进程等。init定义了8个运行级别,这里相关的主要是0关机,6重启

init定义了8个运行级别如下:
运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
运行级别2:多用户状态(没有NFS)
运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
运行级别4:系统未使用,保留
运行级别5:X11控制台,登陆后进入图形GUI模式
运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动



学习命令六、wget命令
wget命令用于在终端命令行里下载网络文件,英文全称为:“web get”,语法格式为:“wget [参数] 网址”。
无需打开浏览器,直接在命令界面就能下载文件,但如果您没有Linux系统的管理经验,当前只需了解一下wget命令的参数以及作用,然后看一眼下面的演示实验就够了,切记不要急于求成。后面章节将逐步讲解Linux系统的配置管理方法,可以等掌握了网卡的配置方法后再来进行这个实验操作。


参数
作用
-b
后台下载模式
-P
下载到指定目录
-t
最大尝试次数
-c
断点续传
-p
下载页面内所有资源,包括图片、视频等
-r
递归下载



尝试使用wget命令从本站中下载一张图片,执行命令后的下载效果如下:
命令:wget
解析:命令 软件下载地址(记住:命令与下载地址中间是有“空格”的哦!)


接下来,使用wget命令递归下载https://www.linuxqiu.com/网站内的所有页面数据以及文件,下载完后会自动保存到当前路径下一个名为www.linuxqiu.com的目录中,该命令的执行结果如下:(下载完成后,在当前目录敲“ls”,可以看到www.linuxqiu.com目录)
命令:wget -r -p https://www.linuxqiu.com/




学习命令七、ps命令
ps命令用于查看系统中的进程状态,英文全称为:“processes”,语法格式为:“ps [参数]”。
有些朋友在第一次执行这个命令时都要惊呆一下—怎么会有这么多输出值,这可怎么看得过来?其实,高手通常会将ps命令与第3章的管道符技术搭配使用,用来抓取与某个指定服务进程相对应的PID号码。

ps命令的常见参数如下
参数
作用
-a
显示所有进程(包括其他用户的进程)
-u
用户以及其他详细信息
-x
显示没有控制终端的进程

Linux系统中时刻运行着许多进程,如果能够合理地管理它们,则可以优化系统的性能。
五种常见的进程状态,分别为运行、中断、不可中断、僵死与停止,其各自含义如下所示。
    R 全称:running(正在服务):进程正在运行或在运行队列中等待。
    S
全称:Sleeping(等待服务/中断服务):进程处于休眠中,当某个条件形成后或者接收到信号时,则脱离该状态。
    D 全称:DiskSleep(不可中断):进程不响应系统异步信号,即便用kill命令也不能将其中断。
    Z
全称:Zombie(僵死):进程已经终止,但进程描述符依然存在, 直到父进程调用wait4()系统函数后将进程释放。
    T
全称:stopped(停止):进程收到停止信号后停止运行。

除了上面的五种常见进程状态,还有可能是高优先级(<),低优先级(N),被锁进内存(L),包含子进程(s)以及多线程(l)这五种补充形式。

当执行“ps aux”命令后会看到进程状态



ps -aux列表解析:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
进程的所有者 进程ID号 运算器占用率 内存占用率 虚拟内存使用量(单位是KB) 占用的固定内存量(单位是KB) 所在终端 进程状态 被启动的时间 实际使用CPU的时间 命令名称与参数

不知道大家有没有发现,我们执行ps -aux命令查看进程很乱,找的眼花缭乱,那么我们可以在命令后面加管道符,过滤一下。比如说我只想看关于ssh的服务,那么命令如下命令ps -aux | grep sshd


有些朋友可能会问:前面我们有提到的,在Linux系统中的命令参数有长短格式之分,长格式和长格式之间不能合并,长格式和短格式之间也不能合并,但短格式和短格式之间是可以合并的,合并后仅保留一个-(减号)。另外ps命令可允许参数不加减号(-),因此可直接写成ps aux的样子。

(温馨提示:当我们执行PS -aux命令之后,也有会一些问题,第一个问题是:它太乱了,我们根本看不明的。第二个问题是:它是单次有效的,它并不是实时去刷新的,简单的说就是不能实时显示最新的信息,所以建议还是使用top命令去查看,它是一个动态的刷新进程状态的命令


学习命令八、top命令
top命令用于动态地监视进程活动及系统负载等信息,输入后回车执行即可。
上面ps -aux命令是静态的查看系统状态,不能实时滚动最新数据,而top命令就能够动态地查看系统状态,完全可以将它看作是Linux中的“强化版的Windows任务管理器”,是相当好用的性能分析工具,top命令的运行界面如下。


图片解析:

案例:
问:CPU负载, 0.05、0.15、0.30,请问当前负载是高了,还是低了。
答:负载值是从后往前读的,所以说我们负载值是低了。原因是0.05是最近1分钟的负载值,0.15是最近5分钟的负载值,0.30是最近15分钟的负载值。

学习命令九、nice命令
nice命令用于调整进程的优先级,语法格式为:“nice 优先级数字 服务名称”。
上面top命令输出结果中的PR和NI值代表的是进程的优先级,数字越低(取值范围是-20到19)、优先级越高。日常生产工作中,我们可以将一些不重要的进程的优先级调低、让紧迫的服务更多的利用CPU和内存资源,合理分配系统资源。例如将bash服务的优先级调整到最高:
[root@linuxqiu ~]# nice -n -20 bash
[root@linuxqiu ~]#



学习命令十、pidof命令
查询某个指定服务进程的PID号码值,语法格式为:“pidof [参数] 服务名称”。
每个进程的进程号码值(PID)是唯一的,可以用于区分不同的进程,来查询本机上sshd服务程序的PID:

pidof查看进程号码的命令,比如查看sshd
[root@linuxqiu ~]# pidof sshd
1002

学习命令十一、kill命令
kill命令用于终止某个指定PID值的服务进程,语法格式为:“kill [参数] 进程的PID”。
接下来,使用kill命令把上面用pidof命令查询到的PID所代表的进程终止掉,其命令如下所示。这种操作的效果等同于强制停止sshd服务:

[root@linuxqiu ~]# kill 1002

但也有时候会提示进程无法被终止,则可以加参数-9,代表最高级别的强制杀死进程:

[root@linuxqiu ~]# kill -9 1002


学习命令十二、killall命令
killall命令用于终止某个指定名称的服务所对应的全部进程,语法格式为:“killall [参数] 服务名称”。
通常来讲,复杂软件的服务程序会有多个进程协同为用户提供服务,如果用上面kill命令的方式逐个去结束这些进程会比较麻烦,此时可以使用killall命令来批量结束某个服务程序带有的全部进程,下面以httpd服务程序为例,来结束其全部进程。由于RHEL 8系统默认没有安装httpd服务程序,因此大家此时只需看操作过程和输出结果,等学习了相关内容之后再来实践。

[root@linuxqiu ~]# pidof httpd
13581 13580 13579 13578 13577 13576
[root@linuxqiu ~]# killall httpd
[root@linuxqiu ~]# pidof httpd
[root@linuxqiu ~]#


简单说明上面上面三种命令
pidof命令:查看进程
kill命令:进程号码
killall命令:服务名称

学习命令十三、重启sshd服务,再去查看进程号码是否恢复
[root@localhost ~]# systemctl restart sshd
[root@localhost ~]# pidof sshd
9538

学习命令十四、pstree命令
pstree命令用于以树状图的形式展示进程之间的关系,英文全称为:“process tree”,输入后回车执行即可。
相信同学们也发现了ps命令的致命伤,就是信息量太大又没有规律,给人看一眼就不想再看的感觉。如果想让进程以树状图的形式,有层次的展示出进程之间的关系,则可以使用pstree命令:




五、 系统状态检测命令(介绍及操作)
    作为一名合格的运维人员,想要更快、更好地了解Linux服务器,必须具备快速查看系统运行状态的能力,因此接下来会逐个讲解与网卡网络、系统内核、系统负载、内存使用情况、当前启用终端数量、历史登录记录、命令执行记录以及救援诊断等相关命令的使用方法。这些命令都超级实用,请大家用心学习,加以掌握。

学习命令一、ifconfig命令
ifconfig命令用于获取网卡配置与网络状态等信息,英文全称为:“interface config”,语法格式为:“ifconfig [参数] [网络设备]”。
使用ifconfig命令来查看本机当前的网卡配置与网络状态等信息时,其实主要查看的就是网卡名称、inet参数后面的IP地址、ether参数后面的网卡物理地址(又称为MAC地址),以及RX、TX的接收数据包与发送数据包的个数及累计流量(即下面加粗的信息内容):



命令解析:


学习命令二、uname命令
uname命令用于查看系统内核版本与系统架构等信息,英文全称为:“Unix name”,语法格式为:“uname [-a]”。
在使用uname命令时,一般要固定搭配上-a参数来完整地查看当前系统的内核名称、主机名、内核发行版本、节点名、压制时间、硬件名称、硬件平台、处理器类型以及操作系统名称等信息:

[root@linuxqiu ~]# uname -a
Linux localhost.localdomain 4.18.0-80.el8.x86_64 #1 SMP Wed Mar 13 12:02:46 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux


命令解析:


学习命令三、查看当前系统版本详细信息的命令
如果要查看当前系统版本的详细信息,则需要查看redhat-release文件,其命令如下
[root@linuxqiu ~]# cat /etc/redhat-release
Red Hat Enterprise Linux release 8.0 (Ootpa)


学习命令四、uptime命令
uptime命令用于查看系统的负载信息,输入后回车执行即可。
uptime命令真的很棒,它可以显示当前系统时间、系统已运行时间、启用终端数量以及平均负载值等信息。平均负载值指的是系统在最近1分钟、5分钟、15分钟内的压力情况(下面加粗的信息部分),负载值越低越好:
[root@linuxqiu ~]# uptime
22:49:55 up 10 min, 1 users, load average: 0.01, 0.19, 0.18

(细心的小伙伴已经注意到了uptime命令跟top命令查看的第一行信息类似。区别是uptime命令是静态的,而top命令是动态的)

学习命令五、free命令
free命令用于显示当前系统中内存的使用量信息,语法格式为:“free [-h]”。
为了保证Linux系统不会因资源耗尽而突然宕机,运维人员需要时刻关注内存的使用量。在使用free命令时,可以结合使用-h参数以更人性化的方式输出当前内存的实时使用量信息。


命令free -h或free -m都可以查看内存的实时使用量信息,区别是如果不使用-h(易读模式)查看内存使用量情况则默认以KB为单位,那服务器如果有几百GB的内存,划算下来就会是一大长串的数字,真不利于阅读。

解析 说明
Mem
Swap
设备物理内存
它实际上是将我们硬盘上的空间模拟成一个内存去使用的。swap叫:交换分区
totel 设备内存总数
used 设备已经使用的内存容量
free 设备当前可用的内存容量
shared多个进程共享的内存总和,当前废弃不用。
buffers/cached缓存内存数
available
真正剩余的可被程序应用的内存数

学习命令六、who命令
who命令用于查看当前登入主机的用户终端信息,输入后回车执行即可。
这三个简单的字母可以快速显示出所有正在登录本机的用户名称以及他们正在开启的终端信息,如果有远程用户,还会显示出来访者的IP地址。

登陆的用户名 终端设备 登陆到系统的时间
root tty2 2020-07-24 06:26 (tty2)

学习命令七、last命令
last命令用于调取主机的被访记录,输入后回车执行即可。
Linux系统会将每次登录信息都记录到日志文件中,如果哪天我们想看一下都有谁登录我们的服务器了,那就直接执行这条命令就行:



学习命令八、ping命令
ping命令用于测试主机之间的网络连通性,语法格式为:“ping [参数] 主机地址”。
即便我们没有学习过Linux系统,肯定也懂得使用ping命令吧。执行ping命令会使用ICMP传输协议发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,以此来判断对方是否在线并且网络正常。


参数 作用
-c 总共发送次数
-l 指定网卡名称
-i 每次间隔时间(秒)
-W 最长等待时间(秒)

如图案例,ping -c 5 192.168.20.10   (意思是我ping某个IP地址的次数是5次


如图案例,ping一个不在线的设备,是ping不通的


学习命令九、tracepath命令
tracepath命令用于显示数据包达到目的主机途中所经过的路由信息,语法格式为:“tracepath [参数] 域名”。
当两台主机之间无法正常ping通时,我们要考虑是否中间有错误的路由信息,导致数据被某一台设备错误丢弃了,这时便可以使用tracepath命令追踪一下所有途径的路由信息,以便分析出是那台设备出了问题,下面的情况就很清晰了:

(可以从路由追踪信息来看,到140.205.50.237断了,追踪不到下一台设备,那么就有可能是下一台设备网络不通,所以我们追踪不到IP地址。)
[root@linuxqiu ~]# tracepath www.linuxqiu.com
1?: [LOCALHOST]                             pmtu 1500
1:  no reply
2:  11.223.0.189                            5.954ms asymm  1
3:  11.223.0.14                             6.256ms asymm  2
4:  11.220.159.62                           3.313ms asymm  3
5:  116.251.107.13                          1.841ms
6:  140.205.50.237                          2.416ms asymm  5
7:  no reply
8:  no reply
9:  no reply
10:  no reply
………………省略部分输出信息………………


学习命令九、netstat命令
netstat命令用于显示如网络连接、路由表、接口状态等的网络相关信息,英文全称为:“network status”,语法格式为:“netstat [参数]”。
只要使用得当,便可以查看到网络状态的方方面面信息,我们找出一些常用参数大家感受下吧
netstat命令的常见参数以及作用

命令
作用
-a
显示所有连接中的Socket
-p
显示正在使用的Socket信息
-t
显示TCP协议的连接状态
-u
显示UDP协议的连接状态
-n
使用IP地址,不使用域名
-l
仅列出正在监听的服务状态
-i
现在网卡列表信息
-r
显示路由表信息

如图案例一、显示详细的网络状况:


如图案例二、显示网卡列表:


学习命令十、history命令
history命令用于显示执行过的命令历史,语法格式为:“history [-c]”。
history命令是运维人员最喜欢的命令。执行history命令可以显示出当前用户在本地计算机中执行过的最近1000条命令记录。如果觉得1000不够用,可以自定义/etc/profile文件中的HISTSIZE变量值去增大。在使用history命令时,可以使用-c参数清空所有的命令历史记录。还可以使用“!编码数字”的方式来重复执行某一次的命令。总之,history命令有很多有趣的玩法等待您去试验。




历史命令会被保存到用户家目录中的.bash_history文件中。Linux系统中以点(.)开头的文件代表隐藏文件,这些文件大多数为系统服务文件,可以用cat命令查看其文件内容:
[root@linuxqiu ~]# cat ~/.bash_history

要清空当前用户在本机上执行的Linux命令历史记录信息,可执行如下命令:
[root@linuxprobe ~]# history -c


学习命令十一、sosreport命令
sosreport命令用于收集系统配置及架构信息并输出诊断文档,输入后回车执行即可。
当Linux系统出现故障需要联系技术支持人员时,大多数时候都要先使用这个命令来简单收集系统的运行状态和服务配置信息,以便让技术支持人员能够远程解决一些小问题。
在下面的输出信息中,加粗的部分是收集好的资料压缩文件以及校验码,将其发送给技术支持人员:

[root@linuxqiu ~]# sosreport


敲完回车后,下面步骤我们继续敲回车


敲完回车后,程序就开始收集信息



收集完成后,会自动将收集好的信息压缩成压缩包以及显示校验码



六、 查找定位文件命令(介绍及操作)
学习命令一、cd命令
cd命令用于切换当前的工作路径,英文全称为:“change directory”,语法格式为:“cd [参数] [目录]”。
这个命令应该是最常用的一个Linux命令了。可以通过cd命令迅速、灵活地切换到不同的工作目录。除了常见的切换目录方式,还可以使用“cd -”命令返回到上一次所处的目录,使用“cd..”命令进入上级目录,以及使用“cd ~”命令切换到当前用户的家目录,亦或使用“cd ~username”切换到其他用户的家目录。

假如我们要进入/etc目录中:
[root@linuxqiu ~]# cd /etc

同样的道理,如果想要进/bin目录,可命令:
[root@linuxqiu etc]# cd /bin

如果我们要返回到上一次的目录(即/etc目录),可执行如下命令:
[root@linuxqiu bin]# cd -
/etc
[root@linuxqiu etc]#

也可以通过下面的命令快速切换到用户的家目录:
[root@linuxqiu etc]# cd ~
[root@linuxqiu ~]#



学习命令二、ls命令
ls命令用于显示目录中的文件信息,英文全称为:“list”,语法格式为:“ls [参数] [文件名称]”。
所处的工作目录不同,当前工作目录下能看到的文件肯定也不同。使用ls命令的“-a”参数看到全部文件(包括隐藏文件),使用“-l”参数可以查看文件的属性、大小等详细信息。将这两个参数整合之后,再执行ls命令即可查看当前目录中的所有文件并输出这些文件的属性信息:



如果想查看目录属性信息,需要加-d参数。假设我想看/etc目录的权限与属性信息


学习命令三、tree命令
tree命令用于以树状图的形式列出目录内容及结构,输入后回车执行即可。
虽然ls命令可以很便捷的查看到目录内有哪些文件,但无法直观的获取到目录内文件的层次结构,比如目录A中有个B,B中又有个C,那么ls命令就只能看到最外面的A目录,显然有些时候不太够用。而tree命令则能够以树状图的形式列出目录内所有文件的结构,可以对比下两者的区别:



查看到目录内文件名称以及结构:


学习命令四、find命令
find命令用于按照指定条件来查找文件所对应的位置,语法格式为:“find [查找范围] 寻找条件”。
在“Linux系统中的一切都是文件”,接下来就要见证这句话的分量了。在Linux系统中,搜索工作一般都是通过find命令来完成的,它可以使用不同的文件特性作为寻找条件(如文件名、大小、修改时间、权限等信息),一旦匹配成功则默认将信息显示到屏幕上。
find命令的参数以及作用如表
参数
作用
-name
匹配名称
-perm
匹配权限(mode为完全匹配,-mode为包含即可)
-user
匹配所有者
-group
匹配所有组
-mtime -n +n
匹配修改内容的时间(-n指n天以内,+n指n天以前)
-atime -n +n
匹配访问文件的时间(-n指n天以内,+n指n天以前)
-ctime -n +n
匹配修改文件权限的时间(-n指n天以内,+n指n天以前)
-nouser
匹配无所有者的文件
-nogroup
匹配无所有组的文件
-newer f1 !f2
匹配比文件f1新但比f2旧的文件
--type b/d/c/p/l/f
匹配文件类型(后面的字幕字母依次表示块设备、目录、字符设备、管道、链接文件、文本文件)
-size
匹配文件的大小(+50KB为查找超过50KB的文件,而-50KB为查找小于50KB的文件)
-prune
忽略某个目录
-exec …… {}\;
后面可跟用于进一步处理搜索结果的命令(下文会有演示)
这里需要重点讲解一下-exec参数重要的作用。这个参数用于把find命令搜索到的结果交由紧随其后的命令作进一步处理,它十分类似于管道符技术,并且由于find命令对参数的特殊要求,因此虽然exec是长格式形式,但依然只需要一个减号(-)。
根据文件系统层次标准(Filesystem Hierarchy Standard)协议,Linux系统中的配置文件会保存到/etc目录中。

如果想获取到该目录中所有以host开头的文件列表,可以执行如下命令:

[root@linuxqiu ~]# find /etc -name "host*" -print
/etc/host.conf
/etc/hosts
/etc/hosts.allow
/etc/hosts.deny
/etc/avahi/hosts
/etc/hostname


如果要在整个系统中搜索权限中包括SUID权限的所有文件,只需使用-4000即可:
[root@linuxqiu ~]# find / -perm -4000 -print
/usr/bin/fusermount
/usr/bin/chage
/usr/bin/gpasswd
/usr/bin/newgrp
/usr/bin/umount
/usr/bin/mount
/usr/bin/su
/usr/bin/pkexec
/usr/bin/crontab
/usr/bin/passwd
………………省略部分输出信息………………
    进阶实验:在整个文件系统中找出所有归属于linuxprobe用户的文件并复制到/root/findresults目录。
    该实验的重点是“-exec {}   \;”参数,其中的{}表示find命令搜索出的每一个文件,并且命令的结尾必须是“\;”。完成该实验的具体命令如下:
    [root@linuxqiu ~]# find / -user linuxprobe -exec cp -a {} /root/findresults/ \;


学习命令五、find命令
locate命令用于按照名称快速搜索文件所对应的位置,语法格式为:“locate 文件名称”。
使用find命令进行全盘搜索虽然更准确,但是效率有点低,如果我们仅仅是想找一些常见的、又知道大概名称的文件,不如试试locate命令的功能。locate命令是将一些常用的目录做成一个索引库文件,一般是叫做“/var/lib/mlocate/mlocate.db”,后续再搜索文件的时候就是根据这个数据库中所包含的路径进行查找,速度会快很多
第一次使用前,记得先执行下updatedb命令来生成出索引数据库,然后再进行查找:


[root@linuxqiu ~]# updatedb
[root@linuxpqiu ~]# ls -l /var/lib/mlocate/mlocate.db
-rw-r-----. 1 root slocate 2945917 Sep 13 17:54 /var/lib/mlocate/mlocate.db


搜索出所有包含有“whereis”名称的文件所在位置:
[root@linuxpqiu ~]# locate whereis
/usr/bin/whereis
/usr/share/bash-completion/completions/whereis
/usr/share/man/man1/whereis.1.gz


学习命令六、whereis命令
whereis命令用于按照名称快速搜索二进制程序(命令)、源代码以及帮助手册文件所对应的位置,语法格式为:“whereis 命令名称”。
简单来说,whereis命令也是基于了上述updatedb命令所生成出的索引库文件进行搜索,区别是不关心那些相同名称的文件,仅仅是快速找到对应的命令文件及其帮助文件所在位置。
分别查找出ls和pwd命令所在位置吧:


[root@linuxqiu ~]# whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz
[root@linuxqiu ~]# whereis pwd
pwd: /usr/bin/pwd /usr/share/man/man1/pwd.1.gz /usr/share/man/man1p/pwd.1p.gz


学习命令七which命令
which命令用于按照指定名称快速搜索二进制程序(命令)所对应的位置,语法格式为:“which 命令名称”。
which命令是在PATH变量所指定的路径中,按照指定条件搜索命令所在的路径。也就是说如果我们既不关心同名文件(find与locate)、也不关心命令所对应的源代码和帮助文件(whereis),仅仅是想找到命令本身所在的路径,那么这个命令太适合了。那查找下whereis和which命令所对应的路径吧。
[root@linux
qiu ~]# which locate
/usr/bin/locate
[root@linux
qiu ~]# which whereis
/usr/bin/whereis



七、 文本文件编辑命令(介绍及操作)
通过前面命令的学习,应该已经掌握了切换工作目录及对文件的管理方法。在Linux系统中“一切都是文件”,对服务程序进行配置自然也就是编辑程序的配置文件。如果不能熟练地查阅系统或服务的配置文件,那以后工作时可就真的要尴尬了。下面将讲解几条用于查看文本文件内容的命令。至于相对比较复杂的文本编辑器工具,将在下一篇文章中讲解到Shell脚本。

学习命令一、cat命令
cat命令用于查看纯文本文件(内容较少的),英文全称为:“concatenate”,语法格式为:“cat [参数] 文件名称”。
Linux系统中有多个用于查看文本内容的命令,每个命令都有自己的特点,比如这个cat命令就是用于查看内容较少的纯文本文件的。cat这个命令也很好记,因为cat在英语中是“猫”的意思。
如果在查看文本内容时还想顺便显示行号的话,不妨在cat命令后面追加一个-n参数:
[root@linuxqiu ~]# cat -n initial-setup-ks.cfg
     1    #version=RHEL8
     2    # X Window System configuration information
     3    xconfig  --startxonboot
     4    # License agreement
     5    eula --agreed
     6    # Use graphical install
     7    graphical
     8    # Network information
     9    network  --bootproto=dhcp --device=ens160 --onboot=off --ipv6=auto --no-activate
    10    network  --bootproto=dhcp --hostname=localhost.localdomain
    11    repo --name="AppStream" --baseurl=file:///run/install/repo/AppStream
    12    ignoredisk --only-use=sda
    13    # Use CDROM installation media
    14    cdrom
    15    # Run the Setup Agent on first boot
    16    firstboot --enable
    17    # System services
………………省略部分输出信息………………

学习命令二、more命令
more命令用于查看纯文本文件(内容较多的),语法格式为:“more [参数] 文件名称”。
如果需要阅读长篇小说或者非常长的配置文件,那么“小猫咪”可就真的不适合了。因为一旦使用cat命令阅读长篇的文本内容,信息就会在屏幕上快速翻滚,导致自己还没有来得及看到,内容就已经翻篇了。因此对于长篇的文本内容,推荐使用more命令来查看,more命令会在最下面使用百分比的形式来提示您已经阅读了多少内容,还可以使用空格键或回车键向下翻页
[root@linux
qiu ~]# more initial-setup-ks.cfg
#version=RHEL8
# X Window System configuration information
xconfig  --startxonboot
# License agreement
eula --agreed
# Use graphical install
graphical
# Network information
network  --bootproto=dhcp --device=ens160 --onboot=off --ipv6=auto --no-activate
network  --bootproto=dhcp --hostname=localhost.localdomain
repo --name="AppStream" --baseurl=file:///run/install/repo/AppStream
ignoredisk --only-use=sda
# Use CDROM installation media
cdrom
# Run the Setup Agent on first boot
firstboot --enable
# System services
services --disabled="chronyd"
# Keyboard layouts
keyboard --vckeymap=us --xlayouts='us'
# System language
lang en_US.UTF-8
--More--(41%)

学习命令三、head命令
head命令用于查看纯文本文件的前N行,语法格式为:“head [参数] 文件名称”。
在阅读文本内容时,谁也难以保证会按照从头到尾的顺序往下看完整个文件。如果只想查看文本中前10行的内容,该怎么办呢?head命令可以派上用场了:
[root@linux
qiu ~]# head -n 10 initial-setup-ks.cfg
#version=RHEL8
# X Window System configuration information
xconfig --startxonboot
# License agreement
eula --agreed
# Use graphical install
graphical
# Network information
network --bootproto=dhcp --device=ens160 --onboot=off --ipv6=auto --no-activate
network --bootproto=dhcp --hostname=localhost.localdomain

学习命令四、tail命令
tail命令用于查看纯文本文件的后N行或持续刷新文件的最新内容,语法格式为:“tail [参数] 文件名称”。
可能还会遇到另外一种情况,比如需要查看文本内容的最后10行,这时就需要用到tail命令了。tail命令的操作方法与head命令非常相似,只需要执行“tail -n 10 文件名”命令就可以达到这样的效果:
[root@linux
qiu ~]# tail -n 10 initial-setup-ks.cfg
%addon com_redhat_subscription_manager
%end
%addon ADDON_placeholder --disable --reserve-mb=auto
%end

%anaconda
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
%end

tail命令最强悍的功能是可以持续刷新一个文件的内容,当想要实时查看最新日志文件时,这特别有用,此时的命令格式为“tail -f 文件名”:
[root@linux
qiu ~]# tail -f /var/log/messages
Sep 15 00:14:01 localhost rsyslogd[1392]: imjournal: sd_journal_get_cursor() failed: Cannot assign requested address [v8.37.0-9.el8]
Sep 15 00:14:01 localhost rsyslogd[1392]: imjournal: journal reloaded... [v8.37.0-9.el8 try http://www.rsyslog.com/e/0 ]
Sep 15 00:14:01 localhost systemd[1]: Started update of the root trust anchor for DNSSEC validation in unbound.
Sep 15 00:14:01 localhost sssd[kcm][2764]: Shutting down
Sep 15 00:14:06 localhost systemd[1]: Starting SSSD Kerberos Cache Manager...
Sep 15 00:14:06 localhost systemd[1]: Started SSSD Kerberos Cache Manager.
Sep 15 00:14:06 localhost sssd[kcm][3989]: Starting up
Sep 15 00:14:26 localhost NetworkManager[1203]: <info> [1600100066.4675] audit: op="sleep-control" arg="off" pid=3990 uid=0 result="fail" reason="Already awake"
Sep 15 00:19:04 localhost org.gnome.Shell.desktop[2600]: Window manager warning: last_user_time (2361102) is greater than comparison timestamp (2361091). This most likely represents a buggy client sending inaccurate timestamps in messages such as _NET_ACTIVE_WINDOW. Trying to work around...
Sep 15 00:19:04 localhost org.gnome.Shell.desktop[2600]: Window manager warning: W14 (root@local) appears to be one of the offending windows with a timestamp of 2361102. Working around...

学习命令五、tr命令
tr命令用于替换文本内容中的字符,英文全称为:“translate”,语法格式为:“tr [原始字符] [目标字符]”。
在很多时候,我们想要快速地替换文本中的一些词汇,又或者把整个文本内容都进行替换,如果进行手工替换,难免工作量太大,尤其是需要处理大批量的内容时,进行手工替换更是不现实。这时,就可以先使用cat命令读取待处理的文本,然后通过管道符把这些文本内容传递给tr命令进行替换操作即可。

例如,把某个文本内容中的英文全部替换为大写:
[root@linux
qiu ~]# cat anaconda-ks.cfg | tr [a-z] [A-Z]
#VERSION=RHEL8
IGNOREDISK --ONLY-USE=SDA
AUTOPART --TYPE=LVM
# PARTITION CLEARING INFORMATION
CLEARPART --ALL --INITLABEL --DRIVES=SDA
# USE GRAPHICAL INSTALL
GRAPHICAL
REPO --NAME="APPSTREAM" --BASEURL=FILE:///RUN/INSTALL/REPO/APPSTREAM
# USE CDROM INSTALLATION MEDIA
CDROM
# KEYBOARD LAYOUTS
KEYBOARD --VCKEYMAP=US --XLAYOUTS='US'
# SYSTEM LANGUAGE
LANG EN_US.UTF-8
# NETWORK INFORMATION
NETWORK --BOOTPROTO=DHCP --DEVICE=ENS160 --ONBOOT=OFF --IPV6=AUTO --NO-ACTIVATE
NETWORK --HOSTNAME=LOCALHOST.LOCALDOMAIN
# ROOT PASSWORD
ROOTPW --ISCRYPTED $6$TTBUW5DKOPYQQ.VI$RMK9FCGHOJOQ2QAPRURTQM.QOK2NN3YFN/I4F/FALVGGGND9XOIYFBRXDN16WWIZIASJ0/CR06U66IPEOGLPJ.
# X WINDOW SYSTEM CONFIGURATION INFORMATION
XCONFIG --STARTXONBOOT
# RUN THE SETUP AGENT ON FIRST BOOT
FIRSTBOOT --ENABLE
# SYSTEM SERVICES
SERVICES --DISABLED="CHRONYD"
# SYSTEM TIMEZONE
TIMEZONE ASIA/SHANGHAI --ISUTC --NONTP
………………省略部分输出信息………………

学习命令六、wc命令
wc命令用于统计指定文本文件的行数、字数或字节数,英文全称为:“word counts”,语法格式为:“wc [参数] 文件名称”。
wc的参数以及相应的作用表

参数作用
-l只显示行数
-w只显示单词数
-c只显示字节数
在Linux系统中,/etc/passwd是用于保存系统账户信息的文件,要统计当前系统中有多少个用户,可以使用下面的命令来进行查询,是不是很神奇:
[root@linux
qiu ~]# wc -l /etc/passwd
45 /etc/passwd

学习命令七、stat命令
stat命令用于查看文件的具体存储细节和时间等信息,英文全称为:“status”,语法格式为:“stat 文件名称”。
很多同学只知道文件有个修改时间,但这就不够,在Linux系统中文件包含三种时间状态,分别是Access Time(最后一次内容被访问的时间,简称Atime),Modify Time(最后一次内容被修改的时间,简称Mtime)以及Change Time(文件属性最后一次被修改的时间,简称Ctime)。
查看文件上面的三种时间状态信息:
[root@linux
qiu ~]# stat anaconda-ks.cfg
  File: anaconda-ks.cfg
  Size: 1407          Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 35321091    Links: 1
Access: (0600/-rw-------)  Uid: (    0/    root)   Gid: (    0/    root)
Context: system_ubject_r:admin_home_t:s0
Access: 2020-07-21 05:16:52.347279499 +0800
Modify: 2020-07-21 05:09:16.421009316 +0800
Change: 2020-07-21 05:09:16.421009316 +0800
Birth: -

学习命令八、grep命令
grep命令用于按行提取文本内容,语法格式为:“grep [参数] 文件名称”。
grep命令是用途最广泛的文本搜索匹配工具,虽然有很多参数,但是大多数基本上都用不到。我们在这里只讲两个最最常用的参数:-n参数用来显示搜索到信息的行号;-v参数用于反选信息(即没有包含关键词的所有信息行)。这两个参数几乎能完成日后80%的工作需要,至于其他上百个参数,即使以后在工作期间遇到了,再使用man grep命令查询也来得及。

grep命令的参数及其作用表
参数作用
-b将可执行文件(binary)当作文本文件(text)来搜索
-c仅显示找到的行数
-i忽略大小写
-n显示行号
-v反向选择——仅列出没有“关键词”的行。

Linux系统中/etc/passwd文件是保存着所有的用户信息,而一旦用户的登录终端被设置成/sbin/nologin,则不再允许登录系统,因此可以使用grep命令来查找出当前系统中不允许登录系统的所有用户信息:
[root@linux
qiu ~]# grep /sbin/nologin /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0perator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
………………省略部分输出过程信息………………

学习命令九、cut命令
cut命令用于按列提取文本内容,语法格式为:“cut [参数] 文件名称”。
系统文件在保存用户数据信息时,每一项值之间是采用冒号来间隔的,先查看一下:
[root@linux
qiu ~]# head -n 2 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin

一般而言,按基于“行”的方式来提取数据是比较简单的,只需要设置好要搜索的关键词即可。但是如果按列搜索,不仅要使用-f参数来设置需要看的列数,还需要使用-d参数来设置间隔符号。

接下来使用命令尝试提取出passwd文件中的用户名信息,即提取以冒号(:)为间隔符号的第一列内容:
[root@linux
qiu ~]# cut -d: -f1 /etc/passwd
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator
games
ftp
nobody
dbus
………………省略部分输出信息………………

学习命令十、diff命令
diff命令用于比较多个文件之间内容的差异,英文全称为:“different”,语法格式为:“diff [参数] 文件名称A 文件名称B”。
在使用diff命令时,不仅可以使用--brief参数来确认两个文件是否不同,还可以使用-c参数来详细比较出多个文件的差异之处,这绝对是判断文件是否被篡改的有力神器。例如,先使用cat命令分别查看diff_A.txt和diff_B.txt文件的内容,然后进行比较:
[root@linux
qiu ~]# cat diff_A.txt
Welcome to linuxqiu.com
Red Hat certified
Free Linux Lessons
Professional guidance
Linux Course
[root@linuxprobe ~]# cat diff_B.txt
Welcome tooo linuxqiu.com

Red Hat certified
Free Linux LeSSonS
////////.....////////
Professional guidance
Linux Course

接下来使用diff --brief命令显示比较后的结果,判断文件是否相同:
[root@linux
qiu ~]# diff --brief diff_A.txt diff_B.txt
Files diff_A.txt and diff_B.txt differ

最后使用带有-c参数的diff命令来描述文件内容具体的不同
[root@linux
qiu ~]# diff -c diff_A.txt diff_B.txt
*** diff_A.txt 2020-08-30 18:07:45.230864626 +0800
--- diff_B.txt 2020-08-30 18:08:52.203860389 +0800
***************
*** 1,5 ****
! Welcome to linuxqiu.com
Red Hat certified
! Free Linux Lessons
Professional guidance
Linux Course
--- 1,7 ----
! Welcome tooo linux
qiu.com
!
Red Hat certified
! Free Linux LeSSonS
! ////////.....////////
Professional guidance
Linux Course

学习命令十一、uniq命令
uniq命令用于去除文本中连续的重复行,英文全称为:“unique”,语法格式为:“uniq [参数] 文件名称”。
uniq命令全称是“unique”,中文释义是“独特的,唯一的”。该命令的作用是用来去除文本文件中连续的重复行,中间不能夹杂其他文本行,去除了重复的,保留的都是唯一的,也就是独特的,唯一的了。
我们对两个文本内容进行操作,区别一目了然:
[root@linux
qiu ~]# cat uniq.txt
Welcome to linuxqiu.com
Welcome to linux
qiu.com
Welcome to linux
qiu.com
Welcome to linux
qiu.com
Red Hat certified
Free Linux Lessons
Professional guidance
Linux Course
[root@linux
qiu ~]# uniq uniq.txt
Welcome to linux
qiu.com
Red Hat certified
Free Linux Lessons
Professional guidance
Linux Course

学习命令十二、sort命令
sort命令用于对文本内容进行再排序,语法格式为:“sort [参数] 文件名称”。
有时文本里的内容顺序不正确,手动一行行的修改实在太麻烦了,那么使用sort命令就再合适不过了,它能够对文本内容进行再次排序。这个命令千万不能只讲理论,一定要上实战,一看就懂。

sort命令的参数及其作用表
参数作用
-f忽略大小写
-b忽略缩进与空格
-n以数值型排序
-r反向排序
-u去除重复行
-t指定间隔符
-k设置字段范围

首先,sort命令执行后默认会按照字母顺序进行排序,非常方便:
[root@linux
qiu ~]# cat fruit.txt
banana
pear
apple
orange
raspaberry
[root@linux
qiu ~]# sort fruit.txt
apple
banana
orange
pear
raspaberry

此外,与uniq命令不同,sort命令可以不论内容之间是否夹杂有其它内容,只要有两个一摸一样的内容行,立马就可以使用-u参数进行去重操作:
[root@linux
qiu ~]# cat sort.txt
Welcome to linux
qiu.com
Red Hat certified
Welcome to linux
qiu.com
Free Linux Lessons
Linux Course
[root@linux
qiu ~]# sort -u sort.txt
Free Linux Lessons
Red Hat certified
Welcome to linux
qiu.com

想对数字进行排序?也是一点问题都没有的,而且完全不用担心出现1小于20这种问题(有些命令只比较第一位):
[root@linux
qiu ~]# cat number.txt
45
12
3
98
82
67
24
56
9
[root@linux
qiu ~]# sort -n number.txt
3
9
12
24
45
56
67
82
98

最后,我们挑战一个“高难度”的小实验。下面的内容是节选自/etc/passwd文件中前五个字段的内容,并进行混乱排序后的样子:
[root@linux
qiu ~]# cat user.txt
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon
polkitd:x:998:996:User for polkitd
geoclue:x:997:995:User for geoclue
rtkit:x:172:172:RealtimeKit
pulse:x:171:171ulseAudio System Daemon
qemu:x:107:107:qemu user
usbmuxd:x:113:113:usbmuxd user
unbound:x:996:991:Unbound DNS resolver
rpc:x:32:32:Rpcbind Daemon
gluster:x:995:990:GlusterFS daemons

不难看出上面其实是五个字段,各个字段之间是用了冒号进行间隔,如果想以第三个字段中的数字作为排序依据,那么就可以用-t参数指定间隔符,-k参数指定第几列,-n参数进行数字排序来搞定:
[root@linux
qiu ~]# sort -t : -k 3 -n user.txt
rpc:x:32:32:Rpcbind Daemon
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon
qemu:x:107:107:qemu user
usbmuxd:x:113:113:usbmuxd user
pulse:x:171:171ulseAudio System Daemon
rtkit:x:172:172:RealtimeKit
gluster:x:995:990:GlusterFS daemons
unbound:x:996:991:Unbound DNS resolver
geoclue:x:997:995:User for geoclue
polkitd:x:998:996:User for polkitd


八、 文件目录管理命令(介绍及操作)
学习Linux命令的过程就像是在夯实地基,虽然表面上高楼未起,但其实大家的内功已经相当雄厚了。有了上面的知识铺垫,作为本章最后一个小节,我们将学习Linux系统日常运维工作中最常用的命令,实现对文件的创建、修改、复制、剪切、更名与删除等操作。

学习命令一、touch命令
touch命令用于创建空白文件或设置文件的时间,语法格式为:“touch [参数] 文件名称”。
在创建空白的文件方面,这个touch命令相当简捷,简捷到没有必要铺开去讲。比如,touch linuxprobe命令可以创建出一个名为linuxprobe的空白文本文件。对touch命令来讲,有难度的操作主要是体现在设置文件内容的修改时间(mtime)、文件权限或属性的更改时间(ctime)与文件的读取时间(atime)上面。

touch命令的参数及其作用表

参数作用
-a仅修改“读取时间”(atime)
-m仅修改“修改时间”(mtime)
-d同时修改atime与mtime

接下来,先使用ls命令查看一个文件的修改时间,随后修改它,然后再查看一下文件时间果然发生了变化:
[root@linuxprobe ~]# ls -l anaconda-ks.cfg
-rw-------. 1 root root 1213 May  4 15:44 anaconda-ks.cfg
[root@linuxprobe ~]# echo "Visit the LinuxProbe.com to learn linux skills" >> anaconda-ks.cfg
[root@linuxprobe ~]# ls -l anaconda-ks.cfg
-rw-------. 1 root root 1260 Aug  2 01:26 anaconda-ks.cfg

如果不想让别人知道我们修改了它,那么这时候可以用touch命令把修改后的文件时间设置成修改之前的时间(很多黑客就是这样做的呢):
[root@linuxqiu ~]# touch -d "2020-05-04 15:44" anaconda-ks.cfg
[root@linux
qiu ~]# ls -l anaconda-ks.cfg
-rw-------. 1 root root 1260 May  4 15:44 anaconda-ks.cfg

学习命令二、mkdir命令
mkdir命令用于创建空白的目录,英文全称为:“make directory”,语法格式为:“mkdir [参数] 目录名称”。
除了能创建单个空白目录外,mkdir命令还可以结合-p参数来递归创建出具有嵌套叠层关系的文件目录
[root@linux
qiu ~]# mkdir qiu
[root@linux
qiu ~]# cd qiu
[root@linux
qiu qiu]# mkdir -p a/b/c/d/e
[root@linux
qiu qiu]# cd a
[root@linux
qiu a]# cd b
[root@linux
qiu b]#

学习命令三、cp命令
cp命令用于复制文件或目录,英文全称为:“copy”,语法格式为:“cp [参数] 源文件名称 目标文件名称”。
大家对文件复制操作应该不陌生,几乎每天都会使用到,在Linux系统中,复制操作具体分为3种情况:
    如果目标文件是目录,则会把源文件复制到该目录中;
    如果目标文件也是普通文件,则会询问是否要覆盖它;
    如果目标文件不存在,则执行正常的复制操作。


复制命令基本不会出错,唯一需要记住的就是复制目录时要加上-r参数,cp命令的参数及其作用如表2-18所示。
参数作用
-p保留原始文件的属性
-d若对象为“链接文件”,则保留该“链接文件”的属性
-r递归持续复制(用于目录)
-i若目标文件存在则询问是否覆盖
-a相当于-pdr(p、d、r为上述参数)

接下来,使用创建一个名为install.log的普通空白文件,然后将其复制为一份名为x.log的备份文件,最后再使用ls命令查看目录中的文件:
[root@linux
qiu ~]# touch install.log
[root@linux
qiu ~]# cp install.log x.log
[root@linux
qiu ~]# ls
install.log x.log

学习命令四、mv命令
mv命令用于剪切或重命名文件,英文全称为:“move”,语法格式为:“mv [参数] 源文件名称 目标文件名称”。
剪切操作不同于复制操作,因为它会把源文件删除掉,只保留剪切后的文件。如果在同一个目录中将某个文件剪切后还粘贴到当前目录下,其实本质就是对文件进行了重命名操作
[root@linux
qiu ~]# mv x.log linux.log
[root@linux
qiu ~]# ls
install.log linux.log

学习命令五、rm命令
rm命令用于删除文件或目录,英文全称为:“remove”,语法格式为:“rm [参数] 文件名称”。
在Linux系统中删除文件时,系统会默认向您询问是否要执行删除操作,如果不想总是看到这种反复的确认信息,可在rm命令后跟上-f参数来强制删除。另外,想要删除一个目录,需要在rm命令后面加一个-r参数才可以,否则删除不掉。

rm命令的参数及其作用表
参数作用
-f强制执行
-i删除前询问
-r删除目录
-v显示过程

我们来尝试删除前面创建的install.log和linux.log文件,感受下加与不加-y参数的区别:
[root@linux
qiu ~]# rm install.log
rm: remove regular empty file ‘install.log’? y
[root@linux
qiu ~]# rm -f linux.log
[root@linux
qiu ~]# ls
[root@linux
qiu ~]#

学习命令六、dd命令
dd命令用于按照指定大小的数据块个数来复制文件或转换文件,语法格式为:“dd if=参数值 of=参数值 count=参数值 bs=参数值”。
dd命令是一个比较重要而且比较有特色的一个命令,它能够让用户按照指定大小和个数的数据块来复制文件的内容。当然如果愿意的话,还可以在复制过程中转换其中的数据。Linux系统中有一个名为/dev/zero的设备文件,每次在课堂上解释它时都充满哲学理论的色彩。因为这个文件不会占用系统存储空间,但却可以提供无穷无尽的数据,因此可以使用它作为dd命令的输入文件,来生成一个指定大小的文件。

dd命令的参数及其作用表
参数作用
if输入的文件名称
of输出的文件名称
bs设置每个“块”的大小
count设置要复制“块”的个数

例如可以用dd命令从/dev/zero设备文件中取出一个大小为560MB的数据块,然后保存成名为560_file的文件。在理解了这个命令后,以后就能随意创建任意大小的文件了:
[root@linux
qiu ~]# dd if=/dev/zero of=560_file count=1 bs=560M
1+0 records in
1+0 records out
587202560 bytes (587 MB, 560 MiB) copied, 1.28667 s, 456 MB/s

dd命令的功能也绝不仅限于复制文件这么简单。如果想把光驱设备中的光盘制作成iso格式的镜像文件,在Windows系统中需要借助于第三方软件才能做到,但在Linux系统中可以直接使用dd命令来压制出光盘镜像文件,将它变成一个可立即使用的iso镜像:
[root@linux
qiu ~]# dd if=/dev/cdrom of=RHEL-server-8.0-x86_64-Linuxqiu.Com.iso
13873152+0 records in
13873152+0 records out
7103053824 bytes (7.1 GB, 6.6 GiB) copied, 27.8812 s, 255 MB/s

考虑到有些人会纠结bs块大小与count块个数的关系,下面举一个吃货的例子进行解释。假设小明的饭量(即需求)是一个固定的值,用来盛饭的勺子的大小即bs块大小,而用勺子盛饭的次数即count块个数。小明要想吃饱(满足需求),则需要在勺子大小(bs块大小)与用勺子盛饭的次数(count块个数)之间进行平衡。勺子越大,用勺子盛饭的次数就越少。由上可见,bs与count都是用来指定容量的大小,只要能满足需求,可随意组合搭配方式。

学习命令七、file命令
file命令用于查看文件的类型,语法格式为:“file 文件名称”。
在Linux系统中,由于文本、目录、设备等所有这些一切都统称为文件,又不像Windows系统那样都有后缀,有时候很难通过文件名一眼判断具体的文件类型,这时就需要使用file命令来查看文件类型了。
[root@linux
qiu ~]# file anaconda-ks.cfg
anaconda-ks.cfg: ASCII text
[root@linux
qiu ~]# file /dev/sda
/dev/sda: block special

学习命令八、tar命令
tar命令用于对文件进行打包压缩或解压,语法格式为:“tar 参数 文件名称”。
在网络上,人们越来越倾向于传输压缩格式的文件,原因是压缩文件体积小,在网速相同的情况下,传输时间短。Linux系统中主要使用的是.tar或.tar.gz或.tar.bz2格式,我们不用担心格式太多而记不住,其实这些格式大部分都是由tar命令来生成的

tar命令的参数及其作用表

参数作用
-c创建压缩文件
-x解开压缩文件
-t查看压缩包内有哪些文件
-z用Gzip压缩或解压
-j用bzip2压缩或解压
-v显示压缩或解压的过程
-f目标文件名
-p保留原始的权限与属性
-P使用绝对路径来压缩
-C指定解压到的目录

首先,-c参数用于创建压缩文件,-x参数用于解压文件,因此这两个参数不能同时使用。其次,-z参数指定使用Gzip格式来压缩或解压文件,-j参数指定使用bzip2格式来压缩或解压文件。用户使用时则是根据文件的后缀来决定应使用何种格式参数进行解压。在执行某些压缩或解压操作时,可能需要花费数个小时,如果屏幕一直没有输出,您一方面不好判断打包的进度情况,另一方面也会怀疑电脑死机了,因此非常推荐使用-v参数向用户不断显示压缩或解压的过程。-C参数用于指定要解压到哪个指定的目录。-f参数特别重要,它必须放到参数的最后一位,代表要压缩或解压的软件包名称。

一般我们使用“tar -czvf 压缩包名称.tar.gz 要打包的目录”命令把指定的文件进行打包压缩;相应的解压命令为“tar -xzvf 压缩包名称.tar.gz”。

下面我们逐个演示下打包压缩与解压的操作,先使用tar命令把/etc目录通过gzip格式进行打包压缩,并把文件命名为etc.tar.gz:
[root@linux
qiu ~]# tar czvf etc.tar.gz /etc
tar: Removing leading `/' from member names
/etc/
/etc/fstab
/etc/crypttab
/etc/mtab
/etc/fonts/
/etc/fonts/conf.d/
/etc/fonts/conf.d/65-0-madan.conf
/etc/fonts/conf.d/59-liberation-sans.conf
/etc/fonts/conf.d/90-ttf-arphic-uming-embolden.conf
/etc/fonts/conf.d/59-liberation-mono.conf
/etc/fonts/conf.d/66-sil-nuosu.conf
………………省略部分压缩过程信息………………

接下来将打包后的压缩包文件指定解压到/root/etc目录中(先使用mkdir命令来创建/root/etc目录):
[root@linux
qiu ~]# mkdir /root/etc
[root@linux
qiu ~]# tar xzvf etc.tar.gz -C /root/etc
etc/
etc/fstab
etc/crypttab
etc/mtab
etc/fonts/
etc/fonts/conf.d/
etc/fonts/conf.d/65-0-madan.conf
etc/fonts/conf.d/59-liberation-sans.conf
etc/fonts/conf.d/90-ttf-arphic-uming-embolden.conf
etc/fonts/conf.d/59-liberation-mono.conf
etc/fonts/conf.d/66-sil-nuosu.conf
etc/fonts/conf.d/65-1-vlgothic-gothic.conf
etc/fonts/conf.d/65-0-lohit-bengali.conf
etc/fonts/conf.d/20-unhint-small-dejavu-sans.conf
………………省略部分解压过程信息………………





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
逸学已用学习网-免责声明
【逸学已用学习网】本站上的所有软件和资料均为软件作者提供或网友自行上传发布,仅供个人学习和研究使用,不得用于任何商业用途。如有侵犯您商标权、著作权或其他合法权利的,请联系我们,我们将在第一时间对此进行核实并处理。
回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则  允许回帖邮件提醒楼主

为逸学已用而生,逸学已用更懂你。 立即登录逸学已用 立即注册
快速回复 返回顶部 返回列表