Linux新手必须掌握的命令(2)

一、输入输出重定向

输入重定向是指把文件导入到命令中,而输出重定向则是指把原本要输出到屏幕的数据信息写入到指定文件中。

在日常的学习和工作中,相较于输入重定向,我们使用输出重定向的频率更高。

所以又将输出重定向分为了标准输出重定向和错误输出重定向两种不同的技术,以及清空写入与追加写入两种模式。

  • 标准输入重定向(STDIN,文件描述符为0):默认从键盘输入,也可从其他文件或命令中输入。

  • 标准输出重定向(STDOUT,文件描述符为1):默认输出到屏幕。
  • 错误输出重定向(STDERR,文件描述符为2):默认输出到屏幕。

比如我们分别查看两个文件的属性信息,其中第二个文件是不存在的,虽然针对这两个文件的操作都分别会在屏幕上输出一些数据信息,但这两个操作的差异其实很大。

先用ls查看当前目录,然后查看lc详细信息,再随便输入一个不存在的文件名查询。

 

在上述命令中,名为 lc 的文件是存在的,输出信息是该命令的标准输出信息。而名为 lclc 的第二个文件是不存在的,因此在执行完ls命令之后显示的报错提示信息也是该命令的错误输出信息。

那么,要想把原本输出到屏幕上的数据转而写入到文件当中,就要区别对待这两种输出信息。

对于输入重定向来讲,用到的符号及其作用如下表:

符号

作用

命令 < 文件

将文件作为命令的标准输入

命令 << 分界符

从标准输入中读入,直到遇见分界符才停止

命令 < 文件1 > 文件2

将文件1作为命令的标准输入并将标准输出到文件2


对于输出重定向来讲,用到的符号及其作用如下表:

符号

作用

命令 > 文件

将标准输出重定向到一个文件中(清空原有文件的数据)

命令 2> 文件

将错误输出重定向到一个文件中(清空原有文件的数据)

命令 >> 文件

将标准输出重定向到一个文件中(追加到原有内容的后面)

命令 2>> 文件

将错误输出重定向到一个文件中(追加到原有内容的后面)

命令 >> 文件 2>&1或命令 &>> 文件

将标准输出与错误输出共同写入到文件中(追加到原有内容的后面)

对于重定向中的标准输出模式,可以省略文件描述符1不写,而错误输出模式的文件描述符2是必须要写的。

通过标准输出重定向将 systemctl status vsftpd 命令原本要输出到屏幕的信息写入到文件 lc 中,然后用cat命令显示 lc 文件中的内容。具体命令如下:

 

如果想把命令的报错信息写入到文件,平时一般用不到。

但是当用户在执行一个自动化的Shell脚本时,这个操作会特别有用,因为它可以把整个脚本执行过程中的报错信息都记录到文件中,便于安装后的排错工作。

接下来我们以一个不存在的文件进行实验演示:

 

因为我们用的是  >>  所以追加到文档原有内容后面了。

 

输入重定向相对来说有些冷门,在工作中遇到的概率会小一点。

输入重定向的作用是把文件直接导入到命令中。接下来使用输入重定向把 lc 文件导入给 wc -l 命令,统计一下文件中的内容行数。

 

二、管道命令符

管道命令符的作用也可以用一句话来概括“把前一个命令原本要输出到屏幕的标准正常数据当作是后一个命令的标准输入”。

比如用翻页的形式查看/etc目录中的文件列表及属性信息(这些内容默认会一股脑儿地显示到屏幕上,根本看不清楚):

 ls -l /etc/ | more

 

最上面显示总共多少条,我们可以利用more命令的用法来浏览这些信息。

三、常用的转义字符

4个最常用的转义字符如下所示。

  • 反斜杠(\):使反斜杠后面的一个变量变为单纯的字符串。
  • 单引号(''):转义其中所有的变量为单纯的字符串。
  • 双引号(""):保留其中的变量属性,不进行转义处理。
  • 反引号(``):把其中的命令执行后返回结果。

我们先定义一个名为PRICE的变量并赋值为5,然后输出以双引号括起来的字符串与变量信息:

 

接下来,我们希望能够输出“Price is $5”,即价格是5美元的字符串内容。

但碰巧美元符号与变量提取符号合并后的$$作用是显示当前程序的进程ID号码,于是命令执行后输出的内容并不是我们所预期的:

 

要想让第一个“$”作为美元符号,那么就需要使用反斜杠(\)来进行转义,将这个命令提取符转义成单纯的文本,去除特殊功能。

 

四、Vim文本编辑器

Vim编辑器中设置了三种模式—命令模式、末行模式和编辑模式,每种模式分别又支持多种不同的命令快捷键,这大大提高了工作效率。

要想高效率地操作文本,就必须先搞清这三种模式的操作区别以及模式之间的切换方法。

  • 命令模式:控制光标移动,可对文本进行复制、粘贴、删除和查找等工作。
  • 输入模式:正常的文本录入。
  • 末行模式:保存或退出文档,以及设置编辑环境。

 

在每次运行Vim编辑器时,默认进入命令模式,此时需要先切换到输入模式后再进行文档编写工作。

而每次在编写完文档后需要先返回命令模式,然后再进入末行模式,执行文档的保存或退出操作。

在Vim中,无法直接从输入模式切换到末行模式。

Vim编辑器中在命令模式中最常用的一些命令如下图。

命令

作用

dd

删除(剪切)光标所在整行

5dd

删除(剪切)从光标处开始的5行

yy

复制光标所在整行

5yy

复制从光标处开始的5行

n

显示搜索命令定位到的下一个字符串

N

显示搜索命令定位到的上一个字符串

u

撤销上一步的操作

p

将之前删除(dd)或复制(yy)过的数据粘贴到光标后面


末行模式主要用于保存或退出文件,以及设置Vim编辑器的工作环境,还可以让用户执行外部的Linux命令或跳转到所编写文档的特定行数。

要想切换到末行模式,在命令模式中输入一个冒号就可以了。末行模式中可用的命令如下表。

命令

作用

:w

保存

:q

退出

:q!

强制退出(放弃对文档的修改内容)

:wq!

强制保存退出

:set nu

显示行号

:set nonu

不显示行号

:命令

执行该命令

:整数

跳转到该行

:s/one/two

将当前光标所在行的第一个one替换成two

:s/one/two/g

将当前光标所在行的所有one替换成two

:%s/one/two/g

将全文中的所有one替换成two

?字符串

在文本中从下至上搜索该字符串

/字符串

在文本中从上至下搜索该字符串

编写脚本文档的第1步就是给文档取个名字,这里将其命名为practice.txt。如果存在该文档,则是打开它。如果不存在,则是创建一个临时的输入文件。

打开practice.txt文档后,默认进入的是Vim编辑器的命令模式。此时只能执行该模式下的命令,而不能随意输入文本内容,我们需要切换到输入模式才可以编写文档。

五、编写Shell脚本

可以将Shell终端解释器当作人与计算机硬件之间的“翻译官”,它作为用户与Linux系统内部的通信媒介,除了能够支持各种变量与参数外,还提供了诸如循环、分支等高级编程语言才有的控制结构特性。

要想正确使用Shell中的这些功能特性,准确下达命令尤为重要。

Shell脚本命令的工作方式有两种:交互式和批处理。

  • 交互式(Interactive):用户每输入一条命令就立即执行。
  • 批处理(Batch):由用户事先编写好一个完整的Shell脚本,Shell会一次性执行脚本中诸多的命令。

在Shell脚本中不仅会用到很多Linux命令以及正则表达式、管道符、数据流重定向等语法规则,还需要把内部功能模块化后通过逻辑语句进行处理,最终形成日常所见的Shell脚本。

查看SHELL变量可以发现当前系统已经默认使用Bash作为命令行终端解释器了:

 

使用Vim编辑器把Linux命令按照顺序依次写入到一个lc文件中,这就是一个简单的脚本了。

例如,如果想查看当前所在工作路径并列出当前目录下所有的文件及属性信息,实现这个功能的脚本应该类似于下面这样:

 

第一行的脚本声明(#!)用来告诉系统使用哪种Shell解释器来执行该脚本;

第二、三行的可执行语句就是我们平时执行的Linux命令。

通过bash lc 来执行(lc是刚才编辑那个文件名)

 

但是,像上面这样的脚本程序只能执行一些预先定义好的功能,太过死板了。

为了让Shell脚本程序更好地灵活完成工作,必须要让脚本程序能够像之前执行命令时那样,接收输入的参数。

接收参数的变量,变量之间可以使用空格间隔。

例如$0对应的是当前Shell脚本程序的名称,$#对应的是总共有几个参数,$*对应的是所有位置的参数值,$?对应的是显示上一次命令的执行返回值,而$1、$2、$3……则分别对应着第N个位置的参数值。

 

例如,编辑如下文件:

 

执行后:

 

下面再介绍判断用户参数

系统在执行mkdir命令时会判断用户输入的信息,即判断用户指定的文件夹名称是否已经存在,如果存在则提示报错;

反之则自动创建。Shell脚本中的条件测试语法可以判断表达式是否成立,若条件成立则返回数字0,否则便返回其他随机数值。

条件测试语法的执行格式如图所示。切记,条件表达式两边均应有一个空格。

 

按照测试对象来划分,条件测试语句可以分为4种:

  • 文件测试语句;
  • 逻辑测试语句;
  • 整数值比较语句;
  • 字符串比较语句。

文件测试即使用指定条件来判断文件是否存在或权限是否满足等情况的运算符,具体的参数如表:

运算符

作用

-d

测试文件是否为目录类型

-e

测试文件是否存在

-f

判断是否为一般文件

-r

测试当前用户是否有权限读取

-w

测试当前用户是否有权限写入

-x

测试当前用户是否有权限执行

下面使用文件测试语句来判断/etc/fstab是否为一个目录类型的文件,然后通过Shell解释器的内设$?变量显示上一条命令执行后的返回值。

如果返回值为0,则目录存在;如果返回值为非零的值,则意味着目录不存在:

 

再判断/etc/fstab是否为一般文件

 

逻辑语句用于对测试结果进行逻辑分析,根据测试结果可实现不同的效果。

例如在Shell终端中逻辑“与”的运算符号是&&,它表示当前面的命令执行成功后才会执行它后面的命令,因此可以用来判断/dev/cdrom文件是否存在,若存在则输出Exist字样。

 

除了逻辑“与”外,还有逻辑“或”,它在Linux系统中的运算符号为||,表示当前面的命令执行失败后才会执行它后面的命令,因此可以用来结合系统环境变量USER来判断当前登录的用户是否为非管理员身份:

切换到非管理员身份,进行管理员验证:

 

第三种逻辑语句是“非”,在Linux系统中的运算符号是一个叹号(!),它表示把条件测试中的判断结果取相反值。

也就是说,如果原本测试的结果是正确的,则将其变成错误的;原本测试错误的结果则将其变成正确的。

我们现在切换回到root管理员身份,再判断当前用户是否为一个非管理员的用户。

由于判断结果因为两次否定而变成正确,因此会正常地输出预设信息:

 

下面这个示例的执行顺序是,先判断当前登录用户的USER变量名称是否等于root,然后用逻辑运算符“非”进行取反操作,效果就变成了判断当前登录的用户是否为非管理员用户了。

最后若条件成立则会根据逻辑“与”运算符输出user字样;或条件不满足则会通过逻辑“或”运算符输出root字样,而如果前面的&&不成立才会执行后面的||符号。

 

整数比较运算符仅是对数字的操作,不能将数字与字符串、文件等内容一起操作,而且不能想当然地使用日常生活中的等号、大于号、小于号等来判断。

因为等号与赋值命令符冲突,大于号和小于号分别与输出重定向命令符和输入重定向命令符冲突。

因此一定要使用规范的整数比较运算符来进行操作。可用的整数比较运算符如表所示。

运算符

作用

-eq

是否等于

-ne

是否不等于

-gt

是否大于

-lt

是否小于

-le

是否等于或小于

-ge

是否大于或等于


接下来测试一下10是否大于10以及10是否等于10(通过输出的返回值内容来判断):

 

转载于:https://www.cnblogs.com/nefu-Lc/p/9485989.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/465240.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

极限编程与敏捷开发(4)

解决方案一&#xff1a; 下面图1是一种最简单的解决方案&#xff0c;Switch对象可以轮询真实开关的状态&#xff0c;并且可以发送相应的turnOn和turnOff消息给Light。 图1解决方案二&#xff1a; 上面这个设计违反了两个设计原则&#xff1a;依赖倒置原则(DIP)和开放封闭原则(O…

虚拟机四种网络连接模式比较

虚拟机一直用&#xff0c;但选择网络时的四种模式总是搞不清楚&#xff0c;只知道选择bridge最好用。为了能更深入了了解&#xff0c;查询了些资料&#xff0c;总结如下 第一种 NAT模式 Vhost访问网络的所有数据都是由主机提供的&#xff0c;vhost并不真实存在于网络中&#xf…

CPU加了缓存后,有人急了~

Hi&#xff0c;我是CPU一号车间的阿Q&#xff0c;还记得我吗&#xff0c;真是好久不见了&#xff5e;我所在的CPU是一个八核CPU&#xff0c;就有八个工作车间&#xff0c;那运行起来速度杠杆的&#xff5e;虚拟地址翻译一大早&#xff0c;我们一号车间MMU&#xff08;内存管理单…

redis -- 学习

redis 安装 就不细说了。 可以看这个 地址 https://www.cnblogs.com/feijl/p/6879929.html 配置完成之后 连接不上redis 如果报错守护模式 解决办法 1.修改redis配置 redis.conf 守护模式不启用 如下 2.第二种 启动redis后 设置密码 先查看是否设置了 config get requirepass…

一个学妹写的按键检测函数把我秀翻了!

摘要&#xff1a;今年实验室来了三个学妹&#xff0c;其中一个学妹以前是物联网专业的&#xff0c;进了实验室老师二话没说&#xff1a;先把STM32单片机过一遍上来第一个例程就是使用按键点亮一个LED灯&#xff0c;好家伙。点灯小师弟比较在行&#xff0c;毕竟32、FPGA、Linux的…

嵌入式行业需要什么样的技术人才?

关注「嵌入式大杂烩」&#xff0c;选择「星标公众号」一起进步&#xff01;来源 | 巧学模电数电单片机嵌入式行业需要什么样的技术人才&#xff1f;仔细观察各种招聘的岗位要求吧&#xff0c;无非是两方面。1&#xff09;通用要求比如什么学历&#xff0c;多少年工作经验&#…

消除VIM光标闪烁

2019独角兽企业重金招聘Python工程师标准>>> VIM光标闪烁比较影响人读代码的心情&#xff0c;消除光标闪烁&#xff0c;在配置文件中写下set gcra:block-blinkon0 保存并重启VIM 即可消除光标闪烁。 转载于:https://my.oschina.net/tonyyang/blog/10240

java异常个人理解

废话不说先贴图 所有的异常和错误都继承与Throwable类&#xff0c;它的下面又分为两大子类。 1.Error(uncheck) Error,错误。它是java程序中不被捕获的错误&#xff0c;并且总是不被控制。 例如&#xff1a;OutOfMemoryError 2.Exception(check) Exception,异常。所有的异常类都…

华为专家助你1个月拿下物联网高工认证,首次提供全方位就业指导!

物联网职业方向主要包括研究型岗位、研发型岗位、技术型岗位和技能型岗位4类&#xff1a;技能型岗位&#xff1a;工作内容主要是系统部署实施、运维管理等技术支持服务。技术型岗位&#xff1a;工作内容主要是负责物联网系统规划、设计、集成、技术咨询。研发型岗位&#xff1a…

php获取linux是几核的,linux下怎么查看机器cpu是几核的

linux下怎么查看机器cpu是几核的&#xff1f;linux下查看机器是cpu是几核的几个cpumore /proc/cpuinfo |grep "physical id"|uniq|wc -l每个cpu是几核(假设cpu配置相同)more /proc/cpuinfo |grep "physical id"|grep "0"|wc -lcat /proc/cpuinfo…

我的自学编程之路!

大家好&#xff0c;我是写代码的篮球球痴昨晚上打车回家&#xff0c;接我的滴滴司机是一个年纪比较大的大姐&#xff0c;她说她儿子毕业了&#xff0c;但是找不到好的工作&#xff0c;就报名参加了编程培训&#xff0c;培训费两万多。我就问&#xff0c;那谁给他学费&#xff0…

鹰眼拓扑锁定跟踪 网络管理一目了然

为什么要在网管软件中引入“鹰眼”的概念&#xff1f; 企业网管经常遇到的问题是&#xff1a;为什么业务人员访问生产系统&#xff08;例如ERP等&#xff09;速度非常慢&#xff0c;甚至无法访问&#xff1f;邮件系统无法使用&#xff1f;下载数据时总是无法连接&#xff…

读工作31年退休的同事离职信有感

大家好&#xff0c;我是写代码的篮球球痴&#xff0c;下面的文章是我的朋友痞子衡写的。大家好&#xff0c;我是痞子衡&#xff0c;是正经搞技术的痞子。今天痞子衡不讲技术&#xff0c;跟大家随便唠唠嗑。这周五&#xff0c;痞子衡收到了一位来自恩智浦深圳分公司同事的离职信…

Silverlight 计时器

代码 publicpartialclassMainPage : UserControl{inti 1;TextBlock myTextBlock;publicMainPage(){ InitializeComponent(); myTextBlock newTextBlock(); myTextBlock.Loaded this.StartTimer; myTextBlock.Margin newThickness(30); LayoutRoot.Children.Add(myTextBlock);}p…

这三个Offer,你怎么选?

前几天&#xff0c;有读者给我发信息&#xff0c;让我帮他看一下offer的选择&#xff1a;字节、腾讯天美、阿里云&#xff0c;随便一个都是羡煞旁人的offer&#xff0c;这家伙一下拿了三个&#xff0c;我都开始酸了起来。于是我让他总结一下面试过程中考察的知识点&#xff0c;…

挖掘经典:几乎被人遗忘的HTML七种用法 (转)

转来学习http://www.cnblogs.com/netWild/archive/2010/11/30/1892418.html 当今的WEB领域&#xff0c;新概念、新技术不断涌现 -- WEB2.0、AJAX、HTML5.0... ... 但在几乎被我们忽略的HTML和XHTML里&#xff0c;还有许多并不为人所知的&#xff0c;但却非常有用的一些TAG 以下…

这种扯淡的嵌入式项目,尽量不要碰

第一种&#xff1a;画大饼的项目不接。有的客户会很热情的找到你&#xff0c;告诉你这个项目如何如何地有前途&#xff0c;产品研发成功了之后会有多么大的出货量&#xff0c;会有多么丰厚的利润&#xff0c;建议你一起跟他创业合作&#xff0c;成功了之后给你高额提成。但是产…

高频面试题,malloc实现

面试官&#xff1a;你好&#xff0c;请先做自我介绍我&#xff1a;巴拉巴拉&#xff0c;我喜欢打篮球……面试官&#xff1a;请解释下malloc的实现原理我&#xff1a;我不会面试官&#xff1a;那就先这样&#xff0c;我们就不浪费大家的时间了。在开发c或c时&#xff0c;经常需…

单机版简易考试系统开发过程讲解(C#注册机、用户注册、考试系统、×××全部源码)...

前些日子有个朋友&#xff0c;找我做一个考试软件&#xff0c;浙江省驾驶员理论包考专用系统&#xff0c;总共也没几个页面需要做&#xff0c;但是他以前的数据库VFP的数据&#xff0c;题库里有几千条数据&#xff0c;若人工录入几乎比太可行&#xff0c;他把原来的软件&#x…

CF 1025C Plasticine zebra

昨晚忘记判只有一个字符的情况fst了呜呜呜 挺有趣的题&#xff0c;昨晚连刚带猜弄出结论 考虑答案的取值&#xff0c;最优答案可能是一个后缀&#xff0c;或者是一个前缀&#xff0c;或者是一个后缀加上前缀 那么翻转之后最优答案的可选值就有了1的前缀n的后缀 对于一个合法的z…