默认目录含义
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
命令的别名
- 例如,lsmod命令就是
/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前会读取指定文件
- 只有写入 /etc/profile 等文件中才会长期生效
- 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>
切换用户时
- 终端登陆时,ssh链接时,
- 用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)
- 直接运行 bash 时,
- 启动时只会读取
/etc/profile
和~/.bashrc
文件
- 场景
-
非交互式shell
- 执行shell脚本时用到这种shell
- 如果设置了环境变量
BASH_ENV
, 会执行其指定的文件 - 否则使用启动脚本的shell拥有的环境变量
用户与用户组
- 用户权限是通过创建用户时分配的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 参数 递归更改内部所有文件