目录
二、alias &&which &&whoami &&指令的本质
一、前言
在上篇【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命令的一个长选项。作用是显示颜色!它控制输出是否使用颜色代码对文件和目录进行分类。
常见值:
always、auto、never。
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 眼里,程序是在“向显示器这个文件写入数据”。所以想要从键盘获取数据,键盘是文件,读取键盘文件。而向显示器打印数据,显示器是文件,就要向显示器文件写入数据。
图里提到的 stdin、stdout、stderr,就是每个程序诞生时,系统硬塞给它的三根数据线。
-
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 的别名。
从“见猪跑”到“吃猪肉”,我们一起把这棵倒挂的树,从根看到叶。请读者一键三连,我们下篇见!
】打破Linux新手小白对指令的恐惧——揭秘指令的本质&spm=1001.2101.3001.5002&articleId=164755739&d=1&t=3&u=c0c0d89f75c24bcf888b864b6902e9ff)
673

被折叠的 条评论
为什么被折叠?



