欢迎光临
我们一直在努力

Linux学习日志20260203

20260124

一、用户和用户组

(一)root

root 是 Linux 系统的内置最高权限用户,UID(用户唯一标识)固定为0,相当于 Windows 的「Administrator」,拥有系统所有操作权限:

  • 可以修改 / 删除任何系统文件、配置(比如/etc、/bin目录);

  • 可以创建 / 删除任意用户、用户组,修改所有用户的权限;

  • 可以执行所有命令,不受任何权限限制。

⚠️ 核心注意:root 权限极高,绝对不要日常用 root 登录操作(误删/bin、/etc等核心目录会直接让系统崩溃),日常用普通用户,需要高权限时通过sudo临时提权即可。

(二)普通用户

1、可登录普通用户

UID 从1000开始(比如你自己创建的user1、test),是我们日常登录、操作的用户。

权限被严格限制只能操作自己家目录/home/用户名/下的所有文件,对系统核心目录(/etc、/root)只有「读」权限,没有「写 / 执行」权限。

2、系统用户

UID 从1到999,是安装软件 / 服务时系统自动创建的(比如nginx、mysql、sshd)。

无法登录系统

作用是专门运行对应服务,避免服务以 root 身份运行带来的安全风险(服务被攻击时,攻击者也只能拿到普通系统用户的权限,无法控制整个系统)。

(三)用户组

Linux 是多用户多任务系统,如果给每个用户单独分配权限,管理会非常繁琐,用户组就是为了批量管理用户权限而设计的

把多个需要相同权限的用户加入同一个用户组,给这个组分配一次权限,组内所有用户就都拥有该权限,无需逐个设置。

用户组的两个核心类型(每个用户必带)
  • 主组

    用户创建时,系统会自动生成一个和用户名同名的用户组,并将该用户加入这个组,这就是主组;每个用户有且只有一个主组,用户创建的文件 / 目录,默认的「所属组」就是自己的主组。

  • 附加组

    用户可以额外加入的其他用户组,一个用户可以加入多个附加组,用于获取该组的权限;比如用户user1的主组是user1,同时加入附加组dev,那么user1会同时拥有user1组和dev组的所有权限。

    id 用户名       # 查看某个用户的UID、主组、附加组(不加用户名看当前用户)
    groupadd 组名   # 创建用户组
    usermod -aG 组名 用户名     # 把用户加入附加组(-aG是追加,避免覆盖原有组)

  • (四)其他用户

    是 Linux 权限模型中除了「所有者」和「所属组」之外的所有用户,是一个泛称,不是具体的某一个 / 某一群用户。

    对于一个文件 / 目录,判断一个用户是不是「其他用户」,就看两个条件: 1.该用户不是这个文件 / 目录的所有者(User); 2.该用户不在这个文件 / 目录的所属组(Group)中; 满足以上两点,这个用户就是该文件 / 目录的「其他用户(Other)」,只能拥有系统给「Other」分配的权限。

    用ls -l命令查看文件 / 目录的详细信息,最左侧的字符串就是UGO 权限,举个例子:

    ls -l /home/test.txt

    输出示例:-rw-r–r– 1 user1 user1 123 1月24 10:00 test.txt

    二、文件权限

    Linux 把系统中所有用户划分为三个身份维度(UGO),每个文件 / 目录都对这三个维度单独设置「读(r)」、「写(w)」、「执行(x)」权限,这是 Linux 权限管理的基础。

    root:不受 UGO 权限限制,对所有文件 / 目录都拥有 rwx 权限,是 UGO 模型的「例外」

    U(User):文件 / 目录的所有者(创建者,或被修改后的指定用户); G(Group):文件 / 目录的所属组(默认是创建者的主组,可手动修改); O(Other):除了 U 和 G 之外的所有其他用户;

    ls -l /home/test.txt

    输出示例:-rw-r–r– 1 user1 user1 123 1月24 10:00 test.txt

    (一)第一栏

    1、1

    代表这个文件是目录、文件或链接文件等等。

    • 当为 d 则是目录

    • 当为 – 则是文件;

    • 若是 l 则表示为链接文档(link file);

    • 若是 b 则表示为装置文件里面的可供储存的接口设备(可随机存取装置);

    • 若是 c 则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。

    2、234

    拥有者权限,读、写、执行(rwx),无权限(-)

    3、567

    组的权限,读、写、执行(rwx),无权限(-)

    4、890

    其他用户权限,读、写、执行(rwx),无权限(-)

    (二)第二栏

    表示有多少文件名链接到此节点

    (三)第三栏

    文件所有者

    (四)第四栏

    文件所属组

    (五)第五栏

    文件大小,默认单位Bytes

    (六)第六栏

    创建日期

    (七)第七栏

    文件名

    文件明前多 . 是隐藏文件例如 .config

    第一行的 . 代表当前目录

    第二行的 . . 代表上一级目录

    root@ubuntu:~# ls -al
    total 52
    drwx—— 7 root root 4096 Jan 21 05:44 .     #**现在所在目录**
    drwxr-xr-x 24 root root 4096 Feb 18 2020 ..     #**上一级目录**
    -rw——- 1 root root 4795 Jan 22 02:02 .bash_history
    -rw-r–r– 1 root root 3106 Apr 9 2018 .bashrc
    drwx—— 2 root root 4096 Jan 16 20:24 .cache
    drwx—— 5 root root 4096 Feb 19 2020 .config
    drwx—— 3 root root 4096 Feb 19 2020 .gnupg
    drwxr-xr-x 3 root root 4096 Feb 19 2020 .local
    -rw-r–r– 1 root root 148 Aug 17 2015 .profile
    -rw-r–r– 1 root root   66 Jan 21 05:44 .selected_editor
    drwx—— 7 root root 4096 Jan 16 00:21 snap
    -rw——- 1 root root   52 Jan 16 20:24 .Xauthority

    三、sudu su和su的区别

    (一)su

    切换到指定用户,后面不接用户名的话默认切换到root。

    需要root密码,并且需要完全进入到目标用户的环境

    su         # 切换到 root,需输入 root 密码
    su username # 切换到指定普通用户,需输入该用户密码
    su –       # 切换到 root 并加载 root 的完整环境(推荐)

    (二)sudo su

    需要用户在 /etc/sudoers 文件中有 sudo 权限。

    输入普通用户密码就行,无需root密码,这是提权的操作

    sudo su     # 切换到 root,输入当前用户密码
    sudo su –   # 切换到 root 并加载 root 完整环境(更推荐)

    总结

  • 密码要求不同:su 要 root 密码,sudo su 要当前用户的 sudo 密码。

  • 权限前提不同:su 依赖 root 密码,sudo su 依赖当前用户的 sudo 权限。

  • 安全级别不同:sudo su 无需暴露 root 密码,是服务器管理中更安全、更常用的方式。

  • 实际使用中,sudo su 也不是最优选择,更推荐:

    sudo -i   # 直接以 root 身份登录,加载 root 完整环境(替代 sudo su -)
    sudo -s   # 以 root 身份打开 shell,保留当前用户的环境变量

    20260125

    四、文件权限与属性的修改

    (一)修改文件所属组、拥有者以及权限

    1、修改文件所属用户组chgrp

    要被修改的组名必须在/etc/group文件中

    chgrp 目标用户组 文件名/目录名

    # 将 file.txt 的所属组改为 "admin"
    chgrp admin file.txt

    # 将 dir 目录的所属组改为 "test"
    chgrp test dir

    # 递归修改 dir 目录及其内所有内容的所属组为 "user",也就是将dir下的所有内容都放到user中
    chgrp -R user dir

    2、修改文件拥有者chown

    chown :目标用户组 文件名/目录名         # 仅修改用户组
    chown 用户名:目标用户组 文件名/目录名   # 同时修改用户和用户组

    # 将 file.txt 的所属组改为 "root"
    chown :root file.txt

    # 将 file.txt 的所属用户改为 "nginx",所属组改为 "nginx"
    chown nginx:nginx file.txt

    # 递归修改 dir 目录及其内所有内容的所属组为 "www-data"
    chown -R :www-data dir

    补充:因为是多人协同的系统,有的时候需要将文件复制发送给别人,以最简单的复制命令cp来说明

    #cp 源文件 目标文件
    #将   .bas的文件复制为 .bas_test  
    cp .bas .bas_test

    cp命令默认不会完全复制文件的所有权限属性。所以就需要修改文件的所有者、组甚至是权限

    3、修改权限chmod

    常用且简单是数字类型修改权限,前面学到的文件权限中。每种身份(所有者、组、其他人)对应三个权限(读r、写w、执行x)。各个权限数字表示为r=4、w=2、x=1。各权限数字累加完全权限是7,无权限就是0。

    #将.bas的权限设置为:所有者完全权限、组只能读、其他人无权限
    chmod 740 .bas

    注意:权限对于一般文件以及目录文件来讲是不同的

    一般文件:

    r:读取文件内容

    w:写入、编辑、新增、修改文件的内容,但是并不具有删除文件本身的权力

    x:Windows系统中,文件是否可执行是由像.exe这种文件扩展名来决定的。Linux中跟文件名没有绝对的关系,Linux中是由“x”决定的。

    目录文件:

    r:读取目录的结构

    w:有改动该目录结构列表的权限:建立新的文件和目录、删除已经存在的文件和目录、将已经存在的更名、移动该目录内的文件目录的位置

    x:相当于是一把钥匙决定了能不能打开该目录

    五、文件种类与扩展名

    (一)文件种类

    1、常规文件【-】

    例如:-rawr–r–

    (1)纯文本文件(ASCII)

    用cat命令读出来

    (2)二进制文件(binary)
    (3)数据文件(data)

    一种特殊格式用last命令读出来,用cat会乱码

    2、目录【d】

    例如:drawr–r–

    3、链接文件【l】(小写L)

    例如:lrawr–r–

    类似快捷方式

    4、设备与设备文件

    (1)区块设备文件【b】

    存储数据硬盘

    (2)字符设备文件【c】

    串行端口接口设备例如键盘鼠标

    5、数据接口文件【s】

    通常被用在网络上的数据交换

    6、数据输送文件【p】

    FIFO,pice先进先出,解决多个程序同时读写一个文件所造成的错误问题

    (二)文件扩展名——Linux是没有所谓的扩展名的

    一个文件能不能执行,只受权限 x 的影响,但是可执行和可执行成功是不一样的,要看文件的具体内容,内容里有可执行的数据就可以执行。

    但是我们仍然可以通过扩展名来了解文件是什么种类

    1、.sh :脚本或批处理文件

    2、Z .tar .tar.gz .zip .tgz :由于不同的压缩软件产生的扩展名,压缩文件

    3、.html .php :网页相关文件

    注意:

    Linux系统上的文件名只是让人了解该文件可能的用途,真正的执行与否仍然需要权限的规范,这种情况会经常发生在文件传输过程中。

    例如网上下载了一个可执行文件,但是在Linux系统中无法执行,那么有可能是属性被修改了。从网上下载到Linux系统中,文件属性与权限确实会被修改

    (三)文件名限制

    1、文件名长度

    单一文件或目录最大255字节:255个英文字母;128个汉字

    2、命名限制:尽量避免特殊符号

    20260203

    六、目录配置标准——FHS(Filesystem Hierarchy Standard,文件系统层次结构标准)

    核心是定义根目录(/)下各目录的用途,保证不同发行版的一致性与软件兼容性

    (一)四大目录形态

    1、可分享(shareable)

    可跨系统挂载共享,例如/usr、/home

    2、不可分享(unshareable)

    仅本机使用,例如/dev、/proc

    3、不变(static)

    极少变动,例如/bin、/lib、/usr

    4、可变(variable)

    频繁更新,例如/var、/tmp

    (二)双层目录规范——/(根目录)与/user、/var

    1、/ (root,根目录)

    root在Linux中意义有很多,以账号的角度来讲root指的就是系统管理员身份;以目录的角度来讲root指的就是根目录即 / 。

    根目录是整个系统最重要的一个目录,不但所有目录由根目录衍生,同时根目录也与启动、还原、系统修复等操作有关。根目录中必须要有能够修复文件系统的程序。根目录分区应越小越好,且应用程序所安装的软件最好不要与根目录在同一个分区。

    必须存在的目录

    /bin 用户基础命令,常用有cat、chmod、chown、date、mv、mkdir、cp、bash等

    /boot 系统启动文件,包括Linux内核文件以及启动项与启动所需配置文件

    /dev 设备与接口设备,常用有/dev/null、/dev/zero、/dev/tty、/dev/loop、/dev/sd等

    /etc 系统的主要配置文件,例如人员的账号密码、各服务启动文件,一般用户可查看root用户可修改。建议不要放置可执行文件在这个目录中

    /lib 启动时会用到的函数库

    /media 可移动设备的挂载点U盘等可删除设备

    /mnt 临时挂载点

    /opt 第三方软件放置目录

    /run 运行时数据,系统启动后产生的各项信息

    /sbin 系统管理命令,包含了启动、修复、还原系统所需要的命令

    /srv 网络服务启动后,服务数据目录,例如www服务的网页数据就在/srv/www中

    /tmp 临时文件,任何人都能够存取,系统与用户临时数据,重启可能清除

    /usr

    /var

    2、/usr

    这里面放置的数据属于可分享不可变动的,这个并不是user的缩写,实际上是UNIX Software Resource的缩写,是操作系统软件资源放置的目录,不是用户数据类似Windows系统中C:\\windows\\和C:\\Program Files\\这两个目录的合体,系统刚安装完毕时这个目录占用最多的硬盘容量。

    必须存在的目录

    /usr/bin/ 所有一般用户能够使用的命令都在这里,此目录下不应该有子目录

    /usr/lib/ 基本上与/lib功能相同,所以/lib就是链接到此目录中

    /usr/local/ 系统管理员在本机安装自己下载的软件,建议安装到此目录,该目录下也具有bin、etc、lib的子目录

    /usr/sbin/ 基本功能与/sbin差不多

    /usr/share/ 主要放置只读的数据文件,包括共享文件。常见的子目录有/usr/share/ man:在线帮助文件;/usr/share/ doc软件说明文档;/usr/share/ zoneinfo与时区有关的时区文件

    3、/var

    上面说到/usr在系统刚安装完毕时这个目录占用最多的硬盘容量,那么/var就是在系统运行后逐渐占用硬盘容量的目录。针对经常变动的文件,包括缓存、日志文件以及一些软件运行产生的文件

    必须存在的目录

    /var/cache/ 应用程序运行本身产生的一些缓存

    /var/lib/ 程序本身执行的过程中,需要使用到的数据文件放置目录。在此目录下各自的软件应该要有各自的目录。例如MySQL放置到/var/lib/mysql/

    /var/lock/ 某些文件资源一次只能被一个应用使用,两个同时用就会产生错误,这个就是为了避免这个问题,给先用的上锁

    /var/log/ 重要!!日志文件存放的目录

    /var/mail/ 放置个人电子邮箱的目录,通常与/var/spool/mail/互为链接文件

    /var/run/ 某些程序或者服务启动后,会将他们的PID放置在这个目录下,与/run相同,链接到/run目录

    /var/spool/ 通常放置一些队列数据,排队等待其他程序使用的数据,这些数据使用后通常会被删除

    补充:

    除了上述目录,将一些补充整理在这里,后续碰到再增加

    /lost+found 文件系统发生错误时,将一些遗失的片段放置到这个目录下。但是使用xfs文件系统就不会存在这个目录

    /proc 本身是一个虚拟文件系统,这个目录下的数据都在内存中,不在硬盘里

    /sys 也是一个虚拟文件系统,记录的是硬件

    (三)目录树

    /
    ├── bin/         # 基础用户命令(ls/cp/mv等)
    ├── boot/         # 系统启动文件
    │   ├── grub/     # 启动引导配置
    │   ├── vmlinuz   # 内核镜像
    │   └── initrd.img# 初始化内存盘
    ├── dev/         # 设备文件(sda/tty/null等)
    ├── etc/         # 系统/应用配置
    │   ├── passwd   # 用户信息
    │   ├── group     # 用户组信息
    │   ├── fstab     # 磁盘挂载配置
    │   ├── sysctl.conf # 内核参数配置
    │   ├── ssh/     # SSH服务配置
    │   └── nginx/   # Nginx(示例)应用配置
    ├── home/         # 普通用户主目录
    │   ├── user1/   # 普通用户1(示例)
    │   └── user2/   # 普通用户2(示例)
    ├── lib/         # 共享库/内核模块
    │   └── modules/ # 内核模块文件
    ├── media/       # 可移动设备自动挂载点
    │   ├── cdrom/   # 光驱挂载点
    │   └── usb/     # U盘挂载点
    ├── mnt/         # 手动临时挂载点
    ├── opt/         # 第三方软件(独立目录)
    │   └── google-chrome/ # 示例:Chrome浏览器
    ├── proc/         # 内核/进程虚拟文件系统
    │   ├── [PID]/   # 各进程专属目录(动态生成,如1/、1234/)
    │   ├── cpuinfo   # CPU信息
    │   └── meminfo   # 内存信息
    ├── root/         # 管理员root主目录
    ├── run/         # 运行时数据(FHS 3.0新增)
    │   ├── *.pid     # 服务PID文件(如sshd.pid、nginx.pid)
    │   └── lock/     # 进程锁文件
    ├── sbin/         # 系统管理命令(fdisk/reboot/mkfs等)
    ├── srv/         # 服务数据
    │   ├── http/     # HTTP服务数据
    │   └── ftp/     # FTP服务数据
    ├── sys/         # 硬件/驱动虚拟文件系统
    │   ├── block/   # 块设备信息
    │   ├── class/   # 设备类信息
    │   └── bus/     # 总线设备信息
    ├── tmp/         # 临时文件(重启清除)
    ├── usr/         # 系统软件资源(可共享)
    │   ├── bin/     # 非基础用户命令(如git/python)
    │   ├── lib/     # 对应usr/bin的共享库
    │   ├── share/   # 文档/配置模板/字体
    │   └── local/   # 本地管理员手动安装软件(不受包管理)
    │       ├── bin/ # 本地软件命令
    │       └── lib/ # 本地软件共享库
    └── var/         # 可变数据(频繁更新)
    ├── log/     # 系统/应用日志
    │   ├── auth.log # 认证日志
    │   ├── syslog   # 系统日志
    │   └── nginx/   # 示例:Nginx日志
    ├── spool/   # 邮件/打印队列
    ├── cache/   # 应用缓存(如apt/浏览器)
    └── www/     # Web服务根目录(示例)

    (四)绝对路径与相对路径

    1、绝对路径

    由根目录/开始写

    例如:/home/dmtsai

    2、相对路径

    相对于目前路径的文件写法

    例如:./home/dmtsai .代表当前目录,也可以用./表示

    ../home/dmtsai ..代表上一层目录,也可以用 ../表示

    赞(0)
    未经允许不得转载:171主机测评 » Linux学习日志20260203
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址