文章目录
- shell概述
- echo
- shell如何知道去哪寻找`date`或`echo`呢?
- $PATH
- ls
- man
- 流
- 根用户
shell概述
root1@test:~$
$
表示身份不是root用户
~
表示当前所在位置是"home"
root1@test:~$ date
Sat Jul 8 02:57:44 UTC 2023
输入命令,会被shell解析
上述执行date
程序,打印出了当前的日期和时间
echo
可以在执行命令的同时向程序传递参数
root1@test:~$ echo hello
hello
上述,让shell执行echo
,同时指定参数hello
,echo程序将参数打印出来
shell基于空格分割命令进行解析,然后执行第一个单词代表的程序,并将后续的单词作为程序可以访问的参数。
如果希望传递的参数中包含空格,要么用单引号,双引号包裹起来,要么使用转义符号
\
进行处理
shell如何知道去哪寻找date
或echo
呢?
类似于python或ruby,shell是一个编程环境,具备变量、条件、循环和函数。
在shell执行命令,实际上是在执行一段shell可以解释执行的简短代码。
如果要求shell执行某个指令,但该指令并不是shell所了解的编程关键字,它会去咨询环境变量$PATH
,列出shell接到某条指令时,进行搜索的路径
$PATH
root1@test:~$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
root1@test:~$ which echo
/usr/bin/echo
root1@test:~$ /usr/bin/echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
执行echo命令时,shell会在$PATH中搜索由:
分割的一系列目录,基于名字搜索该程序。找到该程序时便执行。
确定某个程序名代表的是哪个具体的程序,可以使用 which
程序。
ls
路径/
代表根目录
.
代表当前目录
..
代表上一级目录
ls
命令可以查看指定目录下包含哪些文件,没有指定默认是当前目录
-h
或--help
可以帮助打印程序的帮助信息
ls -l
可以打印详细信息
root1@test:~$ ls -l /home
drwxr-xr-x 3 root1 root1 4096 Jun 3 08:15 root1
d
表示是一个目录,
接下来九个字符,每三个构成一组,分别代表文件所有者,用户组,以及其他所有人 具有的权限
r
读权限(对于文件夹,可以列出里面的文件)
w
修改权限(对于文件夹,添加、删除里面的文件)
x
可执行(对于文件夹,对该文件夹以及父文件夹的搜索权限)
-
代表不具有相应的权限
其他命令:
mv
重命名或移动文件
cp
拷贝文件
mkdir
新建文件夹
man
想要知道程序参数,输入输出信息,或者了解它们的工作方式,可以使用man
程序,可以将指定的程序的文档展示出来,使用q
退出程序
man ls
流
shell 中,程序有两个主要的“流”:它们的输入流和输出流。
当程序尝试读取信息时,它们会从输入流中进行读取,当程序打印信息时,它们会将信息输出到输出流中。
最简单的重定向是 < file
和 > file
。这两个命令可以将程序的输入输出流分别重定向到文件。
>>
可以向一个文件追加内容
root1@test:~$ echo hello > hello.txt
root1@test:~$ cat < hello.txt
hello
root1@test:~$ cat < hello.txt > hello2.txt
root1@test:~$ cat hello2.txt
hello
root1@test:~$ echo hello >> hello2.txt
root1@test:~$ cat hello2.txt
hello
hello
使用管道(pipes),能够更好地利用文件重定向。
|
允许将一个程序的输出和另外一个程序的输入连接起来。
root1@test:~$ ls -l / | tail -n1
drwxr-xr-x 11 root root 4096 May 15 04:23 var
根用户
root user
根用户几乎不受任何限制,他可以创建、读取、更新和删除系统中的任何文件。
在需要的时候使用 sudo
命令。
它的作用是可以以 su(super user 或 root 的简写)的身份执行一些操作。