linux系统符号说明
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux系统符号说明相关的知识,希望对你有一定的参考价值。
参考技术A 01 系统特殊符号02 系统通配符号
03 系统正则符号
说明: 查询信息的时候,会带来便利
1) 基础符号系列
$
a 调取变量信息
b 区分用户类型 $ 普通用户
c 结合awk对文件进行取列
xargs -n 2 <test01.txt|awk 'print $2'
!
a 强制的作用 wq!
b 可以实现取反
awk '!/oldgirl/' test02.txt (排除oldgirl)
find /oldboy_dir/ ! -type f (排除文件)
c !信息 可以快速调取执行历史命令(慎用)
cat ~/.bash_history -- 记录历史命令信息, 但是不会实时记录
history -- 显示所有输入过的历史命令
|
a 实现管道功能
将前一个命令执行的结果交给管道后面的命令进行处理
一般管道符号 会经常和xargs命令配合使用
批量删除操作
find /oldboy -type f -name "oldboy*.txt"|xargs rm
find /oldboy_dir/ -type f -delete
find /oldboy_dir/ -type f -exec rm -f \;
查找指定数据信息进行复制
find /oldboy -type f -name "oldboy*.txt" |xargs -i cp /oldgirl/
find /oldboy -type f -name "oldboy*.txt" |xargs cp -t /oldgirl/
find /oldboy -type f -name "oldboy*.txt" -exec cp -a /oldgirl \;
查找指定数据信息进行移动
find /oldboy -type f -name "oldboy*.txt" |xargs -i mv /oldgirl/
find /oldboy -type f -name "oldboy*.txt" |xargs mv -t /oldgirl/
find /oldboy -type f -name "oldboy*.txt" -exec mv /oldgirl \;
xargs(火眼金睛)后面跟的命令,不识别别名信息
#
a 表示对配置文件信息进行注释
b 表示用户的身份信息 超级管理员用户
2) 引号符号系列
"" 基本上和单引号功能类似 但是可以对一些特殊符号做出解析 $ `命令`==$(命令)
'' 里面编写的什么内容就输出什么内容 所见即所得
作用:
01. 指定需要输出的信息
02. 利用引号将空格分隔的信息汇总为一个整体
``($()) 将引号里面命令执行结果,交给引号外面命令进行使用
3) 重定向符号
>/1> 标准输出重定向符号
>>/1>> 标准输出追加重定向符号
2> 错误输出重定向符号
2>> 错误输出追加重定向符号
< 标准输入重定向符号
tr xargs
<< 标准输入追加重定向符号
4) 逻辑符号系列
逻辑: 在完成一件事情的时候,有合理先后顺序
&& 前一个命令操作执行成功了,再操作执行后面的命令
|| 前一个命令操作执行失败了,再操作执行后面的命令
mkdir /old_dir && echo "create dir sucess" || echo "create dir failed"
create dir sucess
mkdi /old_dir && echo "create dir sucess" || echo "create dir failed"
-bash: mkdi: command not found
create dir failed
什么通配符号: 用于匹配文件名称信息, 便于快速查找文件信息 find
* 匹配所有信息
find /oldboy -type f -name "oldboy*" ---以oldboy开头的信息都查询出来
find /oldboy -type f -name "*oldboy" ---以oldboy开头的信息都查询出来
find /oldboy -type f -name "oldgirl*oldboy"
---以oldgirl 开头的信息
以oldboy 结尾的信息都查询出来
产生序列信息
连续序列:
echo 01..05
echo a..z
echo A..Z
生成不连续序列
a 有规律的不连续序列
echo 01..05..2
01 03 05
echo a..z..2
b 没规律的不连续序列
echo www,bbs,blog
www bbs blog
生成组合序列
echo 1,2a,b
1a 1b 2a 2b
echo 1,2a,bA,B
1aA 1aB 1bA 1bB 2aA 2aB 2bA 2bB
echo Aa,b
Aa Ab
A=oldboy.txt
echo oldboy.txta,b
oldboy.txta oldboy.txtb
echo A,b
A Ab
A=oldboy.txt
b=.bak
cp oldboy.txt,.bak == cp oldboy.txt oldboy.txt.bak
快速备份文件命令
cp oldboy.txt,.bak
快速还原数据方法
cp oldboy.txt.bak,
echo AB,
AB A
oldboy.txt.bak, == cp oldboy.txt.bak oldboy.txt
基础正则符号:basic regular expression (BRE)
扩展正则符号:extended regular expression (ERE)
基础正则符号:
a 尖角符号:^
以什么开头的信息进行过滤出来
grep -v "^#" nginx.conf.default >nginx.conf(对不需要关注的信息取反)
常见错误
find / -type f -name "^oldboy" 错误
find / -type f -name "oldboy*" 正确
b 美元符号:$
以什么结尾的信息进行过滤出来
以m结尾信息, 并且显示上1行 和 下2行的信息
grep "m$" -A 2 -B 1 test.txt
常见错误:
如果过滤不出来,确认每行结尾是否有空格信息
方法一:
cat -A test.txt
方法二
vim 底行模式输入命令 --- :set list
c 尖角美元符号:^$
取出文件中空行信息
grep "^$" test.txt
grep -v "^$" test.txt
d 点符号: .
表示匹配任意一个且只有一个字符
grep "." test.txt -o(更直观的显示过程)
e 星号符号: *
匹配星号前面一个字符连续出现0次或多次
f 点和星号组合: .*
匹配所有信息
说明: 正则符号在匹配数据信息的时候具有贪婪特性
避免贪婪特性的方法,是在指定一行信息中唯一节点信息
g 转译符号: \
1) 将一些有意义的符号进行转译, 变为一个普通符号
grep "\.$" ~/oldboy_test.txt
2) 将一些没有意义的符号进行转译,变为有意义符号
\n 换行符号 linux
3) 可以将扩展正则符号转换成普通正则让grep sed命令可以直接识别'
grep "o\?" test.txt
h 括号符号:[]
匹配括号中每一个字符,并且匹配的关系是或者的关系
需求: 找出文件中oldboy 和 oldbey两个单词信息
grep "oldb[oe]y" test.txt
企业应用: 找寻文件中字母 数字信息
grep "[0-9a-zA-Z]" test.txt
i 尖号和中括号组合使用 : [^]
对中括号里面匹配的字符信息进行排除
grep "[^0-9a-zA-Z]" test.txt --- 将字母数字都排除,只留下符号信息
尖号和中括号组合使用 : ^[]
以中括号里面匹配的字符作为一行开头的字符
grep "^[zx]" test.txt
正则符号注意事项
按照每行信息进行过滤处理
注意正则表达符号禁止中文
附上颜色信息进行正则过滤 --color=auto/--color
基础正则符号可以被三剑客命令直接识别 grep sed awk
扩展正则符号不可以被三剑客命令中老二和老三直接识别
sed命令想识别正则符号: sed -r
grep命令想识别正则符号: egrep / grep -E
a 加号符号:+
匹配加号前面一个字符连续出现1次或者多次
b 竖线符号:|
或者关系符号
egrep "oldboy|oldbey" test.txt
c 括号符号:()
将多个字符信息进行汇总为一个整体
egrep "(oldboy)" test.txt
进行后向引用前向的一个操作(sed)
echo "123456"|sed -r "s#(..)(..)(..)#<\1><\2><\3>#g"
修改配置文件内容
sed -rn "s#(^S.*UX=).*#\1enforcing#gp" /etc/selinux/config
SELINUX=enforcing
d 括号符号:
指定花扩号前一个字符连续匹配多少次
* 连续匹配 0 次 或 多次
+ 连续匹配 1 次 或 多次
1) n,m n表示最少连续匹配多少次 m表示最多连续匹配多少次
2) n n表示只连续匹配n次
3) n, n表示至少连续匹配n次,至多没有限制
4) ,m m表示至多连续匹配n次,至少0次
e 问号符号:?
表示匹配问号前面一个字符出现0次或者1次
深入理解unix中的普通链接与符号链接
概述
在 unix/linux
的使用过程中不可避免的要使用 ln
命令,可以说文件链接是 unix
的一大特色。但是要说清楚 ln
命令具体是怎么回事,我们避免要结合 unix
的文件系统的来加以说明。好,闲话稍许,我们下边开始。
unix 中的文件系统
unix
支持的文件系统有多种,为了便于说明我们针对其主流的文件系统 ext4
来加以说明,首先 ext4
是是 linux
中第四代日志文件系统,其结构示意图如下图所示:
ext4
文件系统会把分区主要分为两大部分(暂时不提超级块):小部分用于保存文件的 inode
信息;剩余的大部分用于保存 block 信息。
inode
的默认大小为 128 Byte,用来记录文件的权限(r、w、x)、文件的所有者和属组、文件的大小、文件的状态改变时间(ctime)、文件的最近一次读取时间(atime)、文件的最近一次修改时间(mtime)、文件的数据真正保存的 block 编号等静态参数。每个文件需要占用一个 inode
。大家如果仔细查看,就会发现 inode
中是不记录文件名的,那是因为文件名记录在文件所在目录的 block 中。
block
的大小可以是 1KB、2KB、4KB,默认为 4KB。block
用于实际的数据存储,如果一个 block
放不下数据,则可以占用多个 block
。例如,有一个 10KB 的文件需要存储,则会占用 3 个 block
,虽然最后一个 block
不能占满,但也不能再放入其他文件的数据。这 3 个 block
有可能是连续的,也有可能是分散的。
当然上边描述了一大段对我们来说我们可以提取到以下两个关键信息:
- 每个文件都独自占用一个
inode
,文件内容由inode
的记录来指向其对应的block块
; - 如果想要读取文件内容,就必须借助目录中记录的文件名找到该文件的
inode
,才能成功找到文件内容所在的block 块
;
文件链接的原理
了解到上边两个关键信息后,我们接下来便可以详细说说 ln
命令其具体的原理和作用。
首先 ln
命令是用于建立 文件链接
,根据建立链接的底层实现不同我们可以将链接分为两类:
- 普通链接:又叫做硬链接,链接是直接指向
inode节点
的; - 字符链接:又叫做软链接,链接指向的是一个描述文件的“符号”
普通链接
普通链接本质上,可以理解不同的文件名指向同样的 inode,文件事实上只有一份。其整个结构可以结合下边的图来进行理解。
- 一个文件可有多个名字,多个名字都对应同一个文件节点,每个名字就是该文件节点的一个链结;
- 一个普通文件的名字个数,就是该文件的链结数;每个链接名可以放在不同的目录下(同一个文件下)
- 系统删除一个链接名时,文件链接数减一。如链接数不为零,则文件(节点)仍然存在。
结合上边的特点,我们可以发现普通链接有如下好处:
- 方便用户的使用习惯,如“列目录”,可用 ls、dir、 list、lc 等;
- 误删文件时可补救,又不多占空间。abc 和 xyz 具有相同的 i 结点号;
- 减少移植应用程序时,因使用指定位置的文件,而拷贝该文件到指定位置去的麻烦。
创建一个普通链接我们可以使用如下命令
ln 源文件 目标文件
符号链接
符号链接
,我们又称之为 软链接
,其本质上它是目录里的一种特殊项目,用来告诉系统实际文件的位置。类似于 windows 操作系统上边的快捷方式。其结构我们可以结合下图来进行理解。
- 给文件的名字再取一个名字,而不是给文件节点再取个名字。
- 链接的是“符号”而不是文件,因此“符号”可以是不存在的文件,即无意义的字符串。
- abc 和 xyz 具有不同的 inode 号,xyz 的内容是它所指向的名字的字符串,大小是字符串长度为 3 字节
- “普通链结”中各名字必须在同一文件系统中,“符号链结”可在不同的文件系统中。
创建一个符号链接我们可以多加上一个 -s
参数,使用如下命令来进行创建
ln -s 源文件 目标文件
总结
最后,我们对 普通链接
和 符号链接
来做一个简单的总结:
普通链接是直接对 inode 节点进行链接,在使用链接文件时直接可以找到 inode 节点上,而符号链接则是将链接指向了一个指向 inode 节点的符号,使用时先要找到该符号文件,然后通过该文件进一步找到 inode 节点。(有点类似于间接寻址的感觉)
以上是关于linux系统符号说明的主要内容,如果未能解决你的问题,请参考以下文章