使用 nginx 服务器部署yum仓库

源码安装 nginx

# 安装依赖
[root@server ~ 19:25:40]# yum -y install gcc make pcre-devel zlib-devel
# 下载
[root@server ~ 19:27:27]# yum install -y wget

[root@server ~ 19:27:47]# wget https://nginx.org/download/nginx-1.24.0.tar.gz

# 配置
[root@server ~ 19:28:38]# cd nginx-1.24.0/
[root@server nginx-1.24.0 19:28:46]# ./configure --prefix=/usr/local/nginx
# 将所有的nginx相关文件存放在/usr/local/nginx


# 编译安装
[root@server nginx-1.24.0 19:28:54]# make && make install

[root@server nginx-1.24.0 19:29:14]# ls /usr/local/nginx/
conf  html  logs  sbin


# 配置环境变量
[root@server nginx-1.24.0 19:29:20]# export PATH=$PATH:/usr/local/nginx/sbin/
[root@server nginx-1.24.0 19:29:33]# echo 'export PATH=$PATH:/usr/local/nginx/sbin/' >> ~/.bashrc

配置 nginx 服务

[root@server nginx-1.24.0 19:29:39]# cd ..
[root@server ~ 19:33:17]# cp /usr/lib/systemd/system/sshd.service /etc/systemd/system/nginx.service
[root@server ~ 19:33:39]# vim /etc/systemd/system/nginx.service

[Unit]
Description=OpenSSH server daemon

[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit

[Install]
WantedBy=multi-user.target


[root@server ~ 19:35:46]# systemctl daemon-reload
[root@server ~ 19:35:56]# systemctl enable nginx.service --now
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /etc/systemd/system/nginx.service.

配置nginx允许查看文件清单


[root@server ~ 19:36:01]# vim /usr/local/nginx/conf/nginx.conf
[root@server ~ 19:40:42]# systemctl restart nginx

在这里插入图片描述
发布软件仓库

[root@server ~ 19:41:11]# cd /usr/local/nginx/html/
[root@server html 19:42:50]# mkdir -p centos7/Packages
[root@server html 19:42:54]# cd centos7/Packages
[root@server Packages 19:43:00]# yum install -y httpd nginx --downloadonly --downloaddir=.

[root@server Packages 19:43:13]# cd ..
[root@server centos7 19:43:57]# yum install -y createrepo

[root@server centos7 19:44:04]# createrepo .
Spawning worker 0 with 5 pkgs
Spawning worker 1 with 5 pkgs
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete

配置客户端

[root@client ~ 19:26:38]# cd /etc/yum.repos.d/
[root@client yum.repos.d 19:45:33]# mkdir bakcup
[root@client yum.repos.d 19:45:39]# mv *repo bakcup
[root@client yum.repos.d 19:45:44]# ls
bakcup
[root@client yum.repos.d 19:45:49]# vim centos7.repo

[centos7]
name=centos7 test
baseurl=http://10.1.8.10/centos7
enabled=1
gpgcheck=0


[root@client yum.repos.d 19:46:10]# yum install -y httpd

[root@client yum.repos.d 19:47:36]# systemctl enable httpd --now
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.

Linux 计划任务管理
一次性计划任务
一次性计划任务是指在未来某个时间点执行一个命令或一系列命令

atd 服务
Linux 系统中at提供一次性计划任务功能。

at不是一个单独的工具,包括系统后台进程(atd)和一系列与后台进程atd交互的命令(例如at atq等等)。

# 使用以下命令安装
[root@server ~ 19:53:20]# yum install at

# 确认atd服务开机启动
[root@server ~ 19:54:35]# systemctl start atd
[root@server ~ 19:59:57]# systemctl status atd
● atd.service - Job spooling tools
   Loaded: loaded (/usr/lib/systemd/system/atd.service; enabled; vendor preset: enabled)
   Active: active (running) since 二 2026-05-19 19:59:57 CST; 5s ago
 Main PID: 4293 (atd)
   CGroup: /system.slice/atd.service
           └─4293 /usr/sbin/atd -f

5月 19 19:59:57 server.liang.cloud systemd[1]: Started Job spooling tools.

at 命令
语法:

at <timespec>

at命令从标准输入中读取要执行的命令。手动输入命令时,按ctrl+D完成输入。

示例:

[root@server ~ 20:00:02]# at now +5 minutes
at> echo hello world > /tmp/hello.log
at> <EOT>at> 
at> <EOT>
job 1 at Tue May 19 20:06:00 2026

输入完成,按ctrl+d完成。上面的字符’',就是安 ctrl+d 自动出现的。

如果输入错误,使用ctrl+backspace删除。

对于大量的命令或者错字敏感的命令,可以通过重定向和-f选项从脚本中读取,
例如:

[root@server ~ 20:02:10]# vim myscript.sh
#!/bin/bash
date >> /tmp/myscript.log
echo hello myscript >> /tmp/myscript.log

[root@server ~ 20:03:35]# at now +5 minutes < myscript.sh
job 2 at Tue May 19 20:08:00 2026
[root@server ~ 20:03:43]# at now +100 minutes -f myscript.sh
job 3 at Tue May 19 21:43:00 2026

timespec允许多种时间组合。例如,02:00 pm,15:43,或者teatime,后接日期或未来的天数。

示例:

now +5 hours
teatime tomorrow (teatime 16:00)
noon +4 days(noon 12:00)
5 pm august 3 2016
时间定义参考文档 /usr/share/doc/at/timespec

at -l 或 atq
查看任务队列。

[root@server ~ 20:03:50]# at -l
1	Tue May 19 20:06:00 2026 a root
2	Tue May 19 20:08:00 2026 a root
3	Tue May 19 21:43:00 2026 a root
[root@server ~ 20:05:55]# atq
2	Tue May 19 20:08:00 2026 a root
3	Tue May 19 21:43:00 2026 a root

atd提供26个队列,a到z,排的越后优先级越低。使用at命令使用-q选项指定队列。

[root@server ~ 20:06:05]# at -q b now +5 minutes < myscript.sh
job 4 at Tue May 19 20:12:00 2026
您在 /var/spool/mail/root 中有邮件
[root@server ~ 20:07:24]# atq
2	Tue May 19 20:08:00 2026 a root
3	Tue May 19 21:43:00 2026 a root
4	Tue May 19 20:12:00 2026 b root
[root@server ~ 20:07:31]# at -l -q b
4	Tue May 19 20:12:00 2026 b root

# 时间到达后检测
[root@server ~ 20:08:00]# atq
3	Tue May 19 21:43:00 2026 a root
4	Tue May 19 20:12:00 2026 b root

[root@server ~ 20:08:25]# cat /tmp/hello.log
hello world

[root@server ~ 20:08:55]# cat /tmp/myscript.log
2026年 05月 19日 星期二 20:08:00 CST
hello myscript

at -c
查看任务详细信息。

[root@server ~ 20:09:09]# at -c 3
....
${SHELL:-/bin/sh} << 'marcinDELIMITER751712ff'
#!/bin/bash
date >> /tmp/myscript.log
echo hello myscript >> /tmp/myscript.log

marcinDELIMITER751712ff

at -d/-r 或 atrm
删除任务。

[root@server ~ 20:09:46]# atrm 3
[root@server ~ 20:10:57]# atq
4	Tue May 19 20:12:00 2026 b root

用户周期性计划任务
周期性计划任务是指在未来的一些时间周期性地执行一个命令或一系列命令。

crond 服务
Linux 系统中cron 提供周期性计划任务功能。

cron包括系统后台进程(crond)、crontab 命令和多个配置文件。

用户可以使用 crontab 命令管理自己的周期性作业。

如果cron job运行的命令没有重定向 stdout 和 stderr,crond进程将通过邮件发送给job所有者。

crontab 命令
crontab -l

查看周期性计划任务。

[root@server ~ 20:12:29]# su - liang
[liang@server ~ 20:12:38]$ crontab -l
no crontab for liang

crontab -e
该命令默认使用vi编辑周期性计划任务:

可以申明环境变量,格式为name=value,将影响声明之后的所有行。crontab使用的常规环境变量有SHELL和MAILTO。发送邮件需要额外的配置:mail服务器和smtp。
空行是允许的。
以#开头的行是注释行。
每一行是一个job。
默认编辑器可以通过EDITOR环境变量设定。

每一个jobs包涵6个部分:五个时间和一个要执行的命令,按以下顺序显示:

分钟
小时
几号
月份
星期几
命令
前五个字段全部使用相同的语法规则:

*,表示“无关紧要”,始终。
数字可用于指定分钟数或小时数、日期或者工作日。对于工作日,0表示星期日,1表示星期一,2表示星期二,依此类推。7也表示星期曰。
x-y:表示范围:x到y(含)。
x,y:表示列表。列表也可以包含范围,例如,5,10-13,17表示作业应当在每小时过去5分钟、10分钟、11分钟、12分钟、13分钟和17分钟后运行。
/x,表示x的时间间隔,例如列中的/7表示每七分钟运行一次作业。
最后一个区域是要执行的命令,命令通过/bin/sh执行,除非指定SHELL变量。如果命令中包涵未转义字符%,则表示开启新行,并且%后面所有字符作为标准输入。
月和周区域可以使用三字母简写单词,Jan,Feb,Mar和Mon,Tue。

示例:
以下作业将在每年2月2日上午9点准点执行命令/usr/local/bin/yearly_backup。
bash 0 9 2 2 * /usr/local/bin/yearly_backup

以下作业将在七月每周五的上午9点和下午4点间,每五分钟向该作业的所有者发送包含单词Chime的电子邮件。
bash */5 9-16 * Jul 5 echo “Chime”

以下作业将在每个工作日午夜前的两分钟运行命/usr/local/bin/daily_report。
bash 58 23 * * 1-5 /usr/local/bin/daily_report

以下作业将在每个工作日(周一到周五)上午9点执行mutt命令,从而将邮件消息Checkingin发送给收件人boss@example.com。
bash 0 9 * * 1-5 mutt -s “Checking in” boss@example.com % Hi boss, just checking in.

示例:

[liang@server ~ 20:12:47]$ export EDITOR=vim
[liang@server ~ 20:14:18]$ crontab -e
no crontab for liang - using an empty one
crontab: installing new crontab
[liang@server ~ 20:14:52]$ crontab -l
*/2 2,6-23 * * * date >> /tmp/date.log

# 监控日志
[liang@server ~ 20:15:28]$ touch /tmp/date.log
[liang@server ~ 20:16:36]$ tail -f /tmp/date.log
2026年 05月 19日 星期二 20:16:01 CST

crontab -r
删除所有周期性计划任务。

[liang@server ~ 20:18:52]$ crontab -r
[liang@server ~ 20:19:04]$ crontab -l
no crontab for liang

crontab -u
root用户可以使用参数 -u username 管理其他用户周期性作业。

[root@server ~ 20:12:02]# crontab -u liang -e
0 9 2 2 * /usr/local/bin/yearly_backup
0 9 * * 1-5 mutt -s "Checking in" boss@example.com % Hi boss, just checking in.
crontab: installing new crontab
[root@server ~ 20:22:16]# crontab -u liang -r
[root@server ~ 20:22:27]# crontab -u liang -l
no crontab for liang

crontab filename
还可以使用crontab filename 命令从文件 filename 中读取的作业并替换当前所有作业。

[liang@server ~ 20:21:46]$ vim mycron
0 9 2 2 * /usr/local/bin/yearly_backup
0 9 * * 1-5 mutt -s "Checking in" boss@example.com % Hi boss, just checking in.

[liang@server ~ 20:25:16]$ crontab mycron
[liang@server ~ 20:25:52]$ crontab -l
0 9 2 2 * /usr/local/bin/yearly_backup
0 9 * * 1-5 mutt -s "Checking in" boss@example.com % Hi boss, just checking in.

系统周期性计划任务
系统管理员使用配置文件定义系统周期性作业。crond守护进程会从多个配置文件中读取系统周期性计划作业:

/etc/crontab
/etc/cron.d/ 目录
/etc/anacrontab
/etc/crontab
crond的配置文件比crontab命令定义的jobs多一个区域,在最后一个时间和command之间,指明使用哪个账户执行job。

[root@server ~ 20:22:30]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

/etc/cron.d
系统周期性作业应始终在 /etc/cron.d/ 目录中创建自定义crontab文件,防止cronie更新后覆盖/etc/crontab文件。其他应用也会将系统周期性作业存放在该目录。

/etc/cron.d/0hourly定义了每小时要执行的任务: run-parts /etc/cron.hourly。

作用:每小时将 /etc/cron.hourly目录下所有脚本按顺序执行一次。

[root@server ~ 20:27:45]# ls /etc/cron.d
0hourly

[root@server ~ 20:28:48]# cat /etc/cron.d/0hourly
# Run the hourly jobs
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
01 * * * * root run-parts /etc/cron.hourly

/etc/anacrontab
在过去,/etc/anacrontab 由单独的一个进程anacron处理,在CentOS 7 及后续版本中,这个文件也由 crond 进程处理,目的是确保重要的工作总是被执行,即使系统关机或者其他重大事故。

/etc/anacrontab 定义了每天、每周、每个月要运行的任务。

周期性执行任务目录:

每天要执行的任务目录:/etc/cron.daily
每周要执行的任务目录:/etc/cron.weekly
每月要执行的任务目录:/etc/cron.monthly

[root@server ~ 20:28:48]# cat /etc/cron.d/0hourly
# Run the hourly jobs
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
01 * * * * root run-parts /etc/cron.hourly
[root@server ~ 20:29:08]# cat /etc/anacrontab
# /etc/anacrontab: configuration file for anacron

# See anacron(8) and anacrontab(5) for details.

SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22

#period in days   delay in minutes   job-identifier   command
1	5	cron.daily		nice run-parts /etc/cron.daily
7	25	cron.weekly		nice run-parts /etc/cron.weekly
@monthly 45	cron.monthly		nice run-parts /etc/cron.monthly

/etc/anacrontab 使用语法 NAME=value 配置 anacrontab。

例如,START_HOURS_RANGE=3-22,作业只能在此时间段运行。

/etc/anacrontab 每行包涵4个区域:

period in days,按重复计划运行的作业的间隔天数。该字段接受整数或宏作为值。例如,宏@daily相当于整数1,它表示每天执行该作业。同样,宏@weekly相当于整数7,它表示每周执行该作业。
delay in minutes,在启动该作业前,crond守护进程应等待的时间。
job-identifier,此为/var/spool/anacron中的文件名称,用于检查该作业是否已运行。
command,要执行的命令。

Linux 进程调度管理
进程调度器
现代计算机系统中既包含只有单个CPU且任何时候都只能处理单个指令的低端系统到具有几百个cpu、每个cpu有多个核心的高性能超级计算机,可以并行执行几百个指令。所有这些系统都有一个共同点:系统进程线程数量超出了CPU数量。

Linux系统看起来可以同时执行多个进程,多个进程轮流使用CPU。**内核使用进程调度器决定如何分配CPU时间。**为了更好地运行,进程调度器必须平衡不同的条件,快速决定下个执行的进程,确保进程获得公平的CPU时间:

按时间片轮转(10-20ms为1个时间片 )
按优先级调度,允许高优先级进程获取更多的共享CPU时间,低优先级进程获取更少的共享CPU时间。
在这里插入图片描述
进程调度器可粗略分为两类:

实时调度器,系统中重要的进程由实时调度器调度,获得CPU能力强
非实时调度器,系统中大部分进程由非实时调度器调度,获得CPU能力弱
实时调度器
实时调度器支持的调度策略:

SCHED_RR,roundrobin 轮询调度策略。相同优先级的进程轮流获取相同的CPU时间。
SCHED_FIFO,先入先出调度策略。被分配到的CPU时间的进程会一直运行,直到被IO阻塞(也称为sched_yield),会被高优先级进程抢占。
实时调度器管理的进程

运行优先级范围如下:
在这里插入图片描述
即使系统运行实时调度程序,也要保持可响应状态,至少ssh可用。

管理员可以使用以下两个sysctl参数,阻止实时调度策略下运行的程序占用所有CPU时间:

kernel.sched_rt_runtime_us,在kernel.sched_rt_period_us内实时态进程可使用的共享CPU时间,默认值950000,也就是0.95秒。设置为0,实时调度进程将无法获取CPU时间。

kernel.sched_rt_period_us,CPU分配的周期时间,单位us,默认值1000000,也就是1秒。

从kernel.sched_rt_period_us 中减去 kernel.sched_rt_runtime_us 后的剩余时间交给非实时调度器SCHED_NORMAL调度。

kernel.sched_rr_timeslice_ms,在SCHED_RR调度下的进程每次轮询获取的CPU时间,单位ms,默认值100,也就是0.1秒,有效范围1-100。
非实时调度器
非实时调度器支持的调度策略:

SCHED_NORMAL,标准的轮询方式时间共享调度,也称为SCHED_OTHER。
SCHED_BATCH,针对批量方式执行的进程策略。不像 SCHED_NORMAL 频繁竞争,任务可以长时间运行。
SCHED_IDLE,用于执行非常低的优先级应用。使用 SCHED_IDLE 调度策略运行的进程比nice 19运行的进程优先级还低。

管理进程优先级
非实时调度策略
nice 值
常规系统上运行的大多数进程都使用 SCHED_OTHER 调度策略。由于并非所有进程都同等重要,因此可以为使用SCHED_OTHER调度策略运行的程序指定相对优先级,称为nice值。

有40种不同级别的nice值,范围 -20(最高优先级)到 19(最低优先级):

nice 值越高,代表优先级越低,获取CPU能力越弱。
nice 值越低,代表优先级越高,获取CPU能力越强。

注意: 当不存在CPU资源竞争时,即使nice值高的进程也可以获得足够CPU资源。

nice 值查看
top 命令

在这里插入图片描述
ps命令

[liang@server ~ 20:25:58]$ ps -o nice,cmd $(pgrep systemd)
 NI CMD
  0 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
  0 /usr/lib/systemd/systemd-journald
  0 /usr/lib/systemd/systemd-udevd
  0 /usr/lib/systemd/systemd-logind

默认情况下,子进程将继承父进程的nice值,通常为0。

[liang@server ~ 20:37:39]$ md5sum /dev/zero &
[1] 4471
[liang@server ~ 20:38:21]$ ps -o pid,nice,command $$ 4471
   PID  NI COMMAND
  4432   0 -bash
  4471   0 md5sum /dev/zero
# $$ 代表当前终端中运行的 shell 程序 PID

实时调度器进程优先级和非实时调度器进程优先级对比如下
在这里插入图片描述
结论: 优先级最低的实时调度器进程的优先级高于优先级最高的非实时调度器进程的优先级。

nice 命令

[liang@server ~ 20:38:41]$ nice --help
用法:nice [选项] [命令 [参数]...]
Run COMMAND with an adjusted niceness, which affects process scheduling.
With no COMMAND, print the current niceness.  Niceness values range from
-20 (most favorable to the process) to 19 (least favorable to the process).

Mandatory arguments to long options are mandatory for short options too.
  -n, --adjustment=N   add integer N to the niceness (default 10)
      --help		显示此帮助信息并退出
      --version		显示版本信息并退出

示例:

$ # nice值默认是10
[liang@server ~ 20:39:44]$ nice md5sum /dev/zero &
[2] 4475

[liang@server ~ 20:40:43]$ ps -o pid,nice,command
   PID  NI COMMAND
  4365   0 -bash
  4432   0 -bash
  4471   0 md5sum /dev/zero
  4475  10 md5sum /dev/zero
  4476   0 ps -o pid,nice,command

普通用户仅允许使用正数的nice值运行程序。

设置一个负数优先级
[liang@server ~ 20:41:00]$ nice -n -2 md5sum /dev/zero &
[3] 4477
[liang@server ~ 20:41:53]$ nice: 无法设置优先级: 权限不够
[liang@server ~ 20:42:18]$ ps -o pid,nice,command 4477
   PID  NI COMMAND
  4477   0 md5sum /dev/zero

# 设置一个正数优先级
[liang@server ~ 20:42:43]$ nice -n 2 md5sum /dev/zero &
[4] 4480
[liang@server ~ 20:43:53]$ ps -o pid,nice,command 4480
   PID  NI COMMAND
  4480   2 md5sum /dev/zero

renice 命令

[liang@server ~ 20:44:08]$ renice --help

用法:
 renice [-n] <优先级> [-p|--pid] <pid>...
 renice [-n] <优先级>  -g|--pgrp <pgid>...
 renice [-n] <优先级>  -u|--user <用户>...

选项:
 -g, --pgrp <id>        将参数解释为进程组 ID
 -n, --priority <数字>  指定 nice 增加值
 -p, --pid <id>         将参数解释为进程 ID (默认)
 -u, --user <name|id>   将参数解释为用户名或用户 ID
 -h, --help             显示帮助文本并退出
 -V, --version          显示版本信息并退出

更多信息请参阅 renice(1)。

修改上面示例中产生的进程的优先级。

[liang@server ~ 20:44:50]$ renice -n 2 55782
renice: 获取 55782 (进程 ID) 的优先级失败: 没有那个进程
[liang@server ~ 20:45:51]$ renice -n 2 4477
4477 (进程 ID) 旧优先级为 0,新优先级为 2
[liang@server ~ 20:47:23]$ ps -o pid,nice,command 4477
   PID  NI COMMAND
  4477   2 md5sum /dev/zero

普通用户只能升高进程nice值,不能降低

[liang@server ~ 20:49:16]$ renice -n -2 4477
renice: 设置 4477 的优先级失败(进程 ID): 权限不够
[liang@server ~ 20:50:18]$ ps -o pid,nice,command 4477
   PID  NI COMMAND
  4477   2 md5sum /dev/zero


renice -n -2 4477

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/e224b5777f18474c8faf07161d2006f4.png)
在该界面中使用 r 指令设置进程nice值。

终止之前创建的3个md5sum进程。

```bath
[liang@server ~ 20:55:40]$ pkill md5sum
[1]   已终止               md5sum /dev/zero
[2]   已终止               nice md5sum /dev/zero
[4]+  已终止               nice -n 2 md5sum /dev/zero
[3]+  已终止               nice -n -2 md5sum /dev/zero

实时调度策略
chrt 命令用于获取和设置实时调度器进程优先级,以及更改进程调度器

[root@server ~ 20:51:00]# chrt --help
Show or change the real-time scheduling attributes of a process.

Set policy:
 chrt [options] <priority> <command> [<arg>...]
 chrt [options] --pid <priority> <pid>

Get policy:
 chrt [options] -p <pid>

Policy options:
 -b, --batch          set policy to SCHED_BATCH
 -d, --deadline       set policy to SCHED_DEADLINE
 -f, --fifo           set policy to SCHED_FIFO
 -i, --idle           set policy to SCHED_IDLE
 -o, --other          set policy to SCHED_OTHER
 -r, --rr             set policy to SCHED_RR (default)

Scheduling options:
 -R, --reset-on-fork       set SCHED_RESET_ON_FORK for FIFO or RR
 -T, --sched-runtime <ns>  runtime parameter for DEADLINE
 -P, --sched-period <ns>   period parameter for DEADLINE
 -D, --sched-deadline <ns> deadline parameter for DEADLINE

Other options:
 -a, --all-tasks      operate on all the tasks (threads) for a given pid
 -m, --max            show min and max valid priorities
 -p, --pid            operate on existing given pid
 -v, --verbose        display status information

 -h, --help     显示此帮助并退出
 -V, --version  输出版本信息并退出

更多信息请参阅 chrt(1)。

示例

# 查看进程优先级范围,chrt不能用于调整非实时进程nice值优先级。
[root@server ~ 20:56:28]# chrt -m
SCHED_OTHER min/max priority	: 0/0
SCHED_FIFO min/max priority	: 1/99
SCHED_RR min/max priority	: 1/99
SCHED_BATCH min/max priority	: 0/0
SCHED_IDLE min/max priority	: 0/0
SCHED_DEADLINE min/max priority	: 0/0

# 以SCHED_RR调度器和优先级为5运行md5sum进程
[root@server ~ 20:57:12]# chrt -r 5 md5sum /dev/zero &
[1] 14642
[root@server ~ 20:57:52]# ps -o pid,cls,rtprio,command 14642
   PID CLS RTPRIO COMMAND
 14642  RR      5 md5sum /dev/zero

# 修改进程调度器和优先级
[root@server ~ 20:58:05]# chrt -f --pid 10 14642
[root@server ~ 20:58:46]# ps -o pid,cls,rtprio,command 14642
   PID CLS RTPRIO COMMAND
 14642  FF     10 md5sum /dev/zero


# 修改进程调度器为非实时
[root@server ~ 20:59:03]# chrt -o --pid 0 14642
[root@server ~ 21:00:05]# ps -o pid,cls,rtprio,command 14642
   PID CLS RTPRIO COMMAND
 14642  TS      - md5sum /dev/zero

Linux 文件系统基本管理
识别文件系统和设备
Linux 中设备
在Linux中,对存储设备的访问由特殊类型文件-块设备(block)提供。挂载块设备前,必须先使用文件系统对其进行格式化。

块设备文件与其他的设备文件一起存储在/dev目录中。设备文件是由操作系统自动创建的。

重要的思想:一切设备皆文件

常见的不同类型接口块设备:

接口:SATA/SAS/USB/SCSI,名称:/dev/sda、/dev/sdb …
接口:virtio-blk,虚拟机磁盘,名称:/dev/vda、/dev/vdb …
接口:NVMe SSD,名称:/dev/nvme0n1、/dev/nvme1n1…
接口:SD/MMC/eMMC,名称:/dev/mmcblk0,/dev/mmcblk1 …
通常,不会将整个存储设备格式化为一个文件系统中,而是将硬盘驱动器划分为多个逻辑存储单元, 这些单元称为分区。各种分区使用不同的文件系统进行格式化或用于不同的用途。 例如,一个分区可以包含用户目录,而另一个分区可以包含系统数据和日志。 如果用户用数据填充主目录分区,则系统分区可能仍然有可用空间。

/dev/sda第一个分区为/dev/sda1,第二个分区为/dev/sda2,以此类推。
/dev/nvme0n1p1,/dev/nvme0n1p2
/dev/vda1,/dev/vda2
/dev/xvda1,/dev/xvda2

Linux 文件系统
文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构,即在存储设备上组织文件的方法。

Linux服务器上的文件是按文件系统层次结构访问的。
在这里插入图片描述
管理文件系统需要:

确定存储设备的空间使用情况以及文件系统层次结构中受影响的目录。
存储设备发生故障,而您需要知道哪些文件系统存在风险。
要让文件系统的内容在文件系统层次结构中可用,必须将它挂载到一个空目录上,该目录被称为挂载点。

/linux 对应教室。

查看设备和文件系统
lsblk 命令
查看块设备使用情况。

[root@server ~ 21:00:16]# lsblk
NAME            MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda               8:0    0   200G  0 disk 
├─sda1            8:1    0     1G  0 part /boot
└─sda2            8:2    0   199G  0 part 
  ├─centos-root 253:0    0    50G  0 lvm  /
  ├─centos-swap 253:1    0   3.9G  0 lvm  [SWAP]
  └─centos-home 253:2    0 145.1G  0 lvm  /home
sr0              11:0    1   4.4G  0 rom  

结果说明:

NAME :块设备名。
MAJ:MIN :主要(MAJ)和次要(MIN)设备号。
RM :指明设备是否是可移动设备。注意,在本例中设备sdb和sr0的RM值等于1,这说明他们是可移动设备。
SIZE :本栏列出设备的容量大小信息。例如298.1G表明该设备大小为298.1GB,而1K表明该设备大小为1KB。
RO :该项表明设备是否为只读。在本案例中,所有设备的RO值为0,表明他们不是只读的。
TYPE :本栏显示块设备是否是磁盘或磁盘上的一个分区。在本例中,sda和sdb是磁盘,而sr0是只读存储(rom)。
MOUNTPOINT :本栏指出设备挂载的挂载点。

df 命令
查看文件系统使用情况。

[root@server ~ 21:02:56]# df
文件系统                    1K-块    已用      可用 已用% 挂载点
devtmpfs                  2000996       0   2000996    0% /dev
tmpfs                     2013060       0   2013060    0% /dev/shm
tmpfs                     2013060   11868   2001192    1% /run
tmpfs                     2013060       0   2013060    0% /sys/fs/cgroup
/dev/mapper/centos-root  52403200 1864800  50538400    4% /
/dev/sda1                 1038336  142256    896080   14% /boot
/dev/mapper/centos-home 152092100   33012 152059088    1% /home
tmpfs                      402616       0    402616    0% /run/user/0

# -h选项,友好显示单位,单位进制是1024。
# -T选项,显示文件系统类型
[root@server ~ 21:04:03]# df -hT
文件系统                类型      容量  已用  可用 已用% 挂载点
devtmpfs                devtmpfs  2.0G     0  2.0G    0% /dev
tmpfs                   tmpfs     2.0G     0  2.0G    0% /dev/shm
tmpfs                   tmpfs     2.0G   12M  2.0G    1% /run
tmpfs                   tmpfs     2.0G     0  2.0G    0% /sys/fs/cgroup
/dev/mapper/centos-root xfs        50G  1.8G   49G    4% /
/dev/sda1               xfs      1014M  139M  876M   14% /boot
/dev/mapper/centos-home xfs       146G   33M  146G    1% /home
tmpfs                   tmpfs     394M     0  394M    0% /run/user/0


# -H选项,单位进制是1000
[root@server ~ 21:04:41]# df -H
文件系统                 容量  已用  可用 已用% 挂载点
devtmpfs                 2.1G     0  2.1G    0% /dev
tmpfs                    2.1G     0  2.1G    0% /dev/shm
tmpfs                    2.1G   13M  2.1G    1% /run
tmpfs                    2.1G     0  2.1G    0% /sys/fs/cgroup
/dev/mapper/centos-root   54G  2.0G   52G    4% /
/dev/sda1                1.1G  146M  918M   14% /boot
/dev/mapper/centos-home  156G   34M  156G    1% /home
tmpfs                    413M     0  413M    0% /run/user/0

# 查看单个文件系统
[root@server ~ 21:05:14]# df -hT /boot
文件系统       类型  容量  已用  可用 已用% 挂载点
/dev/sda1      xfs  1014M  139M  876M   14% /boot



# 查看文件或目录存储在哪个设备
[root@server ~ 21:06:12]# df /tmp
文件系统                   1K-块    已用     可用 已用% 挂载点
/dev/mapper/centos-root 52403200 1864764 50538436    4% /

du 命令
查看目录和文件占用磁盘空间大小。

# 查看/boot目录及其子目录占用空间
[root@server ~ 21:06:40]# du /boot
0	/boot/efi/EFI/centos
0	/boot/efi/EFI
0	/boot/efi
2400	/boot/grub2/i386-pc
3176	/boot/grub2/locale
2504	/boot/grub2/fonts
8096	/boot/grub2
4	/boot/grub
109040	/boot

# 只查看/boot目录占用空间
[root@server ~ 21:07:50]# du -s /boot
109040	/boot


# -h 选项human方式显示size
[root@server ~ 21:08:14]# du -sh /boot
107M	/boot

案例
查找根文件系统中哪个文件占用了大量空间。

[root@server ~ 21:08:34]# dd if=/dev/zero of=/usr/share/doc/dhclient-4.2.5/bigfile-4G bs=1M count=4096
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB) copied, 38.6659 s, 111 MB/s记录了4096+0 的读入
记录了4096+0 的写出


# 查看过程如下:
[root@server ~ 21:10:43]# du -sk /* |sort -n
....
11868	/run
21416	/root
32580	/etc
109040	/boot
343336	/var
5503404	/usr


[root@server ~ 21:10:48]# du -sk /usr/* |sort -n
0	/usr/etc
0	/usr/games
0	/usr/src
0	/usr/tmp
9336	/usr/include
9564	/usr/local
40292	/usr/libexec
42980	/usr/sbin
67460	/usr/bin
133496	/usr/lib64
720296	/usr/lib
4479980	/usr/share



[root@server ~ 21:11:49]# du -sk /usr/share/* |sort -n
0	/usr/share/augeas
0	/usr/share/desktop-directories
0	/usr/share/dict
0	/usr/share/empty
0	/usr/share/file
0	/usr/share/firewalld
0	/usr/share/games
0	/usr/share/gcc-4.8.5
0	/usr/share/ghostscript
0	/usr/share/gnome
0	/usr/share/idl
0	/usr/share/kdump
0	/usr/share/lua
0	/usr/share/magic
0	/usr/share/mime-info
0	/usr/share/omf
0	/usr/share/redhat-release
0	/usr/share/sounds
0	/usr/share/themes
0	/usr/share/X11
0	/usr/share/xsessions
0	/usr/share/yum-plugins
....

[root@server ~ 21:12:17]# du -sk /usr/share/doc/dhclient-4.2.5/* |sort -n
4	/usr/share/doc/dhclient-4.2.5/dhclient6.conf.example
4	/usr/share/doc/dhclient-4.2.5/dhclient.conf.example
4	/usr/share/doc/dhclient-4.2.5/README.dhclient.d
4194304	/usr/share/doc/dhclient-4.2.5/bigfile-4G


# 方法二:
[root@server ~ 21:13:50]# find / -size +100M 2>/dev/null
/proc/kcore
/sys/devices/pci0000:00/0000:00:0f.0/resource1_wc
/sys/devices/pci0000:00/0000:00:0f.0/resource1
/var/cache/yum/x86_64/7/updates/gen/primary_db.sqlite
/usr/lib/locale/locale-archive
/usr/share/doc/dhclient-4.2.5/bigfile-4G

Linux 思想:尽可能使用各种小工具完成一个复杂任务。每个小工具专注于特定的功能,KISS 原则(Keep It Simple, Stupid)。

挂载和卸载文件系统
环境准备

# 虚拟机添加一块硬盘/dev/sdb
[root@localhost ~ 21:17:23]# lsblk /dev/sdb
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb    8:16   0  20G  0 disk 

# 格式化文件系统
[root@localhost ~ 21:17:32]# mkfs.xfs /dev/sdb
meta-data=/dev/sdb               isize=512    agcount=4, agsize=1310720 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=5242880, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

挂载文件系统
当需要适用文件系统的时候,通过mount命令挂载。

mount 命令语法:

mount [-fnrsvw] [-t vfstype] [-o options] device mountpoint

选项说明:

-t vfstype,指明文件系统类型。
-o options,指明挂载选项。
device,指明要挂载的具有文件系统的设备,可以通过UUID=\、\、LABEL=\、PARTLABEL=\、PARTUUID=\等方式指明。例如,/dev/sdb,UUID=“f20547b2-df53-46e5-b526-a8744be26231” 。
mountpoint,指明挂载点位置。

# 创建挂载点
[root@localhost ~ 21:17:42]# mkdir /data

# 显示系统中所有文件系统
[root@localhost ~ 21:20:06]# blkid
/dev/sda1: UUID="33b4ff37-a823-4639-ba18-a9e88c1f191d" TYPE="xfs" 
/dev/sda2: UUID="6yO3vQ-pbzj-4fU5-QEDZ-pg87-P3zN-pq9UVj" TYPE="LVM2_member" 
/dev/sr0: UUID="2022-07-26-15-09-17-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos" 
/dev/sdb: UUID="2094adfe-a9b1-484c-bc46-2a9b9bfec376" TYPE="xfs" 
/dev/mapper/centos-root: UUID="99b29e15-ca6e-4bbe-aa5f-3484bcbc26e9" TYPE="xfs" 
/dev/mapper/centos-swap: UUID="483ff193-e987-4217-a157-98b8a622c543" TYPE="swap" 
/dev/mapper/centos-home: UUID="6c26df49-1716-4bc5-8a58-ff7720675e16" TYPE="xfs" 

# 显示系统中特定文件系统
[root@localhost ~ 21:20:11]# blkid /dev/sdb
/dev/sdb: UUID="2094adfe-a9b1-484c-bc46-2a9b9bfec376" TYPE="xfs" 

# 挂载设备并验证
[root@localhost ~ 21:20:15]# mount /dev/sdb /data
# 验证
[root@localhost ~ 21:21:23]# df -h /data
文件系统        容量  已用  可用 已用% 挂载点
/dev/sdb         20G   33M   20G    1% /data

# 创建文件测试
[root@localhost ~ 21:21:30]# touch /data/file-{00..09}
[root@localhost ~ 21:22:20]# ls /data
file-00  file-01  file-02  file-03  file-04  file-05  file-06  file-07  file-08  file-09

查看系统当前所有挂载,可以看到挂载的详细信息。

.....
/dev/mapper/centos-home on /home type xfs (rw,relatime,attr2,inode64,noquota)
/dev/sda1 on /boot type xfs (rw,relatime,attr2,inode64,noquota)
tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,size=402612k,mode=700)
/dev/sdb on /data type xfs (rw,relatime,attr2,inode64,noquota)
# 括号中属性,是文件系统当前支持的功能
[root@localhost ~ 21:22:55]# mount |grep ^/dev
/dev/mapper/centos-root on / type xfs (rw,relatime,attr2,inode64,noquota)
/dev/mapper/centos-home on /home type xfs (rw,relatime,attr2,inode64,noquota)
/dev/sda1 on /boot type xfs (rw,relatime,attr2,inode64,noquota)
/dev/sdb on /data type xfs (rw,relatime,attr2,inode64,noquota)

卸载文件系统
当文件系统不使用的时候,通过 umount 命令卸载。

umount命令语法:

umount device | dir

可以通过指定设备或者挂载点,卸载文件系统。

示例

[root@localhost ~ 21:23:54]# umount /data
[root@localhost ~ 21:25:15]# df -h /data
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   50G  1.6G   49G    4% /

卸载失败处理

[root@localhost ~ 21:25:19]# mount /dev/sdb /data
[root@localhost ~ 21:26:00]# cd /data
[root@localhost data 21:26:04]# ls
file-00  file-01  file-02  file-03  file-04  file-05  file-06  file-07  file-08  file-09

# 提示挂载点正在忙碌
[root@localhost data 21:26:06]# umount /dev/sdb
umount: /data:目标忙。
        (有些情况下通过 lsof(8) 或 fuser(1) 可以
         找到有关使用该设备的进程的有用信息)

lsof 命令
lsof,list open files,用于查看系统打开的文件。

lsof 命令语法:

lsof [options] [names]

常用选项:

-i,查看打开的 Internet 文件。例如 -i @10.1.8.20:22、-i :80
-p pid,根据进程PID查找特定进程打开的文件。
-u uid,根据用户 uid查找特定用户打开的文件。
names,是文件或者文件系统设备。

# 新开窗口查看哪个进程在使用挂载点
[root@localhost ~ 21:29:55]# lsof /data

fuser 命令
fuser,用于识别进程打开的文件。

fuser 命令语法:

fuser [-fMuvw] [-a|-s] [-4|-6] [-c|-m|-n SPACE] [-k [-i] [-SIGNAL]] NAME...

常用选项:

-k,杀死这些正在访问这些文件的进程。除非使用-signal修改信号,否则将发送SIGKILL信号。
-signal,指定发送的信号(signal 使用特定信号替换),缺省信号SIGKILL。
-i,交互模式杀死进程。
-l,列出所有已知的信号名称。
-m,列出文件系统被哪些程序使用。
-n,空间,选择不同的名字空间,可是file,udp,tcp。默认是file,也就是文件。
-4,仅查询IPV4套接字
-6,仅查询IPV6套接字。
-u,指定用户名。


案例:Linux 挂载 NTFS 格式U盘
思路:默认情况下 Linux不识别NTFS格式文件系统,需要安装相应的模块进行识别。


案例:Linux 挂载 exfat 格式U盘
思路:默认情况下 Linux 不识别 exfat 格式文件系统,需要安装相应的模块进行识别。


案例:构建基于 ISO 文件的 yum 仓库
client 想安装图形化,但仓库来源于Internet,希望使用本地仓库以提高速度。

现要求在server服务器上部署nginx服务发布dvd光盘中的仓库。

操作思路:

server上部署并配置nginx服务
server上挂载 ISO 文件到nginx服务网站目录
client创建指向server上web站点仓库
测试
部署web服务器



课后练习
查找系统中文件
locate
locate 命令根据文件名及其路径,在 mlocate 数据库中查找文件,并返回结果。数据库中存放文件和文件路径信息。

常规用户查找时,返回的结果仅包含用户有读取权限的目录树中匹配项。

查找文件前,需要root用户手动执行updatedb命令更新mlocate数据库。

[root@localhost ~ 21:33:39]# yum install -y mlocate

[root@localhost ~ 21:38:03]# updatedb

locate命令语法:
```bath
locate [OPTION]... [PATTERN]...

常用选项:

-b, --basename
-i, --ignore-case
-c, --count
-r, --regexp

示例:

[root@localhost ~ 21:38:07]# yum install -y httpd
# 安装后,未跟新数据库,所以检索不到
[root@localhost ~ 21:39:26]# locate httpd.conf


# 更新后查找
[root@localhost ~ 21:39:33]# updatedb
[root@localhost ~ 21:39:38]# locate httpd.conf
/etc/httpd/conf/httpd.conf
/usr/lib/tmpfiles.d/httpd.conf


# -b选项 查找
[root@localhost ~ 21:39:47]# locate -b httpd
/etc/httpd
/etc/httpd/conf/httpd.conf
/etc/logrotate.d/httpd
/etc/sysconfig/httpd
/usr/lib/systemd/system/httpd.service
/usr/lib/tmpfiles.d/httpd.conf
/usr/lib64/httpd
/usr/libexec/initscripts/legacy-actions/httpd
/usr/sbin/httpd
.....

# 扩展
[root@localhost ~ 21:39:52]# basename /usr/share/doc
doc
[root@localhost ~ 21:39:58]# dirname /usr/share/doc
/usr/share

# -i选项 忽略大小写
[root@localhost ~ 21:40:03]# locate PASSWD
[root@localhost ~ 21:40:14]# locate -i PASSWD


# -c选项 返回找到的数量
[root@localhost ~ 21:40:22]# locate -b -c PASSWD
0


# -r选项 正则表达式匹配查找
[root@localhost ~ 21:40:34]# locate -r 'http.*conf'
/etc/httpd/conf
/etc/httpd/conf.d
/etc/httpd/conf.modules.d
/etc/httpd/conf/httpd.conf
/etc/httpd/conf/magic
/etc/httpd/conf.d/README
/etc/httpd/conf.d/autoindex.conf
/etc/httpd/conf.d/userdir.conf
/etc/httpd/conf.d/welcome.conf
/etc/httpd/conf.modules.d/00-base.conf
/etc/httpd/conf.modules.d/00-dav.conf
/etc/httpd/conf.modules.d/00-lua.conf
/etc/httpd/conf.modules.d/00-mpm.conf
/etc/httpd/conf.modules.d/00-proxy.conf
/etc/httpd/conf.modules.d/00-systemd.conf
/etc/httpd/conf.modules.d/01-cgi.con
......

find
find 命令在本地文件系统中执行实时查找文件。使用find命令的用户对文件夹必须有读取和执行权限。

语法:

find [path] [expression] [action]

path,是查询路径,如果没有指定文件夹,将会查找当前目录及子目录。
expression,是查询条件表达式。
action,是找到文件后采取的动作。

根据文件 name 查找

[root@localhost ~ 21:40:44]# touch /etc/PASSWD
[root@localhost ~ 21:45:25]# find /etc/ -name passwd
/etc/passwd
/etc/pam.d/passwd
[root@localhost ~ 21:45:32]# find /etc/ -name '*passwd*'
/etc/passwd-
/etc/passwd
/etc/pam.d/passwd
/etc/security/opasswd
[root@localhost ~ 21:45:39]# find /etc/ -iname passwd
/etc/passwd
/etc/pam.d/passwd
/etc/PASSWD

根据文件 type 查找
-type 根据文件类型查找,支持文件类型:

b,block (buffered) special。
c,character (unbuffered) special。
d,directory。
p,named pipe (FIFO)。
f,regular file。
l,symbolic link。
s,socket。

[root@localhost ~ 21:45:44]# mkdir /etc/yum.repos.d/passwd
[root@localhost ~ 21:46:16]# find /etc/ -name 'passwd' -type d
/etc/yum.repos.d/passwd
[root@localhost ~ 21:46:21]# rmdir /etc/yum.repos.d/passwd

根据文件 owner 查找
-user、-uid,属于特定用户。

[root@localhost ~ 21:48:09]# id liang
uid=1000(liang) gid=1000(liang) 组=1000(liang)

根据文件 perm 查找

[root@localhost ~ 21:50:46]# mkdir lab;cd lab
[root@localhost lab 21:51:29]# touch file-{1..3}
[root@localhost lab 21:51:34]# ls -l file*
-rw-r--r-- 1 root root 0 5月  19 21:51 file-1
-rw-r--r-- 1 root root 0 5月  19 21:51 file-2
-rw-r--r-- 1 root root 0 5月  19 21:51 file-3

-perm mode,查找文件权限为mode的文件。


# 查找文件权限为764的文件 [root@centos7 lab]# find -perm 764 | xargs ls -l -rwxrw-r--. 1 root root 0 Dec 24 20:28 ./file-1 ```

-perm -mode,例如:mode为764,则ugo必须同时满足的最小权限:user至少为7、group至少为6、other为4。
```bash [root@centos7 lab]# chmod 777 file-1 [root@centos7 lab]# chmod 764 file-2 [root@centos7 lab]# chmod 760 file-3 [root@centos7 lab]# find . -perm -764 | xargs ls -l -rwxrwxrwx. 1 root root 0 Dec 24 20:28 ./file-1 -rwxrw-r--. 1 root root 0 Dec 24 20:28 ./file-2

# 0作为通配符,表示不匹配对应权限位。 # 查找系统中具有suid权限的文件 [root@centos7 lab]# find / -perm -4000

# 查找系统中同时具有特殊权限的文件:suid和sgid [root@centos7 lab]# find / -perm -6000 2>/dev/null |xargs ls -l -rwsr-sr-x. 1 abrt abrt 15344 Oct 2 2020 /usr/libexec/abrt-action-install-debuginfo-to-abrt-cache ```

-perm /mode,例如mode为764,则ugo只要有一个满足即可:user至少为7、group至少为6、other至少为4。
```bash [root@centos7 lab]# chmod a=- file-1 [root@centos7 lab]# chmod uo=-,g=rwx file-2 [root@centos7 lab]# chmod ug=-,o=r file-3

[root@centos7 lab]# find -name 'file-*' -perm /764| xargs ls -l ----rwx---. 1 root root 0 Dec 24 20:28 ./file-2 -------r--. 1 root root 0 Dec 24 20:28 ./file-3

# 查找系统中具有特殊权限的文件:suid、sgid、sticky [root@centos7 lab]# find / -perm /7000

# 查找系统中具有特殊权限的文件:suid或者sgid [root@centos7 lab]# find / -perm /6000 ```

-readable -writable -executable,文件具有可读、可写、可执行。




**根据文件 size 查找**
单位 c(字节)、k(KiB)、M(MiB)、G(GiB)
```bath
# 大小等于10M
[root@localhost ~ 21:53:51]# find -size 10M
# 大小大于10G
[root@localhost ~ 21:53:57]# find -size +10G

[root@localhost ~ 21:54:05]# find -size -10k
.# 大小小于10k
./.bash_logout
./.bash_profile
./.bashrc
./.cshrc
./.tcshrc
./anaconda-ks.cfg
./.bash_history
./lab
./lab/file-1
./lab/file-2
./lab/file-3
# 大小等于1M
[root@localhost ~ 21:54:10]# find -size 1M
.
./.bash_logout
./.bash_profile
./.bashrc
./.cshrc
./.tcshrc
./anaconda-ks.cfg
./.bash_history
./lab
# 注意:size会取整为1个单位,所以find -size 1M结果包含小于1M的文件。
# 可以使用1024k取代1M
[root@localhost ~ 21:54:20]# find -size 1024k

根据文件 time 查找
-amin, -cmin, -mmin 单位1分钟。
-atime, -ctime, -mtime 单位24小时。
-newer file,比file新的文件。

# 10分钟前(正好10分钟)
[root@localhost ~ 21:54:26]# find -amin 10

# 10分钟以前(大于10分钟)
[root@localhost ~ 21:57:28]# find -amin +10
./.bash_logout
./.bash_profile
./.bashrc
./.cshrc
./.tcshrc
./anaconda-ks.cfg
./.bash_history


# 10分钟以内(小于10分钟)
[root@localhost ~ 21:57:56]# find -amin -10
.
./lab
./lab/file-1
./lab/file-2
./lab/file-3

根据文件硬链接数和 inum 查找

# 硬链接数等于、大于、小于3的文件
[root@localhost ~ 21:58:22]# find -links 3
.
[root@localhost ~ 21:59:13]# find -links +3
[root@localhost ~ 21:59:21]# find -links -3
./.bash_logout
./.bash_profile
./.bashrc
./.cshrc
./.tcshrc
./anaconda-ks.cfg
./.bash_history
./lab
./lab/file-1
./lab/file-2
./lab/file-3


# inode为67160130的文件
[root@localhost ~ 21:59:27]# ls -i /etc/fstab
67160130 /etc/fstab
[root@localhost ~ 22:00:11]# find / -inum 67160130| xargs ls -i
67160130 /etc/fstab

在这里插入图片描述

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐