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)"

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

ZT:15 个你非了解不可的 Linux 特殊字符的更多相关文章

  1. 收藏 | 15 个你非了解不可的 Linux 特殊字符,妈妈再也不用担心我看不懂这些符号了!

    不知道大家接触 Linux 系统有多久了,可曾了解过 Linux 中有哪些特殊的字符呢?其实啊,那些特殊字符都大有用处呢,今天的文章就给大家简单地科普一下 Linux 中你需要了解的 15 个特殊字符 ...

  2. ZT 为什么pthread_cond_t要和pthread_mutex_t同时使用 || pthread/Linux多线程编程

    为什么线程同步的时候pthread_cond_t要和pthread_mutex_t同时使用 (2009-10-27 11:07:23) 转载▼ 标签: 杂谈 分类: 计算机 举一个例子(http:// ...

  3. 实现非管理型UPS在linux主机上的停电自动关机

    买了个山特的SANTAK TG-BOX 850 UPS,自带USB通讯线缆.本以为官方软件提供Linux下的CLI命令以监控UPS状态. 官网提供的下载链接巨慢无比不说,CLI下只提供了安装脚本,没有 ...

  4. 非root权限的linux用法添加工作路径

    修改~目录的bashrc文件: 1.cd 到~目录. 2.ls -a ,bashrc文件是隐藏的. 3.vim .bashrc;export PATH=$PAHT:要添加的工作路径. 4.source ...

  5. 在Termux(非root的安卓Linux模拟器)中安装和使用ftp服务器(pure-ftpd)(原创)[简单极致]

    Termux是单用户的linux模拟器,所以应用的专属文件夹下面.usr/etc/下面没有passwd和group文件对多用户组配置,只在.usr/bin/下面有passwd二进制应用可以改变当前用户 ...

  6. Oracle清除数据库中长时间占用资源的非活动的会话

    1.启动资源计划 alter system set resource_limit=true scope=spfile; 2.设置非活动回话十五分钟断开,释放资源 alter profile defau ...

  7. 《java并发编程实战》读书笔记12--原子变量,非阻塞算法,CAS

    第15章 原子变量与非阻塞同步机制 近年来,在并发算法领域的大多数研究都侧重于非阻塞算法,这种算法用底层的原子机器指令(例如比较并交换指令)代替锁老确保数据在并发访问中的一致性. 15.1 锁的劣势 ...

  8. Linux设备驱动中的阻塞和非阻塞I/O <转载>

    Green 博客园 首页 新随笔 联系 订阅 管理 Linux设备驱动中的阻塞和非阻塞I/O   [基本概念] 1.阻塞 阻塞操作是指在执行设备操作时,托不能获得资源,则挂起进程直到满足操作所需的条件 ...

  9. socket阻塞与非阻塞,同步与异步

    socket阻塞与非阻塞,同步与异步 作者:huangguisu 转自:http://blog.csdn.net/hguisu/article/details/7453390 1. 概念理解 在进行网 ...

随机推荐

  1. vue 项目运行报错

    'vue-cli-service' 不是内部或外部命令,也不是可运行的程序 或批处理文件. 运行Vue项目文件的时候报如下错误 需要先用淘宝镜像来运行:cnpm install 然后运行成功后 就可以 ...

  2. 18、Memento 备忘录模式

    例如:用于记录快照(顺势状态).存盘 1.Memento Memento设计模式是一种软件设计模式,用于将对象回滚到其先前状态.它是行为设计模式的一部分,与算法和对象之间的职责分配有关. 行为模式描述 ...

  3. java_流程控制语句、权限修饰符

    判断语句 if语句第一种格式: if if(关系表达式){ 语句体; } if语句第二种格式: if…else if(关系表达式) { 语句体1; } else { 语句体2; } if语句第三种格式 ...

  4. 微信商户H5支付申请不通过被驳回,拒绝原因提示:网站存在不实内容或不安全信息

    一.H5支付简介及使用场景说明 H5支付是指商户在微信客户端外的移动端网页展示商品或服务,用户在前述页面确认使用微信支付时,商户发起本服务呼起微信客户端进行支付.主要用于触屏版的手机浏览器请求微信支付 ...

  5. Go之Gorm和BeegoORM简介及配置使用

    简介 ORM Object-Relationl Mapping, 它的作用是映射数据库和对象之间的关系,方便我们在实现数据库操作的时候不用去写复杂的sql语句,把对数据库的操作上升到对于对象的操作 G ...

  6. 使用Postman工具做接口测试(五)——生成随机参数

    引言 我们平时使用最多的接口调试工具就是postman了,比如开发将一个接口给到你,你想看看接口是否正常.最常用的方法就是用postman去调一下.如果通,就写接口测试用例,反之,将开发打一顿吧o(* ...

  7. 图神经网络 PyTorch Geometric 入门教程

    简介 Graph Neural Networks 简称 GNN,称为图神经网络,是深度学习中近年来一个比较受关注的领域.近年来 GNN 在学术界受到的关注越来越多,与之相关的论文数量呈上升趋势,GNN ...

  8. graphics.h源代码下载

    graphics.h源代码下载 /*graphics.h DefinitionsforGraphicsPackage. Copyright(c)BorlandInternational1987,198 ...

  9. 第六篇 Scrum冲刺博客

    一.会议图片 二.项目进展 成员 已完成情况 今日任务 冯荣新 购物车列表,购物车工具栏 博客撰写 陈泽佳 静态结构 自定义图片组件,提交功能 徐伟浩 协助前端获取数据 协助前端获取数据 谢佳余 未完 ...

  10. ubuntu 下添加环境变量

    ubuntu 下添加环境变量 方法1: 第一种临时设置,用 export 指令,如在$PATH中增加JAVA文件夹: $export PATH=$PATH:/usr/local/lib/jdk1.6. ...