神兵利刃shell初入门
初识 shell, echo
在终端中,输出当前日期:shellLearn:~$ date 2021年 6月13日 星期日 09时47分36秒 CST 复制代码
echo 命令接受一个参数,并将输入的内容,在终端中输出 hello。shellLearn:~$ echo hello hello 复制代码
如果碰到输入的内容有特殊字符串或者空格怎么办?shellLearn:~$ echo "hello world" hello world shellLearn:~$ echo "hello world" hello world shellLearn:~$ echo hello world hello world 复制代码
解决方案:使用单引号,双引号将其包裹起来使用转义符号 进行处理环境变量 $PATH
shell 是如何知道去哪里寻找 date 或 echo 的呢?
其实,类似于 Python 或 Node,shell 是一个编程环境,当你在 shell 中执行命令时,实际上是在执行一段 shell 可以解释执行的简短代码。
如果你要求 shell 执行某个指令,但是该指令并不是 shell 所了解的编程关键字,那么它会去咨询**环境变量 $PATH**,它会列出当 shell 接到某条指令时,进行程序搜索的路径:shellLearn:~$ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 复制代码
可以看到 $PATH 的输出内容,是由一系列目录和 : 拼接而成的。/usr/local/sbin/usr/local/bin/usr/sbin/usr/bin/sbin/bin
当我们执行 echo 命令时,shell 了解到需要执行 echo 这个程序,随后它便会在 $PATH 中搜索由 : 所分割的一系列目录,基于名字搜索该程序,当找到该程序时便执行。
确定某个程序名代表的是哪个具体的程序,可以使用 which 程序。
找出具体的程序后,可绕过环境变量,通过直接指定需要执行的程序的路径来执行该程序。shellLearn:~$ which echo /bin/echo shellLearn:~$ /bin/echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 复制代码获取帮助手册
如果是对某个命令(如 xyz)不熟悉,想要寻求帮助怎么办。有两种方式:通过 man xyz
以下操作将获取到 cd 命令的学习手册:shellLearn:~$ man cd ... 复制代码
中途可以按 q 退出手册阅读。通过 abc -h 或 abc --help
通常,在执行程序时使用 -h 或 --help 标记可以打印帮助信息,以便了解有哪些可用的标记或选项。
但注意,并不是所有的命令都支持这种用法(Mac 上 cd 命令就不支持 -h)。
以下命令将会展示mv的用法:shellLearn:~$ mv -h ... 复制代码导航操作(路径切换)
我们在工作的过程中,经常需要更换当前的工作路径。如何进行路径切换呢。路径分隔符
shell 中的路径是一组被分割的目录,在 Linux 和 macOS 上使用 / 分割,而在 Windows 上是 。类似如下:macOS : /Users/xxxx/shellLearnWindows: C:UsersshellLearn根目录
路径 / 代表的是系统的根目录,所有的文件夹都包括在这个路径之下,在Windows上每个盘都有一个根目录(例如: C:)。绝对路径、相对路径
*nux系统中,如果某个路径以 / 开头,那么它是一个绝对路径,其他的都是相对路径 。相对路径是指相对于当前工作目录的路径。在相对路径中,. 表示的是当前目录,而 .. 表示上级目录。路径跳转:pwd、cd 命令pwd 命令查看当前工作目录。cd 命令切换目录。shellLearn:/home$ pwd /home shellLearn:/home$ cd shellLearn shellLearn:~$ pwd /home/shellLearn 复制代码
cd - 命令会回到前一次的工作目录文件目录操作列举目录下的文件:ls
为了查看指定目录下包含哪些文件,我们使用ls 命令。 如果不指定ls 的目录,它会默认打印当前目录下的文件。shellLearn:/home$ ls shellLearn 复制代码其他几个常见的操作mv(用于重命名或移动文件)cp(拷贝文件)mkdir(新建文件夹)流操作
在 shell 中,程序有两个主要的"流":它们的输入流和输出流。
当程序尝试读取信息时,它们会从输入流中进行读取,当程序打印信息时,它们会将信息输出到输出流中。
通常,一个程序的输入输出流都是您的终端。也就是,您的键盘作为输入,显示器作为输出。 但是,我们也可以重定向这些流!
我们主要学习4个操作符号:重定向流< file 和 > file
这两个命令可以将程序的输入输出流分别重定向到文件shellLearn:~$ echo hello > hello.txt shellLearn:~$ cat hello.txt hello shellLearn:~$ cat < hello.txt hello shellLearn:~$ cat < hello.txt > hello2.txt shellLearn:~$ cat hello2.txt hello 复制代码追加内容>> file
可以使用 >> 来向一个文件追加内容管道 | 操作符
使用管道( pipes ),我们能够更好的利用文件重定向。 | 操作符允许我们将一个程序的输出和另外一个程序的输入连接起来:shellLearn:~$ ls -l / | tail -n1 lrwxr-xr-x@ 1 root admin 11 6 4 2020 var -> private/var shellLearn:~$ curl --head --silent qq.com | grep --ignore-case content-length Content-Length: 169 复制代码
备注:tail -nN, 其中的 "N" 是个数值,指定从上一个流中,倒数开始,一共输出几行。
作者:对马弹琴
链接:https://juejin.cn/post/6973112123693989919
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。