首先介绍系统内核和 Shell 终端的关系与作用,然后介绍 Bash 解释器的 4 大优势并学习 Linux 命令的执行方法。经验丰富的运维人员能够通过合理地组合命令,来更精准地满足工作需求,还可以尽可能地降低系统资源消耗。
本章选出常用的数十个 Linux 命令,它们与系统工作、系统状态、工作目录、文件、目录、打包压缩与搜索等主题相关。通过分门别类地逐个学习这些基础的 Linux 命令,为今后学习更复杂的命令和服务做好必备的知识铺垫。
2.1 强大好用的 Shell
一台完整的计算机是由运算器、控制器、存储器、输入/输出等多种硬件设备共同组成的,而能让各种硬件设备各司其职且又能协同运行的东西就是系统内核。Linux 系统的内核负责完成对硬件资源的分配、调度等管理任务,对系统的正常运行起着十分重要的作用。
如图 2-1 所示,硬件设备由系统内核直接管理,但由于内核的复杂性太高,在访问时存在较大的风险,因此用户不能直接访问内核。虽然通过调用系统提供的 API(应用程序编程接口)就能实现某个功能,但哪怕实现“将一条信息通过互联网传输给别人”这样简单的任务,都要手动调用几十次 API 接口,使用起来太不切实际。而最外层的服务程序则是最贴近于用户端的,这些服务程序是集成了大量 API 接口的完整软件,微信、QQ 就是这样的服务程序。
如果把整台电脑比喻成人类社会,那么服务程序就是一名翻译官,负责将用户提出的需求转换成硬件能够接收的指令代码,然后再将处理结果反馈成用户能够读懂的内容格式。这样一来一回,用户就能使用硬件资源了。
上图被一层层“包裹”起来的硬件设备,有没有感觉像一只蜗牛的壳呢?英文中的壳叫作 Shell,我们在行业中也将用户终端程序称之为 Shell,方便好记。Shell 就是终端程序的统称,它充当了人与内核(硬件)之间的翻译官,现在包括红帽系统在内的许多主流 Linux 系统默认使用的终端是 Bash(Bourne-Again SHell)解释器,这个 Bash 解释器主要有以下 4 项优势:
➢ 通过上下方向键来调取执行过的 Linux 命令;
➢ 命令或参数仅需输入前几位就可以用 Tab 键补全;
➢ 具有强大的批处理脚本;
➢ 具有实用的环境变量功能。
在Linux 系统中有些图形化工具(比如逻辑卷管理器[Logical Volume Manager,LVM])确实非常好用,极大地降低了运维人员出错的概率,值得称赞。很多图形化工具其实只是调用了命令脚本来完成相应的工作,缺乏 Linux 命令原有的灵活性及可控性。图形化工具相较于 Linux 命令行界面会更加消耗系统资源,因此经验丰富的运维人员甚至都不会给 Linux 系统安装图形界面,在需要开始运维工作时直接通过命令行模式远程连接过去。
2.2 执行命令的必备知识
命令有特定的执行格式及规范,以空格隔开还需区分大小写,括号内为可选的参数:
命令名称 【命令参数】 命令对象
命令名称:就是语法中的“动词”,表达的是想要做的事情,例如创建用户、查看文件、重启系统等操作。
命令参数:用于对命令进行调整,让执行的命令更好地贴合工作需求,就像买衣服一样,衣服的尺码总会感觉偏大或偏小,要么只能将就着穿,要么就再裁剪修改一下,而这种对命令进行“裁剪”的行为就是加参数。例如创建一个编码为888的用户、仅查看文件的前20行、重启系统前先提醒其他用户等。参数可以用长格式(完整的选项名称),也可以用短格式(单个字母的缩写),两者分别用“--”与“-”作为前缀(示例请见表2-1)。
命令对象:一般指要处理的文件、目录、用户等资源名称,也就是命令执行后的“承受方”。例如创建一位叫小明的用户、查看一个叫工资表的文件、重启一个IP为192.168.10.10的系统等。
在初学 Linux 系统时不会执行命令大多是因为参数比较复杂,参数值需要随不同的命令和实际工作情况而发生改变。所以怎么知道某个命令是干嘛用的?怎样才能知道它有哪些可用参数呢?”接下来,我们就拿 man 这个命令去学习。
默认的主机登录界面中只有我们刚刚新建的普通用户,因此在正式进入系统之前,还需要先单击普通用户下的“Not listed?”选项切换至 root 管理员身份。如果使用普通用户登录到主机中,后面的一些命令会因为权限不足而无法执行,需要有足够的权限才能完成接下来的实验。
登录成功后,单击桌面左上角的Activities按钮,在左侧弹出的菜单中单击命令行终端图标即可打开Bash解释器,如下图所示。
在命令行终端中输入 man man 命令来查看 man 命令自身的帮助信息。
在 man 命令帮助信息的界面中,所包含的常用操作按键及其作用如表 2-2 所示。
在输入命令前就已经存在的“[root@Enterprise8~]#”这部分内容是终端提示符,它用于向用户展示一些基本的信息—当前登录用户名为 root,简要的主机名 是 Enterprise8,所在目录是~(这里的~是指用户家目录),#表示管理员身份(如果是$则表示普通用户,相应的权限也会小一些)。
额外的4个快捷键/组合键小技巧
➢Tab键:在Bash解释器的快捷键中,Tab键绝对是使用频率最高的,它能够实现对命令、参数或文件的内容补全。例如想执行reboot重启命令,但一时想不起来该命令的完整拼写,则可以这样输入:
在上图的实验中,先输入了两个字母 re,随后敲击了两下 Tab 键。由于以 re 开头的命令不止一个,所以系统将所有以 re 开头的命令全部显示了出来。而第二次输入 reb 后再敲击 Tab 键,由于此时没有以 reb 开头的其他命令,所以系统就显示出了完整的 reboot 重启命令。
➢Ctrl+c组合键 :当同时按下键盘上的 Ctrl 和字母 C 的时候,意味着终止当前进程的运行。假如执行了一个错误命令,或者是执行某个命令后迟迟无法结束,这时就可以按下 Ctrl+C 组合键,命令行终端的控制权会立刻回到我们手中。
下图命令watch -n 1 uptime的执行效果是每 1s 刷新一次系统负载情况(先不用管命令的作用),直到按下Ctrl+C 组合键时才停止运行。
➢Ctrl+d组合键 :当同时按下键盘上的 Ctrl 和字母 D 的时候,表示键盘输入结束。
➢Ctrl+l组合键 :当同时按下键盘上行的 Ctrl 和字母 l 的时候,会清空当前终端中已有的内容(相当于清屏操作)。
2.3 常用系统工作命令
1.echo命令
echo命令用于在终端设备上输出字符串或变量提取后的值,语法格式为“echo [字符串] [$变量]”。
这是Linux系统中最常用的几个命令之一,它的操作却非常简单,执行“echo字符串”或“echo $变量”就行,其中$符号的意思是提取变量的实际值,以便后续的输出操作。
下图把指定字符串“LinuxProbe.com”输出到终端屏幕,使用“$变量”的方式提取出变量SHELL的值,并将其输出到屏幕上:
2.date命令
date命令用于显示或设置系统的时间与日期,语法格式为“date [+指定的格式]”。用户只需在强大的date命令后输入以“+”号开头的参数,即可按照指定格式来输出系统的时间或日期,这样在日常工作时便可以把备份数据的命令与指定格式输出的时间信息结合到一起。例如,把打包后的文件自动按照“年-月-日”的格式打包成“backup-2023-5-1.tar.gz”,用户只需要看一眼文件名称就能大致了解到每个文件的备份时间了。date命令中常见的参数格式及其作用如下图。
按照默认格式查看当前系统时间的 date 命令;
按照“年-月-日 小时:分钟:秒”的格式查看当前系统时间的 date 命令;
将系统的当前时间设置为 2023 年 01 月 1 日 8 点 30 分的 date 命令,需加上 -s 参数;
再次使用 date 命令并按照默认的格式查看当前的系统时间;
用参数 %j 查看今天是当年中的第几天,这个参数能够很好的区分备份时间的早晚,即数字越大,越靠近当前时间;由于第三条命令强制设置为1月1日所以会显示第1天
上面共5行命令执行结果如下图:
3.timedatectl命令
timedatectl命令用于设置系统的时间,英文全称为“time date control”,语法格式为“timedatectl [参数]”。
发现电脑时间跟实际时间不符?如果只差几分钟的话,我们可以直接调整。但是,如果差几个小时,那么除了调整当前的时间,还有必要检查一下时区了。timedatectl命令中常见的参数格式及作用如图。
查看系统时间与时区的方法;
如果您查到的时区不是上海(Asia/Shanghai),可以手动进行设置;
如果日期还是不正确,可再手动修改系统日期;
而如果想修改时间的话,也很简单;
上述4条命令执行后用date查看效果如下:
4.reboot命令
reboot命令用于重启系统,输入该命令后按回车键执行即可。
由于重启计算机这种操作会涉及硬件资源的管理权限,因此最好是以root管理员的身份来重启,普通用户在执行该命令时可能会被拒绝。reboot的命令如下:
5.poweroff命令
poweroff命令用于关闭系统,输入该命令后按回车键执行即可。
与上面相同,该命令也会涉及硬件资源的管理权限,因此最好还是以root管理员的身份来关闭电脑,其命令如下:
6.wget命令
wget命令用于在终端命令行中下载网络文件,英文全称为“web get”,语法格式为“wget [参数] 网址”。
借助于wget命令,可以无须打开浏览器,直接在命令行界面中就能下载文件。如果您没有Linux系统的管理经验,当前只需了解一下wget命令的参数以及作用,然后看下面的演示实验:
尝试使用 wget 命令从Linuxprobe站点下载最新的 PDF 格式的电子文档。复制下载链接地址再用 wget 粘贴后回车键下载:
还可以使用 wget 命令加参数递归下载www.linuxprobe.com网站内的所有页面数据以及文件,下载完后会自动保存到当前路径下一个名为www.linuxprobe.com的目录中。该命令的执行结果如下:
7.ps命令
ps命令用于查看系统中的进程状态,英文全称为“processes”,语法格式为“ps [参数]”。
在第一次执行这个命令时都要惊呆一下—怎么会有这么多输出值,这可怎么看得过来?高手通常会将ps命令与第3章的管道符技术搭配使用,用来抓取与某个指定服务进程相对应的PID号码。ps命令的常见参数以及作用如下图:
系统中时刻运行着许多进程,如果能够合理地管理它们,则可以优化系统的性能。在 Linux 系统中有 5 种常见的进程状态,分别为运行、中断、不可中断、僵死与停止,其各自含义如下说明。
➢R(运行):进程正在运行或在运行队列中等待。
➢S(中断):进程处于休眠中,当某个条件形成后或者接收到信号时,则脱离该 状态。
➢D(不可中断):进程不响应系统异步信号,即便用kill命令也不能将其中断。
➢Z(僵死):进程已经终止,但进程描述符依然存在, 直到父进程调用wait4()系统函数后将进程释放。
➢T(停止):进程收到停止信号后停止运行。
除了上面5种常见的进程状态,还有可能是高优先级(<)、低优先级(N)、被锁进内存(L)、包含子进程(s)以及多线程(l)这5种补充形式
前面所提到在Linux系统中的命令参数有长短格式之分,长格式和长格式之间不能合并,长格式和短格式之间也不能合并,但短格式和短格式之间是可以合并的,合并后仅保留一个减号(-)即可。另外ps命令可允许参数不加减号(-),因此可直接写成ps aux的样子如下图。
8.pstree命令
pstree命令用于以树状图的形式展示进程之间的关系,英文全称为“process tree”,输入该命令后按回车键执行即可。
在执行ps命令后,产生的信息量太大又没有规律,如果想让进程以树状图的形式,有层次地展示出进程之间的关系,则可以使用pstree命令:
9.top命令
top命令用于动态地监视进程活动及系统负载等信息,输入该命令后按回车键执行即可。
前面介绍的命令都是静态地查看系统状态,不能实时滚动最新数据,而top命令能够动态地查看系统状态,因此完全可以将它看作是Linux中“强化版的Windows任务管理器”。top是相当好用的性能分析工具,该命令的运行界面如下图。
top命令执行结果的前5行为系统整体的统计信息,其所代表的含义如下。
➢ 第1行:系统时间、运行时间、登录终端数、系统负载(3个数值分别为1分钟、5分钟、15分钟内的平均值,数值越小意味着负载越低)。
➢ 第2行:进程总数、运行中的进程数、睡眠中的进程数、停止的进程数、僵死的进程数。
➢ 第3行:用户占用资源百分比、系统内核占用资源百分比、改变过优先级的进程资源百分比、空闲的资源百分比等。其中数据均为CPU数据并以百分比格式显示,例如“99.9 id”意味着有99.9%的CPU处理器资源处于空闲。
➢ 第4行:物理内存总量、内存空闲量、内存使用量、作为内核缓存的内存量。
➢ 第5行:虚拟内存总量、虚拟内存空闲量、虚拟内存使用量、已被提前加载的内存量。
10.nice命令
nice命令用于调整进程的优先级,语法格式为“nice优先级数字 服务名称”。在top命令输出的结果中,PR和NI值代表的是进程的优先级,数字越低(取值范围是-20~19),优先级越高。在日常的工作中,可以将一些不重要进程的优先级调低,让紧迫的服务更多地利用CPU和内存资源,以达到合理分配系统资源的目的。-n参数后面跟取值范围:
11.pidof命令
pidof命令用于查询某个指定服务进程的PID号码值,语法格式为“pidof [参数] 服务名称”。每个进程的进程号码值(PID)是唯一的,可以用于区分不同的进程。执行如下命令来查询本机上sshd服务程序的PID:
12.kill命令
kill命令用于终止某个指定PID值的服务进程,语法格式为“kill [参数] 进程的PID”。使用kill命令把上面用pidof命令查询到的PID所代表的进程终止掉,其命令如下所示。这种操作的效果等同于强制停止sshd服务;但有时系统会提示进程无法被终止,此时可以加参数-9,表示最高级别地强制杀死进程:
13.killall命令
killall命令用于终止某个指定名称的服务所对应的全部进程,语法格式为“killall [参数] 服务名称”。通常来讲,复杂软件的服务程序会有多个进程协同为用户提供服务,如果用kill命令逐个去结束这些进程会比较麻烦,此时可以使用killall命令来批量结束某个服务程序带有的全部进程。下面以httpd服务程序为例,来结束其全部进程。由于RHEL 8系统默认没有安装httpd服务程序,因此只需看操作命令即可。
2.4 系统状态检测命令
要想更快、更好地了解Linux服务器,必须具备快速查看系统运行状态的能力,因此接下来会逐个讲解与网卡网络、系统内核、系统负载、内存使用情况、当前启用终端数量、历史登录记录、命令执行记录以及救援诊断等相关命令的使用方法。这些命令都超级实用。
1.ifconfig命令
ifconfig命令用于获取网卡配置与网络状态等信息,英文全称为“interface config”,语法格式为“ifconfig [参数] [网络设备]”。
使用ifconfig命令来查看本机当前的网卡配置与网络状态等信息时,其实主要查看的就是网卡名称、inet参数后面的IP地址、ether参数后面的网卡物理地址(又称为MAC地址),以及RX、TX的接收数据包与发送数据包的个数及累计流量(由于虚拟机网卡为仅主机模式所以这里没有IP地址):
2.uname命令
uname命令用于查看系统内核版本与系统架构等信息,英文全称为“unix name”,语法格式为“uname [-a]”。在使用uname命令时,一般要固定搭配上-a参数来完整地查看当前系统的内核名称、主机名、内核发行版本、节点名、压制时间、硬件名称、硬件平台、处理器类型以及操作系统名称等信息,如果要查看当前系统版本的详细信息,则需要查看redhat-release文件:
3.uptime命令
uptime命令用于查看系统的负载信息,输入该命令后按回车键执行即可。它可以显示当前系统时间、系统已运行时间、启用终端数量以及平均负载值等信息。平均负载值指的是系统在最近1分钟、5分钟、15分钟内的压力情况(下面标记的信息部分),负载值越低越好,工作中不要超过5:
4.free命令
free命令用于显示当前系统中内存的使用量信息,语法格式为“free [-h]”。为了保证Linux系统不会因资源耗尽而突然宕机,运维人员需要时刻关注内存的使用量。在使用free命令时,可以结合使用-h参数以更人性化的方式输出当前内存的实时使用量信息。下图依次为总内存、已用、未用、共享、磁盘缓存、可用量。
5.who命令
who命令用于查看当前登入主机的用户终端信息,输入该命令后按回车键执行即可。这3个简单的字母可以快速显示出所有正在登录本机的用户名称以及他们正在开启的终端信息;如果有远程用户,还会显示出来访者的IP地址。
6.last命令
last命令用于调取主机的被访记录,输入该命令后按回车键执行即可。Linux系统会将每次的登录信息都记录到日志文件中,如果哪天想翻阅了,直接执行这条命令就行:
7.ping命令
ping命令用于测试主机之间的网络连通性,语法格式为“ping [参数] 主机地址”。执行ping命令时,系统会使用ICMP向远端主机发出要求回应的信息,若连接远端主机的网络没有问题(有些服务器设置了禁ping也不会回应),远端主机会回应该信息。由此可见,ping命令可用于判断远端主机是否在线并且网络是否正常。ping命令的常见参数以及作用如图。
使用ping命令测试一台在线的主机(其IP地址为192.168.122.1),测试一台不在线的主机(其IP地址为192.168.122.10),得到的回应是这样的:
8.tracepath命令
tracepath命令用于显示数据包到达目的主机时途中经过的所有路由信息,语法格式为“tracepath [参数] 域名”。当两台主机之间无法正常ping通时,要考虑两台主机之间是否有错误的路由信息,导致数据被某一台设备错误地丢弃。这时便可以使用tracepath命令追踪数据包到达目的主机时途中的所有路由信息,以分析是哪台设备出了问题。
9.netstat命令
netstat命令用于显示如网络连接、路由表、接口状态等的网络相关信息,英文全称为“network status”,语法格式为“netstat [参数]”。
只要netstat命令使用得当,便可以查看到网络状态的方方面面信息。netstat命令的常见参数以及作用如图。
使用 netstat 命令显示网卡列表;
使用 netstat 命令显示详细的网络状况。
10.history命令
history命令用于显示执行过的命令历史,语法格式为“history [-c]”。执行history命令能显示出当前用户在本地计算机中执行过的最近1000条命令记录。如果觉得1000不够用,可以自定义/etc/profile文件中的HISTSIZE变量值。在使用history命令时,可以使用 -c 参数清空所有的命令历史记录。还可以使用“!编码数字”的方式来重复执行某一次的命令。
历史命令会被保存到用户家目录中的.bash_history 文件中。Linux 系统中以点(.)开头的文件均代表隐藏文件,这些文件大多数为系统服务文件,可以用 cat 命令查看其文件内容:
11.sosreport命令
sosreport命令用于收集系统配置及架构信息并输出诊断文档,输入该命令后按回车键执行即可。当Linux系统出现故障需要联系技术支持人员时,大多数时候都要先使用这个命令来简单收集系统的运行状态和服务配置信息,以便让技术支持人员能够远程解决一些小问题,抑或让他们能提前了解某些复杂问题。在下面的输出信息中,标记的部分是收集好的资料压缩文件以及校验码可用来分析故障:
2.5 查找定位文件命令
工作目录指的是用户当前在系统中所处的位置。由于工作目录会牵涉系统存储结构相关的知识,初期只需简单了解一下这里的操作实验即可,如果不能完全掌握也没有关系,毕竟Linux系统的知识体系太过庞大,每一位初学人员都需要经历这么一段时期。
1.pwd命令
pwd命令用于显示用户当前所处的工作目录,英文全称为“print working directory”,输入该命令后按回车键执行即可。
2.cd命令
cd命令用于切换当前的工作路径,英文全称为“change directory”,语法格式为“cd [参数] [目录]”。还可以使用“cd -”命令返回到上一次所处的目录,使用“cd..”命令进入上级目录,以及使用“cd~”命令切换到当前用户的家目录,抑或使用“cd~username”命令切换到其他用户的家目录(就像在游戏中使用了“回城”技能一样)。
3.ls命令
ls命令用于显示目录中的文件信息,英文全称为“list”,语法格式为“ls [参数] [文件名称]”。所处的工作目录不同,当前工作目录下能看到的文件肯定也不同。使用ls命令的-a参数可以看到全部文件(包括隐藏文件),使用-l参数可以查看文件的属性、大小等详细信息。将这两个参数整合之后,再执行ls命令即可查看当前目录中的所有文件并输出这些文件的属性信息;如果想要查看目录属性信息,则需要额外添加一个-d 参数。例如ls -dl /etc 目录的权限与属性信息:
4.tree命令
tree命令用于以树状图的形式列出目录内容及结构,输入该命令后按回车键执行即可。虽然ls命令可以很便捷地查看目录内有哪些文件,但无法直观地获取到目录内文件的层次结构。如Desktop下有个test文件夹,那么ls命令就只能看到最外面的目录,显然子文件看不到。tree命令则能够以树状图的形式列出目录内所有文件的结构。
5.find命令
find命令用于按照指定条件来查找文件所对应的位置,语法格式为“find [查找范围] 寻找条件”。“Linux系统中的一切都是文件”,搜索工作一般都是通过find命令来完成的,它可以使用不同的文件特性作为寻找条件(如文件名、大小、修改时间、权限等信息),一旦匹配成功则默认将信息显示到屏幕上。find命令的参数以及作用如图。
这里特别讲解-exec参数的重要作用。这个参数用于把find命令搜索到的结果交由紧随其后的命令作进一步处理。它十分类似于第3章将要讲解的管道符技术,并且由于find命令对参数有特殊要求,因此虽然exec是长格式形式,但它的前面依然只需要一个减号(-)。根据文件系统层次标准(Filesystem Hierarchy Standard)协议,Linux系统中的配置文件会保存到/etc目录中。如果要想获取该目录中所有以 host 开头的文件列表,可以执行如下命令:
在整个文件系统中找出所有归属于probe用户的文件并复制到/root/findresults目录中。该实验的重点是“-exec {} \;”参数,其中的{}表示find命令搜索出的每一个文件,并且命令的结尾必须是“\;”。完成该实验的具体命令如下:
[root@Enterprise8 ~]# find / -user probe -exec cp -a {} /root/findresults/ \;
6.locate命令
locate命令用于按照名称快速搜索文件所在位置,语法格式为“locate文件名称”。使用find命令进行全盘搜索虽然更准确,但是效率有点低。如果仅仅是想找一些常见的且又知道大概名称的文件,不如试试locate命令。在使用locate命令时,先使用updatedb命令生成一个索引库文件,这个库文件的名字是/var/lib/mlocate/mlocate.db,后续在使用locate命令搜索文件时就是在该库中进行查找操作,速度会快很多。
7.whereis命令
whereis命令用于按照名称快速搜索二进制程序(命令)、源代码以及帮助文件所对应的位置,语法格式为“whereis 命令名称”。简单来说,whereis命令也是基于updatedb命令所生成的索引库文件进行搜索,它与locate命令的区别是不关心那些相同名称的文件,仅仅是快速找到对应的命令文件及其帮助文件所在的位置。
8.which命令
which命令用于按照指定名称快速搜索二进制程序(命令)所对应的位置,语法格式为“which 命令名称”。which命令是在PATH变量所指定的路径中,按照指定条件搜索命令所在的路径。也就是说,如果我们既不关心同名文件(find与locate),也不关心命令所对应的源代码和帮助文件(whereis),仅仅是想找到命令本身所在的路径,那么这个which命令就太合适了。下面查找一下locate和whereis命令所对应的路径。
2.6 文本文件编辑命令
在Linux系统中,一切都是文件,对服务程序进行配置自然也就是编辑程序的配置文件。如果不能熟练地查阅系统或服务的配置文件,那以后工作时可就真的要尴尬了。下面有几条用于查看文本文件内容的命令。
1.cat命令
cat命令用于查看纯文本文件(内容较少的),英文全称为“concatenate”,语法格式为“cat [参数] 文件名称”。Linux系统中有多个用于查看文本内容的命令,每个命令都有自己的特点,cat这个命令也很好记,因为cat在英语中是“猫”的意思。如果在查看文本内容时还想顺便显示行号的话,可以在cat命令后面追加一个-n参数:
2.more命令
more命令用于查看纯文本文件(内容较多的),语法格式为“more [参数] 文件名称”。如果需要阅读长篇小说或者非常长的配置文件,那么“小猫咪”可就真的不适合了。因为一旦使用cat命令阅读长篇的文本内容,信息就会在屏幕上快速翻滚,最后还没有来得及看到内容就已经翻篇了。more命令会在最下面使用百分比的形式来提示您已经阅读了多少内容;还可以使用空格键或回车键向下翻页:
3.head命令
head命令用于查看纯文本文件的前N行,语法格式为“head [参数] 文件名称”。在阅读文本内容时,谁也难以保证会按照从头到尾的顺序往下看完整个文件。如果只想查看文本中前15行的内容,head命令就能派上用场了:
4.tail命令
tail命令用于查看纯文本文件的后N行或持续刷新文件的最新内容,语法格式为“tail [参数] 文件名称”。tail命令的操作方法与head命令非常相似,执行“tail -n 10 文件名称”命令看看效果:
tail 命令最强悍的功能是能够持续刷新一个文件的内容,当想要实时查看最新的日志文件时,命令格式为“tail -f 文件名称”:
5.tr命令
tr命令用于替换文本内容中的字符,英文全称为“transform”,语法格式为“tr [原始字符] [目标字符]”。我们想要快速地替换文本中的一些词汇,又或者想把整个文本内容都进行替换。尤其是需要处理大批量的内容时,进行手工替换更是不现实。这时就可以先使用cat命令读取待处理的文本,然后通过管道符(详见第3章)把这些文本内容传递给tr命令进行替换操作即可。例如,把某个文本内容中的英文全部替换为大写:
6.wc命令
wc命令用于统计指定文本文件的行数、字数或字节数,英文全称为“word counts”,语法格式为“wc [参数] 文件名称”。如果为了方便记住这个命令的作用,也可以联想到上厕所时好无聊,无聊到看完了手中的如厕读物上的行字。wc的参数以及相应的作用如图。
在 Linux 系统中,/etc/passwd 是用于保存所有用户信息的文件,要统计当前系统中有多少个用户,可以使用下面的命令来进行查询:
7.stat命令
stat命令用于查看文件的具体存储细节和时间等信息,英文全称为“status”,语法格式为“stat文件名称”。文件有一个修改时间,除了修改时间之外,Linux系统中的文件包含3种时间状态,分别是Access Time(内容最后一次被访问的时间,简称为Atime),Modify Time(内容最后一次被修改的时间,简称为Mtime)以及Change Time(文件属性最后一次被修改的时间,简称为Ctime)。下面使用state命令查看文件的这3种时间状态信息:
8.grep命令
grep命令用于按行提取文本内容,语法格式为“grep [参数] 文件名称”。grep命令是用途最广泛的文本搜索匹配工具。它虽然有很多参数,但是大多数基本上都用不到。在这里只讲grep命令两个最常用的参数:
-n参数用来显示搜索到的信息的行号;
-v参数用于反选信息(即没有包含关键词的所有信息行)。
这两个参数几乎能完成日常80%的工作需要,至于其他上百个参数,即使以后在工作期间遇到了,再使用man grep命令查询也来得及。grep命令的参数及其作用如图。
/etc/passwd 文件保存着所有的用户信息,而一旦用户的登录终端被设置成/sbin/nologin,则不再允许登录系统,因此可以使用 grep 命令查找出当前系统中不允许登录系统的所有用户的信息:
9.cut命令
cut命令用于按“列”提取文本内容,语法格式为“cut [参数] 文件名称”。一般而言,按基于“行”的方式来提取数据是比较简单的,只需要设置好要搜索的关键词即可。但是如果按“列”搜索,不仅要使用-f参数设置需要查看的列数,还需要使用-d参数来设置间隔符号。使用下述命令尝试提取出passwd文件中的用户名信息,即提取以冒号(:)为间隔符号的第一列内容:
10.diff命令
diff命令用于比较多个文件之间内容的差异,英文全称为“different”,语法格式为“diff [参数] 文件名称A 文件名称B”。在使用diff命令时,不仅可以使用--brief参数来确认两个文件是否相同,还可以使用 -c 参数来详细比较出多个文件的差异之处。这绝对是判断文件是否被篡改的有力神器。例如使用diff命令查etc/passwd和/etc/group文件的内容,然后进行比较具体不同处:
11.uniq命令
uniq命令用于去除文本中连续的重复行,英文全称为“unique”,语法格式为“uniq [参数] 文件名称”。由uniq命令的英文全称unique(独特的,唯一的),中间不能夹杂其他文本行(非相邻的默认不会去重)去除了重复的,保留的都是唯一的,自然也就是“独特的”“唯一的”了。使用uniq命令对两个文本内容进行操作,区别一目了然:
12.sort命令
sort命令用于对文本内容进行再排序,语法格式为“sort [参数] 文件名称”。有时文本中的内容顺序不正确,一行行地手动修改实在太麻烦了。此时使用sort命令就再合适不过了,它能够对文本内容进行再次排序。sort命令的参数及其作用如图。
在执行sort命令后默认会按照字母顺序、数字大小进行排序,非常方便:
与 uniq 命令不同,sort 命令是无论内容行之间是否夹杂有其他内容,只要有两个一模一样的内容行,立马就可以使用-u 参数进行去重操作:
2.7 文件目录管理命令
学习Linux命令的过程就像是在夯实地基,虽然表面上“高楼未起”,但其实大家的内功已经相当深厚了。有了上面的知识铺垫,本小节介绍Linux系统日常运维工作中最常用的命令,实现对文件的创建、修改、复制、剪切、更名与删除等操作。
1.touch命令
touch命令用于创建空白文件或设置文件的时间,语法格式为“touch [参数] 文件名称”。在创建空白的文本文件方面,touch命令相当简洁,到没有必要铺开去讲;touch linuxprobe命令可以创建出一个名为linuxprobe的空白文本文件。对touch命令来讲,有难度的操作主要是体现在设置文件内容的修改时间(Mtime)、文件权限或属性的更改时间(Ctime)与文件的访问时间(Atime)上面。touch命令的参数及其作用如图。
下面先使用 ls 命令查看一个文件的修改时间,随后修改这个文件,再查看一下文件的修改时间看是否发生了变化,如果不想让别人知道我们修改了它,那么这时就可以用 touch 命令把修改后的文件时间设置成修改之前的时间。
2.mkdir命令
mkdir命令用于创建空白的目录,英文全称为“make directory”,语法格式为“mkdir [参数] 目录名称”。除了能创建单个空白目录外,mkdir命令还可以结合-p参数来递归创建出具有嵌套层叠关系(子孙目录)的文件目录。
3.cp命令
cp命令用于复制文件或目录,英文全称为“copy”,语法格式为“cp [参数] 源文件名称 目标文件名称”。我们对文件复制操作应该不陌生,几乎每天都会使用到。在Linux系统中,复制操作具体分为3种情况:
如果目标文件是目录,则会把源文件复制到该目录中;
如果目标文件也是普通文件,则会询问是否要覆盖它;
如果目标文件不存在,则执行正常的复制操作。
复制命令基本不会出错,唯一需要记住的就是在复制目录时要加上-r参数。cp命令的参数及其作用如图。
使用 touch 命令创建一个名为 backup.log 的普通空白文件,然后将其复制为一份名为 bak.log 的文件,再使用 ls 命令查看目录中的文件。
4.mv命令
mv命令用于剪切或重命名文件,英文全称为“move”,语法格式为“mv [参数] 源文件名称 目标文件名称”。剪切操作不同于复制操作,因为它默认会把源文件删除,只保留剪切后的文件。如果在同一个目录中将某个文件剪切后还粘贴到当前目录下,其实也就是对该文件进行了重命名操作。
5.rm命令
rm命令用于删除文件或目录,英文全称为“remove”,语法格式为“rm [参数] 文件名称”。在Linux系统中删除文件时,系统会默认向您询问是否要执行删除操作,如果不想总是看到这种反复的确认信息,可在rm命令后跟上-f 参数来强制删除。另外,要想删除一个目录,需要在rm命令后面加一个-r 参数才可以,否则删除不掉。rm命令的参数及其作用如图。
下面分别删除前面创建的 bak.log 和 probe.log 文件,可以看到加与不加-f 参数的区别。
6.dd命令
dd命令用于按照指定大小和个数的数据块来复制文件或转换文件,语法格式为“dd if=参数值 of=参数值 count=参数值 bs=参数值”。dd命令是一个比较有特色的命令,在Linux系统中有一个名为/dev/zero的设备文件,因为这个文件不会占用系统存储空间,但却可以提供无穷无尽的数据,因此常常使用它作为dd命令的输入文件,来生成一个指定大小的文件。dd命令的参数及其作用如图。
用 dd 命令从/dev/zero 设备文件中取出一个大小为 60MB 的数据块,然后保存成名为 560_file 的文件。在理解了这个命令后,以后就能随意创建任意大小的文件了。如果想把光驱设备中的光盘制作成 iso格式的镜像文件,在 Windows 系统中需要借助于第三方软件才能做到,但在 Linux 系统中强大的 dd 命令就可以压制出光盘镜像文件,将它变成一个可立即使用的 iso 镜像。
7.file命令
file命令用于查看文件的类型,语法格式为“file 文件名称”。在Linux系统中,由于文本、目录、设备等所有这些一切都统称为文件,但是它们又不像Windows系统那样都有后缀,因此很难通过文件名一眼判断出具体的文件类型,这时就需要使用file命令来查看。
8.tar命令
tar命令用于对文件进行打包压缩或解压,语法格式为“tar 参数 文件名称”。在网络传输文件时大多时候是压缩格式的文件,原因是压缩文件的体积小,在网速相同的情况下,体积越小则传输时间越短。在Linux系统中,主要使用的是.tar、.tar.gz或.tar.bz2格式,不用担心格式太多而记不住,其实这些格式大部分都是由tar命令生成的。tar命令的参数及其作用如图。
用户是根据文件的后缀来决定应使用何种格式的参数进行解压。在执行某些压缩或解压操作时,可能需要花费数个小时,如果屏幕一直没有输出,您一方面不好判断打包的进度情况,另一方面也会怀疑电脑死机了,因此非常推荐使用-v 参数向用户不断显示压缩或解压的过程。-f 参数特别重要,它必须放到参数的最后一位,代表要压缩或解压的软件包名称。下面我们逐个演示打包压缩与解压的操作,先使用 tar 命令把/etc 目录通过 gzip格式进行打包压缩,并把文件命名为 etc.tar.gz。
接着将打包后的压缩包文件指定解压到某目录中(任意自己规划的目录都可以)。
标签:文件,Linux,系统,RHEL8,命令,参数,常用命令,格式 From: https://blog.51cto.com/u_9134612/6223757