一、单个程序
(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文件