今天我给大家带来的是VIM,find,命令的使用和bash环境变量的一些内容。
vim命令
vi命令是UNIX操作系统和类UNIX操作系统中最通用的全屏纯文本编辑器。Linux中的vi编辑器叫vim,它是vi的增强版,与vi编辑器完全兼容,而且实现了很多增强功能。
vi编辑器有三种模式:输入模式,命令模式(编辑模式)和末行模式,(默认打开命令模式)
语法: vi(选项)(参数)
参数解释:
Ctrl+u:向文件首翻半屏;
Ctrl+d:向文件尾翻半屏;
Ctrl+f:向文件尾翻一屏;
Ctrl+b:向文件首翻一屏;
Esc:从编辑模式切换到命令模式;
ZZ:命令模式下保存当前文件所做的修改后退出vi;
:行号:光标跳转到指定行的行首;
:$:光标跳转到最后一行的行首;
x或X:删除一个字符,x删除光标后的,而X删除光标前的;
D:删除从当前光标到光标所在行尾的全部字符;
dd:删除光标行正行内容;
ndd:删除当前行及其后n-1行;
nyy:将当前行及其下n行的内容保存到寄存器?中,其中?为一个字母,n为一个数字;
p:粘贴文本操作,用于将缓存区的内容粘贴到当前光标所在位置的下方;
P:粘贴文本操作,用于将缓存区的内容粘贴到当前光标所在位置的上方;
/字符串:文本查找操作,用于从当前光标所在位置开始向文件尾部查找指定字符串的内容,查找的字符串会被加亮显示;
?name:文本查找操作,用于从当前光标所在位置开始向文件头部查找指定字符串的内容,查找的字符串会被加亮显示;
a,bs/F/T:替换文本操作,用于在第a行到第b行之间,将F字符串换成T字符串。其中,“s/”表示进行替换操作;
a:在当前字符后添加文本;
A:在行末添加文本;
i:在当前字符前插入文本;
I:在行首插入文本;
o:在当前行后面插入一空行;
O:在当前行前面插入一空行;
:wq:在命令模式下,执行存盘退出操作;
:w:在命令模式下,执行存盘操作;
:w!:在命令模式下,执行强制存盘操作;
:q:在命令模式下,执行退出vi操作;
:q!:在命令模式下,执行强制退出vi操作;
:e文件名:在命令模式下,打开并编辑指定名称的文件;
:n:在命令模式下,如果同时打开多个文件,则继续编辑下一个文件;
:f:在命令模式下,用于显示当前的文件名、光标所在行的行号以及显示比例;
:set number:在命令模式下,用于在最左端显示行号;
:set nonumber:在命令模式下,用于在最左端不显示行号;
find命令
find和localte都查找工具他们的区别:
locate: 非实时查找工具;依赖于事先构建的索引;索引的构建是在系统较为空闲时自动进行(周期性任务);手动更新此数据库(updatedb);查找速度快;模糊查找;
locate -i 忽略大小写
find:实时查找;查找速度略慢;精确查找;用来在指定目录下查找文件
find 语法
find [OPTION]... [查找路径] [查找条件] [处理动作]
查找路径:默认为当前路径;
查找条件:指定的查找标准,可以根据文件名、大小、属主属组、类型等进行;默认为找出指定路径下的所有文件;
处理动作:对符合条件的文件做什么操作;默认为输出至屏幕;
查找条件介绍:
根据文件名进行查找:
-name "文件名称": 支持使用glob;
-iname "文件名称":不区分字符大小写,支持使用glob;
-regex "PATTERN":以PATTERN匹配整个文件路径字符串,而不仅仅是文件名称;
根据属主、属组查找:
-user USERNAME: 查找属主为指定用户的文件;
-group GROUPNAME: 根据组查找
-uid UserID: 查找文件的属主指定uid的文件;
-gid GroupID: 查找文件属组GID的文件
-nouser: 查找没有属主的文件;
-nogroup:查找没有属组的文件;
根据文件类型进行查找:
命令参数:-type TYPE
f: 普通文件
d: 目录
l: 符号链接
b: 块设备
c: 字符设备
p: 命名管道
s: 套接字
根据组合查找条件:
与条件:-a
或条件:-o
非条件:-not, !
根据文件大小来查找:
-size [+|-]#UNIT
单位:k, M, G
下面是5大小的文件的各种解释:
根据时间戳:
以“天”为单位
-atime 用、户最近一次访问时间。
-mtime 文件最后一次修改时间。
-ctime 文件属性(例如权限等)最后一次修改时间。
以“分钟”为单位
-amin
-mmin
-cmin
下面是时间的表示方法:
根据文件的权限:
-perm [/|-]MODE
MODE: 精确权限匹配
/MODE:任何一类对象(u,g,o)的任何一位权限符合条件即可;隐含或条件;
-MODE:为每一类对象指定的每一位权限都必须同时存在方为符合条件;隐含与条件;
处理动作:
-print: 默认处理动作打印到屏幕
-ls:类似于对查找到的每个文件做"ls -l"的操作;
-delete: 删除查找到的文件;
-fls /path/to/somefile:查找到的文件的详细路径信息保存至指定文件中;
-ok COMMAND {} \;
对每个文件执行指定的命令之前需要用户事先确认;
-exec COMMAND {} \;
无需用户确认;
bash环境变量的简单介绍:
配置文件,生效范围划分,存在两类:
全局配置:/etc/profile, /etc/profile.d/*.sh/etc/bashrc
个人配置:~/.bash_profile ,~/.bashrc
按功能划分,存在两类:
profile类:为交互式登录的shell提供配置
/etc/profile, /etc/profile.d/*.sh
~/.bash_profile
功用和作用:
(1) 定义环境变量,例如PATH、PS1
(2) 运行命令或脚本
bashrc类:为非交互式登录shell提供配置
/etc/bashrc
~/.bashrc
功用和作用:
(1) 定义命令别名;alias
(2) 定义本地变量;
环境变量:作用范围当前shell进程及其子进程
本地变量:作用范围当前shell进程
定义本地变量:
name=value
查看:set
定义环境变量:
export name=value
declare -x name=value x 指定的变量会成为环境变量
查看:env, printenv, export
撤消变量:unset name
引用变量:${name}, $name
bash中的引用符号:
'': 强引用,变量替换不会发生
"":弱引用
``: 命令引用
shell登录类型:
交互式登录:
直接通过终端进行的登录;
通过su -l Username命令实现的用户切换;
非交互式登录:
图形界面下打开的命令行窗口;
执行脚本;
su Username;
最重要的是配置文件作用次序:
交互式登录:
su -l username/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc
非交互式登录:
su username~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh
编辑配置文件定义的新配置如何生效?
(1) 重新登录;
(2) 让当前shell进程去重新读取指定的配置文件;
source /PATH/TO/SOMEFILE
. /PATH/TO/SOMEFILE
下面是一些练习试题:
复制/etc/grub.cfg配置文件至/tmp目录,用查找替换命令删除/tmp/grub.cfg文件中的行首的空白字符;
%s/^[[:blank:]]/#/g
复制/etc/rc.d/init.d/functions文件至/tmp目录,用查找替换命令为/tmp/functions的每行开头为空白字符的行的行首加一个#; 原有空白字符保留;
%s/^[[:blank:]]/#&/g
替换/tmp/functions文件中的/etc/sysconfig/init为/var/log;
%s#/etc/sysconfig/init#/var/log#g
删除/tmp/functions文件中所以#开头,且#后面至少跟了一个空白字符的行的行首#;
%s/^#\([[:space:]]\+\)/\1/g
查找/var目录属主为root,且属组为mail的所有文件;
find /var -user root -a -group mail -ls
查找/usr目录下不属于root、bin或hadoop的所有文件;
find /usr ! \( -user root -o -user bin -o -user hadoop \) -ls
查找/etc目录下最近一周内其内容修改过,且属主不为root或hadoop的所有文件;
find /etc/ -atime -7 -a ! \( -user root -o -user hadoop \) -ls
查找当前系统上没有属主或属组,且最近一周内曾被访问过的所有文件;
find /etc/ -atime -7 -a -nouser -a -nogroup -ls
查找/etc目录下大于20k且类型为普通文件的所有文件;
find /etc/ -size +20k -a -type f -ls
查找/etc目录下所有用户都没有写权限的文件;
find /etc -! -perm /222 -ls
查找/etc目录下至少有一类用户没有执行权限的文件;
find /etc -perm /111 -type f -ls
查找/etc/init.d目录下,所有用户都有执行权限,且其它用户拥有写权限的文件;
find /etc/init.d -perm -111 -a -perm -002 -ls
让普通用户能使用/tmp/cat去查看/etc/shadow文件;
chmod u+s /tmp/cat
创建目录/test/data,让某组内普通用户对其有写权限,且创建的所有文件的属组为目录所属的组;此外,每个用户仅能删除自己的文件;
# chmod g+s /test/data# chmod g+w /test/data# chmod o+t /test/data