00:00/00:00

本章节已编写及校对完毕,现有奖征集建议、若您发现本章中有错别字或补充欢迎联系刘遄老师QQ:5604241。

章节简述:

本章节首先讲述系统内核Shell终端的关系与作用,介绍bash解释器的4大优势并学习Linux命令的执行方法。

经验丰富的运维人员可以合理恰当的组合命令与参数,使Linux字符命令更加的灵活且相对减少消耗系统资源

刘遄老师精挑细选出最应该先学习的系统工作系统状态工作目录文件目录打包压缩搜索等工作所需的命令。

通过将上述命令归纳到不同的章节,让您逐个的学习掌握必会的Linux基础命令,为今后学习更复杂的命令和服务做好必备铺垫。

2.1 强大好用的SHELL

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

系统内核

图2-1 Linux系统的软件结构图,原稿

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

"Shell"——也可称为“壳”,充当的是人与内核(硬件)的翻译官,用户将一些命令“告诉”Shell,它就会调用相应的程序服务执行工作啦,很厉害吧~~现在包括红帽系统在内的许多热门Linux系统主流默认字符Shell是Bash(Bourne-Again SHell)。

读者要明白bash作为大多数linux系统的默认字符解释器,必须必须必须得学好!Bash的优势主要有四项:

1.通过上下方向键来调取过往执行过的命令。
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所示。

运行虚拟机中的RHEL7系统,并在桌面上敲击右键后点击“Open in Terminal”,这样就成功的打开了一个终端。
2-2 在Linux系统上开启终端

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

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

3.敲击回车后即可看到如图2-4所示的帮助信息。
man命令的帮助信息界面

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

man命令的常用操作按键:
按键 用处
空格键 向下翻一页。
[Page Down] 向下翻一页。
[Page Up] 向上翻一页。
[HOME] 直接前往首页。
[END] 直接前往尾页。
/关键词 从上至下搜索某个关键词,如"/linux"。
?关键词 从下至上搜索某个关键词,如"?linux"。
n 定位到下一个搜索到的关键词。
N 定位到上一个搜索到的关键词。
q 退出帮助文档。

一般来讲帮助文件都很长很多,如果你想翻看的话,就要理解帮助文档的目录结构与操作方法:
结构名称 代表意义
NAME 命令的名称
SYNOPSIS 参数的大致使用方法
DESCRIPTION 介绍说明
EXAMPLES 演示(附带简单说明)
OVERVIEW 概述
DEFAULTS 默认的功能
OPTIONS 具体的可用选项(带介绍)
ENVIRONMENT 环境变量
FILES 用到的文件
SEE ALSO 相关的资料
HISTORY 维护历史与联系方式

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

刘遄老师主讲的Linux技术培训课程介绍:http://www.linuxprobe.com/training

2.3 常用系统工作命令

您手中的这本《Linux就该这么学》教材是结合刘遄老师七年多的运维学习、及开办数十期培训的授课经验而编写而成,您可能在本章节中找不到某些见过的命令,原因是我在尽力将命令与实践相互结合,真正让读者在操作中理解技术,而不是单纯的把命令堆砌到书中让读者去硬背。因此我花费了将近半年的时间将最常用的Linux命令汇总、归纳、整理、分类,最终将部分常用的命令合理的安排到了后面章节中陆续学习,并且经过数年的培训成果来看,我非常有自信的肯定这也一定是适合于您的Linux命令学习方法。
echo命令用于在终端显示字符串或输出变量提取后的值,格式为:“echo [字符串 | $变量]”。

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

[root@linuxprobe ~]# echo Linuxprobe.Com
Linuxprobe.Com

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

[root@linuxprobe ~]# echo $SHELL
/bin/bash

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

强大的date命令只需键入以"+"号开头的参数即可按照指定格式来输出系统的时间或日期,这样日常工作时咱们便可以将打包数据的备份命令与指定格式输出的时间信息结合到一起,使得咱们可以更加便捷的区分每个文件的备份时间啦,date命令常见的格式如下:

参数 作用
%t 跳格[TAB键]
%H 小时(00-23)
%I 小时(00-12)
%M 分钟(00-59)
%S 秒(00-59)
%X 相当于%H:%M:%S
%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 Aug 24 16:11:23 CST 2016

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

[root@linuxprobe ~]# date "+%Y-%m-%d %H:%M:%S"
2016-08-24 16:29:12

设置当前的系统时间为2016年9月1日8点30分:

[root@linuxprobe ~]# date -s "20160901 8:30:00"
Tue Sep 1 08:30:00 CST 2016

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

[root@linuxprobe ~]# date
Tue Sep 1 08:30:01 CST 2016

查看今天是一年中的第几天:

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

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

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

[root@linuxprobe ~]# reboot

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

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

[root@linuxprobe ~]# poweroff

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

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

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

[root@linuxprobe ~]# wget http://down.linuxprobe.com/Tools/RHEL-server-7.0-x86_64-LinuxProbe.Com.iso
--2016-08-24 18:25:24-- http://down.linuxprobe.com/Tools/RHEL-server-7.0-x86_64-LinuxProbe.Com.iso
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: 3743416320 (3.5G) [application/octet-stream]
Saving to: 'RHEL-server-7.0-x86_64-LinuxProbe.Com.iso'
100%[====================================>] 3,743,416,320 1.82M/s in 32m 27s
2016-08-24 18:57:51 (1.83 MB/s) - 'RHEL-server-7.0-x86_64-LinuxProbe.Com.iso' saved [3743416320/3743416320]

递归下载《Linux就该这么学》的整站页面与所有资料,下载完成后会自动保存到当前目录中名字为"www.linuxprobe.com"的目录中:

[root@linuxprobe ~]# wget -r -p http://www.linuxprobe.com
--2016-08-24 19: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命令与管道符来结合使用,用于来抓取到某个指定服务进程所对应的PID号码,而常见的ps命令参数包括有:

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

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

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

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

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

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

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

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

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
进程的所有者 进程ID号 运算器占用率 内存占用率 虚拟内存使用量(单位是KB) 占用的固定内存量(单位是KB) 所在终端 进程状态 被启动的时间 实际使用CPU的时间 命令名称与参数
root 1 0.0 0.4 53684 7628 ? Ss 07:22 0:02 /usr/lib/systemd/systemd
root 2 0.0 0.0 0 0 ? S 07:22 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 07:22 0:00 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< 07:22 0:00 [kworker/0:0H]
root 7 0.0 0.0 0 0 ? S 07:22 0:00 [migration/0]

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

这个top命令可真的是太厉害了,完全可以比喻成是“强化版的Windows任务管理器”,运行界面如图2-5所示:

top命令

图2-5 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",这样命令的进程将会立即被终止,是比较常用的方法之一。或者有些命令在执行时会不断的在屏幕上输出信息,影响到咱们继续输入命令了,此时便可以在执行这条命令前,将这段命令的最后面添加个"&"符号,那么从一开始执行该命令就会是在后台执行。

2.4 系统状态检测命令

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

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

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

[root@linuxprobe ~]# ifconfig
eno16777728: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  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<link>
        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<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        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 2014 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
总计内存量 已用量 可用量 进程共享的内存量 磁盘缓存的内存量 缓存的内存量
total used free shared buffers cached
Mem: 1.8G 1.3G 542M 9.8M 1.6M 413M
-/+ buffers/cache: 869M 957M
Swap: 2.0G 0B 2.0G


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

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

[root@linuxprobe ~]# who
登陆的用户名 终端设备 登陆到系统的时间
root :0 2016-08-24 17:52 (:0)
root pts/0 2016-08-24 17:52 (:0)


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条执行过的命令,若要修改可直接编辑/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

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

[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-20150905230631.tar.xz
The checksum is: 79436cdf791327040efde48c452c6322
//此压缩包文件和这段校验值就是要发送给对方的内容。
Please send this file to your support representative.
2.5 工作目录切换命令

工作目录指的是咱们当前在系统中所处的“位置”,而这会牵涉到系统存储结构的知识,将会在第六章为您详细讲解,因此下面的操作实验您只需简单看下就好,如果不能完全掌握也不用自责,这是因为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
total 60
dr-xr-x---. 14 root root 4096 May  4 07:56 .
drwxr-xr-x. 17 root root 4096 May  4 15:55 ..
-rw-------.  1 root root 1213 May  4 15:44 anaconda-ks.cfg
-rw-------.  1 root root  957 May  4 07:54 .bash_history
-rw-r--r--.  1 root root   18 Dec 28  2013 .bash_logout
-rw-r--r--.  1 root root  176 Dec 28  2013 .bash_profile
-rw-r--r--.  1 root root  176 Dec 28  2013 .bashrc
drwx------. 10 root root 4096 May  4 07:56 .cache
drwx------. 15 root root 4096 May  4 07:49 .config
-rw-r--r--.  1 root root  100 Dec 28  2013 .cshrc
drwx------.  3 root root   24 May  4 07:46 .dbus
drwxr-xr-x.  2 root root    6 May  4 07:49 Desktop
drwxr-xr-x.  2 root root    6 May  4 07:49 Documents
drwxr-xr-x.  2 root root    6 May  4 07:49 Downloads
-rw-------.  1 root root   16 May  4 07:49 .esd_auth
-rw-------.  1 root root  628 May  4 07:56 .ICEauthority
-rw-r--r--.  1 root root 1264 May  4 07:48 initial-setup-ks.cfg
drwx------.  3 root root   18 May  4 07:49 .local
drwxr-xr-x.  2 root root    6 May  4 07:49 Music
drwxr-xr-x.  2 root root    6 May  4 07:49 Pictures
drwxr-xr-x.  2 root root    6 May  4 07:49 Public
-rw-r--r--.  1 root root  129 Dec 28  2013 .tcshrc
drwxr-xr-x.  2 root root    6 May  4 07:49 Templates
drwxr-xr-x.  2 root root    6 May  4 07:49 Videos
-rw-------.  1 root root 1962 May  4 07:54 .viminfo

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

[root@linuxprobe ~]# ls -ld /etc
drwxr-xr-x. 132 root root 8192 Jul 10 10:48 /etc
2.6 文本文件编辑命令

通过刚刚一个小节,您已经基本学会了对当前工作目录的管理方法。在Linux系统中一切都是文件,而对于服务程序的配置自然也就是在编辑程序的配置文件,如果不能熟练的查阅数据,那以后工作时可就真的要尴尬了,所以接下来咱们来学习几条用于查看文本文件内容的命令吧,至于编辑器的使用是比较复杂的,咱们单独放到第四章节中和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=localhost.localdomain
    22    # Root password
    23    rootpw --iscrypted $6$pDjJf42g8C6pL069$iI.PX/yFaqpo0ENw2pa7MomkjLyoae2zjMz2UZJ7bH3UO4oWtR1.Wk/hxZ3XIGmzGJPcs/MgpYssoi8hPCt8b/
    24    # System timezone
    25    timezone America/New_York --isUtc
    26    user --name=linuxprobe --password=$6$a9v3InSTNbweIR7D$JegfYWbCdoOokj9sodEccdO.zLF4oSH2AZ2ss2R05B6Lz2A0v2K.RjwsBALL2FeKQVgf640oa/tok6J.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=localhost.localdomain
--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@localhost ~]#

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

[root@localhost ~]# 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'
//该日志内容会实时刷新,同时按下“<strong>ctrl+c</strong>”健可结束命令。

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

很多时候咱们想要快速的替换文本内容中的一些词汇,又或者将整个文本内容都进行替换,手工逐个替换真的太累了,而且对于处理大批量的内容非常不现实。此时咱们便可以先使用cat命令读取待处理的文本内容,然后通过管道符(第三章将为您细致讲解)将这些数据传递给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/YFAQPO0ENW2PA7MOMKJLYOAE2ZJMZ2UZJ7BH3UO4OWTR1.WK/HXZ3XIGMZGJPCS/MGPYSSOI8HPCT8B/
# SYSTEM TIMEZONE
TIMEZONE AMERICA/NEW_YORK --ISUTC
USER --NAME=LINUXPROBE --PASSWORD=$6$A9V3INSTNBWEIR7D$JEGFYWBCDOOOKJ9SODECCDO.ZLF4OSH2AZ2SS2R05B6LZ2A0V2K.RJWSBALL2FEKQVGF640OA/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@localhost ~]# 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: 2016-07-14 01:46:18.721255659 -0400
Modify: 2016-05-04 15:44:36.916027026 -0400
Change: 2016-05-04 15:44:36.916027026 -0400
Birth: -

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

如何准确的提取出最想要的数据,这也是咱们在研究的技术方向,按基于“行”的方式来提取是比较简单的,只需要设置好匹配项目和行数即可,但是按列搜索的话不仅要使用“-f”参数来设置需要看的列数,还必须使用“-d”参数来设置间隔符号,因为passwd是用于保存用户信息数据的文件,而每一项值都是通过冒号来间隔(见下面head命令的输出演示),因此咱们来尝试下提取出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 2015-08-30 18:07:45.230864626 +0800
--- diff_B.txt 2015-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 文件目录管理命令

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

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

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

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

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

[root@localhost ~]# ls -l anaconda-ks.cfg 
-rw-------. 1 root root 1213 May  4 15:44 anaconda-ks.cfg
[root@localhost ~]# echo "Visit the LinuxProbe.com to learn linux skills" >> anaconda-ks.cfg
[root@localhost ~]# ls -l anaconda-ks.cfg
-rw-------. 1 root root 1260 Aug  2 01:26 anaconda-ks.cfg
[root@localhost ~]# touch -d "2016-05-04 15:44" anaconda-ks.cfg 
[root@localhost ~]# 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系统中一定免不了要用到第三方的很多软件才可以,但咱们可以直接使用这个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

出现问题?大胆提问!

因读者们硬件不同或操作错误都可能导致实验配置出错,请耐心再仔细看看操作步骤吧,不要气馁~

Linux技术交流请加A群:560843(),B群:340829(推荐),C群:463590(推荐),点此查看全国群

*本群特色:通过口令验证确保每一个群员都是《Linux就该这么学》的读者,答疑更有针对性,不定期免费领取定制礼品。

2.8 打包压缩与搜索命令

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

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

Windows系统中最常见的压缩格式是.rar与.zip吧,而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命令当作是用途最广泛的文本搜索匹配工具,参数虽然很多但基本是用不到的,我用将近七年的工作和教学经验提出本书籍核心“去掉不实用”的写作理念绝对不是乱说,一名Linux讲师如果写书的水平只能停留在“技术的搬运工”而不成成为一名对真正优质技术知识的提炼者,那绝对会害了一大波学生,因此刘遄老师在这里只讲两个最常用的参数,只要会使用“-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命令用于查找文件,格式为:“find [查找路径] 寻找条件 操作”。

我在书中反反复复的提到“Linux系统中的一切都是文件”,接下来您就要感受到这份力量了。咱们在Linux系统中的搜索工作一般都是通过find命令来完成的,它可以根据不同的文件特性来做为匹配项(如文件名、大小、修改时间、权限等信息),一旦匹配到了则会默认为用户显示到屏幕上来,基础的匹配项目请见下表即可,我主要讲解下“--exec”参数重要的作用,这个参数是用于将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 匹配文件的大小(+50k查找超过50k的文件,而-50k则代表查找小于50k的文件)
-prune 忽略某个目录
-exec {} \; 后面可接对搜索到结果进一步处理的命令(下面会有演示)

Linux系统中的配置文件根据FHS协议会被保存到/etc目录中(第六章精讲),如果咱们要想获取到该目录中所有以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权限的文件(第五章精讲),只需使用减号-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 -arf {} /root/findresults/ \;

读者们,辛苦了~你们有没有有觉得Linux中的“命令”真的很方便?下章中将会正式的使用到它们,做好准备吧!另外大家也几乎见到了所有Linux系统中日常用到的命令,但这仅仅是打好基础,为了今后能更加高效的管理主机,请一定要学习后来的Shell脚本课程。

出现问题?大胆提问!

因读者们硬件不同或操作错误都可能导致实验配置出错,请耐心再仔细看看操作步骤吧,不要气馁~

Linux技术交流请加A群:560843(),B群:340829(推荐),C群:463590(推荐),点此查看全国群

*本群特色:通过口令验证确保每一个群员都是《Linux就该这么学》的读者,答疑更有针对性,不定期免费领取定制礼品。

本章节的复习作业(答案就在问题的下一行哦,用鼠标选中即可看到的~)

1:请问在红帽RHEL7系统中的默认Shell解释器是什么?

答案:默认的解释器为bash。

2:如果希望在帮助文档man向下翻,可以有什么方法?

答案:可以点击键盘的↓,也可以选择PageDown或End。

3:mv命令不但可以转移文件,还常常用来做什么?

答案:mv命令还可以用来重命名文件。

 

4:find命令可以基于什么条件搜索文件?

答案:可以基于文件名称、大小、类型、时间、所有者/组、新旧等等条件。
刘遄

刘遄

我们懂得《Linux就该这么学》作为一本Linux入门读物,更加有责任,有必要将文章质量不断提高,知识点不断扩充,让实验更加的实用,不辜负每位读者给予我们的支持,因此我们正在全球各地部署书籍的镜像站点,想用最迅猛的访问速度满足您心中那颗求知的小宇宙,同时,向每位会员承诺,本书可永久免费学习,提供所有所需工具以及在能力范围内的答疑支持。收费培训服务:http://www.linuxprobe.com/training
刘遄