您的位置:首页 > 运维架构 > Shell

Linux 20150830学习整理 VIM、FIND、bash环境、特殊权限

2015-09-03 14:38 393 查看
第一部分 VIM文本编辑器只针对ASCII码,字处理器1、种类:简单编辑器 nano:是全屏模式vi:visual interface 全屏文本编辑器,模式化的编辑器VIM是vi的增强版本有高量、语法着色显示等功能2、VI工作模式编辑模式:VI默认工作模式(也称为命令模式)输入模式:输入字符内容末行模式:在屏幕最后一行,可以编辑文件和其它额外操作。内嵌命令行接口 以冒号" : "可输入命令工作模式切换编辑模式----> 输入模式用以下快捷键小写i insert光标前插入大写I 当前光标所在行首插入小写a append 当前光标后大写A 当前光标所在行尾插入小写o 新行,当前光标所在行下一行新建一行大写O 当前光标上一行接入新行大写L 最后一行行首输入模式---->返回编辑模式 esc键编辑模式--->末行模式 ,冒号 : 可输入相关命令末行模式----》编辑模式 一次esc 2-3秒延时 二次esc快速无法直接从编辑进行末行模式 ,需要先使用esc退出3、编辑操作A:打开文件定位光标类#VIM /path/to/somefile 要求文件前的目录存在,如果文件不存在将新建文件vim [options] [file ..]vim [options] -vim [options] -t tagvim [options] -q [errorfile]+# :#号为行号 vi +10 bash1.txt 表示编辑bash1的第10行+/PATTENR : 定位到第一次匹配的行首 vim +/UUID /etc/fstab+ 表示最后一行行首B:退出、关闭文件类一般在编辑和模式下进行末行模式 w为保存 q为退出(不保存模式):q 退出:q! 强行不保存退出:wq 保存退出:w! 管理员强行保存:x 保存退出编辑模式:ctrl+ZZ 保存并退出C:光标跳转类字符间跳转h 左一个字符 l 右一个字符j 向下一行(与上行字符所在光标位置对齐)K向上一行 (与上行字符所在光标位置对齐)#jklh 移动#个字符可加数据3k,6j等 ,一次跳转n个字符或几行单词跳转备注:(不包括特殊字符,字母与数字),连续的字符示为一个单词w 后单词词首 e 当前或后一个单词词尾 b 前一个单词词首以上支持与数据结合3#示例:#W 3W往后跳几个单词行内跳转^ 跳转至行首的每一行非空白字符0 跳行首,绝对行道,包括空白字符$ 跳行尾行间移动#G 跳转到#行 1G行道 例如直接3G为第三行只有G为最后一行,行首在末行模式直接输入行号回车即可 :# :5 跳转至第5行句间移动)跳转至后一句句首(跳转前一句句首段落间移动{ 段首} 段尾D:编辑类指令字符编辑x 表示删除光标所在处字符 #X 删除光标指定后#的字符如4xxp: 与后一个字符光标对调字符替换只能够替换单个字符r+替换后的字符 替换光标所在处的字符大写R替换模式,可直接替换多个字符例如rz 将当前光标字符替换为z4rz 将当前光标后4字符替换z删除命令:可与光标跳转配合,删除之间的字符d后面加上指定位置删除多少 #d跳转符d^ d$ 行尾 d0 行首dw 一个单词单词删除 例如3dw #de ,#dbdb 删除一行#dd 删除包前光标所在行在的的#行末行模式下:startDD,endADDd 删除从开始至指定位置的行数例如:.,5d 当前向下5行后 :1,8d 删除第一至第8行. 当前行 $最后一行 +# 当前位置向下的#行$-# 末行最后#行注意:删除的内容会被vim编辑在缓冲区(内存)当中,可撤消可恢复。最后一次的内容可粘贴到指定位置。粘贴命令p(paste,put) 大小p如之前复制或删除的内容不是一个完整行小写p 当前光标处所在行的前面大写P 当前光标处所在处的后面如之前复制或删除的内容是完整行 不止一行小写p 当前光标处所在处的上方大写P 当前光标处所在处的下方复制命令 y yank#commandy 用户与d基本相同y$ t复制光标处所在行,目前位置至行尾的内容y^ 当前光标至行首不 包括空白字符y0 当前光标至行首包括空白字符ye yw 二个基本相同针对当前光标的单词yb复制当前光标处单词前面字符yy 复制当前一行#yy 可复制#行改变命令 c change 模式转换与y,d功能相近,先删除内容,再转换为输入内容c$,c^,c0 cb,ce,cwcc#command改变命令撤消编辑操作u undo 默认50次,撤消此前编辑操作#u 直接撤消#次编辑操作ctl+r表示撤消最近的一次撤消操作,还原最近一次撤消操作重复前一个编辑操作.可视化操作v按字符选取V按矩形选取选取后可进行编辑操作包括删除、复制等,注意字符时利用hjkl上下左右键选择翻屏操作编辑模式下ctl+f 向后一屏 ctl+b 前一屏ctl+d 向下半屏 ctl+u向前半屏E:VIM末行模式操作(1)地址 ,定界 :start_pos,end_pos#:第#行;#,##,+#.: 当前行$: 最后一行%: 全文,相当于1,$/pat1/:第一次被此模式所匹配到的行;#,/pat1//pat1/,/pat2/后可跟编辑命令:d, yw, r示例 :5 光标移动到第5行:5d 删除第5行:#,# 3,10从3至10行 例如 :1,15d 删除第1至15行:#,+# 当前行向下几行 :1,+6d 删除第1至后6行:.当前行 .d删除当前行:$最后一行(2)查找查找:支持正则表达式/PATTERN 从行首至行尾?PATTERN 从当前光标处至首部,往回找n 下一个,向下N 下一个,往回示例 /echo 查找字符echo(3) 查找和替换在末行模式可以使用命令s(相当于set命令) s: 在末行模式下,在地址定界的范围内完成查找替换操作;起始地址,结束地址s@PATTERN@替换成的@修饰符gis/要查找的内容/替换为的内容/修饰符要查找的内容:可使用模式替换为的内容:不能使用模式,但可以使用后向引用符号,以引用前面模式中的分组括号所匹配到的内容;\1, \2, ...&:引用“要找的内容”匹配到的整个内容;修饰符:i: 忽略大小写g: 全局替换/:用于分隔符,所以,要查找的内容或替换为的内容中出现此符号,要使用\对其转义,使用格式:\ / 分隔符可替换为其它字符:例如@,#等;addr1,addr2S@pattern@string@gi特殊含义字符空格:\s行末空格:\s$行首空格:^\sF:多文件模式vim FILE1 FILE2 ... 默认在第一个文件,第二个文件:next:next:first:prev:last:wqall 保存所有文件:q!all 多个文件不保存退出G:窗口分隔vim -o|-O FILE1 FILE2 ...Ctrl+w, ARROW 小o为分水,大O为垂直分隔单文件窗口分割:Ctrl+w, s: split, 水平分割Ctrl+w, v: vertical, 垂直分割H:定制vim的某些工作特性:(1) 行号显示:set nu禁用:set nonu(2) 括号匹配显示:set sm禁用:set nosm(3) 自动缩进:set aiset noai(4) 高亮搜索set hlsearchset nohlsearch(5) 语法着色syntax onsyntax off(6) 忽略字符大小写set icset noic:help 获取帮助:help SUBJECT特性设定的永久生效方式:全局配置文件:/etc/vimrc用户个人的配置文件:~/.vimrcI:练习:1、复制/etc/grub2.cfg配置文件至/tmp目录,用查找替换命令删除/tmp/grub2.cfg文件中的行首的空白字符; CentOS: /etc/grub.con备注说明:%s/^[[:SPACE :]]/ 后面为空代表删除空白也可以使用:%s/^\s/ 的形式2、复制/etc/rc.d/init.d/functions文件至/tmp目录,用查找替换命令为/tmp/functions的每行开头为空白字符的行的行首加一个#; 原有空白字符保留;:%s/^[[:space:]]/#& &表示3、替换/tmp/functions文件中的/etc/sysconfig/init为/var/log;这里使用转译符:%s/\/etc\/sysconfig\/init/\/var\/log4、删除/tmp/functions文件中所以#开头,且#后面至少跟了一个空白字符的行的行首#;:%s/#[[:space:]]/第二部分 Find 文件查找grep、egrep、fgrep等命令用于文本查找,Find则用于针对文件进行查找1、查找常用命令locate: 非实时查找工具;依赖于事先构建的索引;索引的构建是在系统较为空闲时自动进行(周期性任务);手动更新此数据库(利用命令updatedb);优势是查找速度快;模糊查找;find:实时查找;查找速度略慢;精确查找;2、find命令:实时的、精确查找,遍历指定目录中所有文件的查找、速度慢,支持多种查找类型和标准格式定义: find [OPTION]... [查找路径] [查找条件] [处理动作]查找路径:默认为当前路径;查找条件:l默认是指定下的所有文件:指定的查找标准,根据文件名、大小、属主属组、类型等进行;默认为找出指定路径下的所有文件;处理动作:对符合条件的文件做什么操作;默认为输出至屏幕;查找条件A: 根据文件名进行查找-name "文件名称": 对文件名精确匹配支持使用通配符 glob; *,任意长度字符 ?, [ ]
示例:find /etc –name ‘passwd’
示例:find /etc –name ‘*passwd’    查找以passwd结束的文件
-iname "文件名称":不区分字符大小写,支持使用glob;-regex "PATTERN":以正则表达式进行文件名。匹配整个文件路径字符串,而不仅仅是文件名称; 后面需要指定regex类型B: 根据属主、属组查找-user USERNAME: 查找属主为指定用户的文件;示例: find /tmp -user user1-group GROUPNAME: 根据属组查找-uid UserID: 查找文件的属主指定uid的文件;删除用户后,只显示uid,只能够通过GID进行查找-gid GroupID: 根据GID进行查找-nouser: 查找没有属主的文件;-nogroup:查找没有属组的文件;C: 根据文件类型进行查找:-type TYPEf: 普通文件d: 目录l: 符号链接b: 块设备c: 字符设备p: 命名管道s: 套接字
示例:find /etc –type l
D:组合查找条件与条件:-a 优先级中等与 ,二个都要满足或条件:-o 优先级最低非条件:-not, ! 优先级最高条件之间末指定条件是默认是与条件,摩根定律!A -o !B = !(A -a B) AB为二个条件!A -a !B = !(A -o B)示例:find /tmp –not –type d 用于查找tmp非目录类型的文件
find ./  -not -user  chris -a -not -user root 查找非chirs和root用户的文件
find ./  -not \( -user chris -o -user root \)
E:根据文件大小来查找-size [+|-]#UNIT 单位:k, M, G,默认单位是字节 #k #M #G 精确注意这里进行舍入, +代表大于#UNIT: (#-1,#] 例如3为大于2小于3的数值+#UNIT: (#,+oo)-#UNIT:[0,#-1]
示例:find /etc –size 5k –ls
F: 根据时间戳以“天”为单位 +表示至少多少天 -表示多少天之内-atime [+|-]##:[#,#+1)+#: [#+1,oo]-#: [0,#)-mtime-ctime
示例:find ./ –atime –5 表示5天之内访问过的文件
以“分钟”为单位-amin-mmin-cminG:根据权限-perm [/|-]MODEMODE: 精确权限匹配/MODE:任何一类对象(u,g,o)的任何一位权限符合条件即可;隐含或条件;/400 属主能读即可/444 任意读即可-MODE:为每一类对象指定的每一位权限都必须同时存在方为符合条件;隐含与条件;-222-200
示例:find ./  – perm –200
处理动作-print: 默认处理动作-ls:类似于对查找到的每个文件做"ls -l"的操作;-delete: 删除查找到的文件;-fls /path/to/somefile:查找到的文件的详细路径信息保存至指定文件中;-ok COMMAND {} \; {}为命令占位符,引用原文件的位置 \;结束对每个文件执行指定的命令之前需要用户事先确认;-exec COMMAND {} \;无需用户确认;
例如:find ./ –perm 200 –exec chmod 777 {} \;
3、 练习:1、查找/var目录属主为root,且属组为mail的所有文件;
find ./ -user oracle -a -group mail   :注意由于目录没有满足root和mail的条件,
这里调整为user为oracle,group为mail2、查找/usr目录下不属于root、bin或hadoop的所有文件; (hadoop替换为51cto用户)find ./ -not \( -user root -o -user bin \) -o -user 51cto或者[root@centos71 usr]# find ./ -not -user root -a -not -user bin -o -user 51cto3、查找/etc目录下最近一周内其内容修改过,且属主不为root或hadoop的所有文件;[root@centos71 /]# find /etc -mtime -7 -not -user 51cto -7写指7日内的数据
4、查找当前系统上没有属主或属组,且最近一周内曾被访问过的所有文件;
[root@centos71 /]# find / -atime 7 -nouser -o –nogroup
5、查找/etc目录下大于20k且类型为普通类似的所有文件;
[root@centos71 etc]# find /etc -size +20k -type f
6、查找/etc目录下所有用户都没有写权限的文件;
[root@centos71 etc]# find /etc -not –perm -444
7、查找/etc目录下至少有一类用户没有执行权限的文件;
[root@centos71 etc]# find /etc -not -perm –111
8、查找/etc/init.d目录下,所有用户都有执行权限,且其它用户拥有写权限的文件;
[root@centos71 etc]# find /etc/init.d -perm /111 -a -perm /004
第三部分:bash 环境变量bash shell是解析器,解析用户的命令1、配置文件A:生效范围划分全局配置:/etc/profile, 文件比较大的情况下存在指正目录下/etc/profile.d/*.sh/etc/bashrc个人配置:文件以隐藏文件~/.bash_profile~/.bashrcB:按功能划分:(二者区别在于作用范围profile用于全局变量,bashrc用于本地变量profile类:为交互式登录的shell提供配置/etc/profile, /etc/profile.d/*.sh~/.bash_profile功用:(1) 定义环境变量,例如PATH、PS1(2) 运行命令或脚本bashrc类:为非交互式登录shell提供配置/etc/bashrc~/.bashrc功用:(1) 定义命令别名;如开始拥有别名(2) 定义本地变量;2、变量:内存空间,变量名A: 类型:环境变量:作用范围当前shell进程及其子进程本地变量:作用范围当前shell进程局部变量:作用范围仅为当前shell进程中某代码片断(通常为函数上下文)位置变量:$1, $2 用于脚本传递参数特殊变量:$?可通过pstree查看进程树, 所有从systemd进程开始,是用户空间的第一个进程。是所有进程的父进程二个bash,第一个是第二个bash的父进程,父进程定义的对子进程有效,父进程定义的环境变量的值,在子进程中无效无法看到例如在第一个bash即父进程定义的变量name=‘51cto’echo $name 输出为 51cto这时运行子进程/bin/bash,再次输入echo $name时输出则为空同上为例:如果变量定义以exort name=’51cto’定义,在父进程与子进程都可以通过echo$name查看到B: 变量定义与赋值方式:(1)变量定义:bash内置变量:可直接调用,内置了许多环境变量,例如PATH、ps1等自定义变量:自已给名称变量赋值:变量名=值 等于号为赋值name='obama' 变量定义echo $name 引用变量bash弱类型编程语言:变量存储数据时,默认均采用字符形式;任何变量可以不经声明,直接引用;120:24bits 120 ASCII码,转换为2进制120: 8bits(2)变量赋值定义过程中shell关闭后,变量失效定义本地变量:name=value查看:set定义环境变量:export name=valuedeclare -x name=value查看:env, printenv, exportC:撤消变量:unset nameD:引用变量:${name}, $name { }绝大部分可以省略如下如果将二个字符串连接到一起的情况下需要使用{ }E:bash中的引用符号:' ' 强引用,变量替换不会发生"" 弱引用,变量替换会发生`` 命令引用,命令执行结果直接引用进程引用whick cat的执行结果字符串 作为ls –l参数引用,先执行被引用,再执行外面引用命令强引用与弱引用的区别,animail变量已经定义,如果利用 echo “$animail”引用则进行变量替换发生(弱引用),输出为dog,如果为echo ‘$animail’则为强引用,则输出为 $animail3、shell登录类型:交互式登录:直接通过终端ssh进行的登录;通过su -l Username命令实现的用户切换;非交互式登录:图形界面下打开的命令行窗口;执行脚本; 会打开shell执行su Username;4、配置文件作用次序:交互式登录:后面会复盖前面的变量后面的会最终生效/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc非交互式登录:~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh注意生效范围:全局对所有用户、局部(当前用户下)示例1:所有用户都生效
vim /etc/profile.d/welcome.sh  /etc/profile.d为全局,以上操作针对所有用户生效
文件内容如下:$UID,$HOME为已定义root再通过ssh登陆时示例2:针对某个用户生效编辑相应用户下的~/.bash_profile 或者~/.bashrc文件 取决于自己需要在root用户目录下修改bashrc文件然后重新登陆shell,通过别名查看包括cdnet的配置,再通过命令别名cdnet,则直接进入/etc/sysconfig/network-scripts目录下5、编辑配置文件定义的新配置如何生效?(1) 重新登录;(2) 让当前shell进程去重新读取指定的配置文件;source /PATH/TO/SOMEFILE属主的访问权限a:进程属主,同文件属主则应用文件属主的权限b: 进程的属主,属于文件的属组,则应用文件属组权限c:则应用其它权限3、SUID :(1)任何一个可执行程序文件能不能启动为进程,取决于发起者对程序文件是否有执行权限(2)有s权限后,启动为进程之后,其属主不是发起者,而程序文件自己的属主》这种机制为 SUID权限设定:chmod u+s filechmod u-s file注意:当加后会出现大小写的情况小s :属主原本 拥有x权限大S :属主原本无x权限rwsr中有s说明SUID权限,不管任何用户, passwd不能带参数限制只能针对rootchmod加s权限4、SGID:与suid有很大不同,针对属组进行限定默认每个用户创建文件时文件的属主是当前用户基本组一但某目录被设定为SGID权限,则对此目录拥有写权限的用户在此目录中创建的文件所属的组目录的属组,而非用户的基本组(用于全局可写,每个用户可修改别人文件协做的情况下使用)-G代表附加组权限设定:chmod g+s file…chmod g-s file ….chmod g+w file(有写权限)示例:!、以root用户创建新目录,所属主和属组均为root!!、修改/mydata/data属组!!!、修改/mydata/data属组为可执行权限!!!!、分别以用户root,51cto创建文件这里创建的文件分别属于自已的属主和属组!!!!!、为/mydata/data目录添加权限!!!!!! 再分别以root和51cto用户创建文件可看到后创建的文件rootbb的属组为51cto,而非root,这里其它用户不可以写,但可以删除,要注意组权限5、 sticky 只能删除自已的文件,不能删除另人的文件临时文件 /tmp /var/tmp每个写都可以写该文件最后一位权限为tsticky(粘制位)对于一个多个可写的目录,此权限用于限制每个人只能删除自己的文件,chmod o+t filechmod o-t file示例:!在上面的情况下51cto用户可删除root用户的文件!! 修改./mydata/data目录权限!!!再次以51cto用户删除root用户文件6、权限整合suid sgid sticky000001010011100101110111后3位 r,x,x示例:
chmod 1755  /tmp/51cto  说明目录51cto有755权限,1代表拥有sticky权限chmod 4777 file ,拥有suidchmod 3755, 目录拥有755权限,同时拥有gid和sticky
umask 临时生效,只针对当前shell,如果永久需要修改配置文件umask 0022 四位中第一位就是对应上面特殊权限练习:1、让普通用户能使用/tmp/cat去查看/etc/shadow文件A:先利用 cp /usr/bin/cat /tmp目录B:查看权限C:在51cto用户运行/tmp/cat /etc/shadow 提示无权限:在root用户运行添加s权限E:再次以51cto用户运行/tmp/cat /etc/shadown运行正常输出。2、创建目录/test/data,让某组内普通用户对其有写权限,且创建的所有文件的属组为目录所属的组,此外每个用户仅能删除自己的文件准备: 修改51cto目录属主、属组创建用户yy1、yy2、yy3、yy4指定密码为password,同时修改附加组为3001A:以51cto用户创建/tmp/51cto/test/data目录B:同时创建用户yy1、yy2、yy3、yy4的附加组为51ctoC:以4个用户分别创建利用touch,vim命令创建文件,aa为touch文件,bb为vim文件。这里经测试其它用户可删除文件,如下:yy1用户可删除yy4创建的yy4.cc文件D:通过chmod修改权限现有目录权限为775针对sgid和sticky添加权限,组增加s,sticky tE:验证yy1.cc新创建文件的属组为51cto删除文件:在yy4用户下,删除yy3.cc文件提示权限不足,删除yy4.cc文件正常可以删除
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: