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

内容一:普通权限的管理

1.1 普通权限的介绍

1.1.1 文件的权限

1) r 代表读权限
2) w 代表写权限,可以增加、删除、修改文件里的内容,但是不能删除文件本身,文件本身是否能删除由此文件所在的目录决定
3) x 代表执行权限

1.1.2 目录的权限

1) r 代表可以看到目录里记录的文件名列表和子目录名列表的权限 (目录不存放任何数据而只记录文件名列表和子目录名列表)
2) w 代表可以对目录里记录的文件名列表和子目录名列表进行修改的权限 (包括:在目录里创建新的文件和子目录、删除目录里已经存在的文件和子目录、将该目录里的文件和子目录进行重命名、移动改目录里的文件和子目录的位置)
3) x 代表可以进入目录的权限

(注意:对于目录而言,x 权限必须要和 r 权限配合使用,如果只有 x 权限没有 r 权限则依旧不能进入目录,如果只有 r 权限没有 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

或者:

# chmod u= test.txt

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

1.2.3.4 案例四
# chmod u=rw,g=, test.txt

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

1.2.3.5 案例五
# chmod u=rw,g=---,0= test.txt

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

1.2.3.6 案例六
# 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

(补充:这里以给 test.txt 文件添加 SUID 权限为例)

或者:

# chmod a+s test.txt

(补充:这里以给 test.txt 文件添加 SUID 权限为例)

或者:

# chmod 4644 test.txt

(补充:这里以设置 test.txt 文件的所属主拥有读和写的权限。设置文件的所属组有读的权限。设置文件的其他用户有读的权限。并添加 SUID 权限为例)

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

(补充:这里以给 test.txt 文件添加 SGID 权限为例)

或者:

# chmod a+s test

(补充:这里以给 test.txt 文件添加 SGID 权限为例)

或者:

# chmod 2644 test

(补充:这里以设置 test.txt 文件的所属主拥有读和写的权限。设置文件的所属组有读的权限。设置文件的其他用户有读的权限。并添加 SGID 权限为例)

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

(补充:这里以给 test.txt 文件添加 SBID 权限为例)

或者:

# chmod a+t test

(补充:这里以给 test.txt 文件添加 SBID 权限为例)

或者:

# chmod 1644 test

(补充:这里以设置 test.txt 文件的所属主拥有读和写的权限。设置文件的所属组有读的权限。设置文件的其他用户有读的权限。并添加 SBID 权限为例)

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 <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> {} \;,这是一个固定格式,谁也不能被缺少。并且 {<命令>} 和 \ 之间有一个空格)

9) -xdev 不显示警告,只显示查找到的内容,这样显示起来简单美观

内容三: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 案例一:匹配名称

4.1.1 在当前目录查找以 txt 结尾的文件和目录
# find . -name "*\.txt"
4.1.2 在当前目录查找以 txt 结尾,但名称不为 test1.txt 和 test2.txt 的文件和目录
# find . -name "*\.txt" -not -name "test1.txt" -not -name "test2.txt"
4.1.3 在 /var/log 目录查找所有名称不为 wtmp、btmp 和 lastlog 的文件,并去掉它们的其它权限的读、写和执行
# find /var/log -type f -not -name "wtmp" -not -name "btmp" -not -name "lastlog" -exec chmod o-rwx {} +

4.2 案例二:匹配属性

4.2.1 在当前目录查找目录
# find . -type d
4.2.2 在 /tmp 目录查找 1 级目录,并把当前目录下的 .htaccess 文件拷贝到查找到的目录下,并重新命名为 .htaccess.orig
# find /tmp/ -maxdepth 1 -type d -exec cp -p -f ./.htaccess.orig '{}'/.htaccess \;

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 在当前目录查找所有用户都有写权限的文件并取消这些文件其他用户的写权限
# /usr/bin/find . -type f -perm /o=w -exec chmod o-w {} \;
4.4.5 查找所有包含特殊权限的文件和目录
# 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 {} \;
4.9.4 在根 “/” 目录查找没有所属主和所属组的文件和目录
# find / -nouser -o -nogroup

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

介绍

基本信息

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

使用方法

1. 将此脚本和端口清单 $portlist 文件放在同一目录下
2. 端口清单 $portlist 每一个端口占用一行,格式为:<IP address corresponding to the port number to be connected>:<port number to connect>:<port functions>,并和此脚本放在同一目录下
3. 在此脚本的分割线内写入相应的内容
4. 给此脚本添加执行权限
5. 执行此脚本,并将要测试的服务器 IP 地址跟在脚本的后面,例:. <script> <server IP address 1> <server IP address 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