linux复习

发布于:2024-05-05 ⋅ 阅读:(25) ⋅ 点赞:(0)

'与"区别

在Linux中,单引号(')和双引号(")用于定义字符串,但它们在处理变量扩展和转义字符时有所不同。以下是具体分析:

1. **变量扩展**:在双引号内,变量可以被扩展,即变量的值会被其对应的值所替代;而在单引号内,变量则保持原样,不会被扩展。例如,如果有一个变量`var="world"`,那么在命令`echo "Hello $var"`中,`$var`会被替换为`world`,输出结果为`Hello world`。而在命令`echo 'Hello $var'`中,`$var`会保持原样,输出结果为`Hello $var`。
2. **转义字符**:在双引号中,反斜杠(\)可以用作转义字符,用于插入特殊的字符或者进行转义;而在单引号中,所有字符都是字面意义上的字符,包括反斜杠本身。
3. **命令执行环境**:在编写脚本或命令时,使用单引号可以避免Shell对其中的内容进行解析,这在创建不会改变的字符串时非常有用。而双引号则允许Shell进行解析,这在需要字符串内部变量或命令替换时更为方便。

总的来说,单引号用于创建原始字符串,其中不会有任何字符被解释或扩展;而双引号则允许变量扩展和转义字符的使用。在实际使用过程中,应根据具体需求选择合适的引号类型。

find 

-name

对文件的basename进行匹配

find /  -name "nginx"匹配只有文件名为nginx的文件

find / -name "nginx*"匹配文件名以nginx开头的文件

-path

对文件的dirname+basename进行匹配

find / -path "*/var/*/nginx"文件名为nginx,前面的目录必须有var这个目录

-type

一般需要搜索的文件类型就只有普通文件(f),目录(d),链接文件(l)。

find /usr -type d -name "a*"匹配/usr下所有目录包括其子目录以a开头的目录

shell理解

shell:壳,命令解释器,负责解析用户输入的命令。

命令分两类:

  • 内置命令 (shell内置),shell为了完成自我管理和基本的管理,不同的shell内置不同的命令,但是 大部分都差不多
  • 外置命令,在文件系统的某个目录下,有个与命令名称相同的文件

type 命令查看命令是file、alias(外置命令)还是builtin(内置命令)

  • type -a 列出当前命令可以如何执行
  • type -t 仅列出命令按照哪种方式执行
root@ring04h-virtual-machine:~# type -a cd
cd is a shell builtin
root@ring04h-virtual-machine:~# type -a ls
ls is aliased to `ls --color=auto'
ls is /usr/bin/ls
ls is /bin/ls
root@ring04h-virtual-machine:~# 

 builtin(内置命令)

用户在命令行输入命令后,一般情况下Shell会fork并exec该命令,但是Shell的内建命令例外,执行内建命令相当于调用Shell进程中的一个函数,并不创建新的进程。以前学过的cd、alias、umask、exit等命令即是内建命令,凡是用which命令查不到程序文件所在位置的命令都是内建命令,内建命令没有单独的man手册,要在man手册中查看内建命令,应该执行

root@ring04h-virtual-machine:~# man bash-builtins可看到所有内置命令的使用详细说明

file、alias(外置命令)

引出PATH,外置命令都会去PATH下所有的路径下去找与命令相同的二进制文件,然后执行

那shell如何知道命令的可执行文件在哪个路径下呢?系统为了让用户在命令行快速方便地执行命令,将 可执行文件的路径存储在环境变量PATH中。

在众多环境变量里面有一个环境变量叫做PATH,当用户每次执行外部命令的时候都会去该变量所记录的 路径下搜索和命令同名的二进制文件,如果有则执行该二进制文件,如果没有则提示命令找不到。

root@ring04h-virtual-machine:~# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:/root/.local/bin:/root/.local/bin


网站公告

今日签到

点亮在社区的每一天
去签到