计算机中缺失的一门课——学习

计算机中缺失的一门课读书笔记

前言

虽然已经从事编程行业多年,但进入Linux编程还是最近的事情。以前一直在windows下从事编程活动,在刚切换到linux时,难免会遇到各种不适应问题,幸好找到了MIT的计算机中缺失的一门课这门课程,能够引领我进入linux的世界。

一、shell

主题1.TheShell

shell是什么?

shell是与计算机进行交互的文字接口,允许用户输入程序,并获得办结构化的输出。
常用的Bourne Again Shell,即我们经常使用的"bash"。

使用shell

当打开终端时,会看到一般shell是这个样子的。
在这里插入图片描述
这是shell最主要的文本接口,它告诉你现在使用的用户是chentaowu,主机名是chentaowu-MS-7C88,当前所在的目录是~,‘$’符号说明,当前用户身份不是root身份。白色闪烁的光标,表面当前输入的位置,我们可以在光标处输入指令,让计算机执行,比如我们获取当前的时间,输入date后按回车键:
在这里插入图片描述
我们可以看到在date指令输入之后,shell中的下一行就出现了具体的日期。
我们还可以在执行程序后输入参数,比如我们打印helloworld:
在这里插入图片描述
这里echo就是程序,helloworld就是输入的参数,有一点必须注意,shell 基于空格分割命令并进行解析,然后执行第一个单词代表的程序,并将后续的单词作为程序可以访问的参数。如果希望传递的参数中包含空格(例如一个名为 My Photos 的文件夹),要么用使用单引号,双引号将其包裹起来,要么使用转义符号 \ 进行处理(My\ Photos)。
这里大家可能会好奇,shell怎么知道如何执行date或者echo等指令呢?
其实,类似于 Python 或 Ruby,shell 是一个编程环境,所以它具备变量、条件、循环和函数(下一课进行讲解)。当你在 shell 中执行命令时,您实际上是在执行一段 shell 可以解释执行的简短代码。如果你要求 shell 执行某个指令,但是该指令并不是 shell 所了解的编程关键字,那么它会去咨询 环境变量 $PATH,它会列出当 shell 接到某条指令时,进行程序搜索的路径:
在这里插入图片描述
当我们执行 echo 命令时,shell 了解到需要执行 echo 这个程序,随后它便会在 $PATH 中搜索由 : 所分割的一系列目录,基于名字搜索该程序。当找到该程序时便执行。确定某个程序名代表的是哪个具体的程序,可以使用 which 程序。我们也可以绕过 $PATH,通过直接指定需要执行的程序的路径来执行该程序。

在shell中导航

shell 中的路径是一组被分割的目录,在 Linux 和 macOS 上使用 / 分割,而在Windows上是 \。路径 / 代表的是系统的根目录,所有的文件夹都包括在这个路径之下,在Windows上每个盘都有一个根目录(例如: C:\)。 假设使用的是 Linux 文件系统。如果某个路径以 / 开头,那么它是一个 绝对路径,其他的都是 相对路径 。相对路径是指相对于当前工作目录的路径,当前工作目录可以使用 pwd 命令来获取。此外,切换目录需要使用 cd 命令。在路径中,. 表示的是当前目录,而 … 表示上级目录
在这里插入图片描述
注意,shell 会实时显示当前的路径信息。您可以通过配置 shell 提示符来显示各种有用的信息。
一般来说,当我们运行一个程序时,如果我们没有指定路径,则该程序会在当前目录下执行。例如,我们常常会搜索文件,并在需要时创建文件。
为了查看指定目录下包含哪些文件,我们使用 ls 命令:
在这里插入图片描述
除非我们利用第一个参数指定目录,否则 ls 会打印当前目录下的文件。大多数的命令接受标记和选项(带有值的标记),它们以 - 开头,并可以改变程序的行为。通常,在执行程序时使用 -h 或 --help 标记可以打印帮助信息,以便了解有哪些可用的标记或选项。例如,ls --help 的输出如下:
在这里插入图片描述
以上只是部分输出
在这里插入图片描述
这个参数可以打印出更加详细地列出目录下文件或文件夹的信息。首先,本行第一个字符 d 表示 missing 是一个目录。然后接下来的九个字符,每三个字符构成一组。 (rwx). 它们分别代表了文件所有者(chentaowu),用户组(chentaowu) 以及其他所有人具有的权限。其中 - 表示该用户不具备相应的权限。从上面的信息来看,只有文件所有者可以修改(w),missing 文件夹 (例如,添加或删除文件夹中的文件)。为了进入某个文件夹,用户需要具备该文件夹以及其父文件夹的“搜索”权限(以“可执行”:x)权限表示。为了列出它的包含的内容,用户必须对该文件夹具备读权限(r)。对于文件来说,权限的意义也是类似的。注意,/bin 目录下的程序在最后一组,即表示所有人的用户组中,均包含 x 权限,也就是说任何人都可以执行这些程序。

在这个阶段,还有几个趁手的命令是需要掌握的,例如 mv(用于重命名或移动文件)、 cp(拷贝文件)以及 mkdir(新建文件夹)。

如果想要知道关于程序参数、输入输出的信息,亦或是想要了解它们的工作方式,请试试 man 这个程序。它会接受一个程序名作为参数,然后将它的文档(用户手册)展现出来。注意,使用 q 可以退出该程序。
在这里插入图片描述

在程序间建立连接

在 shell 中,程序有两个主要的“流”:它们的输入流和输出流。 当程序尝试读取信息时,它们会从输入流中进行读取,当程序打印信息时,它们会将信息输出到输出流中。 通常,一个程序的输入输出流都是您的终端。也就是,您的键盘作为输入,显示器作为输出。 但是,我们也可以重定向这些流!

最简单的重定向是 < file 和 > file。这两个命令可以将程序的输入输出流分别重定向到文件:
在这里插入图片描述
还可以使用 >> 来向一个文件追加内容。使用管道( pipes ),我们能够更好的利用文件重定向。 | 操作符允许我们将一个程序的输出和另外一个程序的输入连接起来:
在这里插入图片描述

一个功能全面又强大的工具

对于大多数的类 Unix 系统,有一类用户是非常特殊的,那就是:根用户(root user)。在上面的输出结果中,根用户几乎不受任何限制,他可以创建、读取、更新和删除系统中的任何文件。 通常在我们并不会以根用户的身份直接登录系统,因为这样可能会因为某些错误的操作而破坏系统。 取而代之的是我们会在需要的时候使用 sudo 命令。顾名思义,它的作用是可以以 su(super user 或 root 的简写)的身份执行一些操作。 当遇到拒绝访问(permission denied)的错误时,通常是因为此时必须是根用户才能操作。然而,请再次确认是真的要执行此操作。

有一件事情是必须作为根用户才能做的,那就是向 sysfs 文件写入内容。系统被挂载在 /sys 下,sysfs 文件则暴露了一些内核(kernel)参数。 因此,不需要借助任何专用的工具,就可以轻松地在运行期间配置系统内核。注意 Windows 和 macOS 没有这个文件

例如,笔记本电脑的屏幕亮度写在 brightness 文件中,它位于
在这里插入图片描述
奇怪的是,我的计算机中对应的文件夹是空的,并没有教程中所说的brightness文件。
在这里插入图片描述
因为此时我是远程连接的linux,因此无法观察修改后亮度变化,以后可以有条件了可以通过创建brightness文件的方式进行尝试。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值