
第2章 文件和用户管理2.1 Linux文件简介inux 的核心哲学是 “一切皆文件”无论是文本文档、视频等普通数据还是进程、磁盘、管道、socket套接字等系统资源 / 硬件都被抽象为文件。抽象为文件的好处便是可以用统一的一套api来操作不同的资源。在windows中是文件的东西,它们在Linux中也是文件其次一些在windows中不是文件的东西, 比如进程, 磁盘, 也被抽象成了文件。你可以使用访问文件的方法访问它们获得信息。甚至一些很离谱的东西比如管道也是文件。甚至类似于socket套接字这样的东西, 使用的接口跟文件接口也是一致的。这种设计的核心优势是统一操作接口开发者只需掌握一套 API如读操作用read函数、写操作用write函数就能操作 Linux 系统中绝大部分资源无需针对不同资源学习不同接口。2.2 文件操作2.2.1 文件的组织方式目录结构差异Windows多根结构以 C 盘、D 盘等盘符为根Linux单根结构所有文件 / 文件夹都从根目录/开始呈树形结构。挂载的核心概念Linux 使用硬件设备前必须将设备的文件系统与根目录下某一目录 “挂载”合并两个独立的文件系统目录否则无法访问设备。例如光驱、U 盘、ISO 镜像文件都需要挂载到指定目录才能使用。2.2.2 Linux主要目录及其作用Linux文件目录视图如下图所示目录核心作用/bin存放普通用户可执行的二进制命令如 ls、cd/boot存放 Linux 启动所需的核心文件如内核、启动配置/dev存放设备文件硬盘、鼠标等Linux 访问设备的方式与访问文件一致/etc存放系统所有配置文件如网络配置、用户配置/home普通用户的主目录每个普通用户在此有专属目录如 /home/user01/lib存放系统运行依赖的库文件/mnt临时挂载目录常用于挂载光驱、ISO 镜像等/proc虚拟文件系统映射系统内存数据可直接查看内核状态、进程信息/root超级用户root的专属主目录/sbin存放系统管理员使用的管理命令如 mount、useradd/tmp临时文件目录系统重启后自动清空/var存放日志、缓存等动态变化的大文件如服务日志 /var/log/usr最大的目录存放应用程序和共享资源如软件安装包、文档拓展知识挂载的含义Linux使用任何硬件设备都必须与根目录下某一目录执行挂载操作否则无法使用。我们知道本身Linux具有一个以根目录为树根的文件目录结构每个设备也同样如此(每个文件都有自己的文件系统)它们是相互独立的。如果我们想通过Linux上的根目录找到设备文件的目录结构就必须将这两个文件系统目录合二为一这就是挂载的真正含义。下面这些目录是Linux系统自有的目录路径全称/含义功能描述/netNetwork存放与网络相关的配置文件或挂载点。/optOptional主要供源码安装软件时选择的安装目录位置。/procProcesses用户与内核交互信息的接口存储当前内核运行状态的特殊文件。/rootRoot Home超级用户root的主目录。/sbinSystem Binaries存放系统管理员使用的管理命令和程序。/selinuxSELinux存放与安全增强型 Linux (SELinux) 相关的策略和上下文文件。/srvService系统启动服务时可以访问的数据目录。/sysSystem管理设备文件的接口。/tmpTemporary临时文件存储目录。/varVariable可变数据文件目录作为某些大文件的溢出区。/usrUnix Shared Resources最大的目录存放着应用程序和共享资源文件。实操案例挂载 Linux ISO 文件以挂载 CentOS 7 镜像文件为例# 1. 将ISO文件挂载到/mnt目录-o loop支持挂载镜像文件 mount -o loop CentOS-7-x86_64-DVD-1804.iso /mnt/ # 2. 创建目标目录用于复制ISO内容 mkdir /opt/centos # 3. 复制挂载目录下的所有内容到目标目录 cp -rvf /mnt/* /opt/centos/ # 4. 卸载挂载点用完后需卸载 umount /mnt/解释-o参数可以设置挂载的行为例如只读、读写、字符集等。常用挂载选项ro: 以只读模式挂载。rw: 以读写模式挂载。noexec: 禁止在挂载点执行二进制文件。remount: 重新挂载已挂载的文件系统通常用于更改挂载选项。ocharset编码: 指定文件系统的字符集如 utf8 或 gb2312。loop: 挂载 ISO 文件等镜像文件。注意挂载点必须是一个已存在的目录。若需开机自动挂载需将配置写入/etc/fstab文件2.2.3 文件类型通过ls -l命令可查看文件类型结果第一列第一个字符为类型标识Linux 主要文件类型如下文件类型标识字符说明 常用操作普通文件-如文本文档、可执行程序创建touch 文件名删除rm 文件名目录文件d存放文件的 inode 号和文件名创建mkdir 目录名删除rmdir 空目录/rm -r 非空目录链接文件l分软链接和硬链接1. 软链接快捷方式ln -s 原文件 软链接名删除原文件则软链接失效2. 硬链接别名ln 原文件 硬链接名与原文件共用 inode设备文件b/c存于 /dev 目录分两种1. 块设备b如硬盘按块读写2. 字符设备c如鼠标 / 键盘按字节流顺序读写管道文件p用于进程间通信创建mkfifo 管道文件名套接字文件s关联网络地址用于网络进程通信2.2.4 常用文件操作命令所有命令形式Linux 命令格式命令 选项 参数参数多为文件 / 目录路径核心命令如下参数就是文件的路径。功能命令 示例切换目录cd 路径如cd /home、cd ..创建文件touch 文件名批量创建touch {file1,file2}查看目录文件ls -l /列出根目录文件详情、ls -a显示隐藏文件隐藏文件以.开头创建目录mkdir 目录名递归创建mkdir -p /a/b/c复制文件 / 目录cp 源路径 目标路径复制目录cp -r 源目录 目标目录移动 / 改名mv 源路径 目标路径如mv test.txt /tmp/、mv old.txt new.txt删除文件 / 目录rm 文件名强制删除目录rm -rf 目录名查看文件内容cat 文件名全量查看、more 文件名翻页查看、head -2 文件名前 2 行、tail -2 文件名后 2 行、grep 关键字 文件名过滤内容重定向ls -a list.txt覆盖写入文件、ls -a list.txt追加写入、command 21 file标准输出 错误输出写入文件监控命令结果watch -n 2 -d ls /tmp每 2 秒刷新高亮变化2.2.5 vi/vim 编辑器Linux默认安装vi但不安装vim要想使用vim需要自己安装vim。vim vi improved vim 是从 vi 发展出来的一个文本编辑器支持 代码补全、编译 及 错误跳转 等方便编程的功能特别丰富。vim 是 vi 的增强版需手动安装支持代码补全、编译跳转等功能核心操作如下核心模式切换命令模式默认进入模式可执行快捷键如移动、删除编辑模式命令模式下按i/a/o进入可输入文本末行模式命令模式下按:进入可执行保存、退出、替换等指令可视模式命令模式下按v/V/ctrlv进入可选中文本。四种种模式的转变关系图如下所示在命令模式下输入插入命令i、附加命令a、打开命令o、修改命令c、取代命令r(replace)或替换命令ssubstitution都可以进入文本输入模式。可视模式下可以进行文本的选取常用操作操作类型指令 / 快捷键查找文本/关键字向前找、?关键字向后找、n同方向继续找、:set ic忽略大小写替换文本:%s/旧文本/新文本/g全局替换、:%s/旧文本/新文本/gc替换前确认保存 / 退出:w保存、:q退出、:q!强制退出、:wq/:x保存并退出移动光标h/j/k/l左 / 下 / 上 / 右、0行首、$行尾、gg文件首行、G文件末行删除文本dd删除当前行、5dd删除 5 行、:1,$d/:%d清空所有内容复制 / 粘贴yy复制当前行、5yy复制 5 行、p粘贴撤销 / 恢复u撤销、ctrlr恢复环境设置:set nu显示行号、:set nonu隐藏行号2.2.6 临时文件编辑文件时异常关闭如 vim 编辑1.txt时强制退出系统会生成隐藏临时文件以.开头需手动清理这个文件当用ls的时候不会在当时编辑的目录中出现。其实这个文件是由系统变成了一个隐藏文件如下图所示那这些临时文件如何删除呢# 查看隐藏临时文件 ls -a # 删除临时文件 rm -f .1.txt.swp拓展知识隐藏文件前面会有个点.想看这些隐藏文件可以在ls命令的选项中加a。2.3 用户管理2.3.1 用户 / 组基本概念用户核心作用Linux 需通过用户登录不同用户分配不同权限实现系统管理root 是系统默认超级用户最高权限。有了用户的概念就可以给不同用户操作计算机不同的权限达到管理计算机的目的。核心配置文件文件路径作用/etc/passwd存储用户基本信息7 列用户名密码占位符UID:GID: 备注家目录登录 Shell/etc/shadow存储用户加密密码1 列对应 1 用户含密码有效期、加密算法等/etc/group存储组信息4 列组名密码占位符GID: 组成员2.3.2 用户 / 组管理命令1. 用户管理操作命令 示例创建用户useradd user01默认普通用户、useradd user02 -u 1503 -d /home/user02指定 UID 家目录验证创建grep user01 /etc/passwd查配置文件、ls /home查家目录、id user01查用户信息设置密码passwd user01按提示输入密码修改用户属性usermod -s /sbin/nologin user03禁止 user03 登录删除用户userdel -r user01-r 删除家目录等关联文件创建完用户怎么知道这个用户已经创建成功呢第一种在/etc/passwd文件中必须已经存在可以通过grep user01 /etc/passwd看能否将该用户查找出来。第二种ls /home看是否已经为用户创建家目录。第三种id user01第四种创建完用户后会自动创建/var/spool/mail/user012. 组管理组用于批量授权分为 “基本组”随用户创建与用户名同名和 “附加组”用户额外加入的组核心操作操作命令 示例创建组groupadd group01默认、groupadd -g 1005 group02指定 GID删除组groupdel group01添加用户到组usermod -g group01 user01设为基本组、usermod -G group02 user01设为附加组查看用户组id user01显示 UID、基本组、附加组移除用户出组gpasswd -d user01 group02从 group02 删除 user013. 提权操作提权指普通用户获取 root 权限分两种方式永久提权su - root切换为 root 身份同时切换 shell 环境su root仅切换身份保留原环境临时提权sudo执行单条 root 权限命令需先配置# 编辑sudo配置文件需root权限 vim /etc/sudoers # 添加如下行syf用户免密执行所有root命令需放在%wheel行下方 syf ALL(ALL) NOPASSWD:ALL补充wheel 组是特殊组加入该组的用户可配置 sudo 权限实现临时提权。root切换为 root 身份同时切换 shell 环境su root仅切换身份保留原环境临时提权sudo执行单条 root 权限命令需先配置# 编辑sudo配置文件需root权限 vim /etc/sudoers # 添加如下行syf用户免密执行所有root命令需放在%wheel行下方 syf ALL(ALL) NOPASSWD:ALL补充wheel 组是特殊组加入该组的用户可配置 sudo 权限实现临时提权。