第一周作业:

1. 总结计算机发展相关,并且总结服务器硬件相关知识。

总结计算机发展相关:

计算机发展历史

(1)电子管时代

(2)晶体管时代

(3)集成电路时代

(4)大规模集成电路时代

(5)量子计算机/生物计算机时代

世界上第一台计算机

 世界上第一台计算机ENIAC(Electronic Numerical Integrator And Computer)于1946年在美国宾尼法大学诞生

冯诺依曼体系结构

 冯诺依曼是美籍匈牙利数学家、计算机科学家、物理学家。

 现在计算机发展所遵循的机构是冯诺依曼结构,主要内容如下:

 (1)计算机处理的数据和指令一律用二进制数表示

 (2)顺序执行程序的每一条指令

 (3)计算机由运算器,控制器,存储器,输入设备和输出设备五大部分组成

摩尔定律

核心是集成电路上可容纳的晶体管数目,每隔18个月或24个月,就能增加一倍,其性能也会增加一倍。

 

服务器硬件相关知识

(1)CPU

即中央处理器,由控制器和运算器组成,是整个计算机系统中重要的部分

 

CPU指令集分类:

CISC Complex Instruction Set Computer,复杂指令集

特点:CISC的指令系统庞大,功能复杂,指令格式、寻址方式多;执行速度慢。目前个人计算机x86体系 CPU 厂商一直在走CISC的发展道路,包括Intel、AMD、 VIA

RISC Reduced Instruction Set Computer,精减指令集

特点:尽量简化计算机指令功能,只保留那些功能简单、能在一个节拍内执行完成的指令。所有指令的格式都是一致的,所有指令的指令周期也是相同的,支持并行,并且采

用流水线技术。当需要完成复杂任务时,就由多个指令组合来实现。

 

CPU主频:主频是CPU的时钟频率(CPU Clock Speed),是CPU运算时的工作的频率(1秒内发生的同步

脉冲数)的简称。单位是Hz。一般说来,主频越高,CPU的速度越快,由于内部结构不同,并非所有的

时钟频率相同的CPU的性能都一样。

 

(2)主板

主板一般为矩形电路板,上面安装了组成计算机的主要电路系统,一般有BIOS芯片、I/O控制芯片、键盘和面板控制开关、指示灯插接件、扩充插槽、主板及插卡的直流电源供电接插件等元件。

 

(3)内存

内存是介于CPU和外部存储之间,是CPU对外部存储中程序与数据进行高速运算时存放程序指令、数据 和中间结果的临时场所,它的物理实质就是一组具备数据输入输出和数据存储功能的高速集成电路。内存是CPU能直接寻址的存储空间。

内存的特点是存取速度快。

(4)硬盘

常见硬盘接口:

IDE:Integrated Drive Electronics,电子集成[驱动器,早期家用电脑常用接口

SCSI:Small Computer System Interface,小型计算机系统接口,早期的服务器常用接口

SATA:Serial ATA (Advanced Technology Attachment 高技术配置),家用电脑常用的接口

SAS:Serial Attached SCSI,是目前服务器上主流的接口

光纤通道:Fiber Channel,高性能服务器上采用的接口

M.2 :固态硬盘接口,性能更强

 

结构分类: 机械硬盘HDD(Hard Disk Drive) 固态硬盘SSD(Solid State Drives )

 

(5)网卡

(6)远程管理卡

IPMI是智能型平台管理接口(Intelligent Platform Management Interface)的缩写,是管理基于 Intel 结构的企业系统中所使用的外围设备采用的一种工业标准,该标准由英特尔、惠普、NEC、美国戴尔电 脑和SuperMicro等公司制定。用户可以利用IPMI监视服务器的物理健康特征,如温度、电压、风扇工作 状态、电源状态等。

 

各个服务器厂商都提供了符合IPMI标准的远程管理接口,但称呼不尽相同,比如Dell的iDRAC,惠普的ILO,浪 潮的IPMI,华为的IBMC,联想的xclarity,华三的HDM等

 

(7)阵列卡

Raid卡用来实现RAID的建立和重建,检测和修复多位错误,错误磁盘自动检测等功能。RAID芯片使CPU 的资源得以释放,阵列卡把若干硬盘驱动器按照一定要求组成一个整体、由阵列控制器管理的系统.

 

2. 制作一个教程,说明vmware软件如何下载安装。安装rocky 8.6, ubuntu 22.04,并结合xshell说明如何通过虚拟IP登入系统。

安装前置操作:

打开 VMware Workstation

编辑 ----> 虚拟网络编辑器


 


 

Rocky8.6安装过程

1. 点击左上角 ”文件“,在下拉中选择第一项 “新建虚拟机”;

2. 选择 “自定义(高级)C”,然后点击 “下一步”;

 3. "硬件兼容性(H)" 使用默认值,点击 “下一步”;

 4. 选择 “稍后安装操作系统(S)”,点击 “下一步”;

 5. “客户机操作系统”,选择第二项 “Linux”,版本选择 “CentOS 8 64位”,点击 “下一步”;

 6. “虚拟机名称” 填写 “Rocky8.6-1”,“位置” 不用更改,点击 “下一步”;

7. “处理器数量” 下拉,选择 “2”,其它项不变,点击 “下一步“;

 8. ”此虚拟机内存(M)“,填写 “2048” MB,点击 “下一步”;

9. “网络类型” 选择第二项 “使用网络地址转换(NAT)(E)”,点击 “下一步”;

10. “SCSI控制器” 选择第二项 “LSI Logic(L) ”,点击 “下一步”;

 11. “虚拟磁盘类型” 选择第二项 “SCSI(S)”,点击 “下一步”;

12. “磁盘” 选择第一项 “创建新虚拟磁盘”,点击 “下一步”;

13. “最大磁盘大小 (GB)(S): ” 填写 “200”,不要勾选 “立即分配所有磁盘空间(A)”,下方选择 “将虚拟机 磁盘存储为单个文件(O)”,点击 “下一步”;

14. “磁盘文件”,文件名用默认 "Rocky8.6-1.vmdk",点击 “下一步”;

15. 点击 “完成”;

 

在左侧菜单栏中,定位到刚新建的虚拟机,右键,设置 。

 


 

选择镜像


开始安装


 

选择 第一项 ,然后回车,等待1-2分钟时间


 

选择英语


 

选择磁盘分区

时区选择 shanghai

开启网络,设置主机名 rocky86

设置root用户密码 123456

创建一个普通用户,用户名 mage 密码 123456


 

安装完成 ,重启


Ubuntu22.04安装过程

打开 VMware Workstation

1. 点击左上角 ”文件“,在下拉中选择第一项 “新建虚拟机”;

2. 选择 “自定义(高级)C”,然后点击 “下一步”;

3. "硬件兼容性(H)" 使用默认值,点击 “下一步”;

4. 选择 “稍后安装操作系统(S)”,点击 “下一步”;

5. “客户机操作系统”,选择第二项 “Linux”,Ubuntu 64 位”,点击 “下一步”;

6. “虚拟机名称” 填写 “Rocky8.6-1”,“位置” 不用更改,点击 “下一步”;

7. “处理器数量” 下拉,选择 “2”,其它项不变,点击 “下一步“;

8. ”此虚拟机内存(M)“,填写 “2048” MB,点击 “下一步”;

9. “网络类型” 选择第二项 “使用网络地址转换(NAT)(E)”,点击 “下一步”;

10. “SCSI控制器” 选择第二项 “LSI Logic(L) ”,点击 “下一步”;

11. “虚拟磁盘类型” 选择第二项 “SCSI(S)”,点击 “下一步”;

12. “磁盘” 选择第一项 “创建新虚拟磁盘”,点击 “下一步”;

13. “最大磁盘大小 (GB)(S): ” 填写 “200”,不要勾选 “立即分配所有磁盘空间(A)”,下方选择 “将虚拟机 磁盘存储为单个文件(O)”,点击 “下一步”;

14. “磁盘文件”,文件名用默认 "Rocky8.6-1.vmdk",点击 “下一步”;

15. 点击 “完成”;

 

选择镜像


选择第一项


选择英语


 


 


 


 

选择国内源,加速安装过程

https://mirrors.tuna.tsinghua.edu.cn/ubuntu/


 


 


 


用户名:mage

主机名:ubuntu22

呢称:mage

登录密码:123456

确认密码:123456


 


选择安装openssh server


开始安装


安装完成,重启


登录界面


 

3. 结合man命令总结linux常用基本命令用法,以及查看帮助文档的方法。

 

linux常用命令:

  • 查看CPU  lscpu
  • 查看内存 free
  • 查看硬盘和分区 lsblk
  • 查看系统架构  arch
  • 查看内核版本 uname -r

   -r, --kernel-release   print the kernel release

 

  • 查看操作系统发行版本 

rocky查看:cat /etc/os-release

[root@ubuntu2204 ~]# cat /etc/issue

  • date

       date [OPTION]... [+FORMAT]

       date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]

FORMAT controls the output.  Interpreted sequences are:

  %F   full date; same as %Y-%m-%d

  %Y   year

    %m   month (01..12)

    %H   hour (00..23)

  • 显示硬件时钟  clock
  • 时区

[root@localhost ~]# ll /etc/localtime

lrwxrwxrwx. 1 root root 35 Mar 24 21:13 /etc/localtime -> ../usr/share/zoneinfo/Asia/Shanghai

 

设置时区:timedatectl set-timezone Asia/Shanghai

查看时区:timedatectl status

  • 日历

cal [options] [[[day] month] year]

cal [options] [timestamp|monthname]

 

[root@localhost ~]# cal 4 2024

     April 2024    

Su Mo Tu We Th Fr Sa

    1  2  3  4  5  6

 7  8  9 10 11 12 13

14 15 16 17 18 19 20

21 22 23 24 25 26 27

28 29 30 

 

 

  • 关机和重启

shutdown [OPTION]... [TIME] [MESSAGE]

shutdown #一分钟后关机

shutdown +10 #10分钟后关机

shutdown 01:02 #1点过两分关机

shutdown -r|--reboot #一分钟后重启

shutdown -r now #现在重启

shutdown -H|--halt #一分钟后调用halt 关机

shutdown -P|--poweroff #一分钟后调用poweroff 关机

shutdown -c #取消关机计划

  • 用户登录信息查看

whoami: 显示当前登录有效用户

#whoami 显示当前用户的用户名

#who am i 显示当前用户的用户名 终端 登录时间 来源IP

who: 系统当前所有的登录会话

w: 系统当前所有的登录会话及所做的操作

  • 会话管理
  • echo

echo 命令可以将后面跟的字符进行输出

功能:显示字符,echo会将输入的字符串送往标准输出。输出的字符串间以空白字符隔开, 并在最后加 上换行号

语法:

#echo: echo [-neE] [字符串]

-n  #输出完成后不换行

-e  #转义特定字符串

-E  #不转义,原样输出,默认选项

 

 

查看帮助文档的方法:

whatis 使用数据库来显示命令的简短描述,以及对应的man手册的章节 刚装完系统此命令不可用,其数据要进行初始化, 如果要立即使用,则可手动初始化

#CentOS 7 版本以后 mandb

 #CentOS 6 版本之前 makewhatis


 

 

 

 

(1)查看内部命令

help COMMAND

范例

#直接help,查看所有内部命令帮助


 

(2)外部命令帮助

  • COMMAND --help|-h

 

  • man COMMAND

man 是单词 manual 的简写,是Linux系统中的帮助手册和文档 man 是一个外部命令,基本质就是读取特定文件,进行输出,其读取的文件一般位于/usr/share/man/ 目录下 新安装一个软件或程序后,对应的man手册也会放到/usr/share/man/目录下

  • info COMMAND

 

 

4. 总结linux文件系统相关知识,并结合操作演示文件操作常见的命令

 

linux文件系统相关知识:

(1)文件系统的目录结构

  • 文件和目录被组织成一个单根倒置树结构
  • 文件系统从根目录下开始,用“/”表示
  • 根文件系统(rootfs):root filesystem
  • 标准Linux文件系统(如:ext4),文件名称大小写敏感,例如:MAIL, Mail, mail, mAiL
  • 以 . 开头的文件为隐藏文件
  • 路径分隔的 /
  • 文件名最长255个字节
  • 包括路径在内文件名称最长4095个字节
  • 蓝色-->目录 绿色-->可执行文件 红色-->压缩文件 浅蓝色-->链接文件 灰色-->其他文件
  • 除了斜杠和NUL,所有字符都有效,但使用特殊字符的目录名和文件不推荐使用,有些字符需要用引号来引用
  • 每个文件都有两类相关数据:元数据:metadata,即属性, 数据:data,即文件内容

(2)常见的文件系统目录功能

  • /bin #所有用户使用的基本命令;不能关联至独立分区,OS启动即会用到的程序
  • /sbin #管理类的基本命令;不能关联至独立分区,OS启动即会用到的程序     
  • /lib #启动时程序依赖的基本共享库文件以及内核模块文件(/lib/modules)
  • /lib64 #专用于x86_64系统上的辅助共享库文件存放位置
  • /etc #配置文件目录
  • /home/USERNAME #普通用户家目录
  • /root #管理员的家目录
  • /media #便携式移动设备挂载点
  • /mnt #临时文件系统挂载点
  • /dev #设备文件及特殊文件存储位置, b:block device,随机访问,c:character
  • device,线性访问
  • /opt #第三方应用程序的安装位置
  • /srv #系统上运行的服务用到的数据
  • /tmp #临时文件存储位置
  • /usr #universal shared, read-only data
  • /usr/bin #保证系统拥有完整功能而提供的应用程序
  • /usr/sbin #同上
  • /usr/lib #32位使用
  • /usr/lib64 #只存在64位系统
  • /usr/include #C程序的头文件(header files)
  • /usr/share #结构化独立的数据,例如doc, man等
  • /var #variable data files,可变数据目录
  • /var/cache #应用程序缓存数据目录
  • /var/lib #应用程序状态信息数据
  • /var/local #专用于为/usr/local下的应用程序存储可变数据
  • /var/lock #锁文件
  • /var/log #日志目录及文件
  • /var/opt #专用于为/opt下的应用程序存储可变数据
  • /var/run #运行中的进程相关数据,通常用于存储进程pid文件
  • /var/spool #应用程序数据池
  • /var/tmp #保存系统两次重启之间产生的临时数据
  • /proc #用于输出内核与进程信息相关的虚拟文件系统
  • /sys #用于输出当前系统上硬件设备相关信息虚拟文件系统
  • /selinux #security enhanced Linux,selinux相关的安全策略等信息的存储位置

(3)文件类型标识符

文件类型

文件类型

标识符

说明

普通文件

 

 

目录文件

d

directory

符号链接文件

l

link

块设备文件

b

block

字符设备文件

c

character

管道文件

p

pipe

套接字文件

s

socket

 

文件操作常见命令

(1)pwd

[root@localhost ~]# cd /data

[root@localhost data]# pwd

/data

(2)绝对路径 相对路径

  • 走绝对路径,从根出发

[root@localhost /]# cd /etc/sysconfig/network-scripts/

[root@localhost network-scripts]# pwd

/etc/sysconfig/network-scripts

[root@localhost network-scripts]#

  • 走相对路径,从当前目录出发

[root@localhost network-scripts]# cd ../../../root

[root@localhost ~]# pwd

/root

[root@localhost ~]#

(3)基名 目录名

  • 基名:basename,只取文件名而不要路径
  • 目录名:dirname,只取路径,不要文件名

[root@localhost ~]# basename /etc/sysconfig/network-scripts/ifcfg-ens33

ifcfg-ens33

[root@localhost ~]# dirname /etc/sysconfig/network-scripts/ifcfg-ens33

/etc/sysconfig/network-scripts

[root@localhost ~]#

(4)更改目录

[root@localhost ~]# cd /data

[root@localhost data]# pwd

/data

[root@localhost data]#

(5)列出目录内容

[root@localhost ~]# ls /data

a  aaa  b  dir1  f1  jordan  jordan1  lisi  lisi1  root1  test  x

[root@localhost ~]# ll /data

total 12

-rw-r--r--. 1 root   root    21 Apr  4 09:57 a

-rw-r--r--. 1 root   root     0 Apr  4 06:26 aaa

-rw-r--r--. 1 root   root    13 Apr  4 10:18 b

d---r-xr-x. 3 jordan jordan 172 Apr  3 16:13 dir1

[root@localhost ~]# ll -d /data

drwxrwxrwt. 4 root root 145 Apr  4 10:18 /data

(6)查看文件状态

一个文件有两部份信息:元数据和具体内容.

每个文件有三个时间戳属性:

atime  access time 读取文件内容时间

mtime modify time 修改内容时间

ctime change time 元数据发生变化时间

 

[root@localhost ~]# stat /etc/fstab

  File: /etc/fstab

  Size: 655               Blocks: 8          IO Block: 4096   regular file

Device: fd00h/64768d        Inode: 134289539   Links: 1

Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)

Context: system_u:object_r:etc_t:s0

Access: 2024-04-04 04:37:47.486018213 +0800

Modify: 2024-03-24 20:49:03.582706186 +0800

Change: 2024-03-24 21:08:33.305311289 +0800

 Birth: 2024-03-24 20:49:03.581706085 +0800

[root@localhost ~]#

 

[root@localhost ~]# stat /

  File: /

  Size: 248               Blocks: 0          IO Block: 4096   directory

Device: fd00h/64768d        Inode: 128         Links: 19

Access: (0555/dr-xr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)

Context: system_u:object_r:root_t:s0

Access: 2024-04-04 15:56:47.198779671 +0800

Modify: 2024-04-04 06:09:00.105189971 +0800

Change: 2024-04-04 06:09:00.105189971 +0800

 Birth: 2024-03-24 20

(7)确定文件内容

文件可以包含多种类型的数据,使用file命令检查文件的类型,然后确定适当的打开命令或应用程序使用

[root@localhost ~]# file /

/: directory

[root@localhost ~]#

(8)创建空文件和刷新时间

[root@localhost ~]# ll /etc/issue

-rw-r--r--. 1 root root 23 Mar 30  2022 /etc/issue

[root@localhost ~]# touch /etc/issue

[root@localhost ~]# ll /etc/issue

-rw-r--r--. 1 root root 23 Apr  4 22:10 /etc/issue

[root@localhost ~]#

 

[root@localhost ~]# touch f1

[root@localhost ~]# ll f1

-rw-r--r--. 1 root root 0 Apr  4 22:11 f1

[root@localhost ~]#

(9)复制文件和目录

#复制文件

[root@localhost ~]# cp /etc/issue /data/dir2

[root@localhost ~]# ll /data/dir2

total 4

-rw-r--r--. 1 root root 23 Apr  5 05:28 issue

#复制目录

[root@localhost ~]# cp -r /etc /data/dir2

[root@localhost ~]# ll /data/dir2

total 16

drwxr-xr-x. 141 root root 8192 Apr  5 05:29 etc

-rw-r--r--.   1 root root   23 Apr  5 05:28 issue

[root@localhost ~]#

#备份,并询问是否覆盖

[root@localhost dir2]# cp -b a1.txt a2.txt

cp: overwrite 'a2.txt'? y

[root@localhost dir2]# ll

total 16

-rw-r--r--.   1 root root    0 Apr  5 05:34 a1.txt

-rw-r--r--.   1 root root    0 Apr  5 05:34 a2.txt

-rw-r--r--.   1 root root    0 Apr  5 05:34 a2.txt~

-rw-r--r--.   1 root root    0 Apr  5 05:34 a3.txt

drwxr-xr-x. 141 root root 8192 Apr  5 05:29 etc

-rw-r--r--.   1 root root   23 Apr  5 05:28 issue

[root@localhost dir2]#

#复制特殊文件要加-a项

(10)移动和重命名文件

mv 命令可以实现文件或目录的移动和改名

同一分区移动数据,速度很快,数据位置没有变化

不同分区移动数据,速度相对慢,数据位置发生了变化

#移动文件

[root@localhost dir]# mv a.txt a1.txt

[root@localhost dir]# ll

total 0

-rw-r--r--. 1 root root 0 Apr  5 05:45 a1.txt

-rw-r--r--. 1 root root 0 Apr  5 05:44 b.txt

[root@localhost dir]#

#移动前备份

[root@localhost dir]# mv -b b.txt a1.txt

mv: overwrite 'a1.txt'? y

[root@localhost dir]# ll

total 0

-rw-r--r--. 1 root root 0 Apr  5 05:44 a1.txt

-rw-r--r--. 1 root root 0 Apr  5 05:45 a1.txt~

[root@localhost dir]#

#移动目录

[root@localhost data]# mv dir2 dir

[root@localhost data]# ll dir

total 0

-rw-r--r--. 1 root   root    0 Apr  5 05:44 a1.txt

-rw-r--r--. 1 root   root    0 Apr  5 05:45 a1.txt~

d--xrwx--x. 4 jordan jordan 56 Apr  5 05:42 dir2

[root@localhost data]#

(11)批量修改文件名

Usage:

 rename [options] <expression> <replacement> <file>...

#去掉所有的bak后缀

[root@rocky86 ~]# rename '.bak' '' *.bak

(12)删除文件

格式:rm [OPTION]... [FILE]...

#常用选项

-i #删除前确认

-f|--force #不确认直接删除

-r|-R|--recursive #递归删除

-d|--dir #删除空目录

--no-preserve-root #强删根

#删除所有以a开头的文件 [root@ubuntu2204 ~]# rm -f a*

#删除当前目录下所有内容 [root@ubuntu2204 ~]# rm -rf *

#删除特殊文件 [root@ubuntu2204 0508]#rm -rf ./-f

(13)目录操作显示目录树

#仅显示2层目录

[root@ubuntu2204 ~]# tree -d -L 2 /

(14)创建目录

#创建目录[root@ubuntu2204 ~]# mkdir dira

#指定权限 [root@ubuntu2204 ~]# mkdir -m=777 dir

 

5. 总结linux安全模型

(1)用户

Linux系统是多用户系统,可以同时存在多个用户,每个用户之间都是互相隔离的。 在Linux系统中,每个用户是通过User Id (UID)来唯一标识的.

管理员:root ,0

普通用户:1-60000 自动分配

系统用户:1-499 (CentOS 6以前), 1-999 (CentOS 7以后) 对守护进程获取资源进行权限分配。

登录用户:500+ (CentOS6以前), 1000+(CentOS7以后) 给用户进行交互式登录使用。

(2)用户组

Linux中可以将一个或多个用户加入用户组中,组就是包含0个或多个用户的集合,用户组是通过Group ID(GID) 来唯一标识的。

管理员组:root, 0

普通组: 系统组:1-499(CentOS 6以前), 1-999(CentOS7以后), 对守护进程获取资源进行权限分配

普通组:500+(CentOS 6以前), 1000+(CentOS7以后), 给用户使用.

(3)用户和组的关系

一个用户至少有一个组,也可以有多个组;

一个组至少有0个用户,也可以有多个用户;

用户的主要组(primary group):又称私有组,一个用户必须属于且只有一个主组,创建用户时,

默认会创建与其同名的组作为主组;

用户的附加组(supplementary group):又称辅助组,一个用户可以属于0个或多个附加组;

使用组,可以对用户进行批量管理,比如对一个组授权,则该组下所有的用户能能继承这个组的权限

(4)安全上下文

Linux安全上下文Context: 在Linux系统中,运行中的程序(即进程process),都是以进程发起者的身份运行; 进程所能够访问的资源权限取决于进程的运行者的身份。

 

首先,什么是程序 一个程序或一个命令,本质上也是一个可执行的二进制文件或一个可执行的脚本文件; 在服务器上有很多文件,只有那些特定的,可以被执行的二进制文件,才能被称为程序;

 

其次,什么是进程 运行中的程序,就是进程;

 

第三,程序,进程,用户之间的关系是怎样的 只有可以被执行的文件,才能叫作程序; 对于同一个程序,也不是所有用户都可以运行的,这要取决于当前用户对该程序有没有可执行权限; 用户张三,运行了某个程序,那么,张三就发起了一个进程,该进程的发起者,就是张三,该进程是以 张三的身份在运行;

 

第四,进程的访问资源 一个进程能不能访问某些资源,是由进程发起者决定的(跟进程本身的程序文件无关),比如某进程要 读写某个文件,则要看该进程发起者有没有权限读取该文件;

 

6. 总结学过的权限,属性及ACL相关命令及选项,示例。

对文件来讲,系统中的用户,分属于三类不同的角色,分别是属主,属组,其它用户; 而每个角色用户,对该文件的权限,也分三种,分别是读,写,执行;

 

三种角色

属主:所有者 owner|OWNER|user u

属组:属于哪个组 group|GROUP g

其它用户:不是所有者,也不在属组中的用户 other|OTHER o

 

三种权限

读  r 4

写 w 2

执行 x 1

 

程序访问文件时的权限,取决于此程序的发起者

进程的发起者,同文件的属主:则应用文件属主权限

进程的发起者,属于文件属组;则应用文件属组权限

应用文件“其它”权限

 

相关命令

(1)chown 命令可以修改文件的属主,也可以修改文件属组

[root@localhost dir]# chown jordan a1.txt    #只修改属主

[root@localhost dir]# chown jordan. a2.txt   #同时修改属主和属组

[root@localhost dir]# chown jordan: a3.txt   #同时修改属主和属组

[root@localhost dir]# ll

total 0

-rw-r--r--. 1 jordan root    0 Apr  5 06:36 a1.txt

-rw-r--r--. 1 jordan jordan  0 Apr  5 06:36 a2.txt

-rw-r--r--. 1 jordan jordan  0 Apr  5 06:36 a3.txt

d--xrwx--x. 4 jordan jordan 56 Apr  5 05:42 dir2

[root@localhost dir]#

 

#只修改属组

[root@localhost dir]# chown .lisi a1.txt

[root@localhost dir]# ll

total 0

-rw-r--r--. 1 jordan lisi    0 Apr  5 06:36 a1.txt

-rw-r--r--. 1 jordan jordan  0 Apr  5 06:36 a2.txt

-rw-r--r--. 1 jordan jordan  0 Apr  5 06:36 a3.txt

d--xrwx--x. 4 jordan jordan 56 Apr  5 05:42 dir2

[root@localhost dir]#

 

(2)文件权限说明

角色

在命令中的字符

备注

owner

u

属主

group

g

属组

other

o

其他用户

all

a

所有人,包括属主 属组 其他用户

 

权限表示方法

权限

在命令中的字符

八进制数字表示

备注

Readable

r

4

读权限

Writable

w

2

写权限

eXcutable

x

1

执行权限

 

 

 

常用写法

+r      #属主加读权限

g-x     #属组去掉执行权限

ug=rx   #属主属组权限改为读和执行

o=     #other用户无任何权限  

a=rwx   #所有用户都有读写执行权限

 

注意:

用户的最终权限,是从左向右进行顺序匹配,即,所有者,所属组,其他人,一旦匹配权限立即生

效,不再向右查看其权限

r和w权限对root 用户无效,对没有读写权限的文件,root用户也可读可写

只要所有者,所属组或other三者之一有x权限,root就可以执行

 

权限作用

权限

对文件

对目录

r

可查看文件内容

可读取目录中的文件名,但文件元数据无法查看

w

可修改文件内容

可在目录中创建文件和删除文件

x

可执行,发起为一个 进程

可进入目录,可查看文件元数据,可查看文件内容,属于目录 最小权限

 

修改文件权限

chmod [OPTION]... MODE[,MODE]... FILE...

chmod [OPTION]... OCTAL-MODE FILE...

chmod [OPTION]... --reference=RFILE FILE...

 

[root@localhost dir]# chmod u+w,g+w,o+w a1.txt

[root@localhost dir]# chmod u=r,g=r,o=rw a2.txt

[root@localhost dir]# chmod a= a3.txt

[root@localhost dir]# chmod a=rwx a3.txt

[root@localhost dir]# ll

total 0

-rw-rw-rw-. 1 jordan lisi    0 Apr  5 06:36 a1.txt

-r--r--rw-. 1 jordan jordan  0 Apr  5 06:36 a2.txt

-rwxrwxrwx. 1 jordan jordan  0 Apr  5 06:36 a3.txt

d--xrwx--x. 4 jordan jordan 56 Apr  5 05:42 dir2

[root@localhost dir]#

 

(3)新建文件和目录默认权限

在linux 系统中,新建文件或目录,都有一个默认权限; umask 值间接影响新建文件和新建目录的权限:

新建文件:666-umask,按位对应相减,如果所得结果某位存在执行(奇数)权限,则该位+1;

新建目录:777-umask

 

#查看umask

[root@localhost ~]# umask

0022

[root@localhost ~]# su - jordan

[jordan@localhost ~]$ umask

0002

[jordan@localhost ~]$

 

(4)特殊权限

在Linux中,除了rwx 这三种常⻅的权限之外,还有三个特殊权限,分别是 SUID, SGID,Sticky;这三 个特殊权限独⽴于rwx权限体系。

SUID:作用于二进制可执行文件上,用户将继承此程序所有者的权限;

SGID:作用于二进制可执行文件上,用户将继承此程序所有组的权限;作用于目录上,此目录中新建的文件的所属组将自动从此目录继承;

STICKY:作用于目录上,此目录中的文件只能由所有者自已来删除

 

特殊权限SUID

前提:进程有属主和属组;文件有属主和属组

任何一个可执行程序文件能不能启动为进程,取决发起者对程序文件是否拥有执行权限

启动为进程之后,其进程的属主为发起者,进程的属组为发起者所属的组

进程访问文件时的权限,取决于进程的发起者

二进制的可执行文件上SUID权限功能:

任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限

启动为进程之后,其进程的属主为原程序文件的属主

SUID只对二进制可执行程序有效

SUID设置在目录上无意义

SUID权限设定:

chmod u+s FILE...

chmod 4xxx FILE

chmod u-s FILE...

 

特殊权限SGID

  • 二进制的可执行文件上SGID权限功能: 任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限 启动为进程之后,其进程的属组为原程序文件的属组。
  • SGID权限设定:

chmod g+s FILE...

chmod 2xxx FILE

chmod g-s FILE...

  •  目录上的SGID权限功能:

默认情况下,用户创建文件时,其属组为此用户所属的主组,一旦某目录被设定了SGID,则对此目录有 写权限的用户在此目录中创建的文件所属的组为此目录的属组,通常用于创建一个协作目录

  • SGID权限设定:

chmod g+s DIR...

chmod 2xxx DIR

chmod g-s DIR...

 

特殊权限 Sticky 位

  • 具有写权限的目录通常用户可以删除该目录中的任何文件,无论该文件的权限或拥有权
  • 在目录设置Sticky 位,只有文件的所有者或root可以删除该文件
  • sticky 设置在文件上无意义
  • Sticky权限设定:

chmod o+t DIR...

chmod 1xxx DIR

chmod o-t DIR...

 

(5)设定文件特殊属性

  • 格式:

chattr [-pRVf] [-+=aAcCdDeijPsStTuF] [-v version] files...

#常用选项

-p project #设置文件项目编号

-R     #递归执行

-V     #显示过程,并输出chattr 版本

-f     #不输出错误信息

-v version #设置版本

 

  • #操作符

+attribute #添加该属性

-attribute #去掉该属性

=attribute #仅有该属性

 

  • #常用属性

a #对文件:可追加内容,不可被删除,不可被修改,不可被重命名;对目录,可新建,修

改文件,但不可删除文件

A #不更新atime,节省IO

c #文件会被压缩保存

i #对文件:不可被删除不可被修改不可重命名;对目录:可修改查看目录中的文件,不可

新建文件,不可删除文件

s #彻底删除文件,用0填充原来的数据块

u #防止误删除,这里是指原来存储该文件的块不会被新的数据覆盖

 

  • 显示文件特殊属性

lsattr [-RVadlpv] [files...]

 

  • 范例

[root@localhost data]# touch a.txt

[root@localhost data]# echo hello > a.txt

[root@localhost data]# chattr +i a.txt

[root@localhost data]# ll a.txt

-rw-r--r--. 1 root root 6 Apr  5 14:07 a.txt

[root@localhost data]# lsattr a.txt

----i--------------- a.txt

[root@localhost data]# rm -f a.txt

rm: cannot remove 'a.txt': Operation not permitted

 

(6)访问控制列表(ACL)

  • ACL权限功能

rwx 权限体系中,仅仅只能将用户分成三种角色,如果要对单独用户设置额外的权限,则无法完成; 而ACL可以单独对指定的用户设定各不相同的权限;提供颗粒度更细的权限控制。

CentOS7 默认创建的xfs和ext4文件系统具有ACL功能,CentOS7 之前版本,默认手工创建的ext4文件系统无ACL功能,需手动增加。

  • ACL生效顺序:

所有者,自定义用户,所属组,自定义组,其他人

  • ACL命令:

setfacl 可设置ACL权限

getfacl 可查看设置的ACL权限

格式:

setfacl [-bkndRLPvh] [{-m|-x} acl_spec] [{-M|-X} acl_file] file ..

#常用选项

-m|--modify=acl         #修改acl权限

-M|--modify-file=file #从文件读取规则

-x|--remove=acl         #删除文件acl 权限

-X|--remove-file=file #从文件读取规则

-b|--remove-all         #删除文件所有acl权限

-k|--remove-default     #删除默认acl规则

--set=acl               #用新规则替换旧规则,会删除原有ACL项,用新的替代,一定要包含

UGO的设置,不能象 -m一样只有 ACL

--set-file=file         #从文件读取新规则

--mask                #重新计算mask值

-n|--no-mask           #不重新计算mask值

-d|--default           #在目录上设置默认acl

-R|--recursive         #递归执行

-L|--logical           #将acl 应用在软链接指向的目标文件上,与-R一起使用

-P|--physical         #将acl 不应用在软链接指向的目标文件上,与-R一起使用

范例:

[root@localhost data]# echo "abcd" > f1

[root@localhost data]# ll f1

-rw-r--r--. 1 root root 5 Apr  5 14:19 f1

[root@localhost data]# su - jordan -c "cat /data/f1"

abcd

#无ACL设置

[root@localhost data]# getfacl f1

# file: f1

# owner: root

# group: root

user::rw-

group::r--

other::r--

#设置Jordan无任何权限

[root@localhost data]# setfacl -m u:jordan:- f1

[root@localhost data]# getfacl f1

# file: f1

# owner: root

# group: root

user::rw-

user:jordan:---

group::r--

mask::r--

other::r--

#jordan已经不可读

[root@localhost data]# su - jordan -c "cat /data/f1"

cat: /data/f1: Permission denied

[root@localhost data]#

#查看文件,多了一个+

[root@localhost data]# ll f1

-rw-r--r--+ 1 root root 5 Apr  5 14:19 f1

[root@localhost data]#

#移除ACL

[root@localhost data]# setfacl -b f1

[root@localhost data]# ll f1

-rw-r--r--. 1 root root 5 Apr  5 14:19 f1

[root@localhost data]#

7. 结合vim几种模式,学会使用vim几个常见操作。

1)如何打开文件。并在打开文件(命令模式)之后如何退出文件。

  • 打开文件: [root@localhost data]# vim f1
  • 退出文件: 命令模式 :q! 或 :wq

 

2)打开文件(命令模式)之后,进入插入模式。并在插入模式中如何回到打开文件的状态(命令模式),并在命令模式之后如何退出文件。

按ESC键回到命令模式,并在命令模式输入:q!或:wq退出文件

3)打开文件(命令模式)之后,进入插入模式,编写一段话,"马哥出品,必属精品", 之后从插入模式中如何回到打开文件的状态(命令模式),并在命令模式之后如何退出文件。

按ESC键回到命令模式,并在命令模式输入:q!或:wq退出文件

4)使用cat命令验证文件内容,是刚刚自己写的内容。

[root@localhost data]# cat f1

马哥出品,必属精品

[root@localhost data]#

 

5)(可选),命令模式下,光标在单词,句子上进行前后,上下跳转。行复制粘贴。行删除。

  • 单词间跳转

w #下一个单词的词首

b #当前或前一个单词词首

  • 行首行尾跳转

^ #跳转至行首的第一个非空白字符

$ #跳转至行尾

  • 句间移动

) #下一句

( #上一句

  • 行复制

y #复制

y$ #复制光标处到行尾

y^ #复制光标出到非空行首

  • 粘贴

p  #粘贴光标后面

P #粘贴光标前面

  • 行删除

dw

db

d^

d$

dd