Linux常用命令及脚本知识

Linux常用命令及脚本知识

  Linux是目前应用最广泛的服务器操作系统,基于Unix,开源免费,系统的稳定性和安全性高。

Linux的目录结构

  / 下级目录结构

  • bin
      (binaries)存放二进制可执行文件
  • sbin
      (super user binaries)存放二进制可执行文件,只有root用户才能访问
  • etc
      (etcetera)存放系统配置文件
  • usr
      (unix shared resources)用于存放共享系统资源
  • home
      存放用户文件的根目录
  • root
      超级用户目录
  • dev
      (devices)用于存放设备文件
  • lib
      (library)存放跟文件系统中的程序运行所需要的共享库及内核模块
  • mnt
      (mount)系统管理员安装临时文件系统的安装点
  • boot
      存放用于系统引导时使用的各种文件
  • tmp
      (temporary)用于存放各种临时文件
  • var
      (variable)用于存放运行时需要改变数据的文件

常用命令

  命令格式:命令 -选项 参数  (选项和参数可以为空)

操作文件及目录

ls

  查看目录下的所有文件

ls     # 查看当前目录下的所有文件

ls -l  # 查看当前目录下所有文件的详细信息

ls -R  # 也可以层级显示,使用参数R。

cd

  切换目录

cd /home  # 切换到 home 文件夹中

pwd

  显示当前工作目录

pwd  # 打印出当前的工作目录的完整目录

touch

  创建空文件

touch xxoo.txt  # 创建xxoo文件,格式为txt

mkdir

  创建一个新目录

mkdir xxoo_dir            # 在当前目录中创建一个名为 xxoo_dir 的目录

mkdir -p dir0/dir1/dir2/  # 创建多级目录,父目录不存在的情况下先生成父目录

rmdir

  删除空目录

rmdir dir0  # 删除空目录dir0

cp

  复制文件或者目录

cp xxoo.txt xxoo_p.txt  # 复制xxoo.txt文件,结果为xxoo_p.txt

cp -r dir0/ dir1/       # 递归处理,将制定目录下的文件与子目录一并拷贝;

mv

  移动文件或目录、文件或目录改名

mv dir0 dir1  # 将 dir0 移动到 dir1(或者说将 dir0 改名为 dir1)

rm

  删除文件

# r  删除该目录下的所有文件
# f  强制删除文件或目录
rm -rf dir0  # 递归删除 dir0 目录中的所有文目录及文件

cat

  显示文本文件内容

cat xxoo.txt  # 查看 xxoo.txt 文件中的内容

more

  分页显示文本文件内容,可前后翻页,空格向后,b 键向前

more xxoo.txt  # 分页显示xxoo.txt文件中的内容

less

  分页显示文本文件内容,可前后翻页,空格向后,b键向前,支持底行模式

less xxoo.txt  # 分页显示xxoo.txt文件中的内容

  查看文本开头部分的内容,默认10行

head xxoo.txt  # 查看xxoo.txt文件前10行的内容

head -20 xxoo.txt  # 查看xxoo.txt文件前20行的内容

tail

  查看文本结尾部分的内容,默认10行

tail xxoo.txt      # 查看xxoo.txt文件中的最后10行

tail -20 xxoo.txt  # 查看xxoo.txt文件中的最后20行

tail -f xxoo.txt   # 循环滚动读取文件并动态显示在屏幕上,根据文件属性追踪

tail -F xxoo.txt   # 循环滚动读取文件并动态显示在屏幕上,根据文件名追踪

wc

  统计文本的行数、字数、字符数

wc xxoo.txt     # 统计xxoo.txt文件的行数、字数、字符数

wc -m xxoo.txt  # 统计xxoo.txt文件的字符数

wc -w xxoo.txt  # 统计xxoo.txt文件的文本字数

wc -l xxoo.txt  # 统计xxoo.txt文件的文本行数

find

  在系统中的指定目录下查找指定的文件

find / -name xxoo.txt  # 在根目录下查找名字为xxoo.txt的文件

grep

  在指定文件中查找包含指定内容的行

grep 69 xxoo.txt  # 在xxoo.txt文件中查找含有69的所有行

grep myFile.txt fileName.txt  # 也可以对两个文件进行比较,找出不同的内容。

ln

  建立链接文件

ln xxoo.txt xxoo_l.txt  # 建立链接文件

ln -s xxoo.txt xxoo_l.txt  # 对源文件建立符号链接,而非硬链接

系统常用命令

top

  显示当前系统中耗费资源最多的进程

top  # 显示系统中耗费资源最多的进程

date

  显示系统当前时间

date  # 显示系统当前时间

cal

  查看当前日期

cal  # 查看当前日期

cal 2020  # 也可以指定查看某一年的,比如说我们查看2021全年的日期,则输入如下命令即可。

cal 8 2008  # 也可以查看某年的某月,格式如下,以2008年8月为例

ps

  较少单独使用,配参数根据需求,ps -ef或者ps -aux

ps -e  # 显示所有进程,环境变量

ps -A  # 显示所有进程,环境变量

ps -ef  # 全格式显示

ps -a  # 显示所有用户的所有进程(包括其他用户)

ps -au  # 按用户名和启动时间的顺序来显示进程

ps -aux  # 显示无控制终端的进程

kill

  强制杀死一个进程

kill -9 69  # 强制杀死pid为69的进程

df

  显示文件系统磁盘空间的使用情况

df  # 显示文件系统磁盘空间的使用情况

df -h  # 以人类可读的方式显示,Kb,Mb,Gb等

du

  显示指定的目录及子目录已使用的空间的总和

du  # 显示指定的目录及其子目录已经使用的磁盘空间的总和

du -s *  # 显示指定目录的总和,*当前目录下表示所有

du -sh *  # 以人类可读的方式显示,Kb,Mb,Gb等

free

  显示当前内存和交换空间的使用情况

free  # 显示当前内存和交换空间的使用情况

free -h  # 以人类可读的方式显示当前内存和交换空间的使用情况

ifconfig

  网卡网络配置,常用于查看当前ip地址

ifconfig  # 网卡网络配置,常用于查看当前IP地址

ifconfig eth0 192.168.69.69  # 临时修改系统IP(重启后失效)

ping

  测试网络的连接性

ping baidu.com  # 测试网络的连接性

hostname

  查看主机名

hostname  # 查看主机名

shutdown

  关机

shutdown -r  # 先关机,再重启

shutdown -h  # 关机后不重启

halt

  关机后关闭电源

halt  # 关机后关闭电源,相当于shutdown -h

reboot

  重新启动

reboot  # 重新启动,相当于shutdown -r

clear

  清空屏幕。

clear

压缩解压缩

gzip

  压缩后面的文件或者文件夹

gzip xxoo.txt  # 压缩xxoo.txt文件

gzip -d xxoo.txt.gz  # 解压后面的压缩文件

gzip -9 xxoo.txt  # 指定的数字num调整压缩的速度,-1或--fast表示最快压缩方法(低圧缩比),-9或--best表示最慢的压缩方法(高压缩比)。系统省缺值为6

tar

压缩

  .tar.gz表示一种压缩格式。
  建立一个压缩文件

tar -zcvf file.tar.gz workSpace/*
# -------------------------------------------------
# 其中参数解释如下:
#  z      使用`gzip`进行压缩,`gzip`是一种压缩算法。
#  c      创建目标。
#  v      显示压缩的过程。
#  f      重命名,也就是给压缩文件进行重新命名。
# -------------------------------------------------
解压
tar -zxvf file.tar.gz
# -----------------------------------------
# 其中,x表示解压缩。
# 他们的参数的顺序是不固定的,可以进行任意的调整。
# -----------------------------------------

zip

  打包

zip file.zip *  # 进到待打包文件的同级目录里,然后进行打包,其中*表示将所有的文件进行打包。

zip file.zip -r workSpace/*  # 多层文件夹进行打包,需要将子文件加递归的都打包到压缩文件中

unzip

  解压
  切换到压缩包所在的文件的,然后运行如下命令即可:

unzip file.zip

下载文件

wget

  下载

wget url  # 下载

wget url -O newFile.tar.gz  # 可以对下载的东西进行重命名,其中参数是大写的字母欧(O),不是零。

文件权限操作

  Linux文件权限的描述格式解读

  • r(read) 可读权限,w(write) 可写权限,x(executable) 可执行权限(可也以用二进制表示111 110 100 ---> 764)
  • 第1位:文件类型(d(directory) 目录,- 普通文件,l(link) 链接文件)
  • 第2-4位:所属用户权限,用u(user)表示
  • 第5-7位:所属组权限,用g(group)表示
  • 第8-10位:其他用户权限,用o(other)表示
  • 第2-10位:表示所有的权限,用a(all)表示

chmod

  修改文件或目录的权限

# u  表示当前用户
# g  表示同组用户
# o  表示其他用户
# a  表示所有用户

# r  表示可读
# w  表示可写
# x  表示可执行

chmod u+r xxoo.txt  # 修改xxoo.txt文件给当前用户添加可读权限

chmod -R u+r xxoo  # 修改xxoo目录及其子目录的所有文件的权限,给当前用户添加可读权限

# 7  可读可写可执行,4+2+1
# 6  表示可读可写,4+2
# 5  表示可读可执行, 4+1
# 3  表示可写可执行,2+1

chmod 764 xxoo.sh  # 直接指定文件的权限,当前用户可读可写可执行,当前用户所属组可读可写,其他用户可读

chwon

  修改文件的所属用户和组

chwon user1:group1 xxoo.txt  # 将xxoo.txt文件的所属用户指定为user1,组为group1

# 用数字来表示权限
# r = 4
# w = 2
# x = 1
# - = 0

chwon -R user1:group1 xxoo.txt  # 修改目录下所有文件及子目录的所属用户和组

常用快捷键

Ctrl + C

  Ctrl + C  停止进程

Ctrl + L

  Ctrl + L  清屏

Ctrl + R

  Ctrl + R  搜索历史命令

Ctrl + Q

  Ctrl +Q  退出

Tab

  Tab  自动补全

vi 编辑器

一般指令模式

光标的移动方法
按键 说明 备注
h 或向左方向键(←) 光标向左移动一个字符 如果你将右手放在键盘上的话,你会发 现 hjkl 是排列在一起的,因此可以使用 这四个按钮来移动光标。 如果想要进行 多次移动的话,例如向下移动 30 列, 可以使用 "30j" 或 "30↓" 的组合按键, 亦即加上想要进行的次数(数字)后, 按下动作即可!
j 或向左方向键(↓) 光标向下移动一个字符
k 或向左方向键(↑) 光标向上移动一个字符
l 或向右方向键(→) 光标向右移动一个字符
[Ctrl] + [f] 屏幕“向下”移动一页,相当于 [Page Down]按 键 (常用)
[Ctrl] + [b] 屏幕“向上”移动一页,相当于 [Page Up] 按键 (常用)
[Ctrl] + [d] 屏幕“向下”移动半页
[Ctrl] + [u] 屏幕“向上”移动半页
+ 光标移动到非空白字符的下一列
- 光标移动到非空白字符的上一列
n 那个 n 表示“数字”,例如 20 。按下数字后再 按空白键,光标会向右移动这一列的 n 个字 符。例如 20 则光标会向后面移动 20 个字符距离。
0 或功能键[Home] 这是数字“ 0 ”:移动到这一列的最前面字符处 (常用)
$ 或功能键[End] 移动到这一列的最后面字符处(常用)
H 光标移动到这个屏幕的最上方那一列的第一 个字符
M 光标移动到这个屏幕的中央那一列的第一个 字符
L 光标移动到这个屏幕的最下方那一列的第一 个字符
G 移动到这个文件的最后一列(常用)
nG n 为数字。移动到这个文件的第 n 列。例如 20G 则会移动到这个文件的第 20 列(可配合 :set nu)
gg 移动到这个文件的第一列,相当于 1G 啊! (常用)
n n 为数字。光标向下移动 n 列(常用)
搜寻与取代
按键 说明 备注
/word 向光标之下寻找一个名称为 word 的字串。例 如要在文件内搜寻 vbird 这个字串,就输入 /vbird 即可! (常用) 使用 /word 配合 n 及 N 是非常有帮助 的!可以让你重复的找到一些你搜寻的 关键字!
?word 向光标之上寻找一个字串名称为 word 的字 串。
n 这个 n 是英文按键。代表“重复前一个搜 寻的动作”。举例来说, 如果刚刚我们执 行 /vbird 去向下搜寻 vbird 这个字串,则按下 n 后,会向下继续搜寻下一个名称为 vbird 的 字串。如果是执行 ?vbird 的话,那么按下 n 则会向上继续搜寻名称为 vbird 的字串!
N 这个 N 是英文按键。与 n 刚好相反,为“反 向”进行前一个搜寻动作。 例如 /vbird 后,按 下 N 则表示“向上”搜寻 vbird 。
:n1,n2s/word1/word2/g n1 与 n2 为数字。在第 n1 与 n2 列之间寻找 word1 这个字串,并将该字串取代为 word2 !举例来说,在 100 到 200 列之间搜寻 vbird 并取代为 VBIRD 则:“:100,200s/vbird/VBIRD/g”。(常用)
:1,$s/word1/word2/g 从第一列到最后一列寻找 word1 字串,并将 该字串取代为 word2 !(常用)
:1,$s/word1/word2/gc 从第一列到最后一列寻找 word1 字串,并将 该字串取代为 word2 !且在取代前显示提示 字符给使用者确认 (confirm) 是否需要取 代!(常用)
删除、复制与贴上
按键 说明 备注
x, X 在一列字当中,x 为向后删除一个字符 (相 当于 [del] 按键), X 为向前删除一个字符 (相当于 [backspace] 亦即是倒退键) (常 用)
nx n 为数字,连续向后删除 n 个字符。举例来 说,我要连续删除 10 个字符, “10x”。
dd 删除光标所在的那一整列(常用)
ndd n 为数字。删除光标所在的向下 n 列,例如 20dd 则是删除 20 列 (常用)
d1G 删除光标所在到第一列的所有数据
dG 删除光标所在到最后一列的所有数据
d$ 删除光标所在处,到该列的最后一个字符
d0 那个是数字的 0 ,删除光标所在处,到该列 的最前面一个字符
yy 复制光标所在的那一列(常用)
nyy n 为数字。复制光标所在的向下 n 列,例如 20yy 则是复制 20 列(常用)
y1G 复制光标所在列到第一列的所有数据
yG 复制光标所在列到最后一列的所有数据
y0 复制光标所在的那个字符到该列行首的所有 数据
y$ 复制光标所在的那个字符到该列行尾的所有 数据
p, P p 为将已复制的数据在光标下一列贴上,P 则 为贴在光标上一列! 举例来说,我目前光标 在第 20 列,且已经复制了 10 列数据。则按 下 p 后, 那 10 列数据会贴在原本的 20 列之 后,亦即由 21 列开始贴。但如果是按下 P 呢? 那么原本的第 20 列会被推到变成 30 列。 (常用)
J 将光标所在列与下一列的数据结合成同一列
c 重复删除多个数据,例如向下删除 10 列,[ 10cj ]
u 复原前一个动作。(常用) 这个 u 与 [Ctrl]+r 是很常用的指令!一 个是复原,另一个则是重做一次~ 利用 这两个功能按键,你的编辑,嘿嘿!很 快乐的啦!
[Ctrl]+r 重做上一个动作。(常用)
. 不要怀疑!这就是小数点!意思是重复前一 个动作的意思。 如果你想要重复删除、重复 贴上等等动作,按下小数点“.”就好了! (常 用)

一般指令模式切换到编辑模式

进入插入或取代的编辑模式
按键 说明 备注
i, I 进入插入模式(Insert mode):i 为“从目前光标所在处插入”, I 为“在目前所在列的第一个非空白 字符处开始插入”。 (常用)
a, A 进入插入模式(Insert mode):a 为“从目前光标所在的下一个字符 处开始插入”, A 为“从光标所在列 的最后一个字符处开始插入”。 (常用)
o, O 进入插入模式(Insert mode): 这是英文字母 o 的大小写。o 为“在目前光标所在的下一列处插 入新的一列”; O 为在目前光标所 在处的上一列插入新的一列!(常 用)
r, R 进入取代模式(Replace mode):r 只会取代光标所在的 那一个字符一次;R会一直取代光 标所在的文字,直到按下 ESC 为 止;(常用) 上面这些按键中,在 vi 画面的左下角处会出现“-- INSERT--”或“--REPLACE--”的字样。 由名称就知道 该动作了吧!!特别注意的是,我们上面也提过 了,你想要在文件里面输入字符时, 一定要在左下 角处看到 INSERT 或 REPLACE 才能输入喔!
[Esc] 退出编辑模式,回到一般指令模式 中(常用)

一般指令切换到命令行界面

命令行界面的储存、离开
按键 说明 备注
:w 将编辑的数据写入硬盘文件中(常用)
:w! 若文件属性为“只读”时,强制写入该文件。不过,到底能 不能写入, 还是跟你对该文件的文件权限有关啊! 注意一下啊,那个惊叹号 (!) 在 vi 当中,常常具 有“强制”的意思~
:q 离开 vi (常用)
:q! 若曾修改过文件,又不想储存,使用 ! 为强制离开不储存 盘案。
:wq 储存后离开,若为 :wq! 则为强制储存后离开 (常用)
ZZ 这是大写的 Z 喔!若文件没有更动,则不储存离开,若 文件已经被更动过,则储存后离开!
:w [filename] 将编辑的数据储存成另一个文件(类似另存新文件)
:r [filename] 在编辑的数据中,读入另一个文件的数据。亦即将 “filename” 这个文件内容加到光标所在列后面
:n1,n2 w [filename] 将 n1 到 n2 的内容储存成 filename 这个文件。
:! command 暂时离开 vi 到命令行界面下执行 command 的显示结 果!例如 “:! ls /home”即可在 vi 当中察看 /home 下面以 ls 输出的文件信息!
vim 环境的变更
按键 说明 备注
:set nu 显示行号,设置之后,会在每一列的字首显示该列的行 号
:set nonu 与 set nu 相反,为取消行号!

符号命令

重定向

>

  将前一条命令的输出,写入到后面的文本中,将文本清空,然后写入。

echo "hello world" > helloWorld.txt
>>

  将前一条命令的输出,写入到后面的文本中,不清空文本,追加写入。

echo "hello world" >> helloWorld.txt

|

  管道命令符,以前一个命令的输出作为输入,然后进行运算。

cat helloWorld.txt | grep 'hello'  # 打印helloWorld.txt中带有hello的行。

脚本知识

脚本

简单理解就是一堆Linux命令。

脚本文件

脚本文件一般是后缀名为.sh的文件。

执行脚本文件

sh fileName.sh

脚本文件中也可以定义变量,格式如下:

a=10

注意,等号(=)的前后不能有等号,不然会出现语法错误。

输出

Linux脚本中,也可以输出定义的变量,格式如下:

a=10
echo $a

在脚本中,使用echo打印结果,类同于Python中的print()方法。
echo也可以直接打印字符串,代码如下:

echo "Hello World"
echo Hello World

Linux脚本中,字符串可以不带引号,带与不带影响不是很大。但是为了增强代码的可读性,建议带上双引号。
echo也可以一次打印多个结果,格式如下:

a=10
echo "Hello World" $a

$

在上边我们看到了$这个符号,在什么时候使用它呢?在函数的定义阶段(赋值),不需要使用$;在变量的调用的时候,则需要使用$

计算

求和
a=10
b=3
c=`expr $a + $b`
echo $c

在上边的代码中,使用了一个变量c接收了计算结果,然后再将打印出来。其中,计算过程要使用反引号(`)将其括起来。
expr计算后边的式子的值。

求积
a=10
b=3
c=`expr $a * $c`
echo c

如果使用上边的代码进行计算a*c的积,则会报错,提示语法错误。是因为在脚本中,认为*是正则匹配的意思,所有就会出现错误。那么如何求两个变量的积呢,那就需要使用反斜线()进行转译就可以了,代码如下:

a=10
b=3
c=`expr $a \* $c`
echo c

总结下就是,+、-、*、/,其中乘转译一下就可以了,其他三个都不用处理。但是运算符的左右两端必须要加上空格,不然没有办法运算。
还有一个特殊的就是小括号(()),在脚本中也需要转译,书写为\(\)
在脚本脚本中,如果有非常长的公式的话,建议拆成多个短的公式。

if判断

a=5
b=35
if [ $a > $b ]
then
      echo $a
else
      echo $b
fi

上边的代码的结果输出为5,按照我们的逻辑应该输出的是35才对,这是为什么呢?这是因为Linux脚本中不能使用大于号(>)这类符号来进行比较运算。在脚本中,比较运算如下:

序号 比较运算 脚本中的使用方式 备注
1 等于(=) -eq equal
2 不等于(≠) -ne not equal
3 大于(>) -gt geater then
4 大于等于(≥) -ge geater or equal
5 小于(<) -lt less than
6 小于等于(≤) -le less or equal
所以,正确的代码如下:
a=5
b=35
if [ $a -gt $b ]
then
      echo $a
else
      echo $b
fi

注释

Linux脚本中注释使用#进行注释,加在每一行的最左端。

循环语句

for循环

格式如下:

for x in 1 2 3 4 5 6 7 8 9 10
do
      echo $x
done

上边代码中,for一行的x没有带$是因为这里的是赋值,所以不需要带。下边的使用了$是因为这里是调用。
本分版本可以简化为如下方式:

for x in {1 .. 10}
do
      echo $x
done
while循环

格式如下:

x=1
while [ $x -le 10 ]
do
      echo $x
      a=`expr $x + 1`
done

String

a="hello"
b="world"
echo $a $b

上边的代码输出的结果为放在一行的hello world,为什么会在一行的呢?因为echo会将后边的内容的原封不动的输出出来,因为我们在$a和$b中间加了一个空格,所以输出的结果才会在中间有一个空格。

read输入

代码如下:

echo "Please enter a: "
read a

echo "Please enter b: "
read b

c=`expr $a + $b`
echo $c

上边的代码的意思是输入a的值,然后输入b的值,然后输出a+c的和。read的意思是读取上一步输入的值。
如果将输入的的值和结果最终格式化输出怎么做呢?看下面的代码:

echo "Please enter a: "
read a

echo "Please enter b: "
read b

c=`expr $a + $b`
echo $a + $b = $c

上边代码的输出结果为:(假设输入的a为1,b为2)1 + 2 = 3

字符串比较

password="hello123"

echo "Please enter a password: "
read userPassword
if [ $password = $userPassword ]
then
      echo "密码正确"
else
      echo "密码错误"
fi

其中,字符串的比较使用等号(=)进行比较,其中等号(=)前后必须有一个空格。
另外,不等于(≠)使用!=进行表示。

字符串拼接

str1="hello"
str2="world"

str3="$str1 $str2"
echo $str3

判断一个字符串是不是空字符串,代码如下:

str1="hello"

if [ -z $str1 ]
then
      echo "str1 是空的"
else
      echo "str1 不是空的"
fi

其中,-z表示是不是空的,其中z是zero的缩写。另外还有-n,它是不是空的的意思,其中n是 not zero的缩写。

数组

创建数组

arr=(1 2 3 4)

含有数组的脚本一般使用bash进行运行(bashsh的众多升级版中的一个,它支持数组),如果使用sh进行运行,则会报错,提示语法错误。
打印数组中的元素的话,如果直接使用一下方式:

arr=(1 2 3 4)
echo $arr

如果直接这样打印,则会输出第一个元素 1,显而易见这样是不行的。如果想要完全都打印出来,则需要for循环打印。代码如下:

arr=(1 2 3 4)
for x in ${arr[@]}
do
      echo $x
done

其中,给arr套上大括号({})是为了告诉系统这是一个数组。
如果只想要其中的地某个元素,则直接使用${变量名[index]}的方式进行了,其中的索引与Python的方式是一样的,代码如下:

arr=(1 2 3 4)
echo ${arr[2]}

这样就可以输出3这个元素了。
如果想要将数组中所有元素的和求出来,可是使用for循环进行,代码稍微改动即可,见下方代码:

arr=(1 2 3 4)
sum=0
for x in ${arr[@]}
do
      sum=`expr $sum + $x`
done
echo $sum

如果要找数组中的最大元素,则代码如下:

arr=(1 2 3 4)
maxNum=${arr[0]}
for x in ${arr[@]}
do
      if [ $x -gt $maxNum ]
      then
            maxNum=$x
      fi
done
echo $maxNum

全局变量

USER
当前登录系统的用户的用户名
HOME
当前用户的主目录
利用这个全局变量,可以直接进入用户主目录。

cd $HOME

进入用户主目录也可以使用如下方式:

cd ~

同理,也可以使用~的方式查看主目录:

echo ~

PATH
查看环境变量

echo $PATH

放在环境变量路径中的可执行文件可以直接执行。
添加环境变量

PATH=$PATH:/home/ubuntu/workspace

另外,PATH中的环境变量都是通过冒号(:)隔开的。

posted @ 2021-01-13 18:11  AKA绒滑服贵  阅读(362)  评论(0)    收藏  举报