1、总结文本编辑工具vim的使用方法;
vim:
模式化:
编辑模式:命令模式
输入模式:
末行模式:
编辑模式 --> 输入模式:
i: insert, (插入)
a:append,(插入)
输入模式 --> 编辑模式:
ESC
编辑模式 --> 末行模式:
:
末行模式 --> 编辑模式
ESC
打开vim:
# vim
# vim /PATH/TO/SOMEFILE
+#:#为行号;
+/PATTERN
关闭vim:
:q
:q!
:wq
:x
ZZ:保存退出
段落间移动:
}
{
编辑命令:
字符编辑:
x: 删除光标所在处的字符
#x:
xp:
r: 替换光标所在处的字符;
删除命令:
d:
d^
d$
d0
dw, de, db
dd:
#COMMAND
注意:删除的内容会被vim编辑器保存至缓冲区当中;
粘贴:p (paste, put)
如果此复制或删除的内容不是一个完整行
p:粘贴至当前光标所在处后面;
P:粘贴至当前光标所在处前面;
如果复制的内容是完整行(可不止一行)
p: 粘贴至当前光标所在行下方;
P:行上方;
改变命令:c, change
c$, c^, c0
cb, ce, cw
cc:
#COMMAND
撤消此前的编辑操作:
u: undo
撤消此前编辑操作;
#u
Ctrl+r:
恢复此前的撤消操作
.: 重复前一个编辑操作
vim的末行模式
(1) 地址,定界
:start_pos,end_pos
#:第#行;
#,#
#,+#
.: 当前行
$: 最后一行
%: 全文,相当于1,$
/pat1/:第一次被此模式所匹配到的行;
#,/pat1/
/pat1/,/pat2/
后可跟编辑命令:
d, y
w, r
(2) 查找
/PATTERN:向尾部进行
?PATTERN:向首部进行
n: 与命令同方向
N:与命令反方向
(3) 查找替换
s: 在末行模式下,在地址定界的范围内完成查找替换操作;
s/要查找的内容/替换为的内容/修饰符
要查找的内容:可使用模式
替换为的内容:不能使用模式,但可以使用后向引用符号,以引用前面模式中的分组括号所匹配到的内容;
\1, \2, ...
&:引用“要找的内容”匹配到的整个内容;
修饰符:
i: 忽略大小写
g: 全局替换
/:用于分隔符,所以,要查找的内容或替换为的内容中出现此符号,要使用\对其转义,使用格式:\/
分隔符可替换为其它字符:例如@,#等;
多文件窗口分割:
vim -o|-O FILE1 FILE2 ...
Ctrl+w, ARROW
定制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 noic
:help 获取帮助
:help SUBJECT
特性设定的永久生效方式:
全局配置文件:/etc/vimrc
用户个人的配置文件:~/.vimr
2、总结文件查找命令find的使用方法
find的使用格式如下:
find <指定目录> <指定条件> <指定动作>
- <指定目录>: 所要搜索的目录及其所有子目录。默认为当前目录。
- <指定条件>: 所要搜索的文件的特征。
- <指定动作>: 对搜索结果进行特定的处理。
[root@localhost /]# find . -name'bin*' 查找当前目录下以bin开头的所有文件
./etc/binfmt.d
./etc/selinux/targeted/modules/active/modules/bind.pp
[root@localhost /]# find . -name 'bin*'-ls 查找当前目录下以bin开头的所有文件,并列出文件信息
您还可以在搜索字符串中指定多个起始目录。如果以具有相应权限的用户身份运行,以下命令将下到 /usr、/home /tmp 目录查找所有 jar 文件:
find /usr /home /tmp -name "*.jar"
[root@localhost /]# find . -type d -type制定要搜索文件的类型
其他 find 可以找到的文件类型包括:
b — 块(缓存)特殊
c — 字符(未缓存)特殊
p — 命名管道 (FIFO)
s — 套接字
查找时间
find 命令有几个用于根据您系统的时间戳搜索文件的选项。这些时间戳包括
mtime — 文件内容上次修改时间
atime — 文件被读取或访问的时间
ctime — 文件状态变化时间
mtime 和 atime 的含义都是很容易理解的,而ctime 则需要更多的解释。由于 inode 维护着每个文件上的元数据,因此,如果与文件有关的元数据发生变化,则 inode 数据也将变化。这可能是由一系列操作引起的,包括创建到文件的符号链接、更改文件权限或移动了文件等。由于在这些情况下,文件内容不会被读取或修改,因此 mtime 和 atime 不会改变,但ctime 将发生变化。
这些时间选项都需要与一个值 n 结合使用,指定为 -n、n 或 +n。
-n 返回项小于 n
+n 返回项大于 n
n 返回项正好与 n 相等
例如:
[root@localhost /]# find /etc -mtime -3 //查看3小时内/etc目录下被修改的文件
3、总结bash环境变量的相关内容;
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) 定义命令别名;
(2) 定义本地变量;
变量:内存空间,变量名
类型:
环境变量:作用范围当前shell进程及其子进程
本地变量:作用范围当前shell进程
局部变量:作用范围仅为当前shell进程中某代码片断(通常为函数上下文)
位置变量:$1, $2
特殊变量:$?
变量定义方式:
bash内置变量:可直接调用,内置了许多环境变量,例如PATH等
自定义变量:
变量赋值:变量名=值
bash弱类型:
变量存储数据时,默认均采用字符形式;任何变量可以不经声明,直接引用;
定义本地变量:name=value 查看:set
定义环境变量:export name=value ,declare -x name=value
查看:env, printenv, export
撤消变量:unset name
引用变量:${name}, $name
bash中的引用符号:
'': 强引用,变量替换不会发生
"":弱引用
``: 命令引用
shell登录类型:
交互式登录:
直接通过终端进行的登录;
通过su - Username命令实现的用户切换;
非交互式登录:
图形界面下打开的命令行窗口;
执行脚本;
su Username;
配置文件作用次序:
交互式登录:/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile--> ~/.bashrc --> /etc/bashrc
非交互式登录:~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh
4、总结Linux文件系统上的特殊权限(SUID、SGID、Sticky)的知识点;
SUID、SGID、Sticky权限说明
SUID:
(1) 任何一个可执行程序文件能不能启动为进程:取决于发起者对程序文件是否有执行权限;
(2) 启动为进程之后,其属主不是发起者,而程序文件自己的属主;这种机制即为SUID;
权限设定:
chmod u+s FILE...
chmod u-s FILE...
注意:
s: 属主原本拥有x权限;
S: 属主原本无x权限;
SGID:
默认情况下,用户创建文件时,其属级为此用户所属的基本组;
一旦某目录被设定了SGID权限,则对此目录拥有写权限的用户在此目录中创建的文件所属的组为目录的属组,而非用户的基本组;
权限设定:
chmod g+s FILE...
chmod g-s FILE...
Sticky:
对于一个多人可写的目录,此权限用于限制每个仅能删除自己的文件;
权限设定
chmod o+t FILE...
chmod o-t FILE...
5、总结Linux磁盘管理、文件系统相关知识点及其相关命令的使用方法;
Linux磁盘管理
硬盘:机械式硬盘;SSD
机械式:
track
sector: 512bytes
cylinder: 分区的基本单位;
MBR:Master Boot Record
512bytes 446: bootloader 64: filesystemallocation table 16: 标识一个分区 2:55AA
磁盘接口类型:
IDE (ATA):133MB/s,/dev/hd
SCSI: 640MB/s
SATA:6Gbps
SAS:6Gbps
USB:480MB/s
识别硬盘设备:/dev/sdx
标记不同的硬盘设备:/dev/sd[a-z]
标记同一设备上的不同分区:/dev/sd[a-z][1-]
1-4: 主或扩展分区标识
5+:逻辑分区标识
设备文件:特殊文件
设备号:
major, minor
major: 设备类型
minor: 同一类型下的不同设备“块”:block,随机设备
“字符”:character,线性设备
分区:分隔存储空间为多个小的空间,每个空间可独立使用文件系统;
分区工具:fdisk, parted, sfdisk
fdisk工具的使用:
最多支持在一块硬盘上的15个分区;
fdisk分区管理子命令:
p: 显示
n: 创建
d: 删除
t: 修改分区ID
l: 列出所有支持ID类型
w: 保存退出
q: 放弃修改并退出
m: 获取帮助
创建完成之后,查看内核是否已经识别新的分区:
# cat /proc/partitions
有三个命令可以让内核重读磁盘分区表:
CentOS 5: partprobe [DEVICE]
CentOS 6,7: partx kpartx
partx命令:
partx DEVICE
partx -a DEVICE
partx -a -n M:N DEVICE
M
M:分区范围
:N
kpartx命令:
kpartx -af DEVICE
a:添加一个分区
Linux文件系统管理
文件系统:
VFS:Virtual File System
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
(1) 日志型文件系统
非日志型文件系统:ext2
日志型文件系统:ext3,ext4
(2) swap:交换分区
创建文件系统:
在分区上执行格式化(高级格式化)
要使用某种文件系统,满足两个条件:
内核中:支持此种文件系统
用户空间:有文件系统管理工具
创建工具:mkfs (make filesystem)
mkfs -t type DEVICE
mkfs.type DEVICE
ext系列文件系统的专用管理工具:
mke2fs -t {ext2|ext3|ext4} DEVICE
-b BLOCK: 1024, 2048, 4096
-L 'LABEL': 设定卷标
blkid命令:
blkid DEVICE
LABEL, UUID, TYPE
6、复制/etc/grub.cfg配置文件至/tmp目录,用查找替换命令删除/tmp/grub.cfg文件中的行首的空白字符;
[root@localhost ~]#cp /etc/grub.conf /tmp/grub.cfg
vim:
%s/^[[:blank:]]//g
7、复制/etc/rc.d/init.d/functions文件至/tmp目录,用查找替换命令为/tmp/functions的每行开头为空白字符的行的行首加一个#; 原有空白字符保留;
[root@localhost ~]#cp /etc/rc.d/init.d/fuctions /tmp
vim:
%s/^[[:space:]]/#/g
8、替换/tmp/functions文件中的/etc/sysconfig/init为/var/log;
Vim:
%s#/etc/sysconfig/init#/var/log#g
9、删除/tmp/functions文件中所以#开头,且#后面至少跟了一个空白字符的行的行首#;
Vim:
%s/^#[[:space:]]\{1,\}//g
10、查找/var目录属主为root,且属组为mail的所有文件;
[root@localhost ~]#find /var -user root -group main -ls
11、查找/usr目录下属组不属于root、bin或hadoop的所有文件;
[root@localhost ~]# find /usr -not -user root -a -user bin -ls
12、查找/etc目录下最近一周内其内容修改过,且属主不为root或hadoop的所有文件;
[root@localhost ~]#find /etc -atime +7 -a -not -user root -a -not-user hadoop -ls
13、查找当前系统上没有属主或属组,且最近一周内曾被访问过的所有文件;
[root@localhost ~]# find / -nouser -a -nogroup -a -atime +7 -ls
14、查找/etc目录下大于20k且类型为普通谁的的所有文件;
[root@localhost var]# find /etc -size +20k -a -type f
15、查找/etc目录下所有用户都没有写权限的文件;
[root@localhost var]# find /etc -perm -555
16、查找/etc目录下至少有一类用户没有执行权限的文件;
[root@localhost var]# find /etc -perm +666
17、查找/etc/init.d目录下,所有用户都有执行权限,且其它用户拥有写权限的文件;
[root@localhost var]# find /etc/init.d -perm -111 -a -perm -222
18、让普通用户能使用/tmp/cat去查看/etc/shadow文件;
[root@localhost ~]# chmod u+s /tmp/cat
19、创建目录/test/data,让某组内普通用户对其有写权限,且创建的所有文件的属组为目录所属的组;此外,每个用户仅能删除自己的文件;
[root@localhost ~]#mkdir -p /test/data
[root@localhost ~]#chmod g+ws /test/data