分享

UC头条:[Linux]基本指令

 cnzrp 2023-06-06 发布于山西

1.Linux基本指令(二)

1.1man指令

语法:man[选项]命令

功能:man指令可以查阅Linux的联机手册

root下安装man指令:

yumintall-yman-pages

通过sudo来为普通用户安装(普通用户使用sudo):

manman

man可以查阅指令或库函数等内容…我们先查阅一下man指令本身如何使用:

sudoyumintall-yman-pages

点击加载图片

查找手册介绍:

序号英文中文

1☆Executableprogramsorshellcommands普通的命令

2☆Systemcalls(functionsprovidedbythekernel)系统调用

3☆Librarycalls(functionswithinprogramlibraries)(C语言)库函数

4Specialfiles(usuallyfoundin/dev)特殊文件

5Fileformatsandconventions,e.g./etc/passwd文件格式

6Games游戏

7☆Miscellaneous(includingmacropackagesandconventions),e.g.man(7),groff(7)附件和变量

8Systemadministrationcommands(usuallyonlyforroot)系统管理命令(通常为root使用)

9Kernelroutines[Nonstandard]内核例程(非标准)

注:☆为常用手册。

man默认从1号手册开始查找man后的内容,按照手册顺序依次向后查找,找到就显示,找不到就是找不到

按q退出查阅

查找printf指令:

[root@iZ0jlj1bbn1zk2zv671vzhZ~]#manprintf

点击加载图片

(注:Linux下也有printf指令,在1号手册中)

在Linux下使用printf指令:

点击加载图片

使用man在3号手册(C语言库函数)查找printf:

[root@iZ0jlj1bbn1zk2zv671vzhZ~]#man3printf

1.2cp指令

语法:cp[选项]源文件或目录目标文件或目录

功能:cp——copy,顾名思义就是拷贝,复制文件或目录

常用选项:

-f或--force强行复制文件或目录,不论目的文件或目录是否已经存在

-i或--interactive覆盖文件之前先询问用户

-r递归处理,将指定目录下的文件与子目录一并处理。若源文件或目录的形态,不属于目录或符号链接,则一律视为普通文件处理

-R或--recursive递归处理,将指定目录下的文件及子目录一并处理

拓展:

cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中。若同时指定多个文件或目录,而最后的目的地并非一个已存在的目录,则会出现错误信息。

注意:同一个目录下,不能存在同名文件

cp为拷贝的操作,cp指令默认拷贝的文件

点击加载图片

cp文件名路径:拷贝文件

将dir1中文件拷贝到上级目录code中:

点击加载图片

cp-r目录名路径:r为递归,递归拷贝文件,即拷贝目录

将code目录拷贝到code_backup目录:

点击加载图片

cp-f文件名路径:强制拷贝。平常状况下,路径下有同名目录会给出覆盖提示;-f为暴力,为不给是否覆盖提示,直接覆盖

点击加载图片

但是实际上这里的不给提示是有歧义的,我们可以测试一下:

点击加载图片

那么这是为什么?其实是cp本身的问题,用alias查看了它的别名:

点击加载图片

这里的cp-i我们上面见过,它的意思是覆盖文件之前先询问用户,所以cp本质是cp-i,无论怎样都会先提问用户,比如我们的cp-f其实就被转换为了cp-i-f,这里我们可以通过取消别名的方式,来解决这个问题:

取消别名后:

点击加载图片

恢复别名:

点击加载图片

1.3mv指令

mv——move,可以剪切文件/目录或者重命名文件/目录。

语法:mv[选项]源文件或目录目标文件或目录

功能:

当第二个参数类型是文件时,mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。

当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,mv命令将各参数指定的源文件均移至目标目录中。

常用选项:

-f:f——force强制的意思,如果目标文件已经存在,不会询问直接覆盖。

-i:若目标文件已经存在时,就会询问是否覆盖!

mv可以重命名文件或目录

mv文件名新的文件名:文件重命名。如果当前面目录并没有这个名字,且不是一个存在的目录,shell会判定它是一个新的文件名

把test.txt重命名为test1.txt:

点击加载图片

mv文件名路径:剪切文件到指定路径

剪切code中的test1.txt到上级目录root中:

点击加载图片

mv目录名路径:剪切目录到指定路径

剪切mydir中的dir1目录到上级目录中:

点击加载图片

mv文件名路径新文件名:剪切文件到指定路径并重命名

将lesson3下的newname.txt剪切到testcp1并重命名为newnew.txt:

点击加载图片

总结:

mv文件名不存在文件名:重命名mva.txtb.txt->mva.txt./b.txt

可以理解为在当前目录下剪切并重命名

mv文件名路径:剪切mvc.txt…/从当前路径剪切到上级路径

mv…/dir1.从上级路径剪切到当前路径

mv文件名目录+不存在文件名:剪切并重命名文件

目录同理

1.4echo指令(含输出重定向)

echo“字符串”:可以把字符串打印到屏幕上

点击加载图片

echo在打印的时候默认是向显示器打印的。

echo“字符串”>文件名:将字符串写入文件中,若文件不存在会创建文件,为输出重定向

将“helloLinux”,输出重定向到mytest,txt中:

点击加载图片

测试多次输出重定向文件:

点击加载图片

每次重定向后,文件中的内容为最后一次重定向的结果。覆盖式写入(准备写入之前,先清空文件)

说了这么久,那么输出重定向到底是什么意思?

这里的>为输出重定向,echo默认是打印到屏幕上的。

如果>对应的目标文件不存在,则会自动创建,并把本来应该显示到显示器上面的文本,写入到文件中,这一过程,就叫输出重定向。

拓展:

显示数据到显示器上,就是向显示器打印,可以理解为向显示器写入,可以把显示器看做一种文件。我们的C程序获取数据,比如scanf、cin都是从键盘读取到的,所以键盘也可以看做一种文件。

内存从键盘获取数据的过程,也就是read,对应着input(输入)到程序中;内存显示数据到显示器的过程,也就是write,对应着output(输出)到显示器上。这一过程就是IO。

之前我们学习C语言文件操作时,读写方法是对于文件的。所以我们可以抽象拓展出一个概念:Linux下一切皆文件

所以输出重定向就是把原本写入到显示器文件的内容写入到文件中

echo“字符串”>>文件名:将字符串内容追加到文件中,为追加重定向

例如追加字符串到test.txt中:

点击加载图片

追加自带换行,不断向目标文件中新增内容

1.5cat指令(含输入重定向)

语法:cat[选项][文件]

功能:查看目标文件的内容

常用选项:

-b对非空输出行编号

-n对输出的所有行编号

-s不输出多行空行

cat打印文件的内容到屏幕上,其实就是查看文件内容。

我们nano一个文件,使用cat查看内容:

点击加载图片

cat-s文件名:省略多余空行查看文件内容,就是指令之间最多输出一个空行

点击加载图片

cat-sn文件名:-n是对输出行编号,-sn组合使用就是省略空行输出编号并打印内容,可以看到省略了空行。

点击加载图片

cat会把文件内容读取到程序里,然后打印出来。

cat<文件名:输入重定向,将文件中内容读取到cat中,并打印

点击加载图片

如果cat后不跟任何内容,那么就会默认从键盘中读数据:

点击加载图片

所以,输入重定向就是改变原先从键盘上读取数据的方式,改为从其他文件中读取数据

其实这里使用cattest.txt和cat

1.6wc指令

语法:wc[-lwm]

功能:统计文件的行数、单词数、字符数

常用选项:

-l:仅列出行

-w:仅列出多少字(英文单字)

-m:多少字符

wc-l文件名:显示文本文件有多少行和文件名

显示文件有多少行,并文件名

点击加载图片

wc-l<文件名:输入重定向,显示文本文件行数不显示文件名

点击加载图片

1.7more指令

语法:more[选项][文件]

功能:more命令,功能类似cat

常用选项:

-n对输出的所有行编号

q退出more

测试more指令前,我们先写一个命令行脚本:

cnt=0;while[$cnt-le10000];doecho'hello$cnt';letcnt++;done>test.txt

意思是往test.txt中写入hello1~hello10000。

使用cat查看一下:

点击加载图片

cat只看到了结尾部分,说明cat适用于观看短文本。

长文本可以使用more指令观看:

点击加载图片

more文件名:从头部查看文本内容,按回车逐行翻阅。

1.8less指令

语法:less[参数]文件

功能:

less与more类似,但使用less可以随意浏览文件,而more仅能向前移动,却不能向后移动,而且less在查看之前不会加载整个文件。

常用选项:

-i忽略搜索时的大小写

-N显示每行的行号

/字符串:向下搜索“字符串”的功能

?字符串:向上搜索“字符串”的功能

n:重复前一个搜索(与/或?有关)

N:反向重复前一个搜索(与/或?有关)

q:quit退出

补充:

less工具是对文件或其它输出进行分页显示的工具,应该说是linux查看文件内容的工具,功能强大。

less的用法比起more更加的有弹性。在more的时候,我们并没有办法向前面翻,只能往后面看。

使用less,就可以使用[pageup][pagedown]等按键的功能来往前往后翻看文件,更容易用来查看一个文件的内容。

less拥有更多的搜索功能,不止可以向下搜,也可以向上搜。

less文件名:查看文件内容支持上下翻阅

↑向上翻阅,↓向下翻阅,q退出

less支持查阅功能,方法为/+查阅内容,在一次查阅后,无法查阅到上次查阅内容前面的内容

点击加载图片

先查阅带9的内容,然后查阅带1的内容。上次查阅结果为带9的内容,9前面的内容无法被查阅。查阅带1的内容是从10开始查阅的。

点击加载图片

less适合用于大文本:工程、日志

1.9head和tail指令(含管道用法)

head

语法:head[参数]…[文件]…

功能:

head用来显示档案的开头至标准输出中,默认head命令打印其相应文件的开头10行。

选项:

-n<行数>显示的行数

head-n5文件名:显示前五行,写成head-5

点击加载图片

tail

语法:tail[必要参数][选择参数][文件]

功能:用于显示指定文件末尾内容,不指定文件时,作为输入信息进行处理。常用查看日志文件。

选项:

-f循环读取

-n<行数>显示行数

tail默认打印尾部十行内容。

tail-n5文件名:显示文件尾部五行内容

点击加载图片

学习了head和tail,我们能否获取mylog.txt中间部分的第500-520行?

法1:借助中间文件+重定向

step1:head-1020test.txt>tmp.txt——将前1020内容重定向到tmp.txt中

点击加载图片

step2:tail-20tmp.txt——tail截取tmp.txt的后20行

点击加载图片

法2:管道

首先,介绍一下管道。我们生活中,管道是用来传输资源的,对于Linux中的管道也是。

|就是管道的标志。计算机中最重要的资源是数据,|就会被shell解释为链接两条指令用来传输数据的指令。我们可以把管道也当做一种文件。

先看两个管道的例子:

我们原本统计行需要用wc-ltest.txt,并且会打印文件名:

点击加载图片

但是学习了管道后,我们可以使用cattest.txt|wc-l,把cat的数据写到管道里,之后用wc-l到管道中读取,这样也不显示文件名。

点击加载图片

cattest.txt将内容放到管道中,head-1020截取文件中前1020行,再把这些放入管道中,tail-20截取这些的后20行

点击加载图片

管道意义:集联多条指令,做数据的不断加工,支持流水线工作。

2.总结:

今天我们主要学习了9个基本指令,还了解了输入重定向、输入重定向和管道用法的用法,难度相比前一篇指令博客高一些。接下来,我们将继续学习Linux的的相关知识。希望我的文章和讲解能对大家的学习提供一些帮助。

当然,本文仍有许多不足之处,欢迎各位小伙伴们随时私信交流、批评指正!我们下期见~

点击加载图片

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多