一、前言
悟已往之不谏,知来者之可追。实迷途其未远,觉今是而昨非。舟遥遥以轻飏,风飘飘而吹衣。问征夫以前路,恨晨光之熹微。
第一版我已经全部放到我的精选里了,大家可以点开我的头像主页,选择精选观看,本系列依照《Linux就该这么学》第二版随书学习练习操作,将一些课本上不顺畅的地方,全部以最简方式免费开源展示给大家,资源大家可以自行百度,学习起来我们既要多巴胺也要内啡肽。
第一章写完感觉挺简单的,没想到第二章直接爆炸,居然写了两天,怕大家看不下去,推荐一首天王的歌,边听边学:<周杰伦 - 夜曲>,虽然大家做着一样的事情,但是不同的阶段还是会有不一样的感受的,希望这段学习的旅程能给大家一些思考,不要麻木做事,问师参学今何解,云在青天水在瓶。
2.1shell语言
英文中的壳叫作Shell,我们在行业中也将用户终端程序称之为Shell,方便好记。Shell就是终端程序的统称,它充当了人与内核(硬件)之间的翻译官,用户把一些命令“告诉”终端程序,它就会调用相应的程序服务去完成某些工作。现在包括红帽系统在内的许多主流Linux系统默认使用的终端是Bash(Bourne-Again SHell)解释器,这个Bash解释器主要有以下4项优势:通过上下方向键来调取执行过的Linux命令;命令或参数仅需输入前几位就可以用Tab键补全;具有强大的批处理脚本;具有实用的环境变量功能。
2.2执行命令的必备知识
常见的执行Linux命令的格式是:命令名称 [命令参数] [命令对象]
命令名称:就是语法中的“动词”,表达的是想要做的事情,例如创建用户、查看文件、重启系统等操作。
命令参数:用于对命令进行调整,让“修改”过的命令能更好地贴合工作需求,达到事半功倍的效果。
Linux命令参数的长格式与短格式示例
长格式 | man --help |
短格式 | man -h |
切换到root用户下,体验一下man命令
[centos8@localhost root]$ su -
Password:
Last login: Mon Nov 6 16:58:17 PST 2023 on pts/0
[root@localhost ~]#
[root@localhost ~]# 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键:实现对命令、参数或文件的内容补全,两次tab可以调出所有可能的命令
Ctrl+C组合键:终止当前进程的运行
以下命令执行效果是每1s刷新一次系统负载情况,直到按下Ctrl+c组合键时才停止运行。
[root@localhost ~]# watch -n 1 uptime
+
Ctrl+D组合键:键盘输入结束。
Ctrl+L组合键:清空当前终端中已有的内容。
2.3 常用系统工作命令
echo命令:用于在终端设备上输出字符串或变量提取后的值,语法格式为“echo [字符串] [$变量]”
字符串
[root@localhost ~]# echo weihongbin
weihongbin
$变量
[root@localhost ~]# echo $SHELL
/bin/bash
date命令:用于显示或设置系统的时间与日期,语法格式为“date [+指定的格式]”
参数 | 作用 |
%S | 秒(00~59) |
%M | 分钟(00~59) |
%H | 小时(00~23) |
%I | 小时(00~12) |
%m | 月份(1~12) |
%p | 显示出AM或PM |
%a | 缩写的工作日名称(例如:Sun) |
%A | 完整的工作日名称(例如:Sunday) |
%b | 缩写的月份名称(例如:Jan) |
%B | 完整的月份名称(例如:January) |
%q | 季度(1~4) |
%y | 简写年份(例如:20) |
%Y | 完整年份(例如:2020) |
%d | 本月中的第几天 |
%j | 今年中的第几天 |
%n | 换行符(相当于按下回车键) |
%t | 跳格(相当于按下Tab键) |
默认格式
[root@localhost ~]# date
Mon Nov 6 17:27:55 PST 2023
“年-月-日 小时:分钟:秒”
[root@localhost ~]# date "+%Y-%m-%d %H:%M:%S"
2023-11-06 17:29:16
设置为2020年11月1日8点30分
[root@localhost ~]# date -s "20231107 9:34:00"
Tue Nov 7 09:34:00 PST 2023
参数%j可用来查看今天是当年中的第几天
[root@localhost ~]# date "+%j"
311
timedatectl命令:用于设置系统的时间,语法格式为“timedatectl [参数]”
timedatectl命令参数以及作用
参数 | 作用 |
status | 显示状态信息 |
list-timezones | 列出已知时区 |
set-time | 设置系统时间 |
set-timezone | 设置生效时区 |
查看系统时间与时区
[root@localhost ~]# timedatectl status
Local time: Tue 2023-11-07 10:59:14 PST
Universal time: Tue 2023-11-07 18:59:14 UTC
RTC time: Tue 2023-11-07 03:06:47
Time zone: America/Los_Angeles (PST, -0800)
System clock synchronized: no
NTP service: active
RTC in local TZ: no
时区不是上海(Asia/Shanghai),可以手动进行设置
[root@localhost ~]# timedatectl set-timezone Asia/Shanghai
网络授时NTP:编辑文件 "/etc/ntp.conf",根据情况修改文件内容为:
driftfile /var/lib/ntp/drift
pidfile /var/run/ntpd.pid
logfile /var/log/ntp.log
restrict default kod nomodify notrap nopeer noquery
restrict -6 default kod nomodify notrap nopeer noquery
restrict 127.0.0.1
server 127.127.1.0
fudge 127.127.1.0 stratum 10
server ntp.aliyun.com iburst minpoll 4 maxpoll 10
restrict ntp.aliyun.com nomodify notrap nopeer noquery
查看一下时间是否准确:date
reboot命令:用于重启系统
[root@localhost ~]# reboot
poweroff命令:用于关闭系统
[root@localhost ~]# poweroff
wget命令:用于在终端命令行中下载网络文件,语法格式为“wget [参数] 网址”
wget命令中的参数以及作用
参数 | 作用 |
-b | 后台下载模式 |
-P | 下载到指定目录 |
-t | 最大尝试次数 |
-c | 断点续传 |
-p | 下载页面内所有资源,包括图片、视频等 |
-r | 递归下载 |
递归下载并存到指定网址目录
[root@localhost ~]# wget -r -p https://**
ps命令:用于查看系统中的进程状态,语法格式为“ps [参数]”
ps命令中的参数以及作用
参数 | 作用 |
-a | 显示所有进程(包括其他用户的进程) |
-u | 用户以及其他详细信息 |
-x | 显示没有控制终端的进程 |
Linux系统中有5种常见的进程状态,分别为运行、中断、不可中断、僵死与停止
R(运行):进程正在运行或在运行队列中等待。
S(中断):进程处于休眠中,当某个条件形成后或者接收到信号时,则脱离该 状态。
D(不可中断):进程不响应系统异步信号,即便用kill命令也不能将其中断。
Z(僵死):进程已经终止,但进程描述符依然存在, 直到父进程调用wait4()系统函数后将进程释放。
T(停止):进程收到停止信号后停止运行。
高优先级(<)、低优先级(N)、被锁进内存(L)、包含子进程(s)多线程(l)5种补充形式
执行ps aux
命令
USER | PID | %CPU | %MEM | VSZ | RSS | TTY | STAT | START | TIME | COMMAND |
进程的所有者 | 进程ID号 | 运算器占用率 | 内存占用率 | 虚拟内存使用量(单位是KB) | 占用的固定内存量(单位是KB) | 所在终端 | 进程状态 | 被启动的时间 | 实际使用CPU的时间 | 命令名称与参数 |
root | 1 | 0.0 | 0.5 | 244740 | 10636 | ? | Ss | 07:54 | 0:02 | |
root | 2 | 0.0 | 0.0 | 0 | 0 | ? | S | 07:54 | 0:00 | |
root | 3 | 0.0 | 0.0 | 0 | 0 | ? | I< | 07:54 | 0:00 | |
root | 4 | 0.0 | 0.0 | 0 | 0 | ? | I< | 07:54 | 0:00 | |
root | 5 | 0.0 | 0.0 | 0 | 0 | ? | I< | 07:54 | 0:00 | |
root | 6 | 0.0 | 0.0 | 0 | 0 | ? | I< | 07:54 | 0:00 | |
root | 7 | 0.0 | 0.0 | 0 | 0 | ? | S | 07:54 | 0:00 | |
root | 8 | 0.0 | 0.0 | 0 | 0 | ? | I | 07:54 | 0:00 | |
root | 9 | 0.0 | 0.0 | 0 | 0 | ? | S | 07:54 | 0:00 |
pstree命令:用于以树状图的形式展示进程之间的关系
[root@localhost ~]# pstree
systemd─┬─ModemManager───2*[{ModemManager}]
├─NetworkManager───2*[{NetworkManager}]
├─VGAuthService
├─3*[abrt-dump-journ]
├─abrtd───2*[{abrtd}]
├─alsactl
├─anacron
├─atd
├─auditd─┬─sedispatch
│ └─2*[{auditd}]
├─avahi-daemon───avahi-daemon
top命令:用于动态地监视进程活动及系统负载等信息
第1行:系统时间、运行时间、登录终端数、系统负载(3个数值分别为1分钟、5分钟、15分钟内的平均值,数值越小意味着负载越低)。
第2行:进程总数、运行中的进程数、睡眠中的进程数、停止的进程数、僵死的进程数。
第3行:用户占用资源百分比、系统内核占用资源百分比、改变过优先级的进程资源百分比、空闲的资源百分比等。其中数据均为CPU数据并以百分比格式显示,例如“99.9 id”意味着有99.9%的CPU处理器资源处于空闲。
第4行:物理内存总量、内存空闲量、内存使用量、作为内核缓存的内存量。
第5行:虚拟内存总量、虚拟内存空闲量、虚拟内存使用量、已被提前加载的内存量。
nice命令:用于调整进程的优先级,语法格式为“nice优先级数字 服务名称”
PR和NI值代表的是进程的优先级,数字越低(取值范围是-20~19),优先级越高
-g 匹配进程组ID
-n 设置优先级别
-p 匹配进程ID
-u 匹配用户ID
[root@bogon ~]# nice -n -20 bash
pidof命令:用于查询某个指定服务进程的PID号码值,语法格式为“pidof [参数] 服务名称”
每个进程的进程号码值(PID)是唯一的,可以用于区分不同的进程
[root@bogon ~]# pidof sshd
1861 1843 1046
kill命令:用于终止某个指定PID值的服务进程,语法格式为“kill [参数] 进程的PID”
使用kill命令把上面用pidof命令查询到的PID所代表的进程终止掉
[root@bogon ~]# kill 2156
有时系统会提示进程无法被终止,此时可以加参数-9,表示最高级别地强制杀死进程
[root@bogon ~]# kill -9 2156
killall命令:用于终止某个指定名称的服务所对应的全部进程,语法格式为“killall [参数] 服务名称”
[root@bogon ~]# pidof sshd
1861 1843 1046
[root@bogon ~]# killall sshd
[root@bogon ~]# pidof sshd
2.4 系统状态检测命令
ifconfig命令:用于获取网卡配置与网络状态等信息,语法格式为“ifconfig [参数] [网络设备]”主要查看的就是网卡名称、inet参数后面的IP地址、ether参数后面的网卡物理地址(又称为MAC地址),以及RX、TX的接收数据包与发送数据包的个数及累计流量(即下面红色的信息内容):
[root@bogon ~]# ifconfig
ens160:
flags=4163 mtu 1500
inet
192.168.227.134
netmask 255.255.255.0 broadcast 192.168.227.255
inet6 fe80::20c:29ff:fe57:4d51 prefixlen 64 scopeid 0x20
ether
00:0c:29:57:4d:51
txqueuelen 1000 (Ethernet)
RX packets 2178 bytes 194630 (
190.0 KiB
)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1286 bytes 855375 (
835.3 KiB
)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
uname命令:用于查看系统内核版本与系统架构等信息,语法格式为“uname [-a]”一般要固定搭配上-a参数来完整地查看当前系统的内核名称、主机名、内核发行版本、节点名、压制时间、硬件名称、硬件平台、处理器类型以及操作系统名称等信息:
[root@bogon ~]# uname -a
Linux bogon 4.18.0-348.el8.x86_64 #1 SMP Tue Oct 19 15:14:17 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
查看当前系统版本的详细信息:
[root@bogon ~]# cat /etc/redhat-release
CentOS Linux release 8.5.2111
uptime命令:用于查看系统的负载信息,显示当前系统时间、系统已运行时间、启用终端数量以及平均负载值等信息。平均负载值指的是系统在最近1分钟、5分钟、15分钟内的压力情况(下面红色的信息部分),负载值越低越好(负载值保持在1左右,在生产环境中不要超过5就好):
[root@bogon ~]# uptime
10:01:39 up 1:09, 1 user,
load average: 0.00, 0.00, 0.00
free命令:用于显示当前系统中内存的使用量信息,语法格式为“free [-h]”在使用free命令时,可以结合使用-h参数以更人性化的方式输出当前内存的实时使用量信息:
[root@bogon ~]# free -h
内存总量 | 已用量 | 空闲量 | 共享使用的内存量 | 缓存的内存量 | 可用量 |
total used free shared buff/cache available
Mem: 1.7Gi 335Mi 1.0Gi 9.0Mi 432Mi 1.3Gi
Swap: 2.0Gi 0B 2.0Gi
who命令:用于查看当前登入主机的用户终端信息,有远程用户,还会显示出来访者的IP地址
[root@bogon ~]# who
登陆的用户名 | 终端设备 | 登陆到系统的时间(远程IP) |
root pts/0 2023-11-08 08:54 (192.168.227.1)
last命令:用于调取主机的被访记录
[root@bogon ~]# last
root pts/0 192.168.227.1 Wed Nov 8 08:54 still logged in
reboot system boot 4.18.0-348.el8.x Wed Nov 8 08:52 still running
root pts/0 192.168.227.1 Tue Nov 7 08:57 - crash (23:54)
root tty1 Tue Nov 7 08:57 - crash (23:55)
ping命令:用于测试主机之间的网络连通性,语法格式为“ping [参数] 主机地址”ping一下自己(上方红色ip)
ping命令中参数及作用
参数 | 作用 |
-c | 总共发送次数 |
-l | 指定网卡名称 |
-i | 每次间隔时间(秒) |
-W | 最长等待时间(秒) |
[root@bogon ~]# ping -c 2
192.168.227.134
PING 192.168.227.134 (192.168.227.134) 56(84) bytes of data.
64 bytes from 192.168.227.134: icmp_seq=1 ttl=64 time=0.055 ms
64 bytes from 192.168.227.134: icmp_seq=2 ttl=64 time=0.072 ms
--- 192.168.227.134 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1004ms
rtt min/avg/max/mdev = 0.048/0.049/0.050/0.001 ms
tracepath命令:用于显示数据包到达目的主机时途中经过的所有路由信息,语法格式为“tracepath [参数] 域名”使用tracepath命令追踪数据包到达目的主机时途中的所有路由信息,以分析是哪台设备出了问题:
[root@bogon ~]# tracepath www.baidu.com
1?: [LOCALHOST] pmtu 1500
1: bogon 0.284ms
1: bogon 0.246ms
2: no reply
netstat命令:用于显示如网络连接、路由表、接口状态等的网络相关信息,语法格式为“netstat [参数]”可以查看到网络状态的方方面面信息:
netstat命令中参数及作用
-a | 显示所有连接中的Socket |
-p | 显示正在使用的Socket信息 |
-t | 显示TCP协议的连接状态 |
-u | 显示UDP协议的连接状态 |
-n | 使用IP地址,不使用域名 |
-l | 仅列出正在监听的服务状态 |
-i | 显示网卡列表信息 |
-r | 显示路由表信息 |
显示详细的网络状况:
[root@bogon ~]# netstat -a
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:sunrpc 0.0.0.0:* LISTEN
tcp 0 0 bogon:domain 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN
tcp 0 0 localhost:ipp 0.0.0.0:* LISTEN
tcp 0 0 localhos:x11-ssh-offset 0.0.0.0:* LISTEN
tcp 0 172 bogon:ssh bogon:57126 ESTABLISHED
tcp6 0 0 [::]:sunrpc [::]:* LISTEN
tcp6 0 0 [::]:ssh [::]:* LISTEN
tcp6 0 0 localhost:ipp [::]:* LISTEN
tcp6 0 0 localhos:x11-ssh-offset [::]:* LISTEN
udp 0 0 bogon:domain 0.0.0.0:*
udp 0 0 0.0.0.0:bootps 0.0.0.0:*
显示网卡列表:
[root@bogon ~]# 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 3820 0 0 0 1913 0 0 0 BMRU
lo 65536 26 0 0 0 26 0 0 0 LRU
virbr0 1500 0 0 0 0 0 0 0 0 BMU
history命令:用于显示执行过的命令历史,语法格式为“history [-c]”
[root@bogon ~]# history
1 ll
2 pidof sshd
3 ifconfig
4 uname -a
5 cat /etc/redhat-release
历史命令会被保存到用户家目录中的.bash_history文件中。Linux系统中以点(.)开头的文件均代表隐藏文件
[root@bogon ~]# cat ~/.bash_history
ll
清空当前用户在本机上执行的Linux命令历史记录信息:
[root@bogon ~]# history -c
“!编码数字”的命令格式重复执行某一次的命令记录:
[root@bogon ~]# history
106 ll
[root@bogon ~]# !106
ll
total 2167564
-rw-r--r--. 1 root root 587202560 Nov 8 15:53 560
-rw-------. 1 root root 2788 Nov 9 2023 anaconda-ks.cfg
sosreport命令:用于收集系统配置及架构信息并输出诊断文档,简单收集系统的运行状态和服务配置信息,红色的部分是收集好的资料压缩文件以及校验码,将其发送给技术支持人员即可:
[root@bogon ~]# sosreport
Please note the 'sosreport' command has been deprecated in favor of the new 'sos' command, E.G. 'sos report'.
Redirecting to 'sos report '
sosreport (version 4.1)
This command will collect diagnostic and configuration information from
this CentOS system and installed applications.
An archive containing the collected information will be generated in
/var/tmp/sos.wasb39e_ and may be provided to a CentOS support
representative.
Any information provided to CentOS will be treated in accordance with
the published support policies at:
Community Website :
https://www.centos.org/
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 the case id that you are generating this report for []:
此处按下回车键进行确认
Setting up archive ...
Setting up plugins ...
...
Your sosreport has been generated and saved in:
/var/tmp/sosreport-bogon-2023-11-08-xvluhty.tar.xz
Size 15.10MiB
Owner root
sha256 83cef5b4398ad35aa4c06c3a0cbcfb2bacefc0faa2c03beb6df84220a34832d6
Please send this file to your support representative.
2.5查找定位文件命令
pwd命令:用于显示用户当前所处的工作目录
[root@bogon ~]# pwd
/root
cd命令:用于切换当前的工作路径,语法格式为“cd [参数] [目录]”“cd -”命令返回到上一次所处的目录,使用“cd ..”命令进入上级目录,以及使用“cd ~”命令切换到当前用户的家目录,使用“cd ~username”命令切换到其他用户的家目录
[root@bogon ~]# cd /etc/
[root@bogon etc]# cd -
/root
[root@bogon ~]# cd ..
[root@bogon /]# cd ~
[root@bogon ~]#
ls命令:用于显示目录中的文件信息,语法格式为“ls [参数] [文件名称]”使用ls命令的-a参数可以看到全部文件(包括隐藏文件),使用-l参数可以查看文件的属性、大小等详细信息,使用-d参数可以查看目录属性信息
[root@bogon ~]# ls -al
total 48
dr-xr-x---. 5 root root 280 Nov 8 11:06 .
dr-xr-xr-x. 17 root root 245 Nov 6 14:39 ..
-rw-------. 1 root root 2788 Nov 6 11:37 anaconda-ks.cfg
-rw-------. 1 root root 3 Nov 7 17:21 .bash_history
tree命令:用于以树状图的形式列出目录内容及结构
[root@bogon ~]# tree
.
├── anaconda-ks.cfg
└── original-ks.cfg
0 directories, 2 files
find命令:用于按照指定条件来查找文件所对应的位置,语法格式为“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 …… {}\; | 后面可跟用于进一步处理搜索结果的命令 |
获取该目录中所有以host开头的文件列表
[root@bogon ~]# find /etc -name "host*" -print
/etc/host.conf
/etc/hosts
/etc/nvme/hostnqn
/etc/nvme/hostid
/etc/avahi/hosts
/etc/hostname
搜索权限中包括SUID权限的所有文件
[root@bogon ~]# find / -perm -4000 -print
/usr/bin/fusermount
/usr/bin/chage
/usr/bin/gpasswd
/usr/bin/newgrp
/usr/bin/mount
找出所有归属于子用户的文件并复制到/root/findresults目录中
先查一下自己的子用户
[root@bogon ~]# cat /etc/passwd
centos8:x:1000:1000:centos_8:/home/centos8:/bin/bash
[root@bogon ~]# find / -user centos8 -exec cp -a {} /root/findresults/ \;
[root@bogon ~]# ll
total 20
-rw-------. 1 root root 2788 Nov 6 11:37 anaconda-ks.cfg
drwx------. 116 centos8 centos8 8192 Nov 8 14:32 findresults
-rw-------. 1 root root 2106 Nov 6 11:37 original-ks.cfg
locate命令:用于按照名称快速搜索文件所对应的位置,语法格式为“locate文件名称”使用locate命令时,先使用updatedb命令生成一个索引库文件,这个库文件的名字是/var/lib/mlocate/mlocate.db,后续在使用locate命令搜索文件时就是在该库中进行查找操作
[root@bogon ~]# updatedb
[root@bogon ~]# ll /var/lib/mlocate/mlocate.db
-rw-r-----. 1 root slocate 3764716 Nov 8 14:48 /var/lib/mlocate/mlocate.db
[root@bogon ~]# locate whereis
/usr/bin/whereis
/usr/share/bash-completion/completions/whereis
/usr/share/man/man1/whereis.1.gz
whereis命令:用于按照名称快速搜索二进制程序(命令)、源代码以及帮助文件所对应的位置,语法格式为“whereis命令名称”
[root@bogon ~]# whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz
which命令:用于按照指定名称快速搜索二进制程序(命令)所对应的位置,语法格式为“which命令名称”主要为了找到命令本身所在的路径
[root@bogon ~]# which locate
/usr/bin/locate
[root@bogon ~]# which whereis
/usr/bin/whereis
2.6文本文件编辑命令
cat命令:用于查看内容较少纯文本文件,语法格式为“cat [参数] 文件名称”-n参数表示展示行数
[root@bogon ~]# cat -n anaconda-ks.cfg
1 #version=RHEL8
2 # Reboot after installation
3 reboot
4 # Use graphical install
5 graphical
more命令:用于查看内容较多纯文本文件,语法格式为“more [参数] 文件名称”more命令会在最下面使用百分比的形式来提示您已经阅读了多少内容;还可以使用空格键或回车键向下翻页
[root@bogon ~]# more anaconda-ks.cfg
#version=RHEL8
# Reboot after installation
reboot
# Use graphical install
graphical
...
--More--(60%)
head命令:用于查看纯文本文件的前N行,语法格式为“head [参数] 文件名称”
查看文本中前3行的内容:
[root@bogon ~]# head -n 3 anaconda-ks.cfg
#version=RHEL8
# Reboot after installation
reboot
tail命令:用于查看纯文本文件的后N行或持续刷新文件的最新内容,语法格式为“tail [参数] 文件名称”
查看文本中后3行的内容(最新):
[root@bogon ~]# tail -n 3 anaconda-ks.cfg
%addon com_redhat_kdump --enable --reserve-mb='auto'
%end
持续刷新一个文件的内容:
[root@bogon ~]# tail -f /var/log/messages
Nov 8 14:44:42 bogon systemd[1]: Started Network Manager Script Dispatcher Service.
Nov 8 14:44:42 bogon systemd[1]: systemd-tmpfiles-clean.service: Succeeded.
Nov 8 14:44:42 bogon systemd[1]: Started Cleanup of Temporary Directories.
tr命令:用于替换文本内容中的字符,语法格式为“tr [原始字符] [目标字符]”
把某个文本内容中的英文全部替换为大写:
[root@bogon ~]# cat anaconda-ks.cfg | tr [a-z] [A-Z]
wc命令:用于统计指定文本文件的行数、字数或字节数,语法格式为“wc [参数] 文件名称”
wc命令中参数及作用
参数 | 作用 |
-l | 只显示行数 |
-w | 只显示单词数 |
-c | 只显示字节数 |
统计当前系统中有多少个用户
[root@bogon ~]# wc -l /etc/passwd
47 /etc/passwd
stat命令:用于查看文件的具体存储细节和时间等信息,语法格式为“stat文件名称”Linux系统中的文件包含3种时间状态,分别是Access Time(内容最后一次被访问的时间,简称为Atime),Modify Time(内容最后一次被修改的时间,简称为Mtime)以及Change Time(文件属性最后一次被修改的时间,简称为Ctime)
使用state命令查看文件的这3种时间状态信息:
[root@bogon ~]# stat anaconda-ks.cfg
File: anaconda-ks.cfg
Size: 2788 Blocks: 8 IO Block: 4096 regular file
Device: 10303h/66307d Inode: 35912821 Links: 1
Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:admin_home_t:s0
Access: 2023-11-08 11:05:37.154849436 +0800
Modify: 2023-11-06 11:37:22.053500992 +0800
Change: 2023-11-06 11:37:22.053500992 +0800
Birth: 2023-11-06 11:37:21.963500146 +0800
grep命令:用于按行提取文本内容,语法格式为“grep [参数] 文件名称”
-n参数用来显示搜索到的信息的行号
-v参数用于反选信息(即没有包含关键词的所有信息行)
grep命令中参数及其作用
参数 | 作用 |
-b | 将可执行文件(binary)当作文本文件(text)来搜索 |
-c | 仅显示找到的行数 |
-i | 忽略大小写 |
-n | 显示行号 |
-v | 反向选择——仅列出没有“关键词”的行。 |
使用grep命令查找出当前系统中不允许登录系统的所有用户的信息:
[root@bogon ~]# 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
cut命令:用于按“列”提取文本内容,语法格式为“cut [参数] 文件名称”
提取出passwd文件中的用户名信息,即提取以冒号(:)为间隔符号的第一列内容:
[root@bogon ~]# cut -d : -f 1 /etc/passwd
root
bin
daemon
diff命令:用于比较多个文件之间内容的差异,语法格式为“diff [参数] 文件名称A 文件名称B”使用--brief参数来确认两个文件是否相同,使用-c参数来详细比较出多个文件的差异之处
做俩文件,复制一样的内容,稍微改一行
[root@bogon ~]# vim test1
[root@bogon ~]# vim test2
[root@bogon ~]# diff --brief test1 test2
Files test1 and test2 differ
[root@bogon ~]# diff -c test1 test2
*** test1 2023-11-08 15:24:51.300664734 +0800
--- test2 2023-11-08 15:25:20.331739086 +0800
***************
*** 2,8 ****
bin
daemon
adm
! lp
sync
shutdown
halt
--- 2,8 ----
bin
daemon
adm
! LP
sync
shutdown
halt
uniq命令:用于去除文本中连续的重复行,语法格式为“uniq [参数] 文件名称”
[root@bogon ~]# uniq test2
root
bin
daemon
sort命令:用于对文本内容进行再排序,语法格式为“sort [参数] 文件名称”
sort命令中参数及作用
参数 | 作用 |
-f | 忽略大小写 |
-b | 忽略缩进与空格 |
-n | 以数值型排序 |
-r | 反向排序 |
-u | 去除重复行 |
-t | 指定间隔符 |
-k | 设置字段范围 |
默认会按照字母顺序进行排序:
[root@bogon ~]# sort test1
-u参数进行去重操作:
[root@bogon ~]# sort -u test1
-n参数进行数字排序操作:
[root@bogon ~]# sort -n test1
用-t参数指定间隔符:,用-k参数指定第3列,用-n参数进行数字排序/etc/passwd文件:
[root@bogon ~]# sort -t : -k 3 -n /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
2.7文件目录管理命令
touch命令:用于创建空白文件或设置文件的时间,语法格式为“touch [参数] 文件名称”
touch命令中参数及作用
参数 | 作用 |
-a | 仅修改“读取时间”(atime) |
-m | 仅修改“修改时间”(mtime) |
-d | 同时修改atime与mtime |
用touch命令把修改后的文件时间设置成修改之前的时间(隐藏文件修改事实):
[root@bogon ~]# touch -d "2023-11-09 15:44" anaconda-ks.cfg
[root@bogon ~]# ls -l anaconda-ks.cfg
-rw-------. 1 root root 2788 Nov 9 2023 anaconda-ks.cfg
mkdir命令:用于创建空白的目录,语法格式为“mkdir [参数] 目录名称”
-p参数来递归创建出具有嵌套层叠关系的文件目录:
[root@bogon ~]# mkdir -p /a/b/c
[root@bogon ~]# tree /a
/a
└── b
└── c
2 directories, 0 files
cp命令:用于复制文件或目录,语法格式为“cp [参数] 源文件名称 目标文件名称”目标文件是目录,则会把源文件复制到该目录中;目标文件也是普通文件,则会询问是否要覆盖它;目标文件不存在,则执行正常的复制操作
cp命令中参数及作用
参数 | 作用 |
-p | 保留原始文件的属性 |
-d | 若对象为“链接文件”,则保留该“链接文件”的属性 |
-r | 递归持续复制(用于目录) |
-i | 若目标文件存在则询问是否覆盖 |
-a | 相当于-pdr(p、d、r为上述参数) |
[root@bogon ~]# ll test1
-rw-r--r--. 1 root root 48 Nov 8 15:24 test1
[root@bogon ~]# cp -a test1 test2
cp: overwrite 'test2'?
[root@bogon ~]# ll test2
-rw-r--r--. 1 root root 48 Nov 8 15:25 test2
mv命令:用于剪切或重命名文件,语法格式为“mv [参数] 源文件名称 目标文件名称”默认会把源文件删除,只保留剪切后的文件。如果在同一个目录中将某个文件剪切后还粘贴到当前目录下,其实也就是对该文件进行了重命名操作:
[root@bogon ~]# mv test1 test3
[root@bogon ~]# ll test3
-rw-r--r--. 1 root root 48 Nov 8 15:24 test3
rm命令:用于删除文件或目录,语法格式为“rm [参数] 文件 名称”
rm命令中参数及作用
参数 | 作用 |
-f | 强制执行 |
-i | 删除前询问 |
-r | 删除目录 |
-v | 显示过程 |
rm命令后-f参数来强制删除。-r参数删除目录:
[root@bogon ~]# rm -rf test3
[root@bogon ~]# ll test3
ls: cannot access 'test3': No such file or directory
dd命令:用于按照指定大小和个数的数据块来复制文件或转换文件,语法格式为“dd if=参数值of=参数值count=参数值bs=参数值”
dd命令中参数及作用
参数 | 作用 |
if | 输入的文件名称 |
of | 输出的文件名称 |
bs | 设置每个“块”的大小 |
count | 设置要复制“块”的个数 |
dd命令从/dev/zero设备文件中取出一个大小为560MB的数据块,然后保存成名为560的文件:
[root@bogon ~]# dd if=/dev/zero of=560 count=1 bs=560M
1+0 records in
1+0 records out
587202560 bytes (587 MB, 560 MiB) copied, 3.56762 s, 165 MB/s
[root@bogon ~]# ls -hl 560
-rw-r--r--. 1 root root 560M Nov 8 15:53 560
使用dd命令来压制出光盘镜像文件(首先确保虚拟机设置设备连接且使用iso映像文件):
(时间太长我直接ctrl+c终止了,需要打包的可以试试应该是10.1G)
[root@bogon ~]# dd if=/dev/cdrom of=RHEL-server-8.5.iso
3188193+0 records in
3188192+0 records out
1632354304 bytes (1.6 GB, 1.5 GiB) copied, 541.769 s, 3.0 MB/s
file命令:用于查看文件的类型,语法格式为“file文件名称”
使用file命令来查看文件类型:
[root@bogon ~]# file anaconda-ks.cfg
anaconda-ks.cfg: ASCII text
tar命令:用于对文件进行打包压缩或解压,语法格式为“tar参数 文件名称”Linux系统中,主要使用的是.tar、.tar.gz或.tar.bz2格式
tar命令中参数及作用
参数 | 作用 |
-c | 创建压缩文件 |
-x | 解开压缩文件 |
-t | 查看压缩包内有哪些文件 |
-z | 用Gzip压缩或解压 |
-j | 用bzip2压缩或解压 |
-v | 显示压缩或解压的过程 |
-f | 目标文件名 |
-p | 保留原始的权限与属性 |
-P | 使用绝对路径来压缩 |
-C | 指定解压到的目录 |
“tar -czvf压缩包名称.tar.gz要打包的目录”命令把指定的文件进行打包压缩;解压命令为“tar -xzvf压缩包名称.tar.gz”
[root@bogon ~]# tar -zcvf test.tar.gz test2
test2
[root@bogon ~]# tar -zxvf test.tar.gz
test2
上一章把多用户图形改成了文本,有好多人不适应,所以我们也可以通过软链换回来,命令如下:
[root@bogon ~]# ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target
二、巩固练习
1.在RHEL 8及众多的Linux系统中,最常使用的Shell终端是什么?
答:Bash解释器。
2.执行Linux系统命令时,添加参数的目的是什么?
答:为了让Linux系统命令能够更贴合用户的实际需求进行工作。
3.Linux系统命令、命令参数及命令对象之间,应该使用什么来间隔?
答:应该使用一个或多个空格进行间隔。
4.请写出用echo命令把SHELL变量值输出到屏幕终端的命令。
答:echo $SHELL。
5.简述Linux系统中5种进程的名称及含义。
答:在Linux系统中,有下面5种进程名称(还包括高优先级(<)、低优先级(N)、被锁进内存(L)、包含子进程(s)多线程(l)5种补充形式)
R(运行):进程正在运行或在运行队列中等待。
S(中断):进程处于休眠中,当某个条件形成后或者接收到信号时,则脱离该状态。
D(不可中断):进程不响应系统异步信号,即便用kill命令也不能将其中断。
Z(僵死):进程已经终止,但进程描述符依然存在, 直到父进程调用wait4()系统函数后将进程释放。
T(停止):进程收到停止信号后停止运行。
6.请尝试使用Linux系统命令关闭PID为5529的服务进程。
答:执行kill 5529
命令;若知道服务的名称,则可以使用killall命令进行关闭。
7.使用ifconfig命令查看网络状态信息时,需要重点查看的4项信息分别是什么?
答:这4项重要的信息分别是网卡名称、IP地址、网卡物理地址以及RX/TX的收发流量数据大小。
8.使用uptime命令查看系统负载时,对应的负载数值如果是0.91、0.56、0.32,那么最近15分钟内负载压力最大的是哪个时间段?
答:通过负载数值可以看出,最近1分钟内的负载压力是最大的。
9.使用history命令查看历史命令的执行记录时,命令前面的编码数字除了排序外还有什么用处?
答:还可以用“!编码数字”的命令格式重复执行某一次的命令记录,从而避免了重复输入较长命令的麻烦。
10.若想查看的文件具有较长的内容,那么使用cat、more、head、tail中的哪个命令最合适?
答:文件内容较长,使用more命令;内容较少使用cat命令。
11.在使用mkdir命令创建有嵌套关系的目录时,应该加上什么参数呢?
答:加上-p递归迭代参数,自动化地创建有嵌套关系的目录。
12.在使用rm命令删除文件或目录时,可使用哪个参数来避免二次确认呢?
答:可使用-f参数,这样即可无须二次确认。
13.若有一个名为backup.tar.gz的压缩包文件,那么解压的命令应该是什么?
答:应该用tar命令进行解压,执行tar -zxvf backup.tar.gz命令
14.使用grep命令对某个文件进行关键词搜索时,若想要进行文件内容反选,应使用什么参数?
答:可使用-v参数来进行匹配内容的反向选择,即显示出不包含某个关键词的行
三、跋文
如果想上手操作的同学们可以通过阿里云ecs服务器免费试用参与或低价购买专属于自己的服务器入口如下↓↓↓↓↓