Linux系统特殊权限和通配符及特殊字符使用详解
作者:koboides
一、Linux系统基础权限
1. 默认权限掩码及设置命令umask
1.1 umask命令说明
umask是通过八进制的数值来定义用户创建文件或目录的默认权限的。系统会根据预先设定的 umask 值计算出默认情况下创建的文件或目录权限。
1)为什么创建文件默认权限为644,目录为755?
umask 权限掩码。控制系统的文件和目录的默认权限。 [root@buffes buffes]# umask 0022 针对文件来说:默认权限计算方法 6 6 6 0 2 2 - ----------- 6 4 4 ###系统的文件默认权限 ==============================
2)umask掩码的3位每一位数字是否有【奇数】,如果有奇数(奇数位加1)
测试: [root@buffes buffes]# umask 021 [root@buffes buffes]# umask 0021 [root@buffes buffes]# touch f021 [root@buffes buffes]# ls -l f021 -rw-r--rw-. 1 root root 0 5月 21 10:40 f021 计算: 6 6 6 0 2 1 - ----------- 6 4 5 ###系统的文件默认权限 0 0 1 --------------- 6 4 6 测试: [root@buffes buffes]# umask 033 [root@buffes buffes]# umask 0033 [root@buffes buffes]# touch f033 [root@buffes buffes]# ls -l f033 -rw-r--r--. 1 root root 0 5月 21 10:42 f033 结论:文件默认权限结论 1.权限从666开始计算。 2.如果偶数,正常做减法。 3.如果是奇数,奇数位加一。
3)针对目录默认权限
1.权限从777开始计算。 2.和掩码正常做减法。 测试: [root@buffes buffes]# mkdir d033 [root@buffes buffes]# ls -ld d033 drwxr--r--. 2 root root 6 5月 21 10:44 d033 [root@buffes buffes]# umask 045 [root@buffes buffes]# mkdir d045 [root@buffes buffes]# ls -ld d045 drwx-wx-w-. 2 root root 6 5月 21 10:45 d045 UID大于199,并且用户和组同名,umask为002 cat /etc/bashrc if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then umask 002 else umask 022 fi /home/buffes 默认700, #控制/etc/login.defs 想一想???为什么系统把默认权限定为: 默认644,目录755呢? #安全临界值
1.2 有关权限生产环境应用案例及思路
运营电商 jd,站点目录给什么权限安全呢? 目录755 [root@buffes buffes]# mkdir /data/html -p [root@buffes buffes]# ls -ld /data/html/ drwxr-xr-x. 2 root root 6 5月 21 11:07 /data/html/ web服务运行时候有一个【虚拟用户www】, 1)虚拟用户www 可进入查看程序文件,不可以写、删文件。 [root@buffes buffes]# useradd www [root@buffes buffes]# chown -R www.www /data/html [root@buffes buffes]# ls -ld /data/html drwxr-xr-x. 2 www www 6 5月 21 11:07 /data/html #可以写、删文件 普通站点目录:【用户和组都是root,权限755】 [root@buffes buffes]# ls -ld /data/html drwxr-xr-x. 2 root root 6 5月 21 11:07 /data/html/ [root@buffes buffes]# mkdir /data/html/upload -p ###存放图片,文件 [root@buffes buffes]# ls -ld /data/html/upload/ drwxr-xr-x. 2 root root 6 5月 21 11:15 /data/html/upload/ 图片、文件目录授权:【用户和组www,权限755】 [root@buffes buffes]# chown -R www.www /data/html/upload/ [root@buffes buffes]# ls -ld /data/html/upload/ drwxr-xr-x. 2 www www 6 5月 21 11:15 /data/html/upload/ 解决upload上传目录安全: 1)不让上传:程序:控制这个目录上传的内容只能是.jpg,.zip。 2)不让执行:nginx:针对upload访问的时候,除了.jpg,.zip之外,不提供访问。 3)不让执行:动态服务器和静态服务器分离,访问的时候只有静态服务器(不安装PHP,java,python) 4)不让执行:磁盘上挂载的时候,设置禁止程序运行(二进制程序)。 不管什么业务都没有改程序文件的需求。 程序文件 [644 root root] 程序文件 [644 www www] #不推荐 三剑客sed 企业木马案例: [root@buffes buffes]# touch suid.txt [root@buffes buffes]# ls -l suid.txt -rw-r--r--. 1 root root 0 5月 21 11:55 suid.txt
2. linux特殊权限位
[suid] 1)suid(setuid)位通过S字符标识。 2)存在于基本权限的用户权限位的x权限对应的位置。 3)如果用户权限位对应的x权限位上有x权限,则suid就用小写的s标识。 4)suid的s对应的数字权限为4。 5)完整权限用八进制数4000表示。 创建文件备用测试 [root@buffes buffes]# touch suid.txt [root@buffes buffes]# ls -l suid.txt -rw-r--r--. 1 root root 0 5月 21 11:55 suid.txt 数字权限设置suid测试: chmod 4644 suid.txt [root@buffes buffes]# chmod 4644 suid.txt [root@buffes buffes]# ls -l suid.txt -rwSr--r--. 1 root root 0 5月 21 11:55 suid.txt [root@buffes buffes]# chmod u+x suid.txt [root@buffes buffes]# ls -l suid.txt -rwsr--r--. 1 root root 0 5月 21 11:55 suid.txt 取消设置suid测试: [root@buffes buffes]# chmod 644 suid.txt [root@buffes buffes]# ls -l suid.txt -rw-r--r--. 1 root root 0 5月 21 11:55 suid.txt 字符设置suid chmod u+s suid.txt ls -l suid.txt chmod u-s suid.txt ls -l suid.txt
2.1 为什么会有SUID?
例子:普通用户修改密码。 [buffes@buffes ~]$ passwd 更改用户 buffes 的密码 。 为 buffes 更改 STRESS 密码。 (当前)UNIX 密码: 新的 密码: 重新输入新的 密码: passwd:所有的身份验证令牌已经成功更新。 1)修改密码passwd =======>>修改/etc/shadow文件 buffes用户使用passwd命令,修改/etc/shadow文件,来实现修改密码的。 ls -l /etc/shadow [buffes@buffes ~]$ ls -l /etc/shadow ----------. 1 root root 2484 5月 21 12:10 /etc/shadow 传统权限分析,buffes是其他用户,修改/etc/shadow权限---,没有权限修改。。 事实呢?改了 suid的特殊作用:可以绕过基础权限体系,可以修改没有权限修改的文件。 基于二进制命令的。 [buffes@buffes ~]$ ls -l `which passwd` -rwsr-xr-x. 1 root root 27856 4月 1 2020 /bin/passwd 1)给一个命令设置suid以后,所有使用这个命令的用户,都拥有和这个命令对应的用户的权限。 问题: cd 不好用 1)bash内置命令,C6系统中没有对应文件。 2)有对应文件。授权系统文件的cd,执行cd很可能执行的是bash内置的cd。 3) [root@buffes ~]# which cd /usr/bin/cd [root@buffes ~]# cd /usr/bin/ [root@buffes bin]# mv cd cdd [root@buffes bin]# cd /root [root@buffes ~]# ls cdd ls: 无法访问cdd: 没有那个文件或目录 [root@buffes ~]# cd /usr/bin [root@buffes bin]# ls cdd cdd -rwxr-xr-x. 1 root root 62872 8月 20 2019 /bin/rm [root@buffes bin]# find /bin/ -type f -perm 4755|xargs ls -l -rwsr-xr-x. 1 root root 73888 8月 9 2019 /bin/chage -rwsr-xr-x. 1 root root 57656 8月 9 2019 /bin/crontab -rwsr-xr-x. 1 root root 32096 10月 31 2018 /bin/fusermount -rwsr-xr-x. 1 root root 78408 8月 9 2019 /bin/gpasswd -rwsr-xr-x. 1 root root 44264 4月 1 2020 /bin/mount -rwsr-xr-x. 1 root root 41936 8月 9 2019 /bin/newgrp -rwsr-xr-x. 1 root root 27856 4月 1 2020 /bin/passwd -rwsr-xr-x. 1 root root 23576 4月 1 2020 /bin/pkexec -rwsr-xr-x. 1 root root 32128 4月 1 2020 /bin/su -rwsr-xr-x. 1 root root 31984 4月 1 2020 /bin/umount suid生产场景实际用途。 1.所有普通用户都能用到 2.普通用户想修改没有权限文件时候使用。 3.命令是没有破坏作用的。 比如:ping,passwd
3.sgid权限知识
对于二进制命令或者程序来说,sgid的功能和suid基本相同,唯一的区别是suid是获得命令所属用户的身份和权限,而sgid是获得命令的所属用户组的身份和权限,因此,有关sgid对于二进制命令或者程序方面的知识就不详细叙述了。
3.1 suid核心知识
1)与suid不同的是,sgid既可以针对文件,也可以针对目录设置! 2)sgid的权限是针对用户组权限位的。 对于文件来说,sgid的功能如下: 1)sgid仅对二进制命令及程序有效。 2)二进制命令或程序,也需要有可执行权限x配合。 3)执行命令的任意用户可以获得该命令程序执行期间所属组的身份和权限。 理解sgid: locate====>读/var/lib/mlocate/mlocate.db <====updatedb [root@buffes bin]# ls -l /var/lib/mlocate/mlocate.db -rw-r-----. 1 root slocate 1423565 5月 21 03:23 /var/lib/mlocate/mlocate.db 结论没有权限可以查询/var/lib/mlocate/mlocate.db 事实上是可以查的。 [buffes@buffes ~]$ locate cp 原因:就是locate命令被设置了sgid [buffes@buffes ~]$ ls -l `which locate` -rwx--s--x. 1 root slocate 40520 4月 11 2018 /bin/locate 测试:取消sgid [root@buffes bin]# chmod g-s /bin/locate [root@buffes bin]# ls /bin/locate -l -rwx--x--x. 1 root slocate 40520 4月 11 2018 /bin/locate 查看: [buffes@buffes ~]$ locate cp locate: 无法执行 stat () `/var/lib/mlocate/mlocate.db': 权限不够 参考解答: [root@buffes ~]# mkdir /home/admins #<==创建共享目录admins。 [root@buffes ~]# groupadd adminuser #<==添加用户组adminuser。 [root@buffes ~]# ls -ld /home/admins drwxr-xr-x. 2 root root 4096 Apr 30 16:54 /home/admins [root@buffes ~]# chgrp adminuser /home/admins/ #<==给adminis目录授权adminuser用户组。 [root@buffes ~]# ls -ld /home/admins drwxr-xr-x. 2 root adminuser 4096 Apr 30 16:54 /home/admins #<==查看授权结果。 [root@buffes ~]# touch /home/admins/buffes.txt #<==创建测试文件。 [root@buffes ~]# ls -l /home/admins/ 来看一道RHCE认证考试题(了解即可)。 创建共享目录/home/admins,要求属组为adminuser,adminuser组成员对admins目录有写入、读取和执行的权限,其他所有用户没有任何权限(root除外),在/home/admins目录中创建的文件会自动继成adminuser组。 参考解答: [root@buffes ~]# mkdir /home/admins #<==创建共享目录admins。 [root@buffes ~]# groupadd adminuser #<==添加用户组adminuser。 [root@buffes ~]# ls -ld /home/admins drwxr-xr-x. 2 root root 4096 Apr 30 16:54 /home/admins [root@buffes ~]# chgrp adminuser /home/admins/ #<==给adminis目录授权adminuser用户组。 [root@buffes ~]# ls -ld /home/admins drwxr-xr-x. 2 root adminuser 4096 Apr 30 16:54 /home/admins #<==查看授权结果。 [root@buffes ~]# touch /home/admins/buffes.txt #<==创建测试文件。 [root@buffes ~]# ls -l /home/admins/ total 0 -rw-r--r--. 1 root root 0 Apr 30 19:59 buffes.txt #<==文件默认用户和组都是root。 [root@buffes ~]# chmod 2770 /home/admins #<==授权sgid权限给admins目录。 [root@buffes ~]# ls -ld /home/admins/ drwxrws---. 2 root adminuser 4096 Apr 30 20:10 /home/admins/ #<==查看授权结果。 [root@buffes ~]# touch /home/admins/newfile.txt #<==在创建新文件。 [root@buffes ~]# ls -l /home/admins/ total 0 -rw-r--r--. 1 root adminuser 0 Apr 30 20:04 newfile.txt #<==新创建的文件用户组为adminuser了,而非默认的root了。 -rw-r--r--. 1 root root 0 Apr 30 19:59 buffes.txt 整个配置过程,已满足题意需求。
二、通配符与特殊符号
1. 通配符
1.代表特殊含义的一些符号。 2.bash命令行操作的时候。 作用于文件名的通配符: 符号 作用 * 匹配任意(0个或多个)字符或字符串,包括空字符串※ ? 匹配任意1个字符,有且只有一个字符 字符集合(匹配一堆字符/文本) [abcd] 匹配abcd中任何一个字符,abcd也可是其他任意不连续字符 [a-z] 匹配a到z之间的任意一个字符,字符前后要连续,也可以用连续数字[1-9] [!abcd] 表示不匹配括号里面的任何一个字符,也可书写为[!a-d],这里的!号可以用^替代,即[^abcd] *的作用:经常使用 ls * rm -f *.txt ls * rm -f f* [root@buffes ~]# find ./ -name "*.txt" ./a.txt ./aaa.txt ./girlLove/girlLove.txt [root@buffes ~]# find /etc/ -type f -name "*hosts" /etc/hosts ?的作用(了解) [root@buffes ~]# touch a.txt [root@buffes ~]# touch aaa.txt [root@buffes ~]# ls ?.txt a.txt [root@buffes ~]# ls ???.txt aaa.txt [abcd]的实践(了解) [root@buffes ~]# ls [abcd].txt a.txt [root@buffes ~]# touch b.txt [root@buffes ~]# ls [abcd].txt a.txt b.txt [root@buffes ~]# touch bb.txt [root@buffes ~]# ls [abcd].txt a.txt b.txt [a-z]或[1-9] [root@buffes ~]# touch {1..3}.txt [root@buffes ~]# ls [a-z].txt a.txt b.txt [root@buffes ~]# ls [1-9].txt 1.txt 2.txt 3.txt [^a-z]或[!1-9](了解) [root@buffes ~]# ls *.txt 1.txt 2.txt 3.txt aaa.txt a.txt bb.txt b.txt cd.txt [root@buffes ~]# ls [^1-9].txt a.txt b.txt [root@buffes ~]# ls [a-z].txt a.txt b.txt [root@buffes ~]# ls [!a-z].txt 1.txt 2.txt 3.txt
2. 与路径和位置有关的特殊符号
符合 | 作用 |
---|---|
~ | 用户的家目录,超级用户为/root,普通用户为/home |
- | 代表上一次(相对于当前路径)用户所在的路径 |
. | 代表当前目录(点号还有很多其它含义,暂且不表) |
… | 代表上一级目录 |
有一个环境变量名字叫OLDPWD,用来时刻记录上一次所在的路径。 所以 cd -的时候,实际就是 cd $OLDPWD [root@buffes ~]# echo $OLDPWD /etc [root@buffes ~]# cd - /etc [root@buffes etc]# echo $OLDPWD /root [root@buffes etc]# cd - /root [root@buffes ~]# cd /etc/sysconfig/ [root@buffes sysconfig]# echo $OLDPWD /root [root@buffes sysconfig]# cd - /root [root@buffes ~]# echo $OLDPWD /etc/sysconfig [root@buffes ~]# cd - /etc/sysconfig [root@buffes sysconfig]# cd $OLDPWD [root@buffes ~]# pwd /root [root@buffes ~]# [root@buffes ~]# [root@buffes ~]# [root@buffes ~]# cd $OLDPWD [root@buffes sysconfig]# pwd /etc/sysconfig
2.1 单引号
(‘’)所见即所得,即输出单引号内容时会将单引号内的所有内容都原样输出,或者描述为单引号里面看到的是什么就会输出什么,被称之为强引用
[root@buffes ~]# echo 'date' date [root@buffes ~]# a=123 [root@buffes ~]# echo $a 123 [root@buffes ~]# echo '$a' $a [root@buffes ~]# echo "$a" 123 希望看到啥就输出啥就用单引号。
2.2 双引号(常用)
(“”) 输出双引号内的所有内容时,如果内容中有命令(要反引下)、变量、特殊转义符等,会先把变量、命令、转义字符解析出结果,然后再输出最终内容,被称为弱引用。推荐使用
1)不知道用什么引号就用双引号。 [root@buffes ~]# echo $(date) 2030年 05月 24日 星期五 23:26:09 CST [root@buffes ~]# echo '$(date)' $(date) [root@buffes ~]# echo "$(date)" 2030年 05月 24日 星期五 23:26:28 CST
2.3 无引号
赋值时,如果变量内容有空格会使得赋值不完整。而在输出内容时,也会将含有空格的字符串视为一个整体输出;如果内容中有命令(要反引下)、变量等,会先把变量、命令解析出结果,然后输出最终内容;如果字符串中带有空格等特殊字符,则有可能无法完整地输出,因此需要改加双引号。
一般连续的字符串、数字、路径等可以不加任何引号赋值和输出,不过无引号的情况最好用双引号替代之,特别是变量赋值时内容很简单,且没有空格,这个时候 不加引号也可以和双引号类似,双引号引起来的内容是一个整体。
[root@buffes ~]# echo $a 123 [root@buffes ~]# echo $(date) 2030年 05月 24日 星期五 23:27:54 CST 双引号引起来的内容是一个整体。 [root@buffes ~]# echo 123 456 123 456 [root@buffes ~]# a=123 456 -bash: 456: 未找到命令 [root@buffes ~]# echo $a 123 [root@buffes ~]# a=“123 456” [root@buffes ~]# echo $a 123 456
2.4 反引号(相当于$())
(``) 一般用于引用命令,执行的时候命令会被执行,相当于$(),赋值和输出都要将命令用``引起来里面是可执行的命令。
[root@buffes ~]# date 2030年 05月 24日 星期五 23:31:02 CST [root@buffes ~]# echo $(date) 2030年 05月 24日 星期五 23:31:09 CST [root@buffes ~]# echo `date` 2030年 05月 24日 星期五 23:31:19 CST [root@buffes ~]# tar zcf /tmp/etc_$(date +%F).tar.gz /etc tar: 从成员名中删除开头的“/”
2.4 其他特殊符号
; 表示一个命令的结束 也是命令间的分隔符 # 1)root用户的命令提示符 2)表示是注释内容,是用来给管理员看的,系统不会执行#号开头的内容 3)命令替换用的分隔符 比如VIM里的替换 :%s#129#921#g | 表示管道,将一个命令处理后的中间内容输出给下一个命令继续处理 [root@buffes ~]# cat /etc/services |grep 3306 mysql 3306/tcp # MySQL mysql 3306/udp # MySQL 1)管道传输的是数据流(文件内容),不是文件(文件名)。 2)不需要管道直接可以用命令处理。 [root@buffes ~]# grep 3306 /etc/services mysql 3306/tcp # MySQL mysql 3306/udp # MySQL 3)分组功能,同时过滤多个字符串 grep -E ==egrep [root@buffes ~]# egrep "3306|1521" /etc/services mysql 3306/tcp # MySQL mysql 3306/udp # MySQL ncube-lm 1521/tcp # nCube License Manager ncube-lm 1521/udp # nCube License Manager $ 1)代表普通用户的命令提示符 2)字符串前加$符号,代表字符串变量内容 [buffes@buffes ~]$ a=buffes [buffes@buffes ~]$ echo $a buffes [root@buffes ~]# echo $LANG #字符集设置 zh_CN.UTF-8 [root@buffes ~]# echo $PS1 #命令行的变量 [\[\e[35;1m\]\u@\[\e[33;1m\]\h\[\e[34;1m\] \W\[\e[0m\]]\$ [root@buffes ~]# echo $HOME /root \ 逃脱符或转义字符,即将有特殊含义的字符(通配符或正则表达式)还原成字符本意 \? 只表示问号本身 touch \?.txt #代表创建?.txt这个文件。 [root@buffes ~]# ls ?.txt 1.txt 2.txt 3.txt a.txt b.txt [root@buffes ~]# ls \?.txt ls: 无法访问?.txt: 没有那个文件或目录 [root@buffes ~]# touch ?.txt [root@buffes ~]# ls 1.txt aaa.txt bb.txt girlLove buffes_dir 2.txt abc b.txt girlLove.zip user.list 3.txt a.txt cd.txt buffes 老男孩Linux58期开班典礼3_-.pptx [root@buffes ~]# touch \?.txt [root@buffes ~]# ls 1.txt abc cd.txt buffes_dir 2.txt a.txt girlLove ?.txt 3.txt bb.txt girlLove.zip user.list aaa.txt b.txt buffes 老男孩Linux58期开班典礼3_-.pptx [root@buffes ~]# ls ?.txt 1.txt 2.txt 3.txt a.txt b.txt ?.txt [root@buffes ~]# ls \?.txt ?.txt {} 1)生成序列 [root@buffes ~]# echo {1..10} 1 2 3 4 5 6 7 8 9 10 [root@buffes ~]# echo {a..z} a b c d e f g h i j k l m n o p q r s t u v w x y z [root@buffes ~]# echo {z..a} z y x w v u t s r q p o n m l k j i h g f e d c b a [root@buffes ~]# echo {10..1} 10 9 8 7 6 5 4 3 2 1 seq 数字序列 1)默认: [root@buffes ~]# seq 5 1 2 3 4 5 ============= 打奇偶数 seq 1 2 5 起始 步长 结束 [root@buffes ~]# seq 1 2 5 1 3 5 [root@buffes ~]# seq 2 2 6 2 4 [root@buffes ~]# seq 6 -1 1 6 5 4 3 2 1 [root@buffes ~]# seq -w 10 01 02 03 04 05 06 07 08 09 10 用途: touch stu{1..10}.txt [root@buffes ~]# echo {00..10} 00 01 02 03 04 05 06 07 08 09 10 [root@buffes ~]# echo {00..10}|xargs -n 1 00 01 02 03 04 05 06 07 08 09 10 [root@buffes ~]# seq -s " " 5 1 2 3 4 5 [root@buffes ~]# seq -w -s " " 10 01 02 03 04 05 06 07 08 09 10 [root@buffes ~]# seq 10 1 2 3 4 5 6 7 8 9 10 [root@buffes ~]# seq -w 10 01 02 03 04 05 06 07 08 09 10 [root@buffes ~]# seq -w 10|sed -r 's#(.*)#\1#g' 01 02 03 04 05 06 07 08 09 10 [root@buffes ~]# seq -w 10|sed -r 's#(.*)#useradd buffes\1#g' useradd buffes01 useradd buffes02 useradd buffes03 useradd buffes04 useradd buffes05 useradd buffes06 useradd buffes07 useradd buffes08 useradd buffes09 useradd buffes10 [root@buffes ~]# echo -e {00..10}"\n" 00 01 02 03 04 05 06 07 08 09 10 [root@buffes ~]# echo -e {00..10}"\n"|column -t 00 01 02 03 04 05 06 07 08 09 10 总结seq: seq 10 #竖向打印序列 seq -w 10 #补全位数打印序列。 seq 起始 步长 结束 #打印奇数和偶数序列 步长为正数就是从小到大,否则从大到小。起始数字>结束数字 seq -w -s" " 10 #-s指定分隔符,横向打印序列 2)引用变量作为变量与普通字符的分隔 [root@buffes ~]# a=123 [root@buffes ~]# echo "I am$a岁了" I am123岁了 [root@buffes ~]# [root@buffes ~]# echo "I am$ale" I am [root@buffes ~]# [root@buffes ~]# [root@buffes ~]# [root@buffes ~]# echo "I am${a}le" I am123le bash里特殊符号 名称 解释 && 前一个命令执行成功,再执行后面一个命令 || 前一个命令执行失败,再执行后面一个命令 ! 1)在Bash中表示取反 2)在vi/vim中表示强制 3)!ls表示找出最近一次以ls开头的命令并运行 && 并且的意思 and 前面正确,后面才输出 echo 123 && echo 456 #前面命令能正确输出,则打印456,否则不打印。 生产场景使用: cd /etc/sysconfig/network-scripts/ &&\ tar zcf /tmp/ifcfg-eth0.tar.gz ./ifcfg-eth0 [root@buffes ~]# echo $? #验证命令是否执行成功,0表示成功,非0表示失败。 0 || or或者 前面错误,后面才输出 前面正确,后边不输出。 [root@buffes ~]# cho 123 || echo 456 -bash: cho: 未找到命令 456 作用: [root@buffes ~]# echo adsfas||echo 1 adsfas 输出1,表示前面命令执行错误,否则,命令执行正确。 ! 取反 [root@buffes ~]# ! cho 123 || echo 456 -bash: cho: 未找到命令
2.5 练习题
1)竖向打印a到z,共26个字母。 2)查找/下,包含.conf的所有文件,并打包,将压缩包备份到/opt下。 3)批量添加test01-test1010个用户,并设置对应数字密码。 4)横向打印1,4,7序列。 5)描述下单引号,双引号,反引号的含义。 6)使用cat命令将下面内容输入到文件test.txt里。 http://www.etiantian.org http://bbs.etiantian.org http://www.etiantian.org http://blog.etiantian.org http://www.etiantian.org http://blog.etiantian.org 7)对题6的内容,统计域名出现的次数,并倒序排序。 8)题6中同时过滤包含bbs和blog字符串的行。 9)如何能让执行一个命令成功后再执行另一个命令? 10)把题6中的etiantian.org替换为buffes。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。