收藏 | 15 个你非了解不可的 Linux 特殊字符,妈妈再也不用担心我看不懂这些符号了!
不知道大家接触 Linux 系统有多久了,可曾了解过 Linux 中有哪些特殊的字符呢?其实啊,那些特殊字符都大有用处呢,今天的文章就给大家简单地科普一下 Linux 中你需要了解的 15 个特殊字符,想学或刚学 Linux 的小伙伴赶紧上车了为!
~ 主目录
这个波浪号 ~ 指的是主目录,也就是我们用户的个人目录,无论你身在何方,输入 cd ~ 它将带你回家!
cd ~

更高端的玩法就是在它后面加上具体的路径,直接定位到家目录中的指定位置,是不是很方便呢?
cd ~/work/archive

. 当前目录
英文句号 . 代表当前目录,我们来看一下当前目录下的全部文件:
ls -al

红圈里的 . 就是指当前目录,不过这没什么意义,我们更多的是在命令中使用它,如下:
./script.sh
这样做是在告诉 bash 只要在当前目录中查找并执行 script.sh 文件就好了,不用在路径中找了。

.. 父目录
两个英文句号 .. 代表父目录,也就是当前目录的上一级目录。假设我们要回到上一级目录:
cd ..

跟前面一样,你可以在它后面加具体的目录,这里的意思就是定位到与当前目录同级的其它目录:
cd ../projects/

/ 路径目录分隔符
斜杠 "/" 指的是路径目录分隔符,这里没什么好说的。
ls ~/work/tests/

但是,有意思的是,如果 / 路径目录分隔符前面没有东西的话,是不是就是意味着这是最上级的目录了?由于 Linux 系统的目录树均始于 / ,所以仅仅一个 / 代表了我们常说的系统根目录。
cd /

# 注释
以 # 开头,代表这句话是注释。
# This will be ignored by the Bash shell

虽然上面那段话就被忽略了,但它还是会添加到您的命令历史记录中。
更厉害的做法如下:
先定义一个变量并给它赋值字符串 “amazing alvin”
this_string="amazing alvin"

${this_string#amazing} 返回的是被注释掉 amazing 的 this_string 字符串变量,可以 echo 输出看下结果:
echo awsome ${this_string#amazing}

amazing 只是被注释掉而已,它并未被删除,去掉注释它就回来了:
echo $this_string

? 单字符通配符
问号 "?",指的是单字符通配符。Bash Shell 支持三种通配符。
它代表文件名中任意一个字符的匹配,例如:
ls badge?.txt

注意,它与 badge.txt 是不匹配滴,因为 badge 后面没有字符。
正因为 "?" 匹配单个字符,所以这里有个看似很厉害的玩法,就是你想要的找的文件的文件名有多少个字符,你就输入多少个 "?" 。
ls ?????.txt

看着挺厉害,不过我怎么感觉这好别扭?????
* 字符序列通配符
星号 * 代表的是任意字符序列,匹配任意字符,包括空字符,以刚才的 badge 为例:
ls badge*

可以看到,badge.txt 都匹配到了。
匹配任意类型的文件:
ls source.*
[] 字符集通配符
方括号 "[]" 指的是字符集通配符,文件名中的相关字符必须与字符集中的至少一个字符匹配。通过例子来体会一下它的作用吧:
ls badge_0[246].txt

ls badge_[01][789].txt

ls badge_[23][1-5].txt

; 命令分隔符
这跟我们日常使用的 ";" 差不多,就不细说了,主要是用来分隔命令的。
ls > count.txt; wc -l count.txt; rm count.txt

这里注意,用 ; 分隔命令时,即使第一个命令失败,第二个命令也会运行,即使第二个命令失败,第三个命令也会运行,依此类推。
如果要在一个命令失败的情况下就停止,请使用 "&&" ,如下:
cd ./doesntexist && cp ~/Documents/reports/* .

& 后台处理
有时候在终端正在运行一个命令时,例如 vim,你想运行另外一个命令怎么办?这里有个小技巧就是在命令后面加一个 "&" 符号,将这个程序放在后台启动,这样你就能在终端实现后台多任务的效果了。
vim command_address.page &

上面显示的是这个后台进程的 ID 。
< 输入重定向
许多 Linux 命令接受一个文件作为参数,并从该文件中获取数据。这些命令中的大多数还可以从流中获取输入。要创建一个流,可以使用左尖括号 "<" ,如下将文件重定向到命令中:
sort < words.txt

上面将 words.txt 文件的内容并进行了排序。
注意:它是不显示数据来源文件的文件名的。
wc words.txt
wc < words.txt

> 输出重定向
输入和输出是相反的,很好理解。用右尖括号 ">" 将命令的输出重定向,通常是重定向到文件中。
ls > files.txt
cat files.txt

高端玩家还可以和数字一同使用:
wc doesntexist.txt 2> errors.txt
cat errors.txt

这里的 2 是一个文件描述符,表示标准错误(stderr)
大家感兴趣的可以去搜索下文件描述符 stdin,stdout,stderr 是什么?
| 连接命令
我们可以将 " | " 看成将命令链接在一起的管道。它从一个命令获取输出,并将其作为输入送入下一个命令。管道命令的数量是任意的。
cat words.txt | grep [cC] | sort -r

解释下,上面先使用 cat 将 words.txt 文件的内容输入 grep , 然后 grep 提取包含小写或大写(C/c)的任何行,接着 grep 将这些行传递给 sort ,最后 sort 进行 -r 反向排序。
! 逻辑非
这跟编程语言中的 " ! " 差不多,我们直接拿个例子来说吧:
[ ! -d ./backup ] && mkdir ./backup
第一个命令 -d 判断当前目录是否存在 backup 的目录文件,外面加个逻辑非 ! 判断,
第二个命令是创建 backup 目录文件,
中间的 && 上面说过。
总的来说就是当 backup 目录不存在时,创建 backup 目录;当不存在时则不执行第二条命令。
不妨看下文件夹的备份状态:
ls -l -d backup

" ! " 的另一个用法就是重新运行历史命令:
!24
!!

" !! " 是重新运行上一条命令的意思。
$ 变量表达式
"$" 开头通常表示变量,下面是一些系统变量:
echo $USER
echo $HOME
echo $PATH

当然,你也可以自己定义变量然后输出:
ThisDistro=Ubuntu
MyNumber=2001
echo $ThisDistro
echo $MyNumber

我们还可以通过 "{}" 解锁更高级的玩法:
先定义一个变量 MyString 并给它赋值 123456qwerty
MyString=123456qwerty
正常输出
echo ${MyString}
加个 ":6" 返回从索引位置 6 开始的一直到最后的字符串
echo ${MyString:6}
显示从索引位置从 0 开始往后 6 个字符的字符串
echo ${MyString:0:6}
显示从索引位置从 4 开始往后 4 个字符的字符串
echo ${MyString:4:4}

引用特殊字符
说了那么多,那么就有个问题了,就是我只想在命令里面将这些特殊字符作为一般的符号显示怎么办?这种我们称之为引用,Linux 中有三种引用方法。
用双引号 "" 括起来,不过这对 "$" 无效。
echo "Today is $(date)"
用单引号 '' 括起来,停止所有特殊字符的功能。
echo 'Today is $(date)'
反斜杠 \ 转义,这在很多场合都有通用的。
echo "Today is \$(date)"

今天的科普文章有点长,大家慢慢消化哈。
看完的都是真爱,点个赞再走呗?您的「三连」就是良许持续创作的最大动力!
- 关注原创公众号「良许Linux」,第一时间获取最新Linux干货!
- 公众号后台回复【资料】【面试】【简历】获取精选一线大厂面试、自我提升、简历等资料。
- 关注我的博客:lxlinux.net
收藏 | 15 个你非了解不可的 Linux 特殊字符,妈妈再也不用担心我看不懂这些符号了!的更多相关文章
- ZT:15 个你非了解不可的 Linux 特殊字符
https://os.51cto.com/art/202003/611595.htm 不知道大家接触 Linux 系统有多久了,可曾了解过 Linux 中有哪些特殊的字符呢?其实啊,那些特殊字符都大有 ...
- openerp 经典收藏 workflow中的‘非典型’自动触发器trigger_model(转载)
workflow中的‘非典型’自动触发器trigger_model 原文:http://cn.openerp.cn/workflow%E4%B8%AD%E7%9A%84%E9%9D%9E%E5%85% ...
- 实现非管理型UPS在linux主机上的停电自动关机
买了个山特的SANTAK TG-BOX 850 UPS,自带USB通讯线缆.本以为官方软件提供Linux下的CLI命令以监控UPS状态. 官网提供的下载链接巨慢无比不说,CLI下只提供了安装脚本,没有 ...
- 非root权限的linux用法添加工作路径
修改~目录的bashrc文件: 1.cd 到~目录. 2.ls -a ,bashrc文件是隐藏的. 3.vim .bashrc;export PATH=$PAHT:要添加的工作路径. 4.source ...
- 在Termux(非root的安卓Linux模拟器)中安装和使用ftp服务器(pure-ftpd)(原创)[简单极致]
Termux是单用户的linux模拟器,所以应用的专属文件夹下面.usr/etc/下面没有passwd和group文件对多用户组配置,只在.usr/bin/下面有passwd二进制应用可以改变当前用户 ...
- python新技能get——看!源!码!
上节课一起看了一下ThreadingTCPserver和tornado的源码,真是心力交瘁...后来仔细的想了一下,看懂源码其实并不难,只是需要明确一些以前我们学习过但是却容易被忽视的概念! 再看继承 ...
- 解读socketserver源码
解读python中SocketServer源码 再看继承 真正的大餐来之前,还是来点儿开胃菜!回顾一下关于类的继承的知识: 我们先看上面的代码,这是一个简单的类继承,我们可以看到父类Base和子 ...
- fir.im Weekly - 从零开始创建 Android 新项目
今年的 Google I/O 大会上,人工智能和虚拟现实的产品发布让我们对未来多了几分惊喜.对于开发者部分,Google 发布了 Android N 系统,感受最深的是全新的 Android Stud ...
- ㊙力荐!!!那些炒鸡有用的chrome插件㊙
今天咱们来说一说那些炒鸡
随机推荐
- 5G将会是量变到质变的新科技时代
马斯洛需求分为5层,最底层的需求是温饱,过去几十年都无人反驳,但随着科技的发展,人类最基本最底层的需求已经不再是温饱,而是手机和WIFI,当然,这只是网友的调侃罢了,但也从侧面反映出了手机和WFI网 ...
- HTTP&ServletContext&Response对象_文件上传
今日内容 1. HTTP协议:响应消息 2. Response对象 3. ServletContext对象 HTTP协议 1. 请求消息:客户端发送给服务器端的数据 * 数据格式: 1. 请求行 2. ...
- cocoapods iOS类库管理工具的安装与使用
CocoaPods是一个管理Swift和Objective-C的Cocoa项目的依赖工具.他可以优雅地帮助你扩展你的项目.简单的说,就是替你管理Swift和Objective-C的Cocoa项目的第三 ...
- 爬虫(一)爬取鱼c淘贴信息
掏出了以前的小练习: 现在开始,每天复习下以前的爬虫练习,争取发现新的问题和可以优化的地方. # -*- coding:utf-8 -*- import requests import chardet ...
- 项目页面集成ckeditor富文本编辑器
步骤一.引入ckeditor.js (注:本实例以ThinkPHP3.2框架为载体,不熟悉ThinkPHP的朋友请自行补习,ckeditor文件代码内容也请去ckeditor官网自行下载) 作为程序员 ...
- swoole(6)Task异步任务
一:什么是task进程? task进程是独立与worker进程的一组进程 ,他主要处理耗时较长的业务逻辑,并且不影响worker进程处理客户端的请求.worker进程通过task()函数把数据投递到 ...
- docker 搭建本地私有仓库
1.使用registry镜像创建私有仓库 安装docker后,可以通过官方提供的 registry 镜像来简单搭建一套本地私有仓库环境: docker run -d -p : registry: 这将 ...
- Scrapy 入门教程
Scrapy 是用 Python 实现的一个为了爬取网站数据.提取结构性数据而编写的应用框架. Scrapy 常应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中. 通常我们可以很简单的通过 ...
- ajax jsonP 解决跨域问题
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- QT使用信号量QSemaphore处理大量数据
实现如下: