vim文本编辑工具:
vim分为三种模式:编辑模式,插入模式,末行模式
编辑模式:
d:删除字符
dd:删除整行
y:复制字符
yy粘贴整行
zz:保存退出
x:剪切单个字符
#x: 剪切x个字符
r 替换字符 6rT 表示当前光标往后6字符全部替换为T
d^ 删除光标所在处到行首
d$删除光标所在处至行尾字符(同D)
dw,de,db 删除单词,支持#来指明涵盖单词个数
行级别的粘贴:
p:当前所在光标下一行粘贴
P:当前所在光标上一行粘贴
不到行级别:
p:直接粘贴在当前光标后
P:直接粘贴在当前光标前
c:删除指定字符并自动转为输入
u撤销操作
Ctrl+r:撤销此前撤销
.重复前一条命令
输入模式:
i当前插入,I 行首插入 a当前位置向后一格插入,A行尾插入
o 新建下一行并在行首输入 O新建上一行并在行首输入
末行模式:
wq 或者x 保存退出
q!强制退出
x! 或者wq!强制保存退出
ZZ 保存退出
字符间移动:
上下左右:kjhl
单词间移动:
w:下一个单词词首
e:当前或下一个单词词尾
b:当前或前一个单词词首
#[w|e|b] 几个几个跳
0跳至绝对行首(第一个非tab字符)跳到最前面
^跳转至行首(第一个非空白字符)
$跳转至绝对行尾
句子间跳转
(
)
段落间跳转:
{
}
行间快速跳转:
#G(#目标行编号)
G文尾
1G文首
末行模式下直接输入100表示跳转到100行
快速选取:
v:选择光标左侧内容,可用jk上下移动
V:选择光标所在行,可用jk上下移动
编辑模式下的翻屏命令:
Ctrl+f:向文件尾部翻一屏
Ctrl+b:向文件首部翻一屏
Ctrl+d:向文件尾部翻半屏
Ctrl+u:向文件首部翻半屏
文本查找:
/PATTERN
?PATTERN
n:下一个
N:上一个
地址定界符:
Startline[,endline]
#第n行
.当前行
$最后一行
%:全文
相对定界:
+#:向下多少行
-#:向下多少行
10,+5 从第10行到第15行
文本替换s
s/要查找的内容/要替换的内容/修饰符
/:表示修饰符,可用其他字符如@,#等
要查找内容:可用正则表达式,此后要替换内容可用&代表对该内容的全部引用
要替换内容:不可用正则表达式,一般为正常文本,但可以使用\1,\2..保持内容
修饰符:
i:查找时忽略大小写
g:全局替换(不加的话一行出现多次只替换第一次)
%s/KEEP/keep/gi %表示全文,全文替换KEEP为keep
Vim [option]… [File]…
+# 快速定位到#行
+/PATTERN 快速定位到模式第一次匹配到的行
Vim File1 File2 File3…
末行模式:
:next 下一个
:prev 前一个
:first 第一个
:last最后一个
退出所有文件:
:wqll 保存退出全部
:wall 保存全部
:qall 退出全部
多窗口:
-o 水平分割窗口
-O 竖直分割窗口
Ctrl+w,方向键 多窗口之间跳转
窗口也可多次分割:
Ctrl+w,s:水平分割
Ctrl+w,v:竖直分割
界面显示设定:
末行模式下:开启行号:setnumber或者 set nu 关闭行号:set nonumber或set nonu
语法高亮显示:syntaxon / syntax off
搜索高亮开启关闭:sethlsearch /set nohlsearch
自动缩进开启关闭:setautoindent或者set ai / setnoautoindent或者set noai
区分大小写开启关闭:setignorecase (set ic)/set noignorecase (set noic)
高亮显示配对符号:set showmatch(set sm)/set noshowmatch (set nosm)
find查找文件工具:
格式:find[OPTIONS] [查找路径] [查找条件] [处理动作]
查找路径:默认为当前路径,最好使用绝对路径指定
查找条件:
按时间查找:
n:n n<x<=n+1
+n:n之外 x>n+1
-n:n之内 x<=n
-atime [+|-|]n:第n天外|内|访问
-ctime [+|-|]n:第n天外|内|属性变化
-mtime [+|-|]n:第n天外|内|内容变化
-amin [+|-|]n :第n分钟外|内| 访问
-cmin [+|-|]n :第n分钟外|内| 属性变化
-mmin [+|-|]n :第n分钟外|内| 内容变化
-newer file: 比file更改时间更近的文件
-newer f1 !f2 :查更改时间比f1新但比f2旧的文件
按条件查找:
-user :按属主查找
-group:按属组查找
-gid :按GID查找
-nogroup:查找没有属组的
-nouser:查找没有属主的
-inum n:按inode查找
-name PATTERN:按模式查找名字
-iname PATTERN:按模式查找名字,不区分大小写
-path PATTERN:按路径查找
-perm mode:按权限精确查找
/mode(+mode 老用法):只要保护一位对其指定的权限即可
-mode:每位用户包含全部权限
-regex“PATTERN” 按模式查找
按文件大小查找
-size [+|-]n:
n:n-1<x<=n
-n:x<=n-1
+n:x>n
按文件类型查找:
-type type
c:字符设备
b:块设备
f:普通文件
d:目录文件
l:连接文件
p:管道设备
s:套接字文件
多条件时需组合条件运算
与运算:-a 可以省略 条件1 –a 条件2 –a 条件3….
或运算:-o
非运算:-not,! -not 条件
处理动作:
-ls 显示出来
-print 打印在屏幕 (默认)
-execCOMMAND {} \;对找到的文件执行COMMAND,参数为find参数,这个命令直接执行,无需确 认,建议find没问题后再加上该项参数
-ok COMMAND{}\; 每项命令都需确认
注意:find会一次性找到所有参数并传输给之后的COMMAND,但部分命令无法接受过长参数,解决 方法:
find | xargs COMMAND
bash变量:
bash变量分为三种:
本地变量:只对当前shell进程有效的变量,对其他shell进程无效,包括shell的子进程
环境变量:对当前shell进程及其子进程有效,对其他shell无效
局部变量:对shell脚本中某段代码有效
位置变量:$1,$2....${11}进行位置指定变量
特殊变量:$?查看上次命令执行结果
set查看全部本地变量
export查看全部环境变量
修改变量只对当前shell有效,退出后无效,若想一直有效需修改配置文件
bash配置文件:
交互式登录:profile
全局设置:/etc/profile,/etc/profile.d/*.sh (profile分开存储)
本地设置:~/.bash_profile
功能:1.设定环境变量;2.运行脚本或命令
非交互登录:
全局设置:/etc/bashrc
本地设置:~/.bashrc
功能:1.设定本地变量;2.定义命令别名;3.自定义
配置文件读取顺序:
交互式登录:
/etc/profile->/etc/profile.d/*.sh->~/.bash_profile->~.bashrc->/etc/bashrc
非交互登录:
~.bashrc->/etc/bashrc->/etc/profile.d/*.sh
最后一个读取配置生效
编辑配置文件重新加载生效:
退出并重新登录
让bash重读此文件
.此配置本身
source 配置文件
SUID,SGID,Sticky
针对不同权限需求设置suid,suid,sticky权限:
suid:具备该权限时,执行该文件时能将其进程自动转化为属主权限执行
sgid:具备该权限时,在该目录下创建的文件属组全部为其目录属组
sticky:具备该权限时,在该目录下只能删除自己为属主文件
例子:
[root@localhost test1]# chown :oracle /tmp/test1
[root@localhost test1]# ls
[root@localhost test1]# ls -ld
drwxr-xr-x. 2 root oracle 6 Aug 4 00:53 .
[root@localhost test1]# chmod g+w /tmp/test1
[root@localhost test1]# ls -ld
drwxrwxr-x. 2 root oracle 6 Aug 4 00:53 .
[root@localhost test1]# usermod -a -G oracle admin
[root@localhost test1]# usermod -a -G oracle hadoop
[root@localhost test1]# id admin
uid=1000(admin) gid=1000(admin) groups=1000(admin),990(oracle)
[root@localhost test1]# id hadoop
uid=1008(hadoop) gid=1008(test7) groups=1008(test7),990(oracle)
[root@localhost test1]# su - admin
Last login: Wed Aug 12 07:39:23 PDT 2015 on pts/1
[admin@localhost ~]$ cd /tmp/test1
[admin@localhost test1]$ touch admin.a
[admin@localhost test1]$ ls -l
total 0
-rw-rw-r--.1 admin admin 0 Aug 12 07:53 admin.a //说明此时未改sgid权限时创建的没什么不同
[hadoop@localhost test1]$ touch hadoop.a
[hadoop@localhost test1]$ ls -l
total 0
-rw-rw-r--. 1 admin admin 0Aug 12 07:53 admin.a
-rw-r--r--. 1 hadoop test7 0 Aug 12 07:55 hadoop.a 切换到Hadoop切换也是一样
更改sgid属性
[root@localhost ~]# chmod g+s /tmp/test1
[root@localhost ~]# cd /tmp/test1
[root@localhost test1]# ls -ld
drwxrwsr-x. 2 root oracle 35 Aug 12 07:55 .
[root@localhost test1]# su - admin
Last login: Wed Aug 12 07:53:23 PDT 2015 on pts/1
[admin@localhost ~]$ touch admin.b
[admin@localhost ~]$ cd /tmp/test1
[admin@localhost test1]$ touch admin.b
[admin@localhost test1]$ ls -ld
drwxrwsr-x. 2 root oracle 49 Aug 12 07:57 .
[admin@localhost test1]$ ls -l
total 0
-rw-rw-r--. 1 admin admin 0 Aug 12 07:53 admin.a
-rw-rw-r--. 1 admin oracle 0Aug 12 07:57 admin.b
-rw-r--r--. 1 hadoop test7 0Aug 12 07:55 hadoop.a
linux磁盘管理:
linux分区表:
MBR:0磁道0扇区,主引导扇区
三部分:
446bytes:bootloader,程序
64bytes:分区表
16bytes:标示一个分区
4个主分区,一个扩展分区à逻辑分区
2bytes:55AA,当前MBR信息是否有效
MBR最多支持2T分区
文件系统:
linux文件系统任何数据存储都为inode(index node)和相应的数据块组成。
若查找/etc/passwd文件,文件读取顺序如下:
先找到/根目录的inode及其数据块,数据块中记录着其目录下文件及子目录文件的inode号,找到etc目录 查找其inode,前往inode表读取其数据后,查找到etc的数据块,再到其中查找passwd的inode,再通过 inode表查找
文件系统分为日志型和非日志型
非日志文件系统:ext2
日志型文件系统:ext3,ext4,xfs etc
VFS:Virtual File System
Linux文件系统:ext2,ext3,ext4,xfs,btrfs
光驱:iso9660
网络文件系统:ntf,cifs
集群文件系统:gfs2,ocfs2
分布式文件系统:ceph
Windows文件系统:ntfs,vfat
伪文件系统:tmpfs,hugepagefs,proc,sysfs
Unix文件系统:FFS,UFS,JFS
文件系统管理工具:
创建文件系统:
Mkfs.ext2
检测文件系统:
fsck.ext2
查看其属性:dumpe2fs,tune2fs
创建文件系统:mkfs.ext2/dev/sda
blkid/dev/sda
mkfs –t ext2 /dev/sda1
mke2fs ext专用格式化工具
mke2fs:创建ex文件系统
mke2fs [options]…/dev/Device
-t{ext2|ext3|ext4}
-b{1024|2048|4096}4096上限由内核page frame
-LLABEL:
-j :相当于-text3 格式为日志型文件系统
-I :指明inode与字节的比例 即每多少个字节创建一个inode
-N:给此文件系统直接创建多少个inode
-m#:指定预留给superuser的空间,直接表示为预留#%,默认5%,大磁盘不需预留太多
-O[^]feature 可以指明额外具有的某些特性,^表示不启用此特性
tune2fs中可以查看具体特性
e2label e2系统的卷标管理工具
e2label /dev/DEVICE NEWLABEL修改label
e2label /dev/DEVICE 查看label
tune2fs 可以查看修改文件系统属性信息,文件块大小不可修改
tune2fs –l /dev/Device可以列出超级块信息
tune2fs修改文件属性:
tune2fs –j :ext2->ext3
-L :修改卷标
-m :修改预留百分比,默认5%
-O [^]FEATURE 开启关闭某些特权
-o [^] acl:开启关闭某些挂载选项
-l 显示超级块信息:显示整个文件信息及布局等相关信息
dumpe2fs 只能查看文件信息,不能修改
dumpe2fs [-h]/dev/DEVICE
文件系统检测:
因意外导致的文件系统出错需进行文件系统检测,检测过程应该离线进行,先umount
fsck –t type=fsck.type
-a 自动修复(修复错误为删除错误,慎用)
-r 交互式修复
-f 强制修复
Ext文件系统专用修复:
e2fsck -y 对所有文件系统错误自动修复
-f 强制检测所有文件系统,即使其为clean
TEST:
1、复制/etc/grub.cfg配置文件至/tmp目录,用查找替换命令删除/tmp/grub.cfg文件中的行首的空白字符;
2、复制/etc/rc.d/init.d/functions文件至/tmp目录,用查找替换命令为/tmp/functions的每行开头为空白字符的行的行首加一个#; 原有空白字符保留;
%s/^[[:space:]]/#&/
3、替换/tmp/functions文件中的/etc/sysconfig/init为/var/log;
%s@/etc/sysconfig@/var/log@gi
4、删除/tmp/functions文件中所以#开头,且#后面至少跟了一个空白字符的行的行首#;
%s@^#[[:space:]]@ @i
5、查找/var目录属主为root,且属组为mail的所有文件;
6、查找/usr目录下不属于root、bin或hadoop的所有文件;
7、查找/etc目录下最近一周内其内容修改过,且属主不为root或hadoop的所有文件;
8、查找当前系统上没有属主或属组,且最近一周内曾被访问过的所有文件;
find / -nouser -nogroup -atime -7
9、查找/etc目录下大于20k且类型为普通文件的所有文件;
find /etc -size +20k -type f
10、查找/etc目录下所有用户都没有写权限的文件;
find /etc/ -not -perm /222
11、查找/etc目录下至少有一类用户没有执行权限的文件;
find /etc/ -not -perm -111
12、查找/etc/init.d目录下,所有用户都有执行权限,且其它用户拥有写权限的文件;
find /etc/init.d -perm 113
13、让普通用户能使用/tmp/cat去查看/etc/shadow文件;
14、创建目录/test/data,让某组内普通用户对其有写权限,且创建的所有文件的属组为目录所属的组;此外,每个用户仅能删除自己的文件