




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、linux proc详解proc文件系统总览:在unix like操作系统中,几乎所有的数据实体都被抽象成文件。可以认为procfs文件系统的作用是将内核信息抽象成文件接口,内核信息和可设置参数都以文件的形式存在,并组成1个目录树。使得用户可通过文件系统接口(echo,cat等命令,只要权限允许)来获取和调整内核状态。同时procfs文件系统也为用户提供了1个接口,使得用户的内核模块或用户态程序可通过procfs传递参数。linux中的一些系统工具需要通过procfs获取内核参数,比如ps、lspci等命令。可通过以下命令加载1个procfs文件系统(首先需要确认目标系统支持procfs):#
2、 mount t proc none /proc也可在/etc/fstab文件中加入以下命令,使得系统在启动时自动加载procfs:none /proc proc defaults 0 0在proc文件系统中,主要包含3部分内容,进程相关部分、系统信息部分以及各子系统相关部分。以下为1个典型的procfs文件系统目录示例: ls /proc1221662281cmdlineinterruptsmeminfostapuinfoiomemmiscswaps1646204221684cryptoioportsmodulessys1780205821695devicesirq
3、mountssysrq-trigger1834208721706dmaisapnpmtrrsysvipc1838209621717driverkcorenettty18572107220771execdomainskmsgpartitionsuptime1877211722088fbksymspciversion1889214322169filesystemsloadavgscsi190521532217apmfslocksself196021652219busidemdstatslabinfo从以上输出中可看到procfs所包含的内容:1. 进程相关部分(只读):在procfs中存在一些以数
4、字(pid)命名的目录,该数字即为对应进程的pid。/proc/self目录是1个指向当前进程的符号链接。当用户执行cat self/cmdline命令时,会为执行cat命令而创建1个进程,并输出当前进程的命令行参数,也就是catself/cmdline(会省略空格)。2. 内核信息部分(只读):这部分文件一般位于/proc目录下,可通过cat命令进行查看。会在/proc/cmdline文件中保存内核引导时的命令行参数:cat /proc/cmdlinero root=/dev/hda23. 内核各子系统相关部分(部分可调):在proc文件系统中会保存内核各子系统的信息和可调参数。主要有:(1
5、) bus:总线信息;(2) drivers:驱动信息;(3) fs:文件系统特别信息;(4) ide:IDE接口信息;(5) irq:IRQ信息:(6) net:网络子系统信息;(7) scsi:SCSI系统信息;(8) sysvipc:IPC子系统信息;(9) tty:tty子系统信息(以上9项均为只读的);(10) sys:系统内核可调参数。linux内核中的大部分可调整参数被放置到/proc/sys目录下,这些参数以常规文件的形式体现,并可通过echo、cat等文件操作命令进行调整。在linux中也可通过sysctl方法来调整内核参数。sysctl方法是从BSD系统继承而来的1种动态调
6、整内核参数的方法。在使用sysctl方法时,可将配置参数保存在/etc/sysctl.conf文件中,以便在启动时自动加载这些配置进程相关子目录:在/proc目录下存在一系列以数字命名的子目录,每个目录对应系统中当前存在的1个进程,目录名即为进程pid。进程相关目录用来存放对应进程的相关信息。进程相关目录中存在如下文件:文件名内容cmdline执行进程的命令行参数cpusmp系统中最后使用的cpucwd到当前工作目录的符号链接environ环境变量exe链接到进程对应的可执行文件fd该目录中保存进程所有打开的文件描述符maps进程内存映射,包含进程执行空间和动态链接库信息(2.4)mem进程内
7、存空间root链接到进程执行时的/(root)目录stat进程状态statm进程内存状态status进程状态总览,包含进程名字,当前状态和各种信息统计。可通过读取/proc/pid目录下的status文件,获得pid进程的当前状态。cat /proc/self/status #/proc/self为指向当前执行进程的符号链接Name: catState: R (running)Pid: 5452PPid: 743TracerPid: 0 (2.4)Uid: 501 501 501 501Gid: 100 100 100 100Groups: 100 14 16VmSize: 1112 kBVm
8、Lck: 0 kBVmRSS: 348 kBVmData: 24 kBVmStk: 12 kBVmExe: 8 kBVmLib: 1044 kBSigPnd: 0000000000000000SigBlk: 0000000000000000SigIgn: 0000000000000000SigCgt: 0000000000000000CapInh: 00000000fffffeffCapPrm: 0000000000000000CapEff: 0000000000000000以上示例显示的进程信息与用户执行/bin/ps命令获得的进程信息基本相同,这是因为ps命令也是通过procfs来获取进程
9、信息的。在statm文件中记录了进程内存信息,如下所示:cat /proc/self/statm105 105 93 4 12 89 12以上输出信息含义如下:size: 程序大小;resident: 常驻内存空间大小;shared: 共享内存页数;trs: 代码段占用内存页数;drs: 数据/堆栈段占用内存页数;lrs: 引用库占用内存页数;dt: 脏页数量。内核数据信息:/proc目录下的某些文件和目录记录了内核相关信息,这些文件有如下几种(根据系统配置和所加载的模块,不同系统所显示的文件种类不同):文件说明apm高级电源管理busbus总线相关信息cmdline内核引导命令行参数cpui
10、nfocpu信息devices当前可用设备(块设备和字符设备)dmadma通道使用情况filesystem当前内核支持的文件系统类型driver驱动相关信息(2.4)execdomains安全相关的execdomains信息(2.4)fbframe buffer设备(2.4)fs本地文件系统参数(2.4)ideide子系统相关信息interrupts中断使用情况iomem内存映射图(2.4)ioportsio端口使用情况irqcpu的irq使用情况(2.4,smp)isapnpISA pnp相关信息kcorekernel core image 内核转储映像(2.4)kmsgkernel mes
11、sagesksymskernel symbol table 内核符号表loadavg最后1,5,15分钟的平均负载lockskernel locks,内核锁信息meminfo内存信息misc内核杂项信息modules已加载的内核模块列表mounts已加载文件系统net网络子系统信息partitions已识别的本地系统分区表pcipci总线相关信息,在新版本中指向/proc/bus/pci(2.4)rtcrtc实时时钟scsiscsi总线信息slabinfoslab内存分配池信息stat内核状态总览swapsswap空间状态sys内核系统参数sysvipcsysvipc资源状态(msg,sem,
12、shm)(2.4)ttytty驱动信息uptime系统uptimeversion内核版本videovideo资源状态(2.4)可使用系统中的文件访问命令访问/proc目录中的文件(只要权限允许),例如查看系统中断信息:cat /proc/interruptsCPU00: 8728810 XT-PIC timer1: 895 XT-PIC keyboard2: 0 XT-PIC cascade3: 531695 XT-PIC aha152x4: 2014133 XT-PIC serial5: 44401 XT-PIC pcnet_cs8: 2 XT-PIC rtc11: 8 XT-PIC i82
13、36512: 182918 XT-PIC PS/2 Mouse13: 1 XT-PIC fpu14: 1232265 XT-PIC ide015: 7 XT-PIC ide1NMI: 0在2.4版本内核中,当使能smp时这个文件末尾会多出2行smp相关属性LOC & ERR:cat /proc/interruptsCPU0 CPU10: 1243498 1214548 IO-APIC-edge timer1: 8949 8958 IO-APIC-edge keyboard2: 0 0 XT-PIC cascade5: 11286 10161 IO-APIC-edge soundblaster8
14、: 1 0 IO-APIC-edge rtc9: 27422 27407 IO-APIC-edge 3c50312: 113645 113873 IO-APIC-edge PS/2 Mouse13: 0 0 XT-PIC fpu14: 22491 24012 IO-APIC-edge ide015: 2183 2415 IO-APIC-edge ide117: 30564 30414 IO-APIC-level eth018: 177 164 IO-APIC-level bttvNMI: 2457961 2457959LOC: 2457882 2457881ERR: 2155NMI是每个cpu
15、上产生的不可屏蔽中断(Non Maskable Interrupt)计数。LOC是每个cpu上APIC本地中断计数。ERR是smp系统中IO-APIC总线失败错误的计数。若该数值较高,可能当前内核的运行会有问题,此时可能需要测试内核,查看硬件和APIC是否有兼容性问题。ide设备:/proc/ide目录包含内核识别出的所有ide设备的信息。在/proc/ide目录下包含drivers文件和若干个以ide设备或ide控制器命名的子目录。ls -alF /proc/ide/total 3dr-xr-xr-x4root root 0 10月 9 23:36./dr-xr-xr-x54root roo
16、t 0 2004-10-10./-r-r-r-1root root 0 10月 9 23:36driverslrwxrwxrwx1root root 8 10月 9 23:36hda - ide0/hda/lrwxrwxrwx1root root 8 10月 9 23:36hdb - ide0/hdb/lrwxrwxrwx1root root 8 10月 9 23:36hdc - ide1/hdc/dr-xr-xr-x4root root 0 10月 9 23:36ide0/dr-xr-xr-x3root root 0 10月 9 23:36ide1/-r-r-r-1root root 0 1
17、0月 9 23:36piix在/proc/ide/drivers文件中记录了当前加载的ide设备驱动:cat /proc/ide/driverside-floppyversion0.99.newideide-diskversion1.17ide-defaultversion0.9.newide在/proc/ide目录下还存在一些以设备命名的目录,比如piix是某系统中ide控制芯片组的名字(在其它系统中,ide控制芯片组可能是其它名字)。此外还包含若干以ide控制器命名的目录(一般pc系统为2个),以及以ide终端设备命名的快捷方式,它们将链接到控制器目录下对应的设备文件中。在/proc/id
18、e目录下存在以下文件和目录:文件名内容channelide通道(0 or 1)config配置文件(only for pci/ide bridge)matemate namemodelide控制器的类型/芯片组hdide总线上连接的可用设备当前连接在控制器上的每个设备也作为1个单独的子目录(比如/proc/ide/ide0/hda目录):文件名内容cache设备缓存大小capacity设备数据块数量(按512Byte块)driver驱动和版本geometry物理和逻辑设备参数identify设备标识块media媒体类型model设备标识符(型号或名字)settings设备配置参数smart_t
19、hresholdsIDE disk management thresholdssmart_valuesIDE disk management values每个ide设备目录下的settings文件中包含该驱动器相关信息:cat /proc/ide/ide0/hda/settingsnamevalueminmaxmode-bios_cyl526065535rwbios_head2550255rwbios_sect63063rwbreada_readahead 40127rwbswap001rfile_readahead7202097151rwio_32bit003rwkeepsettings00
20、1rwmax_kb_per_request 1221127rwmultcount008rwnice1101rwnowerr001rwpio_mode write-only0255wslow001rwunmaskirq001rwusing_dma001rw网络信息:/proc/net子目录包含系统中网络相关信息,若内核支持ipv6,则还存在一些ipv6相关信息如下表(包括但不限于):文件名说明udp6udp sockets(ipv6)tcp6tcp sockets(ipv6)raw6raw设备状态(ipv6)igmp6系统当前加入的ip多播地址(ipv6)if_inet6ipv6网络接口地址列表
21、ipv6_routeipv6内核路由表rt6_statsipv6全局路由表状态sockstat6socket状态(ipv6)snmp6snmp数据(ipv6)用户可访问相应文件来查看系统中可用的网络设备,以及这些设备的流量和路由信息:cat /proc/net/devInter-|Receive |.face |bytes packets errs drop fifo frame compressed multicast|.lo: 908188 5596 0 0 0 0 0 0 .ppp0:15475140 20721 410 0 0 410 0 0 .eth0: 614530 7085 0
22、0 0 0 0 1 . Transmit. bytes packets errs drop fifo colls carrier compressed. 908188 5596 0 0 0 0 0 0. 1375103 17405 0 0 0 0 0 0. 1703981 5535 0 0 0 3 0 0若系统使能了Ethernet Channel特性,则允许若干物理接口绑定为1个逻辑设备。该逻辑设备对应1个以设备命名的子目录,其中包含一些bond模块相关的特殊信息。例如把eth0和eth1绑定为bond0设备,则可在/proc/net/bond0目录下查看bond相关信息,例如主从接口,链路
23、状态等。scsi设备信息:若系统中含有scsi设备,那么在/proc/scsi目录下可以看到系统识别到的SCSI设备相关信息:cat /proc/scsi/scsiAttached devices:Host: scsi0 Channel: 00 Id: 00 Lun: 00Vendor: IBM Model: DGHS09U Rev: 03E0Type: Direct-Access ANSI SCSI revision: 03Host: scsi0 Channel: 00 Id: 06 Lun: 00Vendor: PIONEER Model: CD-ROM DR-U06S Rev: 1.04
24、Type: CD-ROM ANSI SCSI revision: 02系统中的SCSI设备将映射到/proc/scsi目录下形成一个子树,按照对应的设备模块和设备总线号可以查看相应设备的参数信息,例如一个Adaptec AHA-2940 SCSI 适配器: cat /proc/scsi/aic7xxx/0Adaptec AIC7xxx driver version: 5.1.19/3.2.4 Compile Options: TCQ Enabled By Default : Disabled AIC7XXX_PROC_STATS : Disabled AIC7XXX_RESET_DELAY :
25、 5 Adapter Configuration: SCSI Adapter: Adaptec AHA-294X Ultra SCSI host adapter Ultra Wide Controller PCI MMAPed I/O Base: 0xeb001000 Adapter SEEPROM Config: SEEPROM found and used. Adaptec SCSI BIOS: Enabled IRQ: 10 SCBs: Active 0, Max Active 2, Allocated 15, HW 16, Page 255 Interrupts: 160328 BIO
26、S Control Word: 0x18b6 Adapter Control Word: 0x005b Extended Translation: Enabled Disconnect Enable Flags: 0xffff Ultra Enable Flags: 0x0001 Tag Queue Enable Flags: 0x0000 Ordered Queue Tag Flags: 0x0000 Default Tag Queue Depth: 8 Tagged Queue By Device array for aic7xxx host instance 0: 255,255,255
27、,255,255,255,255,255,255,255,255,255,255,255,255,255 Actual queue depth per device for aic7xxx host instance 0: 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 Statistics: (scsi0:0:0:0) Device using Wide/Sync transfers at 40.0 MByte/sec, offset 8 Transinfo settings: current(12/8/1/0), goal(12/8/1/0), user(12/15/1/0
28、) Total transfers 160151 (74577 reads and 85574 writes) (scsi0:0:6:0) Device using Narrow/Sync transfers at 5.0 MByte/sec, offset 15 Transinfo settings: current(50/15/0/0), goal(50/15/0/0), user(50/15/0/0) Total transfers 0 (0 reads and 0 writes) 并口信息 /proc/parport:/proc/parport 包含系统并口信息,按照并口端口号(0,1
29、,2,.)每个设备将映射到一个子目录中。在这个目录下包含的信息如 Table 1-8. . 文件名 内容 autoprobe IEEE-1284 标准兼容的设备ID信息 devices 端口使用的设备驱动列表 hardware 端口使用的base address, IRQ line 和 DMA channel. irq 端口使用的IRQ号,你可以写入一个新值指定IRQ号 (IRQ number or none). .TTY信息:在/proc/tty目录中包含系统当前使用的tty及其信息,在该目录中也可找到设备信息和线路disciplines。/proc/tty中的文件文件名说明drivers设
30、备及其引用计数ldiscsregistered line disciplinesdriver/serialtty线路状态可访问/proc/tty/drivers文件来查看系统当前启用的ttys:cat /proc/tty/driverspty_slave/dev/pts1360-255pty:slavepty_master/dev/ptm1280-255pty:masterpty_slave/dev/ttyp30-255pty:slavepty_master/dev/pty20-255pty:masterserial/dev/cua564-67serial:calloutserial/dev/
31、ttyS464-67serial/dev/tty0/dev/tty040system:vtmaster/dev/ptmx/dev/ptmx52system/dev/console/dev/console51system:console/dev/tty/dev/tty50system:/dev/ttyunknown/dev/tty41-63console可通过文件访问命令访问/proc目录下的大部分文件(只要权限允许)。若利用文件访问命令访问/proc目录下的某个文件时产生乱码,则该文件可能是1个特殊文件,需通过其它方法访问该文件。比如/proc/kcore文件,可通过gdb等内核调试工具查看该
32、文件,并且用户可通过ps、top等工具查看其它某些文件。procfs的1个重要作用是查看和设置内核的状态信息,另一重要作用是对进程的监控和分析。比如,若某个已加载的文件系统无法被卸载,系统会报如下错误:# umount /db1umount: /db1: device is busy这是因为某些进程的工作目录还在该目录下,导致系统卷忙而无法被卸载,只有析构该进程后,才可卸载该文件系统。可通过以下shell脚本查找该进程:#!/bin/bash#pcwd.sh,查找系统中工作在目标路径下的进程,使用方法: pcwd.sh 路径名test $1 | echo Usage: pcwd.sh path
33、(absolute path) & exit ;PS=ls /proc/*0-9*|grep : ;PSList=echo $PS |tr -d /proc|tr -d :;for PID in $PSListdotest -e /proc/$PID & (ls -alF /proc/$PID/cwd|grep $1 /dev/null ) & echo Process $PID (cat /proc/$PID/status |grep Name |tr -d Name: ) is work in $1 ;done可通过以上脚本文件获得执行命令前的当前系统进程表映像,然后遍历每个进程的proc
34、目录,找到占用要卸载目录的进程。在某系统执行以上脚本的输出如下:fayefrost.llnl/tmp# ./pcwd.shUsage: pcwd.sh path(absolute path)fayefrost.llnl/tmp# ./pcwd.sh /usrProcess 1283 (vi) is work in /usr ;Process 3113 (bsh) is work in /usr ;将上述脚本修改一下即可查看指定文件正在被哪些进程访问:#!/bin/bashtest $1 | echo Usage: pfile.sh filename(absolute path) & exit
35、;PS=ls /proc/*0-9*|grep : ;PSList=echo $PS |tr -d /proc|tr -d :;for PID in $PSListdotest -e /proc/$PID & (ls -alF /proc/$PID/fd|grep $1 /dev/null ) & echo Process $PID (cat /proc/$PID/status |grep Name |tr -d Name: ) is openning $1;done在某系统运行该脚本的输出为:fayefrost.llnl/tmp# ./pfile.shUsage: pfile.sh file
36、name(absolute path)fayefrost.llnl/tmp# ./pfile.sh access_logProcess 109 (httpd) is openning access_log;Process 110 (httpd) is openning access_log;Process 112 (httpd) is openning access_log;Process 113 (httpd) is openning access_log;Process 116 (httpd) is openning access_log;Process 99 (httpd) is ope
37、nning access_log;说明,目标文件名可使用相对或绝对路径,甚至也可只输入半个文件名,路径越精确查找结果越准确。可以扩展上述脚本,以实现类似lsof命令的功能,列举系统中所有正在被使用的文件。以下脚本通过读取proc文件系统中的信息,来模拟ps命令的实现:#!/bin/bashPS=ls /proc/*0-9*|grep : ;PSList=echo $PS |tr -d /proc |tr -d : |sort ;echo -e PID PPID UID GID STAT MEM TTY CMDfor PID in $PSListdotest -e /proc/$PID & sP
38、ID=cat /proc/$PID/status |grep Pid: |awk print $2& sPPID=cat /proc/$PID/status |grep PPid: |awk print $2& sTTY=ls -alF /proc/$PID/fd |grep /dev/ |awk print $11 |grep ty |head -n 1& sUID=cat /proc/$PID/status |grep Uid: |awk print $2& sGID=cat /proc/$PID/status |grep Gid: |awk print $2& sSTAT=cat /pr
39、oc/$PID/status |grep State: |awk print $2 $3& sMEM=cat /proc/$PID/status |grep VmSize: |awk print $2 $3& if -e /proc/$PID/exe thensCMD=ls -alF /proc/$PID/exe |awk print $11 |tr -d $* elsesCMD=cat /proc/$PID/status |grep Name: |awk print $2sCMD= $sCMD fiecho -e $sPID $sPPID $sUID $sGID $sSTAT $sMEM $
40、sTTY $sCMDdone以上脚本会列举系统中除自身进程(执行该脚本的进程)之外的所有进程,读取并显示这些进程的8项属性:进程id(PID)、父进程id(PPID)、属主UID(UID)、属主GID(GID)、当前状态、占用内存、运行终端、完整执行路径。该脚本的输出格式参考了ps命令,例如某些系统进程没有对应的可执行文件,此时会显示它们的内核名字,例如ksoftirqd_CPU0。以上脚本不需要参数,在某系统运行该脚本的输出如下:fayefrost.llnl/tmp# ./lps.shPIDPPID UIDGIDSTATMEMTTYCMD10 00S(sleeping)1116kB/sbin
41、/init1011 00S(sleeping)2168kB/usr/local/sbin/sshd10999 9999S(sleeping)6100kB/usr/local/apache/bin/httpd11099 9999S(sleeping)6100kB/usr/local/apache/bin/httpd11299 9999S(sleeping)6100kB/usr/local/apache/bin/httpd11399 9999S(sleeping)6100kB/usr/local/apache/bin/httpd11699 9999S(sleeping)6100kB/usr/loc
42、al/apache/bin/httpd1181 00S(sleeping)1656kB/bin/bash1191 00S(sleeping)1648kB/bin/bash1201 00S(sleeping)1648kB/bin/bash1281 00S(sleeping)2224kB/dev/tty1/bin/login12833113 00S(sleeping)1512kB/dev/ttyp0/bin/vi1291 00S(sleeping)1136kB/dev/tty2/sbin/getty1301 00S(sleeping)1136kB/dev/tty3/sbin/getty. . .4
43、1 00S(sleeping) kswapd 41 00S(sleeping) kswapd 41 00S(sleeping) kswapd 4089 15329 00S(sleeping)1664kB/dev/ttyp1/bin/bash4089 15329 00S(sleeping)1664kB/dev/ttyp1/bin/bash51 00S(sleeping) bdflush 61 00S(sleeping) kupdated 991 00S(sleeping)6016kB/usr/local/apache/bin/httpdSolaris上有/usr/proc/bin工具集,里面的ptree和pmap很是好用,甚至比本来的ps还好:P可惜Linux上是没有的,现在你可以自己写一个,用来综合显示更多的进程状态。 代码: #!/bin/bash #PROC=mount |grep type proc|awk print $3 test $1 | echo Usage: pstat.sh PID & exit ; PID=$1; echo Process $1 Status.; echo .; echo cat /proc/$PID/status|grep Name: cat /proc/$PI
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 河北省霸州市2025年上半年事业单位公开遴选试题含答案分析
- 2025版龙门吊拆除现场安全管理及应急预案合同
- 2025年度户外运动设施防水施工及十年质保协议
- 2025版活动赞助商权益保障合同范本下载
- 2025年度体育场馆建设人工劳务外包合同模板
- 2025年度综合商业体短期租赁合同书
- 贵州省玉屏侗族自治县2025年上半年事业单位公开遴选试题含答案分析
- 2025电机产品国际认证与出口服务合同书
- 2025年度能源行业财务风险控制合同
- 贵州省凤冈县2025年上半年公开招聘村务工作者试题含答案分析
- GB/T 3799.1-2005商用汽车发动机大修竣工出厂技术条件第1部分:汽油发动机
- 小学音乐《村晚》优质课件设计
- 东锅300MW锅炉说明书
- 咯血(课件幻灯)
- 部门会签单模板
- 2023版初中化学跨学科实践活动(化学)
- 上海市环卫作业养护预算定额经费
- 宫颈环扎术护理常规
- G12《贷款质量迁徙情况表》填报说明
- 县城市管理领域集中行使行政处罚权工作衔接规范(试行)
- 九年级初三英语七选五专练1(10篇带答案)-
评论
0/150
提交评论