《Lunix就该这么学》学习记录-02

261 阅读17分钟

RPM (红帽软件包管理器)

  • 作用:降低在Linux中安装软件的难度
  • 原理:源代码+安装规则

RPM(redhat package manager)机制则为解决这些问题而设计的。RPM有点像Windows系统中的控制面板,会建立统一的数据库文件,详细记录软件信息并能够自动分析依赖关系。目前RPM的优势已经被公众所认可,使用范围也已不局限在红帽系统中了。

Yum 软件仓库

  • 技术目的:降低软件安装难度和复杂度
  • 原理:根据用户的要求分析出所需软件包及其相关的依赖关系,然后自动从服务器下载软件包并安装到系统

Systemd 初始化进程

  • RHEL5/6 init
  • RHEL7 systemd

systemctl 管理服务的启动、重启、停止、重载、查看状态等常用命令

服务名称 作用
systemctl start 运行服务
systemctl restart 重启服务
systemctl stop 停止服务
systemctl enable 加入到启动项
systemctl status 查看服务状态

Shell

用户与Linux系统的交互

  • 组成:命令名称 [命令参数] [命令对象]

注意,命令名称、命令参数、命令对象之间请用空格键分隔 命令参数可以用长格式(完整的选项名称),也可以用短格式(单个字母的缩写),两者分别用--与-作为前缀。--单词(--list --all),-字母(-l -a)

  • 命令参数合并规则:长格式与长格式不能合并,长格式与短格式不能合并,短格式可以与短格式可以合并(-la或-al)

常用系统工作命令

ehco 命令

  • 作用:在终端输出字符串或变量提取后的值
  • 格式:echo [字符串 | $变量]

date 命令

  • 作用:显示及设置系统的时间或日期
  • 格式:date [选项] [+指定的格式]
  • 输出年: date "+%Y"
  • 输出年月日: date "+%Y-%m-%d"
  • 输出分钟:date "+%M"
  • 注意:引号英文格式、命令名称与命令参数之间必须有空格

reboot 命令

  • 作用:重启系统
  • 格式:reboot

poweroff 命令

  • 作用:关闭系统
  • 格式:poweroff

wget 命令

  • 作用:在终端中下载网络文件
  • 格式:wget [参数] 下载地址
参数名称 作用
-b 后台下载模式
-P 下载到指定目录
-t 最大尝试次数
-c 断点续传
-p 下载页面内所有资源,包括图片、视频等
-r 递归下载

ps 命令

  • 作用:查看系统中的进程状态
  • 格式:ps [参数]

系统进程有五个状态

  • R(运行):进程正在运行或在运行队列中等待
  • S(中断):进程处于休眠中,当某个条件形成后或者接收到信号时,则脱离该状态(sleeping)
  • D(不可中断):进程不响应系统异步信号,即便用kill命令也不能将其中断(kill -9可杀死)
  • Z(僵死):进程已经终止,但进程描述符依然存在, 直到父进程调用wait4()系统函数后将进程释放
  • T(停止):进程收到停止信号后停止运行
参数名称 作用
-a 显示所有进程(包括其他用户的进程)
-u 用户以及其他详细信息
-x 显示没有控制终端的进程

top 命令

  • 作用:动态地监视进程活动与系统负载等信息
  • 格式:top
  • top 命令详解

例:
top - 01:06:48 up 1:22, 1 user, load average: 0.06, 0.60, 0.48
Tasks: 29 total, 1 running, 28 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.3% us, 1.0% sy, 0.0% ni, 98.7% id, 0.0% wa, 0.0% hi, 0.0% si
Mem: 191272k total, 173656k used, 17616k free, 22052k buffers
Swap: 192772k total, 0k used, 192772k free, 123988k cached

  1. 第一行:任务队列信息
内容 含义
01:06:48 表示当前时间
up 1:22 表示系统运行时间 格式:分
1 user 终端数量
load average: 0.06, 0.60, 0.48 系统负载,即任务队列的平均长度。三个数值分别为最近 1分钟、5分钟、15分钟前到现在的平均值。
  1. 第二、三行:进程和CPU的信息
内容 含义
29 total 进程总数
1 running 正在运行的进程数
28 sleeping 睡眠的进程数
0 stopped 停止的进程数
0 zombie 僵尸进程数
0.3% us 运行(未调整优先级的) 用户空间占用CPU百分比
1.0% sy 运行内核空间占用CPU百分比
0.0% ni 运行已调整优先级的用户进程占用CPU百分比
98.7% id 空闲CPU百分比
0.0% wa 等待输入输出的CPU时间百分比
0.0% hi 硬中断(Hardware IRQ)占用CPU的百分比
0.0% si 软中断(Software Interrupts)占用CPU的百分比

3.第四行:内存

内容 含义
191272k total 全部可用内存
173656k used 已使用内存
17616k free 空闲内存
22052k buffers 缓冲内存
  1. 第五行:SWAP(交换空间)
内容 含义
192772k total 交换区总量
0k used 已使用的交换区总量
192772k free 空闲交换区总量
123988k cached 缓冲的交换区总量
  • 上述最后提到的缓冲的交换区总量,这里解释一下,所谓缓冲的交换区总量,即内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,该数值即为这些内容已存在于内存中的交换区的大小。相应的内存再次被换出时可不必再对交换区写入。
  • 计算可用内存数有一个近似的公式: 第四行的free + 第四行的buffers + 第五行的cached
  • 对于内存监控,在top里我们要时刻监控第五行swap交换分区的used,如果这个数值在不断的变化,说明内核在不断进行内存和swap的数据交换,这是真正的内存不够用了。
  1. 第六行:空行
  2. 第七行及以下:各进程(任务)的状态监控
列名 含义
PID 进程ID
PPID 父进程ID
RUSER Real user name
UID 进程所有者的用户ID
USER 进程所有者的用户名
GROUP 进程所有者所在的组名
TTY 启动进程的终端名。不是从终端启动的进程则显示为?
PR 优先级
NI nice值。负值表示高优先级,正值表示低优先级
P 最后使用的CPU,仅在多CPU环境下有意义
%CPU 上次更新到现在的CPU时间占用百分比
TIME 进程使用的CPU实际总计,单位秒
TIME+ 进程使用的CPU实际总计,单位1/100秒
%MEM 进程使用的物理内存百分比
VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
SWAP 进程使用的虚拟内存中,被换出的大小,单位kb
RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
CODE 可执行代码占用的物理内存大小,单位kb
DATA 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
SHR 共享内存大小,单位kb
nFLT 页面错误次数
nDRT 最后一次写入到现在,被修改过的页面数
S 进程状态
COMMAND 命令名/命令行
WCHAN 若该进程在睡眠,则显示睡眠中的系统函数名
Flags 任务标志

pidof 命令

  • 作用:查询某个指定服务进程的PID值
  • 格式:pidof [参数] [服务名称]
参数名称 作用
-s 仅返回一个进程号
-c 仅显示具有相同“root”目录的进程
-x 显示由脚本开启的进程
-o 指定不显示的进程id

kill 命令

  • 作用:终止某个指定PID的服务进程
  • 格式:kill [参数] [进程PID]
参数名称 作用

killall 命令

  • 作用:终止某个指定名称的服务所对应的全部进程
  • 格式:killall [参数] [服务名称]
参数名称 作用

系统状态检测命令

ifconfig 命令

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

上图中红框内容依次为:网卡名称、网卡IP地址、网卡子网掩码地址、网卡MAC地址、接收流量大小、发送流量大小

如果RX较大,则可能服务器被攻击;如TX较大,则需可能有较大文件被下载

uname 命令

  • 作用:查看系统内核与系统版本等信息
  • 格式:uname [-a]

uname -a 输出内容分析
[root@linuxprobe ~]# uname -a Linux linuxprobe.com 3.10.0-123.el7.x86_64 #1 SMP Mon May 5 11:16:57 EDT 2017 x86_64 x86_64 x86_64 GNU/Linux

内容 含义
Linux 内核名称
linuxprobe.com 主机名
3.10.0-123.el7.x86_64 内核发行版本
#1 SMP Mon May 5 11:16:57 EDT 2017 内核编译日期
x86_64 CPU名
x86_64 CPU体系结构
x86_64 硬件平台
GNU/Linux 操作系统名称

uptime 命令

  • 作用:查看系统的负载信息
  • 格式:uptime

类似于top命令的第一行输出,相比top命令更加轻量级
uptime 输出内容分析
[root@linuxprobe ~]# uptime 22:49:55 up 10 min, 2 users, load average: 0.01, 0.19, 0.18

内容 含义
22:49:55 当前系统时间
up 10 min 系统已运行时间
2 users 启用终端数量
load average: 0.01, 0.19, 0.18 平均负载值信息(最近1分钟、5分钟、15分钟)

负载值越低越好,尽量不要长期超过1,在生产环境中不要超过5

free命令

  • 作用:显示当前系统中内存使用量信息
  • 格式:free [-h]

含义
total 内存总量
used 已用量
free 未被任何应用使用的真实空闲内存
shared 进程共享的内存量
buff/cache 缓冲、缓存区内存数,缓存在应用之中
available 真正剩余的可被程序应用的内存数

who 命令

  • 作用:查看当前登入主机的用户终端信息
  • 格式:who [参数]

last 命令

  • 作用:查看所有系统的登录记录
  • 格式:last [参数]

使用last命令可以查看本机的登录记录。但是,由于这些信息都是以日志文件的形式保存在系统中,因此黑客可以很容易地对内容进行篡改。千万不要单纯以该命令的输出信息而判断系统有无被恶意入侵!

history 命令

  • 作用:显示历史执行过的命令
  • 格式:history [-c]

执行history命令能显示出当前用户在本地计算机中执行过的最近1000条命令记录。如果觉得1000不够用,还可以自定义/etc/profile文件中的HISTSIZE变量值。在使用history命令时,如果使用-c参数则会清空所有的命令历史记录。还可以使用“!编码数字”(中间无空格)的方式来重复执行某一次的命令。

sosreport 命令

  • 作用:收集系统配置及架构信息并输出诊断文档
  • 格式:sosreport

当Linux系统出现故障需要联系技术支持人员时,大多数时候都要先使用这个命令来简单收集系统的运行状态和服务配置信息,以便让技术支持人员能够远程解决一些小问题,亦或让他们能提前了解某些复杂问题

工作目录切换命令

pwd 命令

  • 作用:用于显示用户当前所处的工作目录
  • 格式:pwd [选项]

cd 命令

  • 作用:用于切换工作路径
  • 格式:cd [目录名称]
内容 含义
cd ~ 或 cd 切换到当前用户的家目录(主目录)
cd ~username 切换到"username"的家目录
cd .. 切换到当前目录的上一级目录
cd - 返回到上一次所处目录

ls 命令

  • 作用:用于显示目录中的文件信息
  • 格式:ls [选项] [文件]
内容 含义
ls -a 查看当前目录下所有文件,即包含所有以“.”开头的隐藏文件
ls -l 查看当前目录下文件的详细信息
ls -al 查看当前目录下的所有文件及其详细信息
ls -ld 查看当前目录的权限与属性信息

文本文件编辑命令

cat 命令

  • 作用:用于查看纯文本文件(内容较少的)
  • 格式:cat [选项] [文件]

使用 cat -n [文件] 可在查看文本内容的同时显示行号。

more 命令

  • 作用:用于查看纯文本文件(内容较多的)
  • 格式:more [选项] [文件]

more 命令会在最下面显示阅读内容的百分比,同时可使用回车键换行或使用空格键翻页。

head 命令

  • 作用:用于查看纯文本文档的前N行
  • 格式:head [选项] [文件]

head -n 行数 文件名

tail 命令

  • 作用:用于查看纯文本文档的后N行
  • 格式:head [选项] [文件]

tail -n 行数 文件名
tail 命令最强悍的功能是可以持续刷新一个文件的内容,当想要实时查看实时的日志文件时,可使用的命令格式为“tail -f 文件名”

tr 命令

  • 作用:用于替换文本文件中的字符
  • 格式:tr [原始字符] [目标字符]

例如,把某个文本内容中的英文全部替换为大写:

wc 命令

  • 作用:用于统计指定文本的行数、字数、字节数
  • 格式:wc [参数] 文本
参数 含义
-l 显示行数
-w 显示单词数
-c 显示字节数(每个中文占用2个字节)

stat 命令

  • 作用:用于查看文件的具体存储信息和时间等信息
  • 格式:stat 文件名称

stat命令可以用于查看文件的存储信息和时间等信息,命令stat anaconda-ks.cfg会显示出文件的三种时间状态(已加粗):Access、Modify、Change。

  • Access:最后一次查看文件内容的时间
  • Modify:最后一次修改文件内容的时间
  • Change:最后一次修改文件属性的时间(如修改 所有者/者名称、所有者/组的权限、文件所在目录等)

cut 命令

  • 作用:用于按“列”提取文本字符
  • 格式:cut [参数] 文本

passwd在保存用户数据信息时,用户信息的每一项值之间是采用冒号来间隔的,接下来我们使用下述命令尝试提取出passwd文件中的用户名信息,即提取以冒号(:)为间隔符号的第一列内容:

diff命令

  • 作用:用于比较多个文本文件的差异
  • 格式:diff [参数] 文件1 文件2

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

使用带有-c参数的diff命令来描述文件内容具体的不同(!即为差异项)

文件目录管理命令

touch 命令

  • 作用:用于创建空白文件或设置文件的时间
  • 格式:touch [选项] 文件

创建空白文件:touch helloword
设置文件时间:touch -d “22:22” helloword

参数 含义
-a 仅修改读取时间(atime)
-m 仅修改“修改时间”(mtime)
-d 同时修改atime与mtime

ls -l 看到的是文件的修改时间,故如果使用touch -a 命令修改文件袋读取时间后,是无法通过ls -l 命令来查看到变化的。需通过stat 命令查看。
通过 touch 命令的用处可以发现,我们不能仅仅简单通过观察文件的修改时间未改变就判断文件没有被修改过,有可能是被修改后,又使用了 touch 命令将文件修改时间调整了。

mkdir 命令

  • 作用:创建空白目录
  • 格式:mkdir [选项] 目录

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

cp 命令

  • 作用:用于复制文件或目录
  • 格式:cp [选项] 源文件 目标文件
参数 含义
-p 保留原文件属性
-d 若对象为“链接文件”,则保留该“链接文件”的属性(如所属用户/用户组等信息)
-r 递归持续复制(用于目录)
-i 若目标文件存在则询问是否覆盖(cp默认等于cp -i)
-a 相当于-pdr

mv 命令

  • 作用:用于剪切文件或对文件重命名
  • 格式:mv [选项] 源文件 [目标路径|目标文件名]

如果在同一个目录中对文件进行剪切操作,其实就是对文件进行重命名。
对目录进行剪切,不需要添加 -r 参数。

rm 命令

  • 作用:用于删除文件或目录
  • 格式:rm [选项] 文件

rm 文件 命令执行时,系统会默认询问是否要执行删除操作,如不想看到这种确认信息,可使用 rm -f 命令来强制删除。如果想删除一个目录,则添加 -r 参数即可,同 cp 命令。

dd 命令

  • 作用:用于按照指定大小和个数的数据块来复制文件或转换文件
  • 格式:dd [参数]
参数 含义
if 输入文件名称
of 输出文件名称
bs 设置每个“块”的大小
count 设置要复制“块”的个数

file 命令

  • 作用:用于查看文件类型
  • 格式:file 文件名

打包压缩与搜索命令

tar 命令

  • 作用:用于对文件进行打包压缩或解压
  • 格式:tar [选项] [文件]
参数 含义
-c 创建压缩文件
-x 解压压缩文件
-t 查看压缩包内有哪些文件
-z 用Gzip压缩或解压
-j 用bzip2压缩或解压
-v 显示压缩或解压的过程
-f 目标文件名
-P 保留原始的权限与属性
-p 使用绝对路径来压缩
-C 指定解压到的目录

压缩:

  • tar czvf backup.tar.gz 目录名称
  • tar cjvf backup.tar.bz2 目录名称

解压:

  • tar xzvf backup.tar.gz -C 解压目录
  • tar xjvf backup.tar.bz2 -C 解压目录

grep 命令

  • 作用:用于在文本中执行关键词搜索,并显示匹配结果
  • 格式:grep [关键词] 文件
参数 含义
-b 可执行文件(binary)按照文本文件(txt)来搜索
-n 显示行数
-c 仅显示找到的行数
-i 忽略大小写
-v 反选:仅列出没有“关键词”的行

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

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 …… {}; 后面可跟用于进一步处理搜索结果的命令

若需要在搜索时匹配某个文件或目录的完整路径,而不仅仅是匹配文件名。可以使用 -path 或 -ipath 选项。