【Linux指令(二)】打破Linux新手小白对指令的恐惧——揭秘指令的本质

目录

一、前言

二、alias &&which &&whoami &&指令的本质

1.alias

2.which

--color

3.whoami

4.指令的本质

三、经典面试题:ll、ls、ls -l三者的关系

四、Linux:一切皆文件(重点)

五、echo&&cat&&重定向

1.echo

与printf区分

2.cat

特殊情况

3.输出重定向

输出追加重定向

应用1:快速创建一个文件

应用2:快速清空文件内容

4.输入重定向

5.使用输入输出重定向拷贝文件内容

六、小结


一、前言

在上篇【Linux指令(一)】中博主带大家入门了指令,了解了指令的格式以及如何正确使用指令(选择选项)。可能大家心里还是不放心,对“指令”的认识不是很深刻,仅仅知道我们用这些指令是修改文件的属性和内容,并不知道底层是如何实现的。没关系!上篇仅仅是带大家“见猪跑”,都是一些很浅显易懂的内容。而本篇wac将给大家揭秘指令的本质,打破对指令“高大上”的滤镜。

此外,本篇仍然采用指令和理论穿插讲述的方式,使大家学习起来不那么枯燥不生动。好啦,废话不多说,跟着博主的步伐,走进Linux系统的更深层!

二、alias &&which &&whoami &&指令的本质

1.alias

功能:设置命令的别名

句法alias 别名='命令 选项'

它的本质是在当前 Shell 环境中建立一个 “映射关系”:当你输入一个简短的别名时,Shell 会自动将其替换为对应的原始命令并执行。

举例:

显而易见,该指令是设置pwd的别名为tmx,有过前面C++中对引用的学习,可以很简单的理解alias!感兴趣的读者可以去前文观看!

如何取消?

直接:unalias 【别名】

2.which

功能:搜索系统指定的命令
句法:which 指令

举例:

根据显示出的内容可以看出ls是ls的别名,那么这里读者就就会奇怪了,为什么起一个和原来的名字一样的别名呢?显而易见,后面的 --color才是主角

--color

--color 是 ls 命令的一个长选项。作用是显示颜色!

它控制输出是否使用颜色代码对文件和目录进行分类。

常见值:alwaysautonever

auto 表示仅当输出到终端时才使用颜色。

3.whoami

whoami 是一个用于显示当前登录用户名的命令。

用法:直接输入 whoami 并回车即可。

输出:它会打印出当前执行该命令的有效用户(即当前 Shell 进程的实际拥有者)。

举例:

表明当下用户为超级用户——root。

4.指令的本质

提问:在Windows操作系统中,我们想要使用一个应用软件,必须要先下载和安装。那么我们该怎么理解下载和安装呢?

以douyin为例:

当我们双击一个.exe文件时,程序(应用)自动开始运行。而我们在桌面双击这个应用软件,同样会打开。二者本质是一样的,后者仅仅是为了方便用户使用,安装程序在桌面创建了一个 .lnk 快捷方式文件,并给它设置了一个图标。关于.exe文件,作为程序猿的大家应该的都不陌生,我们使用编译软件写一个c程序时,通常会先写一个.c文件,经过编译器的编译,生成一个.exe的可执行程序,在运行这个程序就通过显示器输出,而这个所谓的可执行程序(应用),本质上是特定路径下的一个可执行程序,就是一个文件!

which pwd、ls、which:我们可以看出这些指令存放在默认路径/usr/bin/下。与Windows类似,不知道大家注意过没有,我们在搜索引擎上下载安装包时,不需要选择路径而被自动下载在指定路径。Linux中,所谓的软件安装,就是把可执行程序拷贝到系统路径下,而Linux指令,就是二进制文件被安装(拷贝)到系统路径下。

综上所述;指令的本质就是Linux特定路径下的可执行文件罢了!

三、经典面试题:ll、ls、ls -l三者的关系

我们先贴上l、ls、ls -l运行截图:

得出结论:ll 和ls -l显示的内容一致,而ls仅罗列当前目录里的文件名。

三者关系一句话:ll 是 ls -l 的别名,ls -l 是 ls 加上 -l 选项后的形式。

  • ls:原生命令,列出目录内容(默认只显示文件名)。

  • ls -l:给 ls 加上 -l(长格式)选项,显示权限、大小、时间等详细信息。

  • ll:不是独立命令,而是 Shell 里的别名。

    所以敲 ll 等价于敲 ls -l,只是多了颜色。

四、Linux:一切皆文件(重点)

这里博主要介绍点Linux与Windows不同的地方了!

如何理解Linux系统中显示器和键盘都是文件呢?

你平时在 Windows 里“打字”,本质是敲键盘。但在 Linux 眼里,你是在“读取键盘这个文件”。你平时在屏幕上“看字”,本质是显示器在发光。但在 Linux 眼里,程序是在“向显示器这个文件写入数据”。所以想要从键盘获取数据,键盘是文件,读取键盘文件。而向显示器打印数据,显示器是文件,就要向显示器文件写入数据。

图里提到的 stdinstdoutstderr,就是每个程序诞生时,系统硬塞给它的三根数据线。

  • stdin(标准输入)—— 程序的“耳朵”

    • 对应硬件:键盘。

    • 作用:程序刚跑起来,如果它有嘴巴,它就会竖起耳朵,等待你从键盘敲入指令。

  • stdout(标准输出)—— 程序的“嘴巴”

    • 对应硬件:显示器。

    • 作用:程序正常工作,有了结果(比如你敲了 ls,输出了文件列表),它就通过这张嘴巴,把正常结果喷到屏幕上给你看。

  • stderr(标准错误)—— 程序的“警报器”

    • 对应硬件:显示器。

    • 作用:如果程序搞砸了(比如你敲了 ls 不存在的文件),它虽然也是往屏幕上输出,但走的不是“嘴巴”,而是直接拉响“警报器”,告诉你这是错误信息。(这个不做重点介绍,了解即可)

提问,为什么每个程序默认都会打开stdin/stdout/stderr?

打开这三个,就是为了让程序变成一个“活人”,能够和外界(用户、键盘、屏幕)进行交流。

在 Linux 系统中,当任何一个程序(进程)启动时,操作系统会自动帮它把这三根线接好。默认情况下:

  • stdin 接键盘

  • stdout 接显示器

  • stderr 接显示器

所以指令默认是向显示器写入,显式打印在显示器上的,例如前篇介绍过的 ls:

  • 本来 stdout 接的是显示器,你敲 ls > file.txt,就等于把 stdout 这根线,从显示器上拔下来,插到了 file.txt 这个文件上。于是命令结果不再打印到屏幕上,而是写进了文件里!

这就是我们下面会介绍的神奇的重定向操作!既然这键盘和显示器都是“文件”,那我就可以拔掉默认的插头,接到别的文件上

五、echo&&cat&&重定向

1.echo

echo 是 Linux 里最基础的命令之一,可以理解为“向标准输出打印一段文字”

它默认把内容写到 stdout(标准输出),也就是你的终端屏幕,并在末尾自动加一个换行符。

打印“aaabbb”(默认向显示器文件写入):

与printf区分

printf打印字符串不会默认在末尾加一个换行:

2.cat

cat 是 Linux 里最常用的文件查看命令,名字来自 concatenate(连接)。它的核心功能是:把一个或多个文件的内容,连续输出到标准输出(默认是屏幕)

读取 1.txt文件中的内容(默认向显示器文件写入):

特殊情况

可是当我们不在cat指令后接文件,就会出现这样的情况:卡在当前页面,等待从键盘文件读取内容(默认),并回显到显示器上:

3.输出重定向

echo指令默认向显示器文件写入,我们可以使用输出重定向,改变写入方向,写入到指定的文件内!

向一个不存在的文件(message.txt)写入内容:

[root@my-alicloud ~]# echo 'aaaaaaaa'>message.txt
[root@my-alicloud ~]# ll
total 8
drwxr-xr-x 2 root root 58 Sep  9 15:10 1.d
-rw-r--r-- 1 root root  7 Sep 11 12:58 1.txt
drwxr-xr-x 2 root root  6 Sep  9 15:18 2.dir
-rw-r--r-- 1 root root  9 Sep 11 13:14 message.txt
drwxr-xr-x 2 root root 29 Sep 10 08:34 subdir
[root@my-alicloud ~]# cat message.txt
aaaaaaaa

再次向message.txt(已存在的文件)写入内容:

[root@my-alicloud ~]# cat message.txt
aaaaaaaa
[root@my-alicloud ~]# echo 'aaa'>message.txt
[root@my-alicloud ~]# cat message.txt
aaa

echo指令输出重定向到指定文件,该文件存在则先清空再写入,不存在则创建再写入。

输出追加重定向

应用1:快速创建一个文件

创建一个新文件5.txt:

[root@my-alicloud ~]# pwd
/root
[root@my-alicloud ~]# tree
.
├── 1.d
│   ├── 1.txt
│   ├── 2.txt
│   ├── 3.txt
│   └── 4.txt
├── 1.txt
├── 2.dir
├── message.txt
└── subdir
    ├── fa
    └── filel

4 directories, 8 files
[root@my-alicloud ~]# >5.txt
[root@my-alicloud ~]# tree
.
├── 1.d
│   ├── 1.txt
│   ├── 2.txt
│   ├── 3.txt
│   └── 4.txt
├── 1.txt
├── 2.dir
├── 5.txt
├── message.txt
└── subdir
    ├── fa
    └── filel

4 directories, 9 files

应用2:快速清空文件内容

删除刚创建好的message.txt的内容

[root@my-alicloud ~]# cat message.txt
aaa
[root@my-alicloud ~]# >message.txt
[root@my-alicloud ~]# cat message.txt
[root@my-alicloud ~]# 

4.输入重定向

cat默认从键盘读,回显到显示器上

显示message.txt的内容到显示器:

[root@my-alicloud ~]# echo 'bbbbbbb'>message.txt
[root@my-alicloud ~]# cat<message.txt
bbbbbbb

其实cat<和直接用cat 文件名效果是差不多的,只是有些内部机制不同,我们这里使用cat<是为了演示“输入重定向”的使用,让大家更理解Linux系统下“一切皆文件”的意义。

5.使用输入输出重定向拷贝文件内容

演示:

[root@my-alicloud ~]# cat <message.txt>1.txt
[root@my-alicloud ~]# cat message.txt
bbbbbbb
[root@my-alicloud ~]# cat 1.txt
bbbbbbb

六、小结

本篇从指令的本质讲起:所谓指令,就是存放在 /usr/bin 等系统路径下的可执行文件alias 给命令起外号,which 查命令路径,whoami 看当前用户。

Linux 的核心哲学是 “一切皆文件”:每个程序启动时,系统默认打开三根数据线——stdin(键盘)、stdout(显示器)、stderr(显示器)。程序通过它们与外界交互。

重定向就是拔掉默认插头,接到别的文件上:

  • >:覆盖写入,不存在则创建

  • >>:追加写入

  • <:从文件读取输入

  • 空命令 > 文件:快速创建或清空文件

echo 负责打印,cat 负责读取;两者配合重定向,就能实现创建、清空、拷贝文件等操作。而 ll 不过是 ls -l 的别名。

从“见猪跑”到“吃猪肉”,我们一起把这棵倒挂的树,从根看到叶。请读者一键三连,我们下篇见!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值