Sticky BIT,简称 SBIT 特殊权限,可意为粘着位、粘滞位、防删除位
这个就是针对others来设置的了,和 SUID、SGID 两个一样,只是功能不同而已。 SBIT 只针对目录有效,对于目录的作用是:当用户在该目录下建立文件或目录时,仅有自己与 root才有权力删除
位置:其它用户的执行权限位。如果其它用户原本有执行权限,显示为小写t; 否则,显示为大写T;
也就是说,当甲用户以目录所属组或其他人的身份进入 A 目录时,如果甲对该目录有 w、x 权限,则表示对于 A 目录中任何用户创建的文件或子目录,甲都可以进行修改甚至删除等操作。但是,如果 A 目录设定有 SBIT 权限,那就不一样了,甲用户只能操作自己创建的文件或目录,而无法修改甚至删除其他用户创建的文件或目录。
最具有代表的就是/tmp目录,任何人都可以在/tmp内增加、修改文件(因为权限全是rwx),但仅有该文件/目录建立者与 root能够删除自己的目录或文件
[dxk@admin ~]$ ll -d /tmp
drwxrwxrwt. 33 root root 4096 8月 2 09:26 /tmp
可以看到,在其他人身份的权限设定中,原来的 x 权限位被 t 权限占用了,这就表示此目录拥有 SBIT 权限
【例 】
[root@admin tmp]# ll -d /tmp
drwxrwxrwt. 31 root root 4096 8月 2 09:38 /tmp
[root@admin tmp]# su - admin001
上一次登录:六 8月 1 10:38:45 CST 2020从 192.168.126.1pts/1 上
[admin001@admin ~]$ cd /tmp
[admin001@admin tmp]$ touch 001file
[admin001@admin tmp]$ ll 001file
-rw-rw-r--. 1 admin001 admin001 0 8月 2 09:40 001file
[admin001@admin tmp]$ su - admin002
密码:
上一次登录:六 8月 1 11:04:26 CST 2020从 192.168.126.1pts/3 上
[admin002@admin ~]$ cd /tmp
[admin002@admin tmp]$ rm -rf 001file
rm: 无法删除"001file": 不允许的操作
[admin002@admin tmp]$
可以看到,虽然 /tmp 目录的权限设定是 777,但由于其具有 SBIT 权限,因此 admin001 用户在此目录创建的文件 001file,admin002 用户删除失败
这里要说明一点的是:如果A目录对其他人具有w、x权限,那么对于A目录来说,其他用户可以删除该目录下的所有文件(即使其他人对这些文件没有任何权限)。而不是说该目录下的文件只有其对应的属组和属主才能删除。 只和其父目录其他人组的权限信息相关
[admin002@admin tmp]$ ll -d dxkdir/ #此目录对任何人都具有r、w、x权限
drwxrwxrwx. 2 dxk dxk 29 8月 2 09:57 dxkdir/
[admin002@admin dxkdir]$ ll file #文件file对其他人没有任何权限
-rw-rw----. 1 dxk dxk 0 8月 2 09:57 file
[admin002@admin dxkdir]$ rm -i file #admin002用户可以删除file文件,即使该用户既不是file文件的属主,也不属于该属组
rm:是否删除有写保护的普通空文件 "file"?y
和我们前面说的rwx差不多,也有两种方式,一种是以字符,一种是以数字
特殊权限位(扩展权限位):
SUID | SGID | SBIT | 对应权限 |
---|---|---|---|
0 | 0 | 0 | 0 |
0 | 0 | 1 | 1 |
0 | 1 | 0 | 2 |
0 | 1 | 1 | 3 |
1 | 0 | 0 | 4 |
1 | 0 | 1 | 5 |
1 | 1 | 0 | 6 |
1 | 1 | 1 | 7 |
其中: 4 为 SUID = u+s ;2 为 SGID =g+s ;1 为 SBIT = o+t
基于八进制方式赋权时,可于默认的三位八进制数字(基本权限位)左侧再加一位八进制数字(扩展权限位);
例如:chmod 1777
【例 1】
字符形式:
①授权表示法:直接操作一类用户的几个权限位r,w,x
[root@admin tmp]# ll file
-rw-r--r--. 1 root root 0 8月 2 10:08 file
[root@admin tmp]# chmod u+s file #添加SUID
[root@admin tmp]# ll file
-rwSr--r--. 1 root root 0 8月 2 10:08 file
#如果给属主添加x权限,那么属主的x位上便显示小写s
[root@admin tmp]# chmod u+x file
[root@admin tmp]# ll file
-rwsr--r--. 1 root root 0 8月 2 10:08 file
#删除SUID权限
[root@admin tmp]# chmod u-s file #删除SUID
[root@admin tmp]# ll file
-rwxr--r--. 1 root root 0 8月 2 10:08 file
#添加SGID
[root@admin tmp]# chmod g+x file
[root@admin tmp]# chmod g+s file
#或者
[root@admin tmp]# chmod g+xs file
#添加SBIT
[root@admin tmp]# chmod o+x file
[root@admin tmp]# chmod o+t file
#或者
[root@admin tmp]# chmod o+xt file
#同时添加 SUID、SGID、SBIT
[root@admin tmp]# chmod u+xs,g+xs,o+xt file
②赋权表示法:直接操作一类用户的所有权限位rwx
[root@admin tmp]# chmod u=rwxs file
[root@admin tmp]# ll file
-rwsr--r--. 1 root root 0 8月 2 10:08 file
[root@admin tmp]# chmod u=rwxs,g=xs,o=rxt file
[root@admin tmp]# ll file
-rws--sr-t. 1 root root 0 8月 2 10:08 file
删除也是一样的:
[root@admin tmp]# ll file
-rws--sr-t. 1 root root 0 8月 2 10:08 file
[root@admin tmp]# chmod u-rs,g-xs,o-t file
[root@admin tmp]# ll file
--wx---r-x. 1 root root 0 8月 2 10:08 file
或者:
[root@admin tmp]# chmod u=wx,g=-,o=rx file
【例 2】数字形式:
#添加SUID
[root@admin tmp]# ll file
--wx---r-x. 1 root root 0 8月 2 10:08 file
[root@admin tmp]# chmod 4305 file
[root@admin tmp]# ll file
--ws---r-x. 1 root root 0 8月 2 10:08 file
#添加SGID
[root@admin tmp]# chmod 2305 file
#添加SBIT
[root@admin tmp]# chmod 1305 file
#同时添加SUID和SGID
[root@admin tmp]# chmod 6305 file
#同时添加SUID、SGID、SBIT
[root@admin tmp]# chmod 7305 file
SUID对二进制文件有效,SGID对文件和目录均有效,SBIT只对目录有效
管理 Linux 系统中的文件和目录,除了可以设定普通权限和特殊权限外,还可以利用文件和目录具有的一些隐藏属性
在Linux下我们可以用stat命令查看文件的相关属性信息,除了这些属性之外,Linux下的文件还有一些隐藏的属性
用于显示文件或目录的隐藏属性
用法: lsattr [选项] 文件或目录名
常用选项:
【例 1】
显示当前目录下的所有非隐藏文件的文件隐藏属性信息
[root@admin ~]# lsattr
---------------- ./test
---------------- ./anaconda-ks.cfg
---------------- ./u.sh
---------------- ./userrecord.txt
---------------- ./UserManage.sh
显示当前目录下的所有文件的文件隐藏属性信息
[root@admin ~]# lsattr -a
---------------- ./.
---------------- ./..
---------------- ./test
---------------- ./.bash_logout
---------------- ./.bash_profile
---------------- ./.bashrc
---------------- ./.cshrc
---------------- ./.tcshrc
---------------- ./anaconda-ks.cfg
---------------- ./.bash_history
---------------- ./u.sh
---------------- ./userrecord.txt
---------------- ./.viminfo
---------------- ./.lesshst
---------------- ./UserManage.sh
【例 2】
查看指定文件的隐藏信息
#对于非目录文件,不添加选项
[root@admin ~]# lsattr file
---------------- file
#如果对于目录文件,加 -d 选项
[root@admin ~]# lsattr -d dir/
---------------- dir/
#递归查看
[root@admin dir]# tree
.
├── dir1
│ ├── d1
│ ├── d2
│ ├── f1
│ └── f2
├── dir2
├── file1
└── file2
4 directories, 4 files
[root@admin dir]# lsattr -R dir1
---------------- dir1/d1
dir1/d1:
---------------- dir1/d2
dir1/d2:
---------------- dir1/f1
---------------- dir1/f2
专门用来修改文件或目录的隐藏属性,只有 root 用户可以使用
用法: chattr [±=] [属性] 文件或目录名
注:文件的隐藏属性只对ext2/ext3/ext4文件系统完整有效,其他文件系统可能仅支持部分隐藏属性或者根本不支持隐藏属性
+表示给文件或目录添加属性,- 表示移除文件或目录拥有的某些属性,= 表示给文件或目录设定某些属性
下图列出了chattr 命令常用的属性选项及功能:
属性选项 | 功能 |
---|---|
i | 如果对文件设置 i 属性,那么不允许对文件进行删除、改名,也不能添加和修改数据,不能做硬链接,不能修改文件名; 如果对目录设置 i 属性,那么只能修改目录下文件中的数据,但不允许建立和删除文件; |
a | 如果对文件设置 a 属性,那么只能在文件中増加数据,但是不能删除和修改数据,不能做硬链接,不能修改文件名; 如果对目录设置 a 属性,那么只允许在目录中建立和修改文件,但是不允许删除文件; |
u | 设置此属性的文件或目录,在删除时,其内容会被保存,以保证后期能够恢复,常用来防止意外删除文件或目录。 |
s | 和 u 相反,删除文件或目录时,会被彻底删除(直接从硬盘上删除,然后用 0 填充所占用的区域),不可恢复。 |
A | 文件的atime(access time)不可被修改,这样可以减少磁盘I/O数量,对于笔记本电脑有利于提高续航能力 |
c | 即compresse,文件会自动的经压缩后再存储,读取时会自动的解压 |
d | 即no dump,设定文件不能成为dump程序的备份目标 |
【例 1】
给文件赋予 i 属性
[root@admin dir]# touch file
[root@admin dir]# chattr +i file
[root@admin dir]# lsattr file
----i----------- file
[root@admin dir]# rm -rf file
rm: 无法删除"file": 不允许的操作 #可以看到当被赋予i属性后即使是root用户也没有权力删除
[root@admin dir]# echo "123" >> file #也无法追加信息
-bash: file: 权限不够
可以看到,设置有 i 属性的文件,即便是 root 用户,也无法删除和修改数据。
【例 2】为目录赋予 i 属性
[root@admin dir]# mkdir dtest #创建测试目录dtest
[root@admin dir]# touch dtest/file1 #同时创建测试文件
[root@admin dir]# chattr +i dtest #给该目录设置i属性
[root@admin dir]# lsattr -d dtest #查看是否设置成功
----i----------- dtest
[root@admin dir]# cd dtest
[root@admin dtest]# touch file2 #无法在设置有 i 属性的目录中创建新文件
touch: 无法创建"file2": 权限不够
[root@admin dtest]# echo "123" >> file1 #但是可以修改目录下文件的内容
[root@admin dtest]# cat file1
123
[root@admin dtest]# rm -rf file1 #无法在设置有 i 属性的目录中删除文件
rm: 无法删除"file1": 权限不够
一旦给目录设置 i 属性,即使是 root 用户,也无法在目录内部新建或删除文件,但可以修改文件内容
【例 3】 a属性
当有这样的需求:每天自动实现把服务器的日志备份到指定目录。那么这时备份目录可设置 a 属性,变为只可创建文件而不可删除
[root@admin dtest]# mkdir -p /back/log #建立备份目录
[root@admin dtest]# chattr +a /back/log #赋予a属性
[root@admin dtest]# lsattr -d /back/log
-----a---------- /back/log
[root@admin dtest]# cp /var/log/messages /back/log #可以复制文件和新建文件到指定目录中
[root@admin dtest]# rm -rf /back/log/messages
rm: 无法删除"/back/log/messages": 不允许的操作 #无法删除
注意,通常情况下,不要使用 chattr 命令修改 /、/dev/、/tmp/、/var/ 等目录的隐藏属性,很容易导致系统无法启动。另外,chatrr 命令常与 lsattr 命令合用,前者修改文件或目录的隐藏属性,后者用于查看是否修改成功
vi编辑器是所有Unix及Linux系统下标准的编辑器,他就相当于windows系统中的记事本一样,它的强大不逊色于任何最新的文本编辑器。他是我们使用Linux系统不能缺少的工具。对Unix及linux系统的任何版本,vi编辑器是完全相同的。
vi/vim编辑器
①vi是Visual Interface的缩写,即可视化接口
②vim是vi iMprove的缩写,即vi的增强版(具有语法着色功能)
vi的重要性:
1)所有的Unix Like系统都会内建vi文本编辑器,其他的文本编辑器则不一定会存在;
2)很多个别软件的编辑接口都会主动呼叫vi (例如crontab, visudo, edquota等指令);
3)vim具有程序编辑的能力,可以主动的以字体颜色辨别语法癿正确性,方便程序设计;
4)因为程序简单,编辑速度相当快速。
系统自带教程:vimtutor
在我们最小化安装的系统中,默认是没有安装vim编辑器的
[root@admin ~]# yum install vim -y
vim的模式及模式间切换
简单来说vim的模式有3种,命令模式、输入模式、末行模式。如果再细分可以分为5种,多一个可视化模式和查询模式,实际上这两种包括在末行模式中了
操作 | 操作键 | 功能 |
---|---|---|
光标移动 | ↑,↓,←,→ | 上、下、左、右 |
翻页 | Page Down或Ctrl+F | 向下翻动一整页内容 |
Page Up或Ctrl+B | 向上翻动一整页内容 | |
行内快速跳转 | Home键或“^”或数字“0” | 跳转至行首 |
End键或“$”键 | 跳转至行尾 | |
行间快速跳转 | 1G或gg | 跳转至文件的行首 |
G | 跳转至文件的末行尾 | |
#G | 跳转至文件中的第#行 | |
行号显示 | :set nu | 显示行号 |
:set nonu | 取消显示行号 | |
删除 | x或者Del | 删除光标处的单个字符 |
dd | 删除当前光标所在行 | |
#dd | 删除从光标处开始的#行 | |
d^ | 删除当前光标处到行首的所有字符 | |
d$ | 删除当前光标处到行尾的所有字符 | |
复制 | yy | 复制当前行整行的内容到粘贴板 |
#yy | 复制从光标处开始的#行内容 | |
粘贴 | p | 粘贴到光标处之后 |
P | 粘贴到光标处之前 | |
查询 | /word | 自上而下查找字符串word |
?word | 自下而上查找字符串word | |
n | 与查询的方向一致 | |
N | 与查询的方向相反 |
输入模式:
末行模式:
功能 | 命令 | 备注 |
---|---|---|
保存文件 | :w | |
:w /tmp/newfile | 另存为其他文件 | |
退出vi | :q | 未修改退出 |
:q! | 放弃对文件内容的修改强制退出 | |
保存并退出 | :wq | |
编辑 | :e ~/install | 打开新的文件进行编辑 |
读入文件 | :r /etc/passwd | 在当前文件中读入其他文件 |
查找并替换 | : s /old/new | 将当前行中查找到第一个字符“old”替换为“new” |
: s /old/new/g | 将当前行中查找到的所有“old”字符串替换为“new” | |
:#,# s/old/new/g | 在行号“#,#”范围内替换所有字符串“old”为“new” | |
:% s/old/new/g | 在整个文件的范围内替换所有的字符串 | |
: s /old/new/c | 在替换命令行末尾加入c命令,将对每个替换动作提示用户进行确认 |
提示:在查找替换时可以使用正则进行匹配
:% s/admin\+/stream/g
1、 打开文件
①vim /path/to/somefile
[root@admin ~]# vim /etc/passwd
②vim +# :打开文件,并定位于第#行
[root@admin ~]# vim +3 /etc/passwd
③vim +:打开文件,定位至最后一行
④vim +/PATTERN : 打开文件,定位至第一次被PATTERN匹配到的行的行首
[root@admin ~]# vim +/ro /etc/passwd
2、关闭文件
模式 | 操作 | 说明 |
---|---|---|
末行模式下: | :q | 退出 |
:wq | 保存退出 | |
:q! | 强制退出 | |
:w | 保存 | |
:w! | 强制保存 | |
命令模式下: | ZZ | 保存退出 |
3、 移动光标
命令模式下:
功能 | 操作键 | 说明 |
---|---|---|
逐字符移动 | h | 向左 |
l | 向右 | |
j | 向下 | |
k | 向上 | |
#h | 移动#个字符 | |
以单词为单位移动 | w | 移到下一个单词的词首 |
e | 跳至当前或下一个单词的词尾 | |
b | 跳至当前或上一个单词的词首 | |
#w | 表示移动#个单词 | |
行内跳转 | 0 | 绝对行首 |
^ | 行首第一个非空白字符 | |
$ | 绝对行尾 | |
行间跳转 | #G | 跳转到第#行 |
G | 最后一行 |
末行模式下:
行间跳转:直接输入行号 回车即可
4、 翻屏
命令模式下:
Ctrl+f:向下翻一屏
Ctrl+b:向上翻一屏
Ctrl+d:向下翻半屏
Ctrl+u:向上翻半屏
5、 删除
①删除单个字符:
②删除命令:d
6、 粘贴
7、 复制(用法同d命令)
命令模式下:
末行模式下:
8、 修改
用法同删除d命令,先删除然后再改为输入模式
9、替换
10、 撤销操作
11、 重新前一次编辑操作
.:
比如 上一次dd删除了一行,现在输入.就可以重复dd删除行的操作
12、 可视化操作
在图形界面的操作系统中的文字编辑器,用户可以使用鼠标来选择要操作的文本,非常方便。在 Vim 编辑器中也有类似的功能,但不是通过鼠标,而是通过键盘来选择要操作的文本。
在 Vim 中,如果想选中目标文本,就需要调整 Vim 进入可视化模式,如下图所示,通过在 Vim 命令模式下键入不同的键,可以进入不同的可视化模式。
命令 | 功能 |
---|---|
v(小写) | 又称字符可视化模式,此模式下目标文本的选择是以字符为单位的,也就是说,该模式下要一个字符一个字符的选中要操作的文本;键盘控制光标划过的区域被选取 |
V(大写) | 又称行可视化模式,此模式化目标文本的选择是以行为单位的,也就是说,该模式化可以一行一行的选中要操作的文本;键盘控制光标划过的行被选取 |
Ctrl+v(组合键) | 又称块可视化模式,该模式下可以选中文本中的一个矩形区域作为目标文本,以按下 Ctrl+v 位置作为矩形的一角,光标移动的终点位置作为它的对角。 |
Vim 成功进入可视化模式的标志:
①字符可视化模式:窗口底部出现 --VISUAL-- 标志
②行可视化模式:窗口底部出现 --VISUAL LINE–标志
③块可视化模式:窗口底部出现 --VISUAL BLOCK–标志
13、查找
末行模式下:
14、查找并替换
在末行模式下使用s命令
15、 与shell交互
末行模式下:
! command
即可
例如: ! ls /etc/:会列出/ect目录下所有文件及目录 按enter后回到vim编辑状态
16、 高级操作
在末行模式下:
在 Vim 末行模式下,通过 “:set nu” 命令可以让 Vim 显示行号,但只是临时有效,下次使用 Vim 编辑文件还是不显示行号。在编辑配置文件中设置 Vim 的方式,对 Vim 的设置是永久的
①显示或取消行号
set nu(set number):显示行号
set nonu:取消显示行号
②显示忽略或区分字符大小写
set ic (set ignorecase):忽略大小写
set noignorecase:区分大小写
③设定自动缩进
set ai(set autoindent):自动缩进
set noai:取消自动缩进
④查找到的文本高亮或取消高亮显示
set hlsearch:高亮显示搜索到的文本
set nohlsearch:取消高亮显示搜索到的文本
⑤语法高亮
syntax on:打开语法高亮显示
syntax off:关闭语法高亮显示
⑥突出显示当前行
set cursorline
⑦设置 Tab 键宽度
set tabstop=4 设置 Tab 键宽度为 4 个空格
⑧启动鼠标
set mouse=a
set selection=exclusive
set selectmode=mouse,key
Vim 编辑器里默认是不启用鼠标的,通过此设置即可启动鼠标
如果是使用vim打开文件,并在末行模式下输入以上环境设置参数,那么只对当前vim打开的文件生效。要想永久生效可以将以上Vim环境设置参数写入到以下vim配置文件中
17、 vim配置文件(CentOS 7)
注意,Vim 用户配置文件比系统配置文件的优先级高,换句话说,Vim 启动时,会优先读取 Vim 用户配置文件(位于主目录中的)
[root@admin ~]# echo "set nu" >> /root/.viminfo # root用户用vim打开文件时,显示行号
vim练习:
写出下列要求要执行的命令,如果是在末行模式下执行,需写出“:”号,注意大小写。(在命令模式下输入冒号: ,便进入末行模式)
向后搜索字符串stream
进入命令模式下,输入 :/stream
回车,按n键,向文件后跳转到下一个stream字符串处
或者输入:?stream
回车,按N键也可以实现同样效果
说明:查找位置是从你输入查找命令之前光标所在位置开始;/ 表示自上而下查找 ,?表示自下而上查找;执行后,查找到的字符串将高亮显示;n键表示跳转到与文件搜索顺序相同的下一个stream字符串处,N键表示跳转到与搜索相反顺序的下一个stream字符串处
向前搜索字符串uplook
进入命令模式下,输入 :/uplook
回车,按N键,向文件首部位置跳转到上一个uplook字符串处
或者输入:?uplook
回车,按n键也可以实现同样效果
复制10行然后粘贴
进入命令模式下,将光标定位到要复制所在10行中的第一行(这10行必须是连续的),输入10yy
,然后将光标定位到要粘贴到的地方的上一行按下 p
键(小写p,是将粘贴板的内容复制到光标所在行的下一行)即可实现
将光标移到第55行
进入命令模式,输入 55G
即可实现 或 在命令模式下输入 :55
回车即可
将光标移到最末行
进入命令模式,输入 G
即可实现
删除共20行
进入命令模式,将光标定位到要删除的20行(该20行必须是连续的)中的第一行,输入 20dd
即可删除这连续的20行(包括删除光标所在行)
恢复前一步的操作
在命令模式下输入u
即可实现撤销
将光标移到行首
在命令模式下,按0
键或 Home
键或输入 ^
将光标移到行尾
在命令模式下,按End
键或输入 $
将从第10行到第50行的内容写入/back/file1
在命令模式下输入 :10,50w /back/file1
回车即可。这里会将第10行和第50行的内容也会写入,所以总共是41行
:10,50w /back/file1 #输入后回车执行
"/back/file1" [新] 41L, 2009C 已写入 #这里会有提示信息,新文件file1,41行,2009个 字符
将从当前行开始,总共20行的内容存入/back/file2
在命令模式下输入 :.,+19w /back/file2
回车即可。这里会将当前行及以后的19行(总共20行)的内容写入到file2文件中;这里的当前行是指光标所在行
:.,+19w /back/file2
"/back/file2" [新] 20L, 872C 已写入
读取/tmp/hello.txt文件的内容插入当前行后面
在命令模式下输入 :r /tmp/hello.txt
回车即可,这里的当前行是指光标所在行(会插入到当前行的下一行)
替换第20行到第80行中的所有httpd为bind
在命令模式下输入 :20,80 s/httpd/bind/g
回车即可
:s /old/new
表示 将当前行中查找到第一个字符“old”替换为“new”
:#,# s/old/new/g
表示 在行号“#,#”范围内替换所有字符串“old”为“new”
:% s/old/new/g
表示 在整个文件的范围内替换所有的字符串
:s /old/new/c
在替换命令行末尾加入c命令,将对每个替换动作提示用户进行确认
在末行模式下使用s命令:
:ADDR1,ADDR2 s/PATTERN/String/gi
ADDR1,ADDR2 表示地址;比如1,$表示全文 (%也表示全文)
PATTERN:查找的匹配模式,可以使用正则表达式进行查找匹配
s:查找并替换操作
g:表示全局替换,不加g表示只替换在每行查找到的第一个字符串
i:表示忽略大小写
替换文中全部的root为admin
在命令模式下输入:% s/root/admin/g
回车即可
在每一行的行首插入字符串new
在命令模式下输入:% s/^/new/g
回车即可
在第10行到第50行的行尾插入字符串new
在命令模式下输入:10,50 s/$/new/g
回车即可
让vi显示每一行的行号
在命令模式下输入:set nu
回车即可