当前位置: 首页 > news >正文

Day0506

base

1. 进程相关

  1. 能更改shell环境的只有内置命令, 且相关接口只对内置命令开放
    1. 只有前台运行内置变量才可以更改父shell的环境, 后台运行内置变量会创建子shell来执行, 并不会影响到父shell(子shell可以继承父shell的环境, 但无法修改父shell)
    2. 内置变量会在bash中运行, 不会创建子进程所以是看不到的, 能看到的都是子进程
  2. 前台执行命令的逻辑
    1. 如果是内置命令直接运行(如type,source等)
    2. 如果是外部命令, 简单的命令直接exec(如ls,sleep等), (逻辑)复杂的命令创建子shell运行

1. 后台进程管理

  1. <cmd> &创建子进程来执行cmd(看起来就像是在后台运行)
    1. 当前shell进程下创建一个新的子进程来执行该cmd, 如果当前shell会话关闭, 该后台进程也会关闭, 因为是依赖于当前shell进程存在的
    2. 子进程执行结束后, shell(父进程)会回收子进程并清除作业状态, 并在下一次执行命令后显示出已完成(不管命令执行成功与否不知道)
  2. jobs查看后台运行的作业(进程pid和作业编号不同)
  3. fg %<num> 使指定作业编号的作业在前台运行
  4. ctrl+z使前台运行的作业暂停并挂起到后台执行
  5. bg %<num>使指定作业编号的作业在后台(开始)运行
  6. wait $job_pid echo $?查看后台命令是否执行成功; 但是没必要, 我能想到的场景就是暂时退出vim, 还有就是如果要等还不如重新开一个窗口等着呢, 这样还不耽误事

2. ()和{}

1. () 创建子shell环境后执行其中的cmd

sshd(1276)───sshd(1377)───bash(1378)─┬─bash(2435)───sleep(2436)

  1. 父shell的终端也会被子shell继承, 简单来说就是子shell占用终端时父shell无法使用, 当然也可以让子shell后台运行
  2. 有些bash会优化简单命令, 所以显示出来的没有第二个bash进程
2. {} 在当前shell环境执行其中的cmd

sshd(1176)─┬─sshd(1276)───sshd(1377)───bash(1378)───sleep(2656)

  1. 真的是在当前shell环境执行cmd, 只是sleep是外部命令必须创建子进程才能执行, 所以才能够看到sleep进程
  2. 只要你的目的不是修改当前 Shell 的环境(变量、目录、权限、文件描述符等), 那么命令 / 脚本是在当前 Shell 跑,还是在子 Shell 跑,结果完全一样,没有必要去纠结环境
3. 语法相关

{ echo $BASHPID; sleep 30; echo $BASHPID; } ( echo $BASHPID; sleep 30; echo $BASHPID; )

  1. {} 要求左右括号前必须有空格, 且最后一个命令必须要分号
  2. () 没有那么多要求, 只要命令之间分号分隔即可
  3. 为了方便, 格式直接像{}写就好

2. 重定向

1. 标准输入输出重定向(0-标准输入; 1-标准输出; 2-标准错误)
  1. echo kkkkk 1>> test.log标注输出重定向
  2. jdlkasjflk 2>> test.log标注错误重定向
  3. bash test01.sh 1>/dev/null => test01.sh: 行 4: jdlkasjflk: 未找到命令静默标准输出, 仅保留标准错误
  4. bash test01.sh >> test.log 2>&1全部输出到指定文件(同样可以选择静默)

3. 多行输入(EOF)

cat >>test.log <<-EOF # "-"的功能是去除多行输入中的开头的tab(不清除空格)
jklajsfdl
sadkfl
dsalkfjkkl
EOF# tee的功能是当前终端和文件中都有内容,使用场景通常用于脚本中各部分操作前的提示(方便查看进度)
#!/bin/bash
tee /var/tmp/install-nginx.log <<-EOF
[1] install softwares
jklajsfdl
sadfsd
EOF
sudo apt install nginx -ytee /var/tmp/install-nginx.log <<-EOF
[2] configure file
sadkf
asfddsaf
EOFtee /var/tmp/install-nginx.log <<-EOF
[3] start service
dsalkfjkkl
sfasfd
EOFtee /var/tmp/install-nginx.log <<-EOF
[4] ok
EOF

4. 用户管理与权限管理

1. 强制访问控制安全管理模组

  1. 这个安全模组在红帽系列中被称为selinux, 在debian系列中称为apparmor
  2. 因为方向不同所以相关的安全策略也不同, 红帽偏向的是企业安全合规, 所以在上下文(用户属性,文件属性及权限等)的配置中非常严格, 而debian偏向的是开发者和桌面用户, 默认只提供基础安全, 更严格的策略需要用户自行配置
  3. 通常情况下红帽系列需要关闭selinux, 而debian不需要关闭apparmor; 按理层层保护下的linux系统是不需要这些权限的, 当然有更好但需要额外去学习这部分内容, 我的评价是不如不学, 以后没办法再学吧, 先聚焦于当下的基础学习
# selinux三种模式: enforcing(强制模式),permissive(宽容模式),disabled(禁用)# 查看selinux的当前模式
getenforce# 临时关闭(看似关闭,但实际上只是调整到了permissive,没有禁言哦)
sudo setenforce 0# 永久关闭(先暂时调整,之后更改配置并查看是否有误,最后重启就ok)
sudo setenforce 0
sudo sed -i.bak 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
sudo diff /etc/selinux/config /etc/selinux/config.bak
sudo reboot

2. 常见命令

# useradd 创建用户, 但默认不创建家目录和邮件池(现在邮件池几乎没什么使用场景了)-s 指定该用户的shell, 一般有两种: `/bin/bash`和`/usr/sbin/nologin`-r 指定为系统用户-m 创建用户时自动创建家目录; -M 创建用户时不会自动创建家目录
useradd -m -s /bin/bash aha1
useradd -M -r -s /usr/sbin/nologin aha1# 更改用户密码(passwd可行,但为了兼容和自动化还是选择使用chpasswd)
echo "<user>:<password>" | chpasswd# 手动创建家目录
cp -r /etc/skel /home/aha11. 如果没有自动创建家目录也可以手动创建,当然还是建议自动创建一下的2. cat /etc/default/useradd | grep = 可以看到默认的useradd的配置, 默认模板在/etc/skel中, 可自定义默认创建的家目录, 有的linux发行版本会自动创建家目录, 有的不会, 所以为了兼容在创建用户时一定要指定参数
# 更改家目录的文件属性和权限
chown -R aha1:aha1 /home/aha1-R 更改其默认的文件和目录的属性
chmod 750 /home/aha1# 删除用户
userdel -r aha1-r 自动删除家目录和邮件池# groupadd 创建组
groupadd aha
# 添加与继承目录权限(sgid可以使目录中的内容自动继承该目录的所属组,这样才算是绑定完成,因为没有添加权限什么的操作,只需要绑定好组和继承就可以)
sudo chown :aha /date
sudo chmod g+s /date
# gpasswd 组管理工具(和密码没有一点关系哦)
gpasswd -a aha1 aha # -a 添加1. 可以直接在创建用户时指定组,但这样无法显示在/etc/group中,所以不是很推荐
gpasswd -d aha1 aha # -d 删除
# 删除组
groupdel aha

其他

1. 常见排错思路

  1. 无法通过root用户连接虚拟机
    1. ping一下确认该虚拟机的ip正常
    2. 查看sshd状态, 确认服务端已正常运行
    3. 查看/etc/ssh/sshd_config, 确认PermitRootLogin的值为yes而不是prohibit-password

2. sudo操作权限

  1. usermod -aG wheel <user为指定用户添加sudo权限(在/etc/sudoers中允许wheel组执行与root相同权限的命令)
    1. -a代表追加
    2. -G代表组
  2. gpasswd -d <user> wheel通过组管理命令删除指定用户的指定权限

3. 图形化环境安装

  1. 最小化 => 图形化这个过程相对来说是单向的, 即使把图形化界面相关包删除, 剩下的环境依旧比最小化安装时臃肿, 其实也没必要安装图形化环境, 日志监控什么的都有web界面可以查看
  2. rocky
    1. sudo yum group install/remove "Server with GUI" -y安装/删除图形化环境软件组
      1. 软件组是红帽系列特有的概念, 和ubuntu的元包应该差不多, 就是一堆软件的组合
      2. 大概率会与现有内核不兼容, 需要执行sudo yum update
  3. ubuntu
    1. sudo apt install/remove ubuntu-desktop安装/删除图形化环境
      1. 相比rocky更简洁, 但没什么用

4. read

read -t 10 -s -p "名称: " user 从标注输入赋值给指定临时变量

  1. -p 指定提示符
  2. -s 密码形式赋值给指定变量
  3. -t 指定超时时间(超时后默认变量为空)

5. 查看日志

  1. journal -u ssh.service查看sshd的日志(-u 指定unit)

6. 特殊权限

  1. u+s suid 允许非root用户暂时成为root去执行该所属于root的命令(很少用)
  2. g+s 使指定目录下的内容可以继承该目录的所属组(相对常用)
  3. o+t 如/tmp中谁创建的文件只能谁删除, 当然root除外(更少用)
http://www.jsqmd.com/news/619358/

相关文章:

  • PSPICE高频开关电源仿真完全指南
  • Claude Code通关手册(五):组建你的AI专家团队,子代理系统
  • 资深安卓开发工程师的技术深度探讨:从系统定制到性能优化
  • [AI/应用/MCP] MCP Server/Tool 开发指南们
  • 别光看手册了!用LTspice仿真OPA827运放噪声,手把手教你避开计算陷阱
  • 2026年行业内母线槽销售厂家,母线槽/WDZN-RVS电线/YJLHV82铝合金电缆,母线槽生产商推荐 - 品牌推荐师
  • HarmonyOS6 半年磨一剑 - RcNumberBox 三方库插件事件体系与输入处理管道机制深度解析
  • 方案A讨论
  • 2026年污水处理专用双曲面搅拌机哪家强?适配不同工况的厂家推荐 - 品牌推荐大师1
  • 大模型 智能体(Agent)求职与面试手册
  • 避坑指南:RK3588上Qt+OpenCV项目移植,解决USB摄像头采集的三大常见问题
  • 安装 OpenClaw(PowerShell)
  • 车载移动实验室:微谱科技XRF分析仪/x荧光光谱仪为野外勘探与应急检测提速 - 品牌推荐大师1
  • Pretext:值得关注的文本排版引擎滴
  • 水下动力心脏如何选?靠谱的潜水搅拌机知名厂家/生产商/供应商有哪些? - 品牌推荐大师
  • JavaSpring和ASP.NET Core,不同的设计哲学
  • Pixel Language Portal 开发环境搭建:VSCode 高效配置与调试指南
  • 用 Rust 构建 LLM 应用的高性能框架
  • 零基础快速上手:Jellyfin MetaShark插件完整使用指南
  • GBrain 项目详解:你的个人 AI 知识大脑(Memex)
  • OBS-VirtualCam核心技术实现:从架构设计到性能优化
  • HarmonyOS6 三方库插件实战:RcRate 评分组件交互逻辑与事件处理机制深度解析
  • guix studio 下载
  • PHP异步I/O配置失效的7大征兆:CPU空转却响应超时?这可能是你的libuv版本与PHP-FPM共存导致的隐式阻塞!
  • 医疗器械软件生命周期管理注意事项
  • 如何高效使用x64dbg:5个专业逆向分析技巧
  • 从激活焦虑到一键安心:KMS_VL_ALL_AIO如何重塑Windows授权体验
  • Linux I/O 演进史:从管道到零拷贝,一篇串起个服务端核心原语呕
  • 2026 HDU 春季十连测
  • 企业年会知识竞赛互动环节设计指南:提升参与感与团队凝聚力