佛山外贸网站制作公司,网站建设销售技巧和话术,小程序开发价目表,光泽网站建设wzjseo1. 总结学过的权限#xff0c;属性及ACL相关命令及选项#xff0c;示例。
一、Linux安全模型 #xff08;一#xff09;资源分派 Authentication#xff08;认证#xff09;#xff1a;验证用户身份#xff0c;确保登录系统的用户是合法的。 Authorization#xff08… 1. 总结学过的权限属性及ACL相关命令及选项示例。
一、Linux安全模型 一资源分派 Authentication认证验证用户身份确保登录系统的用户是合法的。 Authorization授权根据用户身份设置不同的权限决定用户可以对系统资源进行哪些操作。 Accouting审计记录用户的行为用于事后审查例如通过查看登录日志来了解用户的登录情况。 二3A认证 是一套针对网络设备的网络访问控制策略安全模型用于保障网络访问的安全性。 三安全上下文 运行中的程序进程以进程发起者的身份运行其访问资源的权限取决于发起者的身份。只有具有相应权限的用户才能执行程序并且程序在访问文件等资源时其权限也由发起者的身份决定。 二、用户和组相关概念 一用户 用户类型 超级管理员root用户UID为0拥有最高权限可以对系统进行任何操作。 系统用户CentOS 6以前为1 - 499CentOS 7以后为1 - 999这些用户主要用于给后台程序使用如nginx、mysql等守护进程。 登录用户CentOS 6以前为500CentOS 7以后为1000用于用户进行交互式登录。 二用户组 用户组类型 超级管理员组root组GID为0供超级管理员使用。 系统组CentOS 6以前为1 - 499CentOS 7以后为1 - 999用于守护进程获取资源权限分配。 普通组CentOS 6以前为500CentOS 7以后为1000供普通登录用户使用。 三用户和组的关系 一个用户至少有一个组其中有一个主组primary group创建用户时默认会创建与其同名的组作为主组用户也可以属于0个或多个附加组supplementary group。可以通过组对用户进行批量管理例如对一个组授权组内所有用户都能继承该组的权限。 三、用户和组相关配置文件 一主要配置文件 /etc/passwd存储用户及其属性信息包括登录用户名、密码占位符、UID、所属组ID、用户全名或注释、用户家目录以及用户默认shell等。 /etc/shadow存储用户密码及其相关属性如加密后的密码、上次修改密码的时间、密码有效期等信息只有root用户有读权限。 /etc/group存储组及其属性信息包括组名、组密码占位符、组ID以及组成员列表等。 /etc/gshadow存储组密码及其相关属性如加密后的组密码、组管理员以及组成员列表等。 二文件操作 可以使用专用工具来修改这些文件如vipw和vigr用于编辑相关文件pwck和grpck用于检查用户和组相关配置文件的正确性。也可以使用getent命令根据用户名查看配置项。 四、用户和组管理命令 一用户管理命令 useradd 用于创建新的Linux用户可以指定多种选项如UID、用户组、家目录、shell、是否创建系统用户、是否创建家目录、设置密码、指定附加组等。 usermod 用于修改用户属性包括修改注释、家目录、过期日期、密码过期后的处理方式、组、附加组、登录名称、锁定或解锁用户帐号、修改密码、修改shell、修改UID等。 userdel 用于删除Linux用户可以选择是否强制删除以及是否删除家目录和邮件目录。 id 用于查看用户的UID、GID等信息可以显示详细信息也可以只显示特定的信息如主组ID、附加组ID、用户名或组名等。 su 用于切换用户身份可以进行登录式切换读取目标用户的配置文件切换至目标用户的家目录和非登录式切换不读取目标用户的配置文件不改变当前工作目录还可以在不切换用户的情况下使用目标用户的权限和环境执行命令。 passwd 用于修改用户密码可以进行多种操作如锁定、解锁、删除密码、设置密码有效期、提醒用户密码过期等普通用户修改自己密码需要先验证当前使用的密码。 chage 用于修改用户密码策略包括更改密码的时间、设置密码最短有效期、最长有效期、警告期、密码过期后的宽限期以及用户的有效期等还可以查看用户的密码策略。 二组管理命令 groupadd 用于创建组可以指定组ID、是否为系统组、是否允许重复GID、设置组密码等。 groupmod 用于修改组属性如修改组ID、组名以及组密码等。 groupdel 用于删除组强制删除可能导致无主组的用户不可用无法登录。 gpasswd 用于更改组密码也可以修改附加组的成员关系在组没有密码的情况下加组操作只能由root用户进行。 groupmems 用于管理附加组的成员关系可以添加、删除成员查看成员列表清除所有成员等只有root用户可以更改指定组的成员关系。 五、文件权限管理 一权限体系介绍 角色 属主owner文件的所有者通常是创建文件的用户。 属组group文件所属的组用户可以属于多个组文件所属组决定了组内用户对文件的权限。 其它用户other不属于属主和属组的用户。 权限 读r4对文件来说可查看文件内容对目录来说可读取目录中的文件名但无法查看文件元数据。 写w2对文件来说可修改文件内容对目录来说可在目录中创建文件和删除文件。 执行x1对文件来说可执行文件发起一个进程对目录来说可进入目录可查看文件元数据可查看文件内容。 二文件所有者和属组属性操作 chown 用于修改文件的属主和属组可以只修改所有者、只修改属组或同时修改所有者和属组还可以根据原属主属组进行修改支持递归操作以及多种选项如显示过程、不显示错误信息等。 chgrp 用于只修改文件的属组支持类似chown的多种选项和操作方式如递归修改、根据文件修改等。 三文件权限操作 chmod 用于修改文件权限可以使用字符表示法如ur表示属主加读权限或八进制数字表示法如644表示属主可读写属组可读其它用户可读支持递归操作以及多种选项如显示过程、不显示错误信息等。 四新建文件和目录的默认权限 新建文件的默认权限为666 - umask新建目录的默认权限为777 - umask。umask值间接影响新建文件和目录的权限非特权用户umask默认是002root的umask默认是022可以通过umask命令查看和修改umask值并且可以在全局设置文件如/etc/bashrc、/etc/bash.bashrc或~/.bashrc中持久保存umask设置。 五特殊权限 SUID4 作用于二进制可执行文件上用户执行该文件时将继承此程序所有者的权限。可以通过chmod命令设置SUID权限例如chmod us FILE。 SGID2 作用于二进制可执行文件上用户执行该文件时将继承此程序所有组的权限作用于目录上此目录中新建的文件的所属组将自动从此目录继承。可以通过chmod命令设置SGID权限例如chmod gs FILE或chmod gs DIR。 Sticky1 作用于目录上此目录中的文件只能由所有者自己或root来删除。可以通过chmod命令设置Sticky权限例如chmod ot DIR。 六访问控制列表ACL ACL权限功能 提供更细粒度的权限控制可以单独对指定的用户设定各不相同的权限弥补了rwx权限体系只能将用户分成三种角色的不足。CentOS7默认创建的xfs和ext4文件系统具有ACL功能CentOS7之前版本需要手动增加。 ACL相关命令 setfacl用于设置ACL权限可以修改、删除ACL权限设置默认ACL递归执行等操作。 getfacl用于查看设置的ACL权限
#linux用户管理总结
vipw|vigr g|--group #编辑 group 文件
vipw|vigr -p|--passwd #编辑 passwd 文件
vipw -s|--shadow #编辑 /etc/shadow
vigr -s|--shadow #/etc/gshadow 文件
pwck -q|--quiet #只报告错误忽略警告
pwck -r|--read-only #显示错误和警告但不改变文件
pwck -R|--root CHROOT_DIR #chroot 到的目录
pwck -s|--sort #通过 UID 排序项目
grpck -r|--read-only #显示错误和警告但不改变文件
grpck -R|--root CHROOT_DIR #chroot 到的目录
grpck -s|--sort #通过 UID 排序项目
getent passwd|shadow|group|gshadow username #查看passwd|shadow|group|gshadow中username信息id username #查看用户id用户组id用户属组
id -a username #显示详细信息默认选项
id -Z|--context username #仅显示安全上下文信息要开启selinux 配置才有
id -g|--group username #仅显示GID就是只显示主组ID
id -G|--groups username #显示主组和附加组ID就是所有组ID
id -n|--name username #显示用户名或组名要组合使用 -nu|-ng|-nG
id -u|--user username #仅显示UIDsu -m|-p|--preserve-environment username #不重置环境变量
su -g|--group group username #指定主组只有root 切普通用户才能指定此参数
su -|-l|--login username #完全切换
su -c|--command command username #不切换用户而是临时使用该用户权限和环境执行命令
su --session-command command username #使用上同 -c 选项但不会创建会话
su -f|--fast username #向shell 传递 -f 选项(csh 或 tcsh)
su-s|--shell shell username #切换用户后指定 /etc/shells中的shell环境
su -P|--pty username#开一个新的终端useradd -u|--uid UID username #指定UID
useradd -g|--gid GID username #指定用户组-g groupname|--gid GID
useradd -c|--comment COMMENT username #新账户的 GECOS 字段
useradd -d|--home-dir HOME_DIR username #指定家目录可以是不存在的指定家目录并不代表创建
useradd s|--shell SHELL username #指定 shell可用shell在/etc/shells 中可以查看
useradd -r|--system username #创建系统用户,CentOS 6之前 ID500CentOS7 以后
useradd -m|--create-home username #创建家目录一般用于登录用户
useradd -M|--no-create-home username #不创建家目录一般用于不用登录的用户
useradd -p|--password PASSWORD username #设置密码这里的密码是以明文的形式存在
useradd -o|--non-unique username #允许使用重复的 UID 创建用户
useradd -G|--groups GROUP1[,GROUP2,...] username #为用户指明附加组组须事先存在
useradd -N|--no-user-group username #不创建同名的组,使用users组做主组
useradd -D|--defaults username #显示或更改默认的 useradd 配置/etc/default/useradd
useradd -e|--expiredate EXPIRE_DATE username #指定账户的过期日期 YYYY-MM-DD 格式
useradd -f|--inactive INACTIVE username #密码过期之后账户被彻底禁用之前的天数
useradd -k|--skel SKEL_DIR username#创建家目录生成默认文件默认是/etc/skel/要配合-m
useradd -K|--key KEYVALUE username #不使用 /etc/login.defs 中的默认值自己指定
useradd-l|--no-log-init username#不将用户添加到最近登录和登录失败记录usermod -c|--comment COMMENT username #修改注释
usermod -d|--home HOME_DIR username #修改家目录
usermod -e|--expiredate EXPIRE_DATE username #修改过期的日期YYYY-MM-DD 格式
usermod -f|--inactive INACTIVE username #密码过期之后账户被彻底禁用之前的天数
usermod -g|--gid GROUP username #修改组
usermod -G|--groups GROUPS username # 新附加组原来的附加组将会被覆盖若保留同时使用-a选项
usermod -a|--append GROUP username #将用户追加至上边 -G 中提到的附加组中并不从其它组中删除
usermod -l|--login LOGIN username #新的登录名称
usermod -L|--lock username #锁定用户帐号在/etc/shadow 密码栏的增加 !
usermod -m|--move-home username #将家目录内容移至新位置和 -d 一起使用
usermod -o|--non-unique username #允许使用重复的(非唯一的) UID
usermod -p|--password PASSWORD username #修改密码这里是明文如果要修改密码则要用加密后
usermod -s|--shell SHELL username #修改 shell
usermod -u|--uid UID username #修改 UID
usermod -U|--unlock username #解锁用户帐号将 /etc/shadow 密码栏的!拿掉userdel -f|--force username #强制删除哪怕用户正在登录状态
userdel -r|--remove username #删除家目录和邮件目录passwd -k|--keep-tokens username #保持身份验证令牌不过期
passwd -d|--delete username #删除用户密码也删除密码锁仅root有权限操作
passwd -l|--lock username #锁定用户密码仅root有权限操作
passwd -u|--unlock username #解锁用户密码仅root有权限操作
passwd -e|--expire username #终止用户密码用户下次登录成功后要立马修改仅root
passwd -f|--force username #强制执行操作
passwd -x|--maximumDAYS username #指定用户密码最长有效期仅root有权限操作
passwd -n|--minimumDAYS username #指定用户密码最短有效期仅root有权限操作
passwd -w|--warningDAYS username #在密码过期前多少天开始提醒用户仅root有权限操作
passwd -i|--inactiveDAYS username #当密码过期后少天该用户账号会被禁用仅root有权限操作
passwd -S|--status username #查询用户的密码状态仅root有权限操作
passwd --stdin username #从标准输入接收密码,Ubuntu无此选项chage -d LAST_DAY username#更改密码的时间
chage -m|--mindays username#MIN_DAYS
chage -M|--maxdays username#MAX_DAYS
chage -W|--warndays username#WARN_DAYS
chage -I|--inactive INACTIVE username#密码过期后的宽限期
chage -E|--expiredate EXPIRE_DATE username#用户的有效期
chage -l username#显示密码策略groupadd -f|--force groupname #如果组已经存在则成功退出
groupadd -g|--gid GID groupname #指定组ID默认系统分配指定值不要超过[GID_MINGID_MAX]
groupadd -K|--key KEYVALUE groupname #不使用 /etc/login.defs 中的默认值自己指定
groupadd -o|--non-unique groupname #允许创建有重复 GID 的组
groupadd -p|--password PASSWORD groupname#为新组使用此加密过的密码
groupadd -r|--system groupname #创建一个系统组 CentOS 6之前groupmod -g|--gid GID groupname #将组 ID 改为 GID
groupmod -n|--new-name NEW_GROUP groupname #改名为 NEW_GROUP
groupmod -o|--non-unique groupname #允许使用重复的 GID
groupmod -p|--password PASSWORD groupname #将密码更改为(加密过的) PASSWORD
groupdel -f|--force groupname#强制删除 gpasswd -a|--add username groupname#向组中添加用户
gpasswd -d|--delete username groupname#从组中移除用户
gpasswd -r|--delete-password groupname#删除组密码
gpasswd -R--restrict groupname#向其成员限制访问组 GROUP
gpasswd -M--members USER,... groupname#批量加组
gpasswd -A--administrators ADMIN,... groupname#批量设组管理员groupmems -g|--group groupname #更改为指定组 (只有root)
groupmems -a|--add username #指定用户加入组
groupmems -d|--delete username #从组中删除用户
groupmems -p|--purge groupname #从组中清除所有成员
groupmems -l|--list groupname #显示组成员列表 #linux用户权限总结
chown -c|--changes filename #同-v选项但只显示更新成功的信息
chown -f|--silent|--quiet filename #不显示错误信息
chown -v|--verbose filename #显示过程
chown --dereference filename #修改的是符号链接指向的文件而不是链接文件本身
chown -h|--no-dereference filename#修改的是符号链接文件而不是其指向的目标文件
chown --fromuser:group filename #根据原属主属组来修改相当于一个查询条件
chown --no-preserve-root filename #不特别对待“/”意思就是将根目录当成普通目录来执行
chown --preserve-root filename #不允许在/上递归操作
chown --referenceRFILE filename #复制该文件的属主属组信息给指定文件
chown-R|--recursive filename#递归操作
#下列选项配合 -R 使用
chown -H filename #如果参数是指向目录的软链接则只修改指向的目录
chown -L filename #更改所有遇到的符号链接指向的目录
chown -P filename #不更改符号链接指向的目录chgrp -c|--changes filename #同-v选项但只显示更新成功的信息
chgrp -f|--silent|--quiet filename #不显示错误信息
chgrp -v|--verbose filename #显示过程
chgrp --dereference filename #修改的是符号链接指向的文件而不是链接文件本身
chgrp -h|--no-dereference filename #修改的是符号链接文件而不是其指向的目标文件
chgrp --no-preserve-root filename #不特别对待“/”意思就是将家目录当成普通目录来执行
chgrp --preserve-root filename #不允许在/上递归操作
chgrp --referenceRFILE filename #复制该文件的属主属组信息给指定文件
chgrp -R|--recursive filename #递归操作
#下列选项配合 -R 使用
chgrp -H filename #如果参数是指向目录的软链接则只修改指向的目录不改变目录里面文件
chgrp -L filename#更改所有遇到的符号链接指向的目录
chgrp -P filename #不更改符号链接指向的目录chmod -c|--changes filename #同-v选项但只显示更新成功的信息
chmod -f|--silent|--quiet filename #不显示错误信息
chmod -v|--verbose filename #显示过程
chmod --no-preserve-root filename #不特别对待“/”意思就是将家目录当成普通目录来执行
chmod --preserve-root filename #不允许在/上递归操作
chmod --referenceRFILE filename #根据其它文件权限来操作,复制该文件的权限信息给指定文件
chmod -R|--recursive filename #递归操作umask -p #如果省略 MODE 模式以可重用为输入的格式输入
umask -S #以字符显示
umask urw,gr,o #设置创建文件权限chmod us filename... #添加文件SUID权限
chmod 4xxx filename #添加文件SUID权限
chmod u-s filename...#去除文件SUID权限
chmod gs filename... #添加文件SGID权限
chmod 2xxx filename#添加文件SGID权限
chmod g-s filename...#添加文件SGID权限
chmod ot dirname...#添加文件Sticky权限
chmod 1xxx dirname #添加文件Sticky权限
chmod o-t dirname...#添加文件Sticky权限
chattr -p filename #设置文件项目编号
chattr -R filename #递归执行
chattr -V filename #显示过程并输出chattr 版本
chattr -f filename #不输出错误信息
chattr -v version filename #设置版本
lsattr filename #显示文件属性setfacl -m|--modifyacl filename #修改acl权限
setfacl -M|--modify-filefile filename#从文件读取规则
setfacl -x|--removeacl filename #删除文件acl 权限
setfacl -X|--remove-filefile filename#从文件读取规则
setfacl -b|--remove-all filename #删除文件所有acl权限
setfacl -k|--remove-default filename #删除默认acl规则
setfacl --setacl filename #用新规则替换旧规则会删除原有ACL项用新的替代
setfacl --set-filefile filename #从文件读取新规则
setfacl --mask filename #重新计算mask值
setfacl -n|--no-mask filename #不重新计算mask值
setfacl -d|--default filename #在目录上设置默认acl
setfacl -R|--recursive filename #递归执行
setfacl -L|--logical filename #将acl 应用在软链接指向的目标文件上与-R一起使用
setfacl -P|--physical filename #将acl 不应用在软链接指向的目标文件上与-R一起使用
setfacl -m mask::rx filename #mask权限
getfacl filename #查看权限列表 2. 结合vim几种模式学会使用vim几个常见操作。
1如何打开文件。并在打开文件命令模式之后如何退出文件。
打开文件 在终端中输入vim 文件名即可打开指定文件。例如如果要打开名为test.txt的文件可以输入vim test.txt。此时进入命令模式。
退出文件 1、命令模式-命令扩展模式 退出 如果没有对文件进行任何修改先输入: 进入命令扩展模式再输入q就可以退出文件。 如果对文件进行了修改但不想保存先输入:进入命令扩展模式再输入q!强制退出会放弃所有修改。 如果对文件进行了修改并且想要保存后退出先输入:进入命令扩展模式在输入wq先保存再退出。 2、命令模式 退出 输入ZZ保存修改就可以退出文件。 输入ZQ不保存修改就可以退出文件。
2打开文件命令模式之后进入插入模式。并在插入模式中如何回到打开文件的状态命令模式并在命令模式之后如何退出文件。3打开文件命令模式之后进入插入模式编写一段话马哥出品必属精品, 之后从插入模式中如何回到打开文件的状态命令模式并在命令模式之后如何退出文件。
从命令模式进入插入模式 在命令模式下可以使用以下按键进入插入模式 i在光标当前位置插入。 a在光标当前位置的下一个字符处插入。 o在光标所在行的下一行插入新的一行并进入插入模式。 I在光标所在行的行首插入。 A在光标所在行的行尾插入。
从插入模式回到命令模式 在插入模式下按下Esc键即可回到命令模式。 完成特定内容编写后的操作包含插入、返回命令模式和退出 按照要求在打开文件命令模式后进入插入模式如按i输入 “马哥出品必属精品”。 然后按Esc键回到命令模式。 若要保存并退出可以输入:wq若不想保存并退出输入:q!若只是想保存不退出输入:w。
4使用cat命令验证文件内容是刚刚自己写的内容。
在完成上述文件的编辑并保存退出后可以使用cat命令来查看文件内容。 如果编辑的文件名为test.txt在终端输入cat test.txt就可以看到文件中的内容是否为刚刚自己编写的 “马哥出品必属精品”。5可选命令模式下光标在单词句子上进行前后上下跳转。行复制粘贴。行删除。
光标跳转 在单词间跳转 w将光标移至下一个单词的开头。 b将光标移至上一个单词的开头。 e将光标移至当前单词的末尾。 在句子间跳转 )将光标移至下一个句子的开头。 (将光标移至上一个句子的开头。 上下跳转 j光标向下移动一行。 k光标向上移动一行。 行复制粘贴 复制行在命令模式下将光标移至要复制的行按yy复制当前行若要复制多行可以使用数字yy例如3yy表示复制从当前行开始的 3 行。 粘贴行将光标移至要粘贴的位置按p粘贴在光标所在行的下一行或者P粘贴在光标所在行的上一行。 行删除 在命令模式下将光标移至要删除的行按dd即可删除当前行。若要删除多行可以使用数字dd例如3dd表示删除从当前行开始的 3 行
3. 总结学过的文本处理工具文件查找工具文本处理三剑客, 文本格式化命令(printf)的相关命令及选项示例。
一、文本处理工具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 二、文件查找工具 1. find 命令格式find [路径] [选项] [表达式] 常用选项及功能 -name [文件名模式]按文件名查找支持通配符。 -type [文件类型]按文件类型查找如f文件、d目录等。 -size [大小条件]按文件大小查找如10M大于 10 兆、-5k小于 5 千字节。 -mtime [时间条件]按文件修改时间查找如33 天前修改的、-11 天内修改的。 -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 三、文本处理三剑客 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 四、文本格式化命令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 命令相关的正则表达式一、基本正则表达式 字符匹配 普通字符直接匹配字符本身。例如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结尾的行。 二、扩展正则表达式使用-E选项或egrep命令 字符匹配 与基本正则表达式类似但增加了一些便捷的字符类 [:alpha:]匹配任意字母字符。 [:digit:]匹配任意数字字符。 [:alnum:]匹配任意字母或数字字符。 [:space:]匹配任意空白字符空格、制表符等。 [:punct:]匹配任意标点符号。 重复匹配 加号匹配前面的字符一次或多次。例如egrep ab 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
sed -i 50s/helloworld/nihao/g test 7. 在每一行后增加一空行测试文件为cp /etc/passwd ~/,不要直接修改passwd文件
sed -i G passwd~
8.删除文件每行的第一个字符。9.删除文件每行的第二个字符10.删除文件每行的最后一个字符11.删除文件每行的倒数第二个字符有精力的同学第二个链接可以多练习
sed s/^.// test #删除文件每行的第一个字符
sed -r s/(.)(.)(.*)/\1\3/ test #删除文件每行的第二个字符
sed -r s/(.*)(.$)/\1/ test #删除文件最后的第一个字符
sed -r s/(.*)(.)(.$)/\1\3/ test #删除文件最后的第二个字符
test文件 参考答案5-11https://qxblog.top/%E9%A2%98%E7%9B%AE-%E6%96%87%E6%9C%AC%E4%B8%89%E5%89%91%E5%AE%A2%E5%92%8Cshell/参考答案5-11:https://www.cnblogs.com/zll1217/articles/15394141.html
12. 总结变量命名规则不同类型变量环境变量位置变量只读变量局部变量状态变量如何使用。
变量命名规则主要包括命名要求与命名习惯命名要求 大小写区分在命名时严格区分大小写不同大小写形式代表不同的命名。 避免保留字和内置变量不能使用像 “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_VARnew 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: $? 可以根据$?的值在脚本中进行不同的操作例如判断一个命令是否成功执行如果失败则执行一些错误处理操作。
13. 通过shell编程完成30鸡和兔的头80鸡和兔的脚分别有几只鸡几只兔
#!/bin/bash
HEAD$1
FOOT$2
RABBIT$[$[FOOT-2*HEAD]/2]
CHOOK$[HEAD-RABBIT]
echo RABBIT:$RABBIT
echo CHOOK:$CHOOKchook_rabbit.sh shell文件 14. 结合编程的for循环条件测试条件组合完成批量创建100个用户1for遍历1..100 2先id判断是否存在 3用户存在则说明存在用户不存在则添加用户并说明已添加。
#! /bin/bash
for i in {1..100};doid user$i /dev/null echo user$i is exist ||{useradd user$i;PASScat /dev/urandom | tr -dc [:alnum:] |head -c12;echo $PASS | passwd --stdin user$i /dev/null;echo user$i:$PASS /root/user.log;echo user$i is created;}
doneuser_add.sh shell文件