linux综合顺练(涉及管道,正则,重定向用户及组管理权限管理等相关知识点)(代码片段)

author author     2022-11-23     676

关键词:

一、概述

 

  本博文是对前边总结的知识点的一个综合利用,涉及的知识点比较广泛,涉及的大概有"bash特性之管道","bash特性之重定向","grep命令与正则表达式的利用","linux下用户与组管理","linux下权限管理"等。下面给出上边提到知识点之前的博客链接:

 
 

二、案例分析

 

2.1、杂项练习

 

  • 1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可?
结合学习过的知识点,这题可以用who、cut、sort、uniq等命令结合管道来实现:
who|cut -d‘ ‘ -f1|sort|uniq

运行中间过程与结果为:
[[email protected] ~]# who|cut -d‘ ‘ -f1|sort|uniq
docker
ifool
root
yanhui
[[email protected] ~]# 

注解:
who命令可以打印正在登陆的用户的相关信息(用户名,终端等);
cut 的-d选项用来指定分隔符(本例指定为空格),-f1是取用空格风格后的第一列;
sort 可以对结果做一个排序,把同名的可以文本连续的组合一起;
uniq对结果做去重处理(只有连续的才会当作重复的)。

其他实现(选看):
who|awk ‘print $1|"sort|uniq"‘
用到了awk,sort,uniq

who|grep --color=auto -Ewo ‘^[[:alnum:]]+‘|sort|uniq
who|grep --color=auto -Eo ‘^[[:alnum:]]+\>‘|sort|uniq
上面这两个,用到了grep正则语法,sort,uniq
grep 的-o可以只打印匹配到的内容,利用正则特性,用户名由字母数字以及下划线组成,然后[:alnum:]这个
就可以派上用场,如果不是匹配精确单词(-w),可以在结尾加上一个词尾锚定(\>)。

 

  • 2、取出最后登录到当前系统的用户的相关信息?
这里要注意一点,就是"取出最后登录到当前系统的用户的相关信息",首先,他正登录着,其次,他登陆的时间
是最新的,最近的。可以利用who的-u选项,开启详细登录信息(附加了额外的时间),然后利用sort根据时间列
排序,然后用tail等文本工具取出,利用cut截取第一列的用户名,然后传递给id:
id $(who -u|sort -k3,3 -k4,4 -k5,5|tail -1|cut -d‘ ‘ -f1)

运行结果:
[[email protected] ~]$ id $(who -u|sort -k3,3 -k4,4|tail -1|cut -d‘ ‘ -f1)
uid=5003(ifool) gid=5003(ifool) groups=5003(ifool)
[[email protected] ~]$ who -u|sort -k3,3 -k4,4
docker   tty4         2018-10-12 09:23 01:43        1288
yanhui   tty2         2018-10-12 09:23 01:43        1284
ifool    pts/1        2018-10-12 09:37 00:42       23127 (aca86e01.ipt.aol.com)
happy    pts/0        2018-10-12 09:38   .         23175 (aca86e01.ipt.aol.com)
happy    pts/2        2018-10-12 09:39 01:27       23205 (aca86e01.ipt.aol.com)
_myfish1 pts/4        2018-10-12 09:41 01:25       23255 (aca86e01.ipt.aol.com)
root     pts/5        2018-10-12 09:41 01:25       23281 (aca86e01.ipt.aol.com)
ifool    pts/3        2018-10-12 10:22 00:44       23456 (aca86e01.ipt.aol.com)
[[email protected] ~]$ who -u|sort -k3,3 -k4,4 -k5,5|tail -1
ifool    pts/3        2018-10-12 10:22 00:44       23456 (aca86e01.ipt.aol.com)
[[email protected] ~]$ who -u|sort -k3,3 -k4,4 -k5,5|tail -1|cut -d‘ ‘ -f1
ifool

注解:
$()是一个命令的引用,bash的特性之一;
who -u表示列出用户登录信息;
-k3,3 -k4,4 表示对第3列优先排序,其次根据第4列排序第3列表示登录日期(年-月-日),第4列表示登录的时间
的时分(24小时制度的时间-分钟);
tail -1表示取最后一行;
cut指定分隔符为空格,然后取第一列的用户名;
id查看用户名相关的信息;

 

  • 3、取出当前系统上被用户当作其默认shell的最多的那个shell?
cut -d‘:‘ -f7 /etc/passwd|sort|uniq -c|sort -k1,1 -nr|head -1|grep --color=auto -oE ‘[/[:alpha:]]+$‘

运行结果:
[[email protected] ~]$ cut -d‘:‘ -f7 /etc/passwd|sort|uniq -c|sort -k1,1 -nr|head -1|grep --color=auto -oE ‘[/[:alpha:]]+$‘
/sbin/nologin

注解:
/etc/passwd假设以冒号分隔,最后一列(第7列)表示用户的登录shell信息;
uniq -c 可以去重后,把每个独立文本的个数(相同行)统计重复行数量后显示在指定文本前方;
sort -k1,1 -nr 表示默认以空白字符作为分隔符,然后对第一列的数字大小做逆序排序(数字从大到小);
head -1表示最第一行,我们之前排序过,第一行正是最后一个字段(用户登录shell)最多次的行;
grep -o只打印匹配到的文本内容,-E表示只用扩展正则语法解析pattern,pattern中[:alpha:]表示匹配任意字母,
利用大括号,把符号"/"包括在内,后边+元字符表示匹配大括号中的字符1次或多次,$表示锚定行尾;

其他答案:
awk -F‘:‘ ‘print $NF‘ /etc/passwd|sort|uniq -c|sort -k1,1 -nr|head -1|grep --color=auto -oE ‘[/[:alpha:]]+$‘

利用的是awk取最后一列,以冒号分隔;

 

  • 4、将/etc/passwd中的第三个字段数值最大的后10个用户的信息全改为大写后保存至/tmp/maxusers.txt文件中?
sort -t‘:‘ -k3,3 -nr /etc/passwd|head|tr ‘[:lower:]‘ ‘[:upper:]‘ >/tmp/maxusers.txt

运行结果:
[[email protected] ~]$ sort -t‘:‘ -k3,3 -nr /etc/passwd|head|tr ‘[:lower:]‘ ‘[:upper:]‘ >/tmp/maxusers.txt
[[email protected] ~]$ cat /tmp/maxusers.txt
_MYFISH1:X:5005:5005::/HOME/_MYFISH1:/BIN/BASH
HAPPY:X:5004:5004::/HOME/HAPPY:/BIN/BASH
IFOOL:X:5003:5003::/HOME/IFOOL:/BIN/BASH
DOCKER:X:5002:5002::/HOME/DOCKER:/BIN/BASH
YANHUI:X:5001:5001::/HOME/YANHUI:/BIN/BASH
TESTUSER:X:5000:5000::/HOME/TESTUSER:/BIN/BASH
SASLAUTH:X:499:76:SASLAUTHD USER:/VAR/EMPTY/SASLAUTH:/SBIN/NOLOGIN
NGINX:X:498:499:NGINX WEB SERVER:/VAR/LIB/NGINX:/SBIN/NOLOGIN
REDIS:X:497:498:REDIS DATABASE SERVER:/VAR/LIB/REDIS:/SBIN/NOLOGIN
NOBODY:X:99:99:NOBODY:/:/SBIN/NOLOGIN

注解:
以冒号分隔,然后对第三列进行数字大小进行排序,并从大到小排序(sort -t‘:‘ -k3,3 -nr);
head取出前10行;
利用tr可以对文本流进行处理;
[:lower:]:表示匹配任意单个小写字母,大部分情况下相当于 [a-z];
[:upper:]:表示匹配任意单个大写字母,大部分情况下相当于[A-Z];

小贴士:虽然[:lower:],[:upper:] 是匹配单个字符,上面两个,通常正则匹配是贪婪模型,有多少匹配多少,
所以所有小写字母都被转换成大写字母了,匹配任意单个字符并不是匹配一次就结束了,即使没有
限定匹配次数,默认就会贪婪匹配,grep的标准正则与扩展正则无法使用非贪婪模型(懒惰模型),只有perl
正则才能在特定场景使用特定符号来显式说明可以启用非贪婪模型;

 

  • 5、列出/etc目录下所有以.conf结尾的文件的文件名,并将其名字转换为大写后保存至/tmp/etc.conf文件中?
ls /etc/*.conf|tr ‘[a-z]‘ ‘[A-Z]‘ >/tmp/etc.conf
输出结果:
[[email protected] ~]$ ls /etc/*.conf|tr ‘[a-z]‘ ‘[A-Z]‘ >/tmp/etc.conf
[[email protected] ~]$ cat /tmp/etc.conf
/ETC/ASOUND.CONF
/ETC/DRACUT.CONF
/ETC/GAI.CONF
/ETC/GEOIP.CONF
/ETC/GRUB.CONF
/ETC/HOST.CONF
/ETC/INIT.CONF
/ETC/KDUMP.CONF
/ETC/KRB5.CONF
/ETC/LD.SO.CONF
/ETC/LIBAUDIT.CONF
/ETC/LIBUSER.CONF
/ETC/LOGROTATE.CONF
/ETC/MKE2FS.CONF
/ETC/NSSWITCH.CONF
/ETC/REDIS.CONF
/ETC/REDIS-SENTINEL.CONF
/ETC/RESOLV.CONF
/ETC/RSYSLOG.CONF
/ETC/SESTATUS.CONF
/ETC/SUDO.CONF
/ETC/SUDO-LDAP.CONF
/ETC/SYSCTL.CO

此题思路和上一题中部分思路差不多,不做说明了。

 

  • 7、显示/var目录下一级子目录或文件的总个数?
ls -l /var/|grep -v ‘^total‘|wc -l

输出结果:
[[email protected] ~]$ ls -l /var/|grep -v ‘^total‘
-rw-r--r--   1 root root    0 Oct 12 12:23 123 456.txt
drwxr-xr-x.  8 root root 4096 Aug 31 01:16 cache
drwxr-xr-x.  2 root root 4096 Mar 22  2017 crash
drwxr-xr-x   2 root root 4096 Nov 22  2013 cvs
drwxr-xr-x.  3 root root 4096 Aug 16 00:25 db
drwxr-xr-x.  3 root root 4096 Aug 16 00:25 empty
drwxr-xr-x.  2 root root 4096 Sep 23  2011 games
drwxr-xr-x. 18 root root 4096 Oct 12 03:51 lib
drwxr-xr-x.  2 root root 4096 Sep 23  2011 local
drwxrwxr-x.  3 root lock 4096 Oct 12 03:51 lock
drwxr-xr-x.  7 root root 4096 Oct  8 12:32 log
lrwxrwxrwx.  1 root root   10 Aug 16 00:23 mail -> spool/mail
drwxr-xr-x.  2 root root 4096 Sep 23  2011 nis
drwxr-xr-x.  2 root root 4096 Sep 23  2011 opt
drwxr-xr-x.  2 root root 4096 Sep 23  2011 preserve
drwxr-xr-x. 11 root root 4096 Oct  8 15:01 run
drwxr-xr-x.  9 root root 4096 Aug 31 01:14 spool
drwxrwxrwt.  5 root root 4096 Oct  8 15:01 tmp
drwxr-xr-x   7 root root 4096 Oct  8 13:59 www
drwxr-xr-x.  2 root root 4096 Sep 23  2011 yp
[[email protected] ~]$ ls -l /var/|grep -v ‘^total‘|wc -l
20
注解:
我特地创建了一个包含空格的文件,然后利用grep -v可以把ls -l长格式输出统计的第一行的统计信息这一行
给去掉,其余的都是符合的行;

 

  • 8、取出/etc/group文件中第三个字段数值最小的10个组的名字?
sort -t‘:‘ -k3,3 -n /etc/group|head|cut -d‘:‘ -f1
输出结果:
[[email protected] ~]$ sort -t‘:‘ -k3,3 -n /etc/group|head|cut -d‘:‘ -f1
root
bin
daemon
sys
adm
tty
disk
lp
mem
kmem

 

  • 9、将/etc/fstab和/etc/issue文件的内容合并为同一个内容后保存至/tmp/etc.test文件中?
cat /etc/fstab /etc/issue > /tmp/etc.test

输出结果:
[[email protected] ~]$ cat /etc/fstab /etc/issue > /tmp/etc.test
[[email protected]ir-rs2 ~]$ cat /tmp/etc.test

#
# /etc/fstab
# Created by anaconda on Thu Aug 16 00:23:09 2018
#
# Accessible filesystems, by reference, are maintained under ‘/dev/disk‘
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=610d4939-d78f-462b-92d6-8ad25ac6ad8e /                       ext4    defaults        1 1
UUID=f1bab624-107a-400e-a004-3fd800248b3c /boot                   ext4    defaults        1 2
UUID=711a6f1d-f75e-4fdc-be59-1f69a0fb1f55 swap                    swap    defaults        0 0
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
CentOS release 6.9 (Final)
Kernel \r on an \m

注解:
cat 命令可以合并多个文件的内容并显示;

2.2、用户和组管理相关练习

 

  • 1、创建组distro,其GID为2016?
groupadd -g 2016 distro

运行结果:
[[email protected] ~]# groupadd -g 2016 distro
[[email protected] ~]# grep --color=auto ‘distro‘ /etc/group
distro:x:2016:
[[email protected] ~]#

注解:
groupadd 的-g选项可以指定创建组的组ID(GID);

 

  • 2、创建用户mandriva,其ID号为1005;基本组为distro?
useradd -u 1005 -g distro mandriva

运行结果:
[[email protected] ~]# grep ‘distro‘ /etc/group
distro:x:2016:
[[email protected] ~]# useradd -u 1005 -g distro mandriva
[[email protected] ~]# grep ‘mandriva‘ /etc/passwd
mandriva:x:1005:2016::/home/mandriva:/bin/bash

 

  • 3、创建用户mageia,其ID号为1100,家目录为/home/linux?
useradd -u 1100 -d /home/linux mageia 

运行结果:
[[email protected] ~]# useradd -u 1100 -d /home/linux mageia 
[[email protected] ~]# grep ‘mageia‘ /etc/passwd
mageia:x:1100:1100::/home/linux:/bin/bash
[[email protected] ~]# id mageia
uid=1100(mageia) gid=1100(mageia) groups=1100(mageia)
[[email protected] ~]# ls -la /home/linux/
total 12
drwx------. 2 mageia mageia  59 Oct 12 08:35 .
drwxr-xr-x. 4 root   root    33 Oct 12 08:35 ..
-rw-r--r--. 1 mageia mageia  18 Mar  5  2015 .bash_logout
-rw-r--r--. 1 mageia mageia 193 Mar  5  2015 .bash_profile
-rw-r--r--. 1 mageia mageia 231 Mar  5  2015 .bashrc

注解:
useradd -d 后边指定一个不存在的目录,这个不存在的目录是指一级不存在,比如指定/home/linux 这个/home如
果不存在,表示二级目录也不存在,这样是不会创建linux目录,不会复制模板骨架文件(与环境加载配置相关的)到
/home/linux目录下。同时指定的一级目录也不能存在,存在也不会复制模板骨架文件。

 

  • 4、给用户mageia添加密码,密码为mageedu?
交互式:
[[email protected] ~]# passwd mageia
Changing password for user mageia.
New password: 
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: 
passwd: all authentication tokens updated successfully.

非交互式:
[[email protected] ~]# echo ‘mageedu‘|passwd mageia --stdin
Changing password for user mageia.
passwd: all authentication tokens updated successfully.

注解:
--stdin可以读取标准输入的内容,来作为passwd的密码参数。echo的结果通过管道改变了passwd的标准输入,
所以密码即是echo的输出的结果。

 

  • 5、删除mandriva,但保留其家目录?
userdel mandriva

[[email protected] ~]# id mandriva
uid=1005(mandriva) gid=2016(distro) groups=2016(distro)
[[email protected] ~]# grep ‘mandriva‘ /etc/passwd
mandriva:x:1005:2016::/home/mandriva:/bin/bash
[[email protected] ~]# ls -ld /home/mandriva/
drwx------. 2 mandriva distro 59 Oct 12 08:32 /home/mandriva/
[[email protected] ~]# userdel mandriva
[[email protected] ~]# ls -ld /home/mandriva/
drwx------. 2 1005 distro 59 Oct 12 08:32 /home/mandriva/
[[email protected] ~]# grep ‘mandriva‘ /etc/passwd
[[email protected] ~]# echo $?
1
注解:
userdel -r可以删除用户的同时,并删除当时创建的目录(比如用户家目录,用户的邮件目录等),
不加-r,就不会删除这些目录;

 

  • 6、创建用户slackware,其ID号为2002,基本组为distro,附加组为peguin?
groupadd peguin
useradd -u 2002 -g distro -G peguin slackware

[[email protected] ~]# grep ‘distro\|peguin‘ /etc/group 
distro:x:2016:
[[email protected] ~]# groupadd peguin
[[email protected] ~]# grep ‘distro\|peguin‘ /etc/group 
distro:x:2016:
peguin:x:2017:
[[email protected] ~]# useradd -u 2002 -g distro -G peguin slackware
[[email protected] ~]# id slackware
uid=2002(slackware) gid=2016(distro) groups=2016(distro),2017(peguin)
[[email protected] ~]# grep ‘slackware‘ /etc/passwd
slackware:x:2002:2016::/home/slackware:/bin/bash
[[email protected] ~]# grep ‘distro\|peguin‘ /etc/group 
distro:x:2016:
peguin:x:2017:slackware

注解:
创建用户的时候,可以通过-g指定其主要组,通过-G指定它的附加组;

 

  • 7、修改slackware的默认shell为/bin/tcsh?
usermod -s /bin/tcsh slackware

[[email protected] ~]# grep ‘tcsh‘ /etc/shells 
/bin/tcsh
[[email protected] ~]# grep ‘slackware‘ /etc/passwd
slackware:x:2002:2016::/home/slackware:/bin/bash
[[email protected] ~]# usermod -s /bin/tcsh slackware
[[email protected] ~]# grep ‘slackware‘ /etc/passwd
slackware:x:2002:2016::/home/slackware:/bin/tcsh

注解:
usermod本身就是用来修改用户属性的一个工具之一,指定-s SHELL可以修改用户默认的登录shell。
指定的登录shell,正常情况要先检查是否存在,usermod本身设置不管shell是否存在,都可以成功。
但是在做用户切换的时候,如果shell不存在,可能会导致登录异常。tcsh属于软件包tcsh,如果/etc/shells
文件中不存在,可以先安装这个tcsh软件包;

 

  • 8、为用户slackware新增附加组admins?
groupadd admins
usermod -a -G admins slackware

[[email protected] ~]# id slackware
uid=2002(slackware) gid=2016(distro) groups=2016(distro),2017(peguin)
[[email protected] ~]# usermod -a -G admins slackware
[[email protected] ~]# id slackware
uid=2002(slackware) gid=2016(distro) groups=2016(distro),2017(peguin),2018(admins)

注解:
先判断要添加的admins组是否存在,不存在,我们要先创建它;
usermod 如果不指定-a追加选项,默认指定-G表示修改用户的附加组,如果是额外添加一个新的附加组,
应该指定-a追加选项。

11-用户及组管理.txt

...基础特性,alias/unalias,glob(*,?,[],[^]),快捷键IO重定向、管道,标准输出重定向:>,>>标准错误重定向:2>,2>>&>,&>>COMMND>/path/to/somefile.out2>&a 查看详情

linux学习笔记之管道重定向与正则表达式

管道:前一个命令的输出,作为后一个命令的输入命令1|命令2|命令3|命令4 #tee 即在显示器显示,又在文件在保存文件例#echo“hello,word”|tee/tmp/hello.out例#wc-l/etc/passwd|cut-d‘‘-f1I/O重定向  >     ... 查看详情

linux学习输入输出重定向和管道功能cat命令more命令(代码片段)

目录输入输出重定向输出重定向管道功能cat命令more命令@(输入输出重定向和管道功能)输入输出重定向输入重定向可以让用户将某个文件作为输入设备,输出重定向可以把某个文件作为输出设备,从而使文件更加灵活输入重定向... 查看详情

重定向和管道

##############1.管理输入输出############### 在linux系统中,正确输出的编号为1,错误输出编号为2在系统中用普通用户执行"student"find/etc-namepasswd因为student用户权限问题会有以下输出 在普通用户下执行  find/etc-namepasswd fi... 查看详情

标准i/o与管道;用户组和权限;文件处理工具及正则表达式总结

四、标准I/O与管道标准输入和输出程序:指令+数据读入数据:Input输出数据:Output?打开的文件都有一个fd:filedescriptor(文件描述符)?Linux给程序提供三种I/O设备?标准输入(STDIN)-0默认接受来自键盘的输入?标准输出(STDOUT)-1默... 查看详情

linux文件管理重定向和管道

文件的通配符:*匹配零个或多个字符?匹配任何单个字符是1个字符~当前用户的家目录~username用户家目录~+前一个工作目录[0-9]匹配这个范围数字[a-z][A-Z][wxc]匹配列表中的任何一个字符[^wxc]匹配列表中的所有字符以外的字符可以ma... 查看详情

linux重定向与管道符

​​重定向与管道符​​​​重定向​​​​管道:传送​​重定向与管道符重定向作用:将命令的执行结果输出到指定的文件中,而不是直接显示在屏幕上0标准输入键盘stdin仅读取1标准输出终端stdout仅写入2标准错误终端stderr... 查看详情

linux入门-7linux管道重定向以及文本处理

Linux管道、重定向以及文本处理1Linux多命令协作:管道及重定向管道和重定向2Linux命令行文本处理工具文件浏览基于关键字搜索-grep基于列处理文本-cut文本统计-wc文本排序-sort删除重复行文本比较-diff检查拼写-aspell处理文本内容-t... 查看详情

linux中的管道和重定向

...输出至同一个文件<:输入重定向<<:HereDocument 管道:前一个命令的输出,作为后一个 查看详情

linux管道符重定向与环境变量

——《Linux就该这么学》笔记输入输出重定向输入重定向  指把文件导入到命令中输出重定向  指把原本要输出到屏幕的数据信息写入到指定文件中输出重定向  分为标准输出重定向和错误输出重定向  每种有清空写入... 查看详情

linux管道符和重定向与环境变量

...输出到屏幕文件描述为:2输入重定向输出重定向 二丶管道命令符作用:把前一个命令原本要输出到屏幕的 查看详情

linux重定向与管道

Linux——重定向与管道系统的输入输出包括:默认输入设备:标准输入,STDIN,描述符为0默认输出设备:标准输出,STDOUT,描述符为1             标准错误输出,STDERR,描述符为2 ... 查看详情

linux从入门到跑路–重定向管道(代码片段)

linux从入门到跑路重定向管道Linux给程序提供三种I/O设备标准输入(STDIN)-0默认接受来自键盘的输入标准输出(STDOUT)-1默认输出到终端窗口标准错误(STDERR)-2默认输出到终端窗口I/O重定向:改变默认位置重定向重定向会覆... 查看详情

linux基础篇-11,io重定向和管道

################################################>:覆盖输出 》追加输出set-c:禁止覆盖set+c:关闭禁用覆盖################################################2>:重定向错误覆盖2》:重定向错误追加输出##################################### 查看详情

第五章linux重定向和管道

重定向和管道标准输入和输出:程序:指令+数据读入数据:Input输出数据:Output打开的文件都有一个fd:filedescriptor(文件描述符)Linux给程序提供三种I/O设备标准输入(STDIN)-0默认接受来自键盘的输入标准输出(STDOUT)-1默认输... 查看详情

重定向管道——linux基本命令

1.输出重定向Linux默认输入是键盘,输出是显示器。可以用重定向来改变这些设置。比如用wc命令的时候本来是要手动输入一篇文字来计算字符数的,可以直接把一个已经写好的文件用‘<’指向这条命令,就直接可以统计这个... 查看详情

linux基础05-管道及io重定向

(1)I/O重定向:Linux:>:覆盖输出>>:追加输出(2)set-C:禁止对已经存在文件使用覆盖重定向;强制覆盖输出,则使用>|set+C:关闭上述功能(3)2>:重定向错误输出2>>:追加方式(4)&>:重定向标准输出或错误输出至同一个文... 查看详情

linux重定向与管道

重定向redirection 每个命令有输入源和输出目的地,默认行为,是标准输入和标准输出。大多数情况,标准输入是键盘,标准输出是屏幕。可以为单独的操作修改输入和输出,这就是重定向。重定向可以使某个命令从源文件输... 查看详情