Linux特殊符号与常用快捷键

1.相关概念

  • 1.相对路径:从根开始的路径;(初学者建议熟悉绝对路径,防止迷路)
  • 2.相对路径:从当前路径(.)开始的路径;
  • 3.Linux命令行结构
[root  @aspen  ~]
[用户名@主机名 当前所在目录]
  • 4.Linux命令的结构
    [命令] [条件/参数] [对象/目录/文件]
    在Linux中严格区分大小写

2.特殊符号

通配符

  • * 匹配任意字符

  • ? 匹配任务单个字符

  • {} 生成有序序列

[root@aspen ~]# echo {a..z}
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
[root@aspen ~]#echo {A..Z}
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   
[root@aspen ~]# echo {1..10}
1 2 3 4 5 6 7 8 9 10
[root@aspen ~]# echo {01..10}
01 02 03 04 05 06 07 08 09 10
[root@aspen ~]# echo aspen{1..5}
aspen1 aspen2 aspen3 aspen4 aspen5
[root@aspen ~]# echo  {1,3,5}aspen
1aspen 3aspen 5aspen

需同时创建多多个序列时,“{}”与“{}”之间要加空格,否则就是多个序列的排列组合

[root@aspen ~]# echo {1..3} {2..4}
1 2 3 2 3 4
[root@aspen ~]# echo {1..3}{2..4}
12 13 14 22 23 24 32 33 34
  • [] 匹配括号内任意一个字符

  • [^] 不匹配括号内任何一个字符

[^] == [!]
^与!要写在[]内首位

引号系列

  • ''(单引号)

  • ""(双引号)

单引号:所见即所得,写什么显示什么;
[root@aspen ~]# echo '$PS1 {1..5}'
$PS1 {1..5}
双引号:会解析具有特殊含义的字符,但不会解析{}
[root@aspen ~]# echo "$PS1 {1..5}"
[\u@\h \W]\$  {1..5}
不加引号:会解析具有特殊含义的字符和{}
[root@aspen ~]# echo $PS1 {1..5}
[\u@\h \W]\$ 1 2 3 4 5
  • ``(反引号) 优先执行反引号内的命令
反引号之间填写命令
`` == $()
[root@aspen ~]# echo date +%F
date +%F
[root@aspen ~]# echo `date +%F`
2019-05-13

重定向符号

当程序运行时,通常会自动打开三个标准文件,分别是:标准输入标准输出错误输出
名称 文件描述符 作用
标准输入
STDIN
0 默认是键盘输入,也可以是其他文件或者命令的输出
标准输出
STDOUT
1 默认输出到屏幕
错误输出
STDERR
2 默认输出到屏幕
文件名称 3+

进程从标准输入中得到数据,将正常的输出打印至屏幕终端,将错误的输出信息也打印至屏幕终端。
进程使用文件描述符(File descriptors)来管理打开文件。
[root@Tech ~]# tail -f /var/log/secure &
[1] 1347
[root@Tech ~]# Feb  3 11:52:53 Tech sshd[1308]: Accepted password for root from 10.0.0.1 port 7480 ssh2
Feb  3 11:52:53 Tech systemd[1313]: pam_unix(systemd-user:session): session opened for user root by (uid=0)
Feb  3 11:52:54 Tech sshd[1308]: pam_unix(sshd:session): session opened for user root by (uid=0)

[root@Tech ~]# ps aux | grep tail
root       1347  0.0  0.0   7340   932 pts/0    S    11:53   0:00 tail -f /var/log/secure
root       1349  0.0  0.0  12132  1044 pts/0    S+   11:53   0:00 grep --color=auto tail
[root@Tech ~]# ll /dev/std*
lrwxrwxrwx. 1 root root 15 Feb  3 08:56 /dev/stderr -> /proc/self/fd/2
lrwxrwxrwx. 1 root root 15 Feb  3 08:56 /dev/stdin -> /proc/self/fd/0
lrwxrwxrwx. 1 root root 15 Feb  3 08:56 /dev/stdout -> /proc/self/fd/1
[root@Tech ~]# ll /proc/self/fd
total 0
lrwx------. 1 root root 64 Feb  3 11:54 0 -> /dev/pts/0
lrwx------. 1 root root 64 Feb  3 11:54 1 -> /dev/pts/0
lrwx------. 1 root root 64 Feb  3 11:54 2 -> /dev/pts/0
lr-x------. 1 root root 64 Feb  3 11:54 3 -> /var/lib/sss/mc/passwd
lrwx------. 1 root root 64 Feb  3 11:54 4 -> 'socket:[37042]'
lr-x------. 1 root root 64 Feb  3 11:54 5 -> /var/lib/sss/mc/group
lr-x------. 1 root root 64 Feb  3 11:54 6 -> /proc/1351/fd
[root@Tech ~]# ll /proc/1347/fd
total 0
lrwx------. 1 root root 64 Feb  3 11:55 0 -> /dev/pts/0
lrwx------. 1 root root 64 Feb  3 11:55 1 -> /dev/pts/0
lrwx------. 1 root root 64 Feb  3 11:55 2 -> /dev/pts/0
lr-x------. 1 root root 64 Feb  3 11:55 3 -> /var/log/secure
lr-x------. 1 root root 64 Feb  3 11:55 4 -> anon_inode:inotify
[root@Tech ~]# fg
tail -f /var/log/secure
^C
  • > 标准输出重定向
    重定向会先清空文件原有内容,再向文件写入新的内容,仅会记录系统输出信息
>==1>
  • >> 标准输出追加重定向
    追加重定向会向文件末尾处追加新的内容,仅会记录系统输出信息
>>==1>>
  • < 标准输入重定向
<==0<
  • << 标准输入追加重定向
<<==0<<
  • 2> 标准错误输出重定向
    重定向会先清空文件原有内容,再向文件写入新的内容,仅会记录系统错误输出信息;

  • 2>> 标准错误输出追加重定向
    追加重定向会向文件末尾处追加新的内容,仅会记录系统错误输出信息;

  • 2>&1 标准输出和错误输出重定向
    记录标准输出和系统错误输出信息,与输出重定向配合使用;

  • &> 混合输出重定向
    重定向会先清空文件原有内容,再向文件写入新的内容,无论标准输出还是错误输出,都会被记录;

  • &>> 混合追加重定向
    追加重定向会向文件末尾处追加新的内容,无论标准输出还是错误输出,都会被记录;

目录位置

  • . 当前目录
  • .. 上级目录
  • ~ 当前登录用户的家目录
  • - 上次所在目录

其他

  • # 系统注释

  • $ 取Linux系统变量值

  • ; 表示命令结束

  • !字符 找出最近一次使用以指定字符开头的命令并执行

  • | 管道符号 (把管道前面命令的执行结果,通过管道传递给后面的命令)

  • \ 取消特殊字符转义或命令别名

  • \n 回车/换行符号

  • & 将程序放入后台运行

  • && 前一条命令执行成功后,执行下一条命令

  • || 前一条命令执行失败后,执行下一条命令

  • ; 无论前一条命令执行成功还是失败,都执行下一条命令

3.系统常用快捷键

  • Tab 自动补全命令或路径
  • Ctrl+c 强制取消当前操作
  • Ctrl+l 清空当前屏幕
  • Ctrl+a 迅速将光标移至行首
  • Ctrl+e 迅速将光标移至行尾
  • Ctrl+→ 光标向右移动一个单词
  • Ctrl+← 光标向左移动一个单词
  • Ctrl+u 将光标至行首的内容进行剪切
  • Ctrl+k 将光标至行尾的内容进行剪切
  • Ctrl+w 按单词或空格进行向前删除
  • Ctrl+y 复制剪切板的内容
  • Ctrl+d 登出当前用户
  • Ctrl+r 查询历史命令
  • Ctrl+p 查找前一条命令
  • Ctrl+n 查找后一条命令
  • Ctrl+s 系统锁屏
  • Ctrl+q 系统解锁屏幕
  • Ctrl+o 快速执行上一条指令
  • Ctrl+z 将命令暂时放置后台执行
  • Esc+. 复制上一次执行成功命令的最后一项参数

附:进程的管道技术

1.作用

管道操作符 "|",主要用于连接左右两个命令,将左侧命令的标准输出,交给右侧命令的标准输入;

请注意:|无法传递标准错误输出至后者命令。

格式:命令1 | 命令2 | ... | 命令n

[root@Tech ~]# df -h | awk -F "[ %]+" '/\/$/ {print $(NF-1)}'
15
[root@Tech ~]# df -h | awk '/\/$/ {print $(NF-1)}' | cut -c -2
15

2.管道流程示意图

熟练使用管道,能帮助我们进一步掌握命令间的搭配使用方法,进一步提高命令输出值的处理效率。

3.管道中的tee技术

tee 文件名 读取标准输入内容,并输出

  • -a 追加输出
tee默认是覆盖输出,使用-a参数,可以变为追加输出;
[root@Tech ~]# df -h | awk '/\/$/ {print $(NF-1)}' |tee /dev/pts/1 | cut -c -2
15%
15
[root@Tech ~]# df -h | tee df.log | awk '/\/$/ {print $(NF-1)}' | cut -c -2
15
[root@Tech ~]# df -h | tee df.log | awk '/\/$/ {print $(NF-1)}' | cut -c -2
15
[root@Tech ~]# cat df.log 
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        969M     0  969M   0% /dev
tmpfs           984M     0  984M   0% /dev/shm
tmpfs           984M  8.6M  975M   1% /run
tmpfs           984M     0  984M   0% /sys/fs/cgroup
/dev/sda3        15G  2.2G   13G  15% /
/dev/sda1       976M  106M  804M  12% /boot
tmpfs           197M     0  197M   0% /run/user/0
[root@Tech ~]# df -h  | awk '/\/$/ {print $(NF-1)}' | tee -a df.log|cut -c -2
15
[root@Tech ~]# cat df.log 
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        969M     0  969M   0% /dev
tmpfs           984M     0  984M   0% /dev/shm
tmpfs           984M  8.6M  975M   1% /run
tmpfs           984M     0  984M   0% /sys/fs/cgroup
/dev/sda3        15G  2.2G   13G  15% /
/dev/sda1       976M  106M  804M  12% /boot
tmpfs           197M     0  197M   0% /run/user/0
15%

4.tee与重定向的使用区别

[root@Tech ~]# date > date.log          #直接将输出记录在文件中
[root@Tech ~]# date | tee date_tee.log  #命令执行结果输出至屏幕,并记录在文件中
Thu Feb  3 16:21:19 CST 2022
[root@Tech ~]# cat date.log 
Thu Feb  3 16:21:04 CST 2022
[root@Tech ~]# cat date_tee.log
Thu Feb  3 16:21:19 CST 2022

5.xargs参数传递

xargs参数传递,主要让一些不支持管道的命令可以使用管道技术。
[root@Tech ~]# touch xargs_test{1..4}.txt
[root@Tech ~]# which awk | ls -l
total 0
-rw-r--r--. 1 root root 0 Feb  3 16:41 xargs_test1.txt
-rw-r--r--. 1 root root 0 Feb  3 16:41 xargs_test2.txt
-rw-r--r--. 1 root root 0 Feb  3 16:41 xargs_test3.txt
-rw-r--r--. 1 root root 0 Feb  3 16:41 xargs_test4.txt
[root@Tech ~]# which awk | xargs ls -l
lrwxrwxrwx. 1 root root 4 May 11  2019 /usr/bin/awk -> gawk
[root@Tech ~]# ls
xargs_test1.txt  xargs_test2.txt  xargs_test3.txt  xargs_test4.txt
[root@Tech ~]# ls | xargs rm -f 
[root@Tech ~]# ls

未完待续...