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
未完待续...