尝试修改Linux内核是否合理?

所以我想尝试一个新概念,它涉及到对Linux内核的深度修改,我想知道它是否值得尝试,或者它是否太复杂?是的,它很复杂,但是如果你有一个新概念,并且你认为在内核之上构建它是一个好主意,那么它可能很值得花时间 如果你仍然被Linux内核所拖累,那么总是有内核…你能完成的大部分工作都应该可以通过内核模块来完成。如果你真的有什么大计划,那么你可以试着去做。嘿,它是开源的,没有人会告诉你不:)只要确保你经常备份。在没有更多信息的情况下,听起来你建议的更好描述是修改内核,而不是分叉 你的雄心壮志有哪些方面需

Linux 如何确定glibc库的安装版本?

我正在使用一个嵌入式Linux部署,并使用一个不编译I2C库函数调用的交叉编译器工具链 如何确定系统上库的精确版本,以便重建工具链? 我不打算替换部署的库,因为我知道它们可以工作(包括I2C),所以我相信我需要以下内容: 比努蒂尔斯版本 GCC版本 格利伯 内核(用于标题) 我想我可以从下面的例子中假设binutils库是版本2.2.5。内核是经过修改的,我已经为其提供了源代码 root@dev-box />ls /lib/ -al drwxrwxrwx 3 root root

有没有办法在linux中保留但不提交内存?

Windows有VirtualAlloc,它允许您保留一个连续的地址空间区域,但实际上不使用任何物理内存。稍后,当您想要使用它(或其中的一部分)时,可以再次调用VirtualAlloc来提交以前保留页面的区域 这实际上非常有用,但我希望最终将我的应用程序移植到linux——因此,如果以后无法移植,我不想使用它。linux有办法做到这一点吗 编辑-用例 我正在考虑分配4GB或类似的虚拟地址空间,但一次只分配64K。这将为我提供一种零拷贝方式,将阵列扩展到4 GB。这一点很重要,因为对于非常大的阵列

是否在linux 2.6下从原子上下文执行ioctl驱动程序函数?

我正在跟踪我们的一个驱动程序中的“原子时调度”错误,我想知道ioctl是否是一个原子上下文。此外,如果有人能分享关于如何进入和离开原子上下文以及它们出现的常见位置的任何信息,这将非常有用。不,IOCTL通常在进程上下文中运行。如果驱动程序在ioctl处理期间抓取了自旋锁,那么驱动程序将进入原子上下文,并将保持在原子上下文中,直到它释放自旋锁为止 请参阅:有关Linux中原子上下文的详细讨论是否打开了CONFIG\u DEBUG\u SPINLOCK\u SLEEP,该选项可能会为您提供错误所在位

Linux e> (缓冲器,行号)并在显示缓冲器时使Vim显示符号)。块使用三个命令(1)将:scriptnames(:h:scriptnames)的输出捕获到一个文件,(2)使用perl只保留文件名,(3)检查任何源文件是否包含符号定义。这对我来说是一种情况:当我更

e> (缓冲器,行号)并在显示缓冲器时使Vim显示符号)。块使用三个命令(1)将:scriptnames(:h:scriptnames)的输出捕获到一个文件,(2)使用perl只保留文件名,(3)检查任何源文件是否包含符号定义。这对我来说是一种情况:当我更改C文件并保存它时,它会显示出来。我做了:帮助签名,我看到了一些看起来很熟悉的东西(当我解开更改并再次保存时,它就消失了)。然后我尝试了:sign list,发现了问题:前几天我在玩Syntastic,似乎就是这个问题。编辑:是的,就是这样。谢

同时在Mac(BSD)和Linux上工作的sed就地标志

是否有一个调用sedtodo的就地编辑功能,而不需要在Linux和Mac上运行的备份?虽然OSX附带的BSDsed似乎需要sed-i'…,但GNUsedLinux发行版通常将引号解释为空输入文件名(而不是备份扩展名),而需要sed-i… 是否有任何命令行语法适用于这两种风格,因此我可以在两个系统上使用相同的脚本?这适用于GNU sed,但不适用于OS X: sed-i-e's/foo/bar/'target.file sed-i'-e's/foo/bar/'target.file 这适用于OS

Linux grep用于中间带有通配符的文本

我想要grep类似于==>*.sh的东西你需要grep类似于“=>.\.sh的东西,所以,'=>*.sh(作为解释,“*.sh是一个文件名全局模式,它是一种与grep所期望的正则表达式完全不同的匹配符号。在正则表达式中,*表示对上一个表达式的0次或多次重复,在您的例子中,它是一个空格。点表示任何字符。因此,“*.sh”可以匹配“Xsh”,但不能匹配“file.sh”.Google regular expresions获取详细信息/示例等)@TonyD评论不错,但使用backquotes来界定代码

Linux 这是不是;“共享内存”;IPC对象已删除?

可能重复: 我正在运行Fedora 15 64位。我有一些共享内存没有被进程清除。调用ipcs-m时可以看到共享内存: ------ Shared Memory Segments -------- key shmid owner perms bytes nattch status 0x51012a29 294919 trevor 666 194400 2

Linux 如何安装qemu修补版?

我按照以下步骤安装qemu # On Linux, you may need to install the SDL development libraries to get a graphical VGA window. On Debian/Ubuntu, this is the libsdl1.2-dev package. # Configure the source code Linux: ./configure --disable-kvm [--prefix=PFX] [--target-

Linux 如何从以前的输出中引用特定行?

在bash上,我有以下(典型)场景: ~/some/dir$ find | grep java 例如,哪种输出 ./subdir1/subdir2/file1.java ./subdir1/subdir3/file2.java ./subdir1/subdir4/file3.java ./subdir1/subdir2/file4.java ./subdir1/subdir6/file5.java 现在我知道file5.java,我正在查找的文件(例如)位于该子目录上,因此我执行: vi s

构建一个没有源代码的linux模块

我只是想知道,是否有可能在没有源代码的情况下构建/插入一个模块。假设我下载了一个openSuse操作系统,但是内核源代码没有附带。如何在不重新编译内核的情况下编译模块并插入模块 对于没有内核源代码的openSuse,很难找到完全相同版本的源代码。即使内核的配置不同,也不能在当前openSuse中插入模块 但这不可能发生在这个行业,是吗?我们不能编写驱动程序,让用户下载最新版本的源代码并找出正确的配置 这个问题在业界是如何解决的?我很好奇。我对这个比较陌生 要构建模块,需要的是内核头文件,而不是整

Linux erlang odbc:如何禁用oracle的自动提交

我需要在Linux中使用erlang odbc模块禁用oracle的自动提交。 我使用以下代码创建连接: {ok, Con} = odbc:connect("DSN=MyDSN", [{auto_commit, off}, {scrollable_cursors, off}]). 已成功创建连接。当我试图更新一个表时,请求成功,但它是自动提交的。我做错了什么?在ODBC中有一个函数。它可以与 SQL属性自动提交和SQL自动提交关闭值。但我不知道怎么从Erlang叫它。好的,伙计们。我自己解决了

Linux 将perl更改为mod_perl

我刚刚在我的linux Web服务器上安装了一个新版本的perl(从5.10.1升级到5.12.4),我希望一切都会顺利进行,但似乎没有。系统中现在的默认perl版本是新版本,但是mod_perl仍然停留在旧版本上。我的问题是:我能告诉mod_perl使用新版本的perl吗,还是必须重新安装它?根据我的想法,应该有一种方法可以只更改解释器而不重新安装,但我还没有找到它。mod_perl需要根据它使用的任何perl版本构建(它将perl编译包在里面)。您需要安装5.12.4版本 从长远来看,您可能

Linux ns2:代理、分类器和节点

节点表示ns2中的基本结构。它们从对象类继承 代理类似于TcpAgent和UdpAgent或NullAgent,它们继承自NsObject类,NsObject类本身继承自TcpAgent。代理可以将数据发送到它们所连接的一个目标。目标是NsObject* 分类器从NsObject继承。他们可以在获得列表后向许多人发送数据。NsObject** 节点类具有邻居列表。节点有一个RoutingModule对象,该对象已获得分类器。但由于节点不是NsObject类型,我无法将节点放入分类器的NsObje

Linux sed将空空间替换为NULL

使用sed 如何用NULL替换\N 如何用NULL替换空空间| | |200|0||0|\N||^A|0|\N|| 期望输出 |200|0|NULL|0|NULL|NULL|^A|0|NULL|NULL| 您需要稍微修改版本的。类似的内容适用于GNU sed: sed ':a; s:|\(\\N\)\?|:|NULL|:g; ta' 或更便携: sed -e ':a' -e 's:|\(\\N\)\?|:|NULL|:g' -e 'ta' 我认为您正在寻找的命令可能被称为“tr

Linux 如何仅从以x开头的行中剪切字符?

我正在尝试使用cut-c-2-18-filename来剪切第2个和第18个字符之间的所有内容。这会在每一行上剪切指定的字符,但我只想从以开头的行中剪切,类似于 grep ^\> file | cut -c 2-18 你应该做这个把戏吗 [92][11:46:21] vlazarenko@alluminium (~/tests) > grep ^\> file | cut -c 2-18 asdf bcda ofpjg [93][11:46:25] vlazarenko@

在linux中搜索文件名中的模式

以下是几个文件名示例: 1_0_1_2A34_8_70_1680000_0_0.png 1_0_1_1_1A2C_1_5A2F16_0_0_0.png 1_0_1_3EC_6_601_D7A0000_0_0.png 1_0_1_152D_7E3_2_11A2F26_0_0_0.png 首先,我试图让linux将文件名识别为10列文本,用下划线“\ux”分隔 例如: col1_col2_col3_col4_col5_col6_col7_col8_col9_col10.png 然后我想告诉linux

Linux Shell脚本使用变量更改目录

我知道这个问题已经被问了很多次,但我仍然找不到任何好的解决办法。因此,再次询问是否有人可以帮忙 我试图在一个变量的帮助下在shell脚本中更改我的工作目录。但是我每次都会得到“没有这样的文件或目录” #!/bin/bash echo ${RED_INSTANCE_NAME} <-- This correctly displays the directory name cd $RED_INSTANCE_NAME <-- This line gives the error

Linux 使用putty-m选项可获得';未找到命令';

如果我用:putty-load session\u name在一台机器上打开一个shell,然后执行一个命令将作业添加到linux系统上的网格队列(qsub-cwd-b hostname),一切正常 但是,如果我将命令添加到文本文件中,然后执行putty-load session\u name-m file.txt,我会得到qsub:command not found 如果我退出并简化文本文件,使其仅为命令hostname,并使用-m选项,它也可以正常工作 如果我使用Connection->SS

Linux 启用libc++/默认情况下,使用clang++;

我按照说明从头开始安装了clang。之后,我按照说明使用libsupc++安装了libc++ 现在,每当我用clang和libc++编译并链接一个程序时,我都需要发出如下命令: clang++ -stdlib=libc++ -Wl,-rpath,/path/to/libcxx/lib <...> clang++-stdlib=libc++-Wl,-rpath,/path/to/libcxx/lib 有没有一种方法可以在默认情况下使用libc++来配置/编译clang,而不必每次都

Linux 在64位环境中使用32位.so文件

我正在使用Ubuntu 12.04 64位,在编译一个需要32位文件的Qt项目时,我遇到了以下错误 错误:跳过不兼容的/opt/lib/libEposCmd.so当搜索-lEposCmd时 我想使用-m32选项编译此项目,但我不知道应该在何处插入此选项。使用string命令查看.so文件中的值。并检查值 对于例如string/opt/lib/libEposCmd.so,问题通过以下说明解决: 安装g++-multilib、libstdc++.i386、libgcc.i386、, glibc-d

Linux 减去小时和分钟

我想从10小时0分钟中减去17小时5分钟 #!/usr/bin/perl use Time::Piece; my $t1 = Time::Piece->strptime( '10:00', '%H:%M' ); my $t2 = Time::Piece->strptime( '17:05', '%H:%M' ); my $t = $t2 - $t1; print $t->hour; print $t->min; 但是我得到了错误 Can't locate objec

Linux RS232控制台通信-将波特率设置为1毫巴

在bash脚本中,我使用以下内容: $ stty -F /dev/ttyUSB0 921600 raw $ echo -n "some test data" >/dev/ttyUSB0 它的工作原理与预期一致。 使用PL2303 USB至RS232适配器: $ lsusb ... Bus 006 Device 010: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port Bus 006 Device 011: ID 067b

Linux Makefile目标颜色输出

我已经写了一个Makefile,它工作得很好;我不完全发布它,只是正在调查的部分: COMPILE_cpp = $(CXX) $(CFLAGS) -o $@ -c $< $(MAKEDEP) $(INCLUDES) %.o : %.cpp ; $(COMPILE_cpp) .SUFFIXES: .o .cpp COMPILE\u cpp=$(CXX)$(CFLAGS)-o$@-c$

Linux awk或sed用于在两个字符串之间搜索单词

我有两份文件。。。。两者都有相同的模式。以\小节开始,以结尾{center}结束 我需要找出给定的漏洞,例如“xoxoxox”,有那个数字或者更确切地说是字符串的数字是什么 我试着用 awk -v RS="" '/\\subsection.*SSL.*\\end{center}/ {print $13}' file 问题是文件中的空行并不总是完全空白,而是包含空格。尝试设置RS如下: gawk 'BEGIN{RS="\n([[:space:]]*\n)+"} ...` 如果您可以将示例文件减

Linux GDB调试器错误

如果我的英语不好,我很抱歉。这个问题困扰了我好几天。 我有一个简单的C源代码和一个子函数,我正在检查。首先,我用gcc创建.out文件。我正在用GDB检查这个文件。但是如果我想反汇编被调用的函数,我总是从gdb得到一条错误消息。 序言: unix@unix-笔记本电脑:~/booksrc$gcc-gstack\u示例.c unix@unix-笔记本电脑:~/booksrc$gdb-q./a.out 使用主机libthread_db library“/lib/tls/i686/cmov/libth

Linux 剪贴板数据存储在bash中的什么位置?

在bash中,我可以键入Ctrl+u,并在光标后面“剪切”文本 然后,当我按Ctrl+y组合键时,它会将文本粘贴回原处 是否存在存储剪切文本的文件?剪贴板(实际上称为kill ring)由readline库实现。它不是持久性的,因此不会保存在文件中 有许多用于“kill”ing和“yank”ing文本的击键命令,如中所述: 终止文本意味着从行中删除文本,但将其保存起来以备将来使用,通常是通过将其拉回到行中(重新插入)。(“Cut”和“paste”是“kill”和“yank”的最新术语。) 更完整

Linux 计划cron条目仅在尚未运行时运行脚本

我在crontab中有一个shell脚本,它正在执行jar文件。Jar文件将文件从一台服务器移动到另一台服务器。在高峰时间,这需要超过10分钟(超过crontabentries) 如何确保cron作业在最后一个进程未完成之前不会执行进程?Crontab无法控制脚本执行以实现所需,必须使用其他方法。我能想到的最简单的方法是创建并监视一个包含正在执行的任务状态的文件。首先,在调用Java do的bash脚本所在的目录下创建一个控制文件:$echo 0>javaisrun.txt 在此之后,您可以使用

linux date命令正在跳过小时

我使用date函数来计算自设置的开始日期起经过的小时数,在我的例子中是19010101。这在某些日期失败,第一个日期是19160514年的最后一个小时 date -d "19010101 +134710 hours" 星期日欧洲中部时间1916年5月14日22:00:00 date -d "19010101 +134711 hours" 1916年5月15日星期一00:00:00 CEST 23点不见了。我也试过了 date -d "19160515 -1 seconds" 星期日5月14

Linux SED未端接's';命令仅在少数服务器上失败

获取以下错误: Command: binary_setup() { CRS_VERSION=`${GRID_HOME}/OPatch/opatch lsinventory | ${GREPCMD} "Oracle Database" | tail -1 | ${AWKCMD} '{print $(NF-0)}'`; } Error: Exception in thread "main" java.lang.UnsupportedClassVersionError: Bad version

Linux上HTTP POST调用中的延迟模拟 用例

我正在开发一个企业级支付应用程序(用JAVA编写)。我希望模拟对银行进行的HTTP POST调用的延迟。这将允许我模拟可能发生的不同延迟/不可用情况 代码 以下代码将请求发送给银行: try { // Set the location of the Bank Of America payment gateway URL url = new URL(getParameterGatewayUrl()); // Open the connection urlConne

在哪里可以找到二进制实用程序的代码';字符串';什么是Linux?

我对Linux的二进制实用程序是如何编码的以及它们是如何工作的很感兴趣。我在哪里可以找到他们的源代码?字符串通常是其中的一部分,因为它们是由自由软件基金会维护并在GNU公共许可证下授权的,这里的源代码是: 或与版本相关的快照包: 如果您想从总体概述开始,请尝试或它可能的副本属于GNU binutilsapt获取源代码

Linux 在输出前打印刚启动流程的pid

我通过SSH控制远程Linux机器,我需要能够知道进程运行时的pid以及运行后的退出状态 我试图通过SSH发出此命令 my_cmd&echo$!;等等!;echo$ 因此,输出如下,正是我所需要的: pid ...stdout... exit_status 现在,有时很明显,命令太快了,所以我得到如下结果: ...stdout... pid exit_status 有没有办法防止这种行为?当您运行后台程序时,它是一个独立的进程,如果需要按定义的顺序输出,则有必要进行一些同步。但是,通过exe

如何区分linux命令执行与命令行和程序

我有一个unix命令“abc”,它给我一个输出 这个abc在我的服务器上 但当我从服务器上运行这个命令时,我想限制它的输出让人们看到。 我说的上述话是指。。 例如,如果我说: ls dirname 我可以在控制台上看到上述命令的输出 因此,如果命令是从命令行运行的,我不希望在控制台上出现回音。我不能使用/dev/null,因为我使用的是程序中的同一命令,我需要将输出分配给变量,然后在应用程序中进一步使用它 然而,当我从我的程序调用这个命令时,我想得到这个命令的输出。 如何在这方面区分呼叫。命令w

Linux 如何对用户界面进行密码保护?

我有我的网站可供公众使用,有Scrapyd在6800端口运行,就像 我不希望任何人看到我的爬虫列表。我知道任何人都可以很容易地猜到输入端口6800,并且可以看到发生了什么 我有几个问题,回答其中任何一个都会对我有帮助 有没有办法对用户界面进行密码保护 我可以用密码保护Linux上的特定端口吗?我知道使用IPTables可以只允许特定的ip,但这不是一个好的解决方案 我应该修改Scrapyd的源代码吗 只能通过.htaccess对特定端口进行密码保护吗 你应该知道要打电话的机器的名称 如果要调用端

Linux 查找PLT存根的地址

我正在Linux X86_64上工作 我需要确定ELF文件中特定PLT条目的地址,该条目表示动态函数的名称。 我可以计算出文件与地址的偏移量,但我需要能够确定地址 如果我使用objdump-D-zelffile反汇编ELF文件,我会看到objdump对PLT中的每个条目使用符号名。(objdump从何处获得这些地址和符号名称之间的关系?) 例如: 0000000000000041a2b0 fileno@plt: 如果我使用objdump-T elf file | grep fileno我会得到

Linux 公开hello minikube服务找不到端口

我可以创建容器: $ kubectl run hello-minikube --image=gcr.io/google_containers/echoserver:1.4 --port= deployment "hello-minikube" created 我现在正试图公开一项服务: $ kubectl expose deployment hello-minikube --type=NodePort error: couldn't find port via --port flag or i

Linux 为什么运行一个空程序需要这么多指令?

所以最近我了解了linux中的perf命令。我决定运行一些实验,所以我创建了一个空的c程序,并测量了运行所需的指令数: echo 'int main(){}'>emptyprogram.c && gcc -O3 emptyprogram.c -o empty perf stat ./empty 这就是输出: Performance counter stats for './empty': 0.341833 task-clock (msec)

Linux 使用影子分页在ubuntu中运行vm?

在ubuntu中,如果您在Virt manger中运行另一个ubuntu,那么禁用嵌套分页并强制在虚拟机出口的数量上使用阴影分页会有什么影响。出口数量会增加还是减少 影子分页总是比嵌套分页产生更多的退出。只有当来宾页面表异常静态时,卷影分页才能提供比嵌套分页更好的性能,因此,额外VM出口的成本非常低,甚至低于嵌套转换的成本。是否有特定出口会比其他出口显著增加?或者都会导致相同比例的增加?由于页面错误、CR3更改和显式TLB无效而导致的出口明显会增加。我不希望增加与分页无关的退出原因,例如中断退出

Linux 测试和设置(或其他原子RMW操作)是任何体系结构上的特权指令吗?

硬件提供原子指令,如测试和设置、比较和交换、加载链接存储条件。这些是特权指令吗?也就是说,只有操作系统才能执行它们(因此需要系统调用) 我认为它们没有特权,可以在用户空间中调用。但似乎表明情况并非如此。但是,在某些条件下,它可以在不需要系统调用的情况下实现锁定,这意味着它必须在没有权限的情况下执行指令(如test和set) 矛盾?如果是,哪一个是对的?那一页是错的。它似乎声称无锁原子操作在一般ISA上是特权,但事实并非如此。我从来没有听说过原子测试和设置或任何其他无锁操作需要内核模式 如果是这种

Linux docker能否解决C共享库不匹配的问题?

我试图在我的笔记本电脑上编译的ubuntu(18.04)主机上运行一些haskell代码 host: 4.15.0-36-generic #39-Ubuntu SMP Mon Sep 24 16:19:09 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux laptop: 4.14.74-1-MANJARO #1 SMP PREEMPT Fri Oct 5 14:16:52 UTC 2018 x86_64 GNU/Linux 我得到的错误是 /lib/x86_6

Linux 错误:grub-efi-amd64-signed&;垫片签名

pI需要解决以下问题 我没有linux方面的经验,所以请给我简单的解释和代码,以便键入命令行并修复问题,谢谢 我检查了其他线程,发现了类似的问题,但不相同 问题 manolis@manolis-300-0xx:~$ sudo apt-get upgrade Reading package lists... Done Building dependency tree Reading state information... Done Calculating upgrade... Do

Linux 在SLURM中传递字符串参数以命名作业

我想将一个参数传递给集群中的bash脚本,以便命名作业。我试过这个: #!/bin/bash #SBATCH -J "$1" #<--- to name the job with the first parameter #SBATCH --partition=shortq #SBATCH -o %x-%j.out #SBATCH -e %x-%j.err echo "this is a test job named" $1 Gate main.mac 我得到一个名为$1-23472.

从x86_64 Linux机器直接写入屏幕

我使用的是Linux x86_64机器。是否可以在不使用标准库函数或系统调用的情况下从用户空间应用程序(C或assembly)写入屏幕?我知道这在实模式下或DOS中是可能的,指针指向视频内存0XB800不,这是不可能的。您可以进行一些系统调用,将帧缓冲区映射到进程内存中。可能有一个库包装器来帮助设置,但一旦完成了,您就可以运行简单的存储指令来直接将像素绘制到视频RAM中,我认为。(当然,只有当您的程序在控制台上运行时,它才起作用;在X11或Wayland下,它是一个完全不同的接口(如果可能的话)

Linux sed-在模式前后插入文本

作为优化的一部分,我尝试替换包含以下字符串的所有Java文件: logger.trace("some trace message"); 与: 注意:某些跟踪消息不是确切的字符串,而是一个示例。此字符串对于每个实例都是不同的 我正在使用bash脚本和sed,但不能完全正确地获得命令 我曾在bash脚本中尝试过插入以下内容: traceStmt="if (logger.isTraceEnabled()) { " find . -type f -name

Linux 如何通过uuidgen删除ubuntu参数-&引用;格式

我有什么麻烦: 我想要的: 输入: 预期: az acr create --resource-group demo --name "daf506ea86a64c478f5762238a3cc208" --sku Basic 我的尝试: 我知道,uuidgen可以像 $ uuidgen daf506ea-86a6-4c47-8f57-62238a3cc208 $()允许在Bash中使用,也就是说,它允许用命令的输出代替命令本身 在Unix中,可以将生成的UUID转换为所需

Kubernetes中的Spring批处理应用程序在服务器上运行linux命令

寻找关于运行部署在Kubernetes中的Spring批处理应用程序以访问服务器上的目录、运行命令等可能解决方案的建议 此应用程序有两个作业&使用大量的微线程在服务器上使用linux命令执行工作。Tasklet将替换现有的脚本文件 作业A:获取位于服务器上某个目录中的每日文件,在不同目录之间移动该文件(准备该文件),最后在服务器上加密该文件并将该文件提交给供应商 作业B:从供应商检索确认文件:当供应商提供确认文件时,我们通过SFTP检索该文件,并在服务器上的一些目录中移动它 这似乎是一个相当直截

上一页 1 2 ...  2964   2965   2966   2967   2968   2969   ... 共 2969 页