linux 系统目录、环境变量、用户、文件权限

默认目录含义

  • bin 存放二进制可执行文件
    • ls,cat,mkdir等系统命令
  • sbin 存放二进制可执行文件,只有root才能访问
  • boot 存放用于系统引导时使用的各种文件
  • dev 用于存放设备文件
    • /dev/null空设备
      • 它丢弃一切写入其中的数据(但报告写入操作成功)
      • 读取它则会立即得到一个EOF
    • stdout,stdin也在/dev里面
  • etc 存放系统配置文件
  • home 存放所有用户文件的根目录
  • root 存放超级用户文件的根目录
  • lib 存放跟文件系统中的程序运行所需要的共享库及内核模块
  • mnt 安装临时文件系统的安装点
    • 挂载U盘的外部设备
  • opt 额外安装的可选应用程序包所放置的位置
    • 通常存放第三方软件包和数据文件
  • proc 虚拟文件系统,存放当前内存的映射,
    • 本身不占据硬盘空间,是内核中的数据结构的可视化接口
    • 保存有进程信息(namespace等)和一些“运行时”信息(如系统内存、磁盘io、设备挂载信息和硬件配置信息等)
    • 许多工具的数据来源正是proc目录中的内容
      • 例如,lsmod命令就是cat /proc/modules命令的别名,lspci命令是cat /proc/pci命令的别名
    • /proc下文件基本都是只读的,除了/proc/sys目录,它是可写的
      • 查看和修改内核的运行参数
  • tmp 用于存放各种临时文件
    • 系统重启时文件不会被保留
  • usr 用于存放系统应用程序
    • /usr/local 本地管理员软件安装目录
    • /usr/bin 可执行文件
      • 例如gcc, apt,git等
    • /usr/inlcude C++的头文件
  • var 用于存放运行时需要改变数据的文件
    • 例如日志文件,锁文件等
  • sys 用于存放硬件设备的驱动程序信息
    • 也不占据硬盘空间,是内核中的数据结构的可视化接口

环境变量

常用环境变量

  • env 命令可以查看所有全局环境变量
  • set命令还可查看局部环境变量
# 当前用户主目录
$HOME
# 当前目录
$PWD
# 环境变量(查找输入的内置命令的路径集合)
$PATH
# 当前用户名
$USER
# 当前使用的shell
$SHELL

shell中设置环境变量(临时生效)

  • 添加环境变量是export,删除环境变量是unset
  • 在一个shell中通过export设置的环境变量在shell退出后失效
    • 只有写入 /etc/profile 等文件中才会长期生效
      • 原理是每次启动shell前会读取指定文件
  • shell中设置的环境变量可用于其创建的所有子shell
  • source xxx 的作用在本shell中执行程序,不启动子shell
    • ./xxx执行时,启动的是子shell,此时脚本中export出的变量是不能被父shell(即当前shell)使用的,所以需要使用source来执行
  • 我们在shell脚本中赋值给变量实际是在设置局部环境变量
    • 这种环境变量不会被子shell继承
    • 可以在脚本中通过export把前面的局部环境变量导出为全局环境变量
  • 如果我们在脚本中赋值的变量没有export,则通过脚本启动的程序不能看到脚本中设置的环境变量
    • 因为实际上启动了子shell来执行程序
    • 通过exec启动也不能使用非export的环境变量
# 1.sh
export a="hello"
b="world"

./2.sh
exec ./2.sh

# 输出 hello,没有world
# 2.sh
echo "$a $b"

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
set,env,export,source,exec傻傻分不清楚?

shell预加载环境变量文件(长期生效)

  • 登陆shell

    • 场景
      • 终端登陆时,ssh链接时,su --login <username> 切换用户时
    • 用bash登陆时会从下面6个文件读取命令
      • 全局
        • /etc/profile
          • 里面会启动/etc/bashrc或者/etc/bash.bashrc
      • 用户级
        • 大多数发行版只用到了甚至只创建了其中的一到两个文件
        • shell会按照下面的顺序查找前三个文件并运行第一个被找到的文件,其与忽略
          • ~/.bash_profile
            • ~/.bashrc会在启动 ~/.bash_profile时被查找
          • ~/.bash_login
          • ~/.profile
    • 使用zsh登录时加载的是~/.zshrc和/etc/zshrc目录下的文件
  • 非登陆时的交互式shell

    • 场景
      • 直接运行 bash 时,su <username>切换用户时(前面没有加 --login)
    • 启动时只会读取 /etc/profile~/.bashrc文件
  • 非交互式shell

    • 执行shell脚本时用到这种shell
    • 如果设置了环境变量BASH_ENV, 会执行其指定的文件
    • 否则使用启动脚本的shell拥有的环境变量

千万别混淆bash、zsh四种运行方式

用户与用户组

  • 用户权限是通过创建用户时分配的UID来跟踪的
    • 环境变量$UID
  • 500以下的UID预留给了系统用户
    • 不是真正的用户,而是各种服务进程访问资源中的特殊用户
  • /etc/password文件中存放所有用户,包括系统用户
    • 每一行包含的信息
      • 用户名 : X(过去是密码) : UID : GID : 描述或备注 : HOME目录位置 :默认shell
      • 现在密码以加密形式存放在/etc/shadow文件中
  • /etc/group文件存放组信息
    • 每一行包含的信息
      • 组名:X(过去是组密码):GID:数据该组的用户列表
  • 用户与用户组相关命令
    • 添加用户:useradd
    • 删除用户: userdel
    • 修改用户信息:usermod
      • 还可以用来把用户添加到用户组
    • 修改密码:passwd
    • 修改默认登陆shell: chsh
    • 创建用户组:groupadd
    • 修改组信息:groupmod

文件权限

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

  • umask可以设置该用户创建文件时赋予该文件的默认权限
  • chmod可以修改文件权限
  • chown可以修改文件所属用户
  • chgrp可以修改文件所属用户组
  • 更改文件权限
    • chmod +x file相当于 chmod a+x file
    • chmod 777 file
    • -R 参数 递归更改内部所有文件
      这里写图片描述
发布了161 篇原创文章 · 获赞 19 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/winter_wu_1998/article/details/101704999
今日推荐