Linux特殊符号使用及含义
总结
Linux 终端中有许多特殊符号,本文对常用的进行了总结:
$
表示变量/普通终端用户:用于引用变量的值/表示终端中的普通用户。#
表示注释/超级用户:用于在脚本中注释代码/表示终端中的超级用户。/
:根目录/目录分隔符。~
:当前用户的主目录。.
:当前目录。..
:上级目录。<
输入重定向符号:将指定文件内容输入到命令中。>
输出重定向符号:将命令输出重定向到指定文件。>>
输出追加符号:用于将命令的输出追加到文件末尾。<<
输入追加符号:一般用于输入多行文本。;
命令分隔符:可以在一行中执行多个命令。:
值/路径分隔符:分割标签和值,或者分割路径,在bash脚本中表示无操作。&
后台运行符号:将命令放到后台运行。|
管道符号:将一个命令的输出作为另一个命令的输入。&&
多命令符号:用于在同一行上执行多个命令。它表示只有当前一个命令成功执行后,才会执行下一个命令。||
多命令符号:用于在同一行上执行多个命令,它表示只有当前一个命令执行失败时,才会执行下一个命令。\
转义符号:用于转义特殊字符。!
表示历史命令:用于执行历史命令。^
脱字符:表示控制字符,用于快速替换前面指令或者进行正则匹配。()
子命令符号:用于在当前 shell 中执行子命令。*
通配符:表示任意个任意字符。?
通配符:表示一个任意字符。[]
字符集合:用于匹配指定字符集合中的任意一个字符。{}
大括号符号:用于扩展字符串或命令序列。
终端特殊符号
$
普通用户
$
符号是Linux终端中的一个提示符,它通常出现在命令行的开头。它的作用是提示用户可以输入命令了。当你看到 $
符号出现在命令行上时,就表示系统准备好了接受你的输入,你可以输入任何有效的命令。
另外, $
还可以用于表示当前用户是普通用户而非超级用户(即 root 用户)。如果当前用户是 root 用户,命令提示符会变成 #
。
除此之外,在Linux中,$
符号还通常用于表示环境变量的值。环境变量是一些系统级别的变量,它们可以在整个系统中被访问和使用,其中存储了一些重要的信息,例如系统路径,当前用户,当前工作目录等。使用 $
符号,我们可以方便地访问这些变量。
以下是一些示例:
$HOME
变量:它指向当前用户的主目录。例如,如果当前用户是“bob”,那么$HOME
将是“/home/bob”。$PATH
变量:它包含了一系列目录,用于查找可执行程序。当你在终端中输入一个命令时,系统会在这些目录中查找该命令的可执行文件。例如,如果你想在终端中运行“ls”命令,那么系统会在$PATH
变量中列出的目录中查找“ls”可执行文件。$USER
变量:它指向当前登录的用户。例如,如果当前用户是“bob”,那么$USER
将是“bob”。$PWD
变量:它指向当前工作目录。例如,如果你在“/home/bob”目录下运行终端,那么$PWD
将是“/home/bob”。
你可以在终端中使用“echo”命令来显示这些变量的值,例如:
echo $HOME
echo $PATH
echo $USER
echo $PWD
这些命令将会分别输出当前用户的主目录、系统的可执行路径、当前登录的用户名和当前工作目录。
可以通过 printenv
查看所有环境变量,printenv
是一个 Linux 命令,用于打印出当前 shell 环境中的所有环境变量及其值。它的使用方法很简单,只需在终端输入 printenv
即可:
#
超级用户
在Linux系统中, $
符号通常表示普通用户的命令行界面,而 #
符号则表示超级用户的命令行界面。普通用户通常只有执行命令的权限,而超级用户则具有更高的权限,可以执行更高级别的操作,比如修改系统配置文件等,一般需要使用 sudo 或 su 命令切换到 root 权限后才能使用。
~
当前用户家目录
在Linux终端中, ~
(波浪号)符号代表当前用户的家目录。家目录是每个用户在Linux系统中的默认工作目录,当用户登录到系统后,终端会自动切换到该用户的家目录。
例如,如果当前登录的用户是“user”,那么 ~
符号就代表“/home/user”目录。在终端中输入 cd ~
命令就可以切换到当前用户的家目录。
此外, ~
符号还可以与其他路径组合使用,表示相对于当前用户家目录的路径。例如, ~/Documents
表示当前用户家目录下的Documents子目录。
/
目录分隔符
在Linux中,符号“/”代表文件路径的分隔符。在文件系统中,每个文件和目录都有一个唯一的文件路径,文件路径是由“/”符号分隔的一系列目录和文件名组成的字符串。
例如, “/home/user/Documents/file.txt”
是一个文件路径,其中“/”表示根目录,“home”是根目录下的一个子目录,“user”是“home”目录下的子目录,“Documents”是“user”目录下的子目录,“file.txt”是“Documents”目录下的文件。
在命令行中,用户可以使用“/”来指定文件路径,例如:
cd /home/user/Documents
将进入“Documents”目录。
.
当前目录
.
:表示当前目录,例如 ./file.txt
表示当前目录下的 file.txt
文件。,也可以使用 $PWD
表示
..
上级目录
..
:表示上一级目录,例如 ../
表示返回上一级目录。
<
输入重定向
<
:将一个文件的内容作为命令的输入。例如,sort < file.txt 将file.txt文件的内容作为sort命令的输入。
>
输出重定向
>
:表示重定向符,用于将命令的输出重定向到文件中,会覆盖原有的内容。例如,ls > file.txt 将ls命令的输出写入file.txt文件中,如果文件不存在则会创建它,如果存在则会覆盖原有内容。
输出重定向还有很多种其它用法:
2>
:将命令的错误输出重定向到一个文件中。例如,ls /invalid_dir 2> error.txt 将ls命令的错误信息写入error.txt文件中。&>
:将命令的输出和错误输出都重定向到一个文件中。例如,ls /invalid_dir &> output.txt 将ls命令的输出和错误信息都写入output.txt文件中。
<<
输入追加重定向
<<
是 Linux 中的一个输入重定向符号,也称为“Here Document”,一般用于输入多行文本。它的作用是将 shell 中的一段输入作为命令或脚本的输入,并用一个特定的标识符(可以是任意字符串)来表示输入的结束。具体来说,它可以将一段文本作为标准输入传递给命令或脚本,而不需要手动逐行输入。
例如,假设我们要向一个名为 output.txt 的文件中写入三行文本。如果我们使用 echo 命令逐行输出,则需要输入三次命令,如下所示:
echo "This is line 1" > output.txt
echo "This is line 2" >> output.txt
echo "This is line 3" >> output.txt
但是,如果我们使用 <<
符号,我们可以在一次命令中输入所有三行文本,如下所示:
cat << EOF > output.txt
This is line 1
This is line 2
This is line 3
EOF
这种方式可以让我们更快速、更方便地输入多行文本,并且对于需要输入大量文本的场景非常有用。
>>
输出追加重定向
>>
:表示追加重定向符,用于将命令的输出追加到文件末尾,不会覆盖原有的内容。例如,echo “hello” >> file.txt 将”hello”追加到file.txt文件的末尾。
;
命令分隔符
;
:表示命令分隔符,可以在同一行输入多个命令,用分号隔开。当您在同一行上输入多个命令并用分号分隔它们时,Linux会按顺序执行这些命令。
例如,以下命令将创建一个名为 test
文件夹,并在其中创建一个名为 file.txt
的文本文件:
mkdir test; cd test; touch file.txt
这个命令将被解释为三个独立的命令:先创建一个名为 test
的文件夹,再进入该文件夹,最后在其中创建一个名为 file.txt
的空文件。
需要注意的是,分号不支持命令的逻辑控制,如if语句、循环结构等。如果需要这样的控制,请使用其他命令分隔符,如双竖线(||)或双与号(&&)。
:
值/路径分隔符
在Linux中,冒号 (:
) 可以具有以下几种作用:
- 标签和值分隔符:在一些配置文件或脚本中,冒号用作标签和值之间的分隔符。
例如,/etc/passwd
用于存储用户账户的信息,每一行由多个字段组成,字段之间使用冒号分隔:username:password:uid:gid:home_directory:shell
。 - 环境变量的分隔符:在环境变量中,特别是
PATH
这样的变量中,冒号用作路径分隔符。它将多个路径分开,指定在执行命令时搜索可执行程序的顺序。
例如,PATH
变量可以包含多个路径,如/usr/local/bin:/usr/bin:/bin
。当执行命令时,系统会按照从左到右的顺序在这些路径中查找可执行程序。 - 空操作(占位符):在某些脚本和编程语言中,冒号可以用作无操作(no operation),表示不执行任何实际操作,只是作为一个占位符或空操作。
例如,在Bash脚本中,:
可以用作true
命令的替代,表示条件始终为真,如:
if [ condition ]; then
:
else
command
fi
这样可以在某些情况下用于占位或暂时禁用一些代码逻辑。
&
后台运行符
&
:表示后台运行符,可以 将命令放到后台运行 。具体地说,当你在终端中输入一个命令并在结尾处添加 &
时,这个命令将会在后台运行,也就是说,你可以继续在终端中输入其他的命令,而不必等待这个命令执行完成。
举个例子,如果你想要启动一个长时间运行的进程,但不想让它占用你的终端,你可以将它放入后台运行,如下所示:
my-long-running-process &
这样,该进程将在后台运行,而你可以在同一个终端中继续输入其他的命令。需要注意的是,如果你在后台运行的命令输出了任何信息,它们将会直接输出到终端上,可能会干扰你正在输入的其他命令。
|
管道符
|
:表示管道符,用于将一个命令的输出作为另一个命令的输入,从而 实现两个或多个命令的组合 。例如,如果你想在Linux系统中列出某个目录中的所有文件并按文件大小排序,可以使用以下命令:
ls -l | sort -k 5 -n
其中, ls -l
命令列出目录中的所有文件,而 sort -k 5 -n
命令按照第五列(即文件大小)进行排序。通过使用管道符号“|”,这两个命令可以组合起来,以便将“ls”命令的输出传递给“sort”命令的输入。这样,你就可以在一行命令中完成两个操作。
&&
(成功)则执行多命令
&&
是Linux终端中的一个符号,用于在同一行上执行多个命令。它表示只有当前一个命令成功执行后,才会执行下一个命令。例如,如果你想要在终端中同时执行两个命令,比如更新软件包并清除无用的软件包,你可以使用以下命令:
sudo apt-get update && sudo apt-get autoremove
这条命令将首先更新软件包,然后 只有在更新成功后才会运行自动删除命令 。这样可以确保所有命令都成功执行,而不会出现意外的错误。
||
(失败)则执行多命令
在Linux终端中,||
是一个逻辑运算符,表示“或者”的含义。它用于将两个条件连接起来,如果其中一个条件成立,整个表达式就成立。在终端中,||
通常用于构建命令行语句,以确保只有前一个命令执行失败时,才会执行下一个命令。例如,如果要在终端中运行两个命令,但只有在第一个命令失败时才运行第二个命令,可以使用以下命令:
command1 || command2
如果 command1 执行成功,则 command2 不会被执行;如果 command1 执行失败,则 command2 会被执行。
!
执行历史命令
在 Linux 终端中, !
符号用于执行之前执行过的命令历史记录中的命令。以下是一些例子:
-
重复执行上一条命令:使用
!!
命令可以快速重复上一条命令,例如:$ ls -l total 0 $ !! total 0
-
重复执行命令历史记录中的某个命令:使用
!
命令加上命令的编号可以重复执行命令历史记录中的任意一条命令,例如:$ history 1 ls -l 2 cd .. 3 pwd $ !2 cd ..
上面的例子中,
!2
表示执行历史记录中的第二条命令。 -
重复执行以某个字符串开头的命令:使用
!
命令加上命令的部分字符串可以重复执行以该字符串开头的命令,例如:$ ls -l total 0 $ !ls total 0
上面的例子中,
!ls
表示执行最近一次以ls
开头的命令,即ls -l
。
通过使用 “!” 符号,我们可以更加高效地使用命令行界面,省去了重复输入相同命令的时间和精力。
^
脱字符
在Linux终端中, ^
符号是一个特殊的字符,表示“脱字符”,,它有多种用途:
- 用于表示一个控制字符:例如,
^C
表示Ctrl+C键的组合,^D
表示Ctrl+D键的组合。
如果要在Linux终端中表示一个控制字符,可以使用 ^
符号加上对应控制字符的字母表示。例如, ^C
表示Ctrl+C控制字符,^D
表示Ctrl+D控制字符。
例如,如果想在终端中输入Ctrl+C控制字符,可以按下Ctrl+V,然后再按下Ctrl+C,此时终端会显示一个”^C”表示成功输入了控制字符。
- 用于快速修改命令行: 在终端中输入一个命令,但是发现其中有一个错误,可以使用
^
符号来快速修改。例如,输入命令 “cd /user/local/bin”,但是正确的目录名是 “usr”,那么可以在终端中输入 “^/user/usr”,就会自动修改为 “cd /usr/local/bin”。
另外, ^
符号还可以用于在命令中引用之前执行的命令的参数。具体来说, ^
后面跟着一个数字 n,表示引用之前执行的命令中的第 n 个参数。
例如,假设我们之前执行了以下命令:
ls -l /usr/bin
现在,如果我们想要再次执行这个命令,但是将 “/usr/bin” 替换为 “/usr/sbin”,我们可以使用 “^” 符号来引用之前执行的命令中的参数。具体来说,我们可以键入以下命令:
^bin^sbin
这个命令中的 “binsbin” 表示将之前命令中的 “bin” 替换为 “sbin”。执行该命令后,终端会自动将之前执行的命令替换为新的命令,并执行新的命令,输出结果如下:
ls -l /usr/sbin
这就是 ^
符号的作用。它可以帮助我们快速引用之前执行的命令中的参数,从而避免重复输入相似的命令。
- 用于匹配行首: 在正则表达式中,
^
符号表示匹配行首。它可以用于快速定位和操作行首的文本。
举个例子,假设我想要在一个文件中查找以字母”t”开头的行,那么我可以使用下面的命令:
grep "^t" filename
这个命令使用了 ^
符号来匹配行首,然后再跟上要匹配的字符 t
。这样,grep
就会在文件中查找以字母 t
开头的行,并将它们输出到终端上。
\
转义符
\
:表示转义符,它可以 对特殊字符进行转义 ,使其具有特殊的含义。下面是一些例子:
-
转义字符本身:如果你需要在命令行中使用“\”字符,你需要使用“\”来表示。例如,要创建一个名为“test\file”的文件夹,你可以使用以下命令:
mkdir test\\file
-
换行符:如果你想在命令行中换行,你可以使用“\n”来表示。例如,要在命令行中打印两行文本,你可以使用以下命令:
echo "This is the first line.\nThis is the second line."
-
空格:有时候你需要在文件或文件夹名中使用空格,但是空格在命令行中会被解释成参数的分隔符。在这种情况下,你可以使用“\”来转义空格。例如,要打开名为“my folder”的文件夹,你可以使用以下命令:
cd my\ folder/
注意:在使用转义符时,务必小心。如果你不小心把它们放错了位置,可能会导致命令无法正确执行。
"
扩展引用字符串
"
:表示引用字符串,可以将其中的内容作为一个整体传递给命令。在双引号中,可以使用转义字符(\)来转义一些特殊字符,比如$和\等,使它们失去原有的特殊含义,而变成普通字符。
例如,以下命令将在终端中打印出Hello, World!:
echo "Hello, World!"
在双引号中也可以使用变量,例如:
name="John"
echo "My name is $name"
这将在终端中打印出 My name is John
。需要注意的是,在双引号内使用变量时,变量名前面必须加上$符号。
'
不扩展引用字符串
'
:也表示表示引用字符串,但它和双引号的区别是将字符串中的 所有字符视为普通字符,不进行任何转义或变量替换 。例如,如果我们要定义一个包含特殊字符的字符串,如$、*、?等,可以使用单引号将其包围,以避免特殊字符被解释为变量或通配符:
echo 'Hello $USER, the current directory is: $PWD'
在上述示例中,单引号将整个字符串包围,因此 $USER
和 $PWD
不会被解释为变量,而是作为普通字符输出。输出结果如下:
Hello $USER, the current directory is: $PWD
()
创建子shell
在Linux终端中,括号符号 ()
通常用来 创建子 shell 。这意味着命令在一个子 shell 中运行,而不是在当前 shell 中运行。例如,如果您要在当前目录中创建一个名为“test”的文件夹,并切换到该文件夹中,您可以使用以下命令:
pwd && (cd /etc && pwd)
在这个命令中, ()
符号将 cd /etc && pwd
命令放入一个子 shell 中。这意味着 cd /etc
命令只会在子 shell 中运行,而不会影响当前 shell 的工作目录。因此,pwd
命令将显示etc
的完整路径。
另一个例子是,如果您要在当前 shell 中设置一个环境变量,但只想让它在一次命令中生效,您可以使用括号符号将该命令放入一个子 shell 中。例如:
(export MYVAR="Hello world"; echo $MYVAR)
这个命令将设置一个名为 MYVAR
的环境变量,将其值设置为 "Hello world"
,并将其打印到终端上。由于命令在子 shell 中运行,所以 MYVAR
变量只在该命令执行期间存在。
*
多字符通配符
在 Linux 终端中,星号 *
是通配符符号,也称为通配符。它可以代表 任何字符或任何长度的字符序列 。星号通常用于文件名扩展和搜索中,例如:
-
列出所有以 “.txt” 结尾的文件:
ls *.txt
-
删除所有以 “.bak” 结尾的文件:
rm *.bak
-
查找包含 “hello” 文字的所有文件:
grep "hello" *
在这些例子中,星号通配符将匹配所有符合条件的文件名,并且在执行命令前被扩展成实际的文件名。
?
单字符通配符
在Linux终端中, ?
符号代表通配符,可以匹配任意一个字符。当你在终端中输入一个命令时,如果需要匹配一定数量的字符,但是你并不确定这些字符是什么,那么你可以使用 ?
符号来代替这些字符。例如,如果你想查找以“file”开头、 后面跟着一个任意字符 、然后是“.txt”结尾的文件,你可以使用以下命令:
ls file?.txt
这个命令将会列出所有符合该模式的文件。
[]
条件匹配
在 Linux 终端中,输入 []
通常用于匹配一组字符中的任意一个字符。这种匹配方式称为字符类,它允许我们在一个字符集合中指定多个字符,然后匹配其中的任意一个字符。
举个例子,假设我们在当前目录下有以下文件:
file1.txt
file2.txt
file3.jpg
file4.png
如果我们想要列出所有以 .txt
结尾的文件,可以使用以下命令:
ls *[.]txt
这个命令中,[
和 ]
括起来的 .
, 表示匹配点号本身,而不是任意一个字符。在字符类中,我们可以指定多个字符,使用 -
来表示范围。例如,如果我们想要匹配所有小写字母和数字,可以使用 [a-z0-9]
。如果我们想要匹配所有大写字母和小写字母,可以使用 [A-Za-z]
。
总之,[]
在 Linux 终端中是非常常见的用法之一,可以用于匹配文件名、搜索文本等等。
如有疑问或错误,欢迎和我私信交流指正。
版权所有,未经授权,请勿转载!
Copyright © 2023.05 by Mr.Idleman. All rights reserved.
文章出处登录后可见!