CentOS 7 特殊符号

[TOCM]

介绍在 CentOS 7 系统中的一些特殊符号,并且如何使用它们。包括重定向符号、通配符、点符号等。

1. 重定向符号


符号 名称 描述
>1> 标准输出重定向 先清空文件已有内容,然后把新内容写入文件。表示当命令执行正确时内容才会写入到文件。
>>1>> 标准输出追加重定向 把内容追加到文件最后一行。表示当命令执行正确时内容才会写入到文件。
2> 标准错误输出重定向 先清空文件已有内容,然后把新内容写入文件。表示当命令执行错误时,将错误信息写入到文件。
2>> 追加标准错误输出重定向 把内容追加到文件最后一行。表示当命令执行错误时,将错误信息写入到文件。
<0< 标准输入重定向 把文件内容输出。
<<0<< 追加输入重定向 追加到文件底部。

例子 1,使用重定向符号>,单行写入,先清空文件内容,然后写入。

  1. # 先查看文件内容
  2. [root@centos7 ~]# cat /data/test.txt
  3. Hello world !
  4. Hello sophia
  5. Hello
  6. World
  7. !
  8. # 把内容 Hello sophia ! 写入文件
  9. [root@centos7 ~]# echo Hello sophia ! >/data/test.txt
  10. # 再次查看文件内容
  11. [root@centos7 ~]# cat /data/test.txt
  12. Hello sophia !
  13. [root@centos7 ~]#

例子 2,使用重定向符号><<,多行写入,先清空文件内容,然后写入。

  1. # 先查看文件内容
  2. [root@centos7 ~]# cat /data/test.txt
  3. Hello sophia !
  4. # 多行写入文件
  5. [root@centos7 ~]# cat >/data/test.txt<<EOF
  6. > Hello
  7. > World
  8. > !
  9. > EOF
  10. # 再次查看文件内容
  11. [root@centos7 ~]# cat /data/test.txt
  12. Hello
  13. World
  14. !
  15. [root@centos7 ~]#

例子 3,使用重定向符号2>>,将错误信息,追加到文件最后一行。

  1. # 查看文件内容
  2. [root@centos7 ~]# cat /data/test.txt
  3. Hello sophia !
  4. # ech 是错误命令,将错误信息追加到 test.txt 文件
  5. [root@centos7 ~]# ech Hello world ! 2>>/data/test.txt
  6. # 再次查看文件内容
  7. [root@centos7 ~]# cat /data/test.txt
  8. Hello sophia !
  9. -bash: ech: command not found
  10. [root@centos7 ~]#

例子 4,使用重定向符合,同时收集正确和错误 2 种信息。

第一种,方法:

  1. # 查看文件内容
  2. [root@centos7 ~]# cat /data/test.txt
  3. Hello sophia !
  4. # 正确执行命令写入 Hello abc!
  5. [root@centos7 ~]# echo Hello abc! >>/data/test.txt 2>>/data/test.txt
  6. [root@centos7 ~]# cat /data/test.txt
  7. Hello sophia !
  8. Hello abc!
  9. # 错误执行命令写入 Hello abc!
  10. [root@centos7 ~]# ech Hello abc! >>/data/test.txt 2>>/data/test.txt
  11. [root@centos7 ~]# cat /data/test.txt
  12. Hello sophia !
  13. Hello abc!
  14. -bash: ech: command not found
  15. [root@centos7 ~]#

第二种,方法:

  1. [root@centos7 ~]# echo Hello abc! >>/data/test.txt 2>&1
  2. [root@centos7 ~]# cat /data/test.txt
  3. Hello sophia !
  4. Hello abc!
  5. -bash: ech: command not found
  6. Hello abc!
  7. [root@centos7 ~]#

例子 5,使用重定向符号<,把文件内容输出。

  1. # 把 1 2 3 4 5 写入 num.txt 文件
  2. [root@centos7 ~]# echo 1 2 3 4 5 >/data/num.txt
  3. [root@centos7 ~]# cat /data/num.txt
  4. 1 2 3 4 5
  5. # 把 num.txt 文件内容分组输出
  6. [root@centos7 ~]# xargs -n2 </data/num.txt
  7. 1 2
  8. 3 4
  9. 5
  10. [root@centos7 ~]#

2. 通配符


星号*为通配符,表示所有任何东西。

例如,显示/root/目录下的,所有以da开头的文件夹。

  1. [root@centos7 ~]# ls -l /root/
  2. total 16
  3. -rw-------. 1 root root 1707 Apr 10 20:32 anaconda-ks.cfg
  4. drwxr-xr-x. 2 root root 4096 Apr 18 11:40 data
  5. drwxr-xr-x. 2 root root 4096 Apr 18 14:01 data2
  6. drwxr-xr-x. 2 root root 4096 Apr 18 14:03 data3
  7. # 使用通配符
  8. [root@centos7 ~]# ls -l /root/da*
  9. /root/data:
  10. total 4
  11. -rw-r--r--. 1 root root 37 Apr 18 19:22 test.txt
  12. /root/data2:
  13. total 0
  14. /root/data3:
  15. total 0
  16. [root@centos7 ~]#

3. 点符号


  • 符号..表示当前目录上一级目录。

    例如,返回上一级目录,使用命令cd ..

  • 符号.表示当前目录。

    例如,复制/data/目录里的test.txt文件到当前目录,使用命令cp data/test.txt .

    1. [root@centos7 ~]# cp /root/data/test.txt .
    2. [root@centos7 ~]# ls -l
    3. total 20
    4. drwxr-xr-x. 2 root root 4096 Apr 18 11:40 data
    5. -rw-r--r--. 1 root root 37 Apr 18 20:18 test.txt
    6. [root@centos7 ~]#

4. 波浪号 ~


波浪号~表示当前用户的家目录。

  • 例如,当使用 root 用户登陆系统:

    1. [root@centos7 ~]# pwd
    2. /root

    此时 root 用户的家目录为 /root

  • 例如,当使用其他普通用户 sophia 登陆系统:

    1. [root@centos7 ~]# su - sophia
    2. [sophia@centos7 ~]$ pwd
    3. /home/sophia

    此时 sophia 用户的家目录为 /home/sophia

  • 例如,列出用户家目录下的全部文件。

    1. [root@centos7 tmp]# ll -A ~
    2. total 60
    3. -rw-------. 1 root root 1707 Apr 10 20:32 anaconda-ks.cfg
    4. -rw-------. 1 root root 15860 May 6 09:24 .bash_history
    5. -rw-r--r--. 1 root root 18 Dec 29 2013 .bash_logout
    6. -rw-r--r--. 1 root root 176 Dec 29 2013 .bash_profile
    7. -rw-r--r--. 1 root root 176 Apr 19 14:38 .bashrc
    8. -rw-r--r--. 1 root root 100 Dec 29 2013 .cshrc
    9. drwxr-xr-x. 3 root root 4096 Apr 28 18:24 data
    10. drwxr-xr-x. 2 root root 4096 Apr 18 14:01 data2
    11. drwxr-xr-x. 2 root root 4096 Apr 18 14:03 data3
    12. -rw-r--r--. 1 root root 129 Dec 29 2013 .tcshrc
    13. -rw-r--r--. 1 root root 37 Apr 18 20:23 test.txt
    14. -rw------- 1 root root 3318 Apr 28 19:53 .viminfo
    15. [root@centos7 tmp]#
  • 例如,在任意目录下,直接回到用户家目录。

    1. [root@centos7 tmp]# cd ~
    2. [root@centos7 ~]# pwd
    3. /root
    4. [root@centos7 ~]#

    或者,不使用波浪号~,直接输入cd回车,也可以回到用户家目录。

    1. [root@centos7 tmp]# pwd
    2. /tmp
    3. [root@centos7 tmp]# cd
    4. [root@centos7 ~]# pwd
    5. /root
    6. [root@centos7 ~]#

5. 减号 -


单独的减号-是无意义的,它只能与其它命令一起使用。

  • 减号与cd一起使用cd -命令,用于返回上一次所在目录。

    1. # 进入 /tmp/ 目录
    2. [root@centos7 ~]# cd /tmp/
    3. [root@centos7 tmp]# pwd
    4. /tmp
    5. # 返回 /root/ 目录
    6. [root@centos7 tmp]# cd -
    7. /root
    8. [root@centos7 ~]# pwd
    9. /root
    10. [root@centos7 ~]#

    减号-参数相当于环境变量$OLDPWD,使用cd -命令等于使用cd $OLDPWD命令。

    1. # 当前所在目录为 /tmp
    2. [root@centos7 tmp]# pwd
    3. /tmp
    4. # 返回上一次所在目录 /root
    5. [root@centos7 tmp]# cd $OLDPWD
    6. [root@centos7 ~]# pwd
    7. /root
    8. [root@centos7 ~]# cd $OLDPWD
    9. [root@centos7 tmp]# pwd
    10. /tmp
    11. [root@centos7 tmp]#

6. 叹号 !


叹号!用于查找并运行历史命令。

例如,执行!echo命令。在命令的历史记录中,找到最近一条包含echo的命令,并且,执行该命令。

  1. # 当第一次 cat 时,文件内无任何内容。
  2. [root@centos7 ~]# cat test-3.txt
  3. # 使用 echo 添加一行内容。
  4. [root@centos7 ~]# echo hello! >> test-3.txt
  5. # 第二次 cat 时,文件只有一行内容。
  6. [root@centos7 ~]# cat test-3.txt
  7. hello!
  8. # 执行 !echo 命令
  9. [root@centos7 ~]# !echo
  10. echo hello! >> test-3.txt
  11. [root@centos7 ~]# cat test-3.txt
  12. hello!
  13. hello!

由此可见,当执行!echo命令时,是比较危险的,除非你记得最近一条命令是做了什么。

还可以使用history命令,查找执行命令记录,这种是比较安全的,它只是显示记录并不会执行。

  1. [root@centos7 ~]# history | grep echo
  2. ...
  3. 1006 echo hello! >> test-3.txt
  4. 1009 history | grep echo
  5. ...

7. 大括号 {}


大括号{}用于生成序列。

例 1,在命令行中打印 1-10 数字。

  1. [root@centos7 ~]# echo {1..10}
  2. 1 2 3 4 5 6 7 8 9 10
  3. # 数字前面补零,统一占位。
  4. [root@centos7 ~]# echo {01..10}
  5. 01 02 03 04 05 06 07 08 09 10

例 2,在命令行中打印 a-z 字母。

  1. [root@centos7 ~]# echo {a..z}
  2. a b c d e f g h i j k l m n o p q r s t u v w x y z

例 3,在命令行打印指定多个字符。

  1. [root@centos7 ~]# echo {a,b,c,2019,2020,2021}
  2. a b c 2019 2020 2021

例 4,添加前缀或后缀。

  1. [root@centos7 ~]# echo number:{01..10}
  2. number:01 number:02 number:03 number:04 number:05 number:06 number:07 number:08 number:09 number:10
  3. [root@centos7 ~]# echo {01..10}-str
  4. 01-str 02-str 03-str 04-str 05-str 06-str 07-str 08-str 09-str 10-str

例 5,通过大括号{}备份一个文件。

  1. [root@centos7 ~]# echo Hello! > test.txt
  2. [root@centos7 ~]# cat test.txt
  3. Hello!
  4. # 把 test.txt 文件,备份为 test.txt.bak
  5. [root@centos7 ~]# cp test.txt{,.bak}
  6. [root@centos7 ~]# find . -type f -name "test.txt*"
  7. ./test.txt.bak
  8. ./test.txt
  9. [root@centos7 ~]# cat test.txt.bak
  10. Hello!

原理是,执行了拼接后的命令,类似这样的cp test.txt test.txt.bak

  1. [root@centos7 ~]# echo A{,C}
  2. A AC

注意,逗号前面为空。并且,只适用备份一个文件的时候。

(完)