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…

mm1 matlab,(高质)MM1排队系统仿真matlab实验报告.doc

M/M/1排队系统实验报告一、实验目的本次实验要求实现M/M/1单窗口无限排队系统的系统仿真&#xff0c;利用事件调度法实现离散事件系统仿真&#xff0c;并统计平均队列长度以及平均等待时间等值&#xff0c;以与理论分析结果进行对比。二、实验原理根据排队论的知识我们知道&…

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

虚拟机一直用&#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的…

java请求servlet,[Java]Servlet发送Post请求

演示实例&#xff1a;AServlet发送一个Student对象到BServlet#### 1.AServlet部分首先造一个学生stu&#xff0c;然后通过fastjson的toJSONString方法把对象转换成字符串&#xff0c;再通过MyHttpUtils的sendPost方法把数据发送到BServlet核心部分是MyHttpUtils类&#xff0c;还…

活动选择

D14554. 活动选择 时间限制&#xff1a;1.0s 内存限制&#xff1a;256.0MB 代码提交间隔&#xff1a;1分钟(现在可以提交) 输入文件名&#xff1a;test.in 输出文件名&#xff1a;test.out 问题描述 假设有一个需要使用某一资源的n个活动组成的集合S&#xff0c;S&…

怎样安装联想慧盾

1.如果是刚买的新计算机里面什么都没有&#xff0c;必须要有联想慧盾盘&#xff0e;&#xff12;.在启动时&#xff0c;按&#xff26;&#xff14;键进行安装&#xff0c;按F10键进行卸载&#xff0e;&#xff13;.联想慧盾安装过程&#xff1a;T1 200000G NTFS 902(暂…

我爸开车撞人

国庆收假回来的最后一天&#xff0c;我哥给我发消息&#xff0c;给我发了个视频&#xff0c;里面里面有一辆救护车&#xff0c;救护车在呼呼呼的发出声音。然后我以为是我哥出了什么事&#xff0c;就打电话过去&#xff0c;我哥着急的说&#xff0c;是爸妈开车撞人了。之后我打…

Adobe CTO:Android将超预期获50%份额

Adobe首席技术官凯文•林奇近日在《财富》杂志的采访中表达了他对Android操作系统的看法和期望。按照官凯文•林奇的预测&#xff0c;Android将超过业界的预期&#xff0c;在未来半年内将其智能手机份额提升至50%。Adobe凯文•林奇表示&#xff0c;苹果iPhone和黑莓手机的市场份…

女士怎么就不适合PhP呢,女人可以不美丽,但不能不智慧

相信世界上的所有30女人都有一个梦想&#xff0c;那就是希望自己能够有“闭月羞花&#xff0c;沉鱼落雁”的容貌。可是&#xff0c;上天不会将这倾国倾城的美貌平均分到每一个女人身上&#xff0c;而且&#xff0c;假如世界上所有30女人都拥有同样出众的容貌&#xff0c;也就没…

898 C. Phone Numbers

传送门 [http://codeforces.com/contest/898/problem/C] 题意 题意比较难理解直接看样例就知道了&#xff0c;给你个n接下来n行&#xff0c;每行包括一个名字和号码的数量&#xff0c;还有具体的每个号码 让你整理他的电话本&#xff0c;使得一个人的号码不能有重复&#xff0c…

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

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

oracle临时表空间地址,Oracle认证:详解OracleTemp临时表空间处理方法

临时表空间主要用途是在数据库进行排序运算、管理索引、访问视图等操作时提供临时的运算空间&#xff0c;当运算完成之后系统会自动清理。当oracle里需要用到sort的时候&#xff0c;PGA中sort_area_size大小不够时&#xff0c;将会把数据放入临时表空间里进行排序&#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…

小型机oracle命令,Oracle小型机如何选型

Oracle小型机如何选型我们知道服务器在选型时具备以下五个原则&#xff1a;高性能、高可靠、高可扩展、安全性以及可管理性等。而实际上&#xff0c;不同的应用程序对服务器硬件的需求也有所不同。我们将针对Oracle目前的产品系列&#xff0c;分析其对不同应用系统的需求符合程…

linux 每日学一点《明明白白配置lilo启动引导器》

明明白白配置lilo启动引导器怎样配置好lilo文件?LILO 是Linux 自带的一个优秀的开机启动管理程序&#xff0c;它可以开机时启动Linux&#xff0c;PC/MS-DOS&#xff0c;DR DOS&#xff0c;OS/2&#xff0c;Windows 95&#xff0c;Windows NT&#xff0c;386BSD&#xff0c; SC…