linux-常见指令-系统状态指令-目录指令-文本指令-目录管理指令-打包压缩指令
前言
本博客使用指南:
ctrl + f
查找你想要做的功能,亦或是查找你要找的命令关键字,其次再试学习这些命令
通常来讲,计算机硬件是由运算器、控制器、存储器、输入/输出设备等共同组成的,而让各种硬件设备各司其职且又能协同运行的东西就是系统内核。
Linux 系统的内核负责完成对硬件资源的分配、调度等管理任务。
Shell(也称为终端或壳)充当的是人与内核(硬件)之间的翻译官,用户把一些命令“告诉”终端,它就会调用相应的程序服务去完成某些工作。
常见的 linux 命令格式:命令名称 [命令参数] [命令对象]
注意:命令名称、命令参数、命令对象之间请用空格键分隔。
命令参数的长格式与短格式
命令对象一般是指要处理的文件、目录、用户等资源
而命令参数可以用长格式(完整的选项名称),也可以用短格式(单个字母的缩写),两者分别用 --
与 -
作为前缀。
- 长格式:
man --help
- 短格式:
man -h
长格式和长格式之间不能合并,长格式和短格式之间也不能合并,但短格式和短格式之间是可以合并的,合并后仅保留一个-(减号)即可。
Linux 新手不会执行命令大多是因为参数比较复杂,参数值需要随不同的命令和需求情况而发生改变。因此,要想灵活搭配各种参数,执行自己想要的功能,则需要长时间的经验积累了。
帮助指令 man
man
查看 man
命令自身的帮助信息:man man
在 man 命令帮助信息的界面中,所包含的常用操作按键及其用途如下所示:
按键 | 用处 |
---|---|
空格键 | 向下翻一页 |
PaGe down | 向下翻一页 |
PaGe up | 向上翻一页 |
home | 直接前往首页 |
end | 直接前往尾页 |
/ | 从上至下搜索某个关键词,如“/linux” |
? | 从下至上搜索某个关键词,如“?linux” |
n | 定位到下一个搜索到的关键词 |
N | 定位到上一个搜索到的关键词 |
q | 退出帮助文档 |
一般来讲,使用 man 命令查看到的帮助内容信息都会很长很多,如果读者不了解帮助文档信息的目录结构和操作方法,乍一看到这么多信息可能会感到相当困惑。man 命令的帮助信息的结构如下:
结构名称 | 代表意义 |
---|---|
NAME | 命令的名称 |
SYNOPSIS | 参数的大致使用方法 |
DESCRIPTION | 介绍说明 |
EXAMPLES | 演示(附带简单说明) |
OVERVIEW | 概述 |
DEFAULTS | 默认的功能 |
OPTIONS | 具体的可用选项(带介绍) |
ENVIRONMENT | 环境变量 |
FILES | 用到的文件 |
SEE ALSO | 相关的资料 |
HISTORY | 维护历史与联系方式 |
普通常见指令
在终端输出字符串/变量提取的值 echo
echo 命令用于在终端输出字符串或变量提取后的值
格式为“echo [字符串 | $变量]”。
例如,把指定字符串“Linuxprobe.com”输出到终端屏幕的命令为:
[root@linuxprobe ~]# echo Linuxprobe.Com
该命令会在终端屏幕上显示如下信息:
Linuxprobe.Com
下面,我们使用$变量的方式提取变量SHELL的值,并将其输出到屏幕上:
[root@linuxprobe ~]# echo $SHELL
/bin/bash
显示及设置系统的时间或日期 date
date 命令用于显示及设置系统的时间或日期
格式:date [选项] [+指定的格式]
只需在强大的 date 命令中输入以 +
号开头的参数,即可按照指定格式来输出系统的时间或日期
应用:这样在日常工作时便可以把备份数据的命令与指定格式输出的时间信息结合到一起。
例如,把打包后的文件自动按照 年-月-日
的格式打包成 backup-2017-9-1.tar.gz
,用户只需要看一眼文件名称就能大概了解到每个文件的备份时间了。
date命令中常见的参数格式及作用如下:
参数 | 作用 |
---|---|
%t | 跳格[Tab键] |
%H | 小时(00~23) |
%I | 小时(00~12) |
%M | 分钟(00~59) |
%S | 秒(00~59) |
%j | 今年中的第几天 |
常见用法
默认格式
[root@linuxprobe ~]# date
Mon Aug 24 16:11:23 CST 2017
按照 年-月-日 小时:分钟:秒 的格式查看当前系统时间
[root@linuxprobe ~]# date "+%Y-%m-%d %H:%M:%S"
2017-08-24 16:29:12
将系统的当前时间设置为 2017年9月1日8点30分
[root@linuxprobe ~]# date -s "20170901 8:30:00"
Fri Sep 1 08:30:00 CST 2017
[root@linuxprobe ~]# date
Fri Sep 1 08:30:01 CST 2017
date 命令中的参数 %j 可用来查看今天是当年中的第几天
这个参数能够很好的区分备份时间的新旧,即数字越大,越靠近当前时间
[root@linuxprobe ~]# date "+%j"
244
重启系统 reboot
由于重启计算机这种操作会涉及硬件资源的管理权限,因此默认会配置只让 root 管理员来重启
[root@linuxprobe ~]# reboot
关机命令 poweroff
该命令与reboot命令相同,都会涉及硬件资源的管理权限,默认会配置只让 root 管理员来重启
[root@linuxprobe ~]# poweroff
在终端中下载网络文件 wget
格式:wget [参数] 下载地址
wget 命令的参数及作用
参数 | 作用 |
---|---|
-b | 后台下载模式 |
-P | 下载到指定目录 |
-t | 最大尝试次数 |
-c | 断点续传 |
-p | 下载页面内所有资源,包括图片、视频等 |
-r | 递归下载 |
尝试使用 wget 命令下载《linux 就该这么学》的最新pdf格式电子文档,这个文件的完整路径为 https://www.linuxprobe.com/docs/LinuxProbe.pdf ,执行该命令后的下载效果如下:
[root@linuxprobe ~]# wget https://www.linuxprobe.com/docs/LinuxProbe.pdf
--2017-08-24 19:30:12 -- https://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-08-24 19:30:14 (32.9 MB/s) - ‘LinuxProbe.pdf’ saved [45948568/45948568]
接下来,我们使用 wget 命令递归下载 www.linuxprobe.com 网站内的所有页面数据以及文件,下载完后会自动保存到当前路径下一个名为 www.linuxprobe.com 的目录中。
执行该操作的命令为 wget -r -p https://www.linuxprobe.com
,该命令的执行结果如下。
[root@linuxprobe ~]# wget -r -p https://www.linuxprobe.com
--2017-08-24 19:31:41-- https://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 [参数]
此命令通常会搭配 管道符,用来抓取与某个指定服务进程相对应的PID号码
ps 命令的参数及作用
参数 | 作用 |
---|---|
-a | 显示所有进程(包括其他用户的进程) |
-u | 用户以及其他详细信息 |
-x | 显示没有控制终端的进程 |
- ps 命令可允许参数不加减号(-),因此可直接写成ps aux的样子。
Linux系统中时刻运行着许多进程,如果能够合理地管理它们,则可以优化系统的性能。
在Linux系统中,有5种常见的进程状态:
R(运行):进程正在运行或在运行队列中等待。
S(中断):进程处于休眠中,当某个条件形成后或者接收到信号时,则脱离该 状态。
D(不可中断):进程不响应系统异步信号,即便用kill命令也不能将其中断。
Z(僵死):进程已经终止,但进程描述符依然存在, 直到父进程调用wait4()系统函数后将进程释放。
T(停止):进程收到停止信号后停止运行。
当执行 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命令相当强大,能够动态地查看系统运维状态,完全将它看作Linux中的“强化版的Windows任务管理器”。
top
执行结果如下(会动态变化):
top 命令执行结果的前5行为系统整体的统计信息,其所代表的含义如下。
- 第1行:系统时间、运行时间、登录终端数、系统负载(三个数值分别为1分钟、5分钟、15分钟内的平均值,数值越小意味着负载越低)。
- 第2行:进程总数、运行中的进程数、睡眠中的进程数、停止的进程数、僵死的进程数。
- 第3行:用户占用资源百分比、系统内核占用资源百分比、改变过优先级的进程资源百分比、空闲的资源百分比等。其中数据均为CPU数据并以百分比格式显示,例如“97.1 id”意味着有97.1%的CPU处理器资源处于空闲。
- 第4行:物理内存总量、内存使用量、内存空闲量、作为内核缓存的内存量。
- 第5行:虚拟内存总量、虚拟内存使用量、虚拟内存空闲量、已被提前加载的内存量。
查询某个指定服务进程的 PID 值 pidof
每个进程的进程号码值(PID)是唯一的,因此可以通过PID来区分不同的进程。
查询本机上sshd服务程序的PID:
[root@localhost 桌面]# pidof sshd
1440
终止/杀死某个指定PID的服务进程 kill
普通用户没有这个权限
格式:kill [参数] [进程PID]
我们使用 kill 命令把上面用 pidof 命令查询到的 PID 所代表的进程终止掉(这种操作的效果等同于强制停止sshd服务。)
[root@localhost 桌面]# kill 1440
[root@localhost 桌面]# pidof sshd
[root@localhost 桌面]#
终止某个指定名称的服务所对应的全部进程 killall
格式:killall [参数] [服务名称]
通常来讲,复杂软件的服务程序会有多个进程协同为用户提供服务,如果逐个去结束这些进程会比较麻烦,此时可以使用 killall 命令来批量结束某个服务程序带有的全部进程。
以httpd服务程序为例,来结束其全部进程(系统默认没有安装 httpd 服务程序的话执行 pidof httpd 可能得不到返回结果)
[root@linuxprobe ~]# pidof httpd
13581 13580 13579 13578 13577 13576
[root@linuxprobe ~]# killall httpd
[root@linuxprobe ~]# pidof httpd
[root@linuxprobe ~]#
如果我们在系统终端中执行一个命令后想立即停止它,可以同时按下Ctrl + C组合键(生产环境中比较常用的一个快捷键),这样将立即终止该命令的进程。
或者,如果有些命令在执行时不断地在屏幕上输出信息,影响到后续命令的输入,则可以在执行命令时在末尾添加上一个&符号,这样命令将进入系统后台来执行,不再往控制台打印信息
系统状态检测指令
获取网卡配置与网络状态等信息 ifconfig
格式:ifconfig [网络设备] [参数]
使用 ifconfig
命令来查看本机当前的网卡配置与网络状态等信息时,其实主要查看的就是网卡名称、inet参数后面的IP地址、ether参数后面的网卡物理地址(又称为MAC地址),以及RX、TX的接收数据包与发送数据包的个数及累计流量
查看系统内核与系统版本等信息 uname
格式:uname [-a]
在使用 uname 命令时,一般会固定搭配上 -a
参数来完整地查看当前系统的内核名称、主机名、内核发行版本、节点名、系统时间、硬件名称、硬件平台、处理器类型以及操作系统名称等信息。
[root@localhost 桌面]# uname -a
Linux localhost.localdomain 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22:10:57 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
如果要查看当前系统版本的详细信息,则需要查看 centos-release 文件(不同系统可能不同,找 /etc 目录下的 release 结尾的文件) -- 不过好像也没啥意义
[root@localhost 桌面]# cat /etc/centos-release
CentOS Linux release 7.2.1511 (Core)
查看系统的负载信息 uptime
uptime 命令可以显示当前系统时间、系统已运行时间、启用终端数量以及平均负载值等信息。
平均负载值(load average)指的是系统在最近1分钟、5分钟、15分钟内的压力情况
负载值越低越好,尽量不要长期超过1,在生产环境中不要超过5。
[root@linuxprobe ~]# uptime
22:49:55 up 10 min, 2 users, load average: 0.01, 0.19, 0.18
显示当前系统中内存的使用量信息 free
格式:free [-h]
为了保证Linux系统不会因资源耗尽而突然宕机,运维人员需要时刻关注内存的使用量。
在使用
free
命令时,可以结合使用-h
参数以更人性化的方式输出当前内存的实时使用量信息(主要是单位转换)
[root@localhost 桌面]# free
total used free shared buff/cache available
Mem: 1001332 550776 110636 8008 339920 201716
Swap: 2097148 632 2096516
[root@localhost 桌面]# free -h
total used free shared buff/cache available
Mem: 977M 537M 108M 7.8M 331M 197M
Swap: 2.0G 632K 2.0G
结构含义
- total 内存总量
- used 已用量
- free 可用量
- shared 进程共享的内存量
- buffers 磁盘缓存的内存量
- cached 缓存的内存量
查看当前登入主机的用户终端信息 who
格式:who [参数]
可以快速显示出所有正在登录本机的用户的名称以及他们正在开启的终端信息
查看所有系统的登录记录 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
参数则会清空所有的命令历史记录。 - 可以使用
!n
的方式来重复执行历史记录中编号为 n 的命令
[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
[root@linuxprobe ~]# !15
anaconda-ks.cfg Documents initial-setup-ks.cfg Pictures Templates
Desktop Downloads Music Public Videos
历史命令会被保存到用户家目录中的 .bash_history 文件中。
Linux 系统中以点(.)开头的文件均代表隐藏文件,这些文件大多数为系统服务文件,可以用 cat 命令查看其文件内容。
[root@linuxprobe ~]# cat ~/.bash_history
要清空当前用户在本机上执行的Linux命令历史记录信息,可执行如下命令:
[root@linuxprobe ~]# history -c
收集系统配置及架构信息并输出诊断文档 sosreport
应用场景:当 Linux 系统出现故障需要联系技术支持人员时,大多数时候都要先使用这个命令来简单收集系统的运行状态和服务配置信息,以便让技术支持人员能够远程解决一些小问题,亦或让他们能提前了解某些复杂问题。
在下面的输出信息中,有 python 注释的部分是收集好的资料压缩文件以及校验码,将其发送给技术支持人员即可:
[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.
工作目录切换命令
工作目录指的是用户当前在系统中所处的位置
显示用户当前所处的工作目录 pwd
格式:pwd [选项]
[root@linuxprobe etc]# pwd
/etc
切换工作路径 cd
我们可以通过 cd 命令迅速、灵活地切换到不同的工作目录
格式:cd [路径]
(也可以用相对路径)
- 返回到上一次所处的目录
cd -
- 进入上级目录
cd ..
- 切换到当前用户的家目录
cd ~
- 切换到其他用户的家目录
cd ~用户名
(需要注意权限问题)
切换进/etc目录
[root@linuxprobe ~]# cd /etc
切换到/bin目录
[root@linuxprobe etc]# cd /bin
返回到上一次的目录
[root@linuxprobe bin]# cd -
/etc
[root@linuxprobe etc]#
切换到用户的家目录
[root@linuxprobe etc]# cd ~
[root@linuxprobe ~]#
显示目录中的文件信息 ls
格式:ls [选项] [文件]
所处的工作目录不同,当前工作目录下的文件肯定也不同
- 使用 ls 命令的
-a
参数看到全部文件(包括隐藏文件) - 使用
-l
参数可以查看文件的属性、大小等详细信息 - 结合
-l 与 -a
参数可以查看当前目录中的所有文件及这些文件的属性信息
[suwanbin@localhost 桌面]$ ls -al
总用量 8
drwxr-xr-x. 2 suwanbin suwanbin 21 12月 19 17:44 .
drwx------. 15 suwanbin suwanbin 4096 12月 20 00:32 ..
-rw-rw-r--. 1 suwanbin suwanbin 53 12月 15 22:34 hello.py
如果想要查看目录属性信息,则需要额外添加一个 -d
参数
例如,可使用如下命令查看 /etc 目录的权限与属性信息:
[root@linuxprobe ~]# ls -ld /etc
drwxr-xr-x. 132 root root 8192 Jul 10 10:48 /etc
文本文件编辑命令
Linux系统中“一切都是文件”,而对服务程序进行配置自然也就是编辑程序的配置文件
查看纯文本文件(内容较少的) cat
格式:cat [选项] [文件]
Linux系统中有多个用于查看文本内容的命令,每个命令都有自己的特点
cat 命令就是用于查看内容较少的纯文本文件的
cat 命令常见参数及用途
-n | 显示行数(空行也编号) |
---|---|
-s | 显示行数(多个空行算一个编号) |
-b | 显示行数(空行不编号) |
-E | 每行结束处显示$符号 |
-T | 将TAB字符显示为 ^I符号 |
-v | 使用 ^ 和 M- 引用,除了 LFD 和 TAB 之外 |
-e | 等价于”-vE”组合 |
-t | 等价于”-vT”组合 |
-A | 等价于 -vET组合 |
--help | 显示帮助信息 |
--version | 显示版本信息 |
查看 hello.py
的内容,并显示行号
[suwanbin@localhost home]$ cat -n hello.py
1
2 print("hello world!")
3
4
5
[suwanbin@localhost home]$
查看纯文本文件(内容较多的)
格式:more [选项]文件
对于长篇的文本内容,推荐使用 more 命令来查看
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 --bootpro
查看纯文本文档的前N行 head
格式:head [选项] [文件]
查看 initial-setup-ks.cfg
中前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 ~]#
查看纯文本文档的后N行 或 持续刷新内容 tail
格式:tail [选项] [文件]
查看 /var/log/messages
最后5行
[root@linuxprobe ~]# tail -n 5 /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
- 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 命令读取待处理的文本,然后通过 管道符 把这些文本内容传递给 tr
命令进行替换操作
把 anaconda-ks.cfg
中的英文全部替换为大写
[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
……………… 省略部分输出信息 ………………
统计指定文本的行数、字数、字节数 wc
格式:wc [参数] 文本
wc 命令参数及用途
参数 | 作用 |
---|---|
-l | 只显示行数 |
-w | 只显示单词数 |
-c | 只显示字节数 |
在 Linux 系统中,passwd 是用于保存系统账户信息的文件,要统计当前系统中有多少个用户,可以使用下面的命令来进行查询,是不是很神奇?:
[root@linuxprobe ~]# wc -l /etc/passwd
38 /etc/passwd
查看文件的具体存储信息和时间等信息 stat
格式:stat 文件名
查看 anaconda-ks.cfg
的信息
[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: -
- Access 文件的读取时间
- Modify 文件内容的修改时间
- Change 文件权限或属性的更改时间
按“列”提取文本字符 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
..... 省略部分输出信息 ......
比较多个文本文件的差异 diff
格式:diff [参数] 文件
diff 是判断文件是否被篡改的有效利器
--brief
参数来确认两个文件是否不同-c
参数来详细比较出多个文件的差异之处
先使用 cat
命令分别查看 diff_A.txt
和 diff_B.txt
文件的内容,然后进行比较:
[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
使用 diff --brief diff_A.txt diff_B.txt
命令显示比较后的结果
[root@linuxprobe ~]# diff --brief diff_A.txt diff_B.txt
Files diff_A.txt and diff_B.txt differ
使用 diff -c diff_A.txt diff_B.txt
命令显示比较后的结果
[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
文件目录管理命令
创建空白文件或设置文件的时间 touch
格式:touch [选项] [文件]
创建出一个名为 linuxprobe 的空白文本文件:touch linuxprobe
touch 命令的参数及作用
参数 | 作用 |
---|---|
-a | 仅修改“读取时间”(atime) |
-m | 仅修改“修改时间”(mtime) |
-d | 同时修改atime与mtime |
用 ls 命令查看一个文件的修改时间,然后修改这个文件,最后再通过 touch 命令把修改后的文件时间设置成修改之前的时间(很多黑客就是这样做的呢):
(修改完文件后,文件的修改时间会改变,而这里,我们用 touch 命令来将文件的修改时间改回原来的时间)
[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 [选项] [目录]
除了能创建单个空白目录外,mkdir 命令还可以结合 -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 [选项] 源文件 目标文件
cp 命令的参数及作用
参数 | 作用 |
---|---|
-p | 保留原始文件的属性 |
-d | 若对象为“链接文件”,则保留该“链接文件”的属性 |
-r | 递归持续复制(用于目录) |
-i | 若目标文件存在则询问是否覆盖 |
-a | 相当于-pdr(p、d、r为上述参数) |
使用 touch 创建一个名为 install.log
的普通空白文件,然后将其复制为一份名为 x.log
的备份文件,最后再使用 ls 命令查看目录中的文件
[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
[root@linuxprobe ~]# ls
install.log linux.log
删除文件或目录 rm
格式:rm [选项] 文件
在 Linux 系统中删除文件时,会询问是否要执行删除操作,如果不想总是看到这种反复的确认信息,可在 rm 命令后跟上 -f
参数来强制删除
如果想要删除一个目录,需要在 rm 命令后面加一个 -r
参数才可以,否则删除不掉
删除 install.log
和 linux.log
文件
[root@linuxprobe ~]# rm install.log
rm: remove regular empty file ‘install.log’? y
[root@linuxprobe ~]# rm -f linux.log
[root@linuxprobe ~]# ls
[root@linuxprobe ~]#
按照指定大小和个数的数据块来复制文件或转换文件 dd
当然如果愿意的话,还可以在复制过程中转换其中的数据
格式:dd [参数]
dd 命令的参数及作用
参数 | 作用 |
---|---|
if | 输入的文件名称 |
of | 输出的文件名称 |
bs | 设置每个“块”的大小 |
count | 设置要复制“块”的个数 |
Linux 系统中有一个名为 /dev/zero
的设备文件,这个文件不会占用系统存储空间,但却可以提供无穷无尽的数据,因此可以使用它作为 dd 命令的输入文件,来生成一个指定大小的文件。
用 dd 命令从 /dev/zero
设备文件中取出一个大小为 560MB 的数据块,然后保存成名为 560_file
的文件
[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
考虑到有些读者会纠结 bs 块大小与 count 块个数的关系,下面举一个吃货的例子进行解释。假设小明的饭量(即需求)是一个固定的值,用来盛饭的勺子的大小即 bs 块大小,而用勺子盛饭的次数即 count 块个数。小明要想吃饱(满足需求),则需要在勺子大小(bs 块大小)与用勺子盛饭的次数(count 块个数)之间进行平衡。勺子越大,用勺子盛饭的次数就越少。由上可见,bs 与 count 都是用来指定容量的大小,只要能满足需求,可随意组合搭配方式。
查看文件的类型 file
格式:file 文件名
我们可以通过 file 命令来查看具体的文件类型(单单看后缀是不对的)
[root@linuxprobe ~]# file anaconda-ks.cfg
anaconda-ks.cfg: ASCII text
[root@linuxprobe ~]# file /dev/sda
/dev/sda: block special
打包压缩与搜索命令
打包压缩或解压文件 tar
格式:tar [选项] [文件]
在 Linux 系统中,常见的压缩文件格式比较多,其中主要使用的是 .tar 或 .tar.gz 或 .tar.bz2 格式,我们不用担心格式太多而记不住,其实这些格式大部分都是由 tar 命令来生成的。
tar 命令的常见参数及作用
参数 | 作用 |
---|---|
-c | 创建压缩文件 |
-x | 解开压缩文件 |
-t | 查看压缩包内有哪些文件 |
-z | 用Gzip压缩或解压 |
-j | 用bzip2压缩或解压 |
-v | 显示压缩或解压的过程 |
-f | 目标文件名 |
-p | 保留原始的权限与属性 |
-P | 使用绝对路径来压缩 |
-C | 指定解压到的目录 |
-z
参数指定使用 Gzip 格式来压缩或解压文件,-j
参数指定使用 bzip2 格式来压缩或解压文件,用户使用时则是根据文件的后缀来决定应使用何种格式参数进行解压- 在执行某些压缩或解压操作时,可能需要花费数个小时,如果屏幕一直没有输出,一方面不好判断打包的进度情况,另一方面也会怀疑电脑死机了,因此非常推荐使用
-v
参数向用户不断显示压缩或解压的过程。 -f
参数特别重要,它必须放到参数的最后一位,代表要压缩或解压的软件包名称
压缩解压案例
使用 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
目录中(先使用 mkdir 命令来创建 /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 命令的常见参数及作用
参数 | 作用 |
---|---|
-b | 将可执行文件(binary)当作文本文件(text)来搜索 |
-c | 仅显示找到的行数 |
-i | 忽略大小写 |
-n | 显示行号 |
-v | 反向选择——仅列出没有“关键词”的行。 |
在 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 系统中,搜索工作一般都是通过 find 命令来完成的,它可以使用不同的文件特性作为寻找条件(如文件名、大小、修改时间、权限等信息),一旦匹配成功则默认将信息显示到屏幕上
find 命令常见参数及作用
参数 | 作用 |
---|---|
-name | 匹配名称 |
-perm | 匹配权限(mode为完全匹配,-mode为包含即可) |
-user | 匹配所有者 |
-group | 匹配所有组 |
-mtime -n +n | 匹配修改内容的时间(-n指n天以内,+n指n天以前) |
-atime -n +n | 匹配访问文件的时间(-n指n天以内,+n指n天以前) |
-ctime -n +n | 匹配修改文件权限的时间(-n指n天以内,+n指n天以前) |
-nouser | 匹配无所有者的文件 |
-nogroup | 匹配无所有组的文件 |
-newer f1 !f2 | 匹配比文件f1新但比f2旧的文件 |
--type b/d/c/p/l/f | 匹配文件类型(后面的字幕字母依次表示块设备、目录、字符设备、管道、链接文件、文本文件) |
-size | 匹配文件的大小(+50KB为查找超过50KB的文件,而-50KB为查找小于50KB的文件) |
-prune | 忽略某个目录 |
-exec …… {} ; | 后面可跟用于进一步处理搜索结果的命令(下文会有演示) |
这里需要重点讲解一下 -exec
参数重要的作用。这个参数用于把 find 命令搜索到的结果交由紧随其后的命令作进一步处理,它十分类似于 管道符 技术,并且由于 find 命令对参数的特殊要求,因此虽然 exec 是长格式形式,但依然只需要一个减号(-)
根据文件系统层次标准(Filesystem Hierarchy Standard)协议,Linux 系统中的配置文件会保存到 /etc
目录中。如果要想获取到该目录中所有以 host 开头的文件列表,可以执行如下命令
[root@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 -a {} /root/findresults/ \;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构