Linux基础

1. 目录结构

bin:指令
sbin:高级用户能使用的指令
dev:管理外围设备,如光驱、打印机等
etc:配置文件
lib:动态连接共享库,如C、C++的库文件等
media:挂载媒体设备,如软盘和光盘、U盘(可移动存储设备)
opt:需要安装的软件(第三方软件包)
root:root用户的文件
boot:该目录存放系统核心文件和启动时必须读取的文件

selinux:安全相关
home:存放普通用户的目录
lost-found:一般为空,非法关机后会存放一些文件
usr:用户安装的软件之类,类似program file
tmp:临时文件
mnt:临时挂在别的文件系统
var:不断变化的文件。类似日志
proc:进程信息,包含系统进程相关信息。是一个虚拟文件系统,包含正在运行进程信息。内核相关,不占用磁盘空间,不要动
srv:包含服务器特定服务相关的数据,内核相关,不要动
sys:内核相关,不要动

2. 常用指令

2.1 vim指令

拷贝当前行:yy
拷贝当前行向下5行:5yy
粘贴:p
删除当前行:dd
删除当前行向下5行:5dd
到文档最底行/最首行:G/gg
撤销输入的文本:u
将光标移到20行:先按20,然后按shift+g
显示/取消显示文件行行号:命令行下,:set nu / :set nonu

yy 5yy dd 5dd p是粘贴,u是撤销,移动光标shift+g

不管是重启还是关闭系统,要先运行sync,防止数据丢失

shutdown -h now		立刻进行关机
shutdown -h 1		1分钟后关机
shutdown -r now		立刻重启计算机
halt				立刻关机
reboot				立刻重启计算机
sync				把内存的数据同步到磁盘

2.2 用户和用户组

用户组:类似于角色
增加组:groupadd 组名
删除组:groupdel 组名

注销用户:logout
添加用户:useradd 【选项】 用户名 
		或 useradd -d 目录 用户名 
		或 useradd -g 用户组 用户名
设置密码:passwd 用户名
删除用户保留家目录:userdel 用户名
删除用户删除家目录:userdel -r 用户名

查询用户信息:id 用户名
高权限用户到低权限用户不用输密码,反之需要
当需要返回原来用户时,用exit


添加用户:useradd -d /home/admin -p admin admin
修改用户组:usermod -g 用户组 用户名

2.3 用户和组的相关文件

2.3.1 /etc/passwd文件

记录用户各种信息,中间用:分割

1 2 3 4 5 6 7
用户名 口令 用户标识号 组标识号 注释性描述 主目录 登录Shell

用户名:用户标识号:组标识号:注释性描述:主目录:登录Shell

2.3.2 /etc/shadow文件

口令的配置文件,中间用:分割

1 2 3 4 5 6 7 8 9
登录名 加密口令 最后一次修改时间 最小时间间隔 最大时间间隔 警告时间 不活动时间 失效时间 标识

2.3.3 /etc/group文件

组(group)配置文件,记录Linux包含组的信息,中间用:分割

1 2 3 4
组名 口令 组标识号 组内用户列表

2.4 文件操作指令

帮助命令:man 命令,help 命令

创建目录:mkdir 目录结构
创建多级目录:mkdir -p 目录结构
删除空目录:rmdir
删除非空目录:rm -rf
创建空文件:touch
拷贝文件:cp 源 目标(可以带路径,可以改名)
拷贝文件夹(递归拷贝):cp -r 源 目标
强制拷贝(覆盖):\cp
查看默认权限:umask

删除整个文件夹:rm -r
强制删除不提示:rm -rf

文件重命名:在文件当前目录 mv 文件名 新文件名
移动文件:mv 文件路径 新路径

浏览文件(只能看,不能改):cat 文件名 ; 
				显示行号 cat -n ;
				分页 cat -n 文件名 | more (按空格下翻)

more指令:浏览文本,空格:向下翻一页;
	回车:向下一行;
	q:立刻离开;
	Ctrl+F向下滚动一屏;
	Ctrl+B:向上滚动一屏;
	=:输出当前行号;
	:f:输出文件名和当前行号

less指令:也是分页浏览文件指令,但是不会直接加载整个文件


当前日历:cal 2020年日历:cal 2020
输出文本到控制台:echo

head指令:显示文件头,默认显示前10行。
	head -n 5 显示前5行
tail指令:tail 文件 默认显示后10行;
	tail -n 5 显示后5行;
	tail -f 实时追踪改文档更新
	
sed指令:sed -n '4,10p' a.txt  显示4到10行
sed 是流式编辑器,主要用来对文件做增删改操作。sed命令语法:sed 'pattern 命令' 文件名

软连接(类似快捷方式):ln -s 目录 连接名
删除软连接:rm -rf
history:显示执行命令行历史;history 5 显示倒数5行; !行号 执行第几行命令

date指令:
	date:显示时间
	date +%Y显示年份
	date "+%Y-%m-%d %H:%M:%S"
设置系统日期:date -s "日期"

find指令:find 【范围】 【选项】
	find /home -name hello.txt
	find /home -user root	查找数据root的文件
	find /home -size +20M 或-20M 或 20M(大于、小于、等于)
	find /home -mtime +10   查找10天前的数据

locate指令:快速定位文件
	一般需要安装:yum install -y mlocate
updatedb
locate hello.txt

du -m 文件名:查看文件大小h(G),m(M),k(KB),b(B)

2.5 find指令

匹配条件 中可使用的选项有二三十个之多,以下列出最常用的部份:

-name pattern:按文件名查找,支持使用通配符 * 和 ?。
-type type:按文件类型查找,可以是 f(普通文件)、d(目录)、l(符号链接)等。
-size [+-]size[cwbkMG]:按文件大小查找,支持使用 + 或 - 表示大于或小于指定大小,单位可以是 c(字节)、w(字数)、b(块数)、k(KB)、M(MB)或 G(GB)。
-mtime days:按修改时间查找,支持使用 + 或 - 表示在指定天数前或后,days 是一个整数表示天数。
-user username:按文件所有者查找。
-group groupname:按文件所属组查找。
动作: 可选的,用于对匹配到的文件执行操作,比如删除、复制等。

find 命令中用于时间的参数如下:

-amin n:查找在 n 分钟内被访问过的文件。
-atime n:查找在 n*24 小时内被访问过的文件。
-cmin n:查找在 n 分钟内状态发生变化的文件(例如权限)。
-ctime n:查找在 n*24 小时内状态发生变化的文件(例如权限)。
-mmin n:查找在 n 分钟内被修改过的文件。
-mtime n:查找在 n*24 小时内被修改过的文件。

+n:查找比 n 天前更早的文件或目录。

-n:查找在 n 天内更改过属性的文件或目录。

n:查找在 n 天前(指定那一天)更改过属性的文件或目录。
-rw-r--r--. 1 root root 25528 Dec 31  2022 a.txt
drwxr-xr-x:文件类型以及权限,第 1 位为文件类型字段,后 9 位为文件权限字段
1:链接数
root:文件拥有者
root:所属群组
25528:文件大小
May 6 00:14:文件最后被修改的时间
a.txt:文件名
常见的文件类型及其含义有:

d:目录
-:文件
l:链接文件

2.6 grep、 |、xargs、awk

grep命令和管道符 |
grep:过滤查找 -n显示行号 -i忽略大小写

管道符:将前一个命令得处理结果交给后面的指令处理
cat hello.txt | grep -ni yes

* : 表示当前目录所有文件,也可以是某个文件名
-r 是递归查找
-n 是显示行号
-R 查找所有文件包含子目录
-i 忽略大小写
-v 过滤掉某个文件
下面是一些有意思的命令行参数:
    grep -i pattern files :不区分大小写地搜索。默认情况区分大小写, 

    grep -l pattern files :只列出匹配的文件名, 

    grep -L pattern files :列出不匹配的文件名, 

    grep -w pattern files :只匹配整个单词,而不是字符串的一部分(如匹配‘magic’,而不是‘magical’), 

    grep -c number pattern files :显示匹配文本的总行数

    grep pattern1 | pattern2 files :显示匹配 pattern1 或 pattern2 的行, 

    grep pattern1 files | grep pattern2 :显示既匹配 pattern1 又匹配 pattern2 的行。 

这里还有些用于搜索的特殊符号:
\< 和 \> 分别标注单词的开始与结尾。

例如: 

grep man * 会匹配 ‘Batman’、‘manic’、‘man’等, 

grep '\<man' * 匹配‘manic’和‘man’,但不是‘Batman’, 

grep '\<man\>' 只匹配‘man’,而不是‘Batman’或‘manic’等其他的字符串。 

'^':指匹配的字符串在行首, 

'$':指匹配的字符串在行尾,  

 

2,xargs配合grep查找
xargs命令:
1.构造参数列表并运行命令,即将接收的参数传递给后面的command 命令执行
2.将多行输入转换为单行 (特殊功效)

# f是指普通文件
find -type f -name '*.php'|xargs grep 'GroupRecord'

find . -type f -name "*.log" -print0 | xargs -0 rm -f
-print0选项的作用是将文件名以空字符(null character)分隔,而不是默认的空格或换行符
xargs -0 将 \0 作为定界符。


3.awk
	awk是一个强大的文本分析工具,简单来说awk就是把文件逐行读入,(空格,制表符)为默认分隔符将每行切片,切开的部分再进行各种分析处理
	
	-F:指定分隔符,默认是空格、制表符
	
	awk会根据分隔符将行分成若干个字段,$0为整行,$1为第一个字段,$2 为第2个字段,依此类推…
	为打印一个字段或所有字段,使用print命令。这是一个awk动作

2.7 压缩和解压

1、gzip/gunzip:只能压缩成.gz文件(压缩完文件之后,源文件不保留),只能压缩文件,不能压缩目录
	gzip 1.txt ,压缩之后为1.txt.gz ,
	gunzip 1.txt.gz ,解压之后为1.txt
	
	# 压缩文件
    gzip filename

    # 解压缩文件
    gzip -d filename.gz
    或
    gunzip filename.gz

    # 压缩并保留原文件
    gzip -k filename
	
2、zip/unzip:zip 选项 文件
	zip a.zip a.txt :压缩文件
	zip -r a.zip a.txt :压缩目录(包含目录里文件),不写-r只会压缩空目录
	unzip -d 路径 文件:解压到指定路径(不写-d就解压到当前路径)

3、tar指令:打包指令,可以与其他压缩方式结合使用
	-c:创建一个新的归档文件。
    -x:从归档文件中提取文件。
    -f:指定归档文件的名称。
    -v:显示详细信息。
    -z:通过 gzip 压缩或解压缩。
    -j:通过 bzip2 压缩或解压缩。
    -J:通过 xz 压缩或解压缩。

	举例:tar -zcvf a.tar.gz 1.txt 2.txt 
		 tar -zcvf a.tar.gz /home 
		 tar -zxvf a.tar.gz -C /opt

2.8 组管理和权限管理

文件有:所有者、所在组、其他组
查看所有者:ls -ahl
修改文件所有者:chown 用户名 文件名
修改文件所在组:chgrp 组名 文件名
改变用户所在组:usermod -g 组名 用户名 
改变用户登录初始目录:usermod -d 目录名 用户名 

img

img

r=4 w=2 x=1

文件类型:-:普通文件;d:目录;l:软连接;c:字符设备(键盘、鼠标);b:块文件(硬盘)

chmod 755 文件名:

img

2.9 定时任务:crontab

-e 编辑
-l 查询
-r 删除当前用户定时任务

cron表达式占位符说明:共5位
分钟 小时 天 月 星期

特殊符号:
*:通配符
,:代表不连续的时间
-:范围时间
*/n:代表每隔多久执行一次

重启任务调度:service crond restart

2.10 系统运行级别(7种)

3.分区基础知识

img

img

img

img

img

-c:列出明细同时,增加汇总值
查询一个目录下文件的个数
ls -l /home | grep "^-" | wc -l

查询一个目录下文件的个数(包括子文件夹)
ls -lr /home | grep "^-" | wc -l

4.网络配置

/etc/sysconfig/network-scripts/ifcfg-eth0
img
img

4.1 配置固定ip地址

# 5.修改ip地址
vi /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet"
BOOTPROTO="static"
DEFROUTE="yes"
PEERDNS="yes"
PEERROUTES="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_PEERDNS="yes"
IPV6_PEERROUTES="yes"
IPV6_FAILURE_FATAL="no"
NAME="enp0s3"
UUID="f17ed393-95ad-4bdd-ab43-4228af6a64c3"
DEVICE="enp0s3"
ONBOOT="yes"
IPADDR="192.168.56.101"   

4.2 进程管理

1、每个执行的程序都叫做一个进程,有一个进程号
2、每个进程都有一个父进程,父进程可以复制多个子进程
3、每个进程都可能以两种方式存在,前台和后台
4、一般系统的服务都是以后台进程的形式存在,一般都常驻在系统中,直到关机才结束

4.2.1 ps指令

查看父进程id: ps -ef

终止进程:kill 【进程号】、killall 【进程名】(可以用通配符)
-9:强制杀死
pstree:数状显示进程信息
-p:显示进程id
-u:显示所属用户

img
img

5.服务管理

CentOS7以前关闭防火墙:

进入家目录:cd ~

关闭虚拟机防火墙:

关闭命令:  service iptables stop

永久关闭防火墙:chkconfig iptables off

两个命令同时运行,运行完成后查看防火墙关闭状态
service iptables status
1 关闭防火墙-----service iptables stop 
2 启动防火墙-----service iptables start 
3 重启防火墙-----service iptables restart 
4 查看防火墙状态--service iptables status 
5 永久关闭防火墙--chkconfig iptables off 
6 永久关闭后启用--chkconfig iptables on

查看linux有哪些服务

查看/etc/init.d/

5.1 服务运行级别

0:关机
1:单用户【可以用来找回丢失密码】
2:多用户状态没有网络服务
3:多用户状态有网络服务
4:系统未使用,保留给用户
5:图形界面
6:系统重启

常用运行级别是3和5
修改默认运行级别文件:/etc/inittab/
系统启动时,init进程会读取/etc/inittab/文件

命令:init[0123456]

如何找回密码:切换到单用户模式(不用输入密码),然后修改root用户密码

5.2 chkconfig指令

此命令可以给服务的各个运行级别设置是否自启动
查看服务:chkconfig --list | grep xxx
chkconfig 服务名 --list
chkconfig --level 5 服务名 on/off

6.进程监控

6.1 top指令

动态监控:top 【选项】 
-d:秒数,指定top每几秒更新,默认3秒
-i:不显示任何闲置或者僵死进程
-p:通过指定进程id来监控某个进程的状态

交互操作说明:
P:按CPU使用率排序,默认就是这个
M:按内存使用率排序
N:按PID排序
q:退出top
输入u:然后输入用户名,只查这个用户的进程
输入k:代表要杀死哪个进程id

7.网络服务

7.1 netstat指令

-an:按照一定顺序输出
-p:显示哪个进程在调用

netstat -a:显示所有的网络连接,包括监听中的和非监听中的。
netstat -t:显示所有 TCP 连接。
netstat -u:显示所有 UDP 连接。
netstat -n:以数字形式显示地址和端口号,而不是以名称和服务形式。
netstat -p:显示进程标识符和进程名称。
netstat -r:显示路由表。
netstat -s:显示统计信息,如错误的数据包、传输失败等。

8.RPM和YUM

RPM:一种包的管理标准

查询已经安装的rpm列表:rpm -qa | grep xx

安装:rpm -ivh test.rpm

卸载:rpm -e test

升级:rpm -Uvh test.rpm

卸载rpm包:rpm -e 包名称
强制删除:rpm -e --nodeps 包名称(不推荐)
安装:rpm ivh 包全路径名称
	i:installanzh
	v:verbos提示
	h:hash进度条

yum

是一个shell前端软件包管理器,能从指定服务器自动下载包,并自动处理依赖关系。
yum list | grep xxx
yum install xxx

开放8080端口:vim /etc/sysconfig/iptables

9.shell编程

应用程序 > shell > linux内核 > 硬件

1.脚本以#!/bin/bash开头
2.linux shell变量分为:系统变量和用户自定义变量
	系统变量:$HOME $PWD $SHELL $USER等;显示当前所有系统变量:set
3.shell变量的定义
	定义变量:变量=值
	撤销变量:unset=值
	声明静态变量:readonly变量,不能unset
4.定义变量的规则
	1、变量名称可以由字母、数组、下划线组成。但不能以数字开头
	2、等号两侧不能有空格
	3、变量名称一般习惯大写
5.将命令的返回值赋给变量
	1、A=`ls -la`反引号,运行里面的命令,并把结果返回给变量A
	2、A=$(ls -la)等价于反引号

设置环境变量

1.在/etc/profile中定义变量,比如:export TEST=1
2.source /etc/profile 使其生效

多行注释:
:<<!
!

位置参数变量(在脚本中获取命令行的参数)

1.基本语法:
	1、$n(n为数字,$0代表命令本身,$1-$9代表第一到九个参数,十以上的参数需要用大括号,如${10})
	2、$*(代表命令行所有参数,把所有的参数看成一个整体)
	3、$@(也代表命令行所有参数,不过每个参数区别对待)
	4、$#(代表所有参数的个数)
	

预定义变量

$$:当前进程号PID
$!:后台运行的最后一个进程号
$?:最后一次命令执行状态,如果是0则成功,如果非0(自己指定)则失败

运算符

基本语法
	1):$((运算式)) 或 $[运算式]	RESULT=$(((2+3)*4))		RESULT=$[(2+3)*4]
	2):expr m + n	(运算符中间要有空格 TEMP=expr `2 + 3`)
	3):expr m - n
	4):expr *,/,% 乘,除,取余
	
	
let命令,可以用于计算,变量前面不用加$,只支持整数运算,用于shell脚本中
举例:
let "A= 1 + 1"
echo "A=$A"	
	

9.1 条件判断

基本语法:
	[ condition ] (条件前后有空格,非空返回true)
#!/bin/bash
#判断文件是否存在
if [ -e /root/a.txt ]
then
	echo "存在"
fi

常用判断
1.两个整数比较
-lt	小于
-le	小于等于
-eq	等于(=也可以)
-gt	大于
-ge	大于等于
-ne	不等于
例子:[ a -lt b ]

2.字符串比较
=	

3.按照文件权限进行判断
-r	有读权限
-w	有写权限
-x	有执行权限

4.按照文件类型判断
-f	文件存在并是一个常规文件
-e	文件存在
-d	文件存在并是一个目录


举例:判断文件是否存在
#!/bin/bash
if [ -f $1 ]
then
	echo "存在"
fi

9.2 流程控制

1.if判断:
	if [ 条件判断式 ];then
		程序
		else
		程序
	fi
	或
	if [ 条件判断式 ] || [ 条件判断 ]
		then
		程序
		elif [ 条件判断式 ] && [ 条件 ]
		then
		程序
		else
		程序
	fi
    
2.case控制
	case $变量名 in
	"值1")
	程序1
	;;
	"值2")
	程序2
	;;
	*)
	如果变量的值都不是以上的值,则执行此程序
	;;
	esac
	
in后面有没有空格都行

3.for循环
	1.
	for 变量 in 值1 值2 值3...
	do
	程序
	done
	
	2.
	for((初始值;循环控制条件;变量变化))
	do
	程序
	done
	
4.while循环
	while [ 条件判断式 ]
	do
	程序
	done
	
5.read读取控制台输入
	read(选项)(参数)
		选项:
			-p:指定读取值时的提示符
			-t:指定读取时等待时间(秒)
		参数:
			变量:指定读取值的变量名

6.函数
	系统函数:
		1、basename
			功能:返回完整路径最后/的部分,常用于获取文件名
			语法:basename[pathname][suffix],带上suffix,就是去掉对应后缀名
		2、dirname
			功能:返回完整路径最后/的前面部分,常用于获取文件路径
			语法:dirname[pathname]
	自定义函数:
		基本语法:(不写function也行)
			[ function ] funname[()]
			{
				Action;
				[return int;]
			}
#!/bin/bash
for i in "$*"
do
	echo "the num is $i"
done
#################################
for i in "$@"
do
	echo "the num is $i"
done
##################################
SUM=0
for((i=1;i<=100;i++))
do
	SUM=$[$SUM + $i]
done
echo "the num is $SUM"
##################################
SUM=0
i=0
while [ $i -le $1 ]
do
	SUM=$[$SUM+$i]
	i=$[$i+1]
done
echo "the num is $SUM"
##################################
read -t 10 -p "请输入一个值NUM=" NUM   一定要有空格
echo "你输入的NUM=$NUM"

#自定义函数,计算两数之和
function getSum(){
	SUM=$[$n1 + $n2]
	echo "和="$SUM
}
read -p "请输入第一个数n1" n1 
read -p "请输入第二个数n2" n2 
#调用getSum
getSum $n1 $n2


#!/bin/bash

# 定义一个名为greet的函数
greet() {
    echo "Hello, $1!"
}

# 调用函数并传递参数
greet "World"

# 另一个例子,计算两个数的和
add_numbers() {
    local sum=$(( $1 + $2 ))
    echo "Sum: $sum"
}

# 调用函数并传递参数
add_numbers 5 3


9.3 综合案例

需求分析:

  • 每天凌晨2:10备份数据库cb_loan到/data/backup/db。

  • 备份开始和结束能给出相应提示信息。

  • 备份后文件要以备份时间为文件名,并打包成.tat.gz形式。

  • 在备份的同时,检查是否有10天前备份的数据库文件,如果有就将其删除。

#!/bin/bash

# 设置数据库名称和备份目录
DB_NAME="cb_loan"
BACKUP_DIR="/data/backup/db"

# 获取当前日期,用于命名备份文件
CURRENT_DATE=$(date +%Y-%m-%d)

# 创建备份文件名
BACKUP_FILE="$BACKUP_DIR/${DB_NAME}_backup_$CURRENT_DATE.sql"

#如果文件夹路径不存在就创建
if [ ! -d $BACKUP_DIR ];then
    mkdir -p /data
else
    echo "文件夹已经存在"
fi

# 提示备份开始
echo "Backup of database $DB_NAME started at $(date)"

# 执行数据库备份命令
mysqldump -u root -pYourPassword $DB_NAME > $BACKUP_FILE

# 检查备份是否成功
if [ $? -eq 0 ]; then
    echo "Database backup successful."
else
    echo "Error in database backup."
    exit 1
fi

# 打包备份文件为.tar.gz格式
tar -czf ${BACKUP_FILE}.tar.gz $BACKUP_FILE

# 删除原始的.sql备份文件
rm $BACKUP_FILE

# 提示备份结束
echo "Backup of database $DB_NAME completed at $(date)"

# 查找并删除10天前的备份文件
# {} 是 find 命令的一个占位符,代表当前找到的文件名。\; 是 -exec 选项的结束标志
find $BACKUP_DIR -type f -name "*.tar.gz" -mtime +10 -exec rm {} \;
(find 路径 -mtime +10 -name "*.tar.gz" | xargs rm -rf;)

echo "Old backups older than 10 days have been deleted."

经典linux指令组合

find ./ -name '*.txt' | xargs -I @ cp @ ./opt

awk -F : '{ print $1 }' /etc/passwd  

awk -F ':' 'BEGIN {print "start1,start7"} {print $1 "," $7} END {print "end1,end7"}' /etc/passwd

#清空10天前的文件内容to
find /path/to/directory -name "*.log" -mtime +10 -exec truncate --size=0 {} \;

10.常用linux指令

# 1.查看linux内核版本
uname -r

# 2.CentOS7查看服务是否开机自启
systemctl list-unit-files | grep firewalld

# 3.设置服务开机自启
systemctl enable firewalld

# 4.查看centos版本
cat /etc/centos-release

       

# 6.看文件大小
du -m 文件名	h(G),m(M),k(KB),b(B)

# 7.查看磁盘剩余空间
df -h

# 8.查看系统内存使用情况
free -h

11.centos6指令

1、防火墙命令
进入家目录:cd ~

关闭虚拟机防火墙:

关闭命令:  service iptables stop

永久关闭防火墙:chkconfig iptables off

两个命令同时运行,运行完成后查看防火墙关闭状态
service iptables status

1 关闭防火墙-----service iptables stop 
2 启动防火墙-----service iptables start 
3 重启防火墙-----service iptables restart 
4 查看防火墙状态--service iptables status 
5 永久关闭防火墙--chkconfig iptables off 
6 永久关闭后启用--chkconfig iptables on

linux同步服务器时间

## centOS
## * cn.pool.ntp.org是ntp网络授时组织的中国授时源
yum install -y ntp
ntpdate -u cn.pool.ntp.org
如果想每隔一定时间自动校时,只需将上面的命令加入至Cron就行了:
1    00 12 * * * /sbin/ntpdate -u cn.pool.ntp.org
posted @ 2021-10-14 17:34  微醺的小布  阅读(59)  评论(0)    收藏  举报