前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >必须掌握的Linux命令

必须掌握的Linux命令

作者头像
张旭博客
发布2022-12-27 15:46:42
1.4K0
发布2022-12-27 15:46:42
举报
文章被收录于专栏:zxbkzxbk

Shell简介

一台完整的计算机是由运算器、控制器、存储器、输入/输出等多种硬件设备共同组成的,而能让各种硬件设备各司其职且又能协同运行的东西就是系统内核。Linux 系统的内核负责完成对硬件资源的分配、调度等管理任务,对系统的正常运行起着十分重要的作用。

与修改 Windows 系统中的注册表类似,直接改动内核参数的难度比较大,而且一旦“手 滑”还有可能导致系统直接崩溃。因此不建议同学们直接去编辑内核中的参数,而是用基于系统调用接口开发出来的程序或服务来管理计算机,以满足日常的工作需要。

人类是无法直接控制硬件的(想象一个人捧着块硬盘自言自语的滑稽场景)。硬件设备由系统内核直接管理,但由于内核的复杂性太高,在访问时存在较大的风险,

因此用户不能直接访问内核。虽然通过调用系统提供的 API(应用程序编程接口)就能实现某个功能,但哪怕实现“将一条信息通过互联网传输给别人”这样简单的任务,都要手动调用几十次 API 接口,使用起来太不切实际。而最外层的服务程序则是最贴近于用户端的,这些服务程序是集成了大量 API 接口的完整软件,微信、QQ 就是这样的服务程序。

如果把整台电脑比喻成人类社会,那么服务程序就是一名翻译官,负责将用户提出的需求转换成硬件能够接收的指令代码,然后再将处理结果反馈成用户能够读懂的内容格式。这样一来一回,用户就能使用硬件资源了。看到被一层层“包裹”起来的硬件设备,大家有没有感觉像一只蜗牛的壳呢?英文中的壳叫作 Shell,我们在行业中也将用户终端程序称之为 Shell,方便好记。

Shell 就是终端程序的统称,它充当了人与内核(硬件)之间的翻译官,用户把一些命令“告诉”终端程序,它就会调用相应的程序服务去完成某些工作。现在包括红帽系统在内的许多主流 Linux 系统默认使用的终端是 Bash(Bourne-Again SHell)解释器,这个 Bash 解释器

主要有以下 4 项优势:

➢ 通过上下方向键来调取执行过的 Linux 命令;

➢ 命令或参数仅需输入前几位就可以用 Tab 键补全;

➢ 具有强大的批处理脚本;

➢ 具有实用的环境变量功能。

命令的快捷键

常见的执行 Linux 命令的格式是:命令名称 【命令参数】 【命令对象】

在命令行终端中输入 man man 命令来查看 man 命令自身的帮助信息

按键

作用

空格键

向下翻一页

PaGe down

向下翻一页

PaGe up

向上翻一页

home

直接前往首页

end

直接前往尾页

/

从上至下搜索某个关键词,如“/linux”

?

从下至上搜索某个关键词,如“?linux

n

定位到下一个搜索到的关键词

N

定位到上一个搜索到的关键词

q

退出帮助文档

man 命令中帮助信息的结构及其代表意义

结构名称

代表意义

NAME

命令的名称

SYNOPSIS

参数的大致使用方法

DESCRIPTION

介绍说明

EXAMPLES

演示(附带简单说明)

OVERVIEW

概述

DEFAULTS

默认的功能

OPTIONS

具体的可用选项(带介绍)

ENVIRONMENT

环境变量

FILES

用到的文件

SEE ALSO

相关的资料

HISTORY

维护历史与联系方式

额外的四个键组合小技巧

TAB:在 Bash 解释器的快捷键中,Tab 键绝对是使用频率最高的,它能够实现对命令、参数或文件的内容补全。例如,如果想执行 reboot 重启命令,但一时想不起来该命令的完整拼写,则可以这样输入:

Ctrl+C:当同时按下键盘上的 Ctrl 和字母 C 的时候,意味着终止当前进程的运行。

Ctrl+D:当同时按下键盘上的 Ctrl 和字母 D 的时候,表示键盘输入结束。

Ctrl+l:当同时按下键盘上行的 Ctrl 和字母 l 的时候,会清空当前终端中已有的内容。

系统工作命令

1. echo 命令

echo 命令用于在终端设备上输出字符串或变量提取后的值,语法格式为“echo [字符串] [$变量]”

执行“echo 字符串” 或“echo 变量”就行,其中符号的意思是提取变量的实际值,以便后续的输出操作。

例如,把指定字符串“www.zxbke.cn”输出到终端屏幕的命令为:

代码语言:javascript
复制
[root@servera ~]# echo www.zxbke.cn
www.zxbke.cn

下面使用“$变量”的方式提取出变量 SHELL 的值,并将其输出到屏幕上:

代码语言:javascript
复制
[root@servera ~]# echo $SHELL
/bin/bash

2. date 命令

date 命令用于显示或设置系统的时间与日期,语法格式为“date [+指定的格式]”

用户只需在强大的 date 命令后输入以“+”号开头的参数,即可按照指定格式来输出系统的时间或日期,这样在日常工作时便可以把备份数据的命令与指定格式输出的时间信息结合到一起。

例如,把打包后的文件自动按照“年-月-日”的格式打包成“backup-2020-9-1.tar.gz”, 用户只需要看一眼文件名称就能大致了解到每个文件的备份时间了。date 命令中常见的参数格式及其作用表。

参数

作用

%S

秒(00~59)

%M

分钟(00~59)

%H

小时(00~23)

%d

本月中的第几天

%m

月份(1~12)

%Y

完整年份(例如,2020)

%I

小时(00~12)

按照默认格式查看当前系统时间的 date 命令如下所示:

代码语言:javascript
复制
[root@servera ~]# date
Tue Sep 20 23:56:30 EDT 2022

按照“年-月-日 小时:分钟:秒”的格式查看当前系统时间的date 命令如下所示:

代码语言:javascript
复制
[root@servera ~]# date '+%Y-%m-%d  %H:%M:%S'
2022-09-20  23:57:38

将系统的当前时间设置为 2020 年 02 月 02 日 12 点 12 分的 date 命令如下所示:

代码语言:javascript
复制
[root@servera ~]# date -s '20200202 12:12:00'
Sun Feb  2 12:12:00 EST 2020
[root@servera ~]# date
Sun Feb  2 12:12:48 EST 2020

date 命令中的参数%j 可用来查看今天是当年中的第几天。这个参数能够很好地区分备份时间的早晚,即数字越大,越靠近当前时间。该参数的使用方式以及显示结果如下所示:

代码语言:javascript
复制
[root@servera ~]# date +'%j'
264

3. timedatectl 命令

timedatectl 命令用于设置系统的时间和时区,语法格式为“timedatectl [参数]”

参数

作用

status

显示状态信息

list-timezones

列出已知时区

set-time

设置系统时间

set-timezone

设置生效时区

查看系统时间与时区

NTP service:NTP(网络时间协议{Network Time Protocol})启用

System clock synchronized:NTP同步情况

手动开启或关闭ntp服务

代码语言:javascript
复制
[root@servera ~]# timedatectl set-ntp false 
[root@servera ~]# timedatectl set-ntp true
代码语言:javascript
复制
[root@servera ~]# timedatectl status 
               Local time: Wed 2022-09-21 13:47:38 EDT
           Universal time: Wed 2022-09-21 17:47:38 UTC
                 RTC time: Wed 2022-09-21 05:57:46
                Time zone: America/New_York (EDT, -0400)
System clock synchronized: no
              NTP service: active
          RTC in local TZ: no

如果您查到的时区不是上海(Asia/Shanghai),可以手动设置时区

代码语言:javascript
复制
[root@servera ~]# timedatectl set-timezone Asia/Shanghai
[root@servera ~]# timedatectl status 
               Local time: Thu 2022-09-22 01:50:32 CST
           Universal time: Wed 2022-09-21 17:50:32 UTC
                 RTC time: Wed 2022-09-21 06:00:55
                Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: no
              NTP service: active
          RTC in local TZ: no

如果时间不正确,可以手动修改时间

代码语言:javascript
复制
[root@servera ~]# timedatectl set-time 2022-9-21
[root@servera ~]# timedatectl set-time 9:30

4. reboot 命令

reboot 命令用于重启系统,输入该命令后按回车键执行即可。

由于重启计算机这种操作会涉及硬件资源的管理权限,因此最好是以 root 管理员的身份来重启,普通用户在执行该命令时可能会被拒绝。reboot 的命令如下:

5. poweroff 命令

poweroff 命令用于关闭系统,输入该命令后按回车键执行即可。

与上面相同,该命令也会涉及硬件资源的管理权限,因此最好还是以 root 管理员的身份来关闭电脑。

6. wget 命令

wget 命令用于在终端命令行中下载网络文件,英文全称为“web get”,语法格式为“wget [参数] 网址”。

借助于 wget 命令,可以无须打开浏览器,直接在命令行界面中就能下载文件。

参数

作用

-b

后台下载模式

-P

下载到指定目录

-t

最大尝试次数

-c

断点续传

-p

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

-r

递归下载

尝试使用 wget 命令从 http://www.zxbke.cn 下载 robots.txt文件。执行该命令后的下载效果如下:

代码语言:javascript
复制
[root@servera ~]# wget http://www.zxbke.cn/robots.txt
--2022-09-21 14:19:03--  http://www.zxbke.cn/robots.txt
Resolving www.zxbke.cn (www.zxbke.cn)... 148.66.22.254
Connecting to www.zxbke.cn (www.zxbke.cn)|148.66.22.254|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 162 [text/plain]
Saving to: ‘robots.txt’
robots.txt                          100%[===================================================================>]     162  --.-KB/s    in 0s      
2022-09-21 14:19:04 (44.5 MB/s) - ‘robots.txt’ saved [162/162]

使用 wget 命令递归下载 www.zxbke.cn 网站内的所有页面数据以及文件,下载完后会自动保存到当前路径下一个名为 www.zxbke.cn 的目录中。该命令的执行结果如下:

代码语言:javascript
复制
[root@servera ~]# wget -r -p  http://www.zxbke.cn
......省略下载过程

7. ps 命令

ps 命令用于查看系统中的进程状态,英文全称为“processes”,语法格式为“ps [参 数]”。

通常会将 ps 命令与第 3 章的管道符技术搭配使用,用来抓取与某个指定服务进程相对应的 PID 号码。ps 命令的常见参数以及作用如表所示

参数

作用

-a

显示所有进程

-u

用户以及其他详细信息

-x

显示没有控制终端的进程

Linux 系统中时刻运行着许多进程,如果能够合理地管理它们,则可以优化系统的性能。

在 Linux 系统中有 5 种常见的进程状态,分别为运行、中断、不可中断、僵死与停止,其各自含义如下所示。

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

S(中断):进程处于休眠中,当某个条件形成后或者接收到信号时,则脱离该状态。

D(不可中断):进程不响应系统异步信号,即便用 kill 命令也不能将其中断。

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

T(停止):进程收到停止信号后停止运行。

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

当执行 ps aux 命令后通常会看到如表所示的进程状态,只是列举了部分输出值。

代码语言:javascript
复制
[root@servera www.zxbke.cn]# ps aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          2  0.0  0.0      0     0 ?        S    11:41   0:00 [kthreadd]
root          3  0.0  0.0      0     0 ?        I<   11:41   0:00 [rcu_gp]
root          4  0.0  0.0      0     0 ?        I<   11:41   0:00 [rcu_par_gp]

USER

PID

%CPU

%MEM

VSZ

RSS

TTY

STAT

START

TIME

COMMAND

进程的所有者

进程的ID号

CPU占用率

内存占用率

虚拟内存使用量(KB)

占用的固定内存量(KB)

所在终端

进程状态

被启动的时间

实际使用CPU时间

命令名称与参数

root

1

0.0

0.3

179416

14196

Ss

11:41

0.03

......

8. pstree 命令

pstree 命令用于以树状图的形式展示进程之间的关系,输入该命令后按回车键执行即可。

执行 ps 命令后,产生的信息量太大又没有规律,很难让人再想看第二眼。如果想让进程以树状图的形式,有层次地展示出进程之间的关系,则可以使用 pstree命令:

代码语言:javascript
复制
[root@servera ~]# pstree
systemd─┬─ModemManager───2*[{ModemManager}]
        ├─NetworkManager───2*[{NetworkManager}]
        ├─VGAuthService
        ├─accounts-daemon───2*[{accounts-daemon}]
        ├─atd
        ├─auditd─┬─sedispatch
        ......省略

9. top 命令

top 命令用于动态地监视进程活动及系统负载等信息,输入该命令后按回车键执行即可。

完全可以将它看作是 Linux 中“强化版的 Windows 任务管理器”。top是相当好用的性能分析工具。

top 命令执行结果的前 5 行为系统整体的统计信息,其所代表的含义如下。

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

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

第 3 行:用户占用资源百分比、系统内核占用资源百分比、改变过优先级的进程资源百分比、空闲的资源百分比等。其中数据均为 CPU 数据并以百分比格式显示,例如“99.7 id”意味着有 99.7%的 CPU 处理器资源处于空闲。

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

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

10. nice 命令

nice 命令用于调整进程的优先级,语法格式为“nice 优先级数字 服务名称”

在 top 命令输出的结果中,PR 和 NI 值代表的是进程的优先级,数字越低(取值范围是-20~19),优先级越高。在日常的生产工作中,可以将一些不重要进程的优先级调低,让紧迫的服务更多地利用 CPU 和内存资源,以达到合理分配系统资源的目的。例如将 bash 服务的优先级调整到最高:

代码语言:javascript
复制
[root@servera ~]# nice -n -20 bash

11. pidof 命令

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

每个进程的进程号码值(PID)是唯一的,可以用于区分不同的进程。例如,执行如下命令来查询本机上 sshd 服务程序的 PID:

代码语言:javascript
复制
[root@servera ~]# pidof sshd
5491 5485 5478

12. kill 命令

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

接下来,使用 kill 命令把上面用 pidof 命令查询到的 PID 所代表的进程终止掉,其命令如下所示。这种操作的效果等同于强制停止 sshd 服务。

但有时系统会提示进程无法被终止,此时可以加参数 -9 ,表示最高级别地强制杀死进程:

代码语言:javascript
复制
[root@servera ~]# pidof sshd
5606 5593 5586
[root@servera ~]# kill -9 5593

13. killall 命令

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

使用 killall 命令来批量结束某个服务程序带有的全部进程。

代码语言:javascript
复制
[root@servera ~]# pidof sshd
5606 5593 5586
[root@servera ~]# killall sshd

如果有些命令在执行时不断地在屏幕上输出信息,影响到后续命令的输入,则可以在执行命令时在末尾添加一个

&符号,这样命令将进入系统后台来执行。

系统检测命令

1. ifconfig 命令

ifconfig 命令用于获取网卡配置与网络状态等信息,语法格式为“ifconfig [参数] [网络设备]”

主要查看的就是网卡名称、inet 参数后面的 IP 地址、ether 参数后面的网卡物理地址(又称为 MAC 地址),以及 RX、TX 的接收数据包与发送数据包的个数及累计流量。

代码语言:javascript
复制
[root@servera ~]# ifconfig     #获取全部网卡配置
[root@servera ~]# ifconfig ens160   #获取ens160网卡的配置

2. uname 命令

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

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

代码语言:javascript
复制
[root@servera ~]# uname -a
Linux servera.lib.example.com 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 文件,其命令以及相应的结果如下

代码语言:javascript
复制
[root@servera ~]# cat /etc/redhat-release 
Red Hat Enterprise Linux release 8.0 (Ootpa)

3. uptime 命令

uptime 命令用于查看系统的负载信息,输入该命令后按回车键执行即可。

uptime 命令可以显示当前系统时间、系统已运行时间、启用终端数量以及平均负载值等信息。平均负载值指的是系统在最近 1 分钟、5 分钟、15 分钟内的压力情况(下面 load 信息部分),负载值越低越好:

代码语言:javascript
复制
[root@servera ~]# uptime
 15:13:24 up  3:31,  2 users,  load average: 0.00, 0.00, 0.00

建议负载值保持在 1 左右,在生产环境中不要超过 5 就好。

4. free 命令

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

为了保证 Linux 系统不会因资源耗尽而突然宕机,运维人员需要时刻关注内存的使用量。

在使用 free 命令时,可以结合使用 -h 参数以更人性化的方式输出当前内存的实时使用量信息。

代码语言:javascript
复制
[root@servera ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:          3.8Gi       1.2Gi       1.9Gi        71Mi       689Mi       2.3Gi
Swap:         2.0Gi          0B       2.0Gi

内存量

已用量

空闲量

进程功效的内存量

缓存的内存量

可用量

Total

used

free

shared

buff/cache

available

Mem:

3.8Gi

1.2Gi

1.9Gi

71Mi

689Mi

2.3Gi

Swap:

2.0Gi

0B

2.0Gi

如果不使用-h(易读模式)查看内存使用量情况,则默认以 KB 为单位。这样一来,服务器如果有几百 GB 的内存,则换算下来就会是一大长串的数字,真不利于阅读

5. who 命令

who 命令用于查看当前登入主机的用户终端信息,输入该命令后按回车键执行即可。

这 3 个简单的字母可以快速显示出所有正在登录本机的用户名称以及他们正在开启的终端信息;如果有远程用户,还会显示出来访者的 IP 地址。

代码语言:javascript
复制
root     tty2         2022-09-21 11:32 (tty2)
root     pts/1        2022-09-21 15:03 (192.168.8.2)

​ 登录用户 终端设备 登录到系统的时间

6. last 命令

last 命令用于调取主机的被访记录,输入该命令后按回车键执行即可。

Linux 系统会将每次的登录信息都记录到日志文件中,如果哪天想翻阅了,直接执行这条命令就行:

代码语言:javascript
复制
[root@servera ~]# last
root     pts/1        192.168.8.2      Wed Sep 21 15:03   still logged in
root     pts/1        192.168.8.2      Wed Sep 21 15:00 - 15:02  (00:02)
root     pts/1        192.168.8.2      Wed Sep 21 14:57 - 14:59  (00:01)
root     pts/0        192.168.8.2      Wed Sep 21 14:55 - 14:56  (00:00)
root     pts/0        192.168.8.2      Wed Sep 21 14:55 - 14:55  (00:00)
root     pts/1        192.168.8.2      Wed Sep 21 14:52 - 14:52  (00:00)
......省略

7. ping 命令

ping 命令用于测试主机之间的网络连通性,语法格式为“ping [参数] 主机地址”

执行 ping 命令时,系统会使用 ICMP 向远端主机发出要求回应的信息,若连接远端主机的网络没有问题,远端

主机会回应该信息。由此可见,ping 命令可用于判断远端主机是否在线并且网络是否正常。

参数

作用

-c (小写c)

总共发送次数

-l (小写l)

指定网卡名称

-I (大写i)

每次间隔时间(秒)

-W (大写w)

最长等待时间(秒)

用 ping 命令测试一台在线的主机(其 IP 地址为 192.168.10.10),得到的回应是这样的:

代码语言:javascript
复制
[root@servera ~]# ping -c 5 192.168.8.1
PING 192.168.8.1 (192.168.8.1) 56(84) bytes of data.
64 bytes from 192.168.8.1: icmp_seq=1 ttl=128 time=0.163 ms
64 bytes from 192.168.8.1: icmp_seq=2 ttl=128 time=0.139 ms

8. tracepath 命令

tracepath 命令用于显示数据包到达目的主机时途中经过的所有路由信息,语法格式为“tracepath [参数] 域名”

当两台主机之间无法正常 ping 通时,要考虑两台主机之间是否有错误的路由信息,导致数据被某一台设备错误地丢弃。这时便可以使用 tracepath 命令追踪数据包到达目的主机时途中的所有路由信息,以分析是哪台设备出了问题。下面的情况就很清晰了:

代码语言:javascript
复制
[root@servera ~]# tracepath www.baidu.com

9. netstat 命令

netstat 命令用于显示如网络连接、路由表、接口状态等的网络相关信息,语法格式为“netstat [参数]”

参数

作用

-a

显示所有连接中的Socket

-p

显示正在使用的Socket信息

-t

显示TCP协议的连接信息

-u

显示 UDP 协议的连接状态

-n

使用 IP 地址,不使用域名

-l

仅列出正在监听的服务状态

-i

现在网卡列表信息

-r

显示路由表信息

使用 netstat 命令显示详细的网络状况

代码语言:javascript
复制
[root@servera ~]# netstat -a

使用 netstat 命令显示网卡列表

代码语言:javascript
复制
[root@servera ~]# netstat -i
Kernel Interface table
Iface             MTU    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
ens160           1500    24956      0      0 0         12050      0      0      0 BMRU
lo              65536        5      0      0 0             5      0      0      0 LRU
virbr0           1500        0      0      0 0             0      0      0      0 BMU

10. history 命令

history 命令用于显示执行过的命令历史,语法格式为“history”。

执行 history 命令能显示出当前用户在本地计算机中执行过的最近 1000 条命令记录。如果觉得 1000 不够用,可以自定义 /etc/profile 文件中的 HISTSIZE 变量值。

在使用 history 命令时,可以使用 -c 参数清空所有的命令历史记录。还可以使用“ !编码数字 ”的方式来重复执行某一次的命令。

代码语言:javascript
复制
[root@servera ~]# history 
    1  cat ~/.bash_history 
    2  history 
    ......省略

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

代码语言:javascript
复制
[root@linuxprobe~]# cat ~/.bash_history

要清空当前用户在本机上执行的 Linux 命令历史记录信息,可执行如下命令:

代码语言:javascript
复制
[root@servera ~]# history -c

11. sosreport 命令

sosreport 命令用于收集系统配置及架构信息并输出诊断文档,输入该命令后按回车键执行即可。

系统出现故障需要联系技术支持人员时,大多数时候都要先使用这个命令来简单收集系统的运行状态和服务配置信息,以便让技术支持人员能够远程解决一些小问题,抑或让他们能提前了解某些复杂问题。在下面的输出信息中,加粗的部分是收集好的资料压缩文件以及校验码,将其发送给技术支持人员即可:

sosreport 命令有点像是远程问诊。假如我们今天有点咳嗽发烧不舒服,可以先从网上搜索相关症状的病因,如果仅仅是感冒的话那就多喝水,这就免去了到医院挂号看病的车马劳顿;而如果怀疑出了大毛病,再请专业人员进行处理也不迟。

代码语言:javascript
复制
[root@servera ~]# sosreport
回车确认
回车确认
----------------------资料压缩文件路径-------------------
Your sosreport has been generated and saved in:
  /var/tmp/sosreport-servera-2022-09-21-njnuhdp.tar.xz
----------------------资料校验码-------------------
The checksum is: 11c733fee8be5798e18be879f44fa378

Please send this file to your support representative.

定位文件命令

1. pwd 命令

pwd 命令用于显示用户当前所处的工作目录,输入该命令后按回车键执行即可。

代码语言:javascript
复制
[root@servera ~]# pwd
/root

2. cd 命令

cd 命令用于切换当前的工作路径,英文全称为“change directory”,语法格式为“cd [参数] [目录]”。

还可以使用“cd -”命令返回到上一次所处的目录,使用“cd..”命令进入上级目录,以及使用“cd~”命令切换到当前用户的家目录。

随着切换目录的操作,命令提示符也在发生变化,例如[root@linuxprobe etc]#就是在告诉我们当前处于/etc 中。

3. ls 命令

ls 命令用于显示目录中的文件信息,英文全称为“list”,语法格式为“ls [参数] [文件名称]”。

使用 ls 命令的-a 参数可以看到全部文件(包括隐藏文件),使用-l 参数可以查看文件的属性、大小等详细信息。将这两个参数整合之后,再执行 ls 命令即可查看当前目录中的所有文件并输出这些文件的属性信息:

代码语言:javascript
复制
[root@servera ~]# ls -al
total 56
dr-xr-x---. 17 root root 4096 Sep 21 15:47 .
dr-xr-xr-x. 17 root root  245 Sep 21 11:31 ..
-rw-------.  1 root root 1387 Sep 20 03:05 anaconda-ks.cfg
-rw-------.  1 root root 3110 Sep 21 15:47 .bash_history
-rw-r--r--.  1 root root   18 Aug 13  2018 .bash_logout
-rw-r--r--.  1 root root  176 Aug 13  2018 .bash_profile
-rw-r--r--.  1 root root  176 Aug 13  2018 .bashrc
......省略

如果想要查看目录属性信息,则需要额外添加一个 -d 参数。例如,可使用如下命令查看/etc 目录的权限与属性信息:

代码语言:javascript
复制
[root@servera etc]# ls -ld /etc
drwxr-xr-x. 135 root root 8192 Sep 22  2022 /etc

4. tree 命令

tree 命令用于以树状图的形式列出目录内容及结构,输入该命令后按回车键执行即可。

ls 命令可以很便捷地查看目录内有哪些文件,但无法直观地获取到目录内文件的层次结构。比如,假如目录 A 中有个 B,B 中又有个 C,那么 ls 命令就只能看到最外面的 A 目录,显然有些时候这不太够用。tree 命令则能够以树状图的形式列出目录内所有文件的结构。

代码语言:javascript
复制
[root@servera ~]# tree
.
├── anaconda-ks.cfg
├── Desktop
├── Documents
├── Templates
├── Videos
└── www.zxbke.cn
    ├── about.html
    ├── about.html?scroll=comment-115
    ├── about.html?scroll=comment-119
    ├── action
    │   ├── xmlrpc

5. find 命令

find 命令用于按照指定条件来查找文件所对应的位置,语法格式为“ find [查找范围] [查找条件] ”。

在 Linux 系统中,搜索工作一般都是通过 find 命令来完成的,它可以使用不同的文件特性作为寻找条件(如文件名、大小、修改时间、权限等信息),一旦匹配成功则默认将信息显示到屏幕上。

参数

作用

-name

匹配名称

-size

匹配文件的大小(+50KB为查找超过50KB的文件,而-50KB为查找小于50KB

-perm

的文件)匹配权限

-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

匹配文件类型(后面的字母依次表示块设备、目录、字符设备、管道、链接文件、文本文件)

-prune

忽略某个目录

-exec…… {}\;

后面可跟用于进一步处理搜索结果的命令

要重点讲解 -exec 参数的重要作用。这个参数用于把 find 命令搜索到的结果交由紧随其后的命令作进一步处理。它十分类似于第 3 章将要讲解的管道符技术,并且由于 find 命令对参数有特殊要求,因此虽然 exec 是长格式形式,但它的前面依然只需要一个减号(-)。

根据文件系统层次标准(Filesystem Hierarchy Standard)协议,Linux 系统中的配置文件会保存到/etc 目录中(详见第 6 章)。

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

代码语言:javascript
复制
[root@servera ~]# find /etc/ -name 'host*'
/etc/host.conf
/etc/hosts
/etc/hosts.allow
/etc/hosts.deny
/etc/avahi/hosts
/etc/hostname

找出所有归属于 zhangxu 用户的文件并复制到 /root/findresults 目录中

是“-exec {} \;”参数,其中的{}表示 find 命令搜索出的每一个文件,并且命令的结尾必须是“\;”。

代码语言:javascript
复制
[root@servera find1]# find / -user  zhangxu   #找出属主为zhangxu用户的文件
[root@servera find1]# find / -user  zhangxu -exec cp -a {} /root/findzhangxu/ \;

6. locate 命令

locate 命令用于按照名称快速搜索文件所对应的位置,语法格式为“ locate 文件名称 ”。

使用 find 命令进行全盘搜索虽然更准确,但是效率有点低。如果仅仅是想找一些常见的且又知道大概名称的文件,不如试试 locate 命令。

在使用 locate 命令时,先使用 updateddb 命令生成一个索引库文件,这个库文件的名字是/var/lib/mlocate/mlocate.db,后续在使用 locate命令搜索文件时就是在该库中进行查找操作,速度会快很多。

第一次使用 locate 命令之前,记得先执行updatedb 命令来生成索引数据库,然后再进行查找:

代码语言:javascript
复制
[root@servera ~]# updatedb
[root@servera ~]# ls -l /var/lib/mlocate/mlocate.db 
-rw-r-----. 1 root slocate 2944904 Sep 21 16:29 /var/lib/mlocate/mlocate.db

[root@servera ~]# locate sr0   #查找sr0光盘所在位置
/dev/sr0
[root@servera ~]# locate ens160   #查找 ens160网卡配置文件所在位置
/etc/sysconfig/network-scripts/ifcfg-ens160

7. whereis 命令

whereis 命令用于按照名称快速搜索二进制程序(命令)、源代码以及帮助文件所对应的位置,语法格式为“ whereis 【命令名称】 ”。

简单来说,whereis 命令也是基于 updatedb 命令所生成的索引库文件进行搜索,它与 locate命令的区别是不关心那些相同名称的文件,仅仅是快速找到对应的命令文件及其帮助文件所在的位置。

下面使用 whereis 命令分别查找出 ls 和 pwd 命令所在的位置:

代码语言:javascript
复制
[root@servera ~]# whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz
[root@servera ~]# whereis pwd
pwd: /usr/bin/pwd /usr/share/man/man1/pwd.1.gz /usr/share/man/man1p/pwd.1p.gz

8. which 命令

which 命令用于按照指定名称快速搜索二进制程序(命令)所对应的位置,语法格式为“ which 命令名称 ”。

which 命令是在 PATH 变量所指定的路径中,按照指定条件搜索命令所在的路径。也就是说,如果既不关心同名文件(find 与 locate),也不关心命令所对应的源代码和帮助文件(whereis),仅仅是想找到命令本身所在的路径,那么这个 which 命令就太合适了。

查找 locate 和 whereis 命令所对应的路径:

代码语言:javascript
复制
[root@servera ~]# which whereis 
/usr/bin/whereis
[root@servera ~]# which locate
/usr/bin/locate

文本文件编辑命令

1. cat 命令

cat 命令用于查看纯文本文件(内容较少的),英文全称为“concatenate”,语法格式为“ cat [参数] 文件名称 ”。

如果在查看文本内容时还想顺便显示行号的话,不妨在 cat 命令后面追加一个 -n 参数

代码语言:javascript
复制
[root@servera ~]# cat -n /etc/passwd
     1    root:x:0:0:root:/root:/bin/bash
     2    bin:x:1:1:bin:/bin:/sbin/nologin
     3    daemon:x:2:2:daemon:/sbin:/sbin/nologin
     4    adm:x:3:4:adm:/var/adm:/sbin/nologin
     5    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

2. more 命令

more 命令用于查看纯文本文件(内容较多的),语法格式为“ more [参数] 【文件名称】 ”。

对于长篇的文本内容,推荐使用 more 命令来查看。more命令会在最下面使用百分比的形式来提示您已经阅读了多少内容;还可以使用空格键或回车键向下翻页:

3. head 命令

head 命令用于查看纯文本文件的前 N 行,语法格式为“ head [参数] 【文件名称】 ”。

代码语言:javascript
复制
[root@servera log]# head -n /var/log/messages 

4. tail 命令

tail 命令用于查看纯文本文件的后 N 行或持续刷新文件的最新内容,语法格式为“ tail [参数] 文件名称 ”。

比如需要查看文本内容的最后 10 行,这时就需要用到tail 命令了。

代码语言:javascript
复制
[root@servera log]# tail -n 10 /var/log/messages

tail 命令最强悍的功能是能够持续刷新一个文件的内容,当想要实时查看最新的日志文件时,这特别有用,此时的命令格式为“ tail -f 文件名称 ”:

代码语言:javascript
复制
[root@servera log]# tail -f /var/log/messages

5. tr 命令

tr 命令用于替换文本内容中的字符,英文全称为“translate”,语法格式为“ tr [原始字符] [目标字符] ”。

代码语言:javascript
复制
[root@servera ~]# cat test.txt 
a b
a c
a e
a f
[root@servera ~]# cat test.txt | tr a A
A b
A c
A e
A f
[root@servera ~]# cat test.txt | tr [a-z] [A-Z]
A B
A C
A E
A F

6. wc 命令

wc 命令用于统计指定文本文件的行数、字数或字节数,英文全称为“word counts”,语法格式为“ wc [参数] 文件名称 ”。

参数

作用

-l

只显示行数

-w

只显示单词数

-c

只显示字节数

在 Linux 系统中,/etc/passwd 是用于保存所有用户信息的文件,要统计当前系统中有多少个用户,可以使用下面的命令来进行查询,是不是很神奇:

代码语言:javascript
复制
[root@servera ~]# wc  /etc/passwd   #不加参数显示 行数 单词数 字节数
  45  103 2490 /etc/passwd
[root@servera ~]# wc -l /etc/passwd  #-l 只显示行数
45 /etc/passwd
[root@servera ~]# wc -w /etc/passwd  #-w 只显示单词数
103 /etc/passwd
[root@servera ~]# wc -c /etc/passwd  #-c 只显示字节数
2490 /etc/passwd

7. stat 命令

stat 命令用于查看文件的具体存储细节和时间等信息,英文全称为“status”,语法格式为“ stat 文件名称 ”。

文件有一个修改时间。其实,除了修改时间之外,Linux 系统中的文件包含 3 种时间状态,分别是

  • Access Time(内容最后一次被访问的时间,简称为 Atime)
  • Modify Time(内容最后一次被修改的时间,简称为 Mtime)
  • Change Time(文件属性最后一次被修改的时间,简称为 Ctime)
代码语言:javascript
复制
[root@servera ~]# stat /etc/passwd
  File: /etc/passwd
  Size: 2490          Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 17837839    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: system_u:object_r:passwd_file_t:s0
Access: 2022-09-21 10:22:15.026403690 +0800
Modify: 2022-09-20 03:04:29.504976117 +0800
Change: 2022-09-20 03:04:29.510976117 +0800
 Birth: -

8. grep 命令

grep 命令用于按行提取文本内容,语法格式为“ grep [参数] 文件名称 ”。

grep 命令是用途最广泛的文本搜索匹配工具。它虽然有很多参数,但是大多数基本上都用不到

grep 命令两个最常用的参数:

-n 参数用来显示搜索到的信息的行号;

-v 参数用于反选信息(即没有包含关键词的所有信息行)。

这两个参数几乎能完成日后 80%的工作需要,至于其他上百个参数,即使以后在工作期间遇到了,再使用 man grep 命令查询也来得及。

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

代码语言:javascript
复制
[root@servera ~]# 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
......省略

9. cut 命令

cut 命令用于按 “ ” 提取文本内容,语法格式为“ cut [参数] 文件名称 ”。

系统文件在保存用户数据信息时,每一项值之间是采用冒号来间隔的,先查看一下:

代码语言:javascript
复制
[root@servera ~]# head -n 2 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin

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

试提取出 passwd 文件中的用户名信息,即提取以冒号( :)为间隔符号的第一列内容:

代码语言:javascript
复制
[root@servera ~]# cut -d : -f 1 /etc/passwd
root
bin
daemon
adm
lp
sync
......省略

10. diff 命令

diff 命令用于比较多个文件之间内容的差异,英文全称为“different”

语法格式为“ diff [参数] 文件名称A 文件名称B

在使用 diff 命令时,不仅可以使用 --brief 参数来确认两个文件是否相同,还可以使用 -c 参数来详细比较出多个文件的差异之处。这绝对是判断文件是否被篡改的有力神器。

代码语言:javascript
复制
[root@servera ~]# cat 1.txt 
a b c
a b c
1 2 3
1 1 1
[root@servera ~]# cat 2.txt
a b c
abc
321
222

使用 diff --brief 命令显示比较后的结果,判断文件是否相同:

代码语言:javascript
复制
[root@servera ~]# diff --brief 1.txt 2.txt 
Files 1.txt and 2.txt differ

使用带有-c 参数的 diff 命令来描述文件内容具体的不同:

代码语言:javascript
复制
[root@servera ~]# diff -c 1.txt 2.txt 
*** 1.txt    2022-09-21 19:48:33.876021920 +0800
--- 2.txt    2022-09-21 19:48:47.579928707 +0800
***************
*** 1,4 ****
  a b c
! a b c
! 1 2 3
! 1 1 1
--- 1,4 ----
  a b c
! abc
! 321
! 222

11. uniq 命令

uniq 命令用于去除文本中连续的重复行,英文全称为“unique”,语法格式为“ uniq [参数] 文件名称 ”。

该命令的作用是用来去除文本文件中连续的重复行,中间不能夹杂其他文本行(非相邻的默认不会去重)—去除了重复的,保留的都是唯一的,自然也就是“独特的”“唯一的”了

代码语言:javascript
复制
[root@servera ~]# cat 1.txt 
welcome come to www.zxbke.cn
welcome come to www.zxbke.cn
Hello come to www.zxbke.cn
[root@servera ~]# uniq 1.txt 
welcome come to www.zxbke.cn
Hello come to www.zxbke.cn

12. sort 命令

sort 命令用于对文本内容进行再排序,语法格式为“ sort [参数] 文件名称 ”。

有时文本中的内容顺序不正确,一行行地手动修改实在太麻烦了。此时使用 sort 命令就再合适不过了,它能够对文本内容进行再次排序。sort 命令的参数及其作用如表所示。

参数

作用

-f

忽略大小写

-b

忽略缩进与空格

-n

以数值型排序

-r

反向排序

-u

去除重复行

-t

指定间隔符

-k

设置字段范围

首先,在执行 sort 命令后默认会按照字母顺序进行排序,非常方便:

代码语言:javascript
复制
[root@servera ~]# cat test1.txt 
a1
c3
b2
d4
f6
e5
[root@servera ~]# sort test1.txt 
a1
b2
c3
d4
e5
f6

此外,与 uniq 命令不同,sort 命令是无论内容行之间是否夹杂有其他内容,只要有两个一模一样的内容行,立马就可以使用-u 参数进行去重操作:

代码语言:javascript
复制
[root@servera ~]# cat test2.txt 
Hello www.zxbke.cn
Welcome to www.zxbke.cn
Hello www.zxbke.cn
Hello www.zxbke.cn
Welcome to www.zxbke.cn
Welcome to www.zxbke.cn
Hello www.zxbke.cn
Hello www.zxbke.cn
Hello www.zxbke.cn
Welcome to www.zxbke.cn
Welcome to www.zxbke.cn

[root@servera ~]# sort -u test2.txt 
Hello www.zxbke.cn
Welcome to www.zxbke.cn

想对数字进行排序?一点问题都没有,而且完全不用担心出现 1 大于 20 这种问题(因为有些命令只比较数字的第一位,忽略了十、百、千的位):

代码语言:javascript
复制
[root@servera ~]# cat test3.txt 
1
-2
0
3
2
1000
[root@servera ~]# sort -n test3.txt 
-2
0
1
2
3
1000

最后挑战一个“高难度”的小实验。下面的内容节选自/etc/passwd 文件中的前 5个字段,并且进行了混乱排序。那么可以用 -t 参数指定间隔符,用 -k 参数指定第几列,用 -n 参数进行数字排序来搞定

代码语言:javascript
复制
[root@servera ~]# cat test4.txt 
tss:x:59:59: 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:171:PulseAudio 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

[root@servera ~]# sort -k 3 -t :  -n test4.txt 
rpc:x:32:32:Rpcbind Daemon
tss:x:59:59: 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:171:PulseAudio 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

文件目录管理命令

1. touch 命令

touch 命令用于创建空白文件或设置文件的时间,语法格式为 “ touch [参数] 文件名称 ”。

代码语言:javascript
复制
[root@servera ~]# touch zxbke
[root@servera ~]# ls -l
total 24
-rw-r--r--. 1 root root    0 Sep 21 20:25 zxbke

touch file 命令可以创建出一个名为 file 的空白文本文件。对 touch 命令来讲,有难度的操作主要是体现在设置文件内容的修改时间(Mtime)、文件权限或属性的更改时间(Ctime)与文件的访问时间(Atime)上面。touch 命令的参数及其作用如表所示。

参数

作用

-a

仅修改 “访问时间” (Atime)

-m

仅修改 “修改时间”(Mtime)

-d

同时修改 Atime 与 Mtime

ls 命令查看一个文件的修改时间,随后修改这个文件,最后再查看一下文件的修改时间,看是否发生了变化:

代码语言:javascript
复制
[root@servera ~]# ls -l zxbke      #修改前 时间为 Sep 21 20:25
-rw-r--r--. 1 root root 0 Sep 21 20:25 zxbke
[root@servera ~]# echo 'Hello' >> zxbke
[root@servera ~]# ls -l zxbke     #修改后  时间为 Sep 21 20:29
-rw-r--r--. 1 root root 6 Sep 21 20:29 zxbke

如果不想让别人知道我们修改了它,那么这时就可以用 touch 命令把修改后的文件时间设置成修改之前的时间(很多黑客就是这样做的呢):

代码语言:javascript
复制
[root@servera ~]# touch -d '2022-09-21 20:25' zxbke   # 设置最后访问和修改时间
[root@servera ~]# ls -l zxbke    #设置后  修改时间为 Sep 21 20:25 
-rw-r--r--. 1 root root 12 Sep 21 20:25 zxbke

2. mkdir 命令

mkdir 命令用于创建空白的目录,英文全称为“make directory”,语法格式为“ mkdir [参数] 目录名称 ”。

除了能创建单个空白目录外,mkdir 命令还可以结合-p 参数来递归创建出具有嵌套层叠关系的文件目录:

代码语言:javascript
复制
[root@servera ~]# mkdir A   #创建一个名为 A 的目录
[root@servera ~]# cd A
[root@servera A]# mkdir -p a/b/c/d   #在A目录下 创建 a/b/c/d 递归目录
[root@servera A]# tree
.
└── a
    └── b
        └── c
            └── d

4 directories, 0 files

3. cp 命令

cp 命令用于复制文件或目录,英文全称为“copy”,语法格式为“ cp [参数] 源文件名称 目标文件名称 ”。

在 Linux 系统中,复制操作具体分为 3 种情况:

➢ 如果目标文件是目录,则会把源文件复制到该目录中;

➢ 如果目标文件也是普通文件,则会询问是否要覆盖它;

➢ 如果目标文件不存在,则执行正常的复制操作。

复制命令基本不会出错,唯一需要记住的就是在复制目录时要加上-r 参数。cp 命令的参数及其作用如表所示。

参数

作用

-p

保留原始文件的属性

-d

若对象为 “链接文件” ,则保留该“链接文件”的属性

-r

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

-i

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

-a

相当于 上述参数的 -pdr

将 /etc/passwd 文件复制到 /root

代码语言:javascript
复制
[root@servera ~]# cp -ai /etc/passwd /root
[root@servera ~]# ls
anaconda-ks.cfg  Desktop  Documents  Downloads  Music  passwd  Pictures  Public  Templates  Videos  zxbke

4. mv 命令

mv 命令用于剪切或重命名文件,英文全称为“move”,语法格式为“ mv [参数] 源文件名称 目标文件名称 ”。

剪切操作不同于复制操作,因为它默认会把源文件删除,只保留剪切后的文件。如果在同一个目录中将某个文件剪切后还粘贴到当前目录下,其实也就是对该文件进行了重命名操作:

代码语言:javascript
复制
[root@servera ~]# mv passwd password
[root@servera ~]# ls -l
total 12
-rw-------. 1 root root 1387 Sep 20 03:05 anaconda-ks.cfg
-rw-r--r--. 1 root root 2490 Sep 20 03:04 password

5. rm 命令

rm 命令用于删除文件或目录,英文全称为“remove”,语法格式为“ rm [参数] 文件 名称 ”。

在 Linux 系统中删除文件时,系统会默认向您询问是否要执行删除操作,如果不想总是看到这种反复的确认信息,可在 rm 命令后跟上 -f 参数来强制删除。另外,要想删除一个目录,需要在 rm 命令后面加一个 -r 参数才可以,否则删除不掉。rm 命令的参数及其作用如表所示。

参数

作用

-f

强制执行

-i

删除前询问

-r

删除目录

-v

显示过程

代码语言:javascript
复制
[root@servera ~]# rm password    #不加 -f 会询问是否确认删除
rm: remove regular file 'password'? 
[root@servera ~]# rm -f password #加上 -f 则不询问进行强制删除

6. dd 命令

dd 命令用于按照指定大小和个数的数据块来复制文件或转换文件,语法格式为“ dd if=参数值 of=参数值 count=参数值 bs=参数值 ”。

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

参数

作用

if

输入的文件名称

of

输出的文件名称

bs

设置每个“ 块 ” 的大小

count

设置要复制“ 块 ”的个数

用 dd 命令从/dev/zero 设备文件中取出一个大小为 560MB 的数据块,然后保存成名为 560_file 的文件。在理解了这个命令后,以后就能随意创建任意大小的文件了:

代码语言:javascript
复制
[root@servera ~]# dd if=/dev/zero of=iso bs=100M count=1
1+0 records in
1+0 records out
104857600 bytes (105 MB, 100 MiB) copied, 0.0488108 s, 2.1 GB/s
[root@servera ~]# ls -lh iso
-rw-r--r--. 1 root root 100M Sep 21 21:02 iso

dd 命令的功能也绝不仅限于复制文件这么简单。如果想把光驱设备中的光盘制作成 iso 格式的镜像文件,在 Windows 系统中需要借助于第三方软件才能做到,但在 Linux 系统中可以直接使用 dd 命令来压制出光盘镜像文件,将它变成一个可立即使用的 iso 镜像:

代码语言:javascript
复制
[root@servera ~]# dd if=/dev/cdrom of=RHEL.iso 

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

7. file 命令

file 命令用于查看文件的类型,语法格式为“ file 【文件名称】 ”。

在 Linux 系统中,由于文本、目录、设备等所有这些一切都统称为文件,但是它们又不像 Windows 系统那样都有后缀,因此很难通过文件名一眼判断出具体的文件类型,这时就需要使用 file 命令来查看文件类型了。

代码语言:javascript
复制
[root@servera ~]# file /dev/nvme0n1   #块设备
/dev/nvme0n1: block special (259/0)
[root@servera ~]# file /etc/passwd   #ASCII文本
/etc/passwd: ASCII text
[root@servera ~]# file /dev/sr0      #块设备
/dev/sr0: block special (11/0)

8. tar 命令

tar 命令用于对文件进行打包压缩或解压,语法格式为“ tar 参数 文件名称 “。

在 Linux 系统中,主要使用的是.tar、.tar.gz 或.tar.bz2格式,这些格式大部分都是由 tar 命令生成的。tar 命令的参数及其作用如表所示。

-j

用bzip2压缩或解压

-z

用gzip压缩或解压

参数

作用

-c

创建压缩文件

-x

解开压缩文件

-v

显示压缩或解压过程

-f

目标文件

-t

查看压缩包内有哪些文件

-p

保留原始的权限与属性

-P

使用绝对路径来压缩

-C

指定解压到的目录

以 .tar.gz 进行压缩 /etc

代码语言:javascript
复制
[root@servera ~]# tar czvf etc.tar.gz /etc   

接下来将打包后的压缩包文件指定解压到/root/etc 目录中(先使用 mkdir 命令创建/root/etc目录)

代码语言:javascript
复制
[root@servera ~]# mkdir /root/etc
[root@servera ~]# tar xzvf etc.tar.gz -C /root/etc
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Shell简介
  • 命令的快捷键
  • 系统工作命令
    • 1. echo 命令
      • 2. date 命令
        • 3. timedatectl 命令
          • 4. reboot 命令
            • 5. poweroff 命令
              • 6. wget 命令
                • 7. ps 命令
                  • 8. pstree 命令
                    • 9. top 命令
                      • 10. nice 命令
                        • 11. pidof 命令
                          • 12. kill 命令
                            • 13. killall 命令
                            • 系统检测命令
                              • 1. ifconfig 命令
                                • 2. uname 命令
                                  • 3. uptime 命令
                                    • 4. free 命令
                                      • 5. who 命令
                                        • 6. last 命令
                                          • 7. ping 命令
                                            • 8. tracepath 命令
                                              • 9. netstat 命令
                                                • 10. history 命令
                                                  • 11. sosreport 命令
                                                  • 定位文件命令
                                                    • 1. pwd 命令
                                                      • 2. cd 命令
                                                        • 3. ls 命令
                                                          • 4. tree 命令
                                                            • 5. find 命令
                                                              • 6. locate 命令
                                                                • 7. whereis 命令
                                                                  • 8. which 命令
                                                                  • 文本文件编辑命令
                                                                    • 1. cat 命令
                                                                      • 2. more 命令
                                                                        • 3. head 命令
                                                                          • 4. tail 命令
                                                                            • 5. tr 命令
                                                                              • 6. wc 命令
                                                                                • 7. stat 命令
                                                                                  • 8. grep 命令
                                                                                    • 9. cut 命令
                                                                                      • 10. diff 命令
                                                                                        • 11. uniq 命令
                                                                                          • 12. sort 命令
                                                                                          • 文件目录管理命令
                                                                                            • 1. touch 命令
                                                                                              • 2. mkdir 命令
                                                                                                • 3. cp 命令
                                                                                                  • 4. mv 命令
                                                                                                    • 5. rm 命令
                                                                                                      • 6. dd 命令
                                                                                                        • 7. file 命令
                                                                                                          • 8. tar 命令
                                                                                                          领券
                                                                                                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档