MITMS01_课程概述与Shell

MIT Missing Semester 1, Course overview and the shell

1
本文配置环境为 Windows 11 64位下的 Git Bash

界面介绍,date echo pwd which 命令,文件路径

打开终端如下图

打开界面

其告诉你:你的用户名为Azusaislit,主机名为Roboride-Portab

运行 date 程序,显示出当前时间

可以在执行运行程序的命令的同时传递参数,比如运行 echo 程序的同时传递参数 Hello,这将会在你的终端输出 Hello

date与echo指令

如果希望传递的参数中包含空格(例如一个名为 My Photos 的文件夹),您要么用使用单引号'My Photos',双引号将其包裹起来 "My Photos" ,要么使用转义符号 \ 进行处理(My\ Photos)。

转义符空格

环境变量 是 shell 确定程序位置的一个基本方法,它就像编程语言的一种变量(实际上 shell 就是一种编程语言,可以用来编程,后面可以来写脚本)。它是在启动 shell 的时候就已经设置好了的,不需要用户每次手动配置

路径变量 $PATH 是一类重要的环境变量:如果你要求 shell 执行某个指令,但是该指令并不是 shell 所了解的编程关键字,那么它会去咨询 环境变量 $PATH,其会列出当 shell 接到某条指令时,进行程序搜索的路径

PATH环境变量

这是由冒号所分割的路径列表。电脑在$PATH寻找并尝试匹配你所需要的程序。

运行程序可以直接输入程序名称,让 shell 从 $PATH 中寻找它,或者通过程序的绝对路径来运行

绝对路径是完全可以确定文件位置的路径

相对路径是相对你所在路径的路径。利用 pwd 命令可以查看当前所在的路径

pwd命令

其告诉我我正位于 C:\Users\Azusaislit 文件夹中(我目前使用Windows系统下的Bash shell)

而切换目录需要使用 cd 命令。在路径中,. 表示的是当前目录,而 .. 表示上级目录

如果我们想知道所运行的程序是哪一个,我们可使用 which 命令

which命令的使用

即运行的 echo 程序位于 /usr/bin/echo

在Windows上,每个分区都有一个根目录,每个分区都有一个单独的路径结构: C:\ D:\,而这样的路径用反斜杠分割

在Linux和MacOS,所有内容都属于根命名空间内,所有绝对路径都由 / 开头,路径用正斜杠分割。

ls命令与文件权限

为了查看指定目录下包含哪些文件,我们使用 ls 命令:

ls命令

这告诉我们 C:\Users\Azusaislit\Pictures 路径下的所有文件夹(蓝色字体)与文件(白色字体) 使用 ls -l 命令会给我们有关这些文件夹与文件的更多信息

更详细的文件显示

在某些条目的开头的 “d” 表示这些条目是一个目录,因此我们可知道 'Camera Roll' 条目 是一个目录,而 desktop.ini 是一个文件。 之后的9个字母表示该文件或目录的权限:有 “r” 意思是读取权限,有 “w” 意思是写入权限,有 “x” 意思是执行权限。

r-x 意思是你拥有读取与执行权限,但没有写入权限。 而对目录来说,这些权限含义

  • 读取 -> 查看目录的文件列表
  • 写入 -> 在目录中创造、重命名、删除文件。 (如果你有文件 /usr/bin/programA/config.yoml 的写入权限,但没有目录 /usr/bin/programA 的写入权限,这意味着你可以对 该yoml本身内容进行操作,却不能重命名它、或者删除它)
  • 执行 -> “搜索"权限,是否允许进入该目录。如果你要进入一个目录,你需要在 该目录及其所有的直系父目录上 都拥有执行权限

前三个字符是为文件所有者(这里是Azusaislit)所设置的权限 中间三个字符是为拥有该文件的组设置的权限 最后三个字符是其他人的权限列表

对于 cd 命令有两个特殊符号较常用:

  • cd ~ 将切换到主目录(不是根目录)
  • cd - 将切换到你之前所在的目录

几个常用的cd命令技巧

如图,通过 cd - 我们实现了在 ~/pictures~ 之间相互切换

mv cp rm mkdir man 指令

mv 命令可以 移动文件 ,也可以 重命名文件

mv命令移动文件

利用 mv 命令将当前所在路径下的一个 broke.txt 重命名为 up.txt

mv命令重命名文件

利用 mv 命令将位于 D:\ST2hello.txt 转移到 D:\Shell_test 目录

mv命令重命名同时移动文件

同样 重命名移动 操作 可以同时进行

还有 cp 命令可用于复制文件,用法类似 mv ,也可以用来重命名文件

cp命令复制并重命名文件

rm 命令可以用来删除文件,但在Linux上删除不会递归进行,因此不能用于删除目录。通常使用 rm -r 或者 rmdir 命令用于删除目录,但后者只能删除空目录。

rm命令删除文件

mkdir 命令用于创建目录。如果你要创建一个名为 My Photo 的目录,您要么用使用单引号'My Photos',双引号将其包裹起来 "My Photos" ,要么使用转义符号 \ 进行处理(My\ Photos)。

man 程序以另一个程序作为参数,并给出作为参数的程序的 manual pages。这比 –help 指令通常更为实用。(Windows的bash不可用)

Ctrl + Lcls (Windows cmd) 或 clear (Bash Shell) 的快捷键

IO重定向

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

最简单的重定向是 < file :表示将要运行的程序的输入重定向为 file 文件的内容(file 代替输入) 和 > file :表示将程序的输出重定向到 file 文件中(将 file 用于输出结果)

ioredirect1

cat 命令的作用是打印文件的内容。我们可以看到 echo 命令的结果被写入到 hello.txt 中了。

ioredirect2

利用 cat 命令也重定向输入输出:从 hello.txt 读取内容,并输出在 hate.txt 中。最后一个 cat 命令中输出没有重定向,其内容默认输出在终端上。

| 操作符允许我们将一个程序的输出和另外一个程序的输入连接起来: A | B 即将 A 程序的输出作为 B程序的输入。| 的使用可以嵌套。 `` tail

sudo su 将终端切换到 ROOT终端

tee

1
echo 1060 | sudo tee brightness

或者

1
2
sudo su
echi 1060 > brightness

find 文件

xdg-open file 命令可以用合适的程序打开 file 文件。

使用 Hugo 构建
主题 StackJimmy 设计