Linux命令速查手册(第2版)学习详解程序员

第1章、需要了解的命令行相关事项

表1-1 如何在文件名字符中使用特殊字符
字符 建议
/ 绝不使用。不能转义
/ 必须转义。避免使用
_ 绝不能作为文件或目录名的第一个字符
[] 必须转义。避免使用
{} 必须转义。避免使用
* 必须转义。避免使用
? 必须转义。避免使用
必须转义。避免使用
必须转义。避免使用
<空格> 必须转义。通常无法避免,但尽量避免
表1-2通配符及其匹配含义
符号 含义
* 匹配0个或者多个任意字符
匹配单个字符
[] 匹配一组单个字符
{} 字符串和范围{jpg,png}

 clear:重置屏幕

第2章、导航文件系统

ls命令详解
ls 列出文件和文件夹
ls path 列出文件夹内容
ls /home/*.wmv 使用通配符列出文件夹的内容
ls -R/ls –recursive 查看子文件夹中的文件列表
ls -1/ls –format=single-column 以一行显示内容列表
ls -m/ls –format=commas 以逗号分隔列表显示内容
ls -a/ls -all 查看隐藏的文件和文件夹
ls -A 查看不显示.与..隐藏文件夹
ls -F/ls –classfy

直观显示文件的类型

字符 含义
* 可执行文件
/ 目录
@ 符号链接文件
| FIFO(也称为命名管道)
= 套接字
ls –color

以各种颜色显示内容

颜色 含义
默认的shell文本颜色 普通文件
绿色 可执行文件
蓝色 目录
紫红色 符号链接文件
黄色 FIFO
紫红色 套接字
红色 压缩文件(.tar、.zip、.deb、.rpm)
紫红色 图像文件(.jpg、.gif、.png、.tiff)
紫红色 音频文件(.mp3、.ogg、.wav)
ls -l/ls –format=long

列出权限、所有者以及其他信息

字符 文件类型
_ 普通文件
_ 可执行文件
d 目录
l 符号链接文件
s 套接字
b 块设备
c 字符设备
p 命名管道(AKA FIFO)

r 允许读取 w 允许改写 x 允许执行 -出现在什么位置代表没有不能什么

所有者/组(root)的成员/其他用户

 ls -r/ls –reverse 倒序显示文件内容
 ls -t/ls –sort=time 按日期和时间排序内容
ls -S/ls –sort=size 按文件大小排序内容
ls -h/ls –human-readable 用k、M、G显示文件大小
ls -i 理解Linux存储文件的方式显示文件索引节点号
pwd

显示当前目录路径

pwd -P/pwd –physical 显示目标路径

pwd -L/pwd –logical 显示逻辑路径

cd

切换路径

cd – 切换到之前路径

 第3章、创建和消毁

touch命令

touch a.txt 将文件修改为当前时间
touch -t

将文件修改为任意所需的时间

-t[[CC]YY]MMDDhhmm[.ss]

字符 含义
CC 4位年份数字中前2位字符
YY 2位数字的年份:
1、如果是00~68,假设年份的前2位数字是20
2、如果是69~99,假设年份的前2位数字是19
如果没有,那假设为当前年份
MM 月份(01~12)
DD 日期(01-31)
hh 小时(01~23)
mm 分钟(00~59)
ss 秒钟(00~59)
touch notexist.txt 创建空文件notexist.txt
mkdir 命令
mkdir new 创建新目录

mkdir -p tets/test

mkdir –parents test/test

创建新目录以及必要的子目录

  

  cp命令

 cp a.txt a_copy.txt

 cp 源文件 复制后路径

 cp 源文件 .(在当前目录创建源文件快捷方式)

复制文件
 cp *  使用通配符复制文件
 cp -v/cp  –verbose  显示复制文件的过程
 cp -i/cp –interactive  防止在复制是覆盖重要文件
cp -r/cp –recursive 复制目录以及子文件
cp -a/cp –archive/cp -dpr/cp –no-dereference –preserve -recursive 为建立完善副本而将文件复制到另外的一个目录
mv命令

mv a/a a/b

mv a/a .

移动文件和文件夹

mv a b

重命名文件和文件夹

a如果是软链接加上/代表软链接指向的目录

ln命令
ln a.txt b.txt 创建指向另一个文件或目录的链接

sudo ln -s /var/www /www

sudo ln -s /var/www .

sudo ln -s /var/www

创建软链接
unlink a.txt 移除链接
硬链接与软链接区别
类型 硬链接 软链接
链接指向 索引节点 名称
链接到目录
跨文件系统链接
移动源文件 链接有效 链接断开
更改目标的名称 链接有效 链接断开 
 删除链接  目标仍然存在*   目标仍然存在*
链接的索引节点  与目标相同 与目标不同
存储空间 ~4KB
rm 命令
rm a.txt 删除文件
rm *.txt 使用通配符删除文件
rm -i 防止删除关键文件
rmdir path 删除空目录
rm -rf/rm –recursive –force          删除文件和非空目录

第4章、学习命令

man命令[manual(手册)]
man ls

查找ls命令相关信息

NAME 命令名称及功能简要说明
SYNOPSIS 用法说明,包括可用的选项
DESCRIPTION 命令功能的详细说明,可能包括每一个选项的意义
OPTIONS 说明每一项的意义
FILES 此命令相关的配置文件
BUGS 已经错误,以及如何汇报错误
COPYRIGHT 版权信息
SEE ALSO 参见
man -f/man –whatis/whatis 基于命令名称来快速弄清其功能
 man -k/man –apropos/apropos 基于其功能搜索命令
 man [1-2] passwd  读取特定页数的手册
info命令
info info 学习info命令
info -d 添加包含info格式帮助文档的目录
info -f 指定要读取的info格式的帮助文档
info -n 指定首先访问的info帮助文件的节点
 info按键
? 显示info的常用快捷键
N 显示(相对于本节点的)下一节点的文档内容
P 显示(相对于本节点的)下一节点的文档内容
U 进入当前命令所在的主题
M 敲M键后输入命令的名称就可以查看该命令的帮助文档了
G 敲G键后输入主题名称,进入该主题
L 回到上一个访问的页面
SPACE 向前滚动一页
BACKUP/DEL 向后滚动一页
Q 退出info
whereis 命令
whereis kword 查找命令的可执行文件、源文件、手册路径
whereis -b 只查找二进制文件路径
whereis -m 只查找手册路径

whereis -s

只查找源文件路径
which命令
which kword 查找将要运行命令的路径
which -a kword/whereis -s kword 显示kword命令全部路径
type命令
type ls

shell如何解释命令

alias 别名
keyword 关键字,Shell保留字
function 函数,Shell函数
builtin 内建命令,Shell内建命令
file 文件,磁盘文件,外部命令
type -t ls builtin

第5章、组合命令

命令栈:

5.1、将命令放在一行上,以;分隔命令。

5.2、用&&代替;,紧当前面的命令执行成功后才进行后面的命令。

5.3、||紧当前面的命令执行失败后才执行后面的命令。

5.4、$(),将一条命令的输出插入到另外一条命令中如mkdir $(date “+%Y-%m-%d”);

5.5、

三种输入/输出流
文字描述符 名称 常见缩写名 典型的默认设备
0 标准输入 stdin 键盘
1 标准输出 stdout 终端
2 标准错误 stderr 终端
管道|用法
ls -1 | less 将ls -1结果传递到 less
ps ux | grep firefox 查找是否有firefox程序在运行

5.6、>将结果输出定向输出到文件中

ls -1F > a.txt

5.7、set -o noclobber 防止重定向覆盖文件 如果需要覆盖文件使用>| 替代 >,取消noclobber set +o noclobber.

5.8、将命令输出追加到文件中用>>

5.9、将文件用作命令的输入使用<,例子:tr ‘A-Z’ ‘a-z’ < command.txt > command_lower.txt.

5.10、tee命令将输出同时发送到文件和stdout, ls -1 | tee command.txt,追加使用tee -a ls-1 | tee -a command.txt。

第6章、查看文件

文件相关命令
file a.txt 显示文件类型
cat a.txt 在标准输出设备上查看文件
cat a.txt b.txt 将文件拼接到标准输出设备上
cat a.txt b.txt > c.txt 将文件拼接到另外的文件
cat -n 拼接文件并显示行号

 less

逐屏显示文件

用于less的按键命令
按键命令 操作
PageDn、e或者空格键 前进一页
PageUp、b 后退一页
Return、e、j、下箭头 前进一行
y、k、上箭头 后退一行
G、p 前进到文件的结尾
1G 回到文件的开始位置
Esc~)或右箭头 向右滑动
Esc~(或左箭头 向左滑动
Q 退出less命令

less -M或者按”=”键

less的结果中显示文件信息

ls –color | less -R

修复特殊字符带来的混淆

less搜索命令/
按键命令 操作
/pattern 向前搜索使用正则表达式表示的模式
n 重复向前搜索
N 重复向后搜索
export EDITOR=vim

按v进入编辑器,使用左边设置默认编辑器

head a.txt b.txt

查看多个文件的前10行数据没有b.txt就显示单个文件

head -n 100

显示文件的前100行数据

head -c
head -c 100 显示文件前100字节
head -c 100KB 显示文件前100KB
head -c 100MB 显示文件前100MB
各种前缀以及他们所代表的字节数
旧前缀 含义 新前缀 含义

kilo比优特

(kB)

103  1000字节

kibibyte

(KiB/K)

210  1024字节

 megabyte

(MB)

 106  1000kB

mebibyte

(MiB/M)

 220  1024KiB

 gigabyte

(GB)

109 1000MB

 gibibyte

(GiB/G)

 230 1024MiB

 terabyte

(TB)

 1012 1000GB

 tebibyte

(TiB/T)

 240 1024GiB

 petabyte

(PB)

 1015  1000TB

 pebibyte

(PiB/P)

 250 1024TiB

exabyte

(EB)

 1018  1000PB

 exbibyte

(EiB/E)

 260 1024PiB
 tail 查看文件倒数10行
tail -n 10/ tail –lines=10 查看文件倒数n行数据
tail-f

查看文件经常更新行

tail -f –pid=2112 /var/log/apache2/error.log

tail –retry 文件消失或者突然不可访问

第7章、使用过滤器操作文本文件

过滤器操作文本文件
wc

  wc -l/wc –lines 提供行数

wc -m/wc –chars 提供字符数

wc -w/wc –words 提供单词数

默认显示全部

sed ‘/^$/d’ “a.txt” | wc -l 删除a.txt空白来统计数据
nl

nl 给文件非空行编号

nl -b  t给文件非空行编号

nl -b a给文件所有行编号

cut

 cut -f(–fields) 1,3 a.txt

 echo wu.images.xx.com | cut -d ‘.’ -f 2-4

cut -f 1,3 –output-delimiter=’,’ a.txt

 sort

sed ld a.txt | sort -t ‘  ’ -k 4 -r

-k/–key

-r/–reverse

du -d 1 -h | sort -h(如果du -h,sort -h才能正确排序 sort -n 会不能正确排序)

uniq

去重命令(uniq去重去的是相邻重复元素 )

history | awk ‘{print $2}’ | sort | uniq

tr

tr a-z A-Z 将字符小写转大写

[:alnum:] 字母设置(A-Z,a-z,0-9)
[:alpha:] 字母(A-Z、a-z)
[:blank:] 空白(空格、制表符)
[:digit:] 数字(0-9)
[:lower:] 小写字母(a-z)
[:punct:] 标点和符号
[:space:] 空格(空格、制表符、换行、垂直空白)
[:upper] 大写字母(A-Z)
tr -s

使用单个实例替换多个重复的字符如: tr -s [:blank:]

tr -d

删除匹配的字符

sed ‘s/markdown.txt/markdown/g’ 转换文本
awk

打印文件中的特定字段

wc -c /var/mail/mail | awk ‘{print $1}’

第8章、拥有者和权限

拥有者和权限命令
whoami 查看身份命令
su username 切换到username用户
su -l/su –login user 登录user账号
su如果不行就sudo su 成为root用户
su – 登录root用户
chgrp chgrp admins a.sh 将a.sh用户组修改为admins组
chgrp -R/–recursive 递归修改文件用户组
chown chown u a.txt 改变文件的拥有者
chown -R/–recursive 与chgrp -R类似
chown owner:group

chown u:admins a.txt同时修改用户以及用户组

chown :group 等价于 chgrp 命令

chmod
用户组 缩写
用户(拥有者) u
用户组 g
其他人 o
  权限字母及其含义   
文件属性  缩写  针对文件的含义  针对目录的含义
 可读取 r 可查看 可使用ls命令列出内容
 可写入 w 可编辑 可删除、重命名、添加文件
 可执行 x  可作为程序运行 有权读取文件或子目录或运行文件
suid s  任何用户都可以使用拥有者的权限执行文件 不适用
 sgid  s 任何用户都可以使用用户组的权限执行文件  目录中新建的文件都属于拥有目录的用户组
 suid或sgid,但不可执行  S

任何用户都可以使用拥有者的权限(如果是suid)

任何用户都可以使用用户组的权限(如果是sgid)执行文件

但文件不可执行

不适用 
 sticky bit  t 不适用  除非用户是文件或者目录的拥有者,否则不能删除或重命名文件
sticky bit,但不可执行  T 不适用   用户不只能删除或重命名自己的文件,但无权读取文件和子目录

上表root用户除外

chmod [ugo][-+=][rwx]

chmod [0-7][0-7][0-7]

权限和相应的数字表示
  拥有者 用户组 其他用户
权限 r;w;x; r;w;x; r;w;x;
数字 4;2;1 4;2;1 4;2;1
ls -l 命令表示的数字权限
数字

ls -l表示法

0
1 –x
2 -w-
3 -wx
4 r–
5 r-x
6 rw-
7 rwx

chmod 600 a.txt

chmod -R 递归修改权限

 chmod u[+-]s

chmod 4[0-7][0-7][0-7]

设置suid chmod u+s a.txt 或 suid 4754 a.txt

取消suid chmod u-s a.txt 或 suid 0754 a.txt

 chmod g[+-]s

chmod 2[0-7][0-7][0-7]

设置或者取消sgid 

chmod [+-]t

chmod 1[0-7][0-7][0-7]

设置或者取消 sticky bit

第9章、归档和压缩

归档与压缩相关命令
zip a.zip a.txt b.txt 将文件压缩到a.zip压缩文件中
zip -[0-9]
不同压缩率的比较结果
书名 zip -0 zip -6 zip -9
Moby-Dick 0% 54% 61%
Paradise Lost 0% 50% 56%
《约伯书》 0% 58% 65%
总计(字节) 1848444 869946 747730
zip -i/–include zip a.zip . -i /*.txt
zip -r/–recurse-paths zip -r a.zip reading/ -i /*.txt

zip -P

zip -e

用密码保护压缩的zip文档

zip -P 123456 a.zip *.txt

zip -e a.zip *.txt

 unzip a.zip

解压缩文件

unzip -v(verbose) 查看具体操作

unzip -t(测试解压缩文件)

zip -l!

gzip

gzip 与 zip类似也有压缩率选项

gzip 可以不需要压缩后压缩文件名,默认删除原压缩文件

gzip a.txt

gzip -c a.txt > a.txt.gz(通过-c保留原文件)

gzip -r 与zip -r 类似,但是单独压缩

gunzip

gunzip a.txt.gz 默认会删除压缩文件

gunzip -c a.txt.gz > a.txt (保留原压缩文件)

gunzip -t 测试解压缩命令

bzip2

bzip2也存在压缩率

bzip2 a.txt  默认生成.bz2文件删除原文件

bzip2 -k a.txt(-k/–keep)保留原文件

bunzip2

bunzip2 a.txt.bz2 默认删除压缩文件

bunzip2 -k a.txt.bz2 保留压缩文件

bunzip2 -t 测试解压缩命令

tar

tar -cf a.tar *.txt

tar -cf a.tar a/

-p/–preserve-permissions、–same-permissions保留权限

-z(–gzip) 可以tar调用gzip命令

-v/–verbose

tar -pzcvf a.tar.gz moby-dick/

-j使用bzip2命令

tar -zvtf测试解压缩文件如果是bzip2压缩使用 tar -jvtf

tar -pzvxf a.tar.gz解压缩文件(-x/–exteact)

第10章、查找文件、目录、单词和短语

查找相关命令
locate

可能slocate命令或者mlocate

locate slocate.db

locate -i 不区分大小写搜索
updatedb 更新locate数据库,time updatedb会显示运行耗时
grep

grep xxx a.txt/*.txt 在文件中查找xxx字符串

grep的不同版本
模式解释为 grep命令选项 单独的命令
基本的正则表达式 grep -G/–basic-regexp grep
扩展的正则表达式

grep -E/–extended-regexp

egrep
固定字符串的列表,匹配其中任何一项  grep -F/–fixed-string  fgrep
Perl正则表达式

grep -P/–perl-regexp

不可用

 grep ‘hello man!’ *

grep -R递归查找字符串

grep –color=auto搜索单词并突出结果

grep -i 忽略大小写

grep -w 搜索完整单词

grep -n 显示行号

[command] | grep

grep [-ABC] -A/–after-context -B/–before-context -C/–context=#

grep -v显示文件中没有匹配的行数据

grep -l/–files-with-matches 列出包含搜索词语的文件

grep -c 文件中单词出现的次数 grep -c rocky “a.txt”

grep | grep 在搜索结果中搜索

find
find命令
find -name

根据名称查找文件

find . -name song

find . -name “*song*”

find -user

find -group

根据user查找文件

如find . -user scott

排除用户查找文件

find . ! -user scott

group用法与user用法类似根据组名或者编号

find -size

根据文件大小搜索文件

文件大小搜索文件
后缀 含义
b 512字节块(默认值)
c 字节
k 千字节(KB)
M 兆字节(MB)
G 吉字节(GB)

find . -size 10M(大于+10M 小于-10M)

find -type

根据文件类型查找文件

根据文件类型搜索文件
文件类型字母 含义
f 常规文件
d 目录
l 符号(软)链接
b 特殊块文件
c 特殊字符文件
p FIFO文件
s 套接字

find . -name “*song*” -type f

 find -amin|-cmin|-mmin

find -atime|-ctime|-mtime

find -anewer|-cnewer|-newer|-newerXY

find . -mmin +240

根据时间搜索文件的数字参数
数字参数 含义
+n 大于n
-n 小于n
n 等于n

stat a.txt 查看文件状态

文件状态
Access 访问意味着读取内容,但不会改动任何内容,相关示例是less命令
Change 更改意味着改动元数据或文件状态,但不改动内容,相关示例是chmod、chown、link、rename命令
Modify 修改意味着通过编辑来改动数据
  根据时间搜索文件测试
 测试 含义
分钟 
 -amin n n分钟前访问过
-cmin n n分钟前更改过状态
 -mmin n n分钟前修改过数据
小时(忽略天数的小数部分) 
-atime n n*24小时前访问过
 -ctime n  n*24小时前更改过状态
 -mtime n  n*24小时前修改过数据
   
 find -a

当表达式全为true才显示

find . -name “*song*” -a -type -f

 find -o

当任一表达式为true就显示

find .  /( -name “*song*” -o -type -f /) -a ! -wholename “*project*”

 find -n

查找不符合条件的文件

find .  ! /( -name “*song*” -o -type -f /) -a ! -wholename “*project*”

find -exec

对查询到的结果执行命令

find . -name “*MP3” -exec rename ‘s/MP3/mp3/g’ {} /;

find +

find | xargs

find . -name “*song*” -exec rm {} +

find -print0 | xargs -0

对找到包含空格的文件执行命令

find . -name “*song*” -print0 | xargs -0 rm

 

第12章、shell

shell 相关命令
history

查询历史shell命令

history

history | less

history 10 查询最近10条命令

history | grep version 查找包含version的命令

!! 再次执行上次命令
![##] !499 使用命令行号再次运行之前的命令
![string]

!history 从命令历史从后往前匹配第一条命令

^-r(ctrl-r)

^-s(ctrl-s)

^-g(ctrl-g)

ctrl-rc查找历史命令并执行

ctrl-s在历史命令中向前搜索,无效需要XOXF流程控制临时禁用stty -ixon

ctrl-g 取消搜索

alias
alias
alias 显示所有命令的别名
alias [alias name] alias you查看特定命令的别名
alias [alias name]=”[command]”

alias ls=”la -afo”创建临时别名,永久别名

需要修改.bashrc或.bash_aliases

ls -a ~

unalias 删除别名
function

mkcd () { mkdir -p “$1”; cd “$1”;}//单行模式结束需要加;

listfunc(){

for func in $(compgen -A function | grep -v _);

do

declare -f $func;

echo -e “/r”;

done

}

unset -f name unset -f mkcd;删除函数,在会话中有效

第13章、监控资源

系统资源相关命令
uptime 显示计算机工作时间
ps
ps命令
ps -aux

a表示所有用户

u以面向用户的形式显示或显示每个进程的用户

x没有控制终端设备或终端屏幕的进程(显示每个进程的另一说法)

STAT列字母含义
STAT字母 含义
R 正在运行
S 正在休眠
T 已停止
Z 僵尸进程

ps -aux | grep [f]irefox | less

ps -ajxf

查看进程树

 j用于BSD作业控制格式,它确定你看到的列

f(ASCII art forest)选项

ps -u [username] 查看特定用户拥有的进程

kill

killall

kill命令相关的常用信号
信号编号 信号单词 含义
-1 -HUP(挂起)

控制进程已停止运行。关闭进程(用于系统服务会导致重新加载配置文件并重启)

-15 -TERM 正常终止进程,清除将要失控的进程和文件
-9 -KILL 停止任何正在进行的处理工作,立即关闭进程

没有默认-15

STAT为Z 无法kill

kill pid

killall使用进程名称

killall cronolog

 top top按照cpu使用动态显示进程 ?显示帮助Q退出top命令 k可以kill进程
 lsof 显示打开的文件
 lsof -u lsof -u root 显示特定用户打开的文件
lsof [file]

 列出使用特定文件的用户

lsof /usr/sbin/sshd

 lsof -c [program]

列出特定程序的进程

lsof -c sshd

free

显示系统RAM相关信息

free

free -m

df

显示硬盘空间量

df -h(human-readable)

du

报告目录使用的文件空间

du

du -h

du -s

只报告目录使用的总空间

第14章、安装软件

安装软件相关命令

rpm -ihv

rpm -Uhv

使用-U比-i好 U代表升级 i代表安装 U没有会进行安装

rpm -Uhv a.rpm b.rpm

rem -e [package] rpm -e nmap 删除安装包
yum install [package] yum install shotwell
yum remove [package]

yum remove shotwell

yum list installed查看系统安装

yum update 更新软件

yum search [string]

yum list available

yum list available | grep wireshark

dpkg -i [package]

dbkg -i a.deb

dpkg -r [package]

dbkg -r skype

apt-get install [package]

apt-get update

apt-get install bluefish

apt-get remove [package]

apt-get remove sshfs

apt-get upgrade

升级软件包及其依赖程序

apt-cache search

查找可下载的软件包

apt-get clean/autoclean.autoremove

 

第15章、连接

连接相关命令

ifconfig

ip addr show

查看网络接口状态

ping

ping -c

ping www.baidu.com

ping -c 3 www.baidu.com

后者ping3次结束前者一直ping直到ctrl+c

tracerote

tracerote -m 40

跟踪数据经过的路由

host

dig

host www.baidu.com

dig www.baidu.com a

a ipv4地址
aaaa ipv6地址
cname 指向A记录的规范名称
mx 邮件服务器
soa 关于域的权威信息,如主域名服务器,管理员的邮件地址,以及刷新域记录的计时器
any

可找到的选项包含之前的所有选项

ifconfig

ip addr add

ip link set

配置网络端口

iwconfig

nmcli

查看无线网络接口的状态

dhclient

使用DHCP获取新的网络地址

ifup

ip link set

激活网络连接

ifup eth0

ifdown

ip link set

关闭网络连接

route

ip route

显示ip路由表或修改route

root <=> netstat -nr/–numeric –route

第16章、操作网络

操作网络相关命令
ssh 登录另外一台计算机
sftp
SFTP常用命令
cd 切换目录
exit 退出
get 将指定文件获取到本地
help 获取与命令相关的帮助
lcd 将目录切换到本机
lls 列出本机文件
ls 列出远程目录下文件
put 将文件放到远程机器上
rm 将文件从远程机器上删除
scp 在主机安全复制文件
rsync 安全传输和备份文件
wget

非交互式下载文件

wget -r -12 -np -w  5 -A.mp3 -R.html,.gif

http://www.baidu.com/mp3/

非交互式下载整个网站

wget -E -r -k -p -w 5 -np http://www.baidu.com

curl

顺序下载多个文件和互联网资源

curl -o http://www.wbez.org/ta/[1-10].rm

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/1714.html

(0)
上一篇 2021年7月15日
下一篇 2021年7月15日

相关推荐

发表回复

登录后才能评论