CENTOS学习笔记:

一、shell 脚本基础-bash变量和逻辑运行
1、 终端:附着在终端上的接口程序
GUI:KDE ,GNone,Xfce
CLI: /etc/shells
bash
zsh
fish
2、bash的特性
命令展开:~,{}
命令别名:alias,unalias
命令历史:history
文件名统配:giob
快捷键:Ctrl+a ,u ,i ,l
命令补全:$ PATH
路径补全:
3、bash特性之:命令hash
记录上次查找结果内容并缓存 key-value(键值)
命令:hash 查看hash缓存
hash -d 删除hash缓存
hash -r 清空hash缓存
4、bash特性之: 变量
(1)程序:指令+数据
指令:由程序文件提供
数据:可以通过IO设备输入、 文件输入、管道、变量
(2)程序:算法+数据结构
变量: 变量名+指向的内存空间
变量赋值:name=value
变量类型:确定存储格式,表示数据范围,参与的运算
编程语言:
强类型变量 如C
弱类型变量 如bash 把所有变量视为字符类型:不支持浮点数据 除非借助外在工具
变量中无需事先声明,相当于把声明和赋值过程同时实现。
声明:说明变量名称,说明变量类型
变量替换:把变量名出现的位置替换为其所指向的内存空间中的数据
变量引用:$ {ver_name} ,$var_name
“” :弱引用,变量名会替换为其值。
‘’ :强引用,变量名不会替换为其值
变量名:变量命只能包含数字、字母和下划线,而且不能以数字开头;
变量名:见名知意,命名机制遵循某种法则,不能使用程序保留字,如if、else,then,while等;
bash变量类型:
本地变量: 作用域范围为当前shell进程;
环境变量:作用域为对当前shell进程及子进程;
变量赋值:(1)export name=value
(2)name=value export name
环境变量查看方式 ;export,declare -x, prinitenv, env ;
局部变量:作用域仅为某代码片段;
位置参数变量:当前执行脚本的shell进程传递参数;
特殊变量 :shell内置的有特殊功能的变量;
如 $ ?: 0,表示成功 1-255,表示失败;
查看变量命令:set
撤销变量:unset name
只读变量:
(1) declaer -r name
(2)readonly name
只读变量无法重新赋值,并不支持撤销:存活时间为当前shell进程生命周期,随shell进程终止而终止;
bash特性之多命令执行:
~]#command1;command2;command3…
逻辑运算:
运算数:只有真(true,yes,on,1)
假(false,on,off,0)
逻辑运算 与:1&&1=1, 1&&0=0, 0&&1=0, 0&&0=0
或:1||1=1, 1||0=1 , 0||1=1, 0||0=0
非:!1=0 , !0=1
异或:
短路法则控制: ~]#command1&&command2,
表示,comand1为‘假’则,command2不会执行,如果command1为‘真’,则command2必须执行;
~]#command1||command2,
表示:如果command1为‘真’,则command2不会执行,如果command1为‘假’,则command2必须执行;
二、bash基础及shell编程初步
shell脚本编程:
编程语言分类:根据运行方式
编译运行:源代码–>编译器(编译)–>程序文件
解释运行:源代码–>运行时启动解释器,由解释器边解释边运行;
根据其编程过程功能实现是调用库还是调用外部的程序文件;
shell脚本编程:利用系统上的命令及编程组件进行编程;
完整编程:利用库和编程组件进行编程;
根据编程模型:面向过程式编程语言,面向对象的编程语言;
程序=指令+数据
过程式:以指令为中心来组织代码,数据服务与代码;
顺序执行
选择执行
循环执行 代表:C,bash
对象式:以数据为中心来组织带买,围绕数据来组织指令;
类(class):实例化对象,method; 代表:java,C++,Pythy
shell脚本编程:过程时编程,解释运行,依赖于外部程序文件运行;
如何写shell脚本:
脚本文件的第一行,顶格,给出shebang,解释器路径,用于指明解释执行当前脚本的解释器程序文件;
常见的解释器:
#!/bin/bash
#!/usr/bin/python
#!/usr/bin/per
文本编辑器:全屏编辑器 nano 、vi、vim 行编辑器,sed
shell脚本是什么:
各种命令的堆积,由于很多命令不具有幂等性,需要用程序逻辑来判断运行条件是否满足,以避免其运行中发生错误;
运行脚本:
(1)赋予执行权限,并直接运行此程序文件;、
chmod +x /PATHTO /SCARIPT_FILE
(2) 直接运行解释器,将脚本以命令行参数传递给解释器程序
bash /PATHTO /SCARTIPT_FILE
注意:脚本中的空白行会被解释器忽略
脚本中,除了shebang,余下所有以#开头的行都会被视作注释行而被忽略;此及为注释行;
shell脚本的运行时通过运行一个子shell进程实现的;
练习1:写一个脚本,实现如下功能;
(1)显示/etc目录下所有以大写P或小写p开头的文件或目录本身
(2)显示/var目录下所有文件或目录本身,并将显示结果中小写字母转换成为大写后显示;
(3)创建零时文件/tmp/myfile.xxx
bash的配置文件:
两类:(profele):为交互式登录进程提供配置
(bashrc):为非交互式登录进程提供配置
登录类型
(1)交互式登录shell进程:直接通过某终端输入账号密码登录打开的shell进程;
使用su命令:su - USERNAME 或者使用su - l USERNAME执行的登录切换;
(2)非交互式登录shell进程:su USERNAME执行的登录切换;
图形界面下打开的终端
运行脚本
profile类:
全局:对所有用户都生效;只有管理员可修改全局配置文件
/etc/profile ,/etc/profild.d/*.sh
用户个人:仅对当前用户有效:
~/bash/profile
功用:1、用于定义环境变量;
2、运行命令或脚本
bashrc类:
全局:etc/bashrc
个人用户:
~/.bashrc
功用:1、定义本地变量
2、定义命令别名
交互式登录shell进程读取顺序:
/etc/profile-->/etc/profile.d/*-->~/.bash.profile-->~/.bashrc-->/etc/bashrc
非交互式登录shell进程读取顺序:
~/.bashc–>/etc/bashrc–>/etc/profile.d/
.sh
命令行中定义的特使,例如变量和各种作用域为当前shell进程的生命周期;配置文件定义的特性,只对随后重新启动的shell进程有效;
让通过配置文件定义的特性立即生效方式:
(1)通过命令行重复定义一次
(2)让shell进程重读配置文件
如:~]#souce /PATH/FROM/CON_FILE 或 ~]# . /PATH/FROM/CONF.FILE
问题1:如何定义对所有用户都生效的别名,例如:ifftp=‘ftp 172.16.0.1/pub’?
问题2:让centos用户登陆时,提供其已经登陆,并显示当前系统时间?

三、文本处理工具,正则表达式与GREP
linux上文本处理三剑客:
grep、egre、fgrep:文本过滤工具
grep:基本震泽表达式, -E
egrep:扩展正则表达式,-G
fgrep:不支持正则表达式,-F
sed:流编辑器,文本编辑工具
awk:linux上的实现为gawk,文本报告生成器(格式化文本)
正则表达式:regual expression ,REGEXP
由一类特殊字符及文本字符所编写的模式,其中有些字符部表示其字面意义,而是用于表示控制或通配的功能;
分两类:
基本正则表达式:BRE
扩展正则表达式:ERE
元字符:\(hello[[:space:]]\+\)\+
grep:全称Global search regular expression an print out the line.
作用:文本搜索工具,根据用户指定的‘模式(过滤条件)’对目标文件通行进行匹配检查;打印匹配到的行;
模式:由正则表达式的元字符及文本字符所编写出的过滤条件;
正则表达式引擎:
grep [options] PATTERN [FILE]
options:
--color=auto:对匹配到的文本着色高亮显示
- i :ignorecase,忽略字符大小写;
- o :仅显示匹配到的字符串本身
- v :显示不能被模式匹配到的行,即反向显示;
- E :支持使用扩展的正则表达式;
- q :–quiet --silent静默模式,即不输出任何信息;
- a # :after 显示匹配行及后#多行;#用数字表示;
- b # :before显示匹配行及前#多行;
- c # :context,显示匹配行及前后各#多行;
基本正则表达式的元字符:
字符匹配:
. :匹配任意单个字符;
[] :匹配指定范围内的任意单个字符;
[^] : 匹配指定范围外的任意单个字符:
如: [:digit:] 所有数字,[:lower:]所有小写字母,等等;
匹配次数:用在要指定其出现的次数的字符后面,用于限制其前面的字符出现的次数:默认工作于贪婪模式;
*:匹配其前面的字符任意次;(0次1次或多次);
. * : 匹配任意长度的任意字符;
? : 匹配其前面的字符0次或1次;即其前面的字符是可有可无的;
+ :匹配其前面的字符1次或多次;即其前面的字符至少出现一次;
{m} :匹配其前面的字符m次,(m用数字替代);
{m,n} :匹配其前面的字符至少出现m次,至多出现n次(m,n 用数字替代);
{0,n} :表示至多n次;
{m,} :表示至少m次;
位置锚定:
^ :行首锚定,用于模式的最左侧;
$ :行尾锚定,用于模式的最右侧;加在条件字符右侧;
^PATTERN$ : 用于PATTERN来匹配整行;
^$ : 表示空白行;
^[[:space:]]*$ :表示空行或包含空白字符的行;
单词:非特殊字符组成的连续字符(字符串,包含数字)都为单词 ;
\< 或\b :词首锚定,用于单词模式的左侧;
\> 或\ b :词尾锚定,用于单词模式的右侧;
\<PATTERN\> : 用于精确匹配完整单词;
练习1:显示etn/passwd文件中不以/bin/bash结尾的行;
答题:grep -v "/bin/bash$" /etc/passwd
练习2:找出etc/passwd文件中的两位或三位数;
答题:grep "\<[0-9]\{2.3\}\>" /etc/passwd
练习3:找出/etc/grub2.cfg文件中,以至少一个空白字符开头,且后面非空白字符的行;
答题:grep "^[[:space:]]\+[^[:space:]]" /etc/grub2.cfg
练习4:找出“netstat -tan” 命令的结果里中以“LISTEN”后缀0,1次或多个空白字符结尾的行;
答题:netstat -tan | grep "LISTEN[[:space:]]*$"
分组及引用:
\(\) :将一个或多个字符捆绑在一起当做一个整体来处理;
如:xyab,表示匹配以ab结尾号前面的y可以出现0次或任意次数的字符串,其中星号仅匹配y;
(xy)*ab : 其中星号匹配的是“”xy“”
Note:分组括号中的模式匹配到的内容会被正则表达式引擎自动记录于内部的变量中,这些变量为:
\1:从左侧起,第一个左括号以及与之匹配的右括号之间的模式所匹配的字符;
\2:从左侧起,第二个左括号以及与之匹配的右括号之间的模式所匹配的字符;
\3:从左侧起,第三个左括号以及与之匹配的右括号之间的模式所匹配的字符;

如:grep "\(l..e\).*\1" /etc/lover.txt 表示在/etc/lover.txt中查找组1(l开头两个任意字符e)加任意字符再出现组1字符的行 ,其中\1表示第一个括号查找出来的内容
后向引用:引用前面的分组括号中的模式所匹配到的字符;
egerp:
支持扩展的正则表达式实现类似于grep文本过滤功能:grep -E
egrep [OPTIONS] PATTENS [FILES]
选项:-i ,-o, -v, -q , -A, -c ;
-G:表示支持基本正则表达式
扩展正则表达式的元字符:
字符匹配:
.:任意单个字符;
[]:指定范围内的多个字符;
[^]:指定范围外的任意单个字符;
次数匹配:
.*:匹配任意次数,0,1次或多次;
:0次或1次,其前的字符是可有可无的;
+:其前的字符至少为1一次
{m}:其前的字符m次,m用数字替代;
{m,n}:至少m次,至多n次,m,n用数字替代;
{m,0};{0,n}
位置锚定:
^:行首锚定;
$:行尾锚定;
\<,\b:词首锚定;
\>,\b:词尾锚定;
分组及引用:
():分组,括号内的模式匹配到的字符会被记录于正则表达式引擎的内部变量中;
后向引用:\1 ,\2 ,....
或 :
a|b:a 或者b 如:b|boot:表示:b或boot ; (b|B)oot:表示boot或Boot;
练习1:找出proc/meminfo 文件中,所有大写或小写s开头的行;至少有三种方法实现方式;
答题:grep -i "^[sS]" /proc/meminfo
grep "[sS] /proc/meninfo
: grep -E "^(s|S)" /proc/meninfo
练习2:显示当前系统上root、centos或user1用户的相关信息;
答题:grep -E "^(root|centos|user1)\>" /etc/passwd 注意:需要词尾锚定
练习3:找出/etc/rc.d/init.d/functions文件中某个单词后面跟一个小括号的行;
答题:grep -E "[[:alnum:]]+\(\)" /etc/rc.d/init.d/functios 注意:此时的括号需要加转义符
grep -E -o "[[:alnum:]]+\(\)" /etc/rc.d/init.d/functios 表示只显示匹配的单词本身,而不是整行
练习4:使用echo命令输出一绝对路径,使用egrep取出其名;
答题:echo /etc/fonts/conf.d | grep -E -o "[^/]+/?$"
练习5:找出ifconfig命令结果中的1-255之间的数值;
答题:ifcoifg | grep -E -o "\<[1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]\>" 注意;锚定词首词尾
练习6:找出ifconfig命令结果中的ip地址;
答题:ifconfig | grep -Eo "inet (addr:)?([0-9]*\.){3}[0-9]*" | grep -v "127.0.0.1"
练习7:添加用户bash、testbash,basher以及nologin(其shell为:/sbin/nologin)然后找出/etc/passwd文件中用户名同shell名的行;
答题:1、useradd bash; userad testbash; useradd basher; useradd -s /sbin/nologin nologin 创建用户
2、 grep -E "^([^:].*\>).*\1$" /etc/passwd
fgrep:不支持正则表达式,当无需用到元字符去编写模式时,使fgrep 性能更好:
文本查看及处理工具的命令:wc ,cut , sort , uniq ,diff ,patch ;
wc:word count 单词统计;
格式:wc [option].... [files].......
-l:lines
-w:words
-c:bytes
cut:从文件中的每行中移除sections片段,文本截取工具;
格式:cut [option]...[files]......
-d CHAR:以指定的字符为分隔符;
-f FIELDS:挑选出的字段;
#:制定的单个字段;#号用数字替代;
#-#:连续的多个字段;
#,#:离散的多个字段;
sort: 文本排序工具
格式:sort [option]...[files]......
-t CHAR:指定字段分隔符;
-n :基于数值大小进行排序;
-k #:用于排序比较的字段;
-r :逆序进行排序;
-u:重复的行只保留一份;重复行:指连续且相同;
uniq:报告或移除重复的行;
命令: cut -d: -f7 /etc/passwd | sort | uniq -c 统计重复出现次数的行数;
-c:显示每行的重复次数;
-u:仅显示未曾重复过的行;
-d :仅显示重复过的行;
diff:逐行比较文件中的内容;可结合patch命令进行打补丁,
格式:diff /PATH/TO/OLDFILE /PATH/TO /NEWFILE >/PATH/TO /PATCH_FILE
例如:root~#cp /etc/fstab fstab.new#复制一个新文件
# root~#nano fstab.new#编辑新文件;
# root~# 插入一行内容,保存退出;
# root~#diff /etc/fstab fstab.new#比较两个文件;
# root~#diff /etc/fstab tstab.new >fstab.patch#生成补丁文件
# root~#cp fstab.patch /etc/#将补丁文件复制到需要打补丁文件的目录下;
# root~etc#patch -i fstab.patch fstab#向老文件打补丁;注意只能在同意目录下运行
# root~etc#patch -R -i fstab.patch fstab#还原补丁

  -u:即显示要修改的行的上下行,默认为3行;patch:向文件打补丁格式:`patch [options] -i /PATH/TO/PATCH_FILE /PATCH/TO/OLDFILE`

格式:patch /PATH/TO/OLEDFILE < /PATH/TO/PATH_FILE使用输入重定向`;

-R: 逆向补丁,即还原打补丁过程;

练习1:取出ifconfig wlx488ad239deda 命令结果中的IP地址;
答题:
vim编辑器
文本:纯文本: ASCII text: :Unicode:
文本编辑器种类:
行编辑器:sed
全屏编辑器:nano,vi,vim
vim: 模式化的编辑器,
基本常用模式:
编辑模式,命令模式;
输入模式,插入模式;
末行模式:内置的命令行接口
打开文件:

vim [option] [FILE…]
+#:打开文件后直接让光标处于第#行首;
+/PATTERN:打开文件后,直接让光标处于第一个被PATTERN匹配到的行首;
模式转换:
编辑模式:默认模式
编辑模式–>输入模式:
i : insert,在光标所在处输入;
a:append,在光标所在处后方输入;
o:在光标所在处下方打开一个新行;
I:在光标所在行的行首输入;
A:在光标所在行的行尾输入;
O:在光标所在的上方打开一个新行;
输入模式–>编辑模式:
键入“ESC“”即可;
编辑模式–>末行模式:
键入 “:”即可
末行模式–>编辑模式 :
连续两次键入"ESC" 即可;
关闭文件:
ZZ:保存并退出 (编辑模式下)
:q :退出()
:q!:强制退出,不保存;
:wq :保存并退出;
:x:保存并退出;
:w /patch/to/file:做的修改另存为 ;
光标跳转:
字符间跳转:
h←j↓k↑l→
单词间跳转:
w:跳到下一个单词的词首;
b:当前或前一个单词的词首;
e:当前或后一个单词的词尾;
行首行尾跳转:
^:跳转至行首的第一个非空白字符;
0:跳转至绝对行首;
KaTeX parse error: Expected 'EOF', got '#' at position 69: … #̲G:跳转至由#指定的行, … :删除光标后至行尾的行字符
d^ :删除光标前至行首的字符
dd :删除光标所在的整行
#dd:删除光标所在处的行起始的共#行;
粘贴命令:
p:缓存区中的内容如果为整行则粘贴在当前光标所在行的下方;否则,则粘贴至当前光标处的后方;
P:缓存区中的内容如果为整行则粘贴在当前光标所在行的上方;否则,则粘贴至当前光标处的前方
复制命令:
y:复制,工作行为相识于d命令;
yKaTeX parse error: Expected 'EOF', got '#' at position 339: … #̲yy:复制#行 …:
c^
c0
cb
ce
cw
#COMMAND
cc:删除整行;
可视化模式:
v:按字符选定
V:按行选定
结合编辑命令使用(d,c,y)
撤销操作:
u:撤销此前的操作;
#u:撤销此前的#次操作,
回复此前的撤销操作:
Ctrl+r
vim自带练习教程:
vimtutor
vim末行模式:
内建的命令行接口:
(1)地址定界
:start_pos[,end_pos]
. :表示当前行
$:表示最后一行;
#:特定的第#行,例如5即第5行;
#,#:指定行范围,左侧为起始行;右侧为结束行;
#,+#:指定行范围,左侧为起始行绝对编号,右侧为相对左侧行号的偏移量;例如:3,+7
%:表示全文;
/PATTENR/:从光标所在处起始,第一次被模式匹配到的行;
/pat1/pat2/:从光标所在处起始,第pat1匹配开始到第pat2匹配处结束,可能编辑命令一同使用完成复杂操作:d,y,c , w/patch/to/file:将框定内容另存为。
r /patch/to/file:将制定文件中的文本插入至制定位置;常用于文件合并;
(2)查找:
/PATTERN:从当前光标所在处向文件尾部能够被当前模式匹配到的所有字符串;
?PATTERN:从当前光标所在处向文件首部能够被当前模式匹配到的所有字符串;
n:下一个,与命令方向相同;
N:下一个,与命令方向相同;
(3)查找并替换:
s:末行模式命令;
s/要查找的内容/替换为的内容/修饰符;
注意:要查找的内容可以使用正则表达式;
要替换的内容不能使用正则表达式,但可以引用:
1、如果要查找的内容部分在模式中使用了分组符号,可在“替换中的内容”中使用后向引用;
2、直接引用查找模式匹配到的全部文本;要使用&符号;
修饰符:
i:查找忽略大小写;
g:全局替换,意味着一行中;
可把分隔符替换成为其非常用字符;
s@@@ s####
示例:1 %s@\<t\([[:alpha:]]\+\)\>@Tg:表示将文件中所有t开头的单词转换为T开头;
2 %s@\<t[[:alpha:]]\+\>@&er@g表示将文中所有t开头的单词尾部加上er
练习1:复制/etc/grub2.cfg文件至/tmp目录中,用查找提换命令删除/tmp/grub2.cfg文件中以空白字符开头的行的行首空白字符;
答题:%s@^[[:space:]]\+@@g
练习2:复制/etc/rc.d/init.d/functions文件至/tmp/目录中,用查找替换命令为/tmp/functions文件的每个以空白字符开头的行首上加#
答题:%s@^[[:space:]]@#@g
练习3:为/tmp/grup2.cfg文件的前三行的行首加上#号;
答题::1,3s/^/#/g
练习3:将/etc/yum.repos.d/CentOs-Base.repo文件中所有的enabled=0替换为enabled=1,所有gpgcheck=0替换为gpgcheck=1;
答题:%s@(enabled|gppgcheck)=0@\1=1@g
vim多文件功能:
vim file1 file2 fiel3…
末行模式下文件间切换:
:next 下一个;
:prev 上一个;
:first 第一个;
:laset 最后一个;
退出所有文件:
:wqall 退出并保存所有文件;
:wall ;qll
多窗口:
-o :水平分割窗口
-O:垂直分割窗口
定制vim的工作特性:

注意,在末行模式下的设定,仅对当前vim进程有效,全局有效需要配置文件
全局配置文件/etc/vimrc, 用户个人:~/.vimrc(仅对当前用户有效)

                     1、行号显示 :set number,简写:set nu;2、取消行号显示:set nomber, 简写: set nonu;3、自动缩进:set ai  ;取消:set noai;4、高亮搜索结果:set hisearch;  取消:set nohisearch5、语法高亮:syntax on;  取消 :syntaxno6、忽略字符大小写:set ic; 取消:set noic

作业:如何设置tab键缩进4个字符?
答题:

bash脚本编程之算术运算

+,-,*,、,**,%算数运算格式:(1)let var=算数运算表达式  var:指变量,条件和结果都需要赋值为变量;(2)var=$[算数运算表达式];结果可以不赋值为变量;(3)var=$((算数运算表达式));结果可以不赋值为变量;注意:乘法符号*在有些场景中需要使用转义符\

练习:写个脚本,完成如下功能:
添加三个用户;求此三个用户的UID之和。

答题: #!/bin/bashuseradd user1 & useradd user & &useradd user3id1=$(id -u user1)id2=${id -u user2)id3=$(id -u user3)echo "${id1},${id2},${id3}"sumID=$[id1+id2+id3}echo "The sumUID:${sumID} "

文件查找
文件查找命令:locate、find
在文件系统上查找符合条件的文件:
locate:依赖于实现构建好的索引库;
系统自动实现(周期性任务计划)
手动更新数据库(命令:updatedb)
工作特性:
查找速度快;
模糊查找:
非实时查找:
格式:locate [option]...PATTERN
-b :只匹配路径中的基名所包含的;
-c :统计出共有多少个符合条件的文件;
-r :BRE ,使用PATTERN 正则表达式;
注意:索引构建过程需要遍历整个文件系统,需要消耗很多资源;
find:实时查找工具,通过遍历指定起始路径下文件系统层级结构完成查找;
工作特性:
查找速度慢;
实时查找;
精确查找
格式:find [option] [查找起始路径] [查找条件] [指明动作]
查找起始路径:指定起具体搜索目标起始路径:默认为当前目录;
查找条件:是指定的查找标准,可以根据文件名、大小、从属关系、权限等等;默认为找出指定路径下的所有文件;
处理动作:是指 对符合查找条件的文件做出操作,例如删除等操作:默认为输出至标准输出;

查找标准:
表达式:选项和测试;
测试:结果同长为布尔型(要么true,要么false)
根据文件名查找:
-name PATTERN;(支持glob风格的通配符*,?,[],[^]),,精确查找
-iname ;部区分大小写查找;
-user ;查找属主指定用户的所有文件;
-group ;查找属组为指定组的所有文件;
-uid UID ;查找属主指定uid的所有文件;
-gid GID ;查找属组指定 gid的所有文件;
-nouser ;查找没有属主的文件;
-nogroup ;查找没有属组的文件
根据文件类型查找:-type TYPE
f:普通文件;
d:目录文件;
l :符号链接文件;
b:块设备文件;
c:字符设备文件;
p:管道文件;
s:套接字文件;
组合测试:
与:-a(两个条件同时满足)默认组合逻辑;
或:-o(二者满足其f一即可);
非:-not !取满足条件的反向;
练习1:找出/tmp目录下属主为非root的所有文件;
答题:find /tmp -not -user root -ls
练习2:找出/tmp目录下文件名中不包含fstab字符串的文件;
答题:find /tmp -no -iname "*fstab*" -ls
练习3:找出/tmp目录下属主为非root,而且文件名不包含fstab字符串的文件;
答题:find /tmp -not -user root -a -no -iname "*fstab*" -ls或者find /tmp -not \(-user root -o -iname "*fstab*"\) -ls
!A -a!B=!(A-oB) :非A且非B=非(A并B);
!A-o!B=!(A-aB):非A并非B=非(A且B);
根据文件大小来查找:
-size [+|-] #UNIT 常用单位:k, M, G
#UNIT:(#-1,#):表示#本身和#-1之间的区间范围;
-#UNIT:(0,#-1) :表示小于#-1并大于0之间的范围;
+#UNIT:(#,…):表示大于#与无穷大之间的范围 ;
根据时间戳来查找:
一天为单位:
-atime,访问时间;[+|-]#
-mtime;修改时间
-ctime;改变时间
根据权限查找:
-perm;[/|-]mode;
mode:精确权限匹配;如:655
/mdoe:任何一类用户(u,g,o)的权限的任何一位(r,w,x)符合条件即满足; [或关系]
-mode:每一类用户(u,g,o)的权限中任何一位(r,w,x)同时符合条件即满足;[与关系]
例如:find ./ -perm -222 -ls 表示:所有用户都有写权限
处理动作:
-print:输出至标准输出,默认动作;
-ls :类似于对查找到的文件执行"ls-l"命令,输出文件详细信息;
-delete:删除查找到的文件;
-fls /patch/to/somefile:把查找到的所有问价的长格式信息保存至制定文件中;
-ok COMAND {} ; :对查找到的每个文件执行由COMMAND表示的命令;
例如:find ./ -nouse -o -nogroup -ok chown root:root {} ;
当前目录下查找没有属主和属组的文件将其属组属主该为root
-exec COMMAND {} ; :对查找到的每个文件执行由COMMAND表示的命令,无需用户确认;
注意:find命令传递查找到的文件路径至后面命令时,时先查找出素有符合内容的文件路径,并一次性传递给后面的命令;但是有些命令不能接受过长的参数,导致命令执行失败;另一种方式可规避此问题;
find |xargs COMMAD

练习1:查找/var目录下属主为root,且属组为mail的所有文件后目录;
答题:find /var -user root -a -group mail -ls
练习2:查找/usr目录下不属于root,bin或hadoop的所有文件或目录,用两种方法;
答题:find /usr -not -usesr root -a -not -user bin -a -not -user hadoop或者:find /usr -not \( -user root -o -user bin -o -user hadoop \) -ls注意:括号内要插入转义符,括号内要以空格开头和空格结尾;
练习3:查找/etc目录下最近一周内其内容修改过,且属主不是root用户也不是hadoop用户的文件或目录;
答题:find /etc -mtime -7 -not \( -user root -o -user hadoop \) -ls
练习4:查找当前系统上没有属主或属组,且最近一周内被访问过的文件或目录;
答题:find / \( -nouser -o -nogroup \) -a -atime -7 -ls
练习5:查找/etc目录下大于1M且类型为普通文件的所有文件;
答题:find /etc -size +1M -a -type f
练习6:查找/etc目录下所有用户都没有写权限的文件;
答题:find /etc -not -perm /222 -type f -ls
练习7:查找/etc目录下至少有 一类用户没有执行权限的文件;
答题:find /etc -not -perm -111 -type f -ls
练习8:查找/etc/init.d目录下,所有用户都有执行权限,且其他用户有写权限的所有文件;
答题:find /etc/init.d -perm -111 -a -perm -002 -type f -ls 或find /etc/init.d -perm -113 -type f

linux系统的特殊权限
特殊权限,SUID ,SGID ,STICKY
安全上下文:
1、进程以某用户的身份运行,进程是发起此进程的代理,因此以此用户的身份和权限完成所有操作;
2、权限匹配模型:
(1)判断进程的属主,是否为被访问文件的属主,如果是,则应用属主的权限,否则进入第二步;
(2)判断进程的属组,是否为被访问文件的属于组,如果是,则应用属组的权限,否则进入第三步;
(3)应用other的权限;
SUID:
默认情况下,用户发起的进程,进程的属主是其发起者,因此,其以其发起者的身份运行;
SUID的功用:用户运行某程序是,如果此程序拥有SUID权限,那么此程序运行为进程时,其进程属主不是发起者而是程序文件自己的属主;
管理文件的SUID权限:
chmod u+|-s Files
展示位置:属主的执行权限位,如果属主原本有执行权限,显示为小写,否则显示为大写;
SGID:
管理文件的SUID权限:
chmod g+|-s Files
功用:当目录属组有写权限,且有SGID权限时,那么所有属于此目录的属组,且以属组身份在此目录中新建文件或目录时,新文件的属组不是基本组,而是此目录的属组;
展示位置:属组的执行权限位;如果属组原本有执行权限,显示为小写s,否则显示为大写S
sticky:
管理文件的SUID权限:
chmod o+|-t Files
功用:对于属组或全局可写的目录,组内的所有用户或系统上的所有用户对在此目录中都能创建新文件或删除所有的已有文件;如果为此类目录设置sticky权限,则每个用户能创建新文件,且只能删除自己的文件;
展示位置:属组的执行权限位;如果属组原本有执行权限,显示为小写t,否则显示为大写T
系统上的/tmp和/var/tmp目录默认都有sticky权限
管理特殊权限的另一种方式:
SUID:SGID:STICKY
000 ~ 0
001 ~ 1
010 ~ 2
011 ~ 3
100 ~ 4
101 ~ 5
110 ~ 6 基于八进制方式赋权时,可与默认3位8进制数字左侧再加一位,
111 ~ 7 例如:chmod 1777 1表示sticky权限
facl: 文件访问控制列表; 文件的额外赋权机制;
在原有的或新增的UGO权限外,另一层让普通用户能控制赋权给另外的用户或组的机制;
getfacl file 查看文件的权限列表
setfacl -m u:USERNAME:MODE file 赋权给用户
setfacl -m g:GROUPNAME:MODE file 赋权给组
setfacl -x u:USERNAME:MODE file 撤销赋权给用户
setfacl -x g:GROUPNAME:MODE file 撤销赋权给组


Centos学习笔记相关推荐

  1. Linux(CentOS)学习笔记

    Linux (CentOS 7)笔记 1. Linux 目录的作用 目录名 目录作用 /bin 存放系统命令的目录, 普通用户和超级用户都可以执行. 不过放在/bin下的命令在单用户模式下也可以执行. ...

  2. Centos学习笔记之grep命令

    定下学习Linux系统的目标也有段时间了,现在cto学院上一直跟Linux运维工程师职业学习路线图 来学习,基础比较薄弱加上现在的工作用不到所以进度比较慢,昨天跟着马哥的视频学到了grep命令,他的学 ...

  3. CentOS学习笔记--目录配置

    Linux目录配置 类Linux的目录看上去差不多,为什么? 以下内容节选自l 鸟哥的 Linux 私房菜 -- 基础学习篇目录  第六章.Linux 的文件权限与目录配置 3. Linux目录配置 ...

  4. CentOS学习笔记--程序管理

    程序管理 一个程序被加载到内存当中运行,那么在内存内的那个数据就被称为程序(process).程序是操作系统上非常重要的概念, 所有系统上面跑的数据都会以程序的型态存在.那么系统的程序有哪些状态?不同 ...

  5. CentOS学习笔记 - 9. docker maven编译基于gofabric8的java应用镜像

    2019独角兽企业重金招聘Python工程师标准>>> 续上一篇 1. 修改java工程的pom.xml , 加入docker编译插件 <plugin><group ...

  6. CentOS学习笔记 - 4. 修改端口和禁止root登录

    2019独角兽企业重金招聘Python工程师标准>>> 小技巧 改变密码和端口等配置后,不要退出当前终端. 可以新开一个终端连接一下,防止误操作不能登录,无法恢复. 修改root密码 ...

  7. CentOS学习笔记 - 7. jekins安装

    2019独角兽企业重金招聘Python工程师标准>>> jekins安装 jekins你可以下载个war包直接运行,但是还是把它装成服务会更方便点. 1. 添加稳定版本的repo s ...

  8. CentOS学习笔记(一):中文语言包及输入法的安装使用

    1.中文语言包安装 命令行执行: yum install fonts-chinese yum install fonts-ISO8859-2 2.切换成中文语言 菜单->System->A ...

  9. CentOS学习笔记 - 7. jekins安装 1

    jekins安装 jekins你可以下载个war包直接运行,但是还是把它装成服务会更方便点. 1. 添加稳定版本的repo sudo wget -O /etc/yum.repos.d/jenkins. ...

最新文章

  1. easyui源码翻译1.32--Messager(消息窗口)
  2. 软件工程 团队博客分数 (第一阶段)
  3. android shareUID
  4. CSU 1115 最短的名字
  5. mysql windows 乱码问题_MySQL:windows中困扰着我们的中文乱码问题
  6. Java垂直镜像,Java OpenCV实现图像镜像翻转效果
  7. 了解计算机中的信息编码教案,《信息编码》教学设计
  8. 属性数量限制android,Android开发笔记 今天学到的一些属性
  9. Webkit推出新的着色语言whlsl
  10. matlab figure 窗口最大化
  11. “阿里云核心竞争力”峰会首日中奖小伙伴名单公布!机械键盘等豪礼下午继续放出!...
  12. 【JavaMailWeb】用户注册通过邮箱激活案例
  13. eclipse默认指向 WebContent 目录 修改为 webRoot
  14. 计算机考试多少个小时,考驾照科一电脑刷几个小时
  15. 5G、AI、物联网、AR、VR入围2019年度十大科技热词
  16. 计算机二级access通过技巧,2017年计算机二级Access应试技巧
  17. 鸿蒙Ability(一):Feature Ability的Page Ability模板
  18. 模拟器录制视频 小技巧
  19. 广工anyview数据结构第四章(2021.12)
  20. 鸿蒙系统电池省电吗,鸿蒙系统+5850超大电池华为mate40,华为mate30前辈彻底感人价...

热门文章

  1. element el-time-picker 时间段动态禁用 禁用时间段
  2. APP开发流程实例讲解-儒释道网络电台八天开发全程-在Android Studio中完成界面设计
  3. android开发c s架构,【开源】基于C/S架构的Android员工增删改查客户端
  4. 《网络¥安全联盟站》——星球周报
  5. 人工智能:未来人工智能的发展趋势是怎样的?
  6. 疫情之下,你想过自己做视频或者音频播主吗?
  7. appium -ios 真机连接 环境搭建
  8. 学成在线笔记+踩坑(5)——【媒资模块】上传视频,断点续传
  9. 获取公网、局域网、以及根据ip地址找城市
  10. Thingsboard规则引擎详解,TB规则引擎如何使用