快速入门Linux操作系统(二)
目录
前言
一、命令历史,补全和正则表达式
1、命令历史
2、命令补全
3、正则表达式
二、目录和文件的权限
1、修改目录和文件的拥有者
2、权限的标志位
3、文件的权限
4、目录的权限
5、设置权限(八进制语法)
6、设置权限(符号模式)
三、Linux文件内容操作指南
1. cat - 完整显示文件内容
2. less - 交互式文件查看器(推荐)
3. more - 分页显示文件内容
4. wc - 文件统计
5. grep - 内容搜索
6. head - 查看文件头部
7. tail - 查看文件尾部
8. 文件比较与处理
9、实用技巧组合
四、管道
五、链接
六、软件包的安装与下载
七、打包和压缩
1、zip命令
八、进程
方法一:
方法二:
进程信息字段说明
进程状态 (STAT) 详解
九、性能分析top
1、输出结果说明
2、top常用的选项
3、top交互命令
结语
前言
读者朋友们大家好,本文衔接快速入门Linux操作系统(一),继续学习如何快速入门Linux操作系统,那么话不多说,让我们一起开始学习吧。
一、命令历史,补全和正则表达式
1、命令历史
命令历史记录存储在用户主目录的
.bash_history
文件中。通过键盘的上、下方向键可以快速浏览并调用之前执行过的命令。如下图:
2、命令补全
使用
ls
、cd
、vi
等命令时,输入部分名称后按Tab
键可自动补全文件名或路径。如果存在多个匹配项,按两次
Tab
键会列出所有可能的补全选项。
在主目录里有两个demo文件,后缀不一样,在补全的时候会出现如上图的现象,需要再往后写几位区分不同后便可以继续补全直到为理想内容。
3、正则表达式
书写目录或文件名时,可以用星号*匹配多个字符,用问号?匹配一个字符。
这是再include目录里查看了所有以.h结尾的文件。
这是以li开头并且后面有两个可替换字符并以.h结尾的文件,只有一个link.h
二、目录和文件的权限
1、修改目录和文件的拥有者
用root用户执行:
chown -R 用户:组 目录和文件列表
-R选项表示连同各子目录一起修改。
注意这里的aaa.txt文件,属于用户mysql dba组,接下来将切换root用户修改他的拥有者
[root@iZwz939wtz3scsnsxplgemZ ~]# chown root:root /home/mysql/aaa.txt
输入上述指令之后再次查看mysql里的文件,就会变成如下图所示的模样
这里abcd.txt也发生了变化是因为之前再这两个文件之间建立了软连接,这个之后再讲,不影响观察现象。
2、权限的标志位
这个再文件和目录操作那一部分讲过
3、文件的权限
1)r:表示具有读取文件内容的权限。
2)w:表示具有修改文件内容的权限,同时需要有r权限。注意,如果要删除文件,需要有目录的w权限。
3)x:表示具有执行文件的权限,同时需要有r权限。注意,文件是否能真的执行,还要由文件本身决定。
4、目录的权限
1)x:表示可以进入目录。
2)r:表示可以浏览目录中有哪些子目录和文件,同时需要有x权限。
3)w:表示可以在目录中新增、删除、移动子目录和文件,同时需要有x权限。
5、设置权限(八进制语法)
权限也可以用八进制的数字表示:r的值为4,w的值为2,x的值为1。
6 rw- 3 -wx 2 -w- 1 --x 0 ---下图更容易理解
使用来修改文件权限
chmod -R 三位的八进制权限 目录和文件列表
-R表示连同子目录一起修改
chmod -R 754 /home/mysql/aaa.txt
我们可以发现aaa.txt权限被修改了,并且可以运行了,这也正是权限修改的结果
6、设置权限(符号模式)
chmod -R whooperatorpermission 目录和文件列表
-R选项表示连同各子目录一起设置。
1)who的说明
who
用户类型
说明
u
user
文件的所有者
g
group
文件所有者的组
o
others
其它用户
a
all
全部用户,相当于ugo
2)operator的说明
operator
说明
+
增加权限
-
取消权限
=
重新设置权限
举例:
chmod -R u-x /home/mysql/aaa.txt
我们可以清楚的看到权限改变的结果,这种方式比八进制的方法更加直观。
三、Linux文件内容操作指南
1. cat
- 完整显示文件内容
cat filename.txt
-
特点:一次性显示文件全部内容
-
适用场景:查看小型文本文件(<100行)
-
常用选项:
-
-n
:显示行号 -
-b
:只对非空行编号
-
2. less
- 交互式文件查看器(推荐)
less filename.log
-
导航操作:
-
空格键:向下翻页
-
b
:向上翻页 -
j
/k
:向下/上移动一行 -
/pattern
:搜索内容 -
q
:退出
-
-
优势:支持大文件快速浏览,不会加载整个文件到内存
3. more
- 分页显示文件内容
more filename.txt
-
基本操作:
-
空格键:下一页
-
b
:上一页 -
q
:退出
-
-
与less区别:功能较简单,不支持回溯查看
4. wc
- 文件统计
wc filename.txt
-
输出格式:
行数 单词数 字节数 文件名
-
常用选项:
-
-l
:仅统计行数 -
-w
:仅统计单词数 -
-c
:仅统计字节数
-
5. grep
- 内容搜索
grep "error" *.log
-
高级用法:
-
-i
:忽略大小写 -
-v
:反向匹配(显示不包含模式的行) -
-n
:显示匹配行号 -
-r
:递归目录搜索 -
-A 3
:显示匹配行及后3行 -
-B 2
:显示匹配行及前2行
-
6. head
- 查看文件头部
head -n 20 filename.log
-
默认:显示前10行
-
实用技巧:
head -c 100 file # 显示前100个字节
7. tail
- 查看文件尾部
tail -n 15 access.log
实时监控:
tail -f application.log # 实时跟踪日志更新
高级用法:
tail -F logfile # 跟踪可能被轮转的日志文件
8. 文件比较与处理
操作 | 命令示例 | 说明 |
---|---|---|
比较差异 | diff file1 file2 | 显示文件差异 |
排序 | sort data.txt | 按行排序 |
去重 | uniq sorted.txt | 去除连续重复行 |
合并 | cat file1 file2 > merged | 文件合并 |
拆分 | split -l 100 bigfile | 按行数拆分文件 |
9、实用技巧组合
统计日志中错误出现次数:
grep -c "ERROR" app.log监控日志中的新增错误:
tail -f app.log | grep --color "ERROR"
分析访问量最高的IP:
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -10
快速查看配置文件(跳过注释和空行):
grep -vE '^#|^$' /etc/nginx/nginx.conf
四、管道
管道是一种强大的进程间通信机制,用竖线符号 `|` 表示。它允许将一个命令的输出直接作为另一个命令的输入,而无需创建临时文件。
基本语法:
command1 | command2 | command3
示例:
查看/etc目录内容并分页显示
ls -l /etc | less
统计当前目录下文件数量
ls | wc -l
查找包含特定文本的文件
grep "error" /var/log/syslog | less
查找特定进程并统计数量
ps aux | grep nginx | wc -l
五、链接
Linux链接分硬链接和软链接(符号链接)。
硬链接可以简单的理解为文件的别名,只能为文件创建硬链接,不能为目录创建硬链接。
ln 文件名 链接名
硬链接不能跨文件系统。
硬链接允许一个文件拥有多个有效文件名,如果为重要文件建立硬链接,可以防止“误删除”,只有当删除最后一个链接的时候,文件才会被真正的删除。
软链接类似Windows的快捷方式,可以为目录和文件创建软链接。
ln -s 目录或文件名 链接名
注意:硬链接不能用已经存在于目录中的文件名字,linux不允许。
六、软件包的安装与下载
以前,Linux只能用rpm安装软件包,需要手工解决软件包的依赖关系。
软件包A -> 软件包B -> 软件包C
yum(Yellow dog Updater, Modified)是基于rpm的软件包管理器,能够从指定的服务器下载软件包并且安装,还可以自动处理依赖性关系,一次性安装所有依赖的软件包。
使用yum之前,必须保证Linux系统可以访问互联网(因为yum仓库在互联网上)。
软件包的安装和卸载需要系统管理员权限。
1、安装软件包。
yum -y install 软件包名
2、删除软件包。
yum -y remove 软件包名
3、升级软件包。
yum update 软件包名
4、如何知道需要安装的软件包名
百度之。
5、yum仓库
互联网上有很多yum仓库,不需要任何配置就可以使用。
不允许访问互联网的企业用户可能自建yum仓库。
6、查找软件包。
yum update 软件包名
7、列出所有可更新的软件包清单。
yum check-update
8、更新所有软件包。
yum update
9、列出所有可安装软件包的清单;
yum list
七、打包和压缩
1、zip命令
先安装zip的软件包:yum -y install zip unzip
打包压缩:zip -q -r -d -u 压缩包文件名 目录和文件名列表
-q:不显示命令执行的过程。
-r:递归处理,打包各级子目录和文件。
-u:把文件增加/替换到压缩包中。
-d:从压缩包中删除指定的文件。
解包解压:unzip 压缩包文件名
注意:zip是通用的压缩格式,Windows和Linux都支持。
八、进程
进程就是系统中正在运行的程序(linux的命令也是程序)
方法一:
ps -ef|lessps -ef|grep 关键字
字段 | 全称/含义 | 详细说明 |
---|---|---|
UID | User ID (用户ID) | 启动此进程的用户ID,通常可用用户名表示 |
PID | Process ID (进程ID) | 系统分配给进程的唯一数字标识符 |
PPID | Parent Process ID | 创建此进程的父进程ID,可通过pstree 查看进程树关系 |
C | CPU Utilization | 进程当前CPU占用百分比,持续高值可能表示性能问题 |
STIME | Start Time (启动时间) | 进程启动的具体时间,格式通常为"HH:MM:SS" |
TTY | Terminal Type (终端类型) | 运行进程的终端类型: • tty1: 图形终端 • tty2-tty6: 本地字符终端 • pts/0-255: 虚拟终端(SSH等) • ?: 系统守护进程/无终端关联 |
TIME | CPU Time (CPU时间) | 进程累计使用的CPU时间,格式为"HH:MM:SS" |
CMD | Command (命令) | 启动此进程的完整命令或程序名称 |
方法二:
ps aux|lessps aux|grep 关键字
进程信息字段说明
字段 | 全称/描述 | 详细说明 |
---|---|---|
USER/UID | 用户名/用户ID | 启动此进程的用户账户名或用户ID |
PID | Process ID | 系统分配给进程的唯一数字标识符 |
%CPU | CPU 使用百分比 | 进程占用的 CPU 资源百分比,100% 表示占用一个完整 CPU 核心 |
%MEM | 内存使用百分比 | 进程占用的物理内存百分比 |
VSZ | Virtual Memory Size | 进程使用的虚拟内存大小(KB),包括共享库和交换空间 |
RSS | Resident Set Size | 进程实际使用的物理内存大小(KB),不包括交换空间 |
TTY | 终端类型 | 进程关联的终端: • tty1: 图形终端 • tty2-tty6: 本地字符终端 • pts/0-255: 虚拟终端(SSH等) • ?: 守护进程/无终端关联 |
STAT | 进程状态 | 进程当前状态(详见下方状态说明) |
START | 启动时间 | 进程启动的具体时间(短格式为 "HH:MM",长格式为 "Mmm DD" 或 "YYYY") |
TIME | CPU 时间 | 进程累计使用的 CPU 时间,格式为 "HH:MM:SS" |
COMMAND | 命令 | 启动此进程的完整命令或程序名称 |
进程状态 (STAT) 详解
状态码 | 含义 | 说明 |
---|---|---|
R | Running (运行中) | 进程正在运行或可运行(在运行队列中) |
S | Sleeping (休眠) | 可中断的睡眠状态(等待事件完成) |
D | Uninterruptible sleep | 不可中断的睡眠状态(通常等待I/O) |
T | Stopped (暂停) | 进程被信号暂停(如 Ctrl+Z)或被调试器暂停 |
Z | Zombie (僵尸) | 进程已终止但未被父进程回收 |
< | 高优先级 | 进程优先级高于普通进程 |
N | 低优先级 | 进程优先级低于普通进程 |
s | Session leader | 进程是会话首进程(控制终端的进程) |
l | 多线程 | 进程是多线程的 |
+ | 前台进程组 | 进程在前台进程组中 |
I | Idle (空闲) | 内核线程空闲状态(Linux 4.0+) |
九、性能分析top
1、输出结果说明
前5行是系统整体的统计信息,从第8行开始是进程信息。
第一行是系统运行的统计信息
top:当前时间。
up:系统运行了多长时间。
users:当前登录的用户数。
load average:系统负载,在一段时间内,CPU正在处理和等待处理的进程数之和,三个数值分别是最近1分钟、5分钟、15分钟的平均值。
load average的三个数值,它能反映服务器的负载情况。但是,数值高了也并不能直接代表这服务器的性能有问题,可能是因为正在进行CPU密集型的计算,也有可能是因为I/O问题导致运行队列堵了。所以,当我们看到这个数值飙升的时候,还得具体问题具体分析。一个CPU在一个时间片里面只能运行一个进程,CPU核数的多少直接影响到这台机器在同一时间能运行的进程数。一般来说,只要load average的数值没超过这台机器的总核数,就基本没啥问题。
第二行是进程的统计信息
Tasks:当前有多少进程
running:正在运行的进程数
sleeping:正在休眠的进程数
stopped:停止的进程数
zombie:僵尸进程数
一般情况下,running越多,服务器自然压力就越大。
第三行是CPU的统计信息
us:用户进程占用CPU的百分比(shell程序、各种应用程序、web服务程序等都是运行在用户地址空间的进程)。
sy:内核进程占用CPU的百分比(用户进程如果要使用系统资源,都是通过内核进程来处理的,对操作系统来说,内核进程消耗时间应该是越少越好。但是,有一种情况会使sy变大,那就是大量的IO操作)。
ni:改变过优先级的用户进程占用CPU的百分比(ni是nice的缩写,用户进程的优先级可以调整,这里显示的ni表示调整过优先级的进程消耗掉的CPU时间,如果系统中没有进程被调整过优先级,那么ni就显示为0)。
id:空闲CPU的百分比。
wa:等待磁盘I/O的进程占用CPU的百分比(和CPU的处理速度相比,磁盘IO操作是非常慢的。CPU在发出磁盘I/O操作的指令后,需要等待磁盘I/O操作的结果,在磁盘I/O操作完成前,CPU只能处于等待状态。Linux系统在计算系统负载时会把CPU等待I/O操作的时间也计算进去。所以,如果系统的负载过高,可以通过wa来判断系统的性能瓶颈是不是I/O操作造成的)。
hi:硬中断占用CPU的百分比(硬中断是硬盘、网卡等硬件设备发送给CPU的中断消息,当CPU收到中断消息后需要进行处理,因此消耗CPU时间)。
si:软中断占用百分比(软中断是由程序发出的中断,也会执行相应的处理程序,消耗CPU时间)。
st:用于有虚拟CPU的情况,用来指示被虚拟机用掉的CPU时间。
第四行是内存的统计信息
total:物理内存总量。
free:空闲内存量。
used:已使用的内存量。
buff/cache:用作内核缓存的内存量。
第五行是交换区的统计信息
total:交换区总量。
free:空闲交换区大小。
used:已使用交换区的大小。
avail Mem:下一次可分配给进程的物理内存数量。
从第八行开始是进程的信息
PID:进程id。
USER:进程所有者。
PR:进程的优先级,越小优先级越高。
NI:nice值,负值表示高优先级,正值表示低优先级。
VIRT:进程使用的虚拟内存,单位是kb。
RES:进程使用的物理内存,单位kb。
SHR:进程使用的共享内存,单位kb。
S:进程状态(S表示休眠,R表示正在运行, Z表示僵死状态,N表示该进程优先值为负数,I表示空闲状态)。
%CPU:进程占用的CPU使用率。
%MEM:进程使用的物理内存和总内存的百分比。
TIME+:进程使用的CPU时间总计,单位:1/100秒。
COMMAND:命令行。
进程信息缺省按%CPU降序排列。
2、top常用的选项
-d 指定屏幕信息刷新的时间间隔,缺省是3秒,如果希望10秒刷新一次,则使用:top -d 10
-u 只显示指定用户的进程,如果希望只显示wucz用户的进程,则使用:top -u wucz
-p 只显示指定的进程,例如:top -p 1038, 1038是进程编号。
-i 不显示闲置和僵尸的进程,例如:top -i
-c 显示产生进程的完整命令,例如:top -c
3、top交互命令
按下q键,退出top。
按下h键,显示帮助画面,
按下c键,显示产生进程的完整命令,等同于-c选项,再次按下c键,变为默认显示。
按下f键,可以选择需要展示的项目。
按下M键,根据驻留内存大小(RES)排序。
按下P键,根据CPU使用百分比大小进行排序。
按下T键,根据时间/累计时间进行排序。
按下E键,切换顶部内存显示单位。
按下e键,切换进程内存显示单位。
按下l键,切换显示平均负载和启动时间信息。
按下t键,切换显示CPU状态信息。
按下m键,切换显示内存信息。
结语
本文目前介绍到性能分析top,日后随着深入学习我会更新更多相关内容,本文的学习资料来源主要来源自一位程序员技术博主,可以关注B站up码农论坛。如果觉得本文对您有所帮助,就请点赞转发收藏吧,您的支持也是我继续学习和更新的动力,感谢您的支持。