找回密码
 立即注册
首页 业界区 业界 第二周

第二周

心麾浪 昨天 21:33
第二周作业
  1. 1. 总结通配符,管道,重定向,并且结合示例,添加注释信息
  2. 2. 总结linux用户和用户组相关知识点以及常见的操作命令,添加注释信息
  3. 3. 总结文件权限管理相关的知识点,包括权限位,特殊权限和ACL,添加详细的注释和解释
  4. 4. 总结文件时间戳的用法
  5. 5. 总结find和xargs的用法
  6. 6. 总结几种压缩工具的使用方法
复制代码
1. 通配符

符号说明*匹配任意字符, 0个或任意个?匹配任意单个字符, 有且只能有一个[a-zA-Z0-9]匹配指定单个字符序列, 生成指定范围的序列1.1 * 使用方式
  1. # 匹配所以以.conf结尾的文件
  2. [root@RockyLinux1 ~]# ll /etc/*.conf | head -n 5
  3. -rw-r--r--. 1 root root 1370 Apr 27 18:59 /etc/chrony.conf
  4. -rw-r--r--. 1 root root  117 Jun 11 23:25 /etc/dracut.conf
  5. -rw-r--r--. 1 root root    9 Jun 23  2020 /etc/host.conf
  6. -rw-r--r--. 1 root root 8979 Jun 15 12:47 /etc/kdump.conf
  7. -rw-r--r--. 1 root root  880 Jun 25 03:52 /etc/krb5.conf
  8. # 列出所有包含"d"的文件
  9. [root@RockyLinux1 ~]# ls *d*
  10. anaconda-ks.cfg  demo.sh
  11. # 干掉Linux, 或者删除指定目录下的所有文件
  12. [root@RockyLinux1 ~]# rm -rf /*
复制代码
1.2 ? 使用方式
  1. # 查找固定长度的文件名
  2. [root@RockyLinux1 ~]# ll /var/log/???.log
  3. -rw-r--r-- 1 root root 246581 Jul  3 11:29 /var/log/dnf.log
  4. [root@RockyLinux1 ~]# ll /var/log/???????.log
  5. -rw-r--r-- 1 root root 42004 Jul  3 11:29 /var/log/dnf.rpm.log
  6. # 查找第二个字符为b的文件, 列出的结果不符合, 可能是匹配到的是个目录, 可以搭配echo输出
  7. [root@RockyLinux1 ~]# ls /etc/?b*
  8. session.conf  session.d  system.conf  system.d
  9. [root@RockyLinux1 ~]# echo  /etc/?b*
  10. /etc/dbus-1
  11. # -d查看目录本身
  12. [root@RockyLinux1 ~]# ls -d /etc/?b*
  13. /etc/dbus-1
复制代码
1.3 [] 使用方式
  1. # 查看所有以y开头的文件, []当作一个可以定制化的?来使用即可
  2. [root@RockyLinux1 ~]# ll /usr/bin/[y]*
  3. -rwxr-xr-x  1 root root 32064 May  2 16:31 /usr/bin/yes
  4. lrwxrwxrwx. 1 root root     8 May 16  2022 /usr/bin/ypdomainname -> hostname
  5. lrwxrwxrwx  1 root root     5 May  4 11:12 /usr/bin/yum -> dnf-3
  6. # 列出bcd任意一个字符开头的文件
  7. [root@RockyLinux1 ~]# ll /usr/bin/[bcd]*
  8. # 列出a-z任意一个字符开头的文件
  9. [root@RockyLinux1 ~]# ll /usr/bin/[a-z]*
复制代码
1.4 {} 使用方式
  1. # {}的主要作用, 是用来生成一个序列
  2. [root@RockyLinux1 ~]# echo {1..9}
  3. 1 2 3 4 5 6 7 8 9
  4. # 序列是可以拼接的
  5. [root@RockyLinux1 ~]# echo {1..9}.txt
  6. 1.txt 2.txt 3.txt 4.txt 5.txt 6.txt 7.txt 8.txt 9.txt
  7. # touch {1..9}.txt, 实际上执行的就是 touch 1.txt 2.txt 3.txt 4.txt 5.txt 6.txt 7.txt 8.txt 9.txt
  8. [root@RockyLinux1 ~]# touch {1..9}.txt
  9. [root@RockyLinux1 ~]# ls [0-9].txt
  10. 1.txt  2.txt  3.txt  4.txt  5.txt  6.txt  7.txt  8.txt  9.txt
  11. # 指定步长, 即每次迭代时的数量, 默认为1
  12. [root@RockyLinux1 ~]# echo {1..9..2}
  13. 1 3 5 7 9
复制代码
2. 管道

管道的作用: 将管道符前面命令的标准输出, 当作管道符后面命令的标准输入, 没有标准输出/命令不能从标准输入读取数据也可以使用管道, 只是没有连接的意义
  1. # mkdir test创建一个目录, 成功了是没有输出的, 虽然cat能够从标准输入读取数据, 但是没有数据执行就没有意义
  2. [root@RockyLinux1 ~]# mkdir test  | cat
  3. # echo有输出, 但是ls不支持从标准输入读取数据, 列出的还是当前目录, 而不是指定的内容, 因此也是没有意义的
  4. [root@RockyLinux1 ~]# echo 1.txt | ls
  5. 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
  6. # 通过ls查看, 发现输出的内容都是在同一行
  7. [root@RockyLinux1 ~]# ls [0-5].txt
  8. 1.txt  2.txt  3.txt  4.txt  5.txt
  9. # 管道交给cat -A, 可以发现, ls的内容, 每个都是独立的行, 而不是单纯的展示出来的一行空格分割
  10. [root@RockyLinux1 ~]# ls [0-5].txt | cat -A
  11. 1.txt$
  12. 2.txt$
  13. 3.txt$
  14. 4.txt$
  15. 5.txt$
复制代码
3. 重定向

重定向: 默认的重定向, 是输出到终端的, 可以通过> | >>的方式, 改变数据的流量, 常见的就是到文件, 而不是输出到终端.
3.1 追加与覆盖
  1. # >: 覆盖
  2. # >>: 追加
  3. [root@RockyLinux1 ~]# echo 123 >> 1.txt
  4. # 追加重定向, 会在最后新加行
  5. [root@RockyLinux1 ~]# cat 1.txt
  6. 123
  7. 123
  8. # 直接清空原文件内容, 在写入新内容
  9. [root@RockyLinux1 ~]# echo 456 > 1.txt
  10. [root@RockyLinux1 ~]# cat 1.txt
  11. 456
  12. # 快速清空文件的方式
  13. [root@RockyLinux1 ~]# cp /etc/passwd ./; > passwd
  14. [root@RockyLinux1 ~]# cat passwd
复制代码
3.2 标准输出
  1. # 1>, 1>> | >, >>: 标准输出重定向, 1为标准输出, 默认值
  2. # 1.txt存在, 则是一个标准输出, 输出的内容重定向到2.txt
  3. [root@RockyLinux1 ~]# ls 1.txt > 2.txt
  4. [root@RockyLinux1 ~]# cat 2.txt
  5. 1.txt
  6. # 11.txt不存在, ls找不到文件会提示错误信息, 这个属于标准错误, 不会被标准输出捕获
  7. [root@RockyLinux1 ~]# ls 11.txt > 2.txt
  8. ls: cannot access '11.txt': No such file or directory
  9. # 没有标准输出, 就是空, 等同于执行了>2.txt, 会清空2.txt原有的内容
  10. [root@RockyLinux1 ~]# cat 2.txt
复制代码
3.3 标准错误
  1. # 2>, 2>>: 标准错误重定向, 指的是程序执行时的一些错误输出, 不一定是程序报错, 只是命令内部逻辑认为是一个错误信息
  2. # 1.txt存在, 则输出标准错误, 2>只会捕获标准错误
  3. [root@RockyLinux1 ~]# ls 1.txt 2> 2.txt
  4. 1.txt
  5. # 11.txt不存在, 是一个标准错误, 被2>重定向到2.txt, 不会在输出到屏幕
  6. [root@RockyLinux1 ~]# ls 11.txt 2> 2.txt
  7. [root@RockyLinux1 ~]# cat 2.txt
  8. ls: cannot access '11.txt': No such file or directory
复制代码
3.4 标准输入
  1. # <<< "哈哈哈": 标准输入, 可以直接输出字符串
  2. # < file: 标准输入, 需要一个文件
  3. [root@RockyLinux1 ~]# cat <<< "哈哈哈"
  4. 哈哈哈
  5. [root@RockyLinux1 ~]# cat < 1.txt
  6. 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这样杂乱无章的
  1. # curl有一个比较特殊的地方, 建立连接的信息会被认为是标准错误, 在正常请求完成后会被隐藏起来, 这也就导致, 不管是> 或 2>, 都无法将所有的信息都屏蔽掉
  2. [root@RockyLinux1 ~]# curl  http://11.0.0.1/
  3. 你好, 世界
  4. [root@RockyLinux1 ~]# curl  http://11.0.0.1/ > /dev/null
  5.   % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
  6.                                  Dload  Upload   Total   Spent    Left  Speed
  7. 100    15  100    15    0     0  15000      0 --:--:-- --:--:-- --:--:-- 15000
  8. [root@RockyLinux1 ~]# curl  http://11.0.0.1/ 2> /dev/null
  9. 你好, 世界
  10. # 将标准错误和标准输出全部全定向方式1: 标准输出到/dev/null, 标准错误到标准输出, 链条式重定向
  11. [root@RockyLinux1 ~]# curl  http://11.0.0.1/ > /dev/null  2>&1
  12. # 方式2: 新写法, 老系统可能不支持
  13. [root@RockyLinux1 ~]# curl  http://11.0.0.1/ &> /dev/null
复制代码
4.4 删除用户
  1. # 创建用户
  2. [root@RockyLinux1 ~]# useradd zhangfei
  3. [root@RockyLinux1 ~]# grep zhangfei /etc/passwd
  4. zhangfei:x:1001:1001::/home/zhangfei:/bin/bash
  5. # 默认情况下, 创建一个用户, 会自动创建一个同名的组作为该用户的主组
  6. [root@RockyLinux1 ~]# id zhangfei
  7. uid=1001(zhangfei) gid=1001(zhangfei) groups=1001(zhangfei)
  8. # 密码设置
  9. [root@RockyLinux1 ~]# passwd zhangfei
  10. Changing password for user zhangfei.
  11. New password:
  12. BAD PASSWORD: The password is shorter than 8 characters
  13. Retype new password:
  14. passwd: all authentication tokens updated successfully.
  15. # 登录测试
  16. [root@RockyLinux1 ~]# ssh zhangfei@127.0.0.1 'whoami'
  17. zhangfei@127.0.0.1's password:
  18. zhangfei
  19. # Rocky创建用户, 默认就会创建家目录, Ubuntu需要显示的指定 -m 才会创建家目录
  20. [root@RockyLinux1 ~]# ls -A ~zhangfei
  21. .bash_logout  .bash_profile  .bashrc
复制代码
4.5 创建系统用户

创建方式1: 不推荐s
  1. # 删除用户, 默认情况下, 删除用户, 会保留家目录, 只是把/etc/passwd, /etc/shadow, 还有组的信息删除掉
  2. [root@RockyLinux1 ~]# ll /home/
  3. drwx------ 2 admin    admin    62 Jun 30 23:12 admin
  4. drwx------ 2 zhangfei zhangfei 62 Jul  7 22:21 zhangfei
  5. [root@RockyLinux1 ~]# userdel admin
  6. [root@RockyLinux1 ~]# id admin
  7. id: ‘admin’: no such user
  8. [root@RockyLinux1 ~]# ll /home/
  9. total 0
  10. drwx------ 2     1000     1000 62 Jun 30 23:12 admin
  11. drwx------ 2 zhangfei zhangfei 62 Jul  7 22:21 zhangfei
  12. # 加上-r选项, 删除比较彻底
  13. [root@RockyLinux1 ~]# userdel -r zhangfei
  14. [root@RockyLinux1 ~]# ll /home/
  15. total 0
  16. drwx------ 2 1000 1000 62 Jun 30 23:12 admin
复制代码
创建方式2: 推荐
  1. # 通过-u选项指定uid, 会有warning提示, 但是不影响创建成功, 但是gid是从1000开始的
  2. [root@RockyLinux1 ~]# useradd -u 99 liubei
  3. useradd warning: liubei's uid 99 outside of the UID_MIN 1000 and UID_MAX 60000 range.
  4. [root@RockyLinux1 ~]# id liubei
  5. uid=99(liubei) gid=1000(liubei) groups=1000(liubei)
  6. # -r选项表示创建一个系统用户, 这个时候就不会报错, 并且gid也是1000以内
  7. [root@RockyLinux1 ~]# useradd -r -u 100 guanyu
  8. [root@RockyLinux1 ~]# id guanyu
  9. uid=100(guanyu) gid=992(guanyu) groups=992(guanyu)
复制代码
4.6 密码的修改

交互式: 执行命令后, 需要用户输入相关信息才能继续
非交互式: 一条命令搞定, 不需要在执行过程中操作
  1. # 创建一个gid为555的nginx2组
  2. [root@RockyLinux1 ~]# groupadd -g 555 nginx2
  3. # 创建一个uid为555, gid为555的系统用户nginx2
  4. [root@RockyLinux1 ~]# useradd -r -u 555 -g 555 nginx2
  5. # uid=gid, 这样看着就舒服多了
  6. [root@RockyLinux1 ~]# id nginx
  7. uid=996(nginx) gid=993(nginx) groups=993(nginx)
复制代码
5.6 特殊属性

特殊属性对root用户也是有限制的, 不会显式的展示出属性信息, 需要特定的命令查看, 特殊属性:

  • a: 只允许追加, 不能编辑/删除原有内容
  • i: 不能修改/删除/重命名
  • ...........................................................................
  1. # Rocky的非交互式修改密码方式, --stdin支持从标准输入中读取数据作为密码, 下面两种方式效果是一样的
  2. [root@RockyLinux1 ~]# passwd --stdin liubei <<< "123456"
  3. [root@RockyLinux1 ~]# echo "123456" | passwd --stdin liubei
  4. Changing password for user liubei.
  5. passwd: all authentication tokens updated successfully.
  6. [root@RockyLinux1 ~]# ssh liubei@127.0.0.1 "whoami"
  7. liubei@127.0.0.1's password:
  8. liubei
  9. # 通用与Rocky/Ubuntu的写法, ubuntu的passwd命令, 是不支持--stdin的
  10. # 方式1: 取巧的写法
  11. [root@RockyLinux1 ~]# echo -e "12345678\n12345678" | passwd liubei
  12. Changing password for user liubei.
  13. New password: BAD PASSWORD: The password fails the dictionary check - it is too simplistic/systematic
  14. Retype new password: passwd: all authentication tokens updated successfully.
  15. # 方式2: 规范的写法
  16. [root@RockyLinux1 ~]# echo "liubei:123456" | chpasswd
  17. [root@RockyLinux1 ~]# ssh liubei@127.0.0.1 "whoami"
  18. liubei@127.0.0.1's password:
  19. liubei
复制代码
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册