linux中文件内容太多,屏幕不能一下全部显示出来,怎样查看被掩盖的上部分的内容?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux中文件内容太多,屏幕不能一下全部显示出来,怎样查看被掩盖的上部分的内容?相关的知识,希望对你有一定的参考价值。

各位牛人,以上问题怎么解决呢?当我按下向上箭头的是偶,系统自动在命令行出现以前使用过的命令,当然我知道这种方法查看被掩盖的上部的命令时可笑的,请牛人指点方法!万谢!在线等!

楼上有人说了用 命令 | more 的方法显示,这种方法其实不好。更好的方法反而是使用
命令 | less 的模式(例如mitmproxy -h | less,这段命令意思就是显示mitmproxy的帮助文档,并且用less模式去读取这个文档),在less模式下你一次只能读一部分文本,但是你可以输入命令来翻页,你可以按空格键向下翻页;而按b键则向上翻页。另外,在输入状态先输入一个斜杠,再输入文本,就可以把全文中带有该文本的地方高亮(例如输入/port就是把全文中带有port这个文本的地方标记高亮);最后使用ctrl+z退出less模式。如果你使用more的命令当然也可以这样翻页,但是首先它也是只显示一部分内容(而不是全部),可是这个模式不能输入命令(所以不能搜索文档),最讨厌的是当你翻到底的时候命令就自动退出more模式了,所以还是less更多人用。
至于有没有一次显示所有内容的方法?我到处都找遍了也没发现(甚至找了国外的StackOverflow,以上方法就是我从那里找来的)。可是我清晰地记得有时候浏览帮助文档一开始是可以显示完全的,只不过后来不知道为什么又不行了。在CSDN有人说可以修改PUTTY、XSHELL等远程登录软件的lines of scrollback选项,我试过好像没什么作用就不发上来了。如果有人知道一次完全显示的方法,请留言,谢谢。
参考技术A 上翻 Shift+PageUp,向下是Shift+PageDown
或命令后面用more命令:your_command | more
这样就可以翻页了本回答被提问者采纳
参考技术B word面图片直接复制粘贴桌面弹提示:否该Active Desktop项添加您桌面律选导致桌面图标阴影电脑刷新速度明显闪烁并且变慢

1.右键 我电脑-- 属性-- 高级-- 性能项设置-- 自定义 桌面图标标签使用阴影打勾.

2.桌面右键--排列图标--除勾选桌面锁定web项目.

3.运行输入gpedit.msc打组策略;用户配置 --> 管理模板 --> 桌面 --> Active Desktop点启用Active Desktop(桌面)点击属性选定已禁用点禁用Active Desktop (桌面)-属性选定已启用.
参考技术C 用cat命令代替view 参考技术D 用文本编辑器vim看啊!不太明白你的意思???

Linux---more命令学习

More命令

more命令一般用于分页显示文件的内容,more会显示文件第一屏的内容,在屏幕的底部,more用反白字体显示文件的百分比,这时如果按空格键,文件的一下屏内容会显示出来,如果按回车键,显示的则是下一行,如果输入“ q ”,则是结束显示。

 

more命令的几种用法

第一种:

$ more filename 

显示文件filename的内容。

 

第二种:

$ command | more

将command命令的输出分页显示。

 

第三种:

$ more < filename

从标准输入获取要分页显示的内容,而这时more的标准输入被重定向到文件filename。

 

more命令的工作流程

    +-----------> 显示24行

  |    +------> 输入操作,打印信息

  |    |           可以输入回车键、空格键、q键

    |    +------> 输入回车键,打印一行

 +  ---------> 如果空格键,打印24行

        如果是q键  ---> 退出

 

more命令的编写---版本1

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 #define PAGELEN 24
 5 #define LINELEN 512
 6 
 7 void do_more(FILE *);
 8 int see_more();
 9 
10 int main(int ac,char *av[])
11 {
12 
13     FILE *fp;
14     if(ac == 1)
15             do_more(stdin);
16     else
17         while(--ac)
18            if((fp = fopen(* ++av,"r")) != NULL)
19                {
20             do_more(fp);
21             fclose(fp);
22            }
23         else
24             exit(1);
25 
26     return 0;
27 }
28 
29 
30 void do_more(FILE *fp)
31 {
32     char line[LINELEN];
33     int num_of_lines = 0;
34     int see_more(),reply;
35 
36     while(fgets(line, LINELEN,fp))
37     {
38         if(num_of_lines == PAGELEN)
39         {
40             reply = see_more();
41             
42             if(reply == 0)
43             break;
44 
45             num_of_lines -= reply;
46         }
47         if(fputs(line,stdout) == EOF)
48         exit(1);
49         
50         num_of_lines++;
51     }
52 }    
53 
54 int see_more()
55 {
56     int c;
57     printf("\\033[7m more?\\033[m");
58     while((c = getchar()) != EOF)
59     {
60         if(c == q)
61         return 0;
62         if(c ==  )
63         return PAGELEN;
64         if(c == \\n)
65         return 1;
66         
67     }
68     return 0;
69 }

fopen  打开文件,打开成功返回一个指向该文件的文件指针,失败返回NULL。

fgets  从指定的文件中获取数据,每次读一行,并存入指定的buffer中最多读size - 1个

fputs  把字符串输出到stram中,但不输出空字符。发生错误,则输出EOF

getchar 从标准输入获取一个字符,相当于getc(stdin)

 

more版本1的问题:

1.当屏幕上的文字上滚时,[ more ]字符也会随之上滚,

技术图片

2.当我们按下空格或者 "q" 后,如果没有按下回车,程序没有任何反应。

 

自己编写的more命令分析

我们首先使用linux自带的more命令

$ ls /bin | more

很明显,我们想做的是将/bin 目录下的文件分页显示,在使用 “ | ”管道命令把 ls 的输出重定向到 more的输入,并且等待我们输入命令,结果是令人满意的。

 

我们再使用自己编写的more命令

$ls /bin | more_v1

发现和linux自带的more命令非常的不同,我们自己编写的more并没有等待我们输入命令,而是一溜烟全部显示出来了,那么到底是什么问题呢?

 

其实很简单,问题出在getchar这个函数上,这个函数是从标准输入中获取字符的,然而,我们ls命令的输出已经重定向到标准输入了,意味着getchar和ls共用一个数据流,所以我们自己编写的more命令才会没有等待我们输入命令,而一下子全部打印了出来。

关于流,网上有很多解释,我看了但是依旧不是太理解,我自己画了一个图,也表达了我对流的理解,一个文件与另一个文件进行数据的传输,我认为这就是一个流。共用一个流就是两个文件都与一个文件同时传输数据。

技术图片

这下找到了问题的根源,也就是说getchar不适用与more命令中,我们需要更改more。意味着我们需要把getchar的输入换成一个独立的流,

 

more命令的编写---版本2

 

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 #define PAGELEN 24
 5 #define LINELEN 512
 6 
 7 void do_more(FILE *);
 8 int see_more(FILE *);
 9 
10 int main(int ac,char *av[])
11 {
12 
13     FILE *fp;
14     if(ac == 1)
15             do_more(stdin);
16     else
17         while(--ac)
18            if((fp = fopen(* ++av,"r")) != NULL)
19                {
20             do_more(fp);
21             fclose(fp);
22            }
23         else
24             exit(1);
25 
26     return 0;
27 }
28 
29 
30 void do_more(FILE *fp)
31 {
32     char line[LINELEN];
33     int num_of_lines = 0;
34     int reply;
35     FILE *fp_tty;
36     fp_tty = fopen("/dev/tty","r");
37     if(fp_tty == NULL)
38     exit(1);
39 
40     while(fgets(line, LINELEN,fp))
41     {
42         if(num_of_lines == PAGELEN)
43         {
44             reply = see_more(fp_tty);
45             
46             if(reply == 0)
47             break;
48 
49             num_of_lines -= reply;
50         }
51         if(fputs(line,stdout) == EOF)
52         exit(1);
53         
54         num_of_lines++;
55     }
56 }    
57 
58 int see_more(FILE *cmd)
59 {
60     int c;
61     printf("\\033[7m more?\\033[m");
62     while((c = getc(cmd)) != EOF)
63     {
64         if(c == q)
65         return 0;
66         if(c ==  )
67         return PAGELEN;
68         if(c == \\n)
69         return 1;
70         
71     }
72     return 0;
73 }

 

第二个版本中使用了  /dev/tty 这个设备文件,向这个文件写相当于显示在用户的屏幕上,向这个文件读相当于从键盘中获取用户输入。这样我们的程序就拥有两个流, “ls” 的输出,将其分页显示到屏幕上,当more需要用户输入时,从 /dev/tty得到数据。 

 

第二个版本仍然有more字符被打印到输出上、按下空格或者Q键还需要额外按下回车、无法根据中断大小来决定显示行数、无法文件已显示的百分比,这些问题有涉及到与终端类有关,我暂时读到这里,以后慢慢补充

-----------------上文在 2019/4/30 记录-------------------

 

 

本篇笔记自拜读《 Unix/Linux编程实践教程》

我也推荐和我一样的初学者去拜读这本书,让你对linux有可下手的地方。

以上是关于linux中文件内容太多,屏幕不能一下全部显示出来,怎样查看被掩盖的上部分的内容?的主要内容,如果未能解决你的问题,请参考以下文章

Linux---more命令学习

文件查看命令

请问:在DOS系统中输入命令:Type 文件名.exe后屏幕上为何出现一堆乱码?

在linux中如果用ls查看文件,如果目录或文件太多,只显示几十行,怎么办

Linux常用的命令

linux每日命令(13): more命令