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

Linux系统中vim、find、bash环境变量、文件系统权限及磁盘管理相关命令

2015-09-05 11:28 901 查看
一、总结文本编辑工具vim的使用方法

1、模式转换
编辑模式--》 输入模式
i: 在当前光标所在字符的前面,转为输入模式;
a: 在当前光标所在字符的后面,转为输入模式;
o: 在当前光标所在行的下方,新建一行,并转为输入模式;

I:在当前光标所在行的行首,转换为输入模式
A:在当前光标所在行的行尾,转换为输入模式
O:在当前光标所在行的上方,新建一行,并转为输入模式;
输入模式--》编辑模式
ESC按键
编辑模式--》末行模式

末行模式--》编辑模式
ESC按键
2、vim打开:默认处于编辑模式
vim +# :打开文件,并定位于第#行
vim + :打开文件,定位至最后一行
vim +/PATTERN:打开文件,定位至第一次被PATTERN匹配到的行的行首
3、关闭vim
(1)末行模式关闭文件
:q 退出
:wq 保存并退出
:q! 不保存并退出
:w 保存
:w!强制保存
:wq -->:x
(2)编辑模式下退出
ZZ:保存并退出
4、光标跳转(编辑模式下)
(1)字符间跳转:左(h)右(l)上(j)下(k) #h表示向左移动#个字符
(2)单词间跳转:
w:移动至下一个单词的词首
e:跳至当前或下一个单词的词尾
b:跳至当前或前一个单词的词首
(3)行内跳转:
0:绝对行首
^:行首的第一个非空白字符
$:绝对行尾
(4)行间跳转:
#G:跳转至第#行(1G=gg)
G:最后一行
(5)句间移动:)(
(6)段落间移动:}{
5、编辑命令
(1)字符编辑

x: 删除光标所在处的单个字符
#x:删除光标所在处及向后的共#个字符
r:4rg(当前字符到后面3个字符变更成g)
R:直接进入替换模式
(2)删除命令
d命令可跟跳转命令组合使用
#dw,#de,#db
d^,d0,d$
dd:删除当前光标所在行
#dd:删除包括当前光标所在行在内的#行
注意:删除的内容会被vim编辑器保存至缓冲区当中;不会立即删除
(3)粘贴命令

p:如果删除或复制为整行内容,则粘贴至光标所在行的下方,如果复制或删除的内容为非整行,则粘贴至光标所在字符的后面;
P:如果删除或复制为整行内容,则粘贴至光标所在行的上方,如果复制或删除的内容为非整行,则粘贴至光标所在字符的前面;
(4)复制命令
yy:复制当前行
#yy:复制当前光标内的#行(光标下的#行)
(5)修改命令c
cc:删除当前行内容,同时进入输入模式
#cc:
6、撤销此前的编辑操作

u:撤销前一次的编辑操作
连续u命令可撤销此前N次编辑
#u:直接撤销最近#次编辑操作
Ctrl+r :恢复此前的撤销操作
.:重复前一个编辑操作
7、翻屏操作

Ctrl+f: 向下翻一屏
Ctrl+b: 向上翻一屏
Ctrl+d: 向下翻半屏
Ctrl+u: 向上翻半屏
8、末行模式
(1)地址、定界
:start_pos,end_pos
#:第#行
#,+#:第#行到往后加#行
.:当前行
$:最后一行
%:全文,相当于1,$
/part1/:第一次被模式匹配到的行;
#,/part1/:第#行到第一次被模式匹配到的行
后可跟的编辑命令:
d:删除所选择或匹配到的行(比如:1,3d)
w:将选择或匹配到的行保存至另外一个文件(比如:1,$w /tmp/vim.text)

y:表示复制

r:将另外一个文件的内容填充在当前文件中(光标的后面)
(2)查找
/PATTERN:向尾部进行

?PATTERN:向首部进行
n:与命令同方向
N:与命令反方向
(3)查找替换

s:在末行模式下,在地址定界的范围内完成查找替换操作
s/要查找的内容/替换为的内容/修饰符
要查找的内容:可使用模式
替换为的内容:不能使用模式,但能使用后向引用符号,已引用前面模式中的分组括号所匹配到的内容
如: \1,\2,.....
&:引用"要查找的内容"匹配到的整个内容:
修饰符:
i:忽略大小写
g:全局替换
/:用于分隔符,查找或替换的内容中用到此符号时,需要使用\对其转义:\/

也可使用其他分隔符,如:@,#
9、多文件模式
vim FILE1 FILE2 .....

:next 切换至下一个文件
:prev 切换至前一个文件
:last 切换至最后一个文件
:first 切换至第一个文件

:wqall 保存所有
:q!all 退出所有
10、多文件窗口分割

vim -o FILE1 FILE2 :水平分割显示
vim -O FILE1 FILE2 :垂直分割显示
Ctrl+w,ARROW :窗口间切换光标
11、单文件窗口分割
Ctrl+w, s: split, 水平分割
Ctrl+w, v: vertical, 垂直分割
12、订制vim工作特性
(1) 行号 显示:set nu 禁用:set nonu (2)括号匹配 显示:set sm 禁用:set nosm (3)自动缩进: 显示:set ai 禁用:set noai (4)高亮搜索 显示:set hlsearch 禁用:set nohlsearch (5)语法着色 显示:syntax on 禁用:syntax off (6)忽略字符大小写 显示:set ic 禁用:set noic13、配置文件(可设定特性永久生效)
全局配置文件:/etc/vimrc
用户个人的配置文件:~/.vimrc
二、总结文件查找命令find的使用方法

1、文件查找工具locate,find
locate:非实时查找工具;依赖于事先构建的索引;索引的构建是在系统较为空闲时自动进行(周期性任务);手动更新此数据库(updatedb);查找速度快;模糊查找;
find:通过遍历指定的目标目录,实时查找符合指定属性的文件,实时查找;查找速度略慢;精确查找
2、find命令使用规范:

查找路径:默认为当前路径;
查找条件:指定的查找标准,可以根据文件名、大小、属主属组、类型等进行;默认为找出指定路径下的所有文件;
处理动作:对符合条件的文件做什么操作;默认为输出至屏幕;
3、find命令的查找条件
(1)根据文件名进行查找
-name “文件名”:文件名支持globbing(*,?,[])
-iname “文件名”:不区分文件名大小写,支持使用glob
-regex PATTERN :基于正则表达式进行文件名匹配
(2)根据属主、属组查找
-user USERNAME: 查找属主为指定用户的文件
-group GROUPNAME:查找属组为指定用户的文件
-uid UserID: 查找文件的属主为指定uid的文件;
-gid GroupID: 查找文件的属组为指定gid的文件
-nouser: 查找没有属主的文件;
-nogroup:查找没有属组的文件;
(3)根据文件类型进行查找
-type TYPE
f: 普通文件
d: 目录
l: 符号链接
b: 块设备
c: 字符设备
p: 命名管道
s: 套接字
(4)组合查找条件

与条件:-a ,查找条件1 -a 查找条件2 -a ..... (所有条件必须同时满足)
或条件:-o ,超找条件1 -o 查找条件2 -o .....(所有条件满足一个即可)
非条件:-not,!(条件取反后满足的)
(5)根据文件大小来查找

-size (单位可以为k,M,G)
2k:表示 1k<x<=2k(1.1 1.9)
+2k:表示 >2k
-2k:表示<=1k (0.9k,1k)
(6)根据时间戳查找
以“天”为单位
-atime [+|-]#
3天: 3<=x<4
3天以内:x<3
3天之前:x>=4
-mtime
-ctime
以“分钟”为单位
-amin[+|-]#
刚好5分钟:5<=x<6
5分钟内:x<5
5分钟前:x>=5
-mmin
-cmin
(7)根据权限查找
-perm [+|-]MODE
MODE: 精确权限匹配
+MODE:任何一类对象(u,g,o)的任何一位权限符合条件即可;隐含或条件
-MODE:为每一类对象指定的每一位权限都必须同时存在方为符合条件;
4、处理动作
-print: 默认处理动作
-ls:类似于对查找到的每个文件做"ls -l"的操作;
-delete: 删除查找到的文件;
-fls /path/to/somefile:查找到的文件的详细路径信息保存至指定文件中;
-ok COMMAND {} \;

对每个文件执行指定的命令之前需要用户事先确认;
-exec COMMAND {} \;
无需用户确认;
三、总结bash环境变量的相关内容
1、bash配置文件分类
profile类:为交互式登入shell提供配置文件
全局配置:
/etc/profile /etc/profile.d/*sh
用户配置:
~/.bash_profile
功用:
(1)设定环境变量,如:PATH、等
(2)运行命令或脚本
bashrc类:为非交互式登入shell提供配置文件
全局配置:
/etc/bashrc
用户配置:
~/.bashrc
功用:
(1)设定本地变量
(2)定义命令别名
2、变量意义、类型与定义方式
<本地变量>:只对当前shell进程有效的变量,对其他shell进程无效(包含当前shell的子shell)
VAR_NAME=VALUE
变量赋值:向变量的存储空间保存数据
变量引用:
"": 弱引用,可以实现变量替换
'': 强引用,不完成变量替换,直接输出引号内内容
<环境变量>:对当前shell进程及其子shell有效,对其他的shell进程无效

用户可自定义环境变量,bash有许多内置的环境变量
PATH:命令搜索路径
HISTSIZE: 命令历史缓冲区大小
定义:export VAR_NAME=VALUE(declare -x name=value)
导出:export VAR_NAME(将本地变量变成环境变量)
撤销变量:unset VAR_NAME
只读变量: readonly VAR_NAME
<局部变量>:作用范围仅为当前shell进程中某代码片断(通常为函数上下文)
local VAR_NAME=VALUE
<位置变量>:$1,$2.....${10}
<特殊变量>:$?
查看当前shell进程中的所有变量:set
查看当前shell进程中的所有环境变量: export ,printenv,env
3、shell登入类型及其配置文件作用次序
(1)交互式登入
直接通过终端进行的登录;
通过su -l Username命令实现的用户切换;
配置文件作用次序:
/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc
(2)非交互式登入
图形界面下打开的命令行窗口;
执行脚本;
su Username;
配置文件作用次序:
~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh
4、编辑配置文件定义的新配置如何生效
(1)重新登入
(2)让当前shell进程去重新读取指定的配置文件;
source file
. file
四、总结Linux文件系统上的特殊权限(SUID,SGID,Sticky)的知识点
1、Linux系统的权限模型
u g o
(rwx) (rwx) (rwx)
2、进程的安全上下文
前提:进程有属主(进程以哪个用户的身份运行);文件有属主和属组;
(1)用户是否能够把某个可执行程序文件启动为进程,取决于用户对程序文件是否拥有执行权限;
(2)程序启动为进程后,此进程的属主为当前用户,也即进程的发起者;进程所属的组,为发起者的基本组;
(3)进程拥的访问权限,取决其属主的访问权限:
(a) 进程的属主,同文件属主,则应用文件属主权限;
(b) 进程的属主,属于文件的属组,则应用文件属组权限;
(c) 则应用其它权限;
3、特殊权限位使用说明
(1)SUID:运行某程序时,相应进程的属主是程序文件自身的属主,而不是发起者用户
权限设定:
chmod u+s FILE...
chmod u-s FILE...
注意:
s: 属主原本拥有x权限;
S: 属主原本无x权限;
(2)SGID:行某程序时,相应进程的属组是程序文件自身的属组,而不是启动者所属的基本组
权限设定:
chmod g+s FILE...
chmod g-s FILE...
(3)Sticky:在一个公共目录,每个都可以创建文件,删除自己的文件,但不能删除别人的文件
权限设定:
chmod o+t FILE...
chmod o-t FILE...
(4)sst位权限设置方法

SUID:4,SGID:2,STICKY:1
000
001
010
011
100
101
110
110
chmod 6664 file (设置ss位)
chmod 1775 dir (设置t位)
五、总结Linux磁盘管理、文件系统相关知识点及其相关命令的使用方法

1、Linux磁盘管理基础概念



(1)两张盘片中相同位置的磁道,就组成一个“柱面”,盘片中有多少个磁道,就有多少个柱面
(2)每一个面都有一个磁头,一张盘片就有两个磁头
(3)磁盘上的每个磁道被等分为若干个弧段,这些弧段便是磁盘的扇区,每个扇区可以存放512个字节的信息,磁盘驱动器在向磁盘读取和写入数据时,要以扇区为单位
(4)磁盘的第一个扇区给MBR,446字节:boot loader 64字节:磁盘分区表(16byte标识一个分区)所以每个设备只能有4个主分区或3个主分区和一个扩展分区
(5)IDE设备:第一个IDE口 ,主:/dev/hda ,从:/dev/hdb ; 第二个IDE口,主:/dev/hdc 从:/dev/hdd
(6)SATA/SCISI/USB 设备:/dev/sda ,/dev/sdb(/dev/sd[a-z][1-#],1-4表示主或扩展分区标示,5+为扩展)
(7)磁盘接口速率:
IDE:133MB/s
SCSI: 640MB/s
SATA: 6Gbps
SAS: 6Gbps
USB: 480MB/s
2、分区工具fdisk、partd、sfdisk

fdisk最多支持在一块硬盘上的15个分区
fdisk -l DEVICE 查看设备分区信息(CentOS 7 显示有些不同)
(1)fdisk命令参数
p: 显示
n: 创建
d: 删除
t: 修改分区ID
l: 列出所有支持ID类型

w: 保存退出
q: 放弃修改并退出
m: 获取帮助
(2)创建完成后,查看内核是否已经识别新的分区
# cat /proc/partitions
(3)内核重读磁盘分区表命令

CentOS 5:partprobe
CentOS 6,7:
partx:
DEVICE :重读指定分区
-a DEVICE :重读所有分区
-a -n M-N DEVICE :指定范围
kpartx
kpartx -af DEVICE
3、文件系统基础知识
(1)高级格式化:创建文件系统;低级格式化:重新创建磁道
(2)文件系统是管理磁盘分区及文件的软件,由内核提供此功能
(3)VFS虚拟文件系统:提供Linux常用分区格式的磁盘操作功能调用接口
(4)Linux支持的常用文件系统类型
Linux:ext2, ext3, ext4, reiserfs, xfs, btrfs, swap
光盘:iso9660
Windows: fat32(vfat), ntfs
Unix: ffs, ufs, jfs, jfs2
网络文件系统:nfs, cifs
集群文件系统:ocfs2, gfs2
分布式文件系统:ceph, moosefs, mogilefs, hdfs, gfs, glusterfs
4、文件系统相关命令介绍
(1)mkfs,mke2fs,e2lable,tune2fs,dumpe2fs,
(2)fsck,e2fsck,mount,umount
(3)free,mkswap,swapon,swapoff
(4)df,du
六、复制/etc/grub.cfg配置文件至/tmp目录,用查找替换命令删除/tmp/grub.cfg文件中的行首的空白字符;
:%s@^[[:space:]]\+@@g
原文件内容




替换后文件内容



七、复制/etc/rc.d/init.d/functions文件至/tmp目录,用查找替换命令为/tmp/functions的每行开头为空白字符的行的行首加一个#; 原有空白字符保留;

:%s@^[[:space:]]\+@#&@
八、替换/tmp/functions文件中的/etc/sysconfig/init为/var/log
:%s@/etc/sysconfig/init@/var/log@g
九、删除/tmp/functions文件中所以#开头,且#后面至少跟了一个空白字符的行的行首#
:%s@^#[[:space:]]\+@[[sapce]]\+@g
十、查找/var目录属主为root,且属组为mail的所有文件;
find /var -user root -a -group mail  -ls



十一、查找/usr目录下不属于root、bin或hadoop的所有文件;
find /usr -not -user root -a -not -user bin -a -not -user hadoop
十二、查找/etc目录下最近一周内其内容修改过,且属主不为root或hadoop的所有文件;
find /etc -ctime -7 -a -not -user root -a -not -user hadoop -ls
十三、查找当前系统上没有属主或属组,且最近一周内曾被访问过的所有文件;
find / -atime -7 -a -nouser -a -nogroup
十四、查找/etc目录下大于20k且类型为普通文件的所有文件;

find /etc +20k -a -type f -ls
十五、查找/etc目录下所有用户都没有写权限的文件;
find /etc ! -perm +222 -a -type f -ls
十六、查找/etc目录下至少有一类用户没有执行权限的文件
find /etc ! -perm -111 -a -type f -ls
十七、查找/etc/init.d目录下,所有用户都有执行权限,且其它用户拥有写权限的文件
find /etc/init.d -perm -113 -a -type f -ls
十八、让普通用户能使用/tmp/cat去查看/etc/shadow文件;
[root@cwc01 ~]# cp /bin/cat /tmp/
[root@cwc01 ~]# chmod u+s /tmp/cat
[root@cwc01 ~]# su - user1
[user1@cwc01 ~]$ /tmp/cat /etc/shadow
root:$6$OFU7ihWJMJaIUB3Y$lA0miwRfTzzGzBkL5qfkReBF3BisIK0H0FsftWMnfKDjAAGhcrPE8aRAep48P1rDnSiE80g/bzm0vpQRnfDYC/:16672:0:99999:7:::
bin:*:15980:0:99999:7:::
daemon:*:15980:0:99999:7:::
adm:*:15980:0:99999:7:::
lp:*:15980:0:99999:7:::
sync:*:15980:0:99999:7:::
十九、创建目录/test/data,让某组内普通用户对其有写权限,且创建的所有文件的属组为目录所属的组;此外,每个用户仅能删除自己的文件;
[root@cwc01 ~]# mkdir -pv /test/data
[root@cwc01 ~]# chmod g+w,g+s,o+t /test/data/
[root@cwc01 ~]# ls -ld /test/data/
drwxrwsr-t 2 root root 4096 Sep  6 22:37 /test/data/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: