第二周作业
- 1. 总结通配符,管道,重定向,并且结合示例,添加注释信息
- 2. 总结linux用户和用户组相关知识点以及常见的操作命令,添加注释信息
- 3. 总结文件权限管理相关的知识点,包括权限位,特殊权限和ACL,添加详细的注释和解释
- 4. 总结文件时间戳的用法
- 5. 总结find和xargs的用法
- 6. 总结几种压缩工具的使用方法
复制代码 1. 通配符
符号说明*匹配任意字符, 0个或任意个?匹配任意单个字符, 有且只能有一个[a-zA-Z0-9]匹配指定单个字符序列, 生成指定范围的序列1.1 * 使用方式
- # 匹配所以以.conf结尾的文件
- [root@RockyLinux1 ~]# ll /etc/*.conf | head -n 5
- -rw-r--r--. 1 root root 1370 Apr 27 18:59 /etc/chrony.conf
- -rw-r--r--. 1 root root 117 Jun 11 23:25 /etc/dracut.conf
- -rw-r--r--. 1 root root 9 Jun 23 2020 /etc/host.conf
- -rw-r--r--. 1 root root 8979 Jun 15 12:47 /etc/kdump.conf
- -rw-r--r--. 1 root root 880 Jun 25 03:52 /etc/krb5.conf
- # 列出所有包含"d"的文件
- [root@RockyLinux1 ~]# ls *d*
- anaconda-ks.cfg demo.sh
- # 干掉Linux, 或者删除指定目录下的所有文件
- [root@RockyLinux1 ~]# rm -rf /*
复制代码 1.2 ? 使用方式
- # 查找固定长度的文件名
- [root@RockyLinux1 ~]# ll /var/log/???.log
- -rw-r--r-- 1 root root 246581 Jul 3 11:29 /var/log/dnf.log
- [root@RockyLinux1 ~]# ll /var/log/???????.log
- -rw-r--r-- 1 root root 42004 Jul 3 11:29 /var/log/dnf.rpm.log
- # 查找第二个字符为b的文件, 列出的结果不符合, 可能是匹配到的是个目录, 可以搭配echo输出
- [root@RockyLinux1 ~]# ls /etc/?b*
- session.conf session.d system.conf system.d
- [root@RockyLinux1 ~]# echo /etc/?b*
- /etc/dbus-1
- # -d查看目录本身
- [root@RockyLinux1 ~]# ls -d /etc/?b*
- /etc/dbus-1
复制代码 1.3 [] 使用方式
- # 查看所有以y开头的文件, []当作一个可以定制化的?来使用即可
- [root@RockyLinux1 ~]# ll /usr/bin/[y]*
- -rwxr-xr-x 1 root root 32064 May 2 16:31 /usr/bin/yes
- lrwxrwxrwx. 1 root root 8 May 16 2022 /usr/bin/ypdomainname -> hostname
- lrwxrwxrwx 1 root root 5 May 4 11:12 /usr/bin/yum -> dnf-3
- # 列出bcd任意一个字符开头的文件
- [root@RockyLinux1 ~]# ll /usr/bin/[bcd]*
- # 列出a-z任意一个字符开头的文件
- [root@RockyLinux1 ~]# ll /usr/bin/[a-z]*
复制代码 1.4 {} 使用方式
- # {}的主要作用, 是用来生成一个序列
- [root@RockyLinux1 ~]# echo {1..9}
- 1 2 3 4 5 6 7 8 9
- # 序列是可以拼接的
- [root@RockyLinux1 ~]# echo {1..9}.txt
- 1.txt 2.txt 3.txt 4.txt 5.txt 6.txt 7.txt 8.txt 9.txt
- # touch {1..9}.txt, 实际上执行的就是 touch 1.txt 2.txt 3.txt 4.txt 5.txt 6.txt 7.txt 8.txt 9.txt
- [root@RockyLinux1 ~]# touch {1..9}.txt
- [root@RockyLinux1 ~]# ls [0-9].txt
- 1.txt 2.txt 3.txt 4.txt 5.txt 6.txt 7.txt 8.txt 9.txt
- # 指定步长, 即每次迭代时的数量, 默认为1
- [root@RockyLinux1 ~]# echo {1..9..2}
- 1 3 5 7 9
复制代码 2. 管道
管道的作用: 将管道符前面命令的标准输出, 当作管道符后面命令的标准输入, 没有标准输出/命令不能从标准输入读取数据也可以使用管道, 只是没有连接的意义- # mkdir test创建一个目录, 成功了是没有输出的, 虽然cat能够从标准输入读取数据, 但是没有数据执行就没有意义
- [root@RockyLinux1 ~]# mkdir test | cat
- # echo有输出, 但是ls不支持从标准输入读取数据, 列出的还是当前目录, 而不是指定的内容, 因此也是没有意义的
- [root@RockyLinux1 ~]# echo 1.txt | ls
- 1.txt 2.txt 3.txt 4.txt 5.txt 6.txt 7.txt 8.txt 9.txt anaconda-ks.cfg demo.sh nohup.out root@11.0.0.3 test xxx.txt
- # 通过ls查看, 发现输出的内容都是在同一行
- [root@RockyLinux1 ~]# ls [0-5].txt
- 1.txt 2.txt 3.txt 4.txt 5.txt
- # 管道交给cat -A, 可以发现, ls的内容, 每个都是独立的行, 而不是单纯的展示出来的一行空格分割
- [root@RockyLinux1 ~]# ls [0-5].txt | cat -A
- 1.txt$
- 2.txt$
- 3.txt$
- 4.txt$
- 5.txt$
复制代码 3. 重定向
重定向: 默认的重定向, 是输出到终端的, 可以通过> | >>的方式, 改变数据的流量, 常见的就是到文件, 而不是输出到终端.
3.1 追加与覆盖
- # >: 覆盖
- # >>: 追加
- [root@RockyLinux1 ~]# echo 123 >> 1.txt
- # 追加重定向, 会在最后新加行
- [root@RockyLinux1 ~]# cat 1.txt
- 123
- 123
- # 直接清空原文件内容, 在写入新内容
- [root@RockyLinux1 ~]# echo 456 > 1.txt
- [root@RockyLinux1 ~]# cat 1.txt
- 456
- # 快速清空文件的方式
- [root@RockyLinux1 ~]# cp /etc/passwd ./; > passwd
- [root@RockyLinux1 ~]# cat passwd
复制代码 3.2 标准输出
- # 1>, 1>> | >, >>: 标准输出重定向, 1为标准输出, 默认值
- # 1.txt存在, 则是一个标准输出, 输出的内容重定向到2.txt
- [root@RockyLinux1 ~]# ls 1.txt > 2.txt
- [root@RockyLinux1 ~]# cat 2.txt
- 1.txt
- # 11.txt不存在, ls找不到文件会提示错误信息, 这个属于标准错误, 不会被标准输出捕获
- [root@RockyLinux1 ~]# ls 11.txt > 2.txt
- ls: cannot access '11.txt': No such file or directory
- # 没有标准输出, 就是空, 等同于执行了>2.txt, 会清空2.txt原有的内容
- [root@RockyLinux1 ~]# cat 2.txt
复制代码 3.3 标准错误
- # 2>, 2>>: 标准错误重定向, 指的是程序执行时的一些错误输出, 不一定是程序报错, 只是命令内部逻辑认为是一个错误信息
- # 1.txt存在, 则输出标准错误, 2>只会捕获标准错误
- [root@RockyLinux1 ~]# ls 1.txt 2> 2.txt
- 1.txt
- # 11.txt不存在, 是一个标准错误, 被2>重定向到2.txt, 不会在输出到屏幕
- [root@RockyLinux1 ~]# ls 11.txt 2> 2.txt
- [root@RockyLinux1 ~]# cat 2.txt
- ls: cannot access '11.txt': No such file or directory
复制代码 3.4 标准输入
- # <<< "哈哈哈": 标准输入, 可以直接输出字符串
- # < file: 标准输入, 需要一个文件
- [root@RockyLinux1 ~]# cat <<< "哈哈哈"
- 哈哈哈
- [root@RockyLinux1 ~]# cat < 1.txt
- mkdir: cannot create directory ‘test/’: File exists
复制代码 4. 用户相关
4.1 用户分类
1. 管理员: 默认为root用户, uid为0, 实际上, Linux就是以uid来判定用户身份的, 0就是管理员
2. 系统用户: uid通常为1-999, 这类用户通常是运行各种服务使用的用户, 例如sshd, mysql, nginx等
3. 普通用户: uid为1000+, 默认创建出来的用户, 就是依次递增的
4.2 用户相关文件
1. /etc/passwd: 记录用户的基本信息, 用户名称, uid, gid, 登录所使用的shell等
2. /etc/shadow: 记录用户的密码信息
3. /etc/group|/etc/gshadow: 组相关信息
4.3 创建普通用户
创建普通用户, 不建议指定uid/gid, 按照默认自动增长即可, 尽可能的保证每个用户的uid和gid都是样的, 方便与管理, 而不是uid10086, gid 10000这样杂乱无章的- # curl有一个比较特殊的地方, 建立连接的信息会被认为是标准错误, 在正常请求完成后会被隐藏起来, 这也就导致, 不管是> 或 2>, 都无法将所有的信息都屏蔽掉
- [root@RockyLinux1 ~]# curl http://11.0.0.1/
- 你好, 世界
- [root@RockyLinux1 ~]# curl http://11.0.0.1/ > /dev/null
- % Total % Received % Xferd Average Speed Time Time Time Current
- Dload Upload Total Spent Left Speed
- 100 15 100 15 0 0 15000 0 --:--:-- --:--:-- --:--:-- 15000
- [root@RockyLinux1 ~]# curl http://11.0.0.1/ 2> /dev/null
- 你好, 世界
- # 将标准错误和标准输出全部全定向方式1: 标准输出到/dev/null, 标准错误到标准输出, 链条式重定向
- [root@RockyLinux1 ~]# curl http://11.0.0.1/ > /dev/null 2>&1
- # 方式2: 新写法, 老系统可能不支持
- [root@RockyLinux1 ~]# curl http://11.0.0.1/ &> /dev/null
复制代码 4.4 删除用户
- # 创建用户
- [root@RockyLinux1 ~]# useradd zhangfei
- [root@RockyLinux1 ~]# grep zhangfei /etc/passwd
- zhangfei:x:1001:1001::/home/zhangfei:/bin/bash
- # 默认情况下, 创建一个用户, 会自动创建一个同名的组作为该用户的主组
- [root@RockyLinux1 ~]# id zhangfei
- uid=1001(zhangfei) gid=1001(zhangfei) groups=1001(zhangfei)
- # 密码设置
- [root@RockyLinux1 ~]# passwd zhangfei
- Changing password for user zhangfei.
- New password:
- BAD PASSWORD: The password is shorter than 8 characters
- Retype new password:
- passwd: all authentication tokens updated successfully.
- # 登录测试
- [root@RockyLinux1 ~]# ssh zhangfei@127.0.0.1 'whoami'
- zhangfei@127.0.0.1's password:
- zhangfei
- # Rocky创建用户, 默认就会创建家目录, Ubuntu需要显示的指定 -m 才会创建家目录
- [root@RockyLinux1 ~]# ls -A ~zhangfei
- .bash_logout .bash_profile .bashrc
复制代码 4.5 创建系统用户
创建方式1: 不推荐s- # 删除用户, 默认情况下, 删除用户, 会保留家目录, 只是把/etc/passwd, /etc/shadow, 还有组的信息删除掉
- [root@RockyLinux1 ~]# ll /home/
- drwx------ 2 admin admin 62 Jun 30 23:12 admin
- drwx------ 2 zhangfei zhangfei 62 Jul 7 22:21 zhangfei
- [root@RockyLinux1 ~]# userdel admin
- [root@RockyLinux1 ~]# id admin
- id: ‘admin’: no such user
- [root@RockyLinux1 ~]# ll /home/
- total 0
- drwx------ 2 1000 1000 62 Jun 30 23:12 admin
- drwx------ 2 zhangfei zhangfei 62 Jul 7 22:21 zhangfei
- # 加上-r选项, 删除比较彻底
- [root@RockyLinux1 ~]# userdel -r zhangfei
- [root@RockyLinux1 ~]# ll /home/
- total 0
- drwx------ 2 1000 1000 62 Jun 30 23:12 admin
复制代码 创建方式2: 推荐- # 通过-u选项指定uid, 会有warning提示, 但是不影响创建成功, 但是gid是从1000开始的
- [root@RockyLinux1 ~]# useradd -u 99 liubei
- useradd warning: liubei's uid 99 outside of the UID_MIN 1000 and UID_MAX 60000 range.
- [root@RockyLinux1 ~]# id liubei
- uid=99(liubei) gid=1000(liubei) groups=1000(liubei)
- # -r选项表示创建一个系统用户, 这个时候就不会报错, 并且gid也是1000以内
- [root@RockyLinux1 ~]# useradd -r -u 100 guanyu
- [root@RockyLinux1 ~]# id guanyu
- uid=100(guanyu) gid=992(guanyu) groups=992(guanyu)
复制代码 4.6 密码的修改
交互式: 执行命令后, 需要用户输入相关信息才能继续
非交互式: 一条命令搞定, 不需要在执行过程中操作- # 创建一个gid为555的nginx2组
- [root@RockyLinux1 ~]# groupadd -g 555 nginx2
- # 创建一个uid为555, gid为555的系统用户nginx2
- [root@RockyLinux1 ~]# useradd -r -u 555 -g 555 nginx2
- # uid=gid, 这样看着就舒服多了
- [root@RockyLinux1 ~]# id nginx
- uid=996(nginx) gid=993(nginx) groups=993(nginx)
复制代码 5.6 特殊属性
特殊属性对root用户也是有限制的, 不会显式的展示出属性信息, 需要特定的命令查看, 特殊属性:
- a: 只允许追加, 不能编辑/删除原有内容
- i: 不能修改/删除/重命名
- ...........................................................................
- # Rocky的非交互式修改密码方式, --stdin支持从标准输入中读取数据作为密码, 下面两种方式效果是一样的
- [root@RockyLinux1 ~]# passwd --stdin liubei <<< "123456"
- [root@RockyLinux1 ~]# echo "123456" | passwd --stdin liubei
- Changing password for user liubei.
- passwd: all authentication tokens updated successfully.
- [root@RockyLinux1 ~]# ssh liubei@127.0.0.1 "whoami"
- liubei@127.0.0.1's password:
- liubei
- # 通用与Rocky/Ubuntu的写法, ubuntu的passwd命令, 是不支持--stdin的
- # 方式1: 取巧的写法
- [root@RockyLinux1 ~]# echo -e "12345678\n12345678" | passwd liubei
- Changing password for user liubei.
- New password: BAD PASSWORD: The password fails the dictionary check - it is too simplistic/systematic
- Retype new password: passwd: all authentication tokens updated successfully.
- # 方式2: 规范的写法
- [root@RockyLinux1 ~]# echo "liubei:123456" | chpasswd
- [root@RockyLinux1 ~]# ssh liubei@127.0.0.1 "whoami"
- liubei@127.0.0.1's password:
- liubei
复制代码 来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |