zoukankan      html  css  js  c++  java
  • ZT:15 个你非了解不可的 Linux 特殊字符

    https://os.51cto.com/art/202003/611595.htm

    不知道大家接触 Linux 系统有多久了,可曾了解过 Linux 中有哪些特殊的字符呢?其实啊,那些特殊字符都大有用处呢,今天的文章就给大家简单地科普一下 Linux 中你需要了解的 15 个特殊字符,想学或刚学 Linux 的小伙伴赶紧上车了为!

    主目录

    这个波浪号 ~ 指的是主目录,也就是我们用户的个人目录,无论你身在何方,输入 cd ~ 它将带你回家!

    1. cd ~ 

    更高端的玩法就是在它后面加上具体的路径,直接定位到家目录中的指定位置,是不是很方便呢?

    1. cd ~/work/archive 

    .当前目录

    英文句号 . 代表当前目录,我们来看一下当前目录下的全部文件:

    1. ls -al 

    红圈里的 . 就是指当前目录,不过这没什么意义,我们更多的是在命令中使用它,如下:

    1. ./script.sh 

    这样做是在告诉 bash 只要在当前目录中查找并执行 script.sh 文件就好了,不用在路径中找了。

    .. 父目录

    两个英文句号 .. 代表父目录,也就是当前目录的上一级目录。假设我们要回到上一级目录:

    1. cd .. 

    跟前面一样,你可以在它后面加具体的目录,这里的意思就是定位到与当前目录同级的其它目录:

    1. cd ../projects/ 

    / 路径目录分隔符

    斜杠 "/" 指的是路径目录分隔符,这里没什么好说的。

    1. ls ~/work/tests/ 

    但是,有意思的是,如果 / 路径目录分隔符前面没有东西的话,是不是就是意味着这是最上级的目录了?由于 Linux 系统的目录树均始于 / ,所以仅仅一个 / 代表了我们常说的系统根目录。

    1. cd / 

    # 注释

    以 # 开头,代表这句话是注释。

    1. # This will be ignored by the Bash shell 

    虽然上面那段话就被忽略了,但它还是会添加到您的命令历史记录中。

    更厉害的做法如下:

    先定义一个变量并给它赋值字符串 “amazing alvin”

    1. this_string="amazing alvin" 

    ${this_string#amazing} 返回的是被注释掉 amazing 的 this_string 字符串变量,可以 echo 输出看下结果:

    1. echo awsome ${this_string#amazing} 

    amazing 只是被注释掉而已,它并未被删除,去掉注释它就回来了:

    1. echo $this_string 

    ? 单字符通配符

    问号 "?",指的是单字符通配符。Bash Shell 支持三种通配符。

    它代表文件名中任意一个字符的匹配,例如:

    1. ls badge?.txt 

    注意,它与 badge.txt 是不匹配滴,因为 badge 后面没有字符。

    正因为 "?" 匹配单个字符,所以这里有个看似很厉害的玩法,就是你想要的找的文件的文件名有多少个字符,你就输入多少个 "?" 。

    1. ls ?????.txt 

    看着挺厉害,不过我怎么感觉这好别扭?????

    * 字符序列通配符

    星号 * 代表的是任意字符序列,匹配任意字符,包括空字符,以刚才的 badge 为例:

    1. ls badge* 

    可以看到,badge.txt 都匹配到了。

    匹配任意类型的文件:

    1. ls source.* 

    [] 字符集通配符

    方括号 "[]" 指的是字符集通配符,文件名中的相关字符必须与字符集中的至少一个字符匹配。通过例子来体会一下它的作用吧:

    1. ls badge_0[246].txt 

    1. ls badge_[01][789].txt 

    1. ls badge_[23][1-5].txt 

    ; 命令分隔符

    这跟我们日常使用的 ";" 差不多,就不细说了,主要是用来分隔命令的。

    1. ls > count.txt; wc -l count.txt; rm count.txt 

    这里注意,用 ; 分隔命令时,即使第一个命令失败,第二个命令也会运行,即使第二个命令失败,第三个命令也会运行,依此类推。

    如果要在一个命令失败的情况下就停止,请使用 "&&" ,如下:

    1. cd ./doesntexist && cp ~/Documents/reports/* . 

    & 后台处理

    有时候在终端正在运行一个命令时,例如 vim,你想运行另外一个命令怎么办?这里有个小技巧就是在命令后面加一个 "&" 符号,将这个程序放在后台启动,这样你就能在终端实现后台多任务的效果了。

    1. vim command_address.page & 

    上面显示的是这个后台进程的 ID 。

    < 输入重定向

    许多 Linux 命令接受一个文件作为参数,并从该文件中获取数据。这些命令中的大多数还可以从流中获取输入。要创建一个流,可以使用左尖括号 "<" ,如下将文件重定向到命令中:

    1. sort words.txt 

    上面将 words.txt 文件的内容并进行了排序。

    注意:它是不显示数据来源文件的文件名的。

    1. wc words.txt 
    2. wc words.txt 

    > 输出重定向

    输入和输出是相反的,很好理解。用右尖括号 ">" 将命令的输出重定向,通常是重定向到文件中。

    1. ls > files.txt 
    2. cat files.txt 

    高端玩家还可以和数字一同使用:

    1. wc doesntexist.txt 2> errors.txt 
    2. cat errors.txt 


    这里的 2 是一个文件描述符,表示标准错误(stderr)

    大家感兴趣的可以去搜索下文件描述符 stdin,stdout,stderr 是什么?

    | 连接命令

    我们可以将 " | " 看成将命令链接在一起的管道。它从一个命令获取输出,并将其作为输入送入下一个命令。管道命令的数量是任意的。

    1. cat words.txt | grep [cC] | sort -r 

    解释下,上面先使用 cat 将 words.txt 文件的内容输入 grep , 然后 grep 提取包含小写或大写(C/c)的任何行,接着 grep 将这些行传递给 sort ,最后 sort 进行 -r 反向排序。

    ! 逻辑非

    这跟编程语言中的 " ! " 差不多,我们直接拿个例子来说吧:

    1. [ ! -d ./backup ] && mkdir ./backup 

    第一个命令 -d 判断当前目录是否存在 backup 的目录文件,外面加个逻辑非 ! 判断, 第二个命令是创建 backup 目录文件, 中间的 && 上面说过。 总的来说就是当 backup 目录不存在时,创建 backup 目录;当不存在时则不执行第二条命令。

    不妨看下文件夹的备份状态:

    1. ls -l -d backup 

    " ! " 的另一个用法就是重新运行历史命令:

    1. !24 
    2. !! 

    " !! " 是重新运行上一条命令的意思。

    $ 变量表达式

    "$" 开头通常表示变量,下面是一些系统变量:

    1. echo $USER 
    2. echo $HOME 
    3. echo $PATH 

    当然,你也可以自己定义变量然后输出:

    1. ThisDistro=Ubuntu 
    2. MyNumber=2001 
    3. echo $ThisDistro 
    4. echo $MyNumber 

    我们还可以通过 "{}" 解锁更高级的玩法:

    先定义一个变量 MyString 并给它赋值 123456qwerty

    1. MyString=123456qwerty 

    正常输出

    1. echo ${MyString} 

    加个 ":6" 返回从索引位置 6 开始的一直到最后的字符串

    1. echo ${MyString:6} 

    显示从索引位置从 0 开始往后 6 个字符的字符串

    1. echo ${MyString:0:6} 

    显示从索引位置从 4 开始往后 4 个字符的字符串

    1. echo ${MyString:4:4} 

    引用特殊字符

    说了那么多,那么就有个问题了,就是我只想在命令里面将这些特殊字符作为一般的符号显示怎么办?这种我们称之为引用,Linux 中有三种引用方法。

    用双引号 "" 括起来,不过这对 "$" 无效。

    1. echo "Today is $(date)" 

    用单引号 '' 括起来,停止所有特殊字符的功能。

    1. echo 'Today is $(date)' 

    反斜杠 转义,这在很多场合都有通用的。

    1. echo "Today is $(date)" 

    今天的科普文章有点长,大家慢慢消化哈。

  • 相关阅读:
    hdu 1455 N个短木棒 拼成长度相等的几根长木棒 (DFS)
    hdu 1181 以b开头m结尾的咒语 (DFS)
    hdu 1258 从n个数中找和为t的组合 (DFS)
    hdu 4707 仓鼠 记录深度 (BFS)
    LightOJ 1140 How Many Zeroes? (数位DP)
    HDU 3709 Balanced Number (数位DP)
    HDU 3652 B-number (数位DP)
    HDU 5900 QSC and Master (区间DP)
    HDU 5901 Count primes (模板题)
    CodeForces 712C Memory and De-Evolution (贪心+暴力)
  • 原文地址:https://www.cnblogs.com/heyang78/p/12393748.html
Copyright © 2011-2022 走看看