请选择 进入手机版 | 继续访问电脑版
MSIPO技术圈 首页 IT技术 查看内容

linux常见指令下

2023-07-13

接下来我们就聊聊linux的后面十条指令。

一:echo

作用是往显示器输出内容,和printf类型,但是该指令最核心的是与之相关的一些概念

概念1.输出重定向:

   echo不仅可以向显示打印内容,还可以向文件输出内容,本应该输出到显示器的输出到其它文件去了叫输出重定向(输出的方向重新改变),想必到这里肯定有小伙伴想问显示器是显示器,文件是文件,这两个能相提并论吗,或者说输出到显示器和输出到文件echo会不会做不同的处理。这时候用一句话即可为原因开个头,linux下一切皆文件,我们讲完输入,输出以及追加重定向再简略说。

输出重定向如下图 

[hqy@VM-24-5-centos ~]$ echo "hello linux"
hello linux
[hqy@VM-24-5-centos ~]$ tree
.
|-- a.out
|-- d1
|-- test.c
`-- test.txt

1 directory, 3 files
[hqy@VM-24-5-centos ~]$ echo "hello linux">test.c
[hqy@VM-24-5-centos ~]$ cat test.c  用cat查看,发现echo确实把语句
 hello linux                                  输出到test.c文件中去了

以及追加重定向,其实输出重定向在写入文件时是会先刷新文件才写入数据的。

[hqy@VM-24-5-centos ~]$ echo "hello linux">test.c
[hqy@VM-24-5-centos ~]$ cat test.c
hello linux
[hqy@VM-24-5-centos ~]$ echo "hello ">test.c
[hqy@VM-24-5-centos ~]$ cat test.c
hello 

要想原先数据保存下来,就得用追加重定向。如下:

[hqy@VM-24-5-centos ~]$ echo "hello linux">>test.c
[hqy@VM-24-5-centos ~]$ cat test.c
hello 
hello linux

二 cat

格式:cat+文件名

功能:查看文件内容

若不加文件,此时默认到键盘文件(标准输入端口)中读取,输出显示到显示器上展示
输入重定向也就是不从标准输入端口读取,而从其它文件中读取并显示到显示器上。

[hqy@VM-24-5-centos ~]$ echo "hello linux">test.c
[hqy@VM-24-5-centos ~]$ cat test.c    目前来看cat+文件名与输入重定向相似
                                      今后会有一点区别
hello linux
[hqy@VM-24-5-centos ~]$ cat <test.c   输入重定向
hello linux

  当我们了解了输入重定向和输出重定向,就再聊聊linux中echo输出字符到显示器和文件是否有区别,实际上没有区别,linux将一切看成文件来处理。(了解的不多,也只能合并一些资料勉强解释我的疑问)

   文件就是一种可以读和写的东西,读写是站在程序的角度,输入输出是站在内存来看的,注意:输入和写入是站在不同的角度来看的,程序的读取从内存来看是输入,写入则是输出。显示器和键盘其实都被看成文件,首先显示器文件是只能写入,不可读取的文件,我们将内存从显示器读取数据的fread函数写为空函数,所以无输入功能,为啥不提供输入功能从目前我学的一点语言知识还解释不了,键盘文件只能读取,不能写入,指的是内存对键盘的fwrite方法写为空,无法输出数据给键盘,但不意味着我们无法写入数据给键盘,不然怎么从键盘读数据呢?

   还有就是初学c时我好像听说我们scanf读取数据是从键盘中读取,只是由于显示器会回显我们输入的数据,时间久了我就忘了是从键盘读取,每次就是输入一个字符,然后显示器显示了,scanf也读到了,导致我以为我是从显示器读取的,其实是从键盘文件中读取的。

   我们在linux用的最多的就是指令,这些指令实际上就是存在系统特定位置的一个个可执行程序,指令就是文件,如下:现在想想我们我们在linux经常接触指令,它们实质上就是一个个可执行文件,当我们输入命令ls时,编译器就会去/usr/bin目录下执行该文件。在linux指令上我曾提到执行当前目录自己的可执行文件用./+可执行文件名(例如a.out),之所以ls这些可执行文件无需指定路径,我想显然编译器是知道去哪找的,这些指令的存放就是系统安排的位置,系统自己怎么可能不知道。

[root@VM-24-5-centos ~]# cd /usr/bin
[root@VM-24-5-centos bin]# ls -l /usr/bin/ls
-rwxr-xr-x 1 root root 117608 Nov 17  2020 /usr/bin/ls
[root@VM-24-5-centos bin]# ls -l /usr/bin

三 more

cat显示大文本时有缺陷,它会一股脑全打印出来。more则会先显示一屏幕,按回车下翻逐渐显示下面的内容,但是不能按上下方向键上下翻,我在测试这里的时候发现我的more没有显示行号的选项,所以这里感觉没有特别直观。

四 less

格式:less +[选项]+文件名

而less则可以按上下键上翻下翻,非常便于我们查看大文本信息。

选项:

-N显示行号

q:(quit),less的展示和more ,cat不同,结束展示要按q才能回到linux输入命令的窗口。

五 tail

语法:tail +[行数n]+文件名

功能:表示从该文件中读取末尾的n行显示到屏幕中去。

六 head

语法:head +[行数n]+文件名

功能:表示从该文件中读取开头的n行显示到屏幕中去

在说完tail和head指令我们再说一个特殊的文管道文件:|,管道文件可以临时保存我们的数据,也可以将保存的数据给下一个head和tail使用,像个管道一样连接两个指令。head和tail命令都是把截取的数据输出到屏幕上,那么我们如果用输出重定向,不就可以将读取的n行数据输出到管道文件中去吗。实际应用如下演示:

 我们可以对数据一步步加工,先对数据做截取尾尾15行,存到管道文件,管道文件会自动把数据传给下一个指令做处理,可以看到的是,下一个指令tail使用时未曾指定文件,实际上管道文件就充当了数据的提供者,这使得数据可以像在流水线上一步步被加工。

七 cal

命令格式:cal [参数] [月份][年份]

下面任意选项如果后面只有一个参数,该参数都会被认为是年份,两个参数第一个被认为月份,第二个是年份。

功能:查看日历

如下:

[hqy@VM-24-5-centos ~]$ cal 3 2023
     March 2023     
Su Mo Tu We Th Fr Sa
          1  2  3  4
 5  6  7  8  9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

选项:

-1:显示当前月份的日历,不加也默认显示当前月份,也可以指定年月份显示

[hqy@VM-24-5-centos ~]$ cal -1 6 2023
      June 2023     
Su Mo Tu We Th Fr Sa
             1  2  3
 4  5  6  7  8  9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30

-3:显示前一个月,当前月,下一个月的日历,共三个月,同样可以指定年月份

[hqy@VM-24-5-centos ~]$ cal -3 7 2023
      June 2023             July 2023            August 2023    
Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa
             1  2  3                     1         1  2  3  4  5
 4  5  6  7  8  9 10   2  3  4  5  6  7  8   6  7  8  9 10 11 12
11 12 13 14 15 16 17   9 10 11 12 13 14 15  13 14 15 16 17 18 19
18 19 20 21 22 23 24  16 17 18 19 20 21 22  20 21 22 23 24 25 26
25 26 27 28 29 30     23 24 25 26 27 28 29  27 28 29 30 31      
                      30 31                                     
[hqy@VM-24-5-centos ~]$ cal -3 6 2023
      May 2023              June 2023             July 2023     
Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa
    1  2  3  4  5  6               1  2  3                     1
 7  8  9 10 11 12 13   4  5  6  7  8  9 10   2  3  4  5  6  7  8
14 15 16 17 18 19 20  11 12 13 14 15 16 17   9 10 11 12 13 14 15
21 22 23 24 25 26 27  18 19 20 21 22 23 24  16 17 18 19 20 21 22
28 29 30 31           25 26 27 28 29 30     23 24 25 26 27 28 29
                                            30 31               
[hqy@VM-24-5-centos ~]$ 

我知道这里肯定有同学和我一样会去尝试cal -3然后带个年份会咋样,个人觉得这有点像是未定义的,cal -3显示的多个月份,后面又跟着个年份,难道是想让编译器显示多个年份吗?linux对此的处理像是忽略了-3选项,而是显示了整年的日历。

-y:  显示当前年的日历,可指定年份

-j:  显示当前日期是一年中的第几天,并且当前月份是一年中的第几天都会显示出来,如果和-3选项复用,则会将三个月的日期转为一年中的天数显示,若是后面直接加年份,则会将一年的日期转为一年中的第几天来显示。

八 find

格式:find -name +文件名

find是在特定的家目录下查找文件,这个文件名可以是test.c,或者test.cpp,甚至我们可以不指定详细的文件名,而是找出所有相同后缀的文件

[hqy@VM-24-5-centos ~]$ find *.c
main.c
processbar.c
test.c
[hqy@VM-24-5-centos ~]$

九 grep

   作用:在文件搜索字符串,用单引号和双引号引起都行,会找到匹配的行打印出来,c语言是以单双引号区分字符和字符串,但是在linux下貌似没这种分别。

选项: -i 忽略字符的大小写

         -n 顺便输出行号

十 uname -r

这个指令是查看我们使用的计算机体系结构的。会显示操作系统版本等基本信息。

-a选项会输出所有详细信息依次是内核名称,主机号,内核版本号等,了解了解即可

[hqy@VM-24-5-centos ~]$ uname -r -a
Linux VM-24-5-centos 3.10.0-1160.71.1.el7.x86_64 #1 SMP Tue Jun 28 15:37:28 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
[hqy@VM-24-5-centos ~]$ uname -r

3.10.0-1160.71.1.el7.x86_64

相关阅读

热门文章

    手机版|MSIPO技术圈 皖ICP备19022944号-2

    Copyright © 2024, msipo.com

    返回顶部