Linux云盘算SRE-第二周

  金牌会员 | 2024-10-18 17:30:19 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 856|帖子 856|积分 2568

1. 总结学过的权限,属性及ACL相关命令及选项,示例。

一、Linux安全模型

   1、资源分派  
Authentication(认证):验证用户身份,确保登录系统的用户是合法的。  
Authorization(授权):根据用户身份设置  不同的权限,决定用户可以对系统资源进行哪些操作。  
Accouting(审计):记任命户的举动,用于事后审查,比方通过查看登录日记来了解用户的登录环境。    在  Linux  系统中,当用户登录乐成时,系统会自动分配令牌   token  ,包括:用户标识和构成员等信息。  
2、3A认证  
  又称  AAA  认证,是一套针对网络设备的网络访问控制计谋安全模型。  
3、安全上下文  
运行中的程序(进程)以进程发起者的身份运行,其访问资源的权限取决于发起者的身份。只有具有相应权限的用户才气执行程序,并且程序在访问文件等资源时,其权限也由发起者的身份决定。  二、用户和组相关概念

   1、用户  
  Linux系统是多用户系统,可以同时存在多个用户,每个用户之间都是互相隔离的。在  Linux  系统中,每个用户是通过  User Id   (  UID  )来唯一标识的。用户范例有:  
超等管理员:root用户,UID为0,拥有最高权限,可以对系统进行任何操作。  
系统用户:CentOS 6以前为1 - 499,CentOS 7以后为1 - 999,这些用户重要用于给配景程序利用,如nginx、mysql等守卫进程。  
登任命户:CentOS 6以前为500+,CentOS 7以后为1000+,用于用户进行交互式登录。  
2、用户组     Linux   中可以将一个或多个用户参加用户组中,组就是包含   0   个或多个用户的聚集,用户组是通过   Group ID(   GID   ) 来唯一标识的。用户组范例有:   超等管理员组:root组,GID为0,供超等管理员利用。  
系统组:CentOS 6以前为1 - 499,CentOS 7以后为1 - 999,用于守卫进程获取资源权限分配。  
普通组:CentOS 6以前为500+,CentOS 7以后为1000+,供普通登任命户利用。  
3、用户和组的关系  
一个用户至少有一个组,此中有一个主组(primary group),创建用户时默认会创建与其同名的组作为主组,用户也可以属于0个或多个附加组(supplementary group)。  利用组,可以对用户进行批量管理,比如对一个组授权,则该组下全部的用户能能继承这个组的权  限。  三、用户和组相关配置文件

   1、重要配置文件  
/etc/passwd:存储用户及其属性信息,包括登任命户名、密码占位符、UID、所属组ID、用户全名或表明、用户家目次以及用户默认shell等。  
/etc/shadow:存储用户密码及其相关属性,如加密后的密码、上次修改密码的时间、密码有效期等信息,只有root用户有读权限。  
/etc/group:存储组及其属性信息,包括组名、组密码占位符、组ID以及构成员列表等。  
/etc/gshadow:存储组密码及其相关属性,如加密后的组密码、组管理员以及构成员列表等。  
2、文件操作  
可以利用专用工具来修改这些文件,如vipw和vigr用于编辑相关文件,pwck和grpck用于检查用户和组相关配置文件的精确性。也可以利用getent命令根据用户名查看配置项。  四、用户和组管理命令

   1、用户管理命令  
useradd  
用于创建新的Linux用户,可以指定多种选项,如UID、用户组、家目次、shell、是否创建系统用户、是否创建家目次、设置密码、指定附加组等。  
usermod  
用于修改用户属性,包括修改表明、家目次、过期日期、密码过期后的处理方式、组、附加组、登录名称、锁定或解锁用户帐号、修改密码、修改shell、修改UID等。  
userdel  
用于删除Linux用户,可以选择是否强制删除以及是否删除家目次和邮件目次。  
id  
用于查看用户的UID、GID等信息,可以表现详细信息,也可以只表现特定的信息,如主组ID、附加组ID、用户名或组名等。  
su  
用于切换用户身份,可以进行登录式切换(读取目的用户的配置文件,切换至目的用户的家目次)和非登录式切换(不读取目的用户的配置文件,不改变当前工作目次),还可以在不切换用户的环境下,利用目的用户的权限和环境执行命令。  
passwd  
用于修改用户密码,可以进行多种操作,如锁定、解锁、删除密码、设置密码有效期、提醒用户密码过期等,普通用户修改自己密码需要先验证当前利用的密码。  
chage  
用于修改用户密码计谋,包括更改密码的时间、设置密码最短有效期、最长有效期、警告期、密码过期后的宽限期以及用户的有效期等,还可以查看用户的密码计谋。  
2、组管理命令  
groupadd  
用于创建组,可以指定组ID、是否为系统组、是否允许重复GID、设置组密码等。  
groupmod  
用于修改组属性,如修改组ID、组名以及组密码等。  
groupdel  
用于删除组,强制删除可能导致无主组的用户不可用无法登录。  
gpasswd  
用于更改组密码,也可以修改附加组的成员关系,在组没有密码的环境下,加组操作只能由root用户进行。  
groupmems  
用于管理附加组的成员关系,可以添加、删除成员,查看成员列表,扫除全部成员等,只有root用户可以更改指定组的成员关系。  五、文件权限管理

   1、权限体系介绍  
角色  
属主(owner):文件的全部者,通常是创建文件的用户。  
属组(group):文件所属的组,用户可以属于多个组,文件所属组决定了组内用户对文件的权限。  
其它用户(other):不属于属主和属组的用户。  
权限  
读(r,4):对文件来说,可查看文件内容;对目次来说,可读取目次中的文件名,但无法查看文件元数据。  
写(w,2):对文件来说,可修改文件内容;对目次来说,可在目次中创建文件和删除文件。  
执行(x,1):对文件来说,可执行文件,发起一个进程;对目次来说,可进入目次,可查看文件元数据,可查看文件内容。  
2、文件全部者和属组属性操作命令  
chown  
用于修改文件的属主和属组,可以只修改全部者、只修改属组或同时修改全部者和属组,还可以根据原属主属组进行修改,支持递归操作以及多种选项,如表现过程、不表现错误信息等。  
chgrp  
用于只修改文件的属组,支持雷同chown的多种选项和操作方式,如递归修改、根据文件修改等。  
3、文件权限操作命令  
chmod  
用于修改文件权限,可以利用字符表现法(如u+r表现属主加读权限)或八进制数字表现法(如644表现属主可读写,属组可读,其它用户可读),支持递归操作以及多种选项,如表现过程、不表现错误信息等。  
4、新建文件和目次的默认权限  
新建文件的默认权限为666 - umask,新建目次的默认权限为777 - umask。umask值间接影响新建文件和目次的权限,非特权用户umask默认是002,root的umask默认是022,可以通过umask命令查看和修改umask值,并且可以在全局设置文件(如/etc/bashrc、/etc/bash.bashrc或~/.bashrc)中长期保存umask设置。  
5、特殊权限  
SUID(4)  
作用于二进制可执行文件上,用户执行该文件时将继承此程序全部者的权限。可以通过chmod命令设置SUID权限,比方chmod u+s FILE。  
SGID(2)  
作用于二进制可执行文件上,用户执行该文件时将继承此程序全部组的权限;作用于目次上,此目次中新建的文件的所属组将自动从此目次继承。可以通过chmod命令设置SGID权限,比方chmod g+s FILE或chmod g+s DIR。  
Sticky(1)  
作用于目次上,此目次中的文件只能由全部者自己或root来删除。可以通过chmod命令设置Sticky权限,比方chmod o+t DIR。  
6、访问控制列表ACL  
ACL权限功能  
提供更细粒度的权限控制,可以单独对指定的用户设定各不雷同的权限,弥补了rwx权限体系只能将用户分成三种角色的不足。CentOS7默认创建的xfs和ext4文件系统具有ACL功能,CentOS7之前版本需要手动增加。  
ACL相关命令  
setfacl:用于设置ACL权限,可以修改、删除ACL权限,设置默认ACL,递归执行等操作。  
getfacl:用于查看设置的ACL权限。   
  1. #linux用户管理相关命令汇总
  2. vipw|vigr  g|--group   #编辑 group 文件
  3. vipw|vigr -p|--passwd   #编辑 passwd 文件
  4. vipw  -s|--shadow   #编辑 /etc/shadow
  5. vigr  -s|--shadow    #/etc/gshadow 文件
  6. pwck -q|--quiet           #只报告错误,忽略警告
  7. pwck  -r|--read-only       #显示错误和警告,但不改变文件
  8. pwck  -R|--root CHROOT_DIR #chroot 到的目录
  9. pwck  -s|--sort             #通过 UID 排序项目
  10. grpck -r|--read-only          #显示错误和警告,但不改变文件
  11. grpck -R|--root CHROOT_DIR    #chroot 到的目录
  12. grpck -s|--sort               #通过 UID 排序项目
  13. getent passwd|shadow|group|gshadow username #查看passwd|shadow|group|gshadow中username信息
  14. id username #查看用户id,用户组id,用户属组
  15. id -a  username  #显示详细信息,默认选项
  16. id -Z|--context username #仅显示安全上下文信息,要开启selinux 配置才有
  17. id -g|--group  username   #仅显示GID,就是只显示主组ID
  18. id -G|--groups  username #显示主组和附加组ID,就是所有组ID
  19. id -n|--name   username  #显示用户名或组名,要组合使用 -nu|-ng|-nG
  20. id -u|--user   username #仅显示UID
  21. su -m|-p|--preserve-environment username #不重置环境变量
  22. su -g|--group group  username               #指定主组,只有root 切普通用户才能指定此参数
  23. su -|-l|--login    username              #完全切换
  24. su -c|--command command   username          #不切换用户,而是临时使用该用户权限和环境执行命令
  25. su --session-command command    username    #使用上同 -c 选项,但不会创建会话
  26. su -f|--fast     username #向shell 传递 -f 选项(csh 或 tcsh)
  27. su-s|--shell shell  username #切换用户后,指定 /etc/shells中的shell环境,
  28. su -P|--pty         username#开一个新的终端
  29. useradd -u|--uid UID username   #指定UID
  30. useradd -g|--gid GID   username   #指定用户组,-g groupname|--gid GID
  31. useradd -c|--comment COMMENT username  #新账户的 GECOS 字段
  32. useradd -d|--home-dir HOME_DIR  username #指定家目录,可以是不存在的,指定家目录,并不代表创建
  33. useradd s|--shell SHELL username   #指定 shell,可用shell在/etc/shells 中可以查看
  34. useradd -r|--system  username             #创建系统用户,CentOS 6之前 ID<500,CentOS7 以后
  35. useradd  -m|--create-home  username       #创建家目录,一般用于登录用户
  36. useradd  -M|--no-create-home  username     #不创建家目录,一般用于不用登录的用户
  37. useradd -p|--password PASSWORD  username  #设置密码,这里的密码是以明文的形式存在
  38. useradd -o|--non-unique   username        #允许使用重复的 UID 创建用户
  39. useradd -G|--groups GROUP1[,GROUP2,...]   username #为用户指明附加组,组须事先存在
  40. useradd -N|--no-user-group   username    #不创建同名的组,使用users组做主组
  41. useradd -D|--defaults        username    #显示或更改默认的 useradd 配置,/etc/default/useradd
  42. useradd -e|--expiredate EXPIRE_DATE username #指定账户的过期日期 YYYY-MM-DD 格式
  43. useradd -f|--inactive INACTIVE  username     #密码过期之后,账户被彻底禁用之前的天数
  44. useradd -k|--skel SKEL_DIR username#创建家目录,生成默认文件,默认是/etc/skel/,要配合-m
  45. useradd  -K|--key KEY=VALUE username  #不使用 /etc/login.defs 中的默认值,自己指定
  46. useradd-l|--no-log-init username#不将用户添加到最近登录和登录失败记录
  47. usermod -c|--comment COMMENT username #修改注释
  48. usermod -d|--home HOME_DIR username    #修改家目录
  49. usermod -e|--expiredate EXPIRE_DATE username   #修改过期的日期,YYYY-MM-DD 格式
  50. usermod -f|--inactive INACTIVE  username     #密码过期之后,账户被彻底禁用之前的天数
  51. usermod -g|--gid GROUP      username  #修改组
  52. usermod -G|--groups GROUPS  username  # 新附加组,原来的附加组将会被覆盖;若保留同时使用-a选项
  53. usermod -a|--append GROUP   username #将用户追加至上边 -G 中提到的附加组中,并不从其它组中删除
  54. usermod -l|--login LOGIN   username          #新的登录名称
  55. usermod -L|--lock    username                #锁定用户帐号,在/etc/shadow 密码栏的增加 !
  56. usermod -m|--move-home username              #将家目录内容移至新位置,和 -d 一起使用
  57. usermod -o|--non-unique  username            #允许使用重复的(非唯一的) UID
  58. usermod -p|--password PASSWORD username #修改密码,这里是明文,如果要修改密码,则要用加密后
  59. usermod -s|--shell SHELL   username  #修改 shell
  60. usermod -u|--uid UID username        #修改 UID
  61. usermod -U|--unlock username          #解锁用户帐号,将 /etc/shadow 密码栏的!拿掉
  62. userdel -f|--force  username  #强制删除,哪怕用户正在登录状态
  63. userdel -r|--remove  username #删除家目录和邮件目录
  64. passwd -k|--keep-tokens username      #保持身份验证令牌不过期
  65. passwd -d|--delete    username        #删除用户密码,也删除密码锁,仅root有权限操作
  66. passwd -l|--lock      username        #锁定用户密码,仅root有权限操作
  67. passwd -u|--unlock   username         #解锁用户密码,仅root有权限操作
  68. passwd -e|--expire     username       #终止用户密码,用户下次登录成功后要立马修改,仅root
  69. passwd -f|--force     username        #强制执行操作
  70. passwd -x|--maximum=DAYS  username    #指定用户密码最长有效期,仅root有权限操作
  71. passwd -n|--minimum=DAYS username   #指定用户密码最短有效期,仅root有权限操作
  72. passwd -w|--warning=DAYS  username   #在密码过期前多少天开始提醒用户,仅root有权限操作
  73. passwd -i|--inactive=DAYS username  #当密码过期后少天该用户账号会被禁用,仅root有权限操作
  74. passwd -S|--status   username      #查询用户的密码状态,仅root有权限操作
  75. passwd --stdin    username       #从标准输入接收密码,Ubuntu无此选项
  76. chage -d LAST_DAY  username#更改密码的时间
  77. chage -m|--mindays username#MIN_DAYS
  78. chage -M|--maxdays username#MAX_DAYS
  79. chage -W|--warndays username#WARN_DAYS
  80. chage -I|--inactive INACTIVE username#密码过期后的宽限期
  81. chage -E|--expiredate EXPIRE_DATE username#用户的有效期
  82. chage -l username#显示密码策略
  83. groupadd -f|--force   groupname   #如果组已经存在则成功退出
  84. groupadd -g|--gid GID   groupname  #指定组ID,默认系统分配,指定值不要超过[GID_MIN,GID_MAX]
  85. groupadd -K|--key KEY=VALUE   groupname   #不使用 /etc/login.defs 中的默认值,自己指定,
  86. groupadd -o|--non-unique    groupname     #允许创建有重复 GID 的组
  87. groupadd -p|--password PASSWORD  groupname#为新组使用此加密过的密码
  88. groupadd -r|--system    groupname  #创建一个系统组 CentOS 6之前
  89. groupmod -g|--gid GID     groupname #将组 ID 改为 GID
  90. groupmod -n|--new-name NEW_GROUP  groupname #改名为 NEW_GROUP
  91. groupmod -o|--non-unique        groupname #允许使用重复的 GID
  92. groupmod -p|--password PASSWORD  groupname #将密码更改为(加密过的) PASSWORD
  93. groupdel -f|--force  groupname#强制删除
  94. gpasswd  -a|--add username  groupname#向组中添加用户
  95. gpasswd  -d|--delete username  groupname#从组中移除用户
  96. gpasswd  -r|--delete-password  groupname#删除组密码
  97. gpasswd  -R|--restrict        groupname#向其成员限制访问组 GROUP
  98. gpasswd -M|--members USER,...    groupname#批量加组
  99. gpasswd  -A|--administrators ADMIN,...  groupname#批量设组管理员
  100. groupmems -g|--group groupname   #更改为指定组 (只有root)
  101. groupmems -a|--add username     #指定用户加入组
  102. groupmems -d|--delete username #从组中删除用户
  103. groupmems -p|--purge groupname  #从组中清除所有成员
  104. groupmems -l|--list   groupname  #显示组成员列表
复制代码

  

  

  
  1. ​​#linux用户权限常用命令汇总
  2. chown -c|--changes  filename  #同-v选项,但只显示更新成功的信息
  3. chown -f|--silent|--quiet filename  #不显示错误信息
  4. chown -v|--verbose        filename  #显示过程
  5. chown --dereference        filename #修改的是符号链接指向的文件,而不是链接文件本身
  6. chown -h|--no-dereference   filename#修改的是符号链接文件,而不是其指向的目标文件
  7. chown --from=user:group    filename #根据原属主属组来修改,相当于一个查询条件
  8. chown --no-preserve-root   filename #不特别对待“/”,意思就是将根目录当成普通目录来执行,
  9. chown --preserve-root      filename #不允许在"/"上递归操作
  10. chown --reference=RFILE    filename #复制该文件的属主属组信息给指定文件
  11. chown-R|--recursive        filename#递归操作
  12. #下列选项配合 -R 使用
  13. chown -H                   filename #如果参数是指向目录的软链接,则只修改指向的目录,
  14. chown -L                   filename #更改所有遇到的符号链接指向的目录
  15. chown -P                   filename #不更改符号链接指向的目录
  16. chgrp -c|--changes     filename      #同-v选项,但只显示更新成功的信息
  17. chgrp -f|--silent|--quiet  filename  #不显示错误信息
  18. chgrp -v|--verbose      filename     #显示过程
  19. chgrp --dereference       filename   #修改的是符号链接指向的文件,而不是链接文件本身
  20. chgrp -h|--no-dereference  filename  #修改的是符号链接文件,而不是其指向的目标文件
  21. chgrp --no-preserve-root    filename #不特别对待“/”,意思就是将家目录当成普通目录来执行
  22. chgrp --preserve-root     filename   #不允许在"/"上递归操作
  23. chgrp --reference=RFILE   filename   #复制该文件的属主属组信息给指定文件
  24. chgrp -R|--recursive      filename   #递归操作
  25. #下列选项配合 -R 使用,
  26. chgrp -H         filename   #如果参数是指向目录的软链接,则只修改指向的目录,不改变目录里面文件
  27. chgrp -L          filename#更改所有遇到的符号链接指向的目录
  28. chgrp -P           filename #不更改符号链接指向的目录
  29. chmod -c|--changes      filename    #同-v选项,但只显示更新成功的信息
  30. chmod -f|--silent|--quiet  filename  #不显示错误信息
  31. chmod -v|--verbose         filename #显示过程
  32. chmod --no-preserve-root   filename #不特别对待“/”,意思就是将家目录当成普通目录来执行
  33. chmod --preserve-root      filename  #不允许在"/"上递归操作
  34. chmod --reference=RFILE    filename  #根据其它文件权限来操作,复制该文件的权限信息给指定文件
  35. chmod -R|--recursive     filename   #递归操作
  36. umask  -p    #如果省略 MODE 模式,以可重用为输入的格式输入
  37. umask  -S    #以字符显示
  38. umask  u=rw,g=r,o= #设置创建文件权限
  39. chmod u+s filename... #添加文件SUID权限
  40. chmod 4xxx filename #添加文件SUID权限
  41. chmod u-s filename...#去除文件SUID权限
  42. chmod g+s filename... #添加文件SGID权限
  43. chmod 2xxx filename#添加文件SGID权限
  44. chmod g-s filename...#添加文件SGID权限
  45. chmod o+t dirname...#添加文件Sticky权限
  46. chmod 1xxx dirname #添加文件Sticky权限
  47. chmod o-t dirname...#添加文件Sticky权限
  48. chattr -p filename #设置文件项目编号
  49. chattr -R  filename   #递归执行
  50. chattr -V   filename  #显示过程,并输出chattr 版本
  51. chattr -f  filename   #不输出错误信息
  52. chattr -v version filename #设置版本
  53. lsattr filename #显示文件属性
  54. setfacl -m|--modify=acl   filename      #修改acl权限
  55. setfacl -M|--modify-file=file filename#从文件读取规则
  56. setfacl -x|--remove=acl    filename     #删除文件acl 权限
  57. setfacl -X|--remove-file=file filename#从文件读取规则
  58. setfacl -b|--remove-all       filename  #删除文件所有acl权限
  59. setfacl -k|--remove-default   filename  #删除默认acl规则
  60. setfacl --set=acl           filename    #用新规则替换旧规则,会删除原有ACL项,用新的替代
  61. setfacl --set-file=file  filename  #从文件读取新规则
  62. setfacl --mask       filename   #重新计算mask值
  63. setfacl -n|--no-mask   filename #不重新计算mask值
  64. setfacl -d|--default    filename  #在目录上设置默认acl
  65. setfacl -R|--recursive  filename #递归执行
  66. setfacl -L|--logical    filename #将acl 应用在软链接指向的目标文件上,与-R一起使用
  67. setfacl -P|--physical     filename #将acl 不应用在软链接指向的目标文件上,与-R一起使用
  68. setfacl -m mask::rx filename #mask权限
  69. getfacl filename #查看权限列表
复制代码

  

  

  
  2. 联合vim几种模式,学会利用vim几个常见操作。

打开文件:

在终端中输入vim 文件名即可打开指定文件。比方,如果要打开名为test.txt的文件,可以输入vim test.txt。此时进入命令模式。
退出文件:

1)命令模式->命令扩展模式 退出
如果没有对文件进行任何修改,先输入: 进入命令扩展模式,再输入q就可以退出文件。
如果对文件进行了修改但不想保存,先输入:进入命令扩展模式,再输入q!强制退出(会放弃全部修改)。
如果对文件进行了修改并且想要保存后退出,先输入:进入命令扩展模式,在输入wq(先保存再退出)。
2)命令模式 退出
输入ZZ保存修改就可以退出文件。
输入ZQ不保存修改就可以退出文件。
从命令模式进入插入模式:

在命令模式下,可以利用以下按键进入插入模式:
i:在光标当前位置插入。
a:在光标当前位置的下一个字符处插入。
o:在光标地点行的下一行插入新的一行并进入插入模式。
I:在光标地点行的行首插入。
A:在光标地点行的行尾插入。

从插入模式回到命令模式:


在插入模式下,按下Esc键即可回到命令模式。
完成特定内容编写后的操作(包含插入、返回命令模式和退出)
按照要求,在打开文件(命令模式)后进入插入模式(如按i),输入 “马哥出品,必属佳构”。
然后按Esc键回到命令模式。
若要保存并退出,可以输入:wq;若不想保存并退出,输入:q!;若只是想保存不退出,输入:w。
在完成上述文件的编辑并保存退出后,可以利用cat命令来查看文件内容。
如果编辑的文件名为test.txt,在终端输入cat test.txt,就可以看到文件中的内容是否为刚刚自己编写的 “马哥出品,必属佳构”。
扩展命令模式根本命令

w:写(存)磁盘文件
wq:写入并退出
x:写入并退出
X:加密
q:退出
q!:不存盘退出,纵然更改都将丢失
r filename :读文件内容到当前文件中
w filename :将当前文件内容写入另一个文件
!command :执行命令
r!command :读入命令的输出
命令模式快捷键:

输入ZZ保存修改就可以退出文件。
输入ZQ不保存修改就可以退出文件。
光标跳转
在单词间跳转:
w:将光标移至下一个单词的开头。
b:将光标移至上一个单词的开头。
e:将光标移至当前单词的末尾。
在句子间跳转:
):将光标移至下一个句子的开头。
(:将光标移至上一个句子的开头。
上下跳转:
j:光标向下移动一行。
k:光标向上移动一行。
行复制粘贴
复制行:在命令模式下,将光标移至要复制的行,按yy(复制当前行),若要复制多行,可以利用数字yy(比方3yy表现复制从当前行开始的 3 行)。
粘贴行:将光标移至要粘贴的位置,按p(粘贴在光标地点行的下一行)大概P(粘贴在光标地点行的上一行)。
行删除
在命令模式下,将光标移至要删除的行,按dd即可删除当前行。若要删除多行,可以利用数字dd(比方3dd表现删除从当前行开始的 3 行)
3. 总结学过的文本处理工具,文件查找工具,文本处理三剑客, 文本格式化命令(printf)的相关命令及选项,示例。

1、文本处理工具

1. cat
命令格式:cat [选项] [文件]
常用选项及功能
-n:为全部行编号(包括空行)。
-b:只为非空行编号。
-E:在每行末尾表现$表现行尾。
-T:将制表符表现为^I。
示例
查看文件并表现全部行号:cat -n file.txt
查看文件并只对非空行编号:cat -b file.txt
2. more
命令格式:more [选项] [文件]
常用选项及功能
-d:表现详细的操作提示信息。
-s:将连续的空行压缩为一行。
示例
分页查看文件并表现提示:more -d file.txt
查看文件并压缩空行:more -s file.txt
3. less
命令格式:less [选项] [文件]
常用选项及功能
-N:表现行号。
-S:当行过长时,截断表现,可通过左右箭头查看完整内容。
-i:搜索时忽略大小写。
示例
查看文件并表现行号:less -N file.txt
在less中搜索忽略大小写的内容:/search -i
4. nl
功能:为文件添加行号,雷同cat -b。
示例
为文件添加行号:nl file.txt
5. tac
功能:逆序表现文件内容。
示例
逆序表现文件:tac file.txt
6. rev
功能:反转每行的字符顺序。
示例
反转每行字符:rev file.txt
7. head
命令格式:head [选项] [文件]
常用选项及功能
-n [行数]:表现文件开头的指定行数,若行数为负数,则从文件开头到倒数第|行数|行。
-c [字节数]:表现文件开头的指定字节数。
示例
查看文件前 5 行:head -n 5 file.txt
查看文件前 10 字节:head -c 10 file.txt
8. tail
命令格式:tail [选项] [文件]
-n [行数]:表现文件末尾的指定行数,若行数为负数,则从第|行数|行到文件末尾。
-c [字节数]:表现文件末尾的指定字节数。
-f:及时跟踪文件末尾的新增内容,常用于日记监控。
示例
查看文件后 3 行:tail -n 3 file.txt
及时跟踪日记文件:tail -f log.txt
9. cut
命令格式:cut [选项] [文件]
常用选项及功能
-d [分隔符]:指定分隔符,默认是制表符。
-f [字段列表]:指定要提取的字段,如单个字段、多个离散字段或连续字段。
-C:按字符切割。
示例
提取/etc/passwd文件中以:分隔的第 1、3 和 7 列:cut -d: -f1,3,7 /etc/passwd
10. paste
命令格式:paste [选项] [文件]
常用选项及功能
-d [分隔符]:指定分隔符,默认是制表符。
-s:将文件的全部行合并为一行。
示例
合并两个文件同行号的列:paste -d ' ' file1.txt file2.txt
将文件的全部行合并为一行:paste -s file.txt
11. wc
命令格式:wc [选项] [文件]
常用选项及功能
-l:统计行数。
-w:统计单词数。
-c:统计字节数。
-m:统计字符数。
-L:表现最长行的长度。
示例
统计文件的行数、单词数和字节数:wc -lwc file.txt
12. sort
命令格式:sort [选项] [文件]
常用选项及功能
-r:逆序排序。
-n:按数字大小排序。
-h:按人类可读的格式排序(如1K、2M等)。
-f:忽略大小写。
-u:去除重复行。
示例
对文件内容按数字大小排序:sort -n file.txt
按人类可读格式排序:sort -h file.txt
13. uniq
命令格式:uniq [选项] [文件]
常用选项及功能
-c:在每行前表现该行重复出现的次数。
-d:只表现重复的行。
-u:只表现不重复的行。
示例
统计文件中重复行的次数:sort file.txt | uniq -c
14. diff
命令格式:diff [选项] [文件1] [文件2]
常用选项及功能
-u:以统一格式输出差异,便于查看和天生补丁文件。
示例
比力两个文件的差异:diff -u file1.txt file2.txt
15. patch
功能:将diff天生的补丁文件应用到原始文件。
示例
应用补丁文件:patch file1.txt patch_file
2、文件查找工具

1. find
命令格式:find [路径] [选项] [表达式]
常用选项及功能
-name [文件名模式]:按文件名查找,支持通配符。
-type [文件范例]:按文件范例查找,如f(文件)、d(目次)等。
-size [大小条件]:按文件大小查找,如+10M(大于 10 兆)、-5k(小于 5 千字节)。
-mtime [时间条件]:按文件修改时间查找,如+3(3 天前修改的)、-1(1 天内修改的)。
-exec [命令] {} \;:对找到的文件执行指定命令。
示例
在/home/user目次下查找全部.txt文件:find /home/user -name '*.txt'
查找/var/log目次下 3 天前修改的文件并删除:find /var/log -mtime +3 -exec rm {} \;
2. locate
命令格式:locate [选项] [模式]
常用选项及功能
-i:忽略大小写查找。
-c:只表现匹配的文件数量。
-r:利用正则表达式查找。
示例
查找包含python的文件(忽略大小写):locate -i python
统计包含error的文件数量:locate -c error
3、文本处理三剑客

1. grep
命令格式:grep [选项] [模式] [文件]
常用选项及功能
-i:忽略大小写匹配。
-v:反向匹配,表现不包含模式的行。
-r:递归搜索目次及其子目次。
-n:表现匹配行的行号。
-c:统计匹配的行数。
-o:只表现匹配的字符串。
-q:静默模式,不第个输入,范例为图片读到的内容是:
-A [行数]:表现匹配行后指定行数的内容。
-B [行数]:表现匹配行前指定行数的内容。
-C [行数]:表现匹配行前后指定行数的内容。
-e [模式1] -e [模式2]:匹配多个模式中的恣意一个。
-w:匹配整个单词。
-E:利用扩展正则表达式。
-F:倒霉用正则表达式,按字符串字面匹配。
-P:支持 Perl 风格的正则表达式。
-f [文件]:从文件中读取模式进行匹配。
示例
在文件中查找包含hello的行并表现匹配行后 2 行:grep -A 2 hello file.txt
递归查找目次中包含error或warning的文件:grep -r -e error -e warning /home/user/docs
2. sed
命令格式:sed [选项] '命令' [文件]
常用选项及功能
-i:直接修改文件内容(谨慎利用),可指定备份后缀,如-i.bak。
-e:在同一命令行执行多个命令。
-n:只输出处理后的行。
根本命令及功能
s/旧字符串/新字符串/[修饰符]:更换操作,修饰符g表现全局更换,p表现更换行,w保存更换行到文件。
d:删除行。
p:打印行。
a \新行内容:在指定行后添加新行。
i \新行内容:在指定行前插入新行。
c \新行内容:更换指定行内容。
w [文件]:保存匹配行到文件。
r [文件]:读取文件内容到指定位置。
示例
在文件中更换全部apple为banana并保存更换行到新文件:sed -i.bak 's/apple/banana/g' file.txt && sed -i.bak 'w new_file.txt' file.txt
在指定行后添加新行:sed '3a new line' file.txt
3. awk
命令格式:awk [选项] '脚本' [文件]
常用选项及功能
-F [分隔符]:指定字段分隔符。
-v [变量名]=[变量值]:界说变量。
脚本编写示例
打印文件中第二列:awk -F ',' '{print $2}' data.csv
盘算文件中数字的总和:awk '{sum += $1} END{print sum}' nums.txt
根据条件处理行:awk '$1 > 10' log.txt
4、文本格式化命令(printf)

命令格式:printf '格式字符串' [参数列表]
格式说明符
% s:格式化字符串。
% d:格式化整数。
% f:格式化浮点数。
% c:格式化单个字符。
% e、% E:格式化科学计数法表现的浮点数。
% o:格式化八进制数。
% x、% X:格式化十六进制数。
修饰符
宽度指定:如 %5d(整数宽度为 5,右对齐),%-5d(左对齐)。
精度指定:如 %5.2f(总宽度 5,小数 2 位)。
示例
格式化输出字符串和整数:printf "The number is %d and the string is %s\n" 10 "Hello"
按指定宽度和精度输出浮点数:printf "The value is %7.3f\n" 3.14159
4. 总结文本处理的grep命令相关的根本正则和扩展正则表达式。

grep 命令相关的正则表达式
1、根本正则表达式

字符匹配
普通字符:直接匹配字符本身。比方,grep "hello" file.txt会匹配文件file.txt中包含hello的行。
特殊字符
.(点号):匹配恣意单个字符。比方,grep "h.lp" file.txt会匹配help、h1lp等。
[](字符类):匹配方括号内的恣意一个字符。比方,grep "h[aeiou]lp" file.txt会匹配help、hulp等以h开头,lp末端,中间是元音字母的字符串。
[^](否定字符类):匹配不在方括号内的恣意一个字符。比方,grep "h[^aeiou]lp" file.txt会匹配h1lp、hXlp等中间不是元音字母的字符串。
重复匹配
*(星号):匹配前面的字符零次或多次。比方,grep "a*b" file.txt会匹配b、ab、aab等。
\{n\}:匹配前面的字符恰好n次。比方,grep "a\{3\}b" file.txt会匹配aaab。
\{n,\}:匹配前面的字符至少n次。比方,grep "a\{2,\}b" file.txt会匹配aab、aaab等。
\{n,m\}:匹配前面的字符至少n次且最多m次。比方,grep "a\{1,3\}b" file.txt会匹配ab、aab、aaab。
位置匹配
^(脱字符):匹配行首。比方,grep "^hello" file.txt会匹配以hello开头的行。
$(美元符号):匹配行尾。比方,grep "world$" file.txt会匹配以world末端的行。
2、扩展正则表达式(利用-E选项或egrep命令)

字符匹配
与根本正则表达式雷同,但增加了一些便捷的字符类:
[:alpha:]:匹配恣意字母字符。
[:digit:]:匹配恣意数字字符。
[:alnum:]:匹配恣意字母或数字字符。
[:space:]:匹配恣意空缺字符(空格、制表符等)。
[:punct:]:匹配恣意标点符号。
重复匹配
+(加号):匹配前面的字符一次或多次。比方,egrep "a+b" file.txt会匹配ab、aab等,但不匹配b(区别于*)。
?(问号):匹配前面的字符零次或一次。比方,egrep "a?b" file.txt会匹配b和ab。
逻辑匹配
|(竖线):表现逻辑或。比方,egrep "hello|world" file.txt会匹配包含hello或world的行。
分组匹配
()(括号):用于分组。比方,egrep "(ab)+" file.txt会匹配ab、abab等。
5. sed将文件test中第50行中的helloworld改为nihao

  1. sed -i '50s/helloworld/nihao/g' test
复制代码

6. 在每一行后增加一空行
测试文件为cp /etc/passwd ~/,不要直接修改passwd文件


  1. sed -i 'G' passwd~
复制代码




7.删除文件每行的第一个字符

8.删除文件每行的第二个字符

9.删除文件每行的最后一个字符

10.删除文件每行的倒数第二个字符

  1. sed 's/^.//' test                     #删除文件每行的第一个字符
  2. sed -r 's/(.)(.)(.*)/\1\3/' test      #删除文件每行的第二个字符
  3. sed -r 's/(.*)(.$)/\1/' test          #删除文件最后的第一个字符
  4. sed -r 's/(.*)(.)(.$)/\1\3/' test     #删除文件最后的第二个字符
复制代码

   

  

11. 总结变量命名规则,不同范例变量(环境变量,位置变量,只读变量,局部变量,状态变量)如何利用。

变量命名规则重要包括命名要求与命名习惯
 


命名要求
大小写区分:在命名时严格区分大小写,不同大小写情势代表不同的命名。
避免保存字和内置变量:不能利用像 “if”“for” 等程序中的保存字以及内置变量进行命名。
字符利用限制:只能用数字、字母及下划线进行命名,且不能以数字开头,同时不支持短横线 “-”,命名还需与主机名有所不同。
命名习惯
见名知义:利用能体实际际作用的英文单词命名,避免利用简写,比方不消 “ATM” 这种简略情势。
大小写规范
变量名大写:实用于特定的全局变量或重要变量。
局部变量小写:局部变量采用小写命名。
函数名小写:函数名以小写情势呈现。
命名方式
大驼峰命名法:如 “StudentFirstName”,由多个单词构成,每个单词首字母大写,别的小写,常用于类名等重要概念的命名。
小驼峰命名法:像 “studentFirstName”,第一个单词首字母小写,后续单词首字母大写,别的小写,常见于变量和方法命名。
下划线命名法:比方 “student_name”,利用下划线连接单词,在特定编程风格或语言中较为常用。

不同范例的 Shell 变量及其利用方式:
 


一、环境变量
界说与设置
在大多数 Shell(如 bash)中,可以利用export命令来界说环境变量。比方,要界说一个名为MY_VAR的环境变量并赋值为hello,可以在命令行中输入:
     export MY_VAR = "hello"
也可以在 Shell 配置文件(如~/.bashrc或~/.bash_profile)中界说环境变量,这样变量在每次登录时都会自动设置。
利用目的
环境变量用于在整个系统环境大概用户的 Shell 会话中通报信息。比方,PATH环境变量界说了系统查找可执行文件的路径,当你在命令行输入一个命令时,系统会根据PATH中的路径来查找对应的可执行文件。
许多程序会读取特定的环境变量来获取配置信息。比方,JAVA_HOME环境变量通常被 Java 相关的程序用来确定 Java 安装的目次。
访问方式
在 Shell 脚本或命令行中,可以直接利用$符号加上环境变量名来访问环境变量的值。比方,要查看MY_VAR的值,可以利用echo $MY_VAR。
二、位置变量
界说与性质
位置变量是由 Shell 自动界说的特殊变量,用于接收命令行参数。在 Shell 脚本中,$1表现第一个参数,$2表现第二个参数,以此类推。$0表现脚本本身的名称。
利用示例
假设存在一个名为test.sh的脚本,内容如下:
     #!/bin/bash
     echo "The script name is: $0"
     echo "The first parameter is: $1"
     echo "The second parameter is: $2"
如果在命令行中执行./test.sh arg1 arg2,那么$0的值为test.sh,$1的值为arg1,$2的值为arg2。
三、只读变量
界说与设置
利用readonly命令来界说只读变量。比方,
readonly MY_READONLY_VAR = "fixed value"。
一旦界说为只读变量,就不能再修改其值。
利用场景
当有一些值在脚本运行过程中不应该被修改时,可以将其界说为只读变量。比方,脚本中用于盘算的常量大概一些配置信息中不允许改变的部门。
注意事项
如果试图修改只读变量的值,Shell 会报错。比方,在界说了readonly MY_READONLY_VAR = "value"之后,执行MY_READONLY_VAR="new value"会导致错误。
四、局部变量
界说与范围
在 Shell 脚本或函数内部界说的变量通常是局部变量。在 bash 中,可以利用local关键字在函数内部界说局部变量。比方:
      my_function() {
      local local_var = "local value";
      echo $local_var;
      }
局部变量的作用范围仅限于界说它的函数内部。在函数外部无法访问该局部变量。
利用意义
局部变量有助于避免变量名辩论。当不同的函数可能利用雷同的变量名来表现不同的寄义时,利用局部变量可以确保每个函数内部的操作不会相互干扰。
五、状态变量
特殊意义与常见范例
在 Shell 脚本中,状态变量通常用于表现命令执行的结果状态。比方,$?是一个特殊的状态变量,它保存了最近一次执行的命令的退出状态码。退出状态码为 0 表现命令执行乐成,非 0 表现命令执行失败。
利用示例
执行一个命令,然后检查其状态:
     ls /nonexistent_directory
     echo "The exit status of the 'ls' command is: $?"
可以根据$?的值在脚本中进行不同的操作,比方判断一个命令是否乐成执行,如果失败则执行一些错误处理操作。
12. 通过shell编程完成,30鸡和兔的头,80鸡和兔的脚,分别有几只鸡,几只兔?

  1. #!/bin/bash
  2. HEAD=$1
  3. FOOT=$2
  4. RABBIT=$[$[FOOT-2*HEAD]/2]
  5. CHOOK=$[HEAD-RABBIT]
  6. echo RABBIT:$RABBIT
  7. echo CHOOK:$CHOOK
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表