简单文件权限管理命令总结:

一、命令功能总结

1.vim

man文档说明:

NAME
       vim - Vi IMproved, a programmers text editor
SYNOPSIS
       vim [options] [file ..]
       vim [options] -
       vim [options] -t tag
       vim [options] -q [errorfile]
       ex gex
       view
       gvim gview vimx evim eview
       rvim rview rgvim rgview

中文说明:

增强型的vi文本编辑工具

vim工作模式:(1)命令模式;(2)输入模式;(3)末行模式:

工作模式切换:

编辑模式 --> 输入模式:

参数:

i: insert 在当前光标处输入 

a:append 在当前光标后输入

o:new line 切换新行输入

I: 行首   

A:行尾

O:上方新建行


输入模式 --> 编辑模式: ESC


编辑模式 --> 末行模式::

末行模式 --> 编辑模式: ESC


打开文本文件: (1)vim filename (2) vim filename +行号 (3)vim filename /查找内容


关闭文件:

:q 退出

:q!不保存退出

:wq保存退出

:x保存退出

ZZ:保存退出


光标跳转:

字符间跳转:

h:左一个字符

l:右一个字符

j:下一个字符

k:上一个字符

单词间跳转:

w:后单词的词首

e:当前或后一个单词的词尾;

b:当前或前一单词的词首;


行内跳转:

^: 跳转至行首的第一个非空白字符;

0:跳转至行首;

$: 跳转至行尾;


行间移动:

G:文档尾部

gg:文档首部


句间移动:

)句首

(句尾


段落间移动:

}段首

{段尾


编辑命令:

字符编辑:

x: 删除光标所在处的字符

#x:删除x个字符

xp: 左右替换

r: 替换光标所在处的字符;


删除命令:

d:

d^删除光标到句首的字符

d$删除光标到句尾的字符

dw, de, db

dd: 删除整行

注意:删除的内容会被vim编辑器保存至缓冲区当中;


粘贴:p (paste, put)

如果此复制或删除的内容不是一个完整行

p:粘贴至当前光标所在处后面;

P:粘贴至当前光标所在处前面;


如果复制的内容是完整行(可不止一行)

p: 粘贴至当前光标所在行下方;

P:行上方;


复制命令:y, yank

y

y$, y^, y0

ye, yw, yb

yy: 复制行


撤消此前的编辑操作:

u:撤消此前编辑操作;

Ctrl+r:恢复此前的撤消操作

.: 重复前一个编辑操作


翻屏操作:

Ctrl+f: 向后一屏;

Ctrl+b:向前一屏;

Ctrl+d: 向后半屏

Ctrl+u: 向前半屏


vim内建教程:vimtutor



vim的末行模式

(1) 地址,定界:start_pos,end_pos

(2) 查找

/PATTERN:向尾部进行

?PATTERN:向首部进行

n: 与命令同方向

N:与命令反方向 

(3) 查找替换

s: 在末行模式下,在地址定界的范围内完成查找替换操作;

s/要查找的内容/替换为的内容/修饰符

要查找的内容:可使用模式

替换为的内容:不能使用模式,但可以使用后向引用符号,以引用前面模式中的分组括号所匹配到的内容;

\1, \2, ...

&:引用“要找的内容”匹配到的整个内容;

修饰符:

i: 忽略大小写

g: 全局替换

/:用于分隔符,所以,要查找的内容或替换为的内容中出现此符号,要使用\对其转义,使用格式:\/

分隔符可替换为其它字符:例如@,#等;

多文件模式:

vim FILE1 FILE2 ...

:next 下一个打开的文件

:first 第一个打开的文件

:prev 向前一个打开的文件

:last 最后一个打开的文件

:wqall 全部保存

:q!all 全部不保存


多文件窗口分割:vim -o|-O FILE1 FILE2 ...

Ctrl+w, ARROW

单文件窗口分割:

Ctrl+w, s: split, 水平分割

Ctrl+w, v: vertical, 垂直分割

定制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

用户个人的配置文件:~/.vimrc


2.find

man说明:

NAME
       find - search for files in a directory hierarchy
SYNOPSIS
       find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]

中文说明:

搜索文件或文件夹命令


查找条件:

根据文件名进行查找:

-name "文件名称": 支持使用glob;*, ?, []

-iname "文件名称":不区分字符大小写,支持使用glob;

-regex "PATTERN":以PATTERN匹配整个文件路径字符串,而不仅仅是文件名称;



根据属主、属组查找:

-user USERNAME: 查找属主为指定用户的文件;

-group GROUPNAME: 

-uid UserID: 查找文件的属主指定uid的文件;

-gid GroupID: 

-nouser: 查找没有属主的文件;

-nogroup:查找没有属组的文件;


根据文件类型进行查找:

-type TYPE

f: 普通文件

d: 目录

l: 符号链接

b: 块设备

c: 字符设备

p: 命名管道

s: 套接字


组合查找条件:

与条件:-a

或条件:-o

非条件:-not, !

!A -o !B = !(A -a B)

!A -a !B = !(A -o B)


根据文件大小来查找:

-size [+|-]#UNIT

单位:k, M, G

#UNIT: (#-1,#]

+#UNIT: (#,+oo)

-#UNIT:[0,#-1]


根据时间戳:

以“天”为单位

-atime [+|-]# 最后一次访问时间

#:[#,#+1)

+#: [#+1,oo]

-#: [0,#)

-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 {} \;无需用户确认;


3.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.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: filesystem allocation 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


二,课后练习

1.复制/etc/grub.cfg配置文件至/tmp目录,用查找替换命令删除/tmp/grub.cfg文件中的行首的空白字符;

命令:

:%s/^[[:blank:]]//g

跟马哥学linux (lesson 3)_第1张图片2.复制/etc/rc.d/init.d/functions文件至/tmp目录,用查找替换命令为/tmp/functions的每行开头为空白字符的行的行首加一个#; 原有空白字符保留;

命令:

%s/^[[:blank:]]/#&/g

跟马哥学linux (lesson 3)_第2张图片3.替换/tmp/functions文件中的/etc/sysconfig/init为/var/log;

命令:

%s@/etc/sysconfig/init@/var/log@g

跟马哥学linux (lesson 3)_第3张图片4.删除/tmp/functions文件中所以#开头,且#后面至少跟了一个空白字符的行的行首#

命令:

:%s/^#[[:blank:]]/ /g

跟马哥学linux (lesson 3)_第4张图片5.查找/var目录属主为root,且属组为mail的所有文件;

命令:

find /var -user root -a -group mail -ls

6.查找/usr目录下不属于root、bin或hadoop的所有文件;

命令:

find /usr -not -user root -a -user bin -a -user hadoop

7.查找/etc目录下最近一周内其内容修改过,且属主不为root或hadoop的所有文件

命令:

find /etc -mtime -7 -a -not \( -user hadoop -o -user root \)


8.查找当前系统上没有属主或属组,且最近一周内曾被访问过的所有文件;

命令:

find / -nouser -a -nogroup -a -atime -7

9.查找/etc目录下大于20k且类型为普通谁的的所有文件;

命令:

find /etc -size +20k -a -type f

10.查找/etc目录下所有用户都没有写权限的文件;

命令:find /etc -not -perm /222

11.查找/etc目录下至少有一类用户没有执行权限的文件;

命令:

find /etc -not -perm -111

12.查找/etc/init.d目录下,所有用户都有执行权限,且其它用户拥有写权限的文件;

命令:

find /etc/rc.d/init.d -perm -111 -a -perm -002

13.让普通用户能使用/tmp/cat去查看/etc/shadow文件;

命令:

cp /bin/cat /tmp
chmod u+s /tmp/cat
/tmp/cat /etc/shadow

14.创建目录/test/data,让某组内普通用户对其有写权限,且创建的所有文件的属组为目录所属的组;此外,每个用户仅能删除自己的文件;

命令:

mkdir -p /test/data
chmod g+w /test/data
chmod g+s /test/data
chmod o+t /test/data