小白如何学习Linux?会使用Linux的Shell,你就会了全部,5分钟学会!

4.6k 词

Hello 大家好!我是在2024年依然对这个荒诞的世界抱有热情的超级神奇的神奇君!

书接上回,前面两篇内容我们分别用1分钟、3分钟的时间,学会了如何安装VirtualBox软件和Linux虚拟机(Debian12.4.0)。今天神奇君将要尝试用5分钟的时间,让你简单了解Linux,熟悉Linux的基本使用,重点是掌握Linux Shell的使用。话不多说,现在开始吧。

首先我们启动前面两篇教程里安装好的Linux虚拟机,如果还没有安装虚拟机,可以重新阅读一下前面的课程:

【技术分享】小白如何学习Linux?从VirtualBox虚拟机软件开始,1分钟教程!

【技术分享】小白如何学习Linux?安装一台Linux虚拟机,3分钟学会!

我们首先登录虚拟机,来到Gnome桌面,点击左上方的Activities,然后在搜索栏中,输入terminal:

然后我们在这个Terminal软件上右键,然后点击“Pin to Dash”把它固定到我们桌面下方的Dash栏中,这个就类似于Windows桌面的快速启动栏,把程序固定到这里,下次就可以快速打开它。

同时我们可以把Dash栏中一些不常用的软件右键,点击“Unpin”,从Dash栏中去除掉:

这样就得到了一个清爽的Dash栏:

我们现在点击Dash栏中的Terminal来使用Gnome的Terminal,这个Terminal就类似于Windows系统中的CMD,是Linux的命令行交互程序。它所做的就是打开一个shell交互终端,让我们通过这个终端,来与Linux系统进行交互。

我们首先了解一个shell最最最基本的功能,就是了解我们当前是在哪一个目录下面进行工作的,以及当前目录下有哪些文件。Linux中,我们习惯性地把文件夹称之为“目录”,又叫做Directory,我们可以通过pwd命令来显示我们当前所在的目录,用ls命令来列出当前目录下面的文件:

这里我们就获悉了,我们当前是位于/home/demo目录下,并且目前的目录下有Desktop、Documents、Downloads等等这些“目录”,怎么知道它们是目录呢?那我们就需要通过给ls命令增加一个-l参数,令ls命令在列出的时候,详细列出这些文件或目录的类型:

可以看到,我用红框框起来的部分,就是它们的类型,d开头的,就是目录(Directory),如果是普通文件,那就是以短横线-开头,比如我们再给ls命令增加一个-a的参数,这样就表示列出所有文件,包括以.开头的隐藏文件。是的,在Linux中,以.开头的默认是隐藏文件,只有ls加上-a选项的时候才可以看到他们。ls -al,列出了这些文件和它们的类型,以d开头的是目录,以-开头的是普通文件。有没有看到,还有一个以l开头的.face.icon文件,这个l开头代表它是一个链接文件,它链接到.face文件中,有点类似于Windows的快捷方式,但仅仅是类似,二者的原理并不相同。

除了pwd、ls这样的命令,我们还需要掌握什么命令呢?首先我们要知道一下Linux的文件结构,在Linux中,一切都是文件。Linux的文件系统,存在一个“根目录”,它的路径是/,我们如果执行ls -l /,就可以看到Linux的根目录是怎样的:

这里我们看到根目录/下面有好多文件和目录!神奇君来介绍几个常用的,比如bin和sbin,这两个目录,它们分别链接到/usr/bin 和 /usr/sbin,它们是存放一些可执行文件的地方,因为可执行文件大都是二进制的binary格式的,所以它们的名称就叫做bin,而sbin,多出来的s是security的含义,主要是存放一些需要更高权限才能运行的程序。比如我们运行的ls,ls其实就存放在/bin目录当中,而重启的命令,叫做reboot,它就存放在/sbin目录当中,普通情况下无法运行/sbin目录的内容,这样就多了一层安全保障。怎么知道我们的ls命令是在/bin中而reboot是在/sbin中呢,输入whereis ls 和 whereis reboot,系统告诉我们这两个文件分别位于哪里:

那我们执行ls的时候,系统是如何知道要执行/bin目录下的ls文件呢?这是通过环境变量PATH来实现的,我们可以通过echo命令来打印环境变量$PATH。echo命令表示输出一个内容,$PATH则是Linux系统默认的表示路径的环境变量,它以冒号分隔了一个个系统中的路径,当我们输入一个命令的时候,系统会根据这个路径依次查找可执行文件,如果查完了都没有这个文件,那就会提示:comand not found:

说到这里,就要再补充一下了,我们的Terminal软件为我们打开的“Shell”,本身也就是/bin下面的一个可执行文件,常见的shell程序,有sh、ash、bash、ksh等等,我们在Debian Linux上面的Gnome桌面中使用shell,默认的就是bash,而这,也是操作系统为我们定义的,它定义在/etc/passwd文件当中。/etc/是一个怎样的目录呢,它主要存放系统中的配置文件,用户密码、用户组配置、网络配置、显示器配置等等等等一系列系统的配置,几乎都在/etc/目录里。cat命令表示查看一个文本文件的内容,我们可以执行cat /etc/passwd文件,来查看我们系统中用户配置:

每一行就代表一个用户和这个用户的基本配置,而记录用户“密码”的文件呢,在/etc/shadow里,我们可以cat /etc/shadow:

没想到提示Permission denied,这是为什么呢?这就是Linux系统对用户的保护,试想,如果使用这台电脑的除了你demo用户,还有一个xiaohong用户,如果每个普通用户都能查看/etc/shadow文件,那岂不是每个用户都可以间接看到别的用户的“密码”了?之所以说是间接,是因为shadow文件中保存的是密码的哈希,有很大一部分概率是可以通过碰撞来破解的。如果我们执行ls -l /etc/shadow命令,就可以看到,/etc/shadow的文件,是-rw-r—–,这其实代表着一个文件的类型和权限。-表示它是一个普通文件,而rw- r– — 这段要拆成三个部分来看。第一部分rw-表示这个用户的拥有者root对这个文件所拥有的权限,第二部分r–表示这个文件所属的组用户对它拥有的权限,第三部分—表示本组以外其余用户对这个文件的权限。我们当前的用户demo,就既不是root用户,也不属于shadow组用户,所以对这个文件不具备任何权限。说到权限,r代表读,w代表写,还有一个x代表执行。

我们再来看看/bin/ls文件的权限,执行ls -l /bin/ls 会发现,这个文件的权限是rwx r-x r-x,这就代表文件拥有者拥有全部的权限,文件所属组的用户拥有读和执行的权限,其他用户也拥有读和执行的权限。

细心的小伙伴可能还看到了,列出/etc/shadow文件的时候,后面还跟了root、shadow,而列出/bin/ls文件的时候,后面跟了root、root,这两组内容其实就代表了文件所属的用户和文件所属的用户组,比如/etc/shadow就属于root用户,属于shadow用户组。刚刚我们说了,用户的基本定义是在/etc/passwd文件,这里要再告诉大家,用户组的定义就是在/etc/group文件中,聪明的小伙伴已经知道怎么用cat文件去查看/etc/group文件的内容了,这里我们再学习一个head命令,使用head -n10 去看看/etc/group文件的前10行吧,可以看到root、demo、bin等等都是我们group中定义的系统用户组。

我们可以通过一个命令grep,来辅助我们查找一些内容。grep命令的作用,是对命令行输出的内容进行一个“过滤”,查找一些我们想要的内容,比如我们查看/etc/group内容的时候,想找找我们的demo用户所在的demo用户组,那么我们可以执行cat /etc/group | grep demo,列出的每一行代表一个用户组,最后一行的demo就是demo用户组,Linux在创建用户的时候默认就会创建一个与用户名对应的用户组。而上面几行中,每一行末尾的demo,就表示demo用户属于对应的用户组,比如第一行的cdrom组,最后包含了demo用户。cdrom从名字我们大致可以猜测出它是与CD驱动器有关的用户组,那么demo用户在这个组中,就代表demo用户可以拥有cdrom组所拥有的一些权限。一个用户可以属于多个用户组。用户、用户组,这些就是Linux对于权限的一个大致划分和管理,非常清晰、简洁。

等等,我们似乎还漏掉了什么?刚刚的cat /etc/group | grep demo,条命令中间的竖线是什么意思?哦,这表示Linux终端的命令“管道”,什么是命令管道呢?命令管道就表示把前面命令的输出和后面命令的输入给连通起来,比如我们cat命令是查看文件内容,而grep命令是过滤内容,那么cat命令的输出可以作为grep命令的输入,所以他们之间就用管道来连接起来啦,是不是很好理解?我们可以用ls命令的输入来作为grep命令的输出,列出/etc/目录中所有以b开头的文件,执行ls /etc/ | grep ^b,这就可以了。^b就表示以b开头,^这个字符并不是Shell当中的命令,这玩意叫做“正则表达式”,是另外一个有用的知识,在这里我们只需要它代表内容开头就可以。

管道的用处有很多,比如base64命令和md5sum、sha256sum命令是用来计算base64编码、md5哈希、sha256哈希的命令,我们可以结合echo和管道来令他们输出一些内容的编码和哈希:

echo www.cvxcv.com | base64

echo www.cvxcv.com | md5sum

echo www.cvxcv.com | sha256sum

至此,我们已经学会了基本的Shell使用,并且了解了Linux很多基本的机制,例如文件、权限、管道、用户配置等等。Linux的命令太多太多了,而神奇君的文章却有篇幅限制,不能无限制地写下去,所以,在这短短的5分钟里,神奇君已经尽可能地把一些最常遇到的知识点灌输给了你。希望可以在你入门Linux的路上,助你一臂之力!如果今后有更多的提升效率的技术思路,神奇君也会写下来分享。

感谢看到这里!如果对本次内容还有什么想要一起探讨的地方,欢迎在后台私信神奇君,神奇君一定知无不言地与你分享知识。