LINUX 中的vim 操作
vim在linux中是一款功能强大的编辑利器。vim分为三种模式:1编辑模式,2插入模式,3末行模式。
1.1:编辑模式。
i:insert 插入编辑光标停留的第一个字符。
a:append 追加到光标的第二个字符。
o:new line 新建一空白行,往光标下一行新建。
I:行首。
A:行末。
O:光标上方新建空白行。
输入模式 按ES====》编辑模式。
编辑模式按':'=====》进入末行模式。
末行模式按ESC======》编辑模式。
1.2 打开文件vim编辑
vim /PATH/;
+#:#表示行,定位到行号。
+/PATTERN 正则匹配。
1.3关闭vim命令。
:q 退出 。:wq 保存退出。 :q!强制退出,不保存。:wq 保存退出。:x 保存退出。
1.4光标跳转
h:向左移动。l:向右移动。j:向上移动。k:向下移动。
w:光标向右一个单词词首。
e:当前右一个单词词尾。
b:当前或前一个单词的词首。
1.5 行内跳转
^:跳至行首非空白处。
o:跳至行首。
$:跳至行尾。
1.6行间移动
#G:跳至#行。
1G,gg:都是跳至第一行。
G:末行。
2:编辑命令
2.1字符编辑
x:删除光标所在处的字符。
#X:删除#行。
xp:恢复最近一次操作。
rw:替换光标所在处的字符,w替换后的字符。
2.2 删除命令
dd:删除光标所在的行。
dw:删除整个单词。
复原前一个操作: u
2.3粘贴 p
如果此次复制或者删除的内容不是一个完整的行。
p:粘贴至当前光标所在处后面。
P:粘贴至当前光标所在处前面。
如果是整行
p:粘贴至当前光标所在处后面。
P:粘贴至当前光标所在处前面。
2.4复制命令
yy:复制整行。
y$: 复制从光标处到行末。
y^: 复制从光标处到行首。
yw:复制光标停留处字符。
#yy:表示从光标向下#行。
2.5翻屏操作
ctrl+f:向后一屏。
ctrl+b:向前一屏。
ctrl+d:向后半屏。
ctrl+u:向前半屏
2.6 vim内建教程 vimtutor.
3:vim的末行模式
3.1 地址,定界
:start_pos.end_pos
:#:第#行
:#,#第几行到第几行。
:.:当前行。
:$:最后一行。
/pat1/:全局匹配。
3.2 查找与替换
/pattern :向尾部进行。
?pattern:向首部进行。
n:与命令同方向,继续查找,先查找命令,按n继续查找下一个
N:与命令反方向查找。找到后往上查第二个。输入/root,按N后?root
3.3 查找与替换
s:在地接范围内,完成查找与替换动作。
s/要找查找的内容/替换的内容/修饰符。
要查找的内容可以使用正则表达式。替换的内容不行。
修饰符:i忽略大小写。g:全局替换。c:替换时得带用户的确认。
:n1,n2s/word1/word2/gic
%s/word1/word2/ 代表替换每一行的第一个word1
查找root并替换成admin
1,$s/root/admin/ 代表匹配的第一个root 替换成admin。
1,$s/root/admin/g 代表全局替换。
3.4多文件模式:
vim file file2 file3.....以空格隔开多个文件
:next 下一文件
:first第一个文件
:prev上一个文件
:last 最后一个文件。
单文件件窗口分割
ctrl+w ,s:split 水平分割。
ctrl+w,v:vertical 垂直分割。
3.5定制vim的某些工作特性:
显示行号:set nu
禁用行号:set nonu
(2) 自动缩进:
set ai
set noai
(3) 高亮搜索
set hlsearch
set nohlsearch
(4) 语法着色
syntax on
syntax off
(5) 忽略字符大小写
set ic
set noic
文件查找
文件查找在文件系统上查找符合条件的文件的过程。文件查找主要:locate,find
locate :非实时查找工具;依赖于事先构建的 索引;索引的构建是在系统较为空闲时自动进行(周期性任务),手动更新此数据库(updatedb);查找速度快;模糊查找;
find:实时查找;查找速度略慢;精确查找;
1 find命令
find [查找路径] [查找条件] [处理动作]
查找路径:默认为当前路径;
查找条件:指定的查找标准,可以根据文件名,大小,属主属组,类型等进行查找。
处理动作:对符合条件的文件做什么处理,默认为屏幕输出。
1.1 根据属主,属组查找:
-user USERNAME :查找属主为指定用户的文件。
-group GROUPNAME 查找属组。
-uid USERID :查找文件属主的ID。
-gid GroupID : 属于组ID。
-nouser 查找没有属主的文件。
-nogroup 查找没有属组的文件。
1.2 根据文件类型进行查找
-type
f:普通文件。
d:目录。
l:符号设备文件。
b:快设备。
c:字符设备。
p:命令管道。
s:套接字文件。
1.3组合查找
与条件:-a
或条件:-o
非条件:-not ,!
!A -a !B=!(A -o B)
!A -0 !B =!(A -a B)
1.4 根据文件大小来查找:
-size [+|-] #UNIT(单位)
UNIT:k,M,G
#UNIT:(#-1,#]
+#UNIT:(#,无穷) >#
-#UNIT :[0,#-1] <#
1.5根据时间戳:
以天为单位
-atime [+|-]#
#:[#,#+1)
+#:[#+1,无穷)
-#:[0,#)
-ctime 更改inode 属性(更改文件所有者,权限,或者链接)
#:[#,#+1)
+#:[#+1,无穷)
-#:[0,#)
-mtime 写入文件数据的时间
以‘分钟‘ 为单位
-amin
-mmin
-cmin
1.6根据权限查找
-perm [/|-] MODE
MODE:精确权限匹配
/MODE:任何一类对象(u,g,o)的任何一位权限符合条件即可;隐含,
例如查询 整个系统的SUID ,SGID的文件 find / -perm +6000
1.7 处理动机
-print :默认处理动机。
-ls:类似于对查找的每个文件做'ls -l'的动作。
-delete:删除查找到的文件;
fls /path/to/somefile :查找到的文件的详细路劲信息保存到指定的文件中
-ok 命令 {}\;对每个文件执行的指定的命令之前需要用户事先确认。
-exec 命令 {} \;无需用户确认。
bash环境配置
1.1配置文件,生效范围划分,存在两类
全局配置: /etc/profile,/etc/profile.d/*.sh, /etc/bashrc
个人配置: ~/.bash_profile,~/.bashrc (~:表示当前用户的家目录。)
功能:
(1)定义环境变量,例如PATH,PS1
(2) 运行命令或者脚本。
bashrc 类:为非交互式登陆shell提供配置。
/etc/bashrc
~/.bashrc
功用:定义命名别名;定义本地变量。
1.2变量类型
环境变量:作用范围当前shell进程及子进程
本地变量:作用于当前shell
局部变量:作用与当前shell的方法或者函数,shell进程中的某段代码片段。
位置变量:$1,$2
特殊变量:$?(获取进程的退出状态及接收的信号值)
1.3变量定义方式:
bash内置变量:可直接调用,内置了许多环境变量。如PATH。
自定义变量: 变量名=变量值。
1.4 bash弱类型:
变量存储默认采用的是字符形式存储。如何变量可以不经赋值直接引用。
一个字节等于8个比特
1.5 定义本地变量
name=value 注意中间无空格号。
1.6 定义环境变量
export name=value
declare -x name=value
查看环境变量 env,printenv,export
撤销变量 unset name
比如 定义一个变量 name=mite
定义一个环境变量 export number=123456789
用set 查看
打印出来 echo name
echo $number
引用变量 ${name} $name
1.8bash 中的引用符号
'' :强引用
"":弱引用
``:命令引用
1.9 shell登陆类型
交互式登陆直接通过终端登陆
通过 su -l username 登陆。
非交互式登陆
图形界面打开的命令行登陆 例如进行系统命令行界面 通过ctrl+alt+F1-F6
执行脚本 登陆
su username
2.0配置文件作用次序:
交互式登陆:
/etc/profile--->/etc/profile/*.sh-->~/.bash_profile--->~/.bashrc--->/etc/bashrc
非交互式登陆:~/.bashrc----->/etc/bashrc---/etc/profile.d/*.sh
2.1编辑配置文件定义的新配置如何生效?
(1)重新登录
(2)让当前的shell去重新读取指定的配置文件 (不采取)
source /APTH/TO/SOMEFILE
./PATH/TO?SOMEFILE
Linux文件系统上的特殊权限
进程的安全上下文:前提;进城有属主;文件有属主和属组;
(1)用户是否能把把那个可执行文件启动为进城,取决于用户对shell程序文件是否有可执行权限。
(2)程序启动为进程后,此进程的属主为当前用户,即进程的发起者;进程所属的组即为发起者所在的组。
(3)进程拥有的访问权限,取决其属主的访问权限:
a:进程的属主,同文件的属主。则应用文件属于属组文件。
b:进程的属组,属于文件的属组,则应用文件属组权限;
SUID
(1)任何一个可执行程序文件能不能启动为进程,取决于发起者对程序文件是否有执行权限。
(2)启动为进程后,其属主不是发起者,而是程序文件自己的属主,这种机制称为SUID
权限设定:
chmod u+s FILE..
chmod u-s FILE...
注意:
s:属主原本拥有X权限。
S:属主原本无X权限
SGID
默认情况下,用户创建文件时,其属组应是文件创建者的属组。
一旦某目录设定了SGID权限时,则对此目录拥有写权限的用户,在此此目录中创建的文件所属的组为目录所属于的组,而非文件创建时的基本组
权限设定
chmod g+s FILE
chmod o-s FILE
Sticky
对于一个多个人可写的目录,此权限用于限制用户仅删除自己文件。
chmod o+t FILE
chmod o-t FILE
home work
一、作业(练习)内容:
1、总结文本编辑工具vim的使用方法;
2、总结文件查找命令find的使用方法;
3、总结bash环境变量的相关内容;
4、总结Linux文件系统上的特殊权限(SUID、SGID、Sticky)的知识点;
5、总结Linux磁盘管理、文件系统相关知识点及其相关命令的使用方法;
6、复制/etc/grub.cfg配置文件至/tmp目录,用查找替换命令删除/tmp/grub.cfg文件中的行首的空白字符;
:%s/[[:space:]]\+//g
7、复制/etc/rc.d/init.d/functions文件至/tmp目录,用查找替换命令为/tmp/functions的每行开头为空白字符的行的行首加一个#; 原有空白字符保留;
%s/^[[:space:]]/#&/g
8、替换/tmp/functions文件中的/etc/sysconfig/init为/var/log;
%s@/etc/sysconfig/init@/var/log@g
9、删除/tmp/functions文件中所以#开头,且#后面至少跟了一个空白字符的行的行首#;
%s/^#\([[:space:]]\+\)/\1/g
10、查找/var目录属主为root,且属组为mail的所有文件;
find /var -user root -a -group mail
11、查找/usr目录下不属于root、bin或hadoop的所有文件;
find /usr !\(-user root -o -user bin -o -user hadoop\) -ls
12、查找/etc目录下最近一周内其内容修改过,且属主不为root或hadoop的所有文件;
13、查找当前系统上没有属主或属组,且最近一周内曾被访问过的所有文件;
14、查找/etc目录下大于20k且类型为普通文件的所有文件;
15、查找/etc目录下所有用户都没有写权限的文件;
16、查找/etc目录下至少有一类用户没有执行权限的文件;
17、查找/etc/init.d目录下,所有用户都有执行权限,且其它用户拥有写权限的文件;
18、让普通用户能使用/tmp/cat去查看/etc/shadow文件;
19、创建目录/test/data,让某组内普通用户对其有写权限,且创建的所有文件的属组为目录所属的组;此外,每个用户仅能删除自己的文件;