[命令] Linux 命令 chmod (管理权限)

内容目录:

内容一:普通权限的管理
1.1 普通权限的介绍
1.1.1 对于文件而言
1.1.2 对于目录而言
1.1.3 用数字代替权限的方法
1.2 管理权限案例
1.2.1 给一个文件或目录添加权限的案例
1.2.1.1 案例一
1.2.1.2 案例二
1.2.1.3 案例三
1.2.1.4 案例四
1.2.2 给一个文件或目录撤销权限的案例
1.2.2.1 案例一
1.2.2.2 案例二
1.2.2.3 案例三
1.2.2.4 案例四
1.2.3 设定某一个文件或目录的权限的案例
1.2.3.1 案例一
1.2.3.2 案例二
1.2.3.3 案例三
1.2.3.4 案例四
1.2.3.5 案例五
1.2.3.6 案例六
1.2.3.7 案例七

内容二:特殊权限的管理
2.1 特殊权限 SUID
2.1.1 SUID 介绍
2.1.2 SUID 权限的添加的案例
2.1.2.1 添加 SUID 权限的案例
2.1.2.2 显示 SUID 权限的添加情况的案例
2.1.2.2.1 显示有 SUID 权限,但是所属主没有执行权限的文件的案例
2.1.2.2.2 显示有 SUID 权限,并且所属主有执行权限的文件的案例
2.2 特殊权限 SGID
2.2.1 SGID 介绍
2.2.2 SGID 权限的添加的案例
2.2.2.1 添加 SGID 权限的案例
2.2.2.2 显示 SGID 权限的添加情况的案例
2.2.2.2.1 显示有 SGID 权限,但是所属组没有执行权限的目录的案例
2.2.2.2.2 显示有 SGID 权限,并且所属组有执行权限的目录的案例
2.3 特殊权限 SBIT
2.3.1 SBIT 介绍
2.3.2 SBIT 权限的添加的案例
2.3.2.1 添加 SBIT 权限的案例
2.3.2.2 显示 SBIT 权限的添加情况的案例
2.3.2.2.1 显示有 SBIT 权限,但是所属主没有执行权限的目录的案例
2.3.2.2.2 显示有 SBIT 权限,并且所属主有执行权限的目录的案例

具体的内容:

内容一:普通权限的管理
1.1 普通权限的介绍
1.1.1 对于文件而言

1) r 代表读权限
2) w 代表写权限
3) x 代表执行权限

1.1.2 对于目录而言

1) r 代表可以看到目录
2) w 代表可以对目录进行增、删、改、查和在里面创建文件和目录
3) x 代表可以进入目录

1.1.3 用数字代替权限的方法

1) 0 代表 —
2) 1 代表 –x
3) 2 代表 -w-
4) 3 代表 -wx
5) 4 代表 r–
6) 5 代表 r-x
7) 6 代表 rw-
8) 7 代表 rwx

1.2 管理权限案例
1.2.1 给一个文件或目录添加权限的案例
1.2.1.1 案例一

# chmod u+x test.txt

(补充:这里以给 test.txt 文件的所属主添加执行权限为例)

1.2.1.2 案例二

# chmod u+r,g+w test.txt

(补充:这里以给 test.txt 文件的所属主添加执行权限,给文件的所属组添加写权限)

1.2.1.3 案例三

# chmod +x test.txt

(补充:这里以给 test.txt 文件的所属主、所属组和其他用户添加执行权限)

1.2.1.4 案例四

# chmod a+x test.txt

(补充:这里以给 test.txt 文件的所属主、所属组和其他用户添加执行权限)

1.2.2 给一个文件或目录撤销权限的案例
1.2.2.1 案例一

# chmod u-x test.txt

(补充:这里以给 test.txt 文件的所属主撤销执行权限)

1.2.2.2 案例二

# chmod u-r,g-w test.txt

(补充:这里以给 test.txt 文件的所属主撤销执行权限,给文件的所属组撤销写权限)

1.2.2.3 案例三

# chmod -x test.txt

(补充:这里以给 test.txt 文件的所属主、所属组和其他用户撤销执行权限)

1.2.2.4 案例四

# chmod a-x test.txt

(补充:这里以给 test.txt 文件的所属主、所属组和其他用户撤销执行权限)

1.2.3 设定某一个文件或目录的权限的案例
1.2.3.1 案例一

# chmod u=rwx test.txt 

(补充:这里以设置 test.txt 文件的所属主拥有读、写和执行的权限)

1.2.3.2 案例二

# chmod u=rw- test.txt

(补充:这里以设置 test.txt 文件的所属主拥有读和写的权限,但是没有执行的权限)

1.2.3.3 案例三

# chmod u=--- test.txt

(补充:这里以设置 test.txt 文件的所属主没有任何权限)

1.2.3.4 案例四

# chmod u=

(补充:这里以设置 test.txt 文件的所属主没有任何权限)

1.2.3.5 案例五

# chmod u=rw,g=, test.txt

(补充:这里以设置 test.txt 文件的所属主拥有读和写的权限,但是没有执行的权限。设置文件的所属组没有任何权限)

1.2.3.6 案例六

# chmod u=rw,g=---,0= test.txt

(补充:这里以设置 test.txt 文件的所属主拥有读和写的权限,但是没有执行的权限。设置文件的所属组没有任何权限。设置文件的其他用户没有任何权限)

1.2.3.7 案例七

# chmod 755 test.txt

(补充:这里以设置 test.txt 文件的所属主拥有读、写和执行的权限。设置文件的所属组有读和执行的权限。设置文件的其他用户有读和执行的权限)

内容二:特殊权限的管理
2.1 特殊权限 SUID
2.1.1 SUID 介绍

1) SUID:全名 Set UID
2) SUID 的作用:让没有此文件执行权限的用户,可以执行这个文件
3) SUID 的权限数字 4000

2.1.2 SUID 权限的添加的案例
2.1.2.1 添加 SUID 权限的案例

# chmod u+s test.txt

或者:

# chmod 4644 test.txt

(补充:这里以对 test.txt 文件进行操作为例)

2.1.2.2 显示 SUID 权限的添加情况的案例
2.1.2.2.1 显示有 SUID 权限,但是所属主没有执行权限的文件的案例

# ls -l test.txt 
-rwSr--r-- 1 root root 0 12月  8 05:27 test.txt

(补充:这里以对 test.txt 文件进行操作为例)

2.1.2.2.2 显示有 SUID 权限,并且所属主有执行权限的文件的案例

# ls -l test.txt 
-rwsr--r-- 1 root root 0 12月  8 05:27 test.txt

(补充:这里以对 test.txt 文件进行操作为例)

2.2 特殊权限 SGID
2.2.1 SGID 介绍

1) SGID:全名 Set GID
2) SGID 的作用:在此目录下创建的文件,将都和此目录的所属组一样
3) SGID 的权限数字 2000

2.2.2 SGID 权限的添加的案例
2.2.2.1 添加 SGID 权限的案例

# chmod g+s test

或者:

# chmod 2644 test

(补充:这里以对 test.txt 文件进行操作为例)

2.2.2.2 显示 SGID 权限的添加情况的案例
2.2.2.2.1 显示有 SGID 权限,但是所属组没有执行权限的目录的案例

# ls -l test
-rw-r-Sr-- 1 root root 0 12月  8 05:27 test

(补充:这里以对 test.txt 文件进行操作为例)

2.2.2.2.2 显示有 SGID 权限,并且所属组有执行权限的目录的案例

# ls -l test
-rw-r-sr-- 1 root root 0 12月  8 05:27 test

(补充:这里以对 test.txt 文件进行操作为例)

2.3 特殊权限 SBIT
2.3.1 SBIT 介绍

1) SBIT:全名 Sticky Bit
2) SBIT 的作用:在此目录下创建的文件,只有创建此文件的用户和 root 用户可以删除
3) SBIT 的权限数字 1000

2.3.2 SBIT 权限的添加的案例
2.3.2.1 添加 SBIT 权限的案例

# chmod o+t test

或者:

# chmod 1644 test

(补充:这里以对 test.txt 文件进行操作为例)

2.3.2.2 显示 SBIT 权限的添加情况的案例
2.3.2.2.1 显示有 SBIT 权限,但是所属主没有执行权限的目录的案例

# ls -l test
-rw-r--r-T 1 root root 0 12月  8 05:27 test

(补充:这里以对 test.txt 文件进行操作为例)

2.3.2.2.2 显示有 SBIT 权限,并且所属主有执行权限的目录的案例

# ls -l test
-rw-r--r-t 1 root root 0 12月  8 05:27 test

(补充:这里以对 test.txt 文件进行操作为例)

[命令] Linux 命令 find (查找文件或目录)

内容目录:

内容一:find 格式

内容二:find 选项

内容三:find 参数
3.1 匹配名称的参数
3.2 匹配属性的参
3.3 匹配所有者的参数
3.4 匹配权限的参数
3.5 匹配时间的参数
3.6 匹配大小的参数
3.7 匹配目录的参数
3.8 匹配格式化方式的参数
3.9 逻辑匹配参数

内容四:find 的使用案例
4.1 案例一:匹配名称的参数
4.2 案例二:匹配属性的参
4.3 案例三:匹配所有者的参数
4.3.1 从当前目录开始查找所属主是 root 的文件和目录
4.3.2 从当前目录开始查找没有所属主和所属组的文件和目录
4.3.3 查找所有所属主是 natasha 的文件并将它们复制到 /root/findfiles 目录下
4.4 案例四:匹配权限的参数
4.4.1 从当前目录开始查找所有权限为 0777 的文件,并将其显示出来
4.4.2 从当前目录开始查找权限为 222 的文件
4.4.3 从当前目录开始查找有任何执行权限的文件和目录
4.4.4 查找所有包含特殊权限的文件和目录
4.5 案例五:匹配时间的参数
4.5.1 从当前目录开始查找 10 天内被修改过的文件
4.5.2 从 /var/log/mysql 目录开始查找在过去 3 天被修过的文件和目录,并在确认后将其删除
4.6 案例六:匹配大小的参数
4.6.1 从当前目录开始查找所有大小为 0 的文件,并将其显示出来
4.6.2 从当前目录开始查找所有大小为 0 的文件
4.7 案例七:匹配目录的参数
4.8 案例八:匹配格式化方式的参数
4.9 案例九:逻辑匹配参数
4.9.1 从当前目录开始查找以 “.txt” 结尾和以 “.dox” 结尾的文件
4.9.2 从当前目录开始查找权限不是 777 的文件
4.9.3 从当前目录开始查找权限为 2000 和 4000 的文件,并分析文件属性

具体的内容:

内容一:find 格式

# find <directory> <parameter> <parameter> ...... -print <-exec|-ok> <command|file> {<command>} \;

内容二:find 选项

1) 目录 指需要查找的目录
2) 参数 限制匹配的条件,可以有多个
3) -print 将匹配的结果进行标准输出
4) -exec 对匹配的结果执行后面的步骤
5) -ok 和 -exec 的作用相同,只不过每执行一步就需要用户确认一下
6) command 对匹配的结果执行命令
7) file 对匹配的结果进行文件种类分析,后面的 {} 里的命令必须为空
8) 命令 对匹配结果要执行的命令

(注意:<-exec|-ok> {} \;,这是一个固定格式,谁也不能被缺少。并且 {<命令>} 和 \ 之间有一个空格)

内容三:find 参数
3.1 匹配名称的参数

1) -name n 名称是 n 的文件或目录
2) -iname n 名称是 n 的文件或目录,并且忽略大小写
3) -lname n 名称是 n 的链接

(注意:在 3) 参数中,n 是被链接文件的名称而不是链接文件本身的名称)

3.2 匹配属性的参

-type n :文件类型是 n 的文件

(补充:这里的 n 可以是 d、f、l,它们分别代表目录、文件、链接)

3.3 匹配所有者的参数

1) -uid n 所属 gid 是 n 的文件或目录
2) -user n 所属主名称为 n 的文件或目录
3) -gid n 所属 gid 是 n 的文件或目录
4) -group n 所属组名称为 n 的文件或目录
5) -nouser 匹配无所属主的文件或目录
6) -nogroup 匹配无所属组的文件或目录

3.4 匹配权限的参数

1) -perm /u=n 所属主权限是 n 的文件或目录
2) -perm /u=n 所属组权限是 n 的文件或目录
3) -perm /o=n 所其他的权限是 n 的文件或目录

(补充:在以上 1) 到 3) 参数中 n 可以是 r、w、x 它们分别代表读权限、写权限、执行权限)

4) -perm -n 所属主、所属组、其他的权限是 n 的文件或目录

(补充:在 (4 参数中 n 是可以是 1、2、4)

5) -perm nnn 权限是 nnn 的文件或目录


补充:
在 5) 参数中:
n 是数字
第一个 n 是特殊权限
第二个 n 是所属主的权限
第三个 n 是所属组的权限
第四个 n 是其他的权限
例:600

6) -perm nnnn 权限是 nnnn 的文件或目录


补充:
在 6) 参数中:
n 是数字
第一个 n 是特殊权限
第二个 n 是所属主的权限
第三个 n 是所属组的权限
第四个 n 是其他的权限
例:0600

3.5 匹配时间的参数

1) -amin n 在过去 n 分钟内被读取过的文件或目录
2) -anewer file 比文件 file 更晚被读取过的文件或目录
3) -atime n 在过去 n 天内被读取过的文件或目录
4) -mmin n 在过去 n 分钟内被修改过内容的文件或目录
5) -mnewer file 比文件 file 更晚被修改过内容的文件或目录
6) -mtime n 在过去 n 天内被修改过内容的文件或目录
7) -cmin n 在过去 n 分钟内被修改过属性(比如新建)的文件或目录
8) -cnewer file 比文件 file 更晚被修改过属性(比如新建)的文件或目录
9) -ctime n 在过去 n 天内被修改过属性(比如新建)的文件或目录

(补充:在以上 1) 到 9) 参数中 n 是数字, +n 表示 n 以前,-n 表示 n 以内,n 表示第 n)

3.6 匹配大小的参数

1) -empty 为空的文件或目录
2) -size n 文件大小是 n 的文件或目录

(补充:在 2) 参数中 n 是数字, +n 表示比 n 大,-n 表示比 n 小,单位有 b、m、g 等)

3.7 匹配目录的参数

1) -path ‘n’ 路径名称符合 n 的文件或目录
2) -ipath ‘n’ 路径名称符合 n 的文件或目录,并且忽略大小写
3) -depth n 路径深度为 n 的文件或目录
4) -maxdepth n 最大路劲深度为 n 的文件或目录

(补充:在以上 1) 到 4) 参数中 n 是数字)

3.8 匹配格式化方式的参数

1) -fstype n 匹配硬盘格式为 n 文件或目录

(补充:1) 参数中 n 可以是 ext3、ext4、xfs 等硬盘格式)

2) -mount 是被挂载的文件或目录

3.9 逻辑匹配参数

1) -not 不匹配后面的参数,需要放在其他参数前面
2) ! 不匹配后面的参数,需要放在其他参数前面
3) -a 和,需要放在两个参数之前
4) -and 和,需要放在两个参数之前
5) -o 或,需要放在两个参数之前
6) -or 或,需要放在两个参数之前
7) <parameter> ( <parameter> n <parameter> ) 指定将某两个参数作为一个整体和另一个逻辑参数进行匹配
8) <parameter> -prune -n <parameter> <parameter> 指定某两个参数进行逻辑匹配

(补充:在以上 7) 到 8) 参数中 n 可以是 -a、-and、-o、-or 以上 3) 到 6) 参数)

内容四:find 的使用案例
4.1 案例一:匹配名称的参数

从当前目录开始查找以 txt 结尾的文件和目录

# find . -name "*\.txt"

4.2 案例二:匹配属性的参

从当前目录开始查找目录

# find . -type d

4.3 案例三:匹配所有者的参数
4.3.1 从当前目录开始查找所属主是 root 的文件和目录

# find . -user root

4.3.2 从当前目录开始查找没有所属主和所属组的文件和目录

# find . -nouser -o -nogroup

4.3.3 查找所有所属主是 natasha 的文件并将它们复制到 /root/findfiles 目录下

# find / -user natasha -exec cp -rp {} /root/findfiles/ \;

4.4 案例四:匹配权限的参数
4.4.1 从当前目录开始查找所有权限为 0777 的文件,并将其显示出来

# find . -type f -perm 0777 -exec ls -l {}\;

4.4.2 从当前目录开始查找权限为 222 的文件

# find . -type f -perm -2

4.4.3 从当前目录开始查找有任何执行权限的文件和目录

# find . -perm /a=x

4.4.4 查找所有包含特殊权限的文件和目录

# find / -type f \( -perm -1000 -o -perm -2000 -o -perm -4000 \) -print

4.5 案例五:匹配时间的参数
4.5.1 从当前目录开始查找 10 天内被修改过的文件

# find . -ctime -10

4.5.2 从 /var/log/mysql 目录开始查找在过去 3 天被修过的文件和目录,并在确认后将其删除

# find /var/log/mysql -type f -mtime +3 -ok rm {}\;

4.6 案例六:匹配大小的参数
4.6.1 从当前目录开始查找所有大小为 0 的文件,并将其显示出来

# find . -type f -size 0 -exec ls -l {} \;

4.6.2 从当前目录开始查找所有大小为 0 的文件

# find . -type f -empty

4.7 案例七:匹配目录的参数

从 / 目录和 /proc/ 目录开始查找文件格式为 ext3 无所属主或所属组的文件和目录

# find / -path '/proc/*' -prune -o -fstype ext3 -nouser -o -nogroup

4.8 案例八:匹配格式化方式的参数

从 \ 目录开始查找以

# find . -type f

4.9 案例九:逻辑匹配参数
4.9.1 从当前目录开始查找以 “.txt” 结尾和以 “.dox” 结尾的文件

# find . -type f \( -name "*.txt" -or -name "*.dox" \)

4.9.2 从当前目录开始查找权限不是 777 的文件

# find . -type f ! -perm 777

4.9.3 从当前目录开始查找权限为 2000 和 4000 的文件,并分析文件属性

# find . -type f \( -perm -2000 -o -perm -4000 \) -exec file {} \;

[工具] Shell 批量检测服务器 TCP 端口的联通状态 (telnet 版)

介绍:

作者:朱明宇
名称:批量检测服务器 TCP 端口的联通状态
作用:批量检测服务器 TCP 端口的联通状态,并将此服务器无法联通的端口存储到 $checklist 文件里

使用方法:
1. 将此脚本和端口清单 $portlist 文件放在同一目录下
2. 端口清单 $portlist 每一个端口占用一行,格式为:<要联通端口号对应的 IP 地址>:<要联通的端口号>:<端口功能>,并和此脚本放在同一目录下
3. 在此脚本的分割线内写入相应的内容
4. 给此脚本添加执行权限
5. 执行此脚本,并将要测试的服务器 IP 地址跟在脚本的后面,例:. <脚本名> <服务器 IP 地址 1> <服务器 IP 地址 2> ……

脚本分割线里的变量:
1. portlist=tcp_ports.txt #存放要测试的 TCP 端口的文件
2. checklist=tcp_ports_checklist.txt #存放测试结果的文件

注意:
1. 此脚本执行前必须要先保证执行本脚本的用户能无密码 ssh 远程这些远程服务器
2. 此脚本会清空 $checklist
3. 执行此脚本前确保 telnet 命令已经安装
4. 执行此脚本可能有些慢

脚本:

#!/bin/bash

####################### Separator ########################

portlist=tcp_ports.txt
checklist=tcp_ports_checklist.txt

####################### Separator ########################

echo  > $checklist
maxnum=`cat $portlist | wc -l`

for hosts in $*
do

        echo $hosts >> $checklist

        for i in `seq 1 $maxnum`
        do

                ips=`sed -n $[i]p $portlist | awk -F':' '{print $1}'`
                ports=`sed -n $[i]p $portlist | awk -F':' '{print $2}'`
                remarks=`sed -n $[i]p $portlist | awk -F':' '{print $3}'`

                ssh $hosts "(sleep 1;) | telnet $ips $ports 2>&1" | grep 'timed out' >> $checklist

                if [ $? == 0 ];then
                        echo "`sed -n $[i]p $portlist`" >> $checklist
                        echo >> $checklist
                fi

        done

        echo >> $checklist

done