实用的工具—shell
shell基础操作
参考课程:Missing Semester IAP 2020 Lecture 1: Course Overview + The Shell (2020)
在这里,我们执行了程序,该程序打印当前日期和时间。
我们还可以执行带有参数的命令:
在本例中,我们告诉 shell 使用参数执行程序。该程序只是打印出其参数。
shell 通过按空格拆分命令来解析命令,然后运行第一个单词指示的程序,将每个后续单词作为程序可以访问的参数提供。如果要提供包含空格或其他特殊字符的参数,则可以使用()
引用参数,或者仅使用()
转义相关字符。
shell是一个编程环境,就像Python或Ruby一样,所以它有变量,条件,循环和函数。
当在 shell 中运行命令时,实际上是在编写一小段代码,供 shell 解释。如果要求 shell 执行与其编程关键字之一不匹配的命令,它将查阅一个名为PATH的环境变量,该变量列出了在收到命令时 shell 应搜索哪些目录的程序:
当我们运行该命令时,shell 看到它应该执行程序,然后在目录列表中搜索该名称的文件。当它找到它时,shell会运行它。
我们可以使用该程序找出为给定程序名称执行的文件。我们还可以通过提供要执行的文件的路径来完全绕过。
在Linux和macOS上,路径是文件系统的“根”。使用pwd
命令可以显示当前位置。
使用..
和.
检索echo
指令,并使用检索出的指令输出结果:
通常,当我们运行程序时,它将在当前目录中运行,除非我们另有说明。例如,它通常会在那里搜索文件,并在需要时在那里创建新文件。
要查看给定目录中的内容,我们使用以下命令:ls
可以使用--help
查询对应指令的使用帮助:
mv
将文件进行移动(文件名可以重新修改,同时原文件会删除)cp
将文件进行复制移动(文件名可以重新修改,同时原文件不会删除)rm
将文件进行删除(需要满足对应权限)
mkdir
指令用于创建文件夹,可以看到在创建过程中,如果文件夹名称中有空格,则需要使用转义符,如果直接输入空格会默认表示创建两个文件夹。
一个快捷方式:ctrl+L
可以清楚shell界面
在 shell 中,程序有两个与之关联的主要“流”:它们的输入流和输出流。当程序尝试读取输入时,它会从输入流中读取,当它打印某些内容时,它会打印到其输出流。通常,程序的输入和输出都是您的终端。也就是说,键盘作为输入,屏幕作为输出。
但是,我们也可以重新连接这些流!
1 | missing:~$ echo hello > hello.txt #使用echo将hello输入hello.txt文件中 |
这种输入/输出重定向真正优秀的地方在于管道的使用。运算符|
允许“链接”程序,使得一个程序的输出是另一个程序的输入:
1 | ls -l / | tail -n1 > ls.txt |
另一个有趣的例子:
1 | curl --head --silent google.com | grep --ignore-case content-length | cut --delimiter=' ' -f2 |
在大多数类Unix系统上,一个用户是特殊的:“root”
用户。您可能已经在上面的文件列表中看到了它。root
用户高于所有访问限制,并且可以创建、读取、更新和删除系统中的任何文件。但是,您通常不会以root用户身份登录系统,因为不小心破坏某些东西太容易了。相反,您将使用该命令。顾名思义,它允许您sudo
或者su
做某些事情。当您收到权限被拒绝错误时,通常是因为您需要以root身份执行某些操作。虽然确保你首先仔细检查你真的想这样做!
/sys
将许多内核参数公开为文件,以便您可以轻松地动态重新配置内核,而无需专门的工具。
例如,笔记本电脑屏幕的亮度通过名为brightness
1 | /sys/class/backlight |