【计算机教育缺失的一课】01 课程概览与shell

发布时间 2023-07-13 11:48:13作者: 致命一姬

一、单个程序

(1)shell

  当可视化界面无法实现你想要的功能时,shell是你和计算机交互的主要方式之一。

  大多数平台也都提供一些形式的shell。在windows上一般是powershell,但也有其他shell可用。

  有不同类型的shell

    最常见的是Bash(Bourne Again SHell)

(2)terminal

  显示shell的窗口。

(3)command

  通过这个shell提示符(可以自定义,一般默认是$),你可以输入命令。命令通常是相对简单的东西,通常会是像使用参数执行程序之类的事情

  eg:

    

(4)argument

  命令后面以空格分隔的东西,也就是上例中echo hello中的hello

  如果参数自身需要空格,则使用双引号或使用转义字符\

    

(5)environment variable

  有一些内置程序是你的计算机自带的,比如说terminal app、windows explorer或者附带某种类型的浏览器、一堆terminal-centric applications。这些应用程序存储在你的文件系统中。shell通过环境变量来确定程序的位置。

  环境变量是在启动shell时设置的东西,不是你每次运行shell时都必须设置的东西

(6)path variable

  查看搜索路径有一个至关重要的变量,即路径变量。

   本质上是每当你键入程序的名称时,它都会在计算机上搜索这个路径列表,并在每个目录中查找与你尝试运行的命令匹配的程序或文件名称。

  不如说运行date或echo,它将逐个遍历这些路径,直到找到名为“date”或“echo”的程序,然后运行它

  如果想知道它实际运行的是哪个程序,使用which命令。

    

(7)path

  描述计算机上文件位置的方式

  绝对路径absolute path和相对路径relative path

  查看绝对路径:

    

  更改路径change directory

    

  . 表示当前目录

  .. 表示父目录

(7)ls 列出文件

    

(8)~ 带到主目录

    

  也可以利用~来写相对路径

(9)- 来到之前的路径

    

(10)在ls 和cd命令中,还有很多其他的参数和选项可以使用

    可以通过ls --help 以及 cd --help来查看

    

    flag:-和单个字母的组合  eg -a,--all

     option:带有值的东西      eg -C --color[=WHEN]

    

     文件类型-文件权限

    以最后一行为例:

      drwxr:为文件的所有者设置的权限 -mhsjgy

      xr:为拥有该文件的组设置的权限 -mhsjgy

      x:其他人的权限

      drwxr:directory

    r:read

    w:write

    x:execute

    对于不同类型的文件,读写的含义是不同的。对于目录的写入是指是否被允许在该目录中重命名、创建或删除文件,如果你对一个文件有写入权限,但你没有对它的目录由写入权限,你就不能删除该文件。你可以清空它,但你不能删除它。因为这需要写入到目录本身。

    要能cd进入一个目录,你必须拥有该目录及其所有父目录的执行权限。

(11)move或mv命令

  可以更改文件名但不更改目录,也可以将文件移动到完全的目录中

(12)copy或cp命令

(13)rm命令 删除文件

    在linux下,rm不会递归进行,所以你不能使用rm删除一个目录

    可以使用-r标志进行递归删除

(14)rmdir可以删除一整个目录,但它只能删除空目录。

(15)mkdir 创建目录

(16)man ls

    和ls --help功能类似,但更方便阅读,提供更多信息

(17)ctrl+l:清除终端,回到顶部

(18)shell,特别是Bash,是一种编程语言,这个提示符后面不仅能够运行带有参数的程序,你还可以做类似于while循环、for循环、条件语句等的事情...甚至可以在shell中定义函数,变量

 

二、组合不同的程序

  希望与文件交互,并让文件在不同程序之间传输。这时,可以使用shell提供的流的概念来实现。

(1)每个程序都有两个主要的流:

  1)输入流 input stream

    默认情况下,输入流来自于键盘。基本是你在终端中输入的任何内容

  2)输出流 output stream

    每当程序打印输出时,输出的内容就会传递到这个流中,默认情况下,输出流也是指向你的终端的。

(2)shell提供了一种重定向这些流的方法,以改变程序的输入输出指向

  1)最简单的方法,使用<>

< file > file

    <:表示将这个程序的输入重定向为这个文件的内容,

    >:表示将前面程序的输出重定向到这个文件中。

   实现复制:

   2)>>追加,而不是覆盖

    

  3)pipe符号|。它的作用是将左边程序的输出作为右边程序的输入。

 

 (3)tail命令,打印输入的最后n行。tail -n1表示打印最后一行

 

三、root 用户

(1)有点像windows上的管理员用户,它的用户ID是0。root用户是特殊的,因为它可以在你的系统上随意做任何事情。即使某个文件对任何人都不可读或不可写,root仍然可以访问该文件。root是一个超级用户,可以做任何想做的事情。

(2)但大多数时间,你不会作为root用户来操作。你会用其他名字成为一个用户,这将是你常规情况下使用的用户。因为如果你一直以root用户的身份操作计算机,如果运行了错误的程序,它们可能会彻底破坏你的计算机。

(3)进入root用户,一般会用一个叫sudo(do as su,su指的是super user)的程序。在你的电脑上有许多特殊的文件,比如有一个叫做sysfs的文件系统,cd到/sys:

    

   这些实际上不是你计算机上的文件,而是各种内核参数。内核就像是你计算机的核心,你可以通过文件来访问各种内核参数

  进入class,发现它有许多不同类型的设备可以与之交互。或者可以访问各种队列或各种内部奇怪的旋钮

   课程的例子,调整背光(这个本电脑上无)。

echo 500 > brightness

  会提示peimussion denied。即使加上sudo也是一样的结果。

  为什么?输入和输出的重定向不是程序所知道的。当我们将ls传输到tail时,tai并不知道ls,ls也不知道tail。输入和输出的重定向是由shell设置的。shell是打开brightness的东西,不是sudo程序。作为我运行的shell尝试打开brightness文件进行写入,但是不允许这样做。

(4)sudo su

  su是一个复杂的命令,可以让你以超级用户的身份获取一个shell

sudo su 

  获取成功之后,$会变成#

  

  再运行 上例就行了

(5)sudo tee:tee命令会将输入内容写入一个文件,同时也将它输出到标准输出。因此,如果你想将一个日志文件保存起来以备之后查看,但同时也想在屏幕上看到它,你就可以将其通过tee命令传输。

echo 1060| sudo tee brightness

  sudo tee作为root用户运行,并将输出写入brightness文件中。

 

四、打开文件

xdg-open xx文件