2.17 隐藏权限lsattr_chattr
- # chattr 设置隐藏权限
示例:[root@localhost tmp]# chattr +i test.txt (给test.txt文件添加一个隐藏的i权限)
编辑:[root@localhost tmp]# vi test.txt
提示文件只读
[root@localhost tmp]# head -n2 /etc/passwd > test.txt
-bash: test.txt: 权限不够
查看权限
[root@localhost tmp]# ls -l test.txt
-rw-r--r--. 1 root root 0 7月 30 15:35 test.txt
可以看到root用户是有读写权限的,这时候就要考虑是否有什么隐藏权限
- lsattr`**查看隐藏权限**
[root@localhost tmp]# lsattr test.txt
----i----------- test.txt
这里可以看到test.txt文件有一个i权限,正常情况下新建一个文件是没有任何隐藏权限的
加了i
权限之后 不能mv(重命名) rm
(删除) vi
(编辑) touch
(更改时间) >
(覆盖)
如何去除i
权限?
# chattr -i test.txt
- 另一种用法 :
# chattr +a test.txt
只能追加,不允许其他操作
[root@localhost tmp]# chattr +a test.txt
[root@localhost tmp]# mv test.txt test2.txt
mv: 无法将"test.txt" 移动至"test2.txt": 不允许的操作
[root@localhost tmp]# rm test.txt
rm:是否删除普通空文件 "test.txt"?y
rm: 无法删除"test.txt": 不允许的操作
[root@localhost tmp]# head -n2 /etc/passwd > test.txt
-bash: test.txt: 不允许的操作
[root@localhost tmp]# touch test.txt
[root@localhost tmp]# head -n2 /etc/passwd >> test.txt
[root@localhost tmp]# cat test.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
由上可以看到赋予test.txt a
的隐藏权限后,允许追加,类似于日志,还允许touch
(更改时间),不允许其他操作。
如何去除a
权限? # chattr -a test.txt
#lsattr
可以查看目录下面的子目录和文件,不能查看目录本身
[root@localhost tmp]# ls 111
222
[root@localhost tmp]# lsattr 111
---------------- 111/222
#lsattr -d
可以 查看目录本身,和#ls -d
用法相同
[root@localhost tmp]# lsattr -d 111
---------------- 111
知识点:给目录加i
权限和给文件加i
权限,实际上是一样的。但是针对已存在目录下的文件,限制不大,依然可以对目录下的文件进行编辑,a
权限也是,只能限制目录本身。
#lsattr -R
可以查看目录和目录下子目录里所有的文件权限
[root@localhost tmp]# lsattr -R 111
---------------- 111/222
111/222:
---------------- 111/222/333
111/222/333:
完整的目录
[root@localhost tmp]# tree 111
111
└── 222
└── 333
2 directories, 0 files
知识点:#lsattr -a
可以查看隐藏文件的隐藏权限
2.18 特殊权限set_uid
此时就被称为Set UID,简称为SUID的特殊权限 ,当普通用户执行passwd命令时,可以临时获得root权限,从而可以更改密码
- 当s这个标志出现在文件拥有者的x权限上时,例如passwd这个命令:
SUID的限制与功能:
- SUID权限仅对于二进制可执行文件有效,不能用在普通文件上,对目录也是无效的;
- 执行者对于该程式需要具有x的可执行权限;
- 本权限仅在执行该程式的过程中有效;
- 执行者将具有该程式拥有者(owner)的权限。
chmod u+s 添加特殊权限
[root@localhost ~]# ls -l /bin/ls
-rwsr-xr-x. 1 root root 117672 4月 11 12:35 /bin/ls
chmod u-s 解除特殊权限
[root@localhost ~]# ls -l /bin/ls
-rwxr-xr-x. 1 root root 117672 4月 11 12:35 /bin/ls
2.19 特殊权限set_gid
该权限可以作用在文件上(二进制可执行文件),也可以作用在目录上.当作用在文件上时,其功能和set_uid一样,它会使文件在执行阶段具有文件所属组的权限.目录被设置这个权限后,任何用户在此目录下创建的文件都具有和该目录所属的组相同的组
chmod g+s 添加特殊权限(添加权限后创建的文件或目录与上一级的所属组一致)
[root@localhost ~]# chmod g+s /bin/ls
[root@localhost ~]# ls -l /bin/ls
-rwxr-sr-x. 1 root root 117672 4月 11 12:35 /bin/ls
chmod g-s 解除特殊权限
[root@localhost ~]# chmod g-s /bin/ls
[root@localhost ~]# ls -l /bin/ls
-rwxr-xr-x. 1 root root 117672 4月 11 12:35 /bin/ls
2.20 特殊权限stick_bit
stick_bit 防止被别的用户删除 ,谁的文件谁做主。(PS : root用户除外 , 它是超级管理员 , 防止不了,更改成777权限也无效)
chmod o+t 目录
[root@localhost tmp]# ls -ld /tmp
drwxrwxrwt. 10 root root 4096 7月 30 21:11 /tmp
2.21 软链接文件
软链接 尽量使用绝对路径
ln -s /原文件或目录 /目标文件或目录(软链接文件或目录)
[root@localhost tmp]# ln -s /tmp/yum.log /root/yum.log
[root@localhost tmp]# ll /root/
总用量 4
-rw-------. 1 root root 1117 7月 22 13:59 anaconda-ks.cfg
drwxr-xr-x. 2 user1 root 32 7月 30 22:23 dir3
lrwxrwxrwx. 1 root root 12 7月 30 23:59 yum.log -> /tmp/yum.log
2.22 硬链接文件
硬链接 只能给文件做硬链接,不能给目录做硬链接
硬链接可删除,因文件存在inode里;
ln 文件 硬链接文件 创建硬链接
注:文件只能在同分区内创建硬链接;不能跨分区;因分区有独立的inode;
2.23 find命令
ctrl 常用组合键:
find命令通常可以用于按文件名、文件类型、用户甚至是时间戳查找文件。
- Ctrl+l 清屏
- Ctrl+d 结束或退出
- Ctrl+c 中断
- Ctrl+u 清除当前光标之前的内容
- Ctrl+k 清除当前光标之后的内容
- Ctrl+a 切换到命令行开始
- Ctrl+e 切换到命令行末尾
find命令的常用选项及实例
-name
按照文件名查找文件。
find /dir -name filename
在/dir目录及其子目录下面查找名字为filename的文件
find . -name “*.txt”
在当前目录及其子目录(用“.”表示)中查找任何扩展名为“.txt”的文件
-perm
按照文件权限来查找文件。
find . -perm 755 –print
在当前目录下查找文件权限位为755的文件,即文件属主可以读、写、执行,其他用户可以读、执行的文件
-user
按照文件属主来查找文件。
-group
按照文件所属的组来查找文件。
-mtime -n +n
按照文件的更改时间来查找文件, – n表示文件更改时间距现在n天以内,+ n表示文件更改时间距现在n天以前。
find / -mtime -5 –print
在系统根目录下查找更改时间在5日以内的文件
find /tmp/ -mtime +3 –print
在/tmp目录下查找更改时间在3日以前的文件
-type
查找某一类型的文件
诸如:
b – 块设备文件。
d – 目录。
c – 字符设备文件。
p – 管道文件。
l – 符号链接文件。
f – 普通文件。
借助-exec选项与其他命令结合使用
找出当前目录下所有root的文件,并把所有权更改为用户xzl # find .-type f -user root -exec chown xzl {} \;
上例中,{} 用于与-exec选项结合使用来匹配所有文件,然后会被替换为相应的文件名。
找出自己家目录下所有的.txt文件并删除 # find $HOME/. -name "*.txt" -ok rm {} \;
上例中,-ok和-exec行为一样,不过它会给出提示,是否执行相应的操作。
查找当前目录下所有.txt文件并把他们拼接起来写入到all.txt文件中 # find . -type f -name "*.txt" -exec cat {} \;> all.txt
将30天前的.log文件移动到old目录中 find . -type f -mtime +30 -name "*.log" -exec cp {} old \;
找出当前目录下所有.txt文件并以“File:文件名”的形式打印出来 # find . -type f -name "*.txt" -exec printf "File: %s\n" {} \;
因为单行命令中-exec参数中无法使用多个命令,以下方法可以实现在-exec之后接受多条命令 # -exec ./text.sh {} \;
find其他技巧收集
要列出所有长度为零的文件 # find . -empty
根据inode查找所有相同inode号的文件 # find . -inum 35170257
2.24 文件名后缀
Linux系统是区分大小写的,不像windows一样,后缀名并不代表它是什么样的文件
管理员习惯的把相同的文件定义相同的后缀名,方便大家使用区分和查询 # echo $LANG
查看系统默认语言
2.25 Linux和windows互传文件
前提:只能在Xshell下使用,或者Securecrt,Putty不支持
安装工具包:
# yum install -y lrzsz
Linux向Windows传输文件 # sz test.txt
会弹出窗口,选择保存到桌面后,就可以发现test.txt文件就已经放到系统桌面上了
Windows向linux传输文件
# rz
上传完毕后就会查看到刚才上传的文件(传输到当前目录)