shell教程


1 菜鸟入门

    1.1 三国鼎立,江湖恩怨

    1.2 精灵小黑,分身有术

    1.3 source命令

    1.4 入门Linux

2 shell入门

    2.1 shell重生之路

    2.2 变量入门

    2.3 逻辑运算入门

    2.4 空格入门

    2.5 数组入门

    2.6 $和#入门

    2.7 大括号入门

3 命令故事

    3.1 命令王国的习俗

    3.2 命令的胡吃海喝

    3.3 命令的肺腑之言

    3.4 xargs的左右逢源

    3.5 Linux的crontab

命令的肺腑之言

创建时间:2022-04-25 | 更新时间:2022-04-25 | 阅读次数:1088 次

命令是个小精灵,吃喝拉撒,看起来好不爽快,但实际上都是人来安排好的,都强加了人的意愿。

程序=算法+数据结构。算法有五大特性:输入、输出、有穷性、确定性、可行性。所有的一切都被安排好了,无论输入什么,还是输出什么,包括其中执行的步骤和规则,都是按照人的意愿来的,都是人强加给的。只有“错误”,才是小精灵发自内心的肺腑之言,让人深感意外,茫然失措,不得不停下脚步,倾听其心声。

本来,错误和正常的输出一样,都是打印到终端的,也就是说,命令的执行结果无需做任何的设置,都会输出在当前窗口。但是,人们往往更喜欢听赞歌,不想听忠告,而是划分成三六九等,选择性地倾听。

将正常的输出归入1类,表示为1>,将错误归入2类,表示为2>,然后选择性的倾听:cmd 1> stdout.txt 2>stderr.txt。更有甚者,杜绝一切忠言逆耳:cmd 2>/dev/null

我们从小都知道符号<和>,知道它们分别表示小于和大于。长大之后,我们还知道它们在html语言中用来表示标签,例如

,它们两个看似简单,但是深入挖掘的话,还有很有学问的。最常见的情况莫过于冲突的发生,因为在html源码里面,直接写<和>,往往与标签中的符号发生冲突,像这种情况:<p> a<b </p>,页面出现的效果不是a<b,而是a,因为<b </p>被当做一个标签(注意:红色的字符被忽视了),要想正确的显示,应该这么写:<p> a&lt;b </p>,其中&lt;属于实体编码。其底层的实现过程这样的:

如今符号<>出现在shell里面,这个时候它们已经被赋予了新的含义,而且常常需要与文件描述符相结合,通常的写法是这样的:command 0<file1 1>file2 2>file3

文件描述符是内核为了高效管理已被打开的文件所创建的索引,用于指向被打开的文件,所有执行I/O操作的系统调用都通过文件描述符。程序刚刚启动时,第一个打开的文件是0,第二个是1,以此类推。stdin,标准输入,默认设备是键盘,文件编号为0。stdout,标准输出,默认设备是显示器,文件编号为1。 stderr,标准错误,默认设备是显示器,文件编号为2。

从大于小于号转换成重定向符号,并且处处与文件描述符相结合,这是一种思维的转换,更是一种习惯的养成。看似简单的<和>里面也有这么多的条条框框,学习之路充满着坑坑洼洼,需要十分的小心和警惕。