Linux
基础知识
01搭建Centos7系统
02软件管理仓库
03Shell
04查看帮助命令
05系统工作命令
06系统状态检测命令
07工作目录切换命令
08文本文件编辑命令
09文件目录管理
10打包压缩与搜索命令
11输入输出重定向
12管道符与通配符
13Vim编辑器
14Shell脚本
15shell流程控制语句
16用户管理操作
17文件权限与归属
18文件隐藏属性
19文件访问控制列表
20su与sudo
21存储结构
22物理设备命名规则
23文件系统
24挂载硬件设备
25虚拟机添加硬盘设备
26系统中操作添加硬盘设备
27添加交换分区
28磁盘容器配额
29软硬方式链接
30RAID
31LVM
32程序安装与管理
33计划任务
34日志文件分析
35测试网络联通性
36FTP服务
37操作系统基本符号
38操作系统三剑客
39shell基础
40shell语法
41DNS
42Apache概述
43Nginx概述
44集群概述
Vmware安装Ubuntu
更换源
-
+
首页
12管道符与通配符
# 管道符与通配符 # 管道命令符 管道符,其执行格式为“命令 A | 命令 B”。命令符的作用:“把前一个命令原本要输出到屏幕的数据当作是后一个命令的标准输入”。 例如: ```linux [root@bogon test]# grep "/sbin/nologin" /etc/passwd | wc 37 78 2007 [root@bogon test]# ``` 大家千万不要误以为管道命令符只能在一个命令组合中使用一次,我们完全可以这样使用:“命令 A | 命令 B | 命令 C | ...”。 # 命令行的通配符 如果就记得一个文件的开头几个字母,想遍历查找出所有以这个关键词开头的文件,该怎么操作呢? 通配符就是通用的匹配信息的符号,常用通配符如下: |符号|作用| | -------| -----------------------------------------| |*|表示匹配零个或多个字符| |?|表示匹配单个字符| |[0-9]|表示匹配0~9之间的单个数字字符| |[abc]|表示匹配a、b、c三个字符中的任意一个字符| ```linux [root@bogon test]# find /etc/ -name "t*" /etc/terminfo /etc/alternatives/tnameserv /etc/alternatives/tnameserv.1.gz /etc/selinux/tmp /etc/selinux/targeted /etc/selinux/targeted/active/modules/100/targetd /etc/selinux/targeted/active/modules/100/tcpd /etc/selinux/targeted/active/modules/100/tcsd /etc/selinux/targeted/active/modules/100/telepathy /etc/selinux/targeted/active/modules/100/telnet /etc/selinux/targeted/active/modules/100/tftp [root@bogon test]# find /etc/mcelog/ -name "trigger?" /etc/mcelog/triggers [root@bogon test]# ll /dev/sda[0-9] brw-rw----. 1 root disk 8, 1 12月 29 01:28 /dev/sda1 brw-rw----. 1 root disk 8, 2 12月 29 01:28 /dev/sda2 [root@bogon test]# ``` # 转义字符 Shell 解释器还提供了特别丰富的转义字符来处理输入的特殊数据。 常用的转义字符 |字符|作用| | -----------------| ----------------------------------------| |\\(反斜杠)|使反斜杠后面的变量变为一个单词的字符串| |'(单引号)|转义其中所有的变量为单词的字符串| |"(双引号)|保留其中的变量属性,不进行转义处理| |`(反引号)|将其中的命令执行后返回结果| ```linux [root@bogon test]# PRICE=10 [root@bogon test]# echo "The is $PRICE" The is 10 [root@bogon test]# echo 'The is $PRICE' The is $PRICE [root@bogon test]# echo The is $PRICE The is 10 [root@bogon test]# echo The is \$PRICE The is $PRICE [root@bogon test]# echo The is\ \$PRICE The is $PRICE [root@bogon test]# echo The is \\$PRICE The is \10 [root@bogon test]# [root@bogon test]# echo `uname -a` Linux bogon 3.10.0-862.el7.x86_64 #1 SMP Fri Apr 20 16:44:24 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux [root@bogon test]# ``` # 环境变量 变量是计算机系统用于保存可变值的数据类型。 在 Linux 系统中,变量名称一般都是大写的,这是一种约定俗成的规范。我们可以直接通过变量名称来提取到对应的变量值。 Linux系统中的环境变量是用来定义系统运行环境的一些参数,比如每个用户不同的家目录、邮件存放位置等。 > 命令执行的流程 在 Linux 系统中一切都是文件,Linux 命令也不例外。那么,在用户执行了一条命令之后,Linux 系统中到底发生了什么事情呢?简单来说,命令在 Linux 中的执行分为 4 个步骤: 1. 判断用户是否以绝对路径或相对路径的方式输入命令,如果是,则直接执行; 2. Linux会检查用户输入的命令是否为“别名命令; 3. Bash解释器会判断用户输入的是内部命令还是外部命令; 4. 系统在多个路径中查找用户输入的命令文件,而定义这些路径的变量成为PATH,作用是告诉 Bash 解释器待执行的命令可能存放的位置,然后 Bash 解释器就会乖乖地在这些位置中逐个查找。 其中: * “别名命令”,即用一个自定义的命令名称来替换原本的命令名称。可以用 alias 命令来创建一个属于自己的命令别名,格式为“alias 别名=命令”。若要取消一个命令别名,则是用 unalias 命令,格式为“unalias 别名”。 * 内部命令是解释器内部的指令,会被直接执行;而用户在绝大部分时间输入的是外部命令,外部命令由Bash解释器处理。 * 可以使用“type 命令名称”来判断用户输入的命令是内部命令还是外部命令。 * PATH 是由多个路径值组成的变量,每个路径值之间用冒号间隔,对这些路径的增加和删除操作将影响到 Bash 解释器对Linux 命令的查找。 ```linux [root@bogon test]# pwd /home/test/test [root@bogon test]# alias a=pwd [root@bogon test]# a /home/test/test [root@bogon test]# unalias a=pwd bash: unalias: a=pwd: 未找到 [root@bogon test]# unalias a [root@bogon test]# a bash: a: 未找到命令... [root@bogon test]# [root@bogon test]# type ifconfig ifconfig 已被哈希 (/usr/sbin/ifconfig) [root@bogon test]# type a bash: type: a: 未找到 [root@bogon test]# type pwd pwd 是 shell 内嵌 [root@bogon test]# [root@bogon test]# echo $PATH /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/test/.local/bin:/home/test/bin [root@bogon test]# ``` 注意:有一个比较经典的问题:“为什么不能将当前目录(.)添加到 PATH 中呢? ” 原因是,尽管可以将当前目录(.)添加到 PATH 变量中,从而在某些情况下可以让用户免去输入命令所在路径的麻烦。但是,如果黑客在比较常用的公共目录/tmp 中存放了一个与 ls 或 cd 命令同名的木马文件,而用户又恰巧在公共目录中执行了这些命令,那么就极有可能中招了。 可以使用 env 命令来查看到 Linux 系统中所有的环境变量,Linux系统中最重要的十个环境变量,如下: |变量名称|作用| | --------------| ----------------------------------| |HOME|用户的主目录(家目录)| |SHELL|用户所使用的shell解释器名称| |HISTSIZE|输出的历史命令记录条数| |HISTFILESIZE|保存的历史命令记录条数| |MAIL|邮件保存路径| |LANG|系统语言、语系名称| |RANDOM|生产一个随机数字| |PS1|Bash解释器的提示符| |PATH|定义解释器搜索用户执行命令的路径| |EDITOR|用户默认的文本编辑器| ```linux [root@bogon test]# echo $PS1 [\u@\h \W]\$ [root@bogon test]# echo $RANDOM 29050 [root@bogon test]# echo $RANDOM 13016 [root@bogon test]# echo $RANDOM 14264 [root@bogon test]# echo $MAIL /var/spool/mail/test [root@bogon test]# echo $LANG zh_CN.UTF-8 [root@bogon test]# ``` Linux 作为一个多用户多任务的操作系统,能够为每个用户提供独立的、合适的工作运行环境,因此,一个相同的变量会因为用户身份的不同而具有不同的值。 > 变量 其实变量是由固定的变量名与用户或系统设置的变量值两部分组成的,我们完全可以自行创建变量,来满足工作需求。例如设置一个名称为 WORKDIR 的变量,方便用户更轻松地进入一个层次较深的目录: ```linux [root@bogon test]# pwd /home/test/test [root@bogon test]# WORKDIR=/home/test/test/ [root@bogon test]# cd ../../ [root@bogon home]# pwd /home [root@bogon home]# cd $WORKDIR [root@bogon test]# pwd /home/test/test [root@bogon test]# ``` 注意:这样的变量不具有全局性,作用范围也有限,默认情况下不能被其他用户使用。如果工作需要,可以使用 export 命令将其提升为全局变量,这样其他用户也就可以使用它了。 ```linux [root@bogon test]# export WORKDIR [root@bogon test]# su test [test@bogon test]$ cd ../../ [test@bogon home]$ pwd /home [test@bogon home]$ cd $WORKDIR [test@bogon test]$ pwd /home/test/test [test@bogon test]$ ```
毛林
2025年9月12日 20:43
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码