云网牛站
所在位置:首页 > Linux培训 > 第2章 新手必须掌握的Linux命令

第2章 新手必须掌握的Linux命令

2017-10-26 15:35:01作者:刘遄稿源:Linux就该这么学

Linux就该这么学第2章 新手必须掌握的Linux命令简述

本章节首先从讲述系统内核和Shell终端的关系与作用来引入介绍bash解释器的4大优势并学习Linux命令的执行方法,经验丰富的运维人员可以通过合理恰当的组合命令与参数,使令Linux系统更加便捷且相对减少消耗系统资源。

刘遄老师精挑细选出最应该先学习的系统工作、系统状态、工作目录、文件、目录、打包压缩与搜索等近一百个工作所需的Linux命令,通过把上述命令归纳到不同的章节,让您逐个的学习掌握必会的Linux基础命令,为今后学习更复杂的命令和服务做好必备知识铺垫。

 

本章目录结构

2.1.强大好用的SHELL

2.2.执行查看帮助命令

2.3.常用系统工作命令

2.4.系统状态检测命令

2.5.工作目录切换命令

2.6.文本文件编辑命令

2.7.文件目录管理命令

2.8.打包压缩与搜索命令

 

2.1.强大好用的SHELL

通常计算机硬件是由运算器、控制器、存储器、输入/输出设备等等这些物理设备共同组成的,而能够让机箱内各种硬件设备各司其职的东西就叫做系统内核。Linux系统的内核负责驱动硬件、管理活动和分配/管理硬件资源等等任务,如此说来系统内核对计算机正常稳定的运行来讲可真的是太重要了,因此一般不建议直接去编辑内核中的参数,而是让用户通过基于“系统调用接口”开发出的程序/服务来管理计算机,这样一层层环环相扣来满足咱们的日常工作需要,如图2-1所示。

第2章 新手必须掌握的Linux命令

图2-1 Linux系统的软件结构图。

回顾我对Linux系统将近十年的学习历程,必须肯定在Linux系统中有些诸如LVM逻辑卷管理器的图形化工具非常好用,很好的减少了运维人员操作出错的几率,值得称赞。但很多图形化工具实际就是调用了脚本来工作,功能上却被一定程度的“阉割”了,缺乏了Linux命令原有的灵活性及可控性。而且相较文字界面的Linux命令来说会更加消耗系统资源,因此经验丰富的运维人员甚至都不会给Linux系统安装图形界面,需要工作了则直接远程连接过去,不得不说这样做确实挺高效的,刘遄老师也一直都是这样做的。

"Shell"——也可称为“壳”,充当的是人与内核(硬件)的翻译官,用户把一些命令“告诉”Shell终端,它就会调用相应的程序服务执行工作啦,很厉害吧~~现在包括红帽系统在内的许多主流Linux系统默认使用的字符Shell终端是Bash(Bourne-Again SHell)解释器。主流Linux系统选择Bash解释器作为命令行终端主要有以下4项优势,当然刘遄老师绝不会要求您去记住它们,而是应该在今后的学习和生产工作中细细体会Linux系统命令行的美妙之处,真正从心里爱上它们。

1].通过上下方向键来调取过往执行过的Linux命令。

2].命令或参数仅需输入前几位就可以用tab键补全。

3].强大的批处理脚本。

4].实用的环境变量。

 

2.2.执行查看帮助命令

既然Linux系统中已经有了如此好用的“翻译官”,那么接下来就有必要好好学习下怎么跟它沟通了~因为要想准确的、高效的完成任务,不能够光靠命令本身,还应该根据实际情况来灵活调整各种命令的参数,就像咱们切寿司时也可以用菜刀,但米粒一定会撒的满地到处都是,因此寿司刀上设计的圆孔就是为了更好的适应场景而额外增加的参数。当您学完了手里这本《Linux就该这么学》书籍后,再积累一段时间的工作经验,一定能够领悟Linux命令的奥秘,常见执行Linux命令的格式是这样的:

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

注意:命令名称,命令参数,命令对象之间请用空格键分隔。

命令对象一般是指要被处理的文件、目录、用户等资源,而命令参数可以选用长格式(完整的选项名称)也可选用短格式(单个字母的缩写),一般分别用"--"与"-"做前缀。新手不会执行Linux命令的原因大多是因为参数比较复杂,参数值需要随不同的命令和需求情况而发生改变,因此一定要在选择搭配参数上多花时间来积累经验才可以。

长格式如:man --help

短格式如:man -h

同学们现在心里可能会在想:“Linux系统中有如此多的命令,我怎么知道某个命令是干嘛用的?又或者在日常工作中遇到了一个不熟悉的Linux命令,那咱们又怎样才能知道它的可用参数呢?”。想到这里,那么man命令就肯定能够当之无愧的成为了咱们《Linux就该这么学》这本书中第一个教给读者去学习的Linux命令了。并且对于毫无基础的新手读者,您还可以通过下面如图2-2、2-3、2-4所示的实验来学习到如何在RHEL7系统中执行您的Linux命令啦。

第1步:在RHEL7系统的桌面上按下鼠标右键后点击Open in Terminal(开启终端)选项,这样便可开启了一个Linux系统命令行终端,如图2-2所示。

第2章 新手必须掌握的Linux命令

2-2 在Linux系统上开启命令行终端

第2步:在终端中输入“man man”命令来查看man命令自身的帮助信息,如图2-3所示。

第2章 新手必须掌握的Linux命令

图2-3 查看man命令的帮助信息

第3步:敲击回车后即可看到如图2-4所示的帮助信息。

第2章 新手必须掌握的Linux命令

图2-4 man命令的帮助信息

进入man命令帮助信息界面后的常用操作按键包括有(与后面章节中学习的vim编辑器非常相像):

第2章 新手必须掌握的Linux命令

而一般来讲帮助文件都很长很多,如果您不了解帮助文档信息的目录结构和操作方法的话,肯定会感到眼花缭乱的,man命令输出帮助信息的结构主要包括有:

第2章 新手必须掌握的Linux命令

 

2.3.常用系统工作命令

您手中的这本《Linux就该这么学》书籍是通过刘遄老师总结将近十年多的运维学习、及开办数十期培训的授课经验而编写而成的,可能在本章节中找不到某些您见过的命令,原因是刘遄老师正在尽力把Linux命令与实践课程相互结合,真正让读者在操作中理解技术,而不是单纯的把命令堆砌到书中让读者去硬背。因此我花费了将近1年的时间把最常用的Linux命令汇总、归纳、整理、分类,最终决定把部分常用的命令合理的安排到了后面章节中陆续以实践的形式来学习,并且经过数年的培训成果反馈来看,我非常有自信的肯定这也一定是适合于您的Linux命令学习方法。

echo命令用于在终端显示字符串或输出变量提取后的值,格式为:“echo [字符串 | $变量]”。

把指定字符串输出到终端屏幕:

[root@linuxprobe ~]# echo Linuxprobe.Com

Linuxprobe.Com

使用$变量的方式提取变量值并输出到屏幕:

[root@linuxprobe ~]# echo $SHELL

/bin/bash

date命令用于显示及设置系统的时间或日期,格式为:"date [选项] [+指定的格式]"。

强大的date命令只需键入以"+"号开头的参数即可按照指定格式来输出系统的时间或日期,这样日常工作时便可以把打包数据的备份命令与指定格式输出的时间信息结合到一起,例如把打包后的文件自动按照“年-月-日”的格式打包成“backup-2017-9-1.tar.gz”,是不是备份时间一眼就能知道了呢?使得咱们可以更加便捷的了解到每个文件的备份时间啦,date命令参数常见的格式如下:

参数 - 作用

%t - 跳格[TAB键]

%H - 小时(00-23)

%I - 小时(00-12)

%M - 分钟(00-59)

%S - 秒(00-59)

%X - 相当于%I:%M:%S %p

%Z - 显示时区

%p - 显示本地AM或PM

%A - 星期几 (Sunday-Saturday)

%a - 星期几 (Sun-Sat)

%B - 完整月份 (January-December)

%b - 缩写月份 (Jan-Dec)

%d - 日(01-31)

%j - 一年中的第几天(001-366)

%m - 月份(01-12)

%Y - 完整的年份

按照默认的格式查看当前的系统时间:

[root@linuxprobe ~]# date

Mon Oct 26 15:30:23 CST 2017

按照"年-月-日 小时:分钟:秒"的格式查看当前的系统时间:

[root@linuxprobe ~]# date "+%Y-%m-%d %H:%M:%S"

2017-10-26 15:30:32

设置当前的系统时间为2017年10月26日15点30分:

[root@linuxprobe ~]# date -s "20171026 15:30:00"

Tue Oct 26 15:30:00 CST 2017

再次按照默认的格式查看当前的系统时间:

[root@linuxprobe ~]# date

Tue Oct 26 15:30:46 CST 2017

查看今天是一年中的第几天,其实用这个参数也能够很好的区分备份时间的新旧,即数字越大,越靠近当前时间:

[root@linuxprobe ~]# date "+%j"

245

reboot命令用于重启系统,格式为:"reboot"。

重启计算机这种操作会涉及到对硬件资源的管理权限,因此默认只能使用root用户来重启您的电脑:

[root@linuxprobe ~]# reboot

poweroff命令用于关闭系统,格式为:"poweroff"。

关机命令也同理,默认只有root管理员用户才可以关闭您的电脑:

[root@linuxprobe ~]# poweroff

wget命令用于在终端中下载网络文件,格式为:“wget [参数] 下载地址”。

如果这时您暂时还没有对Linux系统的管理经验,那么切记不要急于求成,这次只需要看下wget命令的演示过程即可,咱们将在后面的章节中逐步学习完Linux系统的配置管理方法,等您学习会了网卡的配置方法后再回来做这个实验吧。示例为从本站的资源库中下载《Linux就该这么学》最新pdf电子版文档:

参数 - 作用

-b - 后台下载模式。

-O - 下载到指定目录。

-t - 最大尝试次数。

-c - 断点续传

-p - 下载页面内所有资源,包括图片、视频等。

-r - 递归下载

[root@linuxprobe ~]# wget http://www.linuxprobe.com/docs/LinuxProbe.pdf

--2017-10-26 15:30:12 -- http://www.linuxprobe.com/docs/LinuxProbe.pdf

Resolving www.linuxprobe.com (www.linuxprobe.com)... 220.181.105.185

Connecting to www.linuxprobe.com (www.linuxprobe.com)|220.181.105.185|:80... connected.

HTTP request sent, awaiting response... 200 OK

Length: 45948568 (44M) [application/pdf]

Saving to: ‘LinuxProbe.pdf’

100%[=======================] 45,948,568 32.9MB/s in 1.3s

2017-10-26 15:30:14 (32.9 MB/s) - ‘LinuxProbe.pdf’ saved [45948568/45948568]

递归下载《Linux就该这么学》主站内的所有页面数据以及文件,下载完成后会自动保存到当前路径下一个名字叫"www.linuxprobe.com"的目录中:

[root@linuxprobe ~]# wget -r -p http://www.linuxprobe.com

--2017-10-26 15:31:41-- http://www.linuxprobe.com/

Resolving www.linuxprobe.com... 106.185.25.197

Connecting to www.linuxprobe.com|106.185.25.197|:80... connected.

HTTP request sent, awaiting response... 200 OK

Length: unspecified [text/html]

Saving to: `www.linuxprobe.com/index.html'

………………省略下载过程………………

ps命令用于查看系统中的进程状态,格式为:“ps [参数]”,

当您第一次执行这个命令时估计要惊呆下,这么多输出值怎么看的过来?其实平常刘遄老师会把ps命令与第3章的管道符技术搭配使用,用于来抓取到某个指定服务进程所对应的PID号码,常见的ps命令参数包括有:

参数 - 作用

-a - 显示所有的进程(包括其他用户的)

-u - 用户以及其他详细信息

-x - 显示没有控制终端的进程

Linux系统中时刻运行着许许多多的进程,如果能够合理的管理它们,绝对有益于对系统的性能优化,Linux系统中进程最常见的5种不同的状态是运行、中断、不可中断、僵死与停止,它们的含义分别是:

R(运行):正在运行或在运行队列中等待。

S(中断):休眠中, 在等待某个条件的形成或接收到信号。

D(不可中断):收到信号不唤醒和不可运行, 进程必须等待直到有中断发生。

Z:(僵死):进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放。

T:(停止):进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行。

当执行"ps aux"命令后通常会看到下面格式的进程状态,表格中只是列举了部分输出值,而且正常的输出值中不包括中文注释部分:

第2章 新手必须掌握的Linux命令

top命令用于动态的监视进程活动与系统负载等信息,格式为:“top”。

这个top命令可真的是太厉害了,它能够动态的查看系统运维状态,完全可以比喻成是“强化版的Windows任务管理器”,运行界面如图2-5所示:

第2章 新手必须掌握的Linux命令

图2-5 top命令的执行界面

top命令前面的五行为系统整体的统计信息,下面为同学们逐行的讲解下:

第1行:系统时间,运行时间,登录终端数,系统负载(分别为1分钟、5分钟、15分钟的平均值,数值越小意味着负载越低)。

第2行:进程总数,运行中的,睡眠中的,停止的,僵死的。

第3行:用户占用资源,系统内核占用资源,改变过优先级的进程,空闲的资源,等待输入输出的时间。

此行数据均为CPU数据并以百分比格式显示,例如"99.2 id"意味着有99.2%的CPU处理器资源正在空闲中。

第4行:物理内存总量,使用量,空闲量,作为内核缓存的内存量。

第5行:虚拟内存总量,使用量,空闲量,已被提前加载的内存数据。

pidof命令用于查询某个指定服务进程的PID号码值,格式为:“pidof [参数] [服务名称]”。

PID值是区别每个进程的唯一号码,每次在计算机上运行相同的服务程序都很少会获得同样值的PID号码,例如查询下本机sshd服务程序的PID进程号码值:

[root@linuxprobe ~]# pidof sshd

2156

kill命令用于终止某个指定PID号码的服务进程,格式为:“kill [参数] [进程PID号]”。

咱们来动手把上面pidof命令查询到的PID号码给终止掉吧,这样操作的效果等同于把sshd服务强制停止。

[root@linuxprobe ~]# kill 2156

killall命令用于终止某个指定名称的服务所对应的全部进程,格式为:“killall [参数] [进程名称]”。

复杂软件的服务程序通常都会有数个进程协同为用户提供服务,如果逐个去结束PID号码又实在太麻烦,因此便可以使用killall命令来批量结束某个服务程序带有的全部进程。例如结束掉网络服务的全部进程,下面以httpd服务程序为例,默认您的RHEL7系统未安装它,当前同学们只需看操作过程和结果即可:

[root@linuxprobe ~]# pidof httpd

13581 13580 13579 13578 13577 13576

[root@linuxprobe ~]# killall httpd

[root@linuxprobe ~]# pidof httpd

[root@linuxprobe ~]# 

平时在系统终端中执行一个命令后如果想立即的停止它,您可以同时按下系统组合键"Ctrl+c",这样命令的进程将会立即被终止,是生产工作中比较常用的命令行快捷键之一。或者有些命令在执行时会不断的在屏幕上输出信息,影响到咱们继续输入命令了,便可以在执行命令时在命令最后面添加上一个"&"符号,这样命令从开始执行就默认被放到系统后台了。

很多同学在报名刘遄老师培训课程时会提到自己的英语基础不好,其实大可不必担心,因为咱们的书籍、培训课程甚至红帽考题都是中文的。而接下来您也就会发现,原来一直使用的是Linux命令,而绝不是纯粹的英语单词,即便它们的拼写100%相同,最终用处肯定也是不一样的。因此在学习Linux系统技术的这件事上,您跟英语达人绝对都是站在同一起跑线上的,更何况还正确的选择了一本适合您的Linux教材,放心开始学习吧!

 

2.4.系统状态检测命令

为了更好的了解Linux服务器,成为一名合格的运维人员,您必须具备快速查看Linux系统运行状态的能力,因此接下来咱们会逐个来学习下对于网卡网络、系统内核、系统负载、内存使用情况、当前启用终端数量、历史登录记录、命令执行记录以及救援诊断命令的使用方法,都是超级实用的Linux命令哦。

ifconfig用于获取网卡配置与网络状态等信息:格式为"ifconfig [网络设备] [参数]"。

查看本机当前的网卡配置与网络状态等信息,主要就是看每段开头的网卡名称、inet参数后面的IP地址、ether参数后面的MAC网卡物理地址以及RX、TX的接收与发送数据包的流量大小:

[root@linuxprobe ~]# ifconfig

eno16777728: flags=4163  mtu 1500

inet 192.168.10.10  netmask 255.255.255.0  broadcast 192.168.10.255

inet6 fe80::20c:29ff:fec4:a409  prefixlen 64  scopeid 0x20

ether 00:0c:29:c4:a4:09  txqueuelen 1000  (Ethernet)

RX packets 36  bytes 3176 (3.1 KiB)

RX errors 0  dropped 0  overruns 0  frame 0

TX packets 38  bytes 4757 (4.6 KiB)

TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73  mtu 65536

inet 127.0.0.1  netmask 255.0.0.0

inet6 ::1  prefixlen 128  scopeid 0x10

loop  txqueuelen 0  (Local Loopback)

RX packets 386  bytes 32780 (32.0 KiB)

RX errors 0  dropped 0  overruns 0  frame 0

TX packets 386  bytes 32780 (32.0 KiB)

TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

uname命令用于查看系统内核与系统版本等信息,格式为:“uname [-a]”。

一般会固定搭配上-a参数来完整查看当前系统的内核名称、主机名、内核发行版本、节点名、系统时间、硬件名称、硬件平台、处理器类型以及操作系统名称等信息:

[root@linuxprobe ~]# uname -a

Linux linuxprobe.com 3.10.0-123.el7.x86_64 #1 SMP Mon May 5 11:16:57 EDT 2017 x86_64 x86_64 x86_64 GNU/Linux

顺便说下,如果您想查看当前系统版本的详细信息需要看redhat-release文件:

[root@linuxprobe ~]# cat /etc/redhat-release

Red Hat Enterprise Linux Server release 7.0 (Maipo)

uptime命令用于查看系统的负载信息,格式为:“uptime”。

这个命令真的很棒,它可以为您显示当前系统时间、系统已运行时间、启用终端数量以及平均负载值等信息数据。平均负载值指的是最近1分钟、5分钟、15分钟的系统压力情况(下面加粗的信息部分),负载值越低越好,尽量不要长期超过1。另外您还可以结合搭配用"watch -n 1 uptime"命令来每秒刷新一次来获得当前的系统负载情况。

[root@linuxprobe ~]# uptime

22:49:55 up 10 min, 2 users, load average: 0.01, 0.19, 0.18

free命令用于显示当前系统中内存的使用量信息,格式为:“free [-h]”。

为了保证Linux系统不会因硬件故障而突然卡住宕机,那么内存使用量当之无愧是运维人员最应该时刻要关注的数据对象啦,可以使用-h参数来以更人性化的样输出当前内存的实时使用量信息,另外下面输出信息中的中文注释是刘遄老师自行添加的内容,命令实际输出时没有对参数的解释。

[root@linuxprobe ~]# free -h

第2章 新手必须掌握的Linux命令

who命令用于查看当前登入主机的用户终端信息,格式为:"who [参数]"。

简单三个字母就可以快捷的显示出所有正在登录着本机的用户名称以及他们正在开启的终端信息:

[root@linuxprobe ~]# who

第2章 新手必须掌握的Linux命令

last命令用于查看所有系统的登入记录,格式为:"last [参数]"。

使用last命令可以看到本机的登录记录,但由于这些信息都是被以日志文件的形式保存在系统中的数据内容,骇客们很轻易的便可对内容进行篡改,所以千万不要单纯以该命令的输出信息而判断系统有无被恶意入侵!

[root@linuxprobe ~]# last

root pts/0 :0 Mon Aug 24 17:52 still logged in

root :0 :0 Mon Aug 24 17:52 still logged in

(unknown :0 :0 Mon Aug 24 17:50 - 17:52 (00:02)

reboot system boot 3.10.0-123.el7.x Tue Aug 25 01:49 - 18:17 (-7:-32)

root pts/0 :0 Mon Aug 24 15:40 - 08:54 (7+17:14)

root pts/0 :0 Fri Jul 10 10:49 - 15:37 (45+04:47)

………………省略部分登录信息………………

history命令用于显示历史执行过的命令,格式为:“history [-c]”。

这条命令应该是我最喜欢的了,执行history命令能显示出当前用户在本地计算机中执行过的最近1000条命令记录,觉得1000不够用的话还可以修改/etc/profile文件的HISTSIZE变量值,或者使用-c参数来清空里面的历史数据,还可以使用“!编码数字”的方式来重复执行某一次的命令,有很多种有趣的玩法:

[root@linuxprobe ~]# history

1 tar xzvf VMwareTools-9.9.0-2304977.tar.gz

2 cd vmware-tools-distrib/

3 ls

4 ./vmware-install.pl -d

5 reboot

6 df -h

7 cd /run/media/

8 ls

9 cd root/

10 ls

11 cd VMware\ Tools/

12 ls

13 cp VMwareTools-9.9.0-2304977.tar.gz /home

14 cd /home

15 ls

16 tar xzvf VMwareTools-9.9.0-2304977.tar.gz

17 cd vmware-tools-distrib/

18 ls

19 ./vmware-install.pl -d

20 reboot

21 history

[root@linuxprobe ~]# !15

anaconda-ks.cfg  Documents  initial-setup-ks.cfg  Pictures  Templates

Desktop          Downloads  Music                 Public    Videos

历史命令会被保存到用户家目录中的".bash_history"文件中。Linux系统中以点(.)开头的文件均代表隐藏文件,一般大多会是系统服务文件。

[root@linuxprobe ~]# cat ~/.bash_history

清空该用户在本机中执行的Linux命令历史记录信息:

[root@linuxprobe ~]# history -c

sosreport命令用于收集系统配置并诊断信息后输出结论文档,格式为:“sosreport”。

当Linux系统出现故障需要联系红帽厂商或其他技术支持时,大多数时候都要先使用这个SOS功能来简单收集计算机的运行状态和服务配置信息,以便让技术支持公司能够通过远程就解决了一些小问题,又或者让他们能对复杂问题能提前有些了解。下面输出信息加粗的部分是收集好的资料压缩文件以及校验码,发送给对方即可:

[root@linuxprobe ~]# sosreport

sosreport (version 3.0)

This command will collect diagnostic and configuration information from

this Red Hat Enterprise Linux system and installed applications.

An archive containing the collected information will be generated in

/var/tmp and may be provided to a Red Hat support representative.

Any information provided to Red Hat will be treated in accordance with

the published support policies at:

https://access.redhat.com/support/

The generated archive may contain data considered sensitive and its

content should be reviewed by the originating organization before being

passed to any third party.

No changes will be made to system configuration.

Press ENTER to continue, or CTRL-C to quit. 此处敲击回车来确认收集信息

Please enter your first initial and last name [linuxprobe.com]:此处敲击回车,来确认主机名称。

Please enter the case number that you are generating this report for:

Running plugins. Please wait ...

Running 70/70: yum...

Creating compressed archive...

Your sosreport has been generated and saved in:

/var/tmp/sosreport-linuxprobe.com-20170905230631.tar.xz

The checksum is: 79436cdf791327040efde48c452c6322

Please send this file to your support representative.

 

2.5.工作目录切换命令

工作目录指的是咱们当前在系统中所处的位置,由于会牵涉到系统存储结构的知识,因此刘遄老师将会在第6章为同学们详细讲解,下面的操作实验您只需简单看下就好,如果不能完全掌握也不用担忧,这是因为Linux系统庞大的知识体系造成的结果,每个初学者都会经过这么一段时期。

pwd命令用于显示当前所处的工作目录,格式为:“pwd [选项]”。

[root@linuxprobe etc]# pwd

/etc

cd命令用于切换工作路径,格式为:“cd [目录名称]”。

这个命令应该是最最常用的Linux命令之一了,您可以通过cd命令来便捷的切换到不同的工作目录。除了常见的切换目录的方式,还可以使用“cd -”命令来返回到上一次所处的目录或使用“cd ~”命令来切换到当前用户的家目录,亦或使用“cd ~username”则可以切换到其他用户的家目录了~例如使用“cd 路径”的方式切换进/etc目录中:

[root@linuxprobe ~]# cd /etc

同样的道理,再尝试切换进/bin目录中:

[root@linuxprobe etc]# cd /bin

此时返回到上一次的目录(即/etc目录):

[root@linuxprobe bin]# cd -

/etc

还可以快速的切换到用户自己的家目录呢:

[root@linuxprobe etc]# cd ~

[root@linuxprobe ~]#

ls命令用于显示目录中的文件信息,格式为:“ls [选项] [文件] ”。

当咱们处在不同的工作目录下时,能够看到当前目录下的文件也在发生变化,ls命令的“-a”参数看到全部文件(包括隐藏文件),再结合“-l”参数来查看文件的属性、大小等详细信息。整合之后的命令即可实现查看当前目录中所有文件列表并输出这些文件的属性信息:

[root@linuxprobe ~]# ls -al

第2章 新手必须掌握的Linux命令

需要看目录属性信息的话,需要额外添加一个-d参数才可以,例如查看/etc目录的权限与属性信息:

[root@linuxprobe ~]# ls -ld /etc

drwxr-xr-x. 132 root root 8192 Jul 10 10:48 /etc

 

2.6.文本文件编辑命令

通过刚刚上面几个小节的学习,您已经基本掌握了对当前工作目录及文件的管理方法。在Linux系统中一切都是文件,而对于服务程序的配置自然也就是在编辑程序的配置文件,如果不能熟练的查阅数据,那以后工作时可就真的要尴尬了。接下来学习几条用于查看文本文件内容的命令吧,至于编辑器的使用是比较复杂的,单独放到第4章节中和SHELL脚本内容一起为同学们详细精讲。

cat命令用于查看纯文本文件(较短的),格式为:“cat [选项] [文件]”。

Linux系统中有需要用于查看文本内容的命令,但其中每个命令又都有自己的特色特点,比如这个cat命令就是用于查看比较精简的文本内容的。这个其实是最好记的命令之一,因为cat在英语中是猫的意思,小猫咪是不是总给您一种娇小、可爱的感觉呢?另外如果您想看文本内容时还顺便显示行号的话,不妨再追加一个“-n”参数试试吧:

[root@linuxprobe ~]# cat -n initial-setup-ks.cfg 

1    #version=RHEL7

2    # X Window System configuration information

3    xconfig  --startxonboot

4    

5    # License agreement

6    eula --agreed

7    # System authorization information

8    auth --enableshadow --passalgo=sha512

9    # Use CDROM installation media

10    cdrom

11    # Run the Setup Agent on first boot

12    firstboot --enable

13    # Keyboard layouts

14    keyboard --vckeymap=us --xlayouts='us'

15    # System language

16    lang en_US.UTF-8

17    

18    ignoredisk --only-use=sda

19    # Network information

20    network  --bootproto=dhcp --device=eno16777728 --onboot=off --ipv6=auto

21    network  --bootproto=dhcp --hostname=linuxprobe.com

22    # Root password

23    rootpw --iscrypted $6$pDjJf42g8C6pL069$iI.PX/yxxx/MgpYssoi8hPCt8b/

24    # System timezone

25    timezone America/New_York --isUtc

26    user --name=linuxprobe --password=$6$a9v3InSTNbweIR7D$xxx.7GUtO/ --iscrypted --gecos="linuxprobe"

27    # System bootloader configuration

28    bootloader --location=mbr --boot-drive=sda

29    autopart --type=lvm

30    # Partition clearing information

31    clearpart --none --initlabel 

32    

33    %packages

34    @base

35    @core

36    @desktop-debugging

37    @dial-up

38    @fonts

39    @gnome-desktop

40    @guest-agents

41    @guest-desktop-agents

42    @input-methods

43    @internet-browser

44    @multimedia

45    @print-client

46    @x11

47    

48    %end

49

more命令用于查看纯文本文件(较长的),格式为:“more [选项] 文件”。

如果需要去阅读长篇小说、或者非常长的配置文件,那么“小猫咪”可就真的不适合了,因为一旦您用cat命令去阅读长篇的文本内容,信息就会在您的屏幕上快速翻滚,有点像黑客帝国电影那样酷酷的感觉,但其实自己还没来得及看到内容就已经消失过去了。因此对于长篇的文本内容,推荐使用more命令来查看文本内容,不仅可以提示您已经阅读了百分之多少,还可以使用空格或回车键向下翻页:

//此处会提示您已经阅读了百分之多少,可以使用空格和回车往下翻页。

[root@linuxprobe ~]# more initial-setup-ks.cfg 

#version=RHEL7

# X Window System configuration information

xconfig  --startxonboot

# License agreement

eula --agreed

# System authorization information

auth --enableshadow --passalgo=sha512

# Use CDROM installation media

cdrom

# Run the Setup Agent on first boot

firstboot --enable

# Keyboard layouts

keyboard --vckeymap=us --xlayouts='us'

# System language

lang en_US.UTF-8

ignoredisk --only-use=sda

# Network information

network  --bootproto=dhcp --device=eno16777728 --onboot=off --ipv6=auto

network  --bootproto=dhcp --hostname=linuxprobe.com

--More--(43%)

head命令用于查看纯文本文档的前N行,格式为:“head [选项] [文件]”。

处理文本内容时,谁都不能保证永远“循规蹈矩”的顺序往下看完整个文件,如果只想看文本中前20行的内容呢:

[root@linuxprobe ~]# head -n 20  initial-setup-ks.cfg 

#version=RHEL7

# X Window System configuration information

xconfig  --startxonboot

# License agreement

eula --agreed

# System authorization information

auth --enableshadow --passalgo=sha512

# Use CDROM installation media

cdrom

# Run the Setup Agent on first boot

firstboot --enable

# Keyboard layouts

keyboard --vckeymap=us --xlayouts='us'

# System language

lang en_US.UTF-8

ignoredisk --only-use=sda

# Network information

network  --bootproto=dhcp --device=eno16777728 --onboot=off --ipv6=auto

[root@linuxprobe ~]#

tail命令用于查看纯文本文档的后N行或持续刷新内容,格式为:“tail [选项] [文件]”。

当然咱们还会遇到一种更奇葩的情况,比如需要去查看文本内容的最后20行,那么操作方法其实跟head命令是非常相似的,只需要执行“tail -n 20 文件名”命令就可以达到这样的效果。而tail命令最强悍的功能是用于持续刷新一个文件的内容,尤其是对于想要实时看到最新日志文件的时候特别有用:

[root@linuxprobe ~]# tail -f /var/log/messages

May  4 07:56:38 localhost gnome-session: Window manager warning: Log level 16: STACK_OP_ADD: window 0x1e00001 already in stack

May  4 07:56:38 localhost gnome-session: Window manager warning: Log level 16: STACK_OP_ADD: window 0x1e00001 already in stack

May  4 07:56:38 localhost vmusr[12982]: [ warning] [Gtk] gtk_disable_setlocale() must be called before gtk_init()

May  4 07:56:50 localhost systemd-logind: Removed session c1.

Aug  1 01:05:31 localhost systemd: Time has been changed

Aug  1 01:05:31 localhost systemd: Started LSB: Bring up/down networking.

Aug  1 01:08:56 localhost dbus-daemon: dbus[1124]: [system] Activating service name='com.redhat.SubscriptionManager' (using servicehelper)

Aug  1 01:08:56 localhost dbus[1124]: [system] Activating service name='com.redhat.SubscriptionManager' (using servicehelper)

Aug  1 01:08:57 localhost dbus-daemon: dbus[1124]: [system] Successfully activated service 'com.redhat.SubscriptionManager'

Aug  1 01:08:57 localhost dbus[1124]: [system] Successfully activated service 'com.redhat.SubscriptionManager'

tr命令用于替换文本文件中的字符,格式为:“tr [原始字符] [目标字符]”。

很多时候想要快速的替换文本内容中的一些词汇,又或者把整个文本内容都进行替换,手工逐个替换真的太累了,而且对于处理大批量的内容非常不现实。此时咱们便可以先使用cat命令读取待处理的文本内容,然后通过管道符(第3章将为您细致讲解)把这些数据内容传递给tr命令做替换操作即可。例如试试把某个文本内容完整替换成大写英文吧:

[root@linuxprobe ~]# cat anaconda-ks.cfg | tr [a-z] [A-Z]

#VERSION=RHEL7

# SYSTEM AUTHORIZATION INFORMATION

AUTH --ENABLESHADOW --PASSALGO=SHA512

# USE CDROM INSTALLATION MEDIA

CDROM

# RUN THE SETUP AGENT ON FIRST BOOT

FIRSTBOOT --ENABLE

IGNOREDISK --ONLY-USE=SDA

# KEYBOARD LAYOUTS

KEYBOARD --VCKEYMAP=US --XLAYOUTS='US'

# SYSTEM LANGUAGE

LANG EN_US.UTF-8

# NETWORK INFORMATION

NETWORK --BOOTPROTO=DHCP --DEVICE=ENO16777728 --ONBOOT=OFF --IPV6=AUTO

NETWORK --HOSTNAME=LOCALHOST.LOCALDOMAIN

# ROOT PASSWORD

ROOTPW --ISCRYPTED $6$PDJJF42G8C6PL069$II.PX/XXX.WK/HXZ3XIGMZGJPCS/MGPYSSOI8HPCT8B/

# SYSTEM TIMEZONE

TIMEZONE AMERICA/NEW_YORK --ISUTC

USER --NAME=LINUXPROBE --PASSWORD=$XXX.XXX/TOK6J.7GUTO/ --ISCRYPTED --GECOS="LINUXPROBE"

# X WINDOW SYSTEM CONFIGURATION INFORMATION

XCONFIG --STARTXONBOOT

# SYSTEM BOOTLOADER CONFIGURATION

BOOTLOADER --LOCATION=MBR --BOOT-DRIVE=SDA

AUTOPART --TYPE=LVM

# PARTITION CLEARING INFORMATION

CLEARPART --NONE --INITLABEL 

%PACKAGES

@BASE

@CORE

@DESKTOP-DEBUGGING

@DIAL-UP

@FONTS

@GNOME-DESKTOP

@GUEST-AGENTS

@GUEST-DESKTOP-AGENTS

@INPUT-METHODS

@INTERNET-BROWSER

@MULTIMEDIA

@PRINT-CLIENT

@X11

%END

wc命令用于统计指定文本的行数、字数、字节数,格式为“wc [参数] 文本”。

每当我讲课提到这个命令的时候,总有同学会联想到一种公共设施,哈哈,但其实两者是毫无关系的。Linux系统中的wc命令用于统计文本的行数、字数、字节数等文本内容的命令,如果为了方便自己更快去记忆,其实也可以联想到上厕所时真的好无聊,无聊到竟然数完了整张报纸上有多少行字。

参数 - 作用

-l - 只显示行数

-w - 只显示单词数

-c - 只显示字节数

例如可以使用“-l”参数来统计行数,而passwd是用于保存系统帐户信息的文件,因此下面的命令就是用于统计当前系统中有多少个用户的作用啦,感觉是不是很神奇:

[root@linuxprobe ~]# wc -l /etc/passwd

38 /etc/passwd

stat命令用于查看文件的具体存储信息和时间等信息,格式“stat 文件名称”。

使用stat命令可以看到文件的存储信息和时间等信息,下面会显示出文件的三种时间状态:Access、Modify、Change,三种时间的区别刘遄老师将在下面的touch命令中单独为您讲解:

[root@linuxprobe ~]# stat anaconda-ks.cfg

File: ‘anaconda-ks.cfg’

Size: 1213 Blocks: 8 IO Block: 4096 regular file

Device: fd00h/64768d Inode: 68912908 Links: 1

Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)

Context: system_u:object_r:admin_home_t:s0

Access: 2017-07-14 01:46:18.721255659 -0400

Modify: 2017-05-04 15:44:36.916027026 -0400

Change: 2017-05-04 15:44:36.916027026 -0400

Birth: -

cut命令用于按“列”来提取文本字符,格式为:“cut [参数] 文本”。

如何准确的提取出最想要的数据,这也应该是咱们学习研究的方向之一,按基于“行”的方式来提取是比较简单的,只需要设置好要搜索的关键词即可,但是按列搜索的话不仅要使用“-f”参数来设置需要看的列数,还必须使用“-d”参数来设置间隔符号。因为passwd是用于保存用户信息数据的文件且每一项值都是通过冒号来间隔的,因此可以来尝试下提取出passwd文件中的用户名信息吧,即提取以:(冒号)为间隔符号的第一列内容:

[root@linuxprobe ~]# head -n 2 /etc/passwd

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

[root@linuxprobe ~]# cut -d: -f1 /etc/passwd

root

bin

daemon

adm

lp

sync

shutdown

halt

mail

operator

games

ftp

nobody

dbus

polkitd

unbound

colord

usbmuxd

avahi

avahi-autoipd

libstoragemgmt

saslauth

qemu

rpc

rpcuser

nfsnobody

rtkit

radvd

ntp

chrony

abrt

pulse

gdm

gnome-initial-setup

postfix

sshd

tcpdump

linuxprobe

diff命令用于比较多个文本文件的差异,格式为:"diff [参数] 文件"。

咱们不仅可以使用“--brief”参数来仅仅确认两个文件是否不同,还可以使用“-c”参数来详细比较出多个文件的差异之处,这绝对是判断文件是否被篡改的有力神器。例如先查看下两个文件的内容,然后进行比较:

[root@linuxprobe ~]# cat diff_A.txt

Welcome to linuxprobe.com

Red Hat certified

Free Linux Lessons

Professional guidance

Linux Course

[root@linuxprobe ~]# cat diff_B.txt

Welcome tooo linuxprobe.com

Red Hat certified

Free Linux LeSSonS

////////.....////////

Professional guidance

Linux Course

仅仅显示比较后的结果,判断文件是否相同:

[root@linuxprobe ~]# diff --brief diff_A.txt diff_B.txt

Files diff_A.txt and diff_B.txt differ

使用详细的上下文输出格式来描述文件内容具体的不同:

[root@linuxprobe ~]# diff -c diff_A.txt diff_B.txt

*** diff_A.txt 2017-08-30 18:07:45.230864626 +0800

--- diff_B.txt 2017-08-30 18:08:52.203860389 +0800

***************

*** 1,5 ****

! Welcome to linuxprobe.com

Red Hat certified

! Free Linux Lessons

Professional guidance

Linux Course

--- 1,7 ----

! Welcome tooo linuxprobe.com

!

Red Hat certified

! Free Linux LeSSonS

! ////////.....////////

Professional guidance

Linux Course

 

2.7.文件目录管理命令

当前同学们学习Linux命令就像是在搬砖打地基,虽然表面上暂时还看不到明显的战绩,但其实各位的内功已经非常雄厚了。对于日常的工作来说,一定要掌握对文件的创建、修改,复制、剪切、更名与删除等操作。

touch命令用于创建空白文件与设置文件的各种时间,格式为:“touch [选项] [文件]”。

这个touch命令可真的是特别好用,它能够创建出空白的文本文件,但这实在太简单不需要去讲,例如“touch linuxprobe”这样就可以创建出一个空白的名为linuxprobe的文本文件,而有难度的操作主要是用于设置文件内容的修改时间(mtime)、文件权限或属性的更改时间(ctime)与文件的读取时间(atime)。

咱们可以在修改一个文件前先查看下文件的修改时间,然后再通过touch命令把修改后的文件时间设置伪装成自己没有动过的一样,很多黑客就会这么做呢:

参数 - 作用

-a - 仅修改“访问时间”(atime)

-m - 仅修改“更改时间”(mtime)

-d - 同时修改atime与mtime

[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

[root@linuxprobe ~]# touch -d "2017-05-04 15:44" anaconda-ks.cfg 

[root@linuxprobe ~]# ls -l anaconda-ks.cfg 

-rw-------. 1 root root 1260 May  4 15:44 anaconda-ks.cfg

mkdir命令用于创建空白的文件夹,格式为:“mkdir [选项] 目录”。

在Linux系统中文件夹是最常见的文件类型之一,除了能创建单个目录外,还可以使用“-p”参数来递归创建出具有嵌套叠层关系的文件目录。

[root@linuxprobe ~]# mkdir linuxprobe

[root@linuxprobe ~]# cd linuxprobe

[root@linuxprobe linuxprobe]# mkdir -p a/b/c/d/e

[root@linuxprobe linuxprobe]# cd a

[root@linuxprobe a]# cd b

[root@linuxprobe b]#

cp命令用于复制文件或目录,格式为:“cp [选项] 源文件 目标文件”。

想必同学们一定对文件复制操作不是很陌生吧,在Linux系统中的复制操作其实具体还分为3种情况,第一种情况是如果目标对象是个目录,则会把源文件复制到该目录中.,第二种情况是如果目标对象也是个普通文件,则会询问是否要覆盖它.最后是第三种的情况了,如果目标文件是不存在的,则会是正常的复制操作啦。

参数 - 作用

-p - 保留原始文件的属性

-d - 若对象为"链接文件",则保留该"链接文件"的属性

-r - 递归持续复制(用于目录)

-i - 若目标文件存在则询问是否覆盖

-a - 相当于-pdr(p,d,r为上述的参数)

首先创建一个名为install.log的普通空白文件,然后把其复制出来一份名为x.log的备份文件:

[root@linuxprobe ~]# touch install.log

[root@linuxprobe ~]# cp install.log x.log

[root@linuxprobe ~]# ls

install.log x.log

mv命令用于移动文件或改名,格式为:“mv [选项] 源文件 [目标路径|目标文件名]”。

剪切操作不同于复制操作,因为它会默认把源文件删除掉,操作后就只有剪切后的文件了,并且如果对一个文件在同一个目录中进行剪切操作,其实也是重命名的作用:

[root@linuxprobe ~]# mv x.log linux.log

rm命令用于删除文件或目录,格式为:“rm [选项] 文件”。

在Linux系统中删除文件时会默认再向您询问是否要执行删除操作,如果不想总看到这种反复的确认信息,您可以使用“-f”参数来直接强制删除,另外想要删除一个目录文件夹的话就需要再追加一个“-r”参数才可以,否则是删除不掉的,例如来尝试删除下刚刚那两个文件吧:

[root@linuxprobe ~]# ls

install.log linux.log

[root@linuxprobe ~]# rm install.log

rm: remove regular empty file ‘install.log’? y

[root@linuxprobe ~]# rm -rf linux.log

[root@linuxprobe ~]# ls

[root@linuxprobe ~]#

dd命令用于指定大小的拷贝文件或指定转换文件,格式为:“dd [参数]”。

dd命令是个比较重要且具有特色的一个命令,它能够让用户指定数据块的大小和个数来复制一个文件的内容,当然如果您愿意的话还可以在复制过程中转换其中的数据。Linux系统中有一个叫做/dev/zero的设备文件,每次讲课解释起来都感觉有点哲学理论的色彩,因为这个文件不会占用您的系统存储空间,但里面却可以提供无穷无尽的数据,因此用dd命令来生成出来一个指定大小的文件是再好不过的了。

参数 - 作用

if - 输入的文件名称。

of - 输出的文件名称。

bs - 设置每个“块”的大小。

count - 设置要拷贝“块”的个数。

[root@linuxprobe ~]# dd if=/dev/zero of=560_file count=1 bs=560M

1+0 records in

1+0 records out

587202560 bytes (587 MB) copied, 27.1755 s, 21.6 MB/s

dd命令也绝对不仅限于复制文件这么简单,如果您想把一个光盘设备制作成iso格式的镜像文件,在Windows系统中一定免不了要用到第三方软件才能做到,但在Linux系统中就可以直接使用dd命令来复制并压制光盘设备变成一个可立即使用的iso镜像哦:

[root@linuxprobe ~]# dd if=/dev/cdrom of=RHEL-server-7.0-x86_64-LinuxProbe.Com.iso

7311360+0 records in

7311360+0 records out

3743416320 bytes (3.7 GB) copied, 370.758 s, 10.1 MB/s

file命令用于查看文件的类型,格式为:“file 文件名”。

如此看来在Linux系统中文本、目录、设备等等这些一切都会可以被统称为文件,而咱们一般又不能单凭后缀就知道具体的文件类型,这时只能用file命令来查看下文件类型啦。

[root@linuxprobe ~]# file anaconda-ks.cfg 

anaconda-ks.cfg: ASCII text

[root@linuxprobe ~]# file /dev/sda

/dev/sda: block special

 

2.8.打包压缩与搜索命令

自从有了互联网络,人们传送文件就再也离不开压缩包格式带来的便捷了,下面将学习如何在Linux系统中对于文件的打包压缩与解压的方法,以及让用户能够基于一个关键词在文本文件中搜索匹配信息,与基于指定的名称或属性在整个文件系统中搜索匹配特定文件的超级实用命令。本小节内虽然只有三条命令,但功能都比较复杂而且参数很多,因此才会放到最后大家讲解。

tar命令用于对文件打包压缩或解压,格式为:“tar [选项] [文件]”。

而Linux系统中常见的格式比较多,主要使用的是.tar或.tar.gz或.tar.bz2格式,同学们不用担心格式好多而记不住,其实这些大部分都是由tar命令来完成的。刘遄老师来把最重要的几个参数讲给同学们下,首先“-c”参数是用于创建压缩文件的,“-x”参数是用于解压文件的,因此这两个不能同时放一起使用,其次“-z”参数是指定使用Gzip格式来压缩解压文件,“-j”参数是指定使用bzip2格式来压缩解压文件。解压时候则是根据文件的后缀来决定是何种格式参数,而有些打包操作要数个小时,屏幕没有输出的话您一定会怀疑电脑死机了,也不好判断打包的进度情况,因此非常推荐使用“-v”参数来不断显示压缩或解压的过程给用户,“-C”参数用于指定要解压到的哪个指定的目录,而“-f”参数特别重要,它必须放到参数的最后一位,代表要压缩或解压的软件包名称。我会一般使用“tar -czvf 压缩包名称.tar.gz 要打包的目录”命令来把指定的文件来打包压缩,解压的话则是“tar -xzvf 压缩包名称.tar.gz”命令,让咱们来逐个演示下打包压缩与解压的操作吧。接下来使用tar命令把/etc目录通过gzip格式进行打包压缩,并把文件命名为etc.tar.gz:

[root@linuxprobe ~]# 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目录中:

[root@linuxprobe ~]# mkdir /root/etc

[root@linuxprobe ~]# 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

………………省略部分解压过程………………

grep命令用于对文本内容进行关键词的搜索匹配,格式为:“grep [选项] [文件]”。

咱们可以把grep命令当作是用途最广泛的文本搜索匹配工具,参数虽然很多但基本是用不到的,刘遄老师通过将近十年的运维工作和教学经验总结后才提出本书籍核心“去掉不实用”的写作理念绝对不是乱说,一名技术导师如果写书的水平只能停留在“技术的搬运工”而不能成为一名对真正优质技术知识的提炼者,那绝对会害了一大波学生。刘遄老师在这里只讲两个最最最常用的参数,只要会使用“-n”参数显示搜索到信息的行号,使用“-v”参数用于反选信息(即没有包含关键词的所有信息行)就几乎能完成您以后80%的工作需要,至于其他上百个参数,以后万一工作遇到了,再来用“man grep”命令查一下也来得及。

Linux系统中的/etc/passwd文件是保存着所有用户信息的文件,而一旦用户的登录终端被设置成“/sbin/nologin”则不再允许登录系统,因此可以通过使用grep命令来匹配出当前系统中所有不允许登录系统的用户信息:

[root@linuxprobe ~]# 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:0:operator:/root:/sbin/nologin

………………省略部分输出过程………………

find命令用于在Linux系统中按照指定条件查找文件,格式为:“find [查找路径] 寻找条件 操作”。

刘遄老师在书中反反复复的提到“Linux系统中的一切都是文件”,接下来您就要感受到这份力量了。在Linux系统中的搜索工作一般都是通过find命令来完成的,它可以根据不同的文件特性来做为匹配项(如文件名、大小、修改时间、权限等信息),一旦匹配到了则会默认为用户显示到屏幕上来,基础的匹配项目请见下表即可。我主要讲解下“--exec”参数重要的作用,这个参数是用于把find命令搜索到的结果交由给后面的命令再进一步做处理,十分类似于咱们将在下一章中提到的管道符技术。

第2章 新手必须掌握的Linux命令

Linux系统中的配置文件根据FHS协议会被保存到/etc目录中(第6章精讲),如果要想获取到该目录中所有以host开头的文件列表就可以这样做:

[root@linuxprobe ~]# find /etc -name "host*" -print

/etc/avahi/hosts

/etc/host.conf

/etc/hosts

/etc/hosts.allow

/etc/hosts.deny

/etc/selinux/targeted/modules/active/modules/hostname.pp

/etc/hostname

想要在整个系统中搜索所有权限中包括SUID权限的文件(第5章精讲),只需使用减号-4000即可:

[root@linuxprobe ~]# find / -perm -4000 -print

/usr/bin/fusermount

/usr/bin/su

/usr/bin/umount

/usr/bin/passwd

/usr/sbin/userhelper

/usr/sbin/usernetctl

………………省略部分输出信息………………

拔高题目:在整个的文件系统中找出所有归属于linuxprobe用户的文件并复制到/root/findresults目录。

此题的重点是"-exec {} \;"其中的{}代表find命令搜索出的逐个文件,并且记得命令的结尾必须是\;

[root@linuxprobe ~]# find / -user linuxprobe -exec cp -a {} /root/findresults/ \;

 

本章节的复习作业

1:在红帽RHEL7系统及众多Linux系统中最常使用的SHELL终端是什么?

答案:Bash(Bourne-Again SHell)解释器。

2:执行Linux系统命令的时候,添加参数的目的是什么?

答案:为了让Linux系统命令能好的完成工作,功能更贴近于工作需求。

3:Linux系统命令、命令参数及命令对象之间,普遍都应该用什么间隔?

答案:应该使用1个或1个以上的空格做间隔。

4:请写出用echo命令把SHELL变量值输出到屏幕终端的命令。

答案:执行echo $SHELL命令即可。

5:简述Linux系统中5种进程的名称及含义:

答案:R(运行):正在运行或在运行队列中等待。S(中断):休眠中, 在等待某个条件的形成或接收到信号。D(不可中断):收到信号不唤醒和不可运行, 进程必须等待直到有中断发生。Z:(僵死):进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放。T:(停止):进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行。

6:请尝试用Linux系统命令关闭PID号码为5529的服务进程。

答案:执行kill 5529命令即可,若知道服务名称则可以用kilall或systemctl命令进行关闭。

7:使用ifconfig命令查看网络状态信息时,刘遄老师说看的4项信息分别是什么?

答案:4项重要信息分别是网卡名称、IP地址、MAC物理地址以及RX/TX的收发流量数据。

8:使用uptime命令查看系统负载情况时,对应的负载数值如果是0.91, 0.56, 0.32,那么最近15分钟内负载压力最大的是那个时间段?

答案:按照负载数值可分析出最近1分钟的负载压力是最大的。

9:使用history命令查看历史命令执行记录时,命令前面的数字除了排序外还有什么用处?

答案:还可以用“!数字”的命令格式重复执行某次的命令记录,避免了重复输入较长命令的麻烦。

10:若想查看的文件内容较长,那么使用cat、more、head、tail中那个命令最合适?

答案:文件较长的话应使用more命令,较短的话应使用cat命令。

11:请问在使用mkdir命令创建有嵌套关系目录的时候,应该加上什么参数呢?

答案:应该加上-p递归迭代参数,进行自动化创建有嵌套关系的目录。

12:请问在使用rm命令删除文件或目录的时候,可使用那个参数来避免二次确认呢?

答案:可使用-f强制删除参数,这样即可无需再二次确认。

13:若有一个名称为backup.tar.gz的压缩包文件,那么解压的命令应该是什么?

答案:应该用tar命令进行解压,执行tar xzvf backup.tar.gz命令即可。

14:使用grep命令对某个文件进行关键词搜索的时候,若想要进行文件内容反选,应使用什么参数?

答案:grep命令可使用-v参数来进行匹配内容的反向选择,即显示出不包含某个关键词的行。

精选文章
热门文章