不知道你们接触 Linux 系统有多久了,可曾了解过 Linux 中有哪些特殊的字符呢?其实啊,那些特殊字符都大有用处呢,今天的文章就给你们简单地科普一下 Linux 中你须要了解的 15 个特殊字符,想学或刚学 Linux 的小伙伴赶忙上车了为!linux
这个波浪号 ~ 指的是主目录,也就是咱们用户的我的目录,不管你身在何方,输入 cd ~
它将带你回家!shell
cd ~复制代码
更高端的玩法就是在它后面加上具体的路径,直接定位到家目录中的指定位置,是否是很方便呢?编程
cd ~/work/archive复制代码
英文句号 . 表明当前目录,咱们来看一下当前目录下的所有文件:vim
ls -al复制代码
红圈里的 . 就是指当前目录,不过这没什么意义,咱们更多的是在命令中使用它,以下:bash
./script.sh复制代码
这样作是在告诉 bash 只要在当前目录中查找并执行 script.sh
文件就行了,不用在路径中找了。编程语言
两个英文句号 .. 表明父目录,也就是当前目录的上一级目录。假设咱们要回到上一级目录:this
cd ..复制代码
跟前面同样,你能够在它后面加具体的目录,这里的意思就是定位到与当前目录同级的其它目录:spa
cd ../projects/复制代码
斜杠 "/" 指的是路径目录分隔符,这里没什么好说的。.net
ls ~/work/tests/复制代码
可是,有意思的是,若是 / 路径目录分隔符前面没有东西的话,是否是就是意味着这是最上级的目录了?因为 Linux 系统的目录树均始于 / ,因此仅仅一个 / 表明了咱们常说的系统根目录。3d
cd /复制代码
以 # 开头,表明这句话是注释。
# This will be ignored by the Bash shell复制代码
虽然上面那段话就被忽略了,但它仍是会添加到您的命令历史记录中。
更厉害的作法以下:
先定义一个变量并给它赋值字符串 “amazing alvin”
this_string="amazing alvin"复制代码
${this_string#amazing} 返回的是被注释掉 amazing 的 this_string 字符串变量,能够 echo 输出看下结果:
echo awsome ${this_string#amazing}复制代码
amazing 只是被注释掉而已,它并未被删除,去掉注释它就回来了:
echo $this_string复制代码
问号 "?",指的是单字符通配符。Bash Shell 支持三种通配符。
它表明文件名中任意一个字符的匹配,例如:
ls badge?.txt复制代码
注意,它与 badge.txt 是不匹配滴,由于 badge 后面没有字符。
正由于 "?" 匹配单个字符,因此这里有个看似很厉害的玩法,就是你想要的找的文件的文件名有多少个字符,你就输入多少个 "?" 。
ls ?????.txt复制代码
看着挺厉害,不过我怎么感受这好别扭?????
星号 * 表明的是任意字符序列,匹配任意字符,包括空字符,以刚才的 badge 为例:
ls badge*复制代码
能够看到,badge.txt 都匹配到了。
匹配任意类型的文件:
ls source.*复制代码
方括号 "[]" 指的是字符集通配符,文件名中的相关字符必须与字符集中的至少一个字符匹配。经过例子来体会一下它的做用吧:
ls badge_0[246].txt复制代码
ls badge_[01][789].txt复制代码
ls badge_[23][1-5].txt复制代码
这跟咱们平常使用的 ";" 差很少,就不细说了,主要是用来分隔命令的。
ls > count.txt; wc -l count.txt; rm count.txt复制代码
这里注意,用 ; 分隔命令时,即便第一个命令失败,第二个命令也会运行,即便第二个命令失败,第三个命令也会运行,依此类推。
若是要在一个命令失败的状况下就中止,请使用 "&&" ,以下:
cd ./doesntexist && cp ~/Documents/reports/* .复制代码
有时候在终端正在运行一个命令时,例如 vim,你想运行另一个命令怎么办?这里有个小技巧就是在命令后面加一个 "&" 符号,将这个程序放在后台启动,这样你就能在终端实现后台多任务的效果了。
vim command_address.page &复制代码
上面显示的是这个后台进程的 ID 。
许多 Linux 命令接受一个文件做为参数,并从该文件中获取数据。这些命令中的大多数还能够从流中获取输入。要建立一个流,可使用左尖括号 "<" ,以下将文件重定向到命令中:
sort < words.txt复制代码
上面将 words.txt 文件的内容并进行了排序。
注意:它是不显示数据来源文件的文件名的。
wc words.txt复制代码
wc < words.txt复制代码
输入和输出是相反的,很好理解。用右尖括号 ">" 将命令的输出重定向,一般是重定向到文件中。
ls > files.txt复制代码
cat files.txt复制代码
高端玩家还能够和数字一同使用:
wc doesntexist.txt 2> errors.txt复制代码
cat errors.txt复制代码
这里的 2 是一个文件描述符,表示标准错误(stderr)
你们感兴趣的能够去搜索下文件描述符 stdin,stdout,stderr 是什么?
咱们能够将 " | " 当作将命令连接在一块儿的管道。它从一个命令获取输出,并将其做为输入送入下一个命令。管道命令的数量是任意的。
cat words.txt | grep [cC] | sort -r复制代码
解释下,上面先使用 cat 将 words.txt 文件的内容输入 grep , 而后 grep 提取包含小写或大写(C/c)的任何行,接着 grep 将这些行传递给 sort ,最后 sort 进行 -r 反向排序。
这跟编程语言中的 " ! " 差很少,咱们直接拿个例子来讲吧:
[ ! -d ./backup ] && mkdir ./backup复制代码
第一个命令 -d 判断当前目录是否存在 backup 的目录文件,外面加个逻辑非 ! 判断,
第二个命令是建立 backup 目录文件,
中间的 && 上面说过。
总的来讲就是当 backup 目录不存在时,建立 backup 目录;当不存在时则不执行第二条命令。
不妨看下文件夹的备份状态:
ls -l -d backup复制代码
" ! " 的另外一个用法就是从新运行历史命令:
!24复制代码
!!复制代码
" !! " 是从新运行上一条命令的意思。
"$" 开头一般表示变量,下面是一些系统变量:
echo $USER复制代码
echo $HOME复制代码
echo $PATH复制代码
固然,你也能够本身定义变量而后输出:
ThisDistro=Ubuntu复制代码
MyNumber=2001复制代码
echo $ThisDistro复制代码
echo $MyNumber复制代码
咱们还能够经过 "{}" 解锁更高级的玩法:
先定义一个变量 MyString 并给它赋值 123456qwerty
MyString=123456qwerty复制代码
正常输出
echo ${MyString}复制代码
加个 ":6" 返回从索引位置 6 开始的一直到最后的字符串
echo ${MyString:6}复制代码
显示从索引位置从 0 开始日后 6 个字符的字符串
echo ${MyString:0:6}复制代码
显示从索引位置从 4 开始日后 4 个字符的字符串
echo ${MyString:4:4}复制代码
说了那么多,那么就有个问题了,就是我只想在命令里面将这些特殊字符做为通常的符号显示怎么办?这种咱们称之为引用,Linux 中有三种引用方法。
用双引号 "" 括起来,不过这对 "$" 无效。
echo "Today is $(date)"复制代码
用单引号 '' 括起来,中止全部特殊字符的功能。
echo 'Today is $(date)'复制代码
反斜杠 \ 转义,这在不少场合都有通用的。
echo "Today is \$(date)"复制代码
今天的科普文章有点长,你们慢慢消化哈。
-----------------
良许,世界500强外企 Linux 开发工程师,Linux 布道者,欢迎关注个人公众号「良许Linux」,满满都是干货!
→「技术干货推送」
→「独家资料共享」
→「高手如云社群」
若是您对个人专题内容感兴趣,也能够关注个人博客:lxlinux.net